From c4c8254049b65c98c96ee21ca190709abdb175cd Mon Sep 17 00:00:00 2001 From: charmful0x Date: Fri, 2 May 2025 15:51:40 +0200 Subject: [PATCH 01/12] fix: cleanup git --- .gitignore | 1 + native/riscv_em_nif/.gitignore | 1 + native/riscv_em_nif/Cargo.lock | 5047 +++++++++++++++++ native/riscv_em_nif/Cargo.toml | 24 + native/riscv_em_nif/src/core/mod.rs | 1 + native/riscv_em_nif/src/core/riscv_machine.rs | 12 + native/riscv_em_nif/src/lib.rs | 2 + native/riscv_em_nif/src/main.rs | 3 + native/riscv_em_nif/src/utils/constants.rs | 2 + native/riscv_em_nif/src/utils/mod.rs | 1 + 10 files changed, 5094 insertions(+) create mode 100644 native/riscv_em_nif/.gitignore create mode 100644 native/riscv_em_nif/Cargo.lock create mode 100644 native/riscv_em_nif/Cargo.toml create mode 100644 native/riscv_em_nif/src/core/mod.rs create mode 100644 native/riscv_em_nif/src/core/riscv_machine.rs create mode 100644 native/riscv_em_nif/src/lib.rs create mode 100644 native/riscv_em_nif/src/main.rs create mode 100644 native/riscv_em_nif/src/utils/constants.rs create mode 100644 native/riscv_em_nif/src/utils/mod.rs diff --git a/.gitignore b/.gitignore index ee8b8aa6a..46d073cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ rebar3.crashdump native/hb_beamr/*.o native/hb_beamr/*.d +native/riscv_em_nif/target priv/* .DS_STORE diff --git a/native/riscv_em_nif/.gitignore b/native/riscv_em_nif/.gitignore new file mode 100644 index 000000000..c41cc9e35 --- /dev/null +++ b/native/riscv_em_nif/.gitignore @@ -0,0 +1 @@ +/target \ No newline at end of file diff --git a/native/riscv_em_nif/Cargo.lock b/native/riscv_em_nif/Cargo.lock new file mode 100644 index 000000000..91df5902a --- /dev/null +++ b/native/riscv_em_nif/Cargo.lock @@ -0,0 +1,5047 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[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.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloy-core" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d8bcce99ad10fe02640cfaec1c6bc809b837c783c1d52906aa5af66e2a196f6" +dependencies = [ + "alloy-dyn-abi", + "alloy-json-abi", + "alloy-primitives", + "alloy-rlp", + "alloy-sol-types", +] + +[[package]] +name = "alloy-dyn-abi" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb8e762aefd39a397ff485bc86df673465c4ad3ec8819cc60833a8a3ba5cdc87" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-type-parser", + "alloy-sol-types", + "const-hex", + "itoa", + "serde", + "serde_json", + "winnow", +] + +[[package]] +name = "alloy-eip2930" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0069cf0642457f87a01a014f6dc29d5d893cd4fd8fddf0c3cdfad1bb3ebafc41" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "serde", +] + +[[package]] +name = "alloy-eip7702" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b15b13d38b366d01e818fe8e710d4d702ef7499eacd44926a06171dd9585d0c" +dependencies = [ + "alloy-primitives", + "alloy-rlp", + "k256", + "serde", + "thiserror 2.0.12", +] + +[[package]] +name = "alloy-json-abi" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6beff64ad0aa6ad1019a3db26fef565aefeb011736150ab73ed3366c3cfd1b" +dependencies = [ + "alloy-primitives", + "alloy-sol-type-parser", + "serde", + "serde_json", +] + +[[package]] +name = "alloy-primitives" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c77490fe91a0ce933a1f219029521f20fc28c2c0ca95d53fa4da9c00b8d9d4e" +dependencies = [ + "alloy-rlp", + "bytes", + "cfg-if", + "const-hex", + "derive_more 2.0.1", + "foldhash", + "hashbrown", + "indexmap", + "itoa", + "k256", + "keccak-asm", + "paste", + "proptest", + "rand 0.8.5", + "ruint", + "rustc-hash", + "serde", + "sha3", + "tiny-keccak", +] + +[[package]] +name = "alloy-rlp" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6c1d995bff8d011f7cd6c81820d51825e6e06d6db73914c1630ecf544d83d6" +dependencies = [ + "alloy-rlp-derive", + "arrayvec", + "bytes", +] + +[[package]] +name = "alloy-rlp-derive" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a40e1ef334153322fd878d07e86af7a529bcb86b2439525920a88eba87bcf943" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10ae8e9a91d328ae954c22542415303919aabe976fe7a92eb06db1b68fd59f2" +dependencies = [ + "alloy-sol-macro-expander", + "alloy-sol-macro-input", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "alloy-sol-macro-expander" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83ad5da86c127751bc607c174d6c9fe9b85ef0889a9ca0c641735d77d4f98f26" +dependencies = [ + "alloy-sol-macro-input", + "const-hex", + "heck 0.5.0", + "indexmap", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", + "tiny-keccak", +] + +[[package]] +name = "alloy-sol-macro-input" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3d30f0d3f9ba3b7686f3ff1de9ee312647aac705604417a2f40c604f409a9e" +dependencies = [ + "const-hex", + "dunce", + "heck 0.5.0", + "macro-string", + "proc-macro2", + "quote", + "syn 2.0.101", + "syn-solidity", +] + +[[package]] +name = "alloy-sol-type-parser" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d162f8524adfdfb0e4bd0505c734c985f3e2474eb022af32eef0d52a4f3935c" +dependencies = [ + "serde", + "winnow", +] + +[[package]] +name = "alloy-sol-types" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43d5e60466a440230c07761aa67671d4719d46f43be8ea6e7ed334d8db4a9ab" +dependencies = [ + "alloy-json-abi", + "alloy-primitives", + "alloy-sol-macro", + "const-hex", + "serde", +] + +[[package]] +name = "ark-ff" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b3235cc41ee7a12aaaf2c575a2ad7b46713a8a50bda2fc3b003a04845c05dd6" +dependencies = [ + "ark-ff-asm 0.3.0", + "ark-ff-macros 0.3.0", + "ark-serialize 0.3.0", + "ark-std 0.3.0", + "derivative", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.3.3", + "zeroize", +] + +[[package]] +name = "ark-ff" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba" +dependencies = [ + "ark-ff-asm 0.4.2", + "ark-ff-macros 0.4.2", + "ark-serialize 0.4.2", + "ark-std 0.4.0", + "derivative", + "digest 0.10.7", + "itertools 0.10.5", + "num-bigint", + "num-traits", + "paste", + "rustc_version 0.4.1", + "zeroize", +] + +[[package]] +name = "ark-ff-asm" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db02d390bf6643fb404d3d22d31aee1c4bc4459600aef9113833d17e786c6e44" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-asm" +version = "0.4.2" +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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fd794a08ccb318058009eefdf15bcaaaaf6f8161eb3345f907222bac38b20" +dependencies = [ + "num-bigint", + "num-traits", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ark-ff-macros" +version = "0.4.2" +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-serialize" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6c2b318ee6e10f8c2853e73a83adc0ccb88995aa978d8a3408d492ab2ee671" +dependencies = [ + "ark-std 0.3.0", + "digest 0.9.0", +] + +[[package]] +name = "ark-serialize" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" +dependencies = [ + "ark-std 0.4.0", + "digest 0.10.7", + "num-bigint", +] + +[[package]] +name = "ark-std" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df2c09229cbc5a028b1d70e00fdb2acee28b1055dfb5ca73eea49c5a25c4e7c" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[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 = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "ascii-canvas" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" +dependencies = [ + "term", +] + +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "pharos", + "rustc_version 0.4.1", +] + +[[package]] +name = "aurora-engine-modexp" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518bc5745a6264b5fd7b09dffb9667e400ee9e2bbe18555fac75e1fe9afa0df9" +dependencies = [ + "hex", + "num", +] + +[[package]] +name = "auto_impl" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[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.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3" + +[[package]] +name = "bech32" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d86b93f97252c47b41663388e6d155714a9d0c398b99f1005cbc5f978b29f445" + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" + +[[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 = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blst" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c79a94619fade3c0b887670333513a67ac28a6a7e653eb260bf0d4103db38d" +dependencies = [ + "cc", + "glob", + "threadpool", + "zeroize", +] + +[[package]] +name = "bs58" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf88ba1141d185c399bee5288d850d63b8369520c1eafc32a0430b5b6c287bf4" +dependencies = [ + "sha2", + "tinyvec", +] + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "byte-slice-cast" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7575182f7272186991736b70173b0ea045398f984bf5ebbb3804736ce1330c9d" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +dependencies = [ + "serde", +] + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.13+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "c-kzg" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0307f72feab3300336fb803a57134159f6e20139af1357f36c54cb90d8e8928" +dependencies = [ + "blst", + "cc", + "glob", + "hex", + "libc", + "once_cell", + "serde", +] + +[[package]] +name = "camino" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e35af189006b9c0f00a064685c727031e3ed2d8020f7ba284d78cc2671bd36ea" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "cc" +version = "1.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8691782945451c1c383942c4874dbe63814f61cb57ef773cda2972682b7bb3c0" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[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.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "coins-bip32" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b6be4a5df2098cd811f3194f64ddb96c267606bffd9689ac7b0160097b01ad3" +dependencies = [ + "bs58", + "coins-core", + "digest 0.10.7", + "hmac", + "k256", + "serde", + "sha2", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-bip39" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8fba409ce3dc04f7d804074039eb68b960b0829161f8e06c95fea3f122528" +dependencies = [ + "bitvec", + "coins-bip32", + "hmac", + "once_cell", + "pbkdf2 0.12.2", + "rand 0.8.5", + "sha2", + "thiserror 1.0.69", +] + +[[package]] +name = "coins-core" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5286a0843c21f8367f7be734f89df9b822e0321d8bcce8d6e735aadff7d74979" +dependencies = [ + "base64 0.21.7", + "bech32", + "bs58", + "digest 0.10.7", + "generic-array", + "hex", + "ripemd", + "serde", + "serde_derive", + "sha2", + "sha3", + "thiserror 1.0.69", +] + +[[package]] +name = "const-hex" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0485bab839b018a8f1723fc5391819fea5f8f0f32288ef8a735fd096b6160c" +dependencies = [ + "cfg-if", + "cpufeatures", + "hex", + "proptest", + "serde", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const_format" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "126f97965c8ad46d6d9163268ff28432e8f6a1196a55578867832e3049df63dd" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d57c2eccfb16dbac1f4e61e206105db5820c9d26c3c472bc17c774259ef7744" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crunchy" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "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", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "data-encoding" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" + +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" +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 = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl 1.0.0", +] + +[[package]] +name = "derive_more" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" +dependencies = [ + "derive_more-impl 2.0.1", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "derive_more-impl" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "unicode-xid", +] + +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "dunce" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" + +[[package]] +name = "dyn-clone" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "ena" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" +dependencies = [ + "log", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enr" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a3d8dc56e02f954cac8eb489772c552c473346fc34f67412bb6244fd647f7e4" +dependencies = [ + "base64 0.21.7", + "bytes", + "hex", + "k256", + "log", + "rand 0.8.5", + "rlp", + "serde", + "sha3", + "zeroize", +] + +[[package]] +name = "enumn" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "eth-keystore" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fda3bf123be441da5260717e0661c25a2fd9cb2b2c1d20bf2e05580047158ab" +dependencies = [ + "aes", + "ctr", + "digest 0.10.7", + "hex", + "hmac", + "pbkdf2 0.11.0", + "rand 0.8.5", + "scrypt", + "serde", + "serde_json", + "sha2", + "sha3", + "thiserror 1.0.69", + "uuid", +] + +[[package]] +name = "eth-riscv-interpreter" +version = "0.1.0" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +dependencies = [ + "goblin", + "rvemu", + "thiserror 2.0.12", +] + +[[package]] +name = "eth-riscv-syscalls" +version = "0.1.0" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +dependencies = [ + "thiserror-no-std", +] + +[[package]] +name = "ethabi" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7413c5f74cc903ea37386a8965a936cbeb334bd270862fdece542c1b2dcbc898" +dependencies = [ + "ethereum-types", + "hex", + "once_cell", + "regex", + "serde", + "serde_json", + "sha3", + "thiserror 1.0.69", + "uint", +] + +[[package]] +name = "ethbloom" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60" +dependencies = [ + "crunchy", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "scale-info", + "tiny-keccak", +] + +[[package]] +name = "ethereum-types" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee" +dependencies = [ + "ethbloom", + "fixed-hash", + "impl-codec", + "impl-rlp", + "impl-serde", + "primitive-types", + "scale-info", + "uint", +] + +[[package]] +name = "ethers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "816841ea989f0c69e459af1cf23a6b0033b19a55424a1ea3a30099becdb8dec0" +dependencies = [ + "ethers-addressbook", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-middleware", + "ethers-providers", + "ethers-signers", + "ethers-solc", +] + +[[package]] +name = "ethers-addressbook" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5495afd16b4faa556c3bba1f21b98b4983e53c1755022377051a975c3b021759" +dependencies = [ + "ethers-core", + "once_cell", + "serde", + "serde_json", +] + +[[package]] +name = "ethers-contract" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fceafa3578c836eeb874af87abacfb041f92b4da0a78a5edd042564b8ecdaaa" +dependencies = [ + "const-hex", + "ethers-contract-abigen", + "ethers-contract-derive", + "ethers-core", + "ethers-providers", + "futures-util", + "once_cell", + "pin-project", + "serde", + "serde_json", + "thiserror 1.0.69", +] + +[[package]] +name = "ethers-contract-abigen" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04ba01fbc2331a38c429eb95d4a570166781f14290ef9fdb144278a90b5a739b" +dependencies = [ + "Inflector", + "const-hex", + "dunce", + "ethers-core", + "ethers-etherscan", + "eyre", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "reqwest", + "serde", + "serde_json", + "syn 2.0.101", + "toml", + "walkdir", +] + +[[package]] +name = "ethers-contract-derive" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87689dcabc0051cde10caaade298f9e9093d65f6125c14575db3fd8c669a168f" +dependencies = [ + "Inflector", + "const-hex", + "ethers-contract-abigen", + "ethers-core", + "proc-macro2", + "quote", + "serde_json", + "syn 2.0.101", +] + +[[package]] +name = "ethers-core" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d80cc6ad30b14a48ab786523af33b37f28a8623fc06afd55324816ef18fb1f" +dependencies = [ + "arrayvec", + "bytes", + "cargo_metadata", + "chrono", + "const-hex", + "elliptic-curve", + "ethabi", + "generic-array", + "k256", + "num_enum", + "once_cell", + "open-fastrlp", + "rand 0.8.5", + "rlp", + "serde", + "serde_json", + "strum", + "syn 2.0.101", + "tempfile", + "thiserror 1.0.69", + "tiny-keccak", + "unicode-xid", +] + +[[package]] +name = "ethers-etherscan" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79e5973c26d4baf0ce55520bd732314328cabe53193286671b47144145b9649" +dependencies = [ + "chrono", + "ethers-core", + "reqwest", + "semver 1.0.26", + "serde", + "serde_json", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-middleware" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48f9fdf09aec667c099909d91908d5eaf9be1bd0e2500ba4172c1d28bfaa43de" +dependencies = [ + "async-trait", + "auto_impl", + "ethers-contract", + "ethers-core", + "ethers-etherscan", + "ethers-providers", + "ethers-signers", + "futures-channel", + "futures-locks", + "futures-util", + "instant", + "reqwest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tracing", + "tracing-futures", + "url", +] + +[[package]] +name = "ethers-providers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6434c9a33891f1effc9c75472e12666db2fa5a0fec4b29af6221680a6fe83ab2" +dependencies = [ + "async-trait", + "auto_impl", + "base64 0.21.7", + "bytes", + "const-hex", + "enr", + "ethers-core", + "futures-core", + "futures-timer", + "futures-util", + "hashers", + "http", + "instant", + "jsonwebtoken", + "once_cell", + "pin-project", + "reqwest", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite", + "tracing", + "tracing-futures", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "ws_stream_wasm", +] + +[[package]] +name = "ethers-signers" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228875491c782ad851773b652dd8ecac62cda8571d3bc32a5853644dd26766c2" +dependencies = [ + "async-trait", + "coins-bip32", + "coins-bip39", + "const-hex", + "elliptic-curve", + "eth-keystore", + "ethers-core", + "rand 0.8.5", + "sha2", + "thiserror 1.0.69", + "tracing", +] + +[[package]] +name = "ethers-solc" +version = "2.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66244a771d9163282646dbeffe0e6eca4dda4146b6498644e678ac6089b11edd" +dependencies = [ + "cfg-if", + "const-hex", + "dirs", + "dunce", + "ethers-core", + "glob", + "home", + "md-5", + "num_cpus", + "once_cell", + "path-slash", + "rayon", + "regex", + "semver 1.0.26", + "serde", + "serde_json", + "solang-parser", + "svm-rs", + "thiserror 1.0.69", + "tiny-keccak", + "tokio", + "tracing", + "walkdir", + "yansi", +] + +[[package]] +name = "eyre" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec" +dependencies = [ + "indenter", + "once_cell", +] + +[[package]] +name = "fastrand" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" + +[[package]] +name = "fastrlp" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "139834ddba373bbdd213dffe02c8d110508dcf1726c2be27e8d1f7d7e1856418" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "fastrlp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce8dba4714ef14b8274c371879b175aa55b16b30f269663f19d576f380018dc4" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", +] + +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core 0.6.4", + "subtle", +] + +[[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 = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" +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 = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[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 = "fs2" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213" +dependencies = [ + "libc", + "winapi", +] + +[[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.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-locks" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45ec6fe3675af967e67c5536c0b9d44e34e6c52f86bedc4ea49c5317b8e94d06" +dependencies = [ + "futures-channel", + "futures-task", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" +dependencies = [ + "gloo-timers", + "send_wrapper 0.4.0", +] + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + +[[package]] +name = "gloo-timers" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "goblin" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" +dependencies = [ + "log", + "plain", + "scroll", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3" +dependencies = [ + "foldhash", + "serde", +] + +[[package]] +name = "hashers" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bca93b15ea5a746f220e56587f71e73c6165eab783df9e26590069953e3c30" +dependencies = [ + "fxhash", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[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 = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7515e6d781098bf9f7205ab3fc7e9709d34554ae0b21ddbcb5febfa4bc7df11d" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5e8338228bdc8ab83303f16b797e177953730f601a96c25d10cb3ab0daa0cb7" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85fb8799753b75aee8d2a21d7c14d9f38921b54b3dbda10f5a3c7a7b82dba5e2" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "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-rlp" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808" +dependencies = [ + "rlp", +] + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "indenter" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683" + +[[package]] +name = "indexmap" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" +dependencies = [ + "equivalent", + "hashbrown", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" +dependencies = [ + "getrandom 0.3.2", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "k256" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + +[[package]] +name = "keccak-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "505d1856a39b200489082f90d897c3f07c455563880bc5952e38eabf731c83b6" +dependencies = [ + "digest 0.10.7", + "sha3-asm", +] + +[[package]] +name = "lalrpop" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" +dependencies = [ + "ascii-canvas", + "bit-set 0.5.3", + "ena", + "itertools 0.11.0", + "lalrpop-util", + "petgraph", + "regex", + "regex-syntax 0.8.5", + "string_cache", + "term", + "tiny-keccak", + "unicode-xid", + "walkdir", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" +dependencies = [ + "regex-automata 0.4.9", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "libc" +version = "0.2.172" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" + +[[package]] +name = "libm" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.9.0", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12" + +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" + +[[package]] +name = "macro-string" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b27834086c65ec3f9387b096d66e99f221cf081c2b738042aa252bcd41204e3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[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 = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "open-fastrlp" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "786393f80485445794f6043fd3138854dd109cc6c4bd1a6383db304c9ce9b9ce" +dependencies = [ + "arrayvec", + "auto_impl", + "bytes", + "ethereum-types", + "open-fastrlp-derive", +] + +[[package]] +name = "open-fastrlp-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003b2be5c6c53c1cfeb0a238b8a1c3915cd410feb684457a36c10038f764bb1c" +dependencies = [ + "bytes", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "parity-scale-codec" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9fde3d0718baf5bc92f577d652001da0f8d54cd03a7974e118d04fc888dc23d" +dependencies = [ + "arrayvec", + "bitvec", + "byte-slice-cast", + "const_format", + "impl-trait-for-tuples", + "parity-scale-codec-derive", + "rustversion", + "serde", +] + +[[package]] +name = "parity-scale-codec-derive" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "581c837bb6b9541ce7faa9377c20616e4fb7650f6b0f68bc93c827ee504fb7b3" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest 0.10.7", + "hmac", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6" +dependencies = [ + "memchr", + "thiserror 2.0.12", + "ucd-trie", +] + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pharos" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" +dependencies = [ + "futures", + "rustc_version 0.4.1", +] + +[[package]] +name = "phf" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "phf_shared" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[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.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "precomputed-hash" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" + +[[package]] +name = "prettyplease" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" +dependencies = [ + "proc-macro2", + "syn 2.0.101", +] + +[[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-rlp", + "impl-serde", + "scale-info", + "uint", +] + +[[package]] +name = "proc-macro-crate" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "proc-macro2" +version = "1.0.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proptest" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14cae93065090804185d3b75f0bf93b8eeda30c7a9b4a33d3bdb3988d6229e50" +dependencies = [ + "bit-set 0.8.0", + "bit-vec 0.8.0", + "bitflags 2.9.0", + "lazy_static", + "num-traits", + "rand 0.8.5", + "rand_chacha 0.3.1", + "rand_xorshift", + "regex-syntax 0.8.5", + "rusty-fork", + "tempfile", + "unarray", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + +[[package]] +name = "r55" +version = "0.1.0" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +dependencies = [ + "alloy-core", + "alloy-primitives", + "alloy-sol-types", + "eth-riscv-interpreter", + "eth-riscv-syscalls", + "ethers", + "eyre", + "hex", + "rand 0.8.5", + "revm", + "rvemu", + "thiserror 2.0.12", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[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", + "serde", +] + +[[package]] +name = "rand" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +dependencies = [ + "rand_chacha 0.9.0", + "rand_core 0.9.3", +] + +[[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_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core 0.9.3", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.2", +] + +[[package]] +name = "rand_xorshift" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.16", + "libredox", + "thiserror 1.0.69", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[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.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "system-configuration", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots", + "winreg", +] + +[[package]] +name = "revm" +version = "19.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c175ecec83bba464aa8406502fe5bf670491c2ace81a153264891d43bc7fa332" +dependencies = [ + "auto_impl", + "cfg-if", + "dyn-clone", + "revm-interpreter", + "revm-precompile", + "serde", + "serde_json", +] + +[[package]] +name = "revm-interpreter" +version = "15.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dcab7ef2064057acfc84731205f4bc77f4ec1b35630800b26ff6a185731c5ab" +dependencies = [ + "revm-primitives", + "serde", +] + +[[package]] +name = "revm-precompile" +version = "16.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99743c3a2cac341084cc15ac74286c4bf34a0941ebf60aa420cfdb9f81f72f9f" +dependencies = [ + "aurora-engine-modexp", + "blst", + "c-kzg", + "cfg-if", + "k256", + "once_cell", + "revm-primitives", + "ripemd", + "secp256k1", + "sha2", + "substrate-bn", +] + +[[package]] +name = "revm-primitives" +version = "15.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f987564210317706def498421dfba2ae1af64a8edce82c6102758b48133fcb" +dependencies = [ + "alloy-eip2930", + "alloy-eip7702", + "alloy-primitives", + "auto_impl", + "bitflags 2.9.0", + "bitvec", + "c-kzg", + "cfg-if", + "dyn-clone", + "enumn", + "hex", + "serde", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "ripemd" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09f" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "riscv_em_nif" +version = "0.1.0" +dependencies = [ + "alloy-core", + "alloy-primitives", + "alloy-sol-types", + "ethers", + "ethers-core", + "hex", + "r55", + "revm", + "rustler", + "serde", + "serde_json", +] + +[[package]] +name = "rlp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ec" +dependencies = [ + "bytes", + "rlp-derive", + "rustc-hex", +] + +[[package]] +name = "rlp-derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672a" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ruint" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78a46eb779843b2c4f21fac5773e25d6d5b7c8f0922876c91541790d2ca27eef" +dependencies = [ + "alloy-rlp", + "ark-ff 0.3.0", + "ark-ff 0.4.2", + "bytes", + "fastrlp 0.3.1", + "fastrlp 0.4.0", + "num-bigint", + "num-integer", + "num-traits", + "parity-scale-codec", + "primitive-types", + "proptest", + "rand 0.8.5", + "rand 0.9.1", + "rlp", + "ruint-macro", + "serde", + "valuable", + "zeroize", +] + +[[package]] +name = "ruint-macro" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48fd7bd8a6377e15ad9d42a8ec25371b94ddc67abe7c8b9127bec79bebaaae18" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc-hex" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6" + +[[package]] +name = "rustc_version" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee" +dependencies = [ + "semver 0.11.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.26", +] + +[[package]] +name = "rustix" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266" +dependencies = [ + "bitflags 2.9.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustler" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0884cb623b9f43d3e2c51f9071c5e96a5acf3e6e6007866812884ff0cb983f1e" +dependencies = [ + "lazy_static", + "rustler_codegen", + "rustler_sys", +] + +[[package]] +name = "rustler_codegen" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e277af754f2560cf4c4ebedb68c1a735292fb354505c6133e47ec406e699cf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "rustler_sys" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76ba8524729d7c9db2b3e80f2269d1fdef39b5a60624c33fd794797e69b558" +dependencies = [ + "regex", + "unreachable", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.14", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.14", + "untrusted 0.9.0", +] + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + +[[package]] +name = "rusty-fork" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f" +dependencies = [ + "fnv", + "quick-error", + "tempfile", + "wait-timeout", +] + +[[package]] +name = "rvemu" +version = "0.0.11" +source = "git+https://github.com/r55-eth/rvemu.git#3f4f7a779c89b5545a4df4c0a864d41797fc35ef" +dependencies = [ + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scale-info" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346a3b32eba2640d17a9cb5927056b08f3de90f65b72fe09402c2ad07d684d0b" +dependencies = [ + "cfg-if", + "derive_more 1.0.0", + "parity-scale-codec", + "scale-info-derive", +] + +[[package]] +name = "scale-info-derive" +version = "2.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6630024bf739e2179b91fb424b28898baf819414262c5d376677dbff1fe7ebf" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "scroll" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1783eabc414609e28a5ba76aee5ddd52199f7107a0b24c2e9746a1ecc34a683d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "scrypt" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f9e24d2b632954ded8ab2ef9fea0a0c769ea56ea98bddbafbad22caeeadf45d" +dependencies = [ + "hmac", + "pbkdf2 0.11.0", + "salsa20", + "sha2", +] + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.14", + "untrusted 0.9.0", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "secp256k1" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +dependencies = [ + "rand 0.8.5", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "semver" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9900206b54a3527fdc7b8a938bffd94a568bac4f4aa8113b209df75a09c0dec2" +dependencies = [ + "pest", +] + +[[package]] +name = "send_wrapper" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f638d531eccd6e23b980caf34876660d38e265409d8e99b397ab71eb3612fad0" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.219" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "serde_json" +version = "1.0.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +dependencies = [ + "indexmap", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +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 = "sha3-asm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28efc5e327c837aa837c59eae585fc250715ef939ac32881bcc11677cd02d46" +dependencies = [ + "cc", + "cfg-if", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simple_asn1" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror 2.0.12", + "time", +] + +[[package]] +name = "siphasher" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" + +[[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.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" + +[[package]] +name = "socket2" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "solang-parser" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c425ce1c59f4b154717592f0bdf4715c3a1d55058883622d3157e1f0908a5b26" +dependencies = [ + "itertools 0.11.0", + "lalrpop", + "lalrpop-util", + "phf", + "thiserror 1.0.69", + "unicode-xid", +] + +[[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 = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_cache" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" +dependencies = [ + "new_debug_unreachable", + "parking_lot", + "phf_shared", + "precomputed-hash", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.101", +] + +[[package]] +name = "substrate-bn" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b5bbfa79abbae15dd642ea8176a21a635ff3c00059961d1ea27ad04e5b441c" +dependencies = [ + "byteorder", + "crunchy", + "lazy_static", + "rand 0.8.5", + "rustc-hex", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "svm-rs" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11297baafe5fa0c99d5722458eac6a5e25c01eb1b8e5cd137f54079093daa7a4" +dependencies = [ + "dirs", + "fs2", + "hex", + "once_cell", + "reqwest", + "semver 1.0.26", + "serde", + "serde_json", + "sha2", + "thiserror 1.0.69", + "url", + "zip", +] + +[[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.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn-solidity" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4560533fbd6914b94a8fb5cc803ed6801c3455668db3b810702c57612bac9412" +dependencies = [ + "paste", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" +dependencies = [ + "fastrand", + "getrandom 0.3.2", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[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.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "time" +version = "0.3.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" + +[[package]] +name = "time-macros" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" +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 = "tokio" +version = "1.44.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +dependencies = [ + "futures-util", + "log", + "rustls", + "tokio", + "tokio-rustls", + "tungstenite", + "webpki-roots", +] + +[[package]] +name = "tokio-util" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "toml_write", + "winnow", +] + +[[package]] +name = "toml_write" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfb942dfe1d8e29a7ee7fcbde5bd2b9a25fb89aa70caea2eba3bee836ff41076" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.20.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand 0.8.5", + "rustls", + "sha1", + "thiserror 1.0.69", + "url", + "utf-8", +] + +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[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 = "unarray" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94" + +[[package]] +name = "unicode-ident" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unreachable" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56" +dependencies = [ + "void", +] + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.16", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "void" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" + +[[package]] +name = "wait-timeout" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11" +dependencies = [ + "libc", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.101", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[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.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[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-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.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[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.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e27d6ad3dac991091e4d35de9ba2d2d00647c5d0fc26c5496dee55984ae111b" +dependencies = [ + "memchr", +] + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "ws_stream_wasm" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" +dependencies = [ + "async_io_stream", + "futures", + "js-sys", + "log", + "pharos", + "rustc_version 0.4.1", + "send_wrapper 0.6.0", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yansi" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +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.101", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2 0.11.0", + "sha1", + "time", + "zstd", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.15+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/native/riscv_em_nif/Cargo.toml b/native/riscv_em_nif/Cargo.toml new file mode 100644 index 000000000..61ca2beef --- /dev/null +++ b/native/riscv_em_nif/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "riscv_em_nif" +version = "0.1.0" +edition = "2024" +authors = ["Load Network Team"] + +[lib] +name = "load_revm_nif" +path = "src/lib.rs" +crate-type = ["cdylib"] + +[dependencies] +revm = { version = "19.4.0", features = ["std"] } +r55 = { git = "https://github.com/loadnetwork/r55.git", branch = "main" } + +rustler = "0.29.1" +alloy-core = "0.8.20" +alloy-primitives = "0.8.20" +alloy-sol-types = "0.8.20" +hex = "0.4" +serde = {version = "1.0.219", features=["derive"]} +serde_json = "1.0.140" +ethers-core = "2.0.14" +ethers = {version = "2.0.14", features=["rustls"]} diff --git a/native/riscv_em_nif/src/core/mod.rs b/native/riscv_em_nif/src/core/mod.rs new file mode 100644 index 000000000..efb59e8b0 --- /dev/null +++ b/native/riscv_em_nif/src/core/mod.rs @@ -0,0 +1 @@ +pub mod riscv_machine; \ No newline at end of file diff --git a/native/riscv_em_nif/src/core/riscv_machine.rs b/native/riscv_em_nif/src/core/riscv_machine.rs new file mode 100644 index 000000000..3c58627f5 --- /dev/null +++ b/native/riscv_em_nif/src/core/riscv_machine.rs @@ -0,0 +1,12 @@ +use r55::exec::eval_tx; +use r55::eval_utils::LoadEvmConfig; +use crate::utils::constants::{GAS_PRICE, TX_GAS_LIMIT}; +use revm::InMemoryDB; + +type RevmDb = revm::db::CacheDB>; + +pub fn evaluate_raw_tx(mut state: RevmDb, raw_tx_hex: &str) { + let evm_config = LoadEvmConfig::custom(Some(TX_GAS_LIMIT), Some(GAS_PRICE)); + let evaluated_state = eval_tx(&mut state, raw_tx_hex, Some(evm_config)).unwrap(); + +} \ No newline at end of file diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs new file mode 100644 index 000000000..a25a4d179 --- /dev/null +++ b/native/riscv_em_nif/src/lib.rs @@ -0,0 +1,2 @@ +pub mod core; +pub mod utils; \ No newline at end of file diff --git a/native/riscv_em_nif/src/main.rs b/native/riscv_em_nif/src/main.rs new file mode 100644 index 000000000..e7a11a969 --- /dev/null +++ b/native/riscv_em_nif/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} diff --git a/native/riscv_em_nif/src/utils/constants.rs b/native/riscv_em_nif/src/utils/constants.rs new file mode 100644 index 000000000..29323af8d --- /dev/null +++ b/native/riscv_em_nif/src/utils/constants.rs @@ -0,0 +1,2 @@ +pub const TX_GAS_LIMIT: u64 = 10_000_000_000; +pub const GAS_PRICE: u64 = 47; \ No newline at end of file diff --git a/native/riscv_em_nif/src/utils/mod.rs b/native/riscv_em_nif/src/utils/mod.rs new file mode 100644 index 000000000..987b09fc8 --- /dev/null +++ b/native/riscv_em_nif/src/utils/mod.rs @@ -0,0 +1 @@ +pub mod constants; \ No newline at end of file From f43c1731b7fed6b49b80857634d4216617e09d31 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Fri, 2 May 2025 21:55:35 +0200 Subject: [PATCH 02/12] feat: erc20 deploy test --- native/riscv_em_nif/Cargo.lock | 10 +- native/riscv_em_nif/src/core/mod.rs | 3 +- native/riscv_em_nif/src/core/riscv_machine.rs | 11 +- native/riscv_em_nif/src/core/state.rs | 192 ++++++++++++++++++ native/riscv_em_nif/src/main.rs | 8 + .../src/tests/erc20-bytecode-signed.txt | 1 + .../src/tests/erc20-mint-signed.txt | 1 + native/riscv_em_nif/src/tests/erc20.rs | 17 ++ native/riscv_em_nif/src/tests/mod.rs | 1 + native/riscv_em_nif/src/utils/constants.rs | 3 +- 10 files changed, 234 insertions(+), 13 deletions(-) create mode 100644 native/riscv_em_nif/src/core/state.rs create mode 100644 native/riscv_em_nif/src/tests/erc20-bytecode-signed.txt create mode 100644 native/riscv_em_nif/src/tests/erc20-mint-signed.txt create mode 100644 native/riscv_em_nif/src/tests/erc20.rs create mode 100644 native/riscv_em_nif/src/tests/mod.rs diff --git a/native/riscv_em_nif/Cargo.lock b/native/riscv_em_nif/Cargo.lock index 91df5902a..1bc695b45 100644 --- a/native/riscv_em_nif/Cargo.lock +++ b/native/riscv_em_nif/Cargo.lock @@ -1164,7 +1164,7 @@ dependencies = [ [[package]] name = "eth-riscv-interpreter" version = "0.1.0" -source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#f6248a3d5a54ba51c06fb3fd5c7310bf1a515623" dependencies = [ "goblin", "rvemu", @@ -1174,7 +1174,7 @@ dependencies = [ [[package]] name = "eth-riscv-syscalls" version = "0.1.0" -source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#f6248a3d5a54ba51c06fb3fd5c7310bf1a515623" dependencies = [ "thiserror-no-std", ] @@ -2947,7 +2947,7 @@ checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" [[package]] name = "r55" version = "0.1.0" -source = "git+https://github.com/loadnetwork/r55.git?branch=main#d4cb6bb6cdc3c89b9ceab76d8af9486b7ee50191" +source = "git+https://github.com/loadnetwork/r55.git?branch=main#f6248a3d5a54ba51c06fb3fd5c7310bf1a515623" dependencies = [ "alloy-core", "alloy-primitives", @@ -4818,9 +4818,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.7.8" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e27d6ad3dac991091e4d35de9ba2d2d00647c5d0fc26c5496dee55984ae111b" +checksum = "d9fb597c990f03753e08d3c29efbfcf2019a003b4bf4ba19225c158e1549f0f3" dependencies = [ "memchr", ] diff --git a/native/riscv_em_nif/src/core/mod.rs b/native/riscv_em_nif/src/core/mod.rs index efb59e8b0..1abe541a3 100644 --- a/native/riscv_em_nif/src/core/mod.rs +++ b/native/riscv_em_nif/src/core/mod.rs @@ -1 +1,2 @@ -pub mod riscv_machine; \ No newline at end of file +pub mod riscv_machine; +pub mod state; \ No newline at end of file diff --git a/native/riscv_em_nif/src/core/riscv_machine.rs b/native/riscv_em_nif/src/core/riscv_machine.rs index 3c58627f5..55d70252c 100644 --- a/native/riscv_em_nif/src/core/riscv_machine.rs +++ b/native/riscv_em_nif/src/core/riscv_machine.rs @@ -1,12 +1,11 @@ use r55::exec::eval_tx; -use r55::eval_utils::LoadEvmConfig; +use r55::eval_utils::{LoadEvmConfig, EvalTxResult}; use crate::utils::constants::{GAS_PRICE, TX_GAS_LIMIT}; -use revm::InMemoryDB; -type RevmDb = revm::db::CacheDB>; +pub type RevmDb = revm::db::CacheDB>; -pub fn evaluate_raw_tx(mut state: RevmDb, raw_tx_hex: &str) { +pub fn evaluate_raw_tx(mut state: RevmDb, raw_tx_hex: &str) -> (RevmDb, EvalTxResult) { let evm_config = LoadEvmConfig::custom(Some(TX_GAS_LIMIT), Some(GAS_PRICE)); - let evaluated_state = eval_tx(&mut state, raw_tx_hex, Some(evm_config)).unwrap(); - + let tx_result: EvalTxResult = eval_tx(&mut state, raw_tx_hex, Some(evm_config)).unwrap(); + (state, tx_result) } \ No newline at end of file diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs new file mode 100644 index 000000000..0f19fd766 --- /dev/null +++ b/native/riscv_em_nif/src/core/state.rs @@ -0,0 +1,192 @@ +use alloy_primitives::{map::foldhash::fast::RandomState, Address, Bytes, U256}; +use r55::test_utils::AccountInfo; +use revm::db::DbAccount; +use revm::db::{CacheDB, EmptyDB}; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use r55::test_utils::Bytecode; +use crate::utils::constants::EIP1967_IMPLEMENTATION_SLOT; + +#[derive(Serialize, Deserialize)] +pub struct AccountState { + pub nonce: u64, + pub balance: String, + pub code: Option, +} + +#[derive(Serialize, Deserialize)] +pub struct EvmState { + pub accounts: HashMap, + pub storage: HashMap>, +} + +/// serialize EVM state +pub fn serialize_state(db: HashMap) -> Result { + let mut accounts = HashMap::new(); + let mut storage = HashMap::new(); + + // extract accounts from the database + for (address, account_info) in db.clone() { + let address_hex = format!("0x{:x}", address); + + // Check if this is a contract + let is_contract = account_info.info.code.is_some(); + + // create account state + let account_state = AccountState { + nonce: account_info.info.nonce, + balance: account_info.info.balance.to_string(), + code: if let Some(bytecode) = account_info.info.code { + if !bytecode.is_empty() { + // Check if the bytecode is non-empty + Some(format!("0x{}", hex::encode(bytecode.bytecode().clone()))) + } else { + None + } + } else { + None // EOAs + }, + }; + + accounts.insert(address_hex.clone(), account_state); + + let mut account_storage = HashMap::new(); + for (slot, value) in account_info.storage.iter() { + let slot_hex = format!("0x{:x}", slot); + let value_hex = format!("0x{:x}", value); + account_storage.insert(slot_hex, value_hex); + } + + // For contracts, always check the implementation slot even if other storage is empty + if is_contract { + // If this slot exists in storage, it's a proxy contract + if let Some(impl_value) = account_info + .storage + .get(&parse_u256(EIP1967_IMPLEMENTATION_SLOT).unwrap()) + { + let impl_hex = format!("0x{:x}", impl_value); + account_storage.insert(EIP1967_IMPLEMENTATION_SLOT.to_string(), impl_hex); + } + } + + // Only insert storage if it's not empty or if it's a contract + if !account_storage.is_empty() || is_contract { + storage.insert(address_hex, account_storage); + } + } + + // final state object + let state = EvmState { accounts, storage }; + + // JSON serialized state + serde_json::to_string(&state).map_err(|e| format!("Failed to serialize state: {}", e)) +} + +/// deserialize EVM state +pub fn deserialize_state(state_json: &str) -> Result, String> { + let state: EvmState = serde_json::from_str(state_json) + .map_err(|e| format!("Failed to parse state JSON: {}", e))?; + + // a new database + let mut db = CacheDB::new(EmptyDB::default()); + + // Populate the database with accounts and storage + for (address_hex, account_state) in state.accounts { + let address = match parse_address(&address_hex) { + Ok(addr) => addr, + Err(e) => return Err(format!("invalid address {}: {}", address_hex, e)), + }; + + let balance = match account_state.balance.parse::() { + Ok(b) => b, + Err(_) => return Err(format!("invalid balance: {}", account_state.balance)), + }; + + let mut account_info = AccountInfo { + nonce: account_state.nonce, + balance, + code: None, + code_hash: revm::primitives::KECCAK_EMPTY, + }; + + // Set code if provided (for smart contracts, null for EOAs) + if let Some(code_hex) = account_state.code { + let code = match hex::decode(code_hex.trim_start_matches("0x")) { + Ok(c) => c, + Err(_) => return Err(format!("Invalid code: {}", code_hex)), + }; + + let bytecode = Bytecode::new_raw(code.into()); + account_info.code_hash = ethers_core::utils::keccak256(bytecode.bytes_slice()).into(); + account_info.code = Some(bytecode); + } + + db.insert_account_info(address, account_info); + + // set storage if available + if let Some(account_storage) = state.storage.get(&address_hex) { + for (slot_hex, value_hex) in account_storage { + let slot = match parse_u256(slot_hex) { + Ok(s) => s, + Err(e) => return Err(format!("Invalid storage slot {}: {}", slot_hex, e)), + }; + + let value = match parse_u256(value_hex) { + Ok(v) => v, + Err(e) => return Err(format!("Invalid storage value {}: {}", value_hex, e)), + }; + + let _ = db.insert_account_storage(address, slot, value); + } + } + } + + Ok(db) +} + +pub fn parse_address(addr: &str) -> Result { + let addr = addr.trim_start_matches("0x"); + if addr.len() != 40 { + return Err("Address must be 20 bytes (40 hex characters)".to_string()); + } + + let bytes = match hex::decode(addr) { + Ok(b) => b, + Err(_) => return Err("Invalid hex string".to_string()), + }; + + let mut address = [0u8; 20]; + address.copy_from_slice(&bytes); + Ok(address.into()) +} + +pub fn parse_u256(value: &str) -> Result { + if value.starts_with("0x") { + let hex_val = value.trim_start_matches("0x"); + match U256::from_str_radix(hex_val, 16) { + Ok(v) => Ok(v), + Err(_) => Err("Invalid hex value".to_string()), + } + } else { + match value.parse::() { + Ok(v) => Ok(v), + Err(_) => Err("Invalid decimal value".to_string()), + } + } +} + +pub fn json_error(message: &str) -> String { + let mut response = serde_json::Map::new(); + response.insert("success".to_string(), serde_json::Value::Bool(false)); + response.insert( + "error".to_string(), + serde_json::Value::String(message.to_string()), + ); + + serde_json::to_string(&response).unwrap_or_else(|_| { + format!( + "{{\"success\":false,\"error\":\"{}\"}}", + message.replace("\"", "\\\"") + ) + }) +} diff --git a/native/riscv_em_nif/src/main.rs b/native/riscv_em_nif/src/main.rs index e7a11a969..7b3ee1bf7 100644 --- a/native/riscv_em_nif/src/main.rs +++ b/native/riscv_em_nif/src/main.rs @@ -1,3 +1,11 @@ +mod core; +mod utils; +mod tests; + +use revm::primitives::db; + +use crate::core::riscv_machine::evaluate_raw_tx; +use crate::core::state::{serialize_state, deserialize_state}; fn main() { println!("Hello, world!"); } diff --git a/native/riscv_em_nif/src/tests/erc20-bytecode-signed.txt b/native/riscv_em_nif/src/tests/erc20-bytecode-signed.txt new file mode 100644 index 000000000..8b918b4ab --- /dev/null +++ b/native/riscv_em_nif/src/tests/erc20-bytecode-signed.txt @@ -0,0 +1 @@ +fa02dc7080850af16b16008435a4e9008080ba02dc19ff7f454c460201010000000000000000000200f3000100000000003080000000004000000000000000b8d80200000000000100000040003800060040000d000b000100000005000000001000000000000000003080000000000000308000000000a23b000000000000a23b00000000000000100000000000000100000004000000a84b000000000000a83b308000000000a83b308000000000e0f3010000000000e0f301000000000000100000000000000100000006000000883f020000000000882f328000000000882f32800000000000000000000000001000a000000000000010000000000000010000000600000000400200000000000000108000000000000010800000000000000000000000000000200000000000001000000000000051e574640600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000070040000009340020000000000000000000000000000000000000000003400000000000000340000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009700000083b0000167800000130000001800308000000000735040307350403493000000130100009301000013020000930200001303000093030000130400009304000093060000130700009307000013080000930800001309000093090000130a0000930a0000130b0000930b0000130c0000930c0000130d0000930d0000130e0000930e0000130f0000930f0000973102009381816ff32340f1b70200009382020063f472006f002019b712000093820280b382530217030000130383f433035340137103ff330401006f004000411106e4732540f197400000e780208021cd97300000e780607f173502001305e5e997350200938565e9173602001306e6e86378b5001462210614e12105e36cb5fe8146014617350200130525e79735a2009385a5e76377b500233005002105e36db5fe0145814597300000e780e07a97100000e78020c7130101f8233011002334510023386100233c71002330c1032334d1032338e103233cf1032330a1042334b1042338c104233cd1042330e1062334f10623380107233c110733050100ef00c00483300100833281000333010183338101033e0102833e8102033f0103833f810303350104833581040336010583368105033701068337810603380107833881071301010873002030411106e47326203493151600858163540602314563fda5008e0517350200130525d32e951c6181c7a2604101828797300000e7800063414663fac5008e05173602001306e6c8b2958c6189e597300000e7806063829597300000e780c0626f000000011106ec22e826e44ae09736020003c006d417360200130606d41c6213870702b704a00063ebe404b2979384870018e2a9c42a8403c006d41385f7026199b306c540e1063707a000636fd70214e205cd130900022330250113060002268597400000e780608f4a8508e004e408e8e2604264a26402690561828017450000130685a4054531a017450000130645a521459305000297100000e780e01d1d7186eca2e8a6e4cae0130600022a8963f5c5007d567e1699a0ae8405447e0408680c6c107014642ae42ee832ec36e008108a8597000000e78000f34275631c9500227593058400268697400000e7806087012505cd7d557e1513063500ca8690e2233409018cea7d557e152905591588ee174500001305459e88f21d4588f6e6604664a6640669256182806265c265226682662afc2ef832f436f00810b145c1cd034605000505fd157dda0a850c1097000000e78040ebc2669395160063c3050aa2678dc917350200034085be17350200130685be1862b304b7003704a00005456362940832971308870004e22e86631508008da8014605481305180097440000938484ad85c603c407001377f40011802694034404002697034707008507a30f85fe2300e500fd160905f1fe7d557e152905e315a6f2036501038365c102036681030215836641034d8d0216f255558eca8688e690ea8cce7d557e15290588e239bf0145172602001306068097100000e7808006011106ec033805001008914691c6231006000906fd16e5fe13060003c2662303c10013068007a303c1002304d10013d68603a307c10013d606032307c10013d68602a306c10013d606022306c10013d68601a305c10013d606012305c100a182a304d100114693069100174700001307679f05c68347080013f5f7009183ba9783c707003a9503450500a38ff6fe2380a60089067d16050871fe907d8879146e9305610029468296e26005618280597186f408610861173600000336a66cb306a040e98e3386c6026992973600009386e66c369603460600aaecb2d2a8082afc1725000013050578aae0c810aae4173500001305e591aae8172502001305053b2ae40d452ae802f43018947d887932ec89452ef03000b68597100000e780a04ea67065618280797106f422f026ec00610860ae8459c58c7c8878946d930504012ee097450000938525972946829626e42308a100a30801001745000093056596170500001307653b28001946a28697300000e78020c6174500009305e5941725000013074537280039468a8697300000e78040c48345110103450101a9c9937515000545a9e522658345450291899de50c7d0879946d972502009385e532094635a08c7c88789c6d97450000938585854146a2700274e264456182870c7d0879946d9725020093851530054682960589a2700274e26445618280797106f422f02e848c7d10610878946d32e497450000938595893d46829622e8230ca100a30c01001735000093054577170500001307c5ef08081146340097300000e78080b9834591010345810185cd93751500054585e9426583454502918991e90c7d0879946d9725020093852528094609a80c7d0879946d972502009385f526054682960589a270027445618280757106e52e8883e5450213f6050115ea93f50502bde1834505001305400663eca5083bd6a5023305a602899de615e191171502001305c55c97320000e7822235bda897320000e782623793f7f500ba8663e5c7001387770519a01387070397320000e782a223f5f197320000e782e221171502009305a55825a897320000e782e23393f7f500ba8663e5c7001387770319a01387070397320000e7822220f5f197320000e782621e1715020093052555094642852da82946094563f9c50093e5050330002a962300b60019a8e615e191171502001305c55297320000e782a22c3400aa961347350085454285014697100000e780003eaa6049618280757106e503e645029376060191ea1376060239e2aa604961172300006700e32e97320000e782a22a1375f6003e876365d5009307750519a09307050397320000e782222175f297320000e782c218171502009307054b25a897320000e78222271375f6003e876365d5009307750319a09307050397320000e782a21d75f297320000e7824215171502009307854709462e85be8597100000e780e033aa60496182800c617d567e169306a600b3a6d5000506b2953306d040f18d1d46639ac500086d0c6d9c710c71107513050503828782809061fd56fe16a9066318d600a1055146173300006700a32d397106fc28001306000397300000e780802c280097300000e78000b29725020003c0c56a972502001386c56a1462f9659b8515ab3387b600b707a00063eee700b296a10618e289caf9659b8515ab0ce114e52338050082801735000013068563054597100000e780e0b8011106ec22e826e42a8404690861639ba4001735000093054561228597100000e780a0ab08642695fd552300b500850404e8e2604264a26405618280797106f422f026ec2e848c7d1478986d930485002ae0173500009305454619463685029722e42308a100a30801001735000093056546170500001307a5e328001146a68697300000e7806087173500009305c54417050000130745b4280015468a8697300000e7808085834511010345010185cd93751500054585e9226583454502918991e90c7d0879946d97250200938525f4094609a80c7d0879946d972502009385f5f2054682960589a2700274e26445618280397106fc22f826f44af01061fd56fe161387a6003327e60085063696b306e040758e0e06973600009386861e369610622e8402860c7c1478986d930485012ae4173500009305753a35463685029722e8230ca100a30c0100173500009305c53917150000130725fc08083546a68697200000e7806079173500009305453617150000130765b608081146340097200000e78080778345910103458101638c05209375150005456397052042658345450291896398052a0c7d0879946d972502009385c5e569a40c7c08789c6d97350000938515353546e5a021052ae8173500009305c53e17150000130705a131466daa21052ae8173500009305453117050000130725b31d464da20c7c08789c6d973500009385153039465da00c7c1478986d9304850061052ae4173500009305453829463685029722e8230ca100a30c01001735000093052529171500001307e59708081146a68697200000e780e06a173500009305853517150000130705d408080d46340097200000e7800069834591010345810163880512937515000545639305124265834545029189639c051a0c7d0879946d97250200938545d74da20c7c08789c6d973500009385d5241d46e2704274a27402792161828721052ae8173500009305c52517150000130725a25946e1a00c7c930485001478986d1309850165052ae4173500009305052841463685029722e8230ca100a30c0100173500009305651c171500001307258b08081146a68697200000e780205e173500009305a527170500001307c5a808081546ca8697200000e780405c1735000093051526171500001307859a08080d46340097200000e780605a8345910103458101b9c19375150005459ded4265834545029189ede90c7d0879946d97250200938505c97da821052ae8173500009305e52317150000130705d715461408228597100000e780c03f0589e2704274a2740279216182800c7c1478986d9304850061052ae4173500009305951e3d463685029722e8230ca100a30c0100173500009305a50e170500001307657d08081146a68697200000e780605017350000930565eb17f5ffff1307657208082146340097200000e780804e8345910103458101c1d5937515000545c1f14265834545029189b1e10c7d0879946d97250200938525bd094689a00c7d0879946d972502009385f5bb05a80c7d0879946d972502009385f5ba05a00c7d0879946d972502009385f5b901a80c7d0879946d972502009385f5b80546829605b7357106ed97300000e780c0a7aa85280897f0ffffe780805148002c0897000000e780a0ad28084c0097000000e7800004280897000000e78080af280897000000e780c0b3173500009305251779651b0605ab280897000000e78040510275a27597300000e780c09f357106ed22e926e54ae12a8903c5150103c6050183c6250103c735012205518dc2066207d98e558d2ad803c5950003c6850083c6a50003c7b5002205518dc2066207d98e558d03c6d50083c6c50003c7e50083c7f5002206558e4207e2075d8f598e0216518d2af403c5150003c6050083c6250003c735002205518dc2066207d98e558d03c6550083c6450003c7650083c575002206558e4207e205d98dd18d82154d8d2af082fc82f882f482f0e810973500001387e5edd1451010d14697300000e78060bd6675c67526768676aaecaee8b2e4b6e028008c0097f0ffffe780a03402fce26602f802f41305100202f063f2a614426617350000130785dd0810b68597300000e78020b96275c27522768276aaecaee8b2e4b6e0a80882f082f482f882fc1303010691433708ff001307f00f93188701c167938207f06389030803441500034e0500834625000347350022043364c401c2066207d98eb3e48600034755000344450003466500834575002207418f93170601e205dd8dd98d13970502b366970093d78601b3f7070113d78600337717015d8f9bd585012206d18dd98d1bd686010216b3f60601e206558eb3f65400a216621eb366de00558ed18d2330b30061152103fd13e39b03f60677a6774678e6788d440d459302500581450146814673000000233c09002338090023340900233009000545ca8588f12334090223380902233c09020945a8e12334090423380904233c0904a4f12334090623380906233c0906ea604a64aa640a690d61828017350000130625c893050002368597200000e780a03f97300000e780e0812e868c658546971502009385659a171300006700839d828097320000e782629356e45ae02a84833a0501146133855641b284ae896366c502033a8400338b9a0033055a01ce85268697300000e780e0ad23386401014597320000e78282908280338b9a0063645b091399160063632b015a892145636325012149634b09069dca17250200130645ea1c6233872701b705a000054563efe5040c64b297138a870018e263080a045285368697300000e780c0a725a017250200034085e617250200130585e61061b3052601b706a00063edb6002a96130a86000ce163070a002334440123302401a9bf054521a0014511a0014597150200138625a3ca8597000000e78080345d7186e4a2e026fc4af84ef452f056ec5ae813060008ae842a8b63f8c502da8580698861631ba40017150200930505935a8597000000e780e025da858865229523009500050480e975a01bd5b40002c619e91305d10093d5640093e5050c2306b1008949a1a81bd5040115e11305e10093d5c40093e5050e2306b10093954403e99193850508a306b1008d4905a81305f10093d5240193e5050f2306b1009395e402e99193850508a306b10093954403e991938505082307b1009149033a0b0103360b0093f5f40393850508b30646412300b50063eb360383348b00b30a3a01338544016c004e8697300000e780a09323385b010145a6600664e2744279a279027ae26a426b61618280b30a3a0163e24a091319160063e32a01568921456363250121496349090615ca17250200930665cf9c6233872701b705a000054563ede50483358b00b6979384870098e2a9c4268597300000e780008d25a0172502000340c5cb172502001305c5cb1061b3052601b706a00063ecb6002a96930486000ce191c423349b0023302b0191bf054521a0014511a001459715020013868588ca8597000000e780e01997220000e782026a56e4aa84833a0501146133855641328aae896367c502806433055401ce85528697300000e78000858868529588e8e2704274a2740279e269426aa26a2161828033854a016361550913991600636325012a8921456363250121496348090695ca172502001306e5c01c6233872701b705a000054563ece5048c64b2971384870018e229c42285368697200000e780807e25a017250200034045bd17250200130545bd1061b3052601b706a00063ebb6002a96130486000ce109c480e423b02401a1bf054521a0014511a00145970502001386257aca8597000000e780800b797106f422f026ec4ae84ee4aa891061130516002e8949c59314160063639500aa84214563639500a14463cc04061dca17250200930605b69c6233879700b705a000054563e0e50683b58900b6971384870098e221c8228597200000e780a07315e42da817250200034045b217250200130545b21061b3059600b706a00063efb6002a96130486000ce109c84e8500e504e197220000e782425c8280054519a011a00145a6854a8697000000e780800011e5328597000000e780000197000000e780a0037971aa85170502001305056397220000e78242560a8597200000e78020ed18611c659079947d3a85be85171300006700a3c997000000e7808000411106e42a862e85b28597000000e780c0b5797106f422f026ec106108422e8409cd85456311b50a0c7c08789c6d9705020093855569254679a80c7c0878946d93044600210632e097050200938525664d46829622e42308a100a3080100170502009305f565171500001307452c280005460544a68697200000e780c0ca1705020093050564171500001307a531280015468a8697200000e780e0c88345110103450101b9c5058931e522658345450291899de50c7d0879946d971502009385c537094635a00c7c08789c6d97050200938505604d46a2700274e264456182870c7d0879946d971502009385f534054682962a8413751400a2700274e2644561828010610866186a9079947dba85171300006700c3b7757106e52e8883e54502086113f6050115ea93f50502bde1834505001305400663eca5083bd6a5023305a602899de615e191170502001305056997220000e7826241bda897220000e782a24393f7f500ba8663e5c7001387770519a01387070397220000e782e22ff5f197220000e782222e170502009305e56425a897220000e782224093f7f500ba8663e5c7001387770319a01387070397220000e782622cf5f197220000e782a22a1705020093056561094642852da82946094563f9c50093e5050330002a962300b60019a8e615e191170502001305055f97220000e782e2383400aa961347350085454285014697000000e780404aaa60496182806d7106e622e2a6fdcaf9cef5d2f1d6eddae9dee5e2e166fd6af96ef5ae8403bb8503833c8500006983bb0503833a8b01171502009305851f05465e85829a03e64402aa8481451604338c8c00137d460017150200130aa51c130900039309800717250000930de57313f61400638a8c1166842e85938c0c028544854575f6058963120d0601c909465e85d285829a8544854579f9a8109305000281c9a3000500230005000905fd15f5f923032103a3033103ac1013060004281097200000e780603c130500029305910211c597220000e782421a65fd93056102130620045e85829a61a819e91715020093051514054685445e85829a854525f90545a302a1025ee45ae8130551022aeca8109305000281c9a3000500230005000905fd15f5f923032103a3033103ac1013060004281097200000e7800035130500029305910211c597220000e782e21265fd2800930561021306200497100000e780c07901c58544854511b7171502009305950b2800094697100000e7800078aa848545edb5054501ea171502009305550a05465e85829ab2601264ee744e79ae790e7aee6a4e6bae6b0e6cea7c4a7daa7d51618280797106f422f026ec08612e848c7d04610878946d938584012ee0970502009385b53e1d46829622e42308a100a3080100170502009305c53d17050000130785e128001946a68697200000e7808091172500009305654e1705000013072506280011468a8697200000e780a08f834511010345010185cd93751500054585e9226583454502918991e90c7d0879946d97150200938545fe094609a80c7d0879946d97150200938515fd054682960589a2700274e26445618280086103330501131613000906634706081c650dca171502000340a55f171502009306a55f03b80600b308c800b702a000054563e512073698210823b0160163140800a9a80548130500032300a80013058007a300a80013053800972600009388c64d6306030203c707009376f7001183469703470700c69683c606008507a30fe5fe2300d5007d130905e31e03fc2e85c285170300006700c3380145970502009386a522b285368697000000e780e0a810610866186a9079947dba85170300006700237518651c699079947d3a85be85170300006700e37397220000e78202fadeece2e8e6e402e402ec9306000236f400728d462308d1022afcaee069c00876033a060003398600833a06019315350093d93500930b840193058003330bb50293048a00094c854c630b0b0c906001ca8666627583b584ff946e829669ed08742af48345040308682308b10201cd631f950103b50b00120556950c61086593b5150031a003b50b00854511a0814510602ee42ae8630d8601631d960103b50bff1205569510610c651336160031a0014621a083b50bff054608701205b386aa00886294661304840332ec2ef02c008296938b8b03130b8bfcc1043dd5a9a8006e833a0601033a06000339860012049359440093048a0005c4906001ca8666627583b584ff946e82961de5d68588619065c10a2c0002964114c10471dd29a863fe29019209d299866662754e870c631067946e829619c1054511a0014597220000e782e2eae66b466ca66c0d618280597186f4a2f0a6eccae8cee4d2e056fc5af85ef462f066ec6ae86ee4aa8403654502ba893689328aae8b13741500b70a110019c0930ab002937545004e9499e1814b15a08145630f0a0033864b01de8603870600132707fc134717008506ba95e398c6fe2e948c6095c503bd84006373a403218921ed03c584028d456313b5000545b30c8d4049cd85456316b5086685814c79a08078847c2285a6855686de86528797000000e7800010054b19c55a8597220000e782e2da82809c6c2285ca854e8697220000e782c2d9828788502ae01305000383cd840203bc040383bc840388d0054b238464036285e6855686de86528797000000e780000b55f933048d4005047d1435cc03b60c02930500036285029665d969bf13d51c00850c93dc1c0003bc0403807c03ad040293041500fd1481c810706285ea85029675d9054b85bf6285a2855686de86528797000000e7808005054b29fd146c6285ca854e86829639f533099041fd59fd54330599006306350310706285ea85029685047dd539a883b68c016285ca854e8682960df1014b026588d02384b40319bfe68433bb940139b7797106f422f026ec4ae84ee4b70711003a89b684ae892a84630af60083b609022285b2858296aa85054589ed99c883b789012285a6854a8697220000e78242cd8287014597220000e78282cc828097220000e78222c256e45ae0033305001869b367e3003289ae8963870728058b65cb81451c6d338729019302000e9308000f370811004e84b5c3630be40c030604006345060013061400a1a01376f60f636c5602636d1603834414008346240093f4f40393f6f6038343340076162d92b2049a06c58e93f4f303c58e558e630906091306440031a01306240019a013063400818db295fd173284c5f3630ae40603060400635306041376f60f9306000e636dd6029306000f6369d602834614000347240093f6f6031377f7038347340076162d92b2061a07d98e13f7f703d98e558eb70611006305d60299cd63fc25013386b90003060600930600fc6356d600014621a0e39e25ff4e8619c2b2892e89630c031803388500930500026373b902814e63000916b3852901ce8603860600132606fc134616008506b29ee398b6fe89a293857900e199b30639018d8e13d33600630a031013f776008144638d35014e868307060093a707fc93c717000506be94e318b6fe01460dc393f786ffb386f500ae973e978387060093a707fc93c7170085063e96e398e6fe9726000083b766c99726000083b266cac166852693980602b698b30e96006305030c2e8e9305000c9a836364b3009303000c01479395330093f5057e330fbe00f2846305ee0393060002268481ce10609345f6ff9d811982d18dfd8d2e97e1162104f5f693840402e39fe4fd3303734093953300f29593f63300b37457002183337757002697330717034193ba9ec1da814513f7c30f0e073a9e8e0689ce03370e00210e9344f7ff9d801983458f7d8fba95e116edf6b3f65500a181b3f55500b695b3851503c191ae9e39a8814eb3852901ce8603870600132707fc134717008506ba9ee398b6fe63f30e03834585021386d5ff133616007d16f18d330ad84195c50546639fc500d285014a05a00c7d08799c6dce854a8697220000e7820298828793551a00050a135a1a00833a0503007d032b050293841500fd1481c810705685da85029675d905451da8146c5685ce854a868296aa8505459de133094041fd59fd54330599006309350110705685da85029685047dd511a0d28433b5440197220000e78282918280106508611c6e828797220000e782e292aa8a033b8503047903348b013a89b68926850294054a01c9528597220000e782e2950d61828003c54a02118919ed171502009305c5830546054a2685029469fd4e85d685029969f9b1a8171502009305158209462685029461f1054aa30f410126e05ae41305f1012ae8081013060003d68597200000e78040a50a85aae8170502001305657faaec0c104e85029949f5e6654665946d970502009385f57c094682963df956860c7e087a946d970502009385057b054682962a8ab9bf97220000e782a286deece2e8e6e4eae06efc36ec94723284ae892a8b93052002328536e48296aa850545639b052022e8814c814b130d10fa41659b0d150093040008854a4e855a8a330c7b01630805188145b307aa0052866301051883460600138716f8636da7011387e6fd09cb938646fa91c605068505e312b5feb9aa3ef02e9a03050a00ae9c1374f50f63440500050ab9a883451a001375f40193f5f5031306f00d637d860203462a009a051376f603d18d1306000f6368c40203463a0076152d919a051376f603d18d33e4a500110a37051100631da4008275e5a8090a1a053364b50029a00d0a320533e4a5006810a2856e8697000000e780c0170345c102130505f81356b400135904014dc903457103834561030d8d1375f50f6301550b32e063eb7c13638d0b0063f93b0103050c00930500fc6355b50039aa639e3b11638f0c0063fb3c0133059b01030505009305f0fb63c5a50001a2639f3c0fda8a4e8b62658339850133867c41c2642685e285829965e10345c102130505f819e5c25526852266029601cde9a083456103034671030d8e6810aa95268582995de9854b93040008026663679400894b01c6b33b20018d0be69bda89568b854a8275054563679400094501c6333520010d05aa9c3385454185bdaa9c63eb7c03638d0b0063f93b0103050c00930500fc6355b50039a8639e3b0163830c0263ff3c0133059b01030505009305f0fb63c9a500170502001307e5a9a1a0e39b3cff6265146d33867c4142642285e2858296aa85054591e59305200222852266029697120000e782c267e66b466ca66c066de27d0d6182800545e5b7170502001307e5a35a85ce855e86e68697100000e780800d97120000e782025caa89a9c92e8a25456389a51229456302aa123545630faa001305eafd0dc513059afd11c913054afa15e919651305c5c501aa1d6529a813750610630b053a09651305c575f5a83e166354063a09651305c525fda00d651305c505dda0130500306367aa10058a6304061081441b16ba00930620020947170502009305051063e2e60293d7160033849700131524002e9508411b15b5006363a600a2849d8ee3f2e6fe139524002e9508411b15b500b346c50093b616003335c50026953695130610026368a63493162500ae9683e5060093d455011307f5fd1306f02e11c703e646005582630a052003e5c6ffb70620008116fd06e98e1307f02e7d162685636497001305f02e0147bb06da40970702009387270f630b96046303952eb385970083c505002d9f63e1e6048504e31696fe2da81d651305c5e521a01d651305c54523a0a900239409002393090023920900130500202395a900e2704274a2740279e269426a216182802686058a79e21305000213190a036372aa0897120000e78282371b564a0197260000938686923696034606001317ca0271933697034707003305b5021b55a501a304c1002305e1009355c903b69513164a037192369613178a03719336979377fa00be961304e5ff230401002313010083c50500034606000347070083c60600a305b1002306c100a306e1002307d1006da81305f0076369aa1e1b550a017de91355090397050200938505c117060200930686c517060200930726d7130680021307201213089012eda897120000e782022c3305b5029b554a01172600001306c686b29583c505009316ca02f192b29683c6060013170a037193329703470700a304b1001b55a5012305d100a305e10093154a03f191b29593168a03f192b2961377fa003a961304e5ff2304010083c5050083c6060003460600231301002306b100a306d1002307c1009305d007a307b10093056100338685009306c0052300d6002e9593055007a30fb5fe9305b0072300b500930561002946a9444e8597100000e780a04a23858900a38599008db58146f5bb1b551a0105ed135509039705020093858580170602009306868517060200930706921306c0021307000d1308601e97000000e780c04be30405e46da83705200001359305e501b375ba0037c602001b06e681e386c5e23375aa00b7a502009b85056ee30eb5e03755fdff1305058c3b05aa00e555e3e5a5e03735fdff130505153b05aa00c555e3eca5de3715fdff93050541bb05ba004156e363b6de130505803b05aa00fd759b85d565e3eaa5dc3705fdff3b05aa009305d0a1e3e2a5dc37f5fcff130505cb3b05aa00e955e3e9a5da3705f2ff130505f03b05aa00b725f5ff9b85f52ae3eda5d837050e001b05051fe377aad8130500082380a90023a24901b1bb97050200138605d69305f02e97100000e78060bb97050200138645d39305200297100000e78020ba97120000e7822219807d03ba050383390402aa849305700252858299054939e18c40480013061010440097000000e78080ba03454100130505f811e5a2455285829901cd05a08345e1000346f100146c0d8ea6955285829611e593057002528582992a894a85e2704274a2740279e269426a21618280757106e503e6450208619376060191ea1376060239e2aa604961170300006700432297120000e782021e1375f6003e876365d5009307750519a09307050397120000e782821475f297120000e782220c17f501009307653e25a897120000e782821a1375f6003e876365d5009307750319a09307050397120000e782021175f297120000e782a20817f501009307e53a09462e85be8597f0ffffe7804027aa604961828017f501009306e55009462e85b68517f3ffff67008344146110652e85b68517f3ffff67008343357106ed22e926e52e8483e5450213f60501aa8419ea13f5050229e52685a28597000000e780401541a08c601307f0072800294693f7f500ba8663e5c7001387770519a01387070397120000e78222fcf5f197120000e78262fa17f50100930525312da88c601307f0072800294693f7f500ba8663e5c7001387770319a01387070397120000e78282f8f5f197120000e782c2f617f501009305852d0946228597f0ffffe780001aaa850545dded0c7c0878946d97f501009385654309468296aa850545dde18365440213f605011385840009ee93f50502b9e5a285ea604a64aa640d6117030000670003090c611307f0072800294693f7f500ba8663e5c7001387770519a01387070397120000e78202f0f5f197120000e78242ee17f50100930505252da80c611307f0072800294693f7f500ba8663e5c7001387770319a01387070397120000e78262ecf5f197120000e782a2ea17f50100930565210946228597f0ffffe780e00dea604a64aa640d618280011106ec833305002e8513d74300514e9307102717f601009302661e6367f706514e1307610189671b8307711308400637e6f5059b08f60f9e86b3d36302b38763023b86f64093170603c193bbd7070393951700b38707031d9e969583c715004616419283c50500a30ff7fe16968347160003460600711e230fb7fea300f7002300c7007117e3e9d8fa13063006637876029305400633d6b302b305b602b385b3408605791e969583c6150083c5050058007297a300d7002300b700b283a94563fbb3009305feff50002e9693e603032300d60039a886039305eeff9e9203c6120083c6020058002e97a300c7002300d7005400ae9651470d8f8545014697f0ffffe780e0fce260056182808142135385000606b383c500137ef50f6382750483ce050003c615008905b388c200639f6e0063ef580663631707b69201ce83ce020085027d16e39bceff39a0c682e377d3fd39a0c682d9b7814513f5150082803e988545e38b07ff03860700b3c60701b336d000b697635b06006385070583c6070085071376f6072206558e119de34605fc93c51500e39907fdc1b717f50100130605284685ba8597000000e780207d17f501001306c5261685c68597000000e780807f17f501001305052497000000e780206d757106e52e8883e54502086113f6050171ea93f50502639a051093564500514e1307102717f601001303260063e7e606514e9306a10109679b03077193084006b7e7f5059b82f70f2a873355750233067502bb07c7401396070341923b5616039315160033061603919f9a9503c61500c617c19383c50500a38fc6fe9a9703c6170083c70700711e238fb6fea380c6002380f600f116e3e9e2fa9306300663f7a602930540063356b502b305b6020d8d0605791e1a9583451500034505003400f296a380b6002380a6003285a9456373b50a9305feff30002e96136505032300a6007da01307f0072c0029469377f500ba8663e5c7001387770519a0138707031181b387d5002380e7001387f6ff79fd13851600ba959386150013071008098f17f50100930545f099a01307f0072c0029469377f500ba8663e5c7001387770319a0138707031181b387d5002380e7001387f6ff79fd13851600ba959386150013071008098f17f501009305e5eb0946428535a006059305eeff1a9503461500034505003400ae96a380c6002380a6003400ae9651470d8f85454285014697f0ffffe780a0d5aa6049618280757106e52e8883e5450213f6050159e693f50502e9e5036605009356460029451307102797f50100138365e563ece60e2945140809679303077193084006b7e7f5059b82f70f1b0e0600bb57760233877702199e1317060341933b5717039315170033071703199e9a9503c715004616419283c50500a38fe6fe1a9603471600034606007115238fb6fea380e6002380c600f1163e86e3e8c2fb71a00c411307f0072800294693f7f500ba8663e5c7001387770519a0138707039bd54500b307d5002380e7001387f6fff1fd97120000e78282a317f50100930545da89a00c411307f0072800294693f7f500ba8663e5c7001387770319a0138707039bd54500b307d5002380e7001387f6fff1fd97120000e782629f17f50100930525d609464285a5a8b287130630066378f602930540063bd6b702b305b6028d9f9b95170079159a9583c6150083c5050038002a97a300d7002300b700b287a94563fab7007d152c00aa9513e607032380c50039a89b95170079159a9503c6150083c505003400aa96a380c6002380b6003400aa962947098f85454285014697f0ffffe78020bbaa6049618280157186eda2e9a6e5cae14efd52f956f55af15eed62e966e56ae1eefcb28c2e8a014d814d81499715000003b9e5b79715000083bbe5b8294bdad000690c612ef408652af01305faff2ae417150000130545da2ae822ec13751d0063130514ce8863e63c0f33881c4133051a01bd4563e40503814633b71c017d173376a700b3050041e1c503450600630d6509fd160506e39ad5fe5da893067500e19a6395a6068145130708ff93078500636db7023306b5001062b386b70094623344260133848b40418eb3c62601171400000334c4aeb384db40c58e758e618e63158600c105e377b7fc01473306b500338505416264b306e500b9cab306e60083c60600638566030507f5b70147b385a640d9d9b307e50083c70700638a67010507e399e5fe49b73307d04011a02e97b30917018509e38709f2e3e53cf35297469703450700e31f65f14e8cce8a01a8e688054d6e8cc689e68a63869d050345040001c90275146d11462275c26582960de96394ba01014501a822655695034505005915133515002300a4000275146db305ba013386ba4122758296e28de30f05ea054511a00145ee604e64ae640e69ea794a7aaa7a0a7bea6b4a6caa6c0a6de67d2d618280797106f422f026ec4ae84ee40069034604000339050083398500ae840dc283b68901171500009305c5c011464a85829619c5054597120000e782e2858280138564ff133515002300a40083b709024a85a68597120000e78202848287717106f522f126ed4ae94ee552e1d6fcdaf8def42a8403458500854b85440dc123049400a30474012285aa700a74ea644a69aa690a6ae67a467ba67b4d6182803a89b689328aae8a033b040003454b0203469400118919e551ee17f501009305f56a69a809ee5a860c7e087a946d97f501009385056a0d468296854455f15a86087a0c7e8544a30391022ae42ee8130571022aec281013060003da8597100000e780608d2800aaec17f5010013058567aaf02800d685528697000000e780c0d225f117f501009305e5702800094697000000e78060d129f52c104e85029929f186756665946d97f501009385b56209468296b9a017f50100930585615a87147f087b946e134636008296854411f95a860c7e087a946dd68552868296854409f15a860c7e087a946d97f501009385856a094682968544e31505ee4e85da850299aa84f9bd2e868c65854697f501009385655d17e3ffff6700036e2a8617f501001305455f9305b00297000000e780800039712af82efc081897020000e782c2690a85b28597000000e780800001112ae42ee80545231ca100280097000000e780603b1d712ae02ee42800aae017f5ffff13050571aae48a85aee8aaec17f501001305455f97020000e782a25f97000000e78000fc5971971500009385c5b22ee0930510022ee42ae8171500001305859b2aec0a85aae817f5ffff13052554aaec0808aaf017f5ffff130585c9aaf417f501001305a55c2af009452af482e08c082ef82afc171500009305c5b0081097000000e780e0f597000000e78080001d712ae02ee40a85aae017f5ffff13054567aae42c00aee8aaec17f501001305857897020000e782e25597000000e78040f297000000e78080001d712ae02ee40a85aae017f5ffff1305a563aae42c00aee8aaec17f501001305657997020000e782425297000000e780a0ee97000000e7808000557132e01308101036e4ae8863e10503930705101148930800fc63080800838207007d18fd17e3ca12ff9308d80f639a08002ae846ec33b8b80063efb800854805a063fbb80ab3071501038807009307f0fbe3c007ff5da097f701009388e74ebb070041958b46f03ef463e1c50463efd50263fbc6080a852ae117f5ffff130505592ae52c002ee92aed08082af117f5ffff1305853f2af50c102ef92afd17f501001305054caae8114525a863e3c5003686b2e088002ae117f5ffff130525552ae508082ae917f5ffff1305053c2aed0c102ef12af517f5010013058556aae80d45aaec82f80c01aef0aaf48808ba8597000000e780a0dee38db8f20146c68697000000e78080ef19ca637ab600b307c50003880700930700fc6343f800368632f8ae866375b6049306d6ffb337d600fd1733f8d7009307160063fc070117f501001306055b4285be8597000000e78040e7b38707412a96930800fc99c783060600fd177d16e3cb16ffb38607013306d50081ea6390b6023a8597000000e780e0d263f2b602030806009307f0fbe3c307ff21a88305060013f5f50f63cd05002ade854551a0e387b6fc3686ae8697000000e780a0e4834716009375f5011308f00d93f7f703637ca80203482600939867009377f8031308000fb3e7f8006364050303453600f615ad919a071375f5035d8d4d8db7051100e300b5f801a8139565005d8d21a01395c5005d8d2ade130600088545636ac5001356b500894509c64181b335a0008d05b695b6e0aee408182ae117f5ffff1305853d2ae568182ae917f5ffff130565112aed88002af117f5ffff130585242af508082af917f5ffff1305a5222afd0c10aee1aae517f501001305a536aae81545adb59302d00f7300000017f501001305455197f501001386c5579305800297000000e78080c2597186f49705020003c6558111ca17f5010013052557ed4597000000e78040fc0546a38ac580086102e432e802ecaaf08810aae81705000013056503aaec170500001305256f2af032f482e088082af832fc28000c1097e0ffffe780608a4265e26597000000e780a0f7397106fc22f814612e840a8513060003b68597000000e780603a2265854508780c7c0a8697e0ffffe7804025e2704274216182809302300f7300000017f501001305254597f50100138625539305800297000000e78060b605457e0508618280797117f501001305c55397020000e782021f17f501009305c5530a8597000000e78060b5797117f501001305855597020000e782c21c17f50100930585550a8597000000e78020b32a862e85b28597000000e78080001d71aee8aaec88082af817f5ffff130525242afcac08aee0aae417f501001305e5562ae00d452ae402f008182ae809452aec17f501009305e55c0a8597000000e78000ae01a001a0828001c573005010f5bf0545828017d5ffff130525867310553082801b552a0006053365aa009b55350086054d8d9b55550086054d8d9b55950086054d8d9b55150186054d8d1345f5ff93551500375655551b065655f18d79990d8db73533339b8535333376b50009816d8d3295935545002e95b7150f0f9385f5f06d8db7050101938515108282938516003a9593061500130710080d8f82829181b307d5002380e7001387f6ff8282034604009376f60011826e9603460600ee9683c60600a38fc5fe2380d50089057d15050482820507b306f8008506130510083307e5408282397106fc22f826f44af04eec52e88282e2704274a2740279e269426aa26a026b216182822ae809452aec02f88c002ef02af40808b2858282357106ed22e926e54ae1cefcd2f8d6f4daf08282a6700674e6644669a669066ae27a427ba27b027ce26c426da26d6561828211823305e8002300f5009307f7ff82822ae005452ae402f021452ae802ec8282ea604a64aa640a69e679467aa67a067b8282a2700274e2644269a269456182822e95834515008346050001452305b100a304d100b28582822e9583451500034505002305b100a304a10005458282834505001307f00728002946828210619307f00713088100a94682826399d5002e87b2853a86170300006700a30d0000c1466360d608bb06a04013f87600b3030501ae87aa86637a750003c707002380e60085068507e3ea76feb382050133080641937888ff93f57200b3861301b9cd9395320013f3850313f782ff1063bb05b04013fe85039305870063ffd300986133566600b317c7015d8e23b0c300a103a1053a86e3e5d3feb38512011376780011a0aa86369663fac60003c705002380e60085068505e3eac6fe82809685e3fdd3fc906123b0c300a103a105e3ebd3fee1b709ce8346050003c705007d1685050505e388e6fe3385e64082800145828017030000670003f3170300006700a3fd0000000000000a0a0a0a0a0a0a0a2028627974657320808080808080808000010101010101010101010101010101bf5d3dcd92a3180273656c6563746f72ff00ff00ff00ff0000010207030d081304190e1c0922142805111a260f2e1d300a1f2336153229393f060c12181b212710252d2f1e3531383e0b1720242c34373d162b333c2a3b3a500a308000000000ca0b3080000000000c0b308000000000240b308000000000e20a308000000000e60b308000000000fe0b308000000000360b308000000000de0c308000000000f40a308000000000ae0c3080000000002f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f74797065732f736c6f742e727300000000000000803c3080000000004900000000000000230000000f000000803c3080000000004900000000000000230000001f000000581c3280000000006f000000000000002700000012000000581c3280000000006f000000000000002a0000001c000000616464726573732f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f616c6c6f792d7072696d6974697665732d302e382e32352f7372632f626974732f616464726573732e7273373d308000000000710000000000000097000000140000007808308000000000300000000000000008000000000000001c0a3080000000004c61796f75746b696e64203c3d206e616d65202020206461746173697a65616c69676e54797065436865636b4661696c65787065637465645f747970654f76657272756e526573657276654275666665724e6f74456d70747952657365724d69736d61746368526563757273696f6e4c696d697445786365656465640000000029207768656e20736c6963696e67206043617061636974794f766572666c6f7772616e676520656e6420696e64657820496e76616c6964456e756d56616c7565010000000000000000000000000000003031323334353637383961626364656676616c75656d6178496e76616c69644c6f676c6f67556e6b6e6f776e53656c6563746f7246726f6d4865784572726f724f74686572547279526573657276654572726f72416c6c6f634572726f726c61796f75746e6f6e5f657868617573746976654661696c656420746f206465636f646520636f6e7374727563746f7220617267737372632f6c69622e7273000000433f3080000000000a0000000000000041000000010000007f454c460201010000000000000000000200f300010000000000308000000000400000000000000070d70100000000000100000040003800060040000d000b000100000005000000001000000000000000003080000000000000308000000000649e000000000000649e0000000000000010000000000000010000000400000068ae000000000000689e308000000000689e3080000000007024000000000000702400000000000000100000000000000100000006000000d8d2000000000000d8c2308000000000d8c230800000000000000000000000001000a000000000000010000000000000010000000600000000e00000000000000000108000000000000010800000000000000000000000000000200000000000001000000000000051e5746406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000700400000093e0000000000000000000000000000000000000000000003400000000000000340000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009700000083b0000167800000130000001800308000000000735040307350403493000000130100009301000013020000930200001303000093030000130400009304000093060000130700009307000013080000930800001309000093090000130a0000930a0000130b0000930b0000130c0000930c0000130d0000930d0000130e0000930e0000130f0000930f000097d10000938181a4f32340f1b70200009382020063f472006f002019b712000093820280b382530217030000130383f433035340137103ff330401006f004000411106e4732540f197500000e780c06521cd97500000e780006517c500001305e51e97c500009385651e17c600001306e61d6378b5001462210614e12105e36cb5fe8146014617c500001305251c97c5a0009385a51c6377b500233005002105e36db5fe0145814597500000e780806097700000e780604a130101f8233011002334510023386100233c71002330c1032334d1032338e103233cf1032330a1042334b1042338c104233cd1042330e1062334f10623380107233c110733050100ef00c00483300100833281000333010183338101033e0102833e8102033f0103833f810303350104833581040336010583368105033701068337810603380107833881071301010873002030411106e47326203493151600858163540602314563fda5008e0517b50000130525782e951c6181c7a2604101828797500000e780a048414663fac5008e0517b600001306e66db2958c6189e597500000e7800049829597500000e78060486f000000011106ec22e826e44ae097c6000003c0060917c60000130606091c6213870702b704a00063ebe404b2979384870018e2a9c42a8403c006091385f7026199b306c540e1063707a000636fd70214e205cd130900022330250113060002268597a00000e78080bb4a8508e004e408e8e2604264a26402690561828017c50000130685dc054531a017c50000130645dd21459305000297300000e78020eb397106fc22f826f42e84aa8428007d46814597a00000e78060a2a30381022c00268597000000e78020f4e2704274a27421618280597186f4a2f02a8497920000e782422fd98e558d2adc97920000e782a21c558d03c6d50083c6c50003c7e50083c7f50097920000e782e233518d2af897920000e78222f62af482ec82e882e482e0e80097c500001387a5c9d1453010d14697a00000e78020996665c665266686662af02eec32e836e42c00228597000000e78060eba670067465618280597186f4a2f02a8403c5950103c6850183c6a50103c7b5012205518dc2066207d98e558d03c6d50183c6c50103c7e50183c7f50197920000e782022b518daaec97920000e782222303c65501d98e558d83c64501220603c7650183c77501558e02ec4207e2075d8f598e0216518daae897920000e782620e03c6d50003c7c50002e8558d2206598e83c6e50003c7f50002e402e0c2066207d98e558e0216518daae497920000e78222e7aae08800c1451306f10591c597920000e782c20be5fd6665c665266686662afc2ef832f436f017c50000130705b00a859305000210109306000297a00000e78020880265a2654266e266aae0aee4b2e8b6ec8c00228597000000e78060daa670067465618280757106e52e8883e5450213f6050115ea93f50502bde1834505001305400663eca5083bd6a5023305a602899de615e19117a500001305f51797920000e7822270bda897920000e782c27d93f7f500ba8663e5c7001387770519a01387070397920000e782c23df5f197920000e782c21717a500009305d51325a897920000e782427a93f7f500ba8663e5c7001387770319a01387070397920000e782423af5f197920000e782421417a5000093055510094642852da82946094563f9c50093e5050330002a962300b60019a8e615e19117a500001305f50d97920000e782626d3400aa961347350085454285014697300000e7806043aa60496182800c617d567e169306a600b3a6d5000506b2953306d040f18d1d46639ac500086d0c6d9c710c7110751305050382878280397106fc22f826f44af01061fd56fe161387a6003327e60085063696b306e040758e0e0697a600009386868b369610622e8402860c7c1478986d930485012ae417a500009305c5ac35463685029722e8230ca100a30c010017a50000930515ac173500001307a52308083546a68697500000e78080a017a500009305a5b617350000130725c808081146340097500000e780a09e8345910103458101638c05209375150005456397052042658345450291896398052a0c7d0879946d97b50000938545c269a40c7c08789c6d97a50000938565a73546e5a021052ae817a50000930505b3173500001307c5b231466daa21052ae817a50000930595a317750000130705ae1d464da20c7c08789c6d97a50000938565a239465da00c7c1478986d9304850061052ae417a50000930585ac29463685029722e8230ca100a30c010017a50000930585a9173500001307a5a908081146a68697500000e780009217a500009305c5a9173500001307c5e508080d46340097500000e7802090834591010345810163880512937515000545639305124265834545029189639c051a0c7d0879946d97b500009385c5b34da20c7c08789c6d97a50000938525971d46e2704274a27402792161828721052ae817a5000093051598173500001307e5b35946e1a00c7c930485001478986d1309850165052ae417a500009305859a41463685029722e8230ca100a30c010017a500009305c59c173500001307e59c08081146a68697500000e780408517a500009305e59b17050000130725ca08081546ca8697500000e780608317a500009305559a17350000130745ac08080d46340097500000e78080818345910103458101b9c19375150005459ded4265834545029189ede90c7d0879946d97b50000938585a57da821052ae817a5000093052598173500001307c5e815461408228597300000e78080660589e2704274a2740279216182800c7c1478986d9304850061052ae417a500009305d5923d463685029722e8230ca100a30c010017a500009305058f173500001307258f08081146a68697400000e7808077179500009305655c177500001307058208082146340097400000e780a0758345910103458101c1d5937515000545c1f14265834545029189b1e10c7d0879946d97b500009385a599094689a00c7d0879946d97b500009385759805a80c7d0879946d97b500009385759705a00c7d0879946d97b500009385759601a80c7d0879946d97b50000938575950546829605b71301019413060160233c160a40fa44f62330260b233c360923384609ae848c618e05179600001306c657b2958c612a89828588181306000d814597900000e780e03613058008aae205452314a11417a50000930585908818554697800000e780403888188c0897800000e780804f17c600000340069017c50000930505908861930645003707a0006369d7682e95210594e16304056897920000e782e292034006909461138686003707a0006368c700ae961384860090e16311045a17a500001306a5b57da5881f1306000d814597900000e780a02d130580082330a14c05452314a14c17a500009305158f881f614697800000e780e02e881f8c0897800000e780204617c600000340a68617c500009305a5868861930645003707a0006364d75e2e95210594e1630f055c97920000e78282890340a6869461138686003707a0006368c700ae961384860090e16316045017a50000130645ac21ad081c1306000d814597900000e7804024130580082330a13005452314a13017a5000093059581081c1306a00297800000e7806025081c8c0897800000e780a03c97b5000003c0257d17b500009309257d03b5090013064500b706a00063ecc6544e95210523b0c9006306055497920000e782c2f703c0257d03b6090093058600b706a00063ebb6564e961304860023b0b9006304045697920000e782c2a803c5140283c5040203c6240283c6340297920000e78242d083c5540203c6440283c6640203c7740297920000e782428e83c5d401558e518d03c6c401a20583c6e40103c7f401d18d02f497920000e782029083c5540183c6440102f0518da205d58d03c6640183c6740102ec02e84206e206558ed18d97820000e7820271aae88808c1451306f10691c597920000e782c291e5fd267586756666c666aae4aee032fc36f817b500001307053608089305000210189306000297900000e780200e97920000e782c20197f0ffffe78020610666e27511456375c5246d556364c54a930446004145268a63639500414a634f0a4883b6090033874601b707a000054563e7e748ce96a10623b0e900639e063abda9080e1306000d814597900000e7804009130580082330a13e05452314a13e1795000093053569080e614697800000e780800a080e8c0897800000e780c02117b600000340466217b50000930545628861930645003707a0006360d73c2e95210594e1630b053a97820000e7822265034046629461138686003707a0006368c700ae961384860090e16313042c17a500001306e587c9ae880a1306000d814597900000e780e0ff130580082330a12205452314a122179500009305b55a880a1306800297800000e7800001880a8c0897800000e780401897b5000003c0c55817b500009309c55803b5090013064500b706a00063e8c6324e95210523b0c9006302053297920000e78262d303c0c55803b6090093058600b706a00063edb6324e961304860023b0b9006306043297920000e782628403c5140283c5040203c6240283c6340297920000e782e2ab83c5540203c6440283c6640203c7740297820000e782e26983c5d401558e518d03c6c401a20583c6e40103c7f401d18d02f497820000e782a26b83c5540183c6440102f0518da205d58d03c6640183c6740102ec02e84206e206558ed18d97820000e782a24caae88808c1451306f10691c597820000e782626de5fd267586756666c666aae4aee032fc36f817b500001307a51108089305000210189306000297900000e780c0e997920000e78262dd97f0ffffe780c03c0666e2751145636cc51693044600214a1305440097900000e78060fc2daa1305014d1306000d814597900000e78000e7130580082330a15a05452314a15a179500009305f5491305014d594697800000e78020e81305014d8c0897800000e78040ff17b600000340c63f17b500009305c53f8861930645003707a0006366d71a2e95210594e16301051a97820000e782a2420340c63f9461138686003707a0006367c700ae961384860090e159ec179500001306856575a21305015b1306000d814597900000e78060dd130580082330a16805452314a168179500009305b5411305015b5d4697800000e78080de1305015b8c0897800000e780a0f517b600000340263617b50000930525368861930645003707a000636ed7102e95210594e16309051097820000e7820239034026369461138686003707a0006360c712ae961384860090e1630a041097820000e78242629144214a233049014a8500e504e9130501608330850b407944750339050a83398509033a05091301016c82806d556369c50e930446004145268a63639500414a63480a0e83b6090033874601b707a000054563e0e70ece96a10623b0e900f1ca03481400834804008342340003432400034764008347740003454400034454002383e600a383f6002382a600a382860023816600a381560023801601a3800601368431bd179500001306850535a8179500001306e5040da8179500001306450425a0179500001306a50339a8179500001306050311a8179500001306650229a0179500001306c5010545914597200000e780c00c179500001306054c11a8179500001306654b29a0179500001306c54a0545a14597200000e780400a014521a0014501a80145979500001386e54831a001459795000013862548d28597200000e780c0070111bc7103b88506b079b47d2a87930240053e85c285730000002ae02ee432e836ec0a85c1451306f10189cd83460600834705002300d5002300f6007d160505fd15edf52265c247036641018366810172482ae00365410093d58701a303b70093d507012303b70093d58700a302b7002302f70093558501a301b700935505012301b70093558500a300b7002300a70013d58601a307a70013d506012307a70013d58600a306a7002306d70013558601a305a700135506012305a70013558600a304a7002304c70013558801a309a700135508012309a70013558800a308a70023080701056182805d719c6198659069946d2a88930240053e85ba85730000002af82efc8800b2e0b6e40c1841469306f10411c697920000e782629a65fe97820000e782426c9b0207f0a1c90862b3761501e2061b5785010217d98e337755002217931785035d8fd98e1357850233775700935785035d8f93578501b3f7170121811b55850162055d8d598d558d2330a30021036116fd15d5f997920000e78282918280797106f422f02a84938505020a8597600000e780803c17b50000130565030c6113068500b2959d05e1993386c5401306060210e197920000e782e28a2285a27002744561176300006700435a97920000e782829cb6892a89938505040a8597600000e780803717b50000930465fe8860138af4005295937585ff6145330495403385850088e097920000e782c2850a854e8697600000e780403488605295937585ff2e9480e097920000e782c2834a85a6600664e2744279a279027a6161176300006700a352130101c60c0623bc1508c0e9c4e523b0250923bc350723b8450723b4550723b0650723bc750523b8850523b4950523b0a50523bcb50305469315f601846199e8179500001306e5ff0145814597400000e78060e4639cc40017950000130665fe0545854597400000e780e0e2aa8d0945637f95000d456396a40217950000130645fc0d458d4597400000e780c0e017950000130605fb0945894597400000e78080df03c5b50003c6a50083c6950003c785001b1585014206a206d98e518d558d9b5685012182558ec1669b8606f0758d22059b168701558d518d37d6a58d1b06b6b5f1146300c54a37a605a91b06b6cb97b60000138d66e96301c57837b644b11b06b6df630bc56c37f662dd1b06e6d317b900006306c520371635f01b0646c06307c52c37a65e091b06367b6309c55037f640391b06e69e6308c54a3796793e1b060685630bc526b715c1409b8595f1631cb574a80da68597700000e780809d0335812d631505728c15a81c1306800397900000e780a0981804287f4c6303268128aaf0aef4b2d8486b4c6f50735477aafc2ee132e536e99302300373000000ae8a328a2324012e81456cf36cef97820000e782620817a5000013070526a80da145101ca146a40d97800000e780c07d97820000e782622017a5000013076525a145101ca1464e8597800000e780c07b97820000e782021a17a500001307e5249145101c91464a8597800000e780c07900040338840d7c700327812e03b50d0683b58d0603b60d0783b68d07233804031cfc38c0930240057300000068ec6cf070f474f841459305712f11c597820000e782c26665fd97820000e782823d081cac0d514697900000e780e0890125e3180530179500009305459da8181306000297900000e78020889b0505001545e389052e17950000930585d98810514697900000e78040869b0505001945e38a052c13890d02a80d9010ca8597600000e78060056a8408609309fd004e95937585ff61451404f07a330aa5413385450108e097820000e782c239a81ca41c97600000e7806023a80d9010ca8597600000e780600108604e956199b30545013706a0006374b6006f00b04d2330bd006f00504da80da68597700000e780e0bf0345812d6302055a080474710338850e6c797c7d03350130033781307d567e162906e39fc6220004233804010cec1cd081931cd848d8019108dc58dc019338c0930240037300000028fc4ce050e4080d54e881456cf86cf46cf06cec901ded55850589cd97820000e782e2def5da93f5f60f05456394a5006f10400aa80d100c141cee8597000000e78060bd71a11305000663f9a4707d5d7e1d014693050002140423bca60df0f2ecf67d557e15e8fa17a500001305a540e8fe65452330a13051a105457e059305c500a81c8546268697700000e780a0eb03358127fd55fe15a9056319b5440325012918044c6750632320a116aeeeb2ea930240037300000097820000e78262bc850589cd97820000e78262d4f5da93f5f60f05456394a5006f00b0719302300373000000ae8a328a2324012e18042330070e233c070c97820000e782a2dc17a50000130745faa80da145101ca146a40d97800000e780005297820000e782a2f417a500001307a5f9a145101ca1464e8597800000e780005097820000e78242ee17a50000130725f99145101c91464a8597800000e780004e0335812d233ca1260337012e8327812e6e8428702c743078347c2330e1282324f12813840d069302400573000000180468ef6cf370f774fb41459305712f11c597820000e782c23a65fd97820000e7828211a81cac0d514697800000e780e05d0125e3180504a81c8c0a514697800000e780a05c9b0505001145e38d05028c0a228597600000e780a045032581281404cc62b07e2324a12eecf2f0eee8158c0a514697800000e780c058a80d97400000e780e07d6f00b058a81ca68597400000e780c0e603358127fd55fe15a9056313b52c9302400373000000180497820000e782a2a4850589cd97820000e782a2bcf5da93f5f60f05456394a5006f00b05ba81cee8597f0ffffe780607ea80dac1c97f0ffffe780809d6f003053a81ca68597400000e78080e003358127fd55fe15a9056311b5269302400373000000180497820000e782629e850589cd97820000e78262b6f5da93f5f60f05456394a5006f003057a80dee8597000000e780a08621a4a80da68597600000e780e04e0335812d631005248c15a81c1306800397800000e780004a1804287f4c63032681282aed2ef132d5486b4c6f507354772af92efdb2e1b6e5930240037300000097820000e7828296850589cd97820000e78282aef5da93f5f60f05456394a5006f0010519302300373000000ae84328a2324012e18042330070e233c070c97820000e78222c028ff17a50000130745d4a80da145b01ca14697800000e780202c97820000e78262d8233ca12617a50000130785d3a145b01ca1464e8597800000e780e02997820000e78202d2233ca12617a500001307c5d29145b01c91464a8597800000e780a0270335812d8335012e0326812eaaf6aefa232cc116179500009305458e2809514697800000e780003b9b0505001945638005622809ac12514697800000e78080399b0505000d456384056013850d04ac1297600000e780c0b32c0997600000e78020b30c1997600000e78080e2a81dac12514697800000e780603568062c09514697800000e78080344a75ea750e66ae66180468ef6cf370f774fba80d97500000e780c0cc6f00503305457e059305c500a81c8546268697700000e780e0ac03358127fd55fe15a9056313b5060325012918044c67506328c30cff10fb930240037300000097720000e782c27d850599c997820000e782c295f5da93f5f60f0545e382a53aa80d101cee8597f0ffffe780e06fa81cac0d97e0ffffe780607f833581280335012897400000e780e0aba80dac1c1306000397800000e7802029a80d97300000e7802065a80da68597600000e780202b0335812d6307053e8c15a81c1306000397800000e7804026a81c97300000e7804062178500001305657f0c04e8ed0545e8f10146f0fd2145e8f5f0f9178500009305c577a80d97300000e780005b0345f12d8345e12d0346d12d230fa126a205d18d231eb1260345a12d8345912d0346b12d8346c12d97820000e78222c20c04e071e47503bb050f83ba850f033a013083398130a8dd0c0e1305f12a254697800000e780601d135584032303a12813550403a302a128135584022302a12813550402a301a128135584012301a12813550401a300a128135584002300a128a30f812613d584032307a12813d50403a306a12813d584022306a12813d50402a305a12813d584012305a12813d50401a304a12813d584002304a128a303912813558b03230ba12813550b03a30aa12813558b02230aa12813550b02a309a12813558b012309a12813550b01a308a12813558b002308a128a307612913d58a03230fa12813d50a03a30ea12813d58a02230ea12813d50a02a30da12813d58a01230da12813d50a01a30ca12813d58a00230ca128a30b512913558a032303a12a13550a03a302a12a13558a022302a12a13550a02a301a12a13558a012301a12a13550a01a300a12a13558a002300a12aa30f412913d589032307a12a13d50903a306a12a13d589022306a12a13d50902a305a12a13d589012305a12a13d50901a304a12a13d589002304a12aa303312ba81cb145e38c050a034605000505fd1575daa80dac1c97600000e780c0b10337812e9315170063d3052e0145179600001306668197100000e780203683ea450183ec850103e4c50083e6050103e54503aaec03e3850303e5c502aae883e3050303e5c504aae405467e067c4e83e2050503ee450583ee85052324f12c3c522326f12c7c522328f12c3c56232af12c6a8803cd350283cf450203cc550283cb650203c7750203cb850283c7950283c9a50283c8b502231ed126232c812613d50601230fa12683d0050203cf250203eac5019bd58c01e18213d50c012303a12813d58c00a302a1282302912913d58a01a301a12813d50a012301a12813d58a00a300a12823005129b6e0a30fd1262efca303b1287af82307e129230611282304412906f413d58000a306a12813558a01a305a12813550a012305a12813558a00a304a128485e2324a12a284202132326a12a6842e665b365b3008213c666b3e6d3003a842328a12a1397020228462666598e821e33e7ce01232aa12aceec230b3129a30af128dae8230a6129a309812823097129a30881292308f129a307a129a30b1129080454ed4cf150fd78e10340e9e603360800930506063705a0006369b5004296130586002330b800631c051e17a500001306450c05459305000697100000e780a01b8c15a81c1306800397800000e780a0e71804287f4c6303268128aae9aeedb2d1486b4c6f5073547708eb0cef10f314f7930240037300000097720000e7822234850599c997720000e782224cf5da93f5f60f05456383a5729302300373000000ae84328a2324012e2330012e233c012c97720000e782225eaafb1795000013074572a80da145901ba14697800000e78020ca97720000e7826276aafb179500001307a571a145901ba1464e8597800000e78000c897720000e7822270aafb17950000130705719145901b91464a8597800000e780e0c50335812d8335012e0326812e2ae32ee72328c118178500009305852c8809514697800000e78040d9012561e11945b1a20145233ca12c05452300a12e99aa100474ee2330060f6cf67cfa68fe2330e130c9bc8337012ee5e58146054813051800978400009384840805c703c407001376f40011802694034404002696034606008507a30f85fe2300c5007d17090571fffd57fe171385a700639ba610036581288365412802153368b500036501298365c1280366c12a8366812a0215c98d13150602558d0366412b8366012b8327412a8364412902163367d6008217c58f7d567e169306a6006ff04fd1178500009305e5e0080c1306000297800000e780c0cb012535e1154595a80340e9e69305f606e199338605416106b706a00063e6c6002330c8006398051c17a50000130685ec21459305000297100000e78060fa0340e9e603360d00b306b600b704a0000545e3e1d4c26a96130886002330dd00ae86e30908c0e5bd08038c09514697800000e78080c4012539e11145233ca12c2300812e1305112e8c1b7d4697800000e78020c2a81cac0d97e0ffffe780c072033501288335812897300000e7800036454717a500001305059f6ff02fc413890d02a80d1003ca8597500000e780c03f03350d009304fd002695937585ff61451404f07a3304a541338585002330ad0097720000e7820274081c97500000e780c05da80d9009ca8597500000e780c03bea86886226951804707b937585ff2e9480e290ed687788e9687388e5686f88e1280b97500000e780405a30146d55ac0405051dc597720000e7828272f5da13f5f60f130515f009ed0344012393051123881b7d4697800000e780a0b4054539b7a80d1003ca8597500000e780e03403350d0093098d004e951d056199b3053541938505023706a0006366b6242330bd0099a4014597720000e782c269ac18114611c697720000e782627265feac1c97500000e780405bac186e8597500000e780e0662324013023300130233c012e68068c10514697800000e780a0ac66758a652a66ca665dacea897e8b3eec22f0c2e40d461404f0eee8f223b4060e1145e8faecfe23300130a81cac0d97500000e78040120335812e1605fd55fe15138d3500630495006ff06fb40335012e8545fe05b105268697800000e78020a7012519c16ff0afb21305111f2ae4080d2ae8130d012fa404821c33e55c01220bb3653b0193190c01139c8b0133663c01d18d466622068276558ee266c20666676207d98e558e0216b369b600a27b821b42744214b3657401b365ba00a205627633eac50022050664498c0345e1270316c1278326812793057129230fa12c231ec12c232cd12c081c1306100497800000e780609d1305712f0c1c1306100497800000e780409c135584032303a12e13550403a302a12e135584022302a12e13550402a301a12e135584012301a12e13550401a300a12e135584002300a12ea30f812c13558a032307a12e13550a03a306a12e13558a022306a12e13550a02a305a12e13558a012305a12e13550a01a304a12e13558a002304a12ea303412f13d58903230ba12e13d50903a30aa12e13d58902230aa12e13d50902a309a12e13d589012309a12e13d50901a308a12e13d589002308a12ea307312fa80db145638f052c034605000505fd1575da0340e9e626651061930506063705a0006369b500a6663696130586008ce26312051017a50000130605b035bc014597720000e78202471078147c38603c6430fc54e058e45ce8b01c140c114711c797720000e782e24965ffac1c97500000e780c053a80d9009ca8597500000e780400a03350d004e951d056199b3053541938505023706a0006365b6002330bd0011a0014597720000e782623f2c0b100c11470dc39c610462be94b3b7f40093761400a69633b496005d8c94e1a10521067d176df32c0b97500000e780602fa81d0c03514697800000e780408268068c09514697800000e78060811804086b0c6f10731477180468ef6cf370f774fba80d97300000e7800015a80d854597e0ffffe78020c78335812e0335012e97300000e78080ff0340e9e69305f606e19926663386c5406106b706a00063e5c600a66690e2e9e517a500001306859f05be31452c0de30b05a803c6050085057d1575da6ff04ff497850000938585d197720000e782e20a17850000930585cc6ff0cfd4978500009385c5cf97720000e7822209178500009305c5ca6ff00fd397850000938505ce97720000e782620717850000930505c96ff04fd197850000938545cc97720000e782a20517850000930545c76ff08fcf97850000938585ca97720000e782e20317850000930585c56ff0cfcd978500009385c5c897720000e7822202178500009305c5c36ff00fcc0d461404b0fec8e20146d0e61145c8eacceed0f2a80dac1c97500000e78040d60337812893156700014563c705048336012815e3014d054681a897850000938565c397720000e782c2fc17850000930565be6ff0afc60340e9e626651061b307b600b704a000054563e8f400a664269621069ce02e8d09ea17860000130606e597100000e780c099160713051600978700009387a79919e36fe07ff283c4060013f4f4009180be9483c404003e94034404008506a30f95fe230085007d17090571ff6fe0dfef3145ac1d19c503c6050085057d157dda05b30365812e8365412e0366012f8366c12e02153369b5000216b369d6000365c130032a412f832a41308365813002150366413183660131336bb500034481310216b36bd60093059131080c7d4697700000e780805c23088122130511230c0c7d4697700000e780405b0804233c050681454ce14ce54ce91303812791433708ff009306f00f939886014167930207f06387030883c7140003c4040003c6240083c63400a207c18f4206e206558eb365f60083c6540083c7440003c7640003c57400a206dd8e9317070162055d8d558d9316050233e6b60093578601b3f7070193568600b3f61601dd8e1b5585012207598d558d9b5686018216337606016206558eb3f55500a2156214c18dd18d4d8d2330a3002103e114fd13e39d03f6180448634c67506b2aee2ef2287f32f6caf5cef9d2ddd6df10022320660193550b024cc22324760193d50b024cc62aea930240037300000028ff4ce350e754eb014568fb68f768f368ef6d55050505c542670c6303360d00611d6117b337b600b3b5c500b385b7403ae8edd193f5f50f0545638fa5429302300373000000ae8ab2892324012e2330012e233c012c1309812e130a012e93558501370bff00b3f5650113568500930bf00fe20b33767601d18d13568502c1669b8406f0658e93568503558ed18d3376650162069b5685018216558eb3769500a2166215558d518d4d8d2afa17950000130705d3a80da145101aa14697700000e780e02a13d58a013375650193d58a00b3f575014d8d93d58a02e58d13d68a03d18d4d8db3f56a01e2051bd68a010216d18d33f69a002216e21a33e6ca00d18d4d8d2afa17950000130705cfa145101aa146528597700000e780602513d589013375650193d58900b3f575014d8d93d58902e58d13d68903d18d4d8db3f56901e2051bd689010216d18d33f699002216e21933e6c900d18d4d8d2afa17950000130705cb9145101a91464a8597700000e780e01f0335812d8335012e0326812e2affaee32324c11c1785000093058586e819514697700000e7804033012519e1194415a81775000093058546080a1306000297700000e7806031012519e1154419a8a811ec19514697700000e7800030012519e91144233c812c2300912e1305112e0c1a6ff08feb13890d04a80db011ca8597500000e78040aea66488609389f40097720000e78202db97500000e780c0ac88604e951404f07a937585ff2e9480e097720000e78202e2880b97500000e780c0cb30126d55ac1305050dc197720000e78202e4f5da13f5f60f130515f019e50944880b130d111d6ae4b5a0138a0d02a80db011d28597500000e780e0a6a6668862938a860056951d05937585ff1804687b338655411306060290e288ed687788e9687388e5686f88e1881b97500000e780a0c430126d552c0405051dc597720000e782e2dcf5da13f5f60f130515f009ed0544881b83440500081a7d46a26597700000e780e01ef5bda80db011ca8597500000e780409fa664886097720000e78242cc97500000e780009e88604e956199b30585003706a0006365b60026660ce211a0014597720000e78202d55e66fe661e77be7710f814fc38e03ce4101c140a114711c797720000e782e2d765ff0c1c97500000e780c0e1a80db011d28597500000e78040982665086156951d056199b3055541938505023706a0006365b60026660ce211a0014597720000e782c2ce5e76fe7618601c6430fc54e058e45ce8b01c140a114715c31c62846233849740b3b797008589b304b440b335b400dd8d04e22106a1067d1765f3ac1c97500000e78000daa80df019d28597500000e7808090266408604e95937585ff61451404f07a330985403385250108e097720000e78222c5080c040c97500000e780c0aea80df019d28597500000e780c08c08604e956199b30525013706a0006365b60026660ce211a0014597720000e78262c20c0a114611c697720000e78202cb65fe0c0c97500000e780e0b36e55ce752e762324a1302330b130233cc12e6806ec19514697700000e780a0055265f2651276b27699b0977500009385c55c97720000e7822296177500009305c5576fe01fe097300000e780408b2e868c658546977500009385255d17130000670043a4828097720000e78262c556e45ae02a84833a0501146133855641b284ae896366c502033a8400338b9a0033055a01ce85268697700000e780c0fd23386401014597720000e782c2aa8280338b9a0063645b091399160063632b015a892145636325012149634b09069dca17950000130605431c6233872701b705a000054563efe5040c64b297138a870018e263080a045285368697700000e780a0f725a0179500000340453f179500001305453f1061b3052601b706a00063edb6002a96130a86000ce163070a002334440123302401a9bf054521a0014511a00145977500001386e565ca8597000000e780802597720000e78242d756ec5ae813060008ae842a8b63f4c502da85806988616317a4005a8597000000e7808017da858865229523009500050480e975a01bd5b40002c619e91305d10093d5640093e5050c2306b1008949a1a81bd5040115e11305e10093d5c40093e5050e2306b10093954403e99193850508a306b1008d4905a81305f10093d5240193e5050f2306b1009395e402e99193850508a306b10093954403e991938505082307b1009149033a0b0103360b0093f5f40393850508b30646412300b50063eb360383348b00b30a3a01338544016c004e8697700000e78060e423385b010145a6600664e2744279a279027ae26a426b61618280b30a3a0163e24a091319160063e32a01568921456363250121496349090615ca17950000930605299c6233872701b705a000054563ede50483358b00b6979384870098e2a9c4268597700000e780c0dd25a0179500000340652517950000130565251061b3052601b706a00063ecb6002a96930486000ce191c423349b0023302b0191bf054521a0014511a00145977500001386254cca8597000000e780c00b011106ec22e826e44ae02a8910611305160051c513141600636385002a842145636385002144634d04061dca179500009306451e9c6233878700b705a000054563e1e50683358900b6979384870098e2a9c8268597700000e78000d395e435a8179500000340851a179500001305851a1061b3058600b706a00063e0b6022a96930486000ce191c84a8504e500e1e2604264a264026905618280054519a011a001459775000013866534a28597000000e780800011e5328597000000e780000197000000e780a0037971aa85177500001305c53497720000e782229a0a8597200000e780800218611c659079947d3a85be85171300006700c3df97000000e7808000411106e42a862e85b28597000000e780c0c4797106f422f026ec106108422e8409cd85456311b50a0c7c08789c6d977500009385153b254679a80c7c0878946d93044600210632e0977500009385e5374d46829622e42308a100a3080100177500009305b537171500001307a541280005460544a68697200000e78020e0177500009305c5351715000013070547280015468a8697200000e78040de8345110103450101b9c5058931e522658345450291899de50c7d0879946d9785000093858502094635a00c7c08789c6d977500009385c5314d46a2700274e264456182870c7d0879946d978500009385b5ff054682962a8413751400a2700274e2644561828010610866186a9079947dba85171300006700e3cd757106e52e8883e54502086113f6050115ea93f50502bde1834505001305400663eca5083bd6a5023305a602899de615e191177500001305d53397720000e782028cbda897720000e782a29993f7f500ba8663e5c7001387770519a01387070397620000e782a259f5f197620000e782a233177500009305b52f25a897720000e782229693f7f500ba8663e5c7001387770319a01387070397620000e7822256f5f197620000e7822230177500009305352c094642852da82946094563f9c50093e5050330002a962300b60019a8e615e191177500001305d52997720000e78242893400aa961347350085454285014697000000e780405faa60496182806d7106e622e2a6fdcaf9cef5d2f1d6eddae9dee5e2e166fd6af96ef5ae8403bb8503833c8500006983bb0503833a8b0117850000930545ea05465e85829a03e64402aa8481451604338c8c00137d460017850000130a65e7130900039309800717750000930da5d413f61400638a8c1166842e85938c0c028544854575f6058963120d0601c909465e85d285829a8544854579f9a8109305000281c9a3000500230005000905fd15f5f923032103a3033103ac1013060004281097700000e780409b130500029305910211c597620000e782e24f65fd93056102130620045e85829a61a819e9178500009305d5de054685445e85829a854525f90545a302a1025ee45ae8130551022aeca8109305000281c9a3000500230005000905fd15f5f923032103a3033103ac1013060004281097700000e780e093130500029305910211c597620000e782824865fd2800930561021306200497200000e780208f01c58544854511b717850000930555d62800094697200000e780608daa848545edb5054501ea17850000930515d505465e85829ab2601264ee744e79ae790e7aee6a4e6bae6b0e6cea7c4a7daa7d51618280797106f422f026ec08612e848c7d04610878946d938584012ee097750000938585091d46829622e42308a100a3080100177500009305950817050000130785e128001946a68697200000e780e0a617750000930505bd1705000013072506280011468a8697200000e78000a5834511010345010185cd93751500054585e9226583454502918991e90c7d0879946d97850000938505c9094609a80c7d0879946d978500009385d5c7054682960589a2700274e26445618280086103330501131613000906634706081c650dca17950000034065c717950000930665c703b80600b308c800b702a000054563e512073698210823b0160163140800a9a80548130500032300a80013058007a300a8001305380097760000938886ae6306030203c707009376f7001183469703470700c69683c606008507a30fe5fe2300d5007d130905e31e03fc2e85c285170300006700c34d014597750000938665f4b285368697000000e780e0a810610866186a9079947dba85171300006700438b97620000e782624741c9931516006363b500aa8511452e8a6363b500114a0145ed9193195a00ade963c809061dca17950000930605ba9c6233873701b705a000054563ebe5040c64b6979384870098e2a1c41606268597600000e780c06e95e415a817950000034045b617950000130545b61061b3053601b706a00063ecb6002a96930486000ce191c497620000e782624e8280054509a0ce854a8697000000e780609d97620000e782223d55c1931516006363b500aa8511452e8a6363b500114a0145f59193193a00d9e1c555858163e035091dce17950000930685af8862938586002e951d05937485ff3387b9402697b705a000214563ece5040c6498e2a1c80e06268597600000e780c06395e835a817950000034045ab17950000130545ab0c6113068500b2959d0593f485ffb385c940a6953706a0006369b6000ce191c497620000e782e2428280214509a0ce854a8697000000e780e09118651c699079947d3a85be85170300006700437497620000e782c2fa02e402ec9306000236f400728d462308d1022afcaee069c00876033a060003398600833a06019315350093d93500930b840193058003330bb50293048a00094c854c630b0b0c906001ca8666627583b584ff946e829669ed08742af48345040308682308b10201cd631f950103b50b00120556950c61086593b5150031a003b50b00854511a0814510602ee42ae8630d8601631d960103b50bff1205569510610c651336160031a0014621a083b50bff054608701205b386aa00886294661304840332ec2ef02c008296938b8b03130b8bfcc1043dd5a9a8006e833a0601033a06000339860012049359440093048a0005c4906001ca8666627583b584ff946e82961de5d68588619065c10a2c0002964114c10471dd29a863fe29019209d299866662754e870c631067946e829619c1054511a0014597620000e78202fb0d618280597186f4a2f0a6eccae8cee4d2e056fc5af85ef462f066ec6ae86ee4aa8403654502ba893689328aae8b13741500b70a110019c0930ab002937545004e9499e1814b15a08145630f0a0033864b01de8603870600132707fc134717008506ba95e398c6fe2e948c6095c503bd84006373a403218921ed03c584028d456313b5000545b30c8d4049cd85456316b5086685814c79a08078847c2285a6855686de86528797000000e7800010054b19c55a8597620000e782e20682809c6c2285ca854e8697620000e782c205828788502ae01305000383cd840203bc040383bc840388d0054b238464036285e6855686de86528797000000e780000b55f933048d4005047d1435cc03b60c02930500036285029665d969bf13d51c00850c93dc1c0003bc0403807c03ad040293041500fd1481c810706285ea85029675d9054b85bf6285a2855686de86528797000000e7808005054b29fd146c6285ca854e86829639f533099041fd59fd54330599006306350310706285ea85029685047dd539a883b68c016285ca854e8682960df1014b026588d02384b40319bfe68433bb940139b7797106f422f026ec4ae84ee4b70711003a89b684ae892a84630af60083b609022285b2858296aa85054589ed99c883b789012285a6854a8697620000e78262018287014597620000e782a200828097620000e78222ee56e45ae0033305001869b367e3003289ae8963870728058b65cb81451c6d338729019302000e9308000f370811004e84b5c3630be40c030604006345060013061400a1a01376f60f636c5602636d1603834414008346240093f4f40393f6f6038343340076162d92b2049a06c58e93f4f303c58e558e630906091306440031a01306240019a013063400818db295fd173284c5f3630ae40603060400635306041376f60f9306000e636dd6029306000f6369d602834614000347240093f6f6031377f7038347340076162d92b2061a07d98e13f7f703d98e558eb70611006305d60299cd63fc25013386b90003060600930600fc6356d600014621a0e39e25ff4e8619c2b2892e89630c031803388500930500026373b902814e63000916b3852901ce8603860600132606fc134616008506b29ee398b6fe89a293857900e199b30639018d8e13d33600630a031013f776008144638d35014e868307060093a707fc93c717000506be94e318b6fe01460dc393f786ffb386f500ae973e978387060093a707fc93c7170085063e96e398e6fe9766000083b7a6139766000083b2a614c166852693980602b698b30e96006305030c2e8e9305000c9a836364b3009303000c01479395330093f5057e330fbe00f2846305ee0393060002268481ce10609345f6ff9d811982d18dfd8d2e97e1162104f5f693840402e39fe4fd3303734093953300f29593f63300b37457002183337757002697330717034193ba9ec1da814513f7c30f0e073a9e8e0689ce03370e00210e9344f7ff9d801983458f7d8fba95e116edf6b3f65500a181b3f55500b695b3851503c191ae9e39a8814eb3852901ce8603870600132707fc134717008506ba9ee398b6fe63f30e03834585021386d5ff133616007d16f18d330ad84195c50546639fc500d285014a05a00c7d08799c6dce854a8697620000e78242ac828793551a00050a135a1a00833a0503007d032b050293841500fd1481c810705685da85029675d905451da8146c5685ce854a868296aa8505459de133094041fd59fd54330599006309350110705685da85029685047dd511a0d28433b5440197620000e782c2a58280106508611c6e8287357106ed22e926e54ae1cefcd2f8d6f4daf0aa8a033b8503047903348b013a89b68926850294054a01cd5285ea604a64aa640a69e679467aa67a067b0d61828003c54a02118919ed17750000930565380546054a2685029469f94e85d685029969f5b1a8177500009305b53609462685029445fd054aa30f410126e05ae41305f1012ae8081013060003d68597600000e78000ee0a85aae81775000013050534aaec0c104e85029949f1e6654665946d9775000093859531094682963df556860c7e087a946d977500009385a52f054682962a8a99bf97620000e7820287eae06efc36ec94723284ae892a8b93052002328536e48296aa850545639b052022e8814c814b130d10fa41659b0d150093040008854a4e855a8a330c7b01630805188145b307aa0052866301051883460600138716f8636da7011387e6fd09cb938646fa91c605068505e312b5feb9aa3ef02e9a03050a00ae9c1374f50f63440500050ab9a883451a001375f40193f5f5031306f00d637d860203462a009a051376f603d18d1306000f6368c40203463a0076152d919a051376f603d18d33e4a500110a37051100631da4008275e5a8090a1a053364b50029a00d0a320533e4a5006810a2856e8697000000e78060170345c102130505f81356b400135904014dc903457103834561030d8d1375f50f6301550b32e063e87c13638d0b0063f93b0103050c00930500fc6355b50021aa639b3b11638f0c0063fb3c0133059b01030505009305f0fb63c5a500eda8639c3c0fda8a4e8b62658339850133867c41c2642685e285829969ed0345c102130505f819e5c25526852266029601cdd1a083456103034671030d8e6810aa952685829945e9854b93040008026663679400894b01c6b33b20018d0be69bda89568b854a8275054563679400094501c6333520010d05aa9c3385454185bdaa9c63eb7c03638d0b0063f93b0103050c00930500fc6355b50039a8639e3b0163830c0263ff3c0133059b01030505009305f0fb63c9a500176500001307e55e89a0e39b3cff6265146d33867c4142642285e2858296aa85054591e59305200222852266029697520000e7828277066de27d0d6182800545fdb717650000130745595a85ce855e86e68697100000e780001197620000e782a287aa89a9c92e8a25456389a51229456302aa123545630faa001305eafd0dc513059afd11c913054afa15e919651305c5c501aa1d6529a813750610630b053a09651305c575f5a83e166354063a09651305c525fda00d651305c505dda0130500306367aa10058a6304061081441b16ba0093062002094717750000930565c563e2e60293d7160033849700131524002e9508411b15b5006363a600a2849d8ee3f2e6fe139524002e9508411b15b500b346c50093b616003335c50026953695130610026368a63493162500ae9683e5060093d455011307f5fd1306f02e11c703e646005582630a052003e5c6ffb70620008116fd06e98e1307f02e7d162685636497001305f02e0147bb06da4097770000938787c4630b96046303952eb385970083c505002d9f63e1e6048504e31696fe2da81d651305c5e521a01d651305c54523a0a900239409002393090023920900130500202395a900e2704274a2740279e269426a216182802686058a79e21305000213190a036372aa0897520000e782c2171b564a01976600009386e6dd3696034606001317ca0271933697034707003305b5021b55a501a304c1002305e1009355c903b69513164a037192369613178a03719336979377fa00be961304e5ff230401002313010083c50500034606000347070083c60600a305b1002306c100a306e1002307d1006da81305f0076369aa1e1b550a017de9135509039765000093856576176600009306e67a177600009307868c130680021307201213089012eda897520000e782420c3305b5029b554a0117660000130626d2b29583c505009316ca02f192b29683c6060013170a037193329703470700a304b1001b55a5012305d100a305e10093154a03f191b29593168a03f192b2961377fa003a961304e5ff2304010083c5050083c6060003460600231301002306b100a306d1002307c1009305d007a307b10093056100338685009306c0052300d6002e9593055007a30fb5fe9305b0072300b500930561002946a9444e8597600000e780209423858900a38599008db58146f5bb1b551a0105ed13550903976500009385e535176600009306e63a17660000930766471306c0021307000d1308601e97000000e780c04be30405e46da83705200001359305e501b375ba0037c602001b06e681e386c5e23375aa00b7a502009b85056ee30eb5e03755fdff1305058c3b05aa00e555e3e5a5e03735fdff130505153b05aa00c555e3eca5de3715fdff93050541bb05ba004156e363b6de130505803b05aa00fd759b85d565e3eaa5dc3705fdff3b05aa009305d0a1e3e2a5dc37f5fcff130505cb3b05aa00e955e3e9a5da3705f2ff130505f03b05aa00b725f5ff9b85f52ae3eda5d837050e001b05051fe377aad8130500082380a90023a24901b1bb977500001386658b9305f02e97100000e78060bb977500001386a5889305200297100000e78020ba97520000e782c244807d03ba050383390402aa849305700252858299054939e18c40480013061010440097000000e78080ba03454100130505f811e5a2455285829901cd05a08345e1000346f100146c0d8ea6955285829611e593057002528582992a894a85e2704274a2740279e269426a21618280757106e503e6450208619376060191ea1376060239e2aa604961170300006700432297520000e782e25c1375f6003e876365d5009307750519a09307050397520000e782024375f297520000e782c235176500009307d5f325a897520000e78262591375f6003e876365d5009307750319a09307050397520000e782823f75f297520000e782423217650000930755f009462e85be8597f0ffffe780e026aa6049618280176500009306450609462e85b68517f3ffff67002344146110652e85b68517f3ffff67002343357106ed22e926e52e8483e5450213f60501aa8419ea13f5050229e52685a28597000000e780401541a08c601307f0072800294693f7f500ba8663e5c7001387770519a01387070397520000e7828210f5f197520000e78282ea17650000930595e62da88c601307f0072800294693f7f500ba8663e5c7001387770319a01387070397520000e782e20cf5f197520000e782e2e6176500009305f5e20946228597f0ffffe780a019aa850545dded0c7c0878946d976500009385c5f809468296aa850545dde18365440213f605011385840009ee93f50502b9e5a285ea604a64aa640d6117030000670003090c611307f0072800294693f7f500ba8663e5c7001387770519a01387070397520000e7826204f5f197520000e78262de17650000930575da2da80c611307f0072800294693f7f500ba8663e5c7001387770319a01387070397520000e782c200f5f197520000e782c2da176500009305d5d60946228597f0ffffe780800dea604a64aa640d618280011106ec833305002e8513d74300514e93071027176600009302d6d36367f706514e1307610189671b8307711308400637e6f5059b08f60f9e86b3d36302b38763023b86f64093170603c193bbd7070393951700b38707031d9e969583c715004616419283c50500a30ff7fe16968347160003460600711e230fb7fea300f7002300c7007117e3e9d8fa13063006637876029305400633d6b302b305b602b385b3408605791e969583c6150083c5050058007297a300d7002300b700b283a94563fbb3009305feff50002e9693e603032300d60039a886039305eeff9e9203c6120083c6020058002e97a300c7002300d7005400ae9651470d8f8545014697f0ffffe78080fce260056182808142135385000606b383c500137ef50f6382750483ce050003c615008905b388c200639f6e0063ef580663631707b69201ce83ce020085027d16e39bceff39a0c682e377d3fd39a0c682d9b7814513f5150082803e988545e38b07ff03860700b3c60701b336d000b697635b06006385070583c6070085071376f6072206558e119de34605fc93c51500e39907fdc1b717650000130665dd4685ba8597100000e780a08017650000130625dc1685c68597100000e780008317650000130565d997000000e780206d757106e52e8883e54502086113f6050171ea93f50502639a051093564500514e1307102717660000130396b563e7e606514e9306a10109679b03077193084006b7e7f5059b82f70f2a873355750233067502bb07c7401396070341923b5616039315160033061603919f9a9503c61500c617c19383c50500a38fc6fe9a9703c6170083c70700711e238fb6fea380c6002380f600f116e3e9e2fa9306300663f7a602930540063356b502b305b6020d8d0605791e1a9583451500034505003400f296a380b6002380a6003285a9456373b50a9305feff30002e96136505032300a6007da01307f0072c0029469377f500ba8663e5c7001387770519a0138707031181b387d5002380e7001387f6ff79fd13851600ba959386150013071008098f176500009305b5a599a01307f0072c0029469377f500ba8663e5c7001387770319a0138707031181b387d5002380e7001387f6ff79fd13851600ba959386150013071008098f17650000930555a10946428535a006059305eeff1a9503461500034505003400ae96a380c6002380a6003400ae9651470d8f85454285014697f0ffffe78040d5aa6049618280757106e52e8883e5450213f6050159e693f50502e9e50366050093564600294513071027976500001383d59a63ece60e2945140809679303077193084006b7e7f5059b82f70f1b0e0600bb57760233877702199e1317060341933b5717039315170033071703199e9a9503c715004616419283c50500a38fe6fe1a9603471600034606007115238fb6fea380e6002380c600f1163e86e3e8c2fb71a00c411307f0072800294693f7f500ba8663e5c7001387770519a0138707039bd54500b307d5002380e7001387f6fff1fd97520000e782a293176500009305b58f89a00c411307f0072800294693f7f500ba8663e5c7001387770319a0138707039bd54500b307d5002380e7001387f6fff1fd97520000e782828f176500009305958b09464285a5a8b287130630066378f602930540063bd6b702b305b6028d9f9b95170079159a9583c6150083c5050038002a97a300d7002300b700b287a94563fab7007d152c00aa9513e607032380c50039a89b95170079159a9503c6150083c505003400aa96a380c6002380b6003400aa962947098f85454285014697f0ffffe780c0baaa6049618280157186eda2e9a6e5cae14efd52f956f55af15eed62e966e56ae1eefcb28c2e8a014d814d81499755000003b945019755000083bbc502294bdad000690c612ef408652af01305faff2ae417550000130585332ae822ec13751d0063130514ce8863e63c0f33881c4133051a01bd4563e40503814633b71c017d173376a700b3050041e1c503450600630d6509fd160506e39ad5fe5da893067500e19a6395a6068145130708ff93078500636db7023306b5001062b386b70094623344260133848b40418eb3c62601175400000334a4f8b384db40c58e758e618e63158600c105e377b7fc01473306b500338505416264b306e500b9cab306e60083c60600638566030507f5b70147b385a640d9d9b307e50083c70700638a67010507e399e5fe49b73307d04011a02e97b30917018509e38709f2e3e53cf35297469703450700e31f65f14e8cce8a01a8e688054d6e8cc689e68a63869d050345040001c90275146d11462275c26582960de96394ba01014501a822655695034505005915133515002300a4000275146db305ba013386ba4122758296e28de30f05ea054511a00145ee604e64ae640e69ea794a7aaa7a0a7bea6b4a6caa6c0a6de67d2d618280797106f422f026ec4ae84ee40069034604000339050083398500ae840dc283b68901175500009305051a11464a85829619c5054597520000e782a2b98280138564ff133515002300a40083b709024a85a68597520000e782c2b78287717106f522f126ed4ae94ee552e1d6fcdaf8def42a8403458500854b85440dc123049400a30474012285aa700a74ea644a69aa690a6ae67a467ba67b4d6182803a89b689328aae8a033b040003454b0203469400118919e551ee176500009305552069a809ee5a860c7e087a946d976500009385651f0d468296854455f15a86087a0c7e8544a30391022ae42ee8130571022aec281013060003da8597500000e780e0d62800aaec176500001305e51caaf02800d685528697000000e780c0d225f117650000930545242800094697000000e78060d129f52c104e85029929f186756665946d976500009385151809468296b9a0176500009305e5165a87147f087b946e134636008296854411f95a860c7e087a946dd68552868296854409f15a860c7e087a946d976500009385e51d094682968544e31505ee4e85da850299aa84f9bd2e868c658546976500009385c51217e3ffff6700636e2a86176500001305a5149305b00297000000e780800039712af82efc081897520000e78242980a85b28597000000e780800001112ae42ee80545231ca100280097000000e780e03e1d712ae02ee42800aae017f5ffff13050571aae48a85aee8aaec176500001305a51297420000e782027197000000e78000fc597197550000938505192ee0c5452ee42ae817550000130585df2aec0a85aae817f5ffff13054554aaec0808aaf017f5ffff130545c9aaf417650000130525102af009452af482e08c082ef82afc175500009305c512081097000000e78000f697000000e78080001d712ae02ee40a85aae017f5ffff13056567aae42c00aee8aaec176500001305052d97420000e782626797000000e78060f297000000e78080001d712ae02ee40a85aae017f5ffff1305c563aae42c00aee8aaec176500001305652b97420000e782c26397000000e780c0ee97000000e78080001d712ae02ee40a85aae017f5ffff13052560aae42c00aee8aaec176500001305452c97420000e782226097000000e78020eb97000000e7808000557132e01308101036e4ae8863e10503930705101148930800fc63080800838207007d18fd17e3ca12ff9308d80f639a08002ae846ec33b8b80063efb800854805a063fbb80ab3071501038807009307f0fbe3c007ff5da0976700009388c7febb070041958b46f03ef463e1c50463efd50263fbc6080a852ae117f5ffff130585552ae52c002ee92aed08082af117f5ffff1305053c2af50c102ef92afd176500001305e5fbaae8114525a863e3c5003686b2e088002ae117f5ffff1305a5512ae508082ae917f5ffff130585382aed0c102ef12af51765000013056506aae80d45aaec82f80c01aef0aaf48808ba8597000000e78020dbe38db8f20146c68697000000e78080ef19ca637ab600b307c50003880700930700fc6343f800368632f8ae866375b6049306d6ffb337d600fd1733f8d7009307160063fc0701176500001306e50a4285be8597000000e78040e7b38707412a96930800fc99c783060600fd177d16e3cb16ffb38607013306d50081ea6390b6023a8597000000e78060cf63f2b602030806009307f0fbe3c307ff21a88305060013f5f50f63cd05002ade854551a0e387b6fc3686ae8697000000e780a0e4834716009375f5011308f00d93f7f703637ca80203482600939867009377f8031308000fb3e7f8006364050303453600f615ad919a071375f5035d8d4d8db7051100e300b5f801a8139565005d8d21a01395c5005d8d2ade130600088545636ac5001356b500894509c64181b335a0008d05b695b6e0aee408182ae117f5ffff1305053a2ae568182ae917f5ffff1305e50d2aed88002af117f5ffff130505212af508082af917f5ffff1305251f2afd0c10aee1aae517650000130585e6aae81545adb59302d00f730000001765000013052504976500001386a50a9305800297000000e78000bf597186f49775000003c635d011ca1765000013058511ed4597000000e78040fc0546a381c5d0086102e432e802ecaaf08810aae81705000013056503aaec17550000130505b72af032f482e088082af832fc28000c1097e0ffffe78080804265e26597000000e780a0f7397106fc22f814612e840a8513060003b68597500000e78060802265854508780c7c0a8697e0ffffe7802022e2704274216182809302300f7300000017650000130505f8976500001386850d9305800297000000e780e0b27971176500001305251397420000e782824a17650000930525130a8597000000e78060b27971176500001305e51497420000e7824248176500009305e5140a8597000000e78020b02a862e85b28597000000e78080001d71aee8aaec88082af817f5ffff130525212afcac08aee0aae417650000130545162ae00d452ae402f008182ae809452aec176500009305451c0a8597000000e78000ab01a001a0828001c573005010f5bf0545828017b5ffff130585a0731055308280177600000340a6b8177600009306a6b89062138786003a961d06619a3307e64013070702b707a00063e0e70298e209ce233006007d567e1681c59305360019a09305a6000ce18280177500001306259021459305000297e0ffffe780009e97420000e782821017780000034048b297750000938c45b203b60c0093058600b706a00063e0b6782a8c3385cc00210523b0bc006308057693052007a303b500130650062303c50013066006a302c500130630072302c5001306e006a301c500130610062301c500a300b500930540052300b50003b60c009305060163eeb6726696130b860023b0bc0063070b7297420000e78242e6034048b297420000e782a24a6365a672e6951384850023b0ac00630e047013060002930400022285814597400000e780604a05452ae422e82aec13059b00976500009385452b1d4697400000e780a05c03451c0383450c0303462c0383463c0397420000e78262fdaad003459c0283458c020346ac028346bc0297420000e782c2fb8345dc020346cc028346ec020347fc0297420000e78282bcaaec03451c0283450c0203462c0283463c0297420000e782a2f883455c0203464c0283466c0203477c0297420000e78262b997420000e782623c976500001387256ed1459008d14697400000e780a03d97420000e78202ef08108c1897b0ffffe780609017550000930d058e13858d00914537766f6d1b06662689cc14616398b60097420000e782a20c6382c6024105c114edf4427da27563120d54014a05494a856a8697400000e780404db9a04275930505fe639b0562227597320000e7822273518d02154d8daafe175500009305a585280097e0ffffe78020d6426513050502ac1a1306000297400000e7800049014a014d09452aec054997420000e782a2316364a65ae695938a850023b0ac00638d0a5841465685da8597400000e780e0451305c0022388aa0013851a01976500009385a5121d4697400000e780004403455c0483454c0403466c0483467c0497420000e782c2e4aad00345dc038345cc030346ec038346fc0397420000e78222e383451c0403460c0483462c0403473c0497420000e782e2a3aaec03455c0383454c0303466c0383467c0397420000e78202e083459c0303468c038346ac030347bc0397420000e782c2a097420000e782c2239765000013878555d1459008d14697400000e780002597420000e78262d628188c1897a0ffffe780c07713858d009305000209469d669b8646f7bdc91861631cc700033785ff8347170003470700a2075d8f6306d7004105c115edf191a862640d45636785042665930505fe6398054e066597320000e782625ba266518d02154d8daafe631bd400174500009305856d280097e0ffffe78000be97420000e782c2fe97400000e7802031050422ec15a02664866bb3098d003305aa416363852c3305a901de85228697400000e780c02e4e8d1305c002238caa0013859a0197450000938525441d4697400000e780c02c97320000e782627d91c597420000e7820206e5fd97420000e78282c7176500001307c53b8808930500029018930600029304000297400000e780a01397420000e782020a97a0ffffe780a066a10d99491745000013040566adcc03b50d00631c350103b58dff1946a28597400000e7802026012509c5c10dc114e5f099a862640d45636885040675930505fe639b0540666597320000e782624aa266518d02154d8daafe026c631bd400174500009305655c280097e0ffffe780e0ac97420000e782a2ed97400000e7800020050422ec1da08674e66933049d003305aa41636f951e026c3305a901ce85268697400000e780801d228d83b50c00138505043706a0006365a630e6951384850023b0ac00630e042e130600022285d68597400000e780801a130590022300a40228091306000d814597400000e780e00497420000e782e2f597300000e78040072809ac1a97300000e780801e626a63040a2cc264ac1a13060002268597400000e780c01501459359ba03931a5a006395092263c30a2203404cb297420000e78202e463ebb6206696130b860023b0bc0063040b20b38b54015a84130600022285a68597400000e78060119384040213040402e39474ff01456395091e63c30a1e03404cb297420000e78262df63ebb61c66969309860023b0bc006384091cda9a4e84130600022285da8597400000e780e00c130b0b0213040402e3145bffa81a13060006130b8117814597400000e780c0f68d4b63637a010d4a13145a0017650000930a659215c463820b049384090293050002930600025a854e86568797400000e78040f20114130b0b02fd1ba68961fcb01a9302000a4a85ea85d2867300000097420000e78282a88280160a13050a02976500001386a58b9305000697f0ffffe780e04963e9a925131b1a0063e369014e8b214563636501214b63400b2463090a0a97420000e78262d263e9b62266969304860023b0bc00638204222685ca85528697400000e78040ff268945a0026c636ba421131b1a0063636401228b214563636501214b63420b2063050a0897420000e782a2cd63ebb61e6696930b860023b0bc0063840b1e5e85ca85528697400000e78080fa5e899da821456a8a6363a501214a634d0a1c0265034045b283b60c00338646013707a00005456362c71ce6961389860023b0cc00e31a09a84daa0265034045b297420000e782e2de636aa616e6951389850023b0ac00630309165a8a81b903404cb297420000e782c2dc6369a600e6951389850023b0ac00e31409d40545a1aa97650000138645b629a0976500001386a5b5d68597d0ffffe780c02317450000130605630545a14597d0ffffe7808022174500001306c5610545c14597d0ffffe780402105459305000297d0ffffe780c024174500001306a55f05459305000297d0ffffe780001f174500001306455e05459305000497d0ffffe780a01d174500001306e5240145814597f0ffffe780e022aae88808aaf817f5ffff1305a593aafc974500009385a5e92ee12ae5174500001305650197420000e7820282174500009305e520b5a0aae88808aaf817f5ffff13054590aafc97450000938545e62ee12ae517450000130505fe97320000e782a27e174500009305851d1da82ae90809aaf817f5ffff1305e58caafc974500009385e5e22ee12ae5174500001305a5fa97320000e782427b174500009305251aa81a97f0ffffe780e016054521a0014511a00145974500001386655001a8014511a00145974500001386654fda8597d0ffffe780000f0145974500001386254ed28597d0ffffe780c00d130101df2334112023308120a6ffcafbcef7d2f3d6efdaebdee7e2e366ff6afb976c000003c08c2097650000138c852003360c0093054601b706a00063eab6606296130486002330bc0063030460aa8a17450000930505195146228597400000e78080d483350c00138585023706a000636aa65ee295138b85002330ac0063030b5e51465a85a28597400000e780c0d113058002230aab0003c08c2083350c00138505023706a0006369a65ce295138485002330ac006302045c13060002930400022285814597400000e780c0b905452ae022e42ae813055b01976500009385a59a1d4697400000e78000cc03c51a0183c50a0103c62a0183c63a0197320000e782c26caac003c59a0083c58a0003c6aa0083c6ba0097320000e782226b83c5da0003c6ca0083c6ea0003c7fa0097320000e782e22b2afc03c51a0083c50a0003c62a0083c63a0097320000e782026883c55a0003c64a0083c66a0003c77a0097320000e782c2282af882f682f282ee82eae80a97650000138745ddd1451018d14697400000e780c0ac367596757666d666aaf0aeecb2e8b6e42808ac0097a0ffffe78000ff17450000930ba5fc13858b00914537766f6d1b06662689cc14616398b60097320000e782427b6382c6024105c114edf4a279827563900940014a05494a854e8697400000e780e0bbb5a02275930505fe6393054a027597320000e782a2f8aef697320000e78222f4aef297320000e782a2efaeee97320000e782a2fa518d02154d8daaea174500009305e5fc0a8597d0ffffe780e0422265130505028c0a1306000297400000e780c0b5014a814909452ae805491305c002230eab001305db01976500009385e5811d4697400000e78040b303c55a0283c54a0203c66a0283c67a0297320000e7820254aac003c5da0183c5ca0103c6ea0183c6fa0197320000e782625283c51a0203c60a0283c62a0203c73a0297320000e78222132afc03c55a0183c54a0103c66a0183c67a0197320000e782424f83c59a0103c68a0183c6aa0103c7ba0197320000e78202102af882f682f282ee82eae80a97650000138785c4d1451018d14697400000e7800094367596757666d666aaf0aeecb2e8b6e40818ac0097a0ffffe78040e613848b001305000289451d661b0646f749cd1460639cb600833684ff03c7160083c606002207d98e6386c600410441156df1a5a842640d45636985060665930505fe63930536627597320000e782c2e0aef697320000e78242dcaef297320000e782c2d7aeee97320000e782c2e28266518d02154d8daaea631bd400174500009305a5e40a8597d0ffffe780a02a2265931554002e958c0a1306000297400000e780609d050422e815a08664627d3384990033053a416364951a33053901ea85268697400000e780009ba289130590022302ab0288181306000d814597400000e780408513058008aae205452314a114881813065002da8597300000e780e08688188c0a97300000e780209e426a63040a24a2648c0a13060002268597400000e78060950145935bba03931a5a00639a0b1c63c80a1c03c08c2097320000e782c27763e0b61c6296130b86002330bc0063090b1a338d54015a84130600022285a68597400000e78000919384040213040402e394a4ff0145639a0b1863c80a1803c08c2097320000e782227363e0b6186296930b86002330bc0063890b16da9a5e84130600022285da8597400000e780808c130b0b0213040402e3145bff880a13060006130b0115814597300000e78060760d4c63638a010d4a13145a0017550000930a051215c4630e0c0493840b0293050002930600025a855e86568797300000e780e0710114130b0b027d1ca68b61fc900a9302000a4a85ce85d286730000008330812003340120fe745e79be791e7afe6a5e6bbe6b1e6cfa7c5a7d130101218280160a13050a02975500001386c5099305000697f0ffffe78000c863683419931a1a0063635401a28a214563635501a14a63cf0a1663020a0697320000e782a26363e8b6166296930b86002330bc0063810b165e85ca85528697300000e780607d5e8991a821454e8a63633501214a63460a1403c08c2083360c00338646013707a0000545636cc712e296138986002330cc00e31d09bc1da203c08c2083350c00338555013706a0006369a600e295138985002330ac00e31009dc0545d5a8975500001386453b29a0975500001386a53ad68597d0ffffe780c0a817450000130605e80545d14597d0ffffe78080a7174500001306c5e605459305800297d0ffffe78020a605459305000297d0ffffe780a0a917450000130605b70145814597f0ffffe78080aa2af80818aae417e5ffff1305451baae89735000093854571aeecaaf01745000013050589aaea0d45aaee82faa800aaf20945aaf617450000930585b23da8aaf4a810aae417e5ffff13056517aae8973500009385656daeecaaf01745000013052585aaea0d45aaee82faa800aaf20945aaf6174500009305a5ae880a97f0ffffe780e0a0014511a00145974500001386a5da21bf0145974500001386e5d9d28597d0ffffe780809997320000e782020c176800000340c8ad97650000938cc5ad03b60c0093058600b706a00063e5b6782a8c3385cc00210523b0bc00630d05769305c006a303b500930510062303b50093056007a302b5009305f0062302b50093052007a301b500930500072301b500a300b500930510042300b50003b60c009305060163e3b6746696130b860023b0bc00630c0b7297320000e782c2e10340c8ad97320000e7822246636aa672e6951384850023b0ac006303047213060002930400022285814597300000e780e04505452ae422e82aec13059b00975500009385c5261d4697300000e780205803451c0383450c0303462c0383463c0397320000e782e2f8aad003459c0283458c020346ac028346bc0297320000e78242f78345dc020346cc028346ec020347fc0297320000e78202b8aaec03451c0283450c0203462c0283463c0297320000e78222f483455c0203464c0283466c0203477c0297320000e782e2b497320000e782e237975500001387a569d1459008d14697300000e780203997320000e78282ea08108c1897a0ffffe780e08b17450000930d858e13848d009549174500001309a58c8dc00860631c3501033584ff1546ca8597300000e780e04a01250dc14104c114edf0427da27563130d54014a05494a856a8697300000e7804048b9a04275930505fe639c0562227597220000e782226e518d02154d8daafe1745000093052585280097d0ffffe78020d1426513050502ac1a1306000297300000e7800044014a014d09452aec054997320000e782a22c6365a65ae695938a850023b0ac00638e0a5841465685da8597300000e780e0401305c0022388aa0013851a01975500009385a50d1d469d4997300000e780e03e03455c0483454c0403466c0483467c0497320000e782a2dfaad00345dc038345cc030346ec038346fc0397320000e78202de83451c0403460c0483462c0403473c0497320000e782c29eaaec03455c0383454c0303466c0383467c0397320000e782e2da83459c0303468c038346ac030347bc0397320000e782a29b97320000e782a21e9755000013876550d1459008d14697300000e780e01f97320000e78242d128188c189790ffffe780a07293848d001304000217350000130b15743dc88860631c350103b584ff1d46da8597300000e7800032012509c5c10441146df091a862640d45636785042665930505fe6398054e066597220000e7824256a266518d02154d8daafe631bd400173500009305e56c280097d0ffffe780e0b897320000e782a2f997300000e780002c050422ec15a02664866bb3098d003305aa416363852c3305a901de85228697300000e780a0294e8d1305c002238caa0013859a01973500009385053f1d4697300000e780a02797220000e782427891c597320000e782e200e5fd97320000e78262c2175500001307a5368808930500029018930600029304000297300000e780800e97320000e782e2049790ffffe7808061a10d9949173500001304e560adcc03b50d00631c350103b58dff1946a28597300000e7800021012509c5c10dc114e5f099a862640d45636885040675930505fe639b0540666597220000e7824245a266518d02154d8daafe026c631bd400173500009305c55b280097d0ffffe780c0a797320000e78282e897300000e780e01a050422ec1da08674e66933049d003305aa41636f951e026c3305a901ce85268697300000e7806018228d83b50c00138505043706a0006365a630e6951384850023b0ac00630e042e130600022285d68597300000e7806015130590022300a40228091306000d814597300000e780c0ff97320000e782c2f097200000e78020022809ac1a97200000e7806019626a63040a2cc264ac1a13060002268597300000e780a01001459359ba03931a5a006395092263c30a220340ccad97320000e782e2de63ebb6206696130b860023b0bc0063040b20b38b54015a84130600022285a68597300000e780400c9384040213040402e39474ff01456395091e63c30a1e0340ccad97320000e78242da63ebb61c66969309860023b0bc006384091cda9a4e84130600022285da8597300000e780c007130b0b0213040402e3145bffa81a13060006130b8117814597300000e780a0f18d4b63637a010d4a13145a0017550000930a458d15c463820b049384090293050002930600025a854e86568797300000e78020ed0114130b0b02fd1ba68961fcb01a9302000a4a85ea85d2867300000097320000e78262a38280160a13050a0297550000138685869305000697e0ffffe780c04463e9a925131b1a0063e369014e8b214563636501214b63400b2463090a0a97320000e78242cd63e9b62266969304860023b0bc00638204222685ca85528697300000e78020fa268945a0026c636ba421131b1a0063636401228b214563636501214b63420b2063050a0897320000e78282c863ebb61e6696930b860023b0bc0063840b1e5e85ca85528697300000e78060f55e899da821456a8a6363a501214a634d0a1c02650340c5ad83b60c00338646013707a00005456362c71ce6961389860023b0cc00e31909a84daa02650340c5ad97320000e782c2d9636aa616e6951389850023b0ac00630309165a8a81b90340ccad97320000e782a2d76369a600e6951389850023b0ac00e31409d40545a1aa97550000138625b129a097550000138685b0d68597c0ffffe780a01e173500001306e55d0545a14597c0ffffe780601d173500001306a55c0545c14597c0ffffe780201c05459305000297c0ffffe780a01f173500001306855a05459305000297c0ffffe780e019173500001306255905459305000497c0ffffe780801817350000130645240145814597e0ffffe780c01daae88808aaf817e5ffff1305858eaafc97350000938585e42ee12ae517350000130545fc97220000e782e27c1735000093054520b5a0aae88808aaf817e5ffff1305258baafc97350000938525e12ee12ae5173500001305e5f897220000e7828279173500009305e51c1da82ae90809aaf817e5ffff1305c587aafc973500009385c5dd2ee12ae517350000130585f597220000e78222761735000093058519a81a97e0ffffe780c011054521a0014511a00145973500001386454b01a8014511a00145973500001386454ada8597c0ffffe780e00901459735000013860549d28597c0ffffe780a008011106ec033805001008914691c6231006000906fd16e5fe13060003c2662303c10013068007a303c1002304d10013d68603a307c10013d606032307c10013d68602a306c10013d606022306c10013d68601a305c10013d606012305c100a182a304d100114693069100173700001307470205c68347080013f5f7009183ba9783c707003a9503450500a38ff6fe2380a60089067d16050871fe907d8879146e9305610029468296e26005618280797106f422f02e848c7d10610878946d32e4975500009385958f3d46829622e8230ca100a30c0100173500009305c5fc170500001307050608081146340097e0ffffe780c0e5834591010345810185cd93751500054585e9426583454502918991e90c7d0879946d974500009385c509094609a80c7d0879946d9745000093859508054682960589a270027445618280797106f422f026ec00610860ae8459c58c7c8878946d930504012ee0975500009385e5862946829626e42308a100a30801001755000093052586170500001307a50928001946a28697e0ffffe78020dc175500009305a58417d5ffff1307454d280039468a8697e0ffffe78040da8345110103450101a9c9937515000545a9e522658345450291899de50c7d0879946d97450000938545fe094635a08c7c88789c6d973500009385e5e74146a2700274e264456182870c7d0879946d97450000938575fb054682960589a2700274e26445618280797106f422f026ec2e848c7d1478986d930485002ae0174500009305657819463685029722e42308a100a308010017350000930565e7170500001307850f28001146a68697e0ffffe78020cf17450000930565751705000013072506280015468a8697e0ffffe78040cd834511010345010185cd93751500054585e9226583454502918991e90c7d0879946d97450000938545f1094609a80c7d0879946d97450000938515f0054682960589a2700274e26445618280597186f40861086117360000033666acb306a040e98e3386c6026992973600009386a6b5369603460600aaecb2d2a8082afc17d5ffff1305e56daae0c810aae417e5ffff1305c587aae817450000130545e62ae40d452ae802f43018947d887932ec89452ef03000b68597c0ffffe780e044a67065618280757106e503e645029376060191ea1376060239e2aa60496117d3ffff6700c34a97320000e78262851375f6003e876365d5009307750519a09307050397220000e782826b75f297220000e782425e173500009307551c25a897320000e782e2811375f6003e876365d5009307750319a09307050397220000e782026875f297220000e782c25a173500009307d51809462e85be8597c0ffffe780604faa604961828097220000e782a25b56e45ae02e8484758c6daa89639cb40013058401974500009385054f97c0ffffe780e02a0870939534002e95033a0401833a0400930500060ce1850404f4631d5a01174500009305a54a228597c0ffffe780a01d833a0400033b84001389090213155a005a9513060002ce8597300000e780c08f93041a0004e8639f5401174500009305e546228597c0ffffe780e019033b8400833a0400139554005a9513060002ca8597300000e780408c93042a0004e8639d54011745000093056543228597c0ffffe7806016033b840093850904139554005a951306000297300000e780e08808740d0a2338440119c17d1508f497220000e78262358280197102ec02e802e402e005452af002f402f802fc0945aae082e482e882ec0d45aaf082f482f882fc0a8597a0ffffe780a0d4797106f42e86aa85280097000000e780800417550000930565cb88611386850032951d0561993306c54013060602b706a00063e4c60090e111a0014582756266c26622670ced10e914e518e1a27045618280357106ed22e926e54ae1cefcae842a890345160183450601834626010347360122054d8dc2066207d98e558d2ad803459600834586008346a6000347b60022054d8dc2066207d98e558d8345d6008346c6000347e6008347f600a205d58d4207e2075d8fd98d82154d8d2af40345160083450600834626000347360022054d8dc2066207d98e558d83455600834646000347660003467600a205d58d42076206598ed18d82154d8d2af082e882e482e002fcc800975500001387a58dd1451010d14697200000e780205d4665a6650666e2762aec2ee832e436e028188a859790ffffe78060af03c5140083c5040003c6240083c6340097220000e782821183c5540003c6440083c6640003c77400a205d18dc2066207d98ed58d97220000e78262b6aaf003c5140183c5040103c6240183c6340197220000e782a20d83c5540103c6440183c6640103c7740197220000e782a2cb558e518d83c5d40103c6c40183c6e40103c7f40197220000e782a2ccaaf8a808c1451306710791c597220000e78242d2e5fd26649309040263c90906175500000340e5ad175500009305e5ad9461338636013707a0000545636ac704ae969384860090e1a1c486652685228697200000e780a06233858400ac081306000297200000e7808061930200022685ce85730000004a8708e30ce710eb14efea604a64aa640a69e6790d6182800145974500001386e55ece8597c0ffffe78000915d719c6198659069946d2a88930240053e85ba85730000002af82efc8800b2e0b6e40c1841469306f10411c697220000e782223265fe97220000e78202049b0207f0a1c90862b3761501e2061b5785010217d98e337755002217931785035d8fd98e1357850233775700935785035d8f93578501b3f7170121811b55850162055d8d598d558d2330a30021036116fd15d5f997220000e78242298280170300006700c31d797106f422f026ec4ae84ee49756000003c0c69a175600001306c69a1c6213870704b704a00063e6e406b2979384870018e2a5c02e892a8403c0c69a1385f7046199b305c540e105b706a00063eeb6040ce239c99309000423303501130600022685ca8597200000e780004d93050902138504021306000297200000e780c04b4e8508e004e408e897220000e78242218280174500001306e56c05459305000497b0ffffe780407c174500001306056d21459305000297b0ffffe780e07a757106e52a880861c2879867906b946f2e8393024005ba8573000000aaf4aef893088107b2fc36e1ac1041469306710809ce03c7060003c505002380e5002380a6008505fd167d166df6468608660c622676c676aae02efcb2e4b6e8aeecaaf082f482f882fc02e19303810691459010b708ff0041679b0207f0a1c90862b3771501e2071b57850102175d8fb3775500a21793168503dd8ed98e1357850233775700935785035d8f93578501b3f7170121811b55850162055d8d598d558d23b0a300a1036116fd15d5f90145e6750a66a67646772ee832ec36e03ae48a85114615c29461033703003697b336d7000589b307a70033b5e700558d9ce1a10521037d1665f28a85428597000000e780e000aa6049618280357106ed22e926e54ae12a8903c5950103c6850183c6a50103c7b5012205518dc2066207d98e558d03c6d50183c6c50103c7e50183c7f50197220000e78202b5518daaec97220000e78222ad03c65501d98e558d83c64501220603c7650183c77501558e02ec4207e2075d8f598e0216518daae897220000e782629803c6d50003c7c50002e8558d2206598e83c6e50003c7f50002e402e0c2066207d98e558e0216518daae497120000e7822271aae08800c1451306f10591c597220000e782c295e5fd6665c665266686662afc2ef832f436f0174500001307053a0a859305000210109306000297200000e78020120265a2654266e266aae0aee4b2e8b6ec0a858c009780ffffe780606402fcc26602f802f41305100202f063ffa60c2266174500001307452c0810b68597200000e780e00d97220000e78202c2938207f06389030803441500034e0500834625000347350022043364c401c2066207d98eb3e48600034755000344450003466500834575002207418f93170601e205dd8dd98d13970502b366970093d78601b3f7070113d78600337717015d8f9bd585012206d18dd98d1bd686010216b3f60601e206558eb3f65400a216621eb366de00558ed18d2330b30061152103fd13e39b03f64a8708630c67106b146f0677a6774678e6789302500573000000ea604a64aa640a690d618280174500001306451d93050002368597d0ffffe780e05b357106ed22e926e54ae12a8997220000e782c28fd98e558d2ad897120000e782227d558d03c6d50083c6c50003c7e50083c7f50097220000e7826294518d2af497120000e782a2562af082fc82f882f482f0e810974500001387252ad1451010d14697200000e780a0f96675c67526768676aaecaee8b2e4b6e028008c009780ffffe780e04b02fce26602f802f41305100202f063ffa60c4266174500001307c5130810b68597200000e78060f597220000e78282a9938207f06389030803441500034e0500834625000347350022043364c401c2066207d98eb3e48600034755000344450003466500834575002207418f93170601e205dd8dd98d13970502b366970093d78601b3f7070113d78600337717015d8f9bd585012206d18dd98d1bd686010216b3f60601e206558eb3f65400a216621eb366de00558ed18d2330b30061152103fd13e39b03f64a8708630c67106b146f0677a6774678e6789302500573000000ea604a64aa640a690d618280174500001306c50493050002368597d0ffffe78060436d7106e622e2a6fdcaf9cef5d2f1d6eddae92a8a280097000000e780c03d0345810015c14268626682752277c277627523340a01d28690ea8cee98f29cf685451306000395ae0345f1008345e1000346d100230ba104a205d18d231ab1040345a100834591000346b1008346c10097220000e7820298c2646264027ba27ac2796279aac88c0013057108254697200000e780e0f313d58403230fa10413d50403a30ea10413d58402230ea10413d50402a30da10413d58401230da10413d50401a30ca10413d58400230ca104a30b9104135584032303a10613550403a302a106135584022302a10613550402a301a106135584012301a10613550401a300a106135584002300a106a30f810413558b032307a10613550b03a306a10613558b022306a10613550b02a305a10613558b012305a10613550b01a304a10613558b002304a106a303610713d58a03230ba10613d50a03a30aa10613d58a02230aa10613d50a02a309a10613d58a012309a10613d50a01a308a10613d58a002308a106a307510713d58903230fa10613d50903a30ea10613d58902230ea10613d50902a30da10613d58901230da10613d50901a30ca10613d58900230ca106a30b3107135589032303a10813550903a302a108135589022302a10813550902a301a108135589012301a10813550901a300a108135589002300a108a30f21078808b145d9c9034605000505fd157dda28008c0897000000e780608862679315170063c1051cc2679dc5174500000340852217450000930685229062b304b6003704a00005456360941a3696210684e22e8801e649aa0148054613051600972400009384c40a05c703c407009376f4001180269403440400a69683c606008507a30f85fe2300d5007d17090571ff7d577e171305a7006311a814036501068365c10502153369b50003658106836541068369c106034401070215b36ab50093051107130511097d4697200000e78060d02308810a1305110b930511097d4697200000e78000cf02e402e802ec02f0130381009143b0013708ff001307f00f93188701c167938207f06389030803441600034e0600834626000347360022043364c401c2066207d98eb3e48600034756000344460083456600034576002207418f9397050162055d8d598d13170502b366970093d78601b3f7070113d78600337717015d8f1b558501a2054d8d598d9bd586018215b3f60601e206d58db3f65400a216621eb366de00d58d4d8d2330a30021036116fd13e39b03f681452266c2666267027523342a0123385a01233c3a01d28790f394f798fb13068003529608e22330ba00b2601264ee744e79ae790e7aee6a4e6b5161828017450000930725af454589b90145172600001306463c97b0ffffe78000f197220000e782c2881306f0032a8a636ab6049305710713050008230fa106a30e0106230e0106a30d0106230d0106a30c0106230c0106a30b0106930471082546268597200000e78060b913058a004146a68597200000e78060b8930b0002e14985acaeec8544fe0403e5840183e5440103e6040183e6c40002154d8d0216558e03e4c40203eb040383ea440383eb840383cc340203cc440283cd540283c9640283c57402aee803cd840283c59402aee483c5a402aee003c9b402b2f8aafc32e12ae508099385c4011d4697200000e780e0b003c5d40383c5c40303c6e40383c6f40397120000e782a25183c5140403c6040483c6240403c7340497120000e7826212aaf003c5540483c5440403c6640483c6740497120000e782824e83c5940403c6840483c6a40403c7b40497120000e782420faaf417450000034065f297450000938565f29461138606043707a000636cc720ae969384860090e163860420034065f21385f60461993306b5406106b706a00063e5c62090e163020520021b336b8b00821bb3ea5b01220cb3659c01c20de20933e6b901d18d220d46663366cd00a666c20606676207d98e558e02163364b600930500040ce10c015d46268597200000e78080a113558403238fa40013550403a38ea40013558402238ea40013550402a38da40013558401238da40013550401a38ca40013558400238ca400a38b8400cae8a38f240113558b03aae4a383a40213550b03aae02383a40213558b022afca382a40213550b022af82382a40213558b012af4a381a40213550b012af02381a40213558b002aeca380a4022380640313d58a032ae8a387a40213d50a032ae42387a40213dc8a02a386840393dc0a022386940313dd8a01a385a40393dd0a012385b40313d98a00a384240323845403138504038c10414697200000e780c093a1497d557e15e665938505fc930b350091ed05457e059305c50013060004268597200000e780c091012501cdd29923b0790105452300aa0097120000e7824257828013051a000c015d4697200000e780a08e233c8a0046652300aa0226652304aa020665a303aa0262752303aa024275a302aa0222752302aa020275a301aa0262652301aa02a3006a0342652308aa022265a307aa0223078a03a3069a032306aa03a305ba0323052a03a3045a0313051a038c10414697200000e780e08723000a009dbf174500001306c5a905459305000497b0ffffe78020b9174500001306e5a921459305000297b0ffffe780c0b797120000e782e221eae06efc130900027d5b7e1bae84aa8a5a8d6372260323b0aa0156860ce623b82a0123bc6a01173500001305654f08f21d4508f605acb28903c5940083c5840003c6a40003c7b40022054d8d42066207598e518d83c5d40003c6c40003c7e40083c7f400a205d18d4207e2075d8fd98d8215b3eca500138a04016388061a03c3040083c5140083c7240003c5340003c8440083c3540083c8640083c27400174c000003402cc217460000930b26c283b60b00138606023704a0006360c420de961384860023b0cb006309041e03402cc21386f602619ab3067641e1063707a0006363d71e23b0db00630f061ca205b3e56500c20762055d8d4d8da203b3e50301c208e202b3e61201d58d8215b3eda500130900022330260113d58d03a303a40013d50d032303a40013d58d02a302a40013d50d022302a40013d58d01a301a40013d50d012301a40013d58d00a300a4002300b40113d58c03a307a40013d50c032307a40013d58c02a306a40013d50c022306a40013d58c01a305a40013d50c012305a40013d58c00a304a40023049401130504014146d28597100000e780406a7d557e158119130d35006395090c13060002130900022285a68597100000e780a0680125e31905e408084146d28597100000e780e0666ee066e40a85b145b1cd034605000505fd157dda08108a859780ffffe78080a34276131916006340090ea276630a090603402cc283b50b0033872501b707a000054563e3e70cde95a10523b0eb004a8db1e95da866e408084146d28597100000e780a060036501018365c100036681010215836641014d8d0216f245558ed68688e690ea8cce7d557e15290588e297120000e782420f066de27d0d6182804db3014d854513851500172700001307a78f05c683c7060093f4f7009183ba9783c70700ba9483c404008506a30ff5fe230095007d16090571fe7d557e152905e311add649b7173500001306e57a054531a0173500001306a57b21459305000297b0ffffe78080890145972500001386a5d3ca8597b0ffffe780408897120000e78202201861833e8502033c0505033a8507033f050a0c65aef80c79aef083398505033d05080338850a0c69aefc0c7daef4033e0506833885080339050b0c6d2ee124612c75aee8033b05098333850b0c712ee92c652ee52c79aeec833b85092ae47c61174500001306858a614563020536aae033c5ee00b2e433464c01b34fc500a68dc674867c33c69c003e85b3c7a9013d8e6673a67ab3c76a00b3451e01bd8d8a60b3c71d00ca826289728c466e33446e01a18f3ee85af846ec4e8baa66ca67b58fe668b3c67801bd8e3a84334706011356f703931717005d8eb3cfef01a98eaa89b3c7c6003d8c22fcb3ced70133c6270133c4470122f0b3c7e7013ef4b3c7550013d4f70393951700c18db3c5f50133cf9500b3c49501a6f833ca6501b3cca50133c80501c6854265334975009358f9031314190033641401218f334b670033445701334c87016265b34aa70033455700aafc13d7f6038606d98eb58fb3c61700b3c0b70133cdc70142773d8fb3c8770093d7ff03860fb3e7ff00b347f9004a653d8daa6433ce9700b3cfb700b3c57701b3c737019354ff03060fb3649f00a6ec9354d6030e06336f96001356a4031a043369c40013566a032a0a3366ca0032f813d61a039394fa00b3eac4001356b7025607518f13d64602f206b3e9c60013d6ce01939b4e02b3ebcb0013d63c01b61c33eacc0013d69000de10b3e0c0001356e803131328003363c30013d62703ba075d8e935655026e05558d827793d67701a617d58f93d68800139888033368d80093d68503a205b3ecd50093557d0213149d01b36db40093555c019313bc02b3e5b30093562b009312eb03b3e2d200227b9356eb024a0b336ddb0093d69f019e1fb3e3df00e67893d63800f618b3e8d8001354ce02520e33648e00c67493d64401b214d58c93c6f4ffb3ffd50093c6f5fff98ea58eb6f89346f7fff18eb58daefc9345f6ffe276f58db98d2ee193c5f6ff3687e58db18d2ee99345f4ffb375bf001346faff33f6c8003346e601b2f41346ffff3376ca0093c6f8ffb3f6d900b3c44601b3ceb900218eb2f093c5f9ffe18db3c515012ee59345f9ffb3f5bd0013c6fcff3376cd0033cecd0013c6fdff33f6cc009346fdff6664e18eb3c6dc00b6e833cc8500b34926019345f4ffb375b900b3c5a501aeec93c5fbffc276f58d13c6faff3376c800b348d60013c6f6ff33f6ca009346f8ffe98e33cb5601334ab500334d76011345f5ff33f5ab00b34ba80013c5f0ff33f5a30093c5f7ffb375b30033c9b30093c5f3fffd8d1346f3ff33f6c200b343f6002666334f550033c8b000086293c5f2ffb3f5b000b3c76500398d33c7af00066521067d15e31205ca226518e12334d50323388505233c45072330e50bc6750ce586750cf9233c35052330a5092334050be6750ce9a6750cfd2330c507233415092338250b8a650ced24e1c6652cf523386509233c750aca650cf1aa652ce5e6652cf9233c75097ce197120000e782e2d8828097120000e78202f656ec5ae85ee42a8a0345950db2892e8901cda30c0a0c528597000000e78000ba014523340a0c19a003358a0c03340a0d8144098c130b900c930b800cce8a3386994063e88a0463e2990a637a650bb385ab4063e0850c6367860cb30599005295228601cc83c6050003470500b98e2300d500850505057d1675f6528597000000e780c0b3a294b38a8a4003340a0d01457db763e7990a9305900c6378b50a9305800c898d63e8550b636f560bca94b305aa005686638d0a0083c6040003c70500b98e2380d500850485057d1675f656952334aa0ca6600664e2744279a279027ae26a426ba26b6161828017350000130665392685ce8597c0ffffe7808043973500001386a52c9305800c97c0ffffe7804042173500001306e52c228597c0ffffe780c044173500001305453097350000138645329305800297c0ffffe780203317350000130685326db7973500001386e52755bf173500001306c528568597c0ffffe780a040173500001305252c973500001386252e7dbf297106fe22fa26f64af24eee52ea56e65ae2defde2f9e6f52e89aa8528001306000e97100000e780a0f60345110e19c14e6585a04e6585451306900ca300b10e6378c518930585f3638905188345010e30002a9603450600ee66a98d1385f6ff9306900c2300b600637ed516930585f3638f05162c002e958345050093c505082300b500280097000000e780a09b014582e9ee640144898c930a0002130b1002930b900c130c800c930c810097350000138ac51e93090002b306890063e39904637d64096376750bb305ac4063ec950ab3858a4063ed950a3386ac003685a685a686528797100000e78020d5280097000000e78020952694b3899940ee64014565bf93051002637db4089305900c637eb5089305800c898d63ee350993050002818d63ee350930002a96173500001307e5163685ce85ce8697100000e780e0cff2705274b2741279f269526ab26a126bee7b4e7cae7c31618280173500001306e51d93050002228597c0ffffe780e024973500001386050e9305800c97c0ffffe780a023173500001306450e29a0173500001306250f268597c0ffffe780802517350000130605186dbf973500001386650ad9b7173500001306450b29a0173500001306250c4e8597c0ffffe7808022973500001386050845b7173500001306e50811a8973500001386c50671b7173500001306a507054597c0ffffe780801f83459501034685018346a5010347b501a205d18dc2066207d98ed58d0346d5018346c5010347e5018347f5012206558e4207e2075d8f598e0216d18d2eeb83451501034605018346250103473501a205d18dc2066207d98ed58d034655018346450103476501834775012206558e4207e2075d8f598e0216d18d2ee783459500034685008346a5000347b500a205d18dc2066207d98ed58d0346d5008346c5000347e5008347f5002206558e4207e2075d8f598e0216d18d2ee383451500034605008346250003473500a205d18dc2066207d98ed58d034655008346450003476500034575002206558e42076205598d828283459500034685008346a5000347b500a205d18dc2066207d98ed58d0346d5008346c5000347e5008347f5002206558e4207e2075d8f598e0216d18d828283451501034605018346250103473501a205d18dc2066207d98ed58d034655018346450103476501834775012206558e4207e2075d8f598e0216d18d828283459501034685018346a5010347b501a205d18dc2066207d98ed58d0346d5018346c5010347e5018347f5012206558e4207e2075d8f598e0216d18d828283451500034605008346250003473500a205d18dc2066207d98ed58d034655008346450003476500034575002206558e42076205598d828203c5150003c6050083c6250003c735002205518dc2066207d98e558d03c6550083c6450003c7650083c575002206558e4207e205d98dd18d82154d8d828282154d8daaec03c5940083c5840003c6a40083c6b40022054d8d4206e206558e518d83c5d40003c6c40083c6e40003c7f400a205d18dc2066207d98ed58d82154d8d8282c6462300d50013d78601a301e50013d706012301e500a182a300d500828228ff4ce350e7080d54eb81456cfb6cf76cf36cef901ded55828203459c0183458c010346ac018346bc0122054d8d4206e206558e518d8345dc010346cc018346ec010347fc01a205d18dc2066207d98ed58d82154d8d2aeb03451c0183450c0103462c0183463c0122054d8d4206e20683455c01558e518d03464c01a20583466c0103477c01d18d82f4c2066207d98ed58d82154d8d2ae703459c0083458c000346ac008346bc0022054d8d4206e206558e8345dc008346cc0082f0518da205d58d0346ec008346fc0082ec82e84206e206558ed18d82154d8d2ae303451c0083450c0003462c0083463c0022054d8d4206e206558e518d83455c0003464c0083466c0003477c00a205d18dc2066207d98ed58d82154d8daafea81ac145130671198282a205d18dc2066207d98ed58d82154d8daaf403c5940183c5840103c6a40183c6b40122054d8d4206e2068282a205d18dc2066207d98ed58d82154d8d8282c2066207d98ed58d82154d8daaf003c5140183c5040103c6240183c6340122054d8d4206e206558e82821461186261166115b337d700b3b6e600b386d740828203c5950003c6850083c6a50003c7b5002205518dc2066207d98e828283460600034705002300d5002300e60005057d16fd1582821b552a0006053365aa009b55350086054d8d9b55550086054d8d9b55950086054d8d9b55150186054d8d1345f5ff93551500375655551b065655f18d79990d8db73533339b8535333376b50009816d8d3295935545002e95b7150f0f9385f5f06d8db70501019385151082821309812e9309012e93558501370bff00b3f5650113568500130cf00f620c33768601d18d13568502c1669b8b06f03376760193568503558ed18d3376650162069b5685018216558eb3767501a2166215558d518d4d8d08fb8282834525000306350083460500034515002301b400a301c4002300d400a300a400828203c5150103c6050183c6250103c735012205518dc206620782821309812e9309012e93558501b70aff00b3f5550113568500930bf00fe20b33767601d18d13568502c1661b8b06f03376660193568503558ed18d3376550162069b5685018216558eb3766501a2166215558d518d4d8d82822206558e4207e2075d8f598e02168282938516003a9593061500130710080d8f828283451500034605008346350003472500834765008344750003444500034555002303fb00a3039b0023028b00a302ab002301eb00a301db002300cb00a300bb00130580022304ab0042e0828213558a013375650193558a00b3f585014d8d93558a02b3f5750113568a03d18d4d8db3756a01e2051b568a010216d18d33767a012216621a3366ca00d18d4d8d2338a122828213d58a013375650193d58a00b3f585014d8d93d58a02b3f5750113d68a03d18d4d8db3f56a01e2051bd68a010216d18d33f67a012216e21a33e6ca00d18d4d8d2338a122828210046cee68f281456cfe214568f66cfa828213558a013375550193558a00b3f575014d8d93558a02b3f5650113568a03d18d4d8db3755a01e2051b568a010216d18d33766a012216621a3366ca00d18d4d8d828213d584013375550193d58400b3f575014d8d93d58402b3f5650113d68403d18d4d8db3f55401e2051bd684010216d18d33f664012216e214458ed18d4d8d8282aafe0d452ae302ef88182ae709452aeb82825a65ba651a66f6762ae52ee1b2fcb6f88282357106ed22e926e54ae1cefcd2f8d6f4daf0deece2e8e6e482826275c27522768276aaecaee8b2e4b6e0a80882f082f482f882fc1303010691433708ff001307f00f93188701c167828222054d8d4206e206558e518d8282080483308503007904750339050283398501033a0501833a8500033b0500fe7b5e7cbe7c1e7dfe6d130101248282130101dc0c0423bc150280f984f523b0250323bc350123b8450123b4550123b06501deffe2fbe6f7eaf3eeef82829181b307d5002380e7001387f6ff82820c6508614276e2762ee42ae032e836ec2af02ef402f802fc82e082e41303010391453010b708ff00416782822ae809452aec02f88c002ef02af40808b2858282e2704274a2740279e269426aa26a026b216182824e95937585ff61451404f07a330495403385850088e090ede87688e9e87288e5e86e88e1a80d301b8282ea604a64aa640a69e679467aa67a067be66b466ca66c82820365012f18046c731c05b0578366c12e02156cef8365c12d558df45b0216d18d6cef68f3b4d78282034604009376f60011826e9603460600ee9683c60600a38fc5fe2380d50089057d150504828290ede87688e9e87288e5e86e88e1828210046c7a0ced6c760ce96c720ce56c6e01440ce1828200046c780ced6c740ce96c700ce5706c814510e18282946118626116e115b337d700b3b6e600b386d7408282833685ff03c7160083c7060003c426008386360022075d8f4204e206c18ed98e82821c628062b3848740b3b7870085893384b440b3b5b400dd8d00e22106a1067d1782820507b306f8008506130510083307e540828298609c61ba9733b7e70093761400be9633b4f600598c94e0a104a1057d168282397106fc22f826f44af04eec52e8828246462300c50093568601a301d500935606012301d5002182a300c5008282ee704e74ae740e79ee694e6aae6a0e6bea7b4a7caa7c0a7dea6d11618282a6700674e6644669a669066ae27a427ba27b027ce26c426da26d65618282117186fda2f9a6f5caf1ceedd2e9d6e5dae15efd62f966f56af16eed82824265931554002e95ac1a13060002828211823305e8002300f5009307f7ff82822ae005452ae402f021452ae802ec828203b60c00b3055601b706a0000545828203b60c00b3056601b706a0000545828262654266a266026788ed90e994e598e18282797106f422f026ec4ae84ee452e02a841061130516002e8982820665a6654276e2762ae82eec42870cef08eb10e314e761618282a2700274e2644269a2694561828203c7060083c705002380e5002380f600fd1685057d1682822e95834515008346050001452305b100a304d100b285828283460600034705002300d5002300e6007d160505fd15828203c6050083c604002380c4002380d500fd1585047d15828213058008aaf605452318a116280913061002a28582824265e2650276a276aae8aeecb2f0b6f408188c0882822e9583451500034505002305b100a304a100054582824665e6650676a676aafe2ee332e736eb8808ac1a828204e423304401a2700274e2644269a269026a4561828203360c00b3055601b706a000054582825d7186e4a2e026fc4af84ef452f0828210619307f00713088100a9468282834505001307f007280029468282aae802eb02e702e382fe4803828283b50c00338565013706a000828283b50c00138505023706a00082826399d5002e87b2853a86170300006700c3140000170300006700a30bc1466360d608bb06a04013f87600b3030501ae87aa86637a750003c707002380e60085068507e3ea76feb382050133080641937888ff93f57200b3861301b9cd9395320013f3850313f782ff1063bb05b04013fe85039305870063ffd300986133566600b317c7015d8e23b0c300a103a1053a86e3e5d3feb38512011376780011a0aa86369663fac60003c705002380e60085068505e3eac6fe82809685e3fdd3fc906123b0c300a103a105e3ebd3fee1b7c146636ad6043b07a0401d8bb306e500aa876377d5002380b7008507e3edd7fe3308e64013f6f50f21479308000463781701b317e6005d8e0607e36c17ff137788ff369763f6e60090e2a106e3eee6fe1376780011a02a873a966377c7002300b7000507e36dc7fe828009ce8346050003c705007d1685050505e388e6fe3385e64082800145828017030000670063ec170300006700a3fd000000000a0a0a0a0a0a0a0a20000000000000002028627974657320808080808080808000010101010101010101010101010101bf5d3dcd92a3180273656c6563746f72ff00ff00ff00ff0008063080000000008207308000000000c406308000000000dc063080000000009a063080000000009e07308000000000b607308000000000ee063080000000009608308000000000ac0630800000000066083080000000009c093080000000000c0d308000000000c60a308000000000760c308000000000300a308000000000980e308000000000320f30800000000000010207030d081304190e1c0922142805111a260f2e1d300a1f2336153229393f060c12181b212710252d2f1e3531383e0b1720242c34373d162b333c2a3b3a696e646578206f7574206f6620626f756e64733a20746865206c656e20697320000000000000000000000000000000000000000000000000000000000000000075696e7432353663616e6e6f7420636f6e76657274206120736c696365206f66206c656e6774682020746f20466978656442797465733c3ec79f3080000000002100000000000000e89f3080000000000f00000000000000f79f3080000000000100000000000000a40530800000000030000000000000000800000000000000d4053080000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f736c6963652e72730048a03080000000007f00000000000000a10000001900000054797065436865636b4661696c65787065637465645f747970654f76657272756e526573657276654275666665724e6f74456d70747952657365724d69736d61746368526563757273696f6e4c696d697445786365656465640000000000000029207768656e20736c6963696e67206072616e676520656e6420696e6465782043617061636974794f766572666c6f77496e76616c6964456e756d56616c7565010000000000000000000000000000003031323334353637383961626364656666726f6d6b696e64203c3d206e616d65202020206461746173697a6576616c75656d6178496e76616c69644c6f676c6f67556e6b6e6f776e53656c6563746f7246726f6d4865784572726f724f746865727372632f6c69622e72730000000000f1a13080000000000a000000000000000e0000000a000000746f000000000000a0a1308000000000040000000000000018a23080000000000200000000000000616d6f756e740000f1a13080000000000a00000000000000170000000a0000006f776e65727370656e6465720000000060a2308000000000050000000000000065a230800000000007000000000000004f776e6572736869705472616e7366657272656400000000f1a13080000000000a00000000000000200000000a00000045524332304572726f723a3a4f6e6c794f776e657245524332304572726f723a3a496e73756666696369656e7442616c616e63652875696e743235362945524332304572726f723a3a496e73756666696369656e74416c6c6f77616e63652875696e743235362945524332304572726f723a3a53656c66417070726f76616c45524332304572726f723a3a53656c665472616e7366657245524332304572726f723a3a5a65726f416d6f756e7445524332304572726f723a3a5a65726f416464726573730000000000000000000000000000000000000000f1a13080000000000a000000000000004100000001000000616269206465636f6465206661696c65644e6f6e2d70617961626c652066756e6374696f6e000000c1a33080000000001400000000000000756e6b6e6f776e206d6574686f640000e8a33080000000000e00000000000000462e30800000000018000000000000000800000000000000482e308000000000342f308000000000302e3080000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f737472696e672e727338a430800000000080000000000000008d0500001b0000006361706163697479206f766572666c6f7700000000000000d0a430800000000011000000000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300000000000000f8a430800000000081000000000000002802000011000000496e76616c696448657843686172616374657263696e6465784f64644c656e677468496e76616c6964537472696e674c656e6774682f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f636f6e73742d6865782d312e31342e302f7372632f6c69622e72730000cda5308000000000610000000000000032020000130000004c6f6744617461746f70696373307830303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e7273001fa73080000000008000000000000000a00a0000260000001fa73080000000008000000000000000a90a00001a00000028292e2e2f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e72730000d4a73080000000008a000000000000001a00000036000000d4a73080000000008a000000000000000a0000002b000000000601010301040205070702080809020a050b020e04100111021205131c140115021702190d1c051d081f0124016a046b02af03b102bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa04fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64658a8c8d8fb6c1c3c4c6cbd65cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f92116f5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6fddde935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b4e03340c813709160a08183b45390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a0626031d080280d0521003372c082a161a261c1417094e042409440d19070a0648082709750b423e2a063b050a06510601051003050b5908021d621e48080a80a65e22450b0a060d133a060a06141c2c041780b93c64530c48090a46451b4808530d49070a80b6220e0a06460a1d03474937030e080a0639070a813619073b031d55010f320d839b66750b80c48a4c630d843010160a8f9b0582479ab93a86c68239072a045c06260a460a28051381b03a80c65b654b0439071140050b020e97f80884d6290aa2e781330f011d060e0408818c89046b050d030907108f6080fa0681b44c4709743c80f60a73087015467a140c140c570919808781470385420f1584501f060680d52b053e2101702d031a040281401f113a050181d02a80d62b040181e080f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d80411030d0377045f060c04010f0c0438080a0628082c04023e81540c1d030a0538071c06090780fa840600010305050606020706080709110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a071b011c021f1620032b032d0b2e01300431023201a704a902aa04ab08fa02fb05fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f7d7eaeaf4dbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596262e2fa7afb7bfc7cfd7df9a00409798308f1fcecfd2d4ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab051f08811c03190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b0757070206170c500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a062f3180f4083c030f033e0538082b0582ff1118082f112d03210f210f808c04829a160b158894052f053b07020e180980be22740c80d61a81100580e109f29e033709815c1480b80880dd153b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f0d2f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e7273000039ae3080000000008d000000000000004d0000002800000039ae3080000000008d0000000000000059000000160000000003000083042000910560005d13a0001217201f0c20601fef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fe20369eff6036fd01e136010a2137240de137ab0e61392f18e139301ce14af31ee14e4034a1521e61e153f06a61544f6fe1549dbc615500cf615665d1a15600da215700e0a158aee2215aece4e15bd0e8615c2000ee5cf0017f5d00700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b033b092a180120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c01090128010301370101030503010407020b021d013a01020201010303010407020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b0749021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300041c031d021e02400201070801020b09012d030101750222017603040209010603db0202013a010107010101010208060a0201301f3104300a040326090c02200402063801010203010105380802029803010d0107040106010302c6400001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b01012c03300102040202020124014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a5020004410500024f04460b31047b01360f290102020a033104020207013d03240501083e010c0234090101080402015f030204060102019d01030815023902010101010c0109010e07030543010206010102010103040301010e025508020301011701510102060101020101020102eb010204060201021b025508020101026a0101010208650101010204010500090102f5010a040401900402020401200a280602040801090602032e0d010200070106010152160207010201027a06030101020107010148020301010100020b023405050317010001060f000c030300053b0700013f0451010b020002002e021700050306080802071e0494030037043208010e011605010f000701110207010201056401a00700013d040004fe0200076d07006080f000202831203c3c200000010000000000000000000000000000006fb23080000000000700000000000000a8b2308000000000010000000000000029207b202c20207b0a2c0a7d207d28280a0a5b5d000000000000000000000000180000000000000008000000000000002e4e308000000000ee4f3080000000008e5130800000000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565206275742074686520696e64657820697320000000809f30800000000020000000000000001bb330800000000012000000000000003a200000000000000100000000000000000000000000000050b330800000000002000000000000005b2e2e2e5d626567696e203c3d20656e64202860000000007db33080000000000e00000000000000a8a1308000000000040000000000000040a130800000000010000000000000008bb330800000000001000000000000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e736964652029206f66206000d0b33080000000000b00000000000000dbb33080000000002600000000000000789e308000000000080000000000000001b430800000000006000000000000008bb33080000000000100000000000000206973206f7574206f6620626f756e6473206f6620600000d0b33080000000000b0000000000000058b430800000000016000000000000008bb330800000000001000000000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f6d6f642e7273a0b43080000000008000000000000000f40000002c00000072616e676520737461727420696e64657820206f7574206f662072616e676520666f7220736c696365206f66206c656e677468200000000038b530800000000012000000000000004ab5308000000000220000000000000050a130800000000010000000000000004ab53080000000002200000000000000736c69636520696e64657820737461727473206174202062757420656e6473206174200000000000b0b53080000000001600000000000000c6b53080000000000d00000000000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64652f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f6572726f722e72730000000020b6308000000000440000000000000013000000050000002f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f6c6f672e727300000000000080b63080000000004200000000000000150000001300000080b63080000000004200000000000000150000002700000050616e69632068616e646c6572206861732070616e69636b6564212f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f6c69622e727300000013b730800000000042000000000000003a0000000500000013b730800000000042000000000000006f0000001100000013b73080000000004200000000000000700000001200000013b73080000000004200000000000000710000001300000064656661756c742068616e646c657200b8b73080000000000f0000000000000013b730800000000042000000000000008d00000005000000657863657074696f6e206e68616e646c6572000000000000f0b7308000000000120000000000000013b7308000000000420000000000000093000000050000006d656d6f727920616c6c6f636174696f6e206f6620206279746573207769746820616c69676e6d656e7420206661696c656400000000000030b8308000000000150000000000000045b830800000000016000000000000005bb830800000000007000000000000002f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f616c6c6f632e72730000000098b830800000000044000000000000004300000005000000b856308000000000b856308000000000b856308000000000b856308000000000b856308000000000b856308000000000b856308000000000b856308000000000b856308000000000b8563080000000000000000000000000b856308000000000b856308000000000b8563080000000000000000000000000b85630800000000000000000000000009456308000000000000000000000000094563080000000000000000000000000945630800000000000000000000000009456308000000000000000000000000094563080000000000000000000000000945630800000000010c03080000000006f000000000000006f0000001200000010c03080000000006f000000000000005b0000001c0000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f697465722f7472616974732f6974657261746f722e727300000008ba3080000000008d00000000000000b3070000090000004c61796f7574616c69676e547279526573657276654572726f72416c6c6f634572726f726c61796f75746e6f6e5f657868617573746976652f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f74797065732f6d617070696e672e727361646472657373000000000028616464726573732c616464726573732c75696e7432353629000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000190000000000000028616464726573732c61646472657373290000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000028616464726573732c75696e743235362900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000000000e8ba3080000000004c0000000000000024000000200000002f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f74797065732f736c6f742e72730000000000000070be3080000000004900000000000000230000000f00000070be3080000000004900000000000000230000001f0000002f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f616c6c6f792d736f6c2d74797065732d302e382e32352f7372632f74797065732f646174615f747970652e72730000000000f0be30800000000073000000000000003b040000010000002f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f616c6c6f792d7072696d6974697665732d302e382e32352f7372632f626974732f616464726573732e72730000000000000080bf308000000000710000000000000097000000140000002f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f616c6c6f792d736f6c2d74797065732d302e382e32352f7372632f6162692f656e636f6465722e72730010c03080000000006f00000000000000270000001200000010c03080000000006f000000000000002a0000001c0000002f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f74696e792d6b656363616b2d322e302e322f7372632f6c69622e7273000000000000b0c030800000000062000000000000003801000016000000b0c030800000000062000000000000003801000020000000b0c030800000000062000000000000004d0100002f000000b0c030800000000062000000000000004d01000037000000617373657274696f6e206661696c65643a206473742e6c656e2829203c3d207372632e6c656e2829b0c03080000000006200000000000000520100000d000000b0c03080000000006200000000000000ab01000021000000b0c03080000000006200000000000000a301000025000000b0c03080000000006200000000000000c801000027000000b0c03080000000006200000000000000c00100002b000000010000000000000082800000000000008a8000000000008000800080000000808b800000000000000100008000000000818000800000008009800000000000808a00000000000000880000000000000009800080000000000a000080000000008b800080000000008b0000000000008089800000000000800380000000000080028000000000008080000000000000800a800000000000000a00008000000080818000800000008080800000000000800100008000000000088000800000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c696e6b65723a204c4c442031392e312e3620282f636865636b6f75742f7372632f6c6c766d2d70726f6a6563742f6c6c766d2035393531326230303237333832393832336461373430353064333733623864343664626361353538290072757374632076657273696f6e20312e38362e302d6e696768746c79202832343364326361346420323032352d30312d30362900004133000000726973637600012900000004100572763634693270315f6d3270305f613270315f633270305f7a6d6d756c3170300000000000000000000000000000000000000000000000000000010000000400f1ff000000000000000000000000000000002000000000000200000030800000000000000000000000002300000000000200100030800000000000000000000000002600000000000200180030800000000000000000000000003100000000000200180030800000000000000000000000003600000000000200180030800000000000000000000000003900000000000200900030800000000000000000000000004500000000000200b80030800000000000000000000000005100000000000200d000308000000000000000000000000056000000000002004801308000000000000000000000000059000000000002003a0230800000000000000000000000005c000000020002003e023080000000009c00000000000000a2000000000002003e023080000000000000000000000000a50000000000020048023080000000000000000000000000b100000001000500d8c23080000000000100000000000000d20000000000020050023080000000000000000000000000de00000001000500e0c23080000000000800a000000000001601000000000200b8023080000000000000000000000000220100000100030080c030800000000018000000000000004c01000000000200c4023080000000000000000000000000580100000100030098c03080000000001800000000000000820100000200020084313080000000001400000000000000b601000002000200da0230800000000034000000000000000002000000000200da02308000000000000000000000000003020000020002000e033080000000008a000000000000004d020000000002000e03308000000000000000000000000050020000020002000a963080000000001a000000000000006502000002000200ee943080000000001c000000000000007a020000020002007c9630800000000010000000000000008f02000002000200ac923080000000003e00000000000000a3020000000002005e033080000000000000000000000000af02000001000300f8bf3080000000001800000000000000d9020000020002009803308000000000100100000000000023030000000002009803308000000000000000000000000026030000020002000a9530800000000018000000000000003b0300000000020068043080000000000000000000000000470300000100030068bf30800000000018000000000000007103000002000200a804308000000000fc00000000000000cd03000000000200a8043080000000000000000000000000d003000000000200d8043080000000000000000000000000dc0300000100030057a6308000000000c8000000000000000604000002000200e29b30800000000018000000000000001b04000002000200c69c3080000000000e000000000000003004000002000200e298308000000000100000000000000045040000020002008c9630800000000012000000000000005a0400000000020018053080000000000000000000000000660400000100030055a630800000000002000000000000009004000000000200500530800000000000000000000000009d0400000000020078053080000000000000000000000000aa04000002000200569c3080000000001600000000000000bf04000002000200cc39308000000000a201000000000000f804000002000200a40530800000000030000000000000004e05000000000200a40530800000000000000000000000005105000002000200d4053080000000009603000000000000b205000000000200d4053080000000000000000000000000b505000000000200f8053080000000000000000000000000c205000000000300b09e3080000000000000000000000000cb0500000000020008063080000000000000000000000000d00500000000020014063080000000000000000000000000dd05000001000300e0a03080000000000d0000000000000008060000000002002c0630800000000000000000000000001506000001000300eda03080000000000d000000000000004006000000000200340630800000000000000000000000004d060000020002006e383080000000001400000000000000ab060000020002004a503080000000004401000000000000e8060000000002004a063080000000000000000000000000f506000000000200520630800000000000000000000000000207000002000200d43230800000000014000000000000004a07000000000200900630800000000000000000000000005707000001000300b4b2308000000000020000000000000082070000000002009a0630800000000000000000000000008707000000000200a0063080000000000000000000000000940700000100030016a13080000000000d00000000000000bf07000000000200ac063080000000000000000000000000c407000000000200b0063080000000000000000000000000d107000001000300e0a13080000000000c00000000000000fc07000000000200b80630800000000000000000000000000908000002000200e431308000000000f0000000000000005108000000000200c40630800000000000000000000000005608000000000200c8063080000000000000000000000000630800000100030001a130800000000007000000000000008e08000000000200d00630800000000000000000000000009b08000002000200b0713080000000009000000000000000e308000000000200dc063080000000000000000000000000e808000000000200e2063080000000000000000000000000f50800000100030008a13080000000000e000000000000002009000000000200ee0630800000000000000000000000002509000000000200fc0630800000000000000000000000003209000001000300c4a13080000000000a000000000000005d09000000000200140730800000000000000000000000006a090000000002001c0730800000000000000000000000007709000002000200b6313080000000001400000000000000bf0900000000020032073080000000000000000000000000cc09000001000300cea13080000000000300000000000000f7090000000002003a073080000000000000000000000000040a0000020002009635308000000000b8000000000000004c0a00000000020078073080000000000000000000000000590a000000000200820730800000000000000000000000005e0a000000000200880730800000000000000000000000006b0a000001000300faa03080000000000700000000000000960a0000000002009e0730800000000000000000000000009b0a000000000200a2073080000000000000000000000000a80a00000100030023a13080000000001600000000000000d30a000000000200aa073080000000000000000000000000e00a000002000200e832308000000000fe00000000000000280b000000000200b60730800000000000000000000000002d0b000000000200c80730800000000000000000000000003a0b000000000200e0073080000000000000000000000000470b000000000200e8073080000000000000000000000000540b000000000200fe073080000000000000000000000000610b000001000300bca130800000000005000000000000008c0b00000000020006083080000000000000000000000000990b0000000002001c083080000000000000000000000000a60b000001000300c1a13080000000000300000000000000d10b00000000020024083080000000000000000000000000de0b0000000002005c083080000000000000000000000000eb0b00000000020066083080000000000000000000000000f00b0000000002006a083080000000000000000000000000fd0b000001000300eca13080000000000500000000000000280c00000000020072083080000000000000000000000000350c000002000200fe3630800000000014000000000000007d0c000002000200e83e308000000000d600000000000000c30c00000000020096083080000000000000000000000000c80c000000000200a4083080000000000000000000000000d50c000001000300d1a13080000000000f00000000000000000d000000000200bc0830800000000000000000000000000d0d000000000200c40830800000000000000000000000001a0d000000000200da083080000000000000000000000000270d000000000200e2083080000000000000000000000000340d0000020002000271308000000000ae000000000000007c0d0000000002001a093080000000000000000000000000890d0000000002002c093080000000000000000000000000960d000001000300b3b23080000000000100000000000000c10d0000000002003c093080000000000000000000000000ce0d0000000002004c093080000000000000000000000000db0d0000000002005c093080000000000000000000000000e80d000000000300b09e3080000000000000000000000000eb0d0000020002006a09308000000000a607000000000000580e0000000002006a0930800000000000000000000000005b0e0000000002008c093080000000000000000000000000680e000000000300089f3080000000000000000000000000710e0000000002009c093080000000000000000000000000760e000000000200b8093080000000000000000000000000830e000001000300c0a23080000000001500000000000000ae0e000002000200488d3080000000008001000000000000120f000002000200c88e3080000000000002000000000000780f000000000200d8093080000000000000000000000000850f000000000200e0093080000000000000000000000000920f0000020002002e933080000000001e00000000000000a60f000000000200260a3080000000000000000000000000b30f00000100030080a53080000000001800000000000000dd0f000000000200300a3080000000000000000000000000e20f0000000002004e0a3080000000000000000000000000ef0f0000010003003fa330800000000018000000000000001a100000000002006e0a30800000000000000000000000002710000000000200760a30800000000000000000000000003410000000000200bc0a30800000000000000000000000004110000000000200c60a30800000000000000000000000004610000000000200e40a30800000000000000000000000005310000001000300fda23080000000002a000000000000007e10000000000200060b30800000000000000000000000008b100000000002000e0b30800000000000000000000000009810000002000200ae9a3080000000001e00000000000000ad10000002000200e8953080000000002200000000000000c21000000200020078983080000000000e00000000000000d71000000200020070943080000000002c00000000000000ec10000002000200ae943080000000002a000000000000000111000002000200ea9230800000000044000000000000001511000000000200080c30800000000000000000000000002211000002000200409c30800000000016000000000000003711000000000200760c30800000000000000000000000003c11000000000200940c3080000000000000000000000000491100000100030027a330800000000018000000000000007411000000000200b40c30800000000000000000000000008111000000000200bc0c30800000000000000000000000008e11000000000200020d30800000000000000000000000009b110000000002000c0d3080000000000000000000000000a0110000000002002a0d3080000000000000000000000000ad11000001000300d5a23080000000002800000000000000d8110000000002004c0d3080000000000000000000000000e511000000000200540d3080000000000000000000000000f2110000000002004e0e3080000000000000000000000000ff11000000000200980e30800000000000000000000000000412000000000200b80e3080000000000000000000000000111200000100030057a330800000000016000000000000003c12000000000200dc0e30800000000000000000000000004912000000000200e40e30800000000000000000000000005612000000000200280f30800000000000000000000000006312000000000200320f30800000000000000000000000006812000000000200520f308000000000000000000000000075120000010003006da33080000000001700000000000000a012000000000200760f3080000000000000000000000000ad120000000002007e0f3080000000000000000000000000ba1200000000020070103080000000000000000000000000c712000001000300c8a03080000000001800000000000000f2120000000002007a103080000000000000000000000000ff12000000000200841030800000000000000000000000000c130000000002008e1030800000000000000000000000001913000000000200981030800000000000000000000000002613000000000200a21030800000000000000000000000003313000000000200ac1030800000000000000000000000004013000000000200c01030800000000000000000000000004d13000000000200ca1030800000000000000000000000005a13000000000200d41030800000000000000000000000006713000000000200f21030800000000000000000000000007413000000000200fe1030800000000000000000000000008113000000000300089f308000000000000000000000000084130000020002001011308000000000e800000000000000dc1300000000020010113080000000000000000000000000df13000002000200f8113080000000009c000000000000003f14000000000200f81130800000000000000000000000004214000002000200ca9b30800000000018000000000000005714000002000200f2983080000000002c000000000000006c14000002000200a29b3080000000001a00000000000000811400000200020094123080000000004c00000000000000df1400000000020094123080000000000000000000000000e2140000020002006a7630800000000012020000000000003d15000000000200aa1230800000000000000000000000004a15000002000200769b30800000000012000000000000005f150000020002007c783080000000009c00000000000000fe15000002000200e0123080000000007a000000000000005a16000000000200e01230800000000000000000000000005d16000002000200a89c30800000000010000000000000007216000000000200fa1230800000000000000000000000007f160000020002005a13308000000000ce1a00000000000004170000000002005a13308000000000000000000000000007170000000002009a133080000000000000000000000000141700000100030098a330800000000018000000000000003f17000002000200ec5130800000000032000000000000007a17000000000200b21330800000000000000000000000008717000000000200d41330800000000000000000000000009517000000000200e8133080000000000000000000000000a2170000000002004a143080000000000000000000000000af170000000002006a143080000000000000000000000000bd170000020002008a7e308000000000f20300000000000007180000020002008e953080000000005a000000000000001c18000000000200101530800000000000000000000000002a1800000100030070b730800000000018000000000000005518000002000200309730800000000046000000000000006a1800000000020032153080000000000000000000000000781800000100030088b73080000000001800000000000000a318000002000200ea963080000000004600000000000000b81800000000020052153080000000000000000000000000c618000001000300a0b73080000000001800000000000000f118000002000200129c30800000000018000000000000000619000002000200889930800000000028000000000000001b19000000000200cc1530800000000000000000000000002919000000000200ec153080000000000000000000000000371900000100030084a330800000000014000000000000006219000002000200d699308000000000100000000000000077190000020002007c823080000000009403000000000000bd19000002000200d8943080000000001600000000000000d21900000000020036173080000000000000000000000000e01900000100030040bb30800000000008010000000000000a1a0000020002001086308000000000f802000000000000541a0000020002004c933080000000001a00000000000000681a000000000200cc173080000000000000000000000000761a000000000200ee173080000000000000000000000000841a0000000002000e183080000000000000000000000000921a000002000200027d3080000000008801000000000000251b000002000200b0603080000000004407000000000000591b0000020002004e573080000000005e00000000000000a31b00000200020024963080000000005800000000000000b81b0000000002002c1a3080000000000000000000000000c61b000002000200ca973080000000004000000000000000db1b000000000200501a3080000000000000000000000000e91b00000200020088973080000000004200000000000000fe1b000000000200741a30800000000000000000000000000c1c000000000200a01a30800000000000000000000000001a1c00000200020018763080000000005200000000000000a71c00000200020018793080000000000800000000000000471d000002000200f4673080000000000e090000000000007b1d00000200020070563080000000002400000000000000b41d0000020002001e523080000000006000000000000000e71d000000000200021c3080000000000000000000000000f51d000001000300f8a33080000000001000000000000000201e0000000002001c1c30800000000000000000000000002e1e000002000200d65130800000000016000000000000005f1e0000020002002079308000000000be00000000000000a51e0000000002001a1e3080000000000000000000000000b31e00000100030030a63080000000001800000000000000dd1e000000000200bc1f3080000000000000000000000000eb1e0000000002004c203080000000000000000000000000f91e0000000002006e203080000000000000000000000000071f00000000020090203080000000000000000000000000151f000000000200bc203080000000000000000000000000231f00000000020008213080000000000000000000000000311f000000000200922130800000000000000000000000003f1f000000000200d02130800000000000000000000000004d1f000002000200ae553080000000002400000000000000911f000000000200582230800000000000000000000000009f1f00000100030048bc3080000000000801000000000000c91f000002000200129a3080000000001600000000000000de1f000002000200e6993080000000001600000000000000f31f0000020002007e9a30800000000020000000000000000820000002000200de7930800000000016010000000000009520000002000200e47430800000000002010000000000000721000000000200802530800000000000000000000000001521000002000200fc9930800000000016000000000000002a210000020002004a9a30800000000022000000000000003f21000002000200f47a3080000000000e02000000000000cd21000002000200ac5730800000000004090000000000000122000000000200a02630800000000000000000000000000f22000000000200c02630800000000000000000000000001d22000001000300d8a330800000000010000000000000004822000002000200769730800000000012000000000000005d22000000000200d02630800000000000000000000000006b22000000000200dc2630800000000000000000000000007922000000000200ec2630800000000000000000000000008722000000000200f8263080000000000000000000000000952200000000020008273080000000000000000000000000a32200000000020014273080000000000000000000000000b12200000000020024273080000000000000000000000000bf2200000000020030273080000000000000000000000000cd2200000000020040273080000000000000000000000000db220000000002004c273080000000000000000000000000e9220000000002005c273080000000000000000000000000f722000000000200a22730800000000000000000000000000523000000000200b22730800000000000000000000000001323000000000200e02730800000000000000000000000002123000000000200f62730800000000000000000000000002f23000000000200402a30800000000000000000000000003d23000000000200982a30800000000000000000000000004b23000000000200f02a308000000000000000000000000059230000000002001c2b30800000000000000000000000006723000000000200382b3080000000000000000000000000752300000200020046993080000000002a000000000000008a230000000002000c2e308000000000000000000000000098230000000002001c2e3080000000000000000000000000a623000002000200282e3080000000000800000000000000c123000000000200282e3080000000000000000000000000c623000000000200282e3080000000000000000000000000c923000002000200dc563080000000000e00000000000000d223000002000200302e30800000000016000000000000000324000000000200302e30800000000000000000000000000624000000000200362e3080000000000000000000000000142400000100030008a430800000000030000000000000003e2400000200020082383080000000004a010000000000006524000002000200462e3080000000000200000000000000b224000000000200462e3080000000000000000000000000b524000002000200482e308000000000ec000000000000001325000000000200482e308000000000000000000000000016250000020002009e9a30800000000010000000000000002b25000002000200329930800000000014000000000000004025000000000200b02e30800000000000000000000000004e25000000000200e42e30800000000000000000000000005c25000000000200ec2e30800000000000000000000000006a25000000000200222f30800000000000000000000000007825000002000200342f3080000000009c01000000000000d825000000000200342f3080000000000000000000000000db25000002000200d030308000000000b4000000000000001f26000000000200503030800000000000000000000000002d26000000000200823030800000000000000000000000003b260000000002008a3030800000000000000000000000004926000000000200be3030800000000000000000000000005726000000000200d03030800000000000000000000000005a26000000000200fc3030800000000000000000000000006826000000000200303130800000000000000000000000007626000000000200383130800000000000000000000000008426000000000200723130800000000000000000000000009226000001000300b8a43080000000001800000000000000bc2600000000020084313080000000000000000000000000bf2600000200020098313080000000001e00000000000000f826000002000200ca31308000000000080000000000000030270000000002009831308000000000000000000000000033270000000002009c3130800000000000000000000000004127000001000300e8a430800000000010000000000000006b27000002000200469b30800000000010000000000000008027000000000200b63130800000000000000000000000008327000002000200be3f3080000000006602000000000000c927000000000200ca313080000000000000000000000000cc27000002000200d23130800000000012000000000000000d28000000000200d23130800000000000000000000000001028000000000200e43130800000000000000000000000001328000000000200003230800000000000000000000000002128000001000300b1a530800000000009000000000000004c280000000002001a3230800000000000000000000000005a2800000100030098a530800000000013000000000000008428000000000200303230800000000000000000000000009228000001000300aba53080000000000100000000000000bd2800000000020038323080000000000000000000000000cb28000002000200524630800000000076000000000000001229000000000200503230800000000000000000000000002029000001000300aca530800000000005000000000000004b29000000000200583230800000000000000000000000005929000002000200c846308000000000a400000000000000a1290000000002008c323080000000000000000000000000af290000000002009e323080000000000000000000000000bd29000001000300baa53080000000001300000000000000e829000000000200b8323080000000000000000000000000f629000000000200d4323080000000000000000000000000f929000000000200e8323080000000000000000000000000fc290000000002001a3330800000000000000000000000000a2a0000000002005a333080000000000000000000000000182a00000000020092333080000000000000000000000000262a000000000200ba333080000000000000000000000000342a000002000200e633308000000000b001000000000000932a000000000200e6333080000000000000000000000000962a00000000020016343080000000000000000000000000a42a000001000300bab23080000000000100000000000000cf2a00000000020036343080000000000000000000000000dd2a000001000300acb23080000000000200000000000000072b00000000020046343080000000000000000000000000152b000002000200b09930800000000026000000000000002a2b000000000200cc343080000000000000000000000000382b000001000300b9b23080000000000100000000000000632b0000020002002e4e308000000000c001000000000000cb2b0000000002004c353080000000000000000000000000d92b000001000300b1b23080000000000200000000000000042c0000000002006a353080000000000000000000000000122c000001000300bbb230800000000001000000000000003d2c00000000020096353080000000000000000000000000402c000000000200b03530800000000000000000000000004e2c00000100030048a63080000000000700000000000000782c000000000200c6353080000000000000000000000000862c0000010003004fa63080000000000600000000000000b02c000000000200ce353080000000000000000000000000be2c000000000200e4353080000000000000000000000000cc2c000000000200ec353080000000000000000000000000da2c0000020002004e36308000000000b000000000000000222d00000000020024363080000000000000000000000000302d000000000200363630800000000000000000000000003e2d0000000002004e363080000000000000000000000000412d000000000200623630800000000000000000000000004f2d0000000002006a3630800000000000000000000000005d2d000000000200a83630800000000000000000000000006b2d000002000200bc3b30800000000024030000000000009a2d000000000200ea363080000000000000000000000000a82d000000000200fe363080000000000000000000000000ab2d0000020002001237308000000000a400000000000000ef2d00000000020012373080000000000000000000000000f22d000002000200889b3080000000001a00000000000000072e00000000020040373080000000000000000000000000152e00000000020074373080000000000000000000000000232e0000000002007c373080000000000000000000000000312e000002000200829c3080000000001600000000000000462e000002000200b637308000000000b8000000000000008a2e000000000200b63730800000000000000000000000008d2e000000000200e83730800000000000000000000000009b2e00000000020024383080000000000000000000000000a92e0000000002002c383080000000000000000000000000b72e0000000002006e383080000000000000000000000000ba2e00000000020082383080000000000000000000000000bd2e0000020002002e983080000000001a00000000000000d22e00000200020070993080000000001800000000000000e72e000000000200cc393080000000000000000000000000ea2e0000020002006e3b3080000000004e00000000000000312f000002000200ea9a3080000000001e00000000000000462f0000000002006e3b3080000000000000000000000000492f000002000200bc9b3080000000000e000000000000005e2f000000000300909e3080000000000000000000000000612f000000000200bc3b3080000000000000000000000000642f000000000200563d3080000000000000000000000000722f0000000002005e3d3080000000000000000000000000802f000002000200e03e3080000000000800000000000000c82f000000000200e03e3080000000000000000000000000cb2f000000000200e83e3080000000000000000000000000ce2f000000000200303f3080000000000000000000000000dc2f000001000300b6b2308000000000010000000000000007300000000002004c3f30800000000000000000000000001530000001000300b7b230800000000002000000000000004030000000000200803f30800000000000000000000000004e30000001000300c0b230800000000030000000000000007930000000000200983f30800000000000000000000000008730000000000200ae3f30800000000000000000000000009530000001000300a8b23080000000000100000000000000bf30000000000200be3f3080000000000000000000000000c23000000200020024423080000000002e040000000000001631000000000200ca4130800000000000000000000000002431000001000300b8a730800000000018000000000000004f310000000002000c4230800000000000000000000000005d31000001000300a0a7308000000000180000000000000088310000020002002c533080000000000800000000000000bb3100000000020024423080000000000000000000000000be31000000000200a2423080000000000000000000000000cc31000001000300f8ae3080000000008800000000000000233200000000020038433080000000000000000000000000313200000100030080af308000000000ef020000000000007d3200000200020022953080000000006c000000000000009232000000000200b2433080000000000000000000000000a03200000000020038443080000000000000000000000000ae320000010003009eab3080000000005000000000000000d93200000000020040443080000000000000000000000000e732000001000300eeab3080000000002201000000000000123300000000020048443080000000000000000000000000203300000100030010ad30800000000029010000000000004b330000000002006e443080000000000000000000000000593300000000020032453080000000000000000000000000673300000100030090a8308000000000580000000000000092330000000002003a453080000000000000000000000000a033000001000300e8a8308000000000d000000000000000cb3300000000020042453080000000000000000000000000d933000001000300b8a9308000000000e6010000000000000434000002000200124a308000000000c80000000000000039340000000002002a4630800000000000000000000000004734000001000300e0ae308000000000180000000000000072340000000002003e4630800000000000000000000000008034000001000300c8ae3080000000001800000000000000ab3400000000020052463080000000000000000000000000ae34000000000200c8463080000000000000000000000000b13400000200020006493080000000000c010000000000001635000002000200b89c3080000000000e000000000000002b35000002000200369b308000000000100000000000000040350000020002006c9a308000000000120000000000000055350000000002001847308000000000000000000000000063350000000002005047308000000000000000000000000071350000020002006c473080000000001600000000000000b9350000000002006c473080000000000000000000000000c7350000000002006c473080000000000000000000000000ca35000001000300d0a73080000000000200000000000000f535000002000200824730800000000010000000000000003f3600000000020082473080000000000000000000000000423600000200020092473080000000007401000000000000a73600000000020092473080000000000000000000000000aa36000000000200ec473080000000000000000000000000b83600000000020026483080000000000000000000000000c63600000000020046483080000000000000000000000000d436000001000300d2a73080000000000200000000000000fe36000000000200ae4830800000000000000000000000000c37000000000200e84830800000000000000000000000001a37000000000200064930800000000000000000000000001d370000000002001a4930800000000000000000000000002b37000000000200124a30800000000000000000000000002e37000000000200a24a30800000000000000000000000003c3700000100030078a830800000000018000000000000006737000002000200b8523080000000000800000000000000aa37000000000200b64a3080000000000000000000000000b837000002000200f2523080000000000800000000000000f937000000000200ca4a3080000000000000000000000000073800000100030060a830800000000018000000000000003238000002000200a45130800000000016000000000000006538000002000200da4a308000000000ac01000000000000cc38000000000200da4a3080000000000000000000000000cf38000000000200fe4a3080000000000000000000000000dd38000000000200fa4b3080000000000000000000000000eb38000000000200404c3080000000000000000000000000f938000002000200864c308000000000a8010000000000005639000000000200864c30800000000000000000000000005939000000000200aa4c308000000000000000000000000067390000000002005a4d308000000000000000000000000075390000000002009c4d308000000000000000000000000083390000000002002e4e30800000000000000000000000008639000000000200544e308000000000000000000000000094390000000002005c4e3080000000000000000000000000a239000000000200784e3080000000000000000000000000b039000000000200f64e3080000000000000000000000000be39000002000200ee4f3080000000005c00000000000000283a000000000200ee4f30800000000000000000000000002b3a00000000020010503080000000000000000000000000393a0000000002004a5030800000000000000000000000003c3a000000000200a45030800000000000000000000000004a3a000001000300a9b23080000000000300000000000000743a000000000200b8503080000000000000000000000000823a000001000300aeb23080000000000300000000000000ac3a000000000200f2503080000000000000000000000000ba3a0000000002000c513080000000000000000000000000c83a00000100030050b33080000000000200000000000000f33a00000000020030513080000000000000000000000000013b0000000002003e5130800000000000000000000000000f3b000000000200725130800000000000000000000000001d3b0000020002008e5130800000000016000000000000004e3b0000000002008e513080000000000000000000000000513b000000000200945130800000000000000000000000005f3b000000000200a4513080000000000000000000000000623b000000000200a6513080000000000000000000000000703b000001000300f0b23080000000002b000000000000009a3b000002000200ba513080000000001c00000000000000c73b000000000200ba513080000000000000000000000000ca3b000000000200d6513080000000000000000000000000cd3b000002000200d2553080000000006a00000000000000df3b000000000200ec513080000000000000000000000000e23b000000000200f6513080000000000000000000000000f03b00000000020006523080000000000000000000000000fe3b00000100030030b33080000000002000000000000000293c0000020002001e9930800000000014000000000000003e3c0000000002001e523080000000000000000000000000413c000000000200205230800000000000000000000000004f3c000001000300b0a330800000000011000000000000007a3c00000000020030523080000000000000000000000000883c00000100030028a03080000000002000000000000000b33c0000000002003e523080000000000000000000000000c13c0000000002004c523080000000000000000000000000cf3c00000000020056523080000000000000000000000000dd3c00000100030058b33080000000002000000000000000083d0000000002006c523080000000000000000000000000163d0000020002007e5230800000000008000000000000005b3d0000000002007e5230800000000000000000000000005e3d00000200020086523080000000003200000000000000b43d00000000020086523080000000000000000000000000b73d00000000020090523080000000000000000000000000c53d000000000200a0523080000000000000000000000000d33d00000100030070b53080000000002000000000000000fe3d000000000200b8523080000000000000000000000000013e000002000200c0523080000000003200000000000000553e000000000200c0523080000000000000000000000000583e000000000200ca523080000000000000000000000000663e000000000200da523080000000000000000000000000743e00000100030090b530800000000020000000000000009f3e000000000200f2523080000000000000000000000000a23e000002000200fa523080000000003200000000000000f43e000000000200fa523080000000000000000000000000f73e00000000020004533080000000000000000000000000053f00000000020014533080000000000000000000000000133f000001000300d8b530800000000020000000000000003e3f0000000002002c533080000000000000000000000000413f00000200020034533080000000007a02000000000000773f000000000200345330800000000000000000000000007a3f0000000002008c533080000000000000000000000000883f00000100030078b33080000000000500000000000000b33f000000000200ae533080000000000000000000000000c13f000000000200c2533080000000000000000000000000cf3f000000000200d2533080000000000000000000000000dd3f00000100030090b330800000000040000000000000000840000000000200ec5330800000000000000000000000001640000000000200fa53308000000000000000000000000024400000000002000a543080000000000000000000000000324000000100030070b430800000000030000000000000005d40000000000200725430800000000000000000000000006b4000000100030020b53080000000001800000000000000964000000000020066553080000000000000000000000000a44000000000020074553080000000000000000000000000b24000000000020082553080000000000000000000000000c04000000000020090553080000000000000000000000000ce40000000000200a0553080000000000000000000000000dc4000000100030008b430800000000050000000000000000741000000000200ae5530800000000000000000000000000a41000000000200b65530800000000000000000000000001841000001000300f8b530800000000028000000000000004241000000000200be553080000000000000000000000000504100000100030068b630800000000018000000000000007a41000000000200d25530800000000000000000000000007d41000000000200d65530800000000000000000000000008b41000001000500d9c23080000000000100000000000000cc41000000000200e0553080000000000000000000000000da41000001000300f8b63080000000001b0000000000000005420000000002000656308000000000000000000000000013420000020002003c5630800000000034000000000000007b420000000002001056308000000000000000000000000089420000000002003c5630800000000000000000000000008c42000000000200705630800000000000000000000000008f42000000000200785630800000000000000000000000009d4200000000020080563080000000000000000000000000ab4200000100030058b73080000000001800000000000000d64200000000020094563080000000000000000000000000d94200000000020096563080000000000000000000000000e742000001000300c8b730800000000010000000000000001243000000000200a65630800000000000000000000000002043000001000300d8b730800000000018000000000000004b43000000000200b85630800000000000000000000000004e43000000000200ba5630800000000000000000000000005c4300000100030008b830800000000010000000000000008743000000000200ca563080000000000000000000000000954300000100030018b83080000000001800000000000000c043000000000200dc563080000000000000000000000000c343000002000200ea5630800000000044000000000000000144000000000200ea5630800000000000000000000000000444000000000200f4563080000000000000000000000000124400000000020004573080000000000000000000000000204400000100030068b830800000000030000000000000004b440000000002001c5730800000000000000000000000005944000001000300e0b830800000000018000000000000008444000000000200d00030800000000000000000000000008744000000000200ea0030800000000000000000000000009544000000000200f2003080000000000000000000000000a344000000000200fa003080000000000000000000000000b14400000000020016013080000000000000000000000000bf440000000002001e013080000000000000000000000000cd44000000000200dc013080000000000000000000000000d044000000000200f6013080000000000000000000000000de440000000002001a023080000000000000000000000000ec440000000002002e573080000000000000000000000000ef4400000000020030573080000000000000000000000000f24400000000020032573080000000000000000000000000f54400000000020034573080000000000000000000000000f8440000000002004057308000000000000000000000000006450000000002004057308000000000000000000000000009450000000002004e57308000000000000000000000000017450000000002004e5730800000000000000000000000001a45000000000200565730800000000000000000000000002845000000000200965730800000000000000000000000003645000000000200ac5730800000000000000000000000003945000002000200b4983080000000002e000000000000004e45000000000200b45730800000000000000000000000005c45000000000200bc5730800000000000000000000000006a450000020002009e963080000000004c000000000000007f45000002000200f09c3080000000000e00000000000000944500000000020080583080000000000000000000000000a24500000100030034bb3080000000000700000000000000cc450000020002009c943080000000001200000000000000e145000002000200d49c3080000000000e00000000000000f6450000000002001659308000000000000000000000000004460000020002001c983080000000001200000000000000194600000000020040593080000000000000000000000000274600000100030020a230800000000020000000000000005246000002000200289a30800000000022000000000000006746000002000200c890308000000000f2000000000000007b46000000000200a6593080000000000000000000000000894600000100030000a23080000000001800000000000000b4460000000002000a5a3080000000000000000000000000c246000000000200a05a3080000000000000000000000000d046000000000200285b3080000000000000000000000000de46000002000200269b3080000000001000000000000000f3460000000002007e5b30800000000000000000000000000147000001000300c09f30800000000007000000000000002b4700000200020066933080000000000a010000000000003f47000002000200fa9b30800000000018000000000000005447000000000200ac5b308000000000000000000000000062470000020002006c9c30800000000016000000000000007747000000000200e05b3080000000000000000000000000854700000100030040a23080000000000600000000000000b0470000000002003a5c3080000000000000000000000000be470000020002002a9c3080000000001600000000000000d347000002000200569b3080000000001000000000000000e847000000000200ba5d3080000000000000000000000000f647000001000300e0b63080000000001800000000000000214800000200020086983080000000002e0000000000000036480000000002000e5e30800000000000000000000000004448000001000300c8b630800000000018000000000000006f48000002000200669b30800000000010000000000000008448000002000200e29c3080000000000e000000000000009948000000000200345f3080000000000000000000000000a74800000100030098ba3080000000001800000000000000d1480000000002003e5f3080000000000000000000000000df48000000000200505f3080000000000000000000000000ed48000000000200645f3080000000000000000000000000fb48000000000200865f308000000000000000000000000009490000000002009c5f30800000000000000000000000001749000000000200b25f30800000000000000000000000002549000000000200cc5f30800000000000000000000000003349000000000200d65f30800000000000000000000000004149000000000200e25f30800000000000000000000000004f49000001000300f89f30800000000030000000000000007a490000020002000a9830800000000012000000000000008f49000000000200f25f30800000000000000000000000009d4900000000020002603080000000000000000000000000ab490000000002000c603080000000000000000000000000b94900000000020018603080000000000000000000000000c74900000000020028603080000000000000000000000000d54900000000020038603080000000000000000000000000e34900000000020042603080000000000000000000000000f1490000000002004e603080000000000000000000000000ff490000000002005e6030800000000000000000000000000d4a0000000002007a6030800000000000000000000000001b4a0000000002008a603080000000000000000000000000294a0000000002009e603080000000000000000000000000374a000000000200b06030800000000000000000000000003a4a000000000200d0603080000000000000000000000000484a000000000200d8603080000000000000000000000000564a00000000020000613080000000000000000000000000644a00000100030090a230800000000014000000000000008f4a0000000002008a6130800000000000000000000000009d4a00000000020024623080000000000000000000000000ab4a00000000020056623080000000000000000000000000b94a00000200020036923080000000003e00000000000000cd4a000002000200f8913080000000003e00000000000000e14a000002000200ba913080000000003e00000000000000f54a00000200020074923080000000003800000000000000094b000000000200da623080000000000000000000000000174b000001000300a8a23080000000001800000000000000424b00000000020016633080000000000000000000000000504b000000000200b06330800000000000000000000000005e4b0000000002005e6430800000000000000000000000006c4b000002000200989c3080000000001000000000000000814b000000000200c06530800000000000000000000000008f4b0000000002002c6630800000000000000000000000009d4b000000000200e4663080000000000000000000000000ab4b000000000200ee663080000000000000000000000000b94b00000000020000673080000000000000000000000000c74b00000000020014673080000000000000000000000000d54b00000000020038673080000000000000000000000000e34b00000000020052673080000000000000000000000000f14b0000000002005c673080000000000000000000000000ff4b000000000200686730800000000000000000000000000d4c000000000200806730800000000000000000000000001b4c00000000020090673080000000000000000000000000294c0000000002009a673080000000000000000000000000374c000000000200a6673080000000000000000000000000454c000000000200be673080000000000000000000000000534c000000000200d6673080000000000000000000000000614c000000000200e26730800000000000000000000000006f4c000000000200f4673080000000000000000000000000724c000000000200fc673080000000000000000000000000804c000000000200046830800000000000000000000000008e4c000000000200c86830800000000000000000000000009c4c0000000002005e693080000000000000000000000000aa4c00000000020088693080000000000000000000000000b84c00000100030070a23080000000002000000000000000e34c00000000020096693080000000000000000000000000f14c00000100030060a230800000000005000000000000001c4d000000000200f66930800000000000000000000000002a4d00000100030048a23080000000001800000000000000554d0000000002005a6a3080000000000000000000000000634d000000000200f26a3080000000000000000000000000714d000000000200246b30800000000000000000000000007f4d00000100030065a23080000000000700000000000000aa4d0000000002007a6b3080000000000000000000000000b84d000000000200d06b3080000000000000000000000000c64d000000000200fe6b3080000000000000000000000000d44d000000000200326c3080000000000000000000000000e24d0000000002008c6c3080000000000000000000000000f04d0000000002000c6e3080000000000000000000000000fe4d000000000200606e30800000000000000000000000000c4e000000000200866f30800000000000000000000000001a4e000000000200906f3080000000000000000000000000284e000000000200a26f3080000000000000000000000000364e000000000200b66f3080000000000000000000000000444e000000000200d86f3080000000000000000000000000524e000000000200ee6f3080000000000000000000000000604e000000000200047030800000000000000000000000006e4e0000000002001e7030800000000000000000000000007c4e000000000200287030800000000000000000000000008a4e00000000020034703080000000000000000000000000984e00000000020044703080000000000000000000000000a64e00000000020054703080000000000000000000000000b44e0000000002005e703080000000000000000000000000c24e0000000002006a703080000000000000000000000000d04e0000000002007a703080000000000000000000000000de4e0000000002008a703080000000000000000000000000ec4e00000000020094703080000000000000000000000000fa4e000000000200a0703080000000000000000000000000084f000000000200b0703080000000000000000000000000164f000000000200cc703080000000000000000000000000244f000000000200dc703080000000000000000000000000324f000000000200f0703080000000000000000000000000404f00000000020002713080000000000000000000000000434f0000000002006c713080000000000000000000000000514f000000000200b0713080000000000000000000000000544f000000000200c2713080000000000000000000000000624f000001000300bbba3080000000000f000000000000008d4f000000000200d87130800000000000000000000000009b4f000000000200e0713080000000000000000000000000a94f0000020002004072308000000000d400000000000000f14f00000000020018723080000000000000000000000000ff4f0000000002002a7230800000000000000000000000000d500000000002004072308000000000000000000000000010500000000002005c7230800000000000000000000000001e50000001000300caba3080000000000a000000000000004950000000000200727230800000000000000000000000005750000001000300d4ba308000000000060000000000000082500000000002007a72308000000000000000000000000090500000020002001473308000000000b600000000000000ee5000000000020090723080000000000000000000000000fc50000001000300daba3080000000000e000000000000002751000000000200987230800000000000000000000000003551000000000200d07230800000000000000000000000004351000000000200e27230800000000000000000000000005151000000000200fc7230800000000000000000000000005f510000000002001473308000000000000000000000000062510000000002002a7330800000000000000000000000007051000001000300b0ba30800000000006000000000000009a5100000000020042733080000000000000000000000000a8510000000002004a733080000000000000000000000000b6510000020002004274308000000000a2000000000000001952000000000200607330800000000000000000000000002752000001000300b6ba30800000000005000000000000005252000000000200687330800000000000000000000000006052000002000200ca733080000000007800000000000000a852000000000200a0733080000000000000000000000000b652000000000200b2733080000000000000000000000000c452000000000300409f3080000000000000000000000000ce52000000000300409f3080000000000000000000000000d152000000000200ca733080000000000000000000000000d452000000000200d2733080000000000000000000000000e252000000000200e6733080000000000000000000000000f052000000000200fc733080000000000000000000000000fe520000000002000a7430800000000000000000000000000c53000000000200147430800000000000000000000000001a5300000100030078b230800000000030000000000000004553000000000200427430800000000000000000000000004853000000000200907430800000000000000000000000005653000000000200c87430800000000000000000000000006453000000000200e47430800000000000000000000000006753000000000200007530800000000000000000000000007553000001000300f0b930800000000018000000000000009f530000000002002e753080000000000000000000000000ad53000001000300d8b93080000000001800000000000000d7530000000002006a753080000000000000000000000000e553000000000200a2753080000000000000000000000000f353000000000200e6753080000000000000000000000000f65300000000020018763080000000000000000000000000f9530000000002002a76308000000000000000000000000007540000000002006a7630800000000000000000000000000a540000000002001e7730800000000000000000000000001854000000000200fa77308000000000000000000000000026540000000002000278308000000000000000000000000034540000000002006a783080000000000000000000000000425400000100030058be30800000000018000000000000006d540000000002007c78308000000000000000000000000070540000000002001879308000000000000000000000000073540000000002002079308000000000000000000000000076540000000002002c7930800000000000000000000000008454000000000200347930800000000000000000000000009254000000000200b2793080000000000000000000000000a054000000000200c8793080000000000000000000000000ae54000000000200de793080000000000000000000000000b154000000000200f47a3080000000000000000000000000b454000000000200c87b3080000000000000000000000000c254000000000200147c3080000000000000000000000000d054000001000300d8be3080000000001800000000000000fa54000002000200489830800000000030000000000000000f55000000000200ec7c30800000000000000000000000001d55000001000300c0be30800000000018000000000000004755000000000200027d30800000000000000000000000004a55000000000200567d308000000000000000000000000058550000000002009c7d30800000000000000000000000006655000000000200747e308000000000000000000000000074550000000002008a7e30800000000000000000000000007755000000000200b08030800000000000000000000000008555000000000200b88030800000000000000000000000009355000000000200e4803080000000000000000000000000a1550000000002005e823080000000000000000000000000af5500000100030050bd3080000000000801000000000000d9550000000002006c823080000000000000000000000000e7550000000002007c823080000000000000000000000000ea55000002000200089b3080000000001e00000000000000ff55000000000200b28330800000000000000000000000000d56000000000200ba8330800000000000000000000000001b56000002000200cc9a3080000000001e000000000000003056000000000200e48530800000000000000000000000003e56000000000200fa8530800000000000000000000000004c56000000000200108630800000000000000000000000004f560000000002003e8630800000000000000000000000005d56000000000200b68630800000000000000000000000006b56000000000200be8630800000000000000000000000007956000000000200968830800000000000000000000000008756000000000200d28830800000000000000000000000009556000000000200de883080000000000000000000000000a356000000000200f6883080000000000000000000000000b15600000200020008893080000000004004000000000000e65600000000020008893080000000000000000000000000e95600000000020070893080000000000000000000000000f75600000100030018c2308000000000c0000000000000002257000000000200488d308000000000000000000000000025570000000002003a8e30800000000000000000000000003357000001000300d0c130800000000018000000000000005d570000000002004e8e30800000000000000000000000006b5700000100030018c130800000000018000000000000009557000000000200628e3080000000000000000000000000a35700000100030030c13080000000001800000000000000cd57000000000200748e3080000000000000000000000000db5700000100030078c1308000000000280000000000000005580000000002007c8e30800000000000000000000000001358000001000300a0c130800000000018000000000000003d58000000000200908e30800000000000000000000000004b58000001000300b8c1308000000000180000000000000075580000000002009a8e30800000000000000000000000008358000000000200a48e30800000000000000000000000009158000000000200b68e30800000000000000000000000009f58000000000200be8e3080000000000000000000000000ad58000000000200c88e3080000000000000000000000000b058000000000200748f3080000000000000000000000000be5800000100030060c13080000000001800000000000000e858000000000200f28f3080000000000000000000000000f65800000000020022903080000000000000000000000000045900000100030000c230800000000018000000000000002f59000000000200389030800000000000000000000000003d590000000002004c9030800000000000000000000000004b5900000000020056903080000000000000000000000000595900000100030048c130800000000018000000000000008359000000000200689030800000000000000000000000009159000001000300e8c13080000000001800000000000000bb5900000000020072903080000000000000000000000000c9590000000002007c903080000000000000000000000000d75900000000020086903080000000000000000000000000e55900000000020098903080000000000000000000000000f359000000000200a2903080000000000000000000000000015a000000000200ac9030800000000000000000000000000f5a000000000200b69030800000000000000000000000001d5a000000000200c8903080000000000000000000000000205a000000000200ba913080000000000000000000000000235a000000000200f8913080000000000000000000000000265a00000000020036923080000000000000000000000000295a000000000200749230800000000000000000000000002c5a000000000200ac9230800000000000000000000000002f5a000000000200ea923080000000000000000000000000325a0000000002002e933080000000000000000000000000355a0000000002004c933080000000000000000000000000385a000000000200669330800000000000000000000000003b5a000000000200709430800000000000000000000000003e5a0000000002009c943080000000000000000000000000415a000000000200ae943080000000000000000000000000445a000000000200d8943080000000000000000000000000475a000000000200ee9430800000000000000000000000004a5a0000000002000a9530800000000000000000000000004d5a00000000020022953080000000000000000000000000505a0000000002008e953080000000000000000000000000535a000000000200e8953080000000000000000000000000565a0000000002000a963080000000000000000000000000595a000000000200249630800000000000000000000000005c5a0000000002007c9630800000000000000000000000005f5a0000000002008c963080000000000000000000000000625a0000000002009e963080000000000000000000000000655a000000000200ea963080000000000000000000000000685a000000000200309730800000000000000000000000006b5a000000000200769730800000000000000000000000006e5a00000000020088973080000000000000000000000000715a000000000200ca973080000000000000000000000000745a0000000002000a983080000000000000000000000000775a0000000002001c9830800000000000000000000000007a5a0000000002002e9830800000000000000000000000007d5a00000000020048983080000000000000000000000000805a00000000020078983080000000000000000000000000835a00000000020086983080000000000000000000000000865a000000000200b4983080000000000000000000000000895a000000000200e29830800000000000000000000000008c5a000000000200f29830800000000000000000000000008f5a0000000002001e993080000000000000000000000000925a00000000020032993080000000000000000000000000955a00000000020046993080000000000000000000000000985a000000000200709930800000000000000000000000009b5a000000000200889930800000000000000000000000009e5a000000000200b0993080000000000000000000000000a15a000000000200d6993080000000000000000000000000a45a000000000200e6993080000000000000000000000000a75a000000000200fc993080000000000000000000000000aa5a000000000200129a3080000000000000000000000000ad5a000000000200289a3080000000000000000000000000b05a0000000002004a9a3080000000000000000000000000b35a0000000002006c9a3080000000000000000000000000b65a0000000002007e9a3080000000000000000000000000b95a0000000002009e9a3080000000000000000000000000bc5a000000000200ae9a3080000000000000000000000000bf5a000000000200cc9a3080000000000000000000000000c25a000000000200ea9a3080000000000000000000000000c55a000000000200089b3080000000000000000000000000c85a000000000200269b3080000000000000000000000000cb5a000000000200369b3080000000000000000000000000ce5a000000000200469b3080000000000000000000000000d15a000000000200569b3080000000000000000000000000d45a000000000200669b3080000000000000000000000000d75a000000000200769b3080000000000000000000000000da5a000000000200889b3080000000000000000000000000dd5a000000000200a29b3080000000000000000000000000e05a000000000200bc9b3080000000000000000000000000e35a000000000200ca9b3080000000000000000000000000e65a000000000200e29b3080000000000000000000000000e95a000000000200fa9b3080000000000000000000000000ec5a000000000200129c3080000000000000000000000000ef5a0000000002002a9c3080000000000000000000000000f25a000000000200409c3080000000000000000000000000f55a000000000200569c3080000000000000000000000000f85a0000000002006c9c3080000000000000000000000000fb5a000000000200829c3080000000000000000000000000fe5a000000000200989c3080000000000000000000000000015b000000000200a89c3080000000000000000000000000045b000000000200b89c3080000000000000000000000000075b000000000200c69c30800000000000000000000000000a5b000000000200d49c30800000000000000000000000000d5b000000000200e29c3080000000000000000000000000105b000000000200f09c3080000000000000000000000000135b000000000300a09f3080000000000000000000000000165b000000000300c09f3080000000000000000000000000195b000000000300709e30800000000000000000000000001c5b000001000300c79f3080000000002100000000000000465b000000000300c79f3080000000000000000000000000495b000001000300e89f3080000000000f00000000000000745b000000000300e89f3080000000000000000000000000775b000001000300f79f3080000000000100000000000000a25b000000000300f79f3080000000000000000000000000a55b000000000300f89f3080000000000000000000000000a85b00000000030028a03080000000000000000000000000ab5b00000100030048a03080000000007f00000000000000d65b00000000030048a03080000000000000000000000000d95b000000000300c8a03080000000000000000000000000dc5b000000000300e0a03080000000000000000000000000df5b000000000300eda03080000000000000000000000000e25b000000000300faa03080000000000000000000000000e55b00000000030001a13080000000000000000000000000e85b00000000030008a13080000000000000000000000000eb5b00000000030016a13080000000000000000000000000ee5b00000000030023a13080000000000000000000000000f15b00000000030070a13080000000000000000000000000f45b000000000300aca13080000000000000000000000000f75b000000000300bca13080000000000000000000000000fa5b000000000300c1a13080000000000000000000000000fd5b000000000300c4a13080000000000000000000000000005c000000000300cea13080000000000000000000000000035c000000000300d1a13080000000000000000000000000065c000000000300e0a13080000000000000000000000000095c000000000300eca130800000000000000000000000000c5c000001000300f1a13080000000000a00000000000000375c000000000300f1a130800000000000000000000000003a5c00000000030000a230800000000000000000000000003d5c00000100030018a23080000000000200000000000000685c00000000030018a230800000000000000000000000006b5c00000000030020a230800000000000000000000000006e5c00000000030040a23080000000000000000000000000715c00000000030048a23080000000000000000000000000745c00000000030060a23080000000000000000000000000775c00000000030065a230800000000000000000000000007a5c00000000030070a230800000000000000000000000007d5c00000000030090a23080000000000000000000000000805c000000000300a8a23080000000000000000000000000835c000000000300c0a23080000000000000000000000000865c000000000300d5a23080000000000000000000000000895c000000000300fda230800000000000000000000000008c5c00000000030027a330800000000000000000000000008f5c0000000003003fa33080000000000000000000000000925c00000000030057a33080000000000000000000000000955c0000000003006da33080000000000000000000000000985c00000000030084a330800000000000000000000000009b5c00000000030098a330800000000000000000000000009e5c000000000300b0a33080000000000000000000000000a15c000001000300c1a33080000000001400000000000000cc5c000000000300c1a33080000000000000000000000000cf5c000000000300d8a33080000000000000000000000000d25c000001000300e8a33080000000000e00000000000000fd5c000000000300e8a33080000000000000000000000000005d000000000300f8a33080000000000000000000000000035d00000000030008a43080000000000000000000000000065d00000100030038a43080000000008000000000000000305d00000000030038a43080000000000000000000000000335d000000000300b8a43080000000000000000000000000365d000001000300d0a43080000000001100000000000000605d000000000300d0a43080000000000000000000000000635d000000000300e8a43080000000000000000000000000665d000001000300f8a43080000000008100000000000000905d000000000300f8a43080000000000000000000000000935d00000000030080a53080000000000000000000000000965d00000000030098a53080000000000000000000000000995d000000000300aba530800000000000000000000000009c5d000000000300aca530800000000000000000000000009f5d000000000300b1a53080000000000000000000000000a25d000000000300baa53080000000000000000000000000a55d000001000300cda53080000000006100000000000000cf5d000000000300cda53080000000000000000000000000d25d00000000030030a63080000000000000000000000000d55d00000000030048a63080000000000000000000000000d85d0000000003004fa63080000000000000000000000000db5d000000000500d8c23080000000000000000000000000de5d00000000030055a63080000000000000000000000000e15d00000000030057a63080000000000000000000000000e45d0000010003001fa730800000000080000000000000000e5e0000000003001fa73080000000000000000000000000115e000000000300a0a73080000000000000000000000000145e000000000300b8a73080000000000000000000000000175e000000000300d0a730800000000000000000000000001a5e000000000300d2a730800000000000000000000000001d5e000001000300d4a73080000000008a00000000000000485e000000000300d4a730800000000000000000000000004b5e00000000030060a830800000000000000000000000004e5e00000000030078a83080000000000000000000000000515e00000000030090a83080000000000000000000000000545e000000000300e8a83080000000000000000000000000575e000000000300b8a930800000000000000000000000005a5e0000000003009eab30800000000000000000000000005d5e000000000300eeab3080000000000000000000000000605e00000000030010ad3080000000000000000000000000635e00000100030039ae3080000000008d000000000000008e5e00000000030039ae3080000000000000000000000000915e000000000300c8ae3080000000000000000000000000945e000000000300e0ae3080000000000000000000000000975e000000000300f8ae30800000000000000000000000009a5e00000000030080af30800000000000000000000000009d5e0000010003006fb23080000000000700000000000000c85e0000000003006fb23080000000000000000000000000cb5e00000000030078b23080000000000000000000000000ce5e000000000300a8b23080000000000000000000000000d15e000000000300a9b23080000000000000000000000000d45e000000000300acb23080000000000000000000000000d75e000000000300aeb23080000000000000000000000000da5e000000000300b1b23080000000000000000000000000dd5e000000000300b3b23080000000000000000000000000e05e000000000300b4b23080000000000000000000000000e35e000000000300b6b23080000000000000000000000000e65e000000000300b7b23080000000000000000000000000e95e000000000300b9b23080000000000000000000000000ec5e000000000300bab23080000000000000000000000000ef5e000000000300bbb23080000000000000000000000000f25e000000000300c0b23080000000000000000000000000f55e000000000300f0b23080000000000000000000000000f85e0000010003001bb33080000000001200000000000000235f0000000003001bb33080000000000000000000000000265f00000000030030b33080000000000000000000000000295f00000000030050b330800000000000000000000000002c5f00000000030058b330800000000000000000000000002f5f00000000030078b33080000000000000000000000000325f0000010003007db33080000000000e000000000000005d5f0000000003007db33080000000000000000000000000605f0000010003008bb330800000000001000000000000008b5f0000000003008bb330800000000000000000000000008e5f00000000030090b33080000000000000000000000000915f000001000300d0b33080000000000b00000000000000bc5f000000000300d0b33080000000000000000000000000bf5f000001000300dbb33080000000002600000000000000ea5f000000000300dbb33080000000000000000000000000ed5f00000100030001b43080000000000600000000000000186000000000030001b430800000000000000000000000001b6000000000030008b430800000000000000000000000001e6000000100030058b43080000000001600000000000000496000000000030058b430800000000000000000000000004c6000000000030070b430800000000000000000000000004f60000001000300a0b430800000000080000000000000007a60000000000300a0b430800000000000000000000000007d6000000000030020b53080000000000000000000000000806000000100030038b53080000000001200000000000000ab6000000000030038b53080000000000000000000000000ae600000010003004ab53080000000002200000000000000d9600000000003004ab53080000000000000000000000000dc6000000000030070b53080000000000000000000000000df6000000000030090b53080000000000000000000000000e260000001000300b0b530800000000016000000000000000d61000000000300b0b530800000000000000000000000001061000001000300c6b53080000000000d000000000000003b61000000000300c6b530800000000000000000000000003e61000000000300d8b530800000000000000000000000004161000000000300f8b53080000000000000000000000000446100000100030020b630800000000044000000000000006e6100000000030020b63080000000000000000000000000716100000000030068b63080000000000000000000000000746100000100030080b630800000000042000000000000009f6100000000030080b63080000000000000000000000000a261000000000300c8b63080000000000000000000000000a561000000000300e0b63080000000000000000000000000a861000000000300f8b63080000000000000000000000000ab6100000100030013b73080000000004200000000000000d66100000000030013b73080000000000000000000000000d96100000000030058b73080000000000000000000000000dc6100000000030070b73080000000000000000000000000df6100000000030088b73080000000000000000000000000e261000000000300a0b73080000000000000000000000000e561000001000300b8b73080000000000f000000000000001062000000000300b8b730800000000000000000000000001362000000000300c8b730800000000000000000000000001662000000000300d8b730800000000000000000000000001962000001000300f0b730800000000012000000000000004462000000000300f0b73080000000000000000000000000476200000000030008b830800000000000000000000000004a6200000000030018b830800000000000000000000000004d6200000100030030b83080000000001500000000000000786200000000030030b830800000000000000000000000007b6200000100030045b83080000000001600000000000000a66200000000030045b83080000000000000000000000000a9620000010003005bb83080000000000700000000000000d4620000000003005bb83080000000000000000000000000d76200000000030068b83080000000000000000000000000da6200000100030098b83080000000004400000000000000056300000000030098b830800000000000000000000000000863000000000300e0b830800000000000000000000000000b63000000000300f8b830800000000000000000000000000e6300000000030078b930800000000000000000000000001163000000000300d8b93080000000000000000000000000146300000100030010c03080000000006f000000000000003e63000000000300f0b93080000000000000000000000000416300000100030008ba3080000000008d000000000000006b6300000000030008ba30800000000000000000000000006e6300000000030098ba30800000000000000000000000007163000000000300b0ba30800000000000000000000000007463000000000300b6ba30800000000000000000000000007763000000000300bbba30800000000000000000000000007a63000000000300caba30800000000000000000000000007d63000000000300d4ba30800000000000000000000000008063000000000300daba30800000000000000000000000008363000000000500e0c230800000000000000000000000008663000001000300e8ba3080000000004c00000000000000b063000000000300e8ba3080000000000000000000000000b36300000000030034bb3080000000000000000000000000b66300000000030040bb3080000000000000000000000000b96300000000030048bc3080000000000000000000000000bc6300000000030050bd3080000000000000000000000000bf6300000000030058be3080000000000000000000000000c26300000100030070be3080000000004900000000000000ec6300000000030070be3080000000000000000000000000ef63000000000300c0be3080000000000000000000000000f263000000000300d8be3080000000000000000000000000f563000001000300f0be30800000000073000000000000001f64000000000300f0be3080000000000000000000000000226400000000030068bf3080000000000000000000000000256400000100030080bf30800000000071000000000000004f6400000000030080bf30800000000000000000000000005264000000000300f8bf3080000000000000000000000000556400000000030010c03080000000000000000000000000586400000000030080c030800000000000000000000000005b6400000000030098c030800000000000000000000000005e64000001000300b0c030800000000062000000000000008864000000000300b0c030800000000000000000000000008b6400000000030018c130800000000000000000000000008e6400000000030030c13080000000000000000000000000916400000000030048c13080000000000000000000000000946400000000030060c13080000000000000000000000000976400000000030078c130800000000000000000000000009a64000000000300a0c130800000000000000000000000009d64000000000300b8c13080000000000000000000000000a064000000000300d0c13080000000000000000000000000a364000000000300e8c13080000000000000000000000000a66400000000030000c23080000000000000000000000000a96400000000030018c23080000000000000000000000000ac6400000000080092000000000000000000000000000000af640000000008005e000000000000000000000000000000b2640000000008005e000000000000000000000000000000b5640000000008005e000000000000000000000000000000b8640000000008005e000000000000000000000000000000bb640000000008005e000000000000000000000000000000be640000000008005e000000000000000000000000000000c1640000000008005e000000000000000000000000000000c4640000000008005e000000000000000000000000000000c7640000000008005e000000000000000000000000000000ca640000000008005e000000000000000000000000000000cd640000000008005e000000000000000000000000000000d0640000000008005e000000000000000000000000000000d3640000000008005e000000000000000000000000000000d6640000000008005e000000000000000000000000000000d9640000000008005e000000000000000000000000000000dc640000000008005e000000000000000000000000000000df640000000008005e000000000000000000000000000000e2640000000008005e000000000000000000000000000000e5640000000008005e000000000000000000000000000000e8640000000008005e000000000000000000000000000000eb640000000008005e000000000000000000000000000000ee640000000008005e000000000000000000000000000000f1640000000008005e000000000000000000000000000000f4640000000008005e000000000000000000000000000000f7640000000008005e000000000000000000000000000000fa640000000008005e000000000000000000000000000000fd640000000008005e00000000000000000000000000000000650000000008005e00000000000000000000000000000003650000000008005e00000000000000000000000000000006650000000008005e00000000000000000000000000000009650000000008005e0000000000000000000000000000000c650000000008005e0000000000000000000000000000000f650000000008005e00000000000000000000000000000012650000000008005e00000000000000000000000000000015650000000008005e00000000000000000000000000000018650000000008005e0000000000000000000000000000001b650000000008005e0000000000000000000000000000001e650000000008005e00000000000000000000000000000021650000000008005e00000000000000000000000000000024650000000008005e00000000000000000000000000000027650000000008005e0000000000000000000000000000002a650000000008005e0000000000000000000000000000002d650000000008005e00000000000000000000000000000030650000000008005e00000000000000000000000000000033650000000008005e00000000000000000000000000000036650000000008005e00000000000000000000000000000039650000000008005e0000000000000000000000000000003c650000000008005e0000000000000000000000000000003f650000000008005e00000000000000000000000000000042650000000008005e00000000000000000000000000000045650000000008005e00000000000000000000000000000048650000000008005e0000000000000000000000000000004b650000000008005e0000000000000000000000000000004e650000000008005e00000000000000000000000000000051650000000008005e00000000000000000000000000000054650000000008005e00000000000000000000000000000057650000000008005e0000000000000000000000000000005a650000000008005e0000000000000000000000000000005d650000000008005e00000000000000000000000000000060650000000008005e00000000000000000000000000000063650000000008005e00000000000000000000000000000066650000000008005e00000000000000000000000000000069650000000008005e0000000000000000000000000000006c6500000000f1ff000000000000000000000000000000006f6500000000f1ff00000000000000000000000000000000726500000400f1ff000000000000000000000000000000009c65000000000200fe9c30800000000000000000000000009f6500000000080092000000000000000000000000000000a26500000000f1ff00000000000000000000000000000000b869000002020200fe9c3080000000001400000000000000a56500000400f1ff00000000000000000000000000000000cf6500000000080092000000000000000000000000000000d26500000000f1ff00000000000000000000000000000000d56500000400f1ff00000000000000000000000000000000ff6500000000080092000000000000000000000000000000026600000000f1ff00000000000000000000000000000000056600000400f1ff000000000000000000000000000000002f6600000000080092000000000000000000000000000000326600000000f1ff00000000000000000000000000000000356600000400f1ff000000000000000000000000000000005f6600000000080092000000000000000000000000000000626600000000f1ff00000000000000000000000000000000656600000400f1ff000000000000000000000000000000008f6600000000080092000000000000000000000000000000926600000000f1ff00000000000000000000000000000000956600000400f1ff00000000000000000000000000000000bf6600000000080092000000000000000000000000000000c26600000000f1ff00000000000000000000000000000000c56600000400f1ff00000000000000000000000000000000ef6600000000080092000000000000000000000000000000f26600000000f1ff00000000000000000000000000000000f56600000400f1ff000000000000000000000000000000001f67000000000200129d3080000000000000000000000000226700000000080092000000000000000000000000000000256700000000f1ff00000000000000000000000000000000b169000002020200129d3080000000000800000000000000286700000400f1ff00000000000000000000000000000000526700000000080092000000000000000000000000000000556700000000f1ff00000000000000000000000000000000586700000400f1ff0000000000000000000000000000000082670000000002001a9d30800000000000000000000000008567000000000200cc9d30800000000000000000000000008867000000000200369e30800000000000000000000000008b67000000000800920000000000000000000000000000008e6700000000f1ff00000000000000000000000000000000996b000002020200cc9d3080000000006a00000000000000cf6b0000020202001a9d308000000000b200000000000000056c000002020200369e3080000000001e00000000000000916700000400f1ff00000000000000000000000000000000bb6700000000080092000000000000000000000000000000be6700000000f1ff00000000000000000000000000000000c16700000400f1ff00000000000000000000000000000000eb67000000000200549e3080000000000000000000000000ee6700000000080092000000000000000000000000000000f16700000000f1ff00000000000000000000000000000000aa69000002020200549e3080000000000800000000000000f46700000400f1ff000000000000000000000000000000001e6800000000080092000000000000000000000000000000216800000000f1ff00000000000000000000000000000000246800000400f1ff000000000000000000000000000000004e680000000002005c9e3080000000000000000000000000516800000000080092000000000000000000000000000000546800000000f1ff000000000000000000000000000000000b6a0000020202005c9e3080000000000800000000000000576800000400f1ff00000000000000000000000000000000816800000000080092000000000000000000000000000000846800000000f1ff000000000000000000000000000000008768000012000200e67530800000000032000000000000008c68000012000200945630800000000024000000000000009b68000012000200b8563080000000002400000000000000ac680000120002002e573080000000000200000000000000c46800001200020030573080000000000200000000000000dc68000011000300f8b83080000000008000000000000000e96800001100030078b93080000000006000000000000000f668000012000200d00030800000000078000000000000000269000012000200dc013080000000005e00000000000000136900001200020034573080000000000c00000000000000236900001200020032573080000000000200000000000000346900001200020040573080000000000e000000000000004d69000010000200000030800000000000000000000000005469000010000400d8ca3080000000000000000000000000666900001000f1ff0000000000000000000000000000000073690000100002003a023080000000000000000000000000796900001000f1ff000800000000000000000000000000008a6900001000f1ff00003080000000000000000000000000976900001000020048013080000000000000000000000000126a000012000200345730800000000000000000000000001b6a00001200020032573080000000000000000000000000266a000010000400d8c230800000000000000000000000002d6a000010000400d8c23080000000000000000000000000346a00001000f1ffd8c230800000000000000000000000003c6a000010000500d8c23080000000000000000000000000426a000010000500e8c2d080000000000000000000000000486a000012000200405730800000000000000000000000005a6a00001000020048013080000000000000000000000000666a000012000200b85630800000000000000000000000007c6a000012000200b85630800000000000000000000000008d6a000012000200b8563080000000000000000000000000a06a000012000200b8563080000000000000000000000000ab6a000012000200b8563080000000000000000000000000ba6a000012000200b8563080000000000000000000000000c46a000012000200b8563080000000000000000000000000d46a000012000200b8563080000000000000000000000000df6a000012000200b8563080000000000000000000000000eb6a000012000200b8563080000000000000000000000000fd6a000012000200b85630800000000000000000000000000c6b000012000200b8563080000000000000000000000000216b000012000200b85630800000000000000000000000002f6b000012000200b85630800000000000000000000000003e6b000012000200945630800000000000000000000000004d6b00001200020094563080000000000000000000000000596b00001200020094563080000000000000000000000000696b00001200020094563080000000000000000000000000766b00001200020094563080000000000000000000000000896b000012000200945630800000000000000000000000003b6c00001000f1ff00003080000000000000000000000000426c00001000f1ff000000000000000000000000000000004d6c000010000600e8c2d080000000000000000000000000546c000010000600e8c2d0800000000000000000000000005b6c00001000070000001080000000000000000000000000636c00001000070000003080000000000000000000000000002e746578742e64756d6d79002e74657874002e726f64617461002e64617461002e627373002e68656170002e737461636b002e636f6d6d656e74002e72697363762e61747472696275746573002e73796d746162002e7368737472746162002e737472746162000072756e74696d652e313833633132643530383835393634622d6367752e30002478002464005f6162735f7374617274002e4c3020002478002e4c706372656c5f686930002e4c706372656c5f686931002e4c3020002478002478005f5a4e3135616c6c6f795f736f6c5f74797065733361626937656e636f6465723135656e636f64655f73657175656e63653137683630663961653939356639666537356445002478002e4c706372656c5f686932005f5f727573745f6e6f5f616c6c6f635f7368696d5f69735f756e737461626c65002e4c706372656c5f686933005f5a4e31376574685f72697363765f72756e74696d6535616c6c6f6336474c4f42414c3137683334356230313064363433633337316645002e4c706372656c5f686934002e4c616e6f6e2e36663837613435383533393638363634373733396633623134363730316339332e31002e4c706372656c5f686935002e4c616e6f6e2e36663837613435383533393638363634373733396633623134363730316339332e32005f5a4e35616c6c6f63377261775f766563313268616e646c655f6572726f723137686162333735303564316464306362336345005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f656e636f64653137683666653630636435383235343366393345002478005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f656e636f64653137683934616264316166393130616161303445002478004f55544c494e45445f46554e4354494f4e5f3139004f55544c494e45445f46554e4354494f4e5f3134004f55544c494e45445f46554e4354494f4e5f3231004f55544c494e45445f46554e4354494f4e5f35002e4c706372656c5f686936002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e39005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f656e636f64653137686664356539353833316230336561386445002478004f55544c494e45445f46554e4354494f4e5f3135002e4c706372656c5f686937002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e34005f5a4e34636f726533666d74336e756d34395f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f72247532302475382447542433666d743137683430666332323430363965663239303845002478002e4c706372656c5f686939002e4c616e6f6e2e38306435386436313264653030613965336238393135333761343633633836622e35004f55544c494e45445f46554e4354494f4e5f3637004f55544c494e45445f46554e4354494f4e5f3738004f55544c494e45445f46554e4354494f4e5f3336004f55544c494e45445f46554e4354494f4e5f3232002e4c706372656c5f686938002e4c616e6f6e2e38306435386436313264653030613965336238393135333761343633633836622e32002e4c706372656c5f68693131002e4c706372656c5f68693130004f55544c494e45445f46554e4354494f4e5f3732005f5a4e34636f726533666d7439466f726d617474657231327061645f696e74656772616c3137683636653331623966316261383731333145005f5a4e34636f726533707472353164726f705f696e5f706c616365244c5424616c6c6f795f736f6c5f74797065732e2e6572726f72732e2e4572726f72244754243137683338666139306533383761326434623145002478005f5a4e36375f244c5424616c6c6f795f736f6c5f74797065732e2e6572726f72732e2e4572726f72247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686533623164366266333837393063343445002478002e4c706372656c5f68693132002e4c4a5449365f30002e4c3020002e4c706372656c5f68693133002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3232002e4c706372656c5f68693134002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3233002e4c706372656c5f68693135005f5a4e36345f244c5424616c6c6f632e2e626f72726f772e2e436f77244c54244224475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683134343065303763366532646638626345005f5a4e34636f726533666d74386275696c6465727331314465627567537472756374356669656c643137686466333030366631663261363965383145002e4c706372656c5f68693136002e4c706372656c5f68693137005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683337373139646537616163393937646445002e4c706372656c5f68693138002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3135002e4c3020002e4c706372656c5f68693234002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3239002e4c3020002e4c706372656c5f68693530002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3435002e4c706372656c5f68693531005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683666343931333264663932663838373145002e4c3020002e4c706372656c5f68693231002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3237002e4c706372656c5f68693232005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686632656630653134623139636536386245002e4c3020002e4c706372656c5f68693233002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3238002e4c3020002e4c706372656c5f68693336002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3339002e4c706372656c5f68693337002e4c706372656c5f68693338005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686366333965313465666332646238303145002e4c706372656c5f68693339002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3430002e4c706372656c5f68693430005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683264613131323036363736326137333445002e4c706372656c5f68693431002e4c3020002e4c706372656c5f68693230002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3235002e4c3020002e4c706372656c5f68693235002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3331002e4c706372656c5f68693236005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683639616264653664353866613561663045002e4c3020002e4c706372656c5f68693237002e4c706372656c5f68693238002e4c706372656c5f68693239002e4c706372656c5f68693330002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3336002e4c706372656c5f68693331002e4c706372656c5f68693332002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3337002e4c706372656c5f68693333002e4c706372656c5f68693334002e4c3020002e4c706372656c5f68693532002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3437002e4c706372656c5f68693533005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686164336530323931623461393762303045005f5a4e34636f726533666d7439466f726d6174746572323564656275675f7475706c655f6669656c64315f66696e6973683137683432386266363065376632336639393545002e4c3020002e4c706372656c5f68693433002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3432002e4c706372656c5f68693434002e4c706372656c5f68693435002e4c706372656c5f68693436002e4c706372656c5f68693437005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683864343964646435306634316261346245002e4c706372656c5f68693438002e4c706372656c5f68693432002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3134002e4c706372656c5f68693139002e4c706372656c5f68693335002e4c706372656c5f68693439002464005f5a4e37315f244c542472756e74696d652e2e45524332304572726f722475323024617324753230246574685f72697363765f72756e74696d652e2e6572726f722e2e4572726f722447542431306162695f656e636f64653137683833363035626233636132663931616145002478002e4c706372656c5f68693534002e4c4a5449375f30002e4c3020002e4c706372656c5f68693535002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3635005f5a4e36375f244c542474696e795f6b656363616b2e2e6b656363616b2e2e4b656363616b24753230246173247532302474696e795f6b656363616b2e2e48617368657224475424367570646174653137686430323135323030316661396638386245005f5a4e36375f244c542474696e795f6b656363616b2e2e6b656363616b2e2e4b656363616b24753230246173247532302474696e795f6b656363616b2e2e486173686572244754243866696e616c697a653137686536363432656135363130366262343045002e4c706372656c5f68693536002e4c706372656c5f68693537004f55544c494e45445f46554e4354494f4e5f37002e4c706372656c5f68693539002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e33002e4c3020002e4c706372656c5f68693739002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3730002e4c706372656c5f68693830002e4c706372656c5f68693831002e4c706372656c5f68693833002e4c3020002e4c706372656c5f68693637002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3638002e4c706372656c5f68693638002e4c706372656c5f68693639004f55544c494e45445f46554e4354494f4e5f3533004f55544c494e45445f46554e4354494f4e5f3138004f55544c494e45445f46554e4354494f4e5f3333004f55544c494e45445f46554e4354494f4e5f3130004f55544c494e45445f46554e4354494f4e5f3132004f55544c494e45445f46554e4354494f4e5f36002e4c706372656c5f68693732004f55544c494e45445f46554e4354494f4e5f3731002e4c3020002e4c706372656c5f68693734002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3639002e4c706372656c5f68693735002e4c706372656c5f68693736002e4c706372656c5f68693738002e4c3020002e4c706372656c5f68693630002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3637002e4c706372656c5f68693631002e4c706372656c5f68693632002e4c706372656c5f68693635002e4c3020002e4c706372656c5f68693834002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3731002e4c706372656c5f68693835002e4c706372656c5f68693836002e4c706372656c5f68693838002e4c3020002e4c706372656c5f68693839002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3732002e4c706372656c5f68693930002e4c706372656c5f68693931002e4c706372656c5f68693832002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3139002e4c706372656c5f68693730002e4c706372656c5f68693538002e4c706372656c5f68693737002e4c706372656c5f68693633002e4c706372656c5f68693837002e4c706372656c5f68693932002e4c706372656c5f68693731002e4c706372656c5f68693634002e4c706372656c5f68693933002e4c706372656c5f68693733002e4c706372656c5f68693636002464005f5a4e3772756e74696d653134696d706c656d656e746174696f6e33325f244c5424696d706c247532302472756e74696d652e2e455243323024475424356f776e65723137686531616261613761626337643439333645002478005f5a4e3772756e74696d653134696d706c656d656e746174696f6e33325f244c5424696d706c247532302472756e74696d652e2e4552433230244754243132746f74616c5f737570706c793137683838373039366335356431333032303345002478004f55544c494e45445f46554e4354494f4e5f3636004f55544c494e45445f46554e4354494f4e5f3337004f55544c494e45445f46554e4354494f4e5f3634005f5a4e3772756e74696d653134696d706c656d656e746174696f6e33325f244c5424696d706c247532302472756e74696d652e2e455243323024475424313062616c616e63655f6f663137683738646538376238373865313231343745002478005f5a4e31376574685f72697363765f72756e74696d65357479706573376d617070696e6732304d617070696e67244c54244b24432456244754243130656e636f64655f6b65793137686630616237633832616663343834333645002e4c706372656c5f68693934004f55544c494e45445f46554e4354494f4e5f3632005f5a4e3132375f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e6d617070696e672e2e4d617070696e674775617264244c542456244754242475323024617324753230246574685f72697363765f72756e74696d652e2e74797065732e2e496e64697265637453746f72616765244c542456244754242447542434726561643137683039646637613432396461653563383645005f5a4e3772756e74696d653134696d706c656d656e746174696f6e33325f244c5424696d706c247532302472756e74696d652e2e45524332302447542439616c6c6f77616e63653137686330366439313061633032366632383045002478004f55544c494e45445f46554e4354494f4e5f3736002e4c706372656c5f68693935005f5a4e3772756e74696d653134696d706c656d656e746174696f6e37385f244c5424696d706c24753230246574685f72697363765f72756e74696d652e2e63616c6c2e2e436f6e74726163742475323024666f72247532302472756e74696d652e2e4552433230244754243463616c6c3137683964626131303565323931663033386445002478002e4c706372656c5f68693936002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3931005f5a4e34636f72653970616e69636b696e67313870616e69635f626f756e64735f636865636b3137686563306439343138393933646564613845002e4c706372656c5f68693937002e4c706372656c5f6869313031002e4c706372656c5f68693938002e4c706372656c5f68693939002e4c706372656c5f6869313030005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f6465636f64653137683365353661356532346436313366386345004f55544c494e45445f46554e4354494f4e5f3137002e4c706372656c5f6869313034002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3230004f55544c494e45445f46554e4354494f4e5f3235002e4c706372656c5f6869313035002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3231004f55544c494e45445f46554e4354494f4e5f3234002e4c706372656c5f6869313036002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3232004f55544c494e45445f46554e4354494f4e5f3639004f55544c494e45445f46554e4354494f4e5f3432002e4c706372656c5f6869313037002e4c706372656c5f6869313038002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3733004f55544c494e45445f46554e4354494f4e5f3434005f5a4e3135616c6c6f795f736f6c5f747970657333616269376465636f64657231356465636f64655f73657175656e63653137686235353830633962303834633132373545004f55544c494e45445f46554e4354494f4e5f3133002e4c706372656c5f6869313135002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e37005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f6465636f64653137686265303564633665326339613964356145004f55544c494e45445f46554e4354494f4e5f38002e4c706372656c5f6869313339002e4c706372656c5f6869313430002e4c706372656c5f6869313431005f5a4e3131345f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e736c6f742e2e536c6f74244c542456244754242475323024617324753230246574685f72697363765f72756e74696d652e2e74797065732e2e44697265637453746f72616765244c54245624475424244754243577726974653137686137343666343230376461336238383545005f5a4e31376574685f72697363765f72756e74696d65336c6f6734656d69743137683839373063376231343266386564323045005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f6465636f64653137686166333637666332393863353139333545004f55544c494e45445f46554e4354494f4e5f3230002e4c706372656c5f6869313139004f55544c494e45445f46554e4354494f4e5f3238002e4c706372656c5f6869313230004f55544c494e45445f46554e4354494f4e5f3237002e4c706372656c5f6869313231002e4c706372656c5f6869313232005f5a4e3130385f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e6d617070696e672e2e4d617070696e67244c54244b2443245624475424247532302461732475323024636f72652e2e6f70732e2e696e6465782e2e496e646578244c54244b244754242447542435696e6465783137686363373331653133366532666437353445005f5a4e3132375f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e6d617070696e672e2e4d617070696e674775617264244c542456244754242475323024617324753230246574685f72697363765f72756e74696d652e2e74797065732e2e496e64697265637453746f72616765244c54245624475424244754243577726974653137683933386362616236303161636534323445005f5a4e31376574685f72697363765f72756e74696d65336c6f6734656d69743137686166313132303034376139663734346645005f5a4e31376574685f72697363765f72756e74696d65313272657475726e5f72697363763137686238313761363438346164396437396445005f5a4e34636f726536726573756c743133756e777261705f6661696c65643137686561363039396361313064393030323545002e4c706372656c5f6869313032002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3936002e4c706372656c5f6869313033005f5a4e34636f72653970616e69636b696e673970616e69635f666d743137683564353138396236613162336330633345005f5a4e3135616c6c6f795f736f6c5f74797065733361626937656e636f6465723135656e636f64655f73657175656e63653137683235653239353436386466343935353245002e4c706372656c5f6869313136002e4c616e6f6e2e33396636323538656361313335633332616132353036353361616264356464612e31002e4c706372656c5f6869313039002e4c706372656c5f6869313235002e4c706372656c5f6869313236002e4c706372656c5f6869313237002e4c706372656c5f6869313238002e4c706372656c5f6869313137002e4c706372656c5f6869313239002e4c706372656c5f6869313130005f5a4e31376574685f72697363765f72756e74696d65356572726f7231377265766572745f776974685f6572726f723137683635646338323863613731386537353345002e4c706372656c5f6869313138002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e38004f55544c494e45445f46554e4354494f4e5f3437004f55544c494e45445f46554e4354494f4e5f3435004f55544c494e45445f46554e4354494f4e5f3531005f5a4e3130325f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e736c6f742e2e536c6f74244c54245624475424247532302461732475323024636f72652e2e6f70732e2e61726974682e2e41646441737369676e244c542456244754242447542431306164645f61737369676e3137683663356236313039316435353061623745005f5a4e37315f244c5424244c5024543124432424525024247532302461732475323024616c6c6f795f736f6c5f74797065732e2e6162692e2e746f6b656e2e2e546f6b656e536571244754243135656e636f64655f73657175656e63653137683866666133626466306436383537646645002e4c706372656c5f6869313131004f55544c494e45445f46554e4354494f4e5f3436004f55544c494e45445f46554e4354494f4e5f3439005f5a4e3130375f244c54246574685f72697363765f72756e74696d652e2e74797065732e2e736c6f742e2e536c6f74244c542456244754242475323024617324753230246574685f72697363765f72756e74696d652e2e74797065732e2e53746f7261676553746f7261626c6524475424375f5f77726974653137683632393733653361623965346664623345005f5a4e31376574685f72697363765f72756e74696d65336c6f6734656d69743137683062386130366334636334653736306545002e4c706372656c5f6869313132002e4c706372656c5f6869313432002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3934004f55544c494e45445f46554e4354494f4e5f3236002e4c706372656c5f6869313433002e4c706372656c5f6869313434002e4c706372656c5f6869313435002e4c706372656c5f6869313436002e4c706372656c5f6869313437002e4c706372656c5f6869313233002e4c706372656c5f6869313234002e4c706372656c5f6869313438002e4c706372656c5f6869313439002e4c706372656c5f6869313330002e4c706372656c5f6869313331002e4c706372656c5f6869313530002e4c706372656c5f6869313531002e4c706372656c5f6869313133002e4c706372656c5f6869313134002e4c706372656c5f6869313332002e4c706372656c5f6869313333002e4c706372656c5f6869313334002e4c706372656c5f6869313335002e4c706372656c5f6869313336004f55544c494e45445f46554e4354494f4e5f3430002e4c706372656c5f6869313337002e4c706372656c5f6869313338005f5f727573745f616c6c6f635f6572726f725f68616e646c6572002e4c3020002478005f5f72675f6f6f6d005f5a4e34636f726533666d743557726974653977726974655f666d743137683138636366383364653832333565336345002478002e4c706372656c5f6869313532002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e30005f5a4e34636f726533666d743577726974653137683630316230633461663636666433623345005f5a4e34636f726533707472343264726f705f696e5f706c616365244c5424616c6c6f632e2e737472696e672e2e537472696e67244754243137686635373933323766633632373534343545002478005f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532302461732475323024636f72652e2e666d742e2e5772697465244754243977726974655f7374723137686239336533656636643434353632373345002478004f55544c494e45445f46554e4354494f4e5f3532004f55544c494e45445f46554e4354494f4e5f3339002e4c706372656c5f6869313533002e4c706372656c5f6869313534002e4c706372656c5f6869313535002e4c706372656c5f6869313536005f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532302461732475323024636f72652e2e666d742e2e577269746524475424313077726974655f636861723137686230663966646639666262623264363545002478005f5a4e35616c6c6f63377261775f7665633139526177566563244c54245424432441244754243867726f775f6f6e653137683237396461353762353565363734633245002e4c706372656c5f6869313537002e4c706372656c5f6869313538002e4c706372656c5f6869313539002e4c706372656c5f6869313630002478002e4c706372656c5f6869313631002e4c706372656c5f6869313632002e4c706372656c5f6869313633002e4c706372656c5f6869313634002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e36002478005f5a4e35616c6c6f63377261775f766563313763617061636974795f6f766572666c6f773137683834663831336237346132643136623245005f5a4e35616c6c6f6335616c6c6f63313868616e646c655f616c6c6f635f6572726f723137686130623430393338376338376332383345002478002e4c706372656c5f6869313635002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e31004f55544c494e45445f46554e4354494f4e5f3539002478005f5a4e34305f244c5424737472247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683165353362636463363039336539326545002478005f5a4e35616c6c6f6335616c6c6f63313868616e646c655f616c6c6f635f6572726f723872745f6572726f723137683135393764656138383731323234353545002478002478002e4c706372656c5f6869313733002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3132002e4c706372656c5f6869313636002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e39002e4c706372656c5f6869313637002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3130002e4c706372656c5f6869313638005f5a4e34315f244c542463686172247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683466313239666635313436313631366245002e4c706372656c5f6869313639002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3131002e4c706372656c5f6869313730005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683438386262386238353035323333613045002e4c706372656c5f6869313731002e4c706372656c5f6869313734002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3133002e4c706372656c5f6869313732002478002478002e4c706372656c5f6869313736002e4c706372656c5f6869313735002e4c706372656c5f6869313738002e4c706372656c5f6869313737005f5a4e36355f244c5424616c6c6f632e2e7665632e2e566563244c5424542443244124475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683233626332343666336566333635653145002478002e4c706372656c5f6869313739002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3235002e4c706372656c5f6869313830002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e37002e4c706372656c5f6869313831004f55544c494e45445f46554e4354494f4e5f3433002e4c706372656c5f6869313832002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3231005f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e2e50616441646170746572247532302461732475323024636f72652e2e666d742e2e5772697465244754243977726974655f7374723137683230643165396434373163363833636345002e4c706372656c5f6869313833002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3130002e4c706372656c5f6869313834002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3239002478002e4c706372656c5f6869313835002e4c616e6f6e2e37363765373330626339643065633762353564333031633466663939316634612e37002e4c706372656c5f6869313836002e4c616e6f6e2e37363765373330626339643065633762353564333031633466663939316634612e38002e4c706372656c5f6869313837002e4c706372656c5f6869313838002e4c706372656c5f6869313839005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686163306665663538386664356464383945002e4c706372656c5f6869313930002e4c706372656c5f6869313931002478002e4c706372656c5f6869313932002e4c706372656c5f6869313933002e4c706372656c5f6869313935005f5a4e34636f726533666d7439466f726d6174746572337061643137686562316338636637643061663764383245002e4c706372656c5f6869313934002478005f5a4e35616c6c6f63377261775f7665633139526177566563244c54245424432441244754243867726f775f6f6e653137683934633365316232313830396530353045002478004f55544c494e45445f46554e4354494f4e5f3633002e4c706372656c5f6869313936002e4c706372656c5f6869313937002e4c706372656c5f6869313938004f55544c494e45445f46554e4354494f4e5f3734005f5a4e35616c6c6f63377261775f7665633139526177566563244c54245424432441244754243867726f775f6f6e653137686165633730373964656237303366613845002478002e4c706372656c5f6869313939002e4c706372656c5f6869323030002e4c706372656c5f6869323031002478002478004f55544c494e45445f46554e4354494f4e5f3331004f55544c494e45445f46554e4354494f4e5f3431002478005f5a4e34636f726533666d7439466f726d617474657231327061645f696e74656772616c313277726974655f7072656669783137683337333839616666333662356434623645004f55544c494e45445f46554e4354494f4e5f3535002478004f55544c494e45445f46554e4354494f4e5f3635002464002478002e4c706372656c5f6869323032002e4c706372656c5f6869323033005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686436383862616330333938363664353145002478002478002e4c706372656c5f6869323034002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3136002e4c706372656c5f6869323035002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3137002e4c706372656c5f6869323036002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3430002e4c706372656c5f6869323037002e4c706372656c5f6869323038002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e32002478005f5a4e34636f72653463686172376d6574686f647332325f244c5424696d706c2475323024636861722447542431366573636170655f64656275675f6578743137686132343334613530353436336134373045002e4c706372656c5f6869323039002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3136002e4c706372656c5f6869323130002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3135005f5a4e34636f7265337374723136736c6963655f6572726f725f6661696c3137686435646138386335343937616566663045002478002e4c706372656c5f6869323131005f5a4e34636f726537756e69636f64653132756e69636f64655f6461746131356772617068656d655f657874656e64313753484f52545f4f46465345545f52554e533137686532623237356661623466306338656245002e4c706372656c5f6869323133005f5a4e34636f726537756e69636f64653132756e69636f64655f6461746131356772617068656d655f657874656e64374f4646534554533137683230323535323237646238306232653845004f55544c494e45445f46554e4354494f4e5f3136002e4c706372656c5f6869323232002e4c706372656c5f6869323135002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3233002e4c706372656c5f6869323136002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3234002e4c706372656c5f6869323137002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3235002e4c706372656c5f6869323231002e4c706372656c5f6869323138002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3230002e4c706372656c5f6869323139002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3231002e4c706372656c5f6869323230002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3232005f5a4e34636f726537756e69636f6465397072696e7461626c6535636865636b3137683438383962313531613261343833323745002e4c706372656c5f6869323134002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3238002e4c706372656c5f6869323132002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3237002478002478005f5a4e34636f726533666d74336e756d33696d7035345f244c5424696d706c2475323024636f72652e2e666d742e2e446973706c61792475323024666f7224753230247573697a652447542433666d743137683564626334356432623963366566663945004f55544c494e45445f46554e4354494f4e5f3737004f55544c494e45445f46554e4354494f4e5f3538004f55544c494e45445f46554e4354494f4e5f3530002e4c706372656c5f6869323233002e4c706372656c5f6869323234005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683934643838353330303163306132333145002e4c706372656c5f6869323235002478002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3137005f5a4e34345f244c54242452462454247532302461732475323024636f72652e2e666d742e2e446973706c61792447542433666d743137686263333134626337646137303335396645002478005f5a4e37315f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c542449647824475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686639386261393431336237343232303945002478002e4c706372656c5f6869323236002e4c706372656c5f6869323237002e4c706372656c5f6869323238002e4c616e6f6e2e31643736626633396463333931613832313732316632663037356532326263632e30002e4c706372656c5f6869323239002e4c706372656c5f6869323330002478002e4c706372656c5f6869323331002478002e4c706372656c5f6869323333002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3139005f5a4e34636f726535736c69636535696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c3137683636353733326339653663653964656145002e4c706372656c5f6869323332005f5a4e34636f726535736c69636535696e6465783232736c6963655f696e6465785f6f726465725f6661696c3137683962356131613535613561323235353245002e4c706372656c5f6869323334002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3138005f5a4e34636f7265366f7074696f6e3133756e777261705f6661696c65643137686539396334306539373562356638306445005f5a4e37335f244c5424636f72652e2e6e756d2e2e6e6f6e7a65726f2e2e4e6f6e5a65726f244c54245424475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686135383039313032386365303762363445002478002e4c706372656c5f6869323336002e4c706372656c5f6869323335002e4c706372656c5f6869323337005f5a4e34636f726533666d74336e756d35305f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f7224753230247533322447542433666d743137683733623733396166326233383562656345002478002e4c706372656c5f6869323339002e4c706372656c5f6869323338002e4c706372656c5f6869323430002478002e4c706372656c5f6869323431002e4c706372656c5f6869323432002e4c706372656c5f6869323433002e4c706372656c5f6869323434005f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e2e50616441646170746572247532302461732475323024636f72652e2e666d742e2e577269746524475424313077726974655f636861723137686362393161353266303033633433363845002478002e4c706372656c5f6869323435002478002e4c706372656c5f6869323437002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e36002e4c706372656c5f6869323439002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e39002e4c706372656c5f6869323530002e4c706372656c5f6869323531002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3332002e4c706372656c5f6869323532002e4c706372656c5f6869323436002e4c706372656c5f6869323438005f5a4e34636f726533666d743557726974653977726974655f666d743137686336333337353631626636346534646545002478002e4c706372656c5f6869323533002478002e4c706372656c5f6869323534002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e34005f5a4e34636f72653970616e69636b696e673570616e6963313768646238353536636230623764363339634500247800247800727573745f626567696e5f756e77696e64002478002e4c706372656c5f6869323535002e4c706372656c5f6869323536002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3133004f55544c494e45445f46554e4354494f4e5f3338002478002e4c706372656c5f6869323537002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3932002e4c706372656c5f6869323538002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3137002e4c706372656c5f6869323539002e4c706372656c5f6869323630002e4c706372656c5f6869323631002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3333002e4c706372656c5f6869323632005f5a4e34636f726535736c69636535696e6465783236736c6963655f73746172745f696e6465785f6c656e5f6661696c3137683262623162343137396166313063346445002478005f5a4e34636f726535736c69636535696e6465783236736c6963655f73746172745f696e6465785f6c656e5f6661696c38646f5f70616e69633772756e74696d653137686539343231306331303833366561316645002478002e4c706372656c5f6869323633002e4c706372656c5f6869323634002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3838002478005f5a4e34636f726535736c69636535696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69633772756e74696d653137686337643463376165326563356363373445002478002e4c706372656c5f6869323635002e4c706372656c5f6869323636002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3930002478005f5a4e34636f726535736c69636535696e6465783232736c6963655f696e6465785f6f726465725f6661696c38646f5f70616e69633772756e74696d653137686333326531653337626235613337376545002478002e4c706372656c5f6869323637002e4c706372656c5f6869323638002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3933002478005f5a4e34636f7265337374723139736c6963655f6572726f725f6661696c5f72743137683336303639313438373337613565363745002478002e4c706372656c5f6869323639002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3433002e4c706372656c5f6869323730002e4c706372656c5f6869323731002e4c706372656c5f6869323732002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3438002e4c706372656c5f6869323739002e4c706372656c5f6869323830002e4c706372656c5f6869323831002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3535002e4c706372656c5f6869323733002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3537002e4c706372656c5f6869323734002e4c706372656c5f6869323735002e4c706372656c5f6869323736002e4c706372656c5f6869323737002e4c706372656c5f6869323738002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3533002478002e4c706372656c5f6869323832002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e37002e4c706372656c5f6869323833002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e39002478002e4c706372656c5f6869323834005f5a4e31376574685f72697363765f72756e74696d653570616e6963313249535f50414e49434b494e4731376866373932313966643632316137643166452e30002e4c706372656c5f6869323837002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3137002e4c706372656c5f6869323835005f5a4e37345f244c5424636f72652e2e70616e69632e2e70616e69635f696e666f2e2e50616e69634d657373616765247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683664316266363263653262346362323745002e4c706372656c5f6869323836002478002478002e4c706372656c5f6869323838002e4c706372656c5f6869323839002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3139002478002e4c706372656c5f6869323930002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3234002e4c706372656c5f6869323931002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3235002478002e4c706372656c5f6869323932002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3237002e4c706372656c5f6869323933002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3238002478005f5a4e31376574685f72697363765f72756e74696d6535616c6c6f633131616c6c6f635f6572726f723137686439366332373832306636383864633645002478002e4c706372656c5f6869323934002e4c706372656c5f6869323935002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3332002e4c706372656c5f6869323936002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3334002478002e4c706372656c5f6869343934002e4c706372656c5f6869343935002e4c706372656c5f6869343936002e4c706372656c5f6869343937002e4c706372656c5f6869343938002478002e4c706372656c5f6869323937002e4c706372656c5f6869323938002478002478002478002478002e4c706372656c5f6869323939002478002e4c706372656c5f6869333030002478002e4c706372656c5f6869333031002e4c706372656c5f6869333032002478004f55544c494e45445f46554e4354494f4e5f3335002e4c706372656c5f6869333033002e4c706372656c5f6869333034004f55544c494e45445f46554e4354494f4e5f3233004f55544c494e45445f46554e4354494f4e5f3831002e4c706372656c5f6869333037002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e35004f55544c494e45445f46554e4354494f4e5f3131004f55544c494e45445f46554e4354494f4e5f3739002e4c706372656c5f6869333038004f55544c494e45445f46554e4354494f4e5f3330002e4c706372656c5f6869333039002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3534004f55544c494e45445f46554e4354494f4e5f3438004f55544c494e45445f46554e4354494f4e5f30002e4c706372656c5f6869333135002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3530002e4c706372656c5f6869333137002e4c706372656c5f6869333138002e4c706372656c5f6869333234004f55544c494e45445f46554e4354494f4e5f3537002e4c706372656c5f6869333235002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e36004f55544c494e45445f46554e4354494f4e5f39004f55544c494e45445f46554e4354494f4e5f3638002e4c706372656c5f6869333236004f55544c494e45445f46554e4354494f4e5f3733002e4c706372656c5f6869333237002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3536002e4c706372656c5f6869333333004f55544c494e45445f46554e4354494f4e5f3730004f55544c494e45445f46554e4354494f4e5f3630002e4c706372656c5f6869333338002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3132004f55544c494e45445f46554e4354494f4e5f3334002e4c706372656c5f6869333339002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3131004f55544c494e45445f46554e4354494f4e5f3631004f55544c494e45445f46554e4354494f4e5f3830002e4c706372656c5f6869333336002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e36002e4c706372656c5f6869333337002e4c706372656c5f6869333035002e4c706372656c5f6869333036002e4c706372656c5f6869333136002e4c706372656c5f6869333334002e4c706372656c5f6869333335002e4c706372656c5f6869333131002e4c706372656c5f6869333132002e4c706372656c5f6869333133002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3132004f55544c494e45445f46554e4354494f4e5f3239002e4c706372656c5f6869333134002e4c706372656c5f6869333230002e4c706372656c5f6869333231002e4c706372656c5f6869333232002e4c706372656c5f6869333233002e4c706372656c5f6869333239002e4c706372656c5f6869333330002e4c706372656c5f6869333331002e4c706372656c5f6869333332002e4c706372656c5f6869333139002e4c706372656c5f6869333238002e4c706372656c5f6869333130002478002e4c706372656c5f6869333430002e4c706372656c5f6869333431002e4c706372656c5f6869333433002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3633002e4c706372656c5f6869333435002e4c706372656c5f6869333436002e4c706372656c5f6869333437004f55544c494e45445f46554e4354494f4e5f33004f55544c494e45445f46554e4354494f4e5f32004f55544c494e45445f46554e4354494f4e5f31004f55544c494e45445f46554e4354494f4e5f34002e4c706372656c5f6869333533002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3634002e4c706372656c5f6869333534002e4c706372656c5f6869333535002e4c706372656c5f6869333631004f55544c494e45445f46554e4354494f4e5f3735002e4c706372656c5f6869333635002e4c706372656c5f6869333636002e4c706372656c5f6869333633002e4c706372656c5f6869333634002e4c706372656c5f6869333432002e4c706372656c5f6869333434002e4c706372656c5f6869333632002e4c706372656c5f6869333439002e4c706372656c5f6869333530002e4c706372656c5f6869333531002e4c706372656c5f6869333532002e4c706372656c5f6869333537002e4c706372656c5f6869333538002e4c706372656c5f6869333539002e4c706372656c5f6869333630002e4c706372656c5f6869333536002e4c706372656c5f6869333438002478002e4c706372656c5f6869333637002e4c706372656c5f6869333638002e4c706372656c5f6869333731002e4c706372656c5f6869333732002e4c706372656c5f6869333733002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3632002e4c706372656c5f6869333734002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3630002e4c706372656c5f6869333830002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3539002e4c706372656c5f6869333832002e4c706372656c5f6869333833002e4c706372656c5f6869333834002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3631002e4c706372656c5f6869333930002e4c706372656c5f6869333931002e4c706372656c5f6869333932002e4c706372656c5f6869333933002e4c706372656c5f6869333939002e4c706372656c5f6869343034002e4c706372656c5f6869343035002e4c706372656c5f6869343032002e4c706372656c5f6869343033002e4c706372656c5f6869333639002e4c706372656c5f6869333730002e4c706372656c5f6869333831002e4c706372656c5f6869343030002e4c706372656c5f6869343031002e4c706372656c5f6869333736002e4c706372656c5f6869333737002e4c706372656c5f6869333738002e4c706372656c5f6869333739002e4c706372656c5f6869333836002e4c706372656c5f6869333837002e4c706372656c5f6869333838002e4c706372656c5f6869333839002e4c706372656c5f6869333935002e4c706372656c5f6869333936002e4c706372656c5f6869333937002e4c706372656c5f6869333938002e4c706372656c5f6869333835002e4c706372656c5f6869333934002e4c706372656c5f6869333735002478002e4c706372656c5f6869343036002478002e4c706372656c5f6869343037002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e3134002e4c706372656c5f6869343038002e4c706372656c5f6869343039005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683037356436303430313763663332663045002e4c706372656c5f6869343130002e4c706372656c5f6869343131002478002e4c706372656c5f6869343133002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e3138002e4c706372656c5f6869343134002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e3139002e4c706372656c5f6869343135005f5a4e36345f244c5424636f72652e2e616c6c6f632e2e6c61796f75742e2e4c61796f7574247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683861363330326565366136326435306545002e4c706372656c5f6869343136002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e3230002e4c706372656c5f6869343137002e4c706372656c5f6869343138002e4c706372656c5f6869343132002e4c706372656c5f6869343139002478002e4c706372656c5f6869343230002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e39002e4c706372656c5f6869343231002e4c706372656c5f6869343232005f5a4e34636f726533666d74336e756d35325f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f7224753230247573697a652447542433666d7431376838353034663935626432386266643063452e373132002e4c706372656c5f6869343233002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e3131002e4c706372656c5f6869343234005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683639336139646436626431356639313645002e4c706372656c5f6869343235002e4c706372656c5f6869343236002e4c43504939315f31002464002478002e4c706372656c5f6869343237002e4c706372656c5f6869343238002e4c706372656c5f6869343239002e4c706372656c5f6869343330002e4c706372656c5f6869343331002e4c616e6f6e2e61643165663263346535663237306334633632386237613637626132623462322e3430002478002e4c706372656c5f6869343332002e4c706372656c5f6869343333002478002e4c706372656c5f6869343334002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e32002e4c706372656c5f6869343335002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e31002e4c706372656c5f6869343336002e4c706372656c5f6869343337002478002478002e4c706372656c5f6869343338002478002e4c706372656c5f6869343339002e4c706372656c5f6869343430002e4c706372656c5f6869343431002e4c706372656c5f6869343432002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e3132002478002478002478002e4c706372656c5f6869343433002e4c706372656c5f6869343434002e4c706372656c5f6869343435002e4c706372656c5f6869343436002478002478002e4c706372656c5f6869343437002e4c706372656c5f6869343439002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e32004f55544c494e45445f46554e4354494f4e5f3332002e4c706372656c5f6869343438002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e31002478002e4c706372656c5f6869343530002e4c706372656c5f6869343532002e4c706372656c5f6869343531002478002e4c706372656c5f6869343533002e4c706372656c5f6869343534002e4c706372656c5f6869343536002e4c706372656c5f6869343537002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e39002e4c706372656c5f6869343535002478004f55544c494e45445f46554e4354494f4e5f3536002e4c706372656c5f6869343538002e4c706372656c5f6869343539004f55544c494e45445f46554e4354494f4e5f3534002e4c706372656c5f6869343630002e4c706372656c5f6869343631002478002e4c706372656c5f6869343638002e4c706372656c5f6869343632002e4c706372656c5f6869343633002e4c706372656c5f6869343637002e4c706372656c5f6869343634002e4c706372656c5f6869343635002e4c706372656c5f6869343636005f5a4e313174696e795f6b656363616b376b656363616b66376b656363616b663137683061373137613762386231373738303645002478002e4c706372656c5f6869343639002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e3131002478002e4c706372656c5f6869343735002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e38002e4c706372656c5f6869343736002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e31002e4c706372656c5f6869343737002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e32002e4c706372656c5f6869343738002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e35002e4c706372656c5f6869343739002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e36002e4c706372656c5f6869343730002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e37002e4c706372656c5f6869343731002e4c706372656c5f6869343732002e4c706372656c5f6869343733002e4c706372656c5f6869343734002478002e4c706372656c5f6869343834002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e34002e4c706372656c5f6869343933002e4c706372656c5f6869343839002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e3130002e4c706372656c5f6869343930002e4c706372656c5f6869343931002e4c706372656c5f6869343932002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e33002e4c706372656c5f6869343835002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e39002e4c706372656c5f6869343836002e4c706372656c5f6869343837002e4c706372656c5f6869343838002e4c706372656c5f6869343830002e4c706372656c5f6869343831002e4c706372656c5f6869343832002e4c706372656c5f6869343833002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002464002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e39002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3130002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3131002464002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3138002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3439002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3533002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3933002464002464002e4c616e6f6e2e31626666343133336464393939303136613161376338616431363338316438392e3935002464002464002464002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e31002464002464002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e30002464002464002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e32002464002464002464002464002464002464002464002e4c616e6f6e2e33396636323538656361313335633332616132353036353361616264356464612e30002464002464002464002464002464002464002464002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e33002464002464002464002464002464002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3137002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3236002464002464002464002464002464002e4c616e6f6e2e61643165663263346535663237306334633632386237613637626132623462322e3338002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3132002464002464002464002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3434002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3437002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3439002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3530002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3532002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3534002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3536002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3836002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3837002464002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3931002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3932002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e38002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3130002464002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3138002464002464002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3233002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3236002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3239002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3330002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3331002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3333002464002464002464002464002464002e4c616e6f6e2e36663837613435383533393638363634373733396633623134363730316339332e30002464002e4c616e6f6e2e31336237336161633865623835323364663761373634343966353134613561662e35002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e36663961653834633965636364666565663239343239363765623264373633342e30002464002464002464002464002464002464002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e30002464002464002464002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e33002464002464002e4c616e6f6e2e63366166363935656636656637343961376636666533383462343965343732662e38002464002464002464002464002464002e4c616e6f6e2e35643164353565393536373537663730366430393831636432336230396332612e3000246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303500247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303400246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303300246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303000246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303200246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303100246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303600246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303700246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303800247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303900246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313000247800247800247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313100246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313200247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313300246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313400247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e3135002464002464006d61696e0044656661756c7448616e646c657200457863657074696f6e48616e646c65720044656661756c74457863657074696f6e48616e646c65720044656661756c74496e7465727275707448616e646c6572005f5f455843455054494f4e53005f5f494e5445525255505453005f73746172745f72757374005f73746172745f747261705f727573740064656661756c745f6d705f686f6f6b0064656661756c745f7072655f696e69740064656661756c745f73657475705f696e7465727275707473005f7374617274005f5f676c6f62616c5f706f696e74657224005f6d61785f686172745f69640061626f7274005f686172745f737461636b5f73697a65005f737461636b5f73746172740064656661756c745f73746172745f74726170006d656d637079006d656d736574005f5a4e34636f726535736c69636532395f244c5424696d706c24753230242475356224542475356424244754243135636f70795f66726f6d5f736c6963653137683335316238316135373762343963373645006d656d636d70005f6d705f686f6f6b005f5f7072655f696e6974005f7364617461005f6564617461005f736964617461005f73627373005f65627373005f73657475705f696e7465727275707473005f73746172745f7472617000496e737472756374696f6e4d6973616c69676e656400496e737472756374696f6e4661756c7400496c6c6567616c496e737472756374696f6e00427265616b706f696e74004c6f61644d6973616c69676e6564004c6f61644661756c740053746f72654d6973616c69676e65640053746f72654661756c740055736572456e7643616c6c0053757065727669736f72456e7643616c6c004d616368696e65456e7643616c6c00496e737472756374696f6e506167654661756c74004c6f6164506167654661756c740053746f7265506167654661756c740053757065727669736f72536f6674004d616368696e65536f66740053757065727669736f7254696d6572004d616368696e6554696d65720053757065727669736f7245787465726e616c004d616368696e6545787465726e616c005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d7365743137686638616163366630666264326236653245005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d6370793137686433393130346665666439323036666645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d636d703137686662353631346634623861343134616445005f7374657874005f686561705f73697a65005f7368656170005f6568656170005f65737461636b005f73737461636b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000800000002000000000000000000308000000000700200000000000000000000000000000000000000000000010000000000000000000000000000000d00000001000000060000000000000000003080000000000010000000000000649e00000000000000000000000000000800000000000000000000000000000013000000010000001200000000000000689e30800000000068ae00000000000070240000000000000000000000000000080000000000000000000000000000001b000000010000000200000000000000d8c2308000000000d8d2000000000000000000000000000000000000000000000800000000000000000000000000000021000000080000000300000000000000d8c2308000000000d8d20000000000001000a0000000000000000000000000000800000000000000000000000000000026000000080000000300000000000000e8c2d08000000000d8d200000000000000000000000000000000000000000000010000000000000000000000000000002c000000080000000300000000000000000010800000000000e0000000000000000020000000000000000000000000000100000000000000000000000000000033000000010000003000000000000000000000000000000000e000000000000093000000000000000000000000000000010000000000000001000000000000003c000000030000700000000000000000000000000000000093e000000000000034000000000000000000000000000000010000000000000000000000000000004e0000000200000000000000000000000000000000000000c8e0000000000000d0890000000000000c0000008805000008000000000000001800000000000000560000000300000000000000000000000000000000000000986a0100000000006800000000000000000000000000000001000000000000000000000000000000600000000300000000000000000000000000000000000000006b0100000000006b6c000000000000000000000000000001000000000000000000000000000000821030800000000018000000000000000800000000000000841030800000000070113080000000006c103080000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f737472696e672e7273481a32800000000080000000000000008d0500001b0000006361706163697479206f766572666c6f7700000000000000e01a32800000000011000000000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f616c6c6f632f7372632f7261775f7665632e727300000000000000081b32800000000081000000000000002802000011000000496e76616c696448657843686172616374657263696e6465784f64644c656e677468496e76616c6964537472696e674c656e6774682f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f636f6e73742d6865782d312e31342e302f7372632f6c69622e72730000dd1b328000000000610000000000000032020000130000002f686f6d652f636861726d66756c30782f2e636172676f2f72656769737472792f7372632f696e6465782e6372617465732e696f2d313934396366386336623562353537662f616c6c6f792d736f6c2d74797065732d302e382e32352f7372632f6162692f656e636f6465722e72734c6f6744617461746f70696373307830303031303230333034303530363037303830393130313131323133313431353136313731383139323032313232323332343235323632373238323933303331333233333334333533363337333833393430343134323433343434353436343734383439353035313532353335343535353635373538353936303631363236333634363536363637363836393730373137323733373437353736373737383739383038313832383338343835383638373838383939303931393239333934393539363937393839392f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f666d742f6d6f642e727300009e1d3280000000008000000000000000a00a0000260000009e1d3280000000008000000000000000a90a00001a00000028292e2e2f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f756e69636f64652f7072696e7461626c652e72730000541e3280000000008a000000000000001a00000036000000541e3280000000008a000000000000000a0000002b000000000601010301040205070702080809020a050b020e04100111021205131c140115021702190d1c051d081f0124016a046b02af03b102bc02cf02d102d40cd509d602d702da01e005e102e704e802ee20f004f802fa04fb010c273b3e4e4f8f9e9e9f7b8b9396a2b2ba86b1060709363d3e56f3d0d1041418363756577faaaeafbd35e01287898e9e040d0e11122931343a4546494a4e4f64658a8c8d8fb6c1c3c4c6cbd65cb6b71b1c07080a0b141736393aa8a9d8d909379091a8070a3b3e66698f92116f5fbfeeef5a62f4fcff53549a9b2e2f2728559da0a1a3a4a7a8adbabcc4060b0c151d3a3f4551a6a7cccda007191a22253e3fe7ecefffc5c604202325262833383a484a4c50535556585a5c5e606365666b73787d7f8aa4aaafb0c0d0aeaf6e6fddde935e227b0503042d036603012f2e80821d03310f1c0424091e052b0544040e2a80aa06240424042808340b4e03340c813709160a08183b45390363080930160521031b05014038044b052f040a070907402027040c0936033a051a07040c07504937330d33072e080a0626031d080280d0521003372c082a161a261c1417094e042409440d19070a0648082709750b423e2a063b050a06510601051003050b5908021d621e48080a80a65e22450b0a060d133a060a06141c2c041780b93c64530c48090a46451b4808530d49070a80b6220e0a06460a1d03474937030e080a0639070a813619073b031d55010f320d839b66750b80c48a4c630d843010160a8f9b0582479ab93a86c68239072a045c06260a460a28051381b03a80c65b654b0439071140050b020e97f80884d6290aa2e781330f011d060e0408818c89046b050d030907108f6080fa0681b44c4709743c80f60a73087015467a140c140c570919808781470385420f1584501f060680d52b053e2101702d031a040281401f113a050181d02a80d62b040181e080f7294c040a04028311444c3d80c23c06010455051b3402810e2c04640c560a80ae381d0d2c040907020e06809a83d80411030d0377045f060c04010f0c0438080a0628082c04023e81540c1d030a0538071c06090780fa840600010305050606020706080709110a1c0b190c1a0d100e0c0f0410031212130916011704180119031a071b011c021f1620032b032d0b2e01300431023201a704a902aa04ab08fa02fb05fd02fe03ff09ad78798b8da23057588b8c901cdd0e0f4b4cfbfc2e2f3f5c5d5fe2848d8e9192a9b1babbc5c6c9cadee4e5ff00041112293134373a3b3d494a5d848e92a9b1b4babbc6cacecfe4e500040d0e11122931343a3b4546494a5e646584919b9dc9cecf0d11293a3b4549575b5c5e5f64658d91a9b4babbc5c9dfe4e5f00d11454964658084b2bcbebfd5d7f0f183858ba4a6bebfc5c7cfdadb4898bdcdc6cecf494e4f57595e5f898e8fb1b6b7bfc1c6c7d71116175b5cf6f7feff806d71dedf0e1f6e6f1c1d5f7d7eaeaf4dbbbc16171e1f46474e4f585a5c5e7e7fb5c5d4d5dcf0f1f572738f747596262e2fa7afb7bfc7cfd7df9a00409798308f1fcecfd2d4ceff4e4f5a5b07080f10272feeef6e6f373d3f42459091536775c8c9d0d1d8d9e7feff00205f2282df048244081b04061181ac0e80ab051f08811c03190801042f043404070301070607110a500f1207550703041c0a090308030703020303030c0405030b06010e15054e071b0757070206170c500443032d03010411060f0c3a041d255f206d046a2580c80582b0031a0682fd03590716091809140c140c6a060a061a0659072b05460a2c040c040103310b2c041a060b0380ac060a062f3180f4083c030f033e0538082b0582ff1118082f112d03210f210f808c04829a160b158894052f053b07020e180980be22740c80d61a81100580e109f29e033709815c1480b80880dd153b030a06380846080c06740b1e035a0459098083181c0a16094c04808a06aba40c170431a10481da26070c050580a61081f50701202a064c04808d0480be031b030f0d2f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f756e69636f64652f756e69636f64655f646174612e72730000b9243280000000008d000000000000004d00000028000000b9243280000000008d0000000000000059000000160000000003000083042000910560005d13a0001217201f0c20601fef2c202b2a30a02b6fa6602c02a8e02c1efbe02d00fe20369eff6036fd01e136010a2137240de137ab0e61392f18e139301ce14af31ee14e4034a1521e61e153f06a61544f6fe1549dbc615500cf615665d1a15600da215700e0a158aee2215aece4e15bd0e8615c2000ee5cf0017f5d00700007002d0101010201020101480b30151001650702060202010423011e1b5b0b3a09090118040109010301052b033b092a180120370101010408040103070a021d013a0101010204080109010a021a010202390104020402020303011e0203010b0239010405010204011402160601013a0101020104080107030a021e013b0101010c01090128010301370101030503010407020b021d013a01020201010303010407020b021c02390201010204080109010a021d0148010401020301010801510102070c08620102090b0749021b0101010101370e01050102050b0124090166040106010202021902040310040d01020206010f01000300041c031d021e02400201070801020b09012d030101750222017603040209010603db0202013a010107010101010208060a0201301f3104300a040326090c02200402063801010203010105380802029803010d0107040106010302c6400001c32100038d016020000669020004010a200250020001030104011902050197021a120d012608190b01012c03300102040202020124014306020202020c0108012f01330101030202050201012a020801ee010201040100010010101000020001e201950500030102050428030401a5020004410500024f04460b31047b01360f290102020a033104020207013d03240501083e010c0234090101080402015f030204060102019d01030815023902010101010c0109010e07030543010206010102010103040301010e025508020301011701510102060101020101020102eb010204060201021b025508020101026a0101010208650101010204010500090102f5010a040401900402020401200a280602040801090602032e0d010200070106010152160207010201027a06030101020107010148020301010100020b023405050317010001060f000c030300053b0700013f0451010b020002002e021700050306080802071e0494030037043208010e011605010f000701110207010201056401a00700013d040004fe0200076d07006080f000202831203c3c20000001000000000000000000000000000000ef2832800000000007000000000000002829328000000000010000000000000029207b202c20207b0a2c0a7d207d28280a0a5b5d000000000000000000000000180000000000000008000000000000000430308000000000c431308000000000643330800000000063616c6c656420604f7074696f6e3a3a756e77726170282960206f6e206120604e6f6e65602076616c7565696e646578206f7574206f6620626f756e64733a20746865206c656e20697320206275742074686520696e646578206973200000009b293280000000002000000000000000bb2932800000000012000000000000003a2000000000000001000000000000000000000000000000f02932800000000002000000000000005b2e2e2e5d626567696e203c3d20656e64202860000000001d2a3280000000000e00000000000000ea3d3080000000000400000000000000603e30800000000010000000000000002b2a32800000000001000000000000006279746520696e64657820206973206e6f742061206368617220626f756e646172793b20697420697320696e736964652029206f66206000702a3280000000000b000000000000007b2a3280000000002600000000000000b03b3080000000000800000000000000a12a32800000000006000000000000002b2a3280000000000100000000000000206973206f7574206f6620626f756e6473206f6620600000702a3280000000000b00000000000000f82a32800000000016000000000000002b2a32800000000001000000000000002f686f6d652f636861726d66756c30782f2e7275737475702f746f6f6c636861696e732f6e696768746c792d323032352d30312d30372d7838365f36342d756e6b6e6f776e2d6c696e75782d676e752f6c69622f727573746c69622f7372632f727573742f6c6962726172792f636f72652f7372632f7374722f6d6f642e7273402b3280000000008000000000000000f40000002c000000206f7574206f662072616e676520666f7220736c696365206f66206c656e67746820000000000000803e3080000000001000000000000000d82b3280000000002200000000000000736c69636520696e64657820737461727473206174202062757420656e6473206174200000000000202c3280000000001600000000000000362c3280000000000d00000000000000696e7465726e616c206572726f723a20656e746572656420756e726561636861626c6520636f64652f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f6572726f722e727300000000902c3280000000004400000000000000130000000500000050616e69632068616e646c6572206861732070616e69636b6564212f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f6c69622e72730000000b2d32800000000042000000000000003a0000000500000064656661756c742068616e646c657200682d3280000000000f000000000000000b2d32800000000042000000000000008d00000005000000657863657074696f6e206e68616e646c6572000000000000a02d32800000000012000000000000000b2d328000000000420000000000000093000000050000006d656d6f727920616c6c6f636174696f6e206f6620206279746573207769746820616c69676e6d656e7420206661696c6564000000000000e02d3280000000001500000000000000f52d32800000000016000000000000000b2e32800000000007000000000000002f686f6d652f636861726d66756c30782f4465736b746f702f70726f6a656374732f7235352f6574682d72697363762d72756e74696d652f7372632f616c6c6f632e727300000000482e328000000000440000000000000043000000050000005e383080000000005e383080000000005e383080000000005e383080000000005e383080000000005e383080000000005e383080000000005e383080000000005e383080000000005e3830800000000000000000000000005e383080000000005e383080000000005e3830800000000000000000000000005e3830800000000000000000000000003a3830800000000000000000000000003a3830800000000000000000000000003a3830800000000000000000000000003a3830800000000000000000000000003a3830800000000000000000000000003a383080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c696e6b65723a204c4c442031392e312e3620282f636865636b6f75742f7372632f6c6c766d2d70726f6a6563742f6c6c766d2035393531326230303237333832393832336461373430353064333733623864343664626361353538290072757374632076657273696f6e20312e38362e302d6e696768746c79202832343364326361346420323032352d30312d30362900004133000000726973637600012900000004100572763634693270315f6d3270305f613270315f633270305f7a6d6d756c3170300000000000000000000000000000000000000000000000000000010000000400f1ff000000000000000000000000000000001f00000000000200000030800000000000000000000000002200000000000200100030800000000000000000000000002500000000000200180030800000000000000000000000003000000000000200180030800000000000000000000000003500000000000200180030800000000000000000000000003800000000000200900030800000000000000000000000004400000000000200b80030800000000000000000000000005000000000000200d000308000000000000000000000000055000000000002004801308000000000000000000000000058000000000002003a0230800000000000000000000000005b000000020002003e023080000000009c00000000000000a1000000000002003e023080000000000000000000000000a40000000000020048023080000000000000000000000000b000000001000500882f3280000000000100000000000000d10000000000020050023080000000000000000000000000dd00000001000500902f3280000000000800a000000000001501000000000200b80230800000000000000000000000002101000001000300003d30800000000018000000000000004b01000000000200c40230800000000000000000000000005701000001000300183d30800000000018000000000000008101000002000200b0143080000000001400000000000000b501000002000200da023080000000007601000000000000ff01000000000200da02308000000000000000000000000002020000000002004c0330800000000000000000000000000f02000001000300303d30800000000007000000000000003902000000000200a00330800000000000000000000000004502000000000200a80330800000000000000000000000005102000000000200d80330800000000000000000000000005d02000000000200400430800000000000000000000000006902000001000300401c328000000000180000000000000093020000020002005004308000000000ae00000000000000db0200000000020050043080000000000000000000000000de02000000000200ba043080000000000000000000000000eb02000000000300d03b3080000000000000000000000000ee02000000000300e83b3080000000000000000000000000f702000000000300e83b3080000000000000000000000000fa02000002000200fe0430800000000078000000000000004203000000000200fe04308000000000000000000000000045030000000002000605308000000000000000000000000052030000000002001a0530800000000000000000000000005f03000000000200300530800000000000000000000000006c03000002000200b02c308000000000ac01000000000000d3030000000002003e053080000000000000000000000000e0030000020002005c2e308000000000a8010000000000003d04000000000200480530800000000000000000000000004a04000001000300f82832800000000030000000000000007504000002000200521a30800000000056010000000000009c040000020002007605308000000000d400000000000000e40400000000020076053080000000000000000000000000e70400000000020092053080000000000000000000000000f404000001000300043f3080000000000a000000000000001f05000000000200a80530800000000000000000000000002c050000010003000e3f30800000000006000000000000005705000000000200b005308000000000000000000000000064050000020002006609308000000000b600000000000000c20500000200020020323080000000004401000000000000ff05000000000200c60530800000000000000000000000000c06000001000300143f3080000000000e000000000000003706000000000200ce0530800000000000000000000000004406000002000200422930800000000016000000000000008c0600000000020006063080000000000000000000000000990600000100030034293280000000000200000000000000c40600000000020018063080000000000000000000000000d10600000000020032063080000000000000000000000000de060000010003003329328000000000010000000000000009070000020002004a06308000000000900000000000000051070000000002004a06308000000000000000000000000054070000000002005c0630800000000000000000000000006107000001000300f53e3080000000000f000000000000008c070000000002007206308000000000000000000000000099070000000002007a063080000000000000000000000000a607000000000200b2063080000000000000000000000000b307000000000200c4063080000000000000000000000000c007000002000200da06308000000000fc000000000000001c08000000000200da0630800000000000000000000000001f080000000002000a0730800000000000000000000000002c08000001000300d61c328000000000c8000000000000005608000002000200643a30800000000018000000000000006b08000002000200923a3080000000000e00000000000000800800000200020072393080000000001000000000000000940800000200020060393080000000001200000000000000a8080000000002004a073080000000000000000000000000b508000001000300d41c3280000000000200000000000000df0800000000020082073080000000000000000000000000ec08000000000200aa073080000000000000000000000000f9080000020002007c3a30800000000016000000000000000e09000002000200a81b308000000000a2010000000000004709000002000200d607308000000000a200000000000000a609000000000200d6073080000000000000000000000000a909000002000200dc2a3080000000000c010000000000000e0a000002000200a03a3080000000000e00000000000000230a000002000200243a3080000000001000000000000000380a000002000200a83930800000000012000000000000004c0a00000000020024083080000000000000000000000000590a0000000002005c083080000000000000000000000000660a00000200020078083080000000003000000000000000bc0a00000000020078083080000000000000000000000000bf0a000002000200a8083080000000003400000000000000ff0a000000000200a8083080000000000000000000000000020b000002000200f4333080000000006200000000000000350b000002000200dc083080000000004e00000000000000740b000000000200dc083080000000000000000000000000810b000000000200dc083080000000000000000000000000840b000000000200e4083080000000000000000000000000910b000000000200180930800000000000000000000000009e0b000001000300503f3080000000001800000000000000c90b0000020002002a093080000000003c00000000000000020c0000000002002a093080000000000000000000000000050c0000000002003c093080000000000000000000000000120c0000020002000014308000000000b000000000000000560c00000000020066093080000000000000000000000000590c0000000002007c093080000000000000000000000000660c000001000300e03d3080000000000600000000000000910c000000000200940930800000000000000000000000009e0c0000000002009c093080000000000000000000000000ab0c000000000200b2093080000000000000000000000000b80c000001000300fe3d3080000000000500000000000000e30c000000000200ba093080000000000000000000000000f00c000000000200f2093080000000000000000000000000fd0c000000000200040a30800000000000000000000000000a0d0000020002001c0a30800000000096030000000000006b0d0000000002001c0a30800000000000000000000000006e0d000000000200400a30800000000000000000000000007b0d000000000300283c3080000000000000000000000000850d000000000200500a30800000000000000000000000008a0d0000000002005c0a3080000000000000000000000000970d000001000300033e3080000000000d00000000000000c20d000000000200740a3080000000000000000000000000cf0d000001000300103e3080000000000d00000000000000fa0d0000000002007c0a3080000000000000000000000000070e0000020002003e1a3080000000001400000000000000650e000000000200920a3080000000000000000000000000720e0000000002009a0a30800000000000000000000000007f0e00000200020000163080000000001400000000000000c70e000000000200d80a3080000000000000000000000000d40e000000000200e20a3080000000000000000000000000d90e000000000200e80a3080000000000000000000000000e60e000001000300393e3080000000000d00000000000000110f000000000200f40a3080000000000000000000000000160f000000000200f80a3080000000000000000000000000230f000001000300e43e3080000000000c000000000000004e0f000000000200000b30800000000000000000000000005b0f0000020002001015308000000000f000000000000000a30f0000000002000c0b3080000000000000000000000000a80f000000000200100b3080000000000000000000000000b50f000001000300243e3080000000000700000000000000e00f000000000200180b3080000000000000000000000000ed0f000000000200240b3080000000000000000000000000f20f0000000002002a0b3080000000000000000000000000ff0f0000010003002b3e3080000000000e000000000000002a10000000000200360b30800000000000000000000000002f10000000000200440b30800000000000000000000000003c10000001000300c83e3080000000000a0000000000000067100000000002005c0b30800000000000000000000000007410000000000200640b30800000000000000000000000008110000002000200e2143080000000001400000000000000c9100000000002007a0b3080000000000000000000000000d610000001000300d23e30800000000003000000000000000111000000000200820b30800000000000000000000000000e11000002000200c218308000000000b8000000000000005611000000000200c00b30800000000000000000000000006311000000000200ca0b30800000000000000000000000006811000000000200d00b308000000000000000000000000075110000010003001d3e3080000000000700000000000000a011000000000200e60b3080000000000000000000000000a511000000000200ea0b3080000000000000000000000000b211000001000300463e3080000000001600000000000000dd11000000000200f20b3080000000000000000000000000ea110000020002001416308000000000fe000000000000003212000000000200fe0b30800000000000000000000000003712000000000200100c30800000000000000000000000004412000000000200280c30800000000000000000000000005112000000000200300c30800000000000000000000000005e12000000000200460c30800000000000000000000000006b12000001000300c03e308000000000050000000000000096120000000002004e0c3080000000000000000000000000a312000000000200640c3080000000000000000000000000b012000001000300c53e3080000000000300000000000000db120000000002006c0c3080000000000000000000000000e812000000000200a40c3080000000000000000000000000f512000000000200ae0c3080000000000000000000000000fa12000000000200b20c30800000000000000000000000000713000001000300f03e30800000000005000000000000003213000000000200ba0c30800000000000000000000000003f130000020002002a1a30800000000014000000000000008713000002000200c420308000000000c400000000000000cd13000000000200de0c3080000000000000000000000000d213000000000200ec0c3080000000000000000000000000df13000001000300d53e3080000000000f000000000000000a14000000000200040d308000000000000000000000000017140000000002000c0d30800000000000000000000000002414000000000200220d308000000000000000000000000031140000000002002a0d30800000000000000000000000003e14000000000200620d30800000000000000000000000004b14000000000200740d30800000000000000000000000005814000000000200840d30800000000000000000000000006514000000000200940d30800000000000000000000000007214000000000200a40d30800000000000000000000000007f14000000000300283c30800000000000000000000000008214000000000200b20d3080000000000000000000000000851400000200020032383080000000000800000000000000b9140000020002001a0e3080000000004a020000000000000915000000000200f60d30800000000000000000000000001615000001000300683f308000000000b0da01000000000041150000020002001a13308000000000e60000000000000088150000020002000e383080000000002400000000000000c1150000000002001a0e3080000000000000000000000000c415000000000200ca0e3080000000000000000000000000d115000001000300a83d3080000000001800000000000000fb15000000000200100f30800000000000000000000000000816000001000300e83c308000000000180000000000000032160000000002004e1030800000000000000000000000003f16000001000300d03c3080000000001800000000000000691600000200020056343080000000000800000000000000ac1600000200020064103080000000000800000000000000c71600000000020064103080000000000000000000000000cc1600000000020064103080000000000000000000000000cf1600000200020082383080000000000e00000000000000d8160000020002006c10308000000000160000000000000009170000000002006c1030800000000000000000000000000c17000000000200721030800000000000000000000000001917000001000300181a328000000000300000000000000043170000020002008210308000000000020000000000000090170000000002008210308000000000000000000000000093170000020002008410308000000000ec00000000000000f11700000000020084103080000000000000000000000000f417000002000200ba3930800000000010000000000000000818000002000200ca3930800000000014000000000000001c18000000000200ec10308000000000000000000000000029180000000002002011308000000000000000000000000036180000000002002811308000000000000000000000000043180000000002005e1130800000000000000000000000005018000001000300901b32800000000018000000000000007a180000020002007011308000000000aa01000000000000da1800000000020070113080000000000000000000000000dd1800000000020098113080000000000000000000000000ea18000001000300c81a328000000000180000000000000014190000000002009a1230800000000000000000000000002119000000000200cc1230800000000000000000000000002f19000000000200d41230800000000000000000000000003d19000000000200081330800000000000000000000000004b190000000002001a1330800000000000000000000000004e19000000000200821330800000000000000000000000005c19000000000200b41330800000000000000000000000006a19000000000200bc1330800000000000000000000000007819000000000200ee133080000000000000000000000000861900000000020000143080000000000000000000000000891900000000020030143080000000000000000000000000971900000000020064143080000000000000000000000000a5190000000002006c143080000000000000000000000000b319000002000200563a3080000000000e00000000000000c819000000000200b0143080000000000000000000000000cb19000002000200c4143080000000001e00000000000000041a000002000200f61430800000000008000000000000003c1a000000000200c41430800000000000000000000000003f1a000000000200c81430800000000000000000000000004d1a000001000300f81a3280000000001000000000000000771a000002000200343a30800000000010000000000000008c1a000002000200ac333080000000001600000000000000bd1a000000000200e2143080000000000000000000000000c01a00000200020088213080000000007202000000000000061b000000000200f6143080000000000000000000000000091b000002000200fe1430800000000012000000000000004a1b000000000200fe1430800000000000000000000000004d1b00000000020010153080000000000000000000000000501b0000000002002c1530800000000000000000000000005e1b000001000300c11b3280000000000900000000000000891b00000000020046153080000000000000000000000000971b000001000300a81b3280000000001300000000000000c11b0000000002005c153080000000000000000000000000cf1b000001000300bb1b3280000000000100000000000000fa1b00000000020064153080000000000000000000000000081c000002000200282830800000000076000000000000004f1c0000000002007c1530800000000000000000000000005d1c000001000300bc1b3280000000000500000000000000881c00000000020084153080000000000000000000000000961c0000020002009e28308000000000a400000000000000de1c000000000200b8153080000000000000000000000000ec1c000000000200ca153080000000000000000000000000fa1c000001000300ca1b3280000000001300000000000000251d000000000200e4153080000000000000000000000000331d00000000020000163080000000000000000000000000361d00000000020014163080000000000000000000000000391d00000000020046163080000000000000000000000000471d00000000020086163080000000000000000000000000551d000000000200be163080000000000000000000000000631d000000000200e6163080000000000000000000000000711d0000020002001217308000000000b001000000000000d01d00000000020012173080000000000000000000000000d31d00000000020042173080000000000000000000000000e11d0000010003003a2932800000000001000000000000000c1e000000000200621730800000000000000000000000001a1e0000010003002c293280000000000200000000000000441e00000000020072173080000000000000000000000000521e00000200020082393080000000002600000000000000661e000000000200f8173080000000000000000000000000741e000001000300392932800000000001000000000000009f1e0000020002000430308000000000c001000000000000071f00000000020078183080000000000000000000000000151f00000100030031293280000000000200000000000000401f000000000200961830800000000000000000000000004e1f0000010003003b293280000000000100000000000000791f000000000200c21830800000000000000000000000007c1f000000000200dc1830800000000000000000000000008a1f000001000300c71c3280000000000700000000000000b41f000000000200f2183080000000000000000000000000c21f000001000300ce1c3280000000000600000000000000ec1f000000000200fa183080000000000000000000000000fa1f0000000002001019308000000000000000000000000008200000000002001819308000000000000000000000000016200000020002007a19308000000000b0000000000000005e20000000000200501930800000000000000000000000006c20000000000200621930800000000000000000000000007a200000000002007a1930800000000000000000000000007d200000000002008e1930800000000000000000000000008b20000000000200961930800000000000000000000000009920000000000200d4193080000000000000000000000000a720000002000200981d3080000000002403000000000000d620000000000200161a3080000000000000000000000000e4200000000002002a1a3080000000000000000000000000e7200000000002003e1a3080000000000000000000000000ea20000000000200521a3080000000000000000000000000ed20000002000200f23930800000000014000000000000000121000002000200443a30800000000012000000000000001621000000000200a81b308000000000000000000000000019210000020002004a1d3080000000004e000000000000006021000002000200063a3080000000001e0000000000000074210000000002004a1d30800000000000000000000000007721000000000200981d30800000000000000000000000007a21000000000200321f308000000000000000000000000088210000000002003a1f30800000000000000000000000009621000002000200bc203080000000000800000000000000de21000000000200bc203080000000000000000000000000e121000000000200c4203080000000000000000000000000e421000000000200fa203080000000000000000000000000f221000001000300362932800000000001000000000000001d22000000000200162130800000000000000000000000002b220000010003003729328000000000020000000000000056220000000002004a2130800000000000000000000000006422000001000300402932800000000030000000000000008f22000000000200622130800000000000000000000000009d2200000000020078213080000000000000000000000000ab2200000100030028293280000000000100000000000000d52200000000020088213080000000000000000000000000d822000002000200fa233080000000002e040000000000002c230000000002009a2330800000000000000000000000003a23000001000300381e32800000000018000000000000006523000000000200e22330800000000000000000000000007323000001000300201e32800000000018000000000000009e23000002000200ca343080000000000800000000000000d123000000000200fa233080000000000000000000000000d42300000000020078243080000000000000000000000000e2230000010003007825328000000000880000000000000039240000000002000e25308000000000000000000000000047240000010003000026328000000000ef020000000000009324000002000200f4383080000000006c00000000000000a72400000000020088253080000000000000000000000000b5240000000002000e263080000000000000000000000000c3240000010003001e223280000000005000000000000000ee2400000000020016263080000000000000000000000000fc240000010003006e22328000000000220100000000000027250000000002001e2630800000000000000000000000003525000001000300902332800000000029010000000000006025000000000200442630800000000000000000000000006e25000000000200082730800000000000000000000000007c25000001000300101f3280000000005800000000000000a72500000000020010273080000000000000000000000000b525000001000300681f328000000000d000000000000000e02500000000020018273080000000000000000000000000ee250000010003003820328000000000e6010000000000001926000002000200e82b308000000000c8000000000000004e26000000000200002830800000000000000000000000005c26000001000300602532800000000018000000000000008726000002000200c2333080000000003200000000000000c22600000000020014283080000000000000000000000000d02600000100030048253280000000001800000000000000fb2600000000020028283080000000000000000000000000fe260000000002009e2830800000000000000000000000000127000000000200ee2830800000000000000000000000000f27000000000200262930800000000000000000000000001d27000000000200422930800000000000000000000000002b27000000000200422930800000000000000000000000002e27000001000300501e3280000000000200000000000000592700000200020058293080000000001000000000000000a32700000000020058293080000000000000000000000000a627000002000200682930800000000074010000000000000b28000000000200682930800000000000000000000000000e28000000000200c22930800000000000000000000000001c28000000000200fc2930800000000000000000000000002a280000000002001c2a30800000000000000000000000003828000001000300521e32800000000002000000000000006228000000000200842a30800000000000000000000000007028000000000200be2a30800000000000000000000000007e28000000000200dc2a30800000000000000000000000008128000000000200f02a30800000000000000000000000008f28000000000200e82b30800000000000000000000000009228000000000200782c3080000000000000000000000000a028000001000300f81e3280000000001800000000000000cb280000000002008c2c3080000000000000000000000000d928000002000200903430800000000008000000000000001a29000000000200a02c30800000000000000000000000002829000001000300e01e328000000000180000000000000053290000020002007a3330800000000016000000000000008629000000000200b02c30800000000000000000000000008929000000000200d42c30800000000000000000000000009729000000000200d02d3080000000000000000000000000a529000000000200162e3080000000000000000000000000b3290000000002005c2e3080000000000000000000000000b629000000000200802e3080000000000000000000000000c429000000000200302f3080000000000000000000000000d229000000000200722f3080000000000000000000000000e02900000000020004303080000000000000000000000000e3290000000002002a303080000000000000000000000000f12900000000020032303080000000000000000000000000ff290000000002004e3030800000000000000000000000000d2a000000000200cc3030800000000000000000000000001b2a000002000200c4313080000000005c00000000000000852a000000000200c4313080000000000000000000000000882a000000000200e6313080000000000000000000000000962a00000000020020323080000000000000000000000000992a0000000002007a323080000000000000000000000000a72a00000100030029293280000000000300000000000000d12a0000000002008e323080000000000000000000000000df2a0000010003002e293280000000000300000000000000092b000000000200c8323080000000000000000000000000172b000000000200e2323080000000000000000000000000252b000001000300f0293280000000000200000000000000502b000000000200063330800000000000000000000000005e2b000000000200143330800000000000000000000000006c2b000000000200483330800000000000000000000000007a2b00000200020064333080000000001600000000000000ab2b00000000020064333080000000000000000000000000ae2b0000000002006a333080000000000000000000000000bc2b0000000002007a333080000000000000000000000000bf2b0000000002007c333080000000000000000000000000cd2b00000100030070293280000000002b00000000000000f72b00000200020090333080000000001c00000000000000242c00000000020090333080000000000000000000000000272c000000000200ac3330800000000000000000000000002a2c00000200020070373080000000006a000000000000003c2c000000000200c23330800000000000000000000000003f2c000000000200cc3330800000000000000000000000004d2c000000000200dc3330800000000000000000000000005b2c000001000300d0293280000000002000000000000000862c000002000200de3930800000000014000000000000009a2c000000000200f43330800000000000000000000000009d2c000000000200f6333080000000000000000000000000ab2c000001000300223f3080000000002100000000000000d62c00000000020008343080000000000000000000000000e42c000001000300c03d30800000000020000000000000000e2d000000000200163430800000000000000000000000001c2d000000000200243430800000000000000000000000002a2d0000000002002e343080000000000000000000000000382d000001000300f8293280000000002000000000000000632d00000000020044343080000000000000000000000000712d00000000020056343080000000000000000000000000742d0000020002005e343080000000003200000000000000c82d0000000002005e343080000000000000000000000000cb2d00000000020068343080000000000000000000000000d92d00000000020078343080000000000000000000000000e72d000001000300002c3280000000002000000000000000122e00000000020090343080000000000000000000000000152e00000200020098343080000000003200000000000000672e000000000200983430800000000000000000000000006a2e000000000200a2343080000000000000000000000000782e000000000200b2343080000000000000000000000000862e000001000300482c3280000000002000000000000000b12e000000000200ca343080000000000000000000000000b42e000002000200d2343080000000007a02000000000000ea2e000000000200d2343080000000000000000000000000ed2e0000000002002a353080000000000000000000000000fb2e000001000300182a3280000000000500000000000000262f0000000002004c353080000000000000000000000000342f00000000020060353080000000000000000000000000422f00000000020070353080000000000000000000000000502f000001000300302a32800000000040000000000000007b2f0000000002008a353080000000000000000000000000892f00000000020098353080000000000000000000000000972f000000000200a8353080000000000000000000000000a52f000001000300102b3280000000003000000000000000d02f00000000020010363080000000000000000000000000de2f000001000300c02b328000000000180000000000000009300000000002000437308000000000000000000000000017300000000002001237308000000000000000000000000025300000000002002037308000000000000000000000000033300000000002002e37308000000000000000000000000041300000000002003e3730800000000000000000000000004f30000001000300a82a32800000000050000000000000007a300000020002004c373080000000002400000000000000be300000000002004c373080000000000000000000000000c13000000000020054373080000000000000000000000000cf30000001000300682c3280000000002800000000000000f9300000000002005c3730800000000000000000000000000731000001000300d82c32800000000018000000000000003131000000000200703730800000000000000000000000003431000000000200743730800000000000000000000000004231000001000500892f328000000000010000000000000083310000000002007e3730800000000000000000000000009131000001000300f02c3280000000001b00000000000000bc31000000000200a4373080000000000000000000000000ca31000002000200da3730800000000034000000000000003232000000000200ae3730800000000000000000000000004032000000000200da37308000000000000000000000000043320000000002000e38308000000000000000000000000046320000000002001638308000000000000000000000000054320000000002001e3830800000000000000000000000006232000001000300502d32800000000018000000000000008d320000000002003238308000000000000000000000000090320000000002003a38308000000000000000000000000093320000000002003c383080000000000000000000000000a132000001000300782d3280000000001000000000000000cc320000000002004c383080000000000000000000000000da32000001000300882d328000000000180000000000000005330000000002005e3830800000000000000000000000000833000000000200603830800000000000000000000000001633000001000300b82d32800000000010000000000000004133000000000200703830800000000000000000000000004f33000001000300c82d32800000000018000000000000007a33000000000200823830800000000000000000000000007d3300000200020090383080000000004400000000000000bb3300000000020090383080000000000000000000000000be330000000002009a383080000000000000000000000000cc33000000000200aa383080000000000000000000000000da33000001000300182e32800000000030000000000000000534000000000200c23830800000000000000000000000001334000001000300902e32800000000018000000000000003e34000000000200d00030800000000000000000000000004134000000000200ea0030800000000000000000000000004f34000000000200f20030800000000000000000000000005d34000000000200fa0030800000000000000000000000006b340000000002001601308000000000000000000000000079340000000002001e0130800000000000000000000000008734000000000200dc0130800000000000000000000000008a34000000000200f601308000000000000000000000000098340000000002001a023080000000000000000000000000a634000000000200d4383080000000000000000000000000a934000000000200d6383080000000000000000000000000ac34000000000200d8383080000000000000000000000000af34000000000200da383080000000000000000000000000b234000000000200e6383080000000000000000000000000c034000000000200e6383080000000000000000000000000c334000000000200f4383080000000000000000000000000c63400000000020060393080000000000000000000000000c93400000000020072393080000000000000000000000000cc3400000000020082393080000000000000000000000000cf34000000000200a8393080000000000000000000000000d234000000000200ba393080000000000000000000000000d534000000000200ca393080000000000000000000000000d834000000000200de393080000000000000000000000000db34000000000200f2393080000000000000000000000000de34000000000200063a3080000000000000000000000000e134000000000200243a3080000000000000000000000000e434000000000200343a3080000000000000000000000000e734000000000200443a3080000000000000000000000000ea34000000000200563a3080000000000000000000000000ed34000000000200643a3080000000000000000000000000f0340000000002007c3a3080000000000000000000000000f334000000000200923a3080000000000000000000000000f634000000000200a03a3080000000000000000000000000f934000001000300803c30800000000049000000000000002335000000000300803c30800000000000000000000000002635000000000300d03c30800000000000000000000000002935000000000300e83c30800000000000000000000000002c35000000000300003d30800000000000000000000000002f35000001000300581c3280000000006f000000000000005935000000000300183d30800000000000000000000000005c35000000000300303d30800000000000000000000000005f35000001000300373d30800000000071000000000000008935000000000300373d30800000000000000000000000008c35000000000300a83d30800000000000000000000000008f35000000000300c03d30800000000000000000000000009235000000000300e03d30800000000000000000000000009535000000000300fa3d30800000000000000000000000009835000000000300fe3d30800000000000000000000000009b35000000000300033e30800000000000000000000000009e35000000000300103e3080000000000000000000000000a1350000000003001d3e3080000000000000000000000000a435000000000300243e3080000000000000000000000000a7350000000003002b3e3080000000000000000000000000aa35000000000300393e3080000000000000000000000000ad35000000000300463e3080000000000000000000000000b035000000000300903e3080000000000000000000000000b335000000000300c03e3080000000000000000000000000b635000000000300c53e3080000000000000000000000000b935000000000300c83e3080000000000000000000000000bc35000000000300d23e3080000000000000000000000000bf35000000000300d53e3080000000000000000000000000c235000000000300d83b3080000000000000000000000000c535000000000300e43e3080000000000000000000000000c835000000000300f03e3080000000000000000000000000cb35000000000300f53e3080000000000000000000000000ce35000000000300043f3080000000000000000000000000d1350000000003000e3f3080000000000000000000000000d435000000000300143f3080000000000000000000000000d735000000000300223f3080000000000000000000000000da35000001000300433f3080000000000a000000000000000536000000000300433f30800000000000000000000000000836000000000300503f30800000000000000000000000000b36000000000300683f30800000000000000000000000000e36000000000300181a32800000000000000000000000001136000001000300481a32800000000080000000000000003b36000000000300481a32800000000000000000000000003e36000000000300c81a32800000000000000000000000004136000001000300e01a32800000000011000000000000006b36000000000300e01a32800000000000000000000000006e36000000000300f81a32800000000000000000000000007136000001000300081b32800000000081000000000000009b36000000000300081b32800000000000000000000000009e36000000000300901b3280000000000000000000000000a136000000000300a81b3280000000000000000000000000a436000000000300bb1b3280000000000000000000000000a736000000000300bc1b3280000000000000000000000000aa36000000000300c11b3280000000000000000000000000ad36000000000300ca1b3280000000000000000000000000b036000001000300dd1b3280000000006100000000000000da36000000000300dd1b3280000000000000000000000000dd36000000000300401c3280000000000000000000000000e036000000000300581c3280000000000000000000000000e336000000000300c71c3280000000000000000000000000e636000000000300ce1c3280000000000000000000000000e936000000000500882f3280000000000000000000000000ec36000000000300d41c3280000000000000000000000000ef36000000000300d61c3280000000000000000000000000f2360000010003009e1d32800000000080000000000000001c370000000003009e1d32800000000000000000000000001f37000000000300201e32800000000000000000000000002237000000000300381e32800000000000000000000000002537000000000300501e32800000000000000000000000002837000000000300521e32800000000000000000000000002b37000001000300541e3280000000008a000000000000005637000000000300541e32800000000000000000000000005937000000000300e01e32800000000000000000000000005c37000000000300f81e32800000000000000000000000005f37000000000300101f32800000000000000000000000006237000000000300681f328000000000000000000000000065370000000003003820328000000000000000000000000068370000000003001e2232800000000000000000000000006b370000000003006e2232800000000000000000000000006e37000000000300902332800000000000000000000000007137000001000300b9243280000000008d000000000000009c37000000000300b92432800000000000000000000000009f3700000000030048253280000000000000000000000000a23700000000030060253280000000000000000000000000a53700000000030078253280000000000000000000000000a83700000000030000263280000000000000000000000000ab37000001000300ef283280000000000700000000000000d637000000000300ef283280000000000000000000000000d937000000000300f8283280000000000000000000000000dc3700000000030028293280000000000000000000000000df3700000000030029293280000000000000000000000000e2370000000003002c293280000000000000000000000000e5370000000003002e293280000000000000000000000000e83700000000030031293280000000000000000000000000eb3700000000030033293280000000000000000000000000ee3700000000030034293280000000000000000000000000f13700000000030036293280000000000000000000000000f43700000000030037293280000000000000000000000000f73700000000030039293280000000000000000000000000fa370000000003003a293280000000000000000000000000fd370000000003003b29328000000000000000000000000000380000000003004029328000000000000000000000000003380000000003007029328000000000000000000000000006380000000003009b2932800000000000000000000000000938000001000300bb2932800000000012000000000000003438000000000300bb2932800000000000000000000000003738000000000300d02932800000000000000000000000003a38000000000300f02932800000000000000000000000003d38000000000300f82932800000000000000000000000004038000000000300182a328000000000000000000000000043380000010003001d2a3280000000000e000000000000006e380000000003001d2a328000000000000000000000000071380000010003002b2a32800000000001000000000000009c380000000003002b2a32800000000000000000000000009f38000000000300302a3280000000000000000000000000a238000001000300702a3280000000000b00000000000000cd38000000000300702a3280000000000000000000000000d0380000010003007b2a3280000000002600000000000000fb380000000003007b2a3280000000000000000000000000fe38000001000300a12a32800000000006000000000000002939000000000300a12a32800000000000000000000000002c39000000000300a82a32800000000000000000000000002f39000001000300f82a32800000000016000000000000005a39000000000300f82a32800000000000000000000000005d39000000000300102b32800000000000000000000000006039000001000300402b32800000000080000000000000008b39000000000300402b32800000000000000000000000008e39000000000300c02b32800000000000000000000000009139000001000300d82b3280000000002200000000000000bc39000000000300d82b3280000000000000000000000000bf39000000000300002c3280000000000000000000000000c239000001000300202c3280000000001600000000000000ed39000000000300202c3280000000000000000000000000f039000001000300362c3280000000000d000000000000001b3a000000000300362c32800000000000000000000000001e3a000000000300482c3280000000000000000000000000213a000000000300682c3280000000000000000000000000243a000001000300902c32800000000044000000000000004e3a000000000300902c3280000000000000000000000000513a000000000300d82c3280000000000000000000000000543a000000000300f02c3280000000000000000000000000573a0000010003000b2d3280000000004200000000000000823a0000000003000b2d3280000000000000000000000000853a000000000300502d3280000000000000000000000000883a000001000300682d3280000000000f00000000000000b33a000000000300682d3280000000000000000000000000b63a000000000300782d3280000000000000000000000000b93a000000000300882d3280000000000000000000000000bc3a000001000300a02d3280000000001200000000000000e73a000000000300a02d3280000000000000000000000000ea3a000000000300b82d3280000000000000000000000000ed3a000000000300c82d3280000000000000000000000000f03a000000000500902f3280000000000000000000000000f33a000001000300e02d32800000000015000000000000001e3b000000000300e02d3280000000000000000000000000213b000001000300f52d32800000000016000000000000004c3b000000000300f52d32800000000000000000000000004f3b0000010003000b2e32800000000007000000000000007a3b0000000003000b2e32800000000000000000000000007d3b000000000300182e3280000000000000000000000000803b000001000300482e3280000000004400000000000000ab3b000000000300482e3280000000000000000000000000ae3b000000000300902e3280000000000000000000000000b13b000000000300a82e3280000000000000000000000000b43b000000000300282f3280000000000000000000000000b73b00000000080092000000000000000000000000000000ba3b0000000008005e000000000000000000000000000000bd3b0000000008005e000000000000000000000000000000c03b0000000008005e000000000000000000000000000000c33b0000000008005e000000000000000000000000000000c63b0000000008005e000000000000000000000000000000c93b0000000008005e000000000000000000000000000000cc3b0000000008005e000000000000000000000000000000cf3b0000000008005e000000000000000000000000000000d23b0000000008005e000000000000000000000000000000d53b0000000008005e000000000000000000000000000000d83b0000000008005e000000000000000000000000000000db3b0000000008005e000000000000000000000000000000de3b0000000008005e000000000000000000000000000000e13b0000000008005e000000000000000000000000000000e43b0000000008005e000000000000000000000000000000e73b0000000008005e000000000000000000000000000000ea3b0000000008005e000000000000000000000000000000ed3b0000000008005e000000000000000000000000000000f03b0000000008005e000000000000000000000000000000f33b0000000008005e000000000000000000000000000000f63b0000000008005e000000000000000000000000000000f93b0000000008005e000000000000000000000000000000fc3b0000000008005e000000000000000000000000000000ff3b0000000008005e000000000000000000000000000000023c0000000008005e000000000000000000000000000000053c0000000008005e000000000000000000000000000000083c0000000008005e0000000000000000000000000000000b3c0000000008005e0000000000000000000000000000000e3c0000000008005e000000000000000000000000000000113c0000000008005e000000000000000000000000000000143c0000000008005e000000000000000000000000000000173c0000000008005e0000000000000000000000000000001a3c0000000008005e0000000000000000000000000000001d3c0000000008005e000000000000000000000000000000203c0000000008005e000000000000000000000000000000233c0000000008005e000000000000000000000000000000263c0000000008005e000000000000000000000000000000293c0000000008005e0000000000000000000000000000002c3c0000000008005e0000000000000000000000000000002f3c0000000008005e000000000000000000000000000000323c0000000008005e000000000000000000000000000000353c0000000008005e000000000000000000000000000000383c0000000008005e0000000000000000000000000000003b3c0000000008005e0000000000000000000000000000003e3c0000000008005e000000000000000000000000000000413c0000000008005e000000000000000000000000000000443c0000000008005e000000000000000000000000000000473c0000000008005e0000000000000000000000000000004a3c0000000008005e0000000000000000000000000000004d3c0000000008005e000000000000000000000000000000503c0000000008005e000000000000000000000000000000533c0000000008005e000000000000000000000000000000563c0000000008005e000000000000000000000000000000593c0000000008005e0000000000000000000000000000005c3c0000000008005e0000000000000000000000000000005f3c0000000008005e000000000000000000000000000000623c0000000008005e000000000000000000000000000000653c0000000008005e000000000000000000000000000000683c0000000008005e0000000000000000000000000000006b3c00000000f1ff000000000000000000000000000000006e3c00000000f1ff00000000000000000000000000000000713c00000400f1ff000000000000000000000000000000009b3c000000000200ae3a30800000000000000000000000009e3c00000000080092000000000000000000000000000000a13c00000000f1ff00000000000000000000000000000000b140000002020200ae3a3080000000001400000000000000a43c00000400f1ff00000000000000000000000000000000ce3c00000000080092000000000000000000000000000000d13c00000000f1ff00000000000000000000000000000000d43c00000400f1ff00000000000000000000000000000000fe3c00000000080092000000000000000000000000000000013d00000000f1ff00000000000000000000000000000000043d00000400f1ff000000000000000000000000000000002e3d00000000080092000000000000000000000000000000313d00000000f1ff00000000000000000000000000000000343d00000400f1ff000000000000000000000000000000005e3d00000000080092000000000000000000000000000000613d00000000f1ff00000000000000000000000000000000643d00000400f1ff000000000000000000000000000000008e3d00000000080092000000000000000000000000000000913d00000000f1ff00000000000000000000000000000000943d00000400f1ff00000000000000000000000000000000be3d00000000080092000000000000000000000000000000c13d00000000f1ff00000000000000000000000000000000c43d00000400f1ff00000000000000000000000000000000ee3d00000000080092000000000000000000000000000000f13d00000000f1ff00000000000000000000000000000000f43d00000400f1ff000000000000000000000000000000001e3e00000000080092000000000000000000000000000000213e00000000f1ff00000000000000000000000000000000243e00000400f1ff000000000000000000000000000000004e3e00000000080092000000000000000000000000000000513e00000000f1ff00000000000000000000000000000000543e00000400f1ff000000000000000000000000000000007e3e000000000200c23a3080000000000000000000000000813e000000000200743b3080000000000000000000000000843e00000000080092000000000000000000000000000000873e00000000f1ff000000000000000000000000000000008b42000002020200c23a308000000000b200000000000000c142000002020200743b3080000000001e000000000000008a3e00000400f1ff00000000000000000000000000000000b43e00000000080092000000000000000000000000000000b73e00000000f1ff00000000000000000000000000000000ba3e00000400f1ff00000000000000000000000000000000e43e000000000200923b3080000000000000000000000000e73e00000000080092000000000000000000000000000000ea3e00000000f1ff00000000000000000000000000000000a340000002020200923b3080000000000800000000000000ed3e00000400f1ff00000000000000000000000000000000173f000000000800920000000000000000000000000000001a3f00000000f1ff000000000000000000000000000000001d3f00000400f1ff00000000000000000000000000000000473f0000000002009a3b30800000000000000000000000004a3f000000000800920000000000000000000000000000004d3f00000000f1ff00000000000000000000000000000000aa400000020202009a3b3080000000000800000000000000503f00000400f1ff000000000000000000000000000000007a3f000000000800920000000000000000000000000000007d3f00000000f1ff00000000000000000000000000000000803f000012000200b20d3080000000006800000000000000853f0000120002003a383080000000002400000000000000943f0000120002005e383080000000002400000000000000a53f000012000200d4383080000000000200000000000000bd3f000012000200d6383080000000000200000000000000d53f000011000300a82e3280000000008000000000000000e23f000011000300282f3280000000006000000000000000ef3f000012000200d0003080000000007800000000000000fb3f000012000200dc013080000000005e000000000000000c40000012000200da383080000000000c000000000000001c40000012000200d83830800000000002000000000000002d40000012000200e6383080000000000e000000000000004640000010000200000030800000000000000000000000004d40000010000400883732800000000000000000000000005f4000001000f1ff000000000000000000000000000000006c400000100002003a023080000000000000000000000000724000001000f1ff00080000000000000000000000000000834000001000f1ff000030800000000000000000000000009040000010000200480130800000000000000000000000000441000012000200da3830800000000000000000000000000d41000012000200d83830800000000000000000000000001841000010000400882f32800000000000000000000000001f41000010000400882f3280000000000000000000000000264100001000f1ff882f32800000000000000000000000002e41000010000500882f32800000000000000000000000003441000010000500982fd2800000000000000000000000003a41000012000200e63830800000000000000000000000004c410000100002004801308000000000000000000000000058410000120002005e3830800000000000000000000000006e410000120002005e3830800000000000000000000000007f410000120002005e38308000000000000000000000000092410000120002005e3830800000000000000000000000009d410000120002005e383080000000000000000000000000ac410000120002005e383080000000000000000000000000b6410000120002005e383080000000000000000000000000c6410000120002005e383080000000000000000000000000d1410000120002005e383080000000000000000000000000dd410000120002005e383080000000000000000000000000ef410000120002005e383080000000000000000000000000fe410000120002005e38308000000000000000000000000013420000120002005e38308000000000000000000000000021420000120002005e38308000000000000000000000000030420000120002003a3830800000000000000000000000003f420000120002003a3830800000000000000000000000004b420000120002003a3830800000000000000000000000005b420000120002003a38308000000000000000000000000068420000120002003a3830800000000000000000000000007b420000120002003a383080000000000000000000000000f74200001000f1ff00003080000000000000000000000000fe4200001000f1ff000000000000000000000000000000000943000010000600982fd2800000000000000000000000001043000010000600982fd2800000000000000000000000001743000010000700000010800000000000000000000000001f4300001000070000003080000000000000000000000000002e746578742e64756d6d79002e74657874002e726f64617461002e64617461002e627373002e68656170002e737461636b002e636f6d6d656e74002e72697363762e61747472696275746573002e73796d746162002e7368737472746162002e73747274616200006465706c6f792e396635336532663238336630656665332d6367752e30002478002464005f6162735f7374617274002e4c3020002478002e4c706372656c5f686930002e4c706372656c5f686931002e4c3020002478002478005f5a4e3135616c6c6f795f736f6c5f74797065733361626937656e636f6465723135656e636f64655f73657175656e63653137683761663162653539306238313037396345002478002e4c706372656c5f686932005f5f727573745f6e6f5f616c6c6f635f7368696d5f69735f756e737461626c65002e4c706372656c5f686933005f5a4e31376574685f72697363765f72756e74696d6535616c6c6f6336474c4f42414c3137683334356230313064363433633337316645002e4c706372656c5f686934002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e34002e4c706372656c5f686935002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e35005f5a4e35616c6c6f63377261775f766563313268616e646c655f6572726f723137686162333735303564316464306362336345005f5a4e3135616c6c6f795f736f6c5f74797065733574797065733576616c756538536f6c56616c756531306162695f6465636f64653137683531613463383562373136376538643945002478002e4c706372656c5f68693130002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e36002e4c706372656c5f686936002e4c706372656c5f686937002e4c706372656c5f686939002e4c706372656c5f686938002e4c616e6f6e2e33396636323538656361313335633332616132353036353361616264356464612e31005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683232323631353338626561303233323845002478002e4c706372656c5f68693131002464002e4c435049335f31002464005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683964613063326664306430323238366245002478002e4c706372656c5f68693132002e4c706372656c5f68693133002e4c706372656c5f68693134005f5a4e37335f244c5424636f72652e2e6e756d2e2e6e6f6e7a65726f2e2e4e6f6e5a65726f244c54245424475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686135383039313032386365303762363445002e4c706372656c5f68693135005f5a4e34636f726533666d74336e756d35305f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f7224753230247533322447542433666d743137683733623733396166326233383562656345002e4c706372656c5f68693136002e4c616e6f6e2e61643165663263346535663237306334633632386237613637626132623462322e3430005f5a4e34636f726533666d743577726974653137683630316230633461663636666433623345005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686239666462663836613833393936643045002478002e4c706372656c5f68693138002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3439002e4c706372656c5f68693139002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3530002e4c706372656c5f68693230005f5a4e36345f244c5424636f72652e2e616c6c6f632e2e6c61796f75742e2e4c61796f7574247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683861363330326565366136326435306545005f5a4e34636f726533666d74386275696c6465727331314465627567537472756374356669656c643137686466333030366631663261363965383145002e4c706372656c5f68693231002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3531002e4c706372656c5f68693232005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683934643838353330303163306132333145002e4c706372656c5f68693233002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3135002e4c706372656c5f68693137002e4c706372656c5f68693234002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3134005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686563343964363165623239306335343345002478002e4c706372656c5f68693235002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3435002e4c706372656c5f68693236002e4c706372656c5f68693237002e4c706372656c5f68693238002e4c706372656c5f68693239005f5a4e34636f726533666d74336e756d34395f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f72247532302475382447542433666d743137683430666332323430363965663239303845002478002e4c706372656c5f68693331002e4c616e6f6e2e38306435386436313264653030613965336238393135333761343633633836622e35004f55544c494e45445f46554e4354494f4e5f3134004f55544c494e45445f46554e4354494f4e5f3136004f55544c494e45445f46554e4354494f4e5f32004f55544c494e45445f46554e4354494f4e5f31002e4c706372656c5f68693330002e4c616e6f6e2e38306435386436313264653030613965336238393135333761343633633836622e32002e4c706372656c5f68693333002e4c706372656c5f68693332004f55544c494e45445f46554e4354494f4e5f3135005f5a4e34636f726533666d7439466f726d617474657231327061645f696e74656772616c3137683636653331623966316261383731333145005f5a4e34636f726533666d74336e756d35325f244c5424696d706c2475323024636f72652e2e666d742e2e44656275672475323024666f7224753230247573697a652447542433666d743137683835303466393562643238626664306345002478005f5a4e34636f726533666d74336e756d33696d7035345f244c5424696d706c2475323024636f72652e2e666d742e2e446973706c61792475323024666f7224753230247573697a652447542433666d743137683564626334356432623963366566663945004f55544c494e45445f46554e4354494f4e5f3137004f55544c494e45445f46554e4354494f4e5f3130004f55544c494e45445f46554e4354494f4e5f34002e4c706372656c5f68693334002e4c706372656c5f68693335005f5a4e34636f726533707472353164726f705f696e5f706c616365244c5424616c6c6f795f736f6c5f74797065732e2e6572726f72732e2e4572726f72244754243137686566303365626438373737306261643545002478005f5a4e34636f726536726573756c743139526573756c74244c5424542443244524475424366578706563743137683038326334323436343430623932393445002478005f5a4e34636f726536726573756c743133756e777261705f6661696c65643137686561363039396361313064393030323545005f5a4e35616c6c6f63337665633132566563244c542454244754243133776974685f63617061636974793137683336656334373336343361333837303045002e4c706372656c5f68693336002478002e4c706372656c5f68693337002e4c706372656c5f68693338002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3534005f5a4e35616c6c6f63337665633136566563244c542454244324412447542434707573683137686265633338613332353739343536653645002478002e4c706372656c5f68693339005f5a4e35616c6c6f63377261775f7665633139526177566563244c54245424432441244754243867726f775f6f6e653137683237396461353762353565363734633245002478002e4c706372656c5f68693430002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3132002e4c706372656c5f68693431002e4c706372656c5f68693432002e4c706372656c5f68693433002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3134002e4c706372656c5f68693434002e4c706372656c5f68693435002e4c706372656c5f68693436005f5a4e36375f244c5424616c6c6f795f736f6c5f74797065732e2e6572726f72732e2e4572726f72247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686533623164366266333837393063343445002478002e4c706372656c5f68693437002e4c4a544931335f30002e4c3020002e4c706372656c5f68693438002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3137002e4c706372656c5f68693439002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3138002e4c706372656c5f68693530005f5a4e36345f244c5424616c6c6f632e2e626f72726f772e2e436f77244c54244224475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683134343065303763366532646638626345002e4c706372656c5f68693531002e4c706372656c5f68693532005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683337373139646537616163393937646445002e4c706372656c5f68693533002e4c3020002e4c706372656c5f68693539002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3234002e4c3020002e4c706372656c5f68693835002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3430002e4c706372656c5f68693836005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683666343931333264663932663838373145002e4c3020002e4c706372656c5f68693536002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3232002e4c706372656c5f68693537002e4c3020002e4c706372656c5f68693538002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3233002e4c3020002e4c706372656c5f68693731002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3334002e4c706372656c5f68693732002e4c706372656c5f68693733005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686366333965313465666332646238303145002e4c706372656c5f68693734002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3335002e4c706372656c5f68693735005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683264613131323036363736326137333445002e4c706372656c5f68693736002e4c3020002e4c706372656c5f68693535002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3230002e4c3020002e4c706372656c5f68693630002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3236002e4c706372656c5f68693631005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683639616264653664353866613561663045002e4c3020002e4c706372656c5f68693632002e4c706372656c5f68693633002e4c706372656c5f68693634002e4c706372656c5f68693635002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3331002e4c706372656c5f68693636002e4c706372656c5f68693637002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3332002e4c706372656c5f68693638002e4c706372656c5f68693639002e4c3020002e4c706372656c5f68693837002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3432002e4c706372656c5f68693838005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686164336530323931623461393762303045005f5a4e34636f726533666d7439466f726d6174746572323564656275675f7475706c655f6669656c64315f66696e6973683137683432386266363065376632336639393545002e4c3020002e4c706372656c5f68693738002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3337002e4c706372656c5f68693739002e4c706372656c5f68693830002e4c706372656c5f68693831002e4c706372656c5f68693832002e4c706372656c5f68693833002e4c706372656c5f68693737002e4c706372656c5f68693534002e4c706372656c5f68693730002e4c706372656c5f68693834002464002478005f5a4e31376574685f72697363765f72756e74696d65386d73675f646174613137683263616666396139313030303235373545005f5a4e366465706c6f79366465706c6f79346d61696e33315f244c5424696d706c24753230246465706c6f792e2e455243323024475424336e65773137686537366666646432343536336439303745002e4c706372656c5f68693839002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3535005f5a4e35616c6c6f63337665633136566563244c54245424432441244754243137657874656e645f66726f6d5f736c6963653137683864316330363165316538316166636645005f5a4e31376574685f72697363765f72756e74696d65313272657475726e5f72697363763137686238313761363438346164396437396445002478002e4c706372656c5f68693930002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e38002e4c706372656c5f68693932002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e32002e4c706372656c5f68693931002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e31005f5a4e34636f726535736c69636535696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c3137683636353733326339653663653964656145005f5f727573745f616c6c6f635f6572726f725f68616e646c6572002e4c3020002478005f5f72675f6f6f6d005f5a4e34636f726533666d743557726974653977726974655f666d743137683138636366383364653832333565336345002478002e4c706372656c5f68693933002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e30005f5a4e34636f726533707472343264726f705f696e5f706c616365244c5424616c6c6f632e2e737472696e672e2e537472696e67244754243137686635373933323766633632373534343545002478005f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532302461732475323024636f72652e2e666d742e2e5772697465244754243977726974655f7374723137686239336533656636643434353632373345002478004f55544c494e45445f46554e4354494f4e5f35004f55544c494e45445f46554e4354494f4e5f36002e4c706372656c5f68693934002e4c706372656c5f68693935002e4c706372656c5f68693936002e4c706372656c5f68693937002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e33005f5a4e35385f244c5424616c6c6f632e2e737472696e672e2e537472696e67247532302461732475323024636f72652e2e666d742e2e577269746524475424313077726974655f636861723137686230663966646639666262623264363545002478002e4c706372656c5f68693938002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e36002e4c706372656c5f68693939002e4c706372656c5f6869313030002e4c706372656c5f6869313031002e4c706372656c5f6869313032002478002e4c706372656c5f6869313033002e4c706372656c5f6869313034002e4c706372656c5f6869313035002e4c706372656c5f6869313036002478002e4c706372656c5f6869313037002e4c706372656c5f6869313038002e4c706372656c5f6869313039004f55544c494e45445f46554e4354494f4e5f3133002478005f5a4e35616c6c6f63377261775f766563313763617061636974795f6f766572666c6f773137683834663831336237346132643136623245005f5a4e35616c6c6f6335616c6c6f63313868616e646c655f616c6c6f635f6572726f723137686130623430393338376338376332383345002478002e4c706372656c5f6869313130002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e31004f55544c494e45445f46554e4354494f4e5f3131005f5a4e34636f72653970616e69636b696e673970616e69635f666d743137683564353138396236613162336330633345002478005f5a4e34305f244c5424737472247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683165353362636463363039336539326545002478005f5a4e35616c6c6f6335616c6c6f63313868616e646c655f616c6c6f635f6572726f723872745f6572726f723137683135393764656138383731323234353545002478002478002e4c706372656c5f6869313138002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3132002e4c706372656c5f6869313131002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e39002e4c706372656c5f6869313132002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3130002e4c706372656c5f6869313133005f5a4e34315f244c542463686172247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683466313239666635313436313631366245002e4c706372656c5f6869313134002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3131002e4c706372656c5f6869313135005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683438386262386238353035323333613045002e4c706372656c5f6869313136002e4c706372656c5f6869313139002e4c616e6f6e2e39396163626238316264343034353531313965393634613536393261326161332e3133002e4c706372656c5f6869313137002478002478002e4c706372656c5f6869313231002e4c706372656c5f6869313230002e4c706372656c5f6869313233002e4c706372656c5f6869313232005f5a4e36355f244c5424616c6c6f632e2e7665632e2e566563244c5424542443244124475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683233626332343666336566333635653145002478002e4c706372656c5f6869313234002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3235002e4c706372656c5f6869313235002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e37002e4c706372656c5f6869313236004f55544c494e45445f46554e4354494f4e5f33002e4c706372656c5f6869313237002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3231005f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e2e50616441646170746572247532302461732475323024636f72652e2e666d742e2e5772697465244754243977726974655f7374723137683230643165396434373163363833636345002e4c706372656c5f6869313238002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3130002e4c706372656c5f6869313239002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3239002478002e4c706372656c5f6869313330002e4c616e6f6e2e37363765373330626339643065633762353564333031633466663939316634612e37002e4c706372656c5f6869313331002e4c616e6f6e2e37363765373330626339643065633762353564333031633466663939316634612e38002e4c706372656c5f6869313332002e4c706372656c5f6869313333002e4c706372656c5f6869313334005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686163306665663538386664356464383945002e4c706372656c5f6869313335002e4c706372656c5f6869313336002478002e4c706372656c5f6869313337002e4c706372656c5f6869313338002e4c706372656c5f6869313430005f5a4e34636f726533666d7439466f726d6174746572337061643137686562316338636637643061663764383245002e4c706372656c5f6869313339002478002478002478004f55544c494e45445f46554e4354494f4e5f38004f55544c494e45445f46554e4354494f4e5f3132002478005f5a4e34636f726533666d7439466f726d617474657231327061645f696e74656772616c313277726974655f7072656669783137683337333839616666333662356434623645004f55544c494e45445f46554e4354494f4e5f39002478002478002e4c706372656c5f6869313431002e4c706372656c5f6869313432005f5a4e34325f244c54242452462454247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686436383862616330333938363664353145002478002478002e4c706372656c5f6869313433002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3136002e4c706372656c5f6869313434002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3137002e4c706372656c5f6869313435002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e3430002e4c706372656c5f6869313436002e4c706372656c5f6869313437002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e32002478005f5a4e34636f72653463686172376d6574686f647332325f244c5424696d706c2475323024636861722447542431366573636170655f64656275675f6578743137686132343334613530353436336134373045002e4c706372656c5f6869313438002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3136002e4c706372656c5f6869313439002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3135005f5a4e34636f7265337374723136736c6963655f6572726f725f6661696c3137686435646138386335343937616566663045002478002e4c706372656c5f6869313530005f5a4e34636f726537756e69636f64653132756e69636f64655f6461746131356772617068656d655f657874656e64313753484f52545f4f46465345545f52554e533137686532623237356661623466306338656245002e4c706372656c5f6869313532005f5a4e34636f726537756e69636f64653132756e69636f64655f6461746131356772617068656d655f657874656e64374f4646534554533137683230323535323237646238306232653845004f55544c494e45445f46554e4354494f4e5f30002e4c706372656c5f6869313631002e4c706372656c5f6869313534002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3233002e4c706372656c5f6869313535002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3234002e4c706372656c5f6869313536002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3235002e4c706372656c5f6869313630002e4c706372656c5f6869313537002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3230002e4c706372656c5f6869313538002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3231002e4c706372656c5f6869313539002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3232005f5a4e34636f726537756e69636f6465397072696e7461626c6535636865636b3137683438383962313531613261343833323745002e4c706372656c5f6869313533002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3238005f5a4e34636f72653970616e69636b696e67313870616e69635f626f756e64735f636865636b3137686563306439343138393933646564613845002e4c706372656c5f6869313531002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3237002478002478002e4c706372656c5f6869313632002e4c706372656c5f6869313633002e4c706372656c5f6869313634002478002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e3137005f5a4e34345f244c54242452462454247532302461732475323024636f72652e2e666d742e2e446973706c61792447542433666d743137686263333134626337646137303335396645002478005f5a4e37315f244c5424636f72652e2e6f70732e2e72616e67652e2e52616e6765244c542449647824475424247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137686639386261393431336237343232303945002478002e4c706372656c5f6869313635002e4c706372656c5f6869313636002e4c706372656c5f6869313637002e4c616e6f6e2e31643736626633396463333931613832313732316632663037356532326263632e30002e4c706372656c5f6869313638002e4c706372656c5f6869313639002478002e4c706372656c5f6869313730002478002e4c706372656c5f6869313732002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3139002e4c706372656c5f6869313731005f5a4e34636f726535736c69636535696e6465783232736c6963655f696e6465785f6f726465725f6661696c3137683962356131613535613561323235353245002e4c706372656c5f6869313733002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3138005f5a4e34636f7265366f7074696f6e3133756e777261705f6661696c65643137686539396334306539373562356638306445002478002e4c706372656c5f6869313735002e4c706372656c5f6869313734002e4c706372656c5f6869313736002478002e4c706372656c5f6869313738002e4c706372656c5f6869313737002e4c706372656c5f6869313739002478002e4c706372656c5f6869313830002e4c706372656c5f6869313831002e4c706372656c5f6869313832002e4c706372656c5f6869313833005f5a4e36385f244c5424636f72652e2e666d742e2e6275696c646572732e2e50616441646170746572247532302461732475323024636f72652e2e666d742e2e577269746524475424313077726974655f636861723137686362393161353266303033633433363845002478002e4c706372656c5f6869313834002478002e4c706372656c5f6869313836002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e36002e4c706372656c5f6869313838002e4c616e6f6e2e62323863326432623938336366346363623563363138353562373037396237382e39002e4c706372656c5f6869313839002e4c706372656c5f6869313930002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3332002e4c706372656c5f6869313931002e4c706372656c5f6869313835002e4c706372656c5f6869313837005f5a4e34636f726533666d743557726974653977726974655f666d743137686336333337353631626636346534646545002478002e4c706372656c5f6869313932002478002e4c706372656c5f6869313933002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e34005f5a4e34636f72653970616e69636b696e673570616e6963313768646238353536636230623764363339634500247800247800727573745f626567696e5f756e77696e64002478002e4c706372656c5f6869313934002e4c706372656c5f6869313935002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3133004f55544c494e45445f46554e4354494f4e5f37002478002e4c706372656c5f6869313936002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3532002e4c706372656c5f6869313937002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e39002e4c706372656c5f6869313938002e4c706372656c5f6869313939002e4c706372656c5f6869323030002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3333002e4c706372656c5f6869323031002478005f5a4e34636f726535736c69636535696e6465783234736c6963655f656e645f696e6465785f6c656e5f6661696c38646f5f70616e69633772756e74696d653137686337643463376165326563356363373445002478002e4c706372656c5f6869323032002e4c706372656c5f6869323033002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3930002478005f5a4e34636f726535736c69636535696e6465783232736c6963655f696e6465785f6f726465725f6661696c38646f5f70616e69633772756e74696d653137686333326531653337626235613337376545002478002e4c706372656c5f6869323034002e4c706372656c5f6869323035002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3933002478005f5a4e34636f7265337374723139736c6963655f6572726f725f6661696c5f72743137683336303639313438373337613565363745002478002e4c706372656c5f6869323036002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3433002e4c706372656c5f6869323037002e4c706372656c5f6869323038002e4c706372656c5f6869323039002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3438002e4c706372656c5f6869323136002e4c706372656c5f6869323137002e4c706372656c5f6869323138002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3535002e4c706372656c5f6869323130002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3537002e4c706372656c5f6869323131002e4c706372656c5f6869323132002e4c706372656c5f6869323133002e4c706372656c5f6869323134002e4c706372656c5f6869323135002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3533005f5a4e31376574685f72697363765f72756e74696d65356572726f7231377265766572745f776974685f6572726f723137683635646338323863613731386537353345002478002e4c706372656c5f6869323139002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e37002e4c706372656c5f6869323230002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e39002478002e4c706372656c5f6869323231005f5a4e31376574685f72697363765f72756e74696d653570616e6963313249535f50414e49434b494e4731376866373932313966643632316137643166452e30002e4c706372656c5f6869323234002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3137002e4c706372656c5f6869323232005f5a4e37345f244c5424636f72652e2e70616e69632e2e70616e69635f696e666f2e2e50616e69634d657373616765247532302461732475323024636f72652e2e666d742e2e44656275672447542433666d743137683664316266363263653262346362323745002e4c706372656c5f6869323233002478002478002e4c706372656c5f6869323235002e4c706372656c5f6869323236002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3139002478002478002e4c706372656c5f6869323237002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3234002e4c706372656c5f6869323238002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3235002478002e4c706372656c5f6869323239002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3237002e4c706372656c5f6869323330002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3238002478005f5a4e31376574685f72697363765f72756e74696d6535616c6c6f633131616c6c6f635f6572726f723137686439366332373832306636383864633645002478002e4c706372656c5f6869323331002e4c706372656c5f6869323332002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3332002e4c706372656c5f6869323333002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3334002478002e4c706372656c5f6869323337002e4c706372656c5f6869323338002e4c706372656c5f6869323339002e4c706372656c5f6869323430002e4c706372656c5f6869323431002478002e4c706372656c5f6869323334002e4c706372656c5f6869323335002478002478002478002478002e4c706372656c5f6869323336002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002478002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e30002464002464002464002464002e4c616e6f6e2e32353533363830326461363235646230346131623163653162626361343137312e30002464002464002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e37002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e66616435386465373336363439356462343635306366656661633266636436312e3533002464002464002464002464002e4c616e6f6e2e62623239383436346464643765366634633861326138303835353665326232332e31002464002464002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e30002464002464002e4c616e6f6e2e33393564666264366433393238373166373634313432623338356561623033342e32002464002464002464002464002464002464002464002e4c616e6f6e2e33396636323538656361313335633332616132353036353361616264356464612e30002464002464002464002464002464002464002464002464002e4c616e6f6e2e32663461326631306433396463346161653362323039663139666231373730302e33002464002464002464002464002464002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3137002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e66333266376239353038383635316266313037303834666364613830653762662e3236002464002464002464002464002464002e4c616e6f6e2e61643165663263346535663237306334633632386237613637626132623462322e3338002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3132002464002464002464002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3434002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3437002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3439002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3530002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3532002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3534002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3536002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3837002464002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3931002464002e4c616e6f6e2e31316638653937363962393731346539633732373930653430616264643965302e3932002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e38002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3138002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3233002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3236002464002464002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3239002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3330002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e3331002464002464002e4c616e6f6e2e62393166303839343832343264326535393661656263336533343338393539372e333300246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303500247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303400246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303300246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303000246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303200246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303100246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303600246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303700246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e303900246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313000247800247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313100246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313200247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313300246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e313400247800246400246400636f6d70696c65725f6275696c74696e732e333863343339633064356263386538622d6367752e3135002464002464006d61696e0044656661756c7448616e646c657200457863657074696f6e48616e646c65720044656661756c74457863657074696f6e48616e646c65720044656661756c74496e7465727275707448616e646c6572005f5f455843455054494f4e53005f5f494e5445525255505453005f73746172745f72757374005f73746172745f747261705f727573740064656661756c745f6d705f686f6f6b0064656661756c745f7072655f696e69740064656661756c745f73657475705f696e7465727275707473005f7374617274005f5f676c6f62616c5f706f696e74657224005f6d61785f686172745f69640061626f7274005f686172745f737461636b5f73697a65005f737461636b5f73746172740064656661756c745f73746172745f74726170006d656d637079006d656d636d70005f5a4e34636f726535736c69636532395f244c5424696d706c24753230242475356224542475356424244754243135636f70795f66726f6d5f736c6963653137683335316238316135373762343963373645005f6d705f686f6f6b005f5f7072655f696e6974005f7364617461005f6564617461005f736964617461005f73627373005f65627373005f73657475705f696e7465727275707473005f73746172745f7472617000496e737472756374696f6e4d6973616c69676e656400496e737472756374696f6e4661756c7400496c6c6567616c496e737472756374696f6e00427265616b706f696e74004c6f61644d6973616c69676e6564004c6f61644661756c740053746f72654d6973616c69676e65640053746f72654661756c740055736572456e7643616c6c0053757065727669736f72456e7643616c6c004d616368696e65456e7643616c6c00496e737472756374696f6e506167654661756c74004c6f6164506167654661756c740053746f7265506167654661756c740053757065727669736f72536f6674004d616368696e65536f66740053757065727669736f7254696d6572004d616368696e6554696d65720053757065727669736f7245787465726e616c004d616368696e6545787465726e616c005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d6370793137686433393130346665666439323036666645005f5a4e3137636f6d70696c65725f6275696c74696e73336d656d366d656d636d703137686662353631346634623861343134616445005f7374657874005f686561705f73697a65005f7368656170005f6568656170005f65737461636b005f73737461636b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000800000002000000000000000000308000000000700200000000000000000000000000000000000000000000010000000000000000000000000000000d00000001000000060000000000000000003080000000000010000000000000a23b00000000000000000000000000000800000000000000000000000000000013000000010000001200000000000000a83b308000000000a84b000000000000e0f30100000000000000000000000000080000000000000000000000000000001b000000010000000200000000000000882f328000000000883f020000000000000000000000000000000000000000000800000000000000000000000000000021000000080000000300000000000000882f328000000000883f0200000000001000a0000000000000000000000000000800000000000000000000000000000026000000080000000300000000000000982fd28000000000883f02000000000000000000000000000000000000000000010000000000000000000000000000002c000000080000000300000000000000000010800000000000400200000000000000200000000000000000000000000001000000000000000000000000000000330000000100000030000000000000000000000000000000004002000000000093000000000000000000000000000000010000000000000001000000000000003c0000000300007000000000000000000000000000000000934002000000000034000000000000000000000000000000010000000000000000000000000000004e0000000200000000000000000000000000000000000000c84002000000000060540000000000000c0000004e030000080000000000000018000000000000005600000003000000000000000000000000000000000000002895020000000000680000000000000000000000000000000100000000000000000000000000000060000000030000000000000000000000000000000000000090950200000000002743000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a824a54a00e9e2e46af686bc17b40a84e3794099fb10573c124957861d7a0ee48af708a5fa03332e65acdc86b49b8e781b5cab581f928f2e1fac9e6f068108a1106935e4730 \ No newline at end of file diff --git a/native/riscv_em_nif/src/tests/erc20-mint-signed.txt b/native/riscv_em_nif/src/tests/erc20-mint-signed.txt new file mode 100644 index 000000000..72304dacb --- /dev/null +++ b/native/riscv_em_nif/src/tests/erc20-mint-signed.txt @@ -0,0 +1 @@ +f8ad80850af16b16008435a4e90094f6a171f57acac30c292e223ea8adbb28abd3e14d80b84440c10f19000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000056bc75e2d63100000824a53a0eab71453afe2dd526d44a9a8d722c050ac411002f658fade8b270f4e7e36b6d6a02d309512fa3abc8563ba0800dc0bd3d33ae2fe42cf349a51006a30f285ed755b diff --git a/native/riscv_em_nif/src/tests/erc20.rs b/native/riscv_em_nif/src/tests/erc20.rs new file mode 100644 index 000000000..5b5f6da97 --- /dev/null +++ b/native/riscv_em_nif/src/tests/erc20.rs @@ -0,0 +1,17 @@ +#[cfg(test)] +mod tests { + use crate::core::riscv_machine::evaluate_raw_tx; + use crate::core::state::{serialize_state, deserialize_state}; + + #[test] + fn test_erc20_deploy() { + let state = revm::db::CacheDB::default(); + let raw_tx_hex = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); + let res = evaluate_raw_tx(state, &raw_tx_hex); + let tx = res.1; + println!("{:?}", tx); + let serialized_state = serialize_state(res.0.accounts).unwrap(); + println!("{:?}", serialized_state); + assert_eq!(tx.deployed_contract.unwrap(), "0x602a0eF8ccD015ba98eF4E450F6866C05C4154A1"); + } +} \ No newline at end of file diff --git a/native/riscv_em_nif/src/tests/mod.rs b/native/riscv_em_nif/src/tests/mod.rs new file mode 100644 index 000000000..b8d15175e --- /dev/null +++ b/native/riscv_em_nif/src/tests/mod.rs @@ -0,0 +1 @@ +pub mod erc20; \ No newline at end of file diff --git a/native/riscv_em_nif/src/utils/constants.rs b/native/riscv_em_nif/src/utils/constants.rs index 29323af8d..3782d3771 100644 --- a/native/riscv_em_nif/src/utils/constants.rs +++ b/native/riscv_em_nif/src/utils/constants.rs @@ -1,2 +1,3 @@ pub const TX_GAS_LIMIT: u64 = 10_000_000_000; -pub const GAS_PRICE: u64 = 47; \ No newline at end of file +pub const GAS_PRICE: u64 = 47; +pub const EIP1967_IMPLEMENTATION_SLOT: &str = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; \ No newline at end of file From ef4429568cd6f1f8b7dba702455e7b89ab267a91 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sat, 3 May 2025 12:39:34 +0200 Subject: [PATCH 03/12] feat: full erc20 test suite --- native/riscv_em_nif/src/tests/erc20.rs | 46 ++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/native/riscv_em_nif/src/tests/erc20.rs b/native/riscv_em_nif/src/tests/erc20.rs index 5b5f6da97..f735a2907 100644 --- a/native/riscv_em_nif/src/tests/erc20.rs +++ b/native/riscv_em_nif/src/tests/erc20.rs @@ -2,16 +2,50 @@ mod tests { use crate::core::riscv_machine::evaluate_raw_tx; use crate::core::state::{serialize_state, deserialize_state}; + use revm::primitives::Address; + use r55::test_utils::{add_balance_to_db, ALICE}; + use serde_json::Value; + + + #[test] + fn test_ser_der_state() { + let mut state = revm::db::CacheDB::default(); + // fund alice + add_balance_to_db(&mut state, ALICE, 1e18 as u64); + // serialize db + let serialized_state = serialize_state(state.accounts).unwrap(); + // deserialize db + let mut deserialized_state = deserialize_state(&serialized_state).unwrap(); + let serialized_state: Value = serde_json::from_str(&serialized_state) + .expect("Failed to parse JSON"); + + // retrieve back balances + let alice_balance_ser = serialized_state + .pointer(&format!("/accounts/{}/balance", "0x000000000000000000000000000000000000000a")).unwrap().as_str().unwrap(); + let alice_balance_de = deserialized_state.load_account(ALICE).unwrap().info.balance.to_string(); + assert_eq!(alice_balance_de, alice_balance_ser); + } #[test] fn test_erc20_deploy() { - let state = revm::db::CacheDB::default(); + let mut state = revm::db::CacheDB::default(); + let deployer = Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); + add_balance_to_db(&mut state, deployer, 1e18 as u64); let raw_tx_hex = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); - let res = evaluate_raw_tx(state, &raw_tx_hex); - let tx = res.1; - println!("{:?}", tx); - let serialized_state = serialize_state(res.0.accounts).unwrap(); - println!("{:?}", serialized_state); + let tx = evaluate_raw_tx(state, &raw_tx_hex).1; assert_eq!(tx.deployed_contract.unwrap(), "0x602a0eF8ccD015ba98eF4E450F6866C05C4154A1"); } + + #[test] + fn test_erc20_mint() { + let mut state = revm::db::CacheDB::default(); + let deployer = Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); + add_balance_to_db(&mut state, deployer, 1e18 as u64); + let raw_tx_hex_deploy = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); + let raw_tx_hex_mint = std::fs::read_to_string("src/tests/erc20-mint-signed.txt").unwrap(); + let _res_deploy = evaluate_raw_tx(state.clone(), &raw_tx_hex_deploy); + let res_mint = evaluate_raw_tx(state, &raw_tx_hex_mint.trim()); + println!("{:?}", res_mint.0); + assert!(res_mint.1.status); + } } \ No newline at end of file From 304e202ed486702a0e2bd64b31e53c3da5b8535d Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sat, 3 May 2025 13:41:59 +0200 Subject: [PATCH 04/12] feat: nif functions interfaces --- native/riscv_em_nif/src/lib.rs | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs index a25a4d179..0306bc1f4 100644 --- a/native/riscv_em_nif/src/lib.rs +++ b/native/riscv_em_nif/src/lib.rs @@ -1,2 +1,30 @@ pub mod core; -pub mod utils; \ No newline at end of file +pub mod utils; + +#[cfg(test)] +pub mod tests; + +use core::state::{deserialize_state, serialize_state}; + +use crate::core::riscv_machine::evaluate_raw_tx; +use rustler::NifResult; + +mod atoms { + rustler::atoms! { + ok, + } +} + +#[rustler::nif] +fn hello() -> NifResult { + Ok("hello from riscv em nif".to_string()) +} + +#[rustler::nif] +fn eval_riscv_bytecode(signed_raw_tx: String, state: String) -> NifResult { + let deserialized_state = deserialize_state(&state).map_err(|_| rustler::Error::Atom("Error deserializing json state"))?; + let evaluation_res = evaluate_raw_tx(deserialized_state, &signed_raw_tx); + let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts).map_err(|_| rustler::Error::Atom("Error evaluating calldata"))?; + Ok(serialized_evaluated_state) +} + From 9bb915c2126ff399301b2a075ddfaa933d871ea4 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sat, 3 May 2025 15:25:53 +0200 Subject: [PATCH 05/12] feat: add state utils --- native/riscv_em_nif/src/core/state.rs | 16 ++++++++++++++++ .../riscv_em_nif/src/genesis_configs/7777.json | 7 +++++++ native/riscv_em_nif/src/main.rs | 11 ----------- 3 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 native/riscv_em_nif/src/genesis_configs/7777.json delete mode 100644 native/riscv_em_nif/src/main.rs diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index 0f19fd766..cdbe19ed8 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -190,3 +190,19 @@ pub fn json_error(message: &str) -> String { ) }) } + +#[cfg(test)] +fn get_appchain_base_path() -> String { + "./appchains".to_string() +} + +#[cfg(not(test))] +fn get_appchain_base_path() -> String { + "native/riscv_em_nif/appchains".to_string() +} + +pub fn get_state(chain_id: &str) -> String { + let path = format!("{}/{}.json", get_appchain_base_path(), chain_id); + let state = std::fs::read_to_string(path).unwrap(); + state +} \ No newline at end of file diff --git a/native/riscv_em_nif/src/genesis_configs/7777.json b/native/riscv_em_nif/src/genesis_configs/7777.json new file mode 100644 index 000000000..47923fd4b --- /dev/null +++ b/native/riscv_em_nif/src/genesis_configs/7777.json @@ -0,0 +1,7 @@ +{ + "name": "riscv-smiley", + "chain_id": 7777, + "gas_limit": 10000000000, + "genesis_address": "0xb76FaBf56a6A9872efeA4EF848605D32eAfF13cE", + "genesis_address_balance": 10000000 +} \ No newline at end of file diff --git a/native/riscv_em_nif/src/main.rs b/native/riscv_em_nif/src/main.rs deleted file mode 100644 index 7b3ee1bf7..000000000 --- a/native/riscv_em_nif/src/main.rs +++ /dev/null @@ -1,11 +0,0 @@ -mod core; -mod utils; -mod tests; - -use revm::primitives::db; - -use crate::core::riscv_machine::evaluate_raw_tx; -use crate::core::state::{serialize_state, deserialize_state}; -fn main() { - println!("Hello, world!"); -} From 3eaf5e34e8a3dd27d43780b2087d9319435b30ef Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sun, 4 May 2025 19:10:46 +0200 Subject: [PATCH 06/12] feat: state shallow merge --- native/riscv_em_nif/Cargo.lock | 7 +++++ native/riscv_em_nif/Cargo.toml | 1 + native/riscv_em_nif/src/core/state.rs | 39 +++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/native/riscv_em_nif/Cargo.lock b/native/riscv_em_nif/Cargo.lock index 1bc695b45..174060450 100644 --- a/native/riscv_em_nif/Cargo.lock +++ b/native/riscv_em_nif/Cargo.lock @@ -233,6 +233,12 @@ dependencies = [ "serde", ] +[[package]] +name = "anyhow" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" + [[package]] name = "ark-ff" version = "0.3.0" @@ -3284,6 +3290,7 @@ dependencies = [ "alloy-core", "alloy-primitives", "alloy-sol-types", + "anyhow", "ethers", "ethers-core", "hex", diff --git a/native/riscv_em_nif/Cargo.toml b/native/riscv_em_nif/Cargo.toml index 61ca2beef..67f7f51a8 100644 --- a/native/riscv_em_nif/Cargo.toml +++ b/native/riscv_em_nif/Cargo.toml @@ -22,3 +22,4 @@ serde = {version = "1.0.219", features=["derive"]} serde_json = "1.0.140" ethers-core = "2.0.14" ethers = {version = "2.0.14", features=["rustls"]} +anyhow = "1.0.98" diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index cdbe19ed8..ab7572346 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -5,6 +5,7 @@ use revm::db::{CacheDB, EmptyDB}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use r55::test_utils::Bytecode; +use anyhow::Error; use crate::utils::constants::EIP1967_IMPLEMENTATION_SLOT; #[derive(Serialize, Deserialize)] @@ -191,6 +192,44 @@ pub fn json_error(message: &str) -> String { }) } +pub fn shallow_merge(old_state: &str, new_state: &str) -> Result<(String, bool), Error> { + let mut old: serde_json::Value = serde_json::from_str(&old_state).unwrap(); + let new: serde_json::Value = serde_json::from_str(&new_state).unwrap(); + let mut is_updated = false; + + // merge states + if let (Some(existing_accounts), Some(new_accounts)) = + (old.get_mut("accounts"), new.get("accounts")) + { + for (k, v) in new_accounts.as_object().unwrap() { + existing_accounts + .as_object_mut() + .unwrap() + .insert(k.clone(), v.clone()); + is_updated = true; + } + } + + if let (Some(existing_storage), Some(new_storage)) = + (old.get_mut("storage"), new.get("storage")) + { + for (k, v) in new_storage.as_object().unwrap() { + existing_storage + .as_object_mut() + .unwrap() + .insert(k.clone(), v.clone()); + is_updated = true; + } + } + + let merged_state = old.to_string(); + return Ok((merged_state, is_updated)); + +} + + + + #[cfg(test)] fn get_appchain_base_path() -> String { "./appchains".to_string() From 92938ee2c041adb77235fe4046f21bf9b72a44fa Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sun, 4 May 2025 19:20:29 +0200 Subject: [PATCH 07/12] feat: get appchains state --- .../riscv_em_nif/{src => }/genesis_configs/7777.json | 0 native/riscv_em_nif/src/core/state.rs | 2 +- native/riscv_em_nif/src/lib.rs | 11 +++++++++-- native/riscv_em_nif/src/tests/erc20.rs | 8 +++++++- 4 files changed, 17 insertions(+), 4 deletions(-) rename native/riscv_em_nif/{src => }/genesis_configs/7777.json (100%) diff --git a/native/riscv_em_nif/src/genesis_configs/7777.json b/native/riscv_em_nif/genesis_configs/7777.json similarity index 100% rename from native/riscv_em_nif/src/genesis_configs/7777.json rename to native/riscv_em_nif/genesis_configs/7777.json diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index ab7572346..89652aa20 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -242,6 +242,6 @@ fn get_appchain_base_path() -> String { pub fn get_state(chain_id: &str) -> String { let path = format!("{}/{}.json", get_appchain_base_path(), chain_id); - let state = std::fs::read_to_string(path).unwrap(); + let state = std::fs::read_to_string(path).unwrap_or_default(); state } \ No newline at end of file diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs index 0306bc1f4..1c681f865 100644 --- a/native/riscv_em_nif/src/lib.rs +++ b/native/riscv_em_nif/src/lib.rs @@ -4,7 +4,7 @@ pub mod utils; #[cfg(test)] pub mod tests; -use core::state::{deserialize_state, serialize_state}; +use core::state::{deserialize_state, serialize_state, get_state}; use crate::core::riscv_machine::evaluate_raw_tx; use rustler::NifResult; @@ -17,7 +17,7 @@ mod atoms { #[rustler::nif] fn hello() -> NifResult { - Ok("hello from riscv em nif".to_string()) + Ok("hello from riscv-em nif".to_string()) } #[rustler::nif] @@ -28,3 +28,10 @@ fn eval_riscv_bytecode(signed_raw_tx: String, state: String) -> NifResult NifResult { + let state = get_state(chain_id); + Ok(state) +} + +rustler::init!("riscv_em_nif", [hello, eval_riscv_bytecode, get_appchain_state]); \ No newline at end of file diff --git a/native/riscv_em_nif/src/tests/erc20.rs b/native/riscv_em_nif/src/tests/erc20.rs index f735a2907..fb2225652 100644 --- a/native/riscv_em_nif/src/tests/erc20.rs +++ b/native/riscv_em_nif/src/tests/erc20.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod tests { use crate::core::riscv_machine::evaluate_raw_tx; - use crate::core::state::{serialize_state, deserialize_state}; + use crate::core::state::{serialize_state, deserialize_state, get_state}; use revm::primitives::Address; use r55::test_utils::{add_balance_to_db, ALICE}; use serde_json::Value; @@ -48,4 +48,10 @@ mod tests { println!("{:?}", res_mint.0); assert!(res_mint.1.status); } + + #[test] + fn get_appchain_state() { + let state = get_state("7777"); + println!("{:?}", state); + } } \ No newline at end of file From 43ab7c0f6bb5c531446d7682b17183bd8a2d0ec5 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Sun, 4 May 2025 20:15:29 +0200 Subject: [PATCH 08/12] feat: genesis & state initialization --- native/riscv_em_nif/src/core/state.rs | 10 ++-- native/riscv_em_nif/src/utils/config.rs | 77 +++++++++++++++++++++++++ native/riscv_em_nif/src/utils/mod.rs | 3 +- 3 files changed, 84 insertions(+), 6 deletions(-) create mode 100644 native/riscv_em_nif/src/utils/config.rs diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index 89652aa20..26a3f4648 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -231,17 +231,17 @@ pub fn shallow_merge(old_state: &str, new_state: &str) -> Result<(String, bool), #[cfg(test)] -fn get_appchain_base_path() -> String { - "./appchains".to_string() +pub fn get_base_path(dir: &str) -> String { + format!("./{}", dir) } #[cfg(not(test))] -fn get_appchain_base_path() -> String { - "native/riscv_em_nif/appchains".to_string() +pub fn get_base_path(dir: &str) -> String { + format!("native/riscv_em_nif/{}", dir) } pub fn get_state(chain_id: &str) -> String { - let path = format!("{}/{}.json", get_appchain_base_path(), chain_id); + let path = format!("{}/{}.json", get_base_path("appchains"), chain_id); let state = std::fs::read_to_string(path).unwrap_or_default(); state } \ No newline at end of file diff --git a/native/riscv_em_nif/src/utils/config.rs b/native/riscv_em_nif/src/utils/config.rs new file mode 100644 index 000000000..7bb958c6f --- /dev/null +++ b/native/riscv_em_nif/src/utils/config.rs @@ -0,0 +1,77 @@ +use r55::test_utils::add_balance_to_db; +use serde::{Deserialize, Serialize}; +use alloy_primitives::Address; +use std::str::FromStr; + +use crate::core::state::{deserialize_state, serialize_state, get_state, get_base_path}; +use crate::core::riscv_machine::RevmDb; + +pub enum GeneratedState { + Default(RevmDb), + Serialized(String), + +} + +impl GeneratedState { + pub fn get_default(self) -> Option { + match self { + GeneratedState::Default(state) => Some(state), + _ => None + } + } + + pub fn get_serialized(self) -> Option { + match self { + GeneratedState::Serialized(state) => Some(state), + _ => None + } + } +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct GenesisConfig { + pub name: String, + pub chain_id: u32, + pub gas_limit: u64, + pub genesis_address: String, + pub genesis_address_balance: u64 +} + +pub fn get_genesis_config(chain_id: &str) -> String { + let path = format!("{}/{}.json", get_base_path("genesis_configs"), chain_id); + let state = std::fs::read_to_string(path).unwrap_or_default(); + state +} +pub fn generate_empty_state(serialized: bool) -> GeneratedState { + let state = RevmDb::default(); + if serialized { + let serialized_state = serialize_state(state.accounts).unwrap(); + GeneratedState::Serialized(serialized_state) + } else { + GeneratedState::Default(state) + } +} + +pub fn init_new_appchain(chain_id: &str) -> bool { + let does_exist = get_state(chain_id).len() > 0; + let genesis_config = get_genesis_config(chain_id); + if does_exist || genesis_config.len() == 0 { + false // chain initiated or missing genesis file + } else { + let genesis: GenesisConfig = serde_json::from_str(&genesis_config).unwrap(); + let mut generated_state = generate_empty_state(false).get_default().unwrap(); + + let genesis_address = Address::from_str(&genesis.genesis_address).unwrap(); + let genesis_balance = genesis.genesis_address_balance; // todo: wei eth + add_balance_to_db(&mut generated_state, genesis_address, genesis_balance); + let serialized_state = serialize_state(generated_state.accounts).unwrap(); + let _ = std::fs::write(format!("{}/{}.json", get_base_path("appchains"), chain_id), serialized_state); + true + } +} + +#[test] +fn test_chain_init() { + let init = init_new_appchain("1"); + assert!(init) +} \ No newline at end of file diff --git a/native/riscv_em_nif/src/utils/mod.rs b/native/riscv_em_nif/src/utils/mod.rs index 987b09fc8..541d75fd1 100644 --- a/native/riscv_em_nif/src/utils/mod.rs +++ b/native/riscv_em_nif/src/utils/mod.rs @@ -1 +1,2 @@ -pub mod constants; \ No newline at end of file +pub mod constants; +pub mod config; \ No newline at end of file From 3aff3b14e6abc63bbd7b5858259d92c7936491c9 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Mon, 5 May 2025 00:14:09 +0200 Subject: [PATCH 09/12] chore: commit uncommited appchain dir --- native/riscv_em_nif/appchains/1.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 native/riscv_em_nif/appchains/1.json diff --git a/native/riscv_em_nif/appchains/1.json b/native/riscv_em_nif/appchains/1.json new file mode 100644 index 000000000..efc44353e --- /dev/null +++ b/native/riscv_em_nif/appchains/1.json @@ -0,0 +1 @@ +{"accounts":{"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{"nonce":0,"balance":"10000000","code":null}},"storage":{"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{}}} \ No newline at end of file From f951bd8e084f7a8560b519a077fc88f7467007bd Mon Sep 17 00:00:00 2001 From: charmful0x Date: Mon, 5 May 2025 00:37:36 +0200 Subject: [PATCH 10/12] feat: mvp-ready eval_riscv_bytecode --- native/riscv_em_nif/appchains/1.json | 2 +- native/riscv_em_nif/src/lib.rs | 18 +++++++++++++++--- native/riscv_em_nif/src/tests/erc20.rs | 18 +++++++++++++++++- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/native/riscv_em_nif/appchains/1.json b/native/riscv_em_nif/appchains/1.json index efc44353e..2eae5947c 100644 --- a/native/riscv_em_nif/appchains/1.json +++ b/native/riscv_em_nif/appchains/1.json @@ -1 +1 @@ -{"accounts":{"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{"nonce":0,"balance":"10000000","code":null}},"storage":{"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{}}} \ No newline at end of file +{"accounts":{"0x0000000000000000000000000000000000000000":{"balance":"0","code":null,"nonce":0},"0x602a0ef8ccd015ba98ef4e450f6866c05c4154a1":{"balance":"0","code":null,"nonce":1},"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{"balance":"10000000","code":null,"nonce":1}},"storage":{"0x0000000000000000000000000000000000000000":{},"0x602a0ef8ccd015ba98ef4e450f6866c05c4154a1":{},"0xb76fabf56a6a9872efea4ef848605d32eaff13ce":{}}} \ No newline at end of file diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs index 1c681f865..8011e3e19 100644 --- a/native/riscv_em_nif/src/lib.rs +++ b/native/riscv_em_nif/src/lib.rs @@ -4,8 +4,7 @@ pub mod utils; #[cfg(test)] pub mod tests; -use core::state::{deserialize_state, serialize_state, get_state}; - +use core::state::{deserialize_state, serialize_state, get_state, shallow_merge, get_base_path}; use crate::core::riscv_machine::evaluate_raw_tx; use rustler::NifResult; @@ -21,10 +20,23 @@ fn hello() -> NifResult { } #[rustler::nif] -fn eval_riscv_bytecode(signed_raw_tx: String, state: String) -> NifResult { +fn eval_riscv_bytecode(signed_raw_tx: String, chain_id: String) -> NifResult { + let state = get_state(&chain_id); + + if state.len() == 0 { + return Ok(serde_json::json!({"error": "invalid chain_id"}).to_string()) + }; + let deserialized_state = deserialize_state(&state).map_err(|_| rustler::Error::Atom("Error deserializing json state"))?; let evaluation_res = evaluate_raw_tx(deserialized_state, &signed_raw_tx); let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts).map_err(|_| rustler::Error::Atom("Error evaluating calldata"))?; + let merged_states = shallow_merge(&state, &serialized_evaluated_state).map_err(|_| rustler::Error::Atom("Error shallow merging states"))?; + + if merged_states.1 { + let path = format!("{}/{}.json", get_base_path("appchains"), chain_id); + let _state_update = std::fs::write(path, merged_states.0).map_err(|_| rustler::Error::Atom("Error saving new state"))?;; + } + Ok(serialized_evaluated_state) } diff --git a/native/riscv_em_nif/src/tests/erc20.rs b/native/riscv_em_nif/src/tests/erc20.rs index fb2225652..fa7ed62f3 100644 --- a/native/riscv_em_nif/src/tests/erc20.rs +++ b/native/riscv_em_nif/src/tests/erc20.rs @@ -1,7 +1,7 @@ #[cfg(test)] mod tests { use crate::core::riscv_machine::evaluate_raw_tx; - use crate::core::state::{serialize_state, deserialize_state, get_state}; + use crate::core::state::{serialize_state, deserialize_state, get_state, shallow_merge, get_base_path}; use revm::primitives::Address; use r55::test_utils::{add_balance_to_db, ALICE}; use serde_json::Value; @@ -26,6 +26,22 @@ mod tests { assert_eq!(alice_balance_de, alice_balance_ser); } + #[test] + fn test_eval_riscv_bytecode() { + let raw_tx_hex = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); + let state = get_state("1"); + assert_ne!(state.len(), 0); + + let deserialized_state = deserialize_state(&state).unwrap(); + let evaluation_res = evaluate_raw_tx(deserialized_state, &raw_tx_hex); + let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts).unwrap(); + let merged_states = shallow_merge(&state, &serialized_evaluated_state).unwrap(); + + assert!(merged_states.1); + let path = format!("{}/{}.json", get_base_path("appchains"), 1); + let _state_update = std::fs::write(path, merged_states.0).unwrap(); + } + #[test] fn test_erc20_deploy() { let mut state = revm::db::CacheDB::default(); From 8bed5f14bdfc043034f7f23685d472d229896e15 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Mon, 5 May 2025 00:38:00 +0200 Subject: [PATCH 11/12] chore: gmt --- native/riscv_em_nif/src/core/mod.rs | 2 +- native/riscv_em_nif/src/core/riscv_machine.rs | 6 +- native/riscv_em_nif/src/core/state.rs | 72 +++++++++---------- native/riscv_em_nif/src/lib.rs | 29 +++++--- native/riscv_em_nif/src/tests/erc20.rs | 50 ++++++++----- native/riscv_em_nif/src/tests/mod.rs | 2 +- native/riscv_em_nif/src/utils/config.rs | 20 +++--- native/riscv_em_nif/src/utils/constants.rs | 3 +- native/riscv_em_nif/src/utils/mod.rs | 2 +- 9 files changed, 105 insertions(+), 81 deletions(-) diff --git a/native/riscv_em_nif/src/core/mod.rs b/native/riscv_em_nif/src/core/mod.rs index 1abe541a3..d4df89aad 100644 --- a/native/riscv_em_nif/src/core/mod.rs +++ b/native/riscv_em_nif/src/core/mod.rs @@ -1,2 +1,2 @@ pub mod riscv_machine; -pub mod state; \ No newline at end of file +pub mod state; diff --git a/native/riscv_em_nif/src/core/riscv_machine.rs b/native/riscv_em_nif/src/core/riscv_machine.rs index 55d70252c..7f78eadd9 100644 --- a/native/riscv_em_nif/src/core/riscv_machine.rs +++ b/native/riscv_em_nif/src/core/riscv_machine.rs @@ -1,6 +1,6 @@ -use r55::exec::eval_tx; -use r55::eval_utils::{LoadEvmConfig, EvalTxResult}; use crate::utils::constants::{GAS_PRICE, TX_GAS_LIMIT}; +use r55::eval_utils::{EvalTxResult, LoadEvmConfig}; +use r55::exec::eval_tx; pub type RevmDb = revm::db::CacheDB>; @@ -8,4 +8,4 @@ pub fn evaluate_raw_tx(mut state: RevmDb, raw_tx_hex: &str) -> (RevmDb, EvalTxRe let evm_config = LoadEvmConfig::custom(Some(TX_GAS_LIMIT), Some(GAS_PRICE)); let tx_result: EvalTxResult = eval_tx(&mut state, raw_tx_hex, Some(evm_config)).unwrap(); (state, tx_result) -} \ No newline at end of file +} diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index 26a3f4648..e20fbc32f 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -1,12 +1,12 @@ -use alloy_primitives::{map::foldhash::fast::RandomState, Address, Bytes, U256}; +use crate::utils::constants::EIP1967_IMPLEMENTATION_SLOT; +use alloy_primitives::{Address, Bytes, U256, map::foldhash::fast::RandomState}; +use anyhow::Error; use r55::test_utils::AccountInfo; +use r55::test_utils::Bytecode; use revm::db::DbAccount; use revm::db::{CacheDB, EmptyDB}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; -use r55::test_utils::Bytecode; -use anyhow::Error; -use crate::utils::constants::EIP1967_IMPLEMENTATION_SLOT; #[derive(Serialize, Deserialize)] pub struct AccountState { @@ -193,42 +193,38 @@ pub fn json_error(message: &str) -> String { } pub fn shallow_merge(old_state: &str, new_state: &str) -> Result<(String, bool), Error> { - let mut old: serde_json::Value = serde_json::from_str(&old_state).unwrap(); - let new: serde_json::Value = serde_json::from_str(&new_state).unwrap(); - let mut is_updated = false; - - // merge states - if let (Some(existing_accounts), Some(new_accounts)) = - (old.get_mut("accounts"), new.get("accounts")) - { - for (k, v) in new_accounts.as_object().unwrap() { - existing_accounts - .as_object_mut() - .unwrap() - .insert(k.clone(), v.clone()); - is_updated = true; - } - } + let mut old: serde_json::Value = serde_json::from_str(&old_state).unwrap(); + let new: serde_json::Value = serde_json::from_str(&new_state).unwrap(); + let mut is_updated = false; + + // merge states + if let (Some(existing_accounts), Some(new_accounts)) = + (old.get_mut("accounts"), new.get("accounts")) + { + for (k, v) in new_accounts.as_object().unwrap() { + existing_accounts + .as_object_mut() + .unwrap() + .insert(k.clone(), v.clone()); + is_updated = true; + } + } - if let (Some(existing_storage), Some(new_storage)) = - (old.get_mut("storage"), new.get("storage")) - { - for (k, v) in new_storage.as_object().unwrap() { - existing_storage - .as_object_mut() - .unwrap() - .insert(k.clone(), v.clone()); - is_updated = true; - } - } + if let (Some(existing_storage), Some(new_storage)) = + (old.get_mut("storage"), new.get("storage")) + { + for (k, v) in new_storage.as_object().unwrap() { + existing_storage + .as_object_mut() + .unwrap() + .insert(k.clone(), v.clone()); + is_updated = true; + } + } - let merged_state = old.to_string(); - return Ok((merged_state, is_updated)); - + let merged_state = old.to_string(); + return Ok((merged_state, is_updated)); } - - - #[cfg(test)] pub fn get_base_path(dir: &str) -> String { @@ -244,4 +240,4 @@ pub fn get_state(chain_id: &str) -> String { let path = format!("{}/{}.json", get_base_path("appchains"), chain_id); let state = std::fs::read_to_string(path).unwrap_or_default(); state -} \ No newline at end of file +} diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs index 8011e3e19..c8059464f 100644 --- a/native/riscv_em_nif/src/lib.rs +++ b/native/riscv_em_nif/src/lib.rs @@ -4,8 +4,8 @@ pub mod utils; #[cfg(test)] pub mod tests; -use core::state::{deserialize_state, serialize_state, get_state, shallow_merge, get_base_path}; use crate::core::riscv_machine::evaluate_raw_tx; +use core::state::{deserialize_state, get_base_path, get_state, serialize_state, shallow_merge}; use rustler::NifResult; mod atoms { @@ -22,19 +22,23 @@ fn hello() -> NifResult { #[rustler::nif] fn eval_riscv_bytecode(signed_raw_tx: String, chain_id: String) -> NifResult { let state = get_state(&chain_id); - + if state.len() == 0 { - return Ok(serde_json::json!({"error": "invalid chain_id"}).to_string()) - }; + return Ok(serde_json::json!({"error": "invalid chain_id"}).to_string()); + }; - let deserialized_state = deserialize_state(&state).map_err(|_| rustler::Error::Atom("Error deserializing json state"))?; + let deserialized_state = deserialize_state(&state) + .map_err(|_| rustler::Error::Atom("Error deserializing json state"))?; let evaluation_res = evaluate_raw_tx(deserialized_state, &signed_raw_tx); - let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts).map_err(|_| rustler::Error::Atom("Error evaluating calldata"))?; - let merged_states = shallow_merge(&state, &serialized_evaluated_state).map_err(|_| rustler::Error::Atom("Error shallow merging states"))?; - + let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts) + .map_err(|_| rustler::Error::Atom("Error evaluating calldata"))?; + let merged_states = shallow_merge(&state, &serialized_evaluated_state) + .map_err(|_| rustler::Error::Atom("Error shallow merging states"))?; + if merged_states.1 { let path = format!("{}/{}.json", get_base_path("appchains"), chain_id); - let _state_update = std::fs::write(path, merged_states.0).map_err(|_| rustler::Error::Atom("Error saving new state"))?;; + let _state_update = std::fs::write(path, merged_states.0) + .map_err(|_| rustler::Error::Atom("Error saving new state"))?; } Ok(serialized_evaluated_state) @@ -42,8 +46,11 @@ fn eval_riscv_bytecode(signed_raw_tx: String, chain_id: String) -> NifResult NifResult { - let state = get_state(chain_id); + let state = get_state(chain_id); Ok(state) } -rustler::init!("riscv_em_nif", [hello, eval_riscv_bytecode, get_appchain_state]); \ No newline at end of file +rustler::init!( + "riscv_em_nif", + [hello, eval_riscv_bytecode, get_appchain_state] +); diff --git a/native/riscv_em_nif/src/tests/erc20.rs b/native/riscv_em_nif/src/tests/erc20.rs index fa7ed62f3..0fbae6f3f 100644 --- a/native/riscv_em_nif/src/tests/erc20.rs +++ b/native/riscv_em_nif/src/tests/erc20.rs @@ -1,12 +1,13 @@ #[cfg(test)] mod tests { use crate::core::riscv_machine::evaluate_raw_tx; - use crate::core::state::{serialize_state, deserialize_state, get_state, shallow_merge, get_base_path}; + use crate::core::state::{ + deserialize_state, get_base_path, get_state, serialize_state, shallow_merge, + }; + use r55::test_utils::{ALICE, add_balance_to_db}; use revm::primitives::Address; - use r55::test_utils::{add_balance_to_db, ALICE}; use serde_json::Value; - #[test] fn test_ser_der_state() { let mut state = revm::db::CacheDB::default(); @@ -16,13 +17,24 @@ mod tests { let serialized_state = serialize_state(state.accounts).unwrap(); // deserialize db let mut deserialized_state = deserialize_state(&serialized_state).unwrap(); - let serialized_state: Value = serde_json::from_str(&serialized_state) - .expect("Failed to parse JSON"); + let serialized_state: Value = + serde_json::from_str(&serialized_state).expect("Failed to parse JSON"); // retrieve back balances let alice_balance_ser = serialized_state - .pointer(&format!("/accounts/{}/balance", "0x000000000000000000000000000000000000000a")).unwrap().as_str().unwrap(); - let alice_balance_de = deserialized_state.load_account(ALICE).unwrap().info.balance.to_string(); + .pointer(&format!( + "/accounts/{}/balance", + "0x000000000000000000000000000000000000000a" + )) + .unwrap() + .as_str() + .unwrap(); + let alice_balance_de = deserialized_state + .load_account(ALICE) + .unwrap() + .info + .balance + .to_string(); assert_eq!(alice_balance_de, alice_balance_ser); } @@ -31,12 +43,12 @@ mod tests { let raw_tx_hex = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); let state = get_state("1"); assert_ne!(state.len(), 0); - + let deserialized_state = deserialize_state(&state).unwrap(); let evaluation_res = evaluate_raw_tx(deserialized_state, &raw_tx_hex); let serialized_evaluated_state = serialize_state(evaluation_res.0.accounts).unwrap(); let merged_states = shallow_merge(&state, &serialized_evaluated_state).unwrap(); - + assert!(merged_states.1); let path = format!("{}/{}.json", get_base_path("appchains"), 1); let _state_update = std::fs::write(path, merged_states.0).unwrap(); @@ -45,21 +57,27 @@ mod tests { #[test] fn test_erc20_deploy() { let mut state = revm::db::CacheDB::default(); - let deployer = Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); + let deployer = + Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); add_balance_to_db(&mut state, deployer, 1e18 as u64); let raw_tx_hex = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); - let tx = evaluate_raw_tx(state, &raw_tx_hex).1; - assert_eq!(tx.deployed_contract.unwrap(), "0x602a0eF8ccD015ba98eF4E450F6866C05C4154A1"); + let tx = evaluate_raw_tx(state, &raw_tx_hex).1; + assert_eq!( + tx.deployed_contract.unwrap(), + "0x602a0eF8ccD015ba98eF4E450F6866C05C4154A1" + ); } #[test] fn test_erc20_mint() { let mut state = revm::db::CacheDB::default(); - let deployer = Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); + let deployer = + Address::from_slice(&hex::decode("b76FaBf56a6A9872efeA4EF848605D32eAfF13cE").unwrap()); add_balance_to_db(&mut state, deployer, 1e18 as u64); - let raw_tx_hex_deploy = std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); + let raw_tx_hex_deploy = + std::fs::read_to_string("src/tests/erc20-bytecode-signed.txt").unwrap(); let raw_tx_hex_mint = std::fs::read_to_string("src/tests/erc20-mint-signed.txt").unwrap(); - let _res_deploy = evaluate_raw_tx(state.clone(), &raw_tx_hex_deploy); + let _res_deploy = evaluate_raw_tx(state.clone(), &raw_tx_hex_deploy); let res_mint = evaluate_raw_tx(state, &raw_tx_hex_mint.trim()); println!("{:?}", res_mint.0); assert!(res_mint.1.status); @@ -70,4 +88,4 @@ mod tests { let state = get_state("7777"); println!("{:?}", state); } -} \ No newline at end of file +} diff --git a/native/riscv_em_nif/src/tests/mod.rs b/native/riscv_em_nif/src/tests/mod.rs index b8d15175e..8f3777f6b 100644 --- a/native/riscv_em_nif/src/tests/mod.rs +++ b/native/riscv_em_nif/src/tests/mod.rs @@ -1 +1 @@ -pub mod erc20; \ No newline at end of file +pub mod erc20; diff --git a/native/riscv_em_nif/src/utils/config.rs b/native/riscv_em_nif/src/utils/config.rs index 7bb958c6f..eea3e18e1 100644 --- a/native/riscv_em_nif/src/utils/config.rs +++ b/native/riscv_em_nif/src/utils/config.rs @@ -1,29 +1,28 @@ +use alloy_primitives::Address; use r55::test_utils::add_balance_to_db; use serde::{Deserialize, Serialize}; -use alloy_primitives::Address; use std::str::FromStr; -use crate::core::state::{deserialize_state, serialize_state, get_state, get_base_path}; use crate::core::riscv_machine::RevmDb; +use crate::core::state::{deserialize_state, get_base_path, get_state, serialize_state}; pub enum GeneratedState { Default(RevmDb), Serialized(String), - } impl GeneratedState { pub fn get_default(self) -> Option { match self { GeneratedState::Default(state) => Some(state), - _ => None + _ => None, } } pub fn get_serialized(self) -> Option { match self { GeneratedState::Serialized(state) => Some(state), - _ => None + _ => None, } } } @@ -34,7 +33,7 @@ pub struct GenesisConfig { pub chain_id: u32, pub gas_limit: u64, pub genesis_address: String, - pub genesis_address_balance: u64 + pub genesis_address_balance: u64, } pub fn get_genesis_config(chain_id: &str) -> String { @@ -46,7 +45,7 @@ pub fn generate_empty_state(serialized: bool) -> GeneratedState { let state = RevmDb::default(); if serialized { let serialized_state = serialize_state(state.accounts).unwrap(); - GeneratedState::Serialized(serialized_state) + GeneratedState::Serialized(serialized_state) } else { GeneratedState::Default(state) } @@ -65,7 +64,10 @@ pub fn init_new_appchain(chain_id: &str) -> bool { let genesis_balance = genesis.genesis_address_balance; // todo: wei eth add_balance_to_db(&mut generated_state, genesis_address, genesis_balance); let serialized_state = serialize_state(generated_state.accounts).unwrap(); - let _ = std::fs::write(format!("{}/{}.json", get_base_path("appchains"), chain_id), serialized_state); + let _ = std::fs::write( + format!("{}/{}.json", get_base_path("appchains"), chain_id), + serialized_state, + ); true } } @@ -74,4 +76,4 @@ pub fn init_new_appchain(chain_id: &str) -> bool { fn test_chain_init() { let init = init_new_appchain("1"); assert!(init) -} \ No newline at end of file +} diff --git a/native/riscv_em_nif/src/utils/constants.rs b/native/riscv_em_nif/src/utils/constants.rs index 3782d3771..f3017bd2c 100644 --- a/native/riscv_em_nif/src/utils/constants.rs +++ b/native/riscv_em_nif/src/utils/constants.rs @@ -1,3 +1,4 @@ pub const TX_GAS_LIMIT: u64 = 10_000_000_000; pub const GAS_PRICE: u64 = 47; -pub const EIP1967_IMPLEMENTATION_SLOT: &str = "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; \ No newline at end of file +pub const EIP1967_IMPLEMENTATION_SLOT: &str = + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; diff --git a/native/riscv_em_nif/src/utils/mod.rs b/native/riscv_em_nif/src/utils/mod.rs index 541d75fd1..6918496cd 100644 --- a/native/riscv_em_nif/src/utils/mod.rs +++ b/native/riscv_em_nif/src/utils/mod.rs @@ -1,2 +1,2 @@ +pub mod config; pub mod constants; -pub mod config; \ No newline at end of file From 6ff2aad7343fa93904f4ccc8e17140a21bbe0665 Mon Sep 17 00:00:00 2001 From: charmful0x Date: Mon, 5 May 2025 12:39:20 +0200 Subject: [PATCH 12/12] feat: dev_riscv_em device interface --- config.flat | 2 +- native/riscv_em_nif/src/core/state.rs | 2 +- native/riscv_em_nif/src/lib.rs | 2 +- native/riscv_em_nif/src/utils/config.rs | 2 +- rebar.config | 3 +- src/dev_riscv_em.erl | 42 ++++++++++++++++++++++++ src/hb_opts.erl | 3 +- src/riscv_em_nif.erl | 43 +++++++++++++++++++++++++ src/riscv_em_nif_test.erl | 40 +++++++++++++++++++++++ 9 files changed, 133 insertions(+), 6 deletions(-) create mode 100644 src/dev_riscv_em.erl create mode 100644 src/riscv_em_nif.erl create mode 100644 src/riscv_em_nif_test.erl diff --git a/config.flat b/config.flat index f5ff749fa..b1f25dc70 100644 --- a/config.flat +++ b/config.flat @@ -1 +1 @@ -port: 10000 +port: 10001 diff --git a/native/riscv_em_nif/src/core/state.rs b/native/riscv_em_nif/src/core/state.rs index e20fbc32f..5347fcf6d 100644 --- a/native/riscv_em_nif/src/core/state.rs +++ b/native/riscv_em_nif/src/core/state.rs @@ -1,5 +1,5 @@ use crate::utils::constants::EIP1967_IMPLEMENTATION_SLOT; -use alloy_primitives::{Address, Bytes, U256, map::foldhash::fast::RandomState}; +use alloy_primitives::{Address, U256, map::foldhash::fast::RandomState}; use anyhow::Error; use r55::test_utils::AccountInfo; use r55::test_utils::Bytecode; diff --git a/native/riscv_em_nif/src/lib.rs b/native/riscv_em_nif/src/lib.rs index c8059464f..6aa9e3907 100644 --- a/native/riscv_em_nif/src/lib.rs +++ b/native/riscv_em_nif/src/lib.rs @@ -53,4 +53,4 @@ fn get_appchain_state(chain_id: &str) -> NifResult { rustler::init!( "riscv_em_nif", [hello, eval_riscv_bytecode, get_appchain_state] -); +); \ No newline at end of file diff --git a/native/riscv_em_nif/src/utils/config.rs b/native/riscv_em_nif/src/utils/config.rs index eea3e18e1..ff83c79da 100644 --- a/native/riscv_em_nif/src/utils/config.rs +++ b/native/riscv_em_nif/src/utils/config.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use std::str::FromStr; use crate::core::riscv_machine::RevmDb; -use crate::core::state::{deserialize_state, get_base_path, get_state, serialize_state}; +use crate::core::state::{get_base_path, get_state, serialize_state}; pub enum GeneratedState { Default(RevmDb), diff --git a/rebar.config b/rebar.config index 7b6784073..8aa44514c 100644 --- a/rebar.config +++ b/rebar.config @@ -34,7 +34,8 @@ {cargo_opts, [ {src_dir, "native/dev_snp_nif"}, - {src_dir, "native/load_revm_nif"} + {src_dir, "native/load_revm_nif"}, + {src_dir, "native/riscv_em_nif"} ]}. {overrides, []}. diff --git a/src/dev_riscv_em.erl b/src/dev_riscv_em.erl new file mode 100644 index 000000000..76b83a99e --- /dev/null +++ b/src/dev_riscv_em.erl @@ -0,0 +1,42 @@ +%%% @doc a device to interact with the RISC-V execution machine, running RISC-V smart contract along EVM ones. +-module(dev_riscv_em). +-export([info/1, info/3, get_state/3]). + +info(_) -> + #{ + <<"default">> => dev_message, + handlers => #{ + <<"info">> => fun info/3, + <<"get_state">> => fun get_state/3 + } + }. +%% @doc return riscv_evm device info +info(_Msg1, _Msg2, _Opts) -> + InfoBody = #{ + <<"description">> => <<"RISC-V EM device for deploying and running RISC-V smart contracts along EVM smart contracts.">>, + <<"version">> => <<"1.0">>, + <<"paths">> => #{ + <<"info">> => <<"Get device info">>, + <<"get_state">> => <<"Get appchain state">> + } + }, + {ok, #{<<"status">> => 200, <<"body">> => InfoBody}}. +%% @doc get the JSON-serialized EVM state for a given chain_id +get_state(Msg1, _Msg2, Opts) -> + ChainId = case hb_ao:get(<<"chain_id">>, Msg1, not_found, Opts) of + not_found -> <<"1">>; % default chain id + Id -> Id + end, + try + Result = riscv_em_nif:get_appchain_state(ChainId), + {ok, #{<<"status">> => 200, <<"body">> => Result}} + catch + error:Error -> + {error, #{ + <<"status">> => 500, + <<"body">> => #{ + <<"error">> => <<"Failed to get appchain state">>, + <<"details">> => Error + } + }} + end. \ No newline at end of file diff --git a/src/hb_opts.erl b/src/hb_opts.erl index 5f20fe4ba..f6ea25c5b 100644 --- a/src/hb_opts.erl +++ b/src/hb_opts.erl @@ -88,7 +88,8 @@ default_message() -> #{<<"name">> => <<"wasi@1.0">>, <<"module">> => dev_wasi}, #{<<"name">> => <<"wasm-64@1.0">>, <<"module">> => dev_wasm}, % temporal hack, for the future should load it from config - #{<<"name">> => <<"evm@1.0">>, <<"module">> => dev_evm} + #{<<"name">> => <<"evm@1.0">>, <<"module">> => dev_evm}, + #{<<"name">> => <<"riscv-em@1.0">>, <<"module">> => dev_riscv_em} ], %% Default execution cache control options cache_control => [<<"no-cache">>, <<"no-store">>], diff --git a/src/riscv_em_nif.erl b/src/riscv_em_nif.erl new file mode 100644 index 000000000..c742cb7d1 --- /dev/null +++ b/src/riscv_em_nif.erl @@ -0,0 +1,43 @@ +-module(riscv_em_nif). +-export([hello/0, eval_riscv_bytecode/2, get_appchain_state/1]). + +-on_load(init/0). +-define(NOT_LOADED, not_loaded(?LINE)). + +-spec hello() -> binary(). +hello() -> + ?NOT_LOADED. + +-spec eval_riscv_bytecode(binary(), binary()) -> binary(). +eval_riscv_bytecode(SignedRawTx, ChainId) when is_binary(SignedRawTx), is_binary(ChainId) -> + ?NOT_LOADED. + +-spec get_appchain_state(binary()) -> binary(). +get_appchain_state(ChainId) when is_binary(ChainId) -> + ?NOT_LOADED. + +init() -> + % Get the current directory for debugging + {ok, Cwd} = file:get_cwd(), + io:format("Current directory: ~p~n", [Cwd]), + + PrivDir = case code:priv_dir(hb) of + {error, _} -> "priv"; + Dir -> Dir + end, + + % Build the NIF path using the priv directory + NifPath = filename:join([PrivDir, "crates", "riscv_em_nif", "riscv_em_nif"]), + io:format("NIF path: ~p~n", [NifPath]), + + % Check if the NIF file exists + NifSoPath = NifPath ++ ".so", + io:format("NIF .so exists: ~p~n", [filelib:is_file(NifSoPath)]), + + % Try to load the NIF + Result = erlang:load_nif(NifPath, 0), + io:format("Load result: ~p~n", [Result]), + + Result. +not_loaded(Line) -> + erlang:nif_error({not_loaded, [{module, ?MODULE}, {line, Line}]}). diff --git a/src/riscv_em_nif_test.erl b/src/riscv_em_nif_test.erl new file mode 100644 index 000000000..50f23725b --- /dev/null +++ b/src/riscv_em_nif_test.erl @@ -0,0 +1,40 @@ +-module(riscv_em_nif_test). +-export([test/0]). + +test() -> + io:format("~n__riscv_em_nif__~n"), + ChainId = list_to_binary("1"), + + % Test hello function + try + HelloResult = riscv_em_nif:hello(), + io:format("~nhello() result: ~p~n", [HelloResult]) + catch + Error:Reason:Stack -> + io:format("Error calling hello(): ~p:~p~n~p~n", [Error, Reason, Stack]) + end, + + % Test eval_riscv_bytecode function + try + % Mint riscv erc20 + SignedRawTx = list_to_binary("f8ad80850af16b16008435a4e90094f6a171f57acac30c292e223ea8adbb28abd3e14d80b84440c10f19000000000000000000000000000000000000000000000000000000000000000b0000000000000000000000000000000000000000000000056bc75e2d63100000824a53a0eab71453afe2dd526d44a9a8d722c050ac411002f658fade8b270f4e7e36b6d6a02d309512fa3abc8563ba0800dc0bd3d33ae2fe42cf349a51006a30f285ed755b"), + + LoadRiscvResult = riscv_em_nif:eval_riscv_bytecode(SignedRawTx, ChainId), + io:format("~neval_riscv_bytecode() result: ~p~n", [LoadRiscvResult]) + catch + Error2:Reason2:Stack2 -> + io:format("Error calling eval_riscv_bytecode(): ~p:~p~n~p~n", [Error2, Reason2, Stack2]) + end, + +% Test Retrieve State +try + StateResult = riscv_em_nif:get_appchain_state(ChainId), + % {ok, Decoded} = hb_json:decode(StateResult), + io:format("~n chaind_id 1 appchain state: ~p~n", [StateResult]) +catch + error:Error3:Stack3 -> + io:format("Error calling get_appchain_state(): ~p~n~p~n", [Error3, Stack3]) +end, + + ok. + \ No newline at end of file