From 92de58f3df4cf953dbd6df9e3e64ddcc87742822 Mon Sep 17 00:00:00 2001 From: AurelienFT Date: Tue, 19 Dec 2023 11:31:18 +0100 Subject: [PATCH] First version of the trie --- .github/workflows/check_lint.yml | 55 + .github/workflows/test.yml | 58 + .gitignore | 4 + Cargo.lock | 4014 ++ Cargo.toml | 31 + README.md | 3 + documentation/README.md | 27 + documentation/custom.css | 4 + ...b1eaba80715f19ac2fe8bdc300207451cc5ff6.svg | 1 + ...83fb6dbf7a68b32a4e08d8433702ae13654c0c.svg | 1 + ...dcd0f9578667b8bf8b82556290e45892408959.svg | 1 + ...d0aa6e31cd7489ed9589bc023fcb15a00af173.svg | 1 + ...5b4325dcadca53ea97668496acd073f12f5ee9.svg | 1 + ...b3052c7b472581cd02c8044ecd121d6364c9b9.svg | 1 + ...8e6f3b627045a14f653fb7a9c9bf006e5f2023.svg | 1 + ...47a469e34cb206aef77e92cf30cc7e2b295773.svg | 1 + documentation/package-lock.json | 1609 + documentation/package.json | 18 + documentation/specification.adoc | 437 + documentation/specification.html | 35811 ++++++++++++++++ documentation/specification.pdf | Bin 0 -> 689412 bytes src/bonsai_database.rs | 92 + src/changes.rs | 155 + src/databases/hashmap_db.rs | 136 + src/databases/mod.rs | 6 + src/databases/rocks_db.rs | 495 + src/error.rs | 14 + src/id.rs | 40 + src/key_value_db.rs | 280 + src/lib.rs | 325 + src/tests/madara_comparison.rs | 40 + src/tests/mod.rs | 4 + src/tests/simple.rs | 65 + src/tests/transactional_state.rs | 384 + src/tests/trie_log.rs | 194 + src/trie/merkle_node.rs | 219 + src/trie/merkle_tree.rs | 1148 + src/trie/mod.rs | 5 + src/trie/trie_db.rs | 36 + 39 files changed, 45717 insertions(+) create mode 100644 .github/workflows/check_lint.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 documentation/README.md create mode 100644 documentation/custom.css create mode 100644 documentation/diag-24b1eaba80715f19ac2fe8bdc300207451cc5ff6.svg create mode 100644 documentation/diag-3083fb6dbf7a68b32a4e08d8433702ae13654c0c.svg create mode 100644 documentation/diag-34dcd0f9578667b8bf8b82556290e45892408959.svg create mode 100644 documentation/diag-36d0aa6e31cd7489ed9589bc023fcb15a00af173.svg create mode 100644 documentation/diag-435b4325dcadca53ea97668496acd073f12f5ee9.svg create mode 100644 documentation/diag-4db3052c7b472581cd02c8044ecd121d6364c9b9.svg create mode 100644 documentation/diag-cd8e6f3b627045a14f653fb7a9c9bf006e5f2023.svg create mode 100644 documentation/diag-ed47a469e34cb206aef77e92cf30cc7e2b295773.svg create mode 100644 documentation/package-lock.json create mode 100644 documentation/package.json create mode 100644 documentation/specification.adoc create mode 100644 documentation/specification.html create mode 100644 documentation/specification.pdf create mode 100644 src/bonsai_database.rs create mode 100644 src/changes.rs create mode 100644 src/databases/hashmap_db.rs create mode 100644 src/databases/mod.rs create mode 100644 src/databases/rocks_db.rs create mode 100644 src/error.rs create mode 100644 src/id.rs create mode 100644 src/key_value_db.rs create mode 100644 src/lib.rs create mode 100644 src/tests/madara_comparison.rs create mode 100644 src/tests/mod.rs create mode 100644 src/tests/simple.rs create mode 100644 src/tests/transactional_state.rs create mode 100644 src/tests/trie_log.rs create mode 100644 src/trie/merkle_node.rs create mode 100644 src/trie/merkle_tree.rs create mode 100644 src/trie/mod.rs create mode 100644 src/trie/trie_db.rs diff --git a/.github/workflows/check_lint.yml b/.github/workflows/check_lint.yml new file mode 100644 index 0000000..4fe0334 --- /dev/null +++ b/.github/workflows/check_lint.yml @@ -0,0 +1,55 @@ +on: + pull_request: + push: + branches: + - main + + +name: Check and Lint + +jobs: + check: + name: Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - uses: actions-rs/cargo@v1 + with: + command: check + + fmt: + name: Rustfmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - run: rustup component add rustfmt + - uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + name: Clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + components: clippy + override: true + - uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features + name: Clippy Output \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..ac8ee32 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,58 @@ +on: + pull_request: + push: + branches: + - main + +name: Test with Code Coverage + +jobs: + test: + name: Test + env: + PROJECT_NAME_UNDERSCORE: bonsai_storage + CARGO_INCREMENTAL: 0 + RUSTFLAGS: -Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort + RUSTDOCFLAGS: -Cpanic=abort + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: nightly + override: true + - name: Cache dependencies + uses: actions/cache@v2 + env: + cache-name: cache-dependencies + with: + path: | + ~/.cargo/.crates.toml + ~/.cargo/.crates2.json + ~/.cargo/bin + ~/.cargo/registry/index + ~/.cargo/registry/cache + target + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('Cargo.lock') }} + - name: Generate test result and coverage report + run: | + cargo install cargo2junit grcov; + cargo test $CARGO_OPTIONS -- -Z unstable-options --format json | cargo2junit > results.xml; + tree; + zip -0 ccov.zip `find . \( -name "$PROJECT_NAME_UNDERSCORE*.gc*" \) -print`; + grcov ccov.zip -s . -t lcov --llvm --ignore-not-existing --ignore "/*" --ignore "tests/*" -o lcov.info; + - name: Upload test results + uses: EnricoMi/publish-unit-test-result-action@v1 + with: + check_name: Test Results + github_token: ${{ secrets.GITHUB_TOKEN }} + files: results.xml + # Uncomment when open source + # - name: Upload to CodeCov + # uses: codecov/codecov-action@v1 + # with: + # # required for private repositories: + # # token: ${{ secrets.CODECOV_TOKEN }} + # files: ./lcov.info + # fail_ci_if_error: true \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b1dec57 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +target/ +rocksdb/ +.vscode/ +documentation/node_modules/ \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..e4606c9 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4014 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.7.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +dependencies = [ + "getrandom 0.2.11", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +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 = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "ark-bls12-377" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-bls12-381" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", +] + +[[package]] +name = "ark-ec" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" +dependencies = [ + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "derivative", + "hashbrown 0.13.2", + "itertools", + "num-traits", + "zeroize", +] + +[[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", + "ark-std", +] + +[[package]] +name = "ark-ff" +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", + "derivative", + "digest 0.10.7", + "itertools", + "num-bigint", + "num-traits", + "paste", + "rustc_version", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565" +dependencies = [ + "num-bigint", + "num-traits", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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", + "derivative", + "hashbrown 0.13.2", +] + +[[package]] +name = "ark-scale" +version = "0.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51bd73bb6ddb72630987d37fa963e99196896c0d0ea81b7c894567e74a2f83af" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "parity-scale-codec", + "scale-info", +] + +[[package]] +name = "ark-secp256k1" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c02e954eaeb4ddb29613fee20840c2bbc85ca4396d53e33837e11905363c5f2" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-std", +] + +[[package]] +name = "ark-secret-scalar" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=4b09416#4b09416fd23383ec436ddac127d58c7b7cd392c6" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-std", + "ark-transcript", + "digest 0.10.7", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-serialize-derive", + "ark-std", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-serialize-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-std" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "ark-transcript" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=4b09416#4b09416fd23383ec436ddac127d58c7b7cd392c6" +dependencies = [ + "ark-ff", + "ark-serialize", + "ark-std", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "array-bytes" +version = "6.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bandersnatch_vrfs" +version = "0.0.1" +source = "git+https://github.com/w3f/ring-vrf?rev=4b09416#4b09416fd23383ec436ddac127d58c7b7cd392c6" +dependencies = [ + "ark-bls12-381", + "ark-ec", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff", + "ark-serialize", + "ark-std", + "dleq_vrf", + "fflonk", + "merlin 3.0.0", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "ring", + "sha2 0.10.8", + "zeroize", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bincode" +version = "2.0.0-rc.3" +source = "git+https://github.com/bincode-org/bincode.git?tag=v2.0.0-rc.3#aada4bb4cb457677a4b8e47572ae7ca8dd44927c" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.65.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.40", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "blake2b_simd" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780" +dependencies = [ + "arrayref", + "arrayvec 0.7.4", + "constant_time_eq", +] + +[[package]] +name = "block-buffer" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +dependencies = [ + "block-padding", + "byte-tools", + "byteorder", + "generic-array 0.12.4", +] + +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "block-padding" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +dependencies = [ + "byte-tools", +] + +[[package]] +name = "blockifier" +version = "0.1.0-rc2" +source = "git+https://github.com/keep-starknet-strange/blockifier?branch=no_std-support-7578442#e7a85edd7078eb25f3f56d82d45be56d617ccc85" +dependencies = [ + "ark-ff", + "ark-secp256k1", + "cached", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-casm-contract-class", + "cairo-lang-utils", + "cairo-lang-vm-utils", + "cairo-vm", + "derive_more", + "hashbrown 0.14.3", + "indexmap 2.0.0-pre", + "itertools", + "keccak", + "lazy_static", + "log", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "phf", + "scale-info", + "serde", + "serde_json", + "sha3", + "sp-arithmetic", + "spin 0.9.8", + "starknet-crypto", + "starknet_api", + "strum", + "strum_macros", + "thiserror-no-std", +] + +[[package]] +name = "bonsai-trie" +version = "0.1.0" +dependencies = [ + "bincode 1.3.3", + "bitvec", + "derive_more", + "env_logger", + "log", + "lru 0.12.1", + "mp-commitments", + "mp-felt", + "mp-hashers", + "mp-transactions", + "parity-scale-codec", + "parking_lot", + "rand 0.8.5", + "rocksdb", + "rustc-hex", + "serde", + "smallvec", + "tempfile", +] + +[[package]] +name = "bounded-collections" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd" +dependencies = [ + "log", + "parity-scale-codec", + "scale-info", + "serde", +] + +[[package]] +name = "bs58" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "byte-slice-cast" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0c" + +[[package]] +name = "byte-tools" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cached" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b195e4fbc4b6862bbd065b991a34750399c119797efff72492f28a5864de8700" +dependencies = [ + "hashbrown 0.13.2", + "instant", + "once_cell", + "thiserror", +] + +[[package]] +name = "cairo-felt" +version = "0.8.5" +source = "git+https://github.com/keep-starknet-strange/cairo-rs?branch=no_std-support-21eff70#53dfed63ce010e9de8fb39e31f96b3034682762d" +dependencies = [ + "lazy_static", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "serde", +] + +[[package]] +name = "cairo-lang-casm" +version = "2.1.0" +source = "git+https://github.com/keep-starknet-strange/cairo.git?branch=no_std-support-8bbf530#f8b5fe438e0d201b7d1afb39c21d343ff95b5850" +dependencies = [ + "cairo-lang-utils", + "hashbrown 0.14.3", + "indoc", + "num-bigint", + "num-traits", + "parity-scale-codec", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "cairo-lang-casm-contract-class" +version = "2.1.0" +source = "git+https://github.com/keep-starknet-strange/cairo.git?branch=no_std-support-8bbf530#f8b5fe438e0d201b7d1afb39c21d343ff95b5850" +dependencies = [ + "cairo-lang-casm", + "cairo-lang-utils", + "itertools", + "num-bigint", + "serde", +] + +[[package]] +name = "cairo-lang-utils" +version = "2.1.0" +source = "git+https://github.com/keep-starknet-strange/cairo.git?branch=no_std-support-8bbf530#f8b5fe438e0d201b7d1afb39c21d343ff95b5850" +dependencies = [ + "cairo-felt", + "hashbrown 0.14.3", + "indexmap 2.0.0-pre", + "itertools", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "serde", +] + +[[package]] +name = "cairo-lang-vm-utils" +version = "2.1.0" +source = "git+https://github.com/keep-starknet-strange/cairo.git?branch=no_std-support-8bbf530#f8b5fe438e0d201b7d1afb39c21d343ff95b5850" +dependencies = [ + "ark-ff", + "ark-std", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-utils", + "cairo-vm", + "hashbrown 0.14.3", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "cairo-take_until_unbalanced" +version = "0.29.0" +source = "git+https://github.com/keep-starknet-strange/cairo-rs?branch=no_std-support-21eff70#53dfed63ce010e9de8fb39e31f96b3034682762d" +dependencies = [ + "nom", +] + +[[package]] +name = "cairo-vm" +version = "0.8.5" +source = "git+https://github.com/keep-starknet-strange/cairo-rs?branch=no_std-support-21eff70#53dfed63ce010e9de8fb39e31f96b3034682762d" +dependencies = [ + "anyhow", + "ark-ff", + "ark-std", + "bincode 2.0.0-rc.3", + "bitvec", + "cairo-felt", + "cairo-lang-casm", + "cairo-lang-casm-contract-class", + "cairo-take_until_unbalanced", + "generic-array 0.14.7", + "hashbrown 0.14.3", + "hex", + "keccak", + "lazy_static", + "nom", + "num-bigint", + "num-integer", + "num-prime", + "num-traits", + "parity-scale-codec", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "sha3", + "starknet-crypto", + "thiserror-no-std", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.48.5", +] + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "common" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "fflonk", + "getrandom_or_panic", + "merlin 3.0.0", + "rand_chacha 0.3.1", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constcat" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "cranelift-entity" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0" +dependencies = [ + "serde", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array 0.14.7", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array 0.14.7", + "typenum", +] + +[[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", +] + +[[package]] +name = "curve25519-dalek" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216" +dependencies = [ + "byteorder", + "digest 0.8.1", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61" +dependencies = [ + "byteorder", + "digest 0.9.0", + "rand_core 0.5.1", + "subtle", + "zeroize", +] + +[[package]] +name = "darling" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.40", +] + +[[package]] +name = "darling_macro" +version = "0.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +dependencies = [ + "generic-array 0.12.4", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array 0.14.7", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer 0.10.4", + "crypto-common", + "subtle", +] + +[[package]] +name = "dleq_vrf" +version = "0.0.2" +source = "git+https://github.com/w3f/ring-vrf?rev=4b09416#4b09416fd23383ec436ddac127d58c7b7cd392c6" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-scale", + "ark-secret-scalar", + "ark-serialize", + "ark-std", + "ark-transcript", + "arrayvec 0.7.4", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "dyn-clonable" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4" +dependencies = [ + "dyn-clonable-impl", + "dyn-clone", +] + +[[package]] +name = "dyn-clonable-impl" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[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", + "zeroize", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "env_logger" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece" +dependencies = [ + "humantime", + "is-terminal", + "log", + "regex", + "termcolor", +] + +[[package]] +name = "environmental" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15b" + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "fake-simd" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fflonk" +version = "0.1.0" +source = "git+https://github.com/w3f/fflonk#1e854f35e9a65d08b11a86291405cdc95baa0a35" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "merlin 3.0.0", +] + +[[package]] +name = "fixed-hash" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534" +dependencies = [ + "byteorder", + "rand 0.8.5", + "rustc-hex", + "static_assertions", +] + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-executor" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", + "num_cpus", +] + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-macro" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "futures-sink" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" + +[[package]] +name = "futures-task" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" + +[[package]] +name = "futures-util" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +dependencies = [ + "typenum", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.9.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom_or_panic" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "hash-db" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4" + +[[package]] +name = "hash256-std-hasher" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.7", +] + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash 0.8.6", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash 0.8.6", + "allocator-api2", + "serde", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "impl-codec" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2f" +dependencies = [ + "parity-scale-codec", +] + +[[package]] +name = "impl-serde" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" +dependencies = [ + "serde", +] + +[[package]] +name = "impl-trait-for-tuples" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.0.0-pre" +source = "git+https://github.com/bluss/indexmap?rev=ca5f848e10c31e80aeaad0720d14aa2f6dd6cfb1#ca5f848e10c31e80aeaad0720d14aa2f6dd6cfb1" +dependencies = [ + "hashbrown 0.13.2", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "indoc" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-sqrt" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770" +dependencies = [ + "num-traits", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.28", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keccak" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +dependencies = [ + "spin 0.5.2", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "librocksdb-sys" +version = "0.11.0+8.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e" +dependencies = [ + "bindgen", + "bzip2-sys", + "cc", + "glob", + "libc", + "libz-sys", + "lz4-sys", + "zstd-sys", +] + +[[package]] +name = "libsecp256k1" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1" +dependencies = [ + "arrayref", + "base64 0.13.1", + "digest 0.9.0", + "libsecp256k1-core", + "libsecp256k1-gen-ecmult", + "libsecp256k1-gen-genmult", + "rand 0.8.5", + "serde", + "sha2 0.9.9", +] + +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core", +] + +[[package]] +name = "libz-sys" +version = "1.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "lru" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999beba7b6e8345721bd280141ed958096a2e4abdf74f67ff4ce49b4b54e47a" +dependencies = [ + "hashbrown 0.12.3", +] + +[[package]] +name = "lru" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[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 = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memfd" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64" +dependencies = [ + "rustix 0.38.28", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "merlin" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", +] + +[[package]] +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + +[[package]] +name = "mp-commitments" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "bitvec", + "derive_more", + "mp-felt", + "mp-hashers", + "mp-transactions", + "starknet-crypto", + "starknet_api", +] + +[[package]] +name = "mp-fee" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "blockifier", + "hashbrown 0.14.3", + "mp-state", + "phf", + "sp-arithmetic", + "starknet_api", +] + +[[package]] +name = "mp-felt" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "cairo-vm", + "hex", + "parity-scale-codec", + "scale-info", + "serde", + "sp-core", + "starknet-ff", + "starknet_api", + "thiserror-no-std", +] + +[[package]] +name = "mp-hashers" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "mp-felt", + "parity-scale-codec", + "scale-info", + "serde", + "starknet-core", + "starknet-crypto", +] + +[[package]] +name = "mp-state" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "blockifier", + "starknet_api", +] + +[[package]] +name = "mp-transactions" +version = "0.6.0" +source = "git+https://github.com/keep-starknet-strange/madara.git?rev=f30acea8af7e28e956e771928130e12bfc084832#f30acea8af7e28e956e771928130e12bfc084832" +dependencies = [ + "blockifier", + "cairo-lang-casm-contract-class", + "cairo-lang-utils", + "cairo-vm", + "derive_more", + "mp-fee", + "mp-felt", + "mp-hashers", + "mp-state", + "parity-scale-codec", + "scale-info", + "serde", + "serde_json", + "starknet-core", + "starknet-crypto", + "starknet-ff", + "starknet_api", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "rand 0.8.5", + "serde", +] + +[[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", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-modular" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a5fe11d4135c3bcdf3a95b18b194afa9608a5f6ff034f5d857bc9a27fb0119" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-prime" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4e3bc495f6e95bc15a6c0c55ac00421504a5a43d09e3cc455d1fea7015581d" +dependencies = [ + "bitvec", + "either", + "lru 0.7.8", + "num-bigint", + "num-integer", + "num-modular", + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "object" +version = "0.30.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opaque-debug" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" + +[[package]] +name = "opaque-debug" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" + +[[package]] +name = "parity-scale-codec" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe" +dependencies = [ + "arrayvec 0.7.4", + "bitvec", + "byte-slice-cast", + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b" +dependencies = [ + "proc-macro-crate 2.0.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pbkdf2" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa" +dependencies = [ + "crypto-mac", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "prettyplease" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +dependencies = [ + "proc-macro2", + "syn 2.0.40", +] + +[[package]] +name = "primitive-types" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" +dependencies = [ + "fixed-hash", + "impl-codec", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.11", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[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 = "ref-cast" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac 0.12.1", + "subtle", +] + +[[package]] +name = "ring" +version = "0.1.0" +source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224" +dependencies = [ + "ark-ec", + "ark-ff", + "ark-poly", + "ark-serialize", + "ark-std", + "blake2", + "common", + "fflonk", + "merlin 3.0.0", +] + +[[package]] +name = "rocksdb" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe" +dependencies = [ + "libc", + "librocksdb-sys", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.36.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.1.4", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.12", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustversion" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "scale-info" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60" +dependencies = [ + "bitvec", + "cfg-if", + "derive_more", + "parity-scale-codec", + "scale-info-derive", + "serde", +] + +[[package]] +name = "scale-info-derive" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "schnorrkel" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862" +dependencies = [ + "arrayref", + "arrayvec 0.5.2", + "curve25519-dalek 2.1.3", + "getrandom 0.1.16", + "merlin 2.0.1", + "rand 0.7.3", + "rand_core 0.5.1", + "sha2 0.8.2", + "subtle", + "zeroize", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "secp256k1" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62" +dependencies = [ + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b" +dependencies = [ + "cc", +] + +[[package]] +name = "secrecy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e" +dependencies = [ + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_json_pythonic" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62212da9872ca2a0cad0093191ee33753eddff9266cbbc1b4a602d13a3a768db" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ff71d2c147a7b57362cead5e22f772cd52f6ab31cfcd9edcd7f6aeb2a0afbe" +dependencies = [ + "base64 0.13.1", + "chrono", + "hex", + "serde", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "sha2" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +dependencies = [ + "block-buffer 0.7.3", + "digest 0.8.1", + "fake-simd", + "opaque-debug 0.2.3", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug 0.3.0", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "sp-arithmetic" +version = "16.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "integer-sqrt", + "num-traits", + "parity-scale-codec", + "scale-info", + "serde", + "sp-std", + "static_assertions", +] + +[[package]] +name = "sp-core" +version = "21.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "array-bytes", + "bandersnatch_vrfs", + "bitflags 1.3.2", + "blake2", + "bounded-collections", + "bs58", + "dyn-clonable", + "ed25519-zebra", + "futures", + "hash-db", + "hash256-std-hasher", + "impl-serde", + "lazy_static", + "libsecp256k1", + "log", + "merlin 2.0.1", + "parity-scale-codec", + "parking_lot", + "paste", + "primitive-types", + "rand 0.8.5", + "regex", + "scale-info", + "schnorrkel", + "secp256k1", + "secrecy", + "serde", + "sp-core-hashing", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", + "sp-std", + "sp-storage", + "ss58-registry", + "substrate-bip39", + "thiserror", + "tiny-bip39", + "tracing", + "w3f-bls", + "zeroize", +] + +[[package]] +name = "sp-core-hashing" +version = "9.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "blake2b_simd", + "byteorder", + "digest 0.10.7", + "sha2 0.10.8", + "sha3", + "twox-hash", +] + +[[package]] +name = "sp-debug-derive" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "sp-externalities" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "environmental", + "parity-scale-codec", + "sp-std", + "sp-storage", +] + +[[package]] +name = "sp-runtime-interface" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "bytes", + "impl-trait-for-tuples", + "parity-scale-codec", + "primitive-types", + "sp-externalities", + "sp-runtime-interface-proc-macro", + "sp-std", + "sp-storage", + "sp-tracing", + "sp-wasm-interface", + "static_assertions", +] + +[[package]] +name = "sp-runtime-interface-proc-macro" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "Inflector", + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "sp-std" +version = "8.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" + +[[package]] +name = "sp-storage" +version = "13.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "impl-serde", + "parity-scale-codec", + "ref-cast", + "serde", + "sp-debug-derive", + "sp-std", +] + +[[package]] +name = "sp-tracing" +version = "10.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "parity-scale-codec", + "sp-std", + "tracing", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "sp-wasm-interface" +version = "14.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.3.0#401f8a3e9448db854f5605b679fa085b8f445039" +dependencies = [ + "anyhow", + "impl-trait-for-tuples", + "log", + "parity-scale-codec", + "sp-std", + "wasmtime", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + +[[package]] +name = "ss58-registry" +version = "1.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35935738370302d5e33963665b77541e4b990a3e919ec904c837a56cfc891de1" +dependencies = [ + "Inflector", + "num-format", + "proc-macro2", + "quote", + "serde", + "serde_json", + "unicode-xid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "starknet-core" +version = "0.7.2" +source = "git+https://github.com/xJonathanLEI/starknet-rs.git?rev=a35ce22#a35ce22be52bf33b8e544d0df926031b0ec7d761" +dependencies = [ + "base64 0.21.5", + "flate2", + "hex", + "serde", + "serde_json", + "serde_json_pythonic", + "serde_with", + "sha3", + "starknet-crypto", + "starknet-ff", +] + +[[package]] +name = "starknet-crypto" +version = "0.6.1" +source = "git+https://github.com/xJonathanLEI/starknet-rs.git?rev=a35ce22#a35ce22be52bf33b8e544d0df926031b0ec7d761" +dependencies = [ + "crypto-bigint", + "hex", + "hmac 0.12.1", + "num-bigint", + "num-integer", + "num-traits", + "rfc6979", + "sha2 0.10.8", + "starknet-crypto-codegen", + "starknet-curve", + "starknet-ff", + "zeroize", +] + +[[package]] +name = "starknet-crypto-codegen" +version = "0.3.2" +source = "git+https://github.com/xJonathanLEI/starknet-rs.git?rev=a35ce22#a35ce22be52bf33b8e544d0df926031b0ec7d761" +dependencies = [ + "starknet-curve", + "starknet-ff", + "syn 2.0.40", +] + +[[package]] +name = "starknet-curve" +version = "0.4.0" +source = "git+https://github.com/xJonathanLEI/starknet-rs.git?rev=a35ce22#a35ce22be52bf33b8e544d0df926031b0ec7d761" +dependencies = [ + "starknet-ff", +] + +[[package]] +name = "starknet-ff" +version = "0.3.5" +source = "git+https://github.com/xJonathanLEI/starknet-rs.git?rev=a35ce22#a35ce22be52bf33b8e544d0df926031b0ec7d761" +dependencies = [ + "ark-ff", + "bigdecimal", + "crypto-bigint", + "getrandom 0.2.11", + "hex", + "serde", +] + +[[package]] +name = "starknet_api" +version = "0.4.1" +source = "git+https://github.com/keep-starknet-strange/starknet-api?branch=no_std-support-dc83f05#60e13594b5d3560ad3a6439c5dc6807e5f425866" +dependencies = [ + "cairo-lang-casm-contract-class", + "derive_more", + "hashbrown 0.14.3", + "hex", + "indexmap 2.0.0-pre", + "once_cell", + "parity-scale-codec", + "primitive-types", + "scale-info", + "serde", + "serde_json", + "starknet-crypto", + "thiserror-no-std", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 1.0.109", +] + +[[package]] +name = "substrate-bip39" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328" +dependencies = [ + "hmac 0.11.0", + "pbkdf2 0.8.0", + "schnorrkel", + "sha2 0.9.9", + "zeroize", +] + +[[package]] +name = "subtle" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix 0.38.28", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "thiserror-impl-no-std" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58e6318948b519ba6dc2b442a6d0b904ebfb8d411a3ad3e07843615a72249758" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "thiserror-no-std" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ad459d94dd517257cc96add8a43190ee620011bb6e6cdc82dafd97dfafafea" +dependencies = [ + "thiserror-impl-no-std", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +dependencies = [ + "deranged", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "tiny-bip39" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861" +dependencies = [ + "anyhow", + "hmac 0.12.1", + "once_cell", + "pbkdf2 0.11.0", + "rand 0.8.5", + "rustc-hash", + "sha2 0.10.8", + "thiserror", + "unicode-normalization", + "wasm-bindgen", + "zeroize", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[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", +] + +[[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", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "digest 0.10.7", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uint" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52" +dependencies = [ + "byteorder", + "crunchy", + "hex", + "static_assertions", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "w3f-bls" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331" +dependencies = [ + "ark-bls12-377", + "ark-bls12-381", + "ark-ec", + "ark-ff", + "ark-serialize", + "ark-serialize-derive", + "arrayref", + "constcat", + "digest 0.10.7", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_core 0.6.4", + "sha2 0.10.8", + "sha3", + "thiserror", + "zeroize", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.40", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "wasmparser" +version = "0.102.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b" +dependencies = [ + "indexmap 1.9.3", + "url", +] + +[[package]] +name = "wasmtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9" +dependencies = [ + "anyhow", + "bincode 1.3.3", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "object", + "once_cell", + "paste", + "psm", + "serde", + "target-lexicon", + "wasmparser", + "wasmtime-environ", + "wasmtime-jit", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-environ" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli", + "indexmap 1.9.3", + "log", + "object", + "serde", + "target-lexicon", + "thiserror", + "wasmparser", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-jit" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244" +dependencies = [ + "addr2line", + "anyhow", + "bincode 1.3.3", + "cfg-if", + "cpp_demangle", + "gimli", + "log", + "object", + "rustc-demangle", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846" +dependencies = [ + "once_cell", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd" +dependencies = [ + "cfg-if", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-runtime" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "indexmap 1.9.3", + "libc", + "log", + "mach", + "memfd", + "memoffset", + "paste", + "rand 0.8.5", + "rustix 0.36.17", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-jit-debug", + "windows-sys 0.45.0", +] + +[[package]] +name = "wasmtime-types" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "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]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff" +dependencies = [ + "memchr", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "zerocopy" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.40", +] + +[[package]] +name = "zstd-sys" +version = "2.0.9+zstd.1.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..bb755ae --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,31 @@ +[package] +name = "bonsai-trie" +version = "0.1.0" +edition = "2021" + +[features] +default = ["rocksdb"] +rocksdb = ["dep:rocksdb"] + +[dependencies] +parity-scale-codec = { version = "3.0.0", features = ["derive"] } +rocksdb = { optional = true, version = "0.21.0", features = ["multi-threaded-cf"] } +serde = { version = "1.0.193", features = ["derive"] } +bincode = "1.3.3" +log = "0.4.20" +smallvec = "1.11.2" +rustc-hex = "2.1.0" +env_logger = "0.10.1" +lru = "0.12.1" +parking_lot = "0.12.1" + +bitvec = { version = "1", default-features = false } +derive_more = { version = "0.99.17", features = ["constructor"] } +mp-felt = { git = "https://github.com/keep-starknet-strange/madara.git", rev = "f30acea8af7e28e956e771928130e12bfc084832", package = "mp-felt", features = ["parity-scale-codec", "serde"]} +mp-hashers = { git = "https://github.com/keep-starknet-strange/madara.git", rev = "f30acea8af7e28e956e771928130e12bfc084832", package = "mp-hashers" } +mp-transactions = { git = "https://github.com/keep-starknet-strange/madara.git", rev = "f30acea8af7e28e956e771928130e12bfc084832", package = "mp-transactions", features = ["parity-scale-codec", "serde"] } + +[dev-dependencies] +tempfile = "3.8.0" +mp-commitments = { git = "https://github.com/keep-starknet-strange/madara.git", rev = "f30acea8af7e28e956e771928130e12bfc084832", package = "mp-commitments" } +rand = "0.8.5" diff --git a/README.md b/README.md new file mode 100644 index 0000000..8a86a86 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# BonsaiStorage + +![example workflow](https://github.com/massalabs/madara-bonsai/actions/workflows/check_lint.yml/badge.svg) ![example workflow](https://github.com/massalabs/madara-bonsai/actions/workflows/test.yml/badge.svg) [![codecov](https://codecov.io/gh/massalabs/madara-bonsai/branch/main/graph/badge.svg?token=SLIHSUWHT2)](https://codecov.io/gh/massalabs/madara-bonsai) \ No newline at end of file diff --git a/documentation/README.md b/documentation/README.md new file mode 100644 index 0000000..cb312ec --- /dev/null +++ b/documentation/README.md @@ -0,0 +1,27 @@ +# Project Documentation + +This project's documentation is generated using [asciidoctor-web-pdf](https://github.com/ggrossetie/asciidoctor-web-pdf), a tool that converts AsciiDoc content to a styled PDF using web technologies. + +## Prerequisites + +Ensure you have [Node.js](https://nodejs.org/) and [npm](https://www.npmjs.com/) installed on your machine. + +## Setup + +1. **Install Dependencies**: + + Before generating the documentation, you need to install the necessary dependencies. Navigate to the project directory and run: + + ```shell + npm install + ``` + +2. **Generate Documentation**: + + Once the dependencies are installed, you can generate the documentation using the provided script: + + ```shell + npm run generate-doc + ``` + +After executing the script, the generated documentation will be available in the specified output directory. \ No newline at end of file diff --git a/documentation/custom.css b/documentation/custom.css new file mode 100644 index 0000000..94eb358 --- /dev/null +++ b/documentation/custom.css @@ -0,0 +1,4 @@ +.center-image img { + display:block; + margin: 0 auto; +} \ No newline at end of file diff --git a/documentation/diag-24b1eaba80715f19ac2fe8bdc300207451cc5ff6.svg b/documentation/diag-24b1eaba80715f19ac2fe8bdc300207451cc5ff6.svg new file mode 100644 index 0000000..ba22fd1 --- /dev/null +++ b/documentation/diag-24b1eaba80715f19ac2fe8bdc300207451cc5ff6.svg @@ -0,0 +1 @@ +High-Level InterfaceTrieDatabase InterfaceTrie LogAccumulatorGet root hashGet state at slot XProcess new blockCRUD dataCRUD key/valueAdd a trielogGet a trielogSave to databseSave modificationsGet state at slot XRollforwardRollbackwardGet Root hashCRUD dataCaller \ No newline at end of file diff --git a/documentation/diag-3083fb6dbf7a68b32a4e08d8433702ae13654c0c.svg b/documentation/diag-3083fb6dbf7a68b32a4e08d8433702ae13654c0c.svg new file mode 100644 index 0000000..6733090 --- /dev/null +++ b/documentation/diag-3083fb6dbf7a68b32a4e08d8433702ae13654c0c.svg @@ -0,0 +1 @@ +MadaraMadaraInterfaceInterfaceTrieAndFlatDBTrieAndFlatDBTrieLogTrieLogAccumulatorAccumulatorDatabaseDatabaseNew block1New batch of data to save (block processing)2Modify the trie and save in the flat DB3Fetch the nodes4Return the nodes5Save all the modifications on the DB6Save modifications in a trielog7Save the TrieLog in the database8Save the TrieLog to the Accumulator9Each X block save a snapshot10(Nothing or a signal to know it's finished or root hash TBD)Asking for a specific state at X1Ask for a state X2Ask for the state3Is it my current state ?4Return the state4Can I rollback/rollforward to this stateusing the trie logs I know5If yes I apply them6Return the state5Ask for the closest snapshot6Return the clostest snapshot7Is the closest snapshot the exact state ?8Return the state8Ask for the trie logs to pass from thesnapshot to asked state9Return the trie logs10Apply the trie logs11Return the state \ No newline at end of file diff --git a/documentation/diag-34dcd0f9578667b8bf8b82556290e45892408959.svg b/documentation/diag-34dcd0f9578667b8bf8b82556290e45892408959.svg new file mode 100644 index 0000000..714e06d --- /dev/null +++ b/documentation/diag-34dcd0f9578667b8bf8b82556290e45892408959.svg @@ -0,0 +1 @@ +MadaraMadaraInterfaceInterfaceTrieTrieTrieLogTrieLogBonsaiStorageBonsaiStorageDatabaseDatabaseCallerCallerProcessign a commit1New commit of changes to save2Modify the trie and save in the flat DB3Fetch the nodes4Return the nodes5Save all modifications to DB6Save modifications in the Trie Logs7Save the Trie Logs in the database8Save the Trie Logs to the BonsaiStorage9Save a snapshot every N batches10Result of the modificationsAsking for a specific state X1Ask for a state X2Ask for the state3Is it my current state ?4Return the state4Can we rollback/rollforward to this stateusing the Trie Logs5If yes, apply them6Return the state5Ask for the closest snapshot6Return the closest snapshot7Is the closest snapshot exactly at the asked state ?8Return the snapshot state8Ask for the trie logs to derive the asked statefrom the snapshot9Return the trie logs10Apply the trie logs11Return the state (or an error) \ No newline at end of file diff --git a/documentation/diag-36d0aa6e31cd7489ed9589bc023fcb15a00af173.svg b/documentation/diag-36d0aa6e31cd7489ed9589bc023fcb15a00af173.svg new file mode 100644 index 0000000..ec363c7 --- /dev/null +++ b/documentation/diag-36d0aa6e31cd7489ed9589bc023fcb15a00af173.svg @@ -0,0 +1 @@ +High-Level InterfaceTrieDatabase InterfaceTrie LogBonsaiStorageGet root hashGet state at slot XProcess new blockCRUD dataCRUD key/valueAdd a trielogGet a trielogSave to databseSave modificationsGet state at slot XRollforwardRollbackwardGet Root hashCRUD dataCaller \ No newline at end of file diff --git a/documentation/diag-435b4325dcadca53ea97668496acd073f12f5ee9.svg b/documentation/diag-435b4325dcadca53ea97668496acd073f12f5ee9.svg new file mode 100644 index 0000000..1d995f2 --- /dev/null +++ b/documentation/diag-435b4325dcadca53ea97668496acd073f12f5ee9.svg @@ -0,0 +1 @@ +CallerCallerInterfaceInterfaceTrieTrieTrieLogTrieLogBonsaiStorageBonsaiStorageDatabaseDatabaseProcessign a commit1New commit of changes to save2Modify the trie and save in the DB3Fetch the nodes4Return the nodes5Save all modifications to DB6Save modifications in the Trie Logs7Save the Trie Logs in the database8Save the Trie Logs to the BonsaiStorage9Save a snapshot every N batches10Result of the modificationsAsking for a specific state at a certain CommitID1Ask for a state X2Ask for the state3Is it my current state ?4Return the state4Can we go to this state using the Trie Logs5If yes, apply them6Return the state5Ask for the closest snapshot6Return the closest snapshot7Is the closest snapshot exactly at the asked state ?8Return the snapshot state8Ask for the trie logs to derive the asked statefrom the snapshot9Return the trie logs10Apply the trie logs11Return the state (or an error) \ No newline at end of file diff --git a/documentation/diag-4db3052c7b472581cd02c8044ecd121d6364c9b9.svg b/documentation/diag-4db3052c7b472581cd02c8044ecd121d6364c9b9.svg new file mode 100644 index 0000000..08fbc95 --- /dev/null +++ b/documentation/diag-4db3052c7b472581cd02c8044ecd121d6364c9b9.svg @@ -0,0 +1 @@ +MadaraMadaraInterfaceInterfaceTrieAndFlatDBTrieAndFlatDBTrieLogTrieLogAccumulatorAccumulatorDatabaseDatabaseCallerCallerProcessign a block of changes1New batch of data to save2Modify the trie and save in the flat DB3Fetch the nodes4Return the nodes5Save all modifications to DB6Save modifications in the Trie Logs7Save the Trie Logs in the database8Save the Trie Logs to the Accumulator9Save a snapshot every N batches10Result of the modificationsAsking for a specific state X1Ask for a state X2Ask for the state3Is it my current state ?4Return the state4Can we rollback/rollforward to this stateusing the Trie Logs5If yes, apply them6Return the state5Ask for the closest snapshot6Return the closest snapshot7Is the closest snapshot exactly at the asked state ?8Return the snapshot state8Ask for the trie logs to derive the asked statefrom the snapshot9Return the trie logs10Apply the trie logs11Return the state (or an error) \ No newline at end of file diff --git a/documentation/diag-cd8e6f3b627045a14f653fb7a9c9bf006e5f2023.svg b/documentation/diag-cd8e6f3b627045a14f653fb7a9c9bf006e5f2023.svg new file mode 100644 index 0000000..5dfe548 --- /dev/null +++ b/documentation/diag-cd8e6f3b627045a14f653fb7a9c9bf006e5f2023.svg @@ -0,0 +1 @@ +MadaraMadaraInterfaceInterfaceTrieAndFlatDBTrieAndFlatDBTrieLogTrieLogAccumulatorAccumulatorDatabaseDatabaseCallerCallerProcessign a commit1New commit of changes to save2Modify the trie and save in the flat DB3Fetch the nodes4Return the nodes5Save all modifications to DB6Save modifications in the Trie Logs7Save the Trie Logs in the database8Save the Trie Logs to the Accumulator9Save a snapshot every N batches10Result of the modificationsAsking for a specific state X1Ask for a state X2Ask for the state3Is it my current state ?4Return the state4Can we rollback/rollforward to this stateusing the Trie Logs5If yes, apply them6Return the state5Ask for the closest snapshot6Return the closest snapshot7Is the closest snapshot exactly at the asked state ?8Return the snapshot state8Ask for the trie logs to derive the asked statefrom the snapshot9Return the trie logs10Apply the trie logs11Return the state (or an error) \ No newline at end of file diff --git a/documentation/diag-ed47a469e34cb206aef77e92cf30cc7e2b295773.svg b/documentation/diag-ed47a469e34cb206aef77e92cf30cc7e2b295773.svg new file mode 100644 index 0000000..c5addf5 --- /dev/null +++ b/documentation/diag-ed47a469e34cb206aef77e92cf30cc7e2b295773.svg @@ -0,0 +1 @@ +TrieDatabase InterfaceTrie LogBonsaiStorageCRUD dataCommitCRUD key/valueAdd a trielogGet trielogsSave to databseSave modificationsGo to state at CommitID XGet Root hashCRUD dataCommitCaller \ No newline at end of file diff --git a/documentation/package-lock.json b/documentation/package-lock.json new file mode 100644 index 0000000..ed22520 --- /dev/null +++ b/documentation/package-lock.json @@ -0,0 +1,1609 @@ +{ + "name": "documentation", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "documentation", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@asciidoctor/core": "^3.0.2", + "asciidoctor-kroki": "^0.17.0", + "asciidoctor-pdf": "^1.0.0-alpha.16" + } + }, + "node_modules/@asciidoctor/cli": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@asciidoctor/cli/-/cli-3.5.0.tgz", + "integrity": "sha512-/VMHXcZBnZ9vgWfmqk9Hu0x0gMjPLup0YGq/xA8qCQuk11kUIZNMVQwgSsIUzOEwJqIUD7CgncJdtfwv1Ndxuw==", + "dev": true, + "dependencies": { + "yargs": "16.2.0" + }, + "bin": { + "asciidoctor": "bin/asciidoctor", + "asciidoctorjs": "bin/asciidoctor" + }, + "engines": { + "node": ">=8.11", + "npm": ">=5.0.0" + }, + "peerDependencies": { + "@asciidoctor/core": "^2.0.0-rc.1" + } + }, + "node_modules/@asciidoctor/cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@asciidoctor/cli/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@asciidoctor/core": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@asciidoctor/core/-/core-3.0.2.tgz", + "integrity": "sha512-GbQWpqLlM/kN+90QrlLYISdU/vbGkUSeHsBQR9BzYNmVHDd6CEb/xfQZIFUo//EtT7e+QS3Sv3yYDzgjr96TbA==", + "dev": true, + "dependencies": { + "@asciidoctor/opal-runtime": "3.0.1", + "unxhr": "1.2.0" + }, + "engines": { + "node": ">=16", + "npm": ">=8" + } + }, + "node_modules/@asciidoctor/opal-runtime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@asciidoctor/opal-runtime/-/opal-runtime-3.0.1.tgz", + "integrity": "sha512-iW7ACahOG0zZft4A/4CqDcc7JX+fWRNjV5tFAVkNCzwZD+EnFolPaUOPYt8jzadc0+Bgd80cQTtRMQnaaV1kkg==", + "dev": true, + "dependencies": { + "glob": "8.1.0", + "unxhr": "1.2.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz", + "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==", + "deprecated": "🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information.", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.1.tgz", + "integrity": "sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.3.0.tgz", + "integrity": "sha512-CA3MAZBTxVsF6SkfkHXDerkhcQs0QPofy43eFdbWJJkZiq3SfiaH1msOkac59rQaqto5EqWnASboY1dBuKen5w==", + "deprecated": "Please upgrade to 6.1.0. https://fontawesome.com/docs/changelog/", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.3.0.tgz", + "integrity": "sha512-UIL6crBWhjTNQcONt96ExjUnKt1D68foe3xjEensLDclqQ6YagwCRYVQdrp/hW0ALRp/5Fv/VKw+MqTUWYYvPg==", + "deprecated": "Please upgrade to 6.1.0. https://fontawesome.com/docs/changelog/", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.0.0.tgz", + "integrity": "sha512-BIhsy2YeGuk8+KQwpqmyayQDWo1lvGMHsMIE+z5ApPRgV7T+zGhmNzYVoBT4IrJMC6ep5WpGrxoHX+IvNxHnkw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.0.0.tgz", + "integrity": "sha512-lYK6oyQL8HwZUAVWGqF7TGuwQBVfphNBVTdvPSD3h4gmQfGazm/xcwg3kmtcRycu3y6QspOC7hPXSoJbVqSYCw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.0.0.tgz", + "integrity": "sha512-o4FZ1XbndcgeWNb8Wh0y+Hgf73CjmyOQowUSaqQCtgIIdS+XliSBSOwCl330wER+I6CGYE96hT27bHBPmzX2Gg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@ggrossetie/pagedjs": { + "version": "0.2.0-next.1623590414", + "resolved": "https://registry.npmjs.org/@ggrossetie/pagedjs/-/pagedjs-0.2.0-next.1623590414.tgz", + "integrity": "sha512-zECa0Q8/DlvpuDkk/3+EJ1OTWZMiEX4ue5ipSx+TImI/SPnUVwVHaaPOA1MaUA6asSl7MUg2T1hVptYibb2KQQ==", + "dev": true, + "dependencies": { + "@babel/polyfill": "^7.10.1", + "@babel/runtime": "^7.14.0", + "clear-cut": "^2.0.2", + "css-tree": "^1.1.3", + "event-emitter": "^0.3.5" + } + }, + "node_modules/@pdf-lib/standard-fonts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", + "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", + "dev": true, + "dependencies": { + "pako": "^1.0.6" + } + }, + "node_modules/@pdf-lib/standard-fonts/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/@pdf-lib/upng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", + "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", + "dev": true, + "dependencies": { + "pako": "^1.0.10" + } + }, + "node_modules/@pdf-lib/upng/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.8.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz", + "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==", + "dev": true, + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.1.tgz", + "integrity": "sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/asciidoctor-kroki": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/asciidoctor-kroki/-/asciidoctor-kroki-0.17.0.tgz", + "integrity": "sha512-aObUUfAtcfUTjhAP32bgrcoKXLRta57o3V5k+t73FXDKiLi+QfkHE+9+H4mGPTnghXBtiRYzsu7BbVGfTHoQzQ==", + "dev": true, + "dependencies": { + "json5": "2.2.3", + "mkdirp": "2.1.3", + "pako": "2.1.0", + "rusha": "0.8.14", + "unxhr": "1.2.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@asciidoctor/core": "~2.2" + } + }, + "node_modules/asciidoctor-pdf": { + "version": "1.0.0-alpha.16", + "resolved": "https://registry.npmjs.org/asciidoctor-pdf/-/asciidoctor-pdf-1.0.0-alpha.16.tgz", + "integrity": "sha512-h1eyNQU1YzkonR4Vvnhx/twJ5PSH/ijUwzOrCXpKwOHegeaXdvKnhUgcP0eUXSQVTrM/JctAK66O5ULZu/gcaA==", + "dev": true, + "dependencies": { + "@asciidoctor/cli": "^3.5.0", + "@fortawesome/fontawesome-svg-core": "1.3.0", + "@fortawesome/free-brands-svg-icons": "6.0.0", + "@fortawesome/free-regular-svg-icons": "6.0.0", + "@fortawesome/free-solid-svg-icons": "6.0.0", + "@ggrossetie/pagedjs": "0.2.0-next.1623590414", + "chokidar": "3.5.3", + "file-url": "3.0.0", + "fs-extra": "10.0.1", + "html-entities": "^2.1.0", + "mathjax": "3.2.0", + "pdf-lib": "^1.2.1", + "puppeteer": "15.4.0", + "yargs": "17.3.1" + }, + "bin": { + "asciidoctor-pdf": "bin/asciidoctor-pdf", + "asciidoctor-web-pdf": "bin/asciidoctor-web-pdf" + }, + "engines": { + "node": ">=12", + "npm": ">=6.0.0" + }, + "peerDependencies": { + "@asciidoctor/core": "^2.2.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/clear-cut": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clear-cut/-/clear-cut-2.0.2.tgz", + "integrity": "sha512-WVgn/gSejQ+0aoR8ucbKIdo6icduPZW6AbWwyUmAUgxy63rUYjwa5rj/HeoNPhf0/XPrl82X8bO/hwBkSmsFtg==", + "dev": true + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/devtools-protocol": { + "version": "0.0.1011705", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1011705.tgz", + "integrity": "sha512-OKvTvu9n3swmgYshvsyVHYX0+aPzCoYUnyXUacfQMmFtBtBKewV/gT4I9jkAbpTqtTi2E4S9MXLlvzBDUlqg0Q==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/file-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", + "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mathjax": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.0.tgz", + "integrity": "sha512-PL+rdYRK4Wxif+SQ94zP/L0sv6/oW/1WdQiIx0Jvn9FZaU5W9E6nlIv8liYAXBNPL2Fw/i+o/mZ1212eSzn0Cw==", + "dev": true + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pdf-lib": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", + "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", + "dev": true, + "dependencies": { + "@pdf-lib/standard-fonts": "^1.0.0", + "@pdf-lib/upng": "^1.0.1", + "pako": "^1.0.11", + "tslib": "^1.11.1" + } + }, + "node_modules/pdf-lib/node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-15.4.0.tgz", + "integrity": "sha512-wxJRbofjaycCaQ9fhABlToJobrjxlABiFi6NvdkOPVJMYFblxDlDTjkg+b6bZYi7xN+lEXn84GBZsA5DYb3wfw==", + "deprecated": "< 19.4.0 is no longer supported", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.1011705", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.8.0" + }, + "engines": { + "node": ">=14.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rusha": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/rusha/-/rusha-0.8.14.tgz", + "integrity": "sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unxhr": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unxhr/-/unxhr-1.2.0.tgz", + "integrity": "sha512-6cGpm8NFXPD9QbSNx0cD2giy7teZ6xOkCUH3U89WKVkL9N9rBrWjlCwhR94Re18ZlAop4MOc3WU1M3Hv/bgpIw==", + "dev": true, + "engines": { + "node": ">=8.11" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/documentation/package.json b/documentation/package.json new file mode 100644 index 0000000..2994f51 --- /dev/null +++ b/documentation/package.json @@ -0,0 +1,18 @@ +{ + "name": "documentation", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "generate-doc": " npm x asciidoctor-web-pdf -- --require asciidoctor-kroki specification.adoc -a stylesheet=\"+custom.css\"", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@asciidoctor/core": "^3.0.2", + "asciidoctor-pdf": "^1.0.0-alpha.16", + "asciidoctor-kroki": "^0.17.0" + } +} diff --git a/documentation/specification.adoc b/documentation/specification.adoc new file mode 100644 index 0000000..e5343b3 --- /dev/null +++ b/documentation/specification.adoc @@ -0,0 +1,437 @@ += Besu Bonsaï like storage: Specification +:doctype: book +:toc: +:sectnums: +:kroki-fetch-diagram: +:center-image: style="display:block; margin: 0 auto;" + + +== Introduction + +=== Scope of the document + +This specification is the entrypoint for developers to contribute to the project and provides all the guidelines to organize the work efficiently. This document should be enough to work as a team with all the necessary explanations and overview of the whole project. This document will evolve over time. + +=== Target of the document + +This document should be a starting point and a reference for all the developers that contribute and a high level source of documentation about the project. + +A technical expertise in Rust is required to understand the interfaces. The rest of the document is readable with limited knowledge of the technical principles involved. + +=== Concepts and Vocabulary + +==== Besu Bonsai storage + +Besu Bonsai storage is an advanced storage management system developed by HyperLedger for their Ethereum client, Besu. +For a detailed specification, follow this link:https://hackmd.io/@kt2am/BktBblIL3[link]. + +==== Trie + +Unlike a conventional tree, a trie is designed so that each node (except the root) represents a byte. Each path descending the trie can symbolize a key in the form of a byte array. Each key is associated to an arbitrary value, making the trie a key-value data structure. +To better understand, consider the following illustration: + +image:https://upload.wikimedia.org/wikipedia/commons/b/be/Trie_example.svg[Tree structure,200,role="center-image"] + +In this trie, connected nodes form keys by appending the key byte they represent. For instance, the trie contains keys like **A** - with a value of 15, **to** - 7, **tea** - 3, and so on. However, **t** or **te** aren't keys but merely prefixes. + +For a deeper dive into tries, follow this link:https://en.wikipedia.org/wiki/Trie[link]. The advantages of the trie data structure are detailed link:https://www.geeksforgeeks.org/advantages-trie-data-structure/[here]. + +==== Radix trie + +Also known as a radix tree, compact prefix tree or compressed trie, a radix trie is data structure that represents a space-optimized trie in which each node that is the only child is merged with its parent. Here's a visual representation: + +image:https://upload.wikimedia.org/wikipedia/commons/a/ae/Patricia_trie.svg[Radix trie,250,role="center-image"] + +In this trie, the nodes **om**, **ub**, **ulus** ... are merged into a single node, as they are the only children of their parent. Instead of needing 7 nodes to represent the key **romulus**, each letter having its node, this space-optimized representation only needs 3, **r**, **om** and **ulus**. + +For a deeper dive into radix tries, follow this link:https://en.wikipedia.org/wiki/Radix_tree[link]. + +==== PATRICIA tree + +A PATRICIA tree, which stands for Practical Algorithm to Retrieve Information Coded in Alphanumeric, is a special variant of the radix trie where the radix is equal to 2. This implies that each node carries a 1-bit portion of the key and has at most two children (child 0 and child 1). + +For a deeper explanation of the difference between PATRICIA tree and radix trie, you can explore link:https://cs.stackexchange.com/a/63060[here]. + +The PATRICIA tree in Ethereum also provides optimizations on the trie format that are detailed link:https://ethereum.org/en/developers/docs/data-structures-and-encoding/patricia-merkle-trie/#optimization[here]. + +==== Merkle Tree + +A Merkle Tree is a specialized tree where every "leaf" or node is labeled with the cryptographic hash of a data block. Conversely, every non-leaf node, often referred to as a branch, inner node, or inode, carries the cryptographic hash of its child nodes' labels. Here's a visual representation: + +image:https://upload.wikimedia.org/wikipedia/commons/9/95/Hash_Tree.svg[Merkle Tree,400,role="center-image"] + +In this depiction, hashes 0-0 and 0-1 represent the hash values of data blocks L1 and L2, respectively. Meanwhile, hash 0 is derived from the combined hashes 0-0 and 0-1. + +For comprehensive information on the Merkle Tree, visit link:https://en.wikipedia.org/wiki/Merkle_tree[here]. The benefits of the Merkle Tree data structure are outlined link:https://www.geeksforgeeks.org/blockchain-merkle-trees/#Advantages%20of%20Merkle%20Tree:~:text=longest%2C%20valid%20blockchain.-,Advantages%20of%20Merkle%20Tree,-Efficient%20verification%3A[here]. + +One important feature of Merkle Trees is that they allow exhibiting compact proofs of existence of an element in the tree. The proof size is logarithmic in the number of elements in the tree. + +==== Merkle-Patricia Trie +A Merkle-Patricia Trie (MPT) is a combination of a Merkle Tree and a Patricia Tree. This data structure is famous because it is being used by Ethereum to store the state of an Ethereum blockchain. The Ethereum version of the MPT is composed of 3 types of nodes: + +* **Branch:** A node with up to 16 child links, each corresponding to a hex character. +* **Extension:** A node storing a key segment with a common prefix and a link to the next node. +* **Leaf:** An end-node holding the key's final segment and its value. + +Here's a visual representation: + +image:https://i.stack.imgur.com/YZGxe.png[Patricia Merkle Trie in Ethereum,450,role="center-image"] + +In this depiction, the key a77d397, having the value of 0.12 ETH, is stored using 5 nodes (a7 - extension node, 7 - branch node, d3 extension node, 9 - branch node, 7 - leaf node). + +=== External Resources + +Substrate:: link:https://github.com/paritytech/polkadot-sdk/tree/master/substrate[Substrate] is a Rust framework developed by ParityTech, designed to facilitate the creation of blockchain nodes. + +=== Versions +[%header,cols="1,1,1,3"] +|=== +| Version | Date | Author | Description +| 0.1 | 2023-11-16 | Aurélien FOUCAULT | Initial version + +| 0.2 | 2023-11-20 | Aurélien FOUCAULT | Rework interfaces +|=== + +== Function Description + +=== Actors + +==== Caller + +The library is designed for callers who need a key-value data structure with efficient data management operations for retrieval, storage and deletion, while maintaining a global fingerprint (hash) of the whole structure that allows for compact proofs of element existence. Callers can either use the library directly or through another intermediary library. The primary advantage is that callers can utilize the library without delving into its underlying implementation and can choose a database implementation that suits their needs. + +==== High-Level Interface + +This interface serves as the library's main entry point and the primary interface for callers. It simplifies interactions with the library, ensuring that the caller only engages with this interface, abstracting away the complexities of the underlying processes. + +==== Accumulator + +The accumulator plays a pivotal role in the management of the state of the data structure. It facilitates the addition of new states and retrieves states at specific point in time. The high-level interface leverages the accumulator for these tasks. + +==== Trie + +Trie is the chosen data structure for data storage within the library. Both the accumulator and the high-level interface utilize the Trie for data operations. + +==== Trie Logs + +Trie logs capture batches of modifications, detailing every change made during the processing of a "commit" which is an atomic batch of modifications that can for example represent the changes caused by the execution of block in a blockchain. These log are required to the accumulator when it needs to roll back or roll forward to a particular state. + +==== Database Interface + +Serving as the underlying persistent storage mechanism, the database ensures data longevity by saving it to the disk. While various library components rely on the database for low-level data management, its interface is implemented by the caller. This design choice maximizes abstraction and portability, allowing the library to be adaptable across different database implementations. + +=== Diagrams + +==== Use case + +[plantuml, format="svg", id="use-case", width="100%", pdfwidth="100%"] +---- +@startuml +left to right direction +skinparam actorStyle awesome + +actor Caller as caller + +package "Trie" as t { + usecase "CRUD data" as t_crud + usecase "Commit" as t_commit +} + +package "Database Interface" as dbi { + usecase "CRUD key/value" as dbi_crudKV + usecase "Add a trielog" as dbi_addTrieLog + usecase "Get trielogs" as dbi_getTrieLog +} + +package "Trie Log" as tl { + usecase "Save to databse" as tl_save2DB + usecase "Save modifications" as tl_saveModification +} + +package "BonsaiStorage" as a { + usecase "Go to state at CommitID X" as a_getStateAtX + usecase "Get Root hash" as a_getRootHash + usecase "CRUD data" as a_crud + usecase "Commit" as a_commit +} + +caller --> a_getRootHash + +caller --> a_getStateAtX +a_getStateAtX --> dbi_getTrieLog + +caller --> a_crud +a_crud --> t_crud +a_crud --> tl_saveModification +caller --> a_commit +a_commit --> t_commit +a_commit --> tl_save2DB +t_commit --> dbi_crudKV + + +tl_save2DB --> dbi_addTrieLog +@enduml +---- + +=== Sequence + +[plantuml, format="svg", id="sequence-diagram", width="100%", pdfwidth="100%"] +---- +@startuml +participant Caller as Caller +participant Interface as Interface +participant Trie as Trie +participant TrieLog as TrieLog +participant BonsaiStorage as BonsaiStorage +participant Database as Database + +== Processign a commit == + +autonumber 1 +Caller -> Interface : New commit of changes to save +Interface -> Trie : Modify the trie and save in the DB +Trie -> Database : Fetch the nodes +Database -> Trie : Return the nodes +Trie -> Database : Save all modifications to DB +Trie -> TrieLog : Save modifications in the Trie Logs +TrieLog -> Database : Save the Trie Logs in the database +TrieLog -> BonsaiStorage : Save the Trie Logs to the BonsaiStorage +BonsaiStorage -> Database : Save a snapshot every N batches +Trie -> Caller : Result of the modifications +autonumber stop + +== Asking for a specific state at a certain CommitID == + + +autonumber 1 +Caller -> Interface : Ask for a state X +Interface -> BonsaiStorage : Ask for the state +BonsaiStorage -> BonsaiStorage : Is it my current state ? +BonsaiStorage -[#green]> Caller : Return the state +autonumber stop +autonumber 4 1 +BonsaiStorage -[#red]> BonsaiStorage : Can we go to this state using the Trie Logs +BonsaiStorage -[#green]> BonsaiStorage : If yes, apply them +BonsaiStorage -> Caller : Return the state +autonumber stop +autonumber 5 1 +BonsaiStorage -[#red]> Database : Ask for the closest snapshot +Database -> BonsaiStorage : Return the closest snapshot +BonsaiStorage -> BonsaiStorage : Is the closest snapshot exactly at the asked state ? +BonsaiStorage -[#green]> Caller : Return the snapshot state +autonumber stop +autonumber 8 1 +BonsaiStorage -[#red]> Database : Ask for the trie logs to derive the asked state \n from the snapshot +Database -> BonsaiStorage : Return the trie logs +BonsaiStorage -> BonsaiStorage : Apply the trie logs +BonsaiStorage -> Caller : Return the state (or an error) +@enduml +---- + +== Technical Description + +=== Trie + +The Trie is the central component of the Besu storage system. To avoid reimplementing a PMT, we use the crate link:https://github.com/paritytech/trie[Trie from paritytech] which provides a standard PMT. This choice was made for multiple reasons: + +- It avoids re-implementing a PMT. +- It provides the flexibility to create Tries formatted for different blockchains. +- The code has a lot of generics and gives us the possibility to make modifications to the PMT structure easily. + +We only use the sub-crate `trie-db` and override its keys, database, and layout implementations. +However, this sub-crate only solves part of the problem: +- In a Bonsai Trie, we store nodes directly by their location, while the Trie crate stores them by hash +- The Trie crate does not allow the implementation of trie logs, which require some modifications to the crate code + +Given those constraints, we forked the Trie crate while minimizing the changes to the code. +Our modifications make the crate more generic and are being proposed to the maintainers as an upstream PR. + +==== Attributes + +No attributes need to be defined. All traits are detailed below. + +==== Traits/Implementations + +===== Trie interface + +The `TrieDBMut` structure of the `trie` crate is used. Definition can be found link:https://docs.rs/trie-db/latest/trie_db/triedbmut/struct.TrieDBMut.html[here] + +==== Database trait + +The Trie crate from paritytech already provides a database trait described link:https://github.com/paritytech/trie/blob/1645fddec8e5461d5aca7dd880303042b8527465/hash-db/src/lib.rs#L128[here]. We reuse the same trait for this part of the project. + +==== Child encoding + +In the sub-crate `trie-db`, the children of a branch node are either inline or referenced by hash. In a Bonsai Trie, as the nodes are stored by their locations, we still want to save the hash to have it cached when parent hashes need to be computed (up to the trie root hash). + +==== Node encoding + +The sub-crate `reference-trie`` gives the implementations of `trait NodeCodec` (that manages the serialization/deserialization of nodes to store them in DB) with the same behavior as the one used on Substrate. We re-use it as it corresponds to our needs and gives us more compatibility with existing Substrate code. + +=== Accumulator + +The accumulator is an optimization component that is used to register all the reads and changes made to provide optimizations for future actions. For example when reading a value, in a second thread, the path in the trie will be loaded in the accumulator in case the value is modified in the same batch of changes + +=== Trie logs + +Trie logs store a batch of modifications to the trie to be applied to a state. + +==== Attribute + +- In each trie log, we should save all keys/values that are modified within `HashMap>, Option>)>`. The value is represented as `Vec<(Option>, Option>` to be able to hold the old value (if existed) and the new one (if we are not in a remove operation) for each key. +- An ID + +==== Traits/Implementations + +[source,rust] +---- +impl TrieLog +where: + CommitID: Id { + // Initialize a trie log with a batch of modifications + fn new(id: CommitID, modifications: Vec<(Option>, Option>)>) -> Self + + // Get the associated CommitID + fn get_commit_id(&self) -> CommitID; +} +---- + +=== Database + +The database implementation is generic on the underlying database. We provide a first implementation of the database using RocksDB. + +All methods take an optional transaction type that allows making transactional modifications to the database if the database type allows it. If the transaction object is provided, we don't update the DB directly but accumulate the changes into the provided TX, and commit it afterwards. + +==== Attributes + +- A connector to the database + +==== Traits/Implementations + +[source,rust] +---- +pub enum DatabaseError { + // All errors related to the db, omitted here +} + +pub trait BonsaiDatabase { + fn new(path_to_database: &str) -> Self + + // Insert an entry in the trie + fn insert(&mut self, key: &[u8], value: &[u8]) -> Result<(), DatabaseError>; + + // Remove an entry from the trie + fn remove(&mut self, key: &[u8]) -> Result<(), DatabaseError>; + + // Get a value in trie + fn get(&self, key: &[u8]) -> Result, DatabaseError>; + + // Check if the key is in trie + fn contains(&self, key: &[u8]) -> Result; + + // PUT operation in TRIE_LOG column + fn put_trie_log(&mut self, key: &[u8], value: &[u8]) -> Result<(), DatabaseError>; + + // GET operation in TRIE_LOG column + fn get_trie_log(&self, key: &[u8]) -> Result, DatabaseError>; + + // Generate a snapshot + fn generate_snapshot(&mut self) -> Result + + // Get a snapshot + fn get_snapshot(&self, snapshot_id: u64) -> Result +} +---- + +=== User-facing interface + +This is the main interface that the Caller interacts with. + +==== Definition + +[source,rust] +---- +// Error type for the interface (elided) +pub enum BonsaiStorageError {} + +// Configuration +// None = unlimited +pub struct BonsaiStorageConfig { + pub max_trie_log_size: Option, + pub max_snapshot_saved: Option, + pub max_trie_logs_in_memory: Option, + pub snapshot_interval: usize, +} + +pub trait BonsaiStorage<'a, CommitID> +where: + CommitID: Id { + // Create a new bonsai storage instance + fn new(db: &'a mut KeyValueDB, root: &'a mut BonsaiTrieHash, config: BonsaiStorageConfig) -> Self; + + // Insert a new key/value in the trie, overwriting the previous value if it exists + // If the value already exists it will overwrite it and return the previous value if any + fn insert(&mut self, key: &[u8], value: &[u8]) -> Result<(), BonsaiStorageError>; + + // Remove a key/value in the trie + // If the value doesn't exist it will do nothing + fn remove(&mut self, key: &[u8]) -> Result<(), BonsaiStorageError>; + + // Commit all the changes to the trie + // This is in charge of saving the in-memory `insert`/`remove` operations in the database otherwise + fn commit(&mut self, id: CommitID) -> Result<(), BonsaiStorageError>; + + // Get a value in the trie + fn get(&self, key: &[u8]) -> Result>, BonsaiStorageError>; + + // contains checks if the key exists + fn contains(&self, key: &[u8]) -> Result; + + // Go to a specific commit ID using trie logs and snapshots. + // If insert/remove is called between the last `commit()` and a call to this function, + // the in-memory changes will be discarded + fn go_to(&mut self, commit_id: CommitID) -> Result<(), BonsaiStorageError>; + + // Get the root hash of the trie, at the state of the latest commit + fn root_hash(&self) -> Hash; +} +---- + +==== Usage example + +For example you will be able to use the interface like this: + +[source,rust] +---- +fn main() { + let mut db = KeyValueDB::::new(RocksDB::new("./rocksdb")); // add empty node + let mut root = BonsaiTrieHash::default(); + let mut bonsai_storage = BonsaiStorage::new(&mut db, &mut root, BonsaiStorageConfig::default()); + let mut id_builder = BasicIdBuilder::new(); + bonsai_storage.insert(&[1, 2, 3, 4, 5, 6], &[4, 5, 6]); + bonsai_storage.insert(&[1, 2, 3, 4, 5, 7], &[4, 5, 8]); + bonsai_storage.commit(id_builder.new_id()); + bonsai_storage.insert(&[1, 2, 2], &[7, 5, 6]); + let go_to_id = id_builder.new_id(); + bonsai_storage.commit(go_to_id); + bonsai_storage.remove(&[1, 2, 2]); + bonsai_storage.commit(id_builder.new_id()); + println!("root hash: {:#?}", bonsai_storage.root()); + println!( + "value for key [1, 2, 3, 4, 5, 6]: {:#?}", + bonsai_storage.get(&[1, 2, 3, 4, 5, 6]).unwrap() + ); + bonsai_storage.go_to(go_to_id).unwrap(); + println!("root hash: {:#?}", bonsai_storage.root()); + println!("value for key [1, 2, 2]: {:#?}", bonsai_storage.get(&[1, 2, 2]).unwrap()); +} +---- + +=== Tests + +We provide the following tests: + +- A test with a simple set of key/value +- A test with a big set of key/value +- A test with different types of `TrieValue` +- A test with behavior closest to the one of Madara. diff --git a/documentation/specification.html b/documentation/specification.html new file mode 100644 index 0000000..986fbdd --- /dev/null +++ b/documentation/specification.html @@ -0,0 +1,35811 @@ + + + +Besu Bonsaï like storage: Specification + + + + + + + + + + +
+

Besu Bonsaï like storage: Specification

+

+
+ + +
+
+

1. Introduction

+
+
+

1.1. Scope of the document

+
+

This specification is the entrypoint for developers to contribute to the project and provides all the guidelines to organize the work efficiently. This document should be enough to work as a team with all the necessary explanations and overview of the whole project. This document will evolve over time.

+
+
+
+

1.2. Target of the document

+
+

This document should be a starting point and a reference for all the developers that contribute and a high level source of documentation about the project.

+
+
+

A technical expertise in Rust is required to understand the interfaces. The rest of the document is readable with limited knowledge of the technical principles involved.

+
+
+
+

1.3. Concepts and Vocabulary

+
+

1.3.1. Besu Bonsai storage

+
+

Besu Bonsai storage is an advanced storage management system developed by HyperLedger for their Ethereum client, Besu. +For a detailed specification, follow this link.

+
+
+
+

1.3.2. Trie

+
+

Unlike a conventional tree, a trie is designed so that each node (except the root) represents a byte. Each path descending the trie can symbolize a key in the form of a byte array. Each key is associated to an arbitrary value, making the trie a key-value data structure. +To better understand, consider the following illustration:

+
+
+

Tree structure

+
+
+

In this trie, connected nodes form keys by appending the key byte they represent. For instance, the trie contains keys like A - with a value of 15, to - 7, tea - 3, and so on. However, t or te aren’t keys but merely prefixes.

+
+
+

For a deeper dive into tries, follow this link. The advantages of the trie data structure are detailed here.

+
+
+
+

1.3.3. Radix trie

+
+

Also known as a radix tree, compact prefix tree or compressed trie, a radix trie is data structure that represents a space-optimized trie in which each node that is the only child is merged with its parent. Here’s a visual representation:

+
+
+

Radix trie

+
+
+

In this trie, the nodes om, ub, ulus …​ are merged into a single node, as they are the only children of their parent. Instead of needing 7 nodes to represent the key romulus, each letter having its node, this space-optimized representation only needs 3, r, om and ulus.

+
+
+

For a deeper dive into radix tries, follow this link.

+
+
+
+

1.3.4. PATRICIA tree

+
+

A PATRICIA tree, which stands for Practical Algorithm to Retrieve Information Coded in Alphanumeric, is a special variant of the radix trie where the radix is equal to 2. This implies that each node carries a 1-bit portion of the key and has at most two children (child 0 and child 1).

+
+
+

For a deeper explanation of the difference between PATRICIA tree and radix trie, you can explore here.

+
+
+

The PATRICIA tree in Ethereum also provides optimizations on the trie format that are detailed here.

+
+
+
+

1.3.5. Merkle Tree

+
+

A Merkle Tree is a specialized tree where every "leaf" or node is labeled with the cryptographic hash of a data block. Conversely, every non-leaf node, often referred to as a branch, inner node, or inode, carries the cryptographic hash of its child nodes' labels. Here’s a visual representation:

+
+
+

Merkle Tree

+
+
+

In this depiction, hashes 0-0 and 0-1 represent the hash values of data blocks L1 and L2, respectively. Meanwhile, hash 0 is derived from the combined hashes 0-0 and 0-1.

+
+
+

For comprehensive information on the Merkle Tree, visit here. The benefits of the Merkle Tree data structure are outlined here.

+
+
+

One important feature of Merkle Trees is that they allow exhibiting compact proofs of existence of an element in the tree. The proof size is logarithmic in the number of elements in the tree.

+
+
+
+

1.3.6. Merkle-Patricia Trie

+
+

A Merkle-Patricia Trie (MPT) is a combination of a Merkle Tree and a Patricia Tree. This data structure is famous because it is being used by Ethereum to store the state of an Ethereum blockchain. The Ethereum version of the MPT is composed of 3 types of nodes:

+
+
+
    +
  • +

    Branch: A node with up to 16 child links, each corresponding to a hex character.

    +
  • +
  • +

    Extension: A node storing a key segment with a common prefix and a link to the next node.

    +
  • +
  • +

    Leaf: An end-node holding the key’s final segment and its value.

    +
  • +
+
+
+

Here’s a visual representation:

+
+
+

Patricia Merkle Trie in Ethereum

+
+
+

In this depiction, the key a77d397, having the value of 0.12 ETH, is stored using 5 nodes (a7 - extension node, 7 - branch node, d3 extension node, 9 - branch node, 7 - leaf node).

+
+
+
+
+

1.4. External Resources

+
+
+
Substrate
+
+

Substrate is a Rust framework developed by ParityTech, designed to facilitate the creation of blockchain nodes.

+
+
+
+
+
+

1.5. Versions

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
VersionDateAuthorDescription

0.1

2023-11-16

Aurélien FOUCAULT

Initial version

0.2

2023-11-20

Aurélien FOUCAULT

Rework interfaces

+
+
+
+
+

2. Function Description

+
+
+

2.1. Actors

+
+

2.1.1. Caller

+
+

The library is designed for callers who need a key-value data structure with efficient data management operations for retrieval, storage and deletion, while maintaining a global fingerprint (hash) of the whole structure that allows for compact proofs of element existence. Callers can either use the library directly or through another intermediary library. The primary advantage is that callers can utilize the library without delving into its underlying implementation and can choose a database implementation that suits their needs.

+
+
+
+

2.1.2. High-Level Interface

+
+

This interface serves as the library’s main entry point and the primary interface for callers. It simplifies interactions with the library, ensuring that the caller only engages with this interface, abstracting away the complexities of the underlying processes.

+
+
+
+

2.1.3. Accumulator

+
+

The accumulator plays a pivotal role in the management of the state of the data structure. It facilitates the addition of new states and retrieves states at specific point in time. The high-level interface leverages the accumulator for these tasks.

+
+
+
+

2.1.4. Trie

+
+

Trie is the chosen data structure for data storage within the library. Both the accumulator and the high-level interface utilize the Trie for data operations.

+
+
+
+

2.1.5. Trie Logs

+
+

Trie logs capture batches of modifications, detailing every change made during the processing of a "commit" which is an atomic batch of modifications that can for example represent the changes caused by the execution of block in a blockchain. These log are required to the accumulator when it needs to roll back or roll forward to a particular state.

+
+
+
+

2.1.6. Database Interface

+
+

Serving as the underlying persistent storage mechanism, the database ensures data longevity by saving it to the disk. While various library components rely on the database for low-level data management, its interface is implemented by the caller. This design choice maximizes abstraction and portability, allowing the library to be adaptable across different database implementations.

+
+
+
+
+

2.2. Diagrams

+
+

2.2.1. Use case

+
+
+Diagram +
+
+
+
+
+

2.3. Sequence

+
+
+Diagram +
+
+
+
+
+
+

3. Technical Description

+
+
+

3.1. Trie

+
+

The Trie is the central component of the Besu storage system. To avoid reimplementing a PMT, we use the crate Trie from paritytech which provides a standard PMT. This choice was made for multiple reasons:

+
+
+
    +
  • +

    It avoids re-implementing a PMT.

    +
  • +
  • +

    It provides the flexibility to create Tries formatted for different blockchains.

    +
  • +
  • +

    The code has a lot of generics and gives us the possibility to make modifications to the PMT structure easily.

    +
  • +
+
+
+

We only use the sub-crate trie-db and override its keys, database, and layout implementations. +However, this sub-crate only solves part of the problem: +- In a Bonsai Trie, we store nodes directly by their location, while the Trie crate stores them by hash +- The Trie crate does not allow the implementation of trie logs, which require some modifications to the crate code

+
+
+

Given those constraints, we forked the Trie crate while minimizing the changes to the code. +Our modifications make the crate more generic and are being proposed to the maintainers as an upstream PR.

+
+
+

3.1.1. Attributes

+
+

No attributes need to be defined. All traits are detailed below.

+
+
+
+

3.1.2. Traits/Implementations

+
+
Trie interface
+
+

The TrieDBMut structure of the trie crate is used. Definition can be found here

+
+
+
+
+

3.1.3. Database trait

+
+

The Trie crate from paritytech already provides a database trait described here. We reuse the same trait for this part of the project.

+
+
+
+

3.1.4. Child encoding

+
+

In the sub-crate trie-db, the children of a branch node are either inline or referenced by hash. In a Bonsai Trie, as the nodes are stored by their locations, we still want to save the hash to have it cached when parent hashes need to be computed (up to the trie root hash).

+
+
+
+

3.1.5. Node encoding

+
+

The sub-crate reference-trie` gives the implementations of trait NodeCodec (that manages the serialization/deserialization of nodes to store them in DB) with the same behavior as the one used on Substrate. We re-use it as it corresponds to our needs and gives us more compatibility with existing Substrate code.

+
+
+
+
+

3.2. Accumulator

+
+

The accumulator is an optimization component that is used to register all the reads and changes made to provide optimizations for future actions. For example when reading a value, in a second thread, the path in the trie will be loaded in the accumulator in case the value is modified in the same batch of changes

+
+
+
+

3.3. Trie logs

+
+

Trie logs store a batch of modifications to the trie to be applied to a state.

+
+
+

3.3.1. Attribute

+
+
    +
  • +

    In each trie log, we should save all keys/values that are modified within HashMap<ID, Vec<(Option<Vec<u8>>, Option<Vec<u8>>)>. The value is represented as Vec<(Option<Vec<u8>>, Option<Vec<u8>> to be able to hold the old value (if existed) and the new one (if we are not in a remove operation) for each key.

    +
  • +
  • +

    An ID

    +
  • +
+
+
+
+

3.3.2. Traits/Implementations

+
+
+
impl TrieLog<CommitID>
+where:
+  CommitID: Id {
+    // Initialize a trie log with a batch of modifications
+    fn new(id: CommitID, modifications: Vec<(Option<Vec<u8>>, Option<Vec<u8>>)>) -> Self
+
+    // Get the associated CommitID
+    fn get_commit_id(&self) -> CommitID;
+}
+
+
+
+
+
+

3.4. Database

+
+

The database implementation is generic on the underlying database. We provide a first implementation of the database using RocksDB.

+
+
+

All methods take an optional transaction type that allows making transactional modifications to the database if the database type allows it. If the transaction object is provided, we don’t update the DB directly but accumulate the changes into the provided TX, and commit it afterwards.

+
+
+

3.4.1. Attributes

+
+
    +
  • +

    A connector to the database

    +
  • +
+
+
+
+

3.4.2. Traits/Implementations

+
+
+
pub enum DatabaseError {
+    // All errors related to the db, omitted here
+}
+
+pub trait BonsaiDatabase {
+    fn new(path_to_database: &str) -> Self
+
+    // Insert an entry in the trie
+    fn insert(&mut self, key: &[u8], value: &[u8]) -> Result<(), DatabaseError>;
+
+    // Remove an entry from the trie
+    fn remove(&mut self, key: &[u8]) -> Result<(), DatabaseError>;
+
+    // Get a value in trie
+    fn get(&self, key: &[u8]) -> Result<Vec<u8>, DatabaseError>;
+
+    // Check if the key is in trie
+    fn contains(&self, key: &[u8]) -> Result<bool, DatabaseError>;
+
+    // PUT operation in TRIE_LOG column
+    fn put_trie_log(&mut self, key: &[u8], value: &[u8]) -> Result<(), DatabaseError>;
+
+    // GET operation in TRIE_LOG column
+    fn get_trie_log(&self, key: &[u8]) -> Result<Vec<u8>, DatabaseError>;
+
+    // Generate a snapshot
+    fn generate_snapshot(&mut self) -> Result<u64, DatabaseError>
+
+    // Get a snapshot
+    fn get_snapshot(&self, snapshot_id: u64) -> Result<BonsaiDatabase, DatabaseError>
+}
+
+
+
+
+
+

3.5. User-facing interface

+
+

This is the main interface that the Caller interacts with.

+
+
+

3.5.1. Definition

+
+
+
// Error type for the interface (elided)
+pub enum BonsaiStorageError {}
+
+// Configuration
+// None = unlimited
+pub struct BonsaiStorageConfig {
+    pub max_trie_log_size: Option<usize>,
+    pub max_snapshot_saved: Option<usize>,
+    pub max_trie_logs_in_memory: Option<usize>,
+    pub snapshot_interval: usize,
+}
+
+pub trait BonsaiStorage<'a, CommitID>
+where:
+  CommitID: Id {
+    // Create a new bonsai storage instance
+    fn new(db: &'a mut KeyValueDB<DB, CommitID>, root: &'a mut BonsaiTrieHash, config: BonsaiStorageConfig) -> Self;
+
+    // Insert a new key/value in the trie, overwriting the previous value if it exists
+    // If the value already exists it will overwrite it and return the previous value if any
+    fn insert(&mut self, key: &[u8], value: &[u8]) -> Result<Option<Vec<u8>, BonsaiStorageError>;
+
+    // Remove a key/value in the trie
+    // If the value doesn't exist it will do nothing
+    fn remove(&mut self, key: &[u8]) -> Result<Option<Vec<u8>>, BonsaiStorageError>;
+
+    // Commit all the changes to the trie
+    // This is in charge of saving the in-memory `insert`/`remove` operations in the database otherwise
+    fn commit(&mut self, id: CommitID) -> Result<(), BonsaiStorageError>;
+
+    // Get a value in the trie
+    fn get(&self, key: &[u8]) -> Result<Option<Vec<u8>>, BonsaiStorageError>;
+
+    // contains checks if the key exists
+    fn contains(&self, key: &[u8]) -> Result<bool, BonsaiStorageError>;
+
+    // Go to a specific commit ID using trie logs and snapshots.
+    // If insert/remove is called between the last `commit()` and a call to this function,
+    // the in-memory changes will be discarded
+    fn go_to(&mut self, commit_id: CommitID) -> Result<(), BonsaiStorageError>;
+
+    // Get the root hash of the trie, at the state of the latest commit
+    fn root_hash(&self) -> Hash;
+}
+
+
+
+
+

3.5.2. Usage example

+
+

For example you will be able to use the interface like this:

+
+
+
+
fn main() {
+  let mut db = KeyValueDB::<RocksDB, BasicId>::new(RocksDB::new("./rocksdb")); // add empty node
+  let mut root = BonsaiTrieHash::default();
+  let mut bonsai_storage = BonsaiStorage::new(&mut db, &mut root, BonsaiStorageConfig::default());
+  let mut id_builder = BasicIdBuilder::new();
+  bonsai_storage.insert(&[1, 2, 3, 4, 5, 6], &[4, 5, 6]);
+  bonsai_storage.insert(&[1, 2, 3, 4, 5, 7], &[4, 5, 8]);
+  bonsai_storage.commit(id_builder.new_id());
+  bonsai_storage.insert(&[1, 2, 2], &[7, 5, 6]);
+  let go_to_id = id_builder.new_id();
+  bonsai_storage.commit(go_to_id);
+  bonsai_storage.remove(&[1, 2, 2]);
+  bonsai_storage.commit(id_builder.new_id());
+  println!("root hash: {:#?}", bonsai_storage.root());
+  println!(
+      "value for key [1, 2, 3, 4, 5, 6]: {:#?}",
+      bonsai_storage.get(&[1, 2, 3, 4, 5, 6]).unwrap()
+  );
+  bonsai_storage.go_to(go_to_id).unwrap();
+  println!("root hash: {:#?}", bonsai_storage.root());
+  println!("value for key [1, 2, 2]: {:#?}", bonsai_storage.get(&[1, 2, 2]).unwrap());
+}
+
+
+
+
+
+

3.6. Tests

+
+

We provide the following tests:

+
+
+
    +
  • +

    A test with a simple set of key/value

    +
  • +
  • +

    A test with a big set of key/value

    +
  • +
  • +

    A test with different types of TrieValue

    +
  • +
  • +

    A test with behavior closest to the one of Madara.

    +
  • +
+
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/documentation/specification.pdf b/documentation/specification.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3751c7712a473cdf20be3974e7360f95c5ca729a GIT binary patch literal 689412 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

)lGK9q&WSZPDNW zqORSVs;z;c<$6lf#9n#(zgm}>Bd(_szHlRCRNG4V>yiZdd41u`fhc0D*`IRmHJ-)> z%#@v?d~I;P`F-p>r^q_BCg3^z4cqbb@^kl&ftU@MZ@Pi>VSqEXg?Z~LXzZB~KT zbDOkc!^0;Gz%#|n~DLp>O!Gs%2qu z-mrsCRm|1ySHzqboc(b_nMil<-!BT%XxFdq1>yz%51&G>8WOsHzlaHP z7PQ+m#=g|*cf1G{i1)1{U-uLJPk*EY!C2x_itj%RiRb=)x@R9OGwNIErt`BMA1na} z;~|cl)$BKK*F>_{Z`@*`crRj=U~D(jbxKHPjaS`|&GPu=_2!txxiz19OqRC$@L@kK zWWT?N3o*xBfXBbx*MCd&d~gpo9j>hf`GAXiZm*Bgq(Ydq&2g*Sc5Td{vLC^6)#MOd82OnSzd3d zJ(aJcoNs!hG#_w0{oDL!IZXYuM?>?3(-|`!FCTg@_+AP4v^#UcB(nZk9=926-Fb_9 zC5D9qdz_tkXHH2d!ziiXlpR=Dt~YkWOh3$M&`VB6hw2|>catRTSV>NaCkH= z@^PRt?6#xAs&TmKq<&l#BQuBd0B`JOLB?y#s6mHRY8j|yr@n2S4=22!QuzO4>1(5T z{)g2I9K?gimhL*JN9g+1%AS473nwn<&*@j&psSS;dycko;S3(;gh~oLpF2utI>9ip zE<)3*nxH*t#DGbYaYH;G0dCVPQ5io}?U0Gv$z+-ZHRl^+~k6y63)nb zKV-v%%W-mIE)ek^x`9{E9~?DKW%HI**R&%z4Oq*9f$`)1Y zqPzF}DRxx@uhYN{x#LuQ#~n^YOjVTNyU-r-_hyLaE6#Rr+tTNv8g7+(6pg;yGkPnH zV*hN{{DHXsI0KcqOG*RPuWDRM*K1x%H);HkUN`uUCp!& z8Luu<4H-iG9H~qvj;IiwNQcYqavY(Jfj?B+H7MCb_+JNw0g8`$A8}aO{3zmcfG0nPHL`*zSXB%Q9fD6fRg|o)sI_F z-vtDW^SJzlSu>Ud#OGY`5?CteA++@%bRXwZJCiM&{Q?1tO7MhOev!}h{j^-mLj?R8 zzAgO`C~HcNULfKmXEYKVjyNUuE_J$+D>7P2|w518r zpLJl_cVo_9>M>>zT92jJf_1$ z2@RLJ&VI2MV}WDhnw4I~gf`mXkjlU*(O>g>IeKfFGIC#^K^pz(r`02VE#ZfyIL}(t zzp7t&&k98()W%Q6_!I<$M&0O7?slqQJPU#>j@oL>;D8MsB5OXGSf|ziR&*W57Y6T43tA@un(`D zq0ZDS_-n%$AA;a2rL=sLQJnu0G{$0pA~AYDfIWO|3=(-jL+G{l&P|*@4;s8xyPuTm=ngC%1&vhh2Nmcy0JOo z5v{|XvQyGqk_4Q+lSm@U3>STfRF<$502VzkT+ExxEiHjrXV#)Gx4I3(S$s-jwCICxiX@79+?c($k>H*I7&Cz4L}X|Z z=OI;Zk#HW>7PpY2WNv6mZriVHhLJL;!j5?P#fs4;90i4=V&n%`)!QCQtHyGGR<1b7 zv!Nw}8ifR2@ksIIkbq==!3L13gb9l*{Bs?jZsvSQYA1K@U@lkw5@k(AGe(+QStUNE zm^F4kF4!5IwEUTY=J{S)ArUEHV)wefdj&IUh^3_ zo4`2mCcY^mFFdP%bH-DvAEuf#avnR08BY#;o>xXy!>iIFrt2K#c_Cj$ANM3~=t|V; ze2Mrz4eUvSK9IK{p^(SY<$uoM8=8wZbTJ`ZLSfWFC1}(tdp9s_&i6 zJ%;-Owj#fANt?UEKpq~Vy4M2XjeZ~GyT}5`kLJ+I-bGz zB&E|tTXQ|(7B3RB8Cx7-EKWfoSqdYTdU#ytyynoyJcN4~Ni{K2;~mmBnquF_5Q5A< zO&FykE<(RJj}^lng?5w+2+c@QEzGM4^gk~AUh0a$AHEwP3(a{dn%@2+y`eEP4jq?_ zhRv~C63B&WhsJqFZ*tF-jCJ^qUCRtc2bO3ZrYdgtly^=%YZJAhplT%0ekd=z{WeI= z`mfG%Esi%UPvVlT4Y$u?@1*Wzvk;O&=dNXKx1?hj-}Q4;#k7y%pL4@_!vyZ{k9cM8 z}E}QE4x@qEu^uo z7dL*S*2{xGYLh6}?@;{{L z!HzfsjWBCst*?keRh9trfCnr}alcjr6x#sctf~|Ts|0YekrvGs17#|fkWl2hC7&u- zPYn`iRW*(z)QGgei!2svD4{V@^_TM?NfNYOI^S4TZbmGQpC*Qhvn8bJsy|5t2zEgU|x|O=Jz?H3P$OI&hmL3t+jy@7U@T}zG7u3u&{_L z4W7IXj%QP_%uU!IMhkU!BPA=j`5G8E8R4<7X)QAJZPc!$+OioQ6ZJ3?KvFyRMFhR^rk)c^uI&C8Iu!CjwM@s`&^+x z78Z@+N9Fivq~C}Bp85=!XGe{@$LR*F7$BZdV&wj$5}(6J{Aa7@_Z*^A#gax>+fo8J zt7Uh2T3!u&S+bC$6u)(JU*M@hN&_Su620#cKJ&lR6BpLj9qJ*Oir`RQxK zYi~pv#1E}mVj|55odP1cxxJO%!g!n`-4#KWTgjh}=?=y{sX(fJov8?K&0!y5QXNED z+DsCO?@4K&S-U23=3E-2mq-Z4U-2IOaYO%A<&9p7&q(Y%&42~J#$6(^#s-*`cq%4i zp>Mv?NG3T48JZE{CLeKD#L(9j#{LV9)YLpvev8%ZPD@=rHJ|)sWw`N`y&NKQN+@>{ zE?RW%FS5A+ApNaiPD4&`gO6MK<)?@4l6!@|Qm1EZ!04eu51z*zSA1K~v-c0~nauom!+bNTM>^Xkt%EemM_1RaWBHqN=yCq~hP|}wkA_jy zH$On%C%_lK^6f7*5xSfh<8;FO=iv5*}Pe%S$84kNj>2Y*Me5g)6~dGe-nJ z-&sTG%x*i1K>nkx0tYCtJAo5E1;E19L3A^AYMS%4>!)1HOT=}Dw{9TmNgY*7?C$jDveg+o{y#U924826rD>9|$d|0X zh`Kz+u~lEjeOR!F&8xBmOJ=lF;a~!VISxY_WNYOF+%y}^c$z5*YKxaEm!n#=KCOh% zv=%S(7?Qex`iKoUjyH>!X?@fisJKsxm%lFg`SIQ{c!2x@R`hW$T(j6O_?%3Qad!8X zm1D2mc`O{HdEL1)@*S8{Hwzr%5xB2@o8~*vF}Ln74;XtGr)>s_acOYy`7GB#uk6Ge z1B0!u>{^-;YHrW3jtLUmj3|7TiB|TO?`#taND;jz8w4dteU|$iryDp2avZYVI=}P< zwK#0#I&hmw)*kLHzpIF*9501Ac}+L0KiWU=IhXz0o84QUz?x`?$ahFzuEW2@S=xio zl0t{ea8VnQ>bqrk{=4Ofz~;N82<0#z>Z9c z08lG(fY(Y-A(FkoQhLWIOUB^2G;D|A2i+_o&N3m%&r{}8U{sz;GV&tET0l|$4aqo!m(m(xk| z!OcnOT~W7Z?jPjW<*0V`BjnaYtQ(o26MxgYTE7dMotGugguanm=iC1(&z)2ZIi0qe z!SYo5{^*Xu-<==PrE=<|4)NLB*FTw<7Ij1gpRBOW)To}MOfW)8gvoy{_h-q?-BkTm ztZI@NK1ThSo}{m#*$*p3FZJAApaqLF_2&Iz?;|B#i0`m_KS>5%bteyko5lz|3BdjN z=zduU{wAfRUe1HjF#8nw@3^c@5!Yyu$o?;LI^}V~_PRP%Q#JZL{Qe{7^8QdEn5xN~ zRYmtGypZ{E)>!*rOd)f6*Rk^#O$huV%VTNX`m2dVmG#2%3?h5waoP2q$ia(rs!!`X zGl5h`j8Ii%zR*Xtq|tRTeKrFA(gxD-^mR-^;!hie$>NGowWRbOAI9M%%AsmSsOo1v z(Iuwg_Zn17)lBoM27J8B*2C`|sg~gS4dD7&Z|p1B=9Dy(RW@7?;QYo$k?n`Gy(w+) zdF3iw`yt(J@_k(OZ6MI%#gcUWr9K0;13?3QeP60;c$s4D~67`|Ewl=)djK zLPRl>XOfKA5^W+x{+OK60$=Tb%fDWC?~(b{;%e2PB?NEwdWB@Yv;!RU5KS5DOFER4 z3zim2G(Jz2Ew+{z4!4#Jm~PcU3RAuL*Q1R?7nQPFY?h)c6c^+gWPu2q5;9IKCBH02 z=@i<1)hRUQ=17%pig%fnRYvr^oVOuGTMKDWKRE0Z_5Xzj7(siLb$9 z5xeeJ*K|=X3+(Nbeor0p2kV4egmwu-Dvm_{F}CT8zJI6{mba>PXJUUZt8wKK{h3717<}_z^qZP{0)n@B1|!4*cgUmIMFsBV{B)~e^r zAHO%al9KZDTO14Rzx$Y{8ef>Wpcpxk02IDlnn5u&big?Zjy3ZI+!|rogE{h(NQpUc zRLgoWo4RyAewOT|+wNt^7Ki|3z#Qu{9N(9zunoA&`uv&7NBS8V|GP&er?~Si&8Fqc z$Ag}xDLK-GE@>kxyC$Jr&E%mdhJP(eOJEX-A0LCS!zg4-s%7{!t@Se(J|b~lg#Gii zWesG(V>Q#i8raE|l^+gew)_PBzO{NhGjQ!x8vB@5CU?@@O76pX4F>iF_Q+)-v0=;D z#(R!HT(5MQjFd{(=BlJ#o-2w$ zd9IoDQNS`QgkQJ;_5e}IeN3`DUeWbx@4(baQsQd&zhp+t`?{+O_^Uqu?F3c3Qni1d zLR+2}<%wr^s*?A{J&o9wqME{1a37~0N_czLT+9-Te{0nDJ&?W z-0F!7>}2t%roJb?tt;H=_qj3t*4|#;7T>*#$Q}P+#z&B?7}fJFAT{>R+w|)@G0c(3 zwEt007|yJ>7(4{o*5~ifJzV$+vRSd{&KD852(nH5(;2qrvq?`XM-;qClHP=mcX833 zH&%`a{6~e32bPVlU#h1%-Whg}uGbX7Pm6uv#>xKqrEk6FKPEAj|3i(`Kt?RZ*nVj2 zibRdNDkk21rJP-G+)L+=N=b1pjoE8{@o_vy`#R;oGI_p`i~taTTttE zb}ZN4KI``HduRBo()887vWQ_0MfUCnaao*y{vTDx7ct&%DYq$1&PJZy3qQEzOr5-A zdCyIrE$uB9G4|8){pGLfd)s7Z&b5pe+mMXu?9h*HMdLeA!Rtk+$X_wzuLqld*h#WA zv!B0Lh|cvtd_5PuuBvc7xE$@u77-(A2kh9R#^7pKr}xX>jr4AILqvrvMZ^?bXrl(c zX$xCi+&^S--ou|ZZ_}}T-AG7*@4XAp@pvpQwqL$poMWm>v{_<8exNzPoBjRyV{wI( z%{uL)22l55WsUInzSUEPdC%hCb9q?)dgP>~a%F<^;Wd!P#(+kdn8+On?<s4ryYw>IaV5NV+@VkfK_JsF_-6~tm>fzqqVcu6hG)7ut3XI+ZMJRna24SsUw>A@CSjox_KJ+g>+*c&LQeYcxC=W^Kb1cdiWD7 z@N61uN0dnIH^!Oh6Dx#1P_;~{Z0D;whA#iOS955Ac;guvw$WqQP$mrTF0-;x$-pjT z`?m?-GBP%!(-m$N zTy!F>X^Gi7_4Zq*)iNcs3$alF>0DYpWA9<}k~;>Gld?NO-8gn{3VL^H?9NAbE+2RM zcHmQx&!pUekIFKWZhg@k>Dd8p-TV&jPs9y1xQ>b z&+c4Q=aL0j9(+`j)f8+!3*L?Gi{5CI`dPu#Z!&S!1F$^OqsKyvOt&l3$8HDaOj(4o zZ5sEzE&C0f#afV^+qO+eGjXeiRd(r!PxCH6Bi&8ht6d<=SX@x{wZHFH_cbM@4%@=6 z^IsHXI+Y^XEw3J9G-6jdkuD8m>O&6o%efS2Amul~@xwOQE++3_Y_?ed6Hzk~MPxNB z@AOBX6%))N)w5EtUOm%XzW)X#jQI4-;!EY4=pOmk7*kn7jExlAGx{4@nA!1R!(Ia@ z&YYKk|DC}>NP!410i2>I5P!E_9D6s;@+r0lSF!FxxPw79S2$JN!;Iq7Z>`dVJDTE8 z0f03mo0!MWLrsKEpG?Goxt-v5)|D5~P{P-H-YV=I*eg$h?6G#3Oyd5g7w@3H z)cS~+>4zT@ChbFsN;-FkM&-_|!dg^&iv))F$qs>7gyI*&ytsJHeRcM;*_laGv;3Bg|N6C(F#wh3CYVoY zwgn4oGL)W|xnJHUByhE>YgB4p6&9GfofQ`BO%^iHBaeG)YE*u4*VF(PoT(^&u8xS? z(6|4HvHC+(W9UgraXq%2l>Sc$KRt4~nZw7A*bX0m4Hzd7*@m<-F)jRt55HFu65zl3 z5)$&)^9m$fH8su-(&GZ3o6_UDJ~c8jDY>d^L??Yz?Bq8|NFe`DKjMG71TIw+JLTrm z<2I5r@Ojww^PEzgxy5XI9lnOuVD(XR5}GR$rlrNlZD7~g=&dCX)i~X3Jp7C^cb)d> zudg_X$PD0f4QUwf+XT0-dE?$@sbC2T)iS*+-^HEo8L3g%Xz{2I*;Y|>l(unj{b6dv z0*9Th@o4oegX&>07cYjzJHNniN_InUDkv_H9&TzS-YOj4Y6212C>(wKE?gzqRC=6L zw~M-ld%{CRTp;1T!^a_uK2iE!Wq8>mil4d$LW`#G+W^I9#(cwBvZ%C#7XQw$ukwmp z0HmBVpOoN{3Lx!P-aDdtu8Og0YU{zFstd#J){8p{z-#8q#;kcDk*FmjZ^(#3rJc%e zCx3Nk8`NHrgye^+8#TcsV#=MW8=U=BCG%^6xxU`&n>aOw6Mw_?-KInt5nf55x|6a3 zWh8Cw^qTs(4h0mVusqo+;A*zp8EM5 zkYY~l6<2ccbW{PnSptQ($cv7NK~&Qq-(*E$sAXNm>ZpY;PODz($>=Xwqv4}$N%Eg; z4WbdLn))I^`CtOY`4|1>H_py)R}YfyhzT0U;iW4=7R|yo6n)Q`HOO&6oazAnelMcK>1MfxO?@@FLXM4HwgFo-W>MINb_w4IpE(W z@Fu0!$pYZ69oSE5h%4+qB`THGn_4sXEA1!@Bj_Ztg$QM*tg>F){SmVPJvNCLOTH8R zqs-K4QQKMEn=VbmCtQD#JI<8`nd|RkF7pUdF>)opC|4pYea~pGWR>1PT!H6~vKz)i zB#gg7kWYo240_dtvk_#KKctn{rZsfbj<(+MbbaIP2_UvtUIOz?o z{FA+N_Md$EI79EC#G?k|2dss-FXE>D{vZ4YQT|~eaxD4-wLb#lqYyg&Vweh9f;yZP zNd5QSVF(1+QmeshH@8>qIFvXjt}6|>&ClJGcdU`0nr<@I~s ziJ;h=V!HI(jAS*RJHBN`Jw!KgZoJOKZ?lSf*sP{5s8=%aFO!dB9e6)@O|I1dlsUR* zvIjqV`HLtNT%uh@4f-Wz4cE*C{*3GE4IWvYgDoeUJ^OeWGl(Uwe1?72QoYRQqIP^+ zn!wpYXR&c9Jef?CJl#~AWa`g>(KTry@#pj0+jA`ms_!c&P&HEANy^AW)vs9<;^*pA z1^J=bkzyMNG<+kFy-+GACuCqn5t)hYGbxI(+am;lJWlK?X6wZ@lvOx+wa9 zo^RZ^m$@4BzSGERnR=%{jru-gqlEDE_lgc_9R@;UPBWaRaqsuM`p^`AyfRMiV0?D$ z>$>G*2=eWt>;miX~bIYy_;0b=L(+urC;2D9REwEUyK}}& z6kSgT-61a8q105IT5+#N#PBED*gdi?=Q zUjA=iVFOXtJ|<_Ym~q8UwrQ+b?`n3OQgodMn^pGA{6Suy_kwVg--;Ukn;SP=;WaFk zE4$N+Z?YOMU*{?|>i$CW$EbVT{8RJK;XtisL!0@mV-hwK;16s!1Zn7->EtU`q=; zBw*uy1J}^N>I#?ZWYqnWVS~JUt9;#jKS)09!3F}MF1LZ;ZR<$6XIO(vdlZK|kM!oj zsWav4T}5m2V9rdE`N{=axTEAg!X1@z_DIgwt_r{BqIyKmrpebFGF%Eb`3pu1+ySf& zHjpRUs{e+?d2nO)sSN}we8X!f?*Jdl*B+f%4c>*05c*PDPhw53boJh`Zz`xYha9E^ z`(P)hm;X1+`K%|Iyi+~+?f`fH>?&Nx-0GMOBxfAAd8vF|DlGTtd$S>?<13uEqK#q- zj!4J9#s=aI94lY1M#z98K^A~x(uK7(>Pt2DYPzgCAvC;5G%h2lC}mDcIU&+edNg6U zWrlB|NFodOc-CEiMXbb{;uX|aI6<+a5XE(%43Y6|slDTPXVJ-GBn^F&C_%Yl&lLcr zW(a$OuCHyNU>`@OF){L;rcv^Xq>t)t2l1fK(46lrjn+H*1O5`n)*x+Dw{w31iAj8m+c+&4Y)ck^2+N0+|nX|(W}WklYeaO^D{ z+%!tb0|Y1e6xEZYzt~&RxP1iBVbp;YAR`;k4-c9~*&f2k`1j;soS3jaFkPcj_XTxh zCmEhnIb#9pAa;@ecSRQk`?o(AfgeH7f-h1P4t|8^~d>`X`6Nt!(DerJ_D77CNtCab+` z`VGa_breB|$vN?_7J-Pr)c%H=D&@u%aP@wZt{>u@{U6z2jDeE?X}q>)J?DGT=9yhp zIMI3I`}L<2Q(QAJ8A^mx=?{JXA!PHW3md-u+;BY|!2Pv+{T>7#gvA-{eY2A!E(5<= zQ0IWp@qhB7n{PMX8A*RO*GJLkuvgaBC>urDw5JAQmFGRdAO_Q$0mLGI1ndWh3Zlmi z1nd{W)M{4STfxvu8FN~Aqy7dY*Uj8QSN5pWQB&GQXEH}-BbzJx(kc5dWx_k%X&9*C?zUGzE9 zNz3>B1p1jmk2c9LwTn6IeTR<@37mhL)OQxu7Bgv(@$Y~231BCU1QCYWv{^w(B0(6j zjzpA<54gWT2R#uerfldN_E>&_tKzK^&`{eTNG6X6wY`V~9&>a_P#~mggg$G^$~*{S zrt*-%4AQ~l&q$#iH6jqCES!k7$N9-j!3y;5`)sdlO5D5hepW(rB5I=#{7JOI!k*~X z^#Y3`Y-3e(h-_2Rk?valC*YVQ474s*{FUX`hcJ*e7fybNl?9|x_H!Nel_>=OHWb{$ zASxn@NR{o}^E~uWo1`9tJafW=#s6WI>985Q8~b+T7xPB~%MIflI zn~dj8byD5?iC-yaOo1RCg{bU2X>d^MWV%iq6_Oj^OJNoC3;=2G@hJ+${Znp{nY%Nq z_V4lV47dDIIb0j*ao0Qn*pi=>8}j@-B{9Yc2&p70=tw~PR1hzNN_~2JQr)c+cWV(fmdiBGwfe)T^OiAW zU8J0?$lf=O+UUamnp)ZEAo+?z#CNA(Ny0j0H|9&+Tyy&3A!3foEqT89w=+kUEu2Wp zJhKf*t;ocz^i_Fezw++}zc70XvvI??`blDxKTfil#ou*LSaK~;cGxD%6U;(L1U|2h zU+{F}sF-oX@=;jhAR`^kMsiwmR&=4n*N|AI9!X4$j3)a{8 ze_Vu>Ht$o)DOAzB;P3S`L`6e#d!s;&QHi?WrQ((l8cb%6nIITJ$4U>OU@kYby#2+f z)`rgTop|V-->_z=KEme0HKHWfwhEAzyog;Q1f=V}DCZ#Y**11nnG4+Uh1=Tlfb8Pe z9_qu-QZ}JqTm`#wigrU&1cNYt=lwc*@O^uXufvxDr8f_ijgGcl&=|Ug#B*O`6di_8b&;^r< zT$rUu<#7)axla@|nhGyXdMDvsuqB$a8b%HZMhrjF3_h*8Qd{93l<9=62u%kk?f z>=>`Ea%xR&IDJ?^GK86i{M2&ReckF8YxI)%ORB&GgHEfVdArF&vW3S<$&%0P@k()R z;%?~-KGAAQ6{@LM=$eU7U-+qf;%(Ha!_T`H5gcznW(RL^k)Ej2e(trqm!!2jU&^u{ z>yODtUAN6iptYD==$)@X3uzlw?|Dk)^4Fqgov>5X?C+b8vNy7_Lr*3<`VfN0iaZGV;-H$Ozn5&ar-1zhX zDb}joVmCh^rlHTZ^BiAhByuRf^JYDZ-CKOj-hJ~C|H?*fk5ZrxB^{dnm&E3KR&jNHdrz>DvGV~E%On~pW21;C5(ESx!_3-D6!js-g<&F&0+-ViSE z6i@2EZ79Bbv4;oGx7$2p{ZXB;NW#Tiq$6AQg%E~2iG9YOig?!?0)mYXb)%m(1e^i< zu*d-~-M}YK7~qZp^-P`y2>@Sf3g9@iyy;`TGwvd(e>#dd1Nb?NV#EAu4FP@wZ2scU1L$YFNfh0O*k|&(a64K^0WS>H%U(i=4pc7= z0WF!gP&M%G7k;a!vwo2AiO6k8uECMVKpWtR^^V8C9XT82?6&hS&3{yIJ2Kx%snJ;@ z>`Cl{r_4U6Yfb4k><=92{&UosJUuMx40Yi^>MkDwrh8Hkai@CA4Sux{6zN*~H+WjXwME=HY)+IgBiO%8%K$L$g@H*q5#`tG_PeqA5oY*h5?X5qc^ z!8_JGbl5OPaW+25YlX!x;rSKHi(ar<2Hkbfui*JzhNGO{u1-_GjCt9I`K4o=Q{il^ z?eK?*qa26aA&P^gpQ=tNLRRy33$C%xLuuAgnrNOtxc}yy%4nYOHQ`eV(;sX7RGMD; zKSb*>3vk0WSsjAK^CvOaV@%KBX6{PdvC|Gq-CZiL=n#3;;=Po8=xP@V7QaDUMf0;w zGlUQ21=0GoHKfPz5HDkfo|!yGk#@Cf_x6&8p2^!?%fMx{9zNT^#lKsZyGvi@2yS=d z0Ii>r+XuIM!Q}3!9N>};b7`KAmH4{W#O`k!9ARf?JRQZ0p)^k_2lW8*Pftl~O{{=m zG{LF!BUS)H;^vU%4GF-1%yiVX0olI{cZ;)o|3d?#GpBHweT!pEVTb;d!R9~pWdu_a zg1#$Zzybk#amlNRFd!-{?cZ9pD8mZGD54O zgLiNM4@*BLRa&&?clociyVryPcWr6_h@k#QTG83ce-!>nS67Sct^o3wc>VLyC7_i6 z0BbODS}d~O_+WFk_K!S;m>|Oph)O*ox?FefZ~TR zK=mN-P)=v)12BciXB;}Wq!A0uAuEkI^Pd&4Y4rSHiP;4kriJ}&%<&Ud;Q0q?Puo)!< zLNuu9&=W^}V(D772PakjxA;_M*dpTXLKA=UXRr_Sa=Y!zc&SgVQul|_v5}ZeeSu=; zyO~_CpkyNL8vW^V4tT5M2zfj^B7QwpDY=MtK*_SPE1}% zrY{q^aSpUD69*Zx*GQ*}o76-|o-`Zr?xiojN;|9fM%9If4$y`rCXnpqrDCWaZmn0E zS9!>p#Hpdro5H|)@0cWP73PZC6IBVQ!vbXxmE~h@=n802Q8$roD7IN_6EjP+o0Iv<6ED^_Q$>bZ5v5CFNUFA5l?ZRKsETYg14pnKvzM z(4)*^w8D5UxhsdM2qS3PScgm?w1l`S64tx}?>22bTfX#~mE>K~)%4BJOC}I(AjaTw zek`hnm}_yV7JwxqXkq38!Q(PWZpwqbU&>O5uK!F{!BD0e0|%n?ig3^tB~(-{>UyI5 zzWOJ!=F_SQnZH*|S-4H?gYoq!sEviOpcA^GW^-4ivvn<~=N|o11PR%js`ttBc@Q;j zh5UM{PD-Ig2MPJA6e@0`UlI#k9yf@Vpg{0L_#$2SGrp~= zog>#lK*aGNcZ`dsB}}7_bDikC1F-~1oUX-w9&+*E!gaePnJIACTz2WlG>snbA_CSa zut^0gQQB8^(&2{^0=dpD7`=OEQHREnZLw*bcF?EpOwsLgWfy7*cRLV+K?5jC1FohV z`-A!N!?_a_Xox^zfmq+l3k-T&4xrG->Z}KZ2!$9z_Y?|ZRA}WdO)20VlZYyX9t|ad z{(L~1lEQA6v{Y~7U*Gy!a>jA^qQG=|a$NKNTQY@RTx#4wYcL zBoRWE2+F9%d59FrC+=sLKM{~Rl}ir5RmU||?Lg}E!{?a|rF2E7o?TX8v)bvouQp^) zd^E4kRC18_u0==x#;VX|sv)GR`~naRBkuju=hlKJ=jU5Ql#iQca5NUn1Z#zB}p zi;9&nYGk}D^<|o&(!#U?3Q|^4ufKwGIo9{BVY*M4+ExY>>QdjXd`j3i7b~mVtmxCd zWin#0`o+4P*}A`BBjObQ2}jhk5B!1t7(h6B*P+2I`Kje=j;&#)rB+Apx!&GCG!d}1 z%>ETya8q57@X8O&ZlSWIt1ccRg9Lm8;EG7k8+^gC0odn50R&GJ+fnl^!V{%Lq6ku2 zaCg!*?gc7}eRr|mZ<&6IS1*ir#e_^pE_6( ze|p=VqpjpBS!y_pUDoCGTbCZStm~LM-%5SBQu}O-zy9MXNU%yU)1c0hwEn=Vu~Pf@%EE^}BGP&c2IsYf559vx%k--;4P0uq zY>CD0yL8rJ*ZlP*vkGgK+R4t6amr1xN|hk^l{?!}W#s!&Wdw^+ zWpNW*nDyVc_~9EVd}CkufTRzQmGyKk>!o^Ra9A10cKQf0ct%)#7>{i zIYI_pcmEO`b;>Bn;AhW9R9PTXYn3*S(SMlga8~|0wI0Foa&4j34@JV$-uJIPIv%>F z8sbACa3p4>0?BZdH7{K{>f&s+#MgU0I`@Be$#?kchlmy`wc+`$!Iy}xN^N+)Yp_k4 z4dj1<=euxu1MKk4!Is#m0B+dg%+IpGz5igEl^S+Om30}g*(PEK_v@HVz@3ir)Ta}5 zg>CTD1CDDV0c6nYe*ClSqI5=0F4TE5*7lg(esJytMd1FAjRK=VQ%FknAFqKn(^A|0 zCWaf*`k@NL`Tmzaoy8#+lVhFo+@hx;-u*DR`@>e?`nz`FR^NNT<7@9=n@GO}H!2nG z-XxF#GCUB0z3vvJ6Zs$m-YGbnc?SsI88?i`D-;Zh--73|$r%K83Ddc<7$HvZTvk){ zCtv-68qL~8kB;DTRf8vT^$R@iLrfDdrWOB7Xv;QOb&wk&{W`hH?6%swt&w4k*aowT zB|z5kO6|ze^sF?yg%4YRxX|^caa4mZ0j*}G-Wa9}ALgAbN;wqZjtY3jH28`3-;8?5 zfP?DdwK=8O1q$A5ISM&^`{Iu1m9e`DppFoQ|0b|aM9vN=tA9sJbFH9ft800M(hg?6Z64|IYbH@6=;d8;UO}b5LB_BT1;6yaY?C zeqfeWj>qbvLih^ac7K{LP;GA$y^U#eFq%J!r-*;}GD@gsvCm$Nh1x;%ep{X4YV51J zKl6UEQ9bGa0l=uFM&oys7%%J80ix{YfS+M$<}2i{9rMBJ;ZfP)di}_WQa!TU+R+77 z1}-PsgHTJ?jBRg2ubnEvdt4K5MhK!tUlWDs2MBG_uH@%6Ssj~!TmfA0Ks_pW>KF(w z8e3>`gC{4g|0O4VBK|%NmjHoDGvrlc_WGIrG^AHWsAI?S$RpM_)O=O` zKd!zpIJ01Dcj8QJ+vdc!ZF440CU!Eh?M!Ujwl%SB+qnCj@2gvN?~kr(?Z&g7wf5U@ z?_Mom-_AMj-3%+*UCCb|O(a03Ij;(B=E#nR1M=Hn^hwENGu#`Y2ZQN%M^ zc?^GnGc-|$zen%kl+J5NZ z71r*xl<-mW;)&T`{(MrM1zU_WRFheU_ztTREKWLj%K7LLw%v=qwEh-4?L*4MyF6_& zgn0T4>MXW7ZJX70Q`Ov`dj~B}&~7>T8;<0uwB?q2YIb1MKKcM{e*05!H}I zesP=JoGuV-CJ1@FL&z`BgVS+|j%MD@>$xTLP9wGf@(=E_u~MEUM;gAE=mA&)Hbd-8M(NdvbTp zfq2W`WzqF0ZZ~vNg(ztcH%XNd5JRC?t8F$Y6ReDg+#J?X_TPs@eF4mFQ`+K$#g{We z>WlHEen*i6^kNa5Xfsj&&_hFBEf!xPr?$ghtrEw7g!a~ghyO&L!}{TYi2pY+MsnCi zUa2mIfktT@R0|Sme|!JUuX7Q4FZp;Qym=UA58f@blo5Ffp&LI8 zPVB@6+WWqO5&zngv~`Qv4tLCEACaLoj}vRMslVZiXeO8{3*2hMY-d`CDhNHRRpGZ@2Ages^)cQaP-8dH^qMl93p_oRCLi0+C1Fso$R(^D91 zcx=;o-B5>e^0?D0F_XY%y*)8f|5lZD%S`b$y$&OkHbESj5sHOvnk+NBBP}=?mWEw&$?J!DQ&6cg8H;T@5c>Z zR;zq+$#+VTD`qE>41ex&1{_AYZG_4@Rqm;T(~fWn^X@kv>RN^D=U({Ww8+0^m@UjR*(D)+4ky8^|Pi%i^DD4f)n}ZD^Q(koi?;>qTcF@ zY6Vf?h}OGL9_{!FoO5f4Ls&lfe$tZlj2e~P(asCLb2L@=`HLYJUC$u8?V{Nkg_I%{ zQsG7L+Pf9Ij@8luHfS=T}viRvyaQv_r}l0n)WrX|J25})siRljztOZnoPD&m8L*UvNtKbP@^ z!c{Dy0oje_z=s97k`Gb5W{Pno+RL{M&L0XtlsvmUPAHHKM6iZD>qR!DUjZ+5`=Zvv6Z z?|Xohw|2;&A0NB{IGPp&G*Rn4a_HaQ1b6Se?=j_20ou|qE9Wu>KQ;_V28Avox7gOP z1qhcHyLQIXUrrmO2YI>)c*B_+&ROi~5Cmnt2&UT)-P@|BpWlX(ULp-dzO{Hiy$O}{ zuZk@^5t)I`?gZirra1`zvGbOAo|$hxkNk?gh}@EDHrqv&Vy@pgXjeHm8=BU45ZNfI zaQt$mzhP^9z8u&a@*1*Jrhb>lJZJ{g%Cd*(<;T60RG>nMlS(|;%WUO zc3L3^JbT;8VNxF~y;tO*^n)>lZU+-Gc;>4t_bEAY4w^0Aw;9R7wnIfV{t#>zoT`e< zo;-A}EY0!=C)$*;L7IGZK~%EFONfPu2vW_MtG`MaV>8Kr7%az6Q(V<%j2CRPJSpzA z%4(VyLNslG4R40~<77P<*i%Rj5`^z&9-fii&2SLh}So_RDQ2Eqg@j+u!%c-uHoyha$neK7! zv*m+v`BV^NTuu!!2=L=v9vusa zCQKW6V#N|%D+uU7NX+@XZctyZLrDDRT1&_s%Vwy^L=j3XwO!EiZH1x8<#y&Gs3Rqf zjuS~E5S^{#o>-g^;tnCV;BUznay_mJ=)M=|!>WDs%YN=uOFKlJP$Hl0sUUnl7k2L~ zQRRVqL*gYJf>@s*jC*pn55#(R#cMilM8p@{Nn*ktQ*-a!vPZS-cU2()8v~8j!4Y{ zMy#7iJFJ^{JtpHN2Ou*GSDbf`1E>jP{x<+muyz{#Pw@3aj<^m+7IEqiO*!{RCZxxV z#Hzy;kL1{5+D+SJGWHpTAl0vf758dT#bV}v@kgG1hZm=t#f)@2FNz- zJQ3bXcM5P41DY{=gCrdiZZ#UvR0P^OyM!klY6E(!?=~Fx0S-L#$noDEtXU9A*-Jx^ z+qdjOt30P6?+EZ$YYc$Z8vX=ghv7gyFfhjv2CQ0KZO{5_@G}$7{?LtrRgGqj$Y;ec ziRAxw3cAT~0zx{J_n*#S{%3Z~6Nm7mStq!WSVi~2$a7A5OuN|K|AS5nv4G*guXW)3 z+6!gmayuxc4FCiM8y54?tv|Bkq5+ff=`aLo5kV%CareD$|7S4rUr^l0uKf;Sgx&uG}t2A-mGY+g;gF?s>z5-kiE2|}j13m|B{6id(%j*9*dEx-ibgogAuxQ6*jQs?Np$UNV?k*VFWCM`a zh%Hv_C~xF)Nv`$ZsXb$Uy*Dj2omF z077w{h67a99YzBtUH=<=0+3@~g8w(bi^GZ7_l2gMZ~|13_wi+80Y)POa9G^dtv57I z7-*p&-42Tx?hT%_DRA++0a$%u)mi}r1Xf?-ULC;P^cXofu?QUj#apq%s?|&f&{{kS zM(%G1&~Pfoj9k{OeLDxpaIOsq%X1gNyc%eAN$PL^YcTSfbvBdnmA`Cw(k&#MZ;Hpq z>*G4A_;~{Uf61ES!&_`1u{-Qdzgrz%Q{4&o_Wu zTECviKLF@nVtOqQt84t4DcJs0bq?orbV)$IHg@51F7x&fzk!mnBW`Cc1KkV2R;66P zle!S}bhUd2AQO5R&E5k;EQBO&f}RJ2>xUD$ERh4Gh~|5GF#>@URIUU-gymhu0OU8$ z|5OP9GItf9HW-jTnqK9xm^Z(Iky*O{Rd(xx|E~!FCQQYU>Gr=$mQ+042>Z zz>W!k9lwzQ>tzbi>jMbR0Cbpy6X%_S6^HW$G}*C^0gGAu{139H*=70yP*n;bmbk+k zAQyI^13*2D6WsqtkW4^FsR*ACq`^k*Mgt}IfGP!o0^RW61S6C3wipe_xb%hsyT0O) zl)zIR01<{1fiAr!fQT6&<9a|f)*}EWF9&$_hVES1V%^{|V%3HLYFPkDTBHIH(CrRa zobJO1FdyFip{0PqX0F=?6x9@tF0fIS%ph8ni*k1X;Zix#5G zWW4-M3B;%zf*#s4&7T;P}IyfTtoZvk{2hfYc{E!=TR~2t=_>^ zp{-a`x7BlWwRK@%`_e5&VIa6VBJKGyue4K0X=e1f;0CtA9}WT&y8ZWLRnNnY{*vnb zy5((O@vdb>M;YyU&8`o&ObmI}*+mukEHn)4~`r|yF7CMN2g5)rZdUBw^T z92M)(%Vb=CoaVyl^RW$4)aC`-rFM6VXI)R1@=ZBaX9R6Mt%pmfq^uJx+Lk-WC7P5Zau*?xMdfx-Cd0qk6JPUwpo>Raz&#Q^S#r@IW zurEi!Qp7nsK=GtI*M~t0e+fGXm15vdEoVMC8CTdNg%?ixqBF;8c}vmq&L3#T zb|z>3*E_uQ#rk%zGNJ8nky1o~mfZQvCtM)w0?3MX7b(qz+WKZu?txdwsAyU4ft9!# zyp%KVLjoslqw-795_8Aet)be3)8Z4d@Rx(DP-)!AhT>@>qN7l$Q8)utBe@OG&q=0G zDL~)CAuvWNHo0wB=}B~ZpeFRDqGh*iMuT^Na(nH%qGjX@eBmL+EKodu;jgS?xoi4? zo46_#fta{jx(bX&x;1xR-kSqRy#T3kQ<2h`pLPE`+|Byjd5IYI#MK9Hu!0Si8(_4j zD?s~jSMY`W6viT@8;N|1mK^oCKfEhY5{m2qAp0Q;i*UPg<`qvc6LD;x{gwM+0er6l zJFg)M*$J)x6NQ(ykzdZ4KLjG)oI8wD$&|eTM(87SF6h1q1koYRt1fEWwK{4jj^K_G zCG$f?xQ;PApy73lfO&yd%gtzmDm8k712J~GG!HvGiLS_PCFQN5tMpk%jtL}8_f6vw zru5_wzkW|;|Jb!RxJX`!#cXm1cEs9T?8R1N6_|TB-#Wo8x0LVK`tnbV1|}~E5Xm^e zDC5^C>Va!Uk|}jZ7q_wZF(EC`)){<@>`d^T1UC3NkKtsv)}y%)Fb8UvRxT<7SSSgD zAR3>xGbb(0QPUz|Dv zB7wbpWdG(L0;*K_WchW-`yQk7BnhQ+_+!6H!2``rkHGj0`!i@O%dPasB4s)=0aHQ9FPrOwXG+3y!|Y5&EsJbYR{ff) zAna_`T@-*GmHN``EhqaC(mj8 zXFiwhH;SvF5lj8d2%<>b+v&#yoyNVtH5>cZoYURw|J% z(Yy(dH&CiWdrE>135?|5NW)m;AYY7;+Cf|$1TR~Smzt`^6TBLTb6w6sBsADivR?J$ zPBFqjP|EdAPNs3{Zy&4WznJSagX(15=!$!$ko*M#eSvIAOw3D#wAHjz zz9U2=`!cF(4=z`IK5z1fR9wM=I>0$+R%k87_Kg#%64_cJBrbm07{setVZd16{7P8VM8{S-sVfUu1-KMRNym zTdl}ajP&L=7Kh#O1G?|eq`pE)k{Ay&VIco@UYGnYk}6{w=bv@-bD^^ODfy|b)ry3zfYW#NrGZRg{RVs9kpT1@fL1VRcV=d2(W@w zm$)h$4neg8(0$v(bPrrXm_iV@LgG3~URHpGh_@vk!Vh zNk74hby0Cld_zzr@Cj17!_00HoYGXTnpgyt-_`kv!RMq&?k~O5p*0~!3|U+(T*Z1) z(GJ47@`w$x>k2bYz&Yfu0(tb)8Tg9mg<}N`76!hB?VfajNxgQ({Hd>LVv@y_nkZvj z%EK!f>x1AWF}A;^$$-c%O8?sc&Eu#0-mo%f0_HYK?hFF{BcFv$ik_MSL`^}P0-Yky zLomMR+bg{r_#n?E(ooJ{7tC-@+3?&DmjGLZus=IzbI+bq2}*5#Et18XD+uSSe924` z|9pMd^ctQzP>1?ONk`Wb!OpF%GRQo^WqLXK#JtXJH9eM1gl4h6^EIS>vVS}!THHCo(=+(~FuX(_&$L(W*S@8H zeH*QOht}m@Ec*C%7PMV>GGh`udWKZFo!w4;oM1!{difd~KBWpVmB zUKP@VntH4=Gsv!dTIZHo_<{P&=L$QH1v!*Tri^6Bwg--QtlRe$Iy;V~`m)hZ^1?T6 zHJVpH{PFmFuQau_T9b{GcqUX_99Ip5RBy8!=RbfdA_-*z6T6aV2B!*J?Q$w=Nu> z1EY_0GsMUu&3xIu?ZFIaR@f}n_GP$x8@j=bIU{ThrlwMZ1Q-8rOtQ^IjD>m0wH~ii z!XywPvBIgnGp&|3F#eLE9hXIyhGtp6lS2(yT}b*_tchS**=R>fG~%=gc3ETzjHCPJ z&BnE!A9}*r&X)2qz{{n66sRZRTgTS|SJ%eHve5iAA!VzQ=}=G9`IR&|PL-{cEGbc9 zjyP1UB&R|pF`kEYoG&sM7IJ%Qk!W!cumRahU>-AiytxauRW!*UJL_))Ys%{w?NULC zf$;NiRU<={v5C}u4ZE&E)PJw}1J)ra`(gbgC(!F7CyYs!H%0B-`k(yFol_QN5(FOI zZkb&DF>~w+(sWytE!dPGl@(MF)Ov7{ndxH!lIb5EG2bQk?^qkxaQyPgx$LxzoNk%D zGY12DkM%U?WkQF=tG;qF3g=O2r9RqxFn!M6>jsOSF4e?(gug;J%GG{YBUq8BO}8~s zn`GO&mc@HpRZc2~X|p@~v?VKQy`mdyG!Gue&48EG`S7pxk($hSU#)ayiPclv;BKJG z|Ek{?BaaQlqm;8eViDj=oJ*i$+m9M*E5okvGZ!%*ROnOSj- zInw9J&$cfPCr5gf=VRc$mHNeCBEI>3_UAuYo*jl#HF+3=S({6<-abCx1D7U( zUXScviBEpY2Y9IuXx~YqlUM)D(t$uykXf!G0J)qeUmedYZ*A)#EFZOt)y-Yda`Z>HmLjeA4n z?KjA?fjk)4R*fs;thSVjrqt;l7yv#~X6>*?YuMG56gY5gdg8uh_xN{f(8 zIzM%IZt4lKZiorkya2x~ODU*QOhGrhC*4gaR)J*l6&u~}=(Rp^Rq&Wtm4@x)oQ5;+ z&0yqiDP~oSw+HZJkvIP8b1_z1iv8ToP5jFl!VkC3)Owy;`-c?On!KYmW;og*mZh;I zR)Oa#HT490K}i(WW8X>*w&*FR6_|1>CF)d)@M7#}4Fwn^E<6(xj$3nPqo1s)wun#a zCf|ThHA0b`HW^ew#OV`=e~O@&B#eQpX!M{tQ!nDFR6-3| z7PN{t9><9nm%T$F=ba6TJS;)PZ%{cTfj?Yg18k44*R#+in2TCsp7r7!(#0mm~{O3Vcj-{eM5t^D4VRyZ6-731uFYz&Z$LF<(qYEt^Gz= z`1~WpVui&blj zvaoC8zE{dNYmVWCpo=&<7ape-R;Z(Q2B=!=P2V-8lBUdp-lKWAqj@h_q(i3XJZfSuWrfulhjbS=@c@wY4!3Qn{tX z&L08L7^y$-Rge|Cv*&Y{XPq>kUYHB*RVB>uz zc=2Kp&l4eTxE886wtBhHXLZhpDR`@q z2`%Z{wx?NSC&k36)fu}x4T*QjO0(zPkVozC8@x3N&^7try>$y50 zt}R`iI&k3#jWzA{+Z*(y(nRY7v4k0M!OXEX4Gd8z4Voop=4bcrM0U65#@y$sIpB+J z@V({Ad;N+3(v$G1Gv;k`*!ya)>*$GZw%?h)L11`P=TwlIYd6?)dyzt^91(8BMA!fZ zjw3-bT-ZcGP4iN%nk{E2aj`n8F?RtsIS~P2;*#Vz1d5%?zs|=ycP!4&rGP->_rwnm zuZ4$;qINKMDL#r7iIXQZlJvib9c+a(sO4A!cid zhMvQ_wa;OVpEORH@qv59ah4qTm#Oqu9VFa&R1125zny)z1J*obHz0<_J!CDhZbtg7 zrOVEw%4vk-!`7te4tk&2ZW!y}x3an{%j|9A$%^G4*<~ z{yDOrQ#Ae3qG*1=Hx+tk@yweP)%dtf1+D^*;p({V3hVI<+3w5l4WPtCNp6a%!09rkld zT~JOyLbg__Qolpy-eV5T$nSwH#w`&C1TRop61LV@Hry@PU_=$&Zl4*!Hi5>9O7?EI zIPZLD*50ZVXmsb$rRESCKffkks>mrSxrEzf@xw{xF_j7Uy`>hbo|#Yl7lnmC{J?G@^)A zCLSx3fDCEs2>s|_@z!06S7{TxE2V-{%4(_MaD%nzo4TL3 z79Y<-BI2xyA-@TV?NwCXXRs(2f2(G)MxD7ut$zf{k_@t4vutEXf$HSqn>h+)JJ*!X z5j?r`Eov*2RaHK;F0Ll)UGW9){w_}Tn<(m|awz(^Uz!MdCU7NJUD46f zC|6VegLnc8kH!EuA}n)LsW|7{1KI$yh7@+CYG6`eyU? zG%hfYxA0;sx*Gxg;M%|-f8QJVrek`j_2ao=`Yrxj_EsY7R=3r!F@N=ryd^!P?LrS_qdJ!!{9t1Z)c#6Ru0bh5Uoju%duf{vfy=0>ew zUVd;7g-gQvNHHT7T_P*0jduJ<;VLsA@)UDdC<{26(!@Np`X$1R2n$k68$hK*Wn>Hh+Zz5Zfmrkep_yA)%jB0N>*^m7*~JFZ<1Pj z<9roHR>{jG>HGZCLu3W_k{WUWD?x{*j>i0t+;mPbnHstrp<6C=j8%g%MP4UfK)Vc% z^Wb6NqJ+b=^tAAF_4mFqn3wPOTKUPmRIL1(#1btvU3dqARTp_h3L9%mMD@Q3uRS69 zGCmM#As0BaKeD^1g7PoAvLPc2H@rwGn;=kE;NUu90h)C*%(VulWMo3G0FDOby% zYm#!K0YkbvLq;PN^1Rkit|l4M+E$Pv{w-tst5mQx^Y?pbcuS z+bfwHpcPjC#e2;ExyFn~n;5UZ7#Cs5qo#X^&LpYavwy%n=kZ2imCG8=dlt<#`S+E1 z_8&^JR-W(hVS=|+x@~6N;sp01dn8Q^I2;c;brs)z&aX1RhQ<&MQRh4>SWHRnQwGRE z{o;c~BsEuziZW4nSz|JVQJ8dX1Y3-X#LB0SrHd_kSWLP3+7{QYFteQVsM}ejw`A8) zA$qO^tj|{&^?8z`pQDu+b#}S6R}1mniXy3_le-xY&gI=#+}ffr^O!BX5(1Ztgsx{X z?GM8nuY0y1_RXIyI$z^0I^7AsG}f58HD;v7P&|^fJ`q>Gh~ETEze3KxVn4n_ z#y{VL&En6nn2U{$TQS@uaFw7t_-NW7-)@2`&S-{RIv;r>fPPj zg^%Z`yT##?lNv89wQbe=6)VyVvM zrgPBPw4dyF>#Aa;&@g@j0?dBm&H3tTJXaNM7;mTY3kz6q(pBXMV`QM=qTej{o{`%1 zvoz=R&qDsQ1v5k61760O7Z_Qd*s|4@#!29J0+|{|P3Z`?ri>{v80iRocqpri6dQr8bM&+eIm()Tz(Kexs6TOQ}!|2%L&Z4moBzW%R6C9^_z;;Ho?FSAU}J zvSYF`1Aosd2|Md72>wZkNpcvTDa3m*ECZFe-A9GgkhaA%_#=EEyQ=&KIMe4|X(H80 z{my8`Lxsb{@G{#_t0`U5+kBoc^278?&ixt7_s+N{uY#_7{QPBQbUAn~=Iu#vQrvK2 zOz1J4b>_LuwWhH!+Qr2KKdXYzwKdJf*$_398+?fIwlPRF;^cU(8zwFw>boMU-Wp6Z zHksvqqy&mAOk|NWwYX*eQ{T%kA)Ef4;AFaE^H7K8p7?{lJxQ19` zhtsOxpoH8qZPHX99cI+oc;J_92Qi#>!yK&GN^PoFPS9OTq_@{0UTc)8#n`l_n?Sax zi~SlxHT8@4`whXJLrqLkn4*ikvLap7$yp~vr^PZk|6+=Dc2<6L6ggD%!k2-yM&UCh zvYGS|D;knD2E&L;;A5f$EUVc*6DWG)Jeh9)zFHFW_e&BJRs8j*9c;Dsul{xZ=#i4= zhzr#uWjhzLH>e4m`~Y<@wF4sy1}!(@thCgApSC=Tg1WaeNE)H zfterV@pmloFo&lLF>qT{)xl+B+{9Grtb52RS+}x4U)ZSW1}>Wj@|YV{?d7j`dyScU z;5(_rTIr-ii*fD_YEanrK#KE7JJuG?kKW!D(L8!*PxFLS`X?O@CcOX4!c-r+f4-AXM(}IUoH$#wO(Y3zOu%`(*VW^&eED-v8eg z0mUig@4lOj{p!YQK6p*Zi3?Pw$WnCIb~HCjZ3LjCZ#=41Z-hQ!38IVzaN*=Wt_J((JigiDExu{I~p^Z7I!6?QCH;+=M+W$zcl$Wh~Cv(*~OOkic;e`fVZ+!#l))_t-u z-jE!7&?jAljWS}afGp`;1>$8u=9#R$awuUG9QE9>K4CGQu7mwm(1H4=y;PLLR#Wh1 z$F)l|*IxI>QG3}08Hf^l zoLr}KzAZrmRUJP?nmk!Y(%NzN2W9>$k#wW&JK^cj&~w7ad;gvNPdN$@n9(eqouv0> z{KG`CUIXyyB5Y`q1S}N~DZxBR328qL*KN}H$+!#X7wP%x+RxL;3Ck2k`tP*5XtCpxOjEPm*)I4^Srd{mwp z{;Z}8e`m^)ie3=J*~<8_!uy)hn4P0^XI)=~VC#l;L2UwODEdo`z)csdn3ndz1iLUQ1(|)si!7AX@eAtv7J8^;<~>!2tDD$;7)$PY`hVH5D7XFr z<67G{zw>|0@xdp@O)zS*ksf+1Kgoi|r5}?W%NXEF-O;AOZEP#JJkeH7kRpR3`OaSc zCYYeBZC_!apIV8ePoQAd;tvn)@^(5;+pWLYe6yp=rfAme-ZSs`&-Ds>3#*(og&M_Y zgNm{_&XaQz9-^Pr@(Urgl%9)_6jZOlD@IRKvEADH9*mhF?ZDjGWK4Xx)Aa02fBvF; z?bL3s{mJ6*aA)>f4 zwconFQ$a8_uiDDsU^+;o(BC!Ls!|(Cm@CJ=4dmz@NY(UY2F^O=_9=%vQ%gRzYamc5mX0DMBHYH>jF+E@Md9S8(tIzB27}FUfM>KHAudeTI0v3tbn4F_RubgX5a?S2`O<*gC$2 z$7Pl`9au0TV;fn!{%7V^7CB@-Z4x8NxFUr1M>P6L$;#t#zL2uLm@*A4NYe8$ z{g@_6d7h~BbBA6wNmR>s9D(|b18i7JkL0-TR&(4Bj{i(pm(si;?BF;k+GPeF_HY~P ztM>8`Zd7g9AxUd4yQ@I_6khu)UeQ0TOk|7l+4Zj7UFS>_A*1&LU4+DMS#7}KwV-vZ zKXvB)459qMW7w)1;Z1X)>O8|N)wj+%nW|x@k_HMMd9_y|9VV51+4>q+%>HH#NvOe9 z8!sjaGLS|64mAk3jU*JS@dLZp1Rt6V;`-}wc%+j^wM(3kxAEt&ILg?WP${^Z!~Cxd zoC!{u5AnK-PD*SLf=9_bS13+rl!%T=Lp2H*{+Go3{*d16e2ROVZGT84Z{o8ZLh*(W zw&35H9~T;~fxu4M;|xQ2SF`9+zr$Py_ha8VG>7+J7;-lH)q^fP>_TSdS8!U>ITN-D zf%O^N5$@W9O6QM9(2I$&O63iugAFFjiik&+GR1#V#YBeY5kBW|_03eCRgo;{?W|#P zaJuks{3p2W&{T=`4L{f*CFb)bY#YvpUTmbf7MWv|HhDsG;WhRZ>@FJ3|5z6Uu%OPI z3N{Bq+9sl9;d3aF;k-!ZSFTVVoZYA2h{w2u;~;HLb5;67qRHpTw9}OChf3ohr3ea3 zISEaRTQ*0OeOkk;YFBt-0siwlgbEjo8qH+d%jCV&<7vymTfb-I86@B~>2_zi01oDw zObXD|8(muh9YCQNC;dFO>ZVtnOtGmu$~x$mWn_}g++vz)H9l@r!+m*N$(hx2aT&__ z$5ulqaoDp~hNf5&y_OH%STM=UWbdp?3lha|y@nshBQQ_3zuSc^DUo#-F{tnQh)CEI z9gjwyw(1X4@rb9dr>W?4>zfN@#M5BF^sKFq*o&wkG*G2LxCHWKTew)>MdaUUp&v8z zfjWs}HzW!!KWioa?p^B2NM)`%R<@Urd%Ui$lxP>>(7kxFTN5_QqCQ))N`%%(`aWw7 znx@n{G(sC^R&S-UTGNQQGG7S)QI{Xr$D`)_1HBQp=IOIdsE?-?ZxH(|n>Y;Mi zpvnv=;_kuLDzb*eCS+=oU~D;{j0f8c)a7#2uJhRrIQYI1C3_~~)|%Juj_N6%l)N}2 z$xudG7WtsSR?9JSz36vy$l1CyEMD+ro*IE!bjOsS`ZQM&E-m*K5SvGf`e&r-Nz5r* za@?!GoG@b=Y#v*d!lX1F;v!3wo(;ROr4BaB?)RCJEF?ZvUZ_w!w-|L{0XIZ3KBz7l zS8Opl(FglNbp~dvul)hFkN#QUN$+5vYu3?uId>>Ub~ofR*^k-%?%^v>tKgtl@}^*9qYM4)uB<%4%ojo?EKKm+LM`+<9yK zV*uyH`>f1U!r7S&3}Pq%xdIb|w5i5PLe4iAjPFl@im;aJ+;cF>%+S12UCv@e1l? zN63w8$-8;@LHpz<$aj-NW9yWMb9%7p5yVLkT8mBih6w0c(HuxvHem1ZIq$Am4e z*f8xXrCL>O6?Z1ylI|-FsPxbNK#*a{@}nw}oF;d*SB&c4Tw%5^looct-k=;rpnJo> zvSxja|3=Gq+LGU|F4diMc}E-bVS@|-ss-Cp-iok7;*7WfCTBhNVcL!Q1lKueZ>^=8 zFAx_fOnW(m(H8b?n)iUC!uQ*PYzAQhs1GN;I=uTkLEI1CZ8-r~SKNS~{Vnze_n*CFZM%hCV%=I!S^Y+9L*M&;D{CZa z4RiNiDHEA#i4n#NzksJ(Z`(qe3R`j}bF1Spk>)5d$_gZPb}#1Z9mVmq-IT1n;>6t@ z^C+oWd)LEjW3bGujQ?a68gEMG)l{@?8f}!awlGq5pEyY&&BPJPem$A;;RXeR666t#!!R?eUjn@l*u2~P(xis-_@sSO7 z*Y)>?**{P_w4tJCF%c2D1g?#7Vwr~lQp=E%W$m>t>%>rMhiUG%h>rE8i~d9fnojq| z9na82%i5xYIo5;-&q$jEg6P{9IsU!(;;+*o&WR$Sz4r@IH4Zl4+xmIpWLX%3$ENjs*MjWX4iJceZr7sO^c#)6s@J;nLP4i#9KyNi?rh1LO!WGb3j{^)KgUyN3nrh3yu;9cFXwanok z%qeFFImxHuHRufNn3dgz!0513G0(W>r4>!MQx+vW^SGw~0as91P-^F`7=Y}ci-+42 zIsrqUgLcfQR5DkF-DG`wJ6?g1?UqnvPT@agarUJ6CU&}~%krMdO#0IvjafAXJS$sY zkzvTzddoiJ(^54YY5g3^!dTF;PG?=(-0*L#CL#eVt?s~)@tb%oe@om??N-d9x^hMG zHB+lw^u|G~4m@5ezIob+e==tlDbvSW5o9pekupzHd9^oFCH(9e!!jzZRrp)KRRmkS zJo?ahF@uENYzlE}_INvOiZZrzy`kFiVkp+-C8x6V3W`_UjM#qUk-e3a%CRHNm;N%G zI5)GpRBqag#)&HJ$f%Q~8>|1f0&*RKj-vmAd>6#FOs@Liic2@Dw$ME}BvwbeUz19Y zN-d}^;k+_I&o1wrMt{_Ms)K#KN}?aitfETSJJlz?pG{0!B|@6niy1CbsQ=_r(0xUl z$7j1GOU;h=*StR@dbkcg<|VI|d998_hlJ65iQEobb3u}Re!4V+KgEt(+#A*%Y5pi$ zI*yNGIpXUbgL3TlKa`!jvnY3DTld0A#Ui>H!;M!FPD<=*@Qu2>CR$$mN^Zmlw(0YvzZO8=5eu*jj3RB6fMg$%4r+uTQU*hMyqgy$11dRt0T&wZb z!`?~Hcw_Z~YXkzKEn-VQYsu4MPZ*7RT? z^VW_t)J4e2FHu2p&_AxlDx8wPl{+W=2g`VMgVVxf*5O)Ib+)n<1|`K@NbZH-NO*n@-{f z52}fN|CZ2#QtSDwaG5=S`kh=9dGf6 ziV+PvE^AG9(M$}wm$F7qTw$mG2UkF-zutY7&=i_$Rz}^eU(3`<61rqLtu-m*x^ksOcm58JQY1P#nsM^?bC0!kstMzRxkT{}J8*F+ zyv9XBa*lGdpX11F_;KX$i0`iwzsNmu%z80Y-(4HWb@U77i004ejJpnHgcPTq&OgY% zNmXajg0WoZH3zyKxdXqC99i8=`+GTZgt?itO0Q(iI=Q3pb_6Jt9i-*$rv*!=*yDNR zRJ%H#N9&7loC|6?J26J?5gps-V4zdc7pFc#C{$IB)m?c}q~&PWto_KH=zZi)IO6;6 zSx{%ZRXO4W6`T~vE;z@0-Kv21oNM~q#-hnL*ReMuAOb;2{>~Hkzz}IgH}EB@rfIHA z%fglBHbv)QM5Io+zcad}Nnly)b>!7EKCsoh4#v&mnqccLuL%X@())@wa(iB?m%>I=NatZbJGIO<95UE zJznE@SKZaTGHtsE-_b|CUC~E){eQ=7^HUw&RvY=r57`v3TN=sA3vvbueCv=s@E2eM zdEW;%Zp#zRl%w*(I@>19ej-sIpMaJ6(O}FqD2AAEL%@@B%Kub8jJWGzaV`YRam}x7 z2dx7Fl@yV%w!)i94S5c# z&n#GI11_^QB`mP%*z+y>djqqs83}_j`U?sHB3^^X_bBhuh|?HbP%2Ilnv)4;BjyDn zH7PltJ*?qu+LMf9Q= zA^;c^5HGNd;#d7y+z~4aHhF~tI7y8f9K>!A77+(tfT5O3BHZi*&oe*SGb`zN8&8}Q>qU{u{(vH4 z(;-AcPt%NnO_!<)dp8oB5H`vN+NFWSGst{A(c`Ct8etwLB8%ufx$0iI_wW=7R!N93 zeF8;+aykQpw8UL-#w}O`XP2eIzEH+J$N~iw;l$LmRLS%txjaB|&7GjDGO5QVii4A& zM^RbciFao&!(F4}qT{c)4jhuHnJ$L#pl8%@xDh7*R1~?#FfytUi(^u7O^!sX%($TS zU}6NS+C@5mXpuSx1rX+G6%Fem0=uSae;CW6^~MY^Vv4Y6n*q6$2nPM zj}dUN+)-;At=tUbn(Z|&By8|?yq4hen+x-9JQ2oK6Z&w}8l_keE$RmRR)6Lx;HP?e zo&pl#6UuTSYP9=*DT-u%aGcM&DQr?73?D{&i>)s_DsDdGry~YXs_rs|+OEqyA$I47 zT0zpa$_gunH+i%G#cG$z;&&$2!NjgPYTO*QMgoC>A!tYG1NX_+cl67SGKxu55@=vZtvWv? zXEe7myt8`3?MZ#~A*W9HXAND>iDqdtdsrwDi>54f|00TmZg!;n=(0)R8W390H5bpr znRe{6qW6vG&KO_Y5;Rf$dw6t6tLmKQtL<8$&&muSBh*?^f|QF|+d#vbcQy4Q_(Kgt z3%(~fX?Y-(d(tQ#5;w?(SW@e5x25SKqxs{(fu%A1oqNYQlXi)Xa?r(dCq=2(ueiK3 zpY~~K|E0*#3`zu|KN*cBJPkE1hAc9CQ`*0b`!EOPjZo`4s_gD?l6A#8z^Ww6tBVaM z>2ztIUOKiL0ng^gFr>{S1y~=0rZnfs%bsvg@IK4Oa@?pBg6%45+XH{uVU(dl?Aljw zHi@QN!7%N)B01UVS!}=ahFbiaeA+*`Mld5xD+%N6HbqL`jDVIN9Jc4vP7-d+UQ@15+3Tq^mbx`p*us@vP% zM0a$16Wun5o#^%f2eY^VDTHB85 z9MW^|7m3+$aD@f!D5pL+Vru+d7Uzdpt`(j35qMD|^e9NORF&76+Q*LHkSzL!+OlU4 zTTkSGars+WM#b*1E5uzjN4e5rP)Jl&=~GOMg!(CZtX;+|muSX8Z`;l4++f51ze@_i(JOxujrj=Z``k|0#exy zGs+74x6Y?zwV1)8uTf=lL}y4gbEl-lqvVp|iFzA`60MPZZ0JODEhxAVRlIZ*^jozy za=A1%$~UkniD2*|6V%hQ_hHxSwq_Xc<@7#mPNH1tIk_PS617Tf+I>g84-)Bw{@R*X z|GD}g+&c-if6DC2Tq;Qj)JMUgA>_2~ucn;QS_zxNnhOuz;spn4w}VBaJ05V5EFKMY z;yEp?ZTn)N0#%>$7@z2|q{R!L*?3%P^Tynhs~b3s+xfw&c(uB!bE9ji`@9S~Pvb!? zmW5LLs``!-l~QP~zhu~{nmn>kmLS^45gc39)G zf4DOSJh02p+wTeTK^5up+?$u7pj5ZICKrrLR*x#Dc^wI2P{twcIY72<^-vfVOM?2_ z*?KC_;8HrsMmB`j7-a2dbVMAcb&yHcv6PWYA(5`uWZKF;j!c+SxzRO_M=d>Db2)F$ z8u8j}YoU3o^`40d&d#bRu(FO2qn>%~mWebMdbofGxjzx78)p?e=yGUs>N2Ey$Ti&G zwlH}YB~GOlVY^M7Hm42JAQa~YO?ec=bVtn(d136Yi*xe=>y%_y9hYNV8&v=2K-srj z;vcy6aD6dNUTw)kpD)7wBN zjx?($584_l6N@~yYE>?#?0Ufr3I`C1Kp1ON5-}s*8XuFnws0&95f3Vh^IxPP4XTV= zOi*vel`!~rbyWr{XI#2G_03$=1ZwXTM-vHGme33%5;&|u7}W)rnz4qurhO@4hN5q$ z`l5toUP=6G=?DWmaP|4lx(E(wo-mU`BXq)trV4&!avG62MUqN>3q$x8PP;?6F1+#LDEMBvLCjR? zR2KiSV|bb6#!WU~tHAGhks^p=Rq8C>aT56$RT(Ih=#L169E?Uw-?1G1R7bbrh}?|D zZV`ULq|{-;wPu48;k89kqU3BWOITlMm-(Va$Luahx&#tjm{gzsb0TT=D%x>Rv-30s z^ElGgwu#G<^3hmU$QL9XJn_~!6`S$2#DA{vex@Fi%AIi~p&pj9NKPZMCJYx!rSejK zmNKI^H7?0TlNq5WO*a_TrbMY26tU&(pmh-NMo+8X1%G*g@dT6md_zUZYhZXB6LVqY z(%6pGgDIvNFydn4L$LGe?|yAyS4q|FZ+J5jh&y-}n87V-&|?;;M1*Yztpkjftt@-m z)mAp;E)haH93@F@Ce5)x^?hZm1H49ZDsDEb3Nw|Xb!|=?IE zgs9uZ6r1d4(}_%~%cU5P?^2Xl3WHfv&Pw^dr>Pg}PKKK3SyndCIA#%jo-m0BJ!<^! zRVFl#IKKzb__GxMeXI>VR}ll-tnTxs>+ zQ}jckhpE{;5T};rN7ODOv-`(7*Jp2OD!#X*4qWhkBr#YQdE&*hzOz8lH_4V4(L8Mj zF1JoHcEEVR=YW`Al)a_hJEz_i8_%JhosePKOb9Q9soQ>f+cM zC-fFqxsh<`1vD+f!wPno6(q>>)86U5*82dqec1-+7kAP} z&pww6?ohVX6C-*=k@zQEhEnj*sa-jmyKmv7U!xBoyGWqKXBlh#$Ti*FeJHG)=C~bo z7YX-q+gIQQKfir6IkRJ+s`PNkir;p4Tl9f05~ePV_vs|&4olsx_YHIz9+ywO&)~cw zV;;S4aA!_q(Zmd)?_9d$ruva%Xi)$AY#K)EOQ~I&AL)e3to2mW`4`tMg zT{4q-C+Cs+E}2Qa)BI)Y7R(2B%jE-IVtMcK63hG7AF;d-^cKtel7Q(zhSNb>_srA`TrEe%kZHe@y^N~c&SW;}e&bJ@UP3PO-gM_&1bos%b zXhOs72Vr4oog>$Suqa&Il48Yn!osqi`qBh1!m{Zak1XS$EC*|QA+4kBMO$01H*IYL z*l24T>qA@HtRC8W7GNi>w}gb8hU(2Gc{?U+I|&)^h%&{|mof4RBL5&t9K-ur#FAPB zldWf|&5O9?USv#Y9a-Dlte;co!m)wb)E&261#n1AYbvd3OnXDstuAX(r^MEjdvdwP zm{(p*67MGuz-2;FMJA>fTh8l+d=|8d6U2R1g7$<9mRt>>;^5`I)+u+knI1KI@W2?` z@^>QoulqXnrpVQa%S)FPAtHlG76^#T|8Q`I>Rfj!;zmMJukMLAz^PP#AvhRG#w_nc zz1R6ewMp9{eG7lIl9i*I)Y-V#xH}o{^uu47v4YD%m~Qn-e07YVg!%c-h&YgNrk} z!axI5jY!gq9$7faU32+6T|!eXmDO3+)6zD;y01&X;)FHbW6cj6qO|K+I}NpzmN0kA z^Hhf8HTvNXLO3o~zr9OIDQoq}PihR=Vbd8zf+QLqmlesB>L!dBrWW^3^?Nw-5 zaL6mz&VODY74Fpm4izEqpgKqMb4v?XK;ESwM^Sj zOv*G+#aaOd`Pxi;ZkI0NprTS(R!-}9Y1=O|8V)lNPiFQtE~3UozAX1!y{YQ7F)%WD zh_#qTFV@5qh}95pihZQ!+EBCuTo!MlcKo_A+W{q6H++mt#cQ=1&yvt(4SlKEwFD2a z6%EHSmwd(DIjTI0)@zrTo~=@HBh3*<&xweaHdV2yTUNZ>ubI`1R4N-8L2%GA>DMI}A^G!?XucHwFD3 z-48zmw!-wp^q$S{u;YyD3oIPC0BqM)y61Z%xHz*Py&Mcp8$)uQbbM?ShwYWd< z7`GME7J6Pg811^XU>t#(HVZXkMFRJjonc=TAWbHCK-E+b&!r_}Hxvm@LKYTiYKYV2 zB-zxOs7w|fL%`u*^EW9$2_F-9lrlTCY`{ws+f<>c96UM$N87sILo|TM>k2gw+H^r~ z6KE@M05X%&xH1v~US-rgaJQ|fguzST3R~(SQf~UsH`sQ%>LS1OfDd1Cfoby>1*3^j z4oXwCQ!kc}CSn)&%dNbHDwc)PL5&=bZV3G{fDXTHD~!P(86HsEV!X=(wVt-Tss@#9 zh%)H574Z?%(t3JmOX%W6S+1KN8JCm$&?i^W$klPv$*FF>o0dgRGpI_RY{GWal!E;G ziaY#FPmeD)rtKyd#Huv1-Rl%>aK(8ICiq1#!N=ZuVq?O4LQzB2w-iAV3( zu4#H9Z8#QWXwXpOmqV#Z@%bdPAz*>Yb%AVb-@(r+W?+*X^K6SYqV&ED0F$RDsn1=G zBb6A`*gQ~<5^dFe++g(4s}e{UEysX3=1PV?mG)Ne$F+D~_#H;?oJD1*NOX_x)OJ`2 z`jx&-UJ|Ba!IHZwel+*BX=vP6ru?p)?Q*^tl;u*}5yy%fs#%Y|H-@7}%PST8j@tUj zZAx9X<@ZtvDM;({s!`^?MRR5OC(F%TQ8SoHl~*5)er9*F8Q9}}T}`Gf|Cj~(#u&Yn zyu)97zs7RNxqDE$?d8pXe+$i`rSdv1{MThZ+~+`MT0#wcwmNnTT+UIpXDd$kX{$Ai z^72!!{t~_|HX}$Qy>3iYRi}AwqC$R0Iky`<=5o1Opm%V=O*xK3Su69vb}hOpcof-f z<>256oB;`QSYFyC&vEsOYs7NlXwet3dvOu@SOoYkph>M5chDC`&h6 zm{MWy6wbWdJ#sq>4F@u@x#KjEmJeHhe>qMK$=y|vaPLGpK;^u-e-9&WuHmb}p){y` z#4!`}i=hfH+o3wq=TvRDLK;clqt?k3_Okp4gECTTbavNVOTTRsRj6uPecXGBvrfp1 zKi=EVWjmCYll7n~42=7vuaU|2IMR+sWiTWao0ImK;^B-Tc;r}B*$4OBV(IM8-25P6 z5|@V`#;7C@B?9Z}auq#L+x3;N>%>VLmwgyK2`pKK>R9UgGj*5QQOO;LqRnpb^V{-WzVCYRQ@{kQW}+~t#?9m@Vg)tEl~$h2De6c!J%>z`JUwBXgFZ8ydwlT`SMF_B;HjvQG{yGo6%&8wb! zUnPRvUs1lJv0Qaurk5&WVp0CmD)KT`_zTGk@(V^?jDG$6M$1(7O?BCoDBdIalud?` zRn05wNqKKGui=|2vZ%6iDy!PI>@lI-6JlDq(s`v=F@IrRRc|IGe9DRi$V&eQ*xkb$ zuQj_Hu=_*)zVQmbOeJ0=1az?6lg&0$x&4XFzCsCX+vJu=BK~ok(kfs@a>CWrF8-219fzbV6lrzpzc-y=tf=j* zCjo&Mo99_hWXR(~34I4Yt9DZN>_%r>PV|x!M!RfcuSzSmoTg1BUq#1w!;4EHv-`5I zmVseOA1Yv~kko}C31VMFxTB@i?mEu~@*0Zu^Z5>Lz;?(&-p3?ryVBV`i*jm&+mlx&Tl<<6okpkAL;PbBZ-N{=vgwwUFrFiHKA!Ml!Z|lXO z6+IHNGbe7Vaynb<_(%QvviKtNZ z_*7+!Qm7FUW@*k8c<~4}!0dhJDwI z2BuYA+77*FC@^E@*S51sxXX}GrDF{}`UIaVK`dj*xa2-qWNCb%iur)4-Sh z(S{d#=YJ-xO~p6EfPMB-ZRl^29B#kgcIM>#B#UnK~|OV;VaBHJ&4 z{*?y$o}nyNFT!n&19u=^ihq}#?58?<%D5=#M9eS{#-oz+zwI#j?j~L_WFu#i^~#R= z7W{PbUMts2`Z+!W}Nud3FIW2yq@CgYyNsQ6A$m*c93@jyV{Z zrm{$=E)A(ZUO*zg#Y9iI^sJTHdVSV=8^N|U+hCtv+@|$x_qGH#_*wLLIcyw+^uQE& zRJHjpTF0*9XkWpmoUHt#3)Tn2tnT$!F{%%Np($vLRMnG zQDsG8Z97Qf98T`~`2$lNDETVjAmOe%iJyE@id(UiE3b-)j;CwIZ*4w$Xn+l>}1j;*nDeOL?t}-RVMk zX=<0=ba}tlSsXM)?#f*^n%8k)yA~awXq1}#>-@_HPc1Z7O7ZK}hm_oS%wJgblkz&Otbn<}P^>MExXPlWRDtpo+Ck1q@?tax zI)_v;bvn{mFSJPs#Wa9+`3B--kk79a^NOaQA+aweF2SM zF3-rjEp<@S@^`GN+p4V!*8_FHyF0&7KvS*e<`j@qUljz1G@u?3q?YdYVN&$>)dBIG z{={2`_%xtt>cuC!E+(S%s-!6o=m)?kAg9;1g>13jD>UdQ6YX@p@W$wOD`4^$u9dCX zX@JPk7`#_fgY|rXoisddcs}8hl$${xE7Ro^H>2bOAmGbEGA4&>3Ce8CiHvmk6q{iW zx}2AJH;u(R#S)rpyTO?k6{oILTzgwm$F_cnaEe}t3P*BD$Il{X zSZO@33n&$3b~MQ&eDF}OLrM@dm~p1+7)(Z71c&l0d9H9JRV^E0$o^my$pL&qncMpM z?F~}HHmO}nbG;Rr#v9jnn_d(qJat~*jdC~z#c$b2jG2VA9w%YQQ5bH#eZ%-Q@8U|6 zbE98&R39&X-xx|ECp)O8qomjH>qtxhhx9SO3=MD zd{C8)DJ*zev>W5sL**>{(Gsm%25-L8c@ar^1W=aPdo}nq5z5!d`{?M39d8u9>#*pN z3^HIODRbWhQ$t+Q!=|gk8G59Q`V2hX6OIl7ND)~FmMEmYete--YNG2rUGD+uYczSG zj0XlZWxaY2D2mjdq?~=1n*{Y_OU=$iuxWZUt7^(B14xqD2>}L(TP}j&0C~)FNpis1 zb{lQz=+#aVdEE99s7hj6v%SWemFYoaeP(qZ!fgR=%(t1!DhK@KfXA<@OaBVyP^kPS z!`)m@$13la+|nP{Ry7a$54Cqz!Xg#+9zUv~2U{3d9BY zNl2nl>7Gdssi3*W>wz0LHXxI_#hHf*D((&2AsjrCxVpKaJLS-UGl3U058bggdcyo- z+^HY*B;$)@^+`{JnkuYyrzg&k&vc`w9o*leS!994K~L{Dj!QUn zRgm!Eb@IH@7W<9-BMiiGM7<6wbcD8pbbvjz*Rv@enR$VDZ5bY?zzL8$Rz)0RPy#mWKPxdo=apJ*Y!@7 zZNLu)NwHU-!_zS~rGKO_@>GVW=$;pmqws>=Li0eE)KrhX#7%1I(|No|O${>SU1-WR zTyL$9(DV$#?Nw;<0y38K&?7XJA-MNL=)yii-o+6+Y?r8!U&J`YuHC=tmiI&6Mr(c) zpFf~%;xMkC-e6RiwD*?cv9kKEN~Y|4zzBol-k;qXN{v=dMMz0}THCO-5(}+VyPr9& zrFh^*R$A}DuENc!&F&*qC)TIBtoV>1Nl>mq)tQ&bGX)~9Ipq<&DfWWyU{N&3gZYYt zp>!R4Q|{EtltZU+h{qC~B;QssNV`_VbzHNj<7ZU1*ObW}c(lrGgh}BdLkADT*iXv_ z?+T_W`7NKGYh87Fzg&8#kuEH+!^&%6n->qUtJ_?nNJhKSe_cuGWCDS~oY*FAH`6q|=a#-Y+ezasMOmcXlsO|UE$WqAg_8l_1 z$cye65uVzL&VGij!dtx^r)9^UT>h3XxkdD`Bq0EvThY`|Ys@OMEYOc5- zq@yZNAK)XT5BL(&>b1PcXa=Al#9c=7q zvYMu_A)_~Vmqc7i+>P@=bFj-o&PyqC6s&mSo15c-wK&=-pFn$CN|`fJAUk;_Z{q31 zt`m2ne&W1CMde>~t1l~_YNKx-q9RQ0li*WP{fJFG-ILx=+@#ulcs+3s%D012nNTVk z$Ayl`{S~YQ#jo=Fj2HnUvUA4!5QIjj6i9%x5V%kCLW{hW2p8%#Y7w{Q}+wA)`qfe?}+2O=)yH1(h65ZIf!ATA={hiBss{F> zHK1LevnTfC_3;|*R1p>ugQDcmHQHF)`dq5Y%?ud4yhOTkwQU&6U0zIgN893sTbD%o z6_mOC^F(G9<+9yJ8davNdedu8H*?wNe}kXjW<<`Ro@FFmU>p8av%wq&7R>vW(_WJ^ zG=8QUL{)9s<|(zktTodpJ~!L}@Wc~wkj9`KIt|pdMz-reM3;D!-`9kjmq<3nyzkGY(N4ZP`*C_XmZtlVS z=I&z%wTqgfU0$q?JG_f1Zh@W;{1H(@7Uy`6xlTkS+4{JT`jvKn!9YOus z?lwD`I!cM{9yhZin8N=KvttgZM5*p(M=-pw$0m5d(yhE+BFdNwff2nOEh*7E!)|s2 zBPzUai@~p{xvOWu+w2HNMT*_*2=B%mkPQK z;MPF*k=`2UKBxN-?(^SNP_~aZ#uu~W4&P?S6Lhnqu<1U^m)#M}ZVG+v)v`N^pvJPI zxY-fP3uJKGxRt1JwsM*sMYny-*Op}2Tf9zYN1X&u=(L#~L2EASfkI|SpqV{3;4(Yz zXYesQ?&v`{RTqx0(b}E=ZsbJrrW9VtiHO-z<10P!Ulh!}(^L8NsvEM=(++O*w8J+& z?Y-Xg^o(F5sAsGjK|QnD2V|I&6ah?-PX!iP%>rz|r_k9IT8}e-MC)_%&wQBpkoS2RxM(gjG zONp`jNLTuStT#*fOJIjGIxRkd;@+rDnWV|_#tMXRVUy&FYXM0(?)L$rwKQ4$9sF*l zyjBR!tYV{XU*%Q37a4pqZ^5aqu%%WM8wF@vTs#D5OqsDVWgWdBmK--k0(5}ie-TKc zCDPjRY+qE;SMRVyLhTqq!YEVz;|J|>0|m2r47ZUad5>y9i~V7Yo3pO5$D&Nn2-Ad} zn`zo@p_g6o;T{sNn8{m2@`xQ|a@|@cIZv#cor+RrcRH%x&bF!ClvB!j!;|wEP*q(y z$x@0`3$wdRzig)WZ{sS7qg!^^Noj#HfUZ%ZIqhF+RCho)yl4lzrCQ@n(IGy9?)W`R7(&+Wglur|Z>Esqw|ovYgL3B}8*A`dyXFn@sS|I0mJRb~y{@>@V^dt`SQ; zuOC8ZLvGz}!vgM%&Xht-b*-O> zUgiqlXI#nB`ereauy$`$mov;l*>K@KB%SfI9-Ei+>dI8G_9>C7Z~8vxA^l2+bI8@c z=~9lbmMFq2w7~n~dzhY9^YpUF)7;X2m)NW=Q$y84mcea%?ps-P#%+WC1Zmnqg zGOzV->3SUujYVM6$#&Kk0tNpNEf5VhUG1(LR;06G`b6nin0bI=jT|{Y%TTG zLC(t52~4SprnWZF+z!14a4Ar`ViW8AjBvCaE0T;6gj#(BQwc~k1+TB>lFE3(vPVU` zQ+5}0Uhat}ONyJ;6YHieuI;-~o^X1QA?85KlHJsuZ0oV9*;$te;)y0NuZx~#wev~g zalMoWLe~A@*_pg8Ah|_9pXH)chy3TMD`Mkp8IvkdG*wSd9(Y zh_Q9AanjbQQVWAMZK~j5uEcq({zEri1Q%9nRgG1z6QXukCKZT?E6%5rmj@Sjsx@5Y z_|~#M7`Bq(t|vQ4G@gP4RC1zw@RCQ0>D$vwSYhAp&7aN)rwd-bnPRiOX`D)uE6=

$Rq2n#*B%3uo2q7(QC^<+@`rVIke;)fQDif}wh>S)l0gMS@iNT9Ivb=g97; z`OrJD)uM_w4#8)6`0G(&MfmfmP=`*(4kz25;nS!%(0gc^eR;Seb)0o2$tkhSy)Pt&=!AHY9SZpe8HNn_kA`l81`-F-+xa?g~x@}XoAMcYq%4uf+k5@xh9ZT_^*nQ zl`Ce*(|#(f9Y2?21#a*nFI`0Uwuz#4d7QmMJ$Tv^9lmwA;oqFDH&SXyEe- z|Dcvhb7D5eXmtJC3p}Z>AqMXmmyAVc-{=9IQ!+ljI}bq8~D151gH-TF0z@ zATyU_kLj2p=XxA6ZgNext>Zv;MLCYMDcAWK{Pz{%j~Ae{@0b>w2-zR9RPUrLnk}3+ zZ);jWUhJo-NZJlcIJD(g`oLW;q*dWXJ#%HM2Mov%<_f@7NO)4VB`Ia9beOzSSn`BN zD_ED8CU^p1zr>HxGG~9s?BpF&q2=@qNIK;M@lFZvDsBG||wjI#?e7|Fq7|CTZ+EvdSVixOm` zj&lym2Q$`WRl|A16yQ=8xoqeq=+x!4g7->Onprjf&Rroh;#>uA?;TYB%bw4@CUAi{sO6iJL4y0dMALBmaw3%%E=NcHM9*6C+TX2=V%`Vyg{8^dw=-YD>b<5sPr^}xjR%~(P7J1rD+Vft)hRJ33fLLSckU95*NyJ( z`xhhGkI@G2$A~U^zqF9GwD`?YBr zm$M7ZglXxV_s5hr>Gc@ts-QF-`wWySKlI}qZQy>84j2~&1=nEH%wauh1eJbwDRke0UHaQC*R-GM=((qnn>cyQPvIFJO@pg*7c0EcFG3ZCs36)T(-0U{J|vbA~mFfj;?pddgy@#qwREH=Zfwn?Fs1+^@wem7Z}MB7o7 zFy$$M+lC5G&+UWRV$*j7>{kA7f#vlYH|; zae?YEfwm%ePtg(x1x;SsThy&;CBVIg05^uVJ@FB*21cY@-5{c%TqcneRe5;4ECi=2 zF03tz0K0H=lF02s40eOarC4qfJ~)mXsXUebYD}CDHwnl&mEXDK4*oR}nxQ^7m2#|4c`Z zED2~AdM;Il!b))dZwE}O#L$)U9@tn}a8nfCOh{B*iu|Ij7iWc=Lj3j*PvK`Qhb$+y zGJ$M&X(jy`Z~{9=9M$P5XfT#U<$nm`SxbvwAbS%OH(8Iiyd-#0ALdY%dMb&^^Gbwj zyvVDpB)wUw0%!HY;J771{#9uUNc&)#1}2OHG+l5d7}?-Z5Q$aUxApHijVI+!pp02<3{eFuF3C~`So+fo(J6aLt(SZNnns;NrZ%0!bq z6HyYkj4L^h{aMk~921shO)8O$$+sZH9rG=uEJS{78a=rQ3lNpW9vZNpHy^59iWe^p zN>vuTgF)Fp2EYqgT^E1S1&&WU4H5@2Jzx3`Pi2$p(qV({Ect7+^?K+26%07-zk9AT zQ%SG^YhCJG*-X((=e6D`c+3%{wj1y80()7xmQCD}G5iGa)$8Tz;D&7yWJo%DwR?HU zX&-@-6Y{387JQ8sKi238Jf3+0j^vAYEy08Fd)}X#oG)&emC^fVOJ@(*l4pAPRv~le z%Fnost6cQG&B4HE>d=}kF&X&k9+aa>9yR?0FJGB2D@$JGp&8Y?AU%Fv=OJNv*3j@;_meXyJ$g;U)XOWe zEeX%n);?97O|guzynrOPbP79QQ?M2HwDqb&JEXncM}Rk%GDdm_*JyFJ3XL1=Hm_SS z>}zm?pWhZDF7WUgZMxaZ3Ym)g zkI37gPCh9x)O4au^`(FO?U%o`27mgyPyhIT{_^+#{!hRB{Xf3+7=NHgFX*@TSfhHx zieP^UjQ=11_fLOIwg&wnt3V-V>iR?N`UCHADUlQ6`a}7n{qLWwK~n>jW3s>3zo5%n zy~{GZOL82-exEM?yt?G}YXb8x9sc?b$&*PyJ$|6S_ZF}w{QgPcXCg12d~i)AXY= z`}0NYrjNkK?#+Df7mL>39A5u{wVGP>S~Yoh;WoNa^0VG@(bVJU_lNP<=g!|3LEl`> zgBHKT=--&%?~`WrPiq7r!`SowY7xl){jvW1w98!Ui|cKv zf4v>idH#j~9Y3S!n(n_OT7K^o{yskbJ|B4R0LA#dV?AFq!KIulOs3+6`~8oJX*S~S0 zh(BNjDb$lVg~RtWE>iwBWk`JcwC#U*mv6o==GR0`(aGc^eDmWQt$kB*egE+Om;|V& zt>j`|${-)>KA%6{lf_{k=f(YK&(&$COh?=p^UW?C;o`h@z(B2J#9>1@6Nl^d4Em+wC>{k z|9|URcgJOSl)pf&c;DLh;}Y^1{l#l0kNAUj2 zy}Re{Dv7TbwDMyH-oLui`F$Pjbxg6{jD$DRhRgjADFg8b%(x2c>E{9a#)T~YfU!2? zka6_*yX=|q2TZj&;SO1e+5U<_{G1Uw{(!AEm-%Ze;r!aW+xGscd6&k%!%^NI_z&29 z^YDyb=Q92OWA}|eVE8RT<&;l8zwXd)cluL?ff243u=$NH=l8qpN!gr^KHq0ek4mKs zH56R>K5@KHPCu)AyvzUJmHO}f;F}Zq=H+_cBB0hz>aFi8Oz%$ruVt%aT-H7G~2{Poj%`hi>JE(dNtpy_W!ihps7bDPKC@56k{ukEd; z{`3P%vMD#e`lH@Gnv;3{nm+meuoTz7-(7)2YZ$*KJ{aF-tz?{8A1vSI*eQRv*Dg=e z*M8gGFV>cX&-PTg0-EoeE*_*~Gt#AUu^7sPkTvE0O}`HEu!~RH z&QPv5TWWpc4t)1^nQ(BWeSVPI^@E7Z%1Gb+LAkVl+=uMq_4X8Z?y`R0y2JnaNDaz-YIV2^G^GWA1 zbC20oI`R9~hM&J){(FMhYnKOF0kI{9egH~f6w@hbe*NPqspT3gxw$qXUocdh(Bfc?@R z$SX&7q96F#yYjodJv^A^`@Ht6V@+7mn@fJ^Xx~*wUWXm)bCq=~e^2jh`u;QSGA|Yq z6WN3v_cv~dZ!U4TS>)F)XO~sup`S9zR{8_Jn(q_Vx9IeJnfE>Sjc?My?pX1Ap6#C- zPa}jsMAXm1C0RYWn_=za>{*SXWZ;_ThB4Zz{p)-yg^i$?N?WvKXPOteZHO zsnlN?cK?QE(SAm=FdgSR-htn|@m)6-@~2Fdsd-=V{VTn7eqS2@wZm0@%!z4#I@o=f z;#;!uum5WH#y7srXnx*?@YC<(@9$W+2_OX`15^G17nk4hop-gGKRnc|(n0Ah2k);| z;D;QZ<~Xm5o3k@HI*Li+@nS3Z3%s3Q?kVAq*NjPew3!M2GN0`CJ{R*NGDvWsXw07@ z^5Y)=vzOJMpVV9W!t11rWrsiQaxiZP@tfxVA9w}6dG)xR_0n~1vOnaR|5EGRznoXs z_kQ%pYgvrq>V7$X_w#?=ue2>jr3(E%)BWe`67Ah5U}7 zg@ZM;-RAVO*2q$~Y<*=^98I?_K@udmyAJMdNeJ!)cL=US@Sq6<2{O1_0s{;V0fxaf zxVsGy+zA#uay#$)opbKG=l+=4-D_2sJoVJ>uDy3v`TvfhdZ@;@!kcP$7vM%6;%~t<`u!*5E@?>IHn+{EqSe9S z@xD2aFmYN2MBGF0(l#-v8FD>k+U3QiAU-|ArCP1h2WoN(rcaa zz00`oCkk7VivEOjITub%aK5LnPFZu?>#XVB3(n&yc3@ffIOD4pf)v7kBP6=AvV&lX zG5e{@L76c`e|i1jcIs!pW%T{jMlF`ezXYVibi2=aCxjfoN9|^fqbuXNNg|hrH;N`O zI`BB9V=V8{e)dPbuYLR{PYk~Ld(lf>{n3sLghzw%l~yy@8=9irYP2aDgc-=Yr5K6Y58lm)(* zD#c8_IA+z|dr>z;(jVM5B>aArRd?~@R43|;g;mG1yWCd(^EsUN&DDKZb%)r8_nn_I z%-+Mb=*n_Pmzw-rrMy>155K7WI&FA18*FQ-{9y4l1u6G63AJMzm@Kh=UPh*V(|7$P zFIm5CiT}-V1yZ-0B{p=dS+s)=J{5C24e2DL`60p&mTx)Q-B`Z8uDBsTn5X|qc0C)i z=JdHjbt{nNbo}P`L!xu3QUEOH9vR-5y;s=!;`YRg{`&XxyN%V4<_SN8{1Y#xL?b#* zy9Ib@Po6bjVLeSJ{-Lt<$w>UUkDlWmz*h=6%#{zFdJ(4FGpZLb2Hi5`;{>MWF@-oRFm=mLBx}zi%$=%@*I1@j2a(xKw zm%Xoxd}e%h^~B1bG|bGaP~ww6qP3!>O6m^jqR=jK9j$wZ#)61ev~2rbxw)LvZwQ>pB#A^5wSlw~V-S#Us` z>)X9Wo4dz0=?m#Lf8Let%y-uuH*2E>U$t@#C>v=8eW!ZpwZ0lyV8}q{oA{1@lknTe zqR+-tfrI4a?CZOf2a!c3cp|Mz!ED9Bs>|c|j13Q~Ks0DU8`??@`2=69aYk%G!f|W4 z>c%qjL;KraX+Fex`t7-x%-6=CnU*TbS-WW~%hPe^r%SZimd^kn}cIaDtvblw-k+-05%Lk3p z_ceVsmkw=KaeS~|1LU)1E&&aXlcS8?;<~0_#+H_=WYwSs5$4Ao`4?2ysvl2}iU!nv zHRh@ZzWEHXjgwk7j75Ibv$!0&?LRMEzNq(&q7|i_mG2lW3Q%d?zK} zTk^{Y4m`n{Mro-=#gn-peuE$C*L!Q znswP({I(*IS4RLu94Xg7PDi>@0&vc{s5$ERu;o5AA>nQdZxp`Qr`7Bcqt~~jqm2A%F>4Sygf*^nJd^+`QZEuHxiU>mlnR$r#uqa(aN7@Y$V-$*MHz~9_f&+KLL2es`7VckF0yGs^s zCL1*e^tkxq>M=Eh;L(j zKA6tGZPWAZW91T&U~|i2qOd6{mcT21)KCq@-2LI%ObicCm>O{4Dv^OVf+Tq1?qY~G z+w^mV2p2*a*-!SCq$l0pd}%Wt+SB36CF8e^Q4A3y{20wBw!SgSBrjNxE5K|T(;*l9 z-Jmbs(-Dzc@a)%c`iefMC+G-;580nq`7&oq12zaBB=K+;RM;ed5hx17#4Aq4(>UUX zRwZNYV+=hP?qHG&CB^ngzs`sP_W6;dx%>1v+Y{@ERrkNDF%ygEowmB&o&4h-nTOFOmw)y$2*GU0~5KRk(c3q|ZyY#st*RuUgBmJA{ ze&RRqPwlSMM2bgC5^L!5{31Abu4aF+NhL5ha#2%!3*WlKQyu}sE9b2^}YofXEXDj}a_H?SPv>DKe} z*fX$;;CLu2VlhkV3hLH(@QYB#7ogD^<$!He#h+TK*3XaLvpf=+p}Vp(J@01bW3lRr z7FWm3dPMJl$4EBhW0g%tAX{x)(wtnitBQbdEghQ;Ny=(*E%|M44~wjA$Ee4e5k6rv zWWn3O-jLr?<=3S^G3+s-SoBtPH<=Pej+5@qu9hs#yQtQ)L&cM@Wk^bPK0(-|n_&v+ z;#KyHFlWuA(3WvKve7 zg}cVd34uUksq+7oxv0Q19L;e(74Bs1o~Zs*#~;sjM@k$;YMvWb%maNa09uA-PP=mH zLg#vp;o!6NB(M5JeP>@y9REkB_KyLGoTA7x0f=<7eH>JUO-4jb)iR8qN&50os~p_H zPh=83uW8~&K+1@SGCZ> zLdK(WI82>f=o|Rl_P+tNLdy>!=l6ua%#xJmqA)QMZ zu51ruw117gj;8K3pT}`93AA)ZU1h)`OXCSvB3aq_Al7oNzP**nXjcJeJ;BF+`ngYl zCr7dGMS2=XfuwutrpLR4ggk-sB1y3GrW2bAfo%LD%hmACfl;bk(j~*u-NCo4mFYUgbBYss6){>Ff#|GD*m|ZrkdBnwuci`1_LHp9t>I=K0-r#YQh22U(0C#Oi%j#qkT1Y&6|p>hpaUsm4QFZdVp3BHv2HkO1 zZoR&{<2l)@+==RHeTTiZ-*&M|)rqp+Fwl{D43dA-HdZ~(m5`0il!eR+$4cQ;fyE^> zji>0h<Ww>3Qt}PUUEY z^Axd~J6^RUO5V`C(NTmc43mJsjCci43l!gQN)ML5-g;{M)G?Pa&w91#*<<~jwXn%J zQ>DX=;#*K|fy?PgZ4YG)OSO6jfnpnaPokRugjPIE`H@qLetgqHf(ajgq z1TglyNcbf=n{iCgbU!^sO-k#%R>Z6Go?IJz*)r7P!ImfiC;HwW2ORO5-f1!La^aA? zzAav^F?DD=lkH5$(^*-IvcH2Ms`AA01 zM8R{cj+GhY(m^lq>zNWMPt3SNA$HEq*>9UyG!9K%93_Gz3<%&kw*5mHsZoW=Qqh>n z>VATlB&BYmw$TLz3M~^Y+Jx-D;1T0H{pMvP24?;W4LzhV4$^^_q2t@YyV+2r}Z`4brT{FENemdT28 zOeu>JEq_^+BOK~@0@NK7E>^a&jT2f&Hbp>45Or2WJeYhnq{vXmFoh`}Fb7mV%Dcj6 zOOv4v-booDWBV25FE+F;f3f*d`4=0td69px5dmr;rvTT_b6G9Iv~^Mm27p;^e}0R9yV({ed4;%`soppn&gl}j!CrA<C-RrIdN zl)1RTyU94R`nLA$(Kt8ZmGn6<_9G=RT;E$g{s6|6#|dAn7T#Fwqk-s^}US=IO^DF&W}$z~M*s3d{~s`M#0Z z&L!C!EhJOO9caL@74}S}tB%i1on}pEh2s>3 zkgA2sBn5>?+;kfZV@eWF20ZR1B1^{lA}u^ZBS(3uofhMnL1N<*>9o0VF5?p;(zWxL zcAL3h60p}NWtESWKw+N-o%_>YGA|1nZspf4C&8NC^n`(#YiVhF|0;|yUy2aOc?o($ zU5KWJ=rtVVc7n>GlTl5Hwz$m;tIC_T%J(&>shUX{#J+8FJ2i@XAJ1XL##!C1J@lGs zGrP8U28fxH+;WmL7a{gIsUlnW^kdd%>-VyyT2VnsAW6E-PD5u)ttRV$bZADhu2#Si za2P{k$*Rw4CFV9R;ld};Mamk<;}(@?ihdT2H zKuX$u`;~MGu3M1R%gPbUO8N!YNl~&|Vtm{K*p=FbrO%w2<@gv&lJrWSowUdmk)irC zRRljM?OjM_oes}~GZep>?zmd;7OvGB`R~vrkUq83dt^#uG|e=w`dd0_9>NtSukv<4 zn25A+6t{N16Y-+p4qDv6r)Tm22zn$*&-HJQ)R+(CG&ra9Y|~UUMuG-W@W|4TCm*_G zLESC|(~gc_zLZe0juSnqXPz;t?HO(*I!v2XahMvwzanW{Unodqv(i=@`oWvH-&ewOB^#s(i_X6Qg3s=Zl`jlfOcq@^Q!4M+te0J^9HP?kGZ!J5+rcIX7PB2M0!x z>u}`KzHy@5oUDQFE3QgtkC|iV?DUfvMf?^fYkc{Y^ACUdIu9OqnZzs?2S2B>nAK=L z(aE+@D0iB0uQH#d7$+wNXKk3<-jS#VsAJ(#0;#Kt8olHfTW*4AT4h6erZ2CeudjUS zTe>lnSbT+uB1m$R7rSd;`|HyukP@u&)>>VFcr?{qqcC-XXTCY0g3p9PeQ))>ScR#~ zy}9B78uMUN`y-}KsnNrDK?7)XT!X{;iD(|LhthAcv(idK(BOOc=O&J+QImMlm?w#) zlX%)#Cj`b{+7Jl?*ijzj%lvoA=|vHu^5|t9PQQhceE(!ABmbzwi(+W2s;!mODi)^> zIel#dDVe_A5G>JQQRsQ1;Jrq484hvFgJ`1Qv;^m}RDEHCCw_^XzS54QQgr1pw8lfv zFD~BMsy*^j@4nC1cXihj^dl%6Tl9Qa7-3M$eDbu?o~glRQb+1B=Rcy37B}hiU6gAH z`crHPOg-nYn#3iUBHyCC4^a!U%u3~pQ%Rh@-tZV&{npoF2e1A8U(^+cG&Mfm1V(di zwY8jl;$aTrC9%`D{OG;Sp?;|JkA1<5rSy+LnBMPP2X6@gDOaw^nA&VHU^B@#wXf%dWgmQ+yIxb)hr;G3ywO#Z*G&J^c-tY;Mqy z;%tOV6y`gqx{2{8_ztn1VH`dtG0G@r;X8Qb2?zF%h8B zC3BXMUNs_Ke2}pa-eB2o@4Bj9fD%~&t!Bp45cl(vk zMHe)rbTyHW@oBIuIc9ST_C_-)&R^*OwkQ~AH-bZ9HSIZmh4t|Mq-mxn;sUI$O&h*i zl&M2O5_@Gmye5lD%%|QgO#&Mg58=or%;Q)pm(s9_abOZlc-NZ7Q7G`n3j2s|v?Y)~ zu*yRVIZjd|;>KDPmeqh4^RX+H5{ti2D4GlSg1%U?ZT$I8c#CHy7aW))*J8(y%+Ev> z4M(jacPzJj#cJW{?$2J9?IEKG*qL=vbsHoE^m9@S8vMQ2dDN}IAB-EZc2m74qp>8u zU?&zS@z>M6JSWh}gu~J@$zkX)C$GtD(S+*O9ToP3$L&r2!c=#on*j`rkFgaQzKjuK ztV&!ZM;;UvaXFf+83`=@oe4adY1o-;K|p+^Y}Krug(}>jrx%ufAxENPR$lPDnkFzZ zlFRpFHwFxzNTSQ0^d3DhugTml6cFlj_N$ng^#%u(i)6qYhsum&%Le8YwV++#Q32c78NGZlvzvw zJ~4CU2%}=>Si5q>etf5OgX;@mB5d#in`G`g8!?~6m)7z$afZTd!acUsta6^{vgPDT z&cU?$P`r{CFRl^I5+)aC#?34|F2L+uYr4+hF?#RbteP_{A+eVdXIoOhoC}l349jF8 zJ>MIQrM^J6x?+eL&HsuU^`(Z-^$@_^o@y7+e~8Q4GEetps$s4?rg0VFS)8qWjxaT> z_MRd8*D$olCS&)HWvC3W3=uJ=XSqZLY^d4~BW$Z&)eHaubB+DJ#Z@G2?#S4hnEX~- zBS`SPC#{XkG#af5DlzrqV;}|8^<*Qeu4=xtdGk5|ERqxeZv1ZMQGVgKm6CtoUoEIR+w)keOO+rc|y#m(j=W~ zOIhqf$@bU~b*kYyN`AqhV!B}!QJ&_^bhYfZ+5r!i2e}&NtP`hwiFowrT=}qJotZ^| z(+)?Q&kRd`$=3zBiTK%Z)81S+DrB;~vYSNz#@RIJMd0^z3gauP1d^5ADAd#3fT6G6 zIz*y2p>56Pe$)ZLI`7M+e`oqjc!2j!tJ5A}YsL)qvF1R--W3$F zR|-m%R^?87(|&jviOCa08Rx=f84!l-&zQn#yez&M1qVsw9FcW=ArhtI2+Cr{w%nb? zv4o}cWKiOqDO^G?`}XyFhRF*J(WxxW79#vNMwVtGgFNK7fO=bp1W6dKkavhfkIs}g zMra6bH>3J7=tKF0$c7rHxL&-8BDm;-;59_>!QR$Y1qnn(tvLI{@bxEB7&B7;+pro& zLGs+x@G&EXnr!kgzJTH{=b#qJv~T-5an16rPm#;B);+COLV3*4oT{5Khg9A%y)9!t zzSUi^AXu%rSbOx>oV%m+o&7N!_330Aq#3g13nuU~%p{*W!3W{a6<9R_-0Ert+RUW3Cf}Mm`A^`k>S0^Funl+enfYiw zSV63PzZkQC>EIw7YurJ&e}O_ho{wLtAuIbu>>6C@$c(q&xkJ@vYs!rXF2`<0 zZgDfejZpGx@%6M&pF=Lg{p~c}r}hrLs;Oqe+82bF+Me&ZE%{XLq7IX1U9;Kmln;|r z6X1k9b(QknTbf-N8{@OC#Gh5n%!GwHPLf#|nYCHPl~Z#?w97RJi=P?p=^U%3I_t|1 zsStwL6iKAdn6UBu2<`IjnXo1O2{FQ!C~FCdgPY`t`|_fV{if-M#6HcAq;9G-5Pq7i zDA0&@*i29=UGxD`X#&6SY zb$!#Lu#D?y{0d^wEN*LbEwg0VY9QA9QnUu?;kwccD%OlF2NRn|=4>T$t3KIPpphyT z6~$E_&u{vtAJ-($DPeISzm*8F__ucUd3VE%_m1{KNU%dBM7TNsWjZ=Cq%%BwaK(4Fwdn~Um*icCmfUi_xu=fQco{w0<{d|4sUXDyateZ3DKVq??O zlW-l4*N4A{`Qm=Y7dWkJ1DIIfcFnuqW9xj~zw;hU=pcT#^ARVU-fyK3pXPLPK=QH= z|Hstmtv$OvF6FI2!5suqTFn4hL0{fCs*$|R_F+>NXbt#G#)3)bYZX&yzF%``;V+9{ z6J*UoO>Pi*3#FXiu8XxRRBqTcQiE>q4=?X-i z!(5TSK|}tgaRbMv0u4_dgN-Z*yL3ufk^|sqQ@1Akq%u1w^b#}LVD6_?tnoWb@P>Gg zpjN|^0NO{akVl@g6Ydl>!->!iyr6{{yYN%odrtDw_ zvvY@D&Zb%eVF&!acRWLG08?~(q`)JLFoI7|>`WmyHz>&{oG+W)hLN{S%3w?F)$w6$ zn)YS!vTui8%B~u&#yJRmj2w<-*~=M}^!Fi=3xyz(4rT71jQnbrH#o9g8O;8D8TQD# zY1eGN6B{Zi%WRFlOm?d1byjBV4nZ*%+1y;L6eE^@6s*OnKb2*rwc*#n`^Z|${whR3 z)xc7P!c1RF`U;2&`Ak)9c3vQ8Tlu9Y9(xGjJO<;pI{C8tw!GSvcjOdF z)a!9;_sN;r%xOdb9E;uZT_yaJ^#+!+AT*!LOYX19mIp9SmrDpVd6u?nA~TJm6srwd zy^4`!)!rlHY0kpbhAmF9_jOgb>q+Fv{OcIvn%saFxQ51>#;{tzdV9FwyJqm^WI?kI zIEHIZv1xj39pTkiipdAKa|&O5C5+$_6mti_GXucm$|kn4v1XE7fNPBsR`<$zf#{?R zq3O-AaA*@z%&sa!3tj?A_2{DruB0e4_g76!9+-wqQ%zCvXf!%&&C_6@DjFVraD03> zvjb65E2t66hinM@K5Lc7)c-VNGrC{oq&_X2OVp)$vCXT`IodQ%#iNgvwgHq4WY4k} zg4zT^C8tTHQKdQbUo%yB&yw+a68t zWs;c7r7#na|CW6%U^bR^A63%?xM2*l6+A#0U%ZO5u1mF$k@z$cNvV(6*7*gB6lroL z!o}^Y8LhWt7?%+y?YlAO*<6v1rZYz$qzobPXYdm<0V)v+?IvqDLV*o%iji%^?Djg2 z56dI7uam$%X{B&*W7UN0sy94u5Xabh1`6YLjaDr&N96HnJH4RM-e=NfHt$v1P}937 zD}3C60?;crt>Xld$2SJMn)pL|!6*`T#Zr+eAeZ;x)Ml1yI z#5afX{q?I)NoJf`w^cI<<>fHVG|%PVPPa6-0Sei7Rz zLAn0nM)n1*cOBxs;?3p98nY1O&%@ncQrZw2@JeZ7@ zAIf)pk?&qOivpwl$_<-E(O{{c8KW`(iWksQn5w6;+{uPxvEAhDF^jiQLu@L=kMpf# zi09NIv9OVX9k=?jFZiry>&l@Qlb+DeMy1w>-wV>6@f=GG`jzhHfW2U;irh~X8x1#u}QX=rv50efmb z7K!R4x-2uaE|U-4O0SzrI;1G1UMP?t?H^|Y`(dCybK*j{OVnL8kDOWmwRu=}gltE} zoTK5};BQ5*4aoeJ_>CYR$TKlaDfH_AOHe;x3F4IpNuS+AFA8yh!$adp$kDbnPJuS&$9p z;BZusQK_*~?xsr95Mq zCk!_GN29!oBK{$mC}{+I`N@37x@DB4Y1v7yhBBaK+c-Fl?vB`Dgo>nH-Drcj;!^dP z+A1wrHjmSo(iYcrqfeeCEsiyD7TIfK4+Vm1+u2Y(M6mTfVQNw8uHUFz$0h)#R~FI! zIP@4j>j!1Pw&#qhz*!s2LWESh;P;>+?QS6v}L!BVhmP zfImj)WM*E1pR@T`Bn^ld`-@fcv2fbTqUIN!1L5y_JvM9z@xxJ6Nfb&sO9x+p@*y;N zlrnTb#x%SNE~T->`SkP;HbMx=^LMqbO`ZdGiRJ&hscGt>+DD+Fw@fgy& z3=4?lL3*g@A*xa2uZD^(PRw}?R!d7~A>pdLlp3H6qo!!N6bcA`ISL+~j9b@ImO_;3 zv<8Jx>GqGjO6?)%Ly=y^t!1F34WOhSJwQq3UO-8#;kanJ?EfF|3@qQR8MGy;w#R}? zruTi3rNZ}{Bx#B`tBRn39v>R2f!BZ@a6d!wL>nLHmeosk>&bjsEcb1QGtG5=_F-kz zSa&FXw=qK17d`~mt7|WCD@>++AU1faxfM@NCso_0?Lap9XprJwvOZQ@gN^}J8F=`H zDlNYBjk}w04_J?i$16s)u+`0+%A+#!6c0Pj#s%&F1req@#2U=zqKB>LiY1TcxtaGInD3oPTeaQDs2AIHk5J3wm|HY1_rgw5#4yX~&Ljre(Iq zBHvi?a7{s7|EpCXExSfgEGKSlJ+&Lhqs8{B8dE*2u5v_&+w=x-AY`8nhQZv@M=u+g zp2IgF=;SkZNqZGLW2iJCa-O&r{EQUo>%9d=zu?x<>brLSSD{Vxib_h=??o@#|8=V! z)uzcra+e3W+3PHcmM=_vv3OA!_)DEJP)-wYfJyuIID5B#E;xCo*!W<@E%Xrip902t zo6}?pbKK1L8VgU|EP;Q8H_VBQNhTJD12z#d{N)6g(kQ3^<75cZ{`IgWUM(u-D}xZx z^48RID2_&G`BS(dkzg;QI9UcnaL+!Sj9ef}-1kSlM&U9^*e-GgZ>VXa^=dVks1?+q zz>i7a^=r&^B>63_=~Dowqh8UNd_Y|SNhq}*hf0&q_v=`Jxe4d{odH2S-%kVx?eGfi zvpRXF&C+BHwFr@W&ZP!$3qTIf2PVfwh6)#?U!3amss)t zt;eQ_t;PTv+m?QLj!inR#MpDsZem0qfpt_!U=>UP#WdXN#Tg?urSY+UL>mGrs1a(V znA?5?Xh}gmBWk(u21?uj>NG{J&(LJXp5-qW?Hk4KzNTZi>lG0Bq3EGHu%$gEoQDYH zsVc#G?xWzJg5`B4oNI4ZuCKN3rRFh`w2_NMX zZDQz23MMTou@XHD>RHog&DP@^biD8@`}2APRlFSKQ&z8{g9DjR(jr743|I(WkIxp* zn5Ovgld7d|L+?G1wHX^4hb^7 z*M!Q?9x#E5q5~B*y8FFe{5y;XXT22F@AZ|dx39ebLG3?yC2y)1PFn%`<#J82cxtCn z$LR-JwH{}o2R{^(+h#%z1%-D;m0A2umUMvl*2-R;RGh;p!aW>?0N5=gL>7-yXYjdV z#b@K1;6e_5H?D?{j1k9QOJA3OU$jC{-6?e`&@a)#y5_Q^<%Sm_>~SwaPh|6na5l6k z+k?p7%BN3VW)w_RL3U*tkEJ;aW8IsdrqzD4V$@QHNPDic;6vVS#1pH0G6bxN+u9cD{w4KuRErGkjnMr47o);H6*f!NYi zcPJ2r(PU7ah>;wVIAhWx4l0giR&9ac^+5PCx%MI-$9hP?NP$=(5Ja5tt-4%cf>5j` z*S;)S{~B3%2+zxrJ;CK)>Ew3lUFFku-UKauH!{{ma{- zm$CS$ECr1ve_e2-6vt1@Ig?s?>f}gYI6gJIOHNtaOq!s@8O%_BD*(*)(#1C;Bs6)J zUeeb{TXP$B2pMk%m=X|mY}d!(-zCTLO78VIkKeg6$amQ4m`+4MUvgfHZ}v7OItxkq zgPvMv{SyPrcmxp9)~?W6IQ!P1yUKOFtOcu%7ByyNNdm(e16ftfh$EN|w`C}NLH zD$l|eLV@@!m%8jLL_V4sV_wwV@yXXfZCG$r7MyXn9@3GE58sSe(wtSsv9_m;0*qnSNsXzJL9;Nrp*|UID)Iui9;|98V@F5*6*gb#n><4 z75s%t5Q=72+wvh-iTc|x>B!;0(&2^2^Vl66Lq~JkgxpeNbIJZ@5bioqLd8)(ggB0? zj6W}jXr|c-zRP2#5}08{759$IP-l8)GZk*4=3ViK&Yv-w*&=FdHaVv#;Hf}7*8)YY zJH`}YbrDp=jniZc)`Q(!wtw%=$s%haKETZ8tgsO2;ie*|O+{{#B>~FaH)9;hPUEtD z3ANsC=+}7H_7zuE#tD82c0D)QVg=kL&;90k4Bdd)3V6aIJXJgWo74!s_vZN7QRp^sckR8zj@ zMnk?v#I(p1?H|AbS>2rn@ovR0_Z#NpY*+WeFEMY4fJ<$cRf?>Cg$g7IN{HpA?P3nJ zgD`Er4~X-};*+$bnQ2K9{i#sc;6}sajbmxlXh{S1A4$y~b zKHI9das~lnw$Qg|2m3h2M+h16yYoSu5t)`dcjqCzd%qn*o8}8zM>fl%xS*sT=Y4Vu z-dpCKM81z{KGz)(mW$)G^tCLM@8yv>#0~%v517hgS;|fah_L`QvKCoQgsI=~R zsz4fFAqc!PveX(GB+4`dx!VOsd~Q%EA)DoEz@~5uU|p-;Av4=U zF0XvMsYGtlzf1Anw_@Yh;LNz>3zPNZ%|Ipr))+;mrfxt5&+C5tZw)MI*|w%)cxNpF ztPChb1MkFM#qgycTb;FEg11JDVlB52@r>w7n%q{s(am;&6qEnjDUpX!QSyc4nn8yjQDKRr-v?@l__-aA_g{7aX3exS=;hAj+fRI-&8$oVR~^Mo zZ#QFB?>4cQzOKh;2YJ}=yo-LQtHRv)--=$qd3~hdR0qIfz;$P2U%~XwdeOk*1r>k? zMSBuCxGSSC-~vN2H%P#im`~FG9K$**h_THv$RirO?vr%#&8M)_bw^E_#8RcKw!}ACQ;y@aOz*K zIF@GrgWxy$HR;g*3qt9c)^Wl1BSqpY1=^+0T%&S-WRGA zy@Hpjep7eWnQILZ2j-^mwFU)1L;>OmxN~cD<&yQ={`tjeDge;NTE%2lZw1o1zEOyr z_3^hKLFQY>9ovtd0(ArgBz}rA@-fhKYxr7Ua|EB_!9T<84ElawOsL(3d8XAD9>%jk zPMx;akhE`3-LTf6eI!bq)dMVbu!PRHii@0qoZDjow#mcZ5;AVYj+vY;S6)>Yn}bDN z+FgXA|26Xgm&Pxsfp;&rOFN)~?>4j68sKST@t^o|+|5dURMUcO-8kfsQ|^eBgyW?z zk?jQOqO}`I|7{P?oo@wD5(8Vx0q>K-F)o|J&S%K(FGEA0;%ts$(rKUB8&%gAy%~Fq z{rJEn>=9cFe|^y-v$koBq|twtp-lRUsI|@=?|(O0@?>vt!H4>eIr7L|MI(N^x( zKSUw?^=*u;-re?N;Zhz-C*b8re?%6qC8(GNc zKMXn>amWVdP&CqH7G#`-!_+5TkAfcZ(mT}Dg{~-GxIdXfy@2r69H-AOyLaTe7ECOO zAy)H89R(^lX>2e$7XfFTa+aY2%)wbapb14`)cSlxMm2XPmQg%SC&ms}@aN zHV_`T;>EhR3Oi6Q-J7@9e{%&*-)*j52}{yM;3P!w2FtQ!(m!N&>mK-DhbvROAi$bJ zWs1A5iBp~@V#@p6jI@l}!A#)BnfH9njYg;x(YT=TV18)*)RLUiKy z%Mx$rVY{!Vlb^7VSdq$CN6)Vd?0GuyxG011st_Yu@Zm^HN)NZ}h%&1{o?CITO%e?-N3(VmGkN$ixFx5QT8(AJ#M%q^uw&|Jn zZJfc7cn;-XtC`l#KUbu=wx1&w7%fvSl^%?2UA|%~N!6{zC#)kC)19d=^^my_bq%19 zm_rXZGM2{pW$6vf_iYj(*W4&#MCURLf_?ws!Cf3iSCoS2?Wqi}bHDM7m&OU2&R|izjUz z=m%!7A~))5#?qmr57iKMr>#%_3+>vQDp zMVu+blXMJ5^^oV9UVtnliEuaihBE?4Hq>Gw&Om*YfV)D<(mEq+z9u|cg_xC9BQul2 zYFn8R0$~sDZg$}88na&No^mLTE^v=2vLfR_UjLlks{+)&7kFT1UYG495 zuZ6)?(K4o{x?g+!Oe#)>`$RP2j#Q~`XFhqF2E>ZfrI#uNg)&UNm#%^-x*VbLJT(F@ zHPxw~fN|#+N*?BC`GZ}h*wuE9aC&vX4%|dnaGwtLqrE+ z8GPUQ*%?~tBXE~d_`C6!Dd)Q%=Gn~jJAG6Ossj4x@9utleDBNm=lsv}Uk7hK|30&{ z{Czv{;^)Z3pPdOlUSRK~7rzfCUcA5mYI!txMU-yw`}*{=I{j%0;t9VmH}dU!%i#Aa zzrS?^-EVm;{z%|^|M2beePK41==@h;|166``nJ>erPC|@s>_0Z2>SWTTLeL^`!|+9 zcP!ui{*lpn@;!}hHTEh!u$k=MkMy18A&7lY{(bv7!{W@|eo&d#%tfppG33w47@utK zYm@l$Fb>+^quPJhKwlk$8cvWWGxU7d?kDzCW+Tb|PJezaynjde=j`(zkDaQ{RS9~5 zMRH_})|Ic7WzbPRX8%Kny(!1%nUVLuCx+t-Ck#GP{+aw(mI53s|GwgT8=2wfWQ(I> zR@}zPkneL`-si0PJqsV7rd(+MDbw$~n9^#M>~J}Gw%Yz=yS+Q2Zh;>EzzWzMbbFHmN`EO}{@bc(Qz!OEQLZ-bF}^zgR4MUN2fb+Svr0AFCyk4QKLkBj$tG`9lYe}p?ZM|=xk?r<;OD#Aexdp>fgMqEvpoHV^W;w3 zjrTVyl;-L%`w}k#JgUACb$<+>qG8>o#e6pF!Kjy8b0KwtnT7bE{eJWRu=k!}O>JG< zsA54uK}E!Zpwa}S*U)04Hw6KykuEhz?-3CZ=_0*}G^vpqDFFne6Qq~W34{`AXn~OR zE%*Dp?){wo{XWTv;8F^<)aLMJ)5M?616zbyp?7(rY;kLsE4H zaoVSU=WPx4kkv+jw}avd@;6j?O7f`Y&26Q44NnysPkdmkCCty(PinJ-Bny! z-@VE<)f78bZ#R(qs@}3(-tzni(zVq|qJF=_$JvYZop-AY{A#wz^2`uvv6wjmzv5P+esT=lT}2!%`^2+zD+USfUdO{bunOf z+4Y>!T!-!jtL+Nm%cypj^{N%kl zN@dz7FEvfsPeDA}DmACd)lap(VMV=WMUaBv$0hWtr^oGH8d4V|vD~=2Cg8d*lvGa}ZYutjV z9ZO4oan;-=Da;gxE-DPr`4o(r+oGIb$Q??QNfR2=bM1%Eu9*SejTgosH*OgqBnJAo zD$t`1W0`aZbIe9P53EhXph%pYVZx>gj>xUp$S;4!?(og8G9I)W0Pee1V zg0EN)XW`AQ4|EaqB|@&M)ZC^vN2CNELY^;AFXXxWlC|F*=b^Vd?yY(E9a`U!cn;}*%>*hU&w92t1$H?=?Gt6zM@FtF4?E{c9ERzPjAx| zi67%0``0{DU$dbogTo`dvG4?PbIfA|svA5o!Cgono8z}hIJ%s(m&P%MRXH#zq&cW* zr-j{qfMAEKnyh5J{3;h+>%mf{<`X{Ms!^ZoVV`!u5zBgQT;!@D!+qj%$hooBYxd~5 zTqT55(9%-!bT?*EaN~UuY6>?*iGrE?$w*Eq4iwdW5I7uDa9CXg#1|k3`A_WK=AvL@ z*G!zbD;2Z=p&`TXeu=G*@hU#bDn6kVMN+x>y~}|%1u9g!#J$ekjVAD zT_3AwJxT|La}hxBLK)&+S zSagoVCu)y`w)Pq>KgdRZ8OIszP~tV~{KN#~hlKm&o-sP`GsIr6DHz6$8zdVJ=c_9g zZy)4&d^@AsEsr((DzS@I~XRCvB$x0VA-iO zTk+bjdCflf>rf|ia+vd0iQnFL69qLy%*uz>Q;N9EE$DiGnZ-%!F@CqCSe$q62YSZS{vmhP$Kmw(73+-r!50I? zB1dJ6>+hvE4Ia3Y0pe%xQ)0KT7c6J(46z z9CW_FYG|-uKLoQ3`8=>;B%EJIIi8l5YvCgcm!V2ioPYdn0Q_PjM~&K3>^RN_m!7Q} z_KBlu|79nU9oXg+O7vn6vVeeiu&bue%2Y;w=WB6{w z>jQG!fJ(o#-f0>6wO@!15!g31X=L^4fk`wZWlT-=eL0NQ=s_`?Q{AyIYn(2g;b+!D zvL;HG@Lu^9H#ENntCjs5V&EBRxEWovsq@S2B7!$u#&-O(P#h*cz0_>PyQI^psi z@qJw(@5X+5-i&V_zw+H19PKzf>y5Wk_iYMwL_ZRcGh!+|P}8$9|JC%!$res65nNx> z#Utib;I)=oD|=$ozb@>5)i}CI{clpL=~ln;|eh zjmJirT&3U8g8N_N<6&#F$cFn*_cyez$T@Ml=sZb_d>CJvhj2Qz#JtA?u z?4scj*M!pg`sRHPrV(^7E9-J{v8Q+K&X9cvgK)NseOuem4V<|TQN}j3^E}Z&8CbjLQPoo^$}zck3oKtx4Ta)2qs(C)aT ztBD`$fP{0gjW{p;t#d0TF_1R4S3qju_>4%Ob~V28%&T0FHGa7dS9c%vJo8~k>3uMy zUJE`L;{7Q;87xnxMl#5i(f(XJiPm~dEEd@tuNv&ql*I}($c=<0Y$@UtBrz_FaSu=$ z+sP(rjg6H%k;ky&>xcx8moA2%5DH^ccXpnHk4JbQYP$M?%HGa{#bKIDJnwglkt374 zjr}Xm`?1dPnH=G-m(8mm-{1Usm8h;0QWLW}xre>c9jwYR<^9DDUw5#U z6@0+B#@QT#L?_pJnAgwXd>B(VMSQ>dKPS{9aERI*!5nT)jB`zvQ{07qJ3)Sk55xH( zZWczMB+Zzu)G=Tt{TmHVJs-c@omV20M_!t>D;~DGe5jZ0r0baPE%vIQ@JpeH|6#{xhun0#kkSIp2zSy)a38nN`LSRYiqUQoA$U zjxJl5v+YOHF2sX3x8=fo!+JTcn4);4Q9W(-G6w78SF4_VV~wJzn|!7TarI#J^`u?2 z{A_7+kz;dsvM%JZ|MSLbz1pd&h@*|A=?8urr?Go!xQY|o%9QWCYy!nlgJ{Gzjg5-F zx1Jl{#!2{4v%&tRSygYA&Vd`nzCZ6o8tk8M?Vf0jO~$^_yupEUAC|k17^#ENDUWF0 z8fEGC7+hSv!+{~7SMqK!o;H}?}WMpUro_RT0-V%7OX=ZC_?n)z|?Plis*E7lvrq-4;0(v$U zt}kzi2ucXk2q;{&Fe;MO(`z))a<)0aZ$&zETPmw@e?HNWW(Z+f6chycP1i&64}&>5pE& za3@%CM_LbBkKCIfuVzzZNT^AHH#yQoa>#oIe3mr6?BbE!vH$<){|yA@SKMoci;eBX zlhGyu-}GxHCb3v-ZBhRcZtP~lbB>6aIVb6`l5lEj>LT4vnK$n4?zoJs`dFUu@Bi4L zoQcUvlOo;Z+$ZykXK&55Mr5a^-X!U+xssejV~_tqSkPx^csNxef2)1+qO^9$*w`4E z?2Aj@bFWGL{vfm02_sxCemlVEF|bN%Y<##7A$*B^6Th&qySJzKWOZV~*v|wCVVl#2 zPe-CPa?N3ToxKMhIlU)vh{vFMGl9`QY*M*i{hg#ZEGqjIMStG-6N5w zr(cZhD93owhRr{T-c}NaN)+i9jM_`d)>l{aG#duVY8g{cTpFr=v9<9qv#>~|=A_$egjtxHni?@24}u50y2;bLvQg2D zIx13nFY0NMc_VZSr<~&0MyZV81sL{cPXAe}Am1G#^qrT>bx)$B_$@#rKn++Y5G3QJ z$t|Rf4JSuO{&kc2KKxFM$l>9k_X)1R88vpZEohOhosCVNL6IXI9_+!Y&ugZ(&Nx5= zrEU>+2<^AQ#B?j`@CgV++6!?PH4Dj`Mm8vZ$r)t#h!UVtbV~RCZA_Xcbxsm(E28Ffpad2?x?&;a{mbH#= zZwIy`w`7D<#KpzQr;1WIQZ6ys&=5?%bm>|oP4a&2)}pj(>L{-$JmH0b4k?NX)KN}q z;Nb-Np&c;B(893N@PnZkk<;Qat&Lk-Ti;gZXo3G)MFc0v2z=5~q^wza z%BXW4f#)preKMCHNz|xEFPEOG`HXf|uT0kh6N9kVe_c>Le-vJ~r zj#AyY)jvLNgu=SXg>?b;4i4)6!7EGeu3Wi76?w}>wS=qbmN4S`-=Uxu+C|nxn+(So z7)j4EXN}rpy1Rp5Z(@LJ0?8~(JKnoN$mo5VI)snOdyU-w^f7Xzu~%zCIJsxQ_<=** z7L?Ky(`sNMEiFw6jwZ2=+8Z(O|8$AF^~ndi%FVvF^qvS6f{y<|{8)~>6~)@pl7k#E zm>zEN>eZ|HO5K83&pSl9J~m`INf*{<(G=YG1MS|qP$qq%HEd=^C`Hj(!^D;9qu~U zr<$YkkO!*d`!h%JKrxXY|FK4 z1b$f}A1;yMmG%OlkX&;Q9{6&juZ`c?{FXIV)M&=^~J0-kQ&&r|D)|09+ zt>+e$Txi!CkKHX&{Ws@^=9&t`b{D;9x6NlD#sYf>5glr#!KJ5?hSoZ76I5q+2l3ry zr=6YL_xBdI>PiCrj;Q&V`;=Bh@ZvWC=A%6dn7>1;6Fd+hT(+XuV>82^l#LSHYf5WK zxiL71q~vo$!+vTbNC!j`|FM408(mAi?kXkzYj%5ZW+ubMBy}^&U@3k*N4F0}OG~Rk zoX@hVj4LYQs~3rnk9VtZ>0P=A>{O>KMPF&h?^e{69jSPGKeqi|QerA@XlxwIri4t2 zOJdO&SIxJW0>FpG?pmxGvPZWqT9T*kcUzt9b05Cb+H$Mty=W=#)v0AFl;JIajd7@l zfg!atpaJyAVqV7fB~dPbP0?L^Lz|(`8Z%aCPfxaAb zKXmWQ^Gq-Cs9NK@V@9-#|z2C2J zh`kM!a&FHW+m#egzXCL+7HD$L#MAxpQ_0FkQu^TFpo$=1E{R+)9|DBeqlbrwJv==0 z){L^+5xllA?&Ums0?Z^4WJJ+f! zQc5qVU%N)Q%#c5Y5_hMr$?)p0Ac8!4#KceA$cObB{irR%_|#Yy1C|F*nFSmlllYE^oU9) z(1zbFniAZCGKw(;5G#k3ITz*K$5tzk#_L*)4Gj9Qhl(QGqGxv1{U!rfm_z%u@U+=snlw1rfBr< z)g)e&hiQwXhYYT|J9s`iU7uDdzrL9JZp+=qqGu%Koy%F*EcVqWL0B!dVscMZb-{Q5 zPG;ujR*{J3J!!P20W?7hJF%+W=GB#?_AG$h^P2u`M;l`44+5{vJ0s`!-$etjW~mPf zNF=YrsxnWNG3A}hG?YU{X@-X=?8NA(jp+4-Be#IS_*mfVV?`cC-l|3T&Kofo7Z)47 z+g-|$+vrhMo@EZ_ve8cr+35K_f%KW}+KMwaj4$z)x(3FaA(GdtZ5TwW{Apks%4N>Y8Q6#pWU8sVZ%>ou?_ zFS5hX)1K9?<5Dd|4EEWeZe09t<9mR@!a{pT$By(}%W=>NFriAhbh|{Wvb-s)oYVmg zjsZ>Yn*@Qoy8F|X^N5sfdCBH4da?QAq)Xyy=`61}v-7?VA84UBPN}FxN>ZPD{L11b z2mg89&B-(1?YV$BKRx`$#pzdCvEX8|dJLhE;fET?7hbuI(K6@9F z`m3L?IM<9rG#V!jiFhwuxtUL34QD2L4);bkWYD0p6OI$1KdbG&o@kHqI|^zS1*&@Y z7P@*F1&8Hfbk_R!t2!zJf`fxGTc(N7@j&PW1wfVh&mJ=y+N>Z#K$15}iVy-anMU(; z3w%D9T(tzr!P;y+T_x?5Bn`7KSO~$I)q{EhNpgN5Cn}<`m~C?KYAHHA{5(2b#6IP2 z1o|$>OAGsSG_b=PL=n^(GIV7u8xb>F7GANJ=bIG*{@YK2k`8@EzmP2~1Avt26 zo$g(&@%4TY4N5LT)YF+SI3C64RUgQW|g3@z)Q-V z9O*fkG+9=2vbvFV5;U$2_+#2JHikA}8(#0lY);`K=MVIShV3H*kFvdJSby8&2N#R$ z=skIPE2HeCDwJP#_TGof7+^#^$1lxuIeH$k6%l^i@S^!iJ*TgzWXB+mp5vtEoCJ_( z^tlVnt3dXUP4)bk(_TbqgjE^$;4g+H_B2s=e9jK|Exci6j?ao8F}_rtET-GLUrg34 zS>qAhr?o?2F@tAW>kW#Q9SAC>&QS`P87NmP+fv*aZ@zEM#T&tU)AT2|pnoiAXnRWp zafdrPI);(bv$Hu4GX~gm9q zxs+naO?+}{Oc-1;_XHzk-(1Nf`{;ECUc;(yBgOzzD8~tBOIDUWdKQ_g-g%o=s?}PVJ%DSCv2@4>zr~>6 z3-0%BX^*pq!>xzJeI@2?JHKy1gK7#IrXz2+(hFS686FWP?{t!5DHb=XK8JX`0`5}b z*e{*8cFr&&rMJmlI~2J22WTgI%LN4345lcbsGcYmVQkpgf@)NndU!~b$Zo1aBGgw>Hp#_mR~M{9o#_^m^2YIpR|fUF}n+-rq?)0 z@xdvIQmvD`^j{6Hs062cCoJYv7W&p{+RH3ro9W;uSB5=2JQ*@K|;ye6OFNLy6>2(tAfvo7o)@;QTUCEX6kf+Q(SMWS-&=a{V`u|Ut zdA5*{%+stTF61LtgR zC9*0)FMLgO6JO0^XnN?pnj)th2C|)Poj8OP1ND+!JgLd};6wnK{?FnCW&9~zGU|_W z`xDdCJtj}k2>@j^H7maJJ>kC`Q9D$;o5(;~W|?0fmbw9O$FYIA=ovRDo)SHJdioth z`&>qE+3S8+a#fGmq;uWtZfgD83c8PTk_E3J(IKV9&-gLXE?~a?uq5BTjR)x;Cc^TR zLDrzg5m<=G6FV}-(W%T+ab_(afopyDg`p8!nTeiwgI(qMd%f9^vQ2gqb(>TMxld9n zXQI-YxQM|u+tgGf)<4F)@N}L>5H1N~ZYWsmG9Rw4trhz%Ev2+2PBrBPQaTc`k9mGA zxu)Y7vxr!xa3I{SQ?%kpCW#J-X!7(57jf`YuWbDP0x0rms>K0_9UQPB% zx&2}s!D3xFPeb^1RoXRUo(jRiav{1S+c$SJ=7ehlChuiHPG?Xd7rCW z=c2vG;uco>8mI^A2?t$IzM>c8WTn4tSA{Wbf zo<)m?o_qe3lBb1WY4JK0>`~MH;<>T0Tjg+n!eUU@xx6Y-zD<>-w~r=yW0j@4^K9oA z^BAE=q4i%9$^9~;DOSshmQd?>tB4tm+&TLf?SA=lcLRRskK@kzsUs%y?tQ|q4xMWX zwn4heU~y)ZKp1(-9xk>MAJZZ;vf3-mngs@}^BqWCd7G#{WdId+kurn9a+w3!e^;T1 z3^W?Ov$GTX*+_eevEdJLq$l zB6EhnZ_2ZbkByF&1l$$526Eh3xy>HC$-W%7itXpQ{mLsABo(RKIWAPVhle$t^BW@U zJKhtC6_2Xr<LR=MWgxOS-n` zbq$Jfx~bq1D;9Nbw6`#d1MR@6xMgkek$&fk!SOyUn49NMrS`X53jZ+nxidO>Z#3?^ z>U1#n10hC;@{bNYK`K?l8V(oOa#(so&u`eGdD>aVt!AQ@sQ?rJ_zzZhZ-u|oqI7h0p0+=EEpN3yYM`GaOz2KegGd$fCAdo+jYQ9JEqKw)El~Z5 z1MtD=lJDQIrYW8O=W`A0i|#d``~s@FWh)1(tE+tX?uDUr|M`+*X7>aH^ddl}o}>xx zAy@-j4SE0T1&QGL=PN-1Mar6R6yWC{t9t!ke^)DXL>WFUHm=bv(oH1)&5pqrC0qdu zxfInivQa+UJ&@e%hCd_z`4VU3NA#d2df3103V9_m@v z=H}*9E6~-fPI4`ghFJKtyDygrZ zvaP_i`L}Ux4B`^rM*p3hj+xff)GVC0Qp0^V+C)Y+RaRE2KrmU{*~S5Zp9TT8A$#$o z86LpM$cW%76>yWG#tek!6DbkY`dz9U&O!U)c6QtVqViXuyzHqEno18;S6ph_?q1*Z zyU3EA9qJo4Qswts5lybZIxu)}KVfkB&>W>XU2sRwNN;-VPwfM%VhdBPhMhlJ5NR%^QQC zJ|L(-5q&JE0i@4;;$S{-ZZLZgpN9dMQU9>`MRh_u^A#p0+I#7ux4X*E%@xa&RBVRT z+#~egbHOQGMZBDXVAqf|*G95<2>L*u7V{C7*X5dd9##V9g9uNlqVfmzX zvL-@7@ozQj^-^g`NlAIRh1UHq21OAy3Z#*roh`=EA7lH96A39MNC^oEuJDcuNrTV4 zoFc$nLdt<=&HWEeCP|4)T~wN{2M2Y^I>*M6fYpu;m6F(c!kS1Tkcj@T^}E(gfNDV^re)%zBVnM)^leMER zSrONk7;al(P@0|gTE4DAgspvZzSb(RnOnFq_(PtSTFuz%?t()|5k^MoGjM)s6%-;t z?$3Rgu{z3oAD;s^^T~S z+kHMz@_*}c7R*vy#xNMlBTgow%gK37?AkeJ)eb$al5%lQnk-3s0|iNArhdlgJyqbP zb8dql6SO>wp{q=3zh||rHS^KI=-NDUKeM32JTk$S{v&YK1L-CCvQn4MCs|4FWJ?Be zq-{x2rXbv?UbxaNd;I6$;g&P8ySv-i_{MA9#{6uB0pF`RM^sH&nRb!x>f1};*v)-L zP)I_8=^AO#RSIOBVB?CRoifUeqUo&L#l~VmZB1@^d3hNeA}lN{fLr2)P3<&paBHSW49Cu#ewImpAzUcn}$vvegcWqbO4YG{jK``v4NR&Sq&hzw?( z&631$#@aEEu~wd*haW2tC({tox8d$o)t%%Yetg_hs^I0^%T~1I*iZ# z!TE*wJ%0Y76*uCZ3DSBhowG$esT%|=XCeozZ+v|1Yv61QOlxo_B*w&l6a?<6cb0j0H+sk55d*BEbmnW*i}^z}j0%50{toeT%2WlJ$yb z9wqKA2FWd0KhCJWPq;dp`tn&HZ ze~~hR#ASiRr;FbV>Y8)`ajGBGGMx1p*e+xiBC6O%317i!nL1lSZg^s1a|GhkbNscIGO6ROg7f)z<(GrQ9wo<>#1NZZ<;lnBraU%{c~YOqerbYOsoK2p zKXdY(dcx`mm=K8}+g`J0dfXH*w*k!_$aCz(jIs}wx&1=vov+Bmj^N60(<%iG=z%_8 za5xYv)KMM!cm3)*U1kyDU+|J^W#bW3oIj$-{2}O_3q*}v2L0nA*WLh)62sh70^hS4 zRaI3n`TV=n2dRZ}nWH8cJJ?o|veE(`KQB-z*9Uk1DSC7u>HBq`C%eK94(|a`e21k^ z)xX&Y2l@}Dw#(8rN{)~{!uy_WZq*b)BDC+eH{AsvX-QTElOLkuK-u^2-<`QczR=(i z9YqLzHvP2-6>#{r8^|Iqewp2&HyyhZ3ubm#*B?1o*qZc?K3xuWjZW28qKh3WZZ2+< ze%-%Tv(GQ4Hv}nMvd+-+;7I{W60Z@z+Ef^9^)&lHhHpN-1;iBisP`!8q_+F^$;G#N z&SO}Aysl;A8ZMI>Mylz12>o%h*Q4LS&c9I9!sK02JONW9-&uFUP5fnr0i_1>t(>W@ zN+WvrP0fTOSDl!nc(Rqxgu71^IOnTRTljeZmTBVJNJ`_c7)aL5{O7SL;oV}+CKkE! zW*`&{hf@*9(GSD>O=QDcUeDcLU!n>>AKKm{xp_JnQW7sb%&2DWBG5-n_7Gm#2W7cW zhCr!;Gbl^V1|ManM3Tm#dCIW;R!wuPPLXc6x7Jo}V*Ss;8}rZuD&wawj&V(bUSeCh zjpcO%NB40GvBH2R%(CQ4B)f)Q>|R7$GSH4iJJTl6r;;29Ef{>C0_mpO>Kp0#n~TPadPz(cL zVF)5Z=ZESGqm5K3idk+3)4OUGSdOBov}ovj%+fqx=~NST%Y-g!%enU&S5))yT}=#6Uf`Oc1#<{X6|&9W>_hOx z^3FkHV`Ext9lz^jj6wfLK&YUpxv=%Jrvpn(bLA=;UE^&YX>i>@oSdi{3c)(cT71mXf^cU*f zztCHE#aWl1L@~GWXAL@{x`V-CctGNs?lu3Yn&I(X6E)iF8ES$)PG@qs>tvPwxQ?|Fhc7f3CJ1J2{z_oUEF>*T66EQSxWA z>pbETO!N>8X8TxSd=qzx3fReT)>(>N;#fcsK0v*9&vh;wPwKYXza0IaAm9~(GI*Wp zx3J>j%%WI^<3=&S<*N+=WKFgBB$1XvQKn+Aur{(L`DU~Pp#9nB5Ea}EmRpi_k*-MD zd_oT%kM~i;aVL3>h@Mi=AeTu|^m3Zh#s46BtiRZx=(H8Rq>PLxk-aT_%L9+KX$O=} zbmK$HuAW6(sLhZgnVY?2Z%RJn)+tT>ETA4jVlAr%hcz5-_YNCn%g}#T$^ng8p~(s9 z0YC`^TOf1r+XuRx+mViUeU{`WZ^0&`V^;KU0=(L@nm7Ke_;p@oO-=GuLT?wZPX>(R2I#IO zWmh@)Ke;$LeYTbW6P%EB34{7udL5NmHOsj8_*6fJDQ>1VfIuK57*mx&m#P&1@>!;r z_RqOViAH*Y>flIvc!iITZ&bNj0S1^xT43qD->Ml?a{o8P_`PGlXUj}xs|bljMniOo zlNUju|5WvG)aET1*zgTTj`UcXyIh&+y8elKy{&!cFVEe~b-2C?Kw;^?AZxq;T0P^* z-A~HATfP)lfEfA;c=8{U8aB;L{NABT80hZZyC>QCc62Xf!ch;ghJ4GY%`ob3W7AHO z8RiD%K6HZ$@bU^Nrck2muCaGM-7nr6d+cu;2T>W;aWQPy*1B%L)o*OT zBP%=J#`UeNf6*Ornzp$&YF;Qe{(A$#i(a_AC`CtF_zO? z1{|SF>Zfy_+`X(~0NLvs{0AmNW_ON*jrL4;^@QWRxbkB(yp>q$4wZS6{ z#yzX64mY^I2_ShDT^`%p+qXq`*F3XcIO)^U+-^&FBdyWjm289$a@&8hsiR^SpPH0s zf=t${1_N$^vFfGh^*)+edIG<)OJ>;YKx78r z?(-(JESUBQGrHgKD*@f3RG}1I=ggXTk$1;P)=X}gbpA$7aBmAu&N7LTPH_AUPawFKAys$einLMcy#~Q*qFhXc-0z+md12J?SviJ zI&n@~ipw%SKQ5yFm;0x#=;ajFcwP@b8WazDnDM01avXa3Kc3@c1WFFzNP&1qtQO2} zc1Dn-=odadSbO*od!N9k^Q3Xi!o|clAhmYCLVIK@yw06vwi})gR1Vi24S84T}j#xy4$IY@aoHw*L?_3doe<$^Gq(IXM zCg_p~>0^rg6t~bER}SwiwG;IFXj!lQk$HeuDjX5DT4O{-WDko=jA7@ucq5E{A zcE?>Q)6*|+GO9KdX)zwM+@4Vq~aMG3-)v&cy z8pEq3lPPi{&`ZQ_lGK3$E0nV+_$iz6Hqq5C~Yry_!zFZmWLZ@1PP{Ue2!L z%o(68qhtU`gCjA*ig|xr*Y1@Y^g_9+(wS{3Jv>FcG!h_cwpJU>#2aFz2k~+r!Rf|4 z=f`fa@LBp?YdFe;sNr-!_NZ6hF2eLN11?0uR`90ELC3q0);*t=i&Kn3Cq|wt_kiTr z26!2(aP6FnB302DC`-S)@=8JZQmt@7>OL`=6kDuiv1hPluXc`AMN#>@`N5C7;?80F z)^0dtnC_6VjBy(PMren{l|Pfn*Lg3dx*}@s9Lq^-2Ttk^Gzv8%)!4V7muZ586NCQD zabECjSY5fVuSVf=I1ppjBzHW%13UtgV2u9XQ`sCUxYhAbKXJdOZ7s$Z)h_s3-iZc& zXUg__e^0Zt10>3h(SY>IuEJn99aN}55el4xhUqkB&FFDnBC&#-nb`G^^1oV!AY+&B zO>h_HiqE{}?q71{Q3Q1&IuJfOI-GK!y?Cp!fZCP+>wk(V9A2p~DDp;|RDoe2maNXX zcI?6uIHP{`s#oq2$h1KxZ8hdrqw%-g`nNTl`p99dYGbngu_{-on_jMM>EH@DY3qf( z{%sQ&!$SW;7JTycRUG2(Wg1Ii+JDTDj@>`^FL=S%-a7p+)4^vi1d{20JGa%}&V7HR z$Pk4|lRaE6Kt>S4DhyVCP_q(tyxFAL8Wo_YY5D`LU0jF*dD<|<(atUElrNQrt`DDc z`^~l;4kVTE%j*7XrLRi_1rWTbBODi$w2Or!fWxWI^yr$}gXIDV$8pJ5vu}@ZM|)Ee zhM+9%H}YWFi@4Ao!=;(j|I^-gb5`C(fw)(Hv5Q6hnGbI(X>MQ99L_M%wL3& ze~5T?nH!8b_MR2$=msu(+Qv?1FQ6J^9J+qY@n$0Q$!L2W2Ko_u@%aKx=#l8^bl;%J z#yQuhe>qNOF8Hbqrh$X8N|Jo@*vxV5Nz?dH1 z+IiJ+k}S29q6yI<~&U`3LZw8hiwZ4#SFSy zt%Gz}BdB{fgiE;ni*1Dpg{y?@yduz3yHQ{?Z+4VV*y)gFrFY(tn4Drgr1duJ;~|wv zP-L=17FKs*^@kw@4#dKkDn@v>E}XjpX0PGH@F6zAbYm-a1!Lm8V!7rvvt?)wpLoq- zRSxrBm0fBI@lF`|M^u`D0+547Lffwh<{#-_9@Lxj?OA&GQgXHO5^^96PxeWyM`_jT zMKNL^ST5>KWLnY7c3G45;c)@QP6CG_i_gmGdzFb(kR5cxOO&~ZxIeK;pw+~|@b8qU(B89rd0K7XJR(m--kT?_ z&ft2^tUAMGQtW&E13Y20tnxaTp+2So(ePDX^RjGH@0MCi$_fmy9g2T7DVfapiw9Mv zuzRa?v>rIDU$GoW;ZqkQ=-Vr`i+3|OrwxyGvJ91rl8a&9J(V0TX9cl?S}{`qWlxHF z9#!sC)0oOooB%z2XC=;SFbjh?#7?EquF{{aKU+D7In#UbRO+WrZ2Qla`q2?sm_Xg? zj4@{w!|5v9fJvo7m$6ruupf1WfXlJctbsFjIHyt}ubT3P{a!!2G=s{mgX77eXZe%L z_D5OrYWq{l$&tR46ZTxSS zWqp~rN{-|My>(f4%Htp`ag*DKe+apZwm3!)Z^;+Bf~39N9uPh>}%WFEF5Y>V&(Ryvpz{mFW@HKjUGzRX#+Pv zU4xQwe-kez#YtkVy6IZLW-fy<0kTz4(FjOQ>ZpQ9 zu-n6X0elQD!Wzgi6;55Yn3SW&Alie=0TR<1_uIOhKI$S!<5?HGS`OTNeQT&vW8B-# ziXR$GG!EY>3O>4>k^ET^S)UoNv75wS^P6+QBr!dBh$=a4G!Ck=KN+p7s~qMH%ziIJ$|`8kJqwe%$?IUmTEN< zvp0ifv1-?DhhUAsTw2rZq2UL=RQ={3aCKq(n)fom({Q^L-}SAs5k45^QR4`6`dQX~ z|4YCictWxI{986?&0DXkaN0cG00{fqJCe8H(eFYlFWiK?%6 z1~1u&Ka8s4)SGcXMfXMXllbYaAwJ(hP>4y%P7=-(IFd;_Ln1CZqpUIYQX9u0NSHU;H2aP0)RFIZ3* zBz93L4GA=)^pbed;($MJ@lz6#_RJ%qm zp_?PlBVf7wRF-(&j-#$H9z*H@$eK0CYbR`W_K-=wTcg(L^R{}QUADPw%x}Rb8uf~v zQxx%c%)SVml7g)7qpmUf(O>z?*BgHOI>)Yp*>9u2OZV|y@jQ3hHg;&Y8EmdGz;oUEO#*?g{es=-5YP|@$mt3!w{#Gu9_y~^Zm2>w*c)z zFmtAZ+S>vHR*wH3)>d1&3_fdS0V+dY=EX5K;6*w0{(B4vb41zMu)HYXnhzw6ls+av z0Tf|lG~WKb64NhFFF)_#UH4_~hrs>!vsuIgEE^R-uKmB>(9&2(TX~78<7_>bo5{6K zA&{NBA#zR~c@INgjOkT-=W3+p>lW+Tf;d+XW9vdH!8A-U8WS&geOD2GqB_AN&TbpBD zFZD}n`1Fs(7P#~kr?Q+lwS1+{R)apdZ1MICtM;&ZB~Vj;DD7h7y0KI-Y*K~*7Lwu4 zZqDCVbwav%IyfqINh>)Eh|X0EXG`2LBHUg4rZLREG7 z#(uj|n*cE+^}A8L$XwKt6!0KpPhCb1Jdz2@PMMErbwLk1B7{Ss#73lAvRCb6+E)b**%(fc^7ch@;*IH-a{wbM55VIX-M zkEp(A77`VzlH0L)6QWxnM5$kQOk|H&3X_sf|m@_ka`DW@qH~GA4wBlUJ$n9@^A$vV7rAE+pGKs=>gYM+h&(3(u%()VUqFti zT4|nO;;(0%ECKWX62qwQ<^a7;k5!s+M3khn+6X5&9M^kvsfQPr<(>?toI*n`z1j`S z@O#3SSFc$*aYl4)nB3XQIm6st55uMZ&bCfb3a2x+6RHfmxwII3Se0ApSX%$eMV9I- z%p`JMzqNfgmxVakzP}$>*#VCpfY%-J96R$Z2ZhbLob9keB8^ZpNAZygp@*ZmJ8SfGHENFymom-HY?cSs9Lr$|c}m=X`Y0}R9P}PsX8nb0f^vFRuc2!piNb0U#jaXMsxGx=gS+IQ1aHpETuhrB1!xlL8AP zTVnC*$1S}^>xxDMD|Qrfk-41o-w_6D)*aUs{L>xgQMhhlyeTn5PLhoGP(OA{=Jlj}NG{YsmsO;m7^W?ozhzKhCn>ns3!irhm8ySKOZkV%dmHzEEAu z^Xe>IS;K2-=*W35jXxCDr0Dk9hI@~gM# zj6gAqUSxG8>+RECD9xX5XPl%~`{#|Ml!vmtpwt0Pfux2~wVZEMQ=l&-FxDlOD1_)E3$25DU4n778u`08 z2ggl$C~nAKH7wI&A$6fOCVkoN|5^5?&b4=>yWT-i^q^p~-VraAz-xycN*<3Nn_T83& zNTpn7Qc&&`z!$90)OYY~e*X{ZD^a5$VKEz-5;_`0oJN;whBXTK5l7V5;zclUm@UvW z!w(AZXBANza!F66vsBN1JQRd@)3;UhDzwA2B%%ujf=igRjS&|){AivzB*BY(hJ6;Y zO7;~w!RTspkO85Lf+ETSeFR{hNV)&Ijxc5$Oz@IKZX+A z8yrcd6`6n1L(ciT>Fg+%*fV_f8$hIDET>>L|H=~&l-Bu<#%HA<vQwP9ER=;nREuNxg_Q6V`;;F6c5@}10)))hv4J!lGjAj`EguHQyFZsVw)_-D zNbjId8T3x5d$cIx?kH^Zu9%SSHH(Ri;Ctq0E%ku&`OOOJ^YF{IZNo8Vy&%Mn_0i=G znUX2Tbld`wo~?5$qKUP5`EJy>tM^Ju=f?u=m2;DKiRIvept)nUq8$JPZ=+Qr#%8MC z_Fww%LMFj5X2pd&-y#z9b}EL7Lc1`6Xau-EseB%@KSw^_UAzDUUf@ha2#3jx!&OVZ zLR-EYI>t^urSTckebkXCwgQys%tOAP7ef2^;zXk>OS>zN@;^6An=QgG+shiGT6O7d z`J}>iD&Nr^4G7&6LphO%4e`?3ohZAl3e}v2Kg%qMKyav_j-%?rJP0a^NOxh+n_s~} z3!%WKH6{j=+5~>DS z>2FZTvVoc>6^a`tfWy(nGh^s19MKS&?_|uY+;4+GE{tyZ7<06WF>f8vOY|)4S%gG! zD2dvFx!>(K42y92UgrfWdlaj=mDFhccBz!d?Hb_w0V-8aA>wuf21}|E{bKt~DOcBS z(WH^z2bgW>Ha^Ca8&>sHbNQryDE&YQKs`Yg%x=W%rti}AgGb>+iBSJLQl5D<4(M8~lV2W4&G`k{Od zlBV8i_f6U_5C=qYg$^OBM0c4IA`_vVUPG27h^*!|>VtQ-NBL(3-St$3T>7Ib@FCTs zw7R5JbREe|3feAwd(g7ExuKD_XJ+?Z#)Za(iur+4sRD~509Ph|=?0-2spTak&8=5( z3=DsT(@SJ-wSO3iv2e>1)r#+P3oRoh8TFxIImaQwQj73?M;JgTPAqmT=x}11k?@(b z?at14ekSK}rau~Z{P@M? ztXwzcw3tfsIBJA4xrHo}X1Z(JK;Is|A6pmmQ!z#qcfDB#U?}=vpu{WU+p2VX8e8Fs z&X)-2J_7Ld1A`Te?*H;t`WdU7`(-%Axz;%dUxXHcd_I(+HLP=-hAAvgF;xNR6xr;> z$h?d112EX8H8h(M3I(-G_U?e@NPe%=v;ybjEJuq%R$hn*eh4Jc7q?QF8?;N*Jz9J{ zvH&!%kyN;N`PQRFQOT;_lum8{uRJsV;*{*k>{Lwa8GeOF`>;ssNf;X_2l=AOWV5QL z|373dkM1YIa^KX4DswVO>z)mcSBkKS-IE2uIO;wSxB}fY*365$FvlCvI{N!LsWqSd zvH@sqN5%bo9+NU76KtE~=KSU%n0DP+53*rJD?YGO$pF+n0-mw+vbt&OaS<`c$wUk1 z9HT`=NWlX6n2!UY+d!^gs7qHbS#(nykPYF^P-IIYzWfBq%uI9s{BciqUrRnW>1G@# z5-larpJ8F#QJYX{|4&mewg&^KtQh>XT6t=Nndq!LIU$&aaaV6OE2Y*}UV@v?JREm@vP`?|b z@%;Fm&|v-9$+Su`?%9XeC4Mxtat4@+XebGWz1@_BfS*k{oisg1Em^BOrxSLO;tp&C ziG5I*0WDR=b{5p9kuZW_gAh;U85<)0ps&oHu^G%nS$-X&)v&UVZibtE6%yE;6$ zLalQ=G*dszNSO@U28?fWhtMer0w4cw+y_KmX9G4{)6jOB<3*(B2TT(CI1-^WSW5(@ zsNHU2TT~o`&B?LIocXrdr7WLGY0gA8#P(Ks`Q`c z>5dp=LVDt`yut%4kV5q5?RyF#Hw68z%#D*$pv;9Ges+nZM_=}9Q<|mZ2|7DEMa^oU zDEWh)-pW~}&GnVjW*F&1l*^LVzKOY+K=#cjyAzGP2;kDe`<+(OmH132-`}F}%=XX< zOVc3pdA*RX&RDrQkn2c^v@o9krou;J6UgGz(W%=5uFn)zXB6~QRCLHB30B+{ETN8# zf+FwcYIylDs0eU5t+yeRb$W=!u)^y-{Zij0CJ07ROtl}kpHsVA^H!a`(<61-ZtgRg z0Sb4E4k+BMs8U4ie;%&m9?Z&}aIX40%p25YzxH9WU=2uV(^>X&SNV8O4O!L&c%z2h|7$>Q=9{w{ga} za_=fSRMIXfbGHTC`{1`tM+!NG)z2q7YrgQvZlm+g7kT)};$-|)ahGR4e)9lN{ zd*VHy#$6(cY3JnT7A|2gr|>yM13DV%@Pn83sRwpN(4%joe*6{GB!Nw6bQQJ_b80+ zuFrEiZX)Ax><0sJQ^kZP3|7;dY)^B>1 z@DbgpEQfA>OCAm%gS|{5M%0t{o&xDi@LEb&(|+ z1AunUA05by{R6l)*uMJ-YUeyw3&4yd91xS+Va)&&4jl}?(8PJls$jss(C8{y= z0{-3BX)_DPxsVRb02bN|^#3z5-BqYx@hnBma|CGwy`d_%5_tDB-k=Jvcqd0As}6Ot z_EBpkfgbcxyv;PIL?J<59fxMk*xd*1`aZ||dyAy3g@vOnCyz?HIV(`=XllDe(QkioU zEdUC@ox+?*gf7}Gae4eLK=_Ue%y&ETcT)vndmMa*#JDA&5Y6k5wrCTid54lw7e&JYXCb2Yv!w}k>-9GaWS zZ`*wC(g^R7D}i(e^xzQQ0hpWp`$G^hV7~JP$cZThvZPrf8cGyHi|yP$75M}^^U%Cf zvKMU8F5D}m(TV*buCMErOv)ACd9+>hQEUMmRWg=Qp0~9(zfqjE$4p$@8d(pT6uov@ zNL}mbk@Htz$6xP#_nOllTQ@V2Tr3p+#DExsE1!x={pw+1RQ)B98(^K6PfU3?$TSn} zKpeOQ67xqRIY2OPp#_th?r#rPmjKl?wr$!TyKrJO(#|)CI)m}G;=D8~6P#Pd$^7Cf zbB6bsVkGve*WtJYDW_o!)rOZ0v_k_q{A|30Y%VA?;%3G()wAoRBN2h4&U9|7-UUej zXbsxw1l9z0aJF!&jOgcV1A&`2IPjHjAj%HF^{m*L#)I0w7mEv6)1~n1ctZXWt0u)% zCcDejO|PEXO0;2*y{gCE8x%>x9;-Q=uyMsAYAhyAl;BiLonmzsrF!rN^ zQKM0((^v0qL=z+#{?pHcNW700C)a<(iENR<+6xpY6>pkW;KM1*50&%=b=)JeH8%H-S9mx<_+JXGWY81}{X=01E4QQx=;kDH0)Yf5P2VfNudf$y_qUHd7HiRi|K!q#)lNFUoRT^$4^39+&x=9WQxNdak$RW_5Gf=yr25mq@ z<^9-n^-Mvnk&pM~HrB;Jwf?^Gj9ir@3Kb3=hZm2M8hJUO&XDz}g92fV`7U|BjDMS= z27hJ51OHSC%){k+E-qu+DK@wGESNrS{C=X?Aibv{(W43TCfRZ@pXkTkQQ4quHOlSO znrXi}Zj!_oiEJLyaE)wQ)l%_1&Qby1=^%74^v&~76<85R+Yr&~ zPz5vxkAj4r{rc~e|MA}s&v$7#bF_VSHpjkKYJmR0S24_^klQY-6$ky=dHTOfjZxBF zXT-6<$Pdm)HBLcKt)JQsw6I>ijiwyuKPZpgEuWyCKZQ2n==MJo&=Es<5B=$b|JX{5 zKcB9y^*5GKB>1N(k!$kTamed}Y+?uK*$4`S0<&j}DWwP4)cN-B4F zLS$gY`P<_H6D4XU59jt_GPh7J(C_dk?`XYWG7jwR_tUL!^Kj7R$SYIUVjy8P z52=H_iF$f^6Jui$MQXE=?a&9}zo!O@8(kSDChUL=kMo1ky*Kc#>q1P!gJ512+m+{D z-vM`QrNi7eFkCWf1h+%^06T55NtIF+S=*SHQJQA9nV@q|p=xa<3n37Y^4mDqMB{>Fu_xVVfb%JN0*fraXy;uKKm}D^EApB;DiShK?96V^h9o-Ep?+&EQ zmi~;Wu)O@{a@_0Jmr8Wg`mee@sVvES>w9)I52l^IN3e82g5yz&8?K&HkKU`Ut*w>E ze*y~+Wtbp;_4MhXf6x=(sKm4I(5W%6kQA=gW)~C^0qF{exU3Gfgpl5K%a1b~X^1K? zH4*DoIlCO^b+r84~AgT6$3 z@#6-emnG%#wgpW>+!Q(mHM_wg(+VqM<+@sCxzM+e?Y-Qlw*^;A6MrhLn1^ zI9dRTD#7xv{=RZ2-2+`(oA>IGq33;d1YFUF`}VEo90p&0sJNLJbGh0TbflDEwb(up zEWtnjaRs(rBH?X6%#PHuHnSk&;ifK`O1QnGB&ydH7UVLRoEVr1dT~J8 z>_SJwvSEtf!P`teNTXoXr7X)$vQrME14Lne1Bd67V=kYQFI9FW8J$Q;Jjthcmo29c zMwtCkDHhOLoM5NzAyMn^M%YL&I$FUUP=-wh$6C57@Wg5E8*WKm z!gNdGS=LsD!+IQw=P63y#FATtX+-I02D!JCbp$<5`sGt%Krs{@&AHlI@e&-R zgNWTc%>oG+n8WTcOF8qvVG<7&$O{vb+x@D%oTSEWADR+ z)~0wZDkE~^e6H<>Gp6QFx(X(V@|u3`Hl~xK3r}m!5If~4*;oF7WM<#w44uhHSF3OT z7)=QfqM^+k+L?CIo@sOe1WzD~$_i|)H9yEVEQr5%feyGr`bp{s9#8fOz|i9(L**Cr z?9#JSWJ2Xc0S??n~|!&zs~kUuL*5722Ns+wAZE) zZSEN-FX;ITxs9Wl2Wa_&_!92lo{kv7!VbkH@rqF2x?ek*;^L7qyk=8Sdo)o7TZQH% zXYaq`1+~z|H9=wCz3(~I_NCv2!)#Z@s0!~x8rNx2L5hSY z2(WA>g3uqnYK=Mg){+#4(>!Z&@f=@`BOWVlH69Ere(fcAj7iD;AT!X}x$lD6CyiW) z`_bCVq;y%j;$w@4Sx`~BK(N+F&l`=aaF5#eVnX3@J39^=A7hqp$yt*4a%&S&=qdU~ zl^gx>bH9I_VVvW4Ra1#QPSmfdt{FH%1t99Y&Tm@ypmrxYhOur(xQQ6nc`VLu=pP|$ z>pcrXMeVZMjC4GnAJ5m6a@u|L=KOB(ac6i_!N2a%*`F2W;=^+A9&hXe#DZ}HYQ8_v z0D44}cxM~sZa&7nou9!kEG#T0<~`>N=B+;kpgv49l1YQ$N%KoZ1#>8ikVcMXHfT_i zIvt?dH{x%X0}N2ga;!AS9o8wc9sn078_V^r9e}BdOz5Fro%IBU%l(6Bytwgk-4o5# z7!O~d>V~nm9_66|9@%vCJgknFXB0TuFG%WXE5@MgzF8(2jByZ#E7q-Z(iFoWb9eM( zZRz7QY%3fle`8}ZCTjgK;)uc%nxrc0@XX9iOCHsNcCw`Hi78dhHwB%dzT5+EBuR8D z=Z`U2Cw9pF{(?Eb85xYZ56c<*8NJteH}C25A5*br(HAY#&JVj6PcG=U9e-1v(zJ9M<@Xj7r{MvgniROE02Moe^RRj3_n+ zJx2BIjn=^I%l)hHQWw2h7Bjw7o=joJTAa|&<&7vmNkt_GqA$;5$M}V#$F2oP;mF=O z4^NV`FgBLF+xYQ;;-iCvOiMzObjHO^-?T7Ndb|4nM{JHSoFFvUpYC0{1ec|>tQ~@+ zPXVx_evO9H$QxzdS?iV0eqhz0C_neWuyV_Dv!nRSR(!$tux^BYF7&?6xH60J zdH|1P-~-goc>{WJ+v;2eIG3p@(`#1!9D{>{B_$=c>|9p&xvNoGgDbLleaoC|YycJe zBopgis>g2KSf?64 zu5Ae0Cuxsxy)U+9axu!hSz^NHZx`7wy0@|RVOZrRyzxGe2?EXazzSBf#Bel>$wWpBc^4H!=U;^Vs0~^ ziS7t<)aNBCAo@O<|0FhdW92t%!C+UIjk1{rM2}mP_C7QrA>jvTBUip$b@5!~kc>Ox zzs+1P?S{vB(XF%F4zx+Ar6DBaV0yP_RN_#UpJlv#eqax!*kgz9N89a4PNVuAZ>tX) z;dZN+&s8>kk6Sq-`MGYMgDv0{_z^cr{qAQC5?rEi#iJ4)vR-z!vX=(&Lpx^vW2}`WJ7iZqv)`uUSUp+xgaU0YA z4{iRM@abe3U+XwB6{~+AW_pScw{fd6geRZ)E!m`>*}E*gvX1L zCxD8pf$*q?0#w%I#wP{m*vw*9YsIPad^B#PUAjsq9tf(Nb`e2A7qO7pSt_1Y;GZU zDW8qApfsVo3*HJ7cG@|dntkj-YE{duob4L^K3{dA=5cZ7J?-WZ_QlQ%){*?RFD$yn z#zWlB@hb_eYqC!XUM|)OaHjnjwfq+R{?%ihjiybRqkc+4e-tyP#98zWp98Q~U*U6T zhnp}}E6xTc)+c1!1u%*^L%-VC-2AGu*%#HiGbSemJ$M@)zQ>c6mgec{8CL7W{O$xH zopyUuhc(vV5csiK!`NV^yY#@^nfyx{Pwl zJ*e;Ek02#Bq?h1O{_-2EmF%Y@knHVGqidN_AO}swvxqoB$Y;=LE#L89p;1h5tW@;F z=}M+wg28Wl##dGb1SAWOX|2c~qqOng;0O8LCzMG)6B=nsn=Pf4x_l znGq*mgj$GK(49{kL&yvu14ql z&Q%apB}dJ_m|<#+NwaE_?cMS;<32WHCM$@&qP=NRa>Vr~2*=8Gb^YAoq@<*%%l&j* z5v909L`0=6vsp1$7rup3_?#MoFo{abm{HHF`{bnRPB`{@wVPcKgF2nLg+E2RyI9XF^U{0k}e~Q0Lx+ZbgGZzSJhKNm;t+o z*MJnl``=9BQ(M|AL`t5?YPQ*ye&5|_?bIG;RWptwA#mX4&iTt!+VY|>jFma$aLx=wu?9K zLr%7fQAu-wA42ydr_oVzVD&ougv~12e6c?IlNc~g7}g;IIPGM(WJf=Ndf&VhZw(Rx zN*Var^%Dde){crJfR37|b>9Dc_*h%k*x2}`_Fax4k}Gm0ABQ199x*X?D+-480Qo#E z6UOT4{92K@xjAfn&HBNWhnv-Aj|%GU>&@ZOq&4*CXrfN9wNZOL%1w*?`sG1W)}ztD zpP>RKQhrK5`b}F)#i@`t<@Z~F=U0Ce6c#z+JfjKRCd!_uZXFeygUxk#mtGjq{uvWn-dytCxT1K#%s?85}jldskGl zgS>24;vnS9mxP#`-&z3n_HZv+x^;n=Ap43&&Rr z+);hOm#3YsTp$>fNZ6NC!Zr;ItyLzmhTD%ap`y)7a(nO!g-E*HaMs=mc(5oN4~l=htF zv1^!o)*2h-ddAkj)4Pt7yMFd-hB z0v4@F6@%=5a)Zbc;9xlpr@IG}Krz(Y*A7|@_hC*UZo`eeMs`7Fr6)8St0n}Ls+VLZ zYNWqI+tE7a(4d8#9n*R57JNOrY3h#igt6wv#9%03fFFIvA{*V%Q*|+m9tJ)AS8B3D z>6aF%1&sQ*D&O5Ai{7*m1Ojm#bEo$SSP})+Ktd2Vm=2dyz&`Q z6K=b$3>Dj*y)Z~oJbOlu>$TeJc7>tH)TgN%ijoh?#_whstCLZy9H?e^4>xk)Md$Jr zyE5MLmM03AW>@ruus4j8G>Iv9Bi{HfzIQcBvJI8?ZzQpPdv)TqYiaMJ%lt~`1MhF; zbP`)c+b4g0OAru-*DohLK;?FkFf-@ zE=z+uzPVTC>7r~6!SaG6y?0lRcN3L9NvD04B*@Ms4g8ZWGjj-IMdZ>~8DngWlmp&;+QudiQf6_Fei@;Ogz`fAx$ z-l@tl*umkGMxdB+ZJciz&U2|5hE~@rCp5pc_V=H61p1&aV+SWDp116$;l|@)N!xQ{ zU5wUlAhdeA;&-R$!$c{z#R+O3wpyjFSyFX%=&<@oo!jn&z8YoGRXA|dzx+x^?w6pX zn>{&u3Sk^}rQeyf_2;c3fS5{MS-iRRX5z7?v|Q)FR}k9Z-GI<OQj2iLPkZIkCb0Ai%y~^v4dMOaC_yN4`Q{hSBX+LAr+jhIv>NEx7 zfmhahBDk~fmYeQ;Y~n=Ld?&R-gGV zLaXp>qY1`}Tfhj8>7%)Er^k5hDbaDDO>d4+7|0pY@qV42@6BcSU$&utei)O0h&lj5 zP@JCg)Sv(scNom}%jy~|t%30Tz0n<^^Ijk`6OEa}-I(2K5O3yu9KkrWKmOiYI;!k> zsV9&YRfT8uo(NSt?kqo}Xme%2%2eq!0I*=Wik||bTO|Q%h+rkJ?;q&q1_b7804%Ak zt!@8@maabjy>J+6Z0%s6?iK!(eHg*|$T@RdgwNRdo!D@uvoD4FzFFtDm+jR)MJA&x z)(gn-d%Dit`WqMWA+l2&53<%7he2}-VTZ#cle>BG8}rs7qPR7ad)oRnR*%w6D>Rnk zANKYd)QCM+s}v%9SmPnX*k>gXp~lbl|KlCZ~i`a*AIUHRbVfy>S4bD2wID?^DVf_sigQt zw1TbOO9ApV@C}%AV^$IZE2WG=K!q*|soaVi;V@KcSU%hcv{gjFshyB<5cBEBeVB>x zM)a~jBW|QC6^F|YMXK}&pjbew8hZ?C*afHr{KCH+rzHKjDge$%{`VPO#QbArBzFHO zd82yn@IYMz{)K%Q$Ki=mYpMD`txPX)Yr=_ufV^^$(q}aA)ctZ!WeXXU53OUKO~X^4 z;paj{U;~|wVRwwHv|dW^$JOWGP@hbmf()ZhGw=HZ-CIdQrr@MQm^WS-XZLD@YQqPJ zO!PNDI3)g5r3ZYRe&_8H9CCjcaZ6#_5dd3<8de{(0c0R|DeQf|r9WrvPq+XVpGrp8YF}MU30hcN_dh;o9LW*#` zX>ZN^v)Mv%co~Vck(?tFW93V3e}Js~W{TinrpTU_VgDA`N`~KZF=woJW%ub(n${Z! zfM#*0Pq;*aFVgboWW6IWVP9$a@UAy<_ke=m89=$fN8}W`@+rv$HwsHg!)@Nt-s4~s zi(s`dP6q+ZM5fXSO|)JR88Y)A@u|G{11yF-s!Wn=a%QC~9yMq}EkEZ7XsyS8cU4KQ zy=g(-+XZJX&mHE`RZMo7e?+N*V+#;A!oXkJ?eu!Ks*~9zeE>Pi&<|ej_Wr@xfNs)M%U2l`#c7$DD>Q*lKuo-mi@~fK*b5kB=XUZJ zhF}q!AaMj#e}L<92P;0=XJE5tG@sz_d7+|Yd}}pCCu%Ahrw>D}EGIbgmGw1#oKmTQ zYyI#!2Fxfu{4(G8Qt~9TFJ;mxQR)=P4$ByRz~d*sdHf3Vk5`E}v?2PJThEzklaAE=#E08ZXeWQh)VxxkItZVFk>aFNxX%b0G zqLzL9c^U(^kB?Ios>QW0UP%C`!er{q&yNuvN>Bz>d)osA!rP1NuOmrDR^_r;6>#S# zXH&|6K})YiX9iJt{qRIss*Vi^|46ZezfVlb_+h4oCY;tRVBI$3p6zp{gC`^_PN!fh z(DXYKR=1D)9KEN^#GH7j_}OYA-X(6ygRq*DH3!E8h!4gu@$tR-SO0Lfg@2C?`p(~J zxWo%gKsoS_(BRTF1$>V02K}r~02ci&)%Co_>(N9CDz`&BVY&)>Wn&MD8HeZiupGu5 zH8sSb$GAXVFv-^o<{$$bdH>AP3D>UP69#a#>DR1Y=b1z!ij}^=zLsnq7a|)=(_*Ru z9!wL&YH}}Ii2@=Y8?(LpM%cgowaO4q`Lu@cQ@0thjuRi2)ksm7(9E?=e45q6*?-~mM2Q(Z zB$V9=&37q<=vWyADQIxR^~#Q2Bko3!{Md_p@ZfFb%jKKv@0@ zjUdT#Zdf!MFDrr(-Hhx7p`quPS7a5;zv#jm97M58;HC?(Py5T(TRvaVB8GtxsG@g* zxLs-ROXk}y{g?FLVmlS!g&sq+k;<#@zf4x%?ObQrJ5gE!SliG!*;`yisL3#+$UfP) zUe*8C1GgK09Kf2KDu3Di2-5$OKrWqc8vv#S5EG()q9Z=od}HOZNP8FijM8+X-#ErT zY&N&F@t=pa&>p}Zxcqq-{r`BF`NmjR1~7cUb#~63=z{9d0Gave^y!coSvn)g28=RD zPG6J%juvDtr$J=pog`?k`Fg4S_gNHM0fZEeJlOz68DUT$aIt74M|Smafv7Njvx}Df z_IdcqBRxN(?EAk0qGLv@^WGbV`M*wKJ`A&_=hxpbXoYZ|f4zQ=e?3k~#NlvaXLopL zI?%lHF1v887kK#ciu`KN^?{l-IH~|TJ)DKkj54>9QtSRQP}%W>rg}Fk`_DnUr~mgs zf32AuIV^DY7`LofnvTBkPUgHfr3|9VK4Y1`#{b&}Fvv0#em>&$%towr737k3O2w+67lR0DMSGO}Z zMsGy!JEUKl!^4n`|08Q(&%lR0a`mVLV0RTS7FeD!Bw_=dR!??vfT7MKN!(d<0785F zY!yBg3u~$VBVn9C!nj3CCpWZmTUrBAuJK-$;KtE|_t*GJvQuIM3m9cN-UC!PR=#Bu z<}lwDshky^ijaFiG_z&LcC`~Dj6N1@#5;1@?YU4lr4UwgjO{D)huN3+Y{2Q&`wZUh z+&VFfWM3rX|Gb;^gmdV(7DqLWVwDzlAYMNHb6!c{yzYqB8iq^H_kDaYk$cqM-VQd> zS21zY^jVip+4L0PF<=59@6h6HB8bl>?FN@~`zU2QdoMg8Krl>jQ2F!0mvuBIQxXzB zB&JcjfxNan7wew5cu&;4YD&;a@(nD(FwFsSHzMqmXaMTz;Ks@`szD}Eq_7Ly3V*c! z3764LC2Nhs4JKKzk2Du z;$7vs3%}+4Tdd}}y_>4mMHo70V$pl$AkagVxZj5+3gi0qK{J&JA3ykjb(v(XnK`H` zx1Q|fVg+43a62goOnqq!YO0++pl~g7DAG&y2d0As%bpOyLX2XiV5Z(q7CBe3@zYL`8)xlw9P_k6& zhy*u6bayM2&)}T*Tk-*XJgwH|^4qs-Z~%S_76Z|-3+HL}b)f|tRMi*B-k-k-6Lj%o zo>0%zawl_W1@Q9A9Huu9q3C5HAKCBUb`vNwV6_JH_IzGR8m67rG5D(at#l>;PzrqcK<2G{-@pIBR_8KBqVN z$6avsi+M>qYmO%C{*~dC{I7jc4(IqTLY%!)$P|+t&7_o+3>aALoqW({X*!<#u_#k` z1)tno&6ev0m28$Su;eg)y#)evUjvKK$dGpn@ z#T~(pA76N*#F?4Xb3Zz9im;dP@`?!Luz!M0wDSs`haWjz#qeSI6;pBDy1v+1YB7`^ z3tK1TFgiP)3kUmMpifK>yE~OQz*k0yC>niP9|Zr7tTNEm)$KoQ+z)}Fzu&j!NtK?$ zWWm#=Z$@yM(G6Gj*DD&_)2|jT=oO6Kjql8)@Qd_cu*LKSb=v_+*^72D#c2@=ic1m| zBtVMQ-L0_G!BK3`-_KKCPsTRGq(&aGeG`c1U)0YzW+M;7O0dK*L;ar zznA@GS%Qg~d6-IRi-X^EkLqXYfY#(71J(!HmB~byWH7m(bIXO{%tP$&UA8m?vkm27cPAJ?t~&Smlhz zw(lQ^r~o%}%3Cnp4|o&O5lCPJMK3s5FgPfepWzALAP0LdT#FFo0}X!4ZM{A`OA$2< z7wrj#-oJ`@dj0yFUoJE{7_<-R)|8BRj4Mw^x49nAp8@=Aa{&aiGoJfs_#|v$>E;&5 zIs_dK^{D5PU+h8LSEe{VCjS<&AUo~*B_kB zjdUJLpR%8Wj*8%rXaKdTx-b3&i(ux9uet9otleW(F_a4F0=U%B&0Geb>isEHs8O@cgzX7TI|44oc8velx=g@_&b$a0lt276s^}aCMSz6 z3&GgCx~o!OeSFdU_r2ZhTozYu)T9i$$PFvQ!oo(Z%M!xdfJ0ulCwc5l89Y*b zCI!2vSObI2q&@7@;2RQ`_%k`Et}Z*AmuU#pf*)Kd zF5guZ(ibd^Z=cl4CHW{xkQ5vi8RSH12A?96OOBqqieSTuxVqx;kbCmUnc^&E6saYL zl)g&n{ZnbfUBc#%KpV;WA+Bmeco)^AWxbe36&=Zs;v2J1_oO};GWxqB7dt>_kD)0E zD5%0A6CF00~pBb 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 IK7Zt}|ZFzMX&d|O{{gS^GafIUD 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�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 O0 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

U;=7NTPItOJtxQli4N-5a_kkF;8}qMB*ll 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%0AS;-dK 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⪼1NA$ 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

sVUtf$rc)vhsFY{y50WP^gqR zVKB8)A4UTj5c7haw#S!`uMi98A>f5`?>WU5jMl1`o6LhDB{mW{AR%`%MMnk}!G5F- z{!3sr;g{q#8}2rhfG4cKZc9duX47dYsHV$}cE85^TYDBaB4XZTcnnS>bru&LBVfVN zF5RFA&#evz@8X^pK^9v^h0qrl3~=75!(z;~*ne}oQL!8zi~jgV*Hq@FkY3y-BB&y% zR$6}@51y-w|1McHBVnSac3SHYI!NmnV36pdSiynHx6%jT%Ob6_xM@&jR=|v&m_kEc zTlEhHq1@h;5Pr%Tc%((8E*5^okFY=~RW>Wjk}GOQ$B$qbh_L6gfS&9NwOjNzT{?kG!>|ffP;2CtL{pbkGY#_u4>7w8J9llP3(4B8= zBI)?C4jfcv^5M&H|D>LBti8@98WxgC=c1NxtfpCQ%q7Zsj1RxuL`*1HoYYwe#vPMm zBD+&F9!1p*UK(U@&zVG{yeWWU~26 zuY@a6S~VU}2RiJrmcPDB3hKkwiA6h@&M796pR?IyCq%`luXi|@T$WyFs}DoiXwBpm z$z5-4s;N(O&}8zefhZBv){3=Z$%W?6&!cx1i?U9uBNAbi&fv9STQ7@;Ni1bi5)5U5 ztu}*^2$jiM?s{nzUwj#KFoS!Y11*y8 zC4kyRz`n^L9J#H&s>9OU<+v>%@gR%o@9CQp9aebYXvGwJ4mUr84&8zGD*>&(>6qPb zgL*btXWC<21;*W<@P-4WE`i+JG~nHY^%B=(Ob{)` zNM}g*+3mBd`VAopG+hmLqvD3JLuhoScCtH0f1O+Ag1J}#@*}Yk6#H0@(PZs4qI&YT zjM4z|3+m|wL?rSnkRonWrY$atWUMW)*#TRE@d*3geT#JmcxPfly8Ldf4!zPRbPMAU_iYTs z5jjbg8uxT4>WH-_1{)`L3eTBNTc8K|5Ny()xG&#H7EU!tRa9AIbtuPK;=;Xf*AipL zc$8kL4|G4EN&Pit&hQUE_cE02ju+$xDLgF<<>pU#0>zzzw>NEL~ntzT5nlJ6>My!VO5RJU(%7w_vn99d(~#H5%*Q zSJ`b2I{Zr{hV_Y~MPrl5Iw=n^4+&1<)OfA3yx#j=&U3=E8&{r@(8zJjaZJjj*X}Sc zv_4gk!!kQy^-8+=L2cjL-c9_B9)YQK2LJ^@;26d#<4IhwF@{DUjR#3v_GeD&7u+F) zb@9qrs=6r@%pK!PfzO#dC+tn*8FqV=Z2{XHs%M-p9eIF69fWPZFggYEAE%(?{@{L7 z0-8?ZPNGh_EO_5RE~0Zob!vDdLq%+g9HJUTKQdoxU+Sqi-6Y;57ms@HmlmQi1A}ULGH%F~1;{zMAIYDHPjA>s)M5EU<@RXn zywn6#P4en^@cF;S)Yw8puUPNYTY_@4fBVrHGo%B8o8(y8)<_toIz+uOVYcMb|BdcOO4_qD}vy5A=QO<{0qrPuy#=ywX(ohgh1Os zctbwqDLutcCP*4Gx#iHpu*wsg08sGsSve_)0}cbIBm(U_K1qC#PS`(0aJEr!hv#of z{osegMvB6Xc_n*`?NO*Fs)C`4E%qmjasL=o4h{{JZP6l(50Ss87OJNI<+MSQe8FA( zO-N)w-xr$Z0Dd!sv<%z0>qdDB3d3#!F!_{TH1rEb^FMA;~n^bd!<+R#Ac1C9Uv~7($4gNY3o2|xwNsT&4LxHOVQg!6NRvmpJPb59*u&x zf2P9;fJpyfGAQ_6sC&@E=J@YWAxGLL`>FEfp!RMl;A6%NWhy2h^D0W zS00B-nt*W&v)=4R=r1XGF z#NA5t(fu`G_!;?Rp--PQo%Q&}q=E;l>y*)};!pgqI%h1hfr>`A#ONpxaZT9#)`C!Q4QJ_f$ZK<2T3XabmN&~mVud1U9X&M<0wTkBk`Z>1cuMEO_4Rf9%Vekx+g zm@S>))P(`;%zF60D}cd*qSb>|e&nRYUkOQXZ6$a$`DxV<+{zKaMwe-N znt%@e8&^*S+s5%Rd1!&1wka(gOu<_*Fl8G!qc@VXe{C!nnM0?n{s}Oj{?OgOxO;ck ze5P;Tdu)~--t=m@IUnBuBxWDQ!l1x~`a7`p#Eo^F+M;D3e(S^A=%n;;VGriz4&O77^C9c& zok{Kufi<~zakf4Q(lr+^nLK+w)FpHw)+ag!JaJGkk<|hO4a||R3sV2^b4Lg$sM=uf zaVmjy{`F^ppY5w81NsZ#m`<`Ay&pR6MJziGv3ycAnbj!>AB~FIuu0FjSO^~oSx9|j zt`-r;hujb%XnLC&DU=Vt`n4R#cl;pKlfxrB9zHN9V=AlrCa+(CiFiJv!5zChWY(Rz1~Fuz)kp53QBMz+TyCdiUT3EsU-NoI zJW1fYfqai+7Mfsg4Khi10-~ElI1b|TI$~8N-yUuF3r*BOQG6f|YWQdLwBZquxst*xaHH z9Ta-=+1Y$*wx}v}9^}9fSVOC!zz#*_$BME)s;aGdlPo0#1wj2>Kqx$+kCzaQWU;2u zXTUP<>8kj_C3%s)-0a{L9OZxeh(4bM zDrJue-c1M5dGA8xgJX+|1>;VQb>7{tiX#ikATlr#kKY|}`!Y9P z1EKQ{rwx?#r#HlCcQ~CEa070qIW^9S38ofs<7n?Xjk!xp+O_E}2b#FH=??MYLd#K` z#xpa;Gh@CT$u?Uy`(i+9_`Y3e7y~m-d@7#=d%?_jij-{ZCeqy=^xjh3W*sDQuS>wC zepM6}%mu_ED5GtLv=uKb49J3#fQZQs4!@`Qe-kYi_Uub!@TX9{-r%!MPgBdT1|Fe2 znX!aoubb8cAbAfjl!iE*=O1Huwh1&tl&o*`jz)u|V}# zKL%#U8@pe`Z9l4r7YZq1&GDlNu;JRbvf*Y+!Z9D1X`X!_56<4g!^u+r1SsN_e4ILM`i1jOe4(A?w*7Fwzn%8* z=h{re4ZtG}19uz!#xm=L+#!A~Obd#!GY!hV7;Xe3Ow2A7V1@pUmMt&wOjmQ3o9nVy z8aEVeRvu!(^fl?@rEiO}2sK10++frn0W2IaFivn4aV;UQeDHYVHeO)=Ju}WQuJvBC z2%VT#GZHy)(4#WmFfOeNo&qfV>;!)ZpTU+<@lW-mTPzA{aOE%!VLSn=Ct&kD=&B@| zK9vptVVD2bZT9H6tC*7nMDyxZxp8cQ{Q~a%BZx(Yc*ZrUjFb3+Ns$GOMFoM3Sz-yX z1!R1Q_k0qeOl;!!DzXgmlH<6M%eYvEF1}1`TnS1Mg+RuBQF$D*h`35cvS_AU<*qKy ziz}>wVCZ*VUzv|Ja|8{hNKR~l>}q5yo=yl~F}*?&e&%ZK%x6G0$-lJ|UEuLlXbh3u zVYJ*~TX#&@e5Cro98p$JOePOZraFS<0xobJtaiFNli9Jfb^s_}U@@%U$*<{rlGlN~ zm3nHdn?*OLpq@ar@2XqZpq)QbPxj8dZEZjcwCK$#W^{Gh|Gg)syDPC`ICwR+H<8vtSR7+(xC1#mS|eD6^E>)kw986&W{~K%%~iOYl9X&O2i- zsX~>WOR2(2wUFc>$ycmRp;92JKBg29A>~pQVyQA!5wjqbm0hk3y0nzRktNx%08g8a z7oo2e1|lqrl|;bh-J67~K#>J&QA(c?lf#@8CEGF;Fn1z4PewYV8P03qsTl!7VliTl z&f{U;?&s)SnUJ1VBN-!0bug3B92oaoqpKZtAcvy!CT3yjWGxoh} zzc{~`bJx?ksC0pDR*OadhMG+qI2@aBgUn9d=JuR#dJOb^SgJZgq@_u5nlYXZr^A; z+kfRPp)$rT8NkraDvh+llp{k-u^ox%Z{OpBgz~_&15v$Yrs|Bpw$KeT%5cvry<_f! z;+}%aAx$CWNh5;@rkC&yBO?I(b4N^oxGPbTBdwSs<>;c8Q2CY$;>ajNo;mE;$`pM> zUn23{vXYfQM!d#R=erEuoWF`*nHgBa;4^jp*6qB|7C#!J@zj<*EPT+`c+BK?oaO9e zJ$?IFwR$@m^Own&z!NMI7agk`*mO}Qr`bri!)a1&^d?owWf}=BpgL1SUM&z%Lz+a0Xsp#Z(2l#U^_ttmt))aV z(y!uTL5?L?s#XE%Z3XPD^`N*L%#N#6^);qx-`&tgRZ5kb!s^u{>N~d^&!0M91)VLp zl0$~DHc%FWJBOr8yHuw)TkF$7WA_4q=2Hy%q)5F!eCs7YgfdW=7sTEWmwPuL zsxCsEeap|edyGjJ`lV_y!o;fLDc~_bOsOXmflRasc;GBGM?u0TD zWb{Ru140!f7s6D9fvv({h4B?&Sc*9Z0MCKS3bXCQ?E<0|plycn4&L;^=@tR+igEq{ z9E2a?{zG^yME-!2(G5)$7m6-2@XST-|HlyePK!K<+z=ZQ9w}^xA7KzaG9SJkoETn; zoiv}^2}m*@y`F4DS3W=;Ok!|*7O5U?e?=a)3!W+ux*pNfEJjE#<|_}*5JegPIdpuo zCokgw;53pw&IsmF2pdEtEHIzXkVe_8I{+D)9~%f5Ayg1%pMKEqx1=7V4jzag#&2_s z9uu;C- zlCYKDVsuBEeJ^_)?GSe!?HG69Dv`|~cXZnzJ%VizHT-YPnn~<{9s5pufLDMK@IBSR&|TKS&^_2eG4^l3YvE1U9uet*8+bST zZqTVZPzN$=5$nGlOm_W+_HxHCt3!7Tt!VWqzOk)X*Fu{EcMhu|uOQrU9ymF_rZzvL z4s_f>t6*?M-w?P0-jLt^ugumn*gFOw;RYVkzix3m{eP`$!d?M?vo8^U-x%B- z(JR&dh&}#;+H253=`Gv;L)bY5X97j(w$rg~yJOq7ZQHhOTOHf^V|47KWBjpgbGoi- z>ekfE(>Zlschz~=``c^%1JxW(@xMTJ2fuKQ7T-|sVLCG2qxeGClM?K|D0qV2(s-iY z8r)#)ImH_c0<$o8|F;k`=7nw#_6Gl-1d{-P^y|kp@z+=*KK~dmBEBOS6DT3cSH1jq zfWbf8Wk9?9_h>-vg1{#S_vb>v>4U;ooc#BT1@~w1w{SV(>HO)W!rZ^12yWgN$jZM{ zw!ClF?d^Tj_3d5v|6P3q7EU8NoXy$o-y%1j=!pmT9Tvl8iuQi3YutiYAiww zp^$};2wK0Nv<>Dt=l=TdRXFYaT3lXSemIrGkqlm^seV&a8-v-h4@nf^_;#Cmpj_71 zWc`&+HXaYHkmwNg7}K^Mz^T~hbic3Q9?C;f?i(OKp(`5$Uv&xr5-}qE+W{HsjjlnA z6S$tuwQP*#3WKuUx@w!tId9zPxObl_w{nV>!)9B$9D(1#+*Ddokh*{k>SLz#^BN{$ zWuM*hT{~G81CF}W@)C7n^x`^G5FzC`f3?SJ{~;s5GT=NWzMfl^_AmthI+-T1&lT&v zfUT0J^JmjdL7{Kk#)HA8S3|*u9t$fU*LtI_#{I$7h9W>Pz+3~ zY_b7e0XroRk_mp;_>)VdXPR$Sx-gwm+fv}xo(Az*MG~xJ+7?n85py6yvzZ?)23y2t z#HXvGh*TN%kIH%RasSxd0}C71OzLiIfW_m&?LfUOIhxSaw1jopok?kJoxoi+8Nb@I zRI_^%3~_PPTay8~(3=*e3Buqh)-hIPSQ;IeM(mL2t57g7`o8Vc9}V>D`rPh*;SM_0 zkUhuzUHd*3EIc~E1PVbB5O5U;uEV~0wD!Dg@yxc><9u-%ckH&&ZiH#D zMEcQ`8sA}xqckoc>)Y%#Lk)GhNUQ~hLN7&h&bG0tsVFl^-K<&o$I@6ERnD4hxu7Uh z7h^QcPgs{`Mq-j|y_fWK1}W=a+Ob+!D{0WB536Vt>1QNVBx7l=DdfyzDAduI_hFHu z1}QRQ8e*yiPnR6$F_o!F7cb>kdae0l0yk z+>YfX@)n=OicC-PxJ;bI^7EZjL8CIDr_;OVc8X=$B43Na% z7gBrro%SQk;eB6CA)UcytZsQk5???@p)9s`i!n!L&kS`GsXh8q%>nQlo-+w(K365*~66P7bb4p@nOO#Ac+ykFCk2}u56p~EHx`8(Pn zsI+t_+if@UGbqfY@ujZm46J03GltGdcE7{3pRyZ2jHc%HJIL+Jl-F%CMTmv6Dl6%m zHB2OsB-Hg8V_RV_yK&^MJ(Sz< z_{%}mUIx6KAosoLjc$+cHKPueA!hpC1Mm|hea<{)x!!xDizu^?E-f!eWm|lX;<@ak z5(rzVkG^8WWxE>?fh4&(ubSF%+@y&5UalB=nG#YqM=2P~6qu*Y&m!^e5z0iP`|=W6cy2`n|k;j_smqcku~ zz{6G@n6#Hgs+m>j_^BNA?ox zI*YbC{aC&3p_?Y!~{M3CSPshl-X{A_6C1e*llw!@}P zVD*5KAg2n#MhV|lH_OcB>i5(qK0e|UZ9s`ZL8rp?`$-Opd#g3Bb-3GVJdSRL^n`M6)z)t$ zF%ThBJLoEBi%@adR0!FkCqf{V*&e*v43p#NESVZ%=6>D`1nyuMz-S7&VmitKG(`c= z_EO0swaadRN5Efl;c~x}FToYgv&4@+-G~8ZR+|>^gMn{CT8jK&H}4Zt&AG3L`TY4J z?=i;5^iz}f{P@tq&mi!<5+z0nJBeKiNG=q)ljsb(4r+xo={Uhb5I1T<#6^PD4h@#S zF;sm%$u@YLH+>^!!ICS9y>|PLDY&`U|7K6iY&+6&M1kjubCy9@Z{={Z5h`L+oUYb6 z(EChP_NOsk)*{0YpIkGS8I>C56{P~1optVAg*^=Bn+=%%f(@JyFaajuG{NQ2i7xiM zQoS)_92g|*P}+kh+G(PM5UdHUA)dL1L<0`;YPIRy`BzOIlm0-wk*H1mY7P;TVQ>Bo zQdni)6kMgWN!EOq4fl^xn(l-tW5(RzNC-HvzO%EC^PgHSftzek0A*L!$#L2d%)v+Z zU>*m^p#<}os#mCL?$Xh_pm9dyk;hYOQ&eIV|FTdNGOrb`rKCg6E1tJ%uc+xCh?SNc z!kfcSV@F8V`eDo#RE1L29NoOZ+0WvYD-RCYy0n-|P6_R7aer?c)X<5?AVR#8ZZFr$ z48OMS3S5IPqldIs(POQMuAbJ&Di|zdEimVwrg%WwPgg!?-KBK`n8msEh_NY2)wVt~ z#}^le?Mh4In_ycnIh3|R=cG-avG4kexhv)@t?LxgOBGeE8K2TsN>&|3wMLPJl_gd+ z73ee+pkdV%;NZ(4oUMwq1%*9WrIT=WoTSW8XA?+eF>oL+5Y&{UWip1h7J-!Rnvxmo zSR)mu$@|fguu03Iz`$;{F7P9DY|qx5h2s$3VYekEBDnJ5Sqa8K=k%YrL;j67PG5MF z>DUd`FW7RN7xYG%$|6jJL@Yw~P6SF6FPO*DjI?hWj{9~ERy8a3PTP-nchYFv(Z#9j zI8Jm_SFLO7506Xu7+cPs*`}-%hk;MxDAJ!NeMXG}>!U?4nRud*-)l<}bC-bo*D^E2 z^ZWQJZ62~IPaii+am6Fs#2+u8P`AT`Z_yC}h6A3I@zO?Ra^s~ucob!{uH{|Ik6C<{ zF-^#P6Ti^q79)#_8mo$k=_|4&E6Xa1kdn+QRf;8J^*XAOnvz2Y6{!ELbr2hqATM~T z6kAnRj+14nE>8X7H}6mQ^q|(Bsyr!3uzdSte@4BQXgUD`uUl85$l{VNhMLZZtA4d#^1Ac6Xy4~s7zed5%urj^x(qB-q&i{b~KNwYAG-^VT===L{qwD5`6-P+_jfWl|rfFIypX3zp zGO!_)$qg-GbM%=PFG&72>W+b?w!Y?~uT+|JZ^uQrzrC83F*ai2O?uq?vS=kaR9hY) zpCHRT4Mm4Qx3a9s&{Dg=v1;GQYiI-TGyYsP|2-4EYDeF-Y2KE_CXpx(N}%Vy3Lm3& zXO%sQdvolAE%Ktp;nRaew^Q6P`%k~V^bz_fpS6~?VSa6jkcDqUvs2bJHT@VaxjR2l zCS2I?=Xo39H9R2_pE%lKTNOB)1K^BiMmax@LBd)Z z3)vH~x!=)iOqn|W`YC#@`z#E44+AtN(dD^GTwjZ+_p=w+_@4wFHk(I{Z5s=7I_oS~ z9kAEDnV1ZCT~#L7r!I$pPdVv#>cXP4fu#F-WA(4tsnI=wzZ2JTo0Uac1GG+I4a#Wy zVt!#~e;IdK4`aJKZ*B&V#Zp4O&BV8|hBbIVrpFUTzoOJ>6>&-yB0Oo z+DZJ=8s=O9X2qA>CVIQ*w>h*qb~&4`9k;C(th-PYKedY>rG7j>aSq+_LuZBzn4NkV z-JB7@kMO1Ezlu4bWbmS}bTr?8f8=ZX_e$)zgp*>rw(KdOG+>}%W3ry8-#x>r^$HTRPXOH>!Bg#W1GO6 z*jwEx;N_ydAg1wo1MGACIA_1>boz3$K+t3Aw%4EHVbOA%%_R@W?%62?EZfu>_$;?a zM~e-E66*C>e@CYkFw0-Yu^$uk7P+`hkj(koI_`Y8$1O{1T*R8Lh!LcahNeS{3ce`~ zsDa|H%j)t~aBbeGmEXSlmnXk8s!+L_P7|dUcb>Oix&LCPjAxR-;b(q%({XCO3`LS5LmZgB2^ZFqTJ z;e3W*F@#*}%Ggkp4~*(1KepjAFnhb^B@<1THgp8(_#=vHj99v=YAnb376rNpLXp1z z%dKhk_Y9+4o4otfKM+jV8Og%WbG%XNTaq-XS@3w+T#YE)w79ov?Bm?6zmQ9!E&HkS)qWG7Pi@# zAl>h?)VtlxMhs?@``}85tk0{AhJZxLKlD!PH5jl=a50;^uGtOK6~knid7V*X5N_6; z3)moWpHPawF=U2l+o#NhR#=68FIou|{s2tLZRk4?8Ovu?cBJLr|I1C3w4DZTNoy1G zMc5aj$^BVQrEe>Vy&drvVPsU2P6*sS^rv2r^cLWH^86!E*3)69u*3|=9!@jh{4)m^8QYq$N*fe>WVwqjMCnoChUohi#S#mHw3hB#c1YE}9G^}SmirS9o^;-joG~@iXm+_2840WjSs@(UGh<`V0@@?Ui5ANfa>}hI~MoMO7 zO3hCOd2v_C9d(}&{q&l{NtyXI@vC_u#z>waoGF^bZNf5*Y||32Sn-Mms&Y&_TXGmm zXOzC+3nKA|06!z`w72b zyI($g@H9(dD3KE@x-j}lHq9ENcE|xb^`Rj(b!X_09y*?)v$j-7X`yMMnUIvpbzFM2 z_r_HR=}q9U-bTlP>d;G!4&3uAA??;-K=%vw_t##=<~3UNARk$Ql@t%EQN;cMv%LWY zn+g{CQ@G#weDZ{KW9I{_lj^A|fS*f4FHzS{-@$+DBk!=Qq^D|LTC}*PVP1#8?RDm~ zu>|rGnYwvd+o8d}(Y$6J+m9xu2?!oSMHs?s-!{1)M-JBN5NHan<8el_IJMQ|_>M}d5qs8kQtMSxWIuR_ zc~t6mOxW%{7_tvPt#czf=5xg&W1h;O&-i^Mx`nPH&f8*tvEE2uO|FQwGJDNc;h*KO z##XGtqHqm3T17mEc%-~Wi-_H0GAqWJ#o;*ld2mvlSiGh?5y(5A+8H8gu2Zt@yPrn$Dc^%=BnuPu@##uBz#+$63Z z*YNx!3a0{dtRqLk)KzA=$7_9en9d~cIs+E(M6jpwbA(qC?`UdJSlO&bK#s=A{HL)y z#t7s946(cwu8@uyjZ}(>C|rs*b39Zid|Iqk(hF1C=xU6kI|8vtWmzuV!7}XE?W5BORYiIFV3Q?Wxr$}V zfl3=lV=xJb9Exe^#SF@+SHR>Q{;|D5`q|6bI3>p11Qkb}|I2f=x&ZB^)%RPt6GwML z(f(w7NFRC5vwVm7b_`_xW`xP}%M|5+(xL_kGhbI(YE_HAJt;e?QH;He(2qG}W~$yq zOA__AqNa74?x*N~XbmRKOZ1uDcYQy08yCI>#Tng#t^P&HY1x57qZy+usTrv)af{+- z1n&sPu0#F(tw1fn%VU^pP=lhjnZC7E(}sn=DzH?*n%!qgBTL|SFklA{hypxh?-y4b zE}_4e*7%9rsF`C(gBNaM>Ah-uvE6V&YXTLcZ>iSdPYq@K2_rYoNG!O@j&lAR?K)4X zTj6K7f;?;o>@y8n%_6mGW0Pp~3<{NQ54B%#+U$WX=|x)24F~P)r;2)4P(y(5`N`e> zc=4pyCcdpq@suTJaKOgEkbgC$J_XRQ-j&g%X)@cCk8<&1?EMbW!Oge%W1*VRi>G@t z;Pn9>am(j$;C!6>+T>k|V2+T&_427JIA+G@EiFXhGdhlmv|$#(%p++mb+LyVoz6+7 z)T~|X?EDOuJ4Jq(vXdh0Xl`vD&n~^1X%WL;&3pPa{#)cYqK={G`zBzFd=?df5>!@K z0y6W0y2rAxG{fS@r46>+IW4JfdDzTix%QD3f2zQfuR^>I{2oRP#b7v!mGVU(300;q zI@q4O&ITjGYLt<}8t$dsKP>GCsul=fbz7&0V&z;7`$>(@I zFHh@LMC*E0gB#|V`aMlVS{zvmGfoAJyr3CxWkK3M9o?(#)<|l%IAL$L9&cN29w$AH zYkf=a1cV23tSr8{qm!05zG{T>gdKXT7 zP^J zF14y+ghpLCkUTMyAMJWxiF93A6By=6=;aw;q~Nv^1wYPoDKUb>$->ibVPTRo z(eB8$*uqe~OVL{FGMO0ndy+?NDlpo)p)0i_;t?~7;)RGhx2OCeX0yQES4!8RPrT+} zRN>*st+~!FAV!|?xxo9895JzS%ST%hEA5{Q+@l+Kn}@vCYr)^~T4i*9Ekd_9L~om{ z55mw`a;JyW_&WK~^GWrs{EdIaLx-rj7+AWR{M7a;CSa4WC)m!c0Dv;rk)*WGcI6Ti zg7AxpX=k2EJ&B7U`kMn~K)bP49zbruDjPnKmJ|4*A}jkr1se_B{-Rr#IeQ3``Oo`g zkMXQ#UpbnlbM_jG$m9E(AIELWbi!mGzPW!dAoL`NCXa;gh~P-FCI`2wz30UG=CtM8 z5+wIvy}C6xXYIqbP3MB`uBBp%PDdu<0@hCt3S1E9nx}6E7)b+88wHm_tJ9E8df#yi?eQ>R-rak%+svf4?SN1;5v=EHY+E4 z`$=q(T&a#sn*W?XpS6rcrnu<2w`{!pRij`QdfrlTV@u^jZIMEe!B8)4lMi20SK5^& z6#^GJe=-(wu5q(d3H18T5BX-D)6z<3Dzv6kH*n(SD<_R1nuqpTk3TYS4imr=ySwPp z)dN>)Dh(U`y5(*?>*>j*?3Ka&)zIW>wsdLpSuMbknRx$c>}d~;9T@`n?m$oLXRAnS ztQ;KB+HT+R_dbdVY(p;qy+?jy<5s)hxA=BlmBfs>5gkj=-GbrG$LL z0*gfE2c8kXz;rVlBsl}{&jExfvNZhk8JEL043EK@Bxe^@R|in;a8O;pv)_WedLcl- z{cF3=vP@wCwSB7EjX-v$fRSs4*GGjJhKdm=>vD<})cx7w-VSm8kx!z0i z*Q*Y2DC~FUVn7BS2(X>l;rL=h<-q+#;{a} zOd`~(aPl7W=}~)n)rm&doMetTuW#&a$xFI3lLY4Z&p0{S3tyKkpu2Wp>B4Fi?lsEv zaHpsVXl#^UhMmOyF>2Qf#G)o*ikO30-$cuCW(57C?PCcacEU+vou|9g_8(?E69Jm| zA3ReOclf;<$rsO53>ot^T9r)-9(1<>1pvq(=f;wa1H5wru3jLuz>~Ipp1|6)@In6v zD+UK-brdO0p88tVP;C>JBrWv>c|+EvwqPN}cyvwL$!+_;?#{LNnw`P6vlj47Al6l+AQ<7_H;-szX+lMU&Z^ZO8%R4|L{H-cJw&&s&P3N56(QCk$4jA% zM7js!i!xkOD_b6^cS&*Qj_UTLmSn@;sL~vjcdkZ)N|FaC%p0|70>XMz7P_JMN<=v*$RgAKtrUspeC1wl%!?;!t#hjZ_lp<;eGy)1Tuj3v zi76tRP+ON&ik{?qw0Z*{p#G%W1=Z?MpkU%E99pvO=u@}Bwy4BBKeUqWaj*0&bj^9H z`DpS~+G8IDGPrgbf(;JOPRtuhH7>|z5 zh3;IHwxyCod8HN(n#eCgwg7+YQ$|-Pa|JlMw)xz zp1mUMGmq6Ok7ucKCY!Iy3g9O6Iplpw2`3^8!&u;y%# z%QYwTdA-N)w{@OZEXX@-1~;eASQDcF=St#zu^JU_dftrhqR)8xcmb30sIf1Q8^m3y)&sXG#xb%Uqne zD2o}@dDXc43vCW{Mr2W>UbO)aMhK-}iEY$;O&t z-OVr$*1*@S;CLqK$0S0C3Jf8#Xm5pnS^jfb^JugO(+VK|jn>S?`!R6T$qFa?1x6p> zC6FS}s|}vNA$f07PUp#cxF;gtN>ihiL>t?d%*Inp+66?+J4d?w2g#Rn)tMiNaPL*` zhO_9fBrA$O6t=a{35h?O0U5t=rqDI_N#vxxngOA*C^Gr(d^L~G5OUYtdoq3oIjg&S z$EfQi_g#bS^KrDW9oZ@Ev&v$Bj|G4Z4NaTOa(S%hUv{m>oH)$#Sp1oOZrv8nS*gJe zc#peua9_tDB<}MZE2SzY8mmDZs({ za107hNg3-*+^UF})vR#N`Ax!>-f(iT%R>*-_*~%lyq-we43Yxb^p?=|663&T_Ckir zc%1X5;)m%>v@@Tb?Ey_XnDu==OFVHNaU2in$zsLo8w?coYx-@jvah9=G$(4u3R(a&6UefxWV18jKUOq=t&OXVt1Lhd5GR`^Q!bfITDj#}<^sy8 zq@$DLEH?*9)r$&d-7q2heMm0cU%oz(Qh)(WI%in@Jek30_x+E^mD?S8v=QwbXk1G z6I4T$m8mMclL&=JWyJ(+;_`xpkp zpk)tQq~g^OgfYtFvN{f2zBr)~OOcwm5>i&YQ=|C9w64kf@FTi7+vp0=ZqVRz9|gqa zYKtrjPYW>2s+cL**x@a){?;*?IuGA#F#U0XJ?`WH&g3XhW8-#FL@FD&ECgB{9fbVaQu~+&qMK#`u-*&a>MdIIemY zqfL{;-1`750kPI(P8!QFQiPjHn!!BS0r56)qy1FyT~q-*q$6DR3X<1gM^DqVgxn^Q zjSixZg+s$$0^9nlUYv^y)hdFvn5HP5B)yYmpYv;c$Au4gNQ^pe*V_kN@3m{4o}GtiN9&j@P{w`o5RLnEDo-uK3Y=&8rdap8RYLQ&MnA zLqpO|nVeF&G<9fZ({OEj;PmXj7 z*JJ^+yIHx6Glz?FjmZIvKn^`V6HYvX#j(29c?0R^#slR3>!Z5AZmkg)Pjil4#RX1S zFtyd@W(ekDzT4AIp$KIDl~Ru>$! zWdX1orUH9}rdy;}uczf%a9=oI4i<9+|I*zfkwNevEyNwBT%3E-i+u)X7tTM(I>-h{Z z^O~x&&C_CU7Fxlnd|KtN)DU;nfP4`r58`;Kk!VfIuM4uf)z(VVKJQL#G>&s)qGZRI zGJP+QRxITmhQo8fm-aX3H`mwY*Qfv55#oEs3*zf=!#9M$qd=73{?WGwV!ysy;{gOu zon;~@XDJbc5#$ljy^}X>O--!2Cpl4{tMfJLP=5#}Xit^l$X>k$_ zAyKeU;P62$y?JHw1tyarMz-$bUn=km%4dPl$l>)BZFp7#>9h8s#=Nuv%)pOT)$ey` zYD0Ykhcvf>hEs4)(2zyfsth^ESEZ$rl$nW_4p%Lm19kbKEqM!)uhwLAvo0BMqCym_ zALdVFY5_WlvgLk}{r+&X*o!kfZUX5=4!eI5TbrYbV};Al!|N2CD_c!=3d#qGIqVZU z!W^KiEJcRf`;sVgS6iU}<(!!>OOn>~g(B>I6Hjypyck}&iWuL$Npdx-5eHuQ0@A@x z88RsCMieq-g-~Bie(~ByBD5h|b3g@V_XdEwl5#^dKEv#>IH(7`KrS?hL z@737Oeyzjts_Y_BC5H93CWEC}gvp&eh2}x&qSiI{$Ki~cQ{3;z=C(N8`M!e@sSJLu z&3yKHO~-NJgmPNX!!4aMde5i%PlsfoLb1tXI6}1h;YkG@9`}Q=;oXCZnB!N9nM_S| z*h8+zfoS54sm$KPsfesx4D;S1@_DbM4lKv< z6vt4#oq2$zreXnHvsDt|8K|*!h6#dBB;S(l_zre#dWNt5VS>hk|E+>WD>q;T!{jEn>$Juu%2|KZ zZKd_wTh=OYmP{!F-~77`2D=USr!6|+aU|>BLql==s4_Z&hS|Inj9U4qY%T#RwF?hB zs;cK6KLd*{=mzzZv(M`J4s4zt@L9jEw?{9%VI@uHZmPE4>veHtlGX^;CLuPX#Vg9g zHgJ|V3mK0SM1rfxQQ?1R;UnooD%RqNcRKQG-$T<$D^SKYV!IH`A{jKo6 zdc#P@N=xIH3Pph}_T}*reLRtGJ%ED8*^w9~GJMInS&{4A1ew)K%msqtEl6?-X7+Y$^~i5PA;Ty0OM=ecRqkb0T-iQ-99l zJWztm{`ZVUSpWjziNGJH9<=J>_dms$BEt3aqe9XvC8>id zRK(S)N9yjZHHg*Rj3%^ZCYu$YD}^<5nphmUn$3C_sqK-h*DU)TQOS zI=HebS24By?5lZJd@$)bMknN8@VPltB{k`&nv?7wqSP#?EL$^o%rPwEpYB06o_3*Oag3Rqc#5u5o*p; z{72*Ww#O%{KDppLy8v3?ZCG?q1bit?;$#vUjjKmNiy)Ez6_Xw!;O5)(Pyh7pGEBJn zGKpYtmT8ONY2!#JZEPOW`Y|yi6I6dV_oSdXl-oz3kM(Ov2RiFy%QiRpD@KZl(3=ru9i( z;vBfTI7tZTPnAg|Q`L+vIqkG&&T$*Gm-yuOE(b$s(UO;$Ub0&rTX_0bS$+*0Q3?g| zwRpCFwtt$PnzW^i|T>P~^37D_JDA=N52wn-E%0#M>DXGm56UJMJ#DKMzT=z;l9grc$0-XEmlbtZlfPY$Gp_X zS7CdOYI6?n*4irVt))6xNjn>*X^dD^ygz7yW`%ESeYCkIz3!LR9}d@%48&dOHpY{jOU5$N4OPK~cJ?L)x+*{hSel^Y5-zl0$V^_;Cb z(1T?NJ=@X<#5M*z&1K2RxNK_c-WIz|v7Nv1EKAu-QCjME7pDNn@~I8>`$tNvgatij z`OzpruN?Z+sLc`lE#NXKr)}t~*38NAZQEfLkw}H-0dt8J>qE0qgcxj<@CT%s(sHFJ z$yHME5gev;z8OxA7}#&o(9y}Bt;lzh&XX=IEH-{&*e`G|p^m8Fv1*s%WOTSwr40y# zDvSPi>)%=3JCjsgj}^DXSV5#`HJX3xsySloZ<-$bZgf5&eIZfq1bk#<(UzUkddy@Z zo7<40?>;Z=`eoVz~lg zeV~XU9*OBd<|dsT$3hmFr@Wo(KQI(512$OjtR!V0{5H*a z?0!~ltv0K!unU0CpFzKW=){Scl@3tGjtUN-W}g3HM^>rK8ys0PkuH%~?47NWlqTsy z(TM`T9WBn7b1THnf!ipB1{tY06xE*7n(%v4@y<123yCt%ZrHZSQb@TxLP}cBipsCA z)xd#8T#ij{ez~v{Z(OV6?+@$-2;uTWl{c&VSU-w~)~`CRAl-(oMu{DZGc{g^nYDmF z+ZTP0cD}Rp!-N&ms(Ga&Cj1Xz+!17Gm3jVLk%H8n>D-7=R+(qgXI!GTlhP=b3+N?E zW|^wQ_z)s7LhV&k)JS`r^z5Vc!^56J7rEjsbi7?e{Ku7fL!^5$2RO)5AgBp8@wGt`b02IouE{YsvJKRPW>LWPiVM$zvoX;i@bdvOP%n@80J(CRoY%33=qD?kSh8%6`G#?6+{eLt@EGjdlJ7IkIP0JD}(}8faJjX*O z6nA=A#Xj-Axfa{@-|OQZ8sad>{}kxg!cB*&YkANZXv5>4EHbn|9v}Rh>2GQ_?)8A) zl;Xi+z*l_>ra=4V2$Rch(fd{h{Bt?HZh-a2lc2e359Uqrw6^(r^9Qdmuv3Y+{<9k) zKVpwlXXhtZq5VOHVN)L1N)}54GeY&=A#qJ~kka=Zc!zw?$0=Ub!tZz!WDQBkA{;5G zk_W*SkqMZhY|Dt$tE4-+E3ew#j>|{OI8!FC;dE*ZQYXjJd=M^8$0Zw)HuZ~}&Z?7=*Di^e#{*D~SDsIkl{TQy)kYFs?dive z=tjkq|796C|5F+MFXoPkjh&78f56-^G5sUq@$h_LDHSJir!C=v4$U&6Tew}?wM2WAGpRAe(Gahq;smNpx>>uU7A+`!Wpo2F51 z5l;gz(&VNMLH_59NWo)35K{Q%O?8C1Y~5Rq^AYRJQskwBfbQdq?3)EQP z!CX_gdQ$3f60?_sW5zX0v!Rz3jTGx{kk?m8o7DAHr`&hYPle0+$ijeA6|==3*v>_6 zU%2Q`JoHo;!TVnfHnPzZBu{uUBa zY`zgO4U!aPP^mBiH6~dE@nS*4>4oz{gq>hqa#{{-m@*c?i#_SH{l_kZAFuf9B z?ufiXpDhLM1N6Sb3%=heaV0+U4H{6t-~{HcM%)ndo-DHFb-8xFzW$jpGQ1X)zcERQl4^c7tOwQm&Tt< z02@sGf?YQ%Dz4MQ5*s5hs~ zqNvuM%yg5gk)ai=kJs?s5BwIe{b%>y-sz}Dc8U}IU@PQu9;Rgq*=w?+7qA6?*%XvV zz(>bWCd?6{iFURnZpePyZVz)lr5s1iKHQe+qD`uEf9NaDog4{b2@O~Fm`Y1vfb0P_ zwyb~J80>+1>W8Pks8t_%QU;@hB!ToB++q}!Dec*ttFp}1$epWfk0Nea5x#dSZzx^D z4wlMo8^-(H(+}(E+7b?Z5NE=ttni*PEP$Wla(x0$JG=eP`dCmw+y>M9Wo8%ZJL2%h zH;*1i#@BV$JycuG!kDeB!j4P#3fcu5u1cWn2m#BuE?&@cRsZ^rSNt;DkWP@Xt{>V_ z*q)mS&2q!@iclo_l_^`NVBt*y`Q(A>fkxNcJS@D6|^) zahZPfU2?#4%?Tp>LAj$^%de;w|KgQjP6j>TL`y>aBeH^w-!uk}C3O^xc@-?fx^EC+ z{mpQ2sNDodr7x47NVCBaoaRP6JGXn_v@V)nY^OQmGv8qeufNarixe@1yJ;M2$EfMW z07B2aj^n$y_Y2Zsop95r5wZK_10$keHWb_LBCKhu|O`W6L5R{@L7^%8-dpj z2CJ3v^es*xAe4V(_XgJ_darAK`Q>2YdS{`R>y+ew>opYcCl`3zwVgm7E90{zdrmV2~j3LHId*9B{<&`+M#<6I?6S2B#=i^JJ^u04<74Z1n}6dt;1Rvx+vDYA1k>058!Fc=;lH{PDJ zr_e3LGyq|lP1xn#%+9cQTpvlZ%}{T!bJ=a+dihFA2C^<}neAp72dd_@M_i}bP;M|= z&ZcB(_U)tE(eu5zq2ljxz%hK{+z-3qZHhz>l~zLrb6mmY*11uF$5#u?_YXj(Ioj*T zLSq1>B=)rn;N7fnlYv-GEsg(sQ94r@ui5Bb;=8JmQt?V=`L&-B6-PJY;sRo>LWr}|P7Sjiq_Wv31>)C`(6 z&;o123|`~{Y+lECj_~~9*N#Kv)t!^K5NuuKPz#ztmGQ;HiovD(poFNtS}l@2R0_u3kd(+3)4&};YR!ksdc zWb?I>X|I*Kin_v>v*v3BVgn}W8L*YLb#!=m@V*7b?Cdyom1G70yr>Mg+w0oKi-vlf zvN!56a!3@Kkbn`&+!GWBNE5j3VV;Qn**nUCND{!ueDdx7NIbS4ul2#EM;sP^O+^Ed zfWt{54`8D|rjnb8m>FxJ8aT&u6a;mgeNc{%^=k8*1s}ju;Zj>c5!54* z$NLfPAmZm7;+=4i`7d0(;MYU1!g;}m;G{m_80@JyF*IyH5kK;n!oQ_6(L&}#LORcy zGX6eh#8IFb6Cyl(p7qsI$_29yqfNhVi-hG7{RtCREZk*M0FYifm5kpmwe(O!E(#-o zetcF29zw?F5f1|pb{9**yokk24Iei#k{D!_>)OQHP<zPRwOR1!hoDlC-}6yf*JY~{4woOZTb@S3Ko1(@sqw9;BU_FoQamPqcVNzlTjuP zo1P}VG=bAj*SPvK)n(-*id-pM9jT&n0O#WW*>?C-O{FeD=_~NGMBus|56}bb~-?=^PSse`57G0li=Fl!KV_PXdRY_cS^3()g zeQk6-N5Y8(P+uBh>%}J#Yev;;S1{)$>9}5y66@7etDuU^c-#JRd*2`AVFJqaIN(6U zTVR-KF45*L+(D=#7QejzuRi8mzZwc~NT`Q1Y&w|HHh;V`cLMX4sv&~I>$AKt1y!{@ z47o{`R)%c!Y;3oPa9yB+y!uy5Bl!qv)M(LFp%R=bs)AVa-Tli{(8t?EHz%}j&EJz` zKC*d#Z;friGeVLQ2CC`(ydDvyy7~KanKD(0&$LPv#f2(R^2+`S^=MpO9O^9X32=C> zR4<%zSR5Ad)4xvSq$Ak>&e- zkth&oWqw-eb|@QA{L1hr7e54a)k2hFaojiEKADAf`V~h&Eh2o5G9iwRbHp4j-Pp$> z<%_O7^H1?u-1%xsoMz%K;ReqKdU%WkI-0d&YhQ!6N<^MV+y=-6^6}u^e;qt@>*N9E7g!|c#^qAk_#$$ z@c0u*SC}T0jx~2Z=ZKFe;-rhD;>jX1FO1FSq?}1RkS!3hB~0bWids!ADDB%}YGg(* zzJ&4*4=U*54{`$F5Sk((S5Ee*78!!6PNEs}NeG~fAK7cwzKy2NoZc)Edo-z^>p$z+X(qNB23<-eUf< zyAI#h4mi!iKaE}%Db12drd%}5V`W)OBsxK0;EW(AKLSwEHyN!1tM0NTi7EF=wut-{Jgl z{zqPNs(oDZaqjjuUhVbWVYiom{!3fU&d+6Pk4It(i{D%6>~z!!x+<&HYuypHJuewh zOaV78KbJ5@?wZleJYqnC@d%^y_W)T=UJu3QOC_Wy7tmiSLn`thSrDd*zI?8Jo`eRi zT$DRzdI-l4U?kcP+a*NWS0D-!c>F8Ghq3J`Ju^sX<8WzpDdB^qGAFkYg?5!ZeBSgvk%^fAb(G$2?|e#vJw)JzysO+AVi(RwU{Q%B*&wEe{#o_X ziQlo&H-bxu70m8fw z5dLMui3%K?6`|VdS0RyCB%;fP`q*qXnn558N-;$+m2Vx0UHaXuHJx4IKKjv=o04Xu z1+)VT^w)B>JRWKLpwFwIP5SZiXK~8Xq?XczARQEK}#5=9jkVDz=Ig^wu+9?Z(=K0GS z;?SG6m#UY9RFBM!?{YGdoo=;&=|2IW=*rcyCEIKMiLE9lEqQPv%cka`lS?xLS&$}% z~-`&8B}RGD-Y36ST@4Z)f;q*3NJ2q&`@ni*U8h9Xi!`$ z#Ar*`@67R1Sw>lbTK!L3(+4m6+#dV60@=CY*voBh%N=|DES%Z)WY%-<&#&3C9K0n z42}_-_z{GE*`?UmjPe^q|EV1yXK^7p=UR*s8$#$SreP@h4O&T}o$Q#q+z#GCv!v$p==^WFRgd1kqHv%Fy0%*lUT14ZzHya3%vPLBh z+T?G5p-PAubcG((#}xVx(1o{JI6mMao&d$Y^f-cUqtoWR8lM;jZ~rPw?RNB_T7^7I zaj~~5QafjQUQ~Hb_8%loL67=H0!)&Q!Q?3X7kEDDXf#BWPOyfczx(wKFUN8Sn&&(n@vq_)>OA$)md<7p5W>N zA=`C5tP_Q9-gYV`L#F#d?Cgybi($j1+IYc~@*o%y(S&2?7n;!S@+8e0+ftk&CYKNz zxgsL+LXuMBX7vUV%fMR-I@ z=b)zqy@`J7PK~u|7yTDfMe2Sjpc(i#6>qJ6$w@Sp4XJ$RlKEs)cH^fBicR$Li41wi zbII9d#SvI9-DHZjam!E_;csT||Z=v7Z z7fEWNxT8`SapaEWRkjSKQJGDTR;C03{xhwW4 zuaoAYP9H=KJHx?P$|Tw|rN#%#RdbaqHQgRlXzO@vj}9Ga4e#T)_ppXehEQ(50|MwZ zN16{BHw_1}R5z*4lB&T;g4)&+8H8 zHX_&c%U(1VmNJj8 z&r@RcoFvt3I-`oW-e7Sd^1`cfyqOS|``XEA*x9xdw*<&YUrz%$bTNSrU3nprVMrp> z72XW88TgG9jiC19kB&+t28yDlK`RW^F9>8yWH1n{Ogwqc2Mdi=#1xl?!B;0pLt8PZ zYodr$?^f?G*0d%{p4T`zHGRZi$%`xQjkf1~GM2cL%@w$xZtt-l;=ef#5RV%LATj|< z&%~LGOmm#(nC}F!gzi@H+bN1SbSnSqD%_#J?oE&&@CV4N$>W#4?BCSp_AgBf<5-L6 zETHjewpbTvU(+jVBHCnAWc+f~$EpXeFKyutYh>EKi7=S4FCs7~4RaM+!)MlG zFyf@;Je3IK*W;(r!n6pCogwmGc#7u_cyG}F`T!hYT zsEd62b@AT+bIEN=TxRh5_jSBs$RrcUtifkEDES%pRlQx{7nC{S!GYjWnzwaX?(#c> zlKZb|$gqMGjUhCXDhP}EJsn_ABfSxvYoXL_2q|i28aE`>51h>mQRQsryw|5Fp~D43 z97X=3cV*=aX6Ud|`cz>(6~PPS1ZK}0y$RPcB0yZ)$um+i!Gzvg4CjyQfQsVa@I0-W zf?19K>rlwU@p<6;y&)$KS6_e0FGDe2sQeakc3$>Gxyb55IHLvh&zPzDNzR?Zu|1GO z#y2Ip=&@~PnybSsNs~Bb>IO+LM?q!f2uOzwnuNarox=9IA~1%=;yQp9V05C>w)DLu zl3?H%#4S*5gyvKAN0c~-Yy@8Y$IAtXFX$)L1$sszbSz++UH&qEG!*vOg`Jh&nC@jT zy@RaXECxo-_{!qUyeLvC;dE+nQEWu7LLqasXz0~sT2_Y$qm(pE^-9Rl4{%cltSR<5 zKSUwI>o5{x)XT{39y+S5|DzDbSlXwf9_macYz@<(nnuM43kX9Wb3_G8SsoTsCrJ)d zS8Y(WRN7Wu#XZ6bE}{8MhWg!1%vhlTb_bp^0t{yYcS!RWd(45j0P`9f@i1uc$bl!h z4NQa(XA|Ean*Q=tlAz1xX1o1%x_&j*`G%z4?9gMKeaH+ZKEbKYH>Ot1vGN$B{l|Pj zoIFXLXo4k>Av@Oye8)|Dek0L2J1yEy@g{x z_llkF;xJZ5$|2>1{h!18j#I8ld2}l%QjbX6M*p8?K_*(O7!wH4VtsB}oj4coRD@J| zWV(iB#9olB34o7Uc~0@zpnA8}nk+dh*#cK*06w)IQ3AE464S^DdR%(q`fns7Y4G=k z$ws^ALveRV1E32>`UJcW=$*I#L`P4~6CL+Gyg)QTk-Ox5otFdCv)>y|>|z2m$e*F6 z0PEqBO0t0#n!&X!D@eU!ytjnVi`K+-zM&v%{BYqUJ8ZiQDOz==@yoMyE z8=nwg$jYa}%sqejm3r1j>;h2&Ahb^X+f#ERRq{zUjx8Ci4FNwi#T>uD0p(i5Z7Q2p z@tKq2%@TdOLJcyYJ)jMly_wfmQOs5x?pI>`m2(+ukf|05k9@ZU2HxAh=bhfi`y1z| zzh9ZYg)?G<9ddpjrl;V1L@*sgdXZPhjp8V3!=kt*dCODmcLj?vIYXx6zeI3O$tNhw zy^+|aU}GkRJcigVuo0qW7w_Vj`$!I8@ez!5U=c2Zmy*u)FH(0rkG9mG@NO2eR=q6t zM}6J~M?y{r(`TZIYU?KIm~53Qqaio)65(i}uO&*rlxWMgmy%EnbkAO=La6B2;C zI}^whNBBag_*K~PcOETGWxDoCQVh2c-l=*{Hm%ZfTOQP6rwELj+HhTK(tE-P+)vk5 z7-_OT2~x|#c}~yNGhH~7vn;)jc zk5=T;(yq0h_mxU&vfaBv->Z?kS!|JoC)F1MWdf@aJ$|y~{R3y+fo!I#Fb6BJGncqr zHEiGce2&$0Q2%4bBZ+XeaAVq`N5tJ~vqzH~OT&Pki6mlbv0c=#FdHFKUcwwxM0bjI zKyigPkBxy$U%($`U+%&cwBK^`MDI06ZWd6_zf#PwM;WioR-(^;#aO5C6e678%NI8180wDd%-|=*xx{tuoT-r273{Q z7>SmSWlr&dl+>PNWTsKW^Qz5gohql?N{`3~gaW<;X{LhHVMLC&?w~Bf>|wbyu%|08 zT8oE*KN^u?mzuYXL^ z)NZ(8<%<+F2y#20_f|#DBuW_+?TSv^i5pF}RALx_D|V|3=!ipVQrd_F&~2ko^)nS4 zMX&+R!>IFXtjxOOmoT zj*DEq4i(3XNQv6b0)my^mEHw`g4SFvNNvM|uNdVH*2DbBAU4(}n%O7MA>sgFSR6RH zCDPay&uBpwWc3+@$;N-Kj)TU6ix+WB4`w z3~oz=C_kuQ3Gx2bgPKn<|5yV3LvlpXHViaQ4CMakAvVf#VjP#F9Umq~Q;JMqS*r)E zwd08g+-PV?GUqXmkdMbZKW4=s9`q*)Y56@TF<)Sw42L#WFPEt17e{l4h(|}NeWDK- zfZ;r@KdK<=y`S;wjPp7vFf80`4D(G97ga-Y?Gx%Ll|4D5g}XMbB^7Zp8Hv$`F*5mM zLPlK4^(IcpQ9Ph-sIY6PbloW%mO9vP0~eT^I$^f}8Ul2TEv z$-<=nRSUzI6Ajl%d6mWk7N1Dis6pSL736w|t9vD4;6`myqAr+~REx<^AHlNAa7Zv4 z!dJq8gtqn3OZ0^V?{>W`_ef`ZnV}Kl@v5Us#mmC4;%y^oDtJg*$Hpg6zp%~6ZeRMj zDbd;}==$4}rVY$I!-jT3GKNt+sjp#$;4zb~i8jc;0 zhNK-y)HJMc;{A=|z1{#`!cZmY*4O{40RX*Zc*oObR<@49eNc?yRVaKuXOHgS?&jXl z_ux&{5Bdo#XtkF$y}k0FG@ZydHwk`yG4#PpmqHGj7su$|&TG&2b&m4&3i}-wCll3v85(=I0AzJaSc}+8Q>X{R;uu}T_k{c-YhzR*c zQvaeb*@)9}#$tp-KYX*hi8LNk--_ZRX^taHoiqi{-VY^Lx{-W{Tka`CLg(s0YZSW) zv-#J2R30($KoL_wFewT}6m}T50D>%N+J}(iBTx6+juSK)Fe4mp;&s@PwJu?_!S}F! z?_m&P{RMg=78uy`#WXdr({&^%6EC>C*Ke?-t3oJ)SQZX4aIC^byFy(=s77gdbWNPZ)ylC8%P^yTu59v$Y&tXj`k(tDa9y|h4CxIs^RQJ zRSI$JkTesg?CBWeAyFGt0pkdQo&p}HA^D+r1gm{~spA+Du7q3b(Komr^F`^0Q8Yk} zG#i4?+mX##4H}Hug2)Vi!;^vyOKK$s!^k#DNbUCWV$+G8P7N}1w6&s?A6?jf6~03G zd6#AuT@|O4>gBgyR;{$tee^&V^%J?_aUynsj1=Aa4-hvOz+aJh+=Q0SD<_K8w`e5Q zjE-_ML!2EH&Sr#1axNs`v9t5&WbnOzv%A#G1^4+Ra2C2nNeMDGtNqQwT}kkSu+opd zTBLrS*w!mvnG)*c_|2*z{erdz@O@nI<$w$pJ%pf=5EDX|Vt!dGKW+SJBj6c0b3A#} zvU9t(eNiRBmnff&P#s!zXL!^C;Zb;%?Z4zqtIbH7wOTz$^*?WbEBY`hK8qWSh>svBGNGqu}Q znU~CIWAjQ*c6}M+$0yek=i?se#C;*!MTmnma0o4!_?VJSc~g@XD2Y8)NR6I){a^_; zKcl1a?R{;%bZF&SnC|R6E`J-0&dU`y$IBwmO^>Ia-H0M=L z@(=xopr^!QF3-?y`$u`zTuW>!&1Jd|n-r-8@K>cnl{FFs*PKRn8s>Hgb{FL(`yD1K zHg{FO#_72Y1)9YeQf)PYAXK)W9l`BIE`2y1?+_bU`2`uQ#Kn&G1uP!WXmHAu`-WZW zl>rrc4bl7O=XlrTJ64?1{eCRuGUG*(V{pq}|2?Q}TwWPlvDug;{W@K`q*<7V%-u!J3KnWh9BoD9`wvCPDW3;BV39) zrd<}~OYV^?{3$M?2)SGwS(HC2eTG7qdjgDMJ3x7Y81VpU;Geikl@g@55Bidv&rtVz z!|;7Zux1;=1)v_S+O79|`^4-T=$LNtssx>!qLM1EV9a(>6#4+sNwdgg(=fm{5F%{T z?rs+`P}BrJAX!LLGt6+{Ltg8S!Euh$0#aXKfm%K(T6-3R2QjPRyE{;|g5sH7}Eyo3psp%uu~ATfC>ewP+=`tqh^T^1-!W0t(nZGL$TS)%=yt^UKLNTB8DYb1H@SWM0h zhK$4^$@^pnbm-wMpaW>&3vf{5P&8c8$FtEV(hmdM~(e3Vqc=8LGX3%1p-Z8 zW`ddCg|JDa$3+yy=0mQ14F}Tt2Wbepj@UQLCHOG~9@tb;qVRa|XsV4%s)o_>_ILjd zB4wjmu#YUIjNi-H)KTh~E7u9<2PlN*vw%^JX+cLW5)5x|~}o zSBAeSf^?NgV@zF{c@Dt3I;D7&{-bL&U}t$s_+;)R{cyhGllIuZVV0EiaQzrA1}+qJ z2Fhd$ad}i273!l72E>UMMl!jQnbNh;y;y-`USl zolhcuQHwX;WQM=zoGa8ZgX64j6)3jTDpfVzJRqh^zaZw-nO%XoUg8;XunP~xN-ckj z;i~zZ{oHyPux0zKcmHA1VbbIMIkna7_s<*CZwI>+`wjjy)R2O^**5@TQ%Jt=Kw;Q7 zFuwhVVr;bx?T$Bc%JXPQW7dBK?qk1l+G!A7)OzYCc>c8I8QFw>0r`)Bf;lbazvA+; zGW}0n-v3uhHS2$-?&>Q2H%fKa0~&uxD5NpIC0S6CAc@1NNbx67T`Foh=49M2KYg!M zawWPyY>h0|UT%X8HCBAIwBD_WHU@^DdC9>Z9a>OTfs=WGl8kI)rXsJY#?}F|KbGNo z230NsU>?&NuX_a#M(Qm*73G1Ugx-zNmw5~}FRJYD9O}lt2B6)H_^4pYvz;;w)gAx| z1ETfkX2&~2&6jB>b?+MRG(p@sz+sUAdo}3BISeS5TcyFjwQ6FZ>aSsAN0;so+iLaE z8M!GBPio%ZocYi{L8D+;GId~8U)+|9Sr}v91{GuWC2AsNB7TUaNE${PAB9XT-!_aC zk0vFFMG%i#gc{pMR)jj*Ya)psR%AZx+!&;XQ7Sq=r6eR@f`Z&oYEIl*5ywa3_4_%= z2%=s!cw$%jN@9Om!lQY)8Sw<%>!g$2qAfZlJ<9Fh4F;P^?ec%MJnW4BtL0Jgus0=S zkTYzxl3{Fx(eH%JRM0h#Y z#7zpAqCw$4(m^N*_7XuHX$vUh2ZZ89bwK^$DwfE^&A`c`TC@RFMGI-7D8u_s(x@vM zLrBGNBOVIoVW6&sOkpUdcx8kW2R>9n*&~OdEC431IbJzi!2?d|rdjw%L^`JM$2|N* z=7MD4BT<}P<+y~#G}QUMAJS4`VIOSSFmVcIVCDo;7rcEAW+=RzlP20GRPBLe1<-8@rDV^bO_0 zGubhUL|&By!X5v0=C8kj{4JDE3r-4_dU6eJs_i-q0|E#d$g35!@DJp1H}HO_GJ@%# zC%+}BzTZDdy_D%82<~5RZI*OGy-Gx3n3=(c<@)Bk#}*Yw8PWMOnrDdXe%Rc27&mJS zY4WhneU#oc*?RY*Bx0Ej+yo3>38Ad{cOL&{Udsx8L0# zk)AKCm2L<&xcw7LGoi?*Us)nvlv=1Oj9i$F+qr$U7jJ01ttVQ$!0Fn;jMWI*%YBaUyy_;Bb2x8* zp`Z5l-^;hKDp**(Y${)lJl54K&V*G^PJDewJJ5>Ex|L%05ou^ObxG70IOG)mEo`O4 zu{|WZ&;<`=(~|q;>#ogyWLc(mvRkW>G^y$UoRg{nSn^(fw@knb@kEL+)nj$gffH|X zLJ|k{Rr^w^Vx-Vn|Npz({?iH*GoAuq_t0!@g(XlEh=pyts?C#EhB9s zt<`?(ias|@ysjzA6KP?NbVVy{2kKD^JOEn`C)BDUhMb)=o>0A@|o1EO347pCY;|A}&2Nbp?b1e{eMr*RCZ<^b_uI*F%mr zD(IK;U9{@uMe2N$M=uq3@T-;)-dv7U!ya0Ui_Ey^LnKaqYR>-hI$m+)+&L*Rx+?CQ zeCzvjV%Cj5l)?ey1ZZ<-0=!mKA*_MYnNxJrddOB;zM06Q50UnFZC^WVqYezlN_vD%ZRkrH?z^>MMdk@%K`=Bn!CweexeUx#G68j zYl?gJB4jcpr-SjZh}CD4(De5O6L#Rh?M%S^4@&f?UO-_m5tENoR(M~n@SNcy{vT-* zMR=t;p4+WjtAf`qafT*#c?&0k)D_fWy?BF za>)_Yi-V-B_Es0~C-iprFObn8K+#r%XajmkNBK0k^>VxdQ>wO6$Xzp23xS2l(t_DStMR$I#tci0D=oTfOdq2@!5L$^nA1G ze@x+B(CKarWk|2I)L+jxD_<2`ziaq;a1VZD{RERnrC}y}tV`~e6XDV^UB#64qR*jU zZUH4%QbAa0qYCF`KJSx(z%d&D-OC$sVe`PR^tm=j*_MQYTy zd7^eF3y=#SboR*t40Y@@F60zuBb5<>cEs+&Fx^8Ki6$K1owURqske$~z;TqjrJWGr z*H6{>!i~3r7)(=*CV#MF&RR@XE!>(K?_xpxT|P0z@S;OQri6#{?|!aZnHcR7Hs-z@Jb4Nx*p_;kGYMD`nVOO1nm z>qFZsA97J&O+dtp9yW)USkD=Yt8ZOIQO_yQX2dVu2JQqsb>e^w?b+I)wIwbsJ$X(X z*?kGiG^(5xg{Us_Ud9gT{8nXgxQT4LbvZGywT0IWxmUptK@d;wdw&FxM)o@D$sn%e z#pJwJiK2c%Z6fb*_D#Nn+skL;UCn&gDZ0{fw;{R`V<^6|OzazZy3Xtyd%Dhaxit?# zgVF2O1en@yjj74*al5>ZbXli@1 z(fAeSe?&70*YYF=SY_wfwymf%1-Kza{R2FgrxMz-%6`lr-wsrbS^s6-|6gv){-5hU zE93vD`^?OY9RI2AAN@z&7f1f7`}Kl|g#D_dFFqWnXt&Z?9pO%Y4)z_@aX}+=Hh86r zVv4d3`5#+fu#_5-BP}ND9l*5KcCQn78Xx{{Oebj72U$*48LTrJ@-3uLg~l7J72f^D z>4!Dfi3q|PZsNf`-%qL}^NG|gO@Cc~)} zjsCdINX0p1FY`NinZ+{6#GMo_jdQwa&3Vm?w8)h2AA;GPUf2D^xMs{jeU#7@KYp(Dd>Aj+xt51xG2Bq*Hw_*1hd2yNm8BD==>0@i z2L9*`?w}J=*AIMyhG$)^&;~MPQeqEI+$oPkPAVM_9FHplCpyz2HV9GAilpG&Z3ww# zQQ1th)IDX__>>c(i3-iE5pi;ItbhRm;NJz;eNkGu^D-pVjYQgZy|Suvn5&p9cU z48nNmjnmZmQ4jWLB}=@EvRUd_^p=@18SqmD@Kcm@4~mqH)C?03?l~I67^Pi=#4 zm6a2rB>P$tSzZfd#F95Ca^a&HW0rF1q1wC7_-BXwas0j?nAxHBYgxbu&3HBAO%wEc zJz^fl-G~{lxZDF9FWj8fwAY5TLeLZ=8U24A1K5cwTBSA?03^u6}Fy@%Z|_R{Gs`3+&E|wWNuR6HuOEEFa3bKN|Jc@!oM6*0W!L z=>4}jL)GUO1f*cTyL{u7BG#j{56jxOrlyYPTivUAJg#Aq8NLMM^rWnke%ys|!Pe(~ zoKqaLl&lq(`8XcBrGq1@ZU}NL0*@oOXO2tHczIfO@*)h#@$9}9I~P(#>@u(RU5`0E zT5{cttWuXbUt1AZq?yVy(+u^ivT+9E`yTfcc0k#I8I#b&AE}T{!EamJTZ@(+rm8g) z4WCNGZ+ZU%^$_SHQ-b0MSv8-Eh@UsKMM=TiqC>0xMw_}`&4;>1%}4fWufeWN{KNG~ zt5d4oOt8HbUElMfB2uLe-NhM2=6Rmnc_KX4_3R~e>t~Bl*lm?TkUM}oDT@~CBpHH< z_1T6(5JV1R8pHd$NY@H+oSGv`O&}Gl48-=H&Ve*G?4Xnl_a!ioU1)YAV}A~)>&pzt z76qu64Cu}RXq$H|v1rv_*jAFmE!^Rw+B3=Qr?Hxwj63HatzJ{+L8>J(gw-Qmj3(!{ ztBl$g?^cJI)?aHdJt+o*=sVYPc3wRAi>mRx@{`AH)Rl8mocb~gZ}@7enaoN1`r1$0 z=O}i>##u|)IN^oZ>E|eqtl158H`6tn{K786q3QW=gS@z*`%)%Nj*rK`$dZMNYe}aa zr}JJDC&c8a&#r?5;cbxMZAt%8<_;;pdM>yQGKDN2C$1Glzdz_WN8mtsjYhI}SeP#m zRXrosk(2LZk0F|KJ5K-hj5Q{KxNsoviY;P$;aP;;h>~MZOv5Rjx#u;Zw>V{Au}oR# zb)%1eRW{mhs+%}{B?iz-YRYC0FBpM*@_7sf8FHZ|50yKq=a_~1?W$%wVd zM%?=Gi@lm861(41EC#KXLHU-FV;eQ}fey`G5SKP2P;hMOw%BT-67`;7b=cs3mKrwN7!;J>01#7o$|* z^P_C~-n|YAe2t@aM?95y3FI2sG3rkLAw3|kJT}zHj^2Q|)KYCpi#HKjRI8MvT+1d2 z?~uKCn6;I)wLzAu8H(tl+~}CV*cxH!Dv>AdH#Mgw4uA>mkSRTQTVL|i)V%eREbjAM zcgc}1QqQ-oTV(tbXD{r*Cor{Macy>?-IV|7$j$rSC1*Yex;Y`q<%zV7l0`QG|IR6) zs*dqcj1R7M@zi%T;kYLd33PzcFFs6VPGV{^TFruvMvlCYn&Sh3y}qX?D?F$Fn?rC* zx^$}fd>6)EjMARgmUy3r8jtF#rn?@+K`Wc1bc z0P5+Lc1l4z5h4WpGsd$JoeYG${&%ExGpp{}6$f`*z$jVKuHhqMqFx2psj>@mhY!O?~2S7C;kWuDH==0 ze|EPvBWhyrkD2lfsi80ede{(!h3P`u7Yy7TczW0)5k@tBN`$6)0u`|kpKsF5P){Qk zP!`ELyQWzx$?Zz|=L1^-BmpjnR-Ke4F){oQn8k{))oG3kb~}Hw6i9C`z5rD0g!Hy3 zvlKQ5EgkwbZ^MK_DBdJ$*I2~_f!}lu73EcjHSRCjSr(x=eFH{};I<_p?Q4+}Gve95 zb|5f53wz{Ksb3&se3rL@SWlFse}qB7T|1%?NfkPTQMr?AoM186G?Af}H=5s`p1(~NXMSN4+{nqh`HVGUC0hSo9Y2C- z@6r8CYYgVr&S==G<@UQ5zRvc0gE!4_y+b1xmD&a>9?Y|=sXf*=J9Llr?mc{3z!swi z1KF_f2GuPVQO7>aP(Gqg=FL@RJMzdHZHtmlE>}OY*>EkduS=}NtmL(OX3xA)!^+P8 z+Yg{>l(0_s!I^qhse0XK*Eb|h=jkb%Mt}3p53a2XXK1+>12nmV>X#3uYU`6#wur0*PXK)1c6lm&K+N_>L(s~2tF}P^-^P^pZdcwH9HJ`+Krbm2wR{PY~ zix`M$^y`0qR4R`yC93MHbaFrGelC9^JT%Mdn`z4fSPOg9yj^Vgq956A+FD%nY_c)5 zPvofX1w|*>%Y9+nj1N3W<2M={0SDfFBZc`@9=G9b^fZ|O-qtzroelQ zI}=P*i2&}cgY>%!I}~l25AMdNG7~#7&A_^NjBQb!$7FLPgkHygLUIF-#NbNo+TOXw$f-G6MN-k9w0>sR00_$HVP`LItq*X z*r*~H=2C^I3FPD-gq@4TZ0Su-S#_75Uoc|+M@#CbAS-1`LesucmP znN&GKNr|QlrUqUyN;Ow}oI(MD(kze62-EVn4|zicI7YTm>rbMbB4nRtDJ7x3A{8Z~ zq_N~5qLyL>M6_sS5_m;yha=R&0;MrTCxwiBLE6Ot)x8PmvilN3KysOu1e|z)C^b2e zh>@7@vrVht_s$N)YHw%H+x^CqTQ0oc)$@(P_uKyc%+{CAk;&FlYv*U|?WBX#)6}`P zUC%$ElWp%;kznopX#rvG9?vga->obC?jVZPTt9)J=Rl3z^OMf0DgnP99ez!v$(2R@ z-us2t3)(j|Wdqg)MR(4v3-wXnJCpE#ZA0%GynP*LwAFJHEe89DQ6|6ZF41Y%&i13U#0LTW1rl}TC@uDGP$^T+yqty%3}1lo^Ks-g^e70gt@;e*nm&_XHg$=u z1{B&@0LHuOhQxMYX&i$?&`9gLBQ^F?ff%s&F`p=(ONZjoC46-+9o=hVmMzmFe)@+X z7 zNToW3Z@Rw#gOPz3wpkU_pHeHiVJ?L^vdXQ!Z*~HnxQJ^ycG&JifT_0Qg^sG~48;M! z)apZ~W$8!J+b1XhL;hEzd)ITzQ^}vgH1#~&tjs@Xn|pd6n^!5MaF_dEXco~;vOc?@ z6pLQrr-eCu65GbT8hAn`IJ($r3ojT1y*hZV?-;o?d*knwgTP;0;HRPTH{qNG{`fig z6om3jqWe%0IfOGLIlS*uIiI96zK*w`9;oK(PiKl*d=ZTj4$qX+_`_?3oL;CHvHSaq zI=m5)mAfyL^!UTWg>CMrsYX0g&YJUIf$gm8-Tm<8vF))O(H>XP?sl_C@2fa2U6zX+ z85z9F%a1KPNACMv>T|Bgyp-1XvefIQ#yREYCHL{!b|pFK6XvPm9wj0f6Xq+{9wo;= zwoM# zI5__k1ky%)COXj@%ctAPQ|%(} zR?R9|=Gm$9Z0`22kuL}Y3KC5rqZ&){N&tOV2T)Deyt*!!d8Hf>U_m2n$|C_PJEjIM zL;XzX@4m_u?YuhSZ}S!gok!jhYK1V|%+_~#d??s!|dRB9IGvD zh7>*YoV*Bx!(k6R0XLEy@$n#nFiWNpIV{hPDJ-E7CC+%PCYf3R%PM(0;86muym`@yi)j7_{P=C>uc|LW3=+{ z`!bTR{-sk)Ar&56x(DI_W9o}jr^ynqV723-bymmEDpo2x_1S7+` zZ7{JgGPjfK`S3xp;q~y$& zp}fmoQ=n?XXQ}78A*oZR=d&}lJizDb-Sjtcg~M7w)4)k8iYRZ$Dv^Ww6dv}=#5f+Z z8%CQ*qMlH(NRqaCC;!=7(M4j7`~=8jGJ}9Td5Q8k>)JI{-K_mzlL6nrdBkW0L1-_a z-y*d92J}_KNotZGbH@WpGMqyXzm5kIB-;|+W7#p(LIb0Z5G<&3#8qzqT1){B^Q zYKvF&ub$K~w1BaVNXs{LH7(>$gqfsfmziELW54g~S!2t$r;N9JEnLGg9}jui84eA- z0M%dVM)FKkbI?~Z533*emb|f=nf$1gi4Uu|KXNq=)Cb(^Te&z2Yy`maCBi>9M~h66 zRJyM-^!&6e_u#Ao!p&*CY}We$`$3Vdgq#mNi|gNiy}E?u+<5J6Cj9Dj4*zroL%5fb z&9`h#wSgTlZDT=N%hYxa@btrt`{+#mJTR7nBH6O|m~uwYN8uq~5bh`a+y7Hmh`X8$A)6fVS`6ZOS-uHjnhRI;EZm@0P^V2&mTbS;|{Lk%%3(l5TF zCi7E79{L$cEVtImi@WxUk9IsT#$Cw%byAW)4{9Tj{O(v-1A87IN!A!}3cmPsb%`f) zf1J>dgz-B_GmL;RymJytF-7%@ssws*9~iz9agJ#d`*3n^VBI5`hta)Tj#vM@IG(IV z(ok}9`csf-VIA!=itQRN|J|p5=N;ZnL@O2bVkBkWSFY1zrGO#2upbw?r6f-X^%n|K z_7~J6mV_kA;1zR>zgG#0lgTj>G=8`M2}Y{k#uTJ+@G=HQ*v5i56$>2##RMg>10giZ z5eAOCM+G)R>BVep6`l zZr#)fTodTa>8oF~*7??VzcpytfjUyayqh)q!rvfV&~QYy>V5x{IoA7r$aQC#1n`SM zhE75t?A|QBosqP;JzXuB+~+=c6V0g0HrDp&PRW~X?4@4m*LHckn}}ZzhqStQS&ro_ zY&fZU^=GxdkmABh0cZt}ewCGWT*lof-u#CkHAt9G&~3YX%FsR;&8EZF8_Yb>VvQ2=vBv!Px;sZie4FO9ndMfK^zH-bG)9h__^xm4YZHLe$r1kKDbQ!KeJY<#ohb;B5d5 z35a$V~hGOb2vUH@KKXdb5POmnWZ{XaBZ=Q;CE=FtYL~ASn+P4Aq3(@$1UUN4kE%2~t zAf6+A=c8XY!dOemilt?C$$LtgHk21t`_;@^)YiE3k`S5>$KslnOXDdHatYpLxf1jT zw5c;U4;qI$?QYSB1#*=Pr3%Nv^5qV{3-eJ}bE_>IB5`dLLP^r!^7&mG43)#DmkJ|A zws^An+VMQL3F9P~;kNBbl}q93S9WM1gA%Mcez>4T3xoQ++4;B9ThaK4Jf9wVWlfhr z<#id0l-rz(94HkSRdPl~rCm2RHFD%erS_G(rQk~019ZC#j--AOSx$vQL>^UIkKK7+ z>A^gjzUEFY^Fs&exxKT?@$)9W<^4FS`TjeUyco}av zcia(;O~@O03zoKI0>I-op{4(2_G16v$X@>w=EB6t{GU%@!)e-fC|szcI}cRT2luG& zI^OY!$W1?1DlMuT977_1Ac4t*XzSMPdPiC0Sb*hi3d7VYc<*p?CwEu`HbheTfi(XJ zu5;EYHa+?CTU35eTjBf(%*Y20FRKQdS&xMj0zg3(IIS~lB!cJpHxCATl16#%_1`m+ z`@4`oiPq`yAz{@KSs-W%8Y>}yXr+2WB8r?F3S!fPDr6lC!q3KomnP9t8~|Z1Va0zj zieK!iX#KW_#BIiwBk4|=cw@*AVEW~e=;`b)uiB`FTmWy1hZPzLWYhgN%NTXmgK2=w zh7LnZl}A{o%q9i7YTRJBYq1y_rUx2L20vt#Oo|_5a}MQ+lpqVbSLT~#MXLwCH(ahh zZ#7H-hxZ5cV0UkD`2MYThDJlr=kxw*YNfQbQaZ5+UOE>-h=5TuAm)qwO48ahbtEl4lYdkZK{dWR@T z7Xj(LgG!g)J1D({2qB?_kU4n&`ph@~+?o5$%)RqGVeNOV{jRmn-p|=PIh?c4K72bO zp)2ZBZSCGG0&8O6RIc7xrnT;BU!Y{6ZudbMgi$sw!;^nlDTKW>f<%?hk89mC%)@J3 zRnN?5=fL^2oeTP)G|HTR)!uhMUsY-GJU_i!Z`h-p7bs|M2NTSOa)X8FJUWr^ebWdX zF0h7j1R;yN4BP!XiQ8mh-;q6H*K_PSi0u{M=yIq6HBjWKhgLy+w^fR@-ORxFF8dy5 zw`qPEg@Ql5pMzP9g_Wshfisl9>xWHLlOMembO>SF;!`CLQRc5(5-+LyzUN@?^lub7z1~7pUQtjN2ruw4yPl+n*y4yY z)pOjPoma!G6ZWNv6qgr&6qtjw?DzQSycXORYn`3@V1@Rd?tHTMQoCD&ia7Z*|`u*;L*KWdIs9fJwa^a&-ggfuCa zkNOAZ9fSuzjuV06#H1q<8BI=;3*f{w+ixWvA>ak1|M+&%^aZ0x#@^&h!$+s&J|DcaTR!BcHo$i7t{pgKn8Ld^PR3pLEQF%g^wm*q9ag^yC5&0i7M+;z=<{BDOxpBy-g%?3DIOCL-6z>pqJ5Oa87JU)~A()0`C3A_p@aG>vy-f@J$aaYr9YO1-{$Wjfs7i+$#OB z=hC`x1T6Yldx@qZ8W10|%2YQ$EhKfrtZ?rssn^~3^)i8)NJ)K+rI54^<8PJH$oCpA zaoo!~Ayr(S{Dg+`FGP>fWbUpO!G~W^ZeUal!>*+S=qa{D=SS)Z_1R&vhy*m2ni-i^w7C82*HFxIe=Q(PD{t?U zIR-xZU5GCw>@!n2@}|pmrI|O&|AUa^rc2n5i^3cDaZ$WA7k#wCKt$C{%>khluGaM-^E8I$-k%xQJlTU|0HIqVSvp`p-Y21BVj)&D&Jg` zX@!kSrPqt}^^0dxSv*vmFK!Aa1`c*)@d$0cAQnyx9+b-FS))6VZxDE$`YbxjQdP2m zZTy}BA?Vr&m=q*60;T{3kASH`9V1{m(6v$ULy*)cm>Cp23T6j&jDk5p*T%ryAgM7h zKPY$%EDY)x1B-*Mjf24;sd2CjD0m#K0O}YAD}%00fYm`#6JTvn@B~;N)G+~ufUZq~ zO+iwVU`tT&B-j?zF$s16U7G^CfTX6t9-!bUun(wX3hWQMHVqC0Nlk-8LBZ4D2vEl~ zI0kfW2AlwrngOSPf@i>~Aa7p@|3wkVwuQv`95ewB^9>m)5+(2RJX`E!)nmRXSKQjM2u`-rS)}$rQIIC~lKe-qxbLolJRq zf|C7z_wyOPQA@i}pP%O9h-tL9s)NI87Zz&U<~+PKpxNsG1wW&E2MTdz)$Pp*uO2tl z{-e0xP#gd1&k!^5^B$~qw0+Tdt{QuACkK&?Il|3a#zuIYgNr@m6#suh5%(&{@c!!T zgQ*)0{5>_#O9@=;|2z|>q!Oz;<6mMYq0_bW80ZqpK6Ii5W}p&l{r>-4)_>gs4;Oou zssA^kuF834tA5wd&;!gN!bq8s5b5H`vQ}B;GGo)wQCvj~DWe)ahIvdN{~ zNcdhE?TZGMDGnF-!#@(N{=3-_EcSyIer7-_Y#>s{Mu@7tr}P^tyoYzoE|s ztoRN6F5t*-=zjtCf5X=oki_dEZr}yv`VE6GpxSR3dI6n(!>|h&{~JbJz>426>H?1Z zhA|g#|2K@gfF#}*aT6{e*Ke3~0o8uP6aaq1hv5zmn-NenmM9>=v-K>}72}7)Zo%>c zQ0Lv5=je0KrB=+|)=AMAl5*+HwXPP68l48N!deYaR$Vq^4AN&KkZE1tpPRK)`)&ch z^S9w$3SYav?{v*RH%qB}WhKr}K~EjYUD}7LEav1Sg|E0kU?-JPE=CagSbrnP$|=gf zZIK?;*xb5U-#RFIuZomjdmVRaBpKBHhnM#MxKqd`hpS(la3gk(s&|R>Q9!+udl#Ju7kN48}1c-N*d5- zOYpvOpH+j3btZN?jrYClLu4il_uR=-Nv6s4=miM$qZy}c*PJd~csuC~nIzbP2rIdDXeaLDj$IBT4Nd_lkCpK~1>tS#ge zn6vujvuNP^S|APHYv$$Tjy>m2ij9_-r=fHBTnRBW1~Ep;&4kalxcHb$ZqR@El4_+A z`$G05;>w0Fi#V$zS@UdF3VdEgun#u;70V=q+`^=c~8qy^#P_t9WS38cP|}$Zv9R*?h00QUCbTyz`aK4Vio7Qfh&w->o)XZUkvWtf^0ytzp(~ZiEY4G7YUwFZ z4ZpJ{k?;TU6CKW_`{8Zzn*{7aDRZoHc~bI03g^!mjxx8-##3bE-S}16$C)I@nXu#1 z{_Ki7tnjZKUO(AQa*5c_BBkP#Ix#a zt7~_g3MA(rVCSEmSLnWt>0~_3DRX4qkv%-AE{QH~YZJ%y6q=1c%^H%Jw+W&?H(W$( zB}?#ph6!vpG;a|{T1!Nh8+%oEJ|w(q8zSu%CS9E=JqyCu*;v`@=vUe_52HzRePb$jdED)uM#8RCs9Tr@ z@tu1-Rc{Lt-{}tF@W0GxYkv6;2fNUJ3NhQ8$+(o-GKOT*k53qMfQP?$gItF50=u5!ODe}dyGs>$H%z*`=S`~US4`5i zZ;Av-I+mT_{Q{0Rw;{<2Z!~8K+lgzprisU7-i;7&9Hca1Emskv7!n^d?HUTNp}wQu$BYWBy8i>hU* zb4*1*aW&66sp%6aSXnI#kUHYvpUuh)bfr9u4QmM~K*;r)VU7!1>up+EFY$$5h?VQ>O;;FCW5qus>a} z{Abm4Apc^krjg1~PuR{5>}OGIroXr0EdAi=P9Jgumc5CPfX;hplke1Qv7bZN2Jr2~ z&ZwO_cE$uavluCQ_zt)9PCplxJ+ayv`-FHcPeDXBlQK4z(nh*6J|VvLO+&3JGf(MdjrmgPxf-_=@e0&h)ghCCv5=y1ElTO~a8&DZ zZ_BpH!ABo`yCcG1duxsXeBGJ|4U^Xss7oY`#oB&|;E6ZoSLKc$7SH3~|Dh;W&ubjK zz@S)!t9@$R)5s-YLMv|jHhOl)7?kdiQWujoqFpP%o}QvC(5f9GKrKT1C6;a+rsG^w z!*Nu5@NDwy$)1J@(ktn98V>6~_<1;{n*;3Qq)2xMVg6&`xzcg0=Lnouq&bq1&iU8$ zyFxs^p5|-b#GeXJU3dmbKJ7XU?adr!UDJcTd@U@jWn}B@Yvmc>qiX0wRKsJ0SN>5W z{gqbTmhJnP_djghm#9*XCgtsuy82xn9H7`Wwjh=?Jua8qEk~3z5v$dbRp=2Z5vd}m z)uj=hH#!ndae9?pwdr}WqJnlFdAP2iGSfH)%`SG z%l?NznK11m=n#7grSw%b9!6t<9?HjLwj-=clJ*#L(>d|P{g!0pjDs17*8HqwW&XaS zXK=VBcg<0zK)i=aoHa95lS%8O&C{7(UltY2J+WyDqmtBook+U7;l1sv@>s!lOh+$* z^jwBk!;d$sMlyQIocE;+4Hqg-ydRFJy+z?B>!4@VWhXD*PO$JV@f~#}4%}j`z)$cz zAGx&PZP~h$STH0p#8zdr>Fx9F75yiBoF#L!xC!PAX)fYhnLZG!8XkK?FxM+yY=e0* zqE|wz?A-m2W)*?|zzTR?9{#`G9RRi-q1@lkW}hH98(`sc(&$ZNE@lEx#U4YWl*bpJ6hm zn^c`yZ1R~VYWhm#wmQxn+Yu+wlBwQPW1Oohm8nScxjDK zn=D#74TimZ6z5jP580I8Y`H{U*~!c(M;8lxClx$ubs;q5P)Yv6cLdBuV>dz!;*>ZQ zt+E$}6BiRRvOlWU(#hWKoIE8bWI{1Zfk#TWUgxw~*1!3MoV^HSM|L84Up zt)6o?;kMgtcVe5pKf&nyr%YxMt={MZZ@IO@LmMwo;hhstgv1%T9wkBBfj9zD6 z-RGupzWMse)zmB2>{&KF#NZVg5;d??aM(Q(hHAz@k%!HUS41Cnkby-R{!rXvP`>F5 z4kH79AYKk8W(gK#==g1t3F85OAX$zgwh9(x?4V*8yy<*lG9+FOB&H0mf6#HAfrFd# zAqCSJ{;4Cub7lDVNYe9l{D6X&I!#2Cko5(FyCp=4i$bWf`89UdZ!Ie}>jx4qu2&=q zTeJ5#IkB5u?o(dodbjf6Ixjh|zMPBg^qth()I~ZjpQobU8lUuz>nmBJ(k))%%?_04qo2eJ`$s}^e#+nytqnm}DK@aMcqe`*w ziQu1lMU{BUeps5hP;R7Eaqy?5&38+)4dxVk!i6fo3W_G$N)PG)+wgWq|J&c%M{=Qm z{!2IL8Qp*JnVg|R3?Sch9{Q+H0-on7)D9*-dhwaWn|UIFcsWD9=3#KXm3qldhQ0Ti zkHKNS{~P8&V%SMvStIMsGLI>L8<9?nmK_#XDuw=u&*1g1&AySO?&`|nX2|WFU(H(! zKkr)BBj#G?Au`y!Bk^0EfT6GyuR^^Hriq3UHeHmBQ7$G~)34a%B zLV``v>kAa_Kcm1Nw*9rbN+Kbmv#q<+tsYZ-Iey1G5!p|d@Tk%2v+7QMCUg0Fl=gC8 z4gYX%{Ew^>7Wn%rVLk!=e||(2o^I?&BaqU$gksxv4h}Ks#JttIcH`=!eeJV#wIUD zy~285nbRntwNBq4VOFM^Qub=hqnL=FM&k%-G3pXBo=AO}ZneWN-3&1<;F)`}xt%pk z(p5o8f(e4`o8IA%U6e7) zd7&OrSnsK)k)JcNR7@%>$kGiRF1UeM7fb-Gxdfn1*YVPnWxBKdSXmYc?CD;Ph_|;d zvTvv^z~6Nry}4@PdC)%6OT-mJeHFJd((AckLyPlLyLt(|ySX|uwnwBhRmS0S);S;~ zema&JvsZG^iJH*l*0Oh>R!~XC zXzAnHN_gX_AG?Neo(g@%0jGn#Ma#_m?(pukU6W&>W9>rz`1Y#`=3edE37EcE;RGZ6 zlp^sV+^^SDzaz%_m6_EX-|T5AJe8s?r$h;anM@^0(XK^x>SHIj9rx)KChUrqzPH*V zA4*l}8O->_+GG1mj2k8r4J2m$5>l3#Vlf_@h>ES3i0Z~l_&K4y;algWT0?U4k>b4> z>NF71fc9R6{T&1GD?Up6e6I$8M~RW2T7kz&s*;oKr)s=Ejg}P`+d0%ul)**q5p_a& z_IuW8j8*pV8lfx@dID-um*YEY6S*yGfM7w{rpA2+P zz*Ph&DP>tW{k<`*BJk5wClcissQrgD^3X3gW%cQ~zQs>iMcHy_o>ArCV9cStsS(NX>2Q1;kL{bzdk|i!HUTu}s;4p{x0J(nji4Qgz5UO$#*z zpKRIpob`&tYQYA#hsa)M)=0=Lx@vZ$;+FYHsWnUcuK&C=6$OiLzKsV%SVsy00mA_@ zJ<89db$|$7@eaYc1X+COx1O)N+_5qt3Gy0U>pYo@6j8Rj(!i?Z?C;xbrYB63OQtEB zBUlnCt@cFIj#Zo8osN>X$GW_SYZDxj^s&S3Qx%3@J~5CWt%RbTMG z0bKyZY=+0f7<0b&^pU7ptgeM+-18QC_&KVXhD1vSk}^wnP&p1H$O95Qxk&I_{j5mq#q^@CAzNcvHOC`h@ zfdrUT-69qS6uB(#n~SN05@EN*dROzZF0>PoL>OOy)j{Pt;srzje#@I}v-cTf@=Poa z7Qu{npgyt+XyYPrFurcWRf~a&tKNF9yU!r{_6g0rQUI8Y5>0^dF~$OQJ&fLZJO^_B zW+LR2JsADD254tu03qOlu*B%S^{X-tM#zcptycwQ;Cxlf37F9#&HWcBr9m9pWVW-RZ;_sSbJsotqH_Y-ItN9cjuMPKdDrgaO zd`1+Q{k`5X3uo~~v9QJ`p|IaEnz}V%oxc*MS)S(w|99fyx!2pZK2tCG-NY;#@IMGL zl7MF4S`RhDA50Z0fmd$-qX_1Y=vBO#ON@~-PBZjn8|Gy|lUSz`V{U5S1n-hvc5n8T z^U{klkltmC69%f}E?V&nIKZb6iWO}VjNIqFI2f@EP;(LECa~q_E~D=B&5GD(G9lBl z4{`xDPK^N_{#tlZY`yt+Gp>w~o6^78ybW;N08Y6zsVV)}9QiQlHBwNA_?2)9pjHaM zBKBoC6VPVW?k20s-))x7LITl-y@6a$mVyCCKQh4aKnZZ{699})gMkA`aRfNe@BuX| z1W<>;K&>?c5Vo4wl>V|laA22!2M}amQ~djBFK_-OxLm1H0!(W-9QyILa7C=0TNRx&>bTRKzCR(0o_>8xFmuUkn@^NE>J~#bcmHB9o_OvpNAFhaPl00XBmE`SNGR_q4&KEJN8o11mzuj*xdKz)53P`?C{Vpv~34~O0@ z&*~7rt*dHEfBgw-MeG%dq-ojzEVS{@BCAXV&wzvc4z%@lIM6L2Qb4zWbAYC`@XJGf z0|uZQb1%A4t@s?UXU_wws>5H^ic=j^`p#`*AV|?gx2V1W8m^7|_xFP?7RVUL0CdY& zV!-R=O(4kA;J*fWhR=i^iJ<5Z*QW}cmaXUql9e2&?B;51ghQ*hMJr;p(^=4Jo6RH` zR=344=v`q)pdsl3Ktl%aSHwQw0CtYeLdxu#4SO@9xh`nB#tVABHpFg#8dgezxi>x$ z2EDUw+aZ3#ozIkBu}1!Y^lw^FBQ+4i=psfb5JOc5a4IPJCnqYvDJbfKCIir_fvJCd z*71PU#|8*!!VA>BpWbF~aH|~NgR}H9-E^0~bffV5YIY{cFr5C;r{x8xfE|Nw9NxNnrc?(T8 z_A359(v;=@?nsLjcq?MH!kN((>?0lG+Q7){{wzg?@k+Kfr7t5@+FjAg35U|Wa$rR7 zUl1S{go<^bVcn^7VSlO6Twvg=sP{0Xe|siU5i5C~KHbfLQ{G*P3t&Mz_q35=1Xq`U zAP0yJal#YNe?g;|0=%-W0A8wZ059#4zp5p`H+O~MMFy9P3^^AWE-K@!0d5g66a5Bq z)qvBZSs)cD97q*@!I%0gKf4p)51Rt~GJxMOsRRMv1H!lh-+28O=T+)D;G*OTxa01PI?f3e12sijsiQZ+rJI0lM=CFAhx@ zFv_I^Ox}TTXtSngkD_%dpmp>C9?NS0ci+X7{tSXed;UC%;JVWxevCa@5Z|}pI#t>Y z%CuO*o?$BM(Y`g$QB8e1)9%|%^d}1#u_MPp$Dt*|HgVyTpJ%8}j6*_wZel(q!f{0l zQ**MhA%H{eZf8#Q(YrfJkEKzTHO{3ObEvvwLcDg1&-YJHYahd{)^X@Qcv@eP^+T1a zpPQ=~WYN?DJx8f_+fy7IHDS+-Lk_Gp&F!S+o>CiFH6@m9FSWJQx3>6uJG-6?c_9W) zb_(`4SBs7$j13n|b++rNf=XT7vs2{bm3mixY|eJh;l6P6C{elGnNh39?Uhl&%5ccq z`w0$Rq90w{4xTvlt_>L*wfMV^pfvDW&reSSmYK!Fhi4zHcJAG3B~ebr3=}YxvtIvY zFVj6(UA2|!$hl-FH-EInoDeJfSY<~dzCd7o2YE#4h2V%aK0k<^v-y!B)+tn=67y?2 zf2U2<_w?+{$n#)V>lo^dc?I%6*}?qs5%7_KG`IQ%_#$5&y)A+CtX+~#H zLp-A_7h8N?_bHCb%5qPS8lRt6liWfZ!<1UyI@@9EN&I$~(oKReY_*|5<_-$5WGz zw&q{=L=5NG?sYQ2dW3@R+`mM9-V)+ae)p@y1}h2ev8ao{>_RyKkzZ@0yxDcMzq8ti ziAEQfFt2$u*{}Wmm)z;8zH>jS9(g4%*TgfKkrtDOI+$G}Zff`=id~U&I?Peps@rQcUR11HQ@gL)RR8IBID> zvTz@!1)6*lcYam(YmtTr6iSz1R*MTZ8{|4_#1(2Nv2K2fl}gvS#d77!m@$)msL4&{ zB%1e^3$ybGMFXp#WtI`eq}e(qg0CL!etGk5Kz(+cpfOChJ?8TdoRJdAscH_2 zfnm09L^I4`mW+V}>_Ht#WV|b#23>Q?t48Urx5K`K2Wwf)ls~e6w_ammG1Ol_Bp&FY(B|9 zHI@n3`&dtuX+d_V-ch>}y}Gj_Q08BhN+cZJ=SYGq`6Bv0T|V21j4lgnAE>V+;QPxB ziE?Y|J{p2n4(J=z&em$~o=Q#XSCEGnC8budbS{S2M=6ng$u2|?%VKXPe0QEK7;DRo z=vDiKAnG1By=;85v&QVboay8_>6B6+->y&SEeZaSy`XzJ1SO+9H?HO^H&ifK8c7@y z!%2BM%H7>X-b;!m{;e|m3FxrZSVZtc*#}{!-XnX4F}&oSS8)-q zSduo49YzIUDVqyY$w~Ub;VYQ*##9b`?nF#5_{k`8e~9E-SVGHmTJ-=8HujP zk>3^LP`URub>uBSB^~XJfb->V4^-$=#2?%_I6T?nzB9S!PiOM_ktoLvRJ_?Se05v} z=E%9&R)373FI&nm#{P1l8_;{lc%=NUnx=o@DW4Hxr|Pr*jHesAOHySOO1H@7D81vH{9pYk71p%Nlm#8H6lw! zyn)o~Q!5CwJ}0H@*qCU9o?<*>iTT*m({5%T~&U&n15>Q!=iU%LG&NOW6g9S8>^x z%zxLFYr#NqiQqC8QXP$d^E%BY;tt+WTeEo~5oCe2!~r;WQk?7c#~vAXrq9xaaPXbC zQ`Ifue?4Cu7g0PGS3LA2?e|5oZ6AhPH0jm<@wAeiUTZRb{ zgq*$PwuB$PINa~C_rCP1sWpyr@jkBGBy`4#OC7T`rGY50bc%p zx*J%c-RCg(l(-r5_!y5Oll#pB%5HITY1KoHa_*IzPQYdcfoMciP729Ps@Iaz>UeXgv#c8*{gl)zT^MJ}ZNh0e22ZX6m%ef=eRGug5w@koHM0tK!ixsL#s^tCz&J(@Ab(v;y_ZhUc;! z;YIZK$1+pvviX)iMLJ7FPFsYwaF}IQ?5V1UkJ1y5(N%EIN3M|#NtgO{-a0AX8OU?? zpkbbxt+=UXLF~EqS@m)CrRQZX`Grfx_p^h(-*PO-QpL8{C>v=KKU8~@d&LL3^(r09 zi^?uaOQbcJYJnh}f?@9RyfnL>PR+pb<5|R+FjK0kkPJ%O`V%Thv1U}yM}LytB~LN& z2JPmkn@ymG)!<;Wp?t-!=%l9%kJ|#C@I=HWi6$k49K~ZbS`)AS8X^CwRkQj_A@4Ww=MBd-bw&7=!ZQ@4}NxcESLm$nf_)4MUCsE zZwZKw-6Y6pr*?0%lx`%~=SA$!EwRG$e>ot@%0Y2kg)Fog_deANy#PZMnB( z3!qXKCq;a85L-}a77;35e3Io{$z1v&G7#af2~5BE}BA6yQ4JxRY*!FAJ2W3wr zj4r0Sg13j|4qN(l?y{b!FuDmdA48Q*c`-gX1bc9vwz~+mA8VNsfUZp_8AAichE&r0 zf5xWyZ;gC%w0As32k=9?kqCdYF+@wtmTw!RuOkCW&T!49>Ur<0m N=;>`HCTSI!{|0BxjMM-C literal 0 HcmV?d00001 diff --git a/src/bonsai_database.rs b/src/bonsai_database.rs new file mode 100644 index 0000000..6317c78 --- /dev/null +++ b/src/bonsai_database.rs @@ -0,0 +1,92 @@ +use std::error::Error; + +use crate::{changes::ChangeKeyType, error::BonsaiStorageError, id::Id}; + +#[derive(Debug, Hash, PartialEq, Eq)] +pub enum KeyType<'a> { + Trie(&'a [u8]), + Flat(&'a [u8]), + TrieLog(&'a [u8]), +} + +impl<'a> From<&'a ChangeKeyType> for KeyType<'a> { + fn from(change_key: &'a ChangeKeyType) -> Self { + match change_key { + ChangeKeyType::Trie(key) => KeyType::Trie(key.as_slice()), + ChangeKeyType::Flat(key) => KeyType::Flat(key.as_slice()), + } + } +} + +impl KeyType<'_> { + pub fn as_slice(&self) -> &[u8] { + match self { + KeyType::Trie(slice) => slice, + KeyType::Flat(slice) => slice, + KeyType::TrieLog(slice) => slice, + } + } +} + +/// Trait to be implemented on any type that can be used as a database. +pub trait BonsaiDatabase { + type Batch: Default; + type DatabaseError: Error + Into; + + /// Create a new empty batch of changes to be used in `insert`, `remove` and applied in database using `write_batch`. + fn create_batch(&self) -> Self::Batch; + + /// Returns the value of the key if it exists + fn get(&self, key: &KeyType) -> Result>, Self::DatabaseError>; + + #[allow(clippy::type_complexity)] + /// Returns all values with keys that start with the given prefix + fn get_by_prefix( + &self, + prefix: &KeyType, + ) -> Result, Vec)>, Self::DatabaseError>; + + /// Returns true if the key exists + fn contains(&self, key: &KeyType) -> Result; + + /// Insert a new key-value pair, returns the old value if it existed. + /// If a batch is provided, the change will be written in the batch instead of the database. + fn insert( + &mut self, + key: &KeyType, + value: &[u8], + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError>; + + /// Remove a key-value pair, returns the old value if it existed. + /// If a batch is provided, the change will be written in the batch instead of the database. + fn remove( + &mut self, + key: &KeyType, + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError>; + + /// Remove all keys that start with the given prefix + fn remove_by_prefix(&mut self, prefix: &KeyType) -> Result<(), Self::DatabaseError>; + + /// Write batch of changes directly in the database + fn write_batch(&mut self, batch: Self::Batch) -> Result<(), Self::DatabaseError>; + + /// Functions available in tests to display the whole database key/values + #[cfg(test)] + fn dump_database(&self); +} + +pub trait BonsaiPersistentDatabase { + type DatabaseError: Error + Into; + type Transaction: BonsaiDatabase; + /// Save a snapshot of the current database state + /// This function returns a snapshot id that can be used to create a transaction + fn snapshot(&mut self, id: ID); + + /// Create a transaction based on the given snapshot id + fn transaction(&self, id: ID) -> Option; + + /// Merge a transaction in the current persistent database + fn merge(&mut self, transaction: Self::Transaction) -> Result<(), Self::DatabaseError>; +} diff --git a/src/changes.rs b/src/changes.rs new file mode 100644 index 0000000..1195e48 --- /dev/null +++ b/src/changes.rs @@ -0,0 +1,155 @@ +use crate::id::Id; +use serde::{Deserialize, Serialize}; +use std::collections::{HashMap, VecDeque}; + +#[derive(Debug, Clone, Serialize, Deserialize, Default)] +pub struct Change { + pub old_value: Option>, + pub new_value: Option>, +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum ChangeKeyType { + Trie(Vec), + Flat(Vec), +} + +impl ChangeKeyType { + pub fn get_id(&self) -> u8 { + match self { + ChangeKeyType::Trie(_) => 0, + ChangeKeyType::Flat(_) => 1, + } + } + + pub fn as_slice(&self) -> &[u8] { + match self { + ChangeKeyType::Trie(key) => key.as_slice(), + ChangeKeyType::Flat(key) => key.as_slice(), + } + } + + pub fn from_id(id: u8, key: Vec) -> Self { + match id { + 0 => ChangeKeyType::Trie(key), + 1 => ChangeKeyType::Flat(key), + _ => panic!("Invalid id"), + } + } +} + +#[derive(Debug, Default)] +pub struct ChangeBatch(pub(crate) HashMap); + +const KEY_SEPARATOR: u8 = 0x00; +const NEW_VALUE: u8 = 0x00; +const OLD_VALUE: u8 = 0x01; + +impl ChangeBatch { + pub fn insert_in_place(&mut self, key: ChangeKeyType, change: Change) { + match self.0.entry(key) { + std::collections::hash_map::Entry::Occupied(mut entry) => { + let e = entry.get_mut(); + if e.old_value.is_none() { + e.old_value = change.old_value; + } + e.new_value = change.new_value; + } + std::collections::hash_map::Entry::Vacant(entry) => { + entry.insert(change); + } + } + } + + pub fn serialize(&self, id: &ID) -> Vec<(Vec, &[u8])> { + let id = id.serialize(); + self.0 + .iter() + .flat_map(|(change_key, change)| { + let key_slice = change_key.as_slice(); + let mut changes = Vec::new(); + + if let Some(old_value) = &change.old_value { + let key = [ + id.as_slice(), + &[KEY_SEPARATOR], + key_slice, + &[change_key.get_id()], + &[OLD_VALUE], + ] + .concat(); + changes.push((key, old_value.as_slice())); + } + + if let Some(new_value) = &change.new_value { + let key = [ + id.as_slice(), + &[KEY_SEPARATOR], + key_slice, + &[change_key.get_id()], + &[NEW_VALUE], + ] + .concat(); + changes.push((key, new_value.as_slice())); + } + changes + }) + .collect() + } + + pub fn deserialize(id: &ID, changes: Vec<(Vec, Vec)>) -> Self { + let id = id.serialize(); + let mut change_batch = ChangeBatch(HashMap::new()); + let mut current_change = Change::default(); + let mut last_key = None; + for (key, value) in changes { + if key.len() < id.len() + 3 { + panic!("Invalid key format"); + } + // following unwraps and indices are safe because of the check above + let mut key = key.to_vec(); + let change_type = key.pop().unwrap(); + let key_type = key.pop().unwrap(); + let change_key = ChangeKeyType::from_id(key_type, key[id.len() + 1..].to_vec()); + if let Some(last_key) = last_key { + if last_key != change_key { + change_batch.insert_in_place(last_key, current_change); + current_change = Change::default(); + } + } + match change_type { + NEW_VALUE => current_change.new_value = Some(value), + OLD_VALUE => current_change.old_value = Some(value), + _ => panic!("Invalid change type"), + } + last_key = Some(change_key.clone()); + } + if let Some(last_key) = last_key { + if current_change.new_value.is_some() || current_change.old_value.is_some() { + change_batch.insert_in_place(last_key, current_change); + } + } + change_batch + } +} + +pub struct ChangeStore +where + ID: Id, +{ + // Newest are inserted at the back + pub id_queue: VecDeque, + pub current_changes: ChangeBatch, +} + +impl ChangeStore +where + ID: Id, +{ + pub fn new() -> Self { + Self { + id_queue: VecDeque::new(), + current_changes: ChangeBatch(HashMap::new()), + } + } +} diff --git a/src/databases/hashmap_db.rs b/src/databases/hashmap_db.rs new file mode 100644 index 0000000..df37e1f --- /dev/null +++ b/src/databases/hashmap_db.rs @@ -0,0 +1,136 @@ +use std::{ + collections::{BTreeMap, HashMap}, + error::Error, + fmt::Display, +}; + +use crate::{ + bonsai_database::BonsaiPersistentDatabase, error::BonsaiStorageError, id::Id, BonsaiDatabase, +}; + +#[derive(Debug)] +pub struct HashMapDbError {} + +impl Display for HashMapDbError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "") + } +} + +impl Error for HashMapDbError {} + +impl From for BonsaiStorageError { + fn from(err: HashMapDbError) -> Self { + Self::Database(err.to_string()) + } +} + +#[derive(Clone)] +pub struct HashMapDbConfig {} + +#[derive(Clone)] +pub struct HashMapDb { + config: HashMapDbConfig, + db: HashMap, Vec>, + snapshots: BTreeMap>, +} + +impl HashMapDb { + pub fn new(config: HashMapDbConfig) -> Self { + Self { + config, + db: HashMap::new(), + snapshots: BTreeMap::new(), + } + } +} + +impl BonsaiDatabase for HashMapDb { + type Batch = (); + type DatabaseError = HashMapDbError; + + fn create_batch(&self) -> Self::Batch {} + + fn remove_by_prefix( + &mut self, + prefix: &crate::bonsai_database::KeyType, + ) -> Result<(), Self::DatabaseError> { + let mut keys_to_remove = Vec::new(); + for key in self.db.keys() { + if key.starts_with(prefix.as_slice()) { + keys_to_remove.push(key.clone()); + } + } + for key in keys_to_remove { + self.db.remove(&key); + } + Ok(()) + } + + fn get( + &self, + key: &crate::bonsai_database::KeyType, + ) -> Result>, Self::DatabaseError> { + Ok(self.db.get(key.as_slice()).cloned()) + } + + fn get_by_prefix( + &self, + prefix: &crate::bonsai_database::KeyType, + ) -> Result, Vec)>, Self::DatabaseError> { + let mut result = Vec::new(); + for (key, value) in self.db.iter() { + if key.starts_with(prefix.as_slice()) { + result.push((key.clone(), value.clone())); + } + } + Ok(result) + } + + fn insert( + &mut self, + key: &crate::bonsai_database::KeyType, + value: &[u8], + _batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + Ok(self.db.insert(key.as_slice().to_vec(), value.to_vec())) + } + + fn remove( + &mut self, + key: &crate::bonsai_database::KeyType, + _batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + Ok(self.db.remove(key.as_slice())) + } + + fn contains(&self, key: &crate::bonsai_database::KeyType) -> Result { + Ok(self.db.contains_key(key.as_slice())) + } + + fn write_batch(&mut self, _batch: Self::Batch) -> Result<(), Self::DatabaseError> { + Ok(()) + } + + #[cfg(test)] + fn dump_database(&self) { + println!("{:?}", self.db); + } +} + +impl BonsaiPersistentDatabase for HashMapDb { + type DatabaseError = HashMapDbError; + type Transaction = HashMapDb; + fn snapshot(&mut self, id: ID) { + self.snapshots.insert(id, self.clone()); + } + + fn transaction(&self, id: ID) -> Option { + self.snapshots.get(&id).cloned() + } + + fn merge(&mut self, transaction: Self::Transaction) -> Result<(), Self::DatabaseError> { + self.db = transaction.db; + Ok(()) + } +} diff --git a/src/databases/mod.rs b/src/databases/mod.rs new file mode 100644 index 0000000..27a1f3d --- /dev/null +++ b/src/databases/mod.rs @@ -0,0 +1,6 @@ +#![allow(dead_code)] +mod hashmap_db; + +mod rocks_db; + +pub use rocks_db::{create_rocks_db, RocksDB, RocksDBBatch, RocksDBConfig}; diff --git a/src/databases/rocks_db.rs b/src/databases/rocks_db.rs new file mode 100644 index 0000000..1739501 --- /dev/null +++ b/src/databases/rocks_db.rs @@ -0,0 +1,495 @@ +use std::{ + collections::{BTreeMap, HashMap}, + error::Error as StdError, + fmt, + path::Path, +}; + +use log::trace; +use rocksdb::{ + ColumnFamilyDescriptor, ColumnFamilyRef, Direction, Error, IteratorMode, MultiThreaded, + OptimisticTransactionDB, OptimisticTransactionOptions, Options, ReadOptions, + SnapshotWithThreadMode, Transaction, WriteBatchWithTransaction, WriteOptions, +}; + +use crate::{ + bonsai_database::{BonsaiDatabase, BonsaiPersistentDatabase, KeyType}, + id::Id, + BonsaiStorageError, +}; + +const TRIE_LOG_CF: &str = "trie_log"; +const TRIE_CF: &str = "trie"; +const FLAT_CF: &str = "flat"; + +const CF_ERROR: &str = "critical: rocksdb column family operation failed"; + +/// Creates a new RocksDB database from the given path +pub fn create_rocks_db(path: impl AsRef) -> Result { + // Delete folder content + if path.as_ref().exists() { + std::fs::remove_dir_all(path.as_ref()).unwrap(); + } + std::fs::create_dir_all(path.as_ref()).unwrap(); + let mut opts = Options::default(); + opts.create_if_missing(true); + opts.create_missing_column_families(true); + let db = OptimisticTransactionDB::::open_cf_descriptors( + &opts, + path, + vec![ + ColumnFamilyDescriptor::new(TRIE_LOG_CF, Options::default()), + ColumnFamilyDescriptor::new(TRIE_CF, Options::default()), + ColumnFamilyDescriptor::new(FLAT_CF, Options::default()), + ], + )?; + + Ok(db) +} + +/// A struct that implements the `BonsaiDatabase` trait using RocksDB as the underlying database +pub struct RocksDB<'db, ID: Id> { + db: &'db OptimisticTransactionDB, + config: RocksDBConfig, + snapshots: BTreeMap>, +} + +/// Configuration for RocksDB database +pub struct RocksDBConfig { + /// Maximum number of snapshots kept in database + pub max_saved_snapshots: Option, +} + +impl Default for RocksDBConfig { + fn default() -> Self { + Self { + max_saved_snapshots: Some(100), + } + } +} + +impl<'db, ID: Id> RocksDB<'db, ID> { + /// Creates a new RocksDB wrapper from the given RocksDB database + pub fn new(db: &'db OptimisticTransactionDB, config: RocksDBConfig) -> Self { + trace!("RockDB database opened"); + Self { + db, + config, + snapshots: BTreeMap::default(), + } + } +} + +/// A batch used to write changes in the RocksDB database +pub type RocksDBBatch = WriteBatchWithTransaction; + +#[derive(Debug)] +pub enum RocksDBError { + RocksDB(Error), + Custom(String), +} + +impl From for BonsaiStorageError { + fn from(err: RocksDBError) -> Self { + Self::Database(err.to_string()) + } +} + +impl From for RocksDBError { + fn from(err: Error) -> Self { + Self::RocksDB(err) + } +} + +impl fmt::Display for RocksDBError { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::RocksDB(err) => write!(f, "RocksDB error: {}", err), + Self::Custom(err) => write!(f, "RocksDB error in trie: {}", err), + } + } +} + +impl StdError for RocksDBError { + fn cause(&self) -> Option<&dyn StdError> { + match self { + Self::RocksDB(err) => Some(err), + Self::Custom(_) => None, + } + } + + fn source(&self) -> Option<&(dyn StdError + 'static)> { + match self { + Self::RocksDB(err) => Some(err), + Self::Custom(_) => None, + } + } +} + +impl KeyType<'_> { + fn get_cf(&self) -> &'static str { + match self { + KeyType::Trie(_) => TRIE_CF, + KeyType::Flat(_) => FLAT_CF, + KeyType::TrieLog(_) => TRIE_LOG_CF, + } + } +} + +pub struct RocksDBTransaction<'a> { + txn: Transaction<'a, OptimisticTransactionDB>, + read_options: ReadOptions, + column_families: HashMap>, +} + +impl<'db, ID> BonsaiDatabase for RocksDB<'db, ID> +where + ID: Id, +{ + type Batch = RocksDBBatch; + type DatabaseError = RocksDBError; + + fn create_batch(&self) -> Self::Batch { + Self::Batch::default() + } + + #[cfg(test)] + fn dump_database(&self) { + let handle_trie = self.db.cf_handle(TRIE_CF).expect(CF_ERROR); + let handle_flat = self.db.cf_handle(FLAT_CF).expect(CF_ERROR); + let handle_trie_log = self.db.cf_handle(TRIE_LOG_CF).expect(CF_ERROR); + let mut iter = self.db.raw_iterator_cf(&handle_trie); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + let mut iter = self.db.raw_iterator_cf(&handle_flat); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + let mut iter = self.db.raw_iterator_cf(&handle_trie_log); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + } + + fn insert( + &mut self, + key: &KeyType, + value: &[u8], + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + trace!("Inserting into RocksDB: {:?} {:?}", key, value); + let handle_cf = self.db.cf_handle(key.get_cf()).expect(CF_ERROR); + let old_value = self.db.get_cf(&handle_cf, key.as_slice())?; + if let Some(batch) = batch { + batch.put_cf(&handle_cf, key.as_slice(), value); + } else { + self.db.put_cf(&handle_cf, key.as_slice(), value)?; + } + Ok(old_value) + } + + fn get(&self, key: &KeyType) -> Result>, Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", key); + let handle = self.db.cf_handle(key.get_cf()).expect(CF_ERROR); + Ok(self.db.get_cf(&handle, key.as_slice())?) + } + + fn get_by_prefix( + &self, + prefix: &KeyType, + ) -> Result, Vec)>, Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", prefix); + let handle = self.db.cf_handle(prefix.get_cf()).expect(CF_ERROR); + let iter = self.db.iterator_cf( + &handle, + IteratorMode::From(prefix.as_slice(), Direction::Forward), + ); + Ok(iter + .map_while(|kv| { + if let Ok((key, value)) = kv { + if key.starts_with(prefix.as_slice()) { + Some((key.to_vec(), value.to_vec())) + } else { + None + } + } else { + None + } + }) + .collect()) + } + + fn contains(&self, key: &KeyType) -> Result { + trace!("Checking if RocksDB contains: {:?}", key); + let handle = self.db.cf_handle(key.get_cf()).expect(CF_ERROR); + Ok(self + .db + .get_cf(&handle, key.as_slice()) + .map(|value| value.is_some())?) + } + + fn remove( + &mut self, + key: &KeyType, + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + trace!("Removing from RocksDB: {:?}", key); + let handle = self.db.cf_handle(key.get_cf()).expect(CF_ERROR); + let old_value = self.db.get_cf(&handle, key.as_slice())?; + if let Some(batch) = batch { + batch.delete_cf(&handle, key.as_slice()); + } else { + self.db.delete_cf(&handle, key.as_slice())?; + } + Ok(old_value) + } + + fn remove_by_prefix(&mut self, prefix: &KeyType) -> Result<(), Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", prefix); + let handle = self.db.cf_handle(prefix.get_cf()).expect(CF_ERROR); + let iter = self.db.iterator_cf( + &handle, + IteratorMode::From(prefix.as_slice(), Direction::Forward), + ); + let mut batch = self.create_batch(); + for kv in iter { + if let Ok((key, _)) = kv { + if key.starts_with(prefix.as_slice()) { + batch.delete_cf(&handle, &key); + } else { + break; + } + } else { + break; + } + } + self.write_batch(batch)?; + Ok(()) + } + + fn write_batch(&mut self, batch: Self::Batch) -> Result<(), Self::DatabaseError> { + Ok(self.db.write(batch)?) + } +} + +// Future thoughts: Try to factorize with the code above + +impl<'db> BonsaiDatabase for RocksDBTransaction<'db> { + type Batch = RocksDBBatch; + type DatabaseError = RocksDBError; + + fn create_batch(&self) -> Self::Batch { + self.txn.get_writebatch() + } + + #[cfg(test)] + fn dump_database(&self) { + let handle_trie = self.column_families.get(TRIE_CF).expect(CF_ERROR); + let handle_flat = self.column_families.get(FLAT_CF).expect(CF_ERROR); + let handle_trie_log = self.column_families.get(TRIE_LOG_CF).expect(CF_ERROR); + let mut iter = self.txn.raw_iterator_cf(handle_trie); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + let mut iter = self.txn.raw_iterator_cf(handle_flat); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + let mut iter = self.txn.raw_iterator_cf(handle_trie_log); + iter.seek_to_first(); + while iter.valid() { + let key = iter.key().unwrap(); + let value = iter.value().unwrap(); + println!("{:?} {:?}", key, value); + iter.next(); + } + } + + fn insert( + &mut self, + key: &KeyType, + value: &[u8], + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + trace!("Inserting into RocksDB: {:?} {:?}", key, value); + let handle_cf = self.column_families.get(key.get_cf()).expect(CF_ERROR); + let old_value = self + .txn + .get_cf_opt(handle_cf, key.as_slice(), &self.read_options)?; + if let Some(batch) = batch { + batch.put_cf(handle_cf, key.as_slice(), value); + } else { + self.txn.put_cf(handle_cf, key.as_slice(), value)?; + } + Ok(old_value) + } + + fn get(&self, key: &KeyType) -> Result>, Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", key); + let handle = self.column_families.get(key.get_cf()).expect(CF_ERROR); + Ok(self + .txn + .get_cf_opt(handle, key.as_slice(), &self.read_options)?) + } + + fn get_by_prefix( + &self, + prefix: &KeyType, + ) -> Result, Vec)>, Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", prefix); + let handle = self.column_families.get(prefix.get_cf()).expect(CF_ERROR); + let iter = self.txn.iterator_cf( + handle, + IteratorMode::From(prefix.as_slice(), Direction::Forward), + ); + Ok(iter + .map_while(|kv| { + if let Ok((key, value)) = kv { + if key.starts_with(prefix.as_slice()) { + Some((key.to_vec(), value.to_vec())) + } else { + None + } + } else { + None + } + }) + .collect()) + } + + fn contains(&self, key: &KeyType) -> Result { + trace!("Checking if RocksDB contains: {:?}", key); + let handle = self.column_families.get(key.get_cf()).expect(CF_ERROR); + Ok(self + .txn + .get_cf_opt(handle, key.as_slice(), &self.read_options) + .map(|value| value.is_some())?) + } + + fn remove( + &mut self, + key: &KeyType, + batch: Option<&mut Self::Batch>, + ) -> Result>, Self::DatabaseError> { + trace!("Removing from RocksDB: {:?}", key); + let handle = self.column_families.get(key.get_cf()).expect(CF_ERROR); + let old_value = self + .txn + .get_cf_opt(handle, key.as_slice(), &self.read_options)?; + if let Some(batch) = batch { + batch.delete_cf(handle, key.as_slice()); + } else { + self.txn.delete_cf(handle, key.as_slice())?; + } + Ok(old_value) + } + + fn remove_by_prefix(&mut self, prefix: &KeyType) -> Result<(), Self::DatabaseError> { + trace!("Getting from RocksDB: {:?}", prefix); + let mut batch = self.create_batch(); + { + let handle = self.column_families.get(prefix.get_cf()).expect(CF_ERROR); + let iter = self.txn.iterator_cf( + handle, + IteratorMode::From(prefix.as_slice(), Direction::Forward), + ); + for kv in iter { + if let Ok((key, _)) = kv { + if key.starts_with(prefix.as_slice()) { + batch.delete_cf(handle, &key); + } else { + break; + } + } else { + break; + } + } + } + self.write_batch(batch)?; + Ok(()) + } + + fn write_batch(&mut self, batch: Self::Batch) -> Result<(), Self::DatabaseError> { + Ok(self.txn.rebuild_from_writebatch(&batch)?) + } +} + +impl<'db, ID> BonsaiPersistentDatabase for RocksDB<'db, ID> +where + ID: Id, +{ + type Transaction = RocksDBTransaction<'db>; + type DatabaseError = RocksDBError; + + fn snapshot(&mut self, id: ID) { + trace!("Generating RocksDB transaction"); + let snapshot = self.db.snapshot(); + self.snapshots.insert(id, snapshot); + if let Some(max_number_snapshot) = self.config.max_saved_snapshots { + while self.snapshots.len() > max_number_snapshot { + self.snapshots.pop_first(); + } + } + } + + fn transaction(&self, id: ID) -> Option { + trace!("Generating RocksDB transaction"); + if let Some(snapshot) = self.snapshots.get(&id) { + let write_opts = WriteOptions::default(); + let mut txn_opts = OptimisticTransactionOptions::default(); + txn_opts.set_snapshot(true); + let txn = self.db.transaction_opt(&write_opts, &txn_opts); + + let mut read_options = ReadOptions::default(); + read_options.set_snapshot(snapshot); + + let mut column_families = HashMap::new(); + column_families.insert( + TRIE_LOG_CF.to_string(), + self.db.cf_handle(TRIE_LOG_CF).expect(CF_ERROR), + ); + column_families.insert( + TRIE_CF.to_string(), + self.db.cf_handle(TRIE_CF).expect(CF_ERROR), + ); + column_families.insert( + FLAT_CF.to_string(), + self.db.cf_handle(FLAT_CF).expect(CF_ERROR), + ); + let boxed_txn = RocksDBTransaction { + txn, + column_families, + read_options, + }; + Some(boxed_txn) + } else { + None + } + } + + fn merge(&mut self, transaction: Self::Transaction) -> Result<(), Self::DatabaseError> { + transaction.txn.commit()?; + Ok(()) + } +} diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..8055cda --- /dev/null +++ b/src/error.rs @@ -0,0 +1,14 @@ +/// All errors that can be returned by BonsaiStorage. +#[derive(Debug)] +pub enum BonsaiStorageError { + /// Error from the underlying trie. + Trie(String), + /// Error when trying to go to a specific commit ID. + GoTo(String), + /// Error when working with a transactional state. + Transaction(String), + /// Error when trying to merge a transactional state. + Merge(String), + /// Error from the underlying database. + Database(String), +} diff --git a/src/id.rs b/src/id.rs new file mode 100644 index 0000000..8945a01 --- /dev/null +++ b/src/id.rs @@ -0,0 +1,40 @@ +use std::{fmt::Debug, hash}; + +/// Trait to be implemented on any type that can be used as an ID. +pub trait Id: hash::Hash + PartialEq + Eq + PartialOrd + Ord + Debug + Copy { + fn serialize(&self) -> Vec; +} + +/// A basic ID type that can be used for testing. +#[derive(Hash, PartialEq, Eq, PartialOrd, Ord, Debug, Clone, Copy)] +pub struct BasicId(u64); + +impl Id for BasicId { + fn serialize(&self) -> Vec { + self.0.to_be_bytes().to_vec() + } +} + +/// A builder for basic IDs. +pub struct BasicIdBuilder { + last_id: u64, +} + +impl Default for BasicIdBuilder { + fn default() -> Self { + Self::new() + } +} + +impl BasicIdBuilder { + /// Create a new builder. + pub fn new() -> Self { + Self { last_id: 0 } + } + + /// Create a new ID (unique). + pub fn new_id(&mut self) -> BasicId { + self.last_id += 1; + BasicId(self.last_id) + } +} diff --git a/src/key_value_db.rs b/src/key_value_db.rs new file mode 100644 index 0000000..9bd831a --- /dev/null +++ b/src/key_value_db.rs @@ -0,0 +1,280 @@ +use log::trace; +use std::collections::BTreeSet; + +use crate::{ + bonsai_database::{BonsaiDatabase, BonsaiPersistentDatabase, KeyType}, + changes::{Change, ChangeBatch, ChangeStore}, + id::Id, + trie::TrieKeyType, + BonsaiStorageConfig, BonsaiStorageError, +}; + +/// Crate Trie <= KeyValueDB => BonsaiDatabase +pub struct KeyValueDB +where + DB: BonsaiDatabase, + ID: Id, +{ + pub(crate) db: DB, + pub(crate) changes_store: ChangeStore, + pub(crate) snap_holder: BTreeSet, + pub(crate) snap_counter: u64, + pub(crate) config: KeyValueDBConfig, + pub(crate) created_at: Option, +} + +#[derive(Clone)] +pub struct KeyValueDBConfig { + /// Maximum number of trie logs to keep in the database (None = unlimited). + pub max_saved_trie_logs: Option, + /// Maximum number of snapshots to keep in the database (None = unlimited). + pub max_saved_snapshots: Option, + /// Interval of commit between two snapshots creation. + pub snapshot_interval: u64, +} + +impl Default for KeyValueDBConfig { + fn default() -> Self { + Self { + max_saved_trie_logs: None, + max_saved_snapshots: None, + snapshot_interval: 5, + } + } +} + +impl From for KeyValueDBConfig { + fn from(value: BonsaiStorageConfig) -> Self { + Self { + max_saved_trie_logs: value.max_saved_trie_logs, + snapshot_interval: value.snapshot_interval, + max_saved_snapshots: value.max_saved_snapshots, + } + } +} + +impl From for BonsaiStorageConfig { + fn from(val: KeyValueDBConfig) -> Self { + BonsaiStorageConfig { + max_saved_trie_logs: val.max_saved_trie_logs, + snapshot_interval: val.snapshot_interval, + max_saved_snapshots: val.max_saved_snapshots, + } + } +} + +impl KeyValueDB +where + DB: BonsaiDatabase, + ID: Id, + BonsaiStorageError: std::convert::From<::DatabaseError>, +{ + pub(crate) fn new(underline_db: DB, config: KeyValueDBConfig, created_at: Option) -> Self { + let mut changes_store = ChangeStore::new(); + if let Some(created_at) = created_at { + changes_store.id_queue.push_back(created_at); + } + Self { + db: underline_db, + changes_store, + snap_holder: BTreeSet::new(), + snap_counter: 0, + config, + created_at, + } + } + + pub(crate) fn commit(&mut self, id: ID) -> Result<(), BonsaiStorageError> { + if Some(&id) > self.changes_store.id_queue.back() { + self.changes_store.id_queue.push_back(id); + } else { + return Err(BonsaiStorageError::GoTo(format!( + "Commit id {:?} is not greater than the last recorded id", + id, + ))); + } + + // Insert flat db changes + let mut batch = self.db.create_batch(); + let current_changes = std::mem::take(&mut self.changes_store.current_changes); + for (key, change) in current_changes.serialize(&id).iter() { + self.db + .insert(&KeyType::TrieLog(key), change, Some(&mut batch))?; + } + self.db.write_batch(batch)?; + + if let Some(max_saved_trie_logs) = self.config.max_saved_trie_logs { + while self.changes_store.id_queue.len() > max_saved_trie_logs { + // verified by previous conditional statement + let id = self.changes_store.id_queue.pop_front().unwrap().serialize(); + self.db.remove_by_prefix(&KeyType::TrieLog(&id))?; + } + } + Ok(()) + } + + pub(crate) fn create_batch(&self) -> DB::Batch { + self.db.create_batch() + } + + pub(crate) fn get_config(&self) -> KeyValueDBConfig { + self.config.clone() + } + + pub(crate) fn get(&self, key: &TrieKeyType) -> Result>, BonsaiStorageError> { + trace!("Getting from KeyValueDB: {:?}", key); + Ok(self.db.get(&key.into())?) + } + + pub(crate) fn contains(&self, key: &TrieKeyType) -> Result { + trace!("Contains from KeyValueDB: {:?}", key); + Ok(self.db.contains(&key.into())?) + } + + pub(crate) fn insert( + &mut self, + key: &TrieKeyType, + value: &[u8], + batch: Option<&mut DB::Batch>, + ) -> Result<(), BonsaiStorageError> { + trace!("Inserting into KeyValueDB: {:?} {:?}", key, value); + let old_value = self.db.insert(&key.into(), value, batch)?; + self.changes_store.current_changes.insert_in_place( + key.into(), + Change { + old_value, + new_value: Some(value.to_vec()), + }, + ); + Ok(()) + } + + pub(crate) fn remove( + &mut self, + key: &TrieKeyType, + batch: Option<&mut DB::Batch>, + ) -> Result<(), BonsaiStorageError> { + trace!("Removing from KeyValueDB: {:?}", key); + let old_value = self.db.remove(&key.into(), batch)?; + self.changes_store.current_changes.insert_in_place( + key.into(), + Change { + old_value, + new_value: None, + }, + ); + Ok(()) + } + + pub(crate) fn write_batch(&mut self, batch: DB::Batch) -> Result<(), BonsaiStorageError> { + trace!("Writing batch into KeyValueDB"); + Ok(self.db.write_batch(batch)?) + } +} + +impl KeyValueDB +where + ID: Id, + DB: BonsaiDatabase + BonsaiPersistentDatabase, +{ + pub(crate) fn create_snapshot(&mut self, id: ID) { + if self.snap_counter % self.config.snapshot_interval == 0 { + self.db.snapshot(id); + self.snap_holder.insert(id); + if let Some(max_saved_snapshots) = self.config.max_saved_snapshots { + if self.snap_holder.len() > max_saved_snapshots { + self.snap_holder.pop_first(); + } + } + } + self.snap_counter += 1; + } + + pub(crate) fn get_transaction( + &self, + id: ID, + ) -> Result, BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let Some(change_id) = self.snap_holder.range(..=id).last() else { + return Ok(None); + }; + let Some(mut txn) = self.db.transaction(*change_id) else { + return Ok(None); + }; + let Ok(snapshot_position) = self.changes_store.id_queue.binary_search(change_id) else { + return Err(BonsaiStorageError::Transaction(format!( + "id queue is missing {:?}", + change_id + ))); + }; + + let mut batch = txn.create_batch(); + let iter = self + .changes_store + .id_queue + .iter() + .skip(snapshot_position) + .take_while(|&&x| x <= id); + for id in iter { + let changes = ChangeBatch::deserialize( + id, + self.db + .get_by_prefix(&KeyType::TrieLog(id.serialize().as_ref())) + .map_err(|_| { + BonsaiStorageError::Transaction(format!( + "database is missing trie logs for {:?}", + id + )) + })?, + ); + for (key, change) in changes.0 { + let key = KeyType::from(&key); + match (&change.old_value, &change.new_value) { + (Some(_), Some(new_value)) => { + txn.insert(&key, new_value, Some(&mut batch))?; + } + (Some(_), None) => { + txn.remove(&key, Some(&mut batch))?; + } + (None, Some(new_value)) => { + txn.insert(&key, new_value, Some(&mut batch))?; + } + (None, None) => unreachable!(), + }; + } + } + txn.write_batch(batch)?; + Ok(Some(txn)) + } + + pub(crate) fn merge( + &mut self, + transaction: KeyValueDB, + ) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<>::DatabaseError>, + { + let Some(created_at) = transaction.created_at else { + return Err(BonsaiStorageError::Merge( + "Transaction has no created_at".to_string(), + )); + }; + let Some(last_recorded_change_id) = self.changes_store.id_queue.back() else { + return Err(BonsaiStorageError::Merge( + "No recorded change id".to_string(), + )); + }; + if &created_at >= last_recorded_change_id { + self.changes_store.id_queue = transaction.changes_store.id_queue; + self.db.merge(transaction.db)?; + } else { + return Err(BonsaiStorageError::Merge(format!( + "Transaction created_at {:?} is lower than the last recorded id", + created_at, + ))); + } + Ok(()) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..57b35b6 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,325 @@ +//! This crate provides a storage implementation based on the Bonsai Storage implemented by [Besu](https://hackmd.io/@kt2am/BktBblIL3). +//! It is a key/value storage that uses a Madara Merkle Trie to store the data. +//! This implementation can be used with any database that implements the `BonsaiDatabase` trait. +//! +//! Example usage with a RocksDB database: +//! ``` +//! # use bonsai_storage::{ +//! # databases::{RocksDB, create_rocks_db, RocksDBConfig}, +//! # BonsaiStorageError, +//! # id::{BasicIdBuilder, BasicId}, +//! # BonsaiStorage, BonsaiStorageConfig, BonsaiTrieHash, +//! # }; +//! # use mp_felt::Felt252Wrapper; +//! # use bitvec::prelude::*; +//! let db = create_rocks_db("./rocksdb").unwrap(); +//! let config = BonsaiStorageConfig::default(); +//! +//! let mut bonsai_storage = BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); +//! let mut id_builder = BasicIdBuilder::new(); +//! +//! let pair1 = (vec![1, 2, 1], Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap()); +//! let bitvec_1 = BitVec::from_vec(pair1.0.clone()); +//! bonsai_storage.insert(&bitvec_1, &pair1.1).unwrap(); +//! +//! let pair2 = (vec![1, 2, 2], Felt252Wrapper::from_hex_be("0x66342762FD54D033c195fec3ce2568b62052e").unwrap()); +//! let bitvec = BitVec::from_vec(pair2.0.clone()); +//! bonsai_storage.insert(&bitvec, &pair2.1).unwrap(); +//! +//! bonsai_storage.commit(id_builder.new_id()); +//! +//! let pair3 = (vec![1, 2, 2], Felt252Wrapper::from_hex_be("0x664D033c195fec3ce2568b62052e").unwrap()); +//! let bitvec = BitVec::from_vec(pair3.0.clone()); +//! bonsai_storage.insert(&bitvec, &pair3.1).unwrap(); +//! +//! let revert_to_id = id_builder.new_id(); +//! bonsai_storage.commit(revert_to_id); +//! +//! bonsai_storage.remove(&bitvec).unwrap(); +//! +//! bonsai_storage.commit(id_builder.new_id()); +//! +//! println!("root: {:#?}", bonsai_storage.root_hash()); +//! println!( +//! "value: {:#?}", +//! bonsai_storage.get(&bitvec_1).unwrap() +//! ); +//! +//! bonsai_storage.revert_to(revert_to_id).unwrap(); +//! +//! println!("root: {:#?}", bonsai_storage.root_hash()); +//! println!("value: {:#?}", bonsai_storage.get(&bitvec).unwrap()); +//! ``` + +use bitvec::{order::Msb0, slice::BitSlice}; +use bonsai_database::BonsaiPersistentDatabase; +use changes::ChangeBatch; +use key_value_db::KeyValueDB; +use mp_felt::Felt252Wrapper; +use mp_hashers::pedersen::PedersenHasher; + +use bonsai_database::KeyType; +use trie::merkle_tree::MerkleTree; + +mod changes; +mod key_value_db; +mod trie; + +mod bonsai_database; +/// All databases already implemented in this crate. +pub mod databases; +mod error; +/// Definition and basic implementation of an CommitID +pub mod id; + +pub use bonsai_database::BonsaiDatabase; +pub use error::BonsaiStorageError; + +#[cfg(test)] +mod tests; + +/// Structure that contains the configuration for the BonsaiStorage. +/// A default implementation is provided with coherent values. +#[derive(Clone)] +pub struct BonsaiStorageConfig { + /// Maximal number of trie logs saved. + /// This corresponds to the number of latest commits that is saved in order to allow reverting or getting transactional state. + /// Commits older than this limit are discarded and cannot be used. + /// A value of None disables the limit and all commits since the trie creation are kept. + /// Note that patch of changes between commits occupy space in the database. + pub max_saved_trie_logs: Option, + /// How many of the latest snapshots are saved, older ones are discarded. + /// Higher values cause more database space usage, while lower values prevent the efficient reverting and creation of transactional states at older commits. + pub max_saved_snapshots: Option, + /// A database snapshot is created every `snapshot_interval` commits. + /// Having more frequent snapshots occupies more disk space and has a slight performance impact on commits, but allows for more efficient transactional state creation. + pub snapshot_interval: u64, +} + +impl Default for BonsaiStorageConfig { + fn default() -> Self { + Self { + max_saved_trie_logs: Some(500), + max_saved_snapshots: Some(100), + snapshot_interval: 5, + } + } +} + +/// Structure that hold the trie and all the necessary information to work with it. +/// +/// This structure is the main entry point to work with this crate. +pub struct BonsaiStorage +where + DB: BonsaiDatabase, + ChangeID: id::Id, +{ + trie: MerkleTree, +} + +/// Trie root hash type. +pub type BonsaiTrieHash = Felt252Wrapper; + +impl BonsaiStorage +where + DB: BonsaiDatabase, + ChangeID: id::Id, + BonsaiStorageError: std::convert::From<::DatabaseError>, +{ + /// Create a new bonsai storage instance + pub fn new(db: DB, config: BonsaiStorageConfig) -> Result { + let key_value_db = KeyValueDB::new(db, config.into(), None); + Ok(Self { + trie: MerkleTree::new(key_value_db)?, + }) + } + + pub fn new_from_transactional_state( + db: DB, + config: BonsaiStorageConfig, + created_at: ChangeID, + ) -> Result { + let key_value_db = KeyValueDB::new(db, config.into(), Some(created_at)); + Ok(Self { + trie: MerkleTree::new(key_value_db)?, + }) + } + + /// Insert a new key/value in the trie, overwriting the previous value if it exists. + /// If the value already exists it will overwrite it. + pub fn insert( + &mut self, + key: &BitSlice, + value: &Felt252Wrapper, + ) -> Result<(), BonsaiStorageError> { + self.trie.set(key, *value)?; + Ok(()) + } + + /// Remove a key/value in the trie + /// If the value doesn't exist it will do nothing + pub fn remove(&mut self, key: &BitSlice) -> Result<(), BonsaiStorageError> { + self.trie.set(key, Felt252Wrapper::ZERO)?; + Ok(()) + } + + /// Get a value in the trie. + pub fn get( + &self, + key: &BitSlice, + ) -> Result, BonsaiStorageError> { + self.trie.get(key) + } + + /// Checks if the key exists in the trie. + pub fn contains(&self, key: &BitSlice) -> Result { + self.trie.contains(key) + } + + /// Go to a specific commit ID. + /// If insert/remove is called between the last `commit()` and a call to this function, + /// the in-memory changes will be discarded. + pub fn revert_to(&mut self, requested_id: ChangeID) -> Result<(), BonsaiStorageError> { + let kv = self.trie.db_mut(); + + // Clear current changes + kv.changes_store.current_changes.0.clear(); + + // If requested equals last recorded, do nothing + if Some(&requested_id) == kv.changes_store.id_queue.back() { + return Ok(()); + } + + // Make sure we are not trying to revert with an invalid id + let Some(id_position) = kv + .changes_store + .id_queue + .iter() + .position(|id| *id == requested_id) + else { + return Err(BonsaiStorageError::GoTo(format!( + "Requested id {:?} was removed or has not been recorded", + requested_id + ))); + }; + + // Accumulate changes from requested to last recorded + let mut full = Vec::new(); + for id in kv.changes_store.id_queue.iter().skip(id_position).rev() { + full.extend( + ChangeBatch::deserialize( + id, + kv.db.get_by_prefix(&KeyType::TrieLog(&id.serialize()))?, + ) + .0, + ); + } + + // Revert changes + let mut batch = kv.db.create_batch(); + for (key, change) in full.iter().rev() { + let key = KeyType::from(key); + match (&change.old_value, &change.new_value) { + (Some(old_value), Some(_)) => { + kv.db.insert(&key, old_value, Some(&mut batch))?; + } + (Some(old_value), None) => { + kv.db.insert(&key, old_value, Some(&mut batch))?; + } + (None, Some(_)) => { + kv.db.remove(&key, Some(&mut batch))?; + } + (None, None) => unreachable!(), + }; + } + + // Truncate trie logs at the requested id + let mut truncated = kv.changes_store.id_queue.split_off(id_position); + if let Some(current) = truncated.pop_front() { + kv.changes_store.id_queue.push_back(current); + } + for id in truncated.iter() { + kv.db.remove_by_prefix(&KeyType::TrieLog(&id.serialize()))?; + } + + // Write revert changes and trie logs truncation + kv.db.write_batch(batch)?; + self.trie.reset_root_from_db()?; + Ok(()) + } + + #[cfg(test)] + pub fn dump_database(&self) { + self.trie.db_ref().db.dump_database(); + } + + /// Get trie root hash at the latest commit + pub fn root_hash(&self) -> Result { + Ok(self.trie.root_hash()) + } + + /// This function must be used with transactional state only. + /// Similar to `commit` but without optimizations. + pub fn transactional_commit(&mut self, id: ChangeID) -> Result<(), BonsaiStorageError> { + self.trie.commit()?; + self.trie.db_mut().commit(id)?; + Ok(()) + } +} + +impl BonsaiStorage +where + DB: BonsaiDatabase + BonsaiPersistentDatabase, + ChangeID: id::Id, + BonsaiStorageError: std::convert::From<::DatabaseError>, +{ + /// Update trie and database using all changes since the last commit. + pub fn commit(&mut self, id: ChangeID) -> Result<(), BonsaiStorageError> { + self.trie.commit()?; + self.trie.db_mut().commit(id)?; + self.trie.db_mut().create_snapshot(id); + Ok(()) + } + + /// Get a transactional state of the trie at a specific commit ID. + /// + /// Transactional state allow you to fetch a point-in-time state of the trie. You can + /// apply changes to this state and merge it back into the main trie. + pub fn get_transactional_state( + &self, + change_id: ChangeID, + config: BonsaiStorageConfig, + ) -> Result>, BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + if let Some(transaction) = self.trie.db_ref().get_transaction(change_id)? { + Ok(Some(BonsaiStorage::new_from_transactional_state( + transaction, + config, + change_id, + )?)) + } else { + Ok(None) + } + } + + /// Get a copy of the config that can be used to create a transactional state or a new bonsai storage. + pub fn get_config(&self) -> BonsaiStorageConfig { + self.trie.db_ref().get_config().into() + } + + /// Merge a transactional state into the main trie. + pub fn merge( + &mut self, + transactional_bonsai_storage: BonsaiStorage, + ) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: + std::convert::From<>::DatabaseError>, + { + self.trie + .db_mut() + .merge(transactional_bonsai_storage.trie.db()) + } +} diff --git a/src/tests/madara_comparison.rs b/src/tests/madara_comparison.rs new file mode 100644 index 0000000..b7d7c0d --- /dev/null +++ b/src/tests/madara_comparison.rs @@ -0,0 +1,40 @@ +use bitvec::{bits, order::Msb0, vec::BitVec}; +use mp_felt::Felt252Wrapper; + +use crate::{ + databases::{create_rocks_db, RocksDB, RocksDBConfig}, + id::BasicIdBuilder, + BonsaiStorage, BonsaiStorageConfig, +}; + +#[test] +fn trie_height_251() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + for i in 0..251 { + let mut key: BitVec = bits![u8, Msb0; 0; 251].to_bitvec(); + key.set(i, true); + let value = Felt252Wrapper::from_hex_be("0x01").unwrap(); + bonsai_storage.insert(key.as_bitslice(), &value).unwrap(); + } + let mut id_builder = BasicIdBuilder::new(); + let id = id_builder.new_id(); + bonsai_storage.commit(id).unwrap(); + let root_hash = bonsai_storage.root_hash().unwrap(); + println!("root_hash: {:?}", root_hash); +} +// Test to add on Madara side to check with a tree of height 251 and see that we have same hash +// #[test]// fn test_height_251() { +// let mut tree = super::merkle_patricia_tree::merkle_tree::MerkleTree::::empty(); +// for i in 0..251 { +// let mut key: BitVec = bits![u8, Msb0; 0; 251].to_bitvec(); +// key.set(i, true); +// let value = Felt252Wrapper::from_hex_be("0x01").unwrap(); +// tree.set(key.as_bitslice(), value); +// } +// let root_hash = tree.commit(); +// println!("root_hash: {:?}", root_hash); +// } diff --git a/src/tests/mod.rs b/src/tests/mod.rs new file mode 100644 index 0000000..fc9c1c4 --- /dev/null +++ b/src/tests/mod.rs @@ -0,0 +1,4 @@ +mod madara_comparison; +mod simple; +mod transactional_state; +mod trie_log; diff --git a/src/tests/simple.rs b/src/tests/simple.rs new file mode 100644 index 0000000..c9a4139 --- /dev/null +++ b/src/tests/simple.rs @@ -0,0 +1,65 @@ +use crate::{ + databases::{create_rocks_db, RocksDB, RocksDBConfig}, + id::BasicIdBuilder, + BonsaiStorage, BonsaiStorageConfig, +}; +use bitvec::vec::BitVec; +use mp_felt::Felt252Wrapper; + +#[test] +fn basics() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + let pair1 = ( + vec![1, 2, 1], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id_builder.new_id()).unwrap(); + let pair2 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FD54D033c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, &pair2.1).unwrap(); + bonsai_storage.commit(id_builder.new_id()).unwrap(); + let pair3 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FD54D033c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair3.0.clone()); + bonsai_storage.insert(&bitvec, &pair3.1).unwrap(); + println!( + "get: {:?}", + bonsai_storage.get(&BitVec::from_vec(vec![1, 2, 1])) + ); + bonsai_storage.commit(id_builder.new_id()).unwrap(); + println!( + "get: {:?}", + bonsai_storage.get(&BitVec::from_vec(vec![1, 2, 2])) + ); + println!( + "get: {:?}", + bonsai_storage.get(&BitVec::from_vec(vec![1, 2, 3])) + ); + let bitvec = BitVec::from_vec(vec![1, 2, 1]); + bonsai_storage.remove(&bitvec).unwrap(); + assert_eq!( + bonsai_storage + .get(&BitVec::from_vec(vec![1, 2, 1])) + .unwrap(), + None + ); + bonsai_storage.commit(id_builder.new_id()).unwrap(); + assert_eq!( + bonsai_storage + .get(&BitVec::from_vec(vec![1, 2, 1])) + .unwrap(), + None + ); +} diff --git a/src/tests/transactional_state.rs b/src/tests/transactional_state.rs new file mode 100644 index 0000000..5311c2e --- /dev/null +++ b/src/tests/transactional_state.rs @@ -0,0 +1,384 @@ +use crate::{ + databases::{create_rocks_db, RocksDB, RocksDBConfig}, + id::BasicIdBuilder, + BonsaiStorage, BonsaiStorageConfig, +}; +use bitvec::vec::BitVec; +use mp_felt::Felt252Wrapper; + +#[test] +fn basics() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id2 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, &pair2.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + + let bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + assert_eq!(bonsai_at_txn.get(&bitvec).unwrap().unwrap(), pair1.1); + let bitvec = BitVec::from_vec(pair2.0.clone()); + assert!(bonsai_at_txn.get(&bitvec).unwrap().is_none()); +} + +#[test] +fn test_thread() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config.clone()).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + std::thread::scope(|s| { + s.spawn(|| { + let bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, bonsai_storage.get_config()) + .unwrap() + .unwrap(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + assert_eq!(bonsai_at_txn.get(&bitvec).unwrap().unwrap(), pair1.1); + }); + + s.spawn(|| { + let bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, bonsai_storage.get_config()) + .unwrap() + .unwrap(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + assert_eq!(bonsai_at_txn.get(&bitvec).unwrap().unwrap(), pair1.1); + }); + }); + + bonsai_storage + .get(&BitVec::from_vec(vec![1, 2, 2])) + .unwrap(); + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + bonsai_storage + .insert(&BitVec::from_vec(pair2.0.clone()), &pair2.1) + .unwrap(); + bonsai_storage.commit(id_builder.new_id()).unwrap(); +} + +#[test] +fn remove() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + let id2 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.remove(&bitvec).unwrap(); + bonsai_storage.commit(id2).unwrap(); + bonsai_storage.dump_database(); + + let bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + assert_eq!(bonsai_at_txn.get(&bitvec).unwrap().unwrap(), pair1.1); + + let bonsai_at_txn = bonsai_storage + .get_transactional_state(id2, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + assert!(bonsai_at_txn.get(&bitvec).unwrap().is_none()); +} + +#[test] +fn merge() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD5D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let mut bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + bonsai_at_txn + .insert(&BitVec::from_vec(pair2.0.clone()), &pair2.1) + .unwrap(); + bonsai_at_txn + .transactional_commit(id_builder.new_id()) + .unwrap(); + bonsai_storage.merge(bonsai_at_txn).unwrap(); + assert_eq!( + bonsai_storage + .get(&BitVec::from_vec(vec![1, 2, 3])) + .unwrap(), + Some(pair2.1) + ); +} + +#[test] +fn merge_override() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD5D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let mut bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + let pair2 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + bonsai_at_txn + .insert(&BitVec::from_vec(pair2.0.clone()), &pair2.1) + .unwrap(); + bonsai_at_txn + .transactional_commit(id_builder.new_id()) + .unwrap(); + bonsai_storage.merge(bonsai_at_txn).unwrap(); + assert_eq!( + bonsai_storage + .get(&BitVec::from_vec(vec![1, 2, 2])) + .unwrap(), + Some(pair2.1) + ); +} + +#[test] +fn merge_remove() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD5D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let mut bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + bonsai_at_txn + .remove(&BitVec::from_vec(pair1.0.clone())) + .unwrap(); + bonsai_at_txn + .transactional_commit(id_builder.new_id()) + .unwrap(); + bonsai_storage.merge(bonsai_at_txn).unwrap(); + assert_eq!( + bonsai_storage.get(&BitVec::from_vec(pair1.0)).unwrap(), + None + ); +} + +#[test] +fn merge_txn_revert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD5D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + let mut bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + bonsai_at_txn + .remove(&BitVec::from_vec(pair1.0.clone())) + .unwrap(); + let id2 = id_builder.new_id(); + bonsai_at_txn.transactional_commit(id2).unwrap(); + let root_hash2 = bonsai_at_txn.root_hash().unwrap(); + + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + bonsai_at_txn + .insert(&BitVec::from_vec(pair2.0.clone()), &pair2.1) + .unwrap(); + let id3 = id_builder.new_id(); + bonsai_at_txn.transactional_commit(id3).unwrap(); + + bonsai_at_txn.revert_to(id2).unwrap(); + let revert_hash2 = bonsai_at_txn.root_hash().unwrap(); + bonsai_at_txn.revert_to(id1).unwrap(); + let revert_hash1 = bonsai_at_txn.root_hash().unwrap(); + + assert_eq!(root_hash2, revert_hash2); + assert_eq!(root_hash1, revert_hash1); + + bonsai_storage.merge(bonsai_at_txn).unwrap(); + assert_eq!( + bonsai_storage.get(&BitVec::from_vec(pair1.0)).unwrap(), + Some(pair1.1) + ); +} + +#[test] +fn merge_invalid() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD5D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + let mut bonsai_at_txn = bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + bonsai_at_txn + .remove(&BitVec::from_vec(pair1.0.clone())) + .unwrap(); + let id2 = id_builder.new_id(); + bonsai_at_txn.transactional_commit(id2).unwrap(); + + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + bonsai_storage + .insert(&BitVec::from_vec(pair2.0.clone()), &pair2.1) + .unwrap(); + let id3 = id_builder.new_id(); + bonsai_storage.commit(id3).unwrap(); + + bonsai_storage.merge(bonsai_at_txn).unwrap_err(); +} + +#[test] +fn many_snapshots() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig { + snapshot_interval: 1, + ..Default::default() + }; + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 2], + Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + let pair2 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id2 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, &pair2.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + + bonsai_storage + .get_transactional_state(id1, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); + bonsai_storage + .get_transactional_state(id2, BonsaiStorageConfig::default()) + .unwrap() + .unwrap(); +} diff --git a/src/tests/trie_log.rs b/src/tests/trie_log.rs new file mode 100644 index 0000000..7d50eb4 --- /dev/null +++ b/src/tests/trie_log.rs @@ -0,0 +1,194 @@ +use crate::{ + databases::{create_rocks_db, RocksDB, RocksDBConfig}, + id::BasicIdBuilder, + BonsaiStorage, BonsaiStorageConfig, BonsaiTrieHash, +}; +use bitvec::vec::BitVec; +use mp_felt::Felt252Wrapper; + +#[test] +fn basics() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 1], + &Felt252Wrapper::from_hex_be("0x16342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + let id2 = id_builder.new_id(); + let pair2 = ( + vec![1, 2, 2], + &Felt252Wrapper::from_hex_be("0x66342762FDD54D3c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, pair2.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + let root_hash2 = bonsai_storage.root_hash().unwrap(); + + let id3 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0); + bonsai_storage.remove(&bitvec).unwrap(); + bonsai_storage.commit(id3).unwrap(); + + bonsai_storage.revert_to(id2).unwrap(); + let revert_root_hash2 = bonsai_storage.root_hash().unwrap(); + + bonsai_storage.revert_to(id1).unwrap(); + let revert_root_hash1 = bonsai_storage.root_hash().unwrap(); + + assert_eq!(root_hash2, revert_root_hash2); + assert_eq!(root_hash1, revert_root_hash1); +} + +#[test] +fn unrecorded_revert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D3c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + + let uncommited_id = id_builder.new_id(); + bonsai_storage.revert_to(uncommited_id).unwrap_err(); +} + +#[test] +fn in_place_revert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = (vec![1, 2, 3], &BonsaiTrieHash::default()); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + bonsai_storage.revert_to(id1).unwrap(); + assert_eq!(root_hash1, bonsai_storage.root_hash().unwrap()); +} + +#[test] +fn truncated_revert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 1], + &Felt252Wrapper::from_hex_be("0x16342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + let id2 = id_builder.new_id(); + let pair2 = ( + vec![1, 2, 2], + &Felt252Wrapper::from_hex_be("0x66342762FDD54D3c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, pair2.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + + bonsai_storage.revert_to(id1).unwrap(); + let revert_root_hash1 = bonsai_storage.root_hash().unwrap(); + bonsai_storage.revert_to(id2).unwrap_err(); + + assert_eq!(root_hash1, revert_root_hash1); +} + +#[test] +fn double_revert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 1], + &Felt252Wrapper::from_hex_be("0x16342762FDD54D033c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, pair1.1).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + let id2 = id_builder.new_id(); + let pair2 = ( + vec![1, 2, 2], + &Felt252Wrapper::from_hex_be("0x66342762FDD54D3c195fec3ce2568b62052e").unwrap(), + ); + let bitvec = BitVec::from_vec(pair2.0.clone()); + bonsai_storage.insert(&bitvec, pair2.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + + bonsai_storage.revert_to(id1).unwrap(); + let revert1 = bonsai_storage.root_hash().unwrap(); + bonsai_storage.revert_to(id1).unwrap(); + let revert2 = bonsai_storage.root_hash().unwrap(); + + assert_eq!(root_hash1, revert1); + assert_eq!(revert1, revert2); +} + +#[test] +fn remove_and_reinsert() { + let tempdir = tempfile::tempdir().unwrap(); + let db = create_rocks_db(tempdir.path()).unwrap(); + let config = BonsaiStorageConfig::default(); + let mut bonsai_storage = + BonsaiStorage::new(RocksDB::new(&db, RocksDBConfig::default()), config).unwrap(); + let mut id_builder = BasicIdBuilder::new(); + + let pair1 = ( + vec![1, 2, 3], + Felt252Wrapper::from_hex_be("0x66342762FDD54D3c195fec3ce2568b62052e").unwrap(), + ); + let id1 = id_builder.new_id(); + let bitvec = BitVec::from_vec(pair1.0.clone()); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.remove(&bitvec).unwrap(); + bonsai_storage.commit(id1).unwrap(); + let root_hash1 = bonsai_storage.root_hash().unwrap(); + + let id2 = id_builder.new_id(); + println!("before second insert"); + bonsai_storage.insert(&bitvec, &pair1.1).unwrap(); + bonsai_storage.commit(id2).unwrap(); + + bonsai_storage.revert_to(id1).unwrap(); + assert_eq!(root_hash1, bonsai_storage.root_hash().unwrap()); +} diff --git a/src/trie/merkle_node.rs b/src/trie/merkle_node.rs new file mode 100644 index 0000000..9ec8e1e --- /dev/null +++ b/src/trie/merkle_node.rs @@ -0,0 +1,219 @@ +//! Contains constructs for describing the nodes in a Binary Merkle Patricia Tree +//! used by Starknet. +//! +//! For more information about how these Starknet trees are structured, see +//! [`MerkleTree`](super::merkle_tree::MerkleTree). + +use bitvec::order::Msb0; +use bitvec::slice::BitSlice; +use mp_felt::Felt252Wrapper; +use parity_scale_codec::{Decode, Encode}; + +use super::merkle_tree::Path; + +/// Id of a Node within the tree +#[derive(Copy, Clone, Debug, PartialEq, Eq, Default, PartialOrd, Ord, Hash, Encode, Decode)] +pub struct NodeId(pub u64); + +impl NodeId { + /// Mutates the given NodeId to be the next one and returns it. + pub fn next_id(&mut self) -> NodeId { + self.0 += 1; + NodeId(self.0) + } + + pub fn reset(&mut self) { + self.0 = 0; + } +} + +/// A node in a Binary Merkle-Patricia Tree graph. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)] +pub enum Node { + /// A node that has not been fetched from storage yet. + /// + /// As such, all we know is its hash. + Unresolved(Felt252Wrapper), + /// A branch node with exactly two children. + Binary(BinaryNode), + /// Describes a path connecting two other nodes. + Edge(EdgeNode), +} + +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)] +pub enum NodeHandle { + Hash(Felt252Wrapper), + InMemory(NodeId), +} + +/// Describes the [Node::Binary] variant. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)] +pub struct BinaryNode { + /// The hash of this node. + pub hash: Option, + /// The height of this node in the tree. + pub height: u64, + /// [Left](Direction::Left) child. + pub left: NodeHandle, + /// [Right](Direction::Right) child. + pub right: NodeHandle, +} + +/// Node that is an edge. +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)] +pub struct EdgeNode { + /// The hash of this node. Is [None] if the node + /// has not yet been committed. + pub hash: Option, + /// The starting height of this node in the tree. + pub height: u64, + /// The path this edge takes. + pub path: Path, + /// The child of this node. + pub child: NodeHandle, +} + +/// Describes the direction a child of a [BinaryNode] may have. +/// +/// Binary nodes have two children, one left and one right. +#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Encode, Decode)] +pub enum Direction { + /// Left direction. + Left, + /// Right direction. + Right, +} + +impl Direction { + /// Inverts the [Direction]. + /// + /// [Left] becomes [Right], and [Right] becomes [Left]. + /// + /// [Left]: Direction::Left + /// [Right]: Direction::Right + pub fn invert(self) -> Direction { + match self { + Direction::Left => Direction::Right, + Direction::Right => Direction::Left, + } + } +} + +impl From for Direction { + fn from(tf: bool) -> Self { + match tf { + true => Direction::Right, + false => Direction::Left, + } + } +} + +impl From for bool { + fn from(direction: Direction) -> Self { + match direction { + Direction::Left => false, + Direction::Right => true, + } + } +} + +impl BinaryNode { + /// Maps the key's bit at the binary node's height to a [Direction]. + /// + /// This can be used to check which direction the key describes in the context + /// of this binary node i.e. which direction the child along the key's path would + /// take. + /// + /// # Arguments + /// + /// * `key` - The key to get the direction of. + /// + /// # Returns + /// + /// The direction of the key. + pub fn direction(&self, key: &BitSlice) -> Direction { + key[self.height as usize].into() + } + + /// Returns the [Left] or [Right] child. + /// + /// [Left]: Direction::Left + /// [Right]: Direction::Right + /// + /// # Arguments + /// + /// `direction` - The direction where to get the child from. + /// + /// # Returns + /// + /// The child in the specified direction. + pub fn get_child(&self, direction: Direction) -> NodeHandle { + match direction { + Direction::Left => self.left, + Direction::Right => self.right, + } + } +} + +impl Node { + /// Returns true if the node represents an empty node -- this is defined as a node + /// with the [Felt252Wrapper::ZERO]. + /// + /// This can occur for the root node in an empty graph. + pub fn is_empty(&self) -> bool { + match self { + Node::Unresolved(hash) => hash == &Felt252Wrapper::ZERO, + _ => false, + } + } + + /// Is the node a binary node. + pub fn is_binary(&self) -> bool { + matches!(self, Node::Binary(..)) + } + + /// Convert to node to binary node type (returns None if it's not a binary node). + pub fn as_binary(&self) -> Option<&BinaryNode> { + match self { + Node::Binary(binary) => Some(binary), + _ => None, + } + } + + pub fn hash(&self) -> Option { + match self { + Node::Unresolved(hash) => Some(*hash), + Node::Binary(binary) => binary.hash, + Node::Edge(edge) => edge.hash, + } + } +} + +impl EdgeNode { + /// Returns true if the edge node's path matches the same path given by the key. + /// + /// # Arguments + /// + /// * `key` - The key to check if the path matches with the edge node. + pub fn path_matches(&self, key: &BitSlice) -> bool { + self.path.0 + == key[(self.height as usize)..(self.height + self.path.0.len() as u64) as usize] + } + + /// Returns the common bit prefix between the edge node's path and the given key. + /// + /// This is calculated with the edge's height taken into account. + /// + /// # Arguments + /// + /// * `key` - The key to get the common path from. + pub fn common_path(&self, key: &BitSlice) -> &BitSlice { + let key_path = key.iter().skip(self.height as usize); + let common_length = key_path + .zip(self.path.0.iter()) + .take_while(|(a, b)| a == b) + .count(); + + &self.path.0[..common_length] + } +} diff --git a/src/trie/merkle_tree.rs b/src/trie/merkle_tree.rs new file mode 100644 index 0000000..2b6df9f --- /dev/null +++ b/src/trie/merkle_tree.rs @@ -0,0 +1,1148 @@ +use core::iter::once; +use core::marker::PhantomData; + +use bitvec::{ + prelude::{BitSlice, BitVec, Msb0}, + view::BitView, +}; +use derive_more::Constructor; +use mp_felt::Felt252Wrapper; +use mp_hashers::HasherT; +use parity_scale_codec::{Decode, Encode, Error, Input, Output}; +use std::{collections::HashMap, mem}; + +use crate::{error::BonsaiStorageError, id::Id, BonsaiDatabase, KeyValueDB}; + +use super::{ + merkle_node::{BinaryNode, Direction, EdgeNode, Node, NodeHandle, NodeId}, + TrieKeyType, +}; + +#[cfg(test)] +use log::trace; + +/// Wrapper type for a [HashMap] object. (It's not really a wrapper it's a +/// copy of the type but we implement the necessary traits.) +#[derive(Clone, Debug, PartialEq, Eq, Default, Constructor)] +pub struct NodesMapping(pub HashMap); + +#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Path(pub BitVec); + +impl Encode for Path { + fn encode_to(&self, dest: &mut T) { + // Inspired from scale_bits crate but don't use it to avoid copy and u32 length encoding + let iter = self.0.iter(); + let len = iter.len(); + // SAFETY: len is <= 251 + dest.push_byte(len as u8); + let mut next_store: u8 = 0; + let mut pos_in_next_store: u8 = 7; + for b in iter { + let bit = match *b { + true => 1, + false => 0, + }; + next_store |= bit << pos_in_next_store; + + if pos_in_next_store == 0 { + pos_in_next_store = 8; + dest.push_byte(next_store); + next_store = 0; + } + pos_in_next_store -= 1; + } + + if pos_in_next_store < 7 { + dest.push_byte(next_store); + } + } +} + +impl Decode for Path { + fn decode(input: &mut I) -> Result { + // Inspired from scale_bits crate but don't use it to avoid copy and u32 length encoding + // SAFETY: len is <= 251 + let len: u8 = input.read_byte()?; + let mut remaining_bits = len as usize; + let mut current_byte = None; + let mut bit = 7; + let mut bits = BitVec::::new(); + // No bits left to decode; we're done. + while remaining_bits != 0 { + // Get the next store entry to pull from: + let store = match current_byte { + Some(store) => store, + None => { + let store = match input.read_byte() { + Ok(s) => s, + Err(e) => return Err(e), + }; + current_byte = Some(store); + store + } + }; + + // Extract a bit: + let res = match (store >> bit) & 1 { + 0 => false, + 1 => true, + _ => unreachable!("Can only be 0 or 1 owing to &1"), + }; + bits.push(res); + + // Update records for next bit: + remaining_bits -= 1; + if bit == 0 { + current_byte = None; + bit = 8; + } + bit -= 1; + } + Ok(Self(bits)) + } +} + +#[test] +fn test_shared_path_encode_decode() { + let path = Path(BitVec::::from_slice(&[0b10101010, 0b10101010])); + let mut encoded = Vec::new(); + path.encode_to(&mut encoded); + + let decoded = Path::decode(&mut &encoded[..]).unwrap(); + assert_eq!(path, decoded); +} + +/// A Starknet binary Merkle-Patricia tree with a specific root entry-point and storage. +/// +/// This is used to update, mutate and access global Starknet state as well as individual contract +/// states. +/// +/// For more information on how this functions internally, see [here](super::merkle_node). +pub struct MerkleTree { + root_handle: NodeHandle, + root_hash: Felt252Wrapper, + storage_nodes: NodesMapping, + db: KeyValueDB, + latest_node_id: NodeId, + death_row: Vec, + cache_leaf_modified: HashMap, InsertOrRemove>, + _hasher: PhantomData, +} + +#[derive(Debug, PartialEq)] +enum InsertOrRemove { + Insert(T), + Remove, +} + +impl MerkleTree { + /// Less visible initialization for `MerkleTree` as the main entry points should be + /// [`MerkleTree::::load`] for persistent trees and [`MerkleTree::empty`] for + /// transient ones. + pub fn new(mut db: KeyValueDB) -> Result + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let nodes_mapping: HashMap = HashMap::new(); + let root_node = db.get(&TrieKeyType::Trie(vec![]))?; + let node = if let Some(root_node) = root_node { + Node::decode(&mut root_node.as_slice()).map_err(|err| { + BonsaiStorageError::Trie(format!("Couldn't decode root node: {}", err)) + })? + } else { + db.insert( + &TrieKeyType::Trie(vec![]), + &Node::Unresolved(Felt252Wrapper::ZERO).encode(), + None, + )?; + Node::Unresolved(Felt252Wrapper::ZERO) + }; + let root = node.hash().ok_or(BonsaiStorageError::Trie( + "Root doesn't exist in the storage".to_string(), + ))?; + Ok(Self { + root_handle: NodeHandle::Hash(root), + root_hash: root, + storage_nodes: NodesMapping(nodes_mapping), + db, + latest_node_id: NodeId(0), + death_row: Vec::new(), + cache_leaf_modified: HashMap::new(), + _hasher: PhantomData, + }) + } + + pub fn root_hash(&self) -> Felt252Wrapper { + self.root_hash + } + + pub fn reset_root_from_db(&mut self) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let node = self + .get_tree_branch_in_db_from_path(&BitVec::::new())? + .ok_or(BonsaiStorageError::Trie( + "root node doesn't exist in the storage".to_string(), + ))?; + let node_hash = node.hash().ok_or(BonsaiStorageError::Trie( + "Root doesn't exist in the storage".to_string(), + ))?; + self.latest_node_id.reset(); + self.storage_nodes.0.clear(); + self.cache_leaf_modified.clear(); + self.root_handle = NodeHandle::Hash(node_hash); + self.root_hash = node_hash; + Ok(()) + } + + /// Persists all changes to storage and returns the new root hash. + pub fn commit(&mut self) -> Result + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let mut batch = self.db.create_batch(); + for node_key in mem::take(&mut self.death_row) { + self.db.remove(&node_key, Some(&mut batch))?; + } + let root_hash = self.commit_subtree(self.root_handle, BitVec::new(), &mut batch)?; + for (key, value) in mem::take(&mut self.cache_leaf_modified) { + match value { + InsertOrRemove::Insert(value) => { + self.db + .insert(&TrieKeyType::Flat(key), &value.encode(), Some(&mut batch))?; + } + InsertOrRemove::Remove => { + self.db.remove(&TrieKeyType::Flat(key), Some(&mut batch))?; + } + } + } + self.db.write_batch(batch)?; + self.latest_node_id.reset(); + self.root_hash = root_hash; + self.root_handle = NodeHandle::Hash(root_hash); + Ok(root_hash) + } + + /// Persists any changes in this subtree to storage. + /// + /// This necessitates recursively calculating the hash of, and + /// in turn persisting, any changed child nodes. This is necessary + /// as the parent node's hash relies on its children hashes. + /// + /// In effect, the entire tree gets persisted. + /// + /// # Arguments + /// + /// * `node` - The top node from the subtree to commit. + fn commit_subtree( + &mut self, + node_handle: NodeHandle, + path: BitVec, + batch: &mut DB::Batch, + ) -> Result + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + use Node::*; + let node_id = match node_handle { + NodeHandle::Hash(hash) => return Ok(hash), + NodeHandle::InMemory(root_id) => root_id, + }; + + match self + .storage_nodes + .0 + .remove(&node_id) + .ok_or(BonsaiStorageError::Trie( + "Couldn't fetch node in the temporary storage".to_string(), + ))? { + Unresolved(hash) => { + if path.is_empty() { + self.db.insert( + &TrieKeyType::Trie(vec![]), + &Node::Unresolved(hash).encode(), + Some(batch), + )?; + Ok(hash) + } else { + Ok(hash) + } + } + Binary(mut binary) => { + let mut left_path = path.clone(); + left_path.push(false); + let left_hash = self.commit_subtree(binary.left, left_path, batch)?; + let mut right_path = path.clone(); + right_path.push(true); + let right_hash = self.commit_subtree(binary.right, right_path, batch)?; + let hash = Felt252Wrapper(H::hash_elements(left_hash.0, right_hash.0)); + binary.hash = Some(hash); + binary.left = NodeHandle::Hash(left_hash); + binary.right = NodeHandle::Hash(right_hash); + let key_bytes = [&[path.len() as u8], path.as_raw_slice()].concat(); + self.db.insert( + &TrieKeyType::Trie(key_bytes), + &Node::Binary(binary).encode(), + Some(batch), + )?; + Ok(hash) + } + + Edge(mut edge) => { + let mut child_path = path.clone(); + child_path.extend(&edge.path.0); + let child_hash = self.commit_subtree(edge.child, child_path, batch)?; + let mut bytes = [0u8; 32]; + bytes.view_bits_mut::()[256 - edge.path.0.len()..] + .copy_from_bitslice(&edge.path.0); + + let felt_path = Felt252Wrapper::try_from(&bytes).map_err(|err| { + BonsaiStorageError::Trie(format!("Couldn't convert path to felt: {}", err)) + })?; + let mut length = [0; 32]; + // Safe as len() is guaranteed to be <= 251 + length[31] = edge.path.0.len() as u8; + + let length = Felt252Wrapper::try_from(&length).map_err(|err| { + BonsaiStorageError::Trie(format!("Couldn't convert length to felt: {}", err)) + })?; + let hash = Felt252Wrapper(H::hash_elements(child_hash.0, felt_path.0) + length.0); + edge.hash = Some(hash); + edge.child = NodeHandle::Hash(child_hash); + let key_bytes = if path.is_empty() { + vec![] + } else { + [&[path.len() as u8], path.as_raw_slice()].concat() + }; + self.db.insert( + &TrieKeyType::Trie(key_bytes), + &Node::Edge(edge).encode(), + Some(batch), + )?; + Ok(hash) + } + } + } + + /// Sets the value of a key. To delete a key, set the value to [Felt252Wrapper::ZERO]. + /// + /// # Arguments + /// + /// * `key` - The key to set. + /// * `value` - The value to set. + pub fn set( + &mut self, + key: &BitSlice, + value: Felt252Wrapper, + ) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + if value == Felt252Wrapper::ZERO { + return self.delete_leaf(key); + } + let path = self.preload_nodes(key)?; + // There are three possibilities. + // + // 1. The leaf exists, in which case we simply change its value. + // + // 2. The tree is empty, we insert the new leaf and the root becomes an edge node connecting to it. + // + // 3. The leaf does not exist, and the tree is not empty. The final node in the traversal will be an + // edge node who's path diverges from our new leaf node's. + // + // This edge must be split into a new subtree containing both the existing edge's child and the + // new leaf. This requires an edge followed by a binary node and then further edges to both the + // current child and the new leaf. Any of these new edges may also end with an empty path in + // which case they should be elided. It depends on the common path length of the current edge + // and the new leaf i.e. the split may be at the first bit (in which case there is no leading + // edge), or the split may be in the middle (requires both leading and post edges), or the + // split may be the final bit (no post edge). + use Node::*; + match path.last() { + Some(node_id) => { + let mut nodes_to_add = Vec::with_capacity(4); + self.storage_nodes.0.entry(*node_id).and_modify(|node| { + match node { + Edge(edge) => { + let common = edge.common_path(key); + // Height of the binary node + let branch_height = edge.height as usize + common.len(); + if branch_height == key.len() { + edge.child = NodeHandle::Hash(value); + // The leaf already exists, we simply change its value. + let key_bytes = + [&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + self.cache_leaf_modified + .insert(key_bytes, InsertOrRemove::Insert(value)); + return; + } + // Height of the binary node's children + let child_height = branch_height + 1; + + // Path from binary node to new leaf + let new_path = key[child_height..].to_bitvec(); + // Path from binary node to existing child + let old_path = edge.path.0[common.len() + 1..].to_bitvec(); + + // The new leaf branch of the binary node. + // (this may be edge -> leaf, or just leaf depending). + let key_bytes = + [&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + self.cache_leaf_modified + .insert(key_bytes, InsertOrRemove::Insert(value)); + + let new = if new_path.is_empty() { + NodeHandle::Hash(value) + } else { + let new_edge = Node::Edge(EdgeNode { + hash: None, + height: child_height as u64, + path: Path(new_path), + child: NodeHandle::Hash(value), + }); + let edge_id = self.latest_node_id.next_id(); + nodes_to_add.push((edge_id, new_edge)); + NodeHandle::InMemory(edge_id) + }; + + // The existing child branch of the binary node. + let old = if old_path.is_empty() { + edge.child + } else { + let old_edge = Node::Edge(EdgeNode { + hash: None, + height: child_height as u64, + path: Path(old_path), + child: edge.child, + }); + let edge_id = self.latest_node_id.next_id(); + nodes_to_add.push((edge_id, old_edge)); + NodeHandle::InMemory(edge_id) + }; + + let new_direction = Direction::from(key[branch_height]); + let (left, right) = match new_direction { + Direction::Left => (new, old), + Direction::Right => (old, new), + }; + + let branch = Node::Binary(BinaryNode { + hash: None, + height: branch_height as u64, + left, + right, + }); + + // We may require an edge leading to the binary node. + let new_node = if common.is_empty() { + branch + } else { + let branch_id = self.latest_node_id.next_id(); + nodes_to_add.push((branch_id, branch)); + + Node::Edge(EdgeNode { + hash: None, + height: edge.height, + path: Path(common.to_bitvec()), + child: NodeHandle::InMemory(branch_id), + }) + }; + let path = key[..edge.height as usize].to_bitvec(); + let key_bytes = + [&[path.len() as u8], path.into_vec().as_slice()].concat(); + self.death_row.push(TrieKeyType::Trie(key_bytes)); + *node = new_node; + } + Unresolved(_) | Binary(_) => { + unreachable!("The end of a traversion cannot be unresolved or binary") + } + }; + }); + for (id, node) in nodes_to_add { + self.storage_nodes.0.insert(id, node); + } + Ok(()) + } + None => { + // Getting no travel nodes implies that the tree is empty. + // + // Create a new leaf node with the value, and the root becomes + // an edge node connecting to the leaf. + let edge = Node::Edge(EdgeNode { + hash: None, + height: 0, + path: Path(key.to_bitvec()), + child: NodeHandle::Hash(value), + }); + self.storage_nodes + .0 + .insert(self.latest_node_id.next_id(), edge); + + self.root_handle = NodeHandle::InMemory(self.latest_node_id); + + let key_bytes = [&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + self.cache_leaf_modified + .insert(key_bytes, InsertOrRemove::Insert(value)); + Ok(()) + } + } + } + + pub fn db_ref(&self) -> &KeyValueDB { + &self.db + } + + pub fn db(self) -> KeyValueDB { + self.db + } + + pub fn db_mut(&mut self) -> &mut KeyValueDB { + &mut self.db + } + + /// Deletes a leaf node from the tree. + /// + /// This is not an external facing API; the functionality is instead accessed by calling + /// [`MerkleTree::set`] with value set to [`Felt252Wrapper::ZERO`]. + /// + /// # Arguments + /// + /// * `key` - The key to delete. + fn delete_leaf(&mut self, key: &BitSlice) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + // Algorithm explanation: + // + // The leaf's parent node is either an edge, or a binary node. + // If it's an edge node, then it must also be deleted. And its parent + // must be a binary node. In either case we end up with a binary node + // who's one child is deleted. This changes the binary to an edge node. + // + // Note that its possible that there is no binary node -- if the resulting tree would be empty. + // + // This new edge node may need to merge with the old binary node's parent node + // and other remaining child node -- if they're also edges. + // + // Then we are done. + + let key_bytes = [&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + self.cache_leaf_modified + .insert(key_bytes.clone(), InsertOrRemove::Remove); + if !self.db.contains(&TrieKeyType::Flat(key_bytes))? { + return Ok(()); + } + + let path = self.preload_nodes(key)?; + + let mut last_binary_path = key.to_bitvec(); + + // Go backwards until we hit a branch node. + let mut node_iter = path.into_iter().rev().skip_while(|node| { + // SAFETY: Has been populate by preload_nodes just above + let node = self.storage_nodes.0.get(node).unwrap(); + match node { + Node::Unresolved(_) => {} + Node::Binary(_) => {} + Node::Edge(edge) => { + for _ in 0..edge.path.0.len() { + last_binary_path.pop(); + } + let key_bytes = [ + &[last_binary_path.len() as u8], + last_binary_path.as_raw_slice(), + ] + .concat(); + if last_binary_path.is_empty() { + self.death_row.push(TrieKeyType::Trie(vec![])); + } else { + self.death_row.push(TrieKeyType::Trie(key_bytes)); + } + } + } + !node.is_binary() + }); + let branch_node = node_iter.next(); + let parent_branch_node = node_iter.next(); + println!("path: {:?}", last_binary_path); + println!("branch_node: {:?}", branch_node); + match branch_node { + Some(node_id) => { + let new_edge = + { + let node = self.storage_nodes.0.get_mut(&node_id).ok_or( + BonsaiStorageError::Trie("Node not found in memory".to_string()), + )?; + println!("node: {:?}", node); + let (direction, height) = { + // SAFETY: This node must be a binary node due to the iteration condition. + let binary = node.as_binary().unwrap(); + (binary.direction(key).invert(), binary.height) + }; + // Create an edge node to replace the old binary node + // i.e. with the remaining child (note the direction invert), + // and a path of just a single bit. + last_binary_path.push(direction.into()); + let path = Path(once(bool::from(direction)).collect::>()); + let mut edge = EdgeNode { + hash: None, + height, + path, + child: NodeHandle::InMemory(self.latest_node_id), + }; + + // Merge the remaining child if it's an edge. + self.merge_edges(&mut edge)?; + + edge + }; + // Replace the old binary node with the new edge node. + self.storage_nodes.0.insert(node_id, Node::Edge(new_edge)); + } + None => { + // We reached the root without a hitting binary node. The new tree + // must therefore be empty. + self.latest_node_id.next_id(); + self.storage_nodes + .0 + .insert(self.latest_node_id, Node::Unresolved(Felt252Wrapper::ZERO)); + self.root_handle = NodeHandle::InMemory(self.latest_node_id); + self.root_hash = Felt252Wrapper::ZERO; + return Ok(()); + } + }; + + // Check the parent of the new edge. If it is also an edge, then they must merge. + if let Some(node) = parent_branch_node { + let child = if let Node::Edge(edge) = + self.storage_nodes + .0 + .get(&node) + .ok_or(BonsaiStorageError::Trie( + "Node not found in memory".to_string(), + ))? { + let child_node = match edge.child { + NodeHandle::Hash(_) => return Ok(()), + NodeHandle::InMemory(child_id) => { + self.storage_nodes + .0 + .get(&child_id) + .ok_or(BonsaiStorageError::Trie( + "Node not found in memory".to_string(), + ))? + } + }; + match child_node { + Node::Edge(child_edge) => child_edge.clone(), + _ => { + return Ok(()); + } + } + } else { + return Ok(()); + }; + let edge = self + .storage_nodes + .0 + .get_mut(&node) + .ok_or(BonsaiStorageError::Trie( + "Node not found in memory".to_string(), + ))?; + match edge { + Node::Edge(edge) => { + edge.path.0.extend_from_bitslice(&child.path.0); + edge.child = child.child; + } + _ => unreachable!(), + } + } + Ok(()) + } + + /// Returns the value stored at key, or `None` if it does not exist. + /// + /// # Arguments + /// + /// * `key` - The key of the value to get. + /// + /// # Returns + /// + /// The value of the key. + pub fn get( + &self, + key: &BitSlice, + ) -> Result, BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let key = &[&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + if let Some(value) = self.cache_leaf_modified.get(key) { + match value { + InsertOrRemove::Remove => return Ok(None), + InsertOrRemove::Insert(value) => return Ok(Some(*value)), + } + } + self.db + .get(&TrieKeyType::Flat(key.to_vec())) + .map(|r| r.map(|opt| Felt252Wrapper::decode(&mut opt.as_slice()).unwrap())) + } + + pub fn contains(&self, key: &BitSlice) -> Result + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let key = &[&[key.len() as u8], key.to_bitvec().as_raw_slice()].concat(); + if let Some(value) = self.cache_leaf_modified.get(key) { + match value { + InsertOrRemove::Remove => return Ok(false), + InsertOrRemove::Insert(_) => return Ok(true), + } + } + self.db.contains(&TrieKeyType::Flat(key.to_vec())) + } + + /// preload_nodes from the current root towards the destination [Leaf](Node::Leaf) node. + /// Returns the list of nodes along the path. + /// + /// If the destination node exists, it will be the final node in the list. + /// + /// This means that the final node will always be either a the destination [Leaf](Node::Leaf) + /// node, or an [Edge](Node::Edge) node who's path suffix does not match the leaf's path. + /// + /// The final node can __not__ be a [Binary](Node::Binary) node since it would always be + /// possible to continue on towards the destination. Nor can it be an + /// [Unresolved](Node::Unresolved) node since this would be resolved to check if we can + /// travel further. + /// + /// # Arguments + /// + /// * `dst` - The node to get to. + /// + /// # Returns + /// + /// The list of nodes along the path. + fn preload_nodes(&mut self, dst: &BitSlice) -> Result, BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let mut nodes = Vec::with_capacity(251); + let node_id = match self.root_handle { + NodeHandle::Hash(_) => { + let node = self + .get_tree_branch_in_db_from_path(&BitVec::::new())? + .ok_or(BonsaiStorageError::Trie( + "Couldn't fetch root node in db".to_string(), + ))?; + if node.is_empty() { + return Ok(Vec::new()); + } + self.latest_node_id.next_id(); + self.root_handle = NodeHandle::InMemory(self.latest_node_id); + self.storage_nodes.0.insert(self.latest_node_id, node); + nodes.push(self.latest_node_id); + self.latest_node_id + } + NodeHandle::InMemory(root_id) => { + nodes.push(root_id); + root_id + } + }; + self.preload_nodes_subtree(dst, node_id, BitVec::::new(), &mut nodes)?; + Ok(nodes) + } + + fn preload_nodes_subtree( + &mut self, + dst: &BitSlice, + root_id: NodeId, + mut path: BitVec, + nodes: &mut Vec, + ) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let node = self + .storage_nodes + .0 + .get(&root_id) + .ok_or(BonsaiStorageError::Trie( + "Couldn't fetch node in the temporary storage".to_string(), + ))? + .clone(); + match node { + Node::Unresolved(_hash) => Ok(()), + Node::Binary(mut binary_node) => { + let next_direction = binary_node.direction(dst); + path.push(bool::from(next_direction)); + let next = binary_node.get_child(next_direction); + match next { + NodeHandle::Hash(_) => { + let node = self.get_tree_branch_in_db_from_path(&path)?.ok_or( + BonsaiStorageError::Trie("Couldn't fetch node in db".to_string()), + )?; + self.latest_node_id.next_id(); + self.storage_nodes.0.insert(self.latest_node_id, node); + nodes.push(self.latest_node_id); + match next_direction { + Direction::Left => { + binary_node.left = NodeHandle::InMemory(self.latest_node_id) + } + Direction::Right => { + binary_node.right = NodeHandle::InMemory(self.latest_node_id) + } + }; + self.storage_nodes + .0 + .insert(root_id, Node::Binary(binary_node)); + self.preload_nodes_subtree(dst, self.latest_node_id, path, nodes) + } + NodeHandle::InMemory(next_id) => { + nodes.push(next_id); + self.preload_nodes_subtree(dst, next_id, path, nodes) + } + } + } + Node::Edge(mut edge_node) if edge_node.path_matches(dst) => { + path.extend_from_bitslice(&edge_node.path.0); + if path == dst { + return Ok(()); + } + let next = edge_node.child; + match next { + NodeHandle::Hash(_) => { + let node = self.get_tree_branch_in_db_from_path(&path)?; + if let Some(node) = node { + self.latest_node_id.next_id(); + self.storage_nodes.0.insert(self.latest_node_id, node); + nodes.push(self.latest_node_id); + edge_node.child = NodeHandle::InMemory(self.latest_node_id); + self.storage_nodes.0.insert(root_id, Node::Edge(edge_node)); + self.preload_nodes_subtree(dst, self.latest_node_id, path, nodes) + } else { + Ok(()) + } + } + NodeHandle::InMemory(next_id) => { + nodes.push(next_id); + self.preload_nodes_subtree(dst, next_id, path, nodes) + } + } + } + Node::Edge(_) => Ok(()), + } + } + + fn get_tree_branch_in_db_from_path( + &self, + path: &BitVec, + ) -> Result, BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + let key = if path.is_empty() { + vec![] + } else { + [&[path.len() as u8], path.as_raw_slice()].concat() + }; + self.db + .get(&TrieKeyType::Trie(key))? + .map(|node| { + Node::decode(&mut node.as_slice()).map_err(|err| { + BonsaiStorageError::Trie(format!("Couldn't decode node: {}", err)) + }) + }) + .map_or(Ok(None), |r| r.map(Some)) + } + + /// This is a convenience function which merges the edge node with its child __iff__ it is also + /// an edge. + /// + /// Does nothing if the child is not also an edge node. + /// + /// This can occur when mutating the tree (e.g. deleting a child of a binary node), and is an + /// illegal state (since edge nodes __must be__ maximal subtrees). + /// + /// # Arguments + /// + /// * `parent` - The parent node to merge the child with. + fn merge_edges(&self, parent: &mut EdgeNode) -> Result<(), BonsaiStorageError> + where + BonsaiStorageError: std::convert::From<::DatabaseError>, + { + //TODO: Add deletion of unused nodes + let child_node = match parent.child { + NodeHandle::Hash(_) => return Ok(()), + NodeHandle::InMemory(child_id) => { + self.storage_nodes + .0 + .get(&child_id) + .ok_or(BonsaiStorageError::Trie( + "Couldn't fetch node in memory".to_string(), + ))? + } + }; + if let Node::Edge(child_edge) = child_node { + parent.path.0.extend_from_bitslice(&child_edge.path.0); + parent.child = child_edge.child; + } + Ok(()) + } + + #[cfg(test)] + fn display(&self) { + match self.root_handle { + NodeHandle::Hash(hash) => { + trace!("root is hash: {:?}", hash); + } + NodeHandle::InMemory(root_id) => { + trace!("root is node: {:?}", root_id); + self.print(&root_id); + } + } + } + + #[cfg(test)] + fn print(&self, head: &NodeId) { + use Node::*; + + let current_tmp = self.storage_nodes.0.get(head).unwrap().clone(); + trace!("bonsai_node {:?} = {:?}", head, current_tmp); + + match current_tmp { + Unresolved(hash) => { + trace!("Unresolved: {:?}", hash); + } + Binary(binary) => { + match &binary.get_child(Direction::Left) { + NodeHandle::Hash(hash) => { + trace!("left is hash {:?}", hash); + } + NodeHandle::InMemory(left_id) => { + self.print(left_id); + } + } + match &binary.get_child(Direction::Right) { + NodeHandle::Hash(hash) => { + trace!("right is hash {:?}", hash); + } + NodeHandle::InMemory(right_id) => { + self.print(right_id); + } + } + } + Edge(edge) => match &edge.child { + NodeHandle::Hash(hash) => { + trace!("child is hash {:?}", hash); + } + NodeHandle::InMemory(child_id) => { + self.print(child_id); + } + }, + }; + } +} + +#[cfg(test)] +mod tests { + use bitvec::vec::BitVec; + use mp_commitments::{calculate_class_commitment_leaf_hash, StateCommitmentTree}; + use mp_felt::Felt252Wrapper; + use mp_hashers::pedersen::PedersenHasher; + + use crate::{ + databases::{create_rocks_db, RocksDB, RocksDBConfig}, + id::BasicId, + key_value_db::KeyValueDBConfig, + KeyValueDB, + }; + use rand::prelude::*; + + #[test] + fn one_commit_tree_compare() { + let mut elements = vec![]; + let tempdir = tempfile::tempdir().unwrap(); + let mut rng = rand::thread_rng(); + let tree_size = rng.gen_range(10..100); + for _ in 0..tree_size { + let mut element = String::from("0x"); + let element_size = rng.gen_range(10..32); + for _ in 0..element_size { + let random_byte: u8 = rng.gen(); + element.push_str(&format!("{:02x}", random_byte)); + } + elements.push(Felt252Wrapper::from_hex_be(&element).unwrap()); + } + let rocks_db = create_rocks_db(std::path::Path::new(tempdir.path())).unwrap(); + let rocks_db = RocksDB::new(&rocks_db, RocksDBConfig::default()); + let db = KeyValueDB::new(rocks_db, KeyValueDBConfig::default(), None); + let mut bonsai_tree: super::MerkleTree, BasicId> = + super::MerkleTree::new(db).unwrap(); + let root_hash = + mp_commitments::calculate_class_commitment_tree_root_hash::(&elements); + elements.iter().for_each(|element| { + let final_hash = calculate_class_commitment_leaf_hash::(*element); + let key = &element.0.to_bytes_be()[..31]; + bonsai_tree + .set(&BitVec::from_vec(key.to_vec()), final_hash) + .unwrap(); + }); + bonsai_tree.display(); + assert_eq!(bonsai_tree.commit().unwrap(), root_hash); + } + + #[test] + fn simple_commits() { + let tempdir = tempfile::tempdir().unwrap(); + let mut madara_tree = StateCommitmentTree::::default(); + let rocks_db = create_rocks_db(std::path::Path::new(tempdir.path())).unwrap(); + let rocks_db = RocksDB::new(&rocks_db, RocksDBConfig::default()); + let db = KeyValueDB::new(rocks_db, KeyValueDBConfig::default(), None); + let mut bonsai_tree: super::MerkleTree, BasicId> = + super::MerkleTree::new(db).unwrap(); + let elements = [ + [Felt252Wrapper::from_hex_be("0x665342762FDD54D0303c195fec3ce2568b62052e").unwrap()], + [Felt252Wrapper::from_hex_be("0x66342762FDD54D0303c195fec3ce2568b62052e").unwrap()], + [Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap()], + ]; + for elem in elements { + elem.iter().for_each(|class_hash| { + let final_hash = + calculate_class_commitment_leaf_hash::(*class_hash); + madara_tree.set(*class_hash, final_hash); + let key = &class_hash.0.to_bytes_be()[..31]; + bonsai_tree + .set(&BitVec::from_vec(key.to_vec()), final_hash) + .unwrap(); + }); + } + let madara_root_hash = madara_tree.commit(); + let bonsai_root_hash = bonsai_tree.commit().unwrap(); + assert_eq!(bonsai_root_hash, madara_root_hash); + } + + #[test] + fn simple_commits_and_delete() { + let tempdir = tempfile::tempdir().unwrap(); + let rocks_db = create_rocks_db(std::path::Path::new(tempdir.path())).unwrap(); + let rocks_db = RocksDB::new(&rocks_db, RocksDBConfig::default()); + let db = KeyValueDB::new(rocks_db, KeyValueDBConfig::default(), None); + let mut bonsai_tree: super::MerkleTree, BasicId> = + super::MerkleTree::new(db).unwrap(); + let elements = [ + [Felt252Wrapper::from_hex_be("0x665342762FDD54D0303c195fec3ce2568b62052e").unwrap()], + [Felt252Wrapper::from_hex_be("0x66342762FDD54D0303c195fec3ce2568b62052e").unwrap()], + [Felt252Wrapper::from_hex_be("0x66342762FDD54D033c195fec3ce2568b62052e").unwrap()], + ]; + for elem in elements { + elem.iter().for_each(|class_hash| { + let final_hash = + calculate_class_commitment_leaf_hash::(*class_hash); + let key = &class_hash.0.to_bytes_be()[..31]; + bonsai_tree + .set(&BitVec::from_vec(key.to_vec()), final_hash) + .unwrap(); + }); + } + bonsai_tree.commit().unwrap(); + for elem in elements { + elem.iter().for_each(|class_hash| { + let key = &class_hash.0.to_bytes_be()[..31]; + bonsai_tree + .set(&BitVec::from_vec(key.to_vec()), Felt252Wrapper::ZERO) + .unwrap(); + }); + } + bonsai_tree.commit().unwrap(); + } + + #[test] + fn multiple_commits_tree_compare() { + let mut rng = rand::thread_rng(); + let tempdir = tempfile::tempdir().unwrap(); + let mut madara_tree = StateCommitmentTree::::default(); + let rocks_db = create_rocks_db(std::path::Path::new(tempdir.path())).unwrap(); + let rocks_db = RocksDB::new(&rocks_db, RocksDBConfig::default()); + let db = KeyValueDB::new(rocks_db, KeyValueDBConfig::default(), None); + let mut bonsai_tree: super::MerkleTree, BasicId> = + super::MerkleTree::new(db).unwrap(); + let nb_commits = rng.gen_range(2..4); + for _ in 0..nb_commits { + let mut elements = vec![]; + let tree_size = rng.gen_range(10..100); + for _ in 0..tree_size { + let mut element = String::from("0x"); + let element_size = rng.gen_range(10..32); + for _ in 0..element_size { + let random_byte: u8 = rng.gen(); + element.push_str(&format!("{:02x}", random_byte)); + } + elements.push(Felt252Wrapper::from_hex_be(&element).unwrap()); + } + elements.iter().for_each(|class_hash| { + let final_hash = + calculate_class_commitment_leaf_hash::(*class_hash); + madara_tree.set(*class_hash, final_hash); + let key = &class_hash.0.to_bytes_be()[..31]; + bonsai_tree + .set(&BitVec::from_vec(key.to_vec()), final_hash) + .unwrap(); + }); + + let bonsai_root_hash = bonsai_tree.commit().unwrap(); + let madara_root_hash = madara_tree.commit(); + assert_eq!(bonsai_root_hash, madara_root_hash); + } + } + + // #[test] // fn multiple_commits_tree_compare_with_deletes() { + // let mut rng = rand::thread_rng(); + // let mut madara_tree = StateCommitmentTree::::default(); + // let rocks_db = create_rocks_db(std::path::Path::new("test_db")).unwrap(); + // let mut db = RocksDB::new(&rocks_db, RocksDBConfig::default()); + // let mut bonsai_tree: super::MerkleTree = + // super::MerkleTree::empty(&mut db); + // let nb_commits = rng.gen_range(2..5); + // let mut elements_to_delete = vec![]; + // for _ in 0..nb_commits { + // let mut elements = vec![]; + // let tree_size = rng.gen_range(10..100); + // for _ in 0..tree_size { + // let mut element = String::from("0x"); + // let element_size = rng.gen_range(10..32); + // for _ in 0..element_size { + // let random_byte: u8 = rng.gen(); + // element.push_str(&format!("{:02x}", random_byte)); + // } + // if rng.gen_bool(0.1) { + // elements_to_delete.push(Felt252Wrapper::from_hex_be(&element).unwrap()); + // elements.push(Felt252Wrapper::from_hex_be(&element).unwrap()); + // } else { + // elements.push(Felt252Wrapper::from_hex_be(&element).unwrap()); + // } + // } + // elements.iter().for_each(|class_hash| { + // let final_hash = + // calculate_class_commitment_leaf_hash::(*class_hash); + // madara_tree.set(*class_hash, final_hash); + // let key = &class_hash.0.to_bytes_be()[..31]; + // bonsai_tree.set(&BitVec::from_vec(key.to_vec()), final_hash); + // }); + + // let bonsai_root_hash = bonsai_tree.commit(); + // let madara_root_hash = madara_tree.commit(); + // assert_eq!(bonsai_root_hash, madara_root_hash); + // } + // elements_to_delete.iter().for_each(|class_hash| { + // madara_tree.set(*class_hash, Felt252Wrapper::ZERO); + // let key = &class_hash.0.to_bytes_be()[..31]; + // bonsai_tree.set(&BitVec::from_vec(key.to_vec()), Felt252Wrapper::ZERO); + // }); + + // let bonsai_root_hash = bonsai_tree.commit(); + // let madara_root_hash = madara_tree.commit(); + // assert_eq!(bonsai_root_hash, madara_root_hash); + // } +} diff --git a/src/trie/mod.rs b/src/trie/mod.rs new file mode 100644 index 0000000..bb341ea --- /dev/null +++ b/src/trie/mod.rs @@ -0,0 +1,5 @@ +mod merkle_node; +pub mod merkle_tree; +mod trie_db; + +pub use trie_db::TrieKeyType; diff --git a/src/trie/trie_db.rs b/src/trie/trie_db.rs new file mode 100644 index 0000000..84bc876 --- /dev/null +++ b/src/trie/trie_db.rs @@ -0,0 +1,36 @@ +use crate::{bonsai_database::KeyType, changes::ChangeKeyType}; + +#[derive(Debug, Hash, PartialEq, Eq)] +pub enum TrieKeyType { + Trie(Vec), + Flat(Vec), +} + +impl TrieKeyType { + pub fn as_slice(&self) -> &[u8] { + match self { + TrieKeyType::Trie(slice) => slice, + TrieKeyType::Flat(slice) => slice, + } + } +} + +impl<'a> From<&'a TrieKeyType> for KeyType<'a> { + fn from(key: &'a TrieKeyType) -> Self { + let key_slice = key.as_slice(); + match key { + TrieKeyType::Trie(_) => KeyType::Trie(key_slice), + TrieKeyType::Flat(_) => KeyType::Flat(key_slice), + } + } +} + +impl<'a> From<&'a TrieKeyType> for ChangeKeyType { + fn from(key: &'a TrieKeyType) -> Self { + let key_slice = key.as_slice(); + match key { + TrieKeyType::Trie(_) => ChangeKeyType::Trie(key_slice.to_vec()), + TrieKeyType::Flat(_) => ChangeKeyType::Flat(key_slice.to_vec()), + } + } +}