From d577ab4c16bcf7deadf07c211699b908c27328c2 Mon Sep 17 00:00:00 2001 From: MedovTimur Date: Wed, 18 Sep 2024 19:57:29 +0300 Subject: [PATCH 1/2] deleted unnecessary dapps --- contracts/.cargo/config.toml | 17 - contracts/Cargo.lock | 1555 +- contracts/Cargo.toml | 128 +- contracts/auto-changed-nft/Cargo.toml | 25 - contracts/auto-changed-nft/README.md | 26 - contracts/auto-changed-nft/build.rs | 5 - contracts/auto-changed-nft/io/Cargo.toml | 11 - contracts/auto-changed-nft/io/src/lib.rs | 236 - contracts/auto-changed-nft/src/lib.rs | 408 - contracts/auto-changed-nft/state/Cargo.toml | 14 - contracts/auto-changed-nft/state/build.rs | 3 - contracts/auto-changed-nft/state/src/lib.rs | 128 - contracts/auto-changed-nft/tests/nft_tests.rs | 544 - .../auto-changed-nft/tests/node_tests.rs | 561 - contracts/auto-changed-nft/tests/utils.rs | 191 - contracts/crowdsale/Cargo.toml | 27 - contracts/crowdsale/README.md | 24 - contracts/crowdsale/build.rs | 5 - contracts/crowdsale/io/Cargo.toml | 9 - contracts/crowdsale/io/src/lib.rs | 168 - contracts/crowdsale/src/asserts.rs | 15 - contracts/crowdsale/src/lib.rs | 383 - contracts/crowdsale/src/messages.rs | 37 - contracts/crowdsale/state/Cargo.toml | 13 - contracts/crowdsale/state/build.rs | 3 - contracts/crowdsale/state/src/lib.rs | 20 - contracts/crowdsale/tests/balance_tests.rs | 64 - contracts/crowdsale/tests/buy_tokens_tests.rs | 245 - contracts/crowdsale/tests/end_sale_tests.rs | 100 - contracts/crowdsale/tests/init_ico/mod.rs | 100 - contracts/crowdsale/tests/init_ico/token.rs | 155 - contracts/crowdsale/tests/init_tests.rs | 254 - contracts/crowdsale/tests/node_tests.rs | 125 - contracts/crowdsale/tests/start_ico_tests.rs | 96 - contracts/dao-light/Cargo.toml | 22 - contracts/dao-light/README.md | 16 - contracts/dao-light/build.rs | 5 - contracts/dao-light/io/Cargo.toml | 9 - contracts/dao-light/io/src/lib.rs | 146 - contracts/dao-light/src/ft_messages.rs | 57 - contracts/dao-light/src/lib.rs | 389 - contracts/dao-light/state/Cargo.toml | 13 - contracts/dao-light/state/build.rs | 3 - contracts/dao-light/state/src/lib.rs | 62 - contracts/dao-light/tests/dao_simple_test.rs | 324 - contracts/dao-light/tests/utils.rs | 82 - contracts/dao/Cargo.toml | 27 - contracts/dao/README.md | 24 - contracts/dao/build.rs | 5 - contracts/dao/io/Cargo.toml | 9 - contracts/dao/io/src/lib.rs | 327 - contracts/dao/src/ft_messages.rs | 31 - contracts/dao/src/lib.rs | 627 - contracts/dao/src/utils.rs | 48 - contracts/dao/state/Cargo.toml | 13 - contracts/dao/state/build.rs | 3 - contracts/dao/state/src/lib.rs | 29 - contracts/dao/tests/dilution_bound.rs | 70 - contracts/dao/tests/failures.rs | 330 - contracts/dao/tests/node_tests.rs | 57 - contracts/dao/tests/proposals.rs | 162 - contracts/dao/tests/utils.rs | 317 - contracts/dao/tests/utils_gclient/common.rs | 57 - contracts/dao/tests/utils_gclient/dao.rs | 377 - contracts/dao/tests/utils_gclient/ft.rs | 152 - contracts/dao/tests/utils_gclient/mod.rs | 3 - contracts/decentralized-git/Cargo.toml | 14 - contracts/decentralized-git/README.md | 10 - contracts/decentralized-git/build.rs | 5 - contracts/decentralized-git/io/Cargo.toml | 9 - contracts/decentralized-git/io/src/lib.rs | 189 - contracts/decentralized-git/master/Cargo.toml | 14 - contracts/decentralized-git/master/build.rs | 5 - .../decentralized-git/master/io/Cargo.toml | 9 - .../decentralized-git/master/io/src/lib.rs | 59 - contracts/decentralized-git/master/src/lib.rs | 98 - .../decentralized-git/master/state/Cargo.toml | 13 - .../decentralized-git/master/state/build.rs | 3 - .../decentralized-git/master/state/src/lib.rs | 31 - contracts/decentralized-git/src/lib.rs | 327 - contracts/decentralized-git/state/Cargo.toml | 13 - contracts/decentralized-git/state/build.rs | 3 - contracts/decentralized-git/state/src/lib.rs | 37 - contracts/decentralized-git/user/Cargo.toml | 14 - contracts/decentralized-git/user/build.rs | 5 - .../decentralized-git/user/io/Cargo.toml | 9 - .../decentralized-git/user/io/src/lib.rs | 83 - contracts/decentralized-git/user/src/lib.rs | 176 - .../decentralized-git/user/state/Cargo.toml | 13 - .../decentralized-git/user/state/build.rs | 3 - .../decentralized-git/user/state/src/lib.rs | 23 - contracts/dex/Cargo.toml | 34 - contracts/dex/README.md | 24 - contracts/dex/build.rs | 5 - contracts/dex/factory/Cargo.toml | 14 - contracts/dex/factory/build.rs | 5 - contracts/dex/factory/io/Cargo.toml | 10 - contracts/dex/factory/io/src/lib.rs | 164 - contracts/dex/factory/src/lib.rs | 164 - contracts/dex/factory/state/Cargo.toml | 13 - contracts/dex/factory/state/build.rs | 3 - contracts/dex/factory/state/src/lib.rs | 28 - contracts/dex/io/Cargo.toml | 11 - contracts/dex/io/src/lib.rs | 490 - contracts/dex/src/lib.rs | 758 - contracts/dex/src/utils.rs | 51 - contracts/dex/state/Cargo.toml | 14 - contracts/dex/state/build.rs | 3 - contracts/dex/state/src/lib.rs | 76 - contracts/dex/tests/state_consistency.rs | 414 - contracts/dex/tests/tests.rs | 473 - contracts/dex/tests/utils/common.rs | 122 - contracts/dex/tests/utils/factory.rs | 147 - contracts/dex/tests/utils/fungible_token.rs | 92 - contracts/dex/tests/utils/mod.rs | 331 - contracts/dex/tests/utils/prelude.rs | 4 - contracts/dutch-auction/Cargo.toml | 26 - contracts/dutch-auction/README.md | 24 - contracts/dutch-auction/build.rs | 5 - contracts/dutch-auction/io/Cargo.toml | 10 - contracts/dutch-auction/io/src/auction.rs | 158 - contracts/dutch-auction/io/src/io.rs | 14 - contracts/dutch-auction/io/src/lib.rs | 4 - contracts/dutch-auction/src/lib.rs | 337 - contracts/dutch-auction/state/Cargo.toml | 13 - contracts/dutch-auction/state/build.rs | 3 - contracts/dutch-auction/state/src/lib.rs | 17 - .../tests/dutch_auction_tests.rs | 185 - contracts/dutch-auction/tests/node_tests.rs | 332 - contracts/dutch-auction/tests/routines/mod.rs | 126 - contracts/dutch-auction/tests/state_tests.rs | 50 - contracts/dynamic-nft/Cargo.toml | 25 - contracts/dynamic-nft/README.md | 24 - contracts/dynamic-nft/build.rs | 5 - contracts/dynamic-nft/io/Cargo.toml | 11 - contracts/dynamic-nft/io/src/lib.rs | 202 - contracts/dynamic-nft/src/lib.rs | 295 - contracts/dynamic-nft/state/Cargo.toml | 14 - contracts/dynamic-nft/state/build.rs | 3 - contracts/dynamic-nft/state/src/lib.rs | 128 - contracts/dynamic-nft/tests/nft_tests.rs | 507 - contracts/dynamic-nft/tests/node_tests.rs | 463 - contracts/dynamic-nft/tests/utils.rs | 162 - contracts/escrow/Cargo.toml | 26 - contracts/escrow/README.md | 24 - contracts/escrow/build.rs | 5 - contracts/escrow/io/Cargo.toml | 10 - contracts/escrow/io/src/lib.rs | 193 - contracts/escrow/src/lib.rs | 318 - contracts/escrow/state/Cargo.toml | 14 - contracts/escrow/state/build.rs | 3 - contracts/escrow/state/src/lib.rs | 28 - contracts/escrow/tests/cancel.rs | 75 - contracts/escrow/tests/confirm.rs | 104 - contracts/escrow/tests/create.rs | 17 - contracts/escrow/tests/deposit.rs | 67 - contracts/escrow/tests/node_test.rs | 539 - contracts/escrow/tests/other.rs | 231 - contracts/escrow/tests/refund.rs | 48 - contracts/escrow/tests/utils/check.rs | 85 - contracts/escrow/tests/utils/fail.rs | 51 - contracts/escrow/tests/utils/mod.rs | 40 - contracts/escrow/tests/utils/token.rs | 157 - contracts/feeds/Cargo.toml | 21 - contracts/feeds/README.md | 16 - contracts/feeds/build.rs | 5 - contracts/feeds/channel/Cargo.toml | 15 - contracts/feeds/channel/build.rs | 5 - contracts/feeds/channel/io/Cargo.toml | 9 - contracts/feeds/channel/io/src/lib.rs | 66 - contracts/feeds/channel/src/lib.rs | 174 - contracts/feeds/channel/state/Cargo.toml | 13 - contracts/feeds/channel/state/build.rs | 3 - contracts/feeds/channel/state/src/lib.rs | 13 - contracts/feeds/io/Cargo.toml | 9 - contracts/feeds/io/src/lib.rs | 66 - contracts/feeds/src/lib.rs | 150 - contracts/feeds/state/Cargo.toml | 13 - contracts/feeds/state/build.rs | 3 - contracts/feeds/state/src/lib.rs | 33 - contracts/feeds/tests/feeds_channel_test.rs | 112 - contracts/feeds/tests/utils.rs | 109 - contracts/fungible-token/Cargo.toml | 18 - contracts/fungible-token/README.md | 16 - contracts/fungible-token/build.rs | 5 - contracts/fungible-token/io/Cargo.toml | 9 - contracts/fungible-token/io/src/lib.rs | 73 - contracts/fungible-token/src/lib.rs | 232 - contracts/fungible-token/src/tests.rs | 189 - contracts/fungible-token/state/Cargo.toml | 13 - contracts/fungible-token/state/build.rs | 3 - contracts/fungible-token/state/src/lib.rs | 32 - contracts/galactic-express/Cargo.toml | 1 - contracts/galactic-express/io/Cargo.toml | 1 - contracts/galactic-express/io/src/lib.rs | 7 - contracts/galactic-express/src/lib.rs | 14 +- contracts/game-of-chance/Cargo.toml | 30 - contracts/game-of-chance/README.md | 24 - contracts/game-of-chance/build.rs | 5 - contracts/game-of-chance/io/Cargo.toml | 9 - contracts/game-of-chance/io/src/lib.rs | 203 - contracts/game-of-chance/src/lib.rs | 331 - .../game-of-chance/tests/state_consistency.rs | 280 - contracts/game-of-chance/tests/tests.rs | 245 - .../game-of-chance/tests/utils/common.rs | 131 - .../tests/utils/fungible_token.rs | 94 - contracts/game-of-chance/tests/utils/mod.rs | 123 - .../game-of-chance/tests/utils/prelude.rs | 3 - contracts/gear-lib-old/Cargo.toml | 10 - contracts/gear-lib-old/README.md | 18 - contracts/gear-lib-old/derive/Cargo.toml | 12 - contracts/gear-lib-old/derive/src/lib.rs | 94 - .../src/fungible_token/ft_core.rs | 156 - .../gear-lib-old/src/fungible_token/io.rs | 19 - .../gear-lib-old/src/fungible_token/mod.rs | 3 - .../gear-lib-old/src/fungible_token/state.rs | 59 - contracts/gear-lib-old/src/lib.rs | 6 - contracts/gear-lib-old/src/multitoken/io.rs | 62 - contracts/gear-lib-old/src/multitoken/mod.rs | 3 - .../gear-lib-old/src/multitoken/mtk_core.rs | 270 - .../gear-lib-old/src/multitoken/state.rs | 154 - .../src/non_fungible_token/delegated.rs | 44 - .../gear-lib-old/src/non_fungible_token/io.rs | 34 - .../src/non_fungible_token/mod.rs | 6 - .../src/non_fungible_token/nft_core.rs | 280 - .../src/non_fungible_token/royalties.rs | 44 - .../src/non_fungible_token/state.rs | 159 - .../src/non_fungible_token/token.rs | 31 - contracts/gear-lib-old/src/sr25519.rs | 26 - contracts/gear-lib/Cargo.toml | 14 - contracts/gear-lib/README.md | 18 - contracts/gear-lib/src/lib.rs | 4 - contracts/gear-lib/src/tokens.rs | 30 - contracts/gear-lib/src/tokens/fungible.rs | 533 - .../gear-lib/src/tokens/fungible/encodable.rs | 114 - .../src/tokens/fungible/extensions.rs | 13 - contracts/gear-lib/src/tokens/multi.rs | 1263 - contracts/gear-lib/src/tokens/non_fungible.rs | 607 - .../src/tokens/non_fungible/encodable.rs | 228 - contracts/gear-lib/src/tokens/types.rs | 47 - contracts/gear-lib/src/tx_manager.rs | 718 - contracts/gear-lib/src/tx_manager/offset.rs | 72 - contracts/horse-races/Cargo.toml | 25 - contracts/horse-races/README.md | 24 - contracts/horse-races/build.rs | 5 - contracts/horse-races/io/Cargo.toml | 9 - contracts/horse-races/io/src/action.rs | 24 - contracts/horse-races/io/src/config.rs | 12 - contracts/horse-races/io/src/event.rs | 37 - contracts/horse-races/io/src/lib.rs | 218 - contracts/horse-races/io/src/meta.rs | 33 - contracts/horse-races/src/lib.rs | 552 - contracts/horse-races/state/Cargo.toml | 13 - contracts/horse-races/state/build.rs | 3 - contracts/horse-races/state/src/lib.rs | 39 - contracts/horse-races/tests/horse_races.rs | 1830 - contracts/horse-races/tests/utils.rs | 113 - contracts/identity/Cargo.toml | 22 - contracts/identity/README.md | 18 - contracts/identity/build.rs | 5 - contracts/identity/io/Cargo.toml | 9 - contracts/identity/io/src/lib.rs | 207 - contracts/identity/src/lib.rs | 200 - contracts/identity/state/Cargo.toml | 13 - contracts/identity/state/build.rs | 3 - contracts/identity/state/src/lib.rs | 66 - contracts/identity/tests/identity_tests.rs | 445 - contracts/identity/tests/utils.rs | 251 - contracts/nft-marketplace/Cargo.toml | 32 - contracts/nft-marketplace/README.md | 24 - contracts/nft-marketplace/build.rs | 5 - contracts/nft-marketplace/io/Cargo.toml | 10 - contracts/nft-marketplace/io/src/lib.rs | 387 - contracts/nft-marketplace/src/auction.rs | 447 - contracts/nft-marketplace/src/lib.rs | 229 - contracts/nft-marketplace/src/nft_messages.rs | 61 - contracts/nft-marketplace/src/offers.rs | 455 - contracts/nft-marketplace/src/payment.rs | 31 - contracts/nft-marketplace/src/sale.rs | 188 - contracts/nft-marketplace/state/Cargo.toml | 13 - contracts/nft-marketplace/state/build.rs | 3 - contracts/nft-marketplace/state/src/lib.rs | 17 - contracts/nft-marketplace/tests/auction.rs | 343 - .../nft-marketplace/tests/fail_buy_with_ft.rs | 112 - .../nft-marketplace/tests/fail_offers.rs | 207 - contracts/nft-marketplace/tests/offers.rs | 347 - contracts/nft-marketplace/tests/sale.rs | 132 - .../tests/success_buy_with_ft.rs | 87 - .../tests/success_buy_with_native_tokens.rs | 62 - .../nft-marketplace/tests/success_offers.rs | 229 - .../nft-marketplace/tests/utils/common.rs | 168 - .../nft-marketplace/tests/utils/ftoken.rs | 100 - .../tests/utils/marketplace.rs | 293 - contracts/nft-marketplace/tests/utils/mod.rs | 10 - .../nft-marketplace/tests/utils/nftoken.rs | 106 - .../nft-marketplace/tests/utils/prelude.rs | 16 - .../tests/utils_gclient/common.rs | 165 - .../nft-marketplace/tests/utils_gclient/ft.rs | 160 - .../tests/utils_gclient/marketplace.rs | 515 - .../tests/utils_gclient/mod.rs | 4 - .../tests/utils_gclient/nft.rs | 164 - contracts/nft-master/Cargo.toml | 19 - contracts/nft-master/README.md | 28 - contracts/nft-master/build.rs | 5 - contracts/nft-master/io/Cargo.toml | 9 - contracts/nft-master/io/src/lib.rs | 67 - contracts/nft-master/src/lib.rs | 154 - contracts/nft-master/state/Cargo.toml | 13 - contracts/nft-master/state/build.rs | 3 - contracts/nft-master/state/src/lib.rs | 17 - .../nft-master/tests/add_nft_contract.rs | 44 - contracts/nft-master/tests/add_operator.rs | 60 - contracts/nft-master/tests/node_tests.rs | 24 - .../nft-master/tests/remove_nft_contract.rs | 65 - contracts/nft-master/tests/remove_operator.rs | 67 - contracts/nft-master/tests/utils/mod.rs | 7 - .../nft-master/tests/utils/nft_master.rs | 85 - .../nft-master/tests/utils_gclient/common.rs | 42 - .../nft-master/tests/utils_gclient/mod.rs | 6 - .../tests/utils_gclient/nft_master.rs | 159 - contracts/nft-pixelboard/Cargo.toml | 27 - contracts/nft-pixelboard/README.md | 16 - contracts/nft-pixelboard/build.rs | 5 - contracts/nft-pixelboard/io/Cargo.toml | 10 - contracts/nft-pixelboard/io/src/lib.rs | 352 - contracts/nft-pixelboard/src/lib.rs | 472 - contracts/nft-pixelboard/src/utils.rs | 111 - contracts/nft-pixelboard/state/Cargo.toml | 14 - contracts/nft-pixelboard/state/build.rs | 3 - contracts/nft-pixelboard/state/src/lib.rs | 73 - .../nft-pixelboard/tests/initialization.rs | 162 - contracts/nft-pixelboard/tests/minting.rs | 299 - contracts/nft-pixelboard/tests/painting.rs | 215 - contracts/nft-pixelboard/tests/reselling.rs | 148 - .../nft-pixelboard/tests/utils/common.rs | 131 - .../nft-pixelboard/tests/utils/ftoken.rs | 94 - contracts/nft-pixelboard/tests/utils/mod.rs | 17 - .../nft-pixelboard/tests/utils/nftoken.rs | 61 - .../nft-pixelboard/tests/utils/pixelboard.rs | 240 - .../nft-pixelboard/tests/utils/prelude.rs | 3 - contracts/nft/Cargo.toml | 21 - contracts/nft/README.md | 24 - contracts/nft/build.rs | 5 - contracts/nft/io/Cargo.toml | 13 - contracts/nft/io/src/lib.rs | 140 - contracts/nft/src/lib.rs | 305 - contracts/nft/tests/node_tests.rs | 224 - contracts/nft/tests/tests.rs | 229 - contracts/nft/tests/utils.rs | 100 - contracts/nft/tests/utils_node.rs | 119 - contracts/non-fungible-token/Cargo.toml | 25 - contracts/non-fungible-token/README.md | 24 - contracts/non-fungible-token/build.rs | 5 - contracts/non-fungible-token/io/Cargo.toml | 11 - contracts/non-fungible-token/io/src/lib.rs | 220 - contracts/non-fungible-token/src/lib.rs | 327 - contracts/non-fungible-token/state/Cargo.toml | 14 - contracts/non-fungible-token/state/build.rs | 3 - contracts/non-fungible-token/state/src/lib.rs | 128 - .../non-fungible-token/tests/nft_tests.rs | 487 - .../non-fungible-token/tests/node_tests.rs | 462 - contracts/non-fungible-token/tests/utils.rs | 152 - contracts/on-chain-nft/Cargo.toml | 27 - contracts/on-chain-nft/README.md | 24 - contracts/on-chain-nft/build.rs | 5 - contracts/on-chain-nft/io/Cargo.toml | 10 - contracts/on-chain-nft/io/src/lib.rs | 315 - contracts/on-chain-nft/src/lib.rs | 209 - contracts/on-chain-nft/state/Cargo.toml | 14 - contracts/on-chain-nft/state/build.rs | 3 - contracts/on-chain-nft/state/src/lib.rs | 71 - contracts/on-chain-nft/tests/node_tests.rs | 83 - .../on-chain-nft/tests/on_chain_tests.rs | 177 - contracts/on-chain-nft/tests/utils.rs | 163 - contracts/rentable-nft/Cargo.toml | 25 - contracts/rentable-nft/README.md | 24 - contracts/rentable-nft/build.rs | 5 - contracts/rentable-nft/io/Cargo.toml | 11 - contracts/rentable-nft/io/src/lib.rs | 227 - contracts/rentable-nft/src/lib.rs | 345 - contracts/rentable-nft/state/Cargo.toml | 14 - contracts/rentable-nft/state/build.rs | 3 - contracts/rentable-nft/state/src/lib.rs | 120 - contracts/rentable-nft/tests/nft_tests.rs | 612 - contracts/rentable-nft/tests/node_tests.rs | 448 - contracts/rentable-nft/tests/utils.rs | 178 - contracts/roll-the-dice/Cargo.toml | 23 - contracts/roll-the-dice/README.md | 16 - contracts/roll-the-dice/build.rs | 5 - contracts/roll-the-dice/io/Cargo.toml | 9 - contracts/roll-the-dice/io/src/lib.rs | 67 - contracts/roll-the-dice/src/lib.rs | 93 - contracts/roll-the-dice/state/Cargo.toml | 13 - contracts/roll-the-dice/state/build.rs | 3 - contracts/roll-the-dice/state/src/lib.rs | 20 - contracts/roll-the-dice/tests/roll_dice.rs | 116 - contracts/roll-the-dice/tests/utils.rs | 9 - contracts/sharded-fungible-token/Cargo.toml | 28 - contracts/sharded-fungible-token/README.md | 18 - contracts/sharded-fungible-token/build.rs | 5 - .../sharded-fungible-token/io/Cargo.toml | 10 - .../sharded-fungible-token/io/src/lib.rs | 115 - .../sharded-fungible-token/logic/Cargo.toml | 18 - .../sharded-fungible-token/logic/build.rs | 5 - .../logic/io/Cargo.toml | 12 - .../logic/io/src/instruction.rs | 131 - .../logic/io/src/lib.rs | 84 - .../sharded-fungible-token/logic/src/lib.rs | 490 - .../logic/src/messages.rs | 178 - contracts/sharded-fungible-token/src/lib.rs | 237 - .../sharded-fungible-token/storage/Cargo.toml | 14 - .../sharded-fungible-token/storage/build.rs | 5 - .../storage/io/Cargo.toml | 10 - .../storage/io/src/lib.rs | 74 - .../sharded-fungible-token/storage/src/lib.rs | 296 - .../tests/high_load_tests.rs | 78 - contracts/sharded-fungible-token/tests/mod.rs | 1 - .../tests/token_tests.rs | 341 - .../sharded-fungible-token/tests/utils.rs | 204 - contracts/staking/Cargo.toml | 25 - contracts/staking/README.md | 16 - contracts/staking/build.rs | 5 - contracts/staking/io/Cargo.toml | 9 - contracts/staking/io/src/lib.rs | 105 - contracts/staking/src/lib.rs | 357 - contracts/staking/state/Cargo.toml | 13 - contracts/staking/state/build.rs | 3 - contracts/staking/state/src/lib.rs | 21 - contracts/staking/tests/node_test.rs | 118 - contracts/staking/tests/panic_test.rs | 166 - contracts/staking/tests/simple_test.rs | 459 - contracts/staking/tests/utils/common.rs | 55 - contracts/staking/tests/utils/ftoken.rs | 88 - contracts/staking/tests/utils/mod.rs | 8 - contracts/student-nft/Cargo.toml | 19 - contracts/student-nft/README.md | 26 - contracts/student-nft/build.rs | 5 - contracts/student-nft/io/Cargo.toml | 9 - contracts/student-nft/io/src/lib.rs | 262 - contracts/student-nft/src/lib.rs | 502 - contracts/student-nft/state/Cargo.toml | 13 - contracts/student-nft/state/build.rs | 3 - contracts/student-nft/state/src/lib.rs | 25 - .../student-nft/tests/add_course_helper.rs | 61 - contracts/student-nft/tests/add_lesson.rs | 85 - .../student-nft/tests/add_lesson_review.rs | 133 - contracts/student-nft/tests/approve_hw.rs | 216 - .../student-nft/tests/complete_course.rs | 195 - contracts/student-nft/tests/create_course.rs | 30 - contracts/student-nft/tests/emote.rs | 64 - contracts/student-nft/tests/finish_course.rs | 62 - contracts/student-nft/tests/mint.rs | 42 - contracts/student-nft/tests/node_tests.rs | 24 - .../student-nft/tests/remove_course_helper.rs | 64 - contracts/student-nft/tests/start_course.rs | 72 - contracts/student-nft/tests/utils/mod.rs | 4 - .../student-nft/tests/utils/student_nft.rs | 177 - .../student-nft/tests/utils_gclient/common.rs | 45 - .../student-nft/tests/utils_gclient/mod.rs | 6 - .../tests/utils_gclient/student_nft.rs | 87 - contracts/supply-chain/Cargo.toml | 32 - contracts/supply-chain/README.md | 24 - contracts/supply-chain/build.rs | 5 - contracts/supply-chain/deploy/Cargo.toml | 18 - contracts/supply-chain/deploy/src/lib.rs | 205 - contracts/supply-chain/deploy/src/main.rs | 77 - contracts/supply-chain/io/Cargo.toml | 10 - contracts/supply-chain/io/src/lib.rs | 663 - contracts/supply-chain/src/lib.rs | 755 - contracts/supply-chain/src/tx_manager.rs | 145 - contracts/supply-chain/src/utils.rs | 96 - contracts/supply-chain/state/Cargo.toml | 13 - contracts/supply-chain/state/build.rs | 3 - contracts/supply-chain/state/src/lib.rs | 62 - contracts/supply-chain/tests/approve_reuse.rs | 114 - contracts/supply-chain/tests/nft_transfer.rs | 114 - contracts/supply-chain/tests/other.rs | 154 - .../supply-chain/tests/ownership_and_role.rs | 205 - contracts/supply-chain/tests/receive.rs | 216 - contracts/supply-chain/tests/state.rs | 117 - .../supply-chain/tests/state_consistency.rs | 550 - contracts/supply-chain/tests/utils/common.rs | 149 - .../tests/utils/fungible_token.rs | 84 - contracts/supply-chain/tests/utils/mod.rs | 473 - .../tests/utils/non_fungible_token.rs | 109 - contracts/supply-chain/tests/utils/prelude.rs | 7 - contracts/tic-tac-toe/README.md | 6 +- .../tic-tac-toe/{sails => }/app/Cargo.toml | 0 .../tic-tac-toe/{sails => }/app/src/lib.rs | 0 .../app/src/services/game/funcs.rs | 0 .../{sails => }/app/src/services/game/mod.rs | 0 .../app/src/services/game/utils.rs | 0 .../{sails => }/app/src/services/mod.rs | 0 .../app/src/services/session/funcs.rs | 0 .../app/src/services/session/mod.rs | 0 .../app/src/services/session/utils.rs | 0 .../{sails => }/app/src/services/utils.rs | 0 .../tic-tac-toe/{sails => }/app/tests/test.rs | 0 contracts/tic-tac-toe/gstd/Cargo.toml | 26 - contracts/tic-tac-toe/gstd/README.md | 16 - .../tic-tac-toe/gstd/assets/accounts_10k.txt | 10000 ---- .../gstd/assets/accounts_pr_keys.txt | 50000 ---------------- contracts/tic-tac-toe/gstd/build.rs | 9 - contracts/tic-tac-toe/gstd/io/Cargo.toml | 13 - contracts/tic-tac-toe/gstd/io/src/lib.rs | 179 - contracts/tic-tac-toe/gstd/src/lib.rs | 496 - .../tic-tac-toe/gstd/tests/ttt_node_test.rs | 307 - contracts/tic-tac-toe/sails/README.md | 16 - .../tic-tac-toe/{sails => }/wasm/Cargo.toml | 0 .../tic-tac-toe/{sails => }/wasm/build.rs | 0 .../tic-tac-toe/{sails => }/wasm/src/lib.rs | 0 .../{sails => }/wasm/tic-tac-toe.idl | 0 512 files changed, 122 insertions(+), 117890 deletions(-) delete mode 100644 contracts/.cargo/config.toml delete mode 100644 contracts/auto-changed-nft/Cargo.toml delete mode 100644 contracts/auto-changed-nft/README.md delete mode 100644 contracts/auto-changed-nft/build.rs delete mode 100644 contracts/auto-changed-nft/io/Cargo.toml delete mode 100644 contracts/auto-changed-nft/io/src/lib.rs delete mode 100644 contracts/auto-changed-nft/src/lib.rs delete mode 100644 contracts/auto-changed-nft/state/Cargo.toml delete mode 100644 contracts/auto-changed-nft/state/build.rs delete mode 100644 contracts/auto-changed-nft/state/src/lib.rs delete mode 100644 contracts/auto-changed-nft/tests/nft_tests.rs delete mode 100644 contracts/auto-changed-nft/tests/node_tests.rs delete mode 100644 contracts/auto-changed-nft/tests/utils.rs delete mode 100644 contracts/crowdsale/Cargo.toml delete mode 100644 contracts/crowdsale/README.md delete mode 100644 contracts/crowdsale/build.rs delete mode 100644 contracts/crowdsale/io/Cargo.toml delete mode 100644 contracts/crowdsale/io/src/lib.rs delete mode 100644 contracts/crowdsale/src/asserts.rs delete mode 100644 contracts/crowdsale/src/lib.rs delete mode 100644 contracts/crowdsale/src/messages.rs delete mode 100644 contracts/crowdsale/state/Cargo.toml delete mode 100644 contracts/crowdsale/state/build.rs delete mode 100644 contracts/crowdsale/state/src/lib.rs delete mode 100644 contracts/crowdsale/tests/balance_tests.rs delete mode 100644 contracts/crowdsale/tests/buy_tokens_tests.rs delete mode 100644 contracts/crowdsale/tests/end_sale_tests.rs delete mode 100644 contracts/crowdsale/tests/init_ico/mod.rs delete mode 100644 contracts/crowdsale/tests/init_ico/token.rs delete mode 100644 contracts/crowdsale/tests/init_tests.rs delete mode 100644 contracts/crowdsale/tests/node_tests.rs delete mode 100644 contracts/crowdsale/tests/start_ico_tests.rs delete mode 100644 contracts/dao-light/Cargo.toml delete mode 100644 contracts/dao-light/README.md delete mode 100644 contracts/dao-light/build.rs delete mode 100644 contracts/dao-light/io/Cargo.toml delete mode 100644 contracts/dao-light/io/src/lib.rs delete mode 100644 contracts/dao-light/src/ft_messages.rs delete mode 100644 contracts/dao-light/src/lib.rs delete mode 100644 contracts/dao-light/state/Cargo.toml delete mode 100644 contracts/dao-light/state/build.rs delete mode 100644 contracts/dao-light/state/src/lib.rs delete mode 100644 contracts/dao-light/tests/dao_simple_test.rs delete mode 100644 contracts/dao-light/tests/utils.rs delete mode 100644 contracts/dao/Cargo.toml delete mode 100644 contracts/dao/README.md delete mode 100644 contracts/dao/build.rs delete mode 100644 contracts/dao/io/Cargo.toml delete mode 100644 contracts/dao/io/src/lib.rs delete mode 100644 contracts/dao/src/ft_messages.rs delete mode 100644 contracts/dao/src/lib.rs delete mode 100644 contracts/dao/src/utils.rs delete mode 100644 contracts/dao/state/Cargo.toml delete mode 100644 contracts/dao/state/build.rs delete mode 100644 contracts/dao/state/src/lib.rs delete mode 100644 contracts/dao/tests/dilution_bound.rs delete mode 100644 contracts/dao/tests/failures.rs delete mode 100644 contracts/dao/tests/node_tests.rs delete mode 100644 contracts/dao/tests/proposals.rs delete mode 100644 contracts/dao/tests/utils.rs delete mode 100644 contracts/dao/tests/utils_gclient/common.rs delete mode 100644 contracts/dao/tests/utils_gclient/dao.rs delete mode 100644 contracts/dao/tests/utils_gclient/ft.rs delete mode 100644 contracts/dao/tests/utils_gclient/mod.rs delete mode 100644 contracts/decentralized-git/Cargo.toml delete mode 100644 contracts/decentralized-git/README.md delete mode 100644 contracts/decentralized-git/build.rs delete mode 100644 contracts/decentralized-git/io/Cargo.toml delete mode 100644 contracts/decentralized-git/io/src/lib.rs delete mode 100644 contracts/decentralized-git/master/Cargo.toml delete mode 100644 contracts/decentralized-git/master/build.rs delete mode 100644 contracts/decentralized-git/master/io/Cargo.toml delete mode 100644 contracts/decentralized-git/master/io/src/lib.rs delete mode 100644 contracts/decentralized-git/master/src/lib.rs delete mode 100644 contracts/decentralized-git/master/state/Cargo.toml delete mode 100644 contracts/decentralized-git/master/state/build.rs delete mode 100644 contracts/decentralized-git/master/state/src/lib.rs delete mode 100644 contracts/decentralized-git/src/lib.rs delete mode 100644 contracts/decentralized-git/state/Cargo.toml delete mode 100644 contracts/decentralized-git/state/build.rs delete mode 100644 contracts/decentralized-git/state/src/lib.rs delete mode 100644 contracts/decentralized-git/user/Cargo.toml delete mode 100644 contracts/decentralized-git/user/build.rs delete mode 100644 contracts/decentralized-git/user/io/Cargo.toml delete mode 100644 contracts/decentralized-git/user/io/src/lib.rs delete mode 100644 contracts/decentralized-git/user/src/lib.rs delete mode 100644 contracts/decentralized-git/user/state/Cargo.toml delete mode 100644 contracts/decentralized-git/user/state/build.rs delete mode 100644 contracts/decentralized-git/user/state/src/lib.rs delete mode 100644 contracts/dex/Cargo.toml delete mode 100644 contracts/dex/README.md delete mode 100644 contracts/dex/build.rs delete mode 100644 contracts/dex/factory/Cargo.toml delete mode 100644 contracts/dex/factory/build.rs delete mode 100644 contracts/dex/factory/io/Cargo.toml delete mode 100644 contracts/dex/factory/io/src/lib.rs delete mode 100644 contracts/dex/factory/src/lib.rs delete mode 100644 contracts/dex/factory/state/Cargo.toml delete mode 100644 contracts/dex/factory/state/build.rs delete mode 100644 contracts/dex/factory/state/src/lib.rs delete mode 100644 contracts/dex/io/Cargo.toml delete mode 100644 contracts/dex/io/src/lib.rs delete mode 100644 contracts/dex/src/lib.rs delete mode 100644 contracts/dex/src/utils.rs delete mode 100644 contracts/dex/state/Cargo.toml delete mode 100644 contracts/dex/state/build.rs delete mode 100644 contracts/dex/state/src/lib.rs delete mode 100644 contracts/dex/tests/state_consistency.rs delete mode 100644 contracts/dex/tests/tests.rs delete mode 100644 contracts/dex/tests/utils/common.rs delete mode 100644 contracts/dex/tests/utils/factory.rs delete mode 100644 contracts/dex/tests/utils/fungible_token.rs delete mode 100644 contracts/dex/tests/utils/mod.rs delete mode 100644 contracts/dex/tests/utils/prelude.rs delete mode 100644 contracts/dutch-auction/Cargo.toml delete mode 100644 contracts/dutch-auction/README.md delete mode 100644 contracts/dutch-auction/build.rs delete mode 100644 contracts/dutch-auction/io/Cargo.toml delete mode 100644 contracts/dutch-auction/io/src/auction.rs delete mode 100644 contracts/dutch-auction/io/src/io.rs delete mode 100644 contracts/dutch-auction/io/src/lib.rs delete mode 100644 contracts/dutch-auction/src/lib.rs delete mode 100644 contracts/dutch-auction/state/Cargo.toml delete mode 100644 contracts/dutch-auction/state/build.rs delete mode 100644 contracts/dutch-auction/state/src/lib.rs delete mode 100644 contracts/dutch-auction/tests/dutch_auction_tests.rs delete mode 100644 contracts/dutch-auction/tests/node_tests.rs delete mode 100644 contracts/dutch-auction/tests/routines/mod.rs delete mode 100644 contracts/dutch-auction/tests/state_tests.rs delete mode 100644 contracts/dynamic-nft/Cargo.toml delete mode 100644 contracts/dynamic-nft/README.md delete mode 100644 contracts/dynamic-nft/build.rs delete mode 100644 contracts/dynamic-nft/io/Cargo.toml delete mode 100644 contracts/dynamic-nft/io/src/lib.rs delete mode 100644 contracts/dynamic-nft/src/lib.rs delete mode 100644 contracts/dynamic-nft/state/Cargo.toml delete mode 100644 contracts/dynamic-nft/state/build.rs delete mode 100644 contracts/dynamic-nft/state/src/lib.rs delete mode 100644 contracts/dynamic-nft/tests/nft_tests.rs delete mode 100644 contracts/dynamic-nft/tests/node_tests.rs delete mode 100644 contracts/dynamic-nft/tests/utils.rs delete mode 100644 contracts/escrow/Cargo.toml delete mode 100644 contracts/escrow/README.md delete mode 100644 contracts/escrow/build.rs delete mode 100644 contracts/escrow/io/Cargo.toml delete mode 100644 contracts/escrow/io/src/lib.rs delete mode 100644 contracts/escrow/src/lib.rs delete mode 100644 contracts/escrow/state/Cargo.toml delete mode 100644 contracts/escrow/state/build.rs delete mode 100644 contracts/escrow/state/src/lib.rs delete mode 100644 contracts/escrow/tests/cancel.rs delete mode 100644 contracts/escrow/tests/confirm.rs delete mode 100644 contracts/escrow/tests/create.rs delete mode 100644 contracts/escrow/tests/deposit.rs delete mode 100644 contracts/escrow/tests/node_test.rs delete mode 100644 contracts/escrow/tests/other.rs delete mode 100644 contracts/escrow/tests/refund.rs delete mode 100644 contracts/escrow/tests/utils/check.rs delete mode 100644 contracts/escrow/tests/utils/fail.rs delete mode 100644 contracts/escrow/tests/utils/mod.rs delete mode 100644 contracts/escrow/tests/utils/token.rs delete mode 100644 contracts/feeds/Cargo.toml delete mode 100644 contracts/feeds/README.md delete mode 100644 contracts/feeds/build.rs delete mode 100644 contracts/feeds/channel/Cargo.toml delete mode 100644 contracts/feeds/channel/build.rs delete mode 100644 contracts/feeds/channel/io/Cargo.toml delete mode 100644 contracts/feeds/channel/io/src/lib.rs delete mode 100644 contracts/feeds/channel/src/lib.rs delete mode 100644 contracts/feeds/channel/state/Cargo.toml delete mode 100644 contracts/feeds/channel/state/build.rs delete mode 100644 contracts/feeds/channel/state/src/lib.rs delete mode 100644 contracts/feeds/io/Cargo.toml delete mode 100644 contracts/feeds/io/src/lib.rs delete mode 100644 contracts/feeds/src/lib.rs delete mode 100644 contracts/feeds/state/Cargo.toml delete mode 100644 contracts/feeds/state/build.rs delete mode 100644 contracts/feeds/state/src/lib.rs delete mode 100644 contracts/feeds/tests/feeds_channel_test.rs delete mode 100644 contracts/feeds/tests/utils.rs delete mode 100644 contracts/fungible-token/Cargo.toml delete mode 100644 contracts/fungible-token/README.md delete mode 100644 contracts/fungible-token/build.rs delete mode 100644 contracts/fungible-token/io/Cargo.toml delete mode 100644 contracts/fungible-token/io/src/lib.rs delete mode 100644 contracts/fungible-token/src/lib.rs delete mode 100644 contracts/fungible-token/src/tests.rs delete mode 100644 contracts/fungible-token/state/Cargo.toml delete mode 100644 contracts/fungible-token/state/build.rs delete mode 100644 contracts/fungible-token/state/src/lib.rs delete mode 100644 contracts/game-of-chance/Cargo.toml delete mode 100644 contracts/game-of-chance/README.md delete mode 100644 contracts/game-of-chance/build.rs delete mode 100644 contracts/game-of-chance/io/Cargo.toml delete mode 100644 contracts/game-of-chance/io/src/lib.rs delete mode 100644 contracts/game-of-chance/src/lib.rs delete mode 100644 contracts/game-of-chance/tests/state_consistency.rs delete mode 100644 contracts/game-of-chance/tests/tests.rs delete mode 100644 contracts/game-of-chance/tests/utils/common.rs delete mode 100644 contracts/game-of-chance/tests/utils/fungible_token.rs delete mode 100644 contracts/game-of-chance/tests/utils/mod.rs delete mode 100644 contracts/game-of-chance/tests/utils/prelude.rs delete mode 100644 contracts/gear-lib-old/Cargo.toml delete mode 100644 contracts/gear-lib-old/README.md delete mode 100644 contracts/gear-lib-old/derive/Cargo.toml delete mode 100644 contracts/gear-lib-old/derive/src/lib.rs delete mode 100644 contracts/gear-lib-old/src/fungible_token/ft_core.rs delete mode 100644 contracts/gear-lib-old/src/fungible_token/io.rs delete mode 100644 contracts/gear-lib-old/src/fungible_token/mod.rs delete mode 100644 contracts/gear-lib-old/src/fungible_token/state.rs delete mode 100644 contracts/gear-lib-old/src/lib.rs delete mode 100644 contracts/gear-lib-old/src/multitoken/io.rs delete mode 100644 contracts/gear-lib-old/src/multitoken/mod.rs delete mode 100644 contracts/gear-lib-old/src/multitoken/mtk_core.rs delete mode 100644 contracts/gear-lib-old/src/multitoken/state.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/delegated.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/io.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/mod.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/nft_core.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/royalties.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/state.rs delete mode 100644 contracts/gear-lib-old/src/non_fungible_token/token.rs delete mode 100644 contracts/gear-lib-old/src/sr25519.rs delete mode 100644 contracts/gear-lib/Cargo.toml delete mode 100644 contracts/gear-lib/README.md delete mode 100644 contracts/gear-lib/src/lib.rs delete mode 100644 contracts/gear-lib/src/tokens.rs delete mode 100644 contracts/gear-lib/src/tokens/fungible.rs delete mode 100644 contracts/gear-lib/src/tokens/fungible/encodable.rs delete mode 100644 contracts/gear-lib/src/tokens/fungible/extensions.rs delete mode 100644 contracts/gear-lib/src/tokens/multi.rs delete mode 100644 contracts/gear-lib/src/tokens/non_fungible.rs delete mode 100644 contracts/gear-lib/src/tokens/non_fungible/encodable.rs delete mode 100644 contracts/gear-lib/src/tokens/types.rs delete mode 100644 contracts/gear-lib/src/tx_manager.rs delete mode 100644 contracts/gear-lib/src/tx_manager/offset.rs delete mode 100644 contracts/horse-races/Cargo.toml delete mode 100644 contracts/horse-races/README.md delete mode 100644 contracts/horse-races/build.rs delete mode 100644 contracts/horse-races/io/Cargo.toml delete mode 100644 contracts/horse-races/io/src/action.rs delete mode 100644 contracts/horse-races/io/src/config.rs delete mode 100644 contracts/horse-races/io/src/event.rs delete mode 100644 contracts/horse-races/io/src/lib.rs delete mode 100644 contracts/horse-races/io/src/meta.rs delete mode 100644 contracts/horse-races/src/lib.rs delete mode 100644 contracts/horse-races/state/Cargo.toml delete mode 100644 contracts/horse-races/state/build.rs delete mode 100644 contracts/horse-races/state/src/lib.rs delete mode 100644 contracts/horse-races/tests/horse_races.rs delete mode 100644 contracts/horse-races/tests/utils.rs delete mode 100644 contracts/identity/Cargo.toml delete mode 100644 contracts/identity/README.md delete mode 100644 contracts/identity/build.rs delete mode 100644 contracts/identity/io/Cargo.toml delete mode 100644 contracts/identity/io/src/lib.rs delete mode 100644 contracts/identity/src/lib.rs delete mode 100644 contracts/identity/state/Cargo.toml delete mode 100644 contracts/identity/state/build.rs delete mode 100644 contracts/identity/state/src/lib.rs delete mode 100644 contracts/identity/tests/identity_tests.rs delete mode 100644 contracts/identity/tests/utils.rs delete mode 100644 contracts/nft-marketplace/Cargo.toml delete mode 100644 contracts/nft-marketplace/README.md delete mode 100644 contracts/nft-marketplace/build.rs delete mode 100644 contracts/nft-marketplace/io/Cargo.toml delete mode 100644 contracts/nft-marketplace/io/src/lib.rs delete mode 100644 contracts/nft-marketplace/src/auction.rs delete mode 100644 contracts/nft-marketplace/src/lib.rs delete mode 100644 contracts/nft-marketplace/src/nft_messages.rs delete mode 100644 contracts/nft-marketplace/src/offers.rs delete mode 100644 contracts/nft-marketplace/src/payment.rs delete mode 100644 contracts/nft-marketplace/src/sale.rs delete mode 100644 contracts/nft-marketplace/state/Cargo.toml delete mode 100644 contracts/nft-marketplace/state/build.rs delete mode 100644 contracts/nft-marketplace/state/src/lib.rs delete mode 100644 contracts/nft-marketplace/tests/auction.rs delete mode 100644 contracts/nft-marketplace/tests/fail_buy_with_ft.rs delete mode 100644 contracts/nft-marketplace/tests/fail_offers.rs delete mode 100644 contracts/nft-marketplace/tests/offers.rs delete mode 100644 contracts/nft-marketplace/tests/sale.rs delete mode 100644 contracts/nft-marketplace/tests/success_buy_with_ft.rs delete mode 100644 contracts/nft-marketplace/tests/success_buy_with_native_tokens.rs delete mode 100644 contracts/nft-marketplace/tests/success_offers.rs delete mode 100644 contracts/nft-marketplace/tests/utils/common.rs delete mode 100644 contracts/nft-marketplace/tests/utils/ftoken.rs delete mode 100644 contracts/nft-marketplace/tests/utils/marketplace.rs delete mode 100644 contracts/nft-marketplace/tests/utils/mod.rs delete mode 100644 contracts/nft-marketplace/tests/utils/nftoken.rs delete mode 100644 contracts/nft-marketplace/tests/utils/prelude.rs delete mode 100644 contracts/nft-marketplace/tests/utils_gclient/common.rs delete mode 100644 contracts/nft-marketplace/tests/utils_gclient/ft.rs delete mode 100644 contracts/nft-marketplace/tests/utils_gclient/marketplace.rs delete mode 100644 contracts/nft-marketplace/tests/utils_gclient/mod.rs delete mode 100644 contracts/nft-marketplace/tests/utils_gclient/nft.rs delete mode 100644 contracts/nft-master/Cargo.toml delete mode 100644 contracts/nft-master/README.md delete mode 100644 contracts/nft-master/build.rs delete mode 100644 contracts/nft-master/io/Cargo.toml delete mode 100644 contracts/nft-master/io/src/lib.rs delete mode 100644 contracts/nft-master/src/lib.rs delete mode 100644 contracts/nft-master/state/Cargo.toml delete mode 100644 contracts/nft-master/state/build.rs delete mode 100644 contracts/nft-master/state/src/lib.rs delete mode 100644 contracts/nft-master/tests/add_nft_contract.rs delete mode 100644 contracts/nft-master/tests/add_operator.rs delete mode 100644 contracts/nft-master/tests/node_tests.rs delete mode 100644 contracts/nft-master/tests/remove_nft_contract.rs delete mode 100644 contracts/nft-master/tests/remove_operator.rs delete mode 100644 contracts/nft-master/tests/utils/mod.rs delete mode 100644 contracts/nft-master/tests/utils/nft_master.rs delete mode 100644 contracts/nft-master/tests/utils_gclient/common.rs delete mode 100644 contracts/nft-master/tests/utils_gclient/mod.rs delete mode 100644 contracts/nft-master/tests/utils_gclient/nft_master.rs delete mode 100644 contracts/nft-pixelboard/Cargo.toml delete mode 100644 contracts/nft-pixelboard/README.md delete mode 100644 contracts/nft-pixelboard/build.rs delete mode 100644 contracts/nft-pixelboard/io/Cargo.toml delete mode 100644 contracts/nft-pixelboard/io/src/lib.rs delete mode 100644 contracts/nft-pixelboard/src/lib.rs delete mode 100644 contracts/nft-pixelboard/src/utils.rs delete mode 100644 contracts/nft-pixelboard/state/Cargo.toml delete mode 100644 contracts/nft-pixelboard/state/build.rs delete mode 100644 contracts/nft-pixelboard/state/src/lib.rs delete mode 100644 contracts/nft-pixelboard/tests/initialization.rs delete mode 100644 contracts/nft-pixelboard/tests/minting.rs delete mode 100644 contracts/nft-pixelboard/tests/painting.rs delete mode 100644 contracts/nft-pixelboard/tests/reselling.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/common.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/ftoken.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/mod.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/nftoken.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/pixelboard.rs delete mode 100644 contracts/nft-pixelboard/tests/utils/prelude.rs delete mode 100644 contracts/nft/Cargo.toml delete mode 100644 contracts/nft/README.md delete mode 100644 contracts/nft/build.rs delete mode 100644 contracts/nft/io/Cargo.toml delete mode 100644 contracts/nft/io/src/lib.rs delete mode 100644 contracts/nft/src/lib.rs delete mode 100644 contracts/nft/tests/node_tests.rs delete mode 100644 contracts/nft/tests/tests.rs delete mode 100644 contracts/nft/tests/utils.rs delete mode 100644 contracts/nft/tests/utils_node.rs delete mode 100644 contracts/non-fungible-token/Cargo.toml delete mode 100644 contracts/non-fungible-token/README.md delete mode 100644 contracts/non-fungible-token/build.rs delete mode 100644 contracts/non-fungible-token/io/Cargo.toml delete mode 100644 contracts/non-fungible-token/io/src/lib.rs delete mode 100644 contracts/non-fungible-token/src/lib.rs delete mode 100644 contracts/non-fungible-token/state/Cargo.toml delete mode 100644 contracts/non-fungible-token/state/build.rs delete mode 100644 contracts/non-fungible-token/state/src/lib.rs delete mode 100644 contracts/non-fungible-token/tests/nft_tests.rs delete mode 100644 contracts/non-fungible-token/tests/node_tests.rs delete mode 100644 contracts/non-fungible-token/tests/utils.rs delete mode 100644 contracts/on-chain-nft/Cargo.toml delete mode 100644 contracts/on-chain-nft/README.md delete mode 100644 contracts/on-chain-nft/build.rs delete mode 100644 contracts/on-chain-nft/io/Cargo.toml delete mode 100644 contracts/on-chain-nft/io/src/lib.rs delete mode 100644 contracts/on-chain-nft/src/lib.rs delete mode 100644 contracts/on-chain-nft/state/Cargo.toml delete mode 100644 contracts/on-chain-nft/state/build.rs delete mode 100644 contracts/on-chain-nft/state/src/lib.rs delete mode 100644 contracts/on-chain-nft/tests/node_tests.rs delete mode 100644 contracts/on-chain-nft/tests/on_chain_tests.rs delete mode 100644 contracts/on-chain-nft/tests/utils.rs delete mode 100644 contracts/rentable-nft/Cargo.toml delete mode 100644 contracts/rentable-nft/README.md delete mode 100644 contracts/rentable-nft/build.rs delete mode 100644 contracts/rentable-nft/io/Cargo.toml delete mode 100644 contracts/rentable-nft/io/src/lib.rs delete mode 100644 contracts/rentable-nft/src/lib.rs delete mode 100644 contracts/rentable-nft/state/Cargo.toml delete mode 100644 contracts/rentable-nft/state/build.rs delete mode 100644 contracts/rentable-nft/state/src/lib.rs delete mode 100644 contracts/rentable-nft/tests/nft_tests.rs delete mode 100644 contracts/rentable-nft/tests/node_tests.rs delete mode 100644 contracts/rentable-nft/tests/utils.rs delete mode 100644 contracts/roll-the-dice/Cargo.toml delete mode 100644 contracts/roll-the-dice/README.md delete mode 100644 contracts/roll-the-dice/build.rs delete mode 100644 contracts/roll-the-dice/io/Cargo.toml delete mode 100644 contracts/roll-the-dice/io/src/lib.rs delete mode 100644 contracts/roll-the-dice/src/lib.rs delete mode 100644 contracts/roll-the-dice/state/Cargo.toml delete mode 100644 contracts/roll-the-dice/state/build.rs delete mode 100644 contracts/roll-the-dice/state/src/lib.rs delete mode 100644 contracts/roll-the-dice/tests/roll_dice.rs delete mode 100644 contracts/roll-the-dice/tests/utils.rs delete mode 100644 contracts/sharded-fungible-token/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/README.md delete mode 100644 contracts/sharded-fungible-token/build.rs delete mode 100644 contracts/sharded-fungible-token/io/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/io/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/logic/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/logic/build.rs delete mode 100644 contracts/sharded-fungible-token/logic/io/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/logic/io/src/instruction.rs delete mode 100644 contracts/sharded-fungible-token/logic/io/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/logic/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/logic/src/messages.rs delete mode 100644 contracts/sharded-fungible-token/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/storage/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/storage/build.rs delete mode 100644 contracts/sharded-fungible-token/storage/io/Cargo.toml delete mode 100644 contracts/sharded-fungible-token/storage/io/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/storage/src/lib.rs delete mode 100644 contracts/sharded-fungible-token/tests/high_load_tests.rs delete mode 100644 contracts/sharded-fungible-token/tests/mod.rs delete mode 100644 contracts/sharded-fungible-token/tests/token_tests.rs delete mode 100644 contracts/sharded-fungible-token/tests/utils.rs delete mode 100644 contracts/staking/Cargo.toml delete mode 100644 contracts/staking/README.md delete mode 100644 contracts/staking/build.rs delete mode 100644 contracts/staking/io/Cargo.toml delete mode 100644 contracts/staking/io/src/lib.rs delete mode 100644 contracts/staking/src/lib.rs delete mode 100644 contracts/staking/state/Cargo.toml delete mode 100644 contracts/staking/state/build.rs delete mode 100644 contracts/staking/state/src/lib.rs delete mode 100644 contracts/staking/tests/node_test.rs delete mode 100644 contracts/staking/tests/panic_test.rs delete mode 100644 contracts/staking/tests/simple_test.rs delete mode 100644 contracts/staking/tests/utils/common.rs delete mode 100644 contracts/staking/tests/utils/ftoken.rs delete mode 100644 contracts/staking/tests/utils/mod.rs delete mode 100644 contracts/student-nft/Cargo.toml delete mode 100644 contracts/student-nft/README.md delete mode 100644 contracts/student-nft/build.rs delete mode 100644 contracts/student-nft/io/Cargo.toml delete mode 100644 contracts/student-nft/io/src/lib.rs delete mode 100644 contracts/student-nft/src/lib.rs delete mode 100644 contracts/student-nft/state/Cargo.toml delete mode 100644 contracts/student-nft/state/build.rs delete mode 100644 contracts/student-nft/state/src/lib.rs delete mode 100644 contracts/student-nft/tests/add_course_helper.rs delete mode 100644 contracts/student-nft/tests/add_lesson.rs delete mode 100644 contracts/student-nft/tests/add_lesson_review.rs delete mode 100644 contracts/student-nft/tests/approve_hw.rs delete mode 100644 contracts/student-nft/tests/complete_course.rs delete mode 100644 contracts/student-nft/tests/create_course.rs delete mode 100644 contracts/student-nft/tests/emote.rs delete mode 100644 contracts/student-nft/tests/finish_course.rs delete mode 100644 contracts/student-nft/tests/mint.rs delete mode 100644 contracts/student-nft/tests/node_tests.rs delete mode 100644 contracts/student-nft/tests/remove_course_helper.rs delete mode 100644 contracts/student-nft/tests/start_course.rs delete mode 100644 contracts/student-nft/tests/utils/mod.rs delete mode 100644 contracts/student-nft/tests/utils/student_nft.rs delete mode 100644 contracts/student-nft/tests/utils_gclient/common.rs delete mode 100644 contracts/student-nft/tests/utils_gclient/mod.rs delete mode 100644 contracts/student-nft/tests/utils_gclient/student_nft.rs delete mode 100644 contracts/supply-chain/Cargo.toml delete mode 100644 contracts/supply-chain/README.md delete mode 100644 contracts/supply-chain/build.rs delete mode 100644 contracts/supply-chain/deploy/Cargo.toml delete mode 100644 contracts/supply-chain/deploy/src/lib.rs delete mode 100644 contracts/supply-chain/deploy/src/main.rs delete mode 100644 contracts/supply-chain/io/Cargo.toml delete mode 100644 contracts/supply-chain/io/src/lib.rs delete mode 100644 contracts/supply-chain/src/lib.rs delete mode 100644 contracts/supply-chain/src/tx_manager.rs delete mode 100644 contracts/supply-chain/src/utils.rs delete mode 100644 contracts/supply-chain/state/Cargo.toml delete mode 100644 contracts/supply-chain/state/build.rs delete mode 100644 contracts/supply-chain/state/src/lib.rs delete mode 100644 contracts/supply-chain/tests/approve_reuse.rs delete mode 100644 contracts/supply-chain/tests/nft_transfer.rs delete mode 100644 contracts/supply-chain/tests/other.rs delete mode 100644 contracts/supply-chain/tests/ownership_and_role.rs delete mode 100644 contracts/supply-chain/tests/receive.rs delete mode 100644 contracts/supply-chain/tests/state.rs delete mode 100644 contracts/supply-chain/tests/state_consistency.rs delete mode 100644 contracts/supply-chain/tests/utils/common.rs delete mode 100644 contracts/supply-chain/tests/utils/fungible_token.rs delete mode 100644 contracts/supply-chain/tests/utils/mod.rs delete mode 100644 contracts/supply-chain/tests/utils/non_fungible_token.rs delete mode 100644 contracts/supply-chain/tests/utils/prelude.rs rename contracts/tic-tac-toe/{sails => }/app/Cargo.toml (100%) rename contracts/tic-tac-toe/{sails => }/app/src/lib.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/game/funcs.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/game/mod.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/game/utils.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/mod.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/session/funcs.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/session/mod.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/session/utils.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/src/services/utils.rs (100%) rename contracts/tic-tac-toe/{sails => }/app/tests/test.rs (100%) delete mode 100644 contracts/tic-tac-toe/gstd/Cargo.toml delete mode 100644 contracts/tic-tac-toe/gstd/README.md delete mode 100644 contracts/tic-tac-toe/gstd/assets/accounts_10k.txt delete mode 100644 contracts/tic-tac-toe/gstd/assets/accounts_pr_keys.txt delete mode 100644 contracts/tic-tac-toe/gstd/build.rs delete mode 100644 contracts/tic-tac-toe/gstd/io/Cargo.toml delete mode 100644 contracts/tic-tac-toe/gstd/io/src/lib.rs delete mode 100644 contracts/tic-tac-toe/gstd/src/lib.rs delete mode 100644 contracts/tic-tac-toe/gstd/tests/ttt_node_test.rs delete mode 100644 contracts/tic-tac-toe/sails/README.md rename contracts/tic-tac-toe/{sails => }/wasm/Cargo.toml (100%) rename contracts/tic-tac-toe/{sails => }/wasm/build.rs (100%) rename contracts/tic-tac-toe/{sails => }/wasm/src/lib.rs (100%) rename contracts/tic-tac-toe/{sails => }/wasm/tic-tac-toe.idl (100%) diff --git a/contracts/.cargo/config.toml b/contracts/.cargo/config.toml deleted file mode 100644 index 31cc3dae8..000000000 --- a/contracts/.cargo/config.toml +++ /dev/null @@ -1,17 +0,0 @@ -[alias] -xtask = "r -rp xtask --" - -[build] -rustflags = [ - "-Wfuture-incompatible", - "-Wlet-underscore", - "-Wrust-2018-idioms", - "-Wunused", -] -rustdocflags = [ - "-Dwarnings", - "--default-theme=ayu", - "-Wrustdoc::private_doc_tests", - # TODO: uncomment after the compiler update. - # "-Wrustdoc::unescaped_backticks", -] diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index 67daf5078..6e032424a 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -143,12 +143,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "anstyle" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" - [[package]] name = "anyhow" version = "1.0.86" @@ -350,12 +344,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "array-bytes" -version = "4.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" - [[package]] name = "array-bytes" version = "6.2.2" @@ -581,46 +569,6 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" -[[package]] -name = "auto-changed-nft" -version = "1.1.0" -dependencies = [ - "auto-changed-nft-io", - "gclient", - "gear-lib-derive", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "hex-literal 0.4.1", - "primitive-types", - "sp-core 21.0.0", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "auto-changed-nft-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "auto-changed-nft-state" -version = "1.1.0" -dependencies = [ - "auto-changed-nft-io", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "autocfg" version = "1.3.0" @@ -1124,31 +1072,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "clap" -version = "4.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" -dependencies = [ - "anstyle", - "clap_lex", -] - -[[package]] -name = "clap_lex" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" - [[package]] name = "cmake" version = "0.1.50" @@ -1451,41 +1374,6 @@ version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" -[[package]] -name = "crowdsale" -version = "1.1.0" -dependencies = [ - "crowdsale-io", - "gclient", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "tokio", -] - -[[package]] -name = "crowdsale-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "crowdsale-state" -version = "1.1.0" -dependencies = [ - "crowdsale-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "crunchy" version = "0.2.2" @@ -1611,71 +1499,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "dao" -version = "1.1.0" -dependencies = [ - "blake2-rfc", - "dao-io", - "gclient", - "gear-wasm-builder", - "gstd", - "gtest", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "tokio", -] - -[[package]] -name = "dao-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "dao-light" -version = "1.1.0" -dependencies = [ - "dao-light-io", - "fungible-token", - "fungible-token-io", - "gear-wasm-builder", - "gstd", - "gtest", -] - -[[package]] -name = "dao-light-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "dao-light-state" -version = "1.1.0" -dependencies = [ - "dao-light-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - -[[package]] -name = "dao-state" -version = "1.1.0" -dependencies = [ - "dao-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "darling" version = "0.14.4" @@ -1760,90 +1583,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "decentralized-git" -version = "1.1.0" -dependencies = [ - "decentralized-git-io", - "decentralized-git-user-io", - "gear-wasm-builder", - "gstd", -] - -[[package]] -name = "decentralized-git-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "decentralized-git-master" -version = "1.1.0" -dependencies = [ - "decentralized-git-master-io", - "decentralized-git-user-io", - "gear-wasm-builder", - "gstd", -] - -[[package]] -name = "decentralized-git-master-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "decentralized-git-master-state" -version = "1.1.0" -dependencies = [ - "decentralized-git-master-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - -[[package]] -name = "decentralized-git-state" -version = "1.1.0" -dependencies = [ - "decentralized-git-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - -[[package]] -name = "decentralized-git-user" -version = "1.1.0" -dependencies = [ - "decentralized-git-io", - "decentralized-git-user-io", - "gear-wasm-builder", - "gstd", -] - -[[package]] -name = "decentralized-git-user-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "decentralized-git-user-state" -version = "1.1.0" -dependencies = [ - "decentralized-git-user-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "defer" version = "0.2.1" @@ -1895,80 +1634,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "dex" -version = "1.1.0" -dependencies = [ - "dex-factory", - "dex-factory-io", - "dex-factory-state", - "dex-io", - "dex-state", - "gclient", - "gear-core", - "gear-lib", - "gear-wasm-builder", - "gstd", - "gtest", - "primitive-types", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "dex-factory" -version = "1.1.0" -dependencies = [ - "dex-factory-io", - "dex-io", - "gear-wasm-builder", - "gstd", -] - -[[package]] -name = "dex-factory-io" -version = "1.1.0" -dependencies = [ - "dex-io", - "gmeta", - "gstd", -] - -[[package]] -name = "dex-factory-state" -version = "1.1.0" -dependencies = [ - "dex-factory-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - -[[package]] -name = "dex-io" -version = "1.1.0" -dependencies = [ - "gear-lib", - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "dex-state" -version = "1.1.0" -dependencies = [ - "dex-io", - "gear-wasm-builder", - "gmeta", - "gstd", - "primitive-types", -] - [[package]] name = "digest" version = "0.8.1" @@ -2046,42 +1711,6 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" -[[package]] -name = "dutch-auction" -version = "1.1.0" -dependencies = [ - "dutch-auction-io", - "gclient", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "non-fungible-token", - "non-fungible-token-io", - "primitive-types", - "tokio", -] - -[[package]] -name = "dutch-auction-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "dutch-auction-state" -version = "1.1.0" -dependencies = [ - "dutch-auction-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "dyn-clonable" version = "0.9.0" @@ -2109,46 +1738,6 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" -[[package]] -name = "dynamic-nft" -version = "1.1.0" -dependencies = [ - "dynamic-nft-io", - "gclient", - "gear-lib-derive", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "hex-literal 0.4.1", - "primitive-types", - "sp-core 21.0.0", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "dynamic-nft-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "dynamic-nft-state" -version = "1.1.0" -dependencies = [ - "dynamic-nft-io", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "dynasm" version = "1.2.3" @@ -2354,42 +1943,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "escrow" -version = "1.1.0" -dependencies = [ - "escrow-io", - "gclient", - "gear-wasm-builder", - "gstd", - "gtest", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "tokio", -] - -[[package]] -name = "escrow-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "escrow-state" -version = "1.1.0" -dependencies = [ - "escrow-io", - "gear-wasm-builder", - "gmeta", - "gstd", - "primitive-types", -] - [[package]] name = "etc" version = "0.1.20" @@ -2482,79 +2035,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[package]] -name = "fastrand" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" - -[[package]] -name = "feeds" -version = "1.1.0" -dependencies = [ - "feeds-channel", - "feeds-channel-io", - "feeds-io", - "gear-wasm-builder", - "gstd", - "gtest", -] - -[[package]] -name = "feeds-channel" -version = "1.1.0" -dependencies = [ - "async-trait", - "feeds-channel-io", - "feeds-io", - "gear-wasm-builder", - "gstd", -] - -[[package]] -name = "feeds-channel-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "feeds-channel-state" -version = "1.1.0" -dependencies = [ - "feeds-channel-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - -[[package]] -name = "feeds-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "feeds-state" -version = "1.1.0" +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ - "feeds-io", - "gear-wasm-builder", - "gmeta", - "gstd", + "instant", ] +[[package]] +name = "fastrand" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" + [[package]] name = "ff" version = "0.13.0" @@ -2648,9 +2142,9 @@ dependencies = [ "smallvec", "sp-api", "sp-arithmetic", - "sp-core 22.0.0", + "sp-core", "sp-core-hashing-proc-macro", - "sp-debug-derive 9.0.0", + "sp-debug-derive", "sp-inherents", "sp-io", "sp-runtime", @@ -2717,7 +2211,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 22.0.0", + "sp-core", "sp-io", "sp-runtime", "sp-std 9.0.0", @@ -2734,35 +2228,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "fungible-token" -version = "1.1.0" -dependencies = [ - "fungible-token-io", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", -] - -[[package]] -name = "fungible-token-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "fungible-token-state" -version = "1.1.0" -dependencies = [ - "fungible-token-io", - "gear-wasm-builder", - "gmeta", - "gstd", -] - [[package]] name = "funty" version = "2.0.0" @@ -2907,7 +2372,6 @@ name = "galactic-express" version = "1.1.0" dependencies = [ "galactic-express-io", - "gear-lib", "gear-wasm-builder", "gstd", "gtest", @@ -2918,7 +2382,6 @@ dependencies = [ name = "galactic-express-io" version = "1.1.0" dependencies = [ - "gear-lib", "gmeta", "gstd", "parity-scale-codec", @@ -2934,34 +2397,6 @@ dependencies = [ "gear-dlmalloc", ] -[[package]] -name = "game-of-chance" -version = "1.1.0" -dependencies = [ - "game-of-chance-io", - "gclient", - "gear-wasm-builder", - "gstd", - "gtest", - "primitive-types", - "rand 0.8.5", - "rand_xoshiro", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "game-of-chance-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - [[package]] name = "gbuiltin-bls381" version = "1.3.0" @@ -3028,7 +2463,7 @@ dependencies = [ "log", "primitive-types", "sp-arithmetic", - "sp-core 22.0.0", + "sp-core", "sp-io", "sp-runtime", "sp-std 9.0.0", @@ -3161,33 +2596,6 @@ dependencies = [ "gear-wasm-instrument", ] -[[package]] -name = "gear-lib" -version = "1.1.0" -dependencies = [ - "ahash 0.8.11", - "gstd", - "indexmap 2.2.6", - "primitive-types", -] - -[[package]] -name = "gear-lib-derive" -version = "1.1.0" -dependencies = [ - "quote", - "syn 2.0.72", -] - -[[package]] -name = "gear-lib-old" -version = "1.1.0" -dependencies = [ - "gstd", - "primitive-types", - "schnorrkel 0.10.2", -] - [[package]] name = "gear-node-wrapper" version = "1.5.0" @@ -3222,7 +2630,7 @@ dependencies = [ "gwasmi", "log", "parity-scale-codec", - "sp-core 22.0.0", + "sp-core", "sp-std 9.0.0", "sp-wasm-interface-common", ] @@ -3234,7 +2642,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b8e85693d331cd75effed01ecaeccc6ae28e137e454b020dc341829c9c74e3e" dependencies = [ "parity-scale-codec", - "sp-debug-derive 9.0.0", + "sp-debug-derive", "sp-std 9.0.0", "sp-wasm-interface-common", ] @@ -3516,9 +2924,9 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", - "sp-externalities 0.20.0", + "sp-externalities", "sp-std 9.0.0", - "sp-storage 14.0.0", + "sp-storage", "sp-tracing 10.0.0", "static_assertions", ] @@ -3603,7 +3011,7 @@ dependencies = [ "scale-value", "serde", "serde_json", - "sp-core 22.0.0", + "sp-core", "sp-runtime", "subxt", "thiserror", @@ -3823,12 +3231,6 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ebdb29d2ea9ed0083cd8cece49bbd968021bd99b0849edb4a9a7ee0fdf6a4e0" -[[package]] -name = "hex-literal" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" - [[package]] name = "hmac" version = "0.8.1" @@ -3878,39 +3280,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "horse-races" -version = "1.1.0" -dependencies = [ - "fungible-token", - "fungible-token-io", - "gear-wasm-builder", - "gstd", - "gtest", - "horse-races-io", - "horse-races-state", - "oracle-randomness", - "oracle-randomness-io", -] - -[[package]] -name = "horse-races-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "horse-races-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "horse-races-io", -] - [[package]] name = "http" version = "0.2.12" @@ -4021,38 +3390,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "identity" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gstd", - "gtest", - "hex-literal 0.4.1", - "identity-io", - "identity-state", - "sha2 0.10.8", - "sp-core 21.0.0", -] - -[[package]] -name = "identity-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "identity-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "identity-io", -] - [[package]] name = "idna" version = "0.5.0" @@ -4765,250 +4102,115 @@ checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3" name = "merlin" version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.5.1", - "zeroize", -] - -[[package]] -name = "merlin" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" -dependencies = [ - "byteorder", - "keccak", - "rand_core 0.6.4", - "zeroize", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "miniz_oxide" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" -dependencies = [ - "adler", -] - -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", -] - -[[package]] -name = "more-asserts" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" - -[[package]] -name = "multi-token" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "multi-token-io", - "tokio", -] - -[[package]] -name = "multi-token-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "multisig-wallet" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gstd", - "gtest", - "multisig-wallet-io", - "primitive-types", -] - -[[package]] -name = "multisig-wallet-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "multisig-wallet-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "multisig-wallet-io", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nft" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-core", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "nft-io", - "sp-core 21.0.0", - "tokio", +checksum = "4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42" +dependencies = [ + "byteorder", + "keccak", + "rand_core 0.5.1", + "zeroize", ] [[package]] -name = "nft-io" -version = "1.1.0" +name = "merlin" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d" dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", - "parity-scale-codec", - "primitive-types", - "scale-info", + "byteorder", + "keccak", + "rand_core 0.6.4", + "zeroize", ] [[package]] -name = "nft-marketplace" -version = "1.1.0" -dependencies = [ - "async-trait", - "blake2-rfc", - "gclient", - "gear-lib-old", - "gear-wasm-builder", - "gstd", - "gtest", - "nft-marketplace-io", - "non-fungible-token", - "non-fungible-token-io", - "primitive-types", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "tokio", -] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] -name = "nft-marketplace-io" -version = "1.1.0" +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" dependencies = [ - "gmeta", - "gstd", - "primitive-types", + "adler", ] [[package]] -name = "nft-marketplace-state" -version = "1.1.0" +name = "mio" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "nft-marketplace-io", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.48.0", ] [[package]] -name = "nft-master" +name = "more-asserts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389" + +[[package]] +name = "multi-token" version = "1.1.0" dependencies = [ "gclient", "gear-wasm-builder", + "gmeta", "gstd", "gtest", - "nft-master-io", + "multi-token-io", "tokio", ] [[package]] -name = "nft-master-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "nft-master-state" +name = "multi-token-io" version = "1.1.0" dependencies = [ - "gear-wasm-builder", "gmeta", "gstd", - "nft-master-io", ] [[package]] -name = "nft-pixelboard" +name = "multisig-wallet" version = "1.1.0" dependencies = [ - "gear-lib-old", "gear-wasm-builder", "gstd", "gtest", - "nft-pixelboard-io", - "non-fungible-token", - "non-fungible-token-io", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", + "multisig-wallet-io", + "primitive-types", ] [[package]] -name = "nft-pixelboard-io" +name = "multisig-wallet-io" version = "1.1.0" dependencies = [ - "gear-lib-old", "gmeta", "gstd", + "primitive-types", ] [[package]] -name = "nft-pixelboard-state" +name = "multisig-wallet-state" version = "1.1.0" dependencies = [ - "gear-lib-old", "gear-wasm-builder", "gmeta", "gstd", - "nft-pixelboard-io", + "multisig-wallet-io", ] +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nix" version = "0.26.4" @@ -5050,46 +4252,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "non-fungible-token" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-lib-derive", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "hex-literal 0.4.1", - "non-fungible-token-io", - "primitive-types", - "sp-core 21.0.0", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "non-fungible-token-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "non-fungible-token-state" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "non-fungible-token-io", -] - [[package]] name = "nonempty" version = "0.8.1" @@ -5208,43 +4370,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "on-chain-nft" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-lib-derive", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "on-chain-nft-io", - "on-chain-nft-state", - "primitive-types", - "tokio", -] - -[[package]] -name = "on-chain-nft-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", -] - -[[package]] -name = "on-chain-nft-state" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "on-chain-nft-io", -] - [[package]] name = "once_cell" version = "1.19.0" @@ -5870,15 +4995,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_xoshiro" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" -dependencies = [ - "rand_core 0.6.4", -] - [[package]] name = "rayon" version = "1.10.0" @@ -6022,46 +5138,6 @@ dependencies = [ "bytecheck", ] -[[package]] -name = "rentable-nft" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-lib-derive", - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "hex-literal 0.4.1", - "primitive-types", - "rentable-nft-io", - "sp-core 21.0.0", - "sp-core-hashing 10.0.0", - "tokio", -] - -[[package]] -name = "rentable-nft-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "rentable-nft-state" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gear-wasm-builder", - "gmeta", - "gstd", - "rentable-nft-io", -] - [[package]] name = "rfc6979" version = "0.4.0" @@ -6233,37 +5309,6 @@ dependencies = [ "rock-paper-scissors-io", ] -[[package]] -name = "roll-the-dice" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gstd", - "gtest", - "oracle", - "oracle-io", - "roll-the-dice-io", - "roll-the-dice-state", -] - -[[package]] -name = "roll-the-dice-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "roll-the-dice-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "roll-the-dice-io", -] - [[package]] name = "rustc-demangle" version = "0.1.24" @@ -6871,92 +5916,21 @@ dependencies = [ name = "sha2" version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha3" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" -dependencies = [ - "digest 0.10.7", - "keccak", -] - -[[package]] -name = "sharded-fungible-token" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gear-wasm-builder", - "gstd", - "gtest", - "hex-literal 0.4.1", - "primitive-types", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-logic-io", - "sharded-fungible-token-storage", - "sp-core 21.0.0", - "sp-core-hashing 10.0.0", -] - -[[package]] -name = "sharded-fungible-token-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "primitive-types", -] - -[[package]] -name = "sharded-fungible-token-logic" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gear-wasm-builder", - "gstd", - "hex", - "primitive-types", - "sharded-fungible-token-io", - "sharded-fungible-token-logic-io", - "sharded-fungible-token-storage-io", -] - -[[package]] -name = "sharded-fungible-token-logic-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "primitive-types", - "sharded-fungible-token-io", - "sharded-fungible-token-storage-io", -] - -[[package]] -name = "sharded-fungible-token-storage" -version = "1.1.0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ - "gear-wasm-builder", - "gstd", - "primitive-types", - "sharded-fungible-token-storage-io", + "cfg-if", + "cpufeatures", + "digest 0.10.7", ] [[package]] -name = "sharded-fungible-token-storage-io" -version = "1.1.0" +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" dependencies = [ - "gmeta", - "gstd", - "primitive-types", + "digest 0.10.7", + "keccak", ] [[package]] @@ -7196,8 +6170,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-api-proc-macro", - "sp-core 22.0.0", - "sp-externalities 0.20.0", + "sp-core", + "sp-externalities", "sp-metadata-ir", "sp-runtime", "sp-state-machine", @@ -7231,7 +6205,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 22.0.0", + "sp-core", "sp-io", "sp-std 9.0.0", ] @@ -7251,46 +6225,13 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "sp-core" -version = "21.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18d9e2f67d8661f9729f35347069ac29d92758b59135176799db966947a7336" -dependencies = [ - "array-bytes 4.2.0", - "bitflags 1.3.2", - "blake2", - "bounded-collections", - "ed25519-zebra", - "hash-db", - "hash256-std-hasher", - "libsecp256k1", - "log", - "merlin 2.0.1", - "parity-scale-codec", - "paste", - "primitive-types", - "scale-info", - "schnorrkel 0.9.1", - "secp256k1", - "secrecy", - "sp-core-hashing 9.0.0", - "sp-debug-derive 8.0.0", - "sp-externalities 0.19.0", - "sp-runtime-interface 17.0.0", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "ss58-registry", - "zeroize", -] - [[package]] name = "sp-core" version = "22.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0de478e02efd547693b33ad02515e09933d5b69b7f3036fa890b92e50fd9dfc" dependencies = [ - "array-bytes 6.2.2", + "array-bytes", "bitflags 1.3.2", "blake2", "bounded-collections", @@ -7317,11 +6258,11 @@ dependencies = [ "secrecy", "serde", "sp-core-hashing 10.0.0", - "sp-debug-derive 9.0.0", - "sp-externalities 0.20.0", - "sp-runtime-interface 18.0.0", + "sp-debug-derive", + "sp-externalities", + "sp-runtime-interface", "sp-std 9.0.0", - "sp-storage 14.0.0", + "sp-storage", "ss58-registry", "substrate-bip39", "thiserror", @@ -7370,17 +6311,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "sp-debug-derive" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f531814d2f16995144c74428830ccf7d94ff4a7749632b83ad8199b181140c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "sp-debug-derive" version = "9.0.0" @@ -7392,18 +6322,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "sp-externalities" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f71c671e01a8ca60da925d43a1b351b69626e268b8837f8371e320cf1dd100" -dependencies = [ - "environmental", - "parity-scale-codec", - "sp-std 8.0.0", - "sp-storage 13.0.0", -] - [[package]] name = "sp-externalities" version = "0.20.0" @@ -7413,7 +6331,7 @@ dependencies = [ "environmental", "parity-scale-codec", "sp-std 9.0.0", - "sp-storage 14.0.0", + "sp-storage", ] [[package]] @@ -7445,10 +6363,10 @@ dependencies = [ "parity-scale-codec", "rustversion", "secp256k1", - "sp-core 22.0.0", - "sp-externalities 0.20.0", + "sp-core", + "sp-externalities", "sp-keystore", - "sp-runtime-interface 18.0.0", + "sp-runtime-interface", "sp-state-machine", "sp-std 9.0.0", "sp-tracing 11.0.0", @@ -7465,8 +6383,8 @@ checksum = "6eda1d2572a15340927a9f7db75ffe74366b645eaf9212015b4a96ad8e9d4c46" dependencies = [ "parity-scale-codec", "parking_lot", - "sp-core 22.0.0", - "sp-externalities 0.20.0", + "sp-core", + "sp-externalities", "thiserror", ] @@ -7510,31 +6428,12 @@ dependencies = [ "serde", "sp-application-crypto", "sp-arithmetic", - "sp-core 22.0.0", + "sp-core", "sp-io", "sp-std 9.0.0", "sp-weights", ] -[[package]] -name = "sp-runtime-interface" -version = "17.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e676128182f90015e916f806cba635c8141e341e7abbc45d25525472e1bbce8" -dependencies = [ - "bytes", - "impl-trait-for-tuples", - "parity-scale-codec", - "primitive-types", - "sp-externalities 0.19.0", - "sp-runtime-interface-proc-macro 11.0.0", - "sp-std 8.0.0", - "sp-storage 13.0.0", - "sp-tracing 10.0.0", - "sp-wasm-interface 14.0.0", - "static_assertions", -] - [[package]] name = "sp-runtime-interface" version = "18.0.0" @@ -7545,28 +6444,15 @@ dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", "primitive-types", - "sp-externalities 0.20.0", - "sp-runtime-interface-proc-macro 12.0.0", + "sp-externalities", + "sp-runtime-interface-proc-macro", "sp-std 9.0.0", - "sp-storage 14.0.0", + "sp-storage", "sp-tracing 11.0.0", - "sp-wasm-interface 15.0.0", + "sp-wasm-interface", "static_assertions", ] -[[package]] -name = "sp-runtime-interface-proc-macro" -version = "11.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5d5bd5566fe5633ec48dfa35ab152fd29f8a577c21971e1c6db9f28afb9bbb9" -dependencies = [ - "Inflector", - "proc-macro-crate 1.3.1", - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "sp-runtime-interface-proc-macro" version = "12.0.0" @@ -7590,7 +6476,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "sp-core 22.0.0", + "sp-core", "sp-runtime", "sp-std 9.0.0", ] @@ -7607,8 +6493,8 @@ dependencies = [ "parking_lot", "rand 0.8.5", "smallvec", - "sp-core 22.0.0", - "sp-externalities 0.20.0", + "sp-core", + "sp-externalities", "sp-panic-handler", "sp-std 9.0.0", "sp-trie", @@ -7629,20 +6515,6 @@ version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d5bbc9339227d1b6a9b7ccd9b2920c818653d40eef1512f1e2e824d72e7a336" -[[package]] -name = "sp-storage" -version = "13.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94294be83f11d4958cfea89ed5798f0b6605f5defc3a996948848458abbcc18e" -dependencies = [ - "impl-serde", - "parity-scale-codec", - "ref-cast", - "serde", - "sp-debug-derive 8.0.0", - "sp-std 8.0.0", -] - [[package]] name = "sp-storage" version = "14.0.0" @@ -7653,7 +6525,7 @@ dependencies = [ "parity-scale-codec", "ref-cast", "serde", - "sp-debug-derive 9.0.0", + "sp-debug-derive", "sp-std 9.0.0", ] @@ -7699,7 +6571,7 @@ dependencies = [ "parking_lot", "scale-info", "schnellru", - "sp-core 22.0.0", + "sp-core", "sp-std 9.0.0", "thiserror", "tracing", @@ -7737,17 +6609,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "sp-wasm-interface" -version = "14.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19c122609ca5d8246be6386888596320d03c7bc880959eaa2c36bcd5acd6846" -dependencies = [ - "impl-trait-for-tuples", - "parity-scale-codec", - "sp-std 8.0.0", -] - [[package]] name = "sp-wasm-interface" version = "15.0.0" @@ -7784,8 +6645,8 @@ dependencies = [ "serde", "smallvec", "sp-arithmetic", - "sp-core 22.0.0", - "sp-debug-derive 9.0.0", + "sp-core", + "sp-debug-derive", "sp-std 9.0.0", ] @@ -7826,39 +6687,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "staking" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "staking-io", -] - -[[package]] -name = "staking-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "staking-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "staking-io", -] - [[package]] name = "static_assertions" version = "1.1.0" @@ -7890,36 +6718,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "student-nft" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-wasm-builder", - "gstd", - "gtest", - "student-nft-io", - "tokio", -] - -[[package]] -name = "student-nft-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - -[[package]] -name = "student-nft-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "student-nft-io", -] - [[package]] name = "substrate-bip39" version = "0.4.6" @@ -8040,64 +6838,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "supply-chain" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-lib-old", - "gear-wasm-builder", - "gstd", - "gtest", - "non-fungible-token", - "non-fungible-token-io", - "non-fungible-token-state", - "sharded-fungible-token", - "sharded-fungible-token-io", - "sharded-fungible-token-logic", - "sharded-fungible-token-storage", - "supply-chain-deploy", - "supply-chain-io", - "supply-chain-state", - "tokio", -] - -[[package]] -name = "supply-chain-deploy" -version = "1.1.0" -dependencies = [ - "clap", - "gclient", - "gstd", - "non-fungible-token-io", - "primitive-types", - "sharded-fungible-token-io", - "sp-core-hashing 10.0.0", - "supply-chain", - "supply-chain-io", - "supply-chain-state", - "tokio", -] - -[[package]] -name = "supply-chain-io" -version = "1.1.0" -dependencies = [ - "gear-lib-old", - "gmeta", - "gstd", -] - -[[package]] -name = "supply-chain-state" -version = "1.1.0" -dependencies = [ - "gear-wasm-builder", - "gmeta", - "gstd", - "supply-chain-io", -] - [[package]] name = "syn" version = "1.0.109" @@ -8353,21 +7093,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "tic-tac-toe" -version = "1.1.0" -dependencies = [ - "gclient", - "gear-core", - "gear-wasm-builder", - "gmeta", - "gstd", - "gtest", - "hex", - "tic-tac-toe-io", - "tokio", -] - [[package]] name = "tic-tac-toe-app" version = "1.1.0" @@ -8382,17 +7107,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tic-tac-toe-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "parity-scale-codec", - "primitive-types", - "scale-info", -] - [[package]] name = "tic-tac-toe-wasm" version = "1.1.0" @@ -8826,55 +7540,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" -[[package]] -name = "vara-man" -version = "1.1.0" -dependencies = [ - "blake2-rfc", - "fungible-token", - "fungible-token-io", - "gclient", - "gear-core", - "gear-wasm-builder", - "gstd", - "gtest", - "hex", - "sp-core 21.0.0", - "tokio", - "vara-man-io", -] - -[[package]] -name = "vara-man-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "varatube" -version = "1.1.0" -dependencies = [ - "fungible-token", - "fungible-token-io", - "gear-core", - "gear-wasm-builder", - "gstd", - "gtest", - "varatube-io", -] - -[[package]] -name = "varatube-io" -version = "1.1.0" -dependencies = [ - "gmeta", - "gstd", -] - [[package]] name = "version_check" version = "0.9.4" @@ -9871,7 +8536,7 @@ dependencies = [ "gear-core", "gstd", "gtest", - "hex-literal 0.3.4", + "hex-literal", "primitive-types", "sails-rs", "schnorrkel 0.10.2", diff --git a/contracts/Cargo.toml b/contracts/Cargo.toml index 3743f2c46..4dd218c16 100644 --- a/contracts/Cargo.toml +++ b/contracts/Cargo.toml @@ -3,83 +3,24 @@ resolver = "2" # Keep in the lexicographic order! # Remove a member if it's used as a dependency in the workspace. members = [ - "auto-changed-nft", - "auto-changed-nft/state", "battleship", "car-races", - "crowdsale", - "crowdsale/state", - "dao", - "dao/state", - "dao-light", - "dao-light/state", - "decentralized-git", - "decentralized-git/master", - "decentralized-git/master/state", - "decentralized-git/state", - "decentralized-git/user", - "decentralized-git/user/state", - "dex", - "dex/factory", - "dex/factory/state", - "dex/state", - "dutch-auction", - "dutch-auction/state", - "dynamic-nft", - "dynamic-nft/state", - "escrow", - "escrow/state", - "feeds", - "feeds/channel", - "feeds/channel/state", - "feeds/state", - "fungible-token", - "fungible-token/state", "galactic-express", - "game-of-chance", - "horse-races", - "horse-races/state", - "identity", - "identity/state", "multi-token", "multisig-wallet", "multisig-wallet/state", - "nft", - "nft-marketplace", - "nft-marketplace/state", - "nft-master", - "nft-master/state", - "nft-pixelboard", - "nft-pixelboard/state", - "non-fungible-token", - "non-fungible-token/state", - "on-chain-nft", - "on-chain-nft/state", "oracle", "oracle/state", "oracle/randomness", "oracle/randomness/state", "ping", "ping/state", - "rentable-nft", - "rentable-nft/state", "rmrk", "rmrk/catalog", "rmrk/resource", "rmrk/state", "rock-paper-scissors", "rock-paper-scissors/state", - "roll-the-dice", - "roll-the-dice/state", - "sharded-fungible-token", - "sharded-fungible-token/logic", - "sharded-fungible-token/storage", - "staking", - "staking/state", - "student-nft", - "student-nft/state", - "supply-chain", - "supply-chain/state", "syndote", "syndote/player", "tamagotchi", @@ -87,16 +28,11 @@ members = [ "tamagotchi-battle", "tamagotchi-battle/state", "tequila-train", - "tic-tac-toe/gstd", - "tic-tac-toe/sails/wasm", - "vara-man", - "varatube", + "tic-tac-toe/wasm", "w3bstreaming", - "zk-battleship/app", "zk-battleship/wasm", # Noncontract crates - "gear-lib", "xtask", ] @@ -114,102 +50,44 @@ publish = false # Keep in the lexicographic order! battleship-bot.path = "battleship/bot" -dex-factory.path = "dex/factory" -feeds-channel.path = "feeds/channel" -fungible-token.path = "fungible-token" -multi-token.path = "multi-token" -nft.path = "nft" -non-fungible-token.path = "non-fungible-token" oracle.path = "oracle" oracle-randomness.path = "oracle/randomness" rmrk-catalog.path = "rmrk/catalog" -sharded-fungible-token.path = "sharded-fungible-token" -sharded-fungible-token-logic.path = "sharded-fungible-token/logic" -sharded-fungible-token-storage.path = "sharded-fungible-token/storage" -supply-chain.path = "supply-chain" syndote-player.path = "syndote/player" tamagotchi.path = "tamagotchi" # Local states # Keep in the lexicographic order! -crowdsale-state.path = "crowdsale/state" -dex-factory-state.path = "dex/factory/state" -dex-state.path = "dex/state" -horse-races-state.path = "horse-races/state" -identity-state.path = "identity/state" -non-fungible-token-state.path = "non-fungible-token/state" -on-chain-nft-state.path = "on-chain-nft/state" rmrk-state.path = "rmrk/state" -roll-the-dice-state.path = "roll-the-dice/state" -supply-chain-state.path = "supply-chain/state" tamagotchi-battle-state.path = "tamagotchi-battle/state" # Local IO-crates # Keep in the lexicographic order! -auto-changed-nft-io.path = "auto-changed-nft/io" battleship-io.path = "battleship/io" car-races-io.path = "car-races/io" -crowdsale-io.path = "crowdsale/io" -dao-io.path = "dao/io" -dao-light-io.path = "dao-light/io" -decentralized-git-io.path = "decentralized-git/io" -decentralized-git-master-io.path = "decentralized-git/master/io" -decentralized-git-user-io.path = "decentralized-git/user/io" -dex-factory-io.path = "dex/factory/io" -dex-io.path = "dex/io" -dutch-auction-io.path = "dutch-auction/io" -dynamic-nft-io.path = "dynamic-nft/io" -escrow-io.path = "escrow/io" -feeds-channel-io.path = "feeds/channel/io" -feeds-io.path = "feeds/io" -fungible-token-io.path = "fungible-token/io" galactic-express-io.path = "galactic-express/io" -game-of-chance-io.path = "game-of-chance/io" -horse-races-io.path = "horse-races/io" -identity-io.path = "identity/io" multi-token-io.path = "multi-token/io" multisig-wallet-io.path = "multisig-wallet/io" -nft-io.path = "nft/io" -nft-marketplace-io.path = "nft-marketplace/io" -nft-master-io.path = "nft-master/io" -nft-pixelboard-io.path = "nft-pixelboard/io" -non-fungible-token-io.path = "non-fungible-token/io" -on-chain-nft-io.path = "on-chain-nft/io" -oracle-io.path = "oracle/io" -oracle-randomness-io.path = "oracle/randomness/io" ping-io.path = "ping/io" -rentable-nft-io.path = "rentable-nft/io" rmrk-catalog-io.path = "rmrk/catalog/io" rmrk-io.path = "rmrk/io" rmrk-resource-io.path = "rmrk/resource/io" rock-paper-scissors-io.path = "rock-paper-scissors/io" -roll-the-dice-io.path = "roll-the-dice/io" -sharded-fungible-token-io.path = "sharded-fungible-token/io" -sharded-fungible-token-logic-io.path = "sharded-fungible-token/logic/io" -sharded-fungible-token-storage-io.path = "sharded-fungible-token/storage/io" -staking-io.path = "staking/io" -student-nft-io.path = "student-nft/io" -supply-chain-io.path = "supply-chain/io" +oracle-io.path = "oracle/io" +oracle-randomness-io.path = "oracle/randomness/io" syndote-io.path = "syndote/io" syndote-player-io.path = "syndote/player/io" tamagotchi-io.path = "tamagotchi/io" tamagotchi-battle-io.path = "tamagotchi-battle/io" tequila-train-io.path = "tequila-train/io" tic-tac-toe-io.path = "tic-tac-toe/gstd/io" -vara-man-io.path = "vara-man/io" -varatube-io.path = "varatube/io" w3bstreaming-io.path = "w3bstreaming/io" # Local libraries # Keep in the lexicographic order! - -gear-lib.path = "gear-lib" -gear-lib-old.path = "gear-lib-old" -gear-lib-derive.path = "gear-lib-old/derive" rmrk-types.path = "rmrk/types" -supply-chain-deploy.path = "supply-chain/deploy" # Gear diff --git a/contracts/auto-changed-nft/Cargo.toml b/contracts/auto-changed-nft/Cargo.toml deleted file mode 100644 index 1be9ba11d..000000000 --- a/contracts/auto-changed-nft/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "auto-changed-nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -auto-changed-nft-io.workspace = true -gear-lib-old.workspace = true -gear-lib-derive.workspace = true -sp-core-hashing.workspace = true -gmeta.workspace = true - -[dev-dependencies] -hex-literal.workspace = true -sp-core.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -auto-changed-nft-io.workspace = true diff --git a/contracts/auto-changed-nft/README.md b/contracts/auto-changed-nft/README.md deleted file mode 100644 index 0275a06a4..000000000 --- a/contracts/auto-changed-nft/README.md +++ /dev/null @@ -1,26 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=auto-changed-nft/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/auto_changed_nft_io) - -# [Auto-changed NFT](https://wiki.gear-tech.io/docs/examples/NFTs/dynamic-nft#examples) - -An example of Auto-Changed NFT (modified [Dynamic NFT](../dynamic-nft)). - -### 🏗️ Building - -```sh -cargo b -r -p "auto-changed-nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "auto-changed-nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "auto-changed-nft*" -``` diff --git a/contracts/auto-changed-nft/build.rs b/contracts/auto-changed-nft/build.rs deleted file mode 100644 index ddcd2194d..000000000 --- a/contracts/auto-changed-nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use auto_changed_nft_io::NFTMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/auto-changed-nft/io/Cargo.toml b/contracts/auto-changed-nft/io/Cargo.toml deleted file mode 100644 index 001e2be7e..000000000 --- a/contracts/auto-changed-nft/io/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "auto-changed-nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -gmeta.workspace = true diff --git a/contracts/auto-changed-nft/io/src/lib.rs b/contracts/auto-changed-nft/io/src/lib.rs deleted file mode 100644 index 7aaf8e9c1..000000000 --- a/contracts/auto-changed-nft/io/src/lib.rs +++ /dev/null @@ -1,236 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - io::{NFTApproval, NFTTransfer, NFTTransferPayout}, - royalties::*, - state::NFTState, - token::*, -}; -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; -use primitive_types::H256; - -pub struct NFTMetadata; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Config { - pub max_mint_count: Option, - pub authorized_minters: Vec, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitNFT { - pub collection: Collection, - pub royalties: Option, - pub config: Config, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Collection { - pub name: String, - pub description: String, -} - -impl Metadata for NFTMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTAction { - Mint { - transaction_id: u64, - token_metadata: TokenMetadata, - }, - Burn { - transaction_id: u64, - token_id: TokenId, - }, - Transfer { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - TransferPayout { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - amount: u128, - }, - NFTPayout { - owner: ActorId, - amount: u128, - }, - Approve { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - DelegatedApprove { - transaction_id: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], - }, - Owner { - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - }, - Clear { - transaction_hash: H256, - }, - AddMinter { - transaction_id: u64, - minter_id: ActorId, - }, - AddMedia { - token_id: TokenId, - media: String, - }, - StartAutoChanging { - token_ids: Vec, - updates_count: u32, - update_period: u32, - }, - Update { - token_ids: Vec, - rest_updates_count: u32, - }, - ReserveGas, -} - -#[derive(Encode, Decode, TypeInfo, Debug, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTEvent { - Transfer(NFTTransfer), - TransferPayout(NFTTransferPayout), - NFTPayout(Payout), - Approval(NFTApproval), - Owner { - owner: ActorId, - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - approved: bool, - }, - MinterAdded { - minter_id: ActorId, - }, - Updated { - data_hash: H256, - }, - CurrentUrl(String), - GasReserved, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, Vec)>, - pub token_metadata_by_id: Vec<(TokenId, Option)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub royalties: Option, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFT { - pub token: IoNFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: Vec<(H256, NFTEvent)>, - pub urls: Vec<(TokenId, Vec)>, - pub update_number: u32, -} - -impl From<&NFTState> for IoNFTState { - fn from(value: &NFTState) -> Self { - let NFTState { - name, - symbol, - base_uri, - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties, - } = value; - - let owner_by_id = owner_by_id - .iter() - .map(|(hash, actor_id)| (*hash, *actor_id)) - .collect(); - - let token_approvals = token_approvals - .iter() - .map(|(key, approvals)| (*key, approvals.iter().copied().collect())) - .collect(); - - let token_metadata_by_id = token_metadata_by_id - .iter() - .map(|(id, metadata)| (*id, metadata.clone())) - .collect(); - - let tokens_for_owner = tokens_for_owner - .iter() - .map(|(id, tokens)| (*id, tokens.clone())) - .collect(); - - Self { - name: name.clone(), - symbol: symbol.clone(), - base_uri: base_uri.clone(), - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties: royalties.clone(), - } - } -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Nft { - pub owner: ActorId, - pub name: String, - pub description: String, - pub media_url: String, - pub attrib_url: String, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub tokens: Vec<(TokenId, Nft)>, - pub owners: Vec<(ActorId, TokenId)>, - pub collection: Collection, - pub nonce: TokenId, -} diff --git a/contracts/auto-changed-nft/src/lib.rs b/contracts/auto-changed-nft/src/lib.rs deleted file mode 100644 index 652da3754..000000000 --- a/contracts/auto-changed-nft/src/lib.rs +++ /dev/null @@ -1,408 +0,0 @@ -#![no_std] - -use auto_changed_nft_io::*; -use gear_lib_derive::{NFTCore, NFTMetaState, NFTStateKeeper}; -use gear_lib_old::non_fungible_token::{io::NFTTransfer, nft_core::*, state::*, token::*}; -use gstd::{ - collections::HashMap, - exec::{self}, - msg::{self, send_delayed, send_delayed_from_reservation}, - prelude::*, - ActorId, ReservationId, -}; -use primitive_types::{H256, U256}; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -const RESERVATION_AMOUNT: u64 = 240_000_000_000; -const GAS_FOR_UPDATE: u64 = 4_000_000_000; - -#[derive(Debug, Default, NFTStateKeeper, NFTCore, NFTMetaState)] -pub struct AutoChangedNft { - #[NFTStateField] - pub token: NFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: HashMap, - pub collection: Collection, - pub config: Config, - pub urls: HashMap>, - pub rest_updates_count: u32, - pub update_period: u32, -} - -static mut CONTRACT: Option = None; -static mut RESERVATION: Vec = vec![]; - -#[no_mangle] -unsafe extern fn init() { - let config: InitNFT = msg::load().expect("Unable to decode InitNFT"); - if config.royalties.is_some() { - config.royalties.as_ref().expect("Unable to g").validate(); - } - let nft = AutoChangedNft { - token: NFTState { - name: config.collection.name.clone(), - royalties: config.royalties, - ..Default::default() - }, - collection: config.collection, - config: config.config, - owner: msg::source(), - ..Default::default() - }; - - CONTRACT = Some(nft); -} - -#[no_mangle] -extern fn handle() { - let action: NFTAction = msg::load().expect("Could not load NFTAction"); - let nft = unsafe { CONTRACT.get_or_insert(Default::default()) }; - match action { - NFTAction::Mint { - transaction_id, - token_metadata, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(MyNFTCore::mint(nft, token_metadata)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Burn { - transaction_id, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::burn(nft, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Transfer { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::transfer(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::TransferPayout { - transaction_id, - to, - token_id, - amount, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::TransferPayout(NFTCore::transfer_payout(nft, &to, token_id, amount)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::TransferPayout`"); - } - NFTAction::NFTPayout { owner, amount } => { - msg::reply( - NFTEvent::NFTPayout(NFTCore::nft_payout(nft, &owner, amount)), - 0, - ) - .expect("Error during replying with `NFTEvent::NFTPayout`"); - } - NFTAction::Approve { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::approve(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Owner { token_id } => { - msg::reply( - NFTEvent::Owner { - owner: NFTCore::owner_of(nft, token_id), - token_id, - }, - 0, - ) - .expect("Error during replying with `NFTEvent::Owner`"); - } - NFTAction::IsApproved { to, token_id } => { - msg::reply( - NFTEvent::IsApproved { - to, - token_id, - approved: NFTCore::is_approved_to(nft, &to, token_id), - }, - 0, - ) - .expect("Error during replying with `NFTEvent::IsApproved`"); - } - NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::delegated_approve(nft, message, signature)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Clear { transaction_hash } => nft.clear(transaction_hash), - NFTAction::AddMinter { - transaction_id, - minter_id, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - nft.config.authorized_minters.push(minter_id); - NFTEvent::MinterAdded { minter_id } - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::ReserveGas => nft.reserve_gas(), - NFTAction::AddMedia { token_id, media } => { - if let Some(urls) = nft.urls.get_mut(&token_id) { - urls.push(media); - } else { - nft.urls.insert(token_id, vec![media]); - } - } - NFTAction::Update { - rest_updates_count, - token_ids, - } => { - nft.rest_updates_count = rest_updates_count - 1; - nft.update_media(&token_ids); - if nft.rest_updates_count == 0 { - return; - } - let action = NFTAction::Update { - rest_updates_count: nft.rest_updates_count, - token_ids, - }; - let gas_available = exec::gas_available(); - if gas_available <= GAS_FOR_UPDATE { - let reservations: &mut Vec = unsafe { RESERVATION.as_mut() }; - let reservation_id = reservations.pop().expect("Need more gas"); - send_delayed_from_reservation( - reservation_id, - exec::program_id(), - action, - 0, - nft.update_period, - ) - .expect("Can't send delayed from reservation"); - } else { - send_delayed(exec::program_id(), action, 0, nft.update_period) - .expect("Can't send delayed"); - } - } - NFTAction::StartAutoChanging { - updates_count, - update_period, - token_ids, - } => { - nft.rest_updates_count = updates_count; - nft.update_period = update_period; - - nft.update_media(&token_ids); - - let payload = NFTAction::Update { - rest_updates_count: updates_count, - token_ids: token_ids.clone(), - }; - send_delayed(exec::program_id(), payload, 0, update_period) - .expect("Can't send delayed"); - nft.reserve_gas(); - } - }; -} - -pub trait MyNFTCore: NFTCore { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer; -} - -impl MyNFTCore for AutoChangedNft { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer { - let transfer = NFTCore::mint(self, &msg::source(), self.token_id, Some(token_metadata)); - self.token_id = self.token_id.saturating_add(U256::one()); - transfer - } -} - -impl AutoChangedNft { - fn process_transaction( - &mut self, - transaction_id: u64, - action: impl FnOnce(&mut AutoChangedNft) -> NFTEvent, - ) -> NFTEvent { - let transaction_hash = get_hash(&msg::source(), transaction_id); - - if let Some(nft_event) = self.transactions.get(&transaction_hash) { - nft_event.clone() - } else { - let nft_event = action(self); - - self.transactions - .insert(transaction_hash, nft_event.clone()); - - nft_event - } - } - - fn clear(&mut self, transaction_hash: H256) { - assert_eq!( - msg::source(), - exec::program_id(), - "Not allowed to clear transactions" - ); - self.transactions.remove(&transaction_hash); - } - fn check_config(&self) { - if let Some(max_mint_count) = self.config.max_mint_count { - if max_mint_count <= self.token.token_metadata_by_id.len() as u32 { - panic!( - "Mint impossible because max minting count {} limit exceeded", - max_mint_count - ); - } - } - - let current_minter = msg::source(); - let is_authorized_minter = self - .config - .authorized_minters - .iter() - .any(|authorized_minter| authorized_minter.eq(¤t_minter)); - - if !is_authorized_minter { - panic!( - "Current minter {:?} is not authorized at initialization", - current_minter - ); - } - } - - fn update_media(&mut self, token_ids: &Vec) { - for token_id in token_ids { - if let Some(Some(meta)) = self.token.token_metadata_by_id.get_mut(token_id) { - let urls_for_token = &self.urls[token_id]; - let index = self.rest_updates_count as usize % urls_for_token.len(); - let media = urls_for_token[index].clone(); - meta.media = media - } - } - } - fn reserve_gas(&self) { - let reservations: &mut Vec = unsafe { RESERVATION.as_mut() }; - let reservation_id = - ReservationId::reserve(RESERVATION_AMOUNT, 600).expect("reservation across executions"); - reservations.push(reservation_id); - } -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `IoNFT` from `state()`"); -} - -pub fn get_hash(account: &ActorId, transaction_id: u64) -> H256 { - let account: [u8; 32] = (*account).into(); - let transaction_id = transaction_id.to_be_bytes(); - sp_core_hashing::blake2_256(&[account.as_slice(), transaction_id.as_slice()].concat()).into() -} - -impl From for IoNFT { - fn from(value: AutoChangedNft) -> Self { - let AutoChangedNft { - token, - token_id, - owner, - transactions, - urls, - rest_updates_count: update_number, - .. - } = value; - - let transactions = transactions - .iter() - .map(|(key, event)| (*key, event.clone())) - .collect(); - let urls = urls - .iter() - .map(|(token_id, urls)| (*token_id, urls.clone())) - .collect(); - Self { - token: (&token).into(), - token_id, - owner, - transactions, - urls, - update_number, - } - } -} - -impl From for State { - fn from(value: AutoChangedNft) -> Self { - let AutoChangedNft { - token, - token_id, - collection, - .. - } = value; - - let owners = token - .owner_by_id - .iter() - .map(|(hash, actor_id)| (*actor_id, *hash)) - .collect(); - - let token_metadata_by_id = token - .token_metadata_by_id - .iter() - .map(|(id, metadata)| { - let metadata = metadata.as_ref().unwrap(); - let nft = Nft { - owner: *token.owner_by_id.get(id).unwrap(), - name: metadata.name.clone(), - description: metadata.description.clone(), - media_url: metadata.media.clone(), - attrib_url: metadata.reference.clone(), - }; - (*id, nft) - }) - .collect(); - - Self { - tokens: token_metadata_by_id, - collection, - nonce: token_id, - owners, - } - } -} diff --git a/contracts/auto-changed-nft/state/Cargo.toml b/contracts/auto-changed-nft/state/Cargo.toml deleted file mode 100644 index 85f96069e..000000000 --- a/contracts/auto-changed-nft/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "auto-changed-nft-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -auto-changed-nft-io.workspace = true -gear-lib-old.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/auto-changed-nft/state/build.rs b/contracts/auto-changed-nft/state/build.rs deleted file mode 100644 index 7485036bc..000000000 --- a/contracts/auto-changed-nft/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm() -} diff --git a/contracts/auto-changed-nft/state/src/lib.rs b/contracts/auto-changed-nft/state/src/lib.rs deleted file mode 100644 index f1d86e95c..000000000 --- a/contracts/auto-changed-nft/state/src/lib.rs +++ /dev/null @@ -1,128 +0,0 @@ -#![no_std] - -use auto_changed_nft_io::*; -use gear_lib_old::non_fungible_token::{ - state::NFTQueryReply, - token::{Token, TokenId}, -}; -use gstd::{ActorId, Vec}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoNFT; - - pub fn info(state: State) -> NFTQueryReply { - NFTQueryReply::NFTInfo { - name: state.token.name.clone(), - symbol: state.token.symbol.clone(), - base_uri: state.token.base_uri, - } - } - - pub fn token(state: State, token_id: TokenId) -> Token { - token_helper(&token_id, &state) - } - - pub fn tokens_for_owner(state: State, owner: ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - if let Some((_owner, token_ids)) = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)) - { - for token_id in token_ids { - tokens.push(token_helper(token_id, &state)); - } - } - tokens - } - pub fn total_supply(state: State) -> u128 { - state.token.owner_by_id.len() as u128 - } - - pub fn supply_for_owner(state: State, owner: ActorId) -> u128 { - let tokens = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)); - - tokens - .map(|(_id, tokens)| tokens.len() as u128) - .unwrap_or(0) - } - - pub fn all_tokens(state: State) -> Vec { - state - .token - .owner_by_id - .iter() - .map(|(id, _owner)| token_helper(id, &state)) - .collect() - } - - pub fn token_by_id(state: State, id: TokenId) -> Option { - state - .token - .owner_by_id - .iter() - .find(|(i, _)| id.eq(i)) - .map(|(token_id, _)| token_helper(token_id, &state)) - } - - pub fn approved_tokens(state: State, account: ActorId) -> Vec { - state - .token - .owner_by_id - .iter() - .filter_map(|(id, _owner)| { - state - .token - .token_approvals - .iter() - .find(|(token_id, _approvals)| token_id.eq(id)) - .and_then(|(_token_id, approvals)| { - if approvals.contains(&account) { - Some(token_helper(id, &state)) - } else { - None - } - }) - }) - .collect() - } -} - -fn token_helper(token_id: &TokenId, state: &IoNFT) -> Token { - let mut token = Token::default(); - if let Some((_token_id, owner_id)) = state - .token - .owner_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.id = *token_id; - token.owner_id = *owner_id; - } - if let Some((_token_id, approved_account_ids)) = state - .token - .token_approvals - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some((_token_id, Some(metadata))) = state - .token - .token_metadata_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token -} diff --git a/contracts/auto-changed-nft/tests/nft_tests.rs b/contracts/auto-changed-nft/tests/nft_tests.rs deleted file mode 100644 index a432bf9cd..000000000 --- a/contracts/auto-changed-nft/tests/nft_tests.rs +++ /dev/null @@ -1,544 +0,0 @@ -use gear_lib_old::non_fungible_token::{io::*, token::TokenId}; -use gstd::{ActorId, Encode}; -use gtest::System; -mod utils; -use auto_changed_nft_io::*; -use hex_literal::hex; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -use utils::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - let message = NFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn mint_limit_exceed() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(1), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[0]); - assert!(!res.main_failed()) -} - -#[test] -fn mint_not_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_added() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = add_minter(&nft, transaction_id, USERS[1].into(), USERS[0]); - assert!(!res.main_failed()); - let res = add_minter(&nft, transaction_id + 1, USERS[2].into(), USERS[1]); - assert!(!res.main_failed()); - - let res = add_minter(&nft, transaction_id + 1, 5.into(), 7); - assert!(res.main_failed()) -} - -#[test] -fn burn_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = burn(&nft, transaction_id, USERS[0], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: ZERO_ID.into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - // must fail since the token doesn't exist - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[0], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[1], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = transfer(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - - // must fail since the token doesn't exist - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - // must fail since transfer to the zero address - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn owner_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = owner_of(&nft, USERS[1], 0); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::Owner { - token_id: 0.into(), - owner: ActorId::from(USERS[0]), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[1]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[1].into(), - token_id: 0.into(), - approved: true, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[0]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[0].into(), - token_id: 0.into(), - approved: false, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = is_approved_to(&nft, USERS[1], 1, USERS[1]); - println!("{:?}", res.decoded_log::()); - assert!(res.main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = approve(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Approval(NFTApproval { - owner: USERS[0].into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -// TODO: fix test -#[test] -#[ignore] -fn auto_change_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - - let link1 = "link 1"; - let link2 = "link 2"; - let link3 = "link 3"; - let link4 = "link 4"; - - let token_id = TokenId::default(); - assert!(!add_url(&nft, token_id, link1, USERS[0]).main_failed()); - assert!(!add_url(&nft, token_id, link2, USERS[0]).main_failed()); - assert!(!add_url(&nft, token_id, link3, USERS[0]).main_failed()); - assert!(!add_url(&nft, token_id, link4, USERS[0]).main_failed()); - - let updates_count = 8; - let updates_period = 5; - assert!(!start_auto_changing( - &nft, - vec![token_id], - updates_count, - updates_period, - USERS[0] - ) - .main_failed()); - - // Start update - assert_eq!(current_media(&nft, token_id), link1); - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link4); - - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link3); - - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link2); - - // Media rotation happens - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link1); - - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link4); - - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link3); - - sys.spend_blocks(updates_period); - assert_eq!(current_media(&nft, token_id), link2); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - // must fail since the token doesn't exist - assert!(approve(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - transaction_id += 1; - // must fail since the caller is not the token owner - assert!(approve(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - transaction_id += 1; - // must fail since approval to the zero address - assert!(approve(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - //transfer - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); - //must fail since approval was removed after transferring - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); -} - -#[test] -#[ignore] -fn delegated_approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - transaction_id += 1; - let res = delegated_approve(&nft, transaction_id, USERS[1], message, signature.0); - let message = NFTEvent::Approval(NFTApproval { - owner: owner_id.into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[1], message))); - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn delegated_approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - transaction_id += 1; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - // Not owner can't approve nft - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 1.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); - - // Only approved actor in delegated approve can send delegated approve action - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!(delegated_approve(&nft, transaction_id, USERS[0], message, signature.0).main_failed()); - // Must fail if user tries to approve token in wrong contract - init_nft(&sys); - let second_nft = sys.get_program(2).unwrap(); - transaction_id += 1; - assert!(!add_minter(&second_nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&second_nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!( - delegated_approve(&second_nft, transaction_id, USERS[1], message, signature.0) - .main_failed() - ); - - // Must fail if user tries to approve token to zero_id - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: 0.into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, 0, message, signature.0).main_failed()); - - // Signature not corresponds to the message content - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - let wrong_message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 2.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - assert!( - delegated_approve(&nft, transaction_id, USERS[1], wrong_message, signature.0).main_failed() - ); - - // Approve expired - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - sys.spend_blocks(1); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); -} diff --git a/contracts/auto-changed-nft/tests/node_tests.rs b/contracts/auto-changed-nft/tests/node_tests.rs deleted file mode 100644 index 5c896d10e..000000000 --- a/contracts/auto-changed-nft/tests/node_tests.rs +++ /dev/null @@ -1,561 +0,0 @@ -use auto_changed_nft::WASM_BINARY_OPT; -use auto_changed_nft_io::*; -use gclient::{EventProcessor, GearApi, Result}; -use gear_lib_old::non_fungible_token::token::TokenId; -use gstd::{ActorId, Encode}; - -// #[tokio::test] -// #[ignore] -// async fn mint_test() -> Result<()> { -// let api = GearApi::dev_from_path(env!("GEAR_NODE_PATH")).await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_nft = InitNFT { -// name: String::from("MyToken"), -// symbol: String::from("MTK"), -// base_uri: String::from(""), -// } -// .encode(); -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) -// .await?; - -// let (message_id, program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_nft, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// let transaction_id: u64 = 0; -// use gear_lib::non_fungible_token::token::TokenMetadata; -// let token_metadata = TokenMetadata { -// name: "CryptoKitty".to_string(), -// description: "Description".to_string(), -// media: "http://".to_string(), -// reference: "http://".to_string(), -// }; - -// let mint_payload = NFTAction::Mint { -// transaction_id, -// token_metadata, -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, mint_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// Ok(()) -// } - -// #[tokio::test] -// #[ignore] -// async fn burn_test() -> Result<()> { -// let api = GearApi::dev_from_path(env!("GEAR_NODE_PATH")).await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_nft = InitNFT { -// name: String::from("MyToken"), -// symbol: String::from("MTK"), -// base_uri: String::from(""), -// } -// .encode(); -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) -// .await?; - -// let (message_id, program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_nft, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// let transaction_id: u64 = 0; -// use gear_lib::non_fungible_token::token::TokenMetadata; -// let token_metadata = TokenMetadata { -// name: "CryptoKitty".to_string(), -// description: "Description".to_string(), -// media: "http://".to_string(), -// reference: "http://".to_string(), -// }; - -// let mint_payload = NFTAction::Mint { -// transaction_id, -// token_metadata, -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, mint_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// let transaction_id = transaction_id + 1; - -// let burn_payload = NFTAction::Burn { -// transaction_id, -// token_id: 0.into(), -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, burn_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// // failures -// let burn_payload = NFTAction::Burn { -// transaction_id, -// token_id: 666.into(), -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, burn_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// Ok(()) -// } - -// #[tokio::test] -// #[ignore] -// async fn transfer_test() -> Result<()> { -// let api = GearApi::dev_from_path(env!("GEAR_NODE_PATH")).await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_nft = InitNFT { -// name: String::from("MyToken"), -// symbol: String::from("MTK"), -// base_uri: String::from(""), -// } -// .encode(); -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) -// .await?; - -// let (message_id, program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_nft, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// let transaction_id: u64 = 0; -// use gear_lib::non_fungible_token::token::TokenMetadata; -// let token_metadata = TokenMetadata { -// name: "CryptoKitty".to_string(), -// description: "Description".to_string(), -// media: "http://".to_string(), -// reference: "http://".to_string(), -// }; - -// let mint_payload = NFTAction::Mint { -// transaction_id, -// token_metadata, -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, mint_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// let transaction_id = transaction_id + 1; - -// let transfer_payload = NFTAction::Transfer { -// transaction_id, -// to: ActorId::from(4u64), -// token_id: 0.into(), -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, transfer_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, transfer_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// Ok(()) -// } - -// #[tokio::test] -// #[ignore] -// async fn owner_test() -> Result<()> { -// let api = GearApi::dev_from_path(env!("GEAR_NODE_PATH")).await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_nft = InitNFT { -// name: String::from("MyToken"), -// symbol: String::from("MTK"), -// base_uri: String::from(""), -// } -// .encode(); -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) -// .await?; - -// let (message_id, program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_nft, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// let transaction_id: u64 = 0; -// use gear_lib::non_fungible_token::token::TokenMetadata; -// let token_metadata = TokenMetadata { -// name: "CryptoKitty".to_string(), -// description: "Description".to_string(), -// media: "http://".to_string(), -// reference: "http://".to_string(), -// }; - -// let mint_payload = NFTAction::Mint { -// transaction_id, -// token_metadata, -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, mint_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// let owner_payload = NFTAction::Owner { token_id: 0.into() }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, owner_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, owner_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// Ok(()) -// } - -// #[tokio::test] -// #[ignore] -// async fn approved() -> Result<()> { -// let api = GearApi::dev_from_path(env!("GEAR_NODE_PATH")).await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_nft = InitNFT { -// name: String::from("MyToken"), -// symbol: String::from("MTK"), -// base_uri: String::from(""), -// } -// .encode(); -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) -// .await?; - -// let (message_id, program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_nft, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// let transaction_id: u64 = 0; -// use gear_lib::non_fungible_token::token::TokenMetadata; -// let token_metadata = TokenMetadata { -// name: "CryptoKitty".to_string(), -// description: "Description".to_string(), -// media: "http://".to_string(), -// reference: "http://".to_string(), -// }; - -// let mint_payload = NFTAction::Mint { -// transaction_id, -// token_metadata, -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, mint_payload, gas_info.min_limit, 0) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// assert!(listener.blocks_running().await?); - -// let transaction_id = transaction_id + 1; -// let approve_payload = NFTAction::Approve { -// transaction_id, -// to: ActorId::from(3), -// token_id: 0.into(), -// }; - -// let gas_info = api -// .calculate_handle_gas(None, program_id, approve_payload.encode(), 0, true) -// .await?; - -// let (message_id, _) = api -// .send_message(program_id, approve_payload, gas_info.min_limit, 0) -// .await?; - -// let processed = listener.message_processed(message_id).await?; -// assert!(processed.succeed()); - -// assert!(listener.blocks_running().await?); - -// Ok(()) -// } - -#[tokio::test] -async fn gclient_auto_changed() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Add auto-changed media - let token_id = TokenId::default(); - let links = ["link 1", "link 2", "link 3", "link 4"]; - for link in links.iter() { - let payload = NFTAction::AddMedia { - token_id, - media: link.to_string(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, payload.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(program_id, payload, gas_info.burned * 2, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - } - - let update_period = 5; - // Start auto changing - let payload = NFTAction::StartAutoChanging { - token_ids: vec![token_id], - updates_count: 8, - update_period, - }; - let (message_id, _) = api - .send_message(program_id, payload, 250_000_000_000, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Start update - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[3] - ); - - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[2] - ); - - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[1] - ); - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - dbg!(current_media(&api, program_id.into_bytes(), token_id).await), - dbg!(links[0]) - ); - - // Media rotation happens - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[3] - ); - - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[2] - ); - - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[1] - ); - - std::thread::sleep(std::time::Duration::from_secs(15)); - assert_eq!( - current_media(&api, program_id.into_bytes(), token_id).await, - links[0] - ); - - Ok(()) -} - -pub async fn current_media(api: &GearApi, program_id: [u8; 32], token_id: TokenId) -> String { - let state: State = api.read_state(program_id.into(), vec![]).await.unwrap(); - - state - .tokens - .into_iter() - .find_map(|(id, meta)| (token_id == id).then_some(meta)) - .unwrap() - .media_url -} diff --git a/contracts/auto-changed-nft/tests/utils.rs b/contracts/auto-changed-nft/tests/utils.rs deleted file mode 100644 index 84fe38c3e..000000000 --- a/contracts/auto-changed-nft/tests/utils.rs +++ /dev/null @@ -1,191 +0,0 @@ -#![allow(dead_code)] -use auto_changed_nft_io::*; -use gear_lib_old::non_fungible_token::token::*; -use gstd::ActorId; -use gtest::{Program, RunResult, System}; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, transaction_id: u64, member: u64) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn add_minter( - nft: &Program<'_>, - transaction_id: u64, - minter_id: ActorId, - member: u64, -) -> RunResult { - nft.send( - member, - NFTAction::AddMinter { - transaction_id, - minter_id, - }, - ) -} - -pub fn add_url(nft: &Program<'_>, token_id: TokenId, url: &str, member: u64) -> RunResult { - nft.send( - member, - NFTAction::AddMedia { - token_id, - media: url.to_string(), - }, - ) -} - -pub fn start_auto_changing( - nft: &Program<'_>, - token_ids: Vec, - updates_count: u32, - update_period: u32, - member: u64, -) -> RunResult { - nft.send( - member, - NFTAction::StartAutoChanging { - updates_count, - update_period, - token_ids, - }, - ) -} - -pub fn burn(nft: &Program<'_>, transaction_id: u64, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - NFTAction::Burn { - transaction_id, - token_id: token_id.into(), - }, - ) -} - -pub fn transfer( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Transfer { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn owner_of(nft: &Program<'_>, from: u64, token_id: u64) -> RunResult { - nft.send( - from, - NFTAction::Owner { - token_id: token_id.into(), - }, - ) -} - -pub fn is_approved_to(nft: &Program<'_>, from: u64, token_id: u64, to: u64) -> RunResult { - nft.send( - from, - NFTAction::IsApproved { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Approve { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn delegated_approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], -) -> RunResult { - let action = NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - }; - nft.send(from, action) -} - -pub fn mint_to_actor(nft: &Program<'_>, transaction_id: u64, member: [u8; 32]) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn current_media(nft: &Program<'_>, token_id: TokenId) -> String { - let state: State = nft.read_state(0).unwrap(); - - state - .tokens - .into_iter() - .find_map(|(id, meta)| (token_id == id).then_some(meta)) - .unwrap() - .media_url -} diff --git a/contracts/crowdsale/Cargo.toml b/contracts/crowdsale/Cargo.toml deleted file mode 100644 index 1696baaa8..000000000 --- a/contracts/crowdsale/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "crowdsale" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -sharded-fungible-token-io.workspace = true -gmeta.workspace = true -crowdsale-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true - -# External binaries - -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -crowdsale-io.workspace = true diff --git a/contracts/crowdsale/README.md b/contracts/crowdsale/README.md deleted file mode 100644 index d97543251..000000000 --- a/contracts/crowdsale/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=crowdsale/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/crowdsale_io) - -# [Crowdsale (ICO)](https://wiki.gear-tech.io/docs/examples/DeFi/crowdsale) - -### 🏗️ Building - -```sh -cargo b -r -p "crowdsale*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "crowdsale*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "crowdsale*" -``` diff --git a/contracts/crowdsale/build.rs b/contracts/crowdsale/build.rs deleted file mode 100644 index 9bbab0304..000000000 --- a/contracts/crowdsale/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use crowdsale_io::CrowdsaleMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/crowdsale/io/Cargo.toml b/contracts/crowdsale/io/Cargo.toml deleted file mode 100644 index 43b84a14c..000000000 --- a/contracts/crowdsale/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "crowdsale-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta.workspace = true diff --git a/contracts/crowdsale/io/src/lib.rs b/contracts/crowdsale/io/src/lib.rs deleted file mode 100644 index 5e412283d..000000000 --- a/contracts/crowdsale/io/src/lib.rs +++ /dev/null @@ -1,168 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{exec, prelude::*, ActorId}; - -pub struct CrowdsaleMetadata; - -impl Metadata for CrowdsaleMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Default, Encode, Decode, TypeInfo, Clone, Copy)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IcoState { - pub ico_started: bool, // true if ICO was started - pub start_time: u64, // time when ICO was started, otherwise is zero - pub duration: u64, // duration of the ICO, otherwise is zero - pub ico_ended: bool, // true if ICO was ended -} - -#[derive(Debug, Decode, Encode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IcoAction { - /// Starts ICO contract. - /// - /// # Requirements: - /// * Only owner can start ICO. - /// * At least `tokens_goal` tokens need to be minted. - /// * ICO can be started only once. - /// * All arguments must be greater than zero. - /// - /// On success replies with [`IcoEvent::SaleStarted`]. - StartSale { - /// ICO duration. - duration: u64, - - /// Start price. - start_price: u128, - - /// Tokens goal. - tokens_goal: u128, - - /// Price increase step. - price_increase_step: u128, - - /// Time increase step. - time_increase_step: u128, - }, - - /// Purchase of tokens. - /// - /// # Requirements: - /// * `tokens_cnt` must be greater than zero. - /// * ICO must be in progress (already started and not finished yet). - /// * [`msg::value()`](gstd::msg::value) must be greater than or equal to `price * tokens_cnt`. - /// * At least `tokens_cnt` tokens available for sale. - /// - /// On success replies with [`IcoEvent::Bought`]. - Buy( - /// Amount of tokens to purchase. - u128, - ), - - /// Ends ICO contract. - /// - /// # Requirements: - /// * Only owner can end ICO. - /// * ICO can be ended more only once. - /// * All tokens must be sold or the ICO duration must end. - /// - /// On success replies with [`IcoEvent::SaleEnded`]. - EndSale, -} - -#[derive(Debug, Decode, Encode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IcoEvent { - SaleStarted { - transaction_id: u64, - duration: u64, - start_price: u128, - tokens_goal: u128, - price_increase_step: u128, - time_increase_step: u128, - }, - Bought { - buyer: ActorId, - amount: u128, - change: u128, - }, - SaleEnded(u64), - TransactionFailed(u64), -} - -#[derive(Debug, Decode, Encode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IcoInit { - pub token_address: ActorId, - pub owner: ActorId, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StateIco { - CurrentPrice, - TokensLeft, - BalanceOf(ActorId), -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StateIcoReply { - CurrentPrice(u128), - TokensLeft(u128), - BalanceOf { address: ActorId, balance: u128 }, -} - -#[derive(Debug, Default, Encode, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub ico_state: IcoState, - pub start_price: u128, - pub price_increase_step: u128, - pub time_increase_step: u128, - pub tokens_sold: u128, - pub tokens_goal: u128, - pub owner: ActorId, - pub token_address: ActorId, - pub token_holders: Vec<(ActorId, u128)>, - pub transaction_id: u64, - pub transactions: Vec<(ActorId, u64)>, -} - -impl State { - pub fn get_current_price(&self) -> u128 { - let time_now: u64 = exec::block_timestamp(); - let amount: u128 = (time_now - self.ico_state.start_time).into(); - - self.start_price + self.price_increase_step * (amount / self.time_increase_step) - } - - pub fn get_balance(&self) -> u128 { - self.tokens_goal - self.tokens_sold - } - - pub fn balance_of(&self, address: &ActorId) -> u128 { - match self - .token_holders - .iter() - .find(|(id, _balance)| id.eq(address)) - { - Some((_id, balance)) => *balance, - None => 0, - } - } -} diff --git a/contracts/crowdsale/src/asserts.rs b/contracts/crowdsale/src/asserts.rs deleted file mode 100644 index ba80652ba..000000000 --- a/contracts/crowdsale/src/asserts.rs +++ /dev/null @@ -1,15 +0,0 @@ -use gstd::{msg, ActorId}; - -const ZERO_ID: ActorId = ActorId::new([0u8; 32]); - -pub fn owner_message(owner: &ActorId, message: &str) { - if msg::source() != *owner { - panic!("{}: Not owner message", message) - } -} - -pub fn not_zero_address(address: &ActorId, message: &str) { - if address == &ZERO_ID { - panic!("{}: Zero address", message) - } -} diff --git a/contracts/crowdsale/src/lib.rs b/contracts/crowdsale/src/lib.rs deleted file mode 100644 index 48bb242ed..000000000 --- a/contracts/crowdsale/src/lib.rs +++ /dev/null @@ -1,383 +0,0 @@ -#![no_std] - -use crowdsale_io::*; -use gstd::{collections::HashMap, exec, msg, prelude::*, ActorId}; -use messages::transfer_tokens; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -pub mod asserts; -pub mod messages; - -#[derive(Default)] -struct IcoContract { - ico_state: IcoState, - start_price: u128, - price_increase_step: u128, - time_increase_step: u128, - tokens_sold: u128, - tokens_goal: u128, - owner: ActorId, - token_address: ActorId, - token_holders: HashMap, - transaction_id: u64, - transactions: HashMap, -} - -static mut ICO_CONTRACT: Option = None; - -impl IcoContract { - /// Starts ICO contract - /// - /// Requirements: - /// * Only owner can start ICO - /// * At least `tokens_goal` tokens need to be minted - /// * ICO can be started only once - /// * All arguments must be greater than zero - /// - /// Arguments: - /// * `config`: Consists of `duration`, `start_price`, `tokens_goal`, `price_increase_step` and time_increase_step - /// - async fn start_ico(&mut self, config: IcoAction) { - let source = msg::source(); - - let current_transaction_id = *self.transactions.entry(source).or_insert_with(|| { - let id = self.transaction_id; - - self.transaction_id = self.transaction_id.wrapping_add(1); - - id - }); - - check_input(&config); - asserts::owner_message(&self.owner, "start_ico(): Not owner starts ICO"); - assert!(!self.ico_state.ico_started, "start_ico(): Second ICO start"); - - if let IcoAction::StartSale { - duration, - start_price, - tokens_goal, - price_increase_step, - time_increase_step, - } = config - { - self.start_price = start_price; - self.tokens_goal = tokens_goal; - self.price_increase_step = price_increase_step; - self.time_increase_step = time_increase_step; - - if transfer_tokens( - current_transaction_id, - &self.token_address, - &self.owner, - &exec::program_id(), - self.tokens_goal, - ) - .await - .is_err() - { - self.transactions.remove(&source); - msg::reply(IcoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Unable to reply!"); - return; - } - - self.ico_state.ico_started = true; - self.ico_state.duration = duration; - self.ico_state.start_time = exec::block_timestamp(); - - self.transactions.remove(&source); - - msg::reply( - IcoEvent::SaleStarted { - transaction_id: current_transaction_id, - duration, - start_price, - tokens_goal, - price_increase_step, - time_increase_step, - }, - 0, - ) - .expect("Error in reply"); - } - } - - /// Purchase of tokens - /// - /// Requirements: - /// * `tokens_cnt` must be greater than zero - /// * ICO must be in progress (already started and not finished yet) - /// * `msg::value` must be greater than or equal to `price * tokens_cnt` - /// * At least `tokens_cnt` tokens available for sale - /// - /// Arguments: - /// * `tokens_cnt`: amount of tokens to purchase - /// - pub fn buy_tokens(&mut self, tokens_cnt: u128) { - let time_now: u64 = exec::block_timestamp(); - - assert!(tokens_cnt != 0, "buy_tokens(): Can't buy zero tokens"); - assert!( - self.ico_state.start_time + self.ico_state.duration >= time_now, - "buy_tokens(): Duration of the ICO has ended" - ); - assert!( - self.get_balance() != 0, - "buy_tokens(): All tokens have been sold" - ); - self.check_ico_executing("buy_tokens()"); - - assert!( - tokens_cnt <= self.get_balance(), - "buy_tokens(): Not enough tokens to sell" - ); - - let current_price = self.get_current_price(time_now); - let cost = tokens_cnt.checked_mul(current_price).unwrap_or_else(|| { - panic!( - "buy_tokens(): Overflowing multiplication: {} * {}", - tokens_cnt, current_price - ) - }); - - let mut change = 0; - let amount_sent = msg::value(); - - assert!( - amount_sent >= cost, - "buy_tokens(): Wrong amount sent, expect {cost} get {amount_sent}" - ); - - if amount_sent > cost { - change = amount_sent - cost; - msg::send(msg::source(), "", change).expect("Sending error"); - } - - self.token_holders - .entry(msg::source()) - .and_modify(|balance| *balance += tokens_cnt) - .or_insert(tokens_cnt); - - self.tokens_sold += tokens_cnt; - - msg::reply( - IcoEvent::Bought { - buyer: msg::source(), - amount: tokens_cnt, - change, - }, - 0, - ) - .expect("Error in reply"); - } - - /// Ends ICO contract - /// - /// Requirements: - /// * Only owner can end ICO - /// * ICO can be ended more only once - /// * All tokens must be sold or the ICO duration must end - /// - async fn end_sale(&mut self) { - let source = msg::source(); - - let current_transaction_id = *self.transactions.entry(source).or_insert_with(|| { - let id = self.transaction_id; - - self.transaction_id = self.transaction_id.wrapping_add(1); - - id - }); - - let time_now: u64 = exec::block_timestamp(); - - asserts::owner_message(&self.owner, "end_sale()"); - self.check_ico_executing("end_sale()"); - - if self.ico_state.start_time + self.ico_state.duration >= time_now - && self.get_balance() != 0 - { - panic!( - "Can't end ICO: tokens left = {}, duration ended = {}", - self.get_balance(), - self.ico_state.start_time + self.ico_state.duration < time_now, - ) - } - - for (id, val) in &self.token_holders { - let token_holder_transaction_id = *self.transactions.entry(*id).or_insert_with(|| { - let id = self.transaction_id; - - self.transaction_id = self.transaction_id.wrapping_add(1); - - id - }); - - if transfer_tokens( - token_holder_transaction_id, - &self.token_address, - &exec::program_id(), - id, - *val, - ) - .await - .is_err() - { - msg::reply(IcoEvent::TransactionFailed(token_holder_transaction_id), 0) - .expect("Unable to reply!"); - return; - } - } - - let rest_balance = self.get_balance(); - if rest_balance > 0 { - if transfer_tokens( - current_transaction_id, - &self.token_address, - &exec::program_id(), - &self.owner, - rest_balance, - ) - .await - .is_err() - { - msg::reply(IcoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Unable to reply!"); - return; - } - - self.token_holders - .entry(self.owner) - .and_modify(|balance| *balance += rest_balance) - .or_insert(rest_balance); - } - - self.ico_state.ico_ended = true; - - self.transactions.remove(&source); - - msg::reply(IcoEvent::SaleEnded(current_transaction_id), 0).expect("Error in reply"); - } - - fn get_current_price(&self, time_now: u64) -> u128 { - let amount: u128 = (time_now - self.ico_state.start_time).into(); - - self.start_price + self.price_increase_step * (amount / self.time_increase_step) - } - - fn get_balance(&self) -> u128 { - self.tokens_goal - self.tokens_sold - } - - fn check_ico_executing(&self, message: &str) { - assert!(self.ico_state.ico_started, "{message}: ICO wasn't started",); - assert!(!self.ico_state.ico_ended, "{message}: ICO was ended"); - } -} - -#[gstd::async_main] -async fn main() { - let action: IcoAction = msg::load().expect("Unable to decode SaleAction"); - let ico: &mut IcoContract = unsafe { ICO_CONTRACT.get_or_insert(Default::default()) }; - - match action { - IcoAction::StartSale { .. } => ico.start_ico(action).await, - IcoAction::Buy(value) => ico.buy_tokens(value), - IcoAction::EndSale => ico.end_sale().await, - } -} - -fn check_input(config: &IcoAction) { - if let IcoAction::StartSale { - duration, - start_price, - tokens_goal, - price_increase_step, - time_increase_step, - } = config - { - assert_ne!(*duration, 0, "start_ico(): Init duration is zero"); - assert_ne!(*start_price, 0, "start_ico(): Init start price is zero"); - assert_ne!(*tokens_goal, 0, "start_ico(): Init tokens goal is zero"); - assert_ne!( - *price_increase_step, 0, - "start_ico(): Init price increase step is zero" - ); - assert_ne!( - *time_increase_step, 0, - "start_ico(): Init time increase step is zero" - ); - } else { - panic!("start_ico(): Wrong init type") - } -} - -#[no_mangle] -extern fn init() { - let config: IcoInit = msg::load().expect("Unable to decode ICOInit"); - - asserts::not_zero_address(&config.token_address, "Init token address"); - asserts::not_zero_address(&config.owner, "Init owner address"); - - let ico = IcoContract { - token_address: config.token_address, - owner: config.owner, - ..Default::default() - }; - - unsafe { ICO_CONTRACT = Some(ico) }; -} - -#[no_mangle] -extern fn state() { - let staking = unsafe { - ICO_CONTRACT - .take() - .expect("Unexpected error in taking state") - }; - msg::reply::(staking.into(), 0) - .expect("Failed to encode or reply with `State` from `state()`"); -} - -impl From for State { - fn from(value: IcoContract) -> Self { - let IcoContract { - ico_state, - start_price, - price_increase_step, - time_increase_step, - tokens_sold, - tokens_goal, - owner, - token_address, - transaction_id, - .. - } = value; - - let token_holders = value - .token_holders - .iter() - .map(|(id, val)| (*id, *val)) - .collect(); - let transactions = value - .transactions - .iter() - .map(|(id, val)| (*id, *val)) - .collect(); - - Self { - ico_state, - start_price, - price_increase_step, - time_increase_step, - tokens_sold, - tokens_goal, - owner, - token_address, - token_holders, - transaction_id, - transactions, - } - } -} diff --git a/contracts/crowdsale/src/messages.rs b/contracts/crowdsale/src/messages.rs deleted file mode 100644 index 716b4c8d7..000000000 --- a/contracts/crowdsale/src/messages.rs +++ /dev/null @@ -1,37 +0,0 @@ -use gstd::{msg, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -/// Transfers `amount` tokens from `sender` account to `recipient` account. -/// Arguments: -/// * `transaction_id`: associated transaction id -/// * `from`: sender account -/// * `to`: recipient account -/// * `amount`: amount of tokens -pub async fn transfer_tokens( - transaction_id: u64, - token_address: &ActorId, - from: &ActorId, - to: &ActorId, - amount_tokens: u128, -) -> Result<(), ()> { - let reply = msg::send_for_reply_as::( - *token_address, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender: *from, - recipient: *to, - amount: amount_tokens, - }, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTokenAction::Message`") - .await; - - match reply { - Ok(FTokenEvent::Ok) => Ok(()), - _ => Err(()), - } -} diff --git a/contracts/crowdsale/state/Cargo.toml b/contracts/crowdsale/state/Cargo.toml deleted file mode 100644 index f573f29ce..000000000 --- a/contracts/crowdsale/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "crowdsale-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -crowdsale-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/crowdsale/state/build.rs b/contracts/crowdsale/state/build.rs deleted file mode 100644 index 7485036bc..000000000 --- a/contracts/crowdsale/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm() -} diff --git a/contracts/crowdsale/state/src/lib.rs b/contracts/crowdsale/state/src/lib.rs deleted file mode 100644 index 55e9a8255..000000000 --- a/contracts/crowdsale/state/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = crowdsale_io::State; - - pub fn current_price(state: State) -> u128 { - state.get_current_price() - } - - pub fn tokens_left(state: State) -> u128 { - state.get_balance() - } - - pub fn balance_of(state: State, address: ActorId) -> u128 { - state.balance_of(&address) - } -} diff --git a/contracts/crowdsale/tests/balance_tests.rs b/contracts/crowdsale/tests/balance_tests.rs deleted file mode 100644 index 5b4d34a7f..000000000 --- a/contracts/crowdsale/tests/balance_tests.rs +++ /dev/null @@ -1,64 +0,0 @@ -mod init_ico; - -use crowdsale_io::*; -use gtest::System; -pub use init_ico::*; - -// TODO: fix test -#[test] -#[ignore] -fn balance_after_two_purchases() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, (TIME_INCREASE_STEP + 1) as _, 0); - - balance_of(&ico, 0); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - balance_of(&ico, amount); - - sys.spend_blocks((TIME_INCREASE_STEP + 1) as _); - - buy_tokens( - &sys, - &ico, - amount, - amount * (START_PRICE + PRICE_INCREASE_STEP), - ); - - balance_of(&ico, amount * 2); -} - -// TODO: fix test -#[test] -#[ignore] -fn owner_balance() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - let amount = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - sys.spend_blocks(1001); - - let res: State = ico.read_state(0).unwrap(); - assert_eq!(0, res.balance_of(&OWNER_ID.into()), "Error in balance_of()"); - - end_sale(&ico, 1); - - let res: State = ico.read_state(0).unwrap(); - assert_eq!( - TOKENS_CNT - amount, - res.balance_of(&OWNER_ID.into()), - "Error in balance_of()" - ); -} diff --git a/contracts/crowdsale/tests/buy_tokens_tests.rs b/contracts/crowdsale/tests/buy_tokens_tests.rs deleted file mode 100644 index 81d954a5e..000000000 --- a/contracts/crowdsale/tests/buy_tokens_tests.rs +++ /dev/null @@ -1,245 +0,0 @@ -mod init_ico; - -use crowdsale_io::*; -use gstd::Encode; -use gtest::System; -pub use init_ico::*; - -// TODO: fix test -#[test] -#[ignore] -fn common_buy_tokens() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -// TODO: fix test -#[test] -#[ignore] -fn buy_tokens_with_change() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = 5; - let change = 10_000_000_000_000; - let res = ico.send_with_value( - USER_ID, - IcoAction::Buy(amount), - amount * START_PRICE + change, - ); - assert!(res.contains(&( - USER_ID, - (IcoEvent::Bought { - buyer: USER_ID.into(), - amount, - change - }) - .encode() - ))); -} - -// TODO: fix test -#[test] -#[ignore] -fn buy_tokens_after_price_update() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - sys.spend_blocks(TIME_INCREASE_STEP as _); - - let amount: u128 = 5; - buy_tokens( - &sys, - &ico, - amount, - amount * (START_PRICE + PRICE_INCREASE_STEP), - ); - - sys.spend_blocks((TIME_INCREASE_STEP - 1) as _); - - buy_tokens( - &sys, - &ico, - amount, - amount * (START_PRICE + PRICE_INCREASE_STEP), - ); - - sys.spend_blocks(1); - - buy_tokens( - &sys, - &ico, - amount, - amount * (START_PRICE + PRICE_INCREASE_STEP * 2), - ); -} - -#[test] -#[should_panic] -fn buy_when_no_time_left() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - sys.spend_blocks(3000); // 3 sec - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn wrong_value_sent() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE - 1); -} - -#[test] -#[should_panic] -fn wrong_value_after_price_update() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - sys.spend_blocks( - (TIME_INCREASE_STEP + 1) - .try_into() - .expect("Can't cast type"), - ); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn all_tokens_bought() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = TOKENS_CNT; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - buy_tokens(&sys, &ico, 1, START_PRICE); -} - -#[test] -#[should_panic] -fn buy_before_start() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn buy_after_end_sale() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - sys.spend_blocks(1001); - - end_sale(&ico, 1); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn buy_more_than_goal_tokens() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = TOKENS_CNT + 1; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn buy_too_many_tokens() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - let amount: u128 = TOKENS_CNT - 4; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn buy_zero_tokens() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = 0; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); -} - -#[test] -#[should_panic] -fn overflowing_multiplication_buy() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); - - let amount: u128 = u128::MAX / START_PRICE + 1; - buy_tokens(&sys, &ico, amount, 544); -} diff --git a/contracts/crowdsale/tests/end_sale_tests.rs b/contracts/crowdsale/tests/end_sale_tests.rs deleted file mode 100644 index 3dc1d80cd..000000000 --- a/contracts/crowdsale/tests/end_sale_tests.rs +++ /dev/null @@ -1,100 +0,0 @@ -mod init_ico; - -use crowdsale_io::*; -use gtest::System; -pub use init_ico::*; - -use gstd::Encode; - -// TODO: fix test -#[test] -#[ignore] -fn end_sale_no_time_left() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - sys.spend_blocks(1001); - - end_sale(&ico, 1); -} - -// TODO: fix test -#[test] -#[ignore] -fn end_sale_zero_tokens() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - let amount: u128 = TOKENS_CNT; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - end_sale(&ico, 1); -} - -#[test] -#[should_panic] -fn end_sale_time_and_tokens_left() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - let amount: u128 = TOKENS_CNT - 5; - buy_tokens(&sys, &ico, amount, amount * START_PRICE); - - end_sale(&ico, 1); -} - -#[test] -#[should_panic] -fn not_owner_end_sale() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - sys.spend_blocks(1001); - - let res = ico.send(USER_ID, IcoAction::EndSale); - assert!(!res.main_failed()); - assert!(res.contains(&(USER_ID, IcoEvent::SaleEnded(1).encode()))); -} - -#[test] -#[should_panic] -fn end_sale_before_start() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - end_sale(&ico, 0); -} - -#[test] -#[should_panic] -fn end_sale_twice() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - - sys.spend_blocks(1001); - - end_sale(&ico, 1); - end_sale(&ico, 2); -} diff --git a/contracts/crowdsale/tests/init_ico/mod.rs b/contracts/crowdsale/tests/init_ico/mod.rs deleted file mode 100644 index 1ab498fc2..000000000 --- a/contracts/crowdsale/tests/init_ico/mod.rs +++ /dev/null @@ -1,100 +0,0 @@ -mod token; - -use core::time::Duration; -use crowdsale_io::*; -use gstd::{prelude::*, ActorId}; -use gtest::{Program, System}; -pub use token::*; - -pub const TOKEN_ADDRESS: u64 = 1; -pub const ICO_CONTRACT_ID: u64 = 2; -pub const OWNER_ID: u64 = 100001; -pub const USER_ID: u64 = 12345; - -pub const ZERO_ID: ActorId = ActorId::zero(); - -pub const TOKENS_CNT: u128 = 100_000_000_000_000; -pub const START_PRICE: u128 = 10_000_000_000_000; -pub const PRICE_INCREASE_STEP: u128 = 100_000_000_000_000; -pub const TIME_INCREASE_STEP: u128 = 1000; -pub const TIME_BLOCK: u64 = 3000; - -fn init_ico(sys: &System) { - let ico = Program::current_with_id(sys, ICO_CONTRACT_ID); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - assert!(!res.main_failed()); -} - -pub fn init(sys: &System) { - sys.init_logger(); - let ft = Program::ftoken(OWNER_ID, TOKEN_ADDRESS, sys); - ft.mint(0, OWNER_ID, OWNER_ID, TOKENS_CNT, false); - ft.approve(1, OWNER_ID, ICO_CONTRACT_ID, TOKENS_CNT, false); - init_ico(sys); - sys.mint_to(USER_ID, 100_000_000_000_000); -} - -pub fn start_sale(ico: &Program<'_>, ico_duration: u64, expected_tx_id: u64) { - let duration = Duration::from_secs(ico_duration).as_millis() as u64 * TIME_BLOCK; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP * TIME_BLOCK as u128, - }, - ); - - assert!(!res.main_failed()); - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: expected_tx_id, - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP * TIME_BLOCK as u128, - } - .encode() - ))); -} - -pub fn end_sale(ico: &Program<'_>, expected_tx_id: u64) { - let res = ico.send(OWNER_ID, IcoAction::EndSale); - assert!(!res.main_failed()); - assert!(res.contains(&(OWNER_ID, IcoEvent::SaleEnded(expected_tx_id).encode()))); -} - -pub fn buy_tokens(sys: &System, ico: &Program<'_>, amount: u128, price: u128) { - sys.mint_to(USER_ID, price); - let res = ico.send_with_value(USER_ID, IcoAction::Buy(amount), price); - assert!(!res.main_failed()); - assert!(res.contains(&( - USER_ID, - (IcoEvent::Bought { - buyer: USER_ID.into(), - amount, - change: 0 - }) - .encode() - ))); -} - -pub fn balance_of(ico: &Program<'_>, amount: u128) { - let state: State = ico.read_state(0).unwrap(); - assert_eq!( - amount, - state.balance_of(&USER_ID.into()), - "Error in balance_of()" - ); -} diff --git a/contracts/crowdsale/tests/init_ico/token.rs b/contracts/crowdsale/tests/init_ico/token.rs deleted file mode 100644 index 18c076441..000000000 --- a/contracts/crowdsale/tests/init_ico/token.rs +++ /dev/null @@ -1,155 +0,0 @@ -use gstd::prelude::*; -use gtest::{Program, ProgramBuilder, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub trait FToken { - fn ftoken(owner: u64, id: u64, system: &System) -> Program<'_>; - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn check_balance(&self, account: u64, expected_amount: u128); - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: u64, - recipient: u64, - amount: u128, - error: bool, - ); - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ); - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool); -} - -impl FToken for Program<'_> { - fn ftoken(owner: u64, id: u64, system: &System) -> Program<'_> { - let ftoken = ProgramBuilder::from_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ) - .with_id(id) - .build(system); - let storage_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let ft_logic_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - let res = ftoken.send( - owner, - InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - }, - ); - assert!(!res.main_failed()); - ftoken - } - - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Mint { - recipient: account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Burn { - sender: account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: u64, - recipient: u64, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Transfer { - sender: sender.into(), - recipient: recipient.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn check_balance(&self, account: u64, expected_amount: u128) { - let res = self.send(100, FTokenAction::GetBalance(account.into())); - let reply = FTokenEvent::Balance(expected_amount).encode(); - assert!(res.contains(&(100, reply))); - } - - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool) { - let res = self.send(from, payload); - let reply = if error { - FTokenEvent::Err.encode() - } else { - FTokenEvent::Ok.encode() - }; - - assert!(res.contains(&(from, reply))); - } -} diff --git a/contracts/crowdsale/tests/init_tests.rs b/contracts/crowdsale/tests/init_tests.rs deleted file mode 100644 index f1d7c2b84..000000000 --- a/contracts/crowdsale/tests/init_tests.rs +++ /dev/null @@ -1,254 +0,0 @@ -mod init_ico; - -use core::time::Duration; -use crowdsale_io::*; -use gstd::Encode; -use gtest::{Program, System}; -pub use init_ico::*; - -// TODO: fix test -#[test] -#[ignore] -fn test_init() { - let sys = System::new(); - init(&sys); -} - -#[test] -#[should_panic] -fn zero_owner_id_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: ZERO_ID, - }, - ); - - assert!(res.log().is_empty()); -} - -#[test] -#[should_panic] -fn zero_token_address_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: ZERO_ID, - owner: OWNER_ID.into(), - }, - ); - - assert!(res.log().is_empty()); - - let duration = Duration::from_secs(2).as_millis() as u64; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - }, - ); - - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - } - .encode() - ))); -} - -#[test] -#[should_panic] -fn zero_tokens_goal_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - - assert!(res.log().is_empty()); - - let duration = Duration::from_secs(1).as_millis() as u64; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: 0, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - }, - ); - - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: START_PRICE, - tokens_goal: 0, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - } - .encode() - ))); -} - -#[test] -#[should_panic] -fn zero_start_price_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - - assert!(res.log().is_empty()); - - let duration = Duration::from_secs(1).as_millis() as u64; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: 0, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - }, - ); - - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: 0, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - } - .encode() - ))); -} - -#[test] -#[should_panic] -fn zero_price_increase_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - - assert!(res.log().is_empty()); - - let duration = Duration::from_secs(1).as_millis() as u64; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: 0, - time_increase_step: TIME_INCREASE_STEP, - }, - ); - - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: 0, - time_increase_step: TIME_INCREASE_STEP, - } - .encode() - ))); -} - -#[test] -#[should_panic] -fn zero_time_increase_init() { - let sys = System::new(); - sys.init_logger(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - - assert!(res.log().is_empty()); - - let duration = Duration::from_secs(1).as_millis() as u64; - let res = ico.send( - OWNER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: 0, - }, - ); - - assert!(res.contains(&( - OWNER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: 0, - } - .encode() - ))); -} diff --git a/contracts/crowdsale/tests/node_tests.rs b/contracts/crowdsale/tests/node_tests.rs deleted file mode 100644 index 73abd1905..000000000 --- a/contracts/crowdsale/tests/node_tests.rs +++ /dev/null @@ -1,125 +0,0 @@ -use crowdsale::WASM_BINARY_OPT; -use crowdsale_io::*; -use gclient::{EventProcessor, GearApi, Result}; -use gstd::{ActorId, Encode}; - -pub const TOKEN_ADDRESS: u64 = 1; -pub const ICO_CONTRACT_ID: u64 = 2; -pub const OWNER_ID: u64 = 100001; -pub const USER_ID: u64 = 12345; - -pub const ZERO_ID: ActorId = ActorId::zero(); - -pub const TOKENS_CNT: u128 = 100; -pub const START_PRICE: u128 = 1000; -pub const PRICE_INCREASE_STEP: u128 = 100; -pub const TIME_INCREASE_STEP: u128 = 1000; - -// const USERS: &[u64] = &[1, 2, 3, 4, 5, 6, 7, 8]; - -#[tokio::test] -async fn gclient_init() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - WASM_BINARY_OPT.to_vec(), - init_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - Ok(()) -} - -// #[tokio::test] -// #[ignore] -// async fn stake_failed() -> Result<()> { -// let api = GearApi::dev().await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_staking = InitStaking { -// staking_token_address: USERS[1].into(), -// reward_token_address: USERS[2].into(), -// distribution_time: 10000, -// reward_total: 1000, -// }; - -// let init_staking_payload = init_staking.encode(); - -// let gas_info = api -// .calculate_upload_gas( -// None, -// WASM_BINARY_OPT.to_vec(), -// init_staking_payload.clone(), -// 0, -// true, -// ) -// .await?; - -// let (message_id, _program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_in_micros().to_le_bytes(), -// init_staking_payload, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// // Skip Init Staking Token -// // Skip Init Reward Token - -// let stake = StakingAction::Stake(1000); -// let stake_payload = stake.encode(); - -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.into(), stake_payload.clone(), 0, true) -// .await?; - -// let (message_id, _program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_in_micros().to_le_bytes(), -// stake_payload, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.failed()); - -// Ok(()) -// } diff --git a/contracts/crowdsale/tests/start_ico_tests.rs b/contracts/crowdsale/tests/start_ico_tests.rs deleted file mode 100644 index 1b4a1c44d..000000000 --- a/contracts/crowdsale/tests/start_ico_tests.rs +++ /dev/null @@ -1,96 +0,0 @@ -mod init_ico; - -use core::time::Duration; -use crowdsale_io::*; -use gstd::Encode; -use gtest::{Program, System}; -pub use init_ico::*; - -// TODO: fix test -#[test] -#[ignore] -fn start_ico() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 2, 0); -} - -#[test] -#[should_panic] -fn not_owner_start_ico() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - let duration = Duration::from_secs(20).as_millis() as u64; - let res = ico.send( - USER_ID, - IcoAction::StartSale { - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - }, - ); - - assert!(!res.main_failed()); - assert!(res.contains(&( - USER_ID, - IcoEvent::SaleStarted { - transaction_id: 0, - duration, - start_price: START_PRICE, - tokens_goal: TOKENS_CNT, - price_increase_step: PRICE_INCREASE_STEP, - time_increase_step: TIME_INCREASE_STEP, - } - .encode() - ))); -} - -#[test] -#[should_panic] -fn second_start_ico() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 1, 0); - start_sale(&ico, 1, 1); -} - -#[test] -#[should_panic] -fn zero_duration_start_ico() { - let sys = System::new(); - init(&sys); - - let ico = sys.get_program(2).unwrap(); - - start_sale(&ico, 0, 0); -} - -#[test] -#[should_panic] -fn not_minting_tokens() { - let sys = System::new(); - - let ico = Program::current_opt(&sys); - - let res = ico.send( - OWNER_ID, - IcoInit { - token_address: TOKEN_ADDRESS.into(), - owner: OWNER_ID.into(), - }, - ); - assert!(res.log().is_empty()); - - start_sale(&ico, 1, 0); -} diff --git a/contracts/dao-light/Cargo.toml b/contracts/dao-light/Cargo.toml deleted file mode 100644 index 7722d974e..000000000 --- a/contracts/dao-light/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "dao-light" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -dao-light-io.workspace = true -fungible-token-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -# External binaries - -fungible-token.workspace = true - -[build-dependencies] -dao-light-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/dao-light/README.md b/contracts/dao-light/README.md deleted file mode 100644 index a4dd2f89a..000000000 --- a/contracts/dao-light/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=dao-light/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/dao_light_io) - -# [Light DAO](https://wiki.gear-tech.io/docs/examples/Governance/DAO) - -### 🏗️ Building - -```sh -cargo b -r -p "dao-light*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "dao-light*" -``` diff --git a/contracts/dao-light/build.rs b/contracts/dao-light/build.rs deleted file mode 100644 index 4f78d0bfd..000000000 --- a/contracts/dao-light/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dao_light_io::DaoLightMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dao-light/io/Cargo.toml b/contracts/dao-light/io/Cargo.toml deleted file mode 100644 index b082dcb92..000000000 --- a/contracts/dao-light/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "dao-light-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/dao-light/io/src/lib.rs b/contracts/dao-light/io/src/lib.rs deleted file mode 100644 index 0b8149e46..000000000 --- a/contracts/dao-light/io/src/lib.rs +++ /dev/null @@ -1,146 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId, Decode, Encode, TypeInfo}; - -pub struct DaoLightMetadata; - -impl Metadata for DaoLightMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct DaoState { - pub approved_token_program_id: ActorId, - pub period_duration: u64, - pub voting_period_length: u64, - pub grace_period_length: u64, - pub total_shares: u128, - pub members: Vec<(ActorId, Member)>, - pub proposal_id: u128, - pub locked_funds: u128, - pub proposals: Vec<(u128, Proposal)>, -} - -impl DaoState { - pub fn is_member(&self, account: &ActorId) -> bool { - self.members - .iter() - .any(|(id, member)| id == account && member.shares != 0) - } -} - -#[derive(Debug, Default, Clone, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Proposal { - pub proposer: ActorId, - pub applicant: ActorId, - pub yes_votes: u128, - pub no_votes: u128, - pub quorum: u128, - pub amount: u128, - pub processed: bool, - pub did_pass: bool, - pub details: String, - pub starting_period: u64, - pub ended_at: u64, - pub votes_by_member: Vec<(ActorId, Vote)>, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Member { - pub shares: u128, - pub highest_index_yes_vote: Option, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Role { - Admin, - Member, - None, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum DaoAction { - Deposit { - amount: u128, - }, - SubmitFundingProposal { - applicant: ActorId, - amount: u128, - quorum: u128, - details: String, - }, - ProcessProposal { - proposal_id: u128, - }, - SubmitVote { - proposal_id: u128, - vote: Vote, - }, - RageQuit { - amount: u128, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum DaoEvent { - Deposit { - member: ActorId, - share: u128, - }, - SubmitFundingProposal { - proposer: ActorId, - applicant: ActorId, - proposal_id: u128, - amount: u128, - }, - SubmitVote { - account: ActorId, - proposal_id: u128, - vote: Vote, - }, - ProcessProposal { - applicant: ActorId, - proposal_id: u128, - did_pass: bool, - }, - RageQuit { - member: ActorId, - amount: u128, - }, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitDao { - pub approved_token_program_id: ActorId, - pub voting_period_length: u64, - pub period_duration: u64, - pub grace_period_length: u64, -} - -#[derive(Debug, Encode, Decode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Vote { - Yes, - No, -} diff --git a/contracts/dao-light/src/ft_messages.rs b/contracts/dao-light/src/ft_messages.rs deleted file mode 100644 index 77426c1f5..000000000 --- a/contracts/dao-light/src/ft_messages.rs +++ /dev/null @@ -1,57 +0,0 @@ -use fungible_token_io::{FTAction, FTEvent}; -use gstd::{msg, ActorId}; - -#[allow(unused)] -pub async fn transfer_from_tokens(token_id: &ActorId, from: &ActorId, to: &ActorId, amount: u128) { - let _transfer_response: FTEvent = msg::send_for_reply_as( - *token_id, - FTAction::Transfer { - from: *from, - to: *to, - amount, - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Error in transfer"); -} - -pub async fn transfer_tokens(token_id: &ActorId, from: &ActorId, to: &ActorId, amount: u128) { - let _transfer_response: FTEvent = msg::send_for_reply_as( - *token_id, - FTAction::Transfer { - from: *from, - to: *to, - amount, - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Error in transfer"); -} - -#[allow(unused)] -pub async fn approve_tokens(token_id: &ActorId, to: &ActorId, amount: u128) { - let _approve_response: FTEvent = - msg::send_for_reply_as(*token_id, FTAction::Approve { to: *to, amount }, 0, 0) - .unwrap() - .await - .expect("Error in approve tokens"); -} - -pub async fn balance(token_id: &ActorId, account: &ActorId) -> u128 { - let balance_response = msg::send_for_reply_as(*token_id, FTAction::BalanceOf(*account), 0, 0) - .unwrap() - .await - .expect("Error in balance"); - - if let FTEvent::Balance(balance_response) = balance_response { - balance_response - } else { - 0 - } -} diff --git a/contracts/dao-light/src/lib.rs b/contracts/dao-light/src/lib.rs deleted file mode 100644 index 127a87c6a..000000000 --- a/contracts/dao-light/src/lib.rs +++ /dev/null @@ -1,389 +0,0 @@ -#![no_std] - -use dao_light_io::*; -use ft_messages::*; -use gstd::{collections::HashMap, exec, msg, prelude::*, ActorId, String}; - -mod ft_messages; - -#[derive(Debug, Default)] -struct Dao { - approved_token_program_id: ActorId, - period_duration: u64, - voting_period_length: u64, - grace_period_length: u64, - total_shares: u128, - members: HashMap, - proposal_id: u128, - locked_funds: u128, - proposals: HashMap, -} - -impl From for DaoState { - fn from(value: Dao) -> Self { - let Dao { - approved_token_program_id, - period_duration, - voting_period_length, - grace_period_length, - total_shares, - members, - proposal_id, - locked_funds, - proposals, - } = value; - - let members = members.into_iter().collect(); - let proposals = proposals.into_iter().collect(); - - Self { - approved_token_program_id, - period_duration, - voting_period_length, - grace_period_length, - total_shares, - members, - proposal_id, - locked_funds, - proposals, - } - } -} - -static mut DAO: Option = None; - -impl Dao { - /// Deposits tokens to DAO - /// Arguments: - /// * `amount`: the number of fungible tokens that user wants to deposit to DAO - async fn deposit(&mut self, amount: u128) { - let share = self.calculate_share(amount).await; - transfer_tokens( - &self.approved_token_program_id, - &msg::source(), - &exec::program_id(), - amount, - ) - .await; - self.members - .entry(msg::source()) - .and_modify(|member| member.shares += share) - .or_insert(Member { - shares: share, - highest_index_yes_vote: None, - }); - - self.total_shares = self.total_shares.saturating_add(share); - msg::reply( - DaoEvent::Deposit { - member: msg::source(), - share, - }, - 0, - ) - .unwrap(); - } - - /// The proposal of funding - /// Requirements: - /// * The proposal can be submitted only by the existing members or their delegate addresses - /// * The applicant ID can't be the zero - /// * The DAO must have enough funds to finance the proposal - /// Arguments: - /// * `applicant`: an actor that will be funded - /// * `amount`: the number of fungible tokens that will be sent to the applicant - /// * `quorum`: a certain threshold of YES votes in order for the proposal to pass - /// * `details`: the proposal description - async fn submit_funding_proposal( - &mut self, - applicant: &ActorId, - amount: u128, - quorum: u128, - details: String, - ) { - self.check_for_membership(); - - if applicant.is_zero() { - panic!("Proposal for the zero address"); - } - - // check that DAO has sufficient funds - let balance = balance(&self.approved_token_program_id, &exec::program_id()).await; - if balance.saturating_sub(self.locked_funds) < amount { - panic!("Not enough funds in DAO"); - } - - let mut starting_period = exec::block_timestamp(); - // compute startingPeriod for proposal - // there should be a minimum time interval between proposals (period_duration) so that members have time to ragequit - if self.proposal_id > 0 { - let previous_starting_period = self.proposals[&(self.proposal_id - 1)].starting_period; - if starting_period < previous_starting_period + self.period_duration { - starting_period = previous_starting_period + self.period_duration; - } - } - - let proposal = Proposal { - proposer: msg::source(), - applicant: *applicant, - quorum, - amount, - details, - starting_period, - ended_at: starting_period + self.voting_period_length, - ..Default::default() - }; - - self.proposals.insert(self.proposal_id, proposal); - - msg::reply( - DaoEvent::SubmitFundingProposal { - proposer: msg::source(), - applicant: *applicant, - proposal_id: self.proposal_id, - amount, - }, - 0, - ) - .unwrap(); - self.proposal_id = self.proposal_id.saturating_add(1); - self.locked_funds = self.locked_funds.saturating_add(amount); - } - - /// The member submit his vote (YES or NO) on the proposal - /// Requirements: - /// * The proposal can be submitted only by the existing members or their delegate addresses - /// * The member can vote on the proposal only once - /// * Proposal must exist, the voting period must has started and not expired - /// Arguments: - /// * `proposal_id`: the proposal ID - /// * `vote`: the member a member vote (YES or NO) - fn submit_vote(&mut self, proposal_id: u128, vote: Vote) { - self.check_for_membership(); - - // checks that proposal exists, the voting period has started, not expired and that member did not vote on the proposal - let proposal = match self.proposals.get_mut(&proposal_id) { - Some(proposal) => { - if exec::block_timestamp() > proposal.starting_period + self.voting_period_length { - panic!("proposal voting period has expired"); - } - if exec::block_timestamp() < proposal.starting_period { - panic!("voting period has not started"); - } - if proposal - .votes_by_member - .iter() - .any(|(actor, _vote)| msg::source().eq(actor)) - { - panic!("account has already voted on that proposal"); - } - proposal - } - None => { - panic!("proposal does not exist"); - } - }; - - let member = self.members.get_mut(&msg::source()).unwrap(); - - match vote { - Vote::Yes => { - proposal.yes_votes = proposal.yes_votes.saturating_add(member.shares); - // it is necessary to save the highest id of the proposal - must be processed for member to ragequit - let id = member.highest_index_yes_vote.get_or_insert(proposal_id); - *id = proposal_id.max(*id); - } - Vote::No => { - proposal.no_votes = proposal.no_votes.saturating_add(member.shares); - } - } - proposal.votes_by_member.push((msg::source(), vote.clone())); - - msg::reply( - DaoEvent::SubmitVote { - account: msg::source(), - proposal_id, - vote, - }, - 0, - ) - .unwrap(); - } - - /// The proposal processing after the proposal completes during the grace period. - /// If the proposal is accepted, the indicated amount of tokens are sent to the applicant. - /// Requirements: - /// * The previous proposal must be processed - /// * The proposal must exist and be ready for processing - /// * The proposal must not be already be processed - /// Arguments: - /// * `proposal_id`: the proposal ID - async fn process_proposal(&mut self, proposal_id: u128) { - if proposal_id > 0 && !self.proposals.get(&(&proposal_id - 1)).unwrap().processed { - panic!("Previous proposal must be processed"); - } - let proposal = match self.proposals.get_mut(&proposal_id) { - Some(proposal) => { - if proposal.processed { - panic!("Proposal has already been processed"); - } - if exec::block_timestamp() - < proposal.starting_period - + self.voting_period_length - + self.grace_period_length - { - panic!("Proposal is not ready to be processed"); - } - proposal - } - None => { - panic!("proposal does not exist"); - } - }; - - proposal.processed = true; - proposal.did_pass = proposal.yes_votes > proposal.no_votes - && proposal.yes_votes * 10_000 / self.total_shares >= proposal.quorum * 100; - - // if funding propoposal has passed - if proposal.did_pass { - transfer_tokens( - &self.approved_token_program_id, - &exec::program_id(), - &proposal.applicant, - proposal.amount, - ) - .await; - } - self.locked_funds = self.locked_funds.saturating_sub(proposal.amount); - let balance = balance(&self.approved_token_program_id, &exec::program_id()).await; - if balance == 0 { - self.total_shares = 0; - self.members = HashMap::new(); - } - msg::reply( - DaoEvent::ProcessProposal { - applicant: proposal.applicant, - proposal_id, - did_pass: proposal.did_pass, - }, - 0, - ) - .unwrap(); - } - - /// Withdraws the capital of the member - /// Requirements: - /// * `msg::source()` must be DAO member - /// * The member must have sufficient amount of shares - /// * The latest proposal the member voted YES must be processed - /// Arguments: - /// * `amount`: The amount of shares the member would like to withdraw - async fn ragequit(&mut self, amount: u128) { - if !self.members.contains_key(&msg::source()) { - panic!("account is not a DAO member"); - } - let member = self.members.get_mut(&msg::source()).unwrap(); - if amount > member.shares { - panic!("unsufficient shares"); - } - if let Some(proposal_id) = member.highest_index_yes_vote { - if let Some(proposal) = self.proposals.get(&proposal_id) { - if !proposal.processed { - panic!("cant ragequit until highest index proposal member voted YES on is processed"); - } - } - } - member.shares = member.shares.saturating_sub(amount); - let funds = self.redeemable_funds(amount).await; - transfer_tokens( - &self.approved_token_program_id, - &exec::program_id(), - &msg::source(), - funds, - ) - .await; - self.total_shares = self.total_shares.saturating_sub(amount); - msg::reply( - DaoEvent::RageQuit { - member: msg::source(), - amount: funds, - }, - 0, - ) - .unwrap(); - } - - // calculates the funds that the member can redeem based on his shares - async fn redeemable_funds(&self, share: u128) -> u128 { - let balance = balance(&self.approved_token_program_id, &exec::program_id()).await; - (share * balance) / self.total_shares - } - - // calculates a share a user can receive for his deposited tokens - async fn calculate_share(&self, tokens: u128) -> u128 { - let balance = balance(&self.approved_token_program_id, &exec::program_id()).await; - if balance == 0 { - return tokens; - } - (self.total_shares * tokens) / balance - } - - // checks that account is DAO member - fn is_member(&self, account: &ActorId) -> bool { - matches!(self.members.get(account), Some(member) if member.shares > 0) - } - - // check that `msg::source()` is either a DAO member or a delegate key - fn check_for_membership(&self) { - if !self.is_member(&msg::source()) { - panic!("account is not a DAO member") - } - } -} - -#[no_mangle] -extern fn init() { - let config: InitDao = msg::load().expect("Unable to decode InitDao"); - let dao = Dao { - approved_token_program_id: config.approved_token_program_id, - voting_period_length: config.voting_period_length, - period_duration: config.period_duration, - ..Dao::default() - }; - unsafe { DAO = Some(dao) }; -} - -#[gstd::async_main] -async fn main() { - let action: DaoAction = msg::load().expect("Could not load Action"); - let dao: &mut Dao = unsafe { DAO.get_or_insert(Dao::default()) }; - match action { - DaoAction::Deposit { amount } => dao.deposit(amount).await, - DaoAction::SubmitFundingProposal { - applicant, - amount, - quorum, - details, - } => { - dao.submit_funding_proposal(&applicant, amount, quorum, details) - .await; - } - DaoAction::ProcessProposal { proposal_id } => { - dao.process_proposal(proposal_id).await; - } - DaoAction::SubmitVote { proposal_id, vote } => { - dao.submit_vote(proposal_id, vote); - } - DaoAction::RageQuit { amount } => { - dao.ragequit(amount).await; - } - } -} - -#[no_mangle] -extern fn state() { - let dao = unsafe { DAO.take().expect("Unexpected error in taking state") }; - msg::reply::(dao.into(), 0) - .expect("Failed to encode or reply with `DaoState` from `state()`"); -} diff --git a/contracts/dao-light/state/Cargo.toml b/contracts/dao-light/state/Cargo.toml deleted file mode 100644 index c54000515..000000000 --- a/contracts/dao-light/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "dao-light-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dao-light-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dao-light/state/build.rs b/contracts/dao-light/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dao-light/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dao-light/state/src/lib.rs b/contracts/dao-light/state/src/lib.rs deleted file mode 100644 index 9c092ece1..000000000 --- a/contracts/dao-light/state/src/lib.rs +++ /dev/null @@ -1,62 +0,0 @@ -#![no_std] - -use dao_light_io::*; -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = DaoState; - - pub fn user_status(state: State, account: ActorId) -> Role { - if state.is_member(&account) { - Role::Member - } else { - Role::None - } - } - - pub fn all_proposals(state: State) -> Vec { - state - .proposals - .iter() - .map(|(_, proposal)| proposal.clone()) - .collect() - } - - pub fn is_member(state: State, account: ActorId) -> bool { - state.is_member(&account) - } - - pub fn proposal_id(state: State) -> u128 { - state.proposal_id - } - - pub fn proposal_info(state: State, proposal_id: u128) -> Proposal { - let (_, proposal) = state - .proposals - .iter() - .find(|(id, _)| proposal_id == *id) - .expect("Invalid proposal id"); - proposal.clone() - } - - pub fn member_info(state: State, account: ActorId) -> Member { - let (_, member) = state - .members - .iter() - .find(|(id, _)| account == *id) - .expect("Invalid account"); - - member.clone() - } - - pub fn member_power(state: State, account: ActorId) -> u128 { - let (_, member) = state - .members - .iter() - .find(|(id, _)| account == *id) - .expect("Invalid account"); - - member.shares - } -} diff --git a/contracts/dao-light/tests/dao_simple_test.rs b/contracts/dao-light/tests/dao_simple_test.rs deleted file mode 100644 index 2a653c176..000000000 --- a/contracts/dao-light/tests/dao_simple_test.rs +++ /dev/null @@ -1,324 +0,0 @@ -mod utils; - -use dao_light_io::*; -use gstd::Encode; -use gtest::System; -use utils::*; - -#[test] -fn deposit_tokens() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - let dao = sys.get_program(2).unwrap(); - assert!(!approve(&sys.get_program(1).unwrap(), MEMBERS[0], 2, 1000).main_failed()); - let res = deposit(&dao, MEMBERS[0], 1000); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::Deposit { - member: MEMBERS[0].into(), - share: 1000, - } - .encode() - ))); -} - -#[test] -fn create_proposal() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - let res = proposal(&dao, MEMBERS[0], MEMBERS[2], 800); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::SubmitFundingProposal { - proposer: MEMBERS[0].into(), - applicant: MEMBERS[2].into(), - proposal_id: 0, - amount: 800, - } - .encode() - ))); - - let res = proposal(&dao, MEMBERS[0], MEMBERS[2], 100); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::SubmitFundingProposal { - proposer: MEMBERS[0].into(), - applicant: MEMBERS[2].into(), - proposal_id: 1, - amount: 100, - } - .encode() - ))); -} - -#[test] -fn create_proposal_failures() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - // must fail since dao has not enough tokens for funding - assert!(proposal(&dao, MEMBERS[0], MEMBERS[2], 1100).main_failed()); - // creates proposal for funding and locks tokens - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - // must fail since tokens of dao are locked because of previous proposal - assert!(proposal(&dao, MEMBERS[0], MEMBERS[2], 300).main_failed()); - // must fail since proposal is made for the zero address - assert!(proposal(&dao, MEMBERS[0], ZERO_ID, 100).main_failed()); - // must fail since `msg::source()` is not a dao member - assert!(proposal(&dao, MEMBERS[1], MEMBERS[0], 100).main_failed()); -} - -#[test] -fn vote_on_proposal() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[1], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[1], 1000).main_failed()); - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - // vote YES - let res = vote(&dao, MEMBERS[0], 0, Vote::Yes); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::SubmitVote { - account: MEMBERS[0].into(), - proposal_id: 0, - vote: Vote::Yes, - } - .encode() - ))); - // vote NO - let res = vote(&dao, MEMBERS[1], 0, Vote::No); - assert!(res.contains(&( - MEMBERS[1], - DaoEvent::SubmitVote { - account: MEMBERS[1].into(), - proposal_id: 0, - vote: Vote::No, - } - .encode() - ))); -} - -#[test] -fn vote_on_proposal_failures() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[1], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[1], 1000).main_failed()); - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - // must fail since the proposal does not exist - assert!(vote(&dao, MEMBERS[1], 1, Vote::No).main_failed()); - // must fail since `msg::source()` is not a dao member - assert!(vote(&dao, MEMBERS[2], 0, Vote::No).main_failed()); - - //submit one more funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - // must fail since the voting period has not started - assert!(vote(&dao, MEMBERS[1], 1, Vote::No).main_failed()); - - // vote on the proposal - assert!(!vote(&dao, MEMBERS[1], 0, Vote::No).main_failed()); - - // must fail since account has already voted on that proposal - assert!(vote(&dao, MEMBERS[1], 0, Vote::Yes).main_failed()); - - sys.spend_blocks(1000001); - - // must fail since proposal voting period has expired - assert!(vote(&dao, MEMBERS[0], 0, Vote::Yes).main_failed()); -} - -#[test] -fn process_proposal() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[1], 2, 2000).main_failed()); - assert!(!approve(&ft, MEMBERS[2], 2, 3000).main_failed()); - assert!(!approve(&ft, MEMBERS[3], 2, 4000).main_failed()); - - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[1], 2000).main_failed()); - assert!(!deposit(&dao, MEMBERS[2], 3000).main_failed()); - assert!(!deposit(&dao, MEMBERS[3], 4000).main_failed()); - - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - // votes YES - assert!(!vote(&dao, MEMBERS[0], 0, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[2], 0, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[3], 0, Vote::Yes).main_failed()); - // votes NO - assert!(!vote(&dao, MEMBERS[1], 0, Vote::No).main_failed()); - - sys.spend_blocks(1000001); - - let res = process(&dao, MEMBERS[0], 0); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::ProcessProposal { - applicant: MEMBERS[2].into(), - proposal_id: 0, - did_pass: true, - } - .encode() - ))); - - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - - // votes NO - assert!(!vote(&dao, MEMBERS[0], 1, Vote::No).main_failed()); - assert!(!vote(&dao, MEMBERS[2], 1, Vote::No).main_failed()); - // votes YES - assert!(!vote(&dao, MEMBERS[3], 1, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[1], 1, Vote::Yes).main_failed()); - - sys.spend_blocks(1000001); - - let res = process(&dao, MEMBERS[0], 1); - assert!(res.contains(&( - MEMBERS[0], - DaoEvent::ProcessProposal { - applicant: MEMBERS[2].into(), - proposal_id: 1, - did_pass: false, - } - .encode() - ))); -} - -#[test] -fn process_proposal_failures() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - //must fail since proposal is not ready to be processed - assert!(process(&dao, MEMBERS[0], 0).main_failed()); - //must fail since previous proposal must be processed - assert!(process(&dao, MEMBERS[0], 1).main_failed()); - - sys.spend_blocks(1000001); - - assert!(!process(&dao, MEMBERS[0], 0).main_failed()); - //must fail since proposal does not exist - assert!(process(&dao, MEMBERS[0], 1).main_failed()); - //must fail since proposal has already been processed - assert!(process(&dao, MEMBERS[0], 0).main_failed()); -} - -#[test] -fn ragequit_dao() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - - assert!(!approve(&ft, MEMBERS[1], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[1], 1000).main_failed()); - - let res = ragequit(&dao, MEMBERS[1], 800); - assert!(res.contains(&( - MEMBERS[1], - DaoEvent::RageQuit { - member: MEMBERS[1].into(), - amount: 800, - } - .encode() - ))); - - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[1], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[2], 2, 1000).main_failed()); - assert!(!approve(&ft, MEMBERS[3], 2, 1000).main_failed()); - - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[1], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[2], 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[3], 1000).main_failed()); - - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[1], MEMBERS[2], 800).main_failed()); - - // votes YES - assert!(!vote(&dao, MEMBERS[0], 0, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[1], 0, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[2], 0, Vote::Yes).main_failed()); - assert!(!vote(&dao, MEMBERS[3], 0, Vote::Yes).main_failed()); - - sys.spend_blocks(1000001); - - assert!(!process(&dao, MEMBERS[0], 0).main_failed()); - - let res = ragequit(&dao, MEMBERS[1], 800); - assert!(res.contains(&( - MEMBERS[1], - DaoEvent::RageQuit { - member: MEMBERS[1].into(), - amount: 647, - } - .encode() - ))); -} - -#[test] -fn ragequit_failures() { - let sys = System::new(); - init_fungible_token(&sys); - init_dao(&sys); - - let ft = sys.get_program(1).unwrap(); - let dao = sys.get_program(2).unwrap(); - - assert!(!approve(&ft, MEMBERS[0], 2, 1000).main_failed()); - assert!(!deposit(&dao, MEMBERS[0], 1000).main_failed()); - // must fail since the account is not a DAO member - assert!(ragequit(&dao, MEMBERS[1], 800).main_failed()); - // must fail since the account has no sufficient shares - assert!(ragequit(&dao, MEMBERS[0], 1100).main_failed()); - //submit funding proposal - assert!(!proposal(&dao, MEMBERS[0], MEMBERS[2], 800).main_failed()); - assert!(!vote(&dao, MEMBERS[0], 0, Vote::Yes).main_failed()); - // must fail since cant ragequit until highest index proposal member voted YES on is processed - assert!(ragequit(&dao, MEMBERS[0], 100).main_failed()); -} diff --git a/contracts/dao-light/tests/utils.rs b/contracts/dao-light/tests/utils.rs deleted file mode 100644 index cff572f16..000000000 --- a/contracts/dao-light/tests/utils.rs +++ /dev/null @@ -1,82 +0,0 @@ -use dao_light_io::*; -use fungible_token_io::{FTAction, InitConfig}; -use gtest::{Program, RunResult, System}; - -pub const MEMBERS: &[u64] = &[3, 4, 5, 6]; -pub const ZERO_ID: u64 = 0; - -pub fn init_fungible_token(sys: &System) { - sys.init_logger(); - let ft = Program::from_file( - sys, - "../target/wasm32-unknown-unknown/release/fungible_token.opt.wasm", - ); - - let res = ft.send( - MEMBERS[0], - InitConfig { - name: String::from("MyToken"), - symbol: String::from("MTK"), - decimals: 18, - }, - ); - - assert!(!res.main_failed()); - MEMBERS.iter().for_each(|member| { - let res = ft.send(*member, FTAction::Mint(10000000)); - assert!(!res.main_failed()); - }); -} - -pub fn init_dao(sys: &System) { - sys.init_logger(); - let dao = Program::current_opt(sys); - let res = dao.send( - MEMBERS[0], - InitDao { - approved_token_program_id: 1.into(), - period_duration: 100000, - grace_period_length: 100000, - voting_period_length: 1000000, - }, - ); - assert!(!res.main_failed()); -} - -pub fn deposit(dao: &Program<'_>, member: u64, amount: u128) -> RunResult { - dao.send(member, DaoAction::Deposit { amount }) -} - -pub fn approve(ft: &Program<'_>, member: u64, to: u64, amount: u128) -> RunResult { - ft.send( - member, - FTAction::Approve { - to: to.into(), - amount, - }, - ) -} - -pub fn proposal(dao: &Program<'_>, member: u64, applicant: u64, amount: u128) -> RunResult { - dao.send( - member, - DaoAction::SubmitFundingProposal { - applicant: applicant.into(), - amount, - quorum: 80, - details: "Funding proposal".to_string(), - }, - ) -} - -pub fn vote(dao: &Program<'_>, member: u64, proposal_id: u128, vote: Vote) -> RunResult { - dao.send(member, DaoAction::SubmitVote { proposal_id, vote }) -} - -pub fn process(dao: &Program<'_>, member: u64, proposal_id: u128) -> RunResult { - dao.send(member, DaoAction::ProcessProposal { proposal_id }) -} - -pub fn ragequit(dao: &Program<'_>, member: u64, amount: u128) -> RunResult { - dao.send(member, DaoAction::RageQuit { amount }) -} diff --git a/contracts/dao/Cargo.toml b/contracts/dao/Cargo.toml deleted file mode 100644 index c39a7077e..000000000 --- a/contracts/dao/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "dao" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -sharded-fungible-token-io.workspace = true -gstd.workspace = true -dao-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true -blake2-rfc.workspace = true - -# External binaries - -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -dao-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/dao/README.md b/contracts/dao/README.md deleted file mode 100644 index de9823e33..000000000 --- a/contracts/dao/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=dao/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/dao_io) - -# DAO - -### 🏗️ Building - -```sh -cargo b -p dao -p "dao-[!l]*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -p dao -p "dao-[!l]*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -p dao -p "dao-[!l]*" -``` diff --git a/contracts/dao/build.rs b/contracts/dao/build.rs deleted file mode 100644 index 317e4fdaf..000000000 --- a/contracts/dao/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dao_io::DaoMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dao/io/Cargo.toml b/contracts/dao/io/Cargo.toml deleted file mode 100644 index 72d45b63f..000000000 --- a/contracts/dao/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "dao-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/dao/io/src/lib.rs b/contracts/dao/io/src/lib.rs deleted file mode 100644 index 675dda022..000000000 --- a/contracts/dao/io/src/lib.rs +++ /dev/null @@ -1,327 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub struct DaoMetadata; - -impl Metadata for DaoMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Default, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct DaoState { - pub admin: ActorId, - pub approved_token_program_id: ActorId, - pub period_duration: u64, - pub voting_period_length: u64, - pub grace_period_length: u64, - pub dilution_bound: u8, - pub abort_window: u64, - pub total_shares: u128, - pub balance: u128, - pub members: Vec<(ActorId, Member)>, - pub member_by_delegate_key: Vec<(ActorId, ActorId)>, - pub proposal_id: u128, - pub proposals: Vec<(u128, Proposal)>, - pub whitelist: Vec, - pub transaction_id: u64, - pub transactions: Vec<(u64, Option)>, -} - -impl DaoState { - pub fn is_member(state: DaoState, account: &ActorId) -> bool { - state - .members - .iter() - .any(|(member_account, member)| member_account == account && member.shares != 0) - } - - pub fn is_in_whitelist(state: DaoState, account: &ActorId) -> bool { - state.whitelist.contains(account) - } - - pub fn get_proposal_id(state: DaoState) -> u128 { - state.proposal_id - } - - pub fn get_proposal_info(state: DaoState, id: u128) -> Option { - if let Some((_, proposal)) = state - .proposals - .iter() - .find(|(proposal_id, _)| proposal_id == &id) - { - Some(proposal.clone()) - } else { - None - } - } - - pub fn get_member_info(state: DaoState, account: &ActorId) -> Option { - if let Some((_, member)) = state - .members - .iter() - .find(|(member_account, _)| member_account == account) - { - Some(member.clone()) - } else { - None - } - } -} - -#[derive(Debug, Default, Clone, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Proposal { - pub proposer: ActorId, - pub applicant: ActorId, - pub shares_requested: u128, - pub yes_votes: u128, - pub no_votes: u128, - pub quorum: u128, - pub is_membership_proposal: bool, - pub amount: u128, - pub processed: bool, - pub passed: bool, - pub aborted: bool, - pub token_tribute: u128, - pub details: String, - pub starting_period: u64, - pub max_total_shares_at_yes_vote: u128, - pub votes_by_member: Vec<(ActorId, Vote)>, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo, Default)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Member { - pub delegate_key: ActorId, - pub shares: u128, - pub highest_index_yes_vote: u128, -} - -#[derive(Debug, Decode, Encode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum DaoAction { - /// Adds members to whitelist. - /// - /// Requirements: - /// * Only admin can add actors to whitelist; - /// * Member ID cant be zero; - /// * Member can not be added to whitelist more than once; - /// - /// On success replies with [`DaoEvent::MemberAddedToWhitelist`] - AddToWhiteList( - /// valid actor ID - ActorId, - ), - - /// The proposal of joining the DAO. - /// - /// Requirements: - /// * The proposal can be submitted only by the existing members or their delegate addresses; - /// * The applicant account must be either a DAO member or is in the whitelist. - /// - /// On success replies with [`DaoEvent::SubmitMembershipProposal`] - SubmitMembershipProposal { - /// an actor who wishes to become a DAO member - applicant: ActorId, - /// the number of tokens the applicant offered for shares in DAO - token_tribute: u128, - /// the amount of shares the applicant is requesting for his token tribute - shares_requested: u128, - /// a certain threshold of YES votes in order for the proposal to pass - quorum: u128, - /// the proposal description - details: String, - }, - - /// The proposal of funding. - /// - /// Requirements: - /// * The proposal can be submitted only by the existing members or their delegate addresses; - /// * The receiver ID can't be the zero; - /// * The DAO must have enough funds to finance the proposal; - /// - /// On success replies with [`DaoEvent::SubmitFundingProposal`] - SubmitFundingProposal { - /// an actor that will be funded - applicant: ActorId, - /// the number of fungible tokens that will be sent to the receiver - amount: u128, - /// a certain threshold of YES votes in order for the proposal to pass - quorum: u128, - /// the proposal description - details: String, - }, - - /// The proposal processing after the proposal completes during the grace period. - /// If the membership proposal is accepted, the tribute tokens are deposited into the contract - /// and new shares are minted and issued to the applicant. - /// If the membership proposal is rejected, the tribute tokens are returned to the applicant. - /// If the funding proposal is accepted, the indicated amount of tokens is transfered to the applicant; - /// If the funging proposal is rejected, the indicated amount of tokens remains in the contract. - /// - /// Requirements: - /// * The previous proposal must be processed; - /// * The proposal must exist and be ready for processing; - /// * The proposal must not be aborted or already be processed. - /// - /// On success replies with [`DaoEvent::ProcessProposal`] - ProcessProposal( - /// the proposal ID - u128, - ), - - /// The member (or the delegate address of the member) submits his vote (YES or NO) on the proposal. - /// - /// Requirements: - /// * The proposal can be submitted only by the existing members or their delegate addresses; - /// * The member can vote on the proposal only once; - /// * Proposal must exist, the voting period must has started and not expired; - /// * Proposal must not be aborted. - /// - /// On success replies with [`DaoEvent::SubmitVote`] - SubmitVote { - /// the proposal ID - proposal_id: u128, - /// the member a member vote (YES or NO) - vote: Vote, - }, - - /// Withdraws the capital of the member. - /// - /// Requirements: - /// * `msg::source()` must be DAO member; - /// * The member must have sufficient amount; - /// * The latest proposal the member voted YES must be processed; - /// * Admin can ragequit only after transferring his role to another actor. - /// - /// On success replies with [`DaoEvent::RageQuit`] - RageQuit( - /// The amount of shares the member would like to withdraw (the shares are converted to fungible tokens) - u128, - ), - - /// Aborts the membership proposal. - /// It can be used in case when applicant is disagree with the requested shares - /// or the details the proposer indicated by the proposer. - /// - /// Requirements: - /// * `msg::source()` must be the applicant; - /// * The proposal must be membership proposal; - /// * The proposal can be aborted during only the abort window - /// * The proposal has not be already aborted. - /// - /// On success replies with [`DaoEvent::Abort`] - Abort( - /// the proposal ID - u128, - ), - - /// Sets the delegate key that is responsible for submitting proposals and voting; - /// The deleagate key defaults to member address unless updated. - /// - /// Requirements: - /// * `msg::source()` must be DAO member; - /// * The delegate key must not be zero address; - /// * A delegate key can be assigned only to one member. - /// - /// On success replies with [`DaoEvent::DelegateKeyUpdated`] - UpdateDelegateKey( - /// New delegate account - ActorId, - ), - - /// Assigns the admin position to new actor. - /// - /// Requirements: - /// * Only admin can assign new admin. - /// - /// On success replies with [`DaoEvent::AdminUpdated`] - SetAdmin( - /// New admin account - ActorId, - ), - - /// Continues the transaction if it fails due to lack of gas - /// or due to an error in the token contract. - /// - /// Requirements: - /// * Transaction must exist. - /// - /// On success replies with the payload of continued transaction. - Continue( - /// the transaction ID - u64, - ), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum DaoEvent { - MemberAddedToWhitelist(ActorId), - SubmitMembershipProposal { - proposer: ActorId, - applicant: ActorId, - proposal_id: u128, - token_tribute: u128, - }, - SubmitFundingProposal { - proposer: ActorId, - applicant: ActorId, - proposal_id: u128, - amount: u128, - }, - SubmitVote { - account: ActorId, - proposal_id: u128, - vote: Vote, - }, - ProcessProposal { - proposal_id: u128, - passed: bool, - }, - RageQuit { - member: ActorId, - amount: u128, - }, - Abort(u128), - AdminUpdated(ActorId), - DelegateKeyUpdated { - member: ActorId, - delegate: ActorId, - }, - TransactionFailed(u64), -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitDao { - pub admin: ActorId, - pub approved_token_program_id: ActorId, - pub period_duration: u64, - pub voting_period_length: u64, - pub grace_period_length: u64, - pub dilution_bound: u8, - pub abort_window: u64, -} - -#[derive(Debug, Encode, Decode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Vote { - Yes, - No, -} diff --git a/contracts/dao/src/ft_messages.rs b/contracts/dao/src/ft_messages.rs deleted file mode 100644 index b2c7f5914..000000000 --- a/contracts/dao/src/ft_messages.rs +++ /dev/null @@ -1,31 +0,0 @@ -use gstd::{msg, prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -pub async fn transfer_tokens( - transaction_id: u64, - token_id: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, -) -> Result<(), ()> { - let reply = msg::send_for_reply_as::<_, FTokenEvent>( - *token_id, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender: *sender, - recipient: *recipient, - amount, - }, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTokenAction::Message`") - .await; - - match reply { - Ok(FTokenEvent::Ok) => Ok(()), - _ => Err(()), - } -} diff --git a/contracts/dao/src/lib.rs b/contracts/dao/src/lib.rs deleted file mode 100644 index b8014d0f5..000000000 --- a/contracts/dao/src/lib.rs +++ /dev/null @@ -1,627 +0,0 @@ -#![no_std] - -use dao_io::*; -use ft_messages::*; -use gstd::{collections::HashMap, exec, msg, prelude::*, ActorId}; - -pub mod ft_messages; -pub mod utils; - -pub const BASE_PERCENT: u8 = 100; - -static mut DAO: Option = None; - -#[derive(Debug, Default)] -pub struct Dao { - pub admin: ActorId, - pub approved_token_program_id: ActorId, - pub period_duration: u64, - pub voting_period_length: u64, - pub grace_period_length: u64, - pub dilution_bound: u8, - pub abort_window: u64, - pub total_shares: u128, - pub balance: u128, - pub members: HashMap, - pub member_by_delegate_key: HashMap, - pub proposal_id: u128, - pub proposals: HashMap, - pub whitelist: Vec, - pub transaction_id: u64, - pub transactions: HashMap>, -} - -impl Dao { - pub fn add_to_whitelist(&mut self, member: &ActorId) { - self.assert_admin(); - Self::assert_not_zero_address(member); - - if self.whitelist.contains(member) { - panic!("Member has already been added to the whitelist"); - } - self.whitelist.push(*member); - msg::reply(DaoEvent::MemberAddedToWhitelist(*member), 0) - .expect("Error in a reply `DaoEvent::MemberAddedToWhitelist`"); - } - - pub async fn submit_membership_proposal( - &mut self, - transaction_id: Option, - applicant: &ActorId, - token_tribute: u128, - shares_requested: u128, - quorum: u128, - details: String, - ) { - let current_transaction_id = self.get_transaction_id(transaction_id); - self.check_for_membership(); - // check that applicant is either in whitelist or a DAO member - if !self.whitelist.contains(applicant) && !self.members.contains_key(applicant) { - panic!("Applicant must be either in whitelist or be a DAO member"); - } - - // transfer applicant tokens to DAO contract - if transfer_tokens( - current_transaction_id, - &self.approved_token_program_id, - applicant, - &exec::program_id(), - token_tribute, - ) - .await - .is_err() - { - self.transactions.remove(¤t_transaction_id); - msg::reply(DaoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Error in a reply `DaoEvent::TransactionFailed`"); - return; - }; - - let mut starting_period = exec::block_timestamp(); - let proposal_id = self.proposal_id; - // compute startingPeriod for proposal - // there should be a minimum time interval between proposals (period_duration) so that members have time to ragequit - if proposal_id > 0 { - let previous_starting_period = self - .proposals - .get(&(&proposal_id - 1)) - .expect("Error getting proposal") - .starting_period; - if starting_period < previous_starting_period + self.period_duration { - starting_period = previous_starting_period + self.period_duration; - } - } - let proposal = Proposal { - proposer: msg::source(), - applicant: *applicant, - shares_requested, - quorum: quorum * BASE_PERCENT as u128, - is_membership_proposal: true, - token_tribute, - details, - starting_period, - ..Proposal::default() - }; - self.proposals.insert(proposal_id, proposal); - self.proposal_id = self.proposal_id.saturating_add(1); - self.transactions.remove(¤t_transaction_id); - msg::reply( - DaoEvent::SubmitMembershipProposal { - proposer: msg::source(), - applicant: *applicant, - proposal_id, - token_tribute, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::SubmitMembershipProposal`"); - } - - pub fn submit_funding_proposal( - &mut self, - applicant: &ActorId, - amount: u128, - quorum: u128, - details: String, - ) { - self.check_for_membership(); - Self::assert_not_zero_address(applicant); - - let mut starting_period = exec::block_timestamp(); - let proposal_id = self.proposal_id; - // compute startingPeriod for proposal - // there should be a minimum time interval between proposals (period_duration) so that members have time to ragequit - if proposal_id > 0 { - let previous_starting_period = self - .proposals - .get(&(&proposal_id - 1)) - .expect("Can't be None") - .starting_period; - if starting_period < previous_starting_period + self.period_duration { - starting_period = previous_starting_period + self.period_duration; - } - } - - let proposal = Proposal { - proposer: msg::source(), - applicant: *applicant, - quorum, - amount, - details, - starting_period, - ..Proposal::default() - }; - - self.proposals.insert(proposal_id, proposal); - self.proposal_id = self.proposal_id.saturating_add(1); - msg::reply( - DaoEvent::SubmitFundingProposal { - proposer: msg::source(), - applicant: *applicant, - proposal_id, - amount, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::SubmitFungingProposal"); - } - - pub fn submit_vote(&mut self, proposal_id: u128, vote: Vote) { - let proposal = match self.proposals.get_mut(&proposal_id) { - Some(proposal) => { - if exec::block_timestamp() > proposal.starting_period + self.voting_period_length { - panic!("proposal voting period has expired"); - } - if exec::block_timestamp() < proposal.starting_period { - panic!("voting period has not started"); - } - if proposal - .votes_by_member - .iter() - .any(|(actor_id, _vote)| msg::source().eq(actor_id)) - { - panic!("account has already voted on this proposal"); - } - if proposal.aborted { - panic!("The proposal has been aborted"); - } - proposal - } - None => { - panic!("proposal does not exist"); - } - }; - - let member_id = self - .member_by_delegate_key - .get(&msg::source()) - .expect("Account is not a delegate"); - let member = self - .members - .get_mut(member_id) - .expect("Account is not a DAO member"); - - match vote { - Vote::Yes => { - proposal.yes_votes = proposal.yes_votes.saturating_add(member.shares); - if self.total_shares > proposal.max_total_shares_at_yes_vote { - proposal.max_total_shares_at_yes_vote = self.total_shares; - } - // it is necessary to save the highest id of the proposal - must be processed for member to ragequit - if member.highest_index_yes_vote < proposal_id { - member.highest_index_yes_vote = proposal_id; - } - } - Vote::No => { - proposal.no_votes = proposal.no_votes.saturating_add(member.shares); - } - } - proposal.votes_by_member.push((msg::source(), vote.clone())); - - msg::reply( - DaoEvent::SubmitVote { - account: msg::source(), - proposal_id, - vote, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::SubmitVote`"); - } - - pub async fn process_proposal(&mut self, transaction_id: Option, proposal_id: u128) { - let current_transaction_id = self.get_transaction_id(transaction_id); - if proposal_id > 0 - && !self - .proposals - .get(&(&proposal_id - 1)) - .expect("Proposal does not exist") - .processed - { - panic!("Previous proposal must be processed"); - } - let proposal = match self.proposals.get_mut(&proposal_id) { - Some(proposal) => { - if proposal.processed || proposal.aborted { - panic!("Proposal has already been processed or aborted"); - } - if exec::block_timestamp() - < proposal.starting_period - + self.voting_period_length - + self.grace_period_length - { - panic!("Proposal is not ready to be processed"); - } - proposal - } - None => { - panic!("proposal does not exist"); - } - }; - - proposal.passed = proposal.yes_votes > proposal.no_votes - && proposal.yes_votes * 10000 / self.total_shares >= proposal.quorum - && proposal.max_total_shares_at_yes_vote - < (self.dilution_bound as u128) * self.total_shares; - // if membership proposal has passed - if proposal.passed && proposal.is_membership_proposal { - let applicant = self.members.entry(proposal.applicant).or_insert(Member { - delegate_key: proposal.applicant, - shares: 0, - highest_index_yes_vote: 0, - }); - applicant.shares = applicant.shares.saturating_add(proposal.shares_requested); - self.member_by_delegate_key - .entry(proposal.applicant) - .or_insert(proposal.applicant); - self.total_shares = self.total_shares.saturating_add(proposal.shares_requested); - self.balance = self.balance.saturating_add(proposal.token_tribute); - } else if proposal.is_membership_proposal - && transfer_tokens( - current_transaction_id, - &self.approved_token_program_id, - &exec::program_id(), - &proposal.applicant, - proposal.token_tribute, - ) - .await - .is_err() - { - // the tokens are on the DAO balance - // we have to rerun that transaction to return tokens to applicant - msg::reply(DaoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Error in a reply `DaoEvent::TransactionFailed`"); - return; - } - - // if funding propoposal has passed - if proposal.passed - && !proposal.is_membership_proposal - && transfer_tokens( - current_transaction_id, - &self.approved_token_program_id, - &exec::program_id(), - &proposal.applicant, - proposal.amount, - ) - .await - .is_err() - { - // the same is here: the tokens are on the DAO balance - // we have to rerun that transaction to transfer tokens to applicant - msg::reply(DaoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Error in a reply `DaoEvent::TransactionFailed`"); - return; - } - proposal.processed = true; - self.transactions.remove(¤t_transaction_id); - msg::reply( - DaoEvent::ProcessProposal { - proposal_id, - passed: proposal.passed, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::ProcessProposal`"); - } - - pub async fn ragequit(&mut self, transaction_id: Option, amount: u128) { - let current_transaction_id = self.get_transaction_id(transaction_id); - if self.admin == msg::source() { - panic!("admin can not ragequit"); - } - let funds = self.redeemable_funds(amount); - let member = self - .members - .get_mut(&msg::source()) - .expect("Account is not a DAO member"); - - if amount > member.shares { - panic!("unsufficient shares"); - } - - let proposal_id = member.highest_index_yes_vote; - if !self - .proposals - .get(&proposal_id) - .expect("Cant be None") - .processed - { - panic!("cant ragequit until highest index proposal member voted YES on is processed"); - } - - // the tokens are on the DAO balance - // we have to rerun that transaction to withdraw tokens to applicant in case of error - if transfer_tokens( - current_transaction_id, - &self.approved_token_program_id, - &exec::program_id(), - &msg::source(), - funds, - ) - .await - .is_ok() - { - member.shares = member.shares.saturating_sub(amount); - self.total_shares = self.total_shares.saturating_sub(amount); - self.balance = self.balance.saturating_sub(funds); - self.transactions.remove(¤t_transaction_id); - msg::reply( - DaoEvent::RageQuit { - member: msg::source(), - amount: funds, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::RageQuit`"); - } else { - msg::reply(DaoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Error in a reply `DaoEvent::TransactionFailed`"); - }; - } - - pub async fn abort(&mut self, transaction_id: Option, proposal_id: u128) { - let current_transaction_id = self.get_transaction_id(transaction_id); - let proposal = self - .proposals - .get_mut(&proposal_id) - .expect("The proposal does not exist"); - - if proposal.applicant != msg::source() { - panic!("caller must be applicant"); - } - - if !proposal.is_membership_proposal { - panic!("The proposal must be membership"); - } - - if proposal.aborted { - panic!("Proposal has already been aborted"); - } - - if exec::block_timestamp() > proposal.starting_period + self.abort_window { - panic!("The abort window is over"); - } - - let amount = proposal.token_tribute; - - // if transfer of tokens fails - // we have to rerun the transaction to return tokens to applicant - if transfer_tokens( - current_transaction_id, - &self.approved_token_program_id, - &exec::program_id(), - &msg::source(), - amount, - ) - .await - .is_ok() - { - proposal.token_tribute = 0; - proposal.aborted = true; - - msg::reply(DaoEvent::Abort(proposal_id), 0) - .expect("Error in a reply `DaoEvent::Abort`"); - } else { - msg::reply(DaoEvent::TransactionFailed(current_transaction_id), 0) - .expect("Error in a reply `DaoEvent::TransactionFailed`"); - }; - } - - pub fn set_admin(&mut self, new_admin: &ActorId) { - self.assert_admin(); - Self::assert_not_zero_address(new_admin); - self.admin = *new_admin; - msg::reply(DaoEvent::AdminUpdated(*new_admin), 0) - .expect("Error in a reply `DaoEvent::AdminUpdated`"); - } - - pub fn update_delegate_key(&mut self, new_delegate_key: &ActorId) { - if self.member_by_delegate_key.contains_key(new_delegate_key) { - panic!("cannot overwrite existing delegate keys"); - } - Self::assert_not_zero_address(new_delegate_key); - - let member = self - .members - .get_mut(&msg::source()) - .expect("Account is not a DAO member"); - self.member_by_delegate_key - .insert(*new_delegate_key, msg::source()); - member.delegate_key = *new_delegate_key; - msg::reply( - DaoEvent::DelegateKeyUpdated { - member: msg::source(), - delegate: *new_delegate_key, - }, - 0, - ) - .expect("Error in a reply `DaoEvent::DelegateKeyUpdated`"); - } - - pub async fn continue_transaction(&mut self, transaction_id: u64) { - let transactions = self.transactions.clone(); - let payload = &transactions - .get(&transaction_id) - .expect("Transaction does not exist"); - if let Some(action) = payload { - match action { - DaoAction::SubmitMembershipProposal { - applicant, - token_tribute, - shares_requested, - quorum, - details, - } => { - self.submit_membership_proposal( - Some(transaction_id), - applicant, - *token_tribute, - *shares_requested, - *quorum, - details.clone(), - ) - .await; - } - DaoAction::ProcessProposal(proposal_id) => { - self.process_proposal(Some(transaction_id), *proposal_id) - .await; - } - DaoAction::RageQuit(amount) => { - self.ragequit(Some(transaction_id), *amount).await; - } - DaoAction::Abort(proposal_id) => { - self.abort(Some(transaction_id), *proposal_id).await - } - _ => unreachable!(), - } - } - } -} - -impl From for DaoState { - fn from(dao: Dao) -> DaoState { - DaoState { - admin: dao.admin, - approved_token_program_id: dao.approved_token_program_id, - period_duration: dao.period_duration, - voting_period_length: dao.voting_period_length, - grace_period_length: dao.grace_period_length, - dilution_bound: dao.dilution_bound, - abort_window: dao.abort_window, - total_shares: dao.total_shares, - balance: dao.balance, - members: dao - .members - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - member_by_delegate_key: dao - .member_by_delegate_key - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - proposal_id: dao.proposal_id, - proposals: dao - .proposals - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - whitelist: dao.whitelist.clone(), - transaction_id: dao.transaction_id, - transactions: dao - .transactions - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - } - } -} - -#[no_mangle] -extern fn init() { - let config: InitDao = msg::load().expect("Unable to decode InitDao"); - let mut dao = Dao { - admin: config.admin, - approved_token_program_id: config.approved_token_program_id, - voting_period_length: config.voting_period_length, - period_duration: config.period_duration, - grace_period_length: config.grace_period_length, - abort_window: config.abort_window, - dilution_bound: config.dilution_bound, - total_shares: 1, - ..Dao::default() - }; - dao.members.insert( - config.admin, - Member { - delegate_key: config.admin, - shares: 1, - highest_index_yes_vote: 0, - }, - ); - dao.member_by_delegate_key - .insert(config.admin, config.admin); - unsafe { DAO = Some(dao) }; -} - -#[gstd::async_main] -async fn main() { - let action: DaoAction = msg::load().expect("Could not load Action"); - let dao: &mut Dao = unsafe { DAO.get_or_insert(Default::default()) }; - match action { - DaoAction::AddToWhiteList(account) => dao.add_to_whitelist(&account), - DaoAction::SubmitMembershipProposal { - applicant, - token_tribute, - shares_requested, - quorum, - ref details, - } => { - dao.transactions - .insert(dao.transaction_id, Some(action.clone())); - dao.submit_membership_proposal( - None, - &applicant, - token_tribute, - shares_requested, - quorum, - details.to_string(), - ) - .await; - } - DaoAction::SubmitFundingProposal { - applicant, - amount, - quorum, - details, - } => { - dao.submit_funding_proposal(&applicant, amount, quorum, details); - } - DaoAction::ProcessProposal(proposal_id) => { - dao.transactions.insert(dao.transaction_id, Some(action)); - dao.process_proposal(None, proposal_id).await; - } - DaoAction::SubmitVote { proposal_id, vote } => { - dao.submit_vote(proposal_id, vote); - } - DaoAction::RageQuit(amount) => { - dao.transactions.insert(dao.transaction_id, Some(action)); - dao.ragequit(None, amount).await; - } - DaoAction::Abort(proposal_id) => { - dao.transactions.insert(dao.transaction_id, Some(action)); - dao.abort(None, proposal_id).await - } - DaoAction::Continue(transaction_id) => dao.continue_transaction(transaction_id).await, - DaoAction::UpdateDelegateKey(account) => dao.update_delegate_key(&account), - DaoAction::SetAdmin(account) => dao.set_admin(&account), - } -} - -#[no_mangle] -extern fn state() { - let dao = unsafe { DAO.take().expect("Unexpected error in taking state") }; - msg::reply::(dao.into(), 0) - .expect("Failed to encode or reply with `DaoState` from `state()`"); -} diff --git a/contracts/dao/src/utils.rs b/contracts/dao/src/utils.rs deleted file mode 100644 index 6a9818613..000000000 --- a/contracts/dao/src/utils.rs +++ /dev/null @@ -1,48 +0,0 @@ -use crate::Dao; -use gstd::{msg, prelude::*, ActorId}; - -impl Dao { - // calculates the funds that the member can redeem based on his shares - pub fn redeemable_funds(&self, share: u128) -> u128 { - if self.total_shares > 0 { - (share.saturating_mul(self.balance)) / self.total_shares - } else { - panic!("Zero total shares in DAO!"); - } - } - - // checks that account is DAO member - pub fn is_member(&self, account: &ActorId) -> bool { - matches!(self.members.get(account), Some(member) if member.shares != 0) - } - - // check that `msg::source()` is either a DAO member or a delegate key - pub fn check_for_membership(&self) { - match self.member_by_delegate_key.get(&msg::source()) { - Some(member) if !self.is_member(member) => panic!("account is not a DAO member"), - None => panic!("account is not a delegate"), - _ => {} - } - } - - // Determine either this is a new transaction - // or the transaction which has to be completed - pub fn get_transaction_id(&mut self, transaction_id: Option) -> u64 { - match transaction_id { - Some(transaction_id) => transaction_id, - None => { - let transaction_id = self.transaction_id; - self.transaction_id = self.transaction_id.wrapping_add(1); - transaction_id - } - } - } - - pub fn assert_admin(&self) { - assert_eq!(msg::source(), self.admin, "msg::source() must be DAO admin"); - } - - pub fn assert_not_zero_address(address: &ActorId) { - assert!(!address.is_zero(), "Zero address"); - } -} diff --git a/contracts/dao/state/Cargo.toml b/contracts/dao/state/Cargo.toml deleted file mode 100644 index 46cf72b46..000000000 --- a/contracts/dao/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "dao-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dao-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dao/state/build.rs b/contracts/dao/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dao/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dao/state/src/lib.rs b/contracts/dao/state/src/lib.rs deleted file mode 100644 index 8b0044daf..000000000 --- a/contracts/dao/state/src/lib.rs +++ /dev/null @@ -1,29 +0,0 @@ -#![no_std] - -use dao_io::*; -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = DaoState; - - pub fn is_member(state: State, account: ActorId) -> bool { - DaoState::is_member(state, &account) - } - - pub fn is_in_whitelist(state: State, account: ActorId) -> bool { - DaoState::is_in_whitelist(state, &account) - } - - pub fn get_proposal_id(state: State) -> u128 { - DaoState::get_proposal_id(state) - } - - pub fn get_proposal_info(state: State, id: u128) -> Proposal { - DaoState::get_proposal_info(state, id).expect("Invalid proposal id") - } - - pub fn get_member_info(state: State, account: ActorId) -> Member { - DaoState::get_member_info(state, &account).expect("Invalid member account") - } -} diff --git a/contracts/dao/tests/dilution_bound.rs b/contracts/dao/tests/dilution_bound.rs deleted file mode 100644 index df794eeee..000000000 --- a/contracts/dao/tests/dilution_bound.rs +++ /dev/null @@ -1,70 +0,0 @@ -pub mod utils; - -use crate::utils::*; -use dao_io::*; -use gtest::{Program, System}; - -// TODO: fix test -#[test] -#[ignore] -fn dilution_bound() { - let system = System::new(); - system.init_logger(); - let ftoken = Program::ftoken(&system); - let dao = Program::dao(&system); - let applicant: u64 = 200; - let token_tribute: u128 = 10_000; - let shares_requested: u128 = 10_000; - let mut total_shares = 10 * shares_requested + 1; - let mut balance = 10 * token_tribute; - let ragequit_amount: u128 = 9_000; - let quorum: u128 = 10; - let mut proposal_id: u128 = 0; - // add members to DAO - for applicant in APPLICANTS { - ftoken.mint(0, *applicant, *applicant, token_tribute); - ftoken.approve(1, *applicant, DAO_ID, token_tribute); - dao.add_member( - &system, - proposal_id, - *applicant, - token_tribute, - shares_requested, - ); - proposal_id += 1; - } - - //membership proposal - ftoken.mint(0, applicant, applicant, token_tribute); - ftoken.approve(1, applicant, DAO_ID, token_tribute); - - dao.add_to_whitelist(ADMIN, applicant, false); - dao.submit_membership_proposal( - ADMIN, - proposal_id, - applicant, - token_tribute, - shares_requested, - quorum, - false, - ); - - // APPLICANT[0] votes YES - dao.submit_vote(APPLICANTS[0], proposal_id, Vote::Yes, false); - // APPLICANT[1] votes YES - dao.submit_vote(APPLICANTS[1], proposal_id, Vote::Yes, false); - - // APPLICANT[2]-APPLICANT[9] ragequit - for applicant in APPLICANTS.iter().take(10).skip(2) { - let funds = (balance * ragequit_amount) / (total_shares); - dao.ragequit(*applicant, ragequit_amount, funds, false); - total_shares -= ragequit_amount; - balance -= funds; - } - - // quorum is achieved and number of YES votes > NO votes - // but max_total_shares_at_yes_vote > total_shares * dilution_bound - // proposal is not passed - system.spend_blocks((VOTING_PERIOD_LENGTH + GRACE_PERIOD_LENGTH) as u32); - dao.process_proposal(proposal_id, false, false); -} diff --git a/contracts/dao/tests/failures.rs b/contracts/dao/tests/failures.rs deleted file mode 100644 index b101e6b05..000000000 --- a/contracts/dao/tests/failures.rs +++ /dev/null @@ -1,330 +0,0 @@ -// pub mod utils; - -// use crate::utils::*; -// use dao_io::*; -// use gtest::{Program, System}; - -// #[test] -// fn submit_membership_proposal() { -// let system = System::new(); -// system.init_logger(); -// let _ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let token_tribute: u128 = 10_000; -// let shares_requested: u128 = 10_000; -// let applicant: u64 = 200; -// let quorum: u128 = 50; -// let proposal_id: u128 = 0; - -// let user = 1000; -// // must fail since account is neither a member nor a delegate -// dao.submit_membership_proposal( -// user, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// true, -// ); - -// // must fail since an applicant is not in the whitelist -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// true, -// ); -// } - -// #[test] -// fn submit_funding_proposal() { -// let system = System::new(); -// system.init_logger(); -// let _ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let applicant: u64 = 200; -// let amount: u128 = 10_000; -// let quorum: u128 = 50; -// let proposal_id: u128 = 0; - -// let user = 1000; -// // must fail since account is neither a member nor a delegate -// dao.submit_funding_proposal(user, proposal_id, applicant, amount, quorum, true); -// } - -// #[test] -// fn submit_vote() { -// let system = System::new(); -// system.init_logger(); -// let ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let token_tribute: u128 = 10_000; -// let shares_requested: u128 = 10_000; -// let applicant: u64 = 200; -// let quorum: u128 = 50; -// let proposal_id: u128 = 0; -// let user = 1000; - -// dao.add_to_whitelist(ADMIN, applicant, false); -// ftoken.mint(0, applicant, applicant, 2 * token_tribute); -// ftoken.approve(1, applicant, DAO_ID, 2 * token_tribute); -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id + 1, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// // must fail since the the account is neither a member nor a delegate -// dao.submit_vote(user, proposal_id, Vote::Yes, true); - -// // must fail since the voting period has not started -// dao.submit_vote(ADMIN, proposal_id + 1, Vote::Yes, true); - -// system.spend_blocks((PERIOD_DURATION / 300) as u32); - -// dao.submit_vote(ADMIN, proposal_id + 1, Vote::Yes, false); - -// // must fail since the account has already voted on this proposal -// dao.submit_vote(ADMIN, proposal_id + 1, Vote::Yes, true); - -// system.spend_blocks(((VOTING_PERIOD_LENGTH + 3000) / 3000) as u32); - -// // must fail since the proposal voting period has expired -// dao.submit_vote(ADMIN, proposal_id + 1, Vote::Yes, true); - -// // must fail since the proposal does not exist -// dao.submit_vote(ADMIN, proposal_id + 2, Vote::Yes, true); - -// ftoken.mint(2, applicant, applicant, 2 * token_tribute); -// ftoken.approve(3, applicant, DAO_ID, token_tribute); -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id + 2, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// dao.abort(applicant, proposal_id + 2, false); -// // must fail since the proposal has been aborted -// dao.submit_vote(ADMIN, proposal_id + 2, Vote::Yes, true); -// } - -// #[test] -// fn process_proposal() { -// let system = System::new(); -// system.init_logger(); -// let ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let token_tribute: u128 = 10_000; -// let shares_requested: u128 = 10_000; -// let applicant: u64 = 200; -// let quorum: u128 = 50; -// let proposal_id: u128 = 0; - -// dao.add_to_whitelist(ADMIN, applicant, false); -// ftoken.mint(0, applicant, applicant, 2 * token_tribute); -// ftoken.approve(1, applicant, DAO_ID, 2 * token_tribute); - -// // must fail since proposal does not exist -// dao.process_proposal(proposal_id, true, true); - -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id + 1, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// // must fail since previous proposal must be processed -// dao.process_proposal(proposal_id, true, true); - -// // must fail since the proposal is not ready to be processed -// dao.process_proposal(proposal_id + 1, true, true); -// dao.abort(applicant, proposal_id + 1, false); -// system.spend_blocks((VOTING_PERIOD_LENGTH + GRACE_PERIOD_LENGTH) as u32); - -// dao.process_proposal(proposal_id, false, false); - -// // must fail since the proposal has already been processed -// dao.process_proposal(proposal_id, true, true); - -// // must fail since the proposal has been aborted -// dao.process_proposal(proposal_id + 1, true, true); -// } - -// #[test] -// fn abort() { -// let system = System::new(); -// system.init_logger(); -// let ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let token_tribute: u128 = 10_000; -// let shares_requested: u128 = 10_000; -// let applicant: u64 = 200; -// let quorum: u128 = 50; -// let proposal_id: u128 = 0; - -// dao.add_to_whitelist(ADMIN, applicant, false); -// ftoken.mint(0, applicant, applicant, token_tribute); -// ftoken.approve(1, applicant, DAO_ID, token_tribute); - -// // must fail since proposal does not exist -// dao.abort(applicant, proposal_id, true); - -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// // must fail since the caller must be the applicant -// dao.abort(ADMIN, proposal_id, true); - -// ftoken.check_balance(applicant, 0); -// dao.abort(applicant, proposal_id, false); - -// ftoken.check_balance(applicant, token_tribute); - -// ftoken.approve(2, applicant, DAO_ID, token_tribute); -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id + 1, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// system.spend_blocks((ABORT_WINDOW / 1000) as u32); - -// // must fail since the the abort window is over -// dao.abort(ADMIN, proposal_id + 1, true); - -// dao.submit_funding_proposal( -// ADMIN, -// proposal_id + 2, -// applicant, -// token_tribute, -// quorum, -// false, -// ); - -// // must fail since the the proposal must be membership -// dao.abort(ADMIN, proposal_id + 2, true); -// } - -// #[test] -// fn ragequit() { -// let system = System::new(); -// system.init_logger(); -// let ftoken = Program::ftoken(&system); -// let dao = Program::dao(&system); -// let applicant: u64 = 200; -// let token_tribute: u128 = 10_000; -// let shares_requested: u128 = 10_000; -// let mut total_shares = 10 * shares_requested + 1; -// let mut balance = 10 * token_tribute; -// let ragequit_amount: u128 = 6_000; -// let quorum: u128 = 50; -// let mut proposal_id: u128 = 0; - -// // add members to DAO -// for applicant in APPLICANTS { -// ftoken.mint(0, *applicant, *applicant, token_tribute); -// ftoken.approve(1, *applicant, DAO_ID, token_tribute); -// dao.add_member( -// &system, -// proposal_id, -// *applicant, -// token_tribute, -// shares_requested, -// ); -// proposal_id += 1; -// } - -// //membership proposal -// ftoken.mint(0, applicant, applicant, token_tribute); -// ftoken.approve(1, applicant, DAO_ID, token_tribute); - -// dao.add_to_whitelist(ADMIN, applicant, false); -// dao.submit_membership_proposal( -// ADMIN, -// proposal_id, -// applicant, -// token_tribute, -// shares_requested, -// quorum, -// false, -// ); - -// // members of DAO vote -// for applicant in APPLICANTS { -// let vote: Vote = if applicant < &16 { Vote::Yes } else { Vote::No }; -// dao.submit_vote(*applicant, proposal_id, vote, false); -// } - -// //must fail since the applicant voted YES and the proposal has not been processed -// dao.ragequit(14, ragequit_amount, 0, true); - -// //must fail since an account is not a DAO member -// dao.ragequit(300, ragequit_amount, 0, true); - -// //must fail since a memeber has unsufficient shares -// dao.ragequit(17, 2 * ragequit_amount, 0, true); - -// // successfull ragequit -// ftoken.check_balance(17, 0); -// let funds = (balance * ragequit_amount) / (total_shares); -// dao.ragequit(17, ragequit_amount, funds, false); -// total_shares -= ragequit_amount; -// balance -= funds; -// ftoken.check_balance(17, funds); -// ftoken.check_balance(DAO_ID, balance + token_tribute); - -// // successfull ragequit -// ftoken.check_balance(18, 0); -// let funds = (balance * ragequit_amount) / (total_shares); -// dao.ragequit(18, ragequit_amount, funds, false); -// balance -= funds; -// ftoken.check_balance(18, funds); -// ftoken.check_balance(DAO_ID, balance + token_tribute); -// } diff --git a/contracts/dao/tests/node_tests.rs b/contracts/dao/tests/node_tests.rs deleted file mode 100644 index c1d387b74..000000000 --- a/contracts/dao/tests/node_tests.rs +++ /dev/null @@ -1,57 +0,0 @@ -mod utils_gclient; - -use gclient::GearApi; -use gstd::prelude::*; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_dilution_bound() -> gclient::Result<()> { - let mut api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let ft_program = utils_gclient::ft::init(&api).await?; - let dao_program = utils_gclient::dao::init( - &api, - &ft_program, - 10000000, - 100000000, - 10000000, - 3, - 10000000, - ) - .await?; - - utils_gclient::common::fund_applicants(&api).await?; - - let token_tribute: u128 = 10_000; - let shares_requested: u128 = 10_000; - - for applicant in utils_gclient::common::APPLICANTS { - api = api.with(applicant)?; - - let applicant_id = utils_gclient::common::get_current_actor_id(&api); - - utils_gclient::ft::mint(&api, &ft_program, 0, &applicant_id, token_tribute).await?; - utils_gclient::ft::approve(&api, &ft_program, 1, &dao_program, token_tribute).await?; - - { - api = api.with("//Alice")?; - - utils_gclient::dao::add_to_whitelist(&api, &dao_program, &applicant_id, false).await?; - utils_gclient::dao::submit_membership_proposal( - &api, - &dao_program, - &applicant_id, - token_tribute, - shares_requested, - 0, - "", - false, - ) - .await? - .expect("Unexpected empty proposal id."); - } - } - - Ok(()) -} diff --git a/contracts/dao/tests/proposals.rs b/contracts/dao/tests/proposals.rs deleted file mode 100644 index 5382a8fca..000000000 --- a/contracts/dao/tests/proposals.rs +++ /dev/null @@ -1,162 +0,0 @@ -pub mod utils; - -use crate::utils::*; -use dao_io::*; -use gtest::{Program, System}; - -// TODO: fix test -#[test] -#[ignore] -fn membership_proposals() { - let system = System::new(); - system.init_logger(); - let ftoken = Program::ftoken(&system); - let dao = Program::dao(&system); - let token_tribute: u128 = 10_000; - let shares_requested: u128 = 10_000; - let applicant: u64 = 200; - let quorum: u128 = 50; - let mut proposal_id: u128 = 0; - - // add members to DAO - for applicant in APPLICANTS { - ftoken.mint(0, *applicant, *applicant, token_tribute); - ftoken.approve(1, *applicant, DAO_ID, token_tribute); - dao.add_member( - &system, - proposal_id, - *applicant, - token_tribute, - shares_requested, - ); - proposal_id += 1; - } - - //membership proposal - ftoken.mint(0, applicant, applicant, token_tribute); - ftoken.approve(1, applicant, DAO_ID, token_tribute); - - dao.add_to_whitelist(ADMIN, applicant, false); - dao.submit_membership_proposal( - ADMIN, - proposal_id, - applicant, - token_tribute, - shares_requested, - quorum, - false, - ); - - // members of DAO vote - for applicant in APPLICANTS { - let vote: Vote = if applicant < &16 { Vote::Yes } else { Vote::No }; - dao.submit_vote(*applicant, proposal_id, vote, false); - } - - system.spend_blocks(VOTING_PERIOD_LENGTH as u32 + 1); - - // proposal passed - dao.process_proposal(proposal_id, true, false); - - // check balance of applicant - ftoken.check_balance(applicant, 0); - - // new proposal - ftoken.mint(2, applicant, applicant, token_tribute); - ftoken.approve(3, applicant, DAO_ID, token_tribute); - proposal_id += 1; - dao.submit_membership_proposal( - ADMIN, - proposal_id, - applicant, - token_tribute, - shares_requested, - quorum, - false, - ); - - // DAO members vote - for applicant in APPLICANTS { - let vote: Vote = if applicant < &16 { Vote::No } else { Vote::Yes }; - dao.submit_vote(*applicant, proposal_id, vote, false); - } - - system.spend_blocks(VOTING_PERIOD_LENGTH as u32 + 1); - - // proposal didn't pass - dao.process_proposal(proposal_id, false, false); - - // check balance of applicant (it must be equal to token tribute since proposal did not pass) - ftoken.check_balance(applicant, token_tribute); - // check balance of DAO - ftoken.check_balance(DAO_ID, 11 * token_tribute); -} - -// TODO: fix test -#[test] -#[ignore] -fn funding_proposals() { - let system = System::new(); - system.init_logger(); - let ftoken = Program::ftoken(&system); - let dao = Program::dao(&system); - let amount = 30_000; - let token_tribute: u128 = 10_000; - let shares_requested: u128 = 10_000; - let receiver: u64 = 100; - let quorum: u128 = 50; - let mut proposal_id: u128 = 0; - - // add members to DAO - for applicant in APPLICANTS { - ftoken.mint(0, *applicant, *applicant, token_tribute); - ftoken.approve(1, *applicant, DAO_ID, token_tribute); - dao.add_member( - &system, - proposal_id, - *applicant, - token_tribute, - shares_requested, - ); - proposal_id += 1; - } - - //funding proposal - dao.submit_funding_proposal(ADMIN, proposal_id, receiver, amount, quorum, false); - - // members of DAO vote - for applicant in APPLICANTS { - let vote: Vote = if applicant < &16 { Vote::Yes } else { Vote::No }; - dao.submit_vote(*applicant, proposal_id, vote, false); - } - - system.spend_blocks(VOTING_PERIOD_LENGTH as u32 + 1); - - // proposal passed - dao.process_proposal(proposal_id, true, false); - - // check balance of receiver - ftoken.check_balance(receiver, amount); - // check balance of DAO - ftoken.check_balance(DAO_ID, 10 * token_tribute - amount); - - // new proposal - proposal_id += 1; - dao.submit_funding_proposal(ADMIN, proposal_id, receiver, amount, quorum, false); - - // DAO members vote - for applicant in APPLICANTS { - let vote: Vote = if applicant < &16 { Vote::No } else { Vote::Yes }; - dao.submit_vote(*applicant, proposal_id, vote, false); - } - - system.spend_blocks(VOTING_PERIOD_LENGTH as u32 + 1); - - // proposal didn't pass - dao.process_proposal(proposal_id, false, false); - - // check balance of applicant - ftoken.check_balance(receiver, amount); - // check balance of DAO - ftoken.check_balance(DAO_ID, 10 * token_tribute - amount); -} diff --git a/contracts/dao/tests/utils.rs b/contracts/dao/tests/utils.rs deleted file mode 100644 index 07774fa10..000000000 --- a/contracts/dao/tests/utils.rs +++ /dev/null @@ -1,317 +0,0 @@ -use dao_io::*; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -use gstd::prelude::*; -use gtest::{Program, System}; -pub const ADMIN: u64 = 100; -const TOKEN_ID: u64 = 1; -pub const DAO_ID: u64 = 2; -pub const PERIOD_DURATION: u64 = 300; -pub const VOTING_PERIOD_LENGTH: u64 = 3000; -pub const GRACE_PERIOD_LENGTH: u64 = 100; -const DILUTION_BOUND: u8 = 3; -pub const ABORT_WINDOW: u64 = 100; -pub const APPLICANTS: &[u64] = &[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]; - -pub trait Dao { - fn dao(system: &System) -> Program<'_>; - fn add_to_whitelist(&self, from: u64, account: u64, error: bool); - #[allow(clippy::too_many_arguments)] - fn submit_membership_proposal( - &self, - from: u64, - proposal_id: u128, - applicant: u64, - token_tribute: u128, - shares_requested: u128, - quorum: u128, - error: bool, - ); - fn submit_funding_proposal( - &self, - from: u64, - proposal_id: u128, - applicant: u64, - amount: u128, - quorum: u128, - error: bool, - ); - fn process_proposal(&self, proposal_id: u128, passed: bool, error: bool); - fn submit_vote(&self, from: u64, proposal_id: u128, vote: Vote, error: bool); - fn ragequit(&self, from: u64, amount: u128, funds: u128, error: bool); - fn abort(&self, from: u64, proposal_id: u128, error: bool); - fn update_delegate_key(&self, from: u64, account: u64, error: bool); - fn add_member( - &self, - system: &System, - proposal_id: u128, - applicant: u64, - token_tribute: u128, - shares_requested: u128, - ); -} - -impl Dao for Program<'_> { - fn dao(system: &System) -> Program<'_> { - let dao = Program::current_opt(system); - assert!(!dao - .send( - ADMIN, - InitDao { - admin: ADMIN.into(), - approved_token_program_id: TOKEN_ID.into(), - period_duration: PERIOD_DURATION, - voting_period_length: VOTING_PERIOD_LENGTH, - grace_period_length: GRACE_PERIOD_LENGTH, - dilution_bound: DILUTION_BOUND, - abort_window: ABORT_WINDOW, - }, - ) - .main_failed()); - dao - } - - fn add_to_whitelist(&self, from: u64, account: u64, error: bool) { - let res = self.send(from, DaoAction::AddToWhiteList(account.into())); - let reply = DaoEvent::MemberAddedToWhitelist(account.into()).encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - - fn submit_membership_proposal( - &self, - from: u64, - proposal_id: u128, - applicant: u64, - token_tribute: u128, - shares_requested: u128, - quorum: u128, - error: bool, - ) { - let res = self.send( - from, - DaoAction::SubmitMembershipProposal { - applicant: applicant.into(), - token_tribute, - shares_requested, - quorum, - details: String::from(""), - }, - ); - let reply = DaoEvent::SubmitMembershipProposal { - proposer: from.into(), - applicant: applicant.into(), - proposal_id, - token_tribute, - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - fn submit_funding_proposal( - &self, - from: u64, - proposal_id: u128, - applicant: u64, - amount: u128, - quorum: u128, - error: bool, - ) { - let res = self.send( - from, - DaoAction::SubmitFundingProposal { - applicant: applicant.into(), - amount, - quorum, - details: String::from(""), - }, - ); - let reply = DaoEvent::SubmitFundingProposal { - proposer: from.into(), - applicant: applicant.into(), - proposal_id, - amount, - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - - fn process_proposal(&self, proposal_id: u128, passed: bool, error: bool) { - let res = self.send(ADMIN, DaoAction::ProcessProposal(proposal_id)); - let reply = DaoEvent::ProcessProposal { - proposal_id, - passed, - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(ADMIN, reply))); - } - } - fn submit_vote(&self, from: u64, proposal_id: u128, vote: Vote, error: bool) { - let res = self.send( - from, - DaoAction::SubmitVote { - proposal_id, - vote: vote.clone(), - }, - ); - let reply = DaoEvent::SubmitVote { - account: from.into(), - proposal_id, - vote, - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - fn ragequit(&self, from: u64, amount: u128, funds: u128, error: bool) { - let res = self.send(from, DaoAction::RageQuit(amount)); - let reply = DaoEvent::RageQuit { - member: from.into(), - amount: funds, - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - fn abort(&self, from: u64, proposal_id: u128, error: bool) { - let res = self.send(from, DaoAction::Abort(proposal_id)); - let reply = DaoEvent::Abort(proposal_id).encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - fn update_delegate_key(&self, from: u64, account: u64, error: bool) { - let res = self.send(from, DaoAction::UpdateDelegateKey(account.into())); - let reply = DaoEvent::DelegateKeyUpdated { - member: from.into(), - delegate: account.into(), - } - .encode(); - if error { - assert!(res.main_failed()); - } else { - assert!(res.contains(&(from, reply))); - } - } - - fn add_member( - &self, - system: &System, - proposal_id: u128, - applicant: u64, - token_tribute: u128, - shares_requested: u128, - ) { - self.add_to_whitelist(ADMIN, applicant, false); - self.submit_membership_proposal( - ADMIN, - proposal_id, - applicant, - token_tribute, - shares_requested, - 0, - false, - ); - self.submit_vote(ADMIN, proposal_id, Vote::Yes, false); - system.spend_blocks(VOTING_PERIOD_LENGTH as u32 + 1); - self.process_proposal(proposal_id, true, false); - } -} - -pub trait FToken { - fn ftoken(system: &System) -> Program<'_>; - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128); - fn check_balance(&self, account: u64, expected_amount: u128); - fn approve(&self, transaction_id: u64, from: u64, approved_account: u64, amount: u128); - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction); -} - -impl FToken for Program<'_> { - fn ftoken(system: &System) -> Program<'_> { - let ftoken = Program::from_file( - system, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ); - let storage_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let ft_logic_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - let res = ftoken.send( - 100, - InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - }, - ); - assert!(!res.main_failed()); - ftoken - } - - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128) { - let payload = LogicAction::Mint { - recipient: account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - ); - } - - fn approve(&self, transaction_id: u64, from: u64, approved_account: u64, amount: u128) { - let payload = LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - ); - } - - fn check_balance(&self, account: u64, expected_amount: u128) { - let res = self.send(100, FTokenAction::GetBalance(account.into())); - let reply = FTokenEvent::Balance(expected_amount).encode(); - assert!(res.contains(&(100, reply))); - } - - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction) { - let res = self.send(from, payload); - assert!(res.contains(&(from, FTokenEvent::Ok.encode()))); - } -} diff --git a/contracts/dao/tests/utils_gclient/common.rs b/contracts/dao/tests/utils_gclient/common.rs deleted file mode 100644 index 70d34dd1e..000000000 --- a/contracts/dao/tests/utils_gclient/common.rs +++ /dev/null @@ -1,57 +0,0 @@ -use blake2_rfc::blake2b; -use gclient::{Error as GclientError, GearApi}; -use gstd::{prelude::*, ActorId}; - -pub const HASH_LENGTH: usize = 32; -pub type Hash = [u8; HASH_LENGTH]; -pub const APPLICANTS: [&str; 6] = ["//Jack", "//Mike", "//Ben", "//Nick", "//John", "//Paul"]; - -pub fn get_current_actor_id(api: &GearApi) -> ActorId { - ActorId::new(*api.account_id().clone().as_ref()) -} - -pub async fn get_user_to_actor_id(user: impl AsRef) -> gclient::Result { - let api = GearApi::dev_from_path("../target/tmp/gear") - .await? - .with(user)?; - let actor_id = ActorId::new(*api.account_id().clone().as_ref()); - - Ok(actor_id) -} - -pub async fn fund_applicants(api: &GearApi) -> gclient::Result<()> { - let fund_amount = api.total_balance(api.account_id()).await? / (APPLICANTS.len() as u128 + 1); - - for applicant in APPLICANTS { - let id = get_user_to_actor_id(applicant).await?.encode(); - api.transfer_keep_alive( - id.as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - fund_amount, - ) - .await - .expect("Error transfer"); - } - - Ok(()) -} - -pub async fn upload_with_code_hash( - api: &GearApi, - wasm_path: impl AsRef, -) -> gclient::Result { - let mut code_hash: Hash = Default::default(); - let wasm_code = gclient::code_from_os(wasm_path.as_ref())?; - - code_hash[..].copy_from_slice(blake2b::blake2b(HASH_LENGTH, &[], &wasm_code).as_bytes()); - - match api.upload_code(wasm_code).await { - // Catch re-upload - Err(GclientError::ProgramAlreadyExists(_)) => {} - Err(error) => return Err(error), - _ => {} - }; - - Ok(code_hash) -} diff --git a/contracts/dao/tests/utils_gclient/dao.rs b/contracts/dao/tests/utils_gclient/dao.rs deleted file mode 100644 index 3fa2230f9..000000000 --- a/contracts/dao/tests/utils_gclient/dao.rs +++ /dev/null @@ -1,377 +0,0 @@ -#![allow(unused)] - -use super::common; -use dao_io::*; -use gclient::{EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; - -const DAO_WASM_PATH: &str = "../target/wasm32-unknown-unknown/release/dao.opt.wasm"; - -pub async fn init( - api: &GearApi, - ft_program: &ActorId, - period_duration: u64, - voting_period_length: u64, - grace_period_length: u64, - dilution_bound: u8, - abort_window: u64, -) -> gclient::Result { - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let init_dao = InitDao { - approved_token_program_id: *ft_program, - admin: common::get_current_actor_id(api), - period_duration, - voting_period_length, - grace_period_length, - dilution_bound, - abort_window, - } - .encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(DAO_WASM_PATH)?, - init_dao.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(DAO_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - init_dao, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn add_to_whitelist( - api: &GearApi, - program_id: &ActorId, - account: &ActorId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::AddToWhiteList(*account)).await?; - - if !should_fail { - let DaoEvent::MemberAddedToWhitelist(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn submit_membership_proposal( - api: &GearApi, - program_id: &ActorId, - applicant: &ActorId, - token_tribute: u128, - shares_requested: u128, - quorum: u128, - details: &str, - should_fail: bool, -) -> gclient::Result> { - let reply = send_message( - api, - program_id, - DaoAction::SubmitMembershipProposal { - applicant: *applicant, - token_tribute, - shares_requested, - quorum, - details: details.to_owned(), - }, - ) - .await?; - - if !should_fail { - let DaoEvent::SubmitMembershipProposal { - proposer: _, - applicant: _, - proposal_id, - token_tribute: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - - Ok(Some(proposal_id)) - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - - Ok(None) - } -} - -pub async fn submit_funding_proposal( - api: &GearApi, - program_id: &ActorId, - applicant: &ActorId, - amount: u128, - quorum: u128, - details: &str, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - program_id, - DaoAction::SubmitFundingProposal { - applicant: *applicant, - amount, - quorum, - details: details.to_owned(), - }, - ) - .await?; - - if !should_fail { - let DaoEvent::SubmitFundingProposal { - proposer: _, - amount: _, - applicant: _, - proposal_id: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn process_proposal( - api: &GearApi, - program_id: &ActorId, - proposal_id: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::ProcessProposal(proposal_id)).await?; - - if !should_fail { - let DaoEvent::ProcessProposal { - proposal_id: _, - passed: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn submit_vote( - api: &GearApi, - program_id: &ActorId, - proposal_id: u128, - vote: Vote, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::SubmitVote { proposal_id, vote }).await?; - - if !should_fail { - let DaoEvent::SubmitVote { - account: _, - proposal_id: _, - vote: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn rage_quit( - api: &GearApi, - program_id: &ActorId, - shares_amount: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::RageQuit(shares_amount)).await?; - - if !should_fail { - let DaoEvent::RageQuit { - member: _, - amount: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn abort( - api: &GearApi, - program_id: &ActorId, - proposal_id: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::Abort(proposal_id)).await?; - - if !should_fail { - let DaoEvent::Abort(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn update_delegate_key( - api: &GearApi, - program_id: &ActorId, - new_delegate: &ActorId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::UpdateDelegateKey(*new_delegate)).await?; - - if !should_fail { - let DaoEvent::DelegateKeyUpdated { - member: _, - delegate: _, - } = DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn set_admin( - api: &GearApi, - program_id: &ActorId, - new_admin: &ActorId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::SetAdmin(*new_admin)).await?; - - if !should_fail { - let DaoEvent::AdminUpdated(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } else { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -pub async fn cont( - api: &GearApi, - program_id: &ActorId, - tx_id: u64, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message(api, program_id, DaoAction::Continue(tx_id)).await?; - - if should_fail { - let DaoEvent::TransactionFailed(_) = - DaoEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `DaoEvent` data.") - else { - std::panic!("Unexpected invalid `DaoEvent`."); - }; - } - - Ok(()) -} - -async fn send_message( - api: &GearApi, - program_id: &ActorId, - payload: DaoAction, -) -> gclient::Result> { - let mut listener = api.subscribe().await?; - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, 0) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - Ok(reply_data_result.expect("Unexpected invalid reply.")) -} diff --git a/contracts/dao/tests/utils_gclient/ft.rs b/contracts/dao/tests/utils_gclient/ft.rs deleted file mode 100644 index e46c2f662..000000000 --- a/contracts/dao/tests/utils_gclient/ft.rs +++ /dev/null @@ -1,152 +0,0 @@ -use super::common; -use gclient::{EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -const FT_STORAGE_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm"; -const FT_LOGIC_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm"; -const FT_MAIN_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm"; - -pub async fn init(api: &GearApi) -> gclient::Result { - let storage_code_hash = common::upload_with_code_hash(api, FT_STORAGE_WASM_PATH).await?; - let ft_logic_code_hash = common::upload_with_code_hash(api, FT_LOGIC_WASM_PATH).await?; - - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let init_ftoken_config = InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - } - .encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(FT_MAIN_WASM_PATH)?, - init_ftoken_config.clone(), - 0, - true, - ) - .await?; - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(FT_MAIN_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - init_ftoken_config, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn mint( - api: &GearApi, - program_id: &ActorId, - tx_id: u64, - recipient: &ActorId, - amount: u128, -) -> gclient::Result<()> { - let reply = send_message( - api, - program_id, - FTokenAction::Message { - transaction_id: tx_id, - payload: LogicAction::Mint { - recipient: *recipient, - amount, - }, - }, - ) - .await?; - - assert_ft_ok(&reply); - - Ok(()) -} - -#[allow(unused)] -pub async fn balance_of( - api: &GearApi, - program_id: &ActorId, - account: &ActorId, -) -> gclient::Result { - let reply = send_message(api, program_id, FTokenAction::GetBalance(*account)).await?; - - let FTokenEvent::Balance(balance) = - FTokenEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `FTokenEvent` data.") - else { - std::panic!("Unexpected invalid `FTokenEvent`."); - }; - - Ok(balance) -} - -pub async fn approve( - api: &GearApi, - program_id: &ActorId, - tx_id: u64, - approved_account: &ActorId, - amount: u128, -) -> gclient::Result<()> { - let reply = send_message( - api, - program_id, - FTokenAction::Message { - transaction_id: tx_id, - payload: LogicAction::Approve { - approved_account: *approved_account, - amount, - }, - }, - ) - .await?; - - assert_ft_ok(&reply); - - Ok(()) -} - -async fn send_message( - api: &GearApi, - program_id: &ActorId, - payload: FTokenAction, -) -> gclient::Result> { - let mut listener = api.subscribe().await?; - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, 0) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - Ok(reply_data_result.expect("Unexpected invalid reply.")) -} - -fn assert_ft_ok(reply: &[u8]) { - #[allow(clippy::useless_asref)] - let FTokenEvent::Ok = - FTokenEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `FTokenEvent` data.") - else { - std::panic!("Unexpected invalid `FTokenEvent`."); - }; -} diff --git a/contracts/dao/tests/utils_gclient/mod.rs b/contracts/dao/tests/utils_gclient/mod.rs deleted file mode 100644 index e3bbcccfe..000000000 --- a/contracts/dao/tests/utils_gclient/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod common; -pub mod dao; -pub mod ft; diff --git a/contracts/decentralized-git/Cargo.toml b/contracts/decentralized-git/Cargo.toml deleted file mode 100644 index 715879af5..000000000 --- a/contracts/decentralized-git/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "decentralized-git" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -decentralized-git-io.workspace = true -decentralized-git-user-io.workspace = true - -[build-dependencies] -decentralized-git-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/decentralized-git/README.md b/contracts/decentralized-git/README.md deleted file mode 100644 index f55d63656..000000000 --- a/contracts/decentralized-git/README.md +++ /dev/null @@ -1,10 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=decentralized-git/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/decentralized_git_io) - -# Decentralized Git - -### 🏗️ Building - -```sh -cargo b -r -p "decentralized-git*" -``` diff --git a/contracts/decentralized-git/build.rs b/contracts/decentralized-git/build.rs deleted file mode 100644 index 18fc51a7d..000000000 --- a/contracts/decentralized-git/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use decentralized_git_io::ProgramMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/decentralized-git/io/Cargo.toml b/contracts/decentralized-git/io/Cargo.toml deleted file mode 100644 index 6b3b9e78d..000000000 --- a/contracts/decentralized-git/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "decentralized-git-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/decentralized-git/io/src/lib.rs b/contracts/decentralized-git/io/src/lib.rs deleted file mode 100644 index 6722bd3a3..000000000 --- a/contracts/decentralized-git/io/src/lib.rs +++ /dev/null @@ -1,189 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, exec::block_timestamp, prelude::*, ActorId}; - -pub struct ProgramMetadata; - -impl Metadata for ProgramMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - pub name: String, - pub user_program_id: ActorId, - pub collaborator: BTreeMap, - pub branches: BTreeMap, -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitRepoProgram { - pub owner: ActorId, - pub name: String, -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RepoActionRequests { - Rename(String), - CreateBranch(String), - RenameBranch(RenameBranchInput), - DeleteBranch(DeleteBranchInput), - Push(PushInput), - // Merge(MergeInput), - // Rebase(RebaseInput), - // Checkout(CheckoutInput), - AddCollaborator(ActorId), - DeleteCollaborator(ActorId), -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RepoActionResponses { - Rename { msg: String }, - CreateBranch { msg: String }, - RenameBranch { msg: String }, - DeleteBranch { msg: String }, - Push { msg: Commit }, - // Merge{ msg: Branch }, - // Rebase{ msg: Branch }, - // Checkout{ msg: String }, - AddCollaborator { msg: String }, - DeleteCollaborator { msg: String }, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct RenameBranchInput { - pub id: String, - pub name: String, -} - -#[derive(Encode, Decode, TypeInfo, Debug, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Branch { - pub id: String, - pub owner: ActorId, - pub name: String, - pub commits: Vec, - pub created_at: u64, - pub updated_at: u64, -} - -#[derive(Encode, Decode, TypeInfo, Debug, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Commit { - pub id: String, - pub owner: ActorId, - pub hash: String, - pub created_at: u64, -} - -#[derive(Encode, Debug, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct CreateBranchInput { - pub id: String, - pub name: String, - pub owner: ActorId, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct DeleteBranchInput { - pub branch_id: String, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct PushInput { - pub branch_id: String, - pub hash: String, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct CheckoutInput { - pub name: String, - pub hash: Option, - pub is_new: bool, // for create branch by checkout action -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct MergeInput { - pub branch_name_from: String, - pub branch_name_to: String, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct RebaseInput { - pub branch_name_from: String, - pub branch_name_to: String, -} - -impl Branch { - pub fn new(create_branch_input: CreateBranchInput) -> Self { - Self { - id: create_branch_input.id, - name: create_branch_input.name, - owner: create_branch_input.owner, - commits: vec![], - created_at: block_timestamp(), - updated_at: block_timestamp(), - } - } - - pub fn rename(&mut self, new_name: String) -> String { - self.name = new_name; - - self.name.clone() - } - - pub fn add_commit(&mut self, commit: Commit) { - self.commits.push(commit); - } - - pub fn get_commits(&self) -> Vec { - self.commits.clone() - } - - pub fn is_exist_commit_by_hash(&self, hash: String) -> bool { - for c in self.commits.iter() { - if c.hash == hash { - return true; - } - } - - false - } - - pub fn get_commit_by_hash(&self, hash: String) -> Option { - self.commits - .iter() - .find(|&commit| commit.hash.eq(&hash)) - .cloned() - } -} diff --git a/contracts/decentralized-git/master/Cargo.toml b/contracts/decentralized-git/master/Cargo.toml deleted file mode 100644 index f6c804d4d..000000000 --- a/contracts/decentralized-git/master/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "decentralized-git-master" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -decentralized-git-master-io.workspace = true -decentralized-git-user-io.workspace = true - -[build-dependencies] -decentralized-git-master-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/decentralized-git/master/build.rs b/contracts/decentralized-git/master/build.rs deleted file mode 100644 index 0a467fde7..000000000 --- a/contracts/decentralized-git/master/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use decentralized_git_master_io::ProgramMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/decentralized-git/master/io/Cargo.toml b/contracts/decentralized-git/master/io/Cargo.toml deleted file mode 100644 index 97e6c1216..000000000 --- a/contracts/decentralized-git/master/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "decentralized-git-master-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/decentralized-git/master/io/src/lib.rs b/contracts/decentralized-git/master/io/src/lib.rs deleted file mode 100644 index 0c9ab7d40..000000000 --- a/contracts/decentralized-git/master/io/src/lib.rs +++ /dev/null @@ -1,59 +0,0 @@ -#![no_std] -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, prelude::*, ActorId, CodeId}; -// use chrono::{DateTime}; - -pub struct ProgramMetadata; - -impl Metadata for ProgramMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - // - pub state: BTreeMap, - // user program code id - pub user_prog_code_id: CodeId, - pub repo_prog_code_id: CodeId, -} - -#[derive(Debug, TypeInfo, Decode, Encode)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitProgram { - pub user_prog_code_id: CodeId, - pub repo_prog_code_id: CodeId, -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ActionRequest { - RegisterUser(RegisterUserInput), -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ActionResponse { - RegisterUser { id: ActorId }, -} - -#[derive(Debug, TypeInfo, Decode, Encode)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct RegisterUserInput { - pub first_name: String, - pub last_name: String, - pub username: String, - pub owner: Option, -} diff --git a/contracts/decentralized-git/master/src/lib.rs b/contracts/decentralized-git/master/src/lib.rs deleted file mode 100644 index 072af6dfd..000000000 --- a/contracts/decentralized-git/master/src/lib.rs +++ /dev/null @@ -1,98 +0,0 @@ -#![no_std] - -use decentralized_git_master_io::{ActionRequest, ActionResponse, InitProgram, RegisterUserInput}; -use decentralized_git_user_io::InitUserProgram; -use gstd::{ - collections::BTreeMap, - debug, - msg::{load, reply, source}, - prelude::*, - prog::ProgramGenerator, - ActorId, CodeId, -}; - -static mut CONTRACT: Option = None; - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - // - pub state: BTreeMap, - // user program code id - pub user_prog_code_id: CodeId, - pub repo_prog_code_id: CodeId, -} - -impl Program { - fn new(owner: ActorId, init_program: InitProgram) -> Self { - Self { - user_prog_code_id: init_program.user_prog_code_id, - repo_prog_code_id: init_program.repo_prog_code_id, - state: BTreeMap::new(), - owner, - } - } - - fn is_exist_user(&self, actor_id: ActorId) -> bool { - self.state.contains_key(&actor_id) - } - - fn init_user_prog(&self, register_user_input: RegisterUserInput) { - let payload = InitUserProgram { - owner: register_user_input.owner.unwrap(), - repo_code_id: self.repo_prog_code_id, - first_name: register_user_input.first_name, - last_name: register_user_input.last_name, - username: register_user_input.username, - }; - ProgramGenerator::create_program(self.user_prog_code_id, payload.encode(), 0).unwrap(); - } -} - -#[no_mangle] -unsafe extern fn init() { - let init_program_data: InitProgram = load().expect("Unable to decode init program"); - let owner = source(); - debug!("{:?} init program", init_program_data); - - let init_program = Program::new(owner, init_program_data); - - CONTRACT = Some(init_program); -} - -#[no_mangle] -extern fn handle() { - let new_msg: ActionRequest = load().expect("Unable to decode `ActionRequest`"); - debug!("{:?} message", new_msg); - - let git_program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - - match new_msg { - ActionRequest::RegisterUser(register_user_input) => { - // user actor_id - let actor_id = source(); - - if git_program.is_exist_user(actor_id) { - panic!("User already exists"); - } - - let input_data = RegisterUserInput { - owner: Some(actor_id), - ..register_user_input - }; - - git_program.init_user_prog(input_data); - git_program.state.insert(actor_id, actor_id); - - reply(ActionResponse::RegisterUser { id: actor_id }, 0).expect("Unable to reply"); - } - }; -} - -#[no_mangle] -extern fn state() { - let program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - reply(program, 0).expect("Failed to share state"); -} diff --git a/contracts/decentralized-git/master/state/Cargo.toml b/contracts/decentralized-git/master/state/Cargo.toml deleted file mode 100644 index 9514bfbc0..000000000 --- a/contracts/decentralized-git/master/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "decentralized-git-master-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -decentralized-git-master-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/decentralized-git/master/state/build.rs b/contracts/decentralized-git/master/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/decentralized-git/master/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/decentralized-git/master/state/src/lib.rs b/contracts/decentralized-git/master/state/src/lib.rs deleted file mode 100644 index 6a3c4ce9c..000000000 --- a/contracts/decentralized-git/master/state/src/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![no_std] -use decentralized_git_master_io::Program; -use gmeta::metawasm; -use gstd::{prelude::*, ActorId}; - -#[metawasm] -pub mod metafns { - pub type State = Program; - - pub fn get_program_data(state: State) -> Program { - state - } - - pub fn get_users(state: State) -> Vec { - let mut user_actor_ids: Vec = vec![]; - - for (_, id) in state.state { - user_actor_ids.push(id) - } - - user_actor_ids - } - - pub fn get_user(state: State, actor_id: ActorId) -> Option { - if !state.state.contains_key(&actor_id) { - panic!("User not found by actor id"); - } - - state.state.get(&actor_id).cloned() - } -} diff --git a/contracts/decentralized-git/src/lib.rs b/contracts/decentralized-git/src/lib.rs deleted file mode 100644 index 499978da0..000000000 --- a/contracts/decentralized-git/src/lib.rs +++ /dev/null @@ -1,327 +0,0 @@ -#![no_std] - -use decentralized_git_io::{ - Branch, Commit, CreateBranchInput, DeleteBranchInput, InitRepoProgram, RenameBranchInput, - RepoActionRequests, RepoActionResponses, -}; -use decentralized_git_user_io::{UserActionRequest, UserActionResponse}; -use gstd::{ - collections::BTreeMap, - debug, - exec::{block_timestamp, random}, - msg::{load, reply, send_for_reply_as, source}, - prelude::*, - ActorId, -}; - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - pub name: String, - pub user_program_id: ActorId, - pub collaborator: BTreeMap, - pub branches: BTreeMap, -} - -impl Program { - fn new(owner: ActorId, name: String, user_program_id: ActorId) -> Self { - Self { - owner, - name, - user_program_id, - collaborator: BTreeMap::new(), - branches: BTreeMap::new(), - } - } - - fn is_exist_branch_by_name(&self, name: String) -> bool { - for (_, br) in self.branches.iter() { - if br.name == name { - return true; - } - } - - false - } - - fn is_exist_branch(&self, id: String) -> bool { - for (_, br) in self.branches.iter() { - if br.id == id { - return true; - } - } - - false - } - - fn is_exist_collaborator(&self, actor_id: ActorId) -> bool { - if self.collaborator.contains_key(&actor_id) { - return true; - } - - false - } - - fn is_valid_user(&self, actor_id: ActorId) -> bool { - if self.owner == actor_id { - return true; - } - - if self.is_exist_collaborator(actor_id) { - return true; - } - - false - } - - fn add_collaborator(&mut self, actor_id: ActorId) { - self.collaborator.insert(actor_id, actor_id); - } - - fn delete_collaborator(&mut self, actor_id: ActorId) { - self.collaborator.remove(&actor_id); - } - - fn add_branch(&mut self, create_branch_input: CreateBranchInput) { - self.branches.insert( - create_branch_input.id.clone(), - Branch::new(create_branch_input), - ); - } - - fn rename_branch(&mut self, rename_branch_input: RenameBranchInput) { - if let Some(branch) = self.branches.get_mut(&rename_branch_input.id) { - if branch.id == rename_branch_input.id { - branch.rename(rename_branch_input.name); - } - } - } - - fn delete_branch(&mut self, delete_branch_input: DeleteBranchInput) { - self.branches.remove(&delete_branch_input.branch_id); - } - - fn push_commit(&mut self, branch_id: String, commit: Commit) { - if let Some(branch) = self.branches.get_mut(&branch_id) { - branch.add_commit(commit) - } - } - - async fn rename(&mut self, name: String, user_id: ActorId) { - if self.owner != user_id { - panic!("Access denied") - } - - let result = send_for_reply_as::( - self.user_program_id, - UserActionRequest::RenameRepository(name.clone()), - 0, - 0, - ) - .expect("Error in sending a message") - .await; - - let _ = match result { - Ok(UserActionResponse::Ok) => Ok(()), - _ => Err("Repository by name already exists"), - }; - - self.name = name - } -} - -static mut CONTRACT: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let init_msg: InitRepoProgram = load().expect("Unable to decode init program"); - debug!("{:?} init program msg", init_msg); - - let program = Program::new(init_msg.owner, init_msg.name, source()); - - unsafe { CONTRACT = Some(program) } -} - -#[gstd::async_main] -async fn main() { - let new_msg: RepoActionRequests = load().expect("Unable to decode `ActionRequest`"); - debug!("{:?} message", new_msg); - - let repo_program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - - match new_msg { - RepoActionRequests::Rename(name) => { - let user_id = source(); - - repo_program.rename(name, user_id).await; - reply( - RepoActionResponses::Rename { - msg: "Successfully rename repo".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - RepoActionRequests::CreateBranch(name) => { - let user_id = source(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - if repo_program.is_exist_branch_by_name(name.clone()) { - panic!("Already exists branch by name") - } - - let branch_input = CreateBranchInput { - owner: user_id, - id: gen_id(), - name, - }; - repo_program.add_branch(branch_input); - - reply( - RepoActionResponses::CreateBranch { - msg: "Successfully create branch".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - RepoActionRequests::RenameBranch(rename_branch_input) => { - let user_id = source(); - let branch_id = rename_branch_input.id.clone(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - if !repo_program.is_exist_branch(branch_id) { - panic!("Invalid branch id") - } - - repo_program.rename_branch(rename_branch_input); - - reply( - RepoActionResponses::RenameBranch { - msg: "Successfully rename branch".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - RepoActionRequests::DeleteBranch(delete_branch_input) => { - let user_id = source(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - if !repo_program.is_exist_branch(delete_branch_input.branch_id.clone()) { - panic!("Invalid branch id") - } - - repo_program.delete_branch(delete_branch_input); - - reply( - RepoActionResponses::DeleteBranch { - msg: "Successfully delete branch".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - RepoActionRequests::Push(push_input) => { - let user_id = source(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - if !repo_program.is_exist_branch(push_input.branch_id.clone()) { - panic!("Invalid branch id") - } - - let commit = Commit { - id: gen_id(), - owner: user_id, - hash: push_input.hash, - created_at: block_timestamp(), - }; - repo_program.push_commit(push_input.branch_id, commit.clone()); - - reply(RepoActionResponses::Push { msg: commit }, 0).expect("Unable to reply"); - } - - RepoActionRequests::AddCollaborator(actor_id) => { - let user_id = source(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - if actor_id == repo_program.owner { - panic!("Sorry you can't add your self as a collaborator") - } - - repo_program.add_collaborator(actor_id); - - reply( - RepoActionResponses::AddCollaborator { - msg: "Successfully add collaborator".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - RepoActionRequests::DeleteCollaborator(actor_id) => { - let user_id = source(); - - if !repo_program.is_valid_user(user_id) { - panic!("Access denied") - } - - repo_program.delete_collaborator(actor_id); - - reply( - RepoActionResponses::AddCollaborator { - msg: "Successfully delete collaborator".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - } -} - -#[no_mangle] -extern fn state() { - let program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - reply(program, 0).expect("Failed to share state"); -} - -static mut SEED: u8 = 0; - -fn gen_id() -> String { - let seed = unsafe { SEED }; - unsafe { SEED += 1 }; - let random_input: [u8; 32] = [seed; 32]; - let (random, _) = random(random_input).expect("Error in getting random number"); - let bytes = [random[0], random[1], random[2], random[3]]; - bytes_to_unique_string(&bytes) -} - -fn bytes_to_unique_string(bytes: &[u8; 4]) -> String { - let mut unique_string = String::new(); - for &byte in bytes.iter() { - unique_string.push_str(&format!("{:02x}", byte)); - } - unique_string -} diff --git a/contracts/decentralized-git/state/Cargo.toml b/contracts/decentralized-git/state/Cargo.toml deleted file mode 100644 index 847cb1f43..000000000 --- a/contracts/decentralized-git/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "decentralized-git-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -decentralized-git-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/decentralized-git/state/build.rs b/contracts/decentralized-git/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/decentralized-git/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/decentralized-git/state/src/lib.rs b/contracts/decentralized-git/state/src/lib.rs deleted file mode 100644 index 6a911654d..000000000 --- a/contracts/decentralized-git/state/src/lib.rs +++ /dev/null @@ -1,37 +0,0 @@ -#![no_std] -use decentralized_git_io::*; -use gmeta::metawasm; -use gstd::{prelude::*, ActorId}; - -#[metawasm] -pub mod metafns { - pub type State = Program; - - pub fn branch(state: State, branch_id: String) -> Option { - if let Some(b) = state.branches.get(&branch_id) { - return Some(b.clone()); - } - - None - } - - pub fn branches(state: State) -> Vec { - let mut result: Vec = vec![]; - - for (_, b) in state.branches.iter() { - result.push(b.clone()) - } - - result - } - - pub fn get_collaborators(state: State) -> Vec { - let mut response: Vec = vec![]; - - for (_, c) in state.collaborator.iter() { - response.push(*c) - } - - response - } -} diff --git a/contracts/decentralized-git/user/Cargo.toml b/contracts/decentralized-git/user/Cargo.toml deleted file mode 100644 index 37d07b02f..000000000 --- a/contracts/decentralized-git/user/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "decentralized-git-user" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -decentralized-git-user-io.workspace = true -decentralized-git-io.workspace = true - -[build-dependencies] -decentralized-git-user-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/decentralized-git/user/build.rs b/contracts/decentralized-git/user/build.rs deleted file mode 100644 index 1fa320947..000000000 --- a/contracts/decentralized-git/user/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use decentralized_git_user_io::ProgramMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/decentralized-git/user/io/Cargo.toml b/contracts/decentralized-git/user/io/Cargo.toml deleted file mode 100644 index 68aaa6e4f..000000000 --- a/contracts/decentralized-git/user/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "decentralized-git-user-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/decentralized-git/user/io/src/lib.rs b/contracts/decentralized-git/user/io/src/lib.rs deleted file mode 100644 index 73a2d4eb2..000000000 --- a/contracts/decentralized-git/user/io/src/lib.rs +++ /dev/null @@ -1,83 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, prelude::*, ActorId, CodeId}; - -pub struct ProgramMetadata; - -impl Metadata for ProgramMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - pub first_name: String, - pub last_name: String, - pub username: String, - pub repos: BTreeMap, - pub repo_code_id: ActorId, -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitUserProgram { - pub owner: ActorId, - pub first_name: String, - pub last_name: String, - pub username: String, - pub repo_code_id: CodeId, -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum UserActionRequest { - UpdateUserData(UpdateUserDataInput), - CreateRepository(CreateRepositoryInput), - RenameRepository(String), -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum UserActionResponse { - UpdateUserData { message: String }, - CreateRepository { message: String }, - Ok, - Err, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct UpdateUserDataInput { - pub first_name: String, - pub last_name: String, - pub username: String, -} - -#[derive(Encode, Debug, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct CreateRepositoryInput { - pub name: String, -} - -#[derive(Encode, Debug, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Repository { - pub id: ActorId, - pub name: String, - pub created_at: u64, - pub updated_at: u64, -} diff --git a/contracts/decentralized-git/user/src/lib.rs b/contracts/decentralized-git/user/src/lib.rs deleted file mode 100644 index be48752ae..000000000 --- a/contracts/decentralized-git/user/src/lib.rs +++ /dev/null @@ -1,176 +0,0 @@ -#![no_std] - -use decentralized_git_io::InitRepoProgram; -use decentralized_git_user_io::{ - InitUserProgram, Repository, UpdateUserDataInput, UserActionRequest, UserActionResponse, -}; -use gstd::{ - collections::BTreeMap, - debug, - exec::block_timestamp, - msg::{load, reply, source}, - prelude::*, - prog::ProgramGenerator, - ActorId, CodeId, -}; -// use uuid::{Uuid}; - -#[derive(Default, Encode, Decode, TypeInfo, Debug, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Program { - pub owner: ActorId, - pub first_name: String, - pub last_name: String, - pub username: String, - pub repos: BTreeMap, - pub repo_code_id: CodeId, -} - -impl Program { - fn new(init_program: InitUserProgram) -> Self { - Self { - owner: init_program.owner, - first_name: init_program.first_name, - last_name: init_program.last_name, - username: init_program.username, - repo_code_id: init_program.repo_code_id, - repos: BTreeMap::new(), - } - } - - fn update_data(&mut self, update_input: UpdateUserDataInput) -> Self { - self.first_name = update_input.first_name; - self.last_name = update_input.last_name; - self.username = update_input.username; - - self.clone() - } - - fn create_repo(&mut self, create_repo: InitRepoProgram) { - let result = - ProgramGenerator::create_program(self.repo_code_id, create_repo.encode(), 0).unwrap(); - - self.repos.insert( - result.1, - Repository { - id: result.1, - name: create_repo.name, - created_at: block_timestamp(), - updated_at: block_timestamp(), - }, - ); - } - - fn rename_repo(&mut self, repo_id: ActorId, name: String) { - if let Some(repo) = self.repos.get_mut(&repo_id) { - repo.name = name - } - } - - fn get_repo(&self, repo_id: ActorId) -> Option { - self.repos.get(&repo_id).cloned() - } - - fn get_repo_by_name(&self, name: String) -> Option { - for (_, r) in self.repos.iter() { - if r.name == name { - return Some(r.clone()); - } - } - - None - } -} - -static mut CONTRACT: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let init_msg: InitUserProgram = load().expect("Unable to decode init program"); - debug!("{:?} init program msg", init_msg); - - let program = Program::new(init_msg); - - unsafe { CONTRACT = Some(program) } -} - -#[no_mangle] -extern fn handle() { - let new_msg: UserActionRequest = load().expect("Unable to decode `ActionRequest`"); - debug!("{:?} message", new_msg); - - let user_program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - - match new_msg { - UserActionRequest::UpdateUserData(update_input) => { - // user actor_id - let actor_id = source(); - - if actor_id != user_program.owner { - panic!("Access denied") - } - - user_program.update_data(update_input); - - reply( - UserActionResponse::UpdateUserData { - message: "successfully update data".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - UserActionRequest::CreateRepository(create_repo_input) => { - // user actor_id - let actor_id = source(); - - if actor_id != user_program.owner { - panic!("Access denied") - } - - user_program.create_repo(InitRepoProgram { - owner: actor_id, - name: create_repo_input.name, - }); - - reply( - UserActionResponse::CreateRepository { - message: "Successfully create repository dapp".to_string(), - }, - 0, - ) - .expect("Unable to reply"); - } - - UserActionRequest::RenameRepository(name) => { - let actor_id = source(); - let repo_by_name = user_program.get_repo_by_name(name.clone()); - - if let Some(repo_by_name) = repo_by_name { - if repo_by_name.id != actor_id { - panic!("Already exists repository by name") - } - } - - let repo = user_program.get_repo(actor_id); - - if let Some(repo) = repo { - if repo.id == actor_id { - user_program.rename_repo(actor_id, name); - } else { - reply(UserActionResponse::Err, 0).expect("Unable to reply"); - } - } - - reply(UserActionResponse::Ok, 0).expect("Unable to reply"); - } - } -} - -#[no_mangle] -extern fn state() { - let program = unsafe { CONTRACT.get_or_insert(Default::default()) }; - reply(program, 0).expect("Failed to share state"); -} diff --git a/contracts/decentralized-git/user/state/Cargo.toml b/contracts/decentralized-git/user/state/Cargo.toml deleted file mode 100644 index 2bab334f2..000000000 --- a/contracts/decentralized-git/user/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "decentralized-git-user-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -decentralized-git-user-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/decentralized-git/user/state/build.rs b/contracts/decentralized-git/user/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/decentralized-git/user/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/decentralized-git/user/state/src/lib.rs b/contracts/decentralized-git/user/state/src/lib.rs deleted file mode 100644 index 8d13aa835..000000000 --- a/contracts/decentralized-git/user/state/src/lib.rs +++ /dev/null @@ -1,23 +0,0 @@ -#![no_std] -use decentralized_git_user_io::*; -use gmeta::metawasm; -use gstd::prelude::*; - -#[metawasm] -pub mod metafns { - pub type State = Program; - - pub fn get_program_data(state: State) -> Program { - state - } - - pub fn get_user_repos(state: State) -> Vec { - let mut repos: Vec = vec![]; - - for (_, repo) in state.repos.iter() { - repos.push(repo.clone()) - } - - repos - } -} diff --git a/contracts/dex/Cargo.toml b/contracts/dex/Cargo.toml deleted file mode 100644 index d113fd258..000000000 --- a/contracts/dex/Cargo.toml +++ /dev/null @@ -1,34 +0,0 @@ -[package] -name = "dex" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -dex-factory-io.workspace = true -gstd.workspace = true -dex-io.workspace = true -gear-lib.workspace = true -sharded-fungible-token-io.workspace = true -primitive-types.workspace = true - -[dev-dependencies] -gtest.workspace = true -gclient.workspace = true -gstd.workspace = true -gear-core.workspace = true -sp-core-hashing.workspace = true -tokio.workspace = true - -# External binaries - -dex-factory.workspace = true -dex-state.workspace = true -dex-factory-state.workspace = true -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -dex-io.workspace = true diff --git a/contracts/dex/README.md b/contracts/dex/README.md deleted file mode 100644 index 6955f313b..000000000 --- a/contracts/dex/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=dex/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/dex_io) - -# [DEX (Decentralized Exchange)](https://wiki.gear-tech.io/docs/examples/DeFi/dex) - -### 🏗️ Building - -```sh -cargo b -r -p "dex*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "dex*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "dex*" -``` diff --git a/contracts/dex/build.rs b/contracts/dex/build.rs deleted file mode 100644 index 50422cdca..000000000 --- a/contracts/dex/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dex_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dex/factory/Cargo.toml b/contracts/dex/factory/Cargo.toml deleted file mode 100644 index f96baab3e..000000000 --- a/contracts/dex/factory/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "dex-factory" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -dex-factory-io.workspace = true -dex-io.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -dex-factory-io.workspace = true diff --git a/contracts/dex/factory/build.rs b/contracts/dex/factory/build.rs deleted file mode 100644 index 0b12248dd..000000000 --- a/contracts/dex/factory/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dex_factory_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dex/factory/io/Cargo.toml b/contracts/dex/factory/io/Cargo.toml deleted file mode 100644 index 66896a8e1..000000000 --- a/contracts/dex/factory/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "dex-factory-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -dex-io.workspace = true diff --git a/contracts/dex/factory/io/src/lib.rs b/contracts/dex/factory/io/src/lib.rs deleted file mode 100644 index 56aedc766..000000000 --- a/contracts/dex/factory/io/src/lib.rs +++ /dev/null @@ -1,164 +0,0 @@ -#![no_std] - -use gmeta::{InOut, Metadata, Out}; -use gstd::{errors::Error as GstdError, prelude::*, ActorId, CodeId}; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = InOut>; - type Handle = InOut>; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -/// The contract state. -/// -/// For more info about fields, see [`Initialize`]. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub pair: CodeId, - pub fee_to: ActorId, - pub fee_to_setter: ActorId, - pub pairs: Vec<((ActorId, ActorId), ActorId)>, -} - -impl State { - pub fn pair(&self, mut pair: (ActorId, ActorId)) -> ActorId { - if pair.1 > pair.0 { - pair = (pair.1, pair.0); - } - - self.pairs - .iter() - .find_map(|(existing_pair, actor)| (*existing_pair == pair).then_some(*actor)) - .unwrap_or_default() - } -} - -/// Initializes the contract. -#[derive( - Default, Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Initialize { - /// The actor that'll receive the 0.05% commission per trade. - /// - /// If it'll equal to [`ActorId::zero()`], the commission will be disabled. - pub fee_to: ActorId, - /// The actor that'll have the right to set `fee_to` & `fee_to_setter`. - pub fee_to_setter: ActorId, - /// The identifier of the Pair contract. - pub pair: CodeId, -} - -/// Sends the contract info about what it should do. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Action { - /// Creates a Pair contract instance from a pair of - /// [SFT](https://github.com/gear-dapps/sharded-fungible-token) - /// [`ActorId`]s. - /// - /// # Requirements: - /// - [`ActorId`]s mustn't be identical. - /// - [`ActorId`]s mustn't equal to [`ActorId::zero()`]. - /// - Pair with given [`ActorId`]s mustn't already exist. - /// - /// On success, replies with [`Event::PairCreated`]. - CreatePair(ActorId, ActorId), - - /// Sets [`ActorId`] of the fee receiver (`fee_to`). - /// - /// Setting the fee receiver to [`ActorId::zero()`] disables the 0.05% - /// commission. - /// - /// # Requirements: - /// - [`msg::source`](gstd::msg::source) must have the right to set the fee - /// receiver (must be equal to `fee_to_setter`). - /// - /// On success, replies with [`Event::FeeToSet`]. - FeeTo(ActorId), - - /// Sets [`ActorId`] that'll have the right to set `fee_to` & - /// `fee_to_setter`. - /// - /// # Requirements: - /// - [`msg::source`](gstd::msg::source) must be equal to current - /// `fee_to_setter`. - /// - /// On success, replies with [`Event::FeeToSetterSet`]. - FeeToSetter(ActorId), - - /// Gets [`ActorId`] of the current fee receiver. - /// - /// If it equals [`ActorId::zero()`], the 0.05% commission is disabled. - /// - /// On success, replies with [`Event::FeeToSet`]. - GetFeeTo, -} - -/// A result of successfully processed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - /// Should be returned from [`Action::CreatePair`]. - PairCreated { - /// A pair of SFT [`ActorId`]s. - token_pair: (ActorId, ActorId), - /// [`ActorId`] of a created Pair contract. - pair_actor: ActorId, - /// A number of Pair contracts (including a created one) inside the - /// Factory contract. - pair_number: u32, - }, - - /// Should be returned from [`Action::FeeToSetter`]. - FeeToSetterSet( - /// New `fee_to_setter`. - ActorId, - ), - - /// Should be returned from [`Action::FeeTo`]. - FeeToSet( - /// New `fee_to`. - ActorId, - ), -} - -/// Error variants of failed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - /// See [`GstdError`]. - GstdError(String), - /// [`msg::source()`](gstd::msg::source) doesn't equal to `fee_to_setter`. - AccessRestricted, - /// [`ActorId::zero()`] was found where it's forbidden. - ZeroActorId, - /// SFT [`ActorId`]s in a given pair to create the Pair contract are equal. - IdenticalTokens, - /// A pair contract with given SFT [`ActorId`]s already exist. - PairExist, - PairCreationFailed(dex_io::Error), -} - -impl From for Error { - fn from(error: GstdError) -> Self { - Self::GstdError(error.to_string()) - } -} - -impl From for Error { - fn from(error: dex_io::Error) -> Self { - Self::PairCreationFailed(error) - } -} diff --git a/contracts/dex/factory/src/lib.rs b/contracts/dex/factory/src/lib.rs deleted file mode 100644 index a68a176c4..000000000 --- a/contracts/dex/factory/src/lib.rs +++ /dev/null @@ -1,164 +0,0 @@ -#![no_std] - -use dex_factory_io::*; -use gstd::{ - collections::HashMap, errors::CoreError, exec, msg, prelude::*, prog::ProgramGenerator, - ActorId, CodeId, MessageId, -}; - -struct Contract { - pair: CodeId, - fee_to: ActorId, - fee_to_setter: ActorId, - pairs: HashMap<(ActorId, ActorId), ActorId>, -} - -static mut STATE: Option = None; - -impl Contract { - fn check_fee_to_setter(&self) -> Result<(), Error> { - if self.fee_to_setter == msg::source() { - Ok(()) - } else { - Err(Error::AccessRestricted) - } - } - - fn set_fee_to_setter(&mut self, actor: ActorId) -> Result { - self.check_fee_to_setter()?; - - if actor.is_zero() { - return Err(Error::ZeroActorId); - } - - self.fee_to_setter = actor; - - Ok(Event::FeeToSetterSet(actor)) - } - - fn set_fee_to(&mut self, actor: ActorId) -> Result { - self.check_fee_to_setter()?; - - self.fee_to = actor; - - Ok(Event::FeeToSet(actor)) - } - - async fn create_pair(&mut self, token_a: ActorId, token_b: ActorId) -> Result { - if token_a == token_b { - return Err(Error::IdenticalTokens); - } - - if token_a.is_zero() || token_b.is_zero() { - return Err(Error::ZeroActorId); - } - - let token_pair = if token_b > token_a { - (token_b, token_a) - } else { - (token_a, token_b) - }; - - if self.pairs.contains_key(&token_pair) { - return Err(Error::PairExist); - } - - let (pair_actor, result): (_, Result<(), dex_io::Error>) = - ProgramGenerator::create_program_for_reply_as( - self.pair, - dex_io::Initialize { - pair: token_pair, - factory: exec::program_id(), - }, - 0, - 0, - ) - .unwrap() - .await - .unwrap(); - - result?; - - self.pairs.insert(token_pair, pair_actor); - - Ok(Event::PairCreated { - token_pair, - pair_actor, - pair_number: self.pairs.len().try_into().unwrap(), - }) - } -} - -#[no_mangle] -extern fn init() { - let result = process_init(); - let is_err = result.is_err(); - - reply(result).expect("failed to encode or reply from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } -} - -fn process_init() -> Result<(), Error> { - let Initialize { - fee_to, - pair, - fee_to_setter, - } = msg::load()?; - - unsafe { - STATE = Some(Contract { - pair, - fee_to, - fee_to_setter, - pairs: HashMap::new(), - }); - }; - - Ok(()) -} - -#[gstd::async_main] -async fn main() { - reply(process_handle().await).expect("failed to encode or reply `handle()`"); -} - -async fn process_handle() -> Result { - let action: Action = msg::load()?; - let contract = state_mut(); - - match action { - Action::FeeToSetter(actor) => contract.set_fee_to_setter(actor), - Action::FeeTo(actor) => contract.set_fee_to(actor), - Action::CreatePair(token_a, token_b) => contract.create_pair(token_a, token_b).await, - Action::GetFeeTo => Ok(Event::FeeToSet(contract.fee_to)), - } -} - -fn state_mut() -> &'static mut Contract { - unsafe { STATE.as_mut().expect("state isn't initialized") } -} - -#[no_mangle] -extern fn state() { - let Contract { - pair, - fee_to, - fee_to_setter: admin, - pairs, - } = state_mut(); - - reply(State { - pair: *pair, - fee_to_setter: *admin, - fee_to: *fee_to, - pairs: pairs.into_iter().map(|(k, v)| (*k, *v)).collect(), - }) - .expect("failed to encode or reply from `state()`"); -} - -fn reply(payload: impl Encode) -> Result { - msg::reply(payload, 0) -} diff --git a/contracts/dex/factory/state/Cargo.toml b/contracts/dex/factory/state/Cargo.toml deleted file mode 100644 index d9299943f..000000000 --- a/contracts/dex/factory/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "dex-factory-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dex-factory-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dex/factory/state/build.rs b/contracts/dex/factory/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dex/factory/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dex/factory/state/src/lib.rs b/contracts/dex/factory/state/src/lib.rs deleted file mode 100644 index ae0554e6d..000000000 --- a/contracts/dex/factory/state/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = dex_factory_io::State; - - pub fn fee_to(state: State) -> ActorId { - state.fee_to - } - - pub fn fee_to_setter(state: State) -> ActorId { - state.fee_to_setter - } - - pub fn pair(state: State, pair: (ActorId, ActorId)) -> ActorId { - state.pair(pair) - } - - pub fn all_pairs_length(state: State) -> u32 { - state.pairs.len().try_into().unwrap() - } - - pub fn all_pairs(state: State) -> Vec<((ActorId, ActorId), ActorId)> { - state.pairs - } -} diff --git a/contracts/dex/io/Cargo.toml b/contracts/dex/io/Cargo.toml deleted file mode 100644 index 679fa2980..000000000 --- a/contracts/dex/io/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "dex-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -primitive-types.workspace = true -gear-lib.workspace = true diff --git a/contracts/dex/io/src/lib.rs b/contracts/dex/io/src/lib.rs deleted file mode 100644 index f35b3083a..000000000 --- a/contracts/dex/io/src/lib.rs +++ /dev/null @@ -1,490 +0,0 @@ -#![no_std] - -use gear_lib::tx_manager; -use gmeta::{InOut, Metadata, Out}; -use gstd::{errors::Error as GstdError, prelude::*, ActorId}; -use primitive_types::U256; - -pub use gear_lib::{ - tokens::{ - fungible::{encodable::FTState, FTError, FTTransfer}, - types::Amount, - }, - tx_manager::TransactionManagerError, -}; - -/// The minimal liquidity amount. -/// -/// To ameliorate rounding errors and increase the theoretical minimum tick size -/// for liquidity provision, the contract burns this amount of liquidity tokens -/// on the first mint (first [`InnerAction::AddLiquidity`]). -pub const MINIMUM_LIQUIDITY: u64 = 10u64.pow(3); - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = InOut>; - type Handle = InOut>; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -/// Initializes the contract. -#[derive( - Default, Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Initialize { - pub pair: (ActorId, ActorId), - pub factory: ActorId, -} - -/// The contract state. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - /// [`ActorId`] of the Factory contract from which [`ActorId`] of the fee - /// receiver (`fee_to`) is obtained. - pub factory: ActorId, - - /// The pair of SFT [ActorId]s that are used for swaps. - pub token: (ActorId, ActorId), - /// The record of tokens reserve in the SFT pair (`token`). - pub reserve: (u128, u128), - /// - pub cumulative_price: (U256, U256), - /// A timestamp of the last block where `reserve`s were changed. - pub last_block_ts: u64, - /// A product of `reserve`s. Used for the 0.05% commission calculation. - pub k_last: U256, - pub ft_state: FTState, - - pub cached_actions: Vec<(ActorId, CachedAction)>, -} - -/// A part of [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum InnerAction { - /// Adds liquidity to the contract from [`msg::source()`](gstd::msg::source)'s fungible tokens - /// and mints liquidity tokens to it. - /// - /// # Requirements - /// - `amount_a_desired` & `amount_b_desired` mustn't equal to 0. - /// - On the first addition (first mint), a resulted amount of pool tokens - /// must be more than [`MINIMUM_LIQUIDITY`]. - /// - /// On success, replies with [`Event::AddedLiquidity`]. - AddLiquidity { - /// An amount of the A tokens to add as liquidity if the B/A price is <= - /// `amount_b_desired`/`amount_a_desired` (A depreciates). - amount_a_desired: u128, - /// An amount of the B tokens to add as liquidity if the A/B price is <= - /// `amount_a_desired`/`amount_b_desired` (B depreciates). - amount_b_desired: u128, - /// Bounds an extent to which the B/A price can go up before this action - /// reverts. Must be <= `amount_a_desired`. - amount_a_min: u128, - /// Bounds an extent to which the A/B price can go up before this action - /// reverts. Must be <= `amount_b_desired`. - amount_b_min: u128, - /// A recipient of minted liquidity tokens. - to: ActorId, - /// Timestamp (in ms) after which this action will revert. - deadline: u64, - }, - - /// Removes liquidity from the contract by burning [`msg::source()`]'s - /// liquidity tokens and transferring an appropriate amount of fungible - /// tokens from the contract to it. - /// - /// # Requirements - /// - [`msg::source()`] must have the same or a greater amount of liquidity - /// tokens than a given one. - /// - /// On success, replies with [`Event::RemovedLiquidity`]. - /// - /// [`msg::source()`]: gstd::msg::source - RemoveLiquidity { - /// An amount of liquidity tokens to remove. - liquidity: Amount, - /// A minimum amount of the A tokens that must be received for this - /// action not to revert. - amount_a_min: u128, - /// A minimum amount of the B tokens that must be received for this - /// action not to revert. - amount_b_min: u128, - /// A recipient of returned fungible tokens. - to: ActorId, - /// Timestamp (in ms) after which this action will revert. - deadline: u64, - }, - - // Swaps an exact amount of input tokens for as many output tokens as - // possible. - /// - /// # Requirements - /// - `to` mustn't equal to the contract's SFT pair. - /// - `amount_in` mustn't equal to 0. - /// - /// On success, replies with [`Event::Swap`]. - SwapExactTokensForTokens { - swap_kind: SwapKind, - amount_in: u128, - /// A minimum amount of output tokens that must be received for this - /// action not to revert. - amount_out_min: u128, - /// A recipient of output tokens. - to: ActorId, - /// Timestamp (in ms) after which this action will revert. - deadline: u64, - }, - - /// Swaps an exact amount of output tokens for as few input tokens as - /// possible. - /// - /// # Requirements - /// - `to` mustn't equal to the contract's SFT pair. - /// - `amount_out` mustn't equal to 0. - /// - /// On success, replies with [`Event::Swap`]. - SwapTokensForExactTokens { - swap_kind: SwapKind, - amount_out: u128, - /// A maximum amount of input tokens that must be received for this - /// action not to revert. - amount_in_max: u128, - /// A recipient of output tokens. - to: ActorId, - /// Timestamp (in ms) after which this action will revert. - deadline: u64, - }, - - /// Syncs the contract's tokens reserve with actual contract's balances by - /// transferring excess tokens to some [`ActorId`]. - /// - /// On success, replies with [`Event::Skim`]. - Skim( - /// A recipient of excess tokens. - ActorId, - ), - - /// Syncs the contract's tokens reserve with actual contract's balances by - /// setting the reserve equal to the balances. - /// - /// On success, replies with [`Event::Sync`]. - Sync, - - /// Transfers liquidity tokens from [`msg::source()`]. - /// - /// # Requirements - /// - [`msg::source()`] must have the same or a greater amount of liquidity - /// tokens than a given one. - /// - /// On success, replies with [`Event::Transfer`]. - /// - /// [`msg::source()`]: gstd::msg::source - Transfer { to: ActorId, amount: Amount }, -} - -/// Sends the contract info about what it should do. -pub type Action = tx_manager::Action; - -/// A result of successfully processed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - /// Should be returned from [`InnerAction::AddLiquidity`]. - AddedLiquidity { - sender: ActorId, - /// An amount of the A token sent to the contract. - amount_a: u128, - /// An amount of the B token sent to the contract. - amount_b: u128, - /// An amount of liquidity tokens minted. - liquidity: Amount, - }, - /// Should be returned from [`InnerAction::RemoveLiquidity`]. - RemovedLiquidity { - sender: ActorId, - /// An amount of the A token returned from the contract. - amount_a: u128, - /// An amount of the B token returned from the contract. - amount_b: u128, - /// A recipient of returned fungible tokens. - to: ActorId, - }, - /// Should be returned from - /// [`InnerAction::SwapExactTokensForTokens`]/[`InnerAction::SwapTokensForExactTokens`]. - Swap { - kind: SwapKind, - sender: ActorId, - in_amount: u128, - out_amount: u128, - to: ActorId, - }, - /// Should be returned from [`InnerAction::Sync`]. - Sync { - /// The current amount of the A token in the contract's reserve. - reserve_a: u128, - /// The current amount of the B token in the contract's reserve. - reserve_b: u128, - }, - /// Should be returned from [`InnerAction::Skim`]. - Skim { - /// A skimmed amount of the A token. - amount_a: u128, - /// A skimmed amount of the A token. - amount_b: u128, - /// A recipient of skimmed tokens. - to: ActorId, - }, - /// Should be returned from [`InnerAction::Transfer`]. - Transfer(FTTransfer), -} - -impl From for Event { - fn from(value: FTTransfer) -> Self { - Self::Transfer(value) - } -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum SwapKind { - AForB, - BForA, -} - -/// Error variants of failed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - /// See [`GstdError`]. - GstdError(String), - /// An insufficient amount of the A or B token was provided. - InsufficientAmount, - /// A specified amount limit of the former tokens has been exceeded. - InsufficientFormerAmount, - /// A specified amount limit of the latter tokens has been exceeded. - InsufficientLatterAmount, - /// An insufficient amount of liquidity tokens was provided, or the contract - /// doesn't have enough of them to continue an action. - InsufficientLiquidity, - /// An invalid recipient was specified. - InvalidRecipient, - /// [`ActorId::zero()`] was found where it's forbidden. - ZeroActorId, - /// One of the contract's FT contracts failed to complete a transfer - /// action. - /// - /// Most often, the reason is that a user didn't give an approval to the - /// contract or didn't have enough tokens to transfer. - TransferFailed, - /// An overflow occurred during calculations. - Overflow, - /// A specified deadline for an action was exceeded. - DeadlineExceeded, - /// SFT [`ActorId`]s in a given pair to create the Pair contract are equal. - IdenticalTokens, - FTError(FTError), - /// The contract failed to get fee receiver (`fee_to`) [`ActorId`] from the - /// linked Factory contract. - FeeToGettingFailed, - TxCacheError(TransactionManagerError), -} - -impl From for Error { - fn from(error: GstdError) -> Self { - Self::GstdError(error.to_string()) - } -} - -impl From for Error { - fn from(error: TransactionManagerError) -> Self { - Self::TxCacheError(error) - } -} - -impl From for Error { - fn from(error: FTError) -> Self { - Self::FTError(error) - } -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum CachedAction { - Swap(u128), - AddLiquidity((u128, u128)), - RemovedLiquidity { amount: Amount, is_burned: bool }, - Other, -} - -#[doc(hidden)] -pub mod hidden { - use super::*; - - pub fn quote(amount: u128, reserve: (u128, u128)) -> Result { - if let Err(error) = perform_precalculate_check(amount, reserve) { - Err(error) - } else { - quote_unchecked(amount, reserve) - } - } - - pub fn quote_unchecked(amount: u128, reserve: (u128, u128)) -> Result { - let U256PairTuple(reserve) = reserve.into(); - - (U256::from(amount) * reserve.1 / reserve.0) - .try_into() - .map_or(Err(Error::Overflow), Ok) - } - - pub fn quote_reserve_unchecked(amount: u128, reserve: (u128, u128)) -> Result { - if amount == 0 { - Err(Error::InsufficientAmount) - } else { - quote_unchecked(amount, reserve) - } - } - - pub fn calculate_out_amount(in_amount: u128, reserve: (u128, u128)) -> Result { - perform_precalculate_check(in_amount, reserve)?; - - let amount_with_fee: U256 = U256::from(in_amount) * 997; - - amount_with_fee - .checked_mul(reserve.1.into()) - .map_or(Err(Error::Overflow), |numerator| { - // Shouldn't overflow. - let denominator = U256::from(reserve.0) * 1000 + amount_with_fee; - - // Shouldn't be more than u128::MAX, so casting doesn't lose data. - Ok((numerator / denominator).low_u128()) - }) - } - - pub fn calculate_in_amount(out_amount: u128, reserve: (u128, u128)) -> Result { - perform_precalculate_check(out_amount, reserve)?; - - // The `u64` suffix is needed for a faster conversion. - let numerator = - (U256::from(reserve.0) * U256::from(out_amount)).checked_mul(1000u64.into()); - - if let (Some(numerator), Some(amount)) = (numerator, reserve.1.checked_sub(out_amount)) { - if amount == 0 { - Err(Error::Overflow) - } else { - let denominator = U256::from(amount) * 997; - - // Adding 1 here to avoid abuse of the case when a calculated input - // amount will equal 0. - (numerator / denominator + 1) - .try_into() - .map_or(Err(Error::Overflow), Ok) - } - } else { - Err(Error::Overflow) - } - } - - pub const fn perform_precalculate_check( - amount: u128, - reserve: (u128, u128), - ) -> Result<(), Error> { - if reserve.0 == 0 || reserve.1 == 0 { - Err(Error::InsufficientLiquidity) - } else if amount == 0 { - Err(Error::InsufficientAmount) - } else { - Ok(()) - } - } - - pub struct U256PairTuple(pub (U256, U256)); - - impl From<(u128, u128)> for U256PairTuple { - fn from(value: (u128, u128)) -> Self { - Self((value.0.into(), value.1.into())) - } - } - - #[cfg(test)] - mod tests { - use super::{calculate_in_amount, calculate_out_amount, quote_unchecked, Error}; - - #[test] - fn quote() { - assert_eq!(quote_unchecked(5000, (10000, 10000)), Ok(5000)); - assert_eq!(quote_unchecked(1234, (54321, 12345)), Ok(280)); - } - - #[test] - fn calculate_oa() { - assert_eq!( - calculate_out_amount(0, (0, 1)), - Err(Error::InsufficientLiquidity) - ); - assert_eq!( - calculate_out_amount(0, (1, 0)), - Err(Error::InsufficientLiquidity) - ); - assert_eq!( - calculate_out_amount(0, (1, 1)), - Err(Error::InsufficientAmount) - ); - - assert_eq!( - calculate_out_amount(u128::MAX, (1, u128::MAX)), - Err(Error::Overflow) - ); - - // (10000 * 997) * 10000 // (10000 * 1000 + (10000 * 997)) - assert_eq!(calculate_out_amount(10000, (10000, 10000)), Ok(4992)); - // (1234 * 997) * 54321 // (12345 * 1000 + (1234 * 997)) - assert_eq!(calculate_out_amount(1234, (12345, 54321)), Ok(4922)); - } - - #[test] - fn calculate_ia() { - assert_eq!( - calculate_in_amount(0, (0, 1)), - Err(Error::InsufficientLiquidity) - ); - assert_eq!( - calculate_in_amount(0, (1, 0)), - Err(Error::InsufficientLiquidity) - ); - assert_eq!( - calculate_in_amount(0, (1, 1)), - Err(Error::InsufficientAmount) - ); - - assert_eq!( - calculate_in_amount(u128::MAX, (u128::MAX, 1)), - Err(Error::Overflow) - ); - // reserve.1 - out_amount == 0 - assert_eq!(calculate_in_amount(12345, (1, 12345)), Err(Error::Overflow)); - assert_eq!( - calculate_in_amount(u128::MAX / 100 - 1, (u128::MAX / 100, u128::MAX / 100)), - Err(Error::Overflow) - ); - - // 5000 * 10000 * 1000 // ((10000 - 5000) * 997) + 1 - assert_eq!(calculate_in_amount(5000, (10000, 10000)), Ok(10031)); - // 1234 * 12345 * 1000 // ((54321 - 1234) * 997) + 1 - assert_eq!(calculate_in_amount(1234, (12345, 54321)), Ok(288)); - } - } -} diff --git a/contracts/dex/src/lib.rs b/contracts/dex/src/lib.rs deleted file mode 100644 index 0d2203268..000000000 --- a/contracts/dex/src/lib.rs +++ /dev/null @@ -1,758 +0,0 @@ -#![no_std] - -use dex_factory_io::{Action as FactoryAction, Error as FactoryError, Event as FactoryEvent}; -use dex_io::{ - hidden::{ - calculate_in_amount, calculate_out_amount, quote, quote_reserve_unchecked, U256PairTuple, - }, - *, -}; -use gear_lib::{ - tokens::fungible::FTState, - tx_manager::{ActionKind, Stepper, TransactionManager}, -}; -use gstd::{errors::Result, exec, msg, prelude::*, ActorId}; -use primitive_types::U256; - -mod utils; - -fn state_mut() -> &'static mut (Contract, TransactionManager) { - unsafe { STATE.as_mut().expect("state isn't initialized") } -} - -static mut STATE: Option<(Contract, TransactionManager)> = None; - -#[derive(Default)] -struct Contract { - factory: ActorId, - - token: (ActorId, ActorId), - reserve: (u128, u128), - cumulative_price: (U256, U256), - last_block_ts: u64, - k_last: U256, - ft_state: FTState, -} - -impl Contract { - async fn add_liquidity( - &mut self, - (tx_manager, kind): (&mut TransactionManager, ActionKind), - msg_source: ActorId, - desired_amount: (u128, u128), - min_amount: (u128, u128), - to: ActorId, - ) -> Result { - // Calculating an input amount - let amount = if self.reserve == (0, 0) { - desired_amount - } else { - let optimal_amount_b = quote(desired_amount.0, self.reserve)?; - - if optimal_amount_b <= desired_amount.1 { - if optimal_amount_b < min_amount.1 { - return Err(Error::InsufficientLatterAmount); - } - - (desired_amount.0, optimal_amount_b) - } else { - let optimal_amount_a = - quote_reserve_unchecked(desired_amount.1, (self.reserve.1, self.reserve.0))?; - - if optimal_amount_a < min_amount.0 { - return Err(Error::InsufficientFormerAmount); - } - - (optimal_amount_a, desired_amount.1) - } - }; - - let mut tx_guard = tx_manager.acquire_transaction( - msg_source, - kind.to_tx_kind(CachedAction::AddLiquidity(amount)), - )?; - - tx_guard - .tx_data - .check_tx_data(|tx_data| tx_data == &CachedAction::AddLiquidity(amount))?; - - let balance = if let (Some(balance_a), Some(balance_b)) = ( - self.reserve.0.checked_add(amount.0), - self.reserve.1.checked_add(amount.1), - ) { - (balance_a, balance_b) - } else { - return Err(Error::Overflow); - }; - - let (is_fee_on, fee_receiver, fee) = self.calculate_fee().await?; - let U256PairTuple(amount_u256) = amount.into(); - let program_id = exec::program_id(); - - // Calculating liquidity - let (liquidity, event) = if self.ft_state.total_supply().is_zero() { - // First minting - - let liquidity = (amount_u256.0 * amount_u256.1) - .integer_sqrt() - .checked_sub(MINIMUM_LIQUIDITY.into()) - .ok_or(Error::InsufficientAmount)?; - - let event = self - .update_liquidity( - &mut tx_guard.stepper, - program_id, - msg_source, - amount, - balance, - liquidity, - ) - .await?; - - // Locking the `MINIMUM_LIQUIDITY` for safer calculations during - // further operations. - self.ft_state - .mint(program_id, MINIMUM_LIQUIDITY.into()) - .expect("unchecked condition occurred for `FTState`"); - - (liquidity, event) - } else { - // Subsequent mintings - - // Checking for an overflow on adding `fee` to `total_supply.` - let total_supply = self - .ft_state - .total_supply() - .checked_add(fee) - .ok_or(Error::Overflow)?; - let (Some(numerator_a), Some(numerator_b)) = ( - amount_u256.0.checked_mul(total_supply), - amount_u256.1.checked_mul(total_supply), - ) else { - return Err(Error::Overflow); - }; - let U256PairTuple(reserve) = self.reserve.into(); - let liquidity = cmp::min(numerator_a / reserve.0, numerator_b / reserve.1); - - // Checking for an overflow on adding `liquidity` to `total_supply.` - if total_supply.checked_add(liquidity).is_none() { - return Err(Error::Overflow); - } - - let event = self - .update_liquidity( - &mut tx_guard.stepper, - program_id, - msg_source, - amount, - balance, - liquidity, - ) - .await?; - - if !fee.is_zero() { - self.ft_state - .mint(fee_receiver, fee) - .expect("unchecked overflow occurred for `FTState`"); - } - - (liquidity, event) - }; - - if is_fee_on { - let U256PairTuple(balance) = balance.into(); - - self.k_last = balance.0 * balance.1; - } - - self.ft_state - .mint(to, liquidity) - .expect("unchecked condition occurred for `FTState`"); - - Ok(event) - } - - async fn update_liquidity( - &mut self, - stepper: &mut Stepper, - program_id: ActorId, - msg_source: ActorId, - amount: (u128, u128), - balance: (u128, u128), - liquidity: U256, - ) -> Result { - if liquidity.is_zero() { - return Err(Error::InsufficientLiquidity); - } - - utils::transfer_tokens(stepper, self.token.0, msg_source, program_id, amount.0).await?; - - if let Err(error) = - utils::transfer_tokens(stepper, self.token.1, msg_source, program_id, amount.1).await - { - utils::transfer_tokens(stepper, self.token.0, program_id, msg_source, amount.0).await?; - - Err(error) - } else { - self.update(balance); - - Ok(Event::AddedLiquidity { - sender: msg_source, - amount_a: amount.0, - amount_b: amount.1, - liquidity, - }) - } - } - - async fn calculate_fee(&self) -> Result<(bool, ActorId, U256), Error> { - let fee_to_result: Result = - utils::send(self.factory, FactoryAction::GetFeeTo) - .unwrap() - .await - .unwrap(); - let Ok(FactoryEvent::FeeToSet(fee_receiver)) = fee_to_result else { - return Err(Error::FeeToGettingFailed); - }; - - let is_fee_on = !fee_receiver.is_zero(); - let mut fee = U256::zero(); - - if is_fee_on && !self.k_last.is_zero() { - let U256PairTuple(reserve) = self.reserve.into(); - let root_k = (reserve.0 * reserve.1).integer_sqrt(); - let root_k_last = self.k_last.integer_sqrt(); - - if root_k > root_k_last { - let numerator = self - .ft_state - .total_supply() - .checked_mul(root_k - root_k_last) - .ok_or(Error::Overflow)?; - // Shouldn't overflow. - let denominator = root_k * 5 + root_k_last; - - fee = numerator / denominator; - } - } - - Ok((is_fee_on, fee_receiver, fee)) - } - - async fn remove_liquidity( - &mut self, - stepper: &mut Stepper, - is_burned: &mut bool, - msg_source: ActorId, - liquidity: U256, - min_amount: (u128, u128), - to: ActorId, - ) -> Result { - if *is_burned { - self.ft_state - .mint(msg_source, liquidity) - .expect("unexpected overflow occurred for `FTState`"); - *is_burned = false; - } - - if self.ft_state.balance_of(msg_source) < liquidity { - return Err(Error::InsufficientLiquidity); - } - - let (is_fee_on, fee_receiver, fee) = self.calculate_fee().await?; - let U256PairTuple(reserve) = self.reserve.into(); - - // Calculating an output amount - let amount = if let (Some(amount_a), Some(amount_b)) = ( - liquidity.checked_mul(reserve.0), - liquidity.checked_mul(reserve.1), - ) { - // Checking for an overflow on adding `fee` to `total_supply.` - if let Some(total_supply) = self.ft_state.total_supply().checked_add(fee) { - // Shouldn't be more than u128::MAX, so casting doesn't lose - // data. - ( - (amount_a / total_supply).low_u128(), - (amount_b / total_supply).low_u128(), - ) - } else { - return Err(Error::Overflow); - } - } else { - return Err(Error::Overflow); - }; - - if amount.0 == 0 || amount.1 == 0 { - return Err(Error::InsufficientLiquidity); - } - - if amount.0 < min_amount.0 { - return Err(Error::InsufficientFormerAmount); - } - - if amount.1 < min_amount.1 { - return Err(Error::InsufficientLatterAmount); - } - - self.ft_state - .burn(msg_source, liquidity) - .expect("unchecked overflow occurred for `FTState`"); - - *is_burned = true; - - let program_id = exec::program_id(); - - utils::transfer_tokens(stepper, self.token.0, program_id, to, amount.0).await?; - utils::transfer_tokens(stepper, self.token.1, program_id, to, amount.1).await?; - - let balance = (self.reserve.0 - amount.0, self.reserve.1 - amount.1); - - if is_fee_on { - if !fee.is_zero() { - self.ft_state - .mint(fee_receiver, fee) - .expect("unchecked overflow occurred for `FTState`"); - } - - let U256PairTuple(balance) = balance.into(); - - self.k_last = balance.0 * balance.1; - } - - self.update(balance); - - Ok(Event::RemovedLiquidity { - sender: msg_source, - amount_a: amount.0, - amount_b: amount.1, - to, - }) - } - - async fn skim(&self, stepper: &mut Stepper, to: ActorId) -> Result { - let program_id = exec::program_id(); - let contract_balance = self.balances(program_id).await?; - - let (Some(excess_a), Some(excess_b)) = ( - contract_balance.0.checked_sub(self.reserve.0), - contract_balance.1.checked_sub(self.reserve.1), - ) else { - return Err(Error::Overflow); - }; - - utils::transfer_tokens(stepper, self.token.0, program_id, to, excess_a).await?; - utils::transfer_tokens(stepper, self.token.1, program_id, to, excess_b).await?; - - Ok(Event::Skim { - amount_a: excess_a, - amount_b: excess_b, - to, - }) - } - - async fn sync(&mut self) -> Result { - let program_id = exec::program_id(); - let balance = self.balances(program_id).await?; - - self.update(balance); - - Ok(Event::Sync { - reserve_a: balance.0, - reserve_b: balance.1, - }) - } - - async fn balances(&self, program_id: ActorId) -> Result<(u128, u128)> { - Ok(( - utils::balance_of(self.token.0, program_id).await?, - utils::balance_of(self.token.1, program_id).await?, - )) - } - - fn update(&mut self, balance: (u128, u128)) { - let block_ts = exec::block_timestamp(); - let time_elapsed = block_ts - self.last_block_ts; - - if time_elapsed > 0 && self.reserve != (0, 0) { - let U256PairTuple(reserve) = self.reserve.into(); - let calculate_cp = |reserve: (U256, U256)| { - // The `u64` suffix is needed for a faster conversion. - ((reserve.1 << U256::from(128u64)) / reserve.0) - // TODO: replace `overflowing_mul` with `wrapping_mul`. - // At the moment "primitive-types" doesn't have this method. - .overflowing_mul(time_elapsed.into()) - .0 - }; - - self.cumulative_price.0 += calculate_cp(reserve); - self.cumulative_price.1 += calculate_cp((reserve.1, reserve.0)); - } - - self.reserve = balance; - self.last_block_ts = block_ts; - } - - fn swap_pattern(&self, kind: SwapKind) -> SwapPattern { - match kind { - SwapKind::AForB => SwapPattern { - token: self.token, - reserve: self.reserve, - normalize_balance: convert::identity, - }, - SwapKind::BForA => SwapPattern { - token: (self.token.1, self.token.0), - reserve: (self.reserve.1, self.reserve.0), - normalize_balance: |amount| (amount.1, amount.0), - }, - } - } - - async fn swap_exact_tokens_for_tokens( - &mut self, - stepper: &mut Stepper, - msg_source: ActorId, - in_amount: u128, - min_out_amount: u128, - to: ActorId, - kind: SwapKind, - ) -> Result { - self.check_recipient(to)?; - - let swap_pattern = self.swap_pattern(kind); - let out_amount = calculate_out_amount(in_amount, swap_pattern.reserve)?; - - if out_amount < min_out_amount { - return Err(Error::InsufficientLatterAmount); - } - - self.swap( - stepper, - msg_source, - kind, - (in_amount, out_amount), - to, - swap_pattern, - ) - .await - } - - fn check_recipient(&self, recipient: ActorId) -> Result<(), Error> { - if recipient == self.token.0 || recipient == self.token.1 { - Err(Error::InvalidRecipient) - } else { - Ok(()) - } - } - - async fn swap_tokens_for_exact_tokens( - &mut self, - (tx_manager, action_kind): (&mut TransactionManager, ActionKind), - msg_source: ActorId, - out_amount: u128, - max_in_amount: u128, - to: ActorId, - swap_kind: SwapKind, - ) -> Result { - self.check_recipient(to)?; - - let swap_pattern = self.swap_pattern(swap_kind); - let in_amount = calculate_in_amount(out_amount, swap_pattern.reserve)?; - - let mut tx_guard = tx_manager.acquire_transaction( - msg_source, - action_kind.to_tx_kind(CachedAction::Swap(in_amount)), - )?; - - tx_guard - .tx_data - .check_tx_data(|tx_data| tx_data == &CachedAction::Swap(in_amount))?; - - if in_amount > max_in_amount { - return Err(Error::InsufficientFormerAmount); - } - - self.swap( - &mut tx_guard.stepper, - msg_source, - swap_kind, - (in_amount, out_amount), - to, - swap_pattern, - ) - .await - } - - async fn swap( - &mut self, - stepper: &mut Stepper, - msg_source: ActorId, - kind: SwapKind, - (in_amount, out_amount): (u128, u128), - to: ActorId, - SwapPattern { - token: (in_token, out_token), - reserve, - normalize_balance, - }: SwapPattern, - ) -> Result { - let program_id = exec::program_id(); - - utils::transfer_tokens(stepper, in_token, msg_source, program_id, in_amount).await?; - - if let Err(error) = - utils::transfer_tokens(stepper, out_token, program_id, to, out_amount).await - { - utils::transfer_tokens(stepper, in_token, program_id, msg_source, in_amount).await?; - - return Err(error); - } - - self.update(normalize_balance(( - reserve.0 + in_amount, - reserve.1 - out_amount, - ))); - - Ok(Event::Swap { - sender: msg_source, - in_amount, - out_amount, - to, - kind, - }) - } -} - -struct SwapPattern { - token: (ActorId, ActorId), - reserve: (u128, u128), - normalize_balance: fn((u128, u128)) -> (u128, u128), -} - -fn check_deadline(deadline: u64) -> Result<(), Error> { - if exec::block_timestamp() > deadline { - Err(Error::DeadlineExceeded) - } else { - Ok(()) - } -} - -#[no_mangle] -extern fn init() { - let result = process_init(); - let is_err = result.is_err(); - - msg::reply(result, 0).expect("failed to encode or reply from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } -} - -fn process_init() -> Result<(), Error> { - let Initialize { - pair: token, - factory, - } = msg::load()?; - - if token.0.is_zero() || token.1.is_zero() { - return Err(Error::ZeroActorId); - } - - if token.0 == token.1 { - return Err(Error::IdenticalTokens); - } - - unsafe { - STATE = Some(( - Contract { - token, - factory, - ..Default::default() - }, - TransactionManager::default(), - )); - }; - - Ok(()) -} - -#[gstd::async_main] -async fn main() { - msg::reply(process_handle().await, 0).expect("failed to encode or reply `handle()`"); -} - -async fn process_handle() -> Result { - let Action { - action, - kind: action_kind, - } = msg::load()?; - let (contract, tx_manager) = state_mut(); - let msg_source = msg::source(); - - match action { - InnerAction::AddLiquidity { - amount_a_desired, - amount_b_desired, - amount_a_min, - amount_b_min, - to, - deadline, - } => { - check_deadline(deadline)?; - - contract - .add_liquidity( - (tx_manager, action_kind), - msg_source, - (amount_a_desired, amount_b_desired), - (amount_a_min, amount_b_min), - to, - ) - .await - } - InnerAction::RemoveLiquidity { - liquidity, - amount_a_min, - amount_b_min, - to, - deadline, - } => { - let mut tx_guard = tx_manager.acquire_transaction( - msg_source, - action_kind.to_tx_kind(CachedAction::RemovedLiquidity { - amount: liquidity, - is_burned: false, - }), - )?; - - let is_burned = tx_guard.tx_data.check_and_get_tx_data(|tx_data| { - if let CachedAction::RemovedLiquidity { amount, is_burned } = tx_data { - if *amount == liquidity { - Some(is_burned) - } else { - None - } - } else { - None - } - })?; - - check_deadline(deadline)?; - - contract - .remove_liquidity( - &mut tx_guard.stepper, - is_burned, - msg_source, - liquidity, - (amount_a_min, amount_b_min), - to, - ) - .await - } - InnerAction::SwapExactTokensForTokens { - amount_in, - amount_out_min, - to, - deadline, - swap_kind, - } => { - let mut tx_guard = tx_manager.acquire_transaction( - msg_source, - action_kind.to_tx_kind(CachedAction::Swap(amount_in)), - )?; - - tx_guard - .tx_data - .check_tx_data(|tx_data| *tx_data == CachedAction::Swap(amount_in))?; - - check_deadline(deadline)?; - - contract - .swap_exact_tokens_for_tokens( - &mut tx_guard.stepper, - msg_source, - amount_in, - amount_out_min, - to, - swap_kind, - ) - .await - } - InnerAction::SwapTokensForExactTokens { - amount_out, - amount_in_max, - to, - deadline, - swap_kind, - } => { - check_deadline(deadline)?; - - contract - .swap_tokens_for_exact_tokens( - (tx_manager, action_kind), - msg_source, - amount_out, - amount_in_max, - to, - swap_kind, - ) - .await - } - InnerAction::Skim(to) => { - let mut tx_guard = tx_manager - .acquire_transaction(msg_source, action_kind.to_tx_kind(CachedAction::Other))?; - - tx_guard - .tx_data - .check_tx_data(|tx_data| tx_data == &CachedAction::Other)?; - - contract.skim(&mut tx_guard.stepper, to).await - } - InnerAction::Sync => contract.sync().await, - InnerAction::Transfer { to, amount } => contract - .ft_state - .transfer(to, amount) - .map(Into::into) - .map_err(Into::into), - } -} - -#[no_mangle] -extern fn state() { - let ( - Contract { - factory, - - token, - reserve, - cumulative_price, - last_block_ts, - k_last, - ft_state, - }, - tx_manager, - ) = state_mut(); - - msg::reply( - State { - factory: *factory, - - token: *token, - reserve: *reserve, - cumulative_price: *cumulative_price, - - last_block_ts: *last_block_ts, - k_last: *k_last, - - ft_state: ft_state.clone().into(), - - cached_actions: tx_manager - .cached_transactions() - .map(|(k, v)| (*k, *v)) - .collect(), - }, - 0, - ) - .expect("failed to encode or reply from `state()`"); -} diff --git a/contracts/dex/src/utils.rs b/contracts/dex/src/utils.rs deleted file mode 100644 index 476573cc9..000000000 --- a/contracts/dex/src/utils.rs +++ /dev/null @@ -1,51 +0,0 @@ -use dex_io::*; -use gear_lib::tx_manager::Stepper; -use gstd::{ - errors::CoreError, - msg::{self, CodecMessageFuture}, - prelude::*, - ActorId, -}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -pub fn send( - to: ActorId, - payload: impl Encode, -) -> Result, CoreError> { - msg::send_for_reply_as(to, payload, 0, 0) -} - -pub async fn transfer_tokens( - stepper: &mut Stepper, - token: ActorId, - sender: ActorId, - recipient: ActorId, - amount: u128, -) -> Result<(), Error> { - let payload = FTokenAction::Message { - transaction_id: stepper.step()?, - payload: LogicAction::Transfer { - sender, - recipient, - amount, - }, - }; - - match send(token, payload).unwrap().await.unwrap() { - FTokenEvent::Ok => Ok(()), - FTokenEvent::Err => Err(Error::TransferFailed), - _ => unreachable!("received an unexpected `FTokenEvent` variant"), - } -} - -pub async fn balance_of(token: ActorId, actor: ActorId) -> Result { - if let FTokenEvent::Balance(balance) = send(token, FTokenAction::GetBalance(actor)) - .unwrap() - .await - .unwrap() - { - Ok(balance) - } else { - unreachable!("received an unexpected `FTokenEvent` variant"); - } -} diff --git a/contracts/dex/state/Cargo.toml b/contracts/dex/state/Cargo.toml deleted file mode 100644 index 52095f315..000000000 --- a/contracts/dex/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "dex-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dex-io.workspace = true -primitive-types.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dex/state/build.rs b/contracts/dex/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dex/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dex/state/src/lib.rs b/contracts/dex/state/src/lib.rs deleted file mode 100644 index 64643b0a7..000000000 --- a/contracts/dex/state/src/lib.rs +++ /dev/null @@ -1,76 +0,0 @@ -#![no_std] - -use dex_io::{ - hidden::{calculate_in_amount, calculate_out_amount, quote}, - *, -}; -use gstd::{prelude::*, ActorId}; -use primitive_types::U256; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[gmeta::metawasm] -pub mod metafns { - pub type State = dex_io::State; - - pub fn token(state: State) -> (ActorId, ActorId) { - state.token - } - - pub fn reserve(state: State) -> (u128, u128) { - state.reserve - } - - pub fn price(state: State) -> (U256, U256) { - state.cumulative_price - } - - pub fn ft_state(state: State) -> FTState { - state.ft_state - } - - pub fn balance_of(state: State, actor: ActorId) -> U256 { - state.ft_state.balance_of(actor) - } - - pub fn factory(state: State) -> ActorId { - state.factory - } - - pub fn is_action_cached(state: State, actor: ActorId, action: CachedAction) -> bool { - state.cached_actions.contains(&(actor, action)) - } - - pub fn quote(state: State, swap_kind: SwapKind, amount: u128) -> Result { - match swap_kind { - SwapKind::AForB => super::quote(amount, state.reserve), - SwapKind::BForA => super::quote(amount, (state.reserve.1, state.reserve.0)), - } - } - - pub fn calculate_out_amount( - state: State, - swap_kind: SwapKind, - in_amount: u128, - ) -> Result { - match swap_kind { - SwapKind::AForB => super::calculate_out_amount(in_amount, state.reserve), - SwapKind::BForA => { - super::calculate_out_amount(in_amount, (state.reserve.1, state.reserve.0)) - } - } - } - - pub fn calculate_in_amount( - state: State, - swap_kind: SwapKind, - out_amount: u128, - ) -> Result { - match swap_kind { - SwapKind::AForB => super::calculate_in_amount(out_amount, state.reserve), - SwapKind::BForA => { - super::calculate_in_amount(out_amount, (state.reserve.1, state.reserve.0)) - } - } - } -} diff --git a/contracts/dex/tests/state_consistency.rs b/contracts/dex/tests/state_consistency.rs deleted file mode 100644 index 6bafdc4b3..000000000 --- a/contracts/dex/tests/state_consistency.rs +++ /dev/null @@ -1,414 +0,0 @@ -use dex_io::*; -use fmt::Debug; -use gclient::{ - errors::{Gear, ModuleError}, - Error as GclientError, EventListener, EventProcessor, GearApi, Result, -}; -use gear_core::ids::CodeId; -use gstd::{prelude::*, ActorId}; -use primitive_types::H256; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -const ALICE: [u8; 32] = [ - 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, - 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, -]; -const DEX: &str = "../target/wasm32-unknown-unknown/release/dex.opt.wasm"; -const DEX_FACTORY: &str = "../target/wasm32-unknown-unknown/release/dex_factory.opt.wasm"; -const FT_MAIN: &str = "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm"; -const FT_STORAGE: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm"; -const FT_LOGIC: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm"; - -fn decode(payload: Vec) -> Result { - Ok(T::decode(&mut payload.as_slice())?) -} - -async fn upload_code_common( - result: Result<(CodeId, H256)>, - get_code: impl FnOnce() -> Result>, -) -> Result { - let code_id = match result { - Ok((code_id, _)) => code_id.into(), - Err(GclientError::Module(ModuleError::Gear(Gear::CodeAlreadyExists))) => { - sp_core_hashing::blake2_256(&get_code()?) - } - Err(other_error) => return Err(other_error), - }; - - Ok(code_id.into()) -} - -async fn upload_code_by_path(client: &GearApi, path: &str) -> Result { - let r = upload_code_common(client.upload_code_by_path(path).await, || { - gclient::code_from_os(path) - }) - .await; - - println!("Uploaded `{path}`."); - - r -} - -async fn upload_program_and_wait_reply( - client: &GearApi, - listener: &mut EventListener, - path: &str, - payload: impl Encode, -) -> Result<([u8; 32], T)> { - let (message_id, program_id) = - common_upload_program(client, gclient::code_from_os(path)?, payload).await?; - let (_, raw_reply, _) = listener.reply_bytes_on(message_id.into()).await?; - let reply = decode( - raw_reply.expect("initialization failed, received an error message instead of a reply"), - )?; - - Ok((program_id, reply)) -} - -async fn upload_program( - client: &GearApi, - listener: &mut EventListener, - path: &str, - payload: impl Encode, -) -> Result<[u8; 32]> { - let (message_id, program_id) = - common_upload_program(client, gclient::code_from_os(path)?, payload).await?; - - assert!(listener - .message_processed(message_id.into()) - .await? - .succeed()); - println!("Initialized `{path}`."); - - Ok(program_id) -} - -async fn common_upload_program( - client: &GearApi, - code: Vec, - payload: impl Encode, -) -> Result<([u8; 32], [u8; 32])> { - let encoded_payload = payload.encode(); - let gas_limit = client - .calculate_upload_gas(None, code.clone(), encoded_payload, 0, true) - .await? - .burned - * 2; - let (message_id, program_id, _) = client - .upload_program( - code, - gclient::now_micros().to_le_bytes(), - payload, - gas_limit, - 0, - ) - .await?; - - Ok((message_id.into(), program_id.into())) -} - -async fn send_message_with_custom_limit( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, - modify_gas_limit: fn(u64) -> u64, -) -> Result> { - let encoded_payload = payload.encode(); - let destination = destination.into(); - - let gas_limit = client - .calculate_handle_gas(None, destination, encoded_payload, 0, true) - .await? - .burned; - let modified_gas_limit = modify_gas_limit(gas_limit); - - println!("Sending a payload: `{payload:?}`."); - println!("Calculated gas limit: {gas_limit}."); - println!("Modified gas limit: {modified_gas_limit}."); - - let (message_id, _) = client - .send_message(destination, payload, modified_gas_limit, 0) - .await?; - - println!("Sending completed."); - - let (_, raw_reply, _) = listener.reply_bytes_on(message_id).await?; - - Ok(match raw_reply { - Ok(raw_reply) => Ok(decode(raw_reply)?), - Err(error) => Err(error), - }) -} - -async fn send_message( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result { - Ok( - send_message_with_custom_limit(client, listener, destination, payload, |gas| gas * 2) - .await? - .expect("action failed, received an error message instead of a reply"), - ) -} - -async fn send_message_for_pair( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result> { - send_message(client, listener, destination, payload).await -} - -async fn send_message_with_insufficient_gas( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result { - Ok( - send_message_with_custom_limit::<()>(client, listener, destination, payload, |gas| { - gas - gas / 100 - }) - .await? - .expect_err("received a reply instead of an error message"), - ) -} - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_state_consistency() -> Result<()> { - let client = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - let mut listener = client.subscribe().await?; - - let storage_code_hash = upload_code_by_path(&client, FT_STORAGE).await?; - let ft_logic_code_hash = upload_code_by_path(&client, FT_LOGIC).await?; - - let mut ft_actor_id_a = upload_program( - &client, - &mut listener, - FT_MAIN, - InitFToken { - storage_code_hash, - ft_logic_code_hash, - }, - ) - .await?; - let mut ft_actor_id_b = upload_program( - &client, - &mut listener, - FT_MAIN, - InitFToken { - storage_code_hash, - ft_logic_code_hash, - }, - ) - .await?; - - if ft_actor_id_a < ft_actor_id_b { - (ft_actor_id_a, ft_actor_id_b) = (ft_actor_id_b, ft_actor_id_a) - }; - - let pair_code_hash = upload_code_by_path(&client, DEX).await?; - let (factory_actor_id, reply) = - upload_program_and_wait_reply::>( - &client, - &mut listener, - DEX_FACTORY, - dex_factory_io::Initialize { - fee_to: ActorId::zero(), - fee_to_setter: ActorId::zero(), - pair: pair_code_hash.into(), - }, - ) - .await?; - assert_eq!(reply, Ok(())); - - let reply: Result = send_message( - &client, - &mut listener, - factory_actor_id, - dex_factory_io::Action::CreatePair(ft_actor_id_b.into(), ft_actor_id_a.into()), - ) - .await?; - let pair_actor_id = if let dex_factory_io::Event::PairCreated { - token_pair: _, - pair_actor, - pair_number, - } = reply.unwrap() - { - assert_eq!(pair_number, 1); - - pair_actor - } else { - unreachable!() - }; - - let amount = 100000; - let liquidity = amount / 2; - - assert_eq!( - FTokenEvent::Ok, - send_message( - &client, - &mut listener, - ft_actor_id_a, - FTokenAction::Message { - transaction_id: 0, - payload: LogicAction::Mint { - recipient: ALICE.into(), - amount, - }, - }, - ) - .await? - ); - assert_eq!( - FTokenEvent::Ok, - send_message( - &client, - &mut listener, - ft_actor_id_b, - FTokenAction::Message { - transaction_id: 0, - payload: LogicAction::Mint { - recipient: ALICE.into(), - amount: liquidity, - }, - }, - ) - .await? - ); - - assert_eq!( - FTokenEvent::Ok, - send_message( - &client, - &mut listener, - ft_actor_id_a, - FTokenAction::Message { - transaction_id: 1, - payload: LogicAction::Approve { - approved_account: pair_actor_id, - amount, - }, - }, - ) - .await? - ); - assert_eq!( - FTokenEvent::Ok, - send_message( - &client, - &mut listener, - ft_actor_id_b, - FTokenAction::Message { - transaction_id: 1, - payload: LogicAction::Approve { - approved_account: pair_actor_id, - amount: liquidity, - }, - }, - ) - .await? - ); - - let true_liq = (liquidity - MINIMUM_LIQUIDITY as u128).into(); - let deadline = 999999999999999999; - let mut action = Action::new(InnerAction::AddLiquidity { - amount_a_desired: liquidity, - amount_b_desired: liquidity, - amount_a_min: 0, - amount_b_min: 0, - to: ALICE.into(), - deadline, - }); - - println!( - "{}", - send_message_with_insufficient_gas(&client, &mut listener, pair_actor_id.into(), action) - .await? - ); - assert_eq!( - send_message_for_pair( - &client, - &mut listener, - pair_actor_id.into(), - action.to_retry(), - ) - .await?, - Ok(Event::AddedLiquidity { - sender: ALICE.into(), - amount_a: liquidity, - amount_b: liquidity, - liquidity: true_liq - }), - ); - - action.action = InnerAction::SwapExactTokensForTokens { - amount_in: liquidity, - amount_out_min: 0, - to: ALICE.into(), - deadline, - swap_kind: SwapKind::AForB, - }; - - println!( - "{}", - send_message_with_insufficient_gas(&client, &mut listener, pair_actor_id.into(), action) - .await? - ); - assert_eq!( - send_message_for_pair( - &client, - &mut listener, - pair_actor_id.into(), - action.to_retry(), - ) - .await?, - Ok(Event::Swap { - sender: ALICE.into(), - in_amount: liquidity, - out_amount: 24962, - to: ALICE.into(), - kind: SwapKind::AForB - }), - ); - - action.action = InnerAction::RemoveLiquidity { - liquidity: true_liq, - amount_a_min: 0, - amount_b_min: 0, - to: ALICE.into(), - deadline, - }; - - println!( - "{:?}", - send_message_with_insufficient_gas(&client, &mut listener, pair_actor_id.into(), action) - .await? - ); - assert_eq!( - send_message_for_pair( - &client, - &mut listener, - pair_actor_id.into(), - action.to_retry() - ) - .await?, - Ok(Event::RemovedLiquidity { - sender: ALICE.into(), - amount_a: 98000, - amount_b: 24537, - to: ALICE.into() - }), - ); - - Ok(()) -} diff --git a/contracts/dex/tests/tests.rs b/contracts/dex/tests/tests.rs deleted file mode 100644 index 72491ba1c..000000000 --- a/contracts/dex/tests/tests.rs +++ /dev/null @@ -1,473 +0,0 @@ -use utils::{prelude::*, FungibleToken}; - -mod utils; - -const USERS: &[u64] = &[5, 6, 7]; -const INIT_AMOUNT: u128 = 1000000; -const INIT_LIQ: u128 = INIT_AMOUNT / 2; -const CLEAN_INIT_LIQ: u128 = INIT_AMOUNT / 2 - 1000; - -// TODO: fix test -#[test] -#[ignore] -fn swaps_and_fee() { - const SWAP_AMOUNT: u128 = 100000; - - let system = utils::initialize_system(); - - let mut fungible_token_b = FungibleToken::initialize(&system); - let mut fungible_token_a = FungibleToken::initialize(&system); - - // Initialization of the contracts - - let mut factory = Factory::initialize(&system, USERS[2], 0).succeed(); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - let pair_actor = factory.create_pair(actor_pair).succeed((actor_pair, 1)); - let mut pair = Pair(system.get_program(pair_actor).unwrap()); - - // Checking the initialization results - - factory.state().pair(actor_pair).eq(pair.actor_id()); - pair.state().factory().eq(factory.actor_id()); - pair.state().token().eq(actor_pair); - - fungible_token_a.mint(USERS[0], INIT_AMOUNT); - fungible_token_b.mint(USERS[0], INIT_AMOUNT); - fungible_token_a.approve(USERS[0], pair.actor_id(), INIT_LIQ); - fungible_token_b.approve(USERS[0], pair.actor_id(), INIT_LIQ); - - // Adding liquidity - - pair.add_liquidity(USERS[0], (INIT_LIQ, INIT_LIQ), (0, 0), USERS[0]) - .succeed((USERS[0], (INIT_LIQ, INIT_LIQ), CLEAN_INIT_LIQ)); - - // Checking the adding results - - pair.state().balance_of(USERS[0]).eq(CLEAN_INIT_LIQ); - pair.state().reserve().eq((INIT_LIQ, INIT_LIQ)); - - // SwapExactTokensForTokens AForB - - let mut swap_kind = SwapKind::AForB; - let mut pair_reserve = (INIT_LIQ, INIT_LIQ); - let mut user_balance = (INIT_AMOUNT - INIT_LIQ, INIT_AMOUNT - INIT_LIQ); - let mut cumulative_price = (U256::zero(), U256::zero()); - let mut out_amount = pair - .state() - .calculate_out_amount(swap_kind, SWAP_AMOUNT) - .0 - .unwrap(); - - fungible_token_a.approve(USERS[0], pair.actor_id(), SWAP_AMOUNT); - system.spend_blocks(SPENT_BLOCKS); - pair.swap_exact_tokens_for_tokens(USERS[0], (SWAP_AMOUNT, 0), USERS[0], swap_kind) - .succeed((USERS[0], (SWAP_AMOUNT, out_amount), USERS[0], swap_kind)); - - cumulative_price.0 += utils::calculate_cp(pair_reserve); - cumulative_price.1 += utils::calculate_cp((pair_reserve.1, pair_reserve.0)); - pair_reserve.0 += SWAP_AMOUNT; - pair_reserve.1 -= out_amount; - user_balance.0 -= SWAP_AMOUNT; - user_balance.1 += out_amount; - - fungible_token_a - .balance(pair.actor_id()) - .contains(pair_reserve.0); - fungible_token_b - .balance(pair.actor_id()) - .contains(pair_reserve.1); - fungible_token_a.balance(USERS[0]).contains(user_balance.0); - fungible_token_b.balance(USERS[0]).contains(user_balance.1); - pair.state().price().eq(cumulative_price); - pair.state().reserve().eq(pair_reserve); - - // SwapTokensForExactTokens AForB - - let mut in_amount = pair - .state() - .calculate_in_amount(swap_kind, SWAP_AMOUNT) - .0 - .unwrap(); - - fungible_token_a.approve(USERS[0], pair.actor_id(), in_amount); - system.spend_blocks(SPENT_BLOCKS); - pair.swap_tokens_for_exact_tokens(USERS[0], (SWAP_AMOUNT, 99999999), USERS[0], swap_kind) - .succeed((USERS[0], (in_amount, SWAP_AMOUNT), USERS[0], swap_kind)); - - cumulative_price.0 += utils::calculate_cp(pair_reserve); - cumulative_price.1 += utils::calculate_cp((pair_reserve.1, pair_reserve.0)); - pair_reserve.0 += in_amount; - pair_reserve.1 -= SWAP_AMOUNT; - user_balance.0 -= in_amount; - user_balance.1 += SWAP_AMOUNT; - - fungible_token_a - .balance(pair.actor_id()) - .contains(pair_reserve.0); - fungible_token_b - .balance(pair.actor_id()) - .contains(pair_reserve.1); - fungible_token_a.balance(USERS[0]).contains(user_balance.0); - fungible_token_b.balance(USERS[0]).contains(user_balance.1); - pair.state().price().eq(cumulative_price); - pair.state().reserve().eq(pair_reserve); - - // SwapExactTokensForTokens BForA - - swap_kind = SwapKind::BForA; - out_amount = pair - .state() - .calculate_out_amount(swap_kind, SWAP_AMOUNT) - .0 - .unwrap(); - - fungible_token_b.approve(USERS[0], pair.actor_id(), SWAP_AMOUNT); - system.spend_blocks(SPENT_BLOCKS); - pair.swap_exact_tokens_for_tokens(USERS[0], (SWAP_AMOUNT, 0), USERS[0], swap_kind) - .succeed((USERS[0], (SWAP_AMOUNT, out_amount), USERS[0], swap_kind)); - - cumulative_price.0 += utils::calculate_cp(pair_reserve); - cumulative_price.1 += utils::calculate_cp((pair_reserve.1, pair_reserve.0)); - pair_reserve.1 += SWAP_AMOUNT; - pair_reserve.0 -= out_amount; - user_balance.1 -= SWAP_AMOUNT; - user_balance.0 += out_amount; - - fungible_token_a - .balance(pair.actor_id()) - .contains(pair_reserve.0); - fungible_token_b - .balance(pair.actor_id()) - .contains(pair_reserve.1); - fungible_token_a.balance(USERS[0]).contains(user_balance.0); - fungible_token_b.balance(USERS[0]).contains(user_balance.1); - pair.state().price().eq(cumulative_price); - pair.state().reserve().eq(pair_reserve); - - // SwapTokensForExactTokens BForA - - in_amount = pair - .state() - .calculate_in_amount(swap_kind, SWAP_AMOUNT) - .0 - .unwrap(); - - fungible_token_b.approve(USERS[0], pair.actor_id(), in_amount); - system.spend_blocks(SPENT_BLOCKS); - pair.swap_tokens_for_exact_tokens(USERS[0], (SWAP_AMOUNT, 9999999999), USERS[0], swap_kind) - .succeed((USERS[0], (in_amount, SWAP_AMOUNT), USERS[0], swap_kind)); - - cumulative_price.0 += utils::calculate_cp(pair_reserve); - cumulative_price.1 += utils::calculate_cp((pair_reserve.1, pair_reserve.0)); - pair_reserve.1 += in_amount; - pair_reserve.0 -= SWAP_AMOUNT; - user_balance.1 -= in_amount; - user_balance.0 += SWAP_AMOUNT; - - fungible_token_a - .balance(pair.actor_id()) - .contains(pair_reserve.0); - fungible_token_b - .balance(pair.actor_id()) - .contains(pair_reserve.1); - fungible_token_a.balance(USERS[0]).contains(user_balance.0); - fungible_token_b.balance(USERS[0]).contains(user_balance.1); - pair.state().price().eq(cumulative_price); - pair.state().reserve().eq(pair_reserve); - - // Liqtoken transfer and fee collection - - pair.transfer(USERS[0], CLEAN_INIT_LIQ, USERS[1]) - .succeed((USERS[0], USERS[1], CLEAN_INIT_LIQ)); - pair.state().balance_of(USERS[0]).eq(0); - pair.state().balance_of(USERS[1]).eq(CLEAN_INIT_LIQ); - - let U256PairTuple(reserve) = pair_reserve.into(); - let root_k = (reserve.0 * reserve.1).integer_sqrt().low_u128(); - let root_k_last = INIT_LIQ; - let fee = (INIT_LIQ * (root_k - root_k_last)) / (root_k * 5 + root_k_last); - let mut total_supply_with_fee = INIT_LIQ + fee; - let returned_amount = ( - CLEAN_INIT_LIQ * pair_reserve.0 / total_supply_with_fee, - CLEAN_INIT_LIQ * pair_reserve.1 / total_supply_with_fee, - ); - - pair.remove_liquidity(USERS[1], CLEAN_INIT_LIQ, (0, 0), USERS[1]) - .succeed((USERS[1], returned_amount, USERS[1])); - - pair_reserve.0 -= returned_amount.0; - pair_reserve.1 -= returned_amount.1; - total_supply_with_fee -= CLEAN_INIT_LIQ; - - pair.state().balance_of(USERS[1]).eq(0); - pair.state().reserve().eq(pair_reserve); - fungible_token_a - .balance(USERS[1]) - .contains(returned_amount.0); - fungible_token_b - .balance(USERS[1]) - .contains(returned_amount.1); - - pair.remove_liquidity(USERS[2], fee, (0, 0), USERS[2]) - .succeed(( - USERS[2], - ( - fee * pair_reserve.0 / total_supply_with_fee, - fee * pair_reserve.1 / total_supply_with_fee, - ), - USERS[2], - )); -} - -// TODO: fix test -#[test] -#[ignore] -fn swap_errors() { - let system = utils::initialize_system(); - - let mut fungible_token_b = FungibleToken::initialize(&system); - let mut fungible_token_a = FungibleToken::initialize(&system); - - let mut factory = Factory::initialize(&system, 0, 0).succeed(); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - let pair_actor = factory.create_pair(actor_pair).succeed((actor_pair, 1)); - let mut pair = Pair(system.get_program(pair_actor).unwrap()); - - pair.swap_exact_tokens_for_tokens_with_deadline(USERS[0], (0, 0), USERS[0], SwapKind::AForB, 0) - .failed(Error::DeadlineExceeded); - pair.swap_exact_tokens_for_tokens( - USERS[0], - (0, 0), - fungible_token_a.actor_id(), - SwapKind::AForB, - ) - .failed(Error::InvalidRecipient); - pair.swap_exact_tokens_for_tokens( - USERS[0], - (0, 0), - fungible_token_b.actor_id(), - SwapKind::AForB, - ) - .failed(Error::InvalidRecipient); - - pair.swap_tokens_for_exact_tokens_with_deadline(USERS[0], (0, 0), USERS[0], SwapKind::AForB, 0) - .failed(Error::DeadlineExceeded); - pair.swap_tokens_for_exact_tokens( - USERS[0], - (0, 0), - fungible_token_a.actor_id(), - SwapKind::AForB, - ) - .failed(Error::InvalidRecipient); - pair.swap_tokens_for_exact_tokens( - USERS[0], - (0, 0), - fungible_token_b.actor_id(), - SwapKind::AForB, - ) - .failed(Error::InvalidRecipient); - - fungible_token_a.mint(pair.actor_id(), INIT_LIQ); - fungible_token_b.mint(pair.actor_id(), INIT_LIQ); - pair.sync().succeed((INIT_LIQ, INIT_LIQ)); - - pair.swap_exact_tokens_for_tokens(USERS[0], (1, 1), USERS[0], SwapKind::AForB) - .failed(Error::InsufficientLatterAmount); - pair.swap_tokens_for_exact_tokens(USERS[0], (1, 1), USERS[0], SwapKind::AForB) - .failed(Error::InsufficientFormerAmount); -} - -// TODO: fix test -#[test] -#[ignore] -fn factory() { - let system = utils::initialize_system(); - let mut factory = Factory::initialize(&system, 0, USERS[0]).succeed(); - - factory.state().fee_to_setter().eq(USERS[0].into()); - factory.state().fee_to().eq(ActorId::zero()); - - // FeeToSetter - - factory - .fee_to_setter(USERS[0], ActorId::zero()) - .failed(dex_factory_io::Error::ZeroActorId); - factory - .fee_to_setter(FOREIGN_USER, ActorId::zero()) - .failed(dex_factory_io::Error::AccessRestricted); - - factory.fee_to_setter(USERS[0], USERS[1]).succeed(USERS[1]); - factory.state().fee_to_setter().eq(USERS[1].into()); - - // FeeTo - - factory - .fee_to(USERS[0], ActorId::zero()) - .failed(dex_factory_io::Error::AccessRestricted); - factory - .fee_to(USERS[1], ActorId::zero()) - .succeed(ActorId::zero()); - factory.state().fee_to().eq(ActorId::zero()); - - factory.fee_to(USERS[1], USERS[1]).succeed(USERS[1].into()); - factory.state().fee_to().eq(USERS[1].into()); - - // CreatePair - - let fungible_token_b = FungibleToken::initialize(&system); - let fungible_token_a = FungibleToken::initialize(&system); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - - factory.state().all_pairs().eq(vec![]); - factory.state().all_pairs_length().eq(0); - factory.state().pair(actor_pair).eq(ActorId::zero()); - - let pair_actor = factory - .create_pair(actor_pair) - .succeed((actor_pair, 1)) - .into(); - - factory - .state() - .all_pairs() - .eq(vec![(actor_pair, pair_actor)]); - factory.state().all_pairs_length().eq(1); - factory.state().pair(actor_pair).eq(pair_actor); - - factory - .create_pair(actor_pair) - .failed(dex_factory_io::Error::PairExist); -} - -// TODO: fix test -#[test] -#[ignore] -fn add_liquidity() { - let system = utils::initialize_system(); - - let mut fungible_token_b = FungibleToken::initialize(&system); - let mut fungible_token_a = FungibleToken::initialize(&system); - - let mut factory = Factory::initialize(&system, 0, 0).succeed(); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - let pair_actor = factory.create_pair(actor_pair).succeed((actor_pair, 1)); - let mut pair = Pair(system.get_program(pair_actor).unwrap()); - - fungible_token_b.mint(pair.actor_id(), u128::MAX); - pair.sync().succeed((0, u128::MAX)); - - pair.add_liquidity_with_deadline(USERS[0], (0, 0), (0, 0), USERS[0], 0) - .failed(Error::DeadlineExceeded); - // A error because `reserve.0` == 0. - pair.add_liquidity(USERS[0], (u128::MAX, 0), (0, 0), USERS[0]) - .failed(Error::InsufficientLiquidity); - - fungible_token_a.mint(pair.actor_id(), 2); - pair.sync().succeed((2, u128::MAX)); - - // amount * reserve.1 / reserve.0 > u128::MAX - // `u128::MAX` * `u128::MAX` / 1 > u128::MAX - pair.add_liquidity(USERS[0], (u128::MAX, 0), (0, 0), USERS[0]) - .failed(Error::Overflow); - // amount.0 == 0 - pair.add_liquidity(USERS[0], (0, u128::MAX), (0, 0), USERS[0]) - .failed(Error::InsufficientAmount); - // amount.1 == 0 - pair.add_liquidity(USERS[0], (1, 0), (0, 0), USERS[0]) - .failed(Error::InsufficientAmount); - // optimal_amount_b < min_amount.1 - pair.add_liquidity(USERS[0], (1, u128::MAX), (0, u128::MAX), USERS[0]) - .failed(Error::InsufficientLatterAmount); - // optimal_amount_a < min_amount.0 - pair.add_liquidity(USERS[0], (1, 1), (1, 0), USERS[0]) - .failed(Error::InsufficientFormerAmount); - // `reserve.1 == u128::MAX`, so `reserve.1 + 1 > u128::MAX` - pair.add_liquidity(USERS[0], (1, 1), (0, 0), USERS[0]) - .failed(Error::Overflow); -} - -// TODO: fix test -#[test] -#[ignore] -fn add_liquidity_2() { - let system = utils::initialize_system(); - - let fungible_token_b = FungibleToken::initialize(&system); - let mut fungible_token_a = FungibleToken::initialize(&system); - - let mut factory = Factory::initialize(&system, 0, 0).succeed(); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - let pair_actor = factory.create_pair(actor_pair).succeed((actor_pair, 1)); - let mut pair = Pair(system.get_program(pair_actor).unwrap()); - - // 0 < MINIMUM_LIQUIDITY - pair.add_liquidity(USERS[0], (0, 0), (0, 0), USERS[0]) - .failed(Error::InsufficientAmount); - // Added liquidity must be > `MINIMUM_LIQUIDITY`. - pair.add_liquidity( - USERS[0], - (MINIMUM_LIQUIDITY.into(), MINIMUM_LIQUIDITY.into()), - (0, 0), - USERS[0], - ) - .failed(Error::InsufficientLiquidity); - - // Transfer fails - - let min_liq_and_one = MINIMUM_LIQUIDITY as u128 + 1; - pair.add_liquidity( - USERS[0], - (min_liq_and_one, min_liq_and_one), - (0, 0), - USERS[0], - ) - .failed(Error::TransferFailed); - // Refund check - fungible_token_a.mint(USERS[0], min_liq_and_one); - fungible_token_a.approve(USERS[0], pair.actor_id(), min_liq_and_one); - pair.add_liquidity( - USERS[0], - (min_liq_and_one, min_liq_and_one), - (0, 0), - USERS[0], - ) - .failed(Error::TransferFailed); -} - -// TODO: fix test -#[test] -#[ignore] -fn remove_liquidity() { - let system = utils::initialize_system(); - - let mut fungible_token_b = FungibleToken::initialize(&system); - let mut fungible_token_a = FungibleToken::initialize(&system); - - let mut factory = Factory::initialize(&system, 0, 0).succeed(); - let actor_pair = (fungible_token_a.actor_id(), fungible_token_b.actor_id()); - let pair_actor = factory.create_pair(actor_pair).succeed((actor_pair, 1)); - let mut pair = Pair(system.get_program(pair_actor).unwrap()); - - pair.remove_liquidity_with_deadline(USERS[0], 0, (0, 0), USERS[0], 0) - .failed(Error::DeadlineExceeded); - pair.remove_liquidity(USERS[0], 1, (0, 0), USERS[0]) - .failed(Error::InsufficientLiquidity); - - let min_liq_and_one = MINIMUM_LIQUIDITY as u128 + 1; - fungible_token_a.mint(USERS[0], min_liq_and_one); - fungible_token_b.mint(USERS[0], min_liq_and_one); - fungible_token_a.approve(USERS[0], pair.actor_id(), min_liq_and_one); - fungible_token_b.approve(USERS[0], pair.actor_id(), min_liq_and_one); - pair.add_liquidity( - USERS[0], - (min_liq_and_one, min_liq_and_one), - (0, 0), - USERS[0], - ) - .succeed((USERS[0], (min_liq_and_one, min_liq_and_one), 1)); - - pair.remove_liquidity(USERS[0], 1, (2, 0), USERS[0]) - .failed(Error::InsufficientFormerAmount); - pair.remove_liquidity(USERS[0], 1, (0, 2), USERS[0]) - .failed(Error::InsufficientLatterAmount); -} diff --git a/contracts/dex/tests/utils/common.rs b/contracts/dex/tests/utils/common.rs deleted file mode 100644 index 856865258..000000000 --- a/contracts/dex/tests/utils/common.rs +++ /dev/null @@ -1,122 +0,0 @@ -use gstd::{fmt::Debug, marker::PhantomData, prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; - -pub fn initialize_system() -> System { - let system = System::new(); - - system.init_logger(); - - system -} - -pub trait Program { - fn inner_program(&self) -> &InnerProgram<'_>; - - fn actor_id(&self) -> ActorId { - let bytes: [u8; 32] = self.inner_program().id().into(); - - bytes.into() - } -} - -pub trait TransactionalProgram { - fn previous_mut_transaction_id(&mut self) -> &mut u64; - - fn transaction_id(&mut self) -> u64 { - let tx_id = self.previous_mut_transaction_id(); - - *tx_id = tx_id.wrapping_add(1); - - *tx_id - } -} - -#[must_use] -pub struct StateReply(pub T); - -impl StateReply { - #[track_caller] - pub fn eq(self, value: T) { - assert_eq!(self.0, value); - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - check: fn(Event, Check) -> CheckResult, - ghost_data: PhantomData<(Event, Error)>, -} - -impl - RunResult -{ - pub fn new(result: InnerRunResult, check: fn(Event, Check) -> CheckResult) -> Self { - Self { - result, - check, - ghost_data: PhantomData, - } - } - - #[track_caller] - pub fn failed(self, error: Error) { - assert_eq!( - decode::>(&self.result).unwrap_err(), - error - ); - } - - #[track_caller] - pub fn succeed(self, value: Check) -> CheckResult { - (self.check)(decode::>(&self.result).unwrap(), value) - } - - #[track_caller] - pub fn contains(self, value: Check) { - (self.check)(decode::(&self.result), value); - } -} - -#[must_use] -pub struct InitResult { - contract_instance: T, - pub result: InnerRunResult, - pub is_active: bool, - ghost_data: PhantomData, -} - -impl InitResult { - pub fn new(contract_instance: T, result: InnerRunResult, is_active: bool) -> Self { - Self { - contract_instance, - result, - is_active, - ghost_data: PhantomData, - } - } - - fn assert_contains(&self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn succeed(self) -> T { - assert!(self.is_active); - self.assert_contains(Ok::<_, E>(())); - - self.contract_instance - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(result.contains(&Log::builder().payload(payload))); -} - -fn decode(result: &InnerRunResult) -> T { - match T::decode(&mut result.log()[0].payload()) { - Ok(ok) => ok, - Err(_) => std::panic!("{}", String::from_utf8_lossy(result.log()[0].payload())), - } -} diff --git a/contracts/dex/tests/utils/factory.rs b/contracts/dex/tests/utils/factory.rs deleted file mode 100644 index f2f11df2c..000000000 --- a/contracts/dex/tests/utils/factory.rs +++ /dev/null @@ -1,147 +0,0 @@ -use super::{common::StateReply, InitResult, Program, RunResult, FOREIGN_USER}; -use dex_factory_io::*; -use gstd::{prelude::*, ActorId}; -use gtest::{Program as InnerProgram, System}; - -type FactoryRunResult = RunResult; - -pub struct Factory<'a>(InnerProgram<'a>); - -impl Program for Factory<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> Factory<'a> { - pub fn initialize( - system: &'a System, - fee_to: u64, - fee_to_setter: u64, - ) -> InitResult { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/dex_factory.opt.wasm", - ); - let pair_code_id: [u8; 32] = system - .submit_code_file("../target/wasm32-unknown-unknown/release/dex.opt.wasm") - .into(); - - let result = program.send( - FOREIGN_USER, - Initialize { - fee_to: fee_to.into(), - fee_to_setter: fee_to_setter.into(), - pair: pair_code_id.into(), - }, - ); - let is_active = system.is_active_program(program.id()); - - InitResult::new(Self(program), result, is_active) - } - - pub fn create_pair( - &mut self, - pair: (ActorId, ActorId), - ) -> FactoryRunResult<((ActorId, ActorId), u32), [u8; 32]> { - RunResult::new( - self.0 - .send(FOREIGN_USER, Action::CreatePair(pair.0, pair.1)), - |event, (token_pair, pair_number)| { - if let Event::PairCreated { - token_pair: true_token_pair, - pair_actor, - pair_number: true_pair_number, - } = event - { - assert_eq!(token_pair, true_token_pair); - assert_eq!(pair_number, true_pair_number); - - pair_actor.into() - } else { - unreachable!() - } - }, - ) - } - - pub fn fee_to(&mut self, from: u64, to: impl Into) -> FactoryRunResult { - RunResult::new( - self.0.send(from, Action::FeeTo(to.into())), - |event, fee_to| { - assert_eq!(event, Event::FeeToSet(fee_to)); - }, - ) - } - - pub fn fee_to_setter( - &mut self, - from: u64, - to: impl Into, - ) -> FactoryRunResult { - RunResult::new( - self.0.send(from, Action::FeeToSetter(to.into())), - |event, fee_to_setter| assert!(event == Event::FeeToSetterSet(fee_to_setter.into())), - ) - } - - pub fn state(&self) -> FactoryState<'_> { - FactoryState(&self.0) - } -} - -pub struct FactoryState<'a>(&'a InnerProgram<'a>); - -impl FactoryState<'_> { - fn query_state_common( - self, - fn_name: &str, - argument: Option, - ) -> StateReply { - StateReply( - self.0 - .read_state_using_wasm( - 0, - fn_name, - gclient::code_from_os( - "../target/wasm32-unknown-unknown/release/dex_factory_state.meta.wasm", - ) - .unwrap(), - argument, - ) - .unwrap(), - ) - } - - fn query_state_with_argument( - self, - fn_name: &str, - argument: A, - ) -> StateReply { - self.query_state_common(fn_name, Some(argument)) - } - - fn query_state(self, fn_name: &str) -> StateReply { - self.query_state_common::<(), _>(fn_name, None) - } - - pub fn fee_to(self) -> StateReply { - self.query_state("fee_to") - } - - pub fn fee_to_setter(self) -> StateReply { - self.query_state("fee_to_setter") - } - - pub fn pair(self, pair: (ActorId, ActorId)) -> StateReply { - self.query_state_with_argument("pair", pair) - } - - pub fn all_pairs_length(self) -> StateReply { - self.query_state("all_pairs_length") - } - - pub fn all_pairs(self) -> StateReply> { - self.query_state("all_pairs") - } -} diff --git a/contracts/dex/tests/utils/fungible_token.rs b/contracts/dex/tests/utils/fungible_token.rs deleted file mode 100644 index f7b993216..000000000 --- a/contracts/dex/tests/utils/fungible_token.rs +++ /dev/null @@ -1,92 +0,0 @@ -use super::{ - Program, RunResult, TransactionalProgram, FOREIGN_USER, FT_LOGIC, FT_MAIN, FT_STORAGE, -}; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub struct FungibleToken<'a>(InnerProgram<'a>, u64); - -impl Program for FungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl TransactionalProgram for FungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> FungibleToken<'a> { - #[track_caller] - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file(system, FT_MAIN); - let storage_code_id: [u8; 32] = system.submit_code_file(FT_STORAGE).into(); - let logic_code_id: [u8; 32] = system.submit_code_file(FT_LOGIC).into(); - - assert!(!program - .send( - FOREIGN_USER, - InitFToken { - storage_code_hash: storage_code_id.into(), - ft_logic_code_hash: logic_code_id.into(), - }, - ) - .main_failed()); - - Self(program, 0) - } - - #[track_caller] - pub fn mint(&mut self, recipient: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - FOREIGN_USER, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Mint { - recipient: recipient.into(), - amount, - }, - }, - )) - } - - #[track_caller] - pub fn approve(&mut self, from: u64, approved_account: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - from, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }, - }, - )); - } - - #[track_caller] - pub fn balance(&self, actor_id: impl Into) -> RunResult { - RunResult::new( - self.0 - .send(FOREIGN_USER, FTokenAction::GetBalance(actor_id.into())), - |event, balance| { - if let FTokenEvent::Balance(true_balance) = event { - assert_eq!(balance, true_balance) - } else { - unreachable!() - } - }, - ) - } -} - -fn assert_ft_token_event_ok(run_result: InnerRunResult) { - assert!(run_result.contains(&Log::builder().payload(FTokenEvent::Ok))) -} diff --git a/contracts/dex/tests/utils/mod.rs b/contracts/dex/tests/utils/mod.rs deleted file mode 100644 index 9b1ed2e86..000000000 --- a/contracts/dex/tests/utils/mod.rs +++ /dev/null @@ -1,331 +0,0 @@ -use common::{InitResult, Program, RunResult, StateReply, TransactionalProgram}; -use dex_io::{hidden::U256PairTuple, *}; -use dex_state::{WASM_BINARY, WASM_EXPORTS}; -use gear_lib::tokens::fungible::FTTransfer; -use gstd::{prelude::*, ActorId}; -use gtest::Program as InnerProgram; -use primitive_types::U256; - -mod common; -mod factory; -mod fungible_token; - -pub mod prelude; - -pub use common::initialize_system; -pub use fungible_token::FungibleToken; - -pub const FOREIGN_USER: u64 = 1029384756123; -pub const FT_MAIN: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm"; -pub const FT_STORAGE: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm"; -pub const FT_LOGIC: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm"; -pub const SPENT_BLOCKS: u32 = 1; - -const DEADLINE: u64 = 99999999999999999; - -type PairRunResult = RunResult; - -pub struct Pair<'a>(pub InnerProgram<'a>); - -impl Program for Pair<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> Pair<'a> { - pub fn add_liquidity( - &mut self, - from: u64, - desired_amount: (u128, u128), - min_amount: (u128, u128), - to: impl Into, - ) -> PairRunResult<(u64, (u128, u128), u128)> { - self.add_liquidity_with_deadline(from, desired_amount, min_amount, to, DEADLINE) - } - - pub fn add_liquidity_with_deadline( - &mut self, - from: u64, - desired_amount: (u128, u128), - min_amount: (u128, u128), - to: impl Into, - deadline: u64, - ) -> PairRunResult<(u64, (u128, u128), u128)> { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::AddLiquidity { - amount_a_desired: desired_amount.0, - amount_b_desired: desired_amount.1, - amount_a_min: min_amount.0, - amount_b_min: min_amount.1, - to: to.into(), - deadline, - }), - ), - |event, (sender, amount, liquidity)| { - assert_eq!( - event, - Event::AddedLiquidity { - sender: sender.into(), - amount_a: amount.0, - amount_b: amount.1, - liquidity: liquidity.into(), - } - ) - }, - ) - } - - pub fn remove_liquidity( - &mut self, - from: u64, - liquidity: u128, - amount: (u128, u128), - to: u64, - ) -> PairRunResult<(u64, (u128, u128), u64)> { - self.remove_liquidity_with_deadline(from, liquidity, amount, to, DEADLINE) - } - - pub fn remove_liquidity_with_deadline( - &mut self, - from: u64, - liquidity: u128, - amount: (u128, u128), - to: u64, - deadline: u64, - ) -> PairRunResult<(u64, (u128, u128), u64)> { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::RemoveLiquidity { - liquidity: liquidity.into(), - amount_a_min: amount.0, - amount_b_min: amount.1, - to: to.into(), - deadline, - }), - ), - |event, (sender, amount, to)| { - assert_eq!( - event, - Event::RemovedLiquidity { - sender: sender.into(), - amount_a: amount.0, - amount_b: amount.1, - to: to.into(), - } - ) - }, - ) - } - - pub fn swap_exact_tokens_for_tokens( - &mut self, - from: u64, - amount: (u128, u128), - to: impl Into, - swap_kind: SwapKind, - ) -> PairRunResult<(u64, (u128, u128), u64, SwapKind)> { - self.swap_exact_tokens_for_tokens_with_deadline(from, amount, to, swap_kind, DEADLINE) - } - - pub fn swap_exact_tokens_for_tokens_with_deadline( - &mut self, - from: u64, - amount: (u128, u128), - to: impl Into, - swap_kind: SwapKind, - deadline: u64, - ) -> PairRunResult<(u64, (u128, u128), u64, SwapKind)> { - self.swap( - from, - Action::new(InnerAction::SwapExactTokensForTokens { - amount_in: amount.0, - amount_out_min: amount.1, - to: to.into(), - deadline, - swap_kind, - }), - ) - } - - fn swap( - &mut self, - from: u64, - action: Action, - ) -> PairRunResult<(u64, (u128, u128), u64, SwapKind)> { - RunResult::new( - self.0.send(from, action), - |event, (sender, amount, to, kind)| { - assert_eq!( - event, - Event::Swap { - sender: sender.into(), - in_amount: amount.0, - out_amount: amount.1, - to: to.into(), - kind, - } - ) - }, - ) - } - - pub fn swap_tokens_for_exact_tokens( - &mut self, - from: u64, - amount: (u128, u128), - to: impl Into, - swap_kind: SwapKind, - ) -> PairRunResult<(u64, (u128, u128), u64, SwapKind)> { - self.swap_tokens_for_exact_tokens_with_deadline(from, amount, to, swap_kind, DEADLINE) - } - - pub fn swap_tokens_for_exact_tokens_with_deadline( - &mut self, - from: u64, - amount: (u128, u128), - to: impl Into, - swap_kind: SwapKind, - deadline: u64, - ) -> PairRunResult<(u64, (u128, u128), u64, SwapKind)> { - self.swap( - from, - Action::new(InnerAction::SwapTokensForExactTokens { - amount_out: amount.0, - amount_in_max: amount.1, - to: to.into(), - deadline, - swap_kind, - }), - ) - } - - pub fn sync(&mut self) -> PairRunResult<(u128, u128)> { - RunResult::new( - self.0.send(FOREIGN_USER, Action::new(InnerAction::Sync)), - |event, reserve| { - assert_eq!( - event, - Event::Sync { - reserve_a: reserve.0, - reserve_b: reserve.1, - } - ) - }, - ) - } - - pub fn transfer( - &mut self, - from: u64, - amount: u128, - to: u64, - ) -> PairRunResult<(u64, u64, u128)> { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Transfer { - to: to.into(), - amount: amount.into(), - }), - ), - |event, (from, to, amount)| { - assert_eq!( - event, - Event::Transfer(FTTransfer { - from: from.into(), - to: to.into(), - amount: amount.into(), - }) - ) - }, - ) - } - - pub fn state(&self) -> PairState<'_> { - PairState(&self.0) - } -} - -pub struct PairState<'a>(&'a InnerProgram<'a>); - -impl PairState<'_> { - fn query_state_common( - self, - fn_index: usize, - argument: Option, - ) -> StateReply { - StateReply( - self.0 - .read_state_using_wasm(0, WASM_EXPORTS[fn_index], WASM_BINARY.into(), argument) - .unwrap(), - ) - } - - fn query_state_with_argument( - self, - fn_index: usize, - argument: A, - ) -> StateReply { - self.query_state_common(fn_index, Some(argument)) - } - - fn query_state(self, fn_index: usize) -> StateReply { - self.query_state_common::<(), _>(fn_index, None) - } - - pub fn token(self) -> StateReply<(ActorId, ActorId)> { - self.query_state(1) - } - - pub fn reserve(self) -> StateReply<(u128, u128)> { - self.query_state(2) - } - - pub fn price(self) -> StateReply<(U256, U256)> { - self.query_state(3) - } - - pub fn balance_of(self, actor: impl Into) -> StateReply { - StateReply( - self.query_state_with_argument::<_, U256>(5, actor.into()) - .0 - .try_into() - .unwrap(), - ) - } - - pub fn factory(self) -> StateReply { - self.query_state(6) - } - - pub fn calculate_out_amount( - self, - swap_kind: SwapKind, - in_amount: u128, - ) -> StateReply> { - self.query_state_with_argument(9, (swap_kind, in_amount)) - } - - pub fn calculate_in_amount( - self, - swap_kind: SwapKind, - out_amount: u128, - ) -> StateReply> { - self.query_state_with_argument(10, (swap_kind, out_amount)) - } -} - -pub fn calculate_cp(reserve: (u128, u128)) -> U256 { - let U256PairTuple(reserve) = reserve.into(); - - ((reserve.1 << U256::from(128u64)) / reserve.0) - .overflowing_mul((SPENT_BLOCKS * 3000).into()) - .0 -} diff --git a/contracts/dex/tests/utils/prelude.rs b/contracts/dex/tests/utils/prelude.rs deleted file mode 100644 index 4baba7a72..000000000 --- a/contracts/dex/tests/utils/prelude.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub use super::{common::Program, factory::Factory, Pair, FOREIGN_USER, SPENT_BLOCKS}; -pub use dex_io::{hidden::U256PairTuple, *}; -pub use gstd::{prelude::*, ActorId}; -pub use primitive_types::U256; diff --git a/contracts/dutch-auction/Cargo.toml b/contracts/dutch-auction/Cargo.toml deleted file mode 100644 index 83be2f53d..000000000 --- a/contracts/dutch-auction/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "dutch-auction" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -dutch-auction-io.workspace = true -primitive-types.workspace = true -non-fungible-token-io.workspace = true -gmeta.workspace = true -gear-lib-old.workspace = true - -[dev-dependencies] -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true - -# External binaries - -non-fungible-token.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -dutch-auction-io.workspace = true diff --git a/contracts/dutch-auction/README.md b/contracts/dutch-auction/README.md deleted file mode 100644 index 550911ccf..000000000 --- a/contracts/dutch-auction/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=dutch-auction/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/dutch_auction_io) - -# [Dutch auction](https://wiki.gear-tech.io/docs/examples/DeFi/dutch-auction) - -### 🏗️ Building - -```sh -cargo b -r -p "dutch-auction*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "dutch-auction*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "dutch-auction*" -``` diff --git a/contracts/dutch-auction/build.rs b/contracts/dutch-auction/build.rs deleted file mode 100644 index 84e4d2f86..000000000 --- a/contracts/dutch-auction/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dutch_auction_io::io::AuctionMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dutch-auction/io/Cargo.toml b/contracts/dutch-auction/io/Cargo.toml deleted file mode 100644 index b34c195ca..000000000 --- a/contracts/dutch-auction/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "dutch-auction-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -primitive-types.workspace = true diff --git a/contracts/dutch-auction/io/src/auction.rs b/contracts/dutch-auction/io/src/auction.rs deleted file mode 100644 index f77de9902..000000000 --- a/contracts/dutch-auction/io/src/auction.rs +++ /dev/null @@ -1,158 +0,0 @@ -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -use primitive_types::U256; - -pub type TransactionId = u64; - -/// An auction info and auction state -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct AuctionInfo { - /// NFT contract address - pub nft_contract_actor_id: ActorId, - /// NFT token id - pub token_id: U256, - /// NFT owner - pub token_owner: ActorId, - /// Auction owner - pub auction_owner: ActorId, - /// Starting price of NFT at auction - pub starting_price: u128, - /// Current price of NFT - pub current_price: u128, - /// Price step by which the NFT price decreases - pub discount_rate: u128, - /// Time left until the end of the auction - pub time_left: u64, - /// Time when the auction expires - pub expires_at: u64, - /// Current auction status - pub status: Status, - - /// Transactions that cached on contract - pub transactions: BTreeMap>, - /// Current transaction id - pub current_tid: u64, -} - -/// An enum that represent current auction status -#[derive(Debug, Decode, Default, Encode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Status { - #[default] - None, - /// Auction is running right now - IsRunning, - /// Someone purchased NFT, but previous NFT owner not rewarded - Purchased { price: u128 }, - /// Someone purchased NFT and previous NFT owner rewarded - Rewarded { price: u128 }, - /// Time for the auction has expired and no one has made a purchase. - Expired, - /// Auction stopped by auction owner - Stopped, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Transaction { - pub id: TransactionId, - pub action: T, -} - -/// An enum to send the program info about what it should do. -/// -/// After a successful processing of this enum, the program replies with [`Event`]. -#[derive(Debug, Clone, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Action { - /// Creates auction - Create(CreateConfig), - /// Buy current NFT - Buy, - /// Stop Auction - ForceStop, - /// Reward gas to NFT seller - Reward, -} - -/// An enum that contains a result of processed [`Action`]. -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - AuctionStarted { - /// Owner of auction NFT - token_owner: ActorId, - /// Started price of NFT - price: u128, - /// NFT token id - token_id: U256, - }, - Bought { - /// Price for which the NFT were bought - price: u128, - }, - AuctionStopped { - token_owner: ActorId, - token_id: U256, - }, - Rewarded { - /// Reward that owner received - price: u128, - }, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Duration { - pub hours: u64, - pub minutes: u64, - pub seconds: u64, -} - -/// Dutch Auction config -#[derive(Debug, Clone, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct CreateConfig { - /// Address of NFT contract - pub nft_contract_actor_id: ActorId, - /// NFT token id - pub token_id: U256, - /// Starting price - pub starting_price: u128, - /// Price step by which the NFT price decreases - pub discount_rate: u128, - /// Auction duration - pub duration: Duration, -} - -/// An enum that contains a error of processed [`Action`]. -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - PreviousTxMustBeCompleted, - SendingError, - NftValidateFailed, - NftTransferFailed, - NftOwnerFailed, - NftNotApproved, - NotRewarded, - WrongReply, - RewardSendFailed, - NotOwner, - AlreadyRunning, - StartPriceLessThatMinimal, - AlreadyStopped, - InsufficientMoney, - Expired, - WrongState, - IncorrectRewarder, -} diff --git a/contracts/dutch-auction/io/src/io.rs b/contracts/dutch-auction/io/src/io.rs deleted file mode 100644 index 8694d4915..000000000 --- a/contracts/dutch-auction/io/src/io.rs +++ /dev/null @@ -1,14 +0,0 @@ -use gmeta::{InOut, Metadata, Out}; - -use crate::auction::{Action, AuctionInfo, Error, Event}; - -pub struct AuctionMetadata; - -impl Metadata for AuctionMetadata { - type Init = (); - type Handle = InOut>; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} diff --git a/contracts/dutch-auction/io/src/lib.rs b/contracts/dutch-auction/io/src/lib.rs deleted file mode 100644 index c4002e827..000000000 --- a/contracts/dutch-auction/io/src/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![no_std] - -pub mod auction; -pub mod io; diff --git a/contracts/dutch-auction/src/lib.rs b/contracts/dutch-auction/src/lib.rs deleted file mode 100644 index 87d620e56..000000000 --- a/contracts/dutch-auction/src/lib.rs +++ /dev/null @@ -1,337 +0,0 @@ -#![no_std] - -use core::cmp::min; -use dutch_auction_io::auction::*; -use gstd::ActorId; -use gstd::{collections::BTreeMap, exec, msg, prelude::*}; -use non_fungible_token_io::{NFTAction, NFTEvent}; -use primitive_types::U256; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -static mut AUCTION: Option = None; - -#[derive(Debug, Clone, Default)] -pub struct Nft { - pub token_id: U256, - pub owner: ActorId, - pub contract_id: ActorId, -} - -#[derive(Debug, Clone, Default)] -pub struct Auction { - pub owner: ActorId, - pub nft: Nft, - pub starting_price: u128, - pub discount_rate: u128, - pub status: Status, - pub started_at: u64, - pub expires_at: u64, - - pub transactions: BTreeMap>, - pub current_tid: TransactionId, -} - -impl Auction { - pub async fn buy(&mut self, transaction_id: TransactionId) -> Result<(Event, u128), Error> { - if !matches!(self.status, Status::IsRunning) { - return Err(Error::AlreadyStopped); - } - - if exec::block_timestamp() >= self.expires_at { - return Err(Error::Expired); - } - - let price = self.token_price(); - let value = msg::value(); - if value < price { - return Err(Error::InsufficientMoney); - } - - self.status = Status::Purchased { price }; - - let refund = value - price; - let refund = if refund < 10_000_000_000_000 { - 0 - } else { - refund - }; - - let reply = match msg::send_for_reply( - self.nft.contract_id, - NFTAction::Transfer { - to: msg::source(), - token_id: self.nft.token_id, - transaction_id, - }, - 0, - 0, - ) { - Ok(reply) => reply, - Err(_e) => { - return Err(Error::NftTransferFailed); - } - }; - - match reply.await { - Ok(_reply) => {} - Err(_e) => { - return Err(Error::NftTransferFailed); - } - } - - Ok((Event::Bought { price }, refund)) - } - - pub fn token_price(&self) -> u128 { - // time_elapsed is in seconds - let time_elapsed = exec::block_timestamp().saturating_sub(self.started_at) / 1000; - let discount = min( - self.discount_rate * (time_elapsed as u128), - self.starting_price, - ); - - self.starting_price - discount - } - - pub async fn renew_contract( - &mut self, - transaction_id: TransactionId, - config: &CreateConfig, - ) -> Result { - if matches!(self.status, Status::IsRunning) { - return Err(Error::AlreadyRunning); - } - - let minutes_count = config.duration.hours * 60 + config.duration.minutes; - let duration_in_seconds = minutes_count * 60 + config.duration.seconds; - - if config.starting_price < config.discount_rate * (duration_in_seconds as u128) { - return Err(Error::StartPriceLessThatMinimal); - } - self.validate_nft_approve(config.nft_contract_actor_id, config.token_id) - .await?; - self.status = Status::IsRunning; - self.started_at = exec::block_timestamp(); - self.expires_at = self.started_at + duration_in_seconds * 1000; - self.nft.token_id = config.token_id; - self.nft.contract_id = config.nft_contract_actor_id; - self.nft.owner = - Self::get_token_owner(config.nft_contract_actor_id, config.token_id).await?; - - self.discount_rate = config.discount_rate; - self.starting_price = config.starting_price; - - msg::send_for_reply( - self.nft.contract_id, - NFTAction::Transfer { - transaction_id, - to: exec::program_id(), - token_id: self.nft.token_id, - }, - 0, - 0, - ) - .expect("Send NFTAction::Transfer at renew contract") - .await - .map_err(|_e| Error::NftTransferFailed)?; - Ok(Event::AuctionStarted { - token_owner: self.owner, - price: self.starting_price, - token_id: self.nft.token_id, - }) - } - - pub async fn reward(&mut self) -> Result { - let price = match self.status { - Status::Purchased { price } => price, - _ => return Err(Error::WrongState), - }; - if msg::source().ne(&self.nft.owner) { - return Err(Error::IncorrectRewarder); - } - - if let Err(_e) = msg::send(self.nft.owner, "REWARD", price) { - return Err(Error::RewardSendFailed); - } - self.status = Status::Rewarded { price }; - Ok(Event::Rewarded { price }) - } - - pub async fn get_token_owner(contract_id: ActorId, token_id: U256) -> Result { - let reply: NFTEvent = - msg::send_for_reply_as(contract_id, NFTAction::Owner { token_id }, 0, 0) - .map_err(|_e| Error::SendingError)? - .await - .map_err(|_e| Error::NftOwnerFailed)?; - - if let NFTEvent::Owner { owner, .. } = reply { - Ok(owner) - } else { - Err(Error::WrongReply) - } - } - - pub async fn validate_nft_approve( - &self, - contract_id: ActorId, - token_id: U256, - ) -> Result<(), Error> { - let to = exec::program_id(); - let reply: NFTEvent = - msg::send_for_reply_as(contract_id, NFTAction::IsApproved { token_id, to }, 0, 0) - .map_err(|_e| Error::SendingError)? - .await - .map_err(|_e| Error::NftNotApproved)?; - - if let NFTEvent::IsApproved { approved, .. } = reply { - if !approved { - return Err(Error::NftNotApproved); - } - } else { - return Err(Error::WrongReply); - } - Ok(()) - } - - pub fn stop_if_time_is_over(&mut self) { - if matches!(self.status, Status::IsRunning) && exec::block_timestamp() >= self.expires_at { - self.status = Status::Expired; - } - } - - pub async fn force_stop(&mut self, transaction_id: TransactionId) -> Result { - if msg::source() != self.owner { - return Err(Error::NotOwner); - } - if let Status::Purchased { price: _ } = self.status { - return Err(Error::NotRewarded); - } - - let stopped = Event::AuctionStopped { - token_owner: self.owner, - token_id: self.nft.token_id, - }; - if let Status::Rewarded { price: _ } = self.status { - return Ok(stopped); - } - if let Err(_e) = msg::send_for_reply( - self.nft.contract_id, - NFTAction::Transfer { - transaction_id, - to: self.nft.owner, - token_id: self.nft.token_id, - }, - 0, - 0, - ) - .expect("Can't send NFTAction::Transfer at force stop") - .await - { - return Err(Error::NftTransferFailed); - } - - self.status = Status::Stopped; - - Ok(stopped) - } -} - -#[no_mangle] -extern fn init() { - let auction = Auction { - owner: msg::source(), - ..Default::default() - }; - - unsafe { AUCTION = Some(auction) }; -} - -#[gstd::async_main] -async fn main() { - let action: Action = msg::load().expect("Could not load Action"); - let auction: &mut Auction = unsafe { AUCTION.get_or_insert(Auction::default()) }; - - auction.stop_if_time_is_over(); - - let msg_source = msg::source(); - - let r: Result = Err(Error::PreviousTxMustBeCompleted); - let transaction_id = if let Some(Transaction { - id: tid, - action: pend_action, - }) = auction.transactions.get(&msg_source) - { - if action != *pend_action { - msg::reply(r, 0).expect("Failed to encode or reply with `Result`"); - return; - } - *tid - } else { - let transaction_id = auction.current_tid; - auction.transactions.insert( - msg_source, - Transaction { - id: transaction_id, - action: action.clone(), - }, - ); - auction.current_tid = auction.current_tid.wrapping_add(1); - transaction_id - }; - - let (result, value) = match &action { - Action::Buy => { - let reply = auction.buy(transaction_id).await; - let result = match reply { - Ok((event, refund)) => (Ok(event), refund), - Err(_e) => (Err(_e), 0), - }; - auction.transactions.remove(&msg_source); - result - } - Action::Create(config) => { - let result = (auction.renew_contract(transaction_id, config).await, 0); - auction.transactions.remove(&msg_source); - result - } - Action::ForceStop => { - let result = (auction.force_stop(transaction_id).await, 0); - auction.transactions.remove(&msg_source); - result - } - Action::Reward => { - let result = (auction.reward().await, 0); - auction.transactions.remove(&msg_source); - result - } - }; - msg::reply(result, value).expect("Failed to encode or reply with `Result`"); -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { AUCTION.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `AuctionInfo` from `state()`"); -} - -impl From for AuctionInfo { - fn from(mut value: Auction) -> Self { - value.stop_if_time_is_over(); - Self { - nft_contract_actor_id: value.nft.contract_id, - token_id: value.nft.token_id, - token_owner: value.nft.owner, - auction_owner: value.owner, - starting_price: value.starting_price, - current_price: value.token_price(), - discount_rate: value.discount_rate, - time_left: value.expires_at.saturating_sub(exec::block_timestamp()), - expires_at: value.expires_at, - status: value.status.clone(), - transactions: value.transactions.clone(), - current_tid: value.current_tid, - } - } -} diff --git a/contracts/dutch-auction/state/Cargo.toml b/contracts/dutch-auction/state/Cargo.toml deleted file mode 100644 index eca663ae0..000000000 --- a/contracts/dutch-auction/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "dutch-auction-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dutch-auction-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dutch-auction/state/build.rs b/contracts/dutch-auction/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dutch-auction/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dutch-auction/state/src/lib.rs b/contracts/dutch-auction/state/src/lib.rs deleted file mode 100644 index e58e9b3af..000000000 --- a/contracts/dutch-auction/state/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![no_std] - -use dutch_auction_io::auction::*; -use gstd::{exec, prelude::*}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = AuctionInfo; - - pub fn info(mut state: State) -> AuctionInfo { - if matches!(state.status, Status::IsRunning) && exec::block_timestamp() >= state.expires_at - { - state.status = Status::Expired - } - state - } -} diff --git a/contracts/dutch-auction/tests/dutch_auction_tests.rs b/contracts/dutch-auction/tests/dutch_auction_tests.rs deleted file mode 100644 index 3add729f8..000000000 --- a/contracts/dutch-auction/tests/dutch_auction_tests.rs +++ /dev/null @@ -1,185 +0,0 @@ -// use dutch_auction_io::auction::*; -// use gstd::{ActorId, Encode}; -// use gtest::{Log, System}; -// use non_fungible_token_io::NFTEvent; -// use routines::*; - -// mod routines; - -// #[test] -// fn buy() { -// let sys = System::new(); - -// let auction = init(&sys); - -// let nft_program = sys.get_program(2).unwrap(); -// let token_id: u64 = 0; -// let result = auction.send_with_value(USERS[1], Action::Buy, 1_000_000_000_000_000); - -// println!("{:?}", result.decoded_log::>()); -// assert!(result.contains(&( -// USERS[1], -// Ok::(Event::Bought { -// price: 1_000_000_000_000_000, -// }) -// .encode() -// ))); - -// let res = nft_owner(&nft_program, USERS[0], token_id.into()); -// let new_owner = ActorId::from(USERS[1]); - -// let log = Log::builder().dest(USERS[0]).payload(NFTEvent::Owner { -// owner: new_owner, -// token_id: token_id.into(), -// }); - -// assert!(res.contains(&log)); - -// sys.claim_value_from_mailbox(USERS[0]); - -// auction.send_with_value(USERS[0], Action::Reward, 0); -// sys.claim_value_from_mailbox(USERS[0]); - -// let buyer_balance = sys.balance_of(USERS[1]); -// let seller_balance = sys.balance_of(USERS[0]); - -// assert_eq!(buyer_balance, 9_000_000_000_000_000); -// assert_eq!(seller_balance, 11_000_000_000_000_000); -// } - -// #[test] -// fn buy_later_with_lower_price() { -// let sys = System::new(); - -// let auction = init(&sys); -// sys.spend_blocks(100_000); -// let result = auction.send_with_value(USERS[1], Action::Buy, 999_999_700_000_000); - -// assert!(result.contains(&( -// USERS[1], -// Ok::(Event::Bought { -// price: 999_999_700_000_000, -// }) -// .encode() -// ))); - -// sys.claim_value_from_mailbox(USERS[0]); -// auction.send_with_value(USERS[0], Action::Reward, 0); -// sys.claim_value_from_mailbox(USERS[0]); - -// let buyer_balance = sys.balance_of(USERS[1]); -// let seller_balance = sys.balance_of(USERS[0]); - -// assert_eq!(buyer_balance, 9_000_000_300_000_000); -// assert_eq!(seller_balance, 10_999_999_700_000_000); -// } - -// #[test] -// fn buy_two_times() { -// let sys = System::new(); - -// let auction = init(&sys); -// auction.send_with_value(USERS[1], Action::Buy, 1_000_000_000_000_000); -// let result = auction.send_with_value(USERS[2], Action::Buy, 1_000_000_000_000_000); -// println!("{:?}", result.decoded_log::>()); -// assert!(result.contains(&( -// USERS[2], -// Err::(Error::AlreadyStopped).encode() -// ))); -// } - -// #[test] -// fn buy_too_late() { -// let sys = System::new(); - -// let auction = init(&sys); -// sys.spend_blocks(DURATION); -// let result = auction.send_with_value(USERS[1], Action::Buy, 100_000_000_000_000); - -// assert!(result.contains(&( -// USERS[1], -// Err::(Error::AlreadyStopped).encode() -// ))); -// } - -// #[test] -// fn buy_with_less_money() { -// let sys = System::new(); - -// let auction = init(&sys); -// let result = auction.send_with_value(USERS[1], Action::Buy, 999_000_000_000_000); - -// assert!(result.contains(&( -// USERS[1], -// Err::(Error::InsufficientMoney).encode() -// ))); -// } - -// #[test] -// fn create_auction_twice_in_a_row() { -// let sys = System::new(); - -// let auction = init(&sys); -// init_nft(&sys, USERS[1]); -// let result = update_auction(&auction, USERS[1], 3, 999_000_000_000_000); - -// assert!(result.contains(&( -// USERS[1], -// Err::(Error::AlreadyRunning).encode() -// ))); -// } - -// #[test] -// fn create_auction_twice_after_time_and_stop() { -// let sys = System::new(); - -// let auction = init(&sys); -// sys.spend_blocks(DURATION); -// let owner_user = USERS[0]; -// init_nft(&sys, USERS[1]); -// let result = update_auction(&auction, USERS[1], 3, 999_000_000_000_000); -// println!("{:?}", result.decoded_log::>()); - -// let result = auction.send(owner_user, Action::ForceStop); - -// assert!(result.contains(&( -// owner_user, -// Ok::(Event::AuctionStopped { -// token_owner: owner_user.into(), -// token_id: 0.into(), -// }) -// .encode() -// ))); -// } - -// #[test] -// fn create_auction_with_low_price() { -// let sys = System::new(); - -// let auction = init(&sys); -// init_nft(&sys, USERS[1]); -// let result = update_auction(&auction, USERS[1], 3, (DURATION / 1000 - 1).into()); - -// assert!(result.contains(&( -// USERS[1], -// Err::(Error::AlreadyRunning).encode() -// ))); -// } - -// #[test] -// fn create_and_stop() { -// let sys = System::new(); -// let owner_user = USERS[0]; -// let auction = init(&sys); - -// let result = auction.send(owner_user, Action::ForceStop); - -// assert!(result.contains(&( -// owner_user, -// Ok::(Event::AuctionStopped { -// token_owner: owner_user.into(), -// token_id: 0.into(), -// }) -// .encode() -// ))); -// } diff --git a/contracts/dutch-auction/tests/node_tests.rs b/contracts/dutch-auction/tests/node_tests.rs deleted file mode 100644 index 8fa4204b1..000000000 --- a/contracts/dutch-auction/tests/node_tests.rs +++ /dev/null @@ -1,332 +0,0 @@ -use dutch_auction::WASM_BINARY_OPT; -use dutch_auction_io::auction::*; -use gclient::{EventProcessor, GearApi, Result}; -use gear_lib_old::non_fungible_token::token::{TokenId, TokenMetadata}; -use gstd::prelude::*; -use gstd::Encode; -use non_fungible_token_io::{Config, InitNFT, NFTAction}; - -const NFT_PATH: &str = "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm"; -pub const ALICE: [u8; 32] = [ - 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, - 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, -]; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_create_and_stop() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - // let api = GearApi::dev().await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Init NFT - let init_nft = InitNFT { - royalties: None, - collection: Default::default(), - config: Config { - authorized_minters: vec![ALICE.into()], - ..Default::default() - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(NFT_PATH)?, - init_nft.clone(), - 0, - true, - ) - .await?; - let (message_id, nft_program_id, _hash) = api - .upload_program_bytes_by_path( - NFT_PATH, - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await - .unwrap(); - assert!(listener - .message_processed(message_id) - .await - .unwrap() - .succeed()); - - // Mint nft - let mut transaction_id: u64 = 0; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - let gas_info = api - .calculate_handle_gas(None, nft_program_id, mint_payload.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(nft_program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Upload And Init Auction - let payload: Vec = vec![]; - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.into(), vec![], 0, true) - .await?; - let (message_id, auction_program_id, _hash) = api - .upload_program( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - payload, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Approve NFT to auction - - println!("INIT DONE. Auction_contract_id: {:?}", auction_program_id); - transaction_id += 1; - let approve_action = NFTAction::Approve { - transaction_id, - to: auction_program_id, - token_id: TokenId::default(), - }; - let gas_info = api - .calculate_handle_gas(None, nft_program_id, approve_action.encode(), 0, true) - .await?; - let (message_id, _hash) = api - .send_message(nft_program_id, approve_action, gas_info.burned * 2, 0) - .await?; - - // Create Auction - let starting_price = 1_000_000_000; - let discount_rate = 2_000_000; - // let nft_contract_actor_id = ActorId::from_slice(&nft_program_id.into_bytes()).unwrap(); - println!("Approve DONE. nft_contract_actor_id: {:?}", nft_program_id); - let create = Action::Create(CreateConfig { - nft_contract_actor_id: nft_program_id, - starting_price, - discount_rate, - token_id: TokenId::default(), - duration: Duration { - hours: 0, - minutes: 5, - seconds: 0, - }, - }); - let gas_info = api - .calculate_handle_gas(None, auction_program_id, create.encode(), 0, true) - .await?; - let (_message_id, _) = api - .send_message(auction_program_id, create, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - std::thread::sleep(std::time::Duration::from_secs(10)); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - assert!(matches!(state.status, Status::IsRunning)); - - // Buy - let buy = Action::Buy; - let value = 11_000_000_000_000; - let (message_id, _) = api - .send_message(auction_program_id, buy, gas_info.burned * 2, value) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - assert!(matches!(state.status, Status::Purchased { price: _ })); - - // ForceStop - let force_stop = Action::ForceStop; - let gas_info = api - .calculate_handle_gas(None, auction_program_id, force_stop.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(auction_program_id, force_stop, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - assert!(matches!(state.status, Status::Purchased { price: _ })); - - Ok(()) -} - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_create_buy_reward() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - // let api = GearApi::dev().await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Init NFT - let init_nft = InitNFT { - royalties: None, - collection: Default::default(), - config: Config { - authorized_minters: vec![ALICE.into()], - ..Default::default() - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(NFT_PATH)?, - init_nft.clone(), - 0, - true, - ) - .await?; - let (message_id, nft_program_id, _hash) = api - .upload_program_bytes_by_path( - NFT_PATH, - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await - .unwrap(); - assert!(listener - .message_processed(message_id) - .await - .unwrap() - .succeed()); - - // Mint nft - let mut transaction_id: u64 = 0; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - let gas_info = api - .calculate_handle_gas(None, nft_program_id, mint_payload.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(nft_program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Upload And Init Auction - let payload: Vec = vec![]; - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.into(), vec![], 0, true) - .await?; - let (message_id, auction_program_id, _hash) = api - .upload_program( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - payload, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - // Approve NFT to auction - // let to = ActorId::from_slice(&auction_program_id.into_bytes()).unwrap(); - println!("INIT DONE. Auction_contract_id: {:?}", auction_program_id); - - transaction_id += 1; - let approve_action = NFTAction::Approve { - transaction_id, - to: auction_program_id, - token_id: TokenId::default(), - }; - let gas_info = api - .calculate_handle_gas(None, nft_program_id, approve_action.encode(), 0, true) - .await?; - let (message_id, _hash) = api - .send_message(nft_program_id, approve_action, gas_info.burned * 2, 0) - .await?; - - // Create Auction - let starting_price = 11_000_000_000_000; - let discount_rate = 2_000_000; - // let nft_contract_actor_id = ActorId::from_slice(&nft_program_id.into_bytes()).unwrap(); - println!("Approve DONE. nft_contract_actor_id: {:?}", nft_program_id); - let create = Action::Create(CreateConfig { - nft_contract_actor_id: nft_program_id, - starting_price, - discount_rate, - token_id: TokenId::default(), - duration: Duration { - hours: 0, - minutes: 5, - seconds: 0, - }, - }); - let gas_info = api - .calculate_handle_gas(None, auction_program_id, create.encode(), 0, true) - .await?; - let (_message_id, _) = api - .send_message(auction_program_id, create, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - std::thread::sleep(std::time::Duration::from_secs(10)); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - std::dbg!(state); - - // Buy - let buy = Action::Buy; - let buy_payload = buy.encode(); - let value = 11_000_000_000_000; - let gas_info = api - .calculate_handle_gas(None, auction_program_id, buy_payload, value, true) - .await?; - let (message_id, _) = api - .send_message(auction_program_id, buy, gas_info.burned * 2, value) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - assert!(matches!(state.status, Status::Purchased { price: _ })); - - // Reward - let reward = Action::Reward; - let reward_payload = reward.encode(); - let gas_info = api - .calculate_handle_gas(None, auction_program_id, reward_payload, 0, true) - .await?; - let (message_id, _) = api - .send_message(auction_program_id, reward, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let state: AuctionInfo = api.read_state(auction_program_id, vec![]).await?; - assert!(matches!(state.status, Status::Rewarded { price: _ })); - - Ok(()) -} diff --git a/contracts/dutch-auction/tests/routines/mod.rs b/contracts/dutch-auction/tests/routines/mod.rs deleted file mode 100644 index 5989cce43..000000000 --- a/contracts/dutch-auction/tests/routines/mod.rs +++ /dev/null @@ -1,126 +0,0 @@ -use dutch_auction_io::auction::*; -use gear_lib_old::non_fungible_token::{ - io::NFTApproval, - token::{TokenId, TokenMetadata}, -}; -use gstd::Encode; -use gtest::{Log, Program, RunResult, System}; -use non_fungible_token_io::{Config, InitNFT, NFTAction, NFTEvent}; - -pub const USERS: &[u64] = &[4, 5, 6]; -pub const DURATION: u32 = 169 * 60 * 60; - -pub fn init(sys: &System) -> Program<'_> { - USERS - .iter() - .for_each(|user| sys.mint_to(*user, 10_000_000_000_000_000)); - let owner_user = USERS[0]; - - sys.init_logger(); - - let auction_program = Program::current_opt(sys); - - auction_program.send(owner_user, ()); - - init_nft(sys, owner_user); - let result = update_auction(&auction_program, owner_user, 2, 1_000_000_000_000_000); - assert!(result.contains(&( - owner_user, - Ok::(Event::AuctionStarted { - token_owner: owner_user.into(), - price: 1_000_000_000_000_000, - token_id: 0.into(), - }) - .encode() - ))); - - auction_program -} - -pub fn init_nft(sys: &System, owner: u64) { - let nft_program = Program::from_file( - sys, - "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm", - ); - - let res = nft_program.send( - owner, - InitNFT { - royalties: None, - collection: Default::default(), - config: Config { - authorized_minters: vec![owner.into()], - ..Default::default() - }, - }, - ); - - assert!(!res.main_failed()); - - let res = nft_program.send( - owner, - NFTAction::Mint { - token_metadata: TokenMetadata { - name: "MyNFT".to_string(), - description: "NFTForAuction".to_string(), - media: "".to_string(), - reference: "".to_string(), - }, - transaction_id: 0u64, - }, - ); - - assert!(!res.main_failed()); - - let res = nft_owner(&nft_program, owner, 0.into()); - let log = Log::builder().dest(owner).payload(NFTEvent::Owner { - owner: owner.into(), - token_id: 0.into(), - }); - assert!(res.contains(&log)); - - let res = nft_program.send( - owner, - NFTAction::Approve { - to: 1.into(), - token_id: 0.into(), - transaction_id: 1u64, - }, - ); - let approval = NFTApproval { - owner: owner.into(), - approved_account: 1.into(), - token_id: 0.into(), - }; - let log = Log::builder() - .dest(owner) - .payload(NFTEvent::Approval(approval)); - assert!(!res.main_failed()); - assert!(res.contains(&log)); -} - -pub fn update_auction( - auction: &Program<'_>, - from: u64, - nft_contract_id: u64, - starting_price: u128, -) -> RunResult { - auction.send( - from, - Action::Create(CreateConfig { - nft_contract_actor_id: nft_contract_id.into(), - starting_price, - discount_rate: 1_000, - token_id: 0.into(), - duration: Duration { - hours: 168, - minutes: 0, - seconds: 0, - }, - }), - ) -} - -pub fn nft_owner(nft_program: &Program<'_>, from: u64, token_id: TokenId) -> RunResult { - nft_program.send(from, NFTAction::Owner { token_id }) -} diff --git a/contracts/dutch-auction/tests/state_tests.rs b/contracts/dutch-auction/tests/state_tests.rs deleted file mode 100644 index e9e748ce8..000000000 --- a/contracts/dutch-auction/tests/state_tests.rs +++ /dev/null @@ -1,50 +0,0 @@ -use dutch_auction_io::auction::*; -use gtest::System; - -mod routines; -use routines::*; - -#[test] -fn is_not_active_after_time_is_over() { - let sys = System::new(); - - let auction = init(&sys); - sys.spend_blocks(DURATION); - - if let Ok(AuctionInfo { status, .. }) = auction.read_state(0) { - assert!(!matches!(status, Status::IsRunning)) - } -} - -#[test] -fn is_active_before_deal() { - let sys = System::new(); - - let auction = init(&sys); - - if let Ok(AuctionInfo { status, .. }) = auction.read_state(0) { - assert!(matches!(status, Status::IsRunning)); - } else { - panic!("Can't get state"); - } -} - -#[test] -#[ignore] -fn is_not_active_after_deal() { - let sys = System::new(); - - let auction = init(&sys); - auction.send_with_value(USERS[1], Action::Buy, 1_000_000_000_000_000); - - if let Ok(AuctionInfo { status, .. }) = auction.read_state(0) { - assert!(matches!( - status, - Status::Purchased { - price: 1_000_000_000_000_000 - } - )); - } else { - panic!("Can't get state"); - } -} diff --git a/contracts/dynamic-nft/Cargo.toml b/contracts/dynamic-nft/Cargo.toml deleted file mode 100644 index a764c0be3..000000000 --- a/contracts/dynamic-nft/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "dynamic-nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -dynamic-nft-io.workspace = true -gear-lib-old.workspace = true -gear-lib-derive.workspace = true -sp-core-hashing.workspace = true -gmeta.workspace = true - -[dev-dependencies] -hex-literal.workspace = true -sp-core.workspace = true -gclient.workspace = true -gtest.workspace = true -tokio.workspace = true - -[build-dependencies] -dynamic-nft-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/dynamic-nft/README.md b/contracts/dynamic-nft/README.md deleted file mode 100644 index 83af83a60..000000000 --- a/contracts/dynamic-nft/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=dynamic-nft/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/dynamic_nft_io) - -# [Dynamic NFT](https://wiki.gear-tech.io/docs/examples/NFTs/dynamic-nft) - -### 🏗️ Building - -```sh -cargo b -r -p "dynamic-nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "dynamic-nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "dynamic-nft*" -``` diff --git a/contracts/dynamic-nft/build.rs b/contracts/dynamic-nft/build.rs deleted file mode 100644 index 45d2d7a59..000000000 --- a/contracts/dynamic-nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use dynamic_nft_io::NFTMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/dynamic-nft/io/Cargo.toml b/contracts/dynamic-nft/io/Cargo.toml deleted file mode 100644 index a08471a37..000000000 --- a/contracts/dynamic-nft/io/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "dynamic-nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -gmeta.workspace = true diff --git a/contracts/dynamic-nft/io/src/lib.rs b/contracts/dynamic-nft/io/src/lib.rs deleted file mode 100644 index 4f5d59614..000000000 --- a/contracts/dynamic-nft/io/src/lib.rs +++ /dev/null @@ -1,202 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - io::{NFTApproval, NFTTransfer, NFTTransferPayout}, - royalties::*, - state::NFTState, - token::*, -}; -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; -use primitive_types::H256; - -pub struct NFTMetadata; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Config { - pub max_mint_count: Option, - pub authorized_minters: Vec, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitNFT { - pub collection: Collection, - pub royalties: Option, - pub config: Config, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Collection { - pub name: String, - pub description: String, -} - -impl Metadata for NFTMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTAction { - Mint { - transaction_id: u64, - token_metadata: TokenMetadata, - }, - Burn { - transaction_id: u64, - token_id: TokenId, - }, - Transfer { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - TransferPayout { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - amount: u128, - }, - NFTPayout { - owner: ActorId, - amount: u128, - }, - Approve { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - DelegatedApprove { - transaction_id: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], - }, - Owner { - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - }, - Clear { - transaction_hash: H256, - }, - AddMinter { - transaction_id: u64, - minter_id: ActorId, - }, - UpdateDynamicData { - transaction_id: u64, - data: Vec, - }, -} - -#[derive(Encode, Decode, TypeInfo, Debug, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTEvent { - Transfer(NFTTransfer), - TransferPayout(NFTTransferPayout), - NFTPayout(Payout), - Approval(NFTApproval), - Owner { - owner: ActorId, - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - approved: bool, - }, - MinterAdded { - minter_id: ActorId, - }, - Updated { - data_hash: H256, - }, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, Vec)>, - pub token_metadata_by_id: Vec<(TokenId, Option)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub royalties: Option, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFT { - pub token: IoNFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: Vec<(H256, NFTEvent)>, - pub dynamic_data: Vec, -} - -impl From<&NFTState> for IoNFTState { - fn from(value: &NFTState) -> Self { - let NFTState { - name, - symbol, - base_uri, - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties, - } = value; - - let owner_by_id = owner_by_id - .iter() - .map(|(hash, actor_id)| (*hash, *actor_id)) - .collect(); - - let token_approvals = token_approvals - .iter() - .map(|(key, approvals)| (*key, approvals.iter().copied().collect())) - .collect(); - - let token_metadata_by_id = token_metadata_by_id - .iter() - .map(|(id, metadata)| (*id, metadata.clone())) - .collect(); - - let tokens_for_owner = tokens_for_owner - .iter() - .map(|(id, tokens)| (*id, tokens.clone())) - .collect(); - - Self { - name: name.clone(), - symbol: symbol.clone(), - base_uri: base_uri.clone(), - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties: royalties.clone(), - } - } -} diff --git a/contracts/dynamic-nft/src/lib.rs b/contracts/dynamic-nft/src/lib.rs deleted file mode 100644 index 44c424692..000000000 --- a/contracts/dynamic-nft/src/lib.rs +++ /dev/null @@ -1,295 +0,0 @@ -#![no_std] - -use dynamic_nft_io::*; -use gear_lib_derive::{NFTCore, NFTMetaState, NFTStateKeeper}; -use gear_lib_old::non_fungible_token::{io::NFTTransfer, nft_core::*, state::*, token::*}; -use gstd::{ - collections::HashMap, - exec::{self}, - msg, - prelude::*, - ActorId, -}; -use primitive_types::{H256, U256}; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[derive(Debug, Default, NFTStateKeeper, NFTCore, NFTMetaState)] -pub struct DynamicNft { - #[NFTStateField] - pub token: NFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: HashMap, - pub collection: Collection, - pub config: Config, - pub dynamic_data: Vec, -} - -static mut CONTRACT: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let config: InitNFT = msg::load().expect("Unable to decode InitNFT"); - if config.royalties.is_some() { - config.royalties.as_ref().expect("Unable to g").validate(); - } - let nft = DynamicNft { - token: NFTState { - name: config.collection.name.clone(), - royalties: config.royalties, - ..Default::default() - }, - collection: config.collection, - config: config.config, - owner: msg::source(), - ..Default::default() - }; - CONTRACT = Some(nft); -} - -#[no_mangle] -unsafe extern fn handle() { - let action: NFTAction = msg::load().expect("Could not load NFTAction"); - let nft = CONTRACT.get_or_insert(Default::default()); - match action { - NFTAction::Mint { - transaction_id, - token_metadata, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(MyNFTCore::mint(nft, token_metadata)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Burn { - transaction_id, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::burn(nft, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Transfer { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::transfer(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::TransferPayout { - transaction_id, - to, - token_id, - amount, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::TransferPayout(NFTCore::transfer_payout(nft, &to, token_id, amount)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::TransferPayout`"); - } - NFTAction::NFTPayout { owner, amount } => { - msg::reply( - NFTEvent::NFTPayout(NFTCore::nft_payout(nft, &owner, amount)), - 0, - ) - .expect("Error during replying with `NFTEvent::NFTPayout`"); - } - NFTAction::Approve { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::approve(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Owner { token_id } => { - msg::reply( - NFTEvent::Owner { - owner: NFTCore::owner_of(nft, token_id), - token_id, - }, - 0, - ) - .expect("Error during replying with `NFTEvent::Owner`"); - } - NFTAction::IsApproved { to, token_id } => { - msg::reply( - NFTEvent::IsApproved { - to, - token_id, - approved: NFTCore::is_approved_to(nft, &to, token_id), - }, - 0, - ) - .expect("Error during replying with `NFTEvent::IsApproved`"); - } - NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::delegated_approve(nft, message, signature)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Clear { transaction_hash } => nft.clear(transaction_hash), - NFTAction::AddMinter { - transaction_id, - minter_id, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - nft.config.authorized_minters.push(minter_id); - NFTEvent::MinterAdded { minter_id } - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::UpdateDynamicData { - transaction_id, - data, - } => { - let payload = nft.process_transaction(transaction_id, |nft| { - let data_hash = H256::from(sp_core_hashing::blake2_256(&data)); - nft.dynamic_data = data; - - NFTEvent::Updated { data_hash } - }); - msg::reply(payload, 0).expect("Error during replying with `NFTEvent::Updated`"); - } - }; -} - -pub trait MyNFTCore: NFTCore { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer; -} - -impl MyNFTCore for DynamicNft { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer { - let transfer = NFTCore::mint(self, &msg::source(), self.token_id, Some(token_metadata)); - self.token_id = self.token_id.saturating_add(U256::one()); - transfer - } -} - -impl DynamicNft { - fn process_transaction( - &mut self, - transaction_id: u64, - action: impl FnOnce(&mut DynamicNft) -> NFTEvent, - ) -> NFTEvent { - let transaction_hash = get_hash(&msg::source(), transaction_id); - - if let Some(nft_event) = self.transactions.get(&transaction_hash) { - nft_event.clone() - } else { - let nft_event = action(self); - - self.transactions - .insert(transaction_hash, nft_event.clone()); - - nft_event - } - } - - fn clear(&mut self, transaction_hash: H256) { - assert_eq!( - msg::source(), - exec::program_id(), - "Not allowed to clear transactions" - ); - self.transactions.remove(&transaction_hash); - } - fn check_config(&self) { - if let Some(max_mint_count) = self.config.max_mint_count { - if max_mint_count <= self.token.token_metadata_by_id.len() as u32 { - panic!( - "Mint impossible because max minting count {} limit exceeded", - max_mint_count - ); - } - } - - let current_minter = msg::source(); - let is_authorized_minter = self - .config - .authorized_minters - .iter() - .any(|authorized_minter| authorized_minter.eq(¤t_minter)); - - if !is_authorized_minter { - panic!( - "Current minter {:?} is not authorized at initialization", - current_minter - ); - } - } -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `IoNFT` from `state()`"); -} - -pub fn get_hash(account: &ActorId, transaction_id: u64) -> H256 { - let account: [u8; 32] = (*account).into(); - let transaction_id = transaction_id.to_be_bytes(); - sp_core_hashing::blake2_256(&[account.as_slice(), transaction_id.as_slice()].concat()).into() -} - -impl From for IoNFT { - fn from(value: DynamicNft) -> Self { - let DynamicNft { - token, - token_id, - owner, - transactions, - dynamic_data, - .. - } = value; - - let transactions = transactions - .iter() - .map(|(key, event)| (*key, event.clone())) - .collect(); - - Self { - token: (&token).into(), - token_id, - owner, - transactions, - dynamic_data, - } - } -} diff --git a/contracts/dynamic-nft/state/Cargo.toml b/contracts/dynamic-nft/state/Cargo.toml deleted file mode 100644 index 8b36510a1..000000000 --- a/contracts/dynamic-nft/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "dynamic-nft-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -dynamic-nft-io.workspace = true -gear-lib-old.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/dynamic-nft/state/build.rs b/contracts/dynamic-nft/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/dynamic-nft/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/dynamic-nft/state/src/lib.rs b/contracts/dynamic-nft/state/src/lib.rs deleted file mode 100644 index ed839ec75..000000000 --- a/contracts/dynamic-nft/state/src/lib.rs +++ /dev/null @@ -1,128 +0,0 @@ -#![no_std] - -use dynamic_nft_io::*; -use gear_lib_old::non_fungible_token::{ - state::NFTQueryReply, - token::{Token, TokenId}, -}; -use gstd::{ActorId, Vec}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoNFT; - - pub fn info(state: State) -> NFTQueryReply { - NFTQueryReply::NFTInfo { - name: state.token.name.clone(), - symbol: state.token.symbol.clone(), - base_uri: state.token.base_uri, - } - } - - pub fn token(state: State, token_id: TokenId) -> Token { - token_helper(&token_id, &state) - } - - pub fn tokens_for_owner(state: State, owner: ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - if let Some((_owner, token_ids)) = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)) - { - for token_id in token_ids { - tokens.push(token_helper(token_id, &state)); - } - } - tokens - } - pub fn total_supply(state: State) -> u128 { - state.token.owner_by_id.len() as u128 - } - - pub fn supply_for_owner(state: State, owner: ActorId) -> u128 { - let tokens = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)); - - tokens - .map(|(_id, tokens)| tokens.len() as u128) - .unwrap_or(0) - } - - pub fn all_tokens(state: State) -> Vec { - state - .token - .owner_by_id - .iter() - .map(|(id, _owner)| token_helper(id, &state)) - .collect() - } - - pub fn token_by_id(state: State, id: TokenId) -> Option { - state - .token - .owner_by_id - .iter() - .find(|(i, _)| id.eq(i)) - .map(|(token_id, _)| token_helper(token_id, &state)) - } - - pub fn approved_tokens(state: State, account: ActorId) -> Vec { - state - .token - .owner_by_id - .iter() - .filter_map(|(id, _owner)| { - state - .token - .token_approvals - .iter() - .find(|(token_id, _approvals)| token_id.eq(id)) - .and_then(|(_token_id, approvals)| { - if approvals.contains(&account) { - Some(token_helper(id, &state)) - } else { - None - } - }) - }) - .collect() - } -} - -fn token_helper(token_id: &TokenId, state: &IoNFT) -> Token { - let mut token = Token::default(); - if let Some((_token_id, owner_id)) = state - .token - .owner_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.id = *token_id; - token.owner_id = *owner_id; - } - if let Some((_token_id, approved_account_ids)) = state - .token - .token_approvals - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some((_token_id, Some(metadata))) = state - .token - .token_metadata_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token -} diff --git a/contracts/dynamic-nft/tests/nft_tests.rs b/contracts/dynamic-nft/tests/nft_tests.rs deleted file mode 100644 index f65461631..000000000 --- a/contracts/dynamic-nft/tests/nft_tests.rs +++ /dev/null @@ -1,507 +0,0 @@ -use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; -use gear_lib_old::non_fungible_token::io::*; -use gstd::{ActorId, Encode}; -use gtest::System; -mod utils; -use dynamic_nft_io::*; -use hex_literal::hex; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -use utils::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - let message = NFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn mint_limit_exceed() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(1), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[0]); - assert!(!res.main_failed()) -} - -#[test] -fn mint_not_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_added() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = add_minter(&nft, transaction_id, USERS[1].into(), USERS[0]); - assert!(!res.main_failed()); - let res = add_minter(&nft, transaction_id + 1, USERS[2].into(), USERS[1]); - assert!(!res.main_failed()); - - let res = add_minter(&nft, transaction_id + 1, 5.into(), 7); - assert!(res.main_failed()) -} - -#[test] -fn burn_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = burn(&nft, transaction_id, USERS[0], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: ZERO_ID.into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - // must fail since the token doesn't exist - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[0], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[1], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = transfer(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - - // must fail since the token doesn't exist - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - // must fail since transfer to the zero address - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn owner_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = owner_of(&nft, USERS[1], 0); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::Owner { - token_id: 0.into(), - owner: ActorId::from(USERS[0]), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[1]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[1].into(), - token_id: 0.into(), - approved: true, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[0]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[0].into(), - token_id: 0.into(), - approved: false, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = is_approved_to(&nft, USERS[1], 1, USERS[1]); - println!("{:?}", res.decoded_log::()); - assert!(res.main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = approve(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Approval(NFTApproval { - owner: USERS[0].into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn update_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - - let data = vec![6, 6, 6, 6, 6, 6]; - let data_hash = primitive_types::H256::from(sp_core_hashing::blake2_256(&data)); - - let res = update(&nft, transaction_id, USERS[0], data); - - let message = NFTEvent::Updated { data_hash }.encode(); - let expected_log = (USERS[0], message); - - assert!(res.contains(&expected_log)); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - // must fail since the token doesn't exist - assert!(approve(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - transaction_id += 1; - // must fail since the caller is not the token owner - assert!(approve(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - transaction_id += 1; - // must fail since approval to the zero address - assert!(approve(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - //transfer - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); - //must fail since approval was removed after transferring - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); -} - -#[test] -fn delegated_approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10 + 3000, - }; - let signature = pair.sign(message.encode().as_slice()); - - transaction_id += 1; - let res = delegated_approve(&nft, transaction_id, USERS[1], message, signature.0); - let message = NFTEvent::Approval(NFTApproval { - owner: owner_id.into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[1], message))); - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn delegated_approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - transaction_id += 1; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - // Not owner can't approve nft - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 1.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); - - // Only approved actor in delegated approve can send delegated approve action - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!(delegated_approve(&nft, transaction_id, USERS[0], message, signature.0).main_failed()); - // Must fail if user tries to approve token in wrong contract - init_nft(&sys); - let second_nft = sys.get_program(2).unwrap(); - transaction_id += 1; - assert!(!add_minter(&second_nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&second_nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!( - delegated_approve(&second_nft, transaction_id, USERS[1], message, signature.0) - .main_failed() - ); - - // Must fail if user tries to approve token to zero_id - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: 0.into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, 0, message, signature.0).main_failed()); - - // Signature not corresponds to the message content - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - let wrong_message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 2.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - assert!( - delegated_approve(&nft, transaction_id, USERS[1], wrong_message, signature.0).main_failed() - ); - - // Approve expired - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - sys.spend_blocks(1); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); -} diff --git a/contracts/dynamic-nft/tests/node_tests.rs b/contracts/dynamic-nft/tests/node_tests.rs deleted file mode 100644 index 9128ec111..000000000 --- a/contracts/dynamic-nft/tests/node_tests.rs +++ /dev/null @@ -1,463 +0,0 @@ -use dynamic_nft::WASM_BINARY_OPT; -use dynamic_nft_io::*; -use gclient::{EventProcessor, GearApi, Result}; -use gstd::{ActorId, Encode}; - -#[tokio::test] -async fn gclient_mint_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_burn_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - // failures - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 666.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_transfer_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let transfer_payload = NFTAction::Transfer { - transaction_id, - to: ActorId::from(4u64), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, transfer_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, transfer_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_owner_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let owner_payload = NFTAction::Owner { token_id: 0.into() }; - - let gas_info = api - .calculate_handle_gas(None, program_id, owner_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, owner_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_approved() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - let approve_payload = NFTAction::Approve { - transaction_id, - to: ActorId::from(3), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, approve_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, approve_payload, gas_info.burned * 2, 0) - .await?; - - let processed = listener.message_processed(message_id).await?; - assert!(processed.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} diff --git a/contracts/dynamic-nft/tests/utils.rs b/contracts/dynamic-nft/tests/utils.rs deleted file mode 100644 index 89ff2ec2c..000000000 --- a/contracts/dynamic-nft/tests/utils.rs +++ /dev/null @@ -1,162 +0,0 @@ -use dynamic_nft_io::*; -use gear_lib_old::non_fungible_token::token::*; -use gstd::ActorId; -use gtest::{Program, RunResult, System}; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, transaction_id: u64, member: u64) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn add_minter( - nft: &Program<'_>, - transaction_id: u64, - minter_id: ActorId, - member: u64, -) -> RunResult { - nft.send( - member, - NFTAction::AddMinter { - transaction_id, - minter_id, - }, - ) -} - -pub fn burn(nft: &Program<'_>, transaction_id: u64, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - NFTAction::Burn { - transaction_id, - token_id: token_id.into(), - }, - ) -} - -pub fn transfer( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Transfer { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn owner_of(nft: &Program<'_>, from: u64, token_id: u64) -> RunResult { - nft.send( - from, - NFTAction::Owner { - token_id: token_id.into(), - }, - ) -} - -pub fn is_approved_to(nft: &Program<'_>, from: u64, token_id: u64, to: u64) -> RunResult { - nft.send( - from, - NFTAction::IsApproved { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Approve { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn delegated_approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], -) -> RunResult { - let action = NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - }; - nft.send(from, action) -} - -pub fn mint_to_actor(nft: &Program<'_>, transaction_id: u64, member: [u8; 32]) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn update(nft: &Program<'_>, transaction_id: u64, from: u64, data: Vec) -> RunResult { - nft.send( - from, - NFTAction::UpdateDynamicData { - transaction_id, - data, - }, - ) -} diff --git a/contracts/escrow/Cargo.toml b/contracts/escrow/Cargo.toml deleted file mode 100644 index 9fbf8885d..000000000 --- a/contracts/escrow/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "escrow" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -sharded-fungible-token-io.workspace = true -escrow-io.workspace = true - -[build-dependencies] -escrow-io.workspace = true -gear-wasm-builder.workspace = true - -[dev-dependencies] -gclient.workspace = true -gstd.workspace = true -gtest.workspace = true -tokio.workspace = true - -# External binaries - -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true diff --git a/contracts/escrow/README.md b/contracts/escrow/README.md deleted file mode 100644 index 089a990be..000000000 --- a/contracts/escrow/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=escrow/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/escrow_io) - -# [Escrow](https://wiki.gear-tech.io/docs/examples/DeFi/escrow) - -### 🏗️ Building - -```sh -cargo b -r -p "escrow*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "escrow*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "escrow*" -``` diff --git a/contracts/escrow/build.rs b/contracts/escrow/build.rs deleted file mode 100644 index c52c2448b..000000000 --- a/contracts/escrow/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use escrow_io::EscrowMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/escrow/io/Cargo.toml b/contracts/escrow/io/Cargo.toml deleted file mode 100644 index 5ced4e9fc..000000000 --- a/contracts/escrow/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "escrow-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta.workspace = true -primitive-types.workspace = true diff --git a/contracts/escrow/io/src/lib.rs b/contracts/escrow/io/src/lib.rs deleted file mode 100644 index 8aeb16d83..000000000 --- a/contracts/escrow/io/src/lib.rs +++ /dev/null @@ -1,193 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; -use primitive_types::U256; - -pub struct EscrowMetadata; - -impl Metadata for EscrowMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct EscrowState { - pub ft_program_id: ActorId, - pub wallets: Vec<(WalletId, Wallet)>, - pub id_nonce: WalletId, - pub transaction_id: u64, - pub transactions: Vec<(u64, Option)>, -} - -/// An escrow wallet ID. -pub type WalletId = U256; - -/// Initializes an escrow program. -#[derive(Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitEscrow { - /// Address of a fungible token program. - pub ft_program_id: ActorId, -} - -/// An enum to send the program info about what it should do. -/// -/// After a successful processing of this enum, the program replies with [`EscrowEvent`]. -#[derive(Clone, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum EscrowAction { - /// Creates one escrow wallet and replies with its ID. - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be `buyer` or `seller` for this wallet. - /// * `buyer` or `seller` mustn't have the zero address. - /// - /// On success, returns [`EscrowEvent::Created`]. - Create { - /// A buyer. - buyer: ActorId, - /// A seller. - seller: ActorId, - /// An amount of tokens. - amount: u128, - }, - - /// Makes a deposit from a buyer to an escrow wallet - /// and changes wallet's [`WalletState`] to [`AwaitingConfirmation`](WalletState::AwaitingConfirmation). - /// - /// Transfers tokens to an escrow wallet until a deal is confirmed (by [`EscrowAction::Confirm`]) or cancelled ([`EscrowAction::Cancel`]). - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be a buyer for this wallet. - /// * Wallet mustn't be paid or closed (that is, wallet's [`WalletState`] must be [`AwaitingDeposit`](WalletState::AwaitingDeposit)). - /// - /// On success, returns [`EscrowEvent::Deposited`]. - Deposit( - /// A wallet ID. - WalletId, - ), - - /// Confirms a deal by transferring tokens from an escrow wallet - /// to a seller and changing wallet's [`WalletState`] to [`Closed`](WalletState::Closed). - /// - /// Transfers tokens from an escrow wallet to a seller for this wallet. - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be a buyer for this wallet. - /// * Wallet must be paid and unclosed (that is, wallet's [`WalletState`] must be [`AwaitingDeposit`](WalletState::AwaitingConfirmation)). - /// - /// On success, returns [`EscrowEvent::Confirmed`]. - Confirm( - /// A wallet ID. - WalletId, - ), - - /// Refunds tokens from an escrow wallet to a buyer - /// and changes wallet's [`WalletState`] back to [`AwaitingDeposit`](WalletState::AwaitingDeposit) - /// (that is, a wallet can be reused). - /// - /// Refunds tokens from an escrow wallet to a buyer for this wallet. - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be a seller for this wallet. - /// * Wallet must be paid and unclosed (that is, wallet's [`WalletState`] must be [`AwaitingDeposit`](WalletState::AwaitingConfirmation)). - /// - /// On success, returns [`EscrowEvent::Refunded`]. - Refund( - /// A wallet ID. - WalletId, - ), - - /// Cancels a deal and closes an escrow wallet by changing its [`WalletState`] to [`Closed`](WalletState::Closed). - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be a buyer or seller for this wallet. - /// * Wallet mustn't be paid or closed (that is, wallet's [`WalletState`] must be [`AwaitingDeposit`](WalletState::AwaitingDeposit)). - /// - /// On success, returns [`EscrowEvent::Cancelled`]. - Cancel( - /// A wallet ID. - WalletId, - ), - - /// Continues the transaction if it fails due to lack of gas - /// or due to an error in the token contract. - /// - /// # Requirements: - /// * `transaction_id` should exists in `transactions` table; - /// - /// When transaction already processed replies with [`EscrowEvent::TransactionProcessed`]. - Continue( - /// Identifier of suspended transaction. - u64, - ), -} - -/// An enum that contains a result of processed [`EscrowAction`]. -#[derive(Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum EscrowEvent { - Cancelled( - /// An ID of a wallet with a cancelled deal. - WalletId, - ), - Refunded( - /// Transaction id. - u64, - /// An ID of a refunded wallet. - WalletId, - ), - Confirmed( - /// Transaction id. - u64, - /// An ID of a wallet with a confirmed deal. - WalletId, - ), - Deposited( - /// Transaction id. - u64, - /// An ID of a deposited wallet. - WalletId, - ), - Created( - /// An ID of a created wallet. - WalletId, - ), - TransactionProcessed, - TransactionFailed, -} - -/// Escrow wallet information. -#[derive(Decode, Encode, TypeInfo, Clone, Copy, Debug, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Wallet { - /// A buyer. - pub buyer: ActorId, - /// A seller. - pub seller: ActorId, - /// A wallet state. - pub state: WalletState, - /// An amount of tokens that a wallet can have. **Not** a current amount on a wallet balance! - pub amount: u128, -} - -/// An escrow wallet state. -#[derive(Decode, Encode, TypeInfo, PartialEq, Eq, Clone, Copy, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum WalletState { - AwaitingDeposit, - AwaitingConfirmation, - Closed, -} diff --git a/contracts/escrow/src/lib.rs b/contracts/escrow/src/lib.rs deleted file mode 100644 index c28d0f8a6..000000000 --- a/contracts/escrow/src/lib.rs +++ /dev/null @@ -1,318 +0,0 @@ -#![no_std] - -use escrow_io::*; -use gstd::{async_main, collections::HashMap, exec, msg, prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -/// Transfers `amount` tokens from `sender` account to `recipient` account. -/// Arguments: -/// * `transaction_id`: associated transaction id -/// * `from`: sender account -/// * `to`: recipient account -/// * `amount`: amount of tokens -async fn transfer_tokens( - transaction_id: u64, - token_address: &ActorId, - from: &ActorId, - to: &ActorId, - amount_tokens: u128, -) -> Result<(), ()> { - let reply = msg::send_for_reply_as::<_, FTokenEvent>( - *token_address, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender: *from, - recipient: *to, - amount: amount_tokens, - }, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTokenAction::Message`") - .await; - - match reply { - Ok(FTokenEvent::Ok) => Ok(()), - _ => Err(()), - } -} - -fn get_mut_wallet(wallets: &mut HashMap, wallet_id: WalletId) -> &mut Wallet { - wallets - .get_mut(&wallet_id) - .unwrap_or_else(|| panic_wallet_not_exist(wallet_id)) -} - -fn reply(escrow_event: EscrowEvent) { - msg::reply(escrow_event, 0).expect("Error during a replying with EscrowEvent"); -} - -fn check_buyer_or_seller(buyer: ActorId, seller: ActorId) { - if msg::source() != buyer && msg::source() != seller { - panic!("msg::source() must be a buyer or seller"); - } -} - -fn check_buyer(buyer: ActorId) { - if msg::source() != buyer { - panic!("msg::source() must be a buyer"); - } -} - -fn check_seller(seller: ActorId) { - if msg::source() != seller { - panic!("msg::source() must be a seller"); - } -} - -fn panic_wallet_not_exist(wallet_id: WalletId) -> ! { - panic!("Wallet with the {wallet_id} ID doesn't exist"); -} - -#[derive(Default, Clone)] -pub struct Escrow { - pub ft_program_id: ActorId, - pub wallets: HashMap, - pub id_nonce: WalletId, - pub transaction_id: u64, - pub transactions: HashMap>, -} - -impl Escrow { - pub fn create(&mut self, buyer: ActorId, seller: ActorId, amount: u128) { - if buyer == ActorId::zero() && seller == ActorId::zero() { - panic!("A buyer or seller can't have the zero address") - } - check_buyer_or_seller(buyer, seller); - - let wallet_id = self.id_nonce; - self.id_nonce = self.id_nonce.saturating_add(WalletId::one()); - - if self.wallets.contains_key(&wallet_id) { - panic!("Wallet with the {wallet_id} already exists"); - } - self.wallets.insert( - wallet_id, - Wallet { - buyer, - seller, - amount, - state: WalletState::AwaitingDeposit, - }, - ); - - reply(EscrowEvent::Created(wallet_id)); - } - - pub async fn deposit(&mut self, transaction_id: Option, wallet_id: WalletId) { - let current_transaction_id = self.get_transaction_id(transaction_id); - - let wallet = get_mut_wallet(&mut self.wallets, wallet_id); - check_buyer(wallet.buyer); - assert_eq!(wallet.state, WalletState::AwaitingDeposit); - - if transfer_tokens( - current_transaction_id, - &self.ft_program_id, - &wallet.buyer, - &exec::program_id(), - wallet.amount, - ) - .await - .is_err() - { - self.transactions.remove(¤t_transaction_id); - reply(EscrowEvent::TransactionFailed); - return; - } - - wallet.state = WalletState::AwaitingConfirmation; - - self.transactions.remove(¤t_transaction_id); - - reply(EscrowEvent::Deposited(current_transaction_id, wallet_id)); - } - - pub async fn confirm(&mut self, transaction_id: Option, wallet_id: WalletId) { - let current_transaction_id = self.get_transaction_id(transaction_id); - - let wallet = get_mut_wallet(&mut self.wallets, wallet_id); - check_buyer(wallet.buyer); - assert_eq!(wallet.state, WalletState::AwaitingConfirmation); - - if transfer_tokens( - current_transaction_id, - &self.ft_program_id, - &exec::program_id(), - &wallet.seller, - wallet.amount, - ) - .await - .is_ok() - { - wallet.state = WalletState::Closed; - - self.transactions.remove(¤t_transaction_id); - - reply(EscrowEvent::Confirmed(current_transaction_id, wallet_id)); - } else { - reply(EscrowEvent::TransactionFailed); - } - } - - pub async fn refund(&mut self, transaction_id: Option, wallet_id: WalletId) { - let current_transaction_id = self.get_transaction_id(transaction_id); - - let wallet = get_mut_wallet(&mut self.wallets, wallet_id); - check_seller(wallet.seller); - assert_eq!(wallet.state, WalletState::AwaitingConfirmation); - - if transfer_tokens( - current_transaction_id, - &self.ft_program_id, - &exec::program_id(), - &wallet.buyer, - wallet.amount, - ) - .await - .is_ok() - { - wallet.state = WalletState::AwaitingDeposit; - - self.transactions.remove(¤t_transaction_id); - - reply(EscrowEvent::Refunded(current_transaction_id, wallet_id)); - } else { - reply(EscrowEvent::TransactionFailed); - } - } - - pub async fn cancel(&mut self, wallet_id: WalletId) { - let wallet = get_mut_wallet(&mut self.wallets, wallet_id); - check_buyer_or_seller(wallet.buyer, wallet.seller); - assert_eq!(wallet.state, WalletState::AwaitingDeposit); - - wallet.state = WalletState::Closed; - - reply(EscrowEvent::Cancelled(wallet_id)); - } - - /// Continues cached transaction by `transaction_id`. - /// - /// Execution makes sense if, when returning from an async message, - /// the gas ran out and the state has changed. - pub async fn continue_transaction(&mut self, transaction_id: u64) { - let transactions = self.transactions.clone(); - let payload = &transactions - .get(&transaction_id) - .expect("Transaction does not exist"); - if let Some(action) = payload { - match action { - EscrowAction::Deposit(wallet_id) => { - self.deposit(Some(transaction_id), *wallet_id).await - } - EscrowAction::Confirm(wallet_id) => { - self.confirm(Some(transaction_id), *wallet_id).await - } - EscrowAction::Refund(wallet_id) => { - self.refund(Some(transaction_id), *wallet_id).await - } - _ => unreachable!(), - } - } else { - msg::reply(EscrowEvent::TransactionProcessed, 0) - .expect("Error in a reply `EscrowEvent::TransactionProcessed`"); - } - } - - pub fn get_transaction_id(&mut self, transaction_id: Option) -> u64 { - match transaction_id { - Some(transaction_id) => transaction_id, - None => { - let transaction_id = self.transaction_id; - self.transaction_id = self.transaction_id.wrapping_add(1); - transaction_id - } - } - } -} - -static mut ESCROW: Option = None; - -#[no_mangle] -extern fn init() { - let config: InitEscrow = msg::load().expect("Unable to decode InitEscrow"); - - if config.ft_program_id.is_zero() { - panic!("FT program address can't be 0"); - } - - let escrow = Escrow { - ft_program_id: config.ft_program_id, - ..Default::default() - }; - unsafe { - ESCROW = Some(escrow); - } -} - -#[async_main] -async fn main() { - let action: EscrowAction = msg::load().expect("Unable to decode EscrowAction"); - let escrow = unsafe { ESCROW.get_or_insert(Default::default()) }; - match action { - EscrowAction::Create { - buyer, - seller, - amount, - } => escrow.create(buyer, seller, amount), - EscrowAction::Deposit(wallet_id) => { - escrow - .transactions - .insert(escrow.transaction_id, Some(action)); - escrow.deposit(None, wallet_id).await - } - EscrowAction::Confirm(wallet_id) => { - escrow - .transactions - .insert(escrow.transaction_id, Some(action)); - escrow.confirm(None, wallet_id).await - } - EscrowAction::Refund(wallet_id) => { - escrow - .transactions - .insert(escrow.transaction_id, Some(action)); - escrow.refund(None, wallet_id).await - } - EscrowAction::Cancel(wallet_id) => escrow.cancel(wallet_id).await, - EscrowAction::Continue(transaction_id) => escrow.continue_transaction(transaction_id).await, - } -} - -#[no_mangle] -extern fn state() { - let escrow = unsafe { ESCROW.take().expect("Uninitialized Escrow state") }; - msg::reply::(escrow.into(), 0).expect("Failed to share state"); -} - -impl From for EscrowState { - fn from(state: Escrow) -> Self { - Self { - ft_program_id: state.ft_program_id, - wallets: state - .wallets - .iter() - .map(|(id, wallet)| (*id, *wallet)) - .collect(), - id_nonce: state.id_nonce, - transaction_id: state.transaction_id, - transactions: state - .transactions - .iter() - .map(|(a, b)| (*a, b.clone())) - .collect(), - } - } -} diff --git a/contracts/escrow/state/Cargo.toml b/contracts/escrow/state/Cargo.toml deleted file mode 100644 index b2f75bdf8..000000000 --- a/contracts/escrow/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "escrow-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -primitive-types.workspace = true -escrow-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/escrow/state/build.rs b/contracts/escrow/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/escrow/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/escrow/state/src/lib.rs b/contracts/escrow/state/src/lib.rs deleted file mode 100644 index cd5b96f1c..000000000 --- a/contracts/escrow/state/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![no_std] - -use escrow_io::*; -use gstd::prelude::*; -use primitive_types::U256; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = EscrowState; - - pub fn info(state: State, wallet_id: U256) -> Wallet { - let (_, wallet) = *state - .wallets - .iter() - .find(|(id, _)| id == &wallet_id) - .unwrap_or_else(|| panic!("Wallet with the {wallet_id} ID doesn't exist")); - - wallet - } - - pub fn created_wallets(state: State) -> Vec<(WalletId, Wallet)> { - state - .wallets - .iter() - .map(|(wallet_id, wallet)| (*wallet_id, *wallet)) - .collect() - } -} diff --git a/contracts/escrow/tests/cancel.rs b/contracts/escrow/tests/cancel.rs deleted file mode 100644 index e01800d1f..000000000 --- a/contracts/escrow/tests/cancel.rs +++ /dev/null @@ -1,75 +0,0 @@ -pub mod utils; -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn cancel_paid() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - // Should fail because the buyer/seller tries to cancel the deal with the paid wallet. - fail::cancel(&escrow_program, WALLET[0], BUYER[0]); - fail::cancel(&escrow_program, WALLET[0], SELLER[0]); -} - -// TODO: fix test -#[test] -#[ignore] -fn foreign_user_cancel() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - // Should fail because not the buyer/seller for this wallet tries to cancel the deal and close the wallet. - fail::cancel(&escrow_program, WALLET[0], FOREIGN_USER); -} - -// TODO: fix test -#[test] -#[ignore] -fn interact_after_cancel() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::cancel(&escrow_program, WALLET[0], BUYER[0]); - - // All of this should fail because nobody can interact with a closed wallet. - fail::deposit(&escrow_program, WALLET[0], BUYER[0], false); - fail::refund(&escrow_program, WALLET[0], SELLER[0]); - fail::confirm(&escrow_program, WALLET[0], BUYER[0]); - fail::cancel(&escrow_program, WALLET[0], SELLER[0]); -} diff --git a/contracts/escrow/tests/confirm.rs b/contracts/escrow/tests/confirm.rs deleted file mode 100644 index e99889ecf..000000000 --- a/contracts/escrow/tests/confirm.rs +++ /dev/null @@ -1,104 +0,0 @@ -pub mod utils; -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn not_buyer_confirm() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - // Should fail because not the buyer for this wallet tries to confirm the deal. - fail::confirm(&escrow_program, WALLET[0], FOREIGN_USER); - fail::confirm(&escrow_program, WALLET[0], BUYER[1]); - fail::confirm(&escrow_program, WALLET[0], SELLER[0]); - ft_program.check_balance(SELLER[0], 0); -} - -// TODO: fix test -#[test] -#[ignore] -fn double_confirm() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - check::confirm(&escrow_program, WALLET[0], BUYER[0], 1); - // Should fail because the buyer tries to confirm the deal twice. - fail::confirm(&escrow_program, WALLET[0], BUYER[0]); - ft_program.check_balance(SELLER[0], AMOUNT[0]); -} - -// TODO: fix test -#[test] -#[ignore] -fn confirm_before_deposit() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - // Should fail because the buyer tries to confirm the deal before depositing. - fail::confirm(&escrow_program, WALLET[0], BUYER[0]); - ft_program.check_balance(SELLER[0], 0); -} - -// TODO: fix test -#[test] -#[ignore] -fn interact_after_confirm() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - check::confirm(&escrow_program, WALLET[0], BUYER[0], 1); - - // All of this should fail because nobody can interact with a wallet after confirming a deal. - fail::deposit(&escrow_program, WALLET[0], BUYER[0], false); - fail::refund(&escrow_program, WALLET[0], SELLER[0]); - fail::confirm(&escrow_program, WALLET[0], BUYER[0]); - fail::cancel(&escrow_program, WALLET[0], SELLER[0]); -} diff --git a/contracts/escrow/tests/create.rs b/contracts/escrow/tests/create.rs deleted file mode 100644 index dbc348e93..000000000 --- a/contracts/escrow/tests/create.rs +++ /dev/null @@ -1,17 +0,0 @@ -pub mod utils; -use utils::*; - -#[test] -fn foreign_user_create() { - let system = init_system(); - let escrow_program = init_escrow(&system); - - // Should fail because not a future buyer/seller for this wallet tries to create it. - fail::create( - &escrow_program, - FOREIGN_USER, - BUYER[0], - SELLER[0], - AMOUNT[0], - ); -} diff --git a/contracts/escrow/tests/deposit.rs b/contracts/escrow/tests/deposit.rs deleted file mode 100644 index 6f76377af..000000000 --- a/contracts/escrow/tests/deposit.rs +++ /dev/null @@ -1,67 +0,0 @@ -pub mod utils; -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn not_enough_tokens() { - let system = init_system(); - - let escrow_program = init_escrow(&system); - Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - // Should fail because the buyer doesn't have enough tokens to deposit. - fail::deposit(&escrow_program, WALLET[0], BUYER[0], true); -} - -// TODO: fix test -#[test] -#[ignore] -fn double_deposit() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - // Purposely make it possible for the buyer to pay twice. - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0] * 2, false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - // Should fail because the buyer tries to deposit twice. - fail::deposit(&escrow_program, WALLET[0], BUYER[0], false); - ft_program.check_balance(BUYER[0], AMOUNT[0]); -} - -#[test] -fn not_buyer_deposit() { - let system = init_system(); - let escrow_program = init_escrow(&system); - - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - // Should fail because not a buyer for this wallet tries to deposit. - fail::deposit(&escrow_program, WALLET[0], FOREIGN_USER, false); - fail::deposit(&escrow_program, WALLET[0], BUYER[1], false); - fail::deposit(&escrow_program, WALLET[0], SELLER[0], false); -} diff --git a/contracts/escrow/tests/node_test.rs b/contracts/escrow/tests/node_test.rs deleted file mode 100644 index 7eb0cfc5a..000000000 --- a/contracts/escrow/tests/node_test.rs +++ /dev/null @@ -1,539 +0,0 @@ -use escrow_io::*; -use gclient::{EventProcessor, GearApi, Result}; -use gstd::Encode; - -const PATH: &str = "../target/wasm32-unknown-unknown/release/escrow.opt.wasm"; - -pub const FT_PROGRAM_ID: u64 = 2; -pub const ESCROW_PROGRAM_ID: u64 = 13370; -pub const FOREIGN_USER: u64 = 1337; -pub const BUYER: [u64; 2] = [12, 34]; -pub const SELLER: [u64; 2] = [56, 78]; -pub const AMOUNT: [u128; 2] = [12345, 54321]; -pub const WALLET: [u128; 2] = [0, 1]; -pub const AMOUNT_REMAINDER: u128 = 20000; -pub const NONEXISTENT_WALLET: u128 = 999999; - -#[tokio::test] -async fn gclient_init() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - Ok(()) -} - -#[tokio::test] -async fn gclient_create() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let escrow_create = EscrowAction::Create { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - }; - - let escrow_create_payload = escrow_create.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - escrow_create_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - escrow_create_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - Ok(()) -} - -#[tokio::test] -async fn gclient_deposit_not_enough_tokens() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let escrow_create = EscrowAction::Create { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - }; - - let escrow_create_payload = escrow_create.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - escrow_create_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - escrow_create_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let deposit = EscrowAction::Deposit(WALLET[0].into()); - - let deposit_payload = deposit.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - deposit_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - deposit_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - Ok(()) -} - -#[tokio::test] -async fn gclient_not_buyer_confirm() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let escrow_create = EscrowAction::Create { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - }; - - let escrow_create_payload = escrow_create.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - escrow_create_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - escrow_create_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let deposit = EscrowAction::Deposit(WALLET[0].into()); - - let deposit_payload = deposit.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - deposit_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - deposit_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let confirm = EscrowAction::Confirm(WALLET[0].into()); - - let confirm_payload = confirm.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - confirm_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - confirm_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - Ok(()) -} - -#[tokio::test] -async fn gclient_cancel_paid() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let escrow_create = EscrowAction::Create { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - }; - - let escrow_create_payload = escrow_create.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - escrow_create_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - escrow_create_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let deposit = EscrowAction::Deposit(WALLET[0].into()); - - let deposit_payload = deposit.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - deposit_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - deposit_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let cancel = EscrowAction::Cancel(WALLET[0].into()); - - let cancel_payload = cancel.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - cancel_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - cancel_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - Ok(()) -} - -#[tokio::test] -async fn gclient_refund_not_paid() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await.unwrap(); - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let init = InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - init_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - let escrow_create = EscrowAction::Create { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - }; - - let escrow_create_payload = escrow_create.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - escrow_create_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - escrow_create_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let refund = EscrowAction::Refund(WALLET[0].into()); - - let refund_payload = refund.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(PATH)?, - refund_payload.clone(), - 0, - true, - ) - .await?; - - let (_message_id, _program_id, _hash) = api - .upload_program_bytes_by_path( - PATH, - gclient::now_micros().to_le_bytes(), - refund_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - Ok(()) -} diff --git a/contracts/escrow/tests/other.rs b/contracts/escrow/tests/other.rs deleted file mode 100644 index efa7ea2a9..000000000 --- a/contracts/escrow/tests/other.rs +++ /dev/null @@ -1,231 +0,0 @@ -pub mod utils; - -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn two_different_escrows() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint( - 0, - WALLET[0] as u64, - BUYER[0], - AMOUNT[0] + AMOUNT_REMAINDER, - false, - ); - ft_program.approve( - 1, - BUYER[0], - ESCROW_PROGRAM_ID, - AMOUNT[0] + AMOUNT_REMAINDER, - false, - ); - - ft_program.mint( - 2, - WALLET[0] as u64, - BUYER[1], - AMOUNT[1] + AMOUNT_REMAINDER, - false, - ); - ft_program.approve( - 3, - BUYER[1], - ESCROW_PROGRAM_ID, - AMOUNT[1] + AMOUNT_REMAINDER, - false, - ); - - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::create( - &escrow_program, - WALLET[1], - SELLER[1], - BUYER[1], - SELLER[1], - AMOUNT[1], - ); - - check::info( - &escrow_program, - WALLET[0], - Wallet { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - state: WalletState::AwaitingDeposit, - }, - ); - check::info( - &escrow_program, - WALLET[1], - Wallet { - buyer: BUYER[1].into(), - seller: SELLER[1].into(), - amount: AMOUNT[1], - state: WalletState::AwaitingDeposit, - }, - ); - - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - check::deposit(&escrow_program, WALLET[1], BUYER[1], 1); - - check::info( - &escrow_program, - WALLET[0], - Wallet { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - state: WalletState::AwaitingConfirmation, - }, - ); - check::info( - &escrow_program, - WALLET[1], - Wallet { - buyer: BUYER[1].into(), - seller: SELLER[1].into(), - amount: AMOUNT[1], - state: WalletState::AwaitingConfirmation, - }, - ); - - check::confirm(&escrow_program, WALLET[0], BUYER[0], 2); - check::confirm(&escrow_program, WALLET[1], BUYER[1], 3); - - check::info( - &escrow_program, - WALLET[0], - Wallet { - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - amount: AMOUNT[0], - state: WalletState::Closed, - }, - ); - check::info( - &escrow_program, - WALLET[1], - Wallet { - buyer: BUYER[1].into(), - seller: SELLER[1].into(), - amount: AMOUNT[1], - state: WalletState::Closed, - }, - ); - - ft_program.check_balance(BUYER[0], AMOUNT_REMAINDER); - ft_program.check_balance(BUYER[1], AMOUNT_REMAINDER); - - ft_program.check_balance(SELLER[0], AMOUNT[0]); - ft_program.check_balance(SELLER[1], AMOUNT[1]); -} - -// TODO: fix test -#[test] -#[ignore] -fn reuse_after_refund() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - - check::refund(&escrow_program, WALLET[0], SELLER[0], 1); - ft_program.check_balance(BUYER[0], AMOUNT[0]); - - ft_program.approve(2, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 2); - check::confirm(&escrow_program, WALLET[0], BUYER[0], 3); -} - -#[test] -fn interact_with_non_existent_wallet() { - let system = init_system(); - let escrow_program = init_escrow(&system); - - fail::deposit(&escrow_program, NONEXISTENT_WALLET, BUYER[0], false); - fail::cancel(&escrow_program, NONEXISTENT_WALLET, BUYER[0]); - fail::refund(&escrow_program, NONEXISTENT_WALLET, BUYER[0]); - fail::confirm(&escrow_program, NONEXISTENT_WALLET, BUYER[0]); -} - -#[test] -#[should_panic] -fn interact_with_non_existent_wallet_meta_state() { - let system = init_system(); - let escrow_program = init_escrow(&system); - - fail::info(&escrow_program, NONEXISTENT_WALLET); -} - -#[test] -fn created_wallets() { - let system = init_system(); - let escrow_program = init_escrow(&system); - - check::created_wallets(&escrow_program, vec![]); - - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::create( - &escrow_program, - WALLET[1], - SELLER[1], - BUYER[1], - SELLER[1], - AMOUNT[1], - ); - - check::created_wallets( - &escrow_program, - vec![ - ( - WALLET[0].into(), - Wallet { - amount: AMOUNT[0], - buyer: BUYER[0].into(), - seller: SELLER[0].into(), - state: WalletState::AwaitingDeposit, - }, - ), - ( - WALLET[1].into(), - Wallet { - amount: AMOUNT[1], - buyer: BUYER[1].into(), - seller: SELLER[1].into(), - state: WalletState::AwaitingDeposit, - }, - ), - ], - ); -} diff --git a/contracts/escrow/tests/refund.rs b/contracts/escrow/tests/refund.rs deleted file mode 100644 index b585b8e4a..000000000 --- a/contracts/escrow/tests/refund.rs +++ /dev/null @@ -1,48 +0,0 @@ -pub mod utils; -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn refund_not_paid() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - // Should fail because the seller tries to refund tokens from the unpaid wallet. - fail::refund(&escrow_program, WALLET[0], SELLER[0]); -} - -// TODO: fix test -#[test] -#[ignore] -fn not_seller_refund() { - let system = init_system(); - let escrow_program = init_escrow(&system); - let ft_program = Program::ftoken(WALLET[0] as u64, FT_PROGRAM_ID, &system); - - ft_program.mint(0, WALLET[0] as u64, BUYER[0], AMOUNT[0], false); - ft_program.approve(1, BUYER[0], ESCROW_PROGRAM_ID, AMOUNT[0], false); - check::create( - &escrow_program, - WALLET[0], - SELLER[0], - BUYER[0], - SELLER[0], - AMOUNT[0], - ); - check::deposit(&escrow_program, WALLET[0], BUYER[0], 0); - // Should fail because not the seller for this wallet tries to refund. - fail::refund(&escrow_program, WALLET[0], FOREIGN_USER); - fail::refund(&escrow_program, WALLET[0], BUYER[0]); - fail::refund(&escrow_program, WALLET[0], SELLER[1]); -} diff --git a/contracts/escrow/tests/utils/check.rs b/contracts/escrow/tests/utils/check.rs deleted file mode 100644 index 34d76a4dc..000000000 --- a/contracts/escrow/tests/utils/check.rs +++ /dev/null @@ -1,85 +0,0 @@ -use super::*; - -pub fn create( - escrow_program: &Program<'_>, - wallet_id: u128, - from: u64, - buyer: u64, - seller: u64, - amount: u128, -) { - assert!(escrow_program - .send( - from, - EscrowAction::Create { - buyer: buyer.into(), - seller: seller.into(), - amount, - }, - ) - .contains(&(from, EscrowEvent::Created(wallet_id.into()).encode()))); -} - -pub fn deposit(escrow_program: &Program<'_>, wallet_id: u128, buyer: u64, expected_tx_id: u64) { - assert!(escrow_program - .send(buyer, EscrowAction::Deposit(wallet_id.into())) - .contains(&( - buyer, - EscrowEvent::Deposited(expected_tx_id, wallet_id.into()).encode() - ))); -} - -pub fn confirm(escrow_program: &Program<'_>, wallet_id: u128, buyer: u64, expected_tx_id: u64) { - assert!(escrow_program - .send(buyer, EscrowAction::Confirm(wallet_id.into())) - .contains(&( - buyer, - EscrowEvent::Confirmed(expected_tx_id, wallet_id.into()).encode() - ))); -} - -pub fn refund(escrow_program: &Program<'_>, wallet_id: u128, seller: u64, expected_tx_id: u64) { - assert!(escrow_program - .send(seller, EscrowAction::Refund(wallet_id.into())) - .contains(&( - seller, - EscrowEvent::Refunded(expected_tx_id, wallet_id.into()).encode() - ))); -} - -pub fn cancel(escrow_program: &Program<'_>, wallet_id: u128, from: u64) { - assert!(escrow_program - .send(from, EscrowAction::Cancel(wallet_id.into())) - .contains(&(from, EscrowEvent::Cancelled(wallet_id.into()).encode()))); -} - -pub fn info(_escrow_program: &Program<'_>, _wallet_id: u128, _wallet_info: Wallet) { - /* assert_eq!( - escrow_program - .meta_state::<_, EscrowStateReply>(EscrowState::Info(wallet_id.into())) - .unwrap(), - EscrowStateReply::Info(wallet_info) - ) */ -} - -pub fn created_wallets( - _escrow_program: &Program<'_>, - mut _created_wallets: Vec<(WalletId, Wallet)>, -) { - /* let reply = escrow_program - .meta_state::<_, EscrowStateReply>(EscrowState::CreatedWallets) - .unwrap(); - match reply { - EscrowStateReply::CreatedWallets(mut vec) => { - vec.sort_by(|(wallet_id_1, _wallet1), (wallet_id_2, _wallet2)| { - wallet_id_1.cmp(wallet_id_2) - }); - created_wallets.sort_by(|(wallet_id_1, _wallet1), (wallet_id_2, _wallet2)| { - wallet_id_1.cmp(wallet_id_2) - }); - - assert_eq!(vec, created_wallets) - } - _ => panic!("wrong reply"), - } */ -} diff --git a/contracts/escrow/tests/utils/fail.rs b/contracts/escrow/tests/utils/fail.rs deleted file mode 100644 index 90e303cc6..000000000 --- a/contracts/escrow/tests/utils/fail.rs +++ /dev/null @@ -1,51 +0,0 @@ -use super::*; - -pub fn create(escrow_program: &Program<'_>, from: u64, buyer: u64, seller: u64, amount: u128) { - assert!(escrow_program - .send( - from, - EscrowAction::Create { - buyer: buyer.into(), - seller: seller.into(), - amount, - }, - ) - .main_failed()); -} - -pub fn deposit(escrow_program: &Program<'_>, wallet_id: u128, from: u64, transaction_failed: bool) { - if transaction_failed { - assert!(escrow_program - .send(from, EscrowAction::Deposit(wallet_id.into())) - .contains(&(from, EscrowEvent::TransactionFailed.encode()))); - } else { - assert!(escrow_program - .send(from, EscrowAction::Deposit(wallet_id.into())) - .main_failed()); - } -} - -pub fn confirm(escrow_program: &Program<'_>, wallet_id: u128, from: u64) { - assert!(escrow_program - .send(from, EscrowAction::Confirm(wallet_id.into())) - .main_failed()); -} - -pub fn refund(escrow_program: &Program<'_>, wallet_id: u128, from: u64) { - assert!(escrow_program - .send(from, EscrowAction::Refund(wallet_id.into())) - .main_failed()); -} - -pub fn cancel(escrow_program: &Program<'_>, wallet_id: u128, from: u64) { - assert!(escrow_program - .send(from, EscrowAction::Cancel(wallet_id.into())) - .main_failed()); -} - -pub fn info(_escrow_program: &Program<'_>, _wallet_id: u128) { - unimplemented!("New metawasm state unimplemented!") - /* escrow_program - .meta_state::<_, EscrowStateReply>(EscrowState::Info(wallet_id.into())) - .unwrap(); */ -} diff --git a/contracts/escrow/tests/utils/mod.rs b/contracts/escrow/tests/utils/mod.rs deleted file mode 100644 index a03fc9354..000000000 --- a/contracts/escrow/tests/utils/mod.rs +++ /dev/null @@ -1,40 +0,0 @@ -pub use escrow_io::*; -use gstd::prelude::*; -pub use gtest::{Program, System}; -pub use token::*; - -pub mod check; -pub mod fail; -pub mod token; - -pub const FT_PROGRAM_ID: u64 = 2; -pub const ESCROW_PROGRAM_ID: u64 = 13370; -pub const FOREIGN_USER: u64 = 1337; -pub const BUYER: [u64; 2] = [12, 34]; -pub const SELLER: [u64; 2] = [56, 78]; -pub const AMOUNT: [u128; 2] = [12345, 54321]; -pub const WALLET: [u128; 2] = [0, 1]; -pub const AMOUNT_REMAINDER: u128 = 20000; -pub const NONEXISTENT_WALLET: u128 = 999999; - -pub fn init_system() -> System { - let system = System::new(); - system.init_logger(); - - system -} - -pub fn init_escrow(sys: &System) -> Program<'_> { - let escrow_program = Program::current_with_id(sys, ESCROW_PROGRAM_ID); - - assert!(!escrow_program - .send( - FOREIGN_USER, - InitEscrow { - ft_program_id: FT_PROGRAM_ID.into(), - }, - ) - .main_failed()); - - escrow_program -} diff --git a/contracts/escrow/tests/utils/token.rs b/contracts/escrow/tests/utils/token.rs deleted file mode 100644 index a4144f16d..000000000 --- a/contracts/escrow/tests/utils/token.rs +++ /dev/null @@ -1,157 +0,0 @@ -use gstd::prelude::*; -use gtest::{Program, ProgramBuilder, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub trait FToken { - fn ftoken(owner: u64, id: u64, system: &System) -> Program<'_>; - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn check_balance(&self, account: u64, expected_amount: u128); - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: u64, - recipient: u64, - amount: u128, - error: bool, - ); - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ); - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool); -} - -impl FToken for Program<'_> { - fn ftoken(owner: u64, id: u64, system: &System) -> Program<'_> { - let ftoken = ProgramBuilder::from_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ) - .with_id(id) - .build(system); - - let storage_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let ft_logic_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - let res = ftoken.send( - owner, - InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - }, - ); - - assert!(!res.main_failed()); - ftoken - } - - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Mint { - recipient: account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Burn { - sender: account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: u64, - recipient: u64, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Transfer { - sender: sender.into(), - recipient: recipient.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }; - - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn check_balance(&self, account: u64, expected_amount: u128) { - let res = self.send(100, FTokenAction::GetBalance(account.into())); - let reply = FTokenEvent::Balance(expected_amount).encode(); - assert!(res.contains(&(100, reply))); - } - - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool) { - let res = self.send(from, payload); - let reply = if error { - FTokenEvent::Err.encode() - } else { - FTokenEvent::Ok.encode() - }; - - assert!(res.contains(&(from, reply))); - } -} diff --git a/contracts/feeds/Cargo.toml b/contracts/feeds/Cargo.toml deleted file mode 100644 index 641dda752..000000000 --- a/contracts/feeds/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "feeds" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -feeds-io.workspace = true - -[dev-dependencies] -gtest.workspace = true -feeds-channel-io.workspace = true - -# External binaries - -feeds-channel.workspace = true - -[build-dependencies] -feeds-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/feeds/README.md b/contracts/feeds/README.md deleted file mode 100644 index 1c68b5413..000000000 --- a/contracts/feeds/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=feeds/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/feeds_io) - -# Feeds - -### 🏗️ Building - -```sh -cargo b -r -p "feeds*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "feeds*" -``` diff --git a/contracts/feeds/build.rs b/contracts/feeds/build.rs deleted file mode 100644 index f32df0394..000000000 --- a/contracts/feeds/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use feeds_io::RouterMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/feeds/channel/Cargo.toml b/contracts/feeds/channel/Cargo.toml deleted file mode 100644 index 1e2f877a5..000000000 --- a/contracts/feeds/channel/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "feeds-channel" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -async-trait.workspace = true -feeds-channel-io.workspace = true -feeds-io.workspace = true - -[build-dependencies] -feeds-channel-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/feeds/channel/build.rs b/contracts/feeds/channel/build.rs deleted file mode 100644 index ac83efa87..000000000 --- a/contracts/feeds/channel/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use feeds_channel_io::ChannelMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/feeds/channel/io/Cargo.toml b/contracts/feeds/channel/io/Cargo.toml deleted file mode 100644 index ad65c8335..000000000 --- a/contracts/feeds/channel/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "feeds-channel-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/feeds/channel/io/src/lib.rs b/contracts/feeds/channel/io/src/lib.rs deleted file mode 100644 index 30338b055..000000000 --- a/contracts/feeds/channel/io/src/lib.rs +++ /dev/null @@ -1,66 +0,0 @@ -#![no_std] - -use gmeta::{InOut, Metadata, Out}; -use gstd::{exec, msg, prelude::*, ActorId, Decode, Encode, TypeInfo}; - -pub struct ChannelMetadata; - -impl Metadata for ChannelMetadata { - type Init = (); - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Channel { - pub owner_id: ActorId, - pub router_id: ActorId, - pub name: String, - pub description: String, - pub messages: Vec, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ChannelAction { - Register { router_contract_id: ActorId }, - Subscribe, - Unsubscribe, - Post(String), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ChannelOutput { - SubscriberAdded(ActorId), - SubscriberRemoved(ActorId), - MessagePosted(Message), - SingleMessage(Message), - Registered, -} - -#[derive(Clone, Debug, Encode, Decode, TypeInfo, Default, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Message { - pub owner: ActorId, - pub text: String, - pub timestamp: u32, -} - -impl Message { - pub fn new(text: String) -> Self { - Self { - owner: msg::source(), - text, - timestamp: exec::block_height(), - } - } -} diff --git a/contracts/feeds/channel/src/lib.rs b/contracts/feeds/channel/src/lib.rs deleted file mode 100644 index 4bf7bb161..000000000 --- a/contracts/feeds/channel/src/lib.rs +++ /dev/null @@ -1,174 +0,0 @@ -#![no_std] - -use feeds_channel_io::*; -use feeds_io::{RouterAction, RouterEvent}; -use gstd::{debug, msg, prelude::*, ActorId}; - -static mut CHANNEL: Option = None; - -#[async_trait::async_trait] -pub trait ChannelHandler { - fn set_owner_id(&mut self, id: ActorId); - - fn set_router_id(&mut self, id: ActorId); - - fn is_owner(&self, id: ActorId) -> bool; - - fn set_name(&mut self, name: &'static str); - - fn set_description(&mut self, desc: &'static str); - - async fn register(&mut self, router_id: &ActorId); - - async fn add_subscriber(&mut self); - - async fn remove_subscriber(&mut self); - - fn add_message(&mut self, message: Message); -} - -#[async_trait::async_trait] -impl ChannelHandler for Channel { - fn set_owner_id(&mut self, id: ActorId) { - self.owner_id = id; - } - - fn set_router_id(&mut self, id: ActorId) { - self.router_id = id; - } - - fn is_owner(&self, id: ActorId) -> bool { - id == self.owner_id - } - - fn set_name(&mut self, name: &'static str) { - self.name = String::from(name); - } - - fn set_description(&mut self, desc: &'static str) { - self.description = String::from(desc); - } - - async fn register(&mut self, router_id: &ActorId) { - assert_eq!( - msg::source(), - self.owner_id, - "Only owner can register its channel" - ); - self.set_router_id(*router_id); - msg::send_for_reply_as::<_, RouterEvent>( - *router_id, - RouterAction::Register { - name: self.name.clone(), - description: self.description.clone(), - owner_id: msg::source(), - }, - 0, - 0, - ) - .expect("Error in sending a message `[RouterAction::Register]` to router contract") - .await - .expect("Unable to decode `RouterEvent`"); - msg::reply(ChannelOutput::Registered, 0) - .expect("Error in reply to message ChannelAction::Registered"); - } - - async fn add_subscriber(&mut self) { - // send message to router contract to inform about new subscriber - msg::send_for_reply_as::<_, RouterEvent>( - self.router_id, - RouterAction::AddSubscriberToChannel(msg::source()), - 0, - 0, - ).expect("Error in sending async message `[RouterAction::AddSubscriberToChannel]` to router contract") - .await - .expect("Unable to decode `RouterEvent`"); - - msg::reply(ChannelOutput::SubscriberAdded(msg::source()), 0) - .expect("Error in reply to message ChannelAction::Subscribe"); - debug!("CHANNEL {:?}: Subscriber added", self.name); - } - - async fn remove_subscriber(&mut self) { - // send message to router contract to delete a subscriber - msg::send_for_reply_as::<_, RouterEvent>( - self.router_id, - RouterAction::RemoveSubscriberFromChannel(msg::source()), - 0, - 0, - ).expect("Error in sending async message `[RouterAction::AddSubscriberToChannel]` to router contract") - .await - .expect("Unable to decode `RouterEvent`"); - - msg::reply(ChannelOutput::SubscriberRemoved(msg::source()), 0) - .expect("Error in reply to message ChannelAction::Unsubscribe"); - - debug!("CHANNEL {:?}: Subscriber removed", self.name); - } - - fn add_message(&mut self, message: Message) { - self.messages.push(message); - } -} - -#[no_mangle] -extern fn init() { - let mut channel: Channel = Default::default(); - channel.set_owner_id(msg::source()); - channel.set_name("Channel-Coolest-Name"); - channel.set_description("Channel-Coolest-Description"); - let init_message = Message::new(format!("Channel {:?} was created", channel.name)); - channel.add_message(init_message); - debug!( - "Channel {:?} initialized successfully!", - channel.name.clone() - ); - unsafe { CHANNEL = Some(channel) }; -} - -#[gstd::async_main] -async unsafe fn main() { - let channel = unsafe { CHANNEL.get_or_insert(Default::default()) }; - let action: ChannelAction = msg::load().unwrap_or_else(|_| { - panic!( - "CHANNEL {:?}: Unable to decode Channel Action", - channel.name - ) - }); - - debug!("CHANNEL {:?}: Received action: {:?}", channel.name, action); - match action { - ChannelAction::Register { router_contract_id } => { - channel.register(&router_contract_id).await - } - ChannelAction::Subscribe => { - channel.add_subscriber().await; - } - ChannelAction::Unsubscribe => { - channel.remove_subscriber().await; - } - ChannelAction::Post(text) => { - if !channel.is_owner(msg::source()) { - panic!("CHANNEL {:?}: Poster is not an owner", channel.name) - } - - let message = Message::new(text); - - channel.add_message(message.clone()); - - msg::reply(ChannelOutput::MessagePosted(message.clone()), 0) - .expect("Error in reply to message ChannelAction::Post"); - - debug!("Added a post: {:?}", message); - } - } -} - -#[no_mangle] -extern fn state() { - msg::reply( - unsafe { CHANNEL.clone().expect("Uninitialized channel state") }, - 0, - ) - .expect("Failed to encode or reply with `::State` from `state()`"); -} diff --git a/contracts/feeds/channel/state/Cargo.toml b/contracts/feeds/channel/state/Cargo.toml deleted file mode 100644 index dc7fb6a87..000000000 --- a/contracts/feeds/channel/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "feeds-channel-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -feeds-channel-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/feeds/channel/state/build.rs b/contracts/feeds/channel/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/feeds/channel/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/feeds/channel/state/src/lib.rs b/contracts/feeds/channel/state/src/lib.rs deleted file mode 100644 index a82e7c9a2..000000000 --- a/contracts/feeds/channel/state/src/lib.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![no_std] - -use feeds_channel_io::*; -use gstd::prelude::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = Channel; - - pub fn all_messages(state: State) -> Vec { - state.messages - } -} diff --git a/contracts/feeds/io/Cargo.toml b/contracts/feeds/io/Cargo.toml deleted file mode 100644 index 0cc3330ed..000000000 --- a/contracts/feeds/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "feeds-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/feeds/io/src/lib.rs b/contracts/feeds/io/src/lib.rs deleted file mode 100644 index b969b65a4..000000000 --- a/contracts/feeds/io/src/lib.rs +++ /dev/null @@ -1,66 +0,0 @@ -#![no_std] - -use gmeta::{InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId, Decode, Encode, TypeInfo}; - -pub struct RouterMetadata; - -impl Metadata for RouterMetadata { - type Init = (); - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct RouterState { - pub channels: Vec<(ActorId, Channel)>, - pub subscribers: Vec<(ActorId, Vec)>, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RouterAction { - Register { - name: String, - description: String, - owner_id: ActorId, - }, - AddSubscriberToChannel(ActorId), - RemoveSubscriberFromChannel(ActorId), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RouterEvent { - ChannelRegistered { - channel_contract_id: ActorId, - name: String, - owner_id: ActorId, - description: String, - }, - SubscriberAddedToChannel { - subscriber_id: ActorId, - channel_id: ActorId, - }, - SubscriberRemovedFromChannel { - subscriber_id: ActorId, - channel_id: ActorId, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo, Default, Clone, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Channel { - pub id: ActorId, - pub name: String, - pub owner_id: ActorId, - pub description: String, -} diff --git a/contracts/feeds/src/lib.rs b/contracts/feeds/src/lib.rs deleted file mode 100644 index 39d4e0703..000000000 --- a/contracts/feeds/src/lib.rs +++ /dev/null @@ -1,150 +0,0 @@ -#![no_std] - -use feeds_io::*; -use gstd::{ - collections::{HashMap, HashSet}, - debug, msg, - prelude::*, - ActorId, -}; - -#[derive(Default)] -pub struct Router { - pub channels: HashMap, - pub subscribers: HashMap>, -} - -static mut ROUTER: Option = None; - -impl Router { - fn register_channel(&mut self, name: String, description: String, owner_id: ActorId) { - debug!("ROUTER: Starting registering {:?}", msg::source()); - let channel = Channel { - id: msg::source(), - owner_id, - name: name.clone(), - description: description.clone(), - }; - assert!( - self.channels.insert(msg::source(), channel).is_none(), - "That channel was already added" - ); - debug!( - "ROUTER: Successfully added channel\nName: {:?}\nAddress: {:?}\nOwner: {:?}", - name, - msg::source(), - owner_id - ); - msg::reply( - RouterEvent::ChannelRegistered { - channel_contract_id: msg::source(), - name, - owner_id, - description, - }, - 0, - ) - .expect("Error in sending reply `[RouterEvent::ChannelRegistered]`"); - } - - fn add_subscriber_to_channel(&mut self, subscriber_id: ActorId) { - assert!( - self.channels.contains_key(&msg::source()), - "That channel is not registered" - ); - self.subscribers - .entry(subscriber_id) - .and_modify(|channels| { - channels.insert(msg::source()); - }) - .or_insert_with(|| HashSet::from([msg::source()])); - - msg::reply( - RouterEvent::SubscriberAddedToChannel { - subscriber_id, - channel_id: msg::source(), - }, - 0, - ) - .expect("Error in sending reply `[RouterEvent::SubscriberAddedToChannel]`"); - } - - fn remove_subscriber_from_channel(&mut self, subscriber_id: ActorId) { - assert!( - self.channels.contains_key(&msg::source()), - "That channel is not registered" - ); - self.subscribers - .entry(subscriber_id) - .and_modify(|channels| { - channels.remove(&msg::source()); - }); - - msg::reply( - RouterEvent::SubscriberRemovedFromChannel { - subscriber_id, - channel_id: msg::source(), - }, - 0, - ) - .expect("Error in sending reply `[RouterEvent::SubscriberAddedToChannel]`"); - } -} - -impl From<&Router> for RouterState { - fn from(router: &Router) -> Self { - RouterState { - channels: router - .channels - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - subscribers: router - .subscribers - .iter() - .map(|(key, value)| (*key, value.iter().cloned().collect())) - .collect(), - } - } -} - -#[no_mangle] -extern fn handle() { - let action: RouterAction = msg::load().expect("ROUTER: Unable to decode RouterAction"); - - let router = unsafe { ROUTER.get_or_insert(Default::default()) }; - - match action { - RouterAction::Register { - name, - description, - owner_id, - } => { - router.register_channel(name, description, owner_id); - } - RouterAction::AddSubscriberToChannel(subscriber_id) => { - router.add_subscriber_to_channel(subscriber_id); - } - RouterAction::RemoveSubscriberFromChannel(subscriber_id) => { - router.remove_subscriber_from_channel(subscriber_id); - } - } -} - -#[no_mangle] -unsafe extern fn init() { - debug!("Router Contract initialized successfully!"); -} - -#[no_mangle] -extern fn state() { - msg::reply( - unsafe { - let router = ROUTER.as_ref().expect("Uninitialized router state"); - let state: RouterState = router.into(); - state - }, - 0, - ) - .expect("Failed to encode or reply with `::State` from `state()`"); -} diff --git a/contracts/feeds/state/Cargo.toml b/contracts/feeds/state/Cargo.toml deleted file mode 100644 index 02e527ce7..000000000 --- a/contracts/feeds/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "feeds-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -feeds-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/feeds/state/build.rs b/contracts/feeds/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/feeds/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/feeds/state/src/lib.rs b/contracts/feeds/state/src/lib.rs deleted file mode 100644 index 3f0aeeb81..000000000 --- a/contracts/feeds/state/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -#![no_std] - -use feeds_io::*; -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = RouterState; - - pub fn all_channels(state: State) -> Vec { - state.channels.iter().map(|(_, c)| c.clone()).collect() - } - - pub fn channel(state: State, id: ActorId) -> Channel { - let (_, channel) = state - .channels - .iter() - .find(|(channel_id, _)| channel_id == &id) - .expect("Invalid id!"); - - channel.clone() - } - - pub fn subscribed_to_channels(state: State, id: ActorId) -> Vec { - let (_, subs) = state - .subscribers - .iter() - .find(|(user_id, _)| user_id == &id) - .expect("Invalid id!"); - - subs.clone() - } -} diff --git a/contracts/feeds/tests/feeds_channel_test.rs b/contracts/feeds/tests/feeds_channel_test.rs deleted file mode 100644 index c9735bf5b..000000000 --- a/contracts/feeds/tests/feeds_channel_test.rs +++ /dev/null @@ -1,112 +0,0 @@ -mod utils; - -use feeds_channel_io::Message; -use feeds_io::*; -use gstd::ActorId; -use gtest::{Program, System}; -use utils::*; - -#[test] -fn channels_initialization() { - let sys = System::new(); - sys.init_logger(); - - // upload and init a router program - let _router = Program::router(&sys); - - // upload and init 2 channels - let channel_1 = Program::channel(&sys); - channel_1.register(); - let channel_2 = Program::channel(&sys); - channel_2.register(); - - // check that channels were registered at router contract - let mut expected_channels: Vec = Vec::new(); - - // first channel info - let mut channel = Channel { - id: 2.into(), - name: String::from("Channel-Coolest-Name"), - owner_id: OWNER.into(), - description: String::from("Channel-Coolest-Description"), - }; - // read info about that channel from the router contract - // router.check_channel_info(channel.clone()); - - expected_channels.push(channel.clone()); - // change id to get the second channel info - channel.id = 3.into(); - // router.check_channel_info(channel.clone()); - - expected_channels.push(channel); - - // check that channels are in the router state - // router.check_all_channel(expected_channels); - - // check that OWNER subscribes to 2 channels - channel_1.add_subscriber(OWNER); - channel_2.add_subscriber(OWNER); - let _expected_subscriptions: Vec = vec![2.into(), 3.into()]; - // router.check_user_subscriptions(OWNER, expected_subscriptions); -} - -#[test] -fn subscriptions() { - let sys = System::new(); - sys.init_logger(); - - let _router = Program::router(&sys); - let channel = Program::channel(&sys); - channel.register(); - channel.add_subscriber(OWNER); - let _channel_id: ActorId = CHANNEL_ID.into(); - // add subscribers - for subscriber in SUBSCRIBERS { - channel.add_subscriber(*subscriber); - // check a subscription in the router contract - // router.check_user_subscriptions(*subscriber, vec![channel_id]); - } - - // unsubscribe - channel.unsubscribe(SUBSCRIBERS[1]); - // check that subscriptions of SUBSCRIBERS[1] are empty - // router.check_user_subscriptions(SUBSCRIBERS[1], vec![]); -} - -#[test] -#[ignore] -fn post() { - let sys = System::new(); - sys.init_logger(); - - // upload and init a router program - Program::router(&sys); - - // upload and init a channel - let channel = Program::channel(&sys); - channel.register(); - channel.add_subscriber(OWNER); - let mut expected_messages: Vec = Vec::new(); - // init message - let mut message = Message { - owner: OWNER.into(), - text: String::from("Channel \"Channel-Coolest-Name\" was created"), - timestamp: 0, - }; - expected_messages.push(message.clone()); - // add subscribers - for subscriber in SUBSCRIBERS { - channel.add_subscriber(*subscriber); - } - - // message for post - message.text = String::from("Hello"); - expected_messages.push(message.clone()); - channel.post(OWNER, String::from("Hello"), message); - - // let messages: Vec = channel.meta_state(()).expect("Meta_state failed"); - // assert_eq!(expected_messages, messages); - - // must fail since not owner posted a message - channel.post_fail(SUBSCRIBERS[0], String::from("Hello")); -} diff --git a/contracts/feeds/tests/utils.rs b/contracts/feeds/tests/utils.rs deleted file mode 100644 index 5a316fb8c..000000000 --- a/contracts/feeds/tests/utils.rs +++ /dev/null @@ -1,109 +0,0 @@ -use feeds_channel_io::*; -use gtest::{Log, Program, System}; - -pub const CHANNEL_ID: u64 = 2; -pub const ROUTER_ID: u64 = 1; -pub const OWNER: u64 = 100; -pub const SUBSCRIBERS: &[u64] = &[10, 11, 12, 13, 14]; - -pub trait FeedsChannel { - fn router(sys: &System) -> Program<'_>; - fn channel(sys: &System) -> Program<'_>; - fn register(&self); - fn add_subscriber(&self, subscriber: u64); - fn unsubscribe(&self, subscriber: u64); - fn post(&self, owner: u64, text: String, message: Message); - fn post_fail(&self, owner: u64, text: String); - /* fn check_user_subscriptions(&self, user: u64, expected_subscriptions: Vec); - fn check_channel_info(&self, channel: Channel); - fn check_all_channel(&self, expected_channels: Vec); */ -} - -impl FeedsChannel for Program<'_> { - fn router(sys: &System) -> Program<'_> { - let router = Program::current_opt(sys); - - let res = router.send_bytes(OWNER, "INIT"); - - assert!(!res.main_failed()); - - router - } - - fn channel(sys: &System) -> Program<'_> { - let channel = Program::from_file( - sys, - "../target/wasm32-unknown-unknown/release/feeds_channel.opt.wasm", - ); - - let res = channel.send(OWNER, 0x00); - assert!(!res.main_failed()); - channel - } - - fn register(&self) { - let res = self.send( - OWNER, - ChannelAction::Register { - router_contract_id: ROUTER_ID.into(), - }, - ); - let log = Log::builder() - .dest(OWNER) - .payload(ChannelOutput::Registered); - assert!(res.contains(&log)); - } - - fn add_subscriber(&self, subscriber: u64) { - let res = self.send(subscriber, ChannelAction::Subscribe); - let log = Log::builder() - .dest(subscriber) - .payload(ChannelOutput::SubscriberAdded(subscriber.into())); - assert!(res.contains(&log)); - } - - fn unsubscribe(&self, subscriber: u64) { - let res = self.send(subscriber, ChannelAction::Unsubscribe); - let log = Log::builder() - .dest(subscriber) - .payload(ChannelOutput::SubscriberRemoved(subscriber.into())); - assert!(res.contains(&log)); - } - - fn post(&self, owner: u64, text: String, message: Message) { - let res = self.send(owner, ChannelAction::Post(text)); - let log = Log::builder() - .dest(OWNER) - .payload(ChannelOutput::MessagePosted(message)); - assert!(res.contains(&log)); - } - - fn post_fail(&self, owner: u64, text: String) { - assert!(self.send(owner, ChannelAction::Post(text)).main_failed()) - } - - /* fn check_user_subscriptions(&self, user: u64, expected_subscriptions: Vec) { - let subscriptions: RouterStateReply = self - .meta_state(RouterState::SubscribedToChannels(user.into())) - .expect("Meta_state failed"); - - assert_eq!( - subscriptions, - RouterStateReply::SubscribedToChannels(expected_subscriptions), - ); - } - - fn check_channel_info(&self, channel: router_io::Channel) { - let channel_info: RouterStateReply = self - .meta_state(&RouterState::Channel(channel.id)) - .expect("Meta_state failed"); - assert_eq!(channel_info, RouterStateReply::Channel(channel)); - } - - fn check_all_channel(&self, expected_channels: Vec) { - let channels: RouterStateReply = self - .meta_state(&RouterState::AllChannels) - .expect("Meta_state failed"); - assert_eq!(channels, RouterStateReply::AllChannels(expected_channels)); - } */ -} diff --git a/contracts/fungible-token/Cargo.toml b/contracts/fungible-token/Cargo.toml deleted file mode 100644 index 1d758f52a..000000000 --- a/contracts/fungible-token/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "fungible-token" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -fungible-token-io.workspace = true -gstd.workspace = true -gmeta.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -[build-dependencies] -fungible-token-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/fungible-token/README.md b/contracts/fungible-token/README.md deleted file mode 100644 index 946819aae..000000000 --- a/contracts/fungible-token/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=fungible-token/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/fungible_token_io) - -# Fungible token - -### 🏗️ Building - -```sh -cargo b -r -p "fungible-token*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "fungible-token*" -``` diff --git a/contracts/fungible-token/build.rs b/contracts/fungible-token/build.rs deleted file mode 100644 index 2cac51605..000000000 --- a/contracts/fungible-token/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use fungible_token_io::FungibleTokenMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/fungible-token/io/Cargo.toml b/contracts/fungible-token/io/Cargo.toml deleted file mode 100644 index 7d8e99de3..000000000 --- a/contracts/fungible-token/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "fungible-token-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta.workspace = true diff --git a/contracts/fungible-token/io/src/lib.rs b/contracts/fungible-token/io/src/lib.rs deleted file mode 100644 index 5648ac27f..000000000 --- a/contracts/fungible-token/io/src/lib.rs +++ /dev/null @@ -1,73 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub struct FungibleTokenMetadata; - -impl Metadata for FungibleTokenMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitConfig { - pub name: String, - pub symbol: String, - pub decimals: u8, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTAction { - Mint(u128), - Burn(u128), - Transfer { - from: ActorId, - to: ActorId, - amount: u128, - }, - Approve { - to: ActorId, - amount: u128, - }, - TotalSupply, - BalanceOf(ActorId), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTEvent { - Transfer { - from: ActorId, - to: ActorId, - amount: u128, - }, - Approve { - from: ActorId, - to: ActorId, - amount: u128, - }, - TotalSupply(u128), - Balance(u128), -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoFungibleToken { - pub name: String, - pub symbol: String, - pub total_supply: u128, - pub balances: Vec<(ActorId, u128)>, - pub allowances: Vec<(ActorId, Vec<(ActorId, u128)>)>, - pub decimals: u8, -} diff --git a/contracts/fungible-token/src/lib.rs b/contracts/fungible-token/src/lib.rs deleted file mode 100644 index 3bd845025..000000000 --- a/contracts/fungible-token/src/lib.rs +++ /dev/null @@ -1,232 +0,0 @@ -#![no_std] - -use fungible_token_io::*; -use gstd::{collections::HashMap, msg, prelude::*, ActorId}; - -#[cfg(test)] -mod tests; - -const ZERO_ID: ActorId = ActorId::new([0u8; 32]); - -#[derive(Debug, Clone, Default)] -struct FungibleToken { - /// Name of the token. - name: String, - /// Symbol of the token. - symbol: String, - /// Total supply of the token. - total_supply: u128, - /// Map to hold balances of token holders. - balances: HashMap, - /// Map to hold allowance information of token holders. - allowances: HashMap>, - /// Token's decimals. - pub decimals: u8, -} - -static mut FUNGIBLE_TOKEN: Option = None; - -impl FungibleToken { - /// Executed on receiving `fungible-token-messages::MintInput`. - fn mint(&mut self, amount: u128) { - let source = msg::source(); - self.balances - .entry(source) - .and_modify(|balance| *balance += amount) - .or_insert(amount); - self.total_supply += amount; - msg::reply( - FTEvent::Transfer { - from: ZERO_ID, - to: source, - amount, - }, - 0, - ) - .unwrap(); - } - /// Executed on receiving `fungible-token-messages::BurnInput`. - fn burn(&mut self, amount: u128) { - let source = msg::source(); - if self.balances.get(&source).unwrap_or(&0) < &amount { - panic!("Amount exceeds account balance"); - } - self.balances - .entry(source) - .and_modify(|balance| *balance -= amount); - self.total_supply -= amount; - - msg::reply( - FTEvent::Transfer { - from: source, - to: ZERO_ID, - amount, - }, - 0, - ) - .unwrap(); - } - /// Executed on receiving `fungible-token-messages::TransferInput` or `fungible-token-messages::TransferFromInput`. - /// Transfers `amount` tokens from `sender` account to `recipient` account. - fn transfer(&mut self, from: &ActorId, to: &ActorId, amount: u128) { - if from == &ZERO_ID || to == &ZERO_ID { - panic!("Zero addresses"); - }; - if !self.can_transfer(from, amount) { - panic!("Not allowed to transfer") - } - if self.balances.get(from).unwrap_or(&0) < &amount { - panic!("Amount exceeds account balance"); - } - self.balances - .entry(*from) - .and_modify(|balance| *balance -= amount); - self.balances - .entry(*to) - .and_modify(|balance| *balance += amount) - .or_insert(amount); - msg::reply( - FTEvent::Transfer { - from: *from, - to: *to, - amount, - }, - 0, - ) - .unwrap(); - } - - /// Executed on receiving `fungible-token-messages::ApproveInput`. - fn approve(&mut self, to: &ActorId, amount: u128) { - if to == &ZERO_ID { - panic!("Approve to zero address"); - } - let source = msg::source(); - self.allowances - .entry(source) - .or_default() - .insert(*to, amount); - msg::reply( - FTEvent::Approve { - from: source, - to: *to, - amount, - }, - 0, - ) - .unwrap(); - } - - fn can_transfer(&mut self, from: &ActorId, amount: u128) -> bool { - let source = msg::source(); - if from == &source && self.balances.get(&source).unwrap_or(&0) >= &amount { - return true; - } - if let Some(allowed_amount) = self.allowances.get(from).and_then(|m| m.get(&source)) { - if allowed_amount >= &amount { - self.allowances.entry(*from).and_modify(|m| { - m.entry(source).and_modify(|a| *a -= amount); - }); - return true; - } - } - false - } -} - -fn common_state() -> IoFungibleToken { - let state = static_mut_state(); - let FungibleToken { - name, - symbol, - total_supply, - balances, - allowances, - decimals, - } = state.clone(); - - let balances = balances.iter().map(|(k, v)| (*k, *v)).collect(); - let allowances = allowances - .iter() - .map(|(id, allowance)| (*id, allowance.iter().map(|(k, v)| (*k, *v)).collect())) - .collect(); - IoFungibleToken { - name, - symbol, - total_supply, - balances, - allowances, - decimals, - } -} - -fn static_mut_state() -> &'static mut FungibleToken { - unsafe { FUNGIBLE_TOKEN.get_or_insert(Default::default()) } -} - -#[no_mangle] -extern fn state() { - msg::reply(common_state(), 0) - .expect("Failed to encode or reply with `::State` from `state()`"); -} - -#[no_mangle] -extern fn handle() { - let action: FTAction = msg::load().expect("Could not load Action"); - let ft: &mut FungibleToken = unsafe { FUNGIBLE_TOKEN.get_or_insert(Default::default()) }; - match action { - FTAction::Mint(amount) => { - ft.mint(amount); - } - FTAction::Burn(amount) => { - ft.burn(amount); - } - FTAction::Transfer { from, to, amount } => { - ft.transfer(&from, &to, amount); - } - FTAction::Approve { to, amount } => { - ft.approve(&to, amount); - } - FTAction::TotalSupply => { - msg::reply(FTEvent::TotalSupply(ft.total_supply), 0).unwrap(); - } - FTAction::BalanceOf(account) => { - let balance = ft.balances.get(&account).unwrap_or(&0); - msg::reply(FTEvent::Balance(*balance), 0).unwrap(); - } - } -} - -#[no_mangle] -extern fn init() { - let config: InitConfig = msg::load().expect("Unable to decode InitConfig"); - let ft = FungibleToken { - name: config.name, - symbol: config.symbol, - decimals: config.decimals, - ..Default::default() - }; - unsafe { FUNGIBLE_TOKEN = Some(ft) }; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum State { - Name, - Symbol, - Decimals, - TotalSupply, - BalanceOf(ActorId), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StateReply { - Name(String), - Symbol(String), - Decimals(u8), - TotalSupply(u128), - Balance(u128), -} diff --git a/contracts/fungible-token/src/tests.rs b/contracts/fungible-token/src/tests.rs deleted file mode 100644 index 325ce16a1..000000000 --- a/contracts/fungible-token/src/tests.rs +++ /dev/null @@ -1,189 +0,0 @@ -use fungible_token_io::*; -use gstd::{Encode, String}; -use gtest::{Program, System}; -const USERS: &[u64] = &[3, 4, 5]; - -fn init_with_mint(sys: &System) { - sys.init_logger(); - - let ft = Program::current_opt(sys); - - let res = ft.send( - USERS[0], - InitConfig { - name: String::from("MyToken"), - symbol: String::from("MTK"), - decimals: 18, - }, - ); - - assert!(!res.main_failed()); - - let res = ft.send(USERS[0], FTAction::Mint(1000000)); - assert!(res.contains(&( - USERS[0], - FTEvent::Transfer { - from: 0.into(), - to: USERS[0].into(), - amount: 1000000, - } - .encode() - ))); -} - -#[test] -fn mint() { - let sys = System::new(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[0].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(1000000).encode()))); -} - -#[test] -fn burn() { - let sys = System::new(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - let res = ft.send(USERS[0], FTAction::Burn(1000)); - assert!(res.contains(&( - USERS[0], - FTEvent::Transfer { - from: USERS[0].into(), - to: 0.into(), - amount: 1000, - } - .encode() - ))); - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[0].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(999000).encode()))); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - sys.init_logger(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - // must fail since the amount > the user balance - let res = ft.send(USERS[0], FTAction::Burn(1000001)); - assert!(res.main_failed()); -} - -#[test] -fn transfer() { - let sys = System::new(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - let res = ft.send( - USERS[0], - FTAction::Transfer { - from: USERS[0].into(), - to: USERS[1].into(), - amount: 500, - }, - ); - - assert!(res.contains(&( - USERS[0], - FTEvent::Transfer { - from: USERS[0].into(), - to: USERS[1].into(), - amount: 500, - } - .encode() - ))); - - // check that the balance of `USER[0]` decreased and the balance of `USER[1]` increased - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[0].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(999500).encode()))); - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[1].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(500).encode()))); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - //must fail since the amount > balance - let res = ft.send( - USERS[0], - FTAction::Transfer { - from: USERS[0].into(), - to: USERS[1].into(), - amount: 2000000, - }, - ); - assert!(res.main_failed()); - - //must fail transfer to zero address - let res = ft.send( - USERS[2], - FTAction::Transfer { - from: USERS[0].into(), - to: 0.into(), - amount: 100, - }, - ); - assert!(res.main_failed()); -} - -#[test] -fn approve_and_transfer() { - let sys = System::new(); - init_with_mint(&sys); - let ft = sys.get_program(1).unwrap(); - - let res = ft.send( - USERS[0], - FTAction::Approve { - to: USERS[1].into(), - amount: 500, - }, - ); - assert!(res.contains(&( - USERS[0], - FTEvent::Approve { - from: USERS[0].into(), - to: USERS[1].into(), - amount: 500, - } - .encode() - ))); - - let res = ft.send( - USERS[1], - FTAction::Transfer { - from: USERS[0].into(), - to: USERS[2].into(), - amount: 200, - }, - ); - assert!(res.contains(&( - USERS[1], - FTEvent::Transfer { - from: USERS[0].into(), - to: USERS[2].into(), - amount: 200, - } - .encode() - ))); - - // check that the balance of `USER[0]` decreased and the balance of `USER[1]` increased - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[0].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(999800).encode()))); - let res = ft.send(USERS[0], FTAction::BalanceOf(USERS[2].into())); - assert!(res.contains(&(USERS[0], FTEvent::Balance(200).encode()))); - - // must fail since not enough allowance - let res = ft.send( - USERS[1], - FTAction::Transfer { - from: USERS[0].into(), - to: USERS[2].into(), - amount: 800, - }, - ); - assert!(res.main_failed()); -} diff --git a/contracts/fungible-token/state/Cargo.toml b/contracts/fungible-token/state/Cargo.toml deleted file mode 100644 index c77ee203e..000000000 --- a/contracts/fungible-token/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "fungible-token-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -fungible-token-io.workspace = true -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/fungible-token/state/build.rs b/contracts/fungible-token/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/fungible-token/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/fungible-token/state/src/lib.rs b/contracts/fungible-token/state/src/lib.rs deleted file mode 100644 index 21dcfa66d..000000000 --- a/contracts/fungible-token/state/src/lib.rs +++ /dev/null @@ -1,32 +0,0 @@ -#![no_std] - -use fungible_token_io::*; -use gstd::{prelude::*, ActorId}; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoFungibleToken; - - pub fn name(state: State) -> String { - state.name - } - - pub fn symbol(state: State) -> String { - state.symbol - } - - pub fn decimals(state: State) -> u8 { - state.decimals - } - - pub fn total_supply(state: State) -> u128 { - state.total_supply - } - - pub fn balances_of(state: State, account: ActorId) -> u128 { - match state.balances.iter().find(|(id, _balance)| account.eq(id)) { - Some((_id, balance)) => *balance, - None => panic!("Balance for account ID {account:?} not found",), - } - } -} diff --git a/contracts/galactic-express/Cargo.toml b/contracts/galactic-express/Cargo.toml index 7b9e5957c..f73c4ed1c 100644 --- a/contracts/galactic-express/Cargo.toml +++ b/contracts/galactic-express/Cargo.toml @@ -8,7 +8,6 @@ publish.workspace = true gstd.workspace = true galactic-express-io.workspace = true num-traits.workspace = true -gear-lib.workspace = true [dev-dependencies] gtest.workspace = true diff --git a/contracts/galactic-express/io/Cargo.toml b/contracts/galactic-express/io/Cargo.toml index efdc1766f..a0df31052 100644 --- a/contracts/galactic-express/io/Cargo.toml +++ b/contracts/galactic-express/io/Cargo.toml @@ -7,6 +7,5 @@ publish.workspace = true [dependencies] gmeta.workspace = true gstd.workspace = true -gear-lib.workspace = true parity-scale-codec.workspace = true scale-info.workspace = true diff --git a/contracts/galactic-express/io/src/lib.rs b/contracts/galactic-express/io/src/lib.rs index 7554a08d9..3c171ec72 100644 --- a/contracts/galactic-express/io/src/lib.rs +++ b/contracts/galactic-express/io/src/lib.rs @@ -1,6 +1,5 @@ #![no_std] -use gear_lib::tx_manager::TransactionManagerError; use gmeta::{InOut, Metadata, Out}; use gstd::{errors::Error as GstdError, prelude::*, ActorId}; @@ -166,7 +165,6 @@ pub enum Error { FuelOrPayloadOverload, SessionFull, NotEnoughParticipants, - TxManager(TransactionManagerError), NoSuchGame, WrongBid, NoSuchPlayer, @@ -182,8 +180,3 @@ impl From for Error { } } -impl From for Error { - fn from(error: TransactionManagerError) -> Self { - Self::TxManager(error) - } -} diff --git a/contracts/galactic-express/src/lib.rs b/contracts/galactic-express/src/lib.rs index a5485997b..0140da177 100644 --- a/contracts/galactic-express/src/lib.rs +++ b/contracts/galactic-express/src/lib.rs @@ -1,7 +1,6 @@ #![no_std] use galactic_express_io::*; -use gear_lib::tx_manager::TransactionManager; use gstd::{ collections::HashMap, errors::Error as GstdError, @@ -53,9 +52,9 @@ impl Random { } } -static mut STATE: Option<(Contract, TransactionManager<()>)> = None; +static mut STATE: Option = None; -fn state_mut() -> Result<&'static mut (Contract, TransactionManager<()>), Error> { +fn state_mut() -> Result<&'static mut Contract, Error> { unsafe { STATE.as_mut().ok_or(Error::StateUninitaliazed) } } @@ -439,12 +438,11 @@ extern fn init() { fn process_init() -> Result<(), Error> { unsafe { - STATE = Some(( + STATE = Some( Contract { ..Default::default() }, - TransactionManager::new(), - )); + ); } Ok(()) @@ -457,7 +455,7 @@ async fn main() { async fn process_main() -> Result { let action = msg::load()?; - let (contract, _tx_manager) = state_mut()?; + let contract = state_mut()?; match action { Action::CreateNewSession { name } => contract.create_new_session(name), @@ -486,7 +484,7 @@ async fn process_main() -> Result { #[no_mangle] extern fn state() { - let (state, _tx_manager) = unsafe { STATE.take().expect("Unexpected error in taking state") }; + let state = unsafe { STATE.take().expect("Unexpected error in taking state") }; let query: StateQuery = msg::load().expect("Unable to load the state query"); let reply = match query { StateQuery::All => StateReply::All(state.into()), diff --git a/contracts/game-of-chance/Cargo.toml b/contracts/game-of-chance/Cargo.toml deleted file mode 100644 index 8b226b2af..000000000 --- a/contracts/game-of-chance/Cargo.toml +++ /dev/null @@ -1,30 +0,0 @@ -[package] -name = "game-of-chance" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -rand.workspace = true -rand_xoshiro.workspace = true -sharded-fungible-token-io.workspace = true -game-of-chance-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -sp-core-hashing.workspace = true -primitive-types.workspace = true -tokio.workspace = true - -# External binaries - -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -game-of-chance-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/game-of-chance/README.md b/contracts/game-of-chance/README.md deleted file mode 100644 index 838be1a42..000000000 --- a/contracts/game-of-chance/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=game-of-chance/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/game_of_chance_io) - -# [Game of chance](https://wiki.gear-tech.io/docs/examples/Gaming/game-of-chance) - -### 🏗️ Building - -```sh -cargo b -r -p "game-of-chance*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "game-of-chance*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "game-of-chance*" -``` diff --git a/contracts/game-of-chance/build.rs b/contracts/game-of-chance/build.rs deleted file mode 100644 index b07f861db..000000000 --- a/contracts/game-of-chance/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use game_of_chance_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/game-of-chance/io/Cargo.toml b/contracts/game-of-chance/io/Cargo.toml deleted file mode 100644 index 0ed51f4cc..000000000 --- a/contracts/game-of-chance/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "game-of-chance-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/game-of-chance/io/src/lib.rs b/contracts/game-of-chance/io/src/lib.rs deleted file mode 100644 index b3c974c32..000000000 --- a/contracts/game-of-chance/io/src/lib.rs +++ /dev/null @@ -1,203 +0,0 @@ -#![no_std] - -use gmeta::{InOut, Metadata, Out}; -use gstd::{errors::Error as GstdError, prelude::*, ActorId}; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = InOut>; - type Handle = InOut>; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -/// The maximum number of participants for one game round. -/// -/// The limited number of participants is required because this contract (like -/// all the others) has a limited amount of memory, so it can't store too many -/// participants. -pub const MAX_NUMBER_OF_PLAYERS: usize = 2usize.pow(16); - -/// Initializes the Game of chance contract. -/// -/// # Requirements -/// - `admin` mustn't be [`ActorId::zero()`]. -#[derive( - Debug, Default, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitGOC { - /// [`ActorId`] of the game administrator that'll have the rights to - /// [`Action::Start`] a game round and [`Action::PickWinner`]. - pub admin: ActorId, -} - -/// Sends the contract info about what it should do. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Action { - /// Starts a game round and allows to participate in it. - /// - /// # Requirements - /// - [`msg::source()`](gstd::msg::source) must be the game administrator. - /// - The current game round must be over. - /// - `ft_actor_id` mustn't be [`ActorId::zero()`]. - /// - /// On success, replies with [`Event::Started`]. - Start { - /// The duration (in milliseconds) of the players entry stage. - /// - /// After that, no one will be able to enter a game round and a winner - /// should be picked. - duration: u64, - /// The price of a participation in a game round. - participation_cost: u128, - /// A currency (or FT contract [`ActorId`]) of a game round. - /// - /// Determines fungible tokens in which a prize fund and a participation - /// cost will be collected. [`None`] means that the native value will be - /// used instead of fungible tokens. - fungible_token: Option, - }, - - /// Randomly picks a winner from current game round participants (players) - /// and sends a prize fund to it. - /// - /// The randomness of a winner pick depends on - /// [`exec::block_timestamp()`](gstd::exec::block_timestamp). - /// Not the best source of entropy, but, in theory, it's impossible to - /// exactly predict a winner if the time of an execution of this action is - /// unknown. - /// - /// If no one participated in the round, then a winner will be - /// [`ActorId::zero()`]. - /// - /// # Requirements - /// - [`msg::source()`](gstd::msg::source) must be the game administrator. - /// - The players entry stage must be over. - /// - A winner mustn't already be picked. - /// - /// On success, replies with [`Event::Winner`]. - PickWinner, - - /// Pays a participation cost and adds [`msg::source()`] to the current game - /// round participants (players). - /// - /// A participation cost and its currency can be queried from the contract - /// state. - /// - /// # Requirements - /// - The players entry stage mustn't be over. - /// - [`msg::source()`] mustn't already participate. - /// - [`msg::source()`] must have enough currency to pay a participation - /// cost. - /// - If the current game round currency is the native value - /// (`fungible_token` is [`None`]), [`msg::source()`] must send this action - /// with the amount of the value exactly equal to a participation cost. - /// - /// On success, replies with [`Event::PlayerAdded`]. - /// - /// [`msg::source()`]: gstd::msg::source - Enter, -} - -/// A result of processed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - /// Should be returned from [`Action::Start`]. - Started { - /// The end time (in milliseconds) of the players entry stage. - /// - /// After that, the game administrator can pick a winner. - ending: u64, - /// See [`Action::Start`]. - participation_cost: u128, - /// See [`Action::Start`]. - fungible_token: Option, - }, - /// Should be returned from [`Action::PickWinner`]. - Winner(ActorId), - /// Should be returned from [`Action::Enter`]. - PlayerAdded(ActorId), -} - -/// Contract execution error variants. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - /// [`msg::source()`](gstd::msg::source) isn't the administrator. - AccessRestricted, - /// The current game round wasn't in an expected status. - /// - /// E.g. the game administrator can't pick a winner if the player entry - /// stage isn't over, or an user can't entry a game round if the entry - /// stage is over. - UnexpectedGameStatus, - /// [`ActorId::zero()`] was found where it's forbidden. - ZeroActorId, - /// The current FT contract failed to complete a transfer transaction. - /// - /// Most often, the reason is that a user didn't give an approval to the - /// contract or didn't have enough tokens for participating. - TokenTransferFailed, - /// The contract reached a limit of protection against the memory overflow. - MemoryLimitExceeded, - /// [`msg::source()`](gstd::msg::source) is already participating in the - /// current game round. - AlreadyParticipating, - /// [`msg::source()`] sent [`Action::Enter`] with an incorrent amount of the - /// native value. - /// - /// [`msg::source()`] should set the value manually because the current game - /// round is going without a FT contract (also see [`Action::Enter`]). - /// - /// [`msg::source()`]: gstd::msg::source - InvalidParticipationCost, - /// See [`GstdError`]. - ContractError(String), -} - -impl From for Error { - fn from(error: GstdError) -> Self { - Self::ContractError(error.to_string()) - } -} - -/// The contract state. -#[derive(Debug, Default, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - /// See [`InitGOC`]. - pub admin: ActorId, - /// The start time (in milliseconds) of the current game round and the - /// players entry stage. - pub started: u64, - /// See [`Event::Started`]. - pub ending: u64, - /// Participants of the current game round. - pub players: Vec, - /// The current game round prize fund. - /// - /// It's calculated by multiplying `participation_cost` and the number of - /// `players`. - pub prize_fund: u128, - /// See [`Action::Start`]. - pub participation_cost: u128, - /// The winner of the current game round. - pub winner: ActorId, - /// A currency (or a FT contract [`ActorId`]) of the current game round. - /// - /// Also see [`Action::Start`]. - pub fungible_token: Option, - /// Shows if the current game round is active. - pub is_active: bool, -} diff --git a/contracts/game-of-chance/src/lib.rs b/contracts/game-of-chance/src/lib.rs deleted file mode 100644 index 3b50b4100..000000000 --- a/contracts/game-of-chance/src/lib.rs +++ /dev/null @@ -1,331 +0,0 @@ -#![no_std] - -use game_of_chance_io::*; -use gstd::{ - collections::{BTreeMap, HashMap}, - exec, msg, - prelude::*, - ActorId, -}; -use rand::{RngCore, SeedableRng}; -use rand_xoshiro::Xoshiro128PlusPlus; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -const MAX_NUMBER_OF_TXS: usize = 2usize.pow(16); - -static mut CONTRACT: Option = None; - -#[derive(Default, Debug)] -struct Contract { - admin: ActorId, - fungible_token: Option, - started: u64, - ending: u64, - players: Vec, - prize_fund: u128, - participation_cost: u128, - is_active: bool, - winner: Option, - txs_for_actor: BTreeMap, - actors_for_tx: HashMap, - tx_id_nonce: u64, -} - -impl Contract { - fn start( - &mut self, - duration: u64, - participation_cost: u128, - fungible_token: Option, - ) -> Result { - if self.admin != msg::source() { - return Err(Error::AccessRestricted); - } - - if self.is_active { - return Err(Error::UnexpectedGameStatus); - } - - if matches!(fungible_token, Some(fungible_token) if fungible_token.is_zero()) { - return Err(Error::ZeroActorId); - } - - self.players.clear(); - - self.winner = None; - self.prize_fund = 0; - self.started = exec::block_timestamp(); - self.ending = self.started.saturating_add(duration); - self.participation_cost = participation_cost; - self.fungible_token = fungible_token; - self.is_active = true; - - // TODO: uncomment and update doc & tests after closing - // https://github.com/gear-tech/gear/issues/1781. - // msg::send_delayed( - // exec::program_id(), - // Action::PickWinner, - // 0, - // (duration / 1000) as u32, - // )?; - - Ok(Event::Started { - ending: self.ending, - participation_cost, - fungible_token, - }) - } - - async fn pick_winner(&mut self) -> Result { - if !self.is_active { - return Err(Error::UnexpectedGameStatus); - } - - let msg_source = msg::source(); - let exec_program = exec::program_id(); - let block_timestamp = exec::block_timestamp(); - - if msg_source == self.admin { - if self.ending > block_timestamp { - return Err(Error::UnexpectedGameStatus); - } - } else if msg_source != exec_program { - return Err(Error::AccessRestricted); - } - - let winner = self.winner.unwrap_or_else(|| { - let winner = if self.players.is_empty() { - ActorId::zero() - } else { - let mut random_data = [0; (usize::BITS / 8) as usize]; - - Xoshiro128PlusPlus::seed_from_u64(block_timestamp).fill_bytes(&mut random_data); - - let mystical_number = usize::from_le_bytes(random_data); - self.players[mystical_number % self.players.len()] - }; - - self.winner = Some(winner); - - winner - }); - - if let Some(fungible_token) = self.fungible_token { - self.transfer_tokens( - fungible_token, - self.admin, - exec_program, - winner, - self.prize_fund, - ) - .await?; - } else { - msg::send_bytes(winner, [], self.prize_fund).expect("Error send value"); - } - - self.is_active = false; - - Ok(Event::Winner(winner)) - } - - async fn transfer_tokens( - &mut self, - fungible_token: ActorId, - msg_source: ActorId, - sender: ActorId, - recipient: ActorId, - amount: u128, - ) -> Result<(), Error> { - let transaction_id = if let Some(id) = self.actors_for_tx.get(&msg_source) { - *id - } else { - let id = self.tx_id_nonce; - - self.tx_id_nonce = id.wrapping_add(1); - - if self.txs_for_actor.len() == MAX_NUMBER_OF_TXS { - let (tx, actor) = self - .txs_for_actor - .range(self.tx_id_nonce..) - .next() - .unwrap_or_else(|| { - let key_value = self.txs_for_actor.first_key_value(); - - debug_assert!(key_value.is_some(), "tx cache cycle is corrupted, perhaps the `MAX_NUMBER_OF_TXS` constant is less than 2"); - - unsafe { key_value.unwrap_unchecked() } - }); - let (tx, actor) = (*tx, *actor); - - self.txs_for_actor.remove(&tx); - self.actors_for_tx.remove(&actor); - } - - self.txs_for_actor.insert(id, msg_source); - self.actors_for_tx.insert(msg_source, id); - - id - }; - - let result = match msg::send_for_reply_as( - fungible_token, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender, - recipient, - amount, - }, - }, - 0, - 0, - ) - .unwrap() - .await - .unwrap() - { - FTokenEvent::Ok => Ok(()), - FTokenEvent::Err => Err(Error::TokenTransferFailed), - _ => unreachable!("received an unexpected `FTokenEvent` variant"), - }; - - self.txs_for_actor.remove(&transaction_id); - self.actors_for_tx.remove(&msg_source); - - result - } - - async fn enter(&mut self) -> Result { - if self.ending <= exec::block_timestamp() { - return Err(Error::UnexpectedGameStatus); - } - - if self.players.len() == MAX_NUMBER_OF_PLAYERS { - return Err(Error::MemoryLimitExceeded); - } - - let msg_source = msg::source(); - - if self.players.contains(&msg_source) { - return Err(Error::AlreadyParticipating); - } - - if let Some(fungible_token) = self.fungible_token { - self.transfer_tokens( - fungible_token, - msg_source, - msg_source, - exec::program_id(), - self.participation_cost, - ) - .await?; - } else { - let msg_value = msg::value(); - - if msg_value != self.participation_cost { - msg::send_bytes(msg_source, [], msg_value).expect("Error send value"); - - return Err(Error::InvalidParticipationCost); - } - } - - self.players.push(msg_source); - self.prize_fund = self.prize_fund.saturating_add(self.participation_cost); - - Ok(Event::PlayerAdded(msg_source)) - } -} - -#[no_mangle] -extern fn init() { - let result = process_init(); - let is_err = result.is_err(); - msg::reply(result, 0) - .expect("Failed to encode or reply with `Result<(), Error>` from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } -} - -fn process_init() -> Result<(), Error> { - let InitGOC { admin } = msg::load().expect("Unable to decode InitGOC"); - - if admin.is_zero() { - return Err(Error::ZeroActorId); - } - - let contract = Contract { - admin, - ..Default::default() - }; - - unsafe { CONTRACT = Some(contract) } - - Ok(()) -} - -#[gstd::async_main] -async fn main() { - msg::reply(process_handle().await, 0).expect("failed to encode or reply from `handle()`"); -} - -async fn process_handle() -> Result { - let action: Action = msg::load().expect("Unable to decode Action"); - let contract = state_mut(); - - match action { - Action::Start { - duration, - participation_cost, - fungible_token, - } => contract.start(duration, participation_cost, fungible_token), - Action::PickWinner => contract.pick_winner().await, - Action::Enter => contract.enter().await, - } -} - -fn state_mut() -> &'static mut Contract { - let state = unsafe { CONTRACT.as_mut() }; - - debug_assert!(state.is_some(), "state isn't initialized"); - - unsafe { state.unwrap_unchecked() } -} -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `IoNFT` from `state()`"); -} - -impl From for State { - fn from(value: Contract) -> Self { - let Contract { - admin, - fungible_token, - started, - ending, - players, - prize_fund, - participation_cost, - winner, - is_active, - .. - } = value; - - Self { - admin, - fungible_token, - started, - ending, - players, - prize_fund, - participation_cost, - winner: winner.unwrap_or_default(), - is_active, - } - } -} diff --git a/contracts/game-of-chance/tests/state_consistency.rs b/contracts/game-of-chance/tests/state_consistency.rs deleted file mode 100644 index d1a37b1e3..000000000 --- a/contracts/game-of-chance/tests/state_consistency.rs +++ /dev/null @@ -1,280 +0,0 @@ -use fmt::Debug; -use game_of_chance::WASM_BINARY_OPT; -use game_of_chance_io::*; -use gclient::{Error as GclientError, EventListener, EventProcessor, GearApi, Result}; -use gstd::prelude::*; -use primitive_types::H256; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -const ALICE: [u8; 32] = [ - 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, - 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, -]; - -fn decode(payload: Vec) -> Result { - Ok(T::decode(&mut payload.as_slice())?) -} - -async fn upload_code(client: &GearApi, path: &str) -> Result { - let code_id = match client.upload_code_by_path(path).await { - Ok((code_id, _)) => code_id.into(), - Err(GclientError::ProgramAlreadyExists(_)) => { - sp_core_hashing::blake2_256(&gclient::code_from_os(path)?) - } - Err(other_error) => return Err(other_error), - }; - - println!("Uploaded `{path}`."); - - Ok(code_id.into()) -} - -async fn upload_program_and_wait_reply( - client: &GearApi, - listener: &mut EventListener, - code: Vec, - payload: impl Encode, -) -> Result<([u8; 32], T)> { - let (message_id, program_id) = common_upload_program(client, code, payload).await?; - let (_, raw_reply, _) = listener.reply_bytes_on(message_id.into()).await?; - let reply = decode( - raw_reply.expect("initialization failed, received an error message instead of a reply"), - )?; - - Ok((program_id, reply)) -} - -async fn upload_program( - client: &GearApi, - listener: &mut EventListener, - path: &str, - payload: impl Encode, -) -> Result<[u8; 32]> { - let (message_id, program_id) = - common_upload_program(client, gclient::code_from_os(path)?, payload).await?; - - assert!(listener - .message_processed(message_id.into()) - .await? - .succeed()); - println!("Initialized `{path}`."); - - Ok(program_id) -} - -async fn common_upload_program( - client: &GearApi, - code: Vec, - payload: impl Encode, -) -> Result<([u8; 32], [u8; 32])> { - let encoded_payload = payload.encode(); - let gas_limit = client - .calculate_upload_gas(None, code.clone(), encoded_payload, 0, true) - .await? - .burned - * 2; - let (message_id, program_id, _) = client - .upload_program( - code, - gclient::now_micros().to_le_bytes(), - payload, - gas_limit, - 0, - ) - .await?; - - Ok((message_id.into(), program_id.into())) -} - -async fn send_message_with_custom_limit( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, - modify_gas_limit: fn(u64) -> u64, -) -> Result> { - let encoded_payload = payload.encode(); - let destination = destination.into(); - - let gas_limit = client - .calculate_handle_gas(None, destination, encoded_payload, 0, true) - .await? - .burned; - let modified_gas_limit = modify_gas_limit(gas_limit); - - println!("Sending a payload: `{payload:?}`."); - println!("Calculated gas limit: {gas_limit}."); - println!("Modified gas limit: {modified_gas_limit}."); - - let (message_id, _) = client - .send_message(destination, payload, modified_gas_limit, 0) - .await?; - - println!("Sending completed."); - - let (_, raw_reply, _) = listener.reply_bytes_on(message_id).await?; - - Ok(match raw_reply { - Ok(raw_reply) => Ok(decode(raw_reply)?), - Err(error) => Err(error), - }) -} - -async fn send_message( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result { - Ok( - send_message_with_custom_limit(client, listener, destination, payload, |gas| gas * 10) - .await? - .expect("action failed, received an error message instead of a reply"), - ) -} - -async fn send_message_for_goc( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result> { - send_message(client, listener, destination, payload).await -} - -async fn send_message_with_insufficient_gas( - client: &GearApi, - listener: &mut EventListener, - destination: [u8; 32], - payload: impl Encode + Debug, -) -> Result { - Ok( - send_message_with_custom_limit::<()>(client, listener, destination, payload, |gas| { - gas - gas / 100 - }) - .await? - .expect_err("received a reply instead of an error message"), - ) -} - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_state_consistency() -> Result<()> { - let client = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = client.subscribe().await?; - - let storage_code_hash = upload_code( - &client, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .await?; - let ft_logic_code_hash = upload_code( - &client, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .await?; - - let ft_actor_id = upload_program( - &client, - &mut listener, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - InitFToken { - storage_code_hash, - ft_logic_code_hash, - }, - ) - .await?; - - let (goc_actor_id, reply) = upload_program_and_wait_reply::>( - &client, - &mut listener, - WASM_BINARY_OPT.into(), - InitGOC { - admin: ALICE.into(), - }, - ) - .await?; - assert_eq!(reply, Ok(())); - - let amount = 12345; - - assert!( - FTokenEvent::Ok - == send_message( - &client, - &mut listener, - ft_actor_id, - FTokenAction::Message { - transaction_id: 0, - payload: LogicAction::Mint { - recipient: ALICE.into(), - amount, - }, - }, - ) - .await? - ); - assert!( - FTokenEvent::Ok - == send_message( - &client, - &mut listener, - ft_actor_id, - FTokenAction::Message { - transaction_id: 1, - payload: LogicAction::Approve { - approved_account: goc_actor_id.into(), - amount, - }, - }, - ) - .await? - ); - - println!( - "{:?}", - send_message_for_goc( - &client, - &mut listener, - goc_actor_id, - Action::Start { - duration: 30_000, - participation_cost: 10000, - fungible_token: Some(ft_actor_id.into()) - } - ) - .await? - ); - - let mut payload = Action::Enter; - - println!( - "{}", - send_message_with_insufficient_gas(&client, &mut listener, goc_actor_id, payload).await? - ); - assert_eq!( - send_message_for_goc(&client, &mut listener, goc_actor_id, payload).await?, - Ok(Event::PlayerAdded(ALICE.into())) - ); - - payload = Action::PickWinner; - - println!( - "{}", - send_message_with_insufficient_gas(&client, &mut listener, goc_actor_id, payload).await? - ); - assert_eq!( - Ok(Event::Winner(ALICE.into())), - send_message_for_goc(&client, &mut listener, goc_actor_id, payload).await? - ); - - println!( - "{:?}", - client - .read_state::(goc_actor_id.into(), vec![]) - .await? - ); - - Ok(()) -} diff --git a/contracts/game-of-chance/tests/tests.rs b/contracts/game-of-chance/tests/tests.rs deleted file mode 100644 index 057155302..000000000 --- a/contracts/game-of-chance/tests/tests.rs +++ /dev/null @@ -1,245 +0,0 @@ -// use utils::{prelude::*, FungibleToken}; - -// mod utils; - -// const ADMIN: u64 = 3; -// const PLAYERS: [u64; 3] = [4, 5, 6]; -// const AMOUNT: u128 = 30_000_000_000_000; -// const PARTICIPATION_COST: u128 = 20_000_000_000_000; -// const DURATION: u64 = 2000; -// const DURATION_IN_SECS: u32 = (DURATION / 1000) as _; - -// // TODO: fix test -// #[test] -// #[ignore] -// fn two_rounds_and_meta_state() { -// let system = utils::initialize_system(); - -// let mut fungible_token = FungibleToken::initialize(&system); -// let mut goc = Goc::initialize(&system, ADMIN).succeed(); - -// let admin = ADMIN.into(); - -// goc.state().all().eq(State { -// admin, -// ..Default::default() -// }); - -// for player in PLAYERS { -// fungible_token.mint(player, AMOUNT); -// fungible_token.approve(player, goc.actor_id(), PARTICIPATION_COST); -// } - -// let mut started = system.block_timestamp(); -// let mut ending = started + DURATION; -// let ft_actor_id = Some(fungible_token.actor_id()); -// let is_active = true; - -// goc.start(ADMIN, DURATION, PARTICIPATION_COST, ft_actor_id) -// .succeed((ending, PARTICIPATION_COST, ft_actor_id)); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// participation_cost: PARTICIPATION_COST, -// fungible_token: ft_actor_id, -// is_active, -// ..Default::default() -// }); - -// let mut players = vec![]; - -// for (index, player) in PLAYERS.into_iter().enumerate() { -// let prize_fund = PARTICIPATION_COST * (index + 1) as u128; - -// players.push(player.into()); - -// goc.enter(player).succeed(player); -// fungible_token.balance(goc.actor_id()).contains(prize_fund); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// players: players.clone(), -// prize_fund, -// participation_cost: PARTICIPATION_COST, -// fungible_token: ft_actor_id, -// is_active, -// ..Default::default() -// }); -// } - -// system.spend_blocks(DURATION_IN_SECS); - -// let winner = utils::predict_winner(&system, &PLAYERS); - -// goc.pick_winner(ADMIN).succeed(winner); -// fungible_token -// .balance(winner) -// .contains(PARTICIPATION_COST * 2 + AMOUNT); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// players: players.clone(), -// prize_fund: PARTICIPATION_COST * 3, -// participation_cost: PARTICIPATION_COST, -// winner, -// fungible_token: ft_actor_id, -// ..Default::default() -// }); - -// for player in PLAYERS { -// system.mint_to(player, AMOUNT); -// } - -// started = system.block_timestamp(); -// ending = started + DURATION; - -// goc.start(ADMIN, DURATION, PARTICIPATION_COST, None) -// .succeed((ending, PARTICIPATION_COST, None)); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// participation_cost: PARTICIPATION_COST, -// is_active, -// ..Default::default() -// }); - -// players.clear(); - -// for (index, player) in PLAYERS.into_iter().enumerate() { -// let prize_fund = PARTICIPATION_COST * (index + 1) as u128; - -// players.push(player.into()); - -// goc.enter_with_value(player, PARTICIPATION_COST) -// .succeed(player); -// assert_eq!(system.balance_of(goc.actor_id().as_ref()), prize_fund); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// players: players.clone(), -// prize_fund, -// participation_cost: PARTICIPATION_COST, -// is_active, -// ..Default::default() -// }); -// } - -// system.spend_blocks(DURATION_IN_SECS); - -// let winner: [u8; 32] = utils::predict_winner(&system, &PLAYERS).into(); - -// goc.pick_winner(ADMIN).succeed(winner.into()); -// system.claim_value_from_mailbox(winner); -// assert_eq!(system.balance_of(winner), PARTICIPATION_COST * 2 + AMOUNT); -// goc.state().all().eq(State { -// admin, -// started, -// ending, -// players, -// prize_fund: PARTICIPATION_COST * 3, -// participation_cost: PARTICIPATION_COST, -// winner: winner.into(), -// ..Default::default() -// }); -// } - -// #[test] -// fn failures() { -// let system = utils::initialize_system(); - -// Goc::initialize_with_existential_deposit(&system, ActorId::zero()).failed(Error::ZeroActorId); - -// let mut goc = Goc::initialize(&system, ADMIN).succeed(); -// goc.start(FOREIGN_USER, 0, 0, None) -// .failed(Error::AccessRestricted); - -// goc.start(ADMIN, 0, 0, Some(ActorId::zero())) -// .failed(Error::ZeroActorId); - -// goc.enter(PLAYERS[0]).failed(Error::UnexpectedGameStatus); - -// goc.start(ADMIN, DURATION, PARTICIPATION_COST, None) -// .succeed(( -// system.block_timestamp() + DURATION, -// PARTICIPATION_COST, -// None, -// )); -// goc.start(ADMIN, 0, 0, None) -// .failed(Error::UnexpectedGameStatus); - -// system.mint_to(PLAYERS[0], AMOUNT); -// goc.enter_with_value(PLAYERS[0], PARTICIPATION_COST) -// .succeed(PLAYERS[0]); -// goc.enter(PLAYERS[0]).failed(Error::AlreadyParticipating); - -// system.mint_to(PLAYERS[1], AMOUNT); -// goc.enter_with_value(PLAYERS[1], PARTICIPATION_COST + 1) -// .failed(Error::InvalidParticipationCost); - -// system.claim_value_from_mailbox(PLAYERS[1]); -// goc.enter_with_value(PLAYERS[1], PARTICIPATION_COST - 1) -// .failed(Error::InvalidParticipationCost); - -// goc.pick_winner(FOREIGN_USER) -// .failed(Error::AccessRestricted); - -// goc.pick_winner(ADMIN).failed(Error::UnexpectedGameStatus); - -// system.spend_blocks(DURATION_IN_SECS); -// goc.pick_winner(ADMIN).succeed(PLAYERS[0].into()); -// goc.pick_winner(ADMIN).failed(Error::UnexpectedGameStatus); -// } - -// #[test] -// fn round_without_players() { -// let system = utils::initialize_system(); -// let mut goc = Goc::initialize(&system, ADMIN).succeed(); - -// goc.start(ADMIN, 0, 0, None) -// .succeed((system.block_timestamp(), 0, None)); -// goc.pick_winner(ADMIN).succeed(ActorId::zero()); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn overflow() { -// const AMOUNT: u128 = u128::MAX; -// const PARTICIPATION_COST: u128 = u128::MAX; -// const DURATION: u64 = u64::MAX; - -// let system = utils::initialize_system(); - -// let mut fungible_token = FungibleToken::initialize(&system); -// let mut goc = Goc::initialize(&system, ADMIN).succeed(); - -// let ending = DURATION; -// let ft_actor_id = Some(fungible_token.actor_id()); - -// goc.start(ADMIN, DURATION, PARTICIPATION_COST, ft_actor_id) -// .succeed((ending, PARTICIPATION_COST, ft_actor_id)); - -// for player in PLAYERS.into_iter().take(2) { -// fungible_token.mint(player, AMOUNT); -// fungible_token.approve(player, goc.actor_id(), PARTICIPATION_COST); - -// goc.enter(player).succeed(player); -// } - -// goc.state().all().eq(State { -// admin: ADMIN.into(), -// started: system.block_timestamp(), -// ending, -// players: vec![PLAYERS[0].into(), PLAYERS[1].into()], -// prize_fund: u128::MAX, -// participation_cost: PARTICIPATION_COST, -// fungible_token: ft_actor_id, -// is_active: true, -// ..Default::default() -// }) -// } diff --git a/contracts/game-of-chance/tests/utils/common.rs b/contracts/game-of-chance/tests/utils/common.rs deleted file mode 100644 index 4e6e8acca..000000000 --- a/contracts/game-of-chance/tests/utils/common.rs +++ /dev/null @@ -1,131 +0,0 @@ -use convert::identity; -use fmt::Debug; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use marker::PhantomData; - -pub fn initialize_system() -> System { - let system = System::new(); - - system.init_logger(); - - system -} - -pub trait Program { - fn inner_program(&self) -> &InnerProgram<'_>; - - fn actor_id(&self) -> ActorId { - let bytes: [u8; 32] = self.inner_program().id().into(); - - bytes.into() - } -} - -pub trait TransactionalProgram { - fn previous_mut_transaction_id(&mut self) -> &mut u64; - - fn transaction_id(&mut self) -> u64 { - let tx_id = self.previous_mut_transaction_id(); - - *tx_id = tx_id.wrapping_add(1); - - *tx_id - } -} - -#[must_use] -pub struct MetaStateReply(pub T); - -impl MetaStateReply { - #[track_caller] - pub fn eq(self, value: T) { - assert_eq!(self.0, value); - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - event: fn(T) -> R, - ghost_data: PhantomData, -} - -impl RunResult { - pub fn new(result: InnerRunResult, event: fn(T) -> R) -> Self { - Self { - result, - event, - ghost_data: PhantomData, - } - } - - #[track_caller] - fn assert_contains(self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - self.assert_contains(Err::(error)); - } - - #[track_caller] - fn common_succeed(self, value: T, wrap: fn(R) -> V) { - let event = (self.event)(value); - - self.assert_contains(wrap(event)); - } - - #[track_caller] - pub fn succeed(self, value: T) { - self.common_succeed(value, Ok::); - } - - #[track_caller] - pub fn contains(self, value: T) { - self.common_succeed(value, identity); - } -} - -#[must_use] -pub struct InitResult { - contract_instance: T, - pub result: InnerRunResult, - pub is_active: bool, - ghost_data: PhantomData, -} - -impl InitResult { - pub fn new(contract_instance: T, result: InnerRunResult, is_active: bool) -> Self { - Self { - contract_instance, - result, - is_active, - ghost_data: PhantomData, - } - } - - fn assert_contains(&self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - assert!(!self.is_active); - self.assert_contains(Err::<(), E>(error)); - } - - #[track_caller] - pub fn succeed(self) -> T { - assert!(self.is_active); - self.assert_contains(Ok::<_, E>(())); - - self.contract_instance - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(result.contains(&Log::builder().payload(payload))); -} diff --git a/contracts/game-of-chance/tests/utils/fungible_token.rs b/contracts/game-of-chance/tests/utils/fungible_token.rs deleted file mode 100644 index 1c995d9c9..000000000 --- a/contracts/game-of-chance/tests/utils/fungible_token.rs +++ /dev/null @@ -1,94 +0,0 @@ -use super::{Program, RunResult, TransactionalProgram, FOREIGN_USER}; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub struct FungibleToken<'a>(InnerProgram<'a>, u64); - -impl Program for FungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl TransactionalProgram for FungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> FungibleToken<'a> { - #[track_caller] - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ); - let storage_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let logic_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - assert!(!program - .send( - FOREIGN_USER, - InitFToken { - storage_code_hash: storage_code_id.into(), - ft_logic_code_hash: logic_code_id.into(), - }, - ) - .main_failed()); - - Self(program, 0) - } - - #[track_caller] - pub fn mint(&mut self, recipient: u64, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - FOREIGN_USER, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Mint { - recipient: recipient.into(), - amount, - }, - }, - )) - } - - #[track_caller] - pub fn approve(&mut self, from: u64, approved_account: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - from, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }, - }, - )); - } - - pub fn balance(&self, actor_id: impl Into) -> RunResult { - RunResult::new( - self.0 - .send(FOREIGN_USER, FTokenAction::GetBalance(actor_id.into())), - FTokenEvent::Balance, - ) - } -} - -fn assert_ft_token_event_ok(run_result: InnerRunResult) { - assert!(run_result.contains(&Log::builder().payload(FTokenEvent::Ok))) -} diff --git a/contracts/game-of-chance/tests/utils/mod.rs b/contracts/game-of-chance/tests/utils/mod.rs deleted file mode 100644 index 02ef280ed..000000000 --- a/contracts/game-of-chance/tests/utils/mod.rs +++ /dev/null @@ -1,123 +0,0 @@ -use common::{InitResult, MetaStateReply, Program, RunResult, TransactionalProgram}; -use game_of_chance_io::*; -use gstd::{prelude::*, ActorId}; -use gtest::{Program as InnerProgram, System}; -use rand::{RngCore, SeedableRng}; -use rand_xoshiro::Xoshiro128PlusPlus; - -mod fungible_token; - -pub mod common; -pub mod prelude; - -pub use common::initialize_system; -pub use fungible_token::FungibleToken; - -pub const FOREIGN_USER: u64 = 9999999; -pub const EXISTENTIAL_DEPOSIT: u128 = 10_000_000_000_000; - -type GOCRunResult = RunResult; - -pub struct Goc<'a>(InnerProgram<'a>); - -impl Program for Goc<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> Goc<'a> { - pub fn initialize(system: &'a System, admin: impl Into) -> InitResult, Error> { - Self::common_initialize(system, admin, |_, _| {}) - } - - pub fn initialize_with_existential_deposit( - system: &'a System, - admin: impl Into, - ) -> InitResult, Error> { - Self::common_initialize(system, admin, |system, program| { - system.mint_to(program.id(), EXISTENTIAL_DEPOSIT) - }) - } - - fn common_initialize( - system: &'a System, - admin: impl Into, - mint: fn(&System, &InnerProgram<'_>), - ) -> InitResult, Error> { - let program = InnerProgram::current_opt(system); - - mint(system, &program); - - let result = program.send( - FOREIGN_USER, - InitGOC { - admin: admin.into(), - }, - ); - let is_active = system.is_active_program(program.id()); - - InitResult::new(Self(program), result, is_active) - } - - pub fn state(&self) -> GOCMetaState<'_> { - GOCMetaState(&self.0) - } - - pub fn start( - &mut self, - from: u64, - duration: u64, - participation_cost: u128, - fungible_token: Option, - ) -> GOCRunResult<(u64, u128, Option)> { - RunResult::new( - self.0.send( - from, - Action::Start { - duration, - participation_cost, - fungible_token, - }, - ), - |(ending, participation_cost, fungible_token)| Event::Started { - ending, - participation_cost, - fungible_token, - }, - ) - } - - pub fn enter(&mut self, from: u64) -> GOCRunResult { - self.enter_with_value(from, 0) - } - - pub fn enter_with_value(&mut self, from: u64, value: u128) -> GOCRunResult { - RunResult::new( - self.0.send_with_value(from, Action::Enter, value), - |actor_id| Event::PlayerAdded(actor_id.into()), - ) - } - - pub fn pick_winner(&mut self, from: u64) -> GOCRunResult { - RunResult::new(self.0.send(from, Action::PickWinner), Event::Winner) - } -} - -pub struct GOCMetaState<'a>(&'a InnerProgram<'a>); - -impl GOCMetaState<'_> { - pub fn all(self) -> MetaStateReply { - MetaStateReply(self.0.read_state(0).unwrap()) - } -} - -pub fn predict_winner(system: &System, players: &[u64]) -> ActorId { - let mut random_data = [0; 4]; - - Xoshiro128PlusPlus::seed_from_u64(system.block_timestamp()).fill_bytes(&mut random_data); - - let mystical_number = u32::from_le_bytes(random_data) as usize; - - players[mystical_number % players.len()].into() -} diff --git a/contracts/game-of-chance/tests/utils/prelude.rs b/contracts/game-of-chance/tests/utils/prelude.rs deleted file mode 100644 index 33ab122fb..000000000 --- a/contracts/game-of-chance/tests/utils/prelude.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub use super::{common::Program, Goc, FOREIGN_USER}; -pub use game_of_chance_io::*; -pub use gstd::{prelude::*, ActorId}; diff --git a/contracts/gear-lib-old/Cargo.toml b/contracts/gear-lib-old/Cargo.toml deleted file mode 100644 index 62aa12024..000000000 --- a/contracts/gear-lib-old/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "gear-lib-old" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -schnorrkel.workspace = true diff --git a/contracts/gear-lib-old/README.md b/contracts/gear-lib-old/README.md deleted file mode 100644 index a5ed963e4..000000000 --- a/contracts/gear-lib-old/README.md +++ /dev/null @@ -1,18 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=gear-lib-old/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/gear_lib_old) - -# Old Gear library - -> This library is planned to be deprecated and replaced by the new [Gear library]. It's still used in many contract interacting with tokens in this repository, but if you want to implement your own token contracts, please use the new [Gear library]. - -[Gear library]: ../gear-lib - -Token primitives, helpers for contracts, and everything else that wasn't included in `gstd`. - -### ⚙️ Usage - -Include the following line under the `[dependencies]` table in your contract's `Cargo.toml` file: -```toml -gear-lib = { git = "https://github.com/gear-foundation/dapps", tag = "v1.0.2" } -gear-lib-derive = { git = "https://github.com/gear-foundation/dapps", tag = "v1.0.2" } -``` diff --git a/contracts/gear-lib-old/derive/Cargo.toml b/contracts/gear-lib-old/derive/Cargo.toml deleted file mode 100644 index 0bd48090c..000000000 --- a/contracts/gear-lib-old/derive/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "gear-lib-derive" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[lib] -proc-macro = true - -[dependencies] -syn.workspace = true -quote.workspace = true diff --git a/contracts/gear-lib-old/derive/src/lib.rs b/contracts/gear-lib-old/derive/src/lib.rs deleted file mode 100644 index 915193ebe..000000000 --- a/contracts/gear-lib-old/derive/src/lib.rs +++ /dev/null @@ -1,94 +0,0 @@ -#![no_std] - -/// This `macro_rule` generates a procedural derive macro for storage trait. -/// -/// The first argument is the name of the procedural function. -/// The second argument is the name of the trait for which derive will be generated. -/// The third argument is the name of the marker for the derive macro. This marker specifies -/// for derive macro which field will be returned by the implementation for the storage trait. -macro_rules! declare_derive_storage_trait { - ($derive_name:ident,$trait_name:ident,$trait_field_specifier:ident) => { - #[proc_macro_derive($trait_name, attributes($trait_field_specifier))] - pub fn $derive_name(_item: proc_macro::TokenStream) -> proc_macro::TokenStream { - let derive = syn::parse_macro_input!(_item as syn::DeriveInput); - const FIELD_SETTER: &'static str = stringify!($trait_field_specifier); - - let struct_ident = derive.ident; - - let field_ident; - let field_ty; - if let syn::Data::Struct(data) = &derive.data { - if let syn::Fields::Named(named_fields) = &data.fields { - let field = named_fields.named.iter().find(|f| { - f.attrs - .iter() - .find(|a| a.path().is_ident(FIELD_SETTER)) - .is_some() - }); - - if let Some(field) = field { - field_ident = field.ident.clone(); - field_ty = field.ty.clone(); - } else { - return quote::quote! { - panic!(); - } - .into(); - } - } else { - return quote::quote! { - panic!("not supported field"); - } - .into(); - } - } else { - return quote::quote! { - panic!("only supports struct"); - } - .into(); - } - - let code = quote::quote! { - impl $trait_name for #struct_ident { - fn get(&self) -> & #field_ty { - &self.#field_ident - } - - fn get_mut(&mut self) -> &mut #field_ty { - &mut self.#field_ident - } - } - }; - code.into() - } - }; -} - -macro_rules! declare_impl_trait { - ($derive_name:ident, $trait_core_name:ident) => { - #[proc_macro_derive($trait_core_name)] - pub fn $derive_name(_item: proc_macro::TokenStream) -> proc_macro::TokenStream { - let derive = syn::parse_macro_input!(_item as syn::DeriveInput); - let struct_ident = derive.ident; - let code = quote::quote! { - impl $trait_core_name for #struct_ident {} - }; - code.into() - } - }; -} - -// NFT -declare_derive_storage_trait!(derive_nft_state, NFTStateKeeper, NFTStateField); -declare_impl_trait!(derive_nft_core, NFTCore); -declare_impl_trait!(derive_nft_metastate, NFTMetaState); - -// MultiToken -declare_derive_storage_trait!(derive_mtk_state, StateKeeper, MTKStateKeeper); -declare_impl_trait!(derive_mtk_token_state, MTKTokenState); -declare_impl_trait!(derive_mtk_core, MTKCore); - -// FT -declare_derive_storage_trait!(derive_ft_state, FTStateKeeper, FTStateField); -declare_impl_trait!(derive_ft_core, FTCore); -declare_impl_trait!(derive_ft_metastate, FTMetaState); diff --git a/contracts/gear-lib-old/src/fungible_token/ft_core.rs b/contracts/gear-lib-old/src/fungible_token/ft_core.rs deleted file mode 100644 index 7cb0f09e7..000000000 --- a/contracts/gear-lib-old/src/fungible_token/ft_core.rs +++ /dev/null @@ -1,156 +0,0 @@ -use crate::fungible_token::{io::*, state::*}; -use gstd::{msg, prelude::*, ActorId}; - -const ZERO_ID: ActorId = ActorId::zero(); - -pub trait FTCore: FTStateKeeper { - /// Mints `amount` of token - /// - /// Requirements: None - /// Arguments: - /// * `amount`: The amount of token to be minted (actually have no limit) - fn mint(&mut self, to: &ActorId, amount: u128) { - self.get_mut() - .balances - .entry(*to) - .and_modify(|balance| *balance += amount) - .or_insert(amount); - self.get_mut().total_supply += amount; - msg::reply( - FTTransfer { - from: ZERO_ID, - to: *to, - amount, - } - .encode(), - 0, - ) - .expect("Error during a reply with FTEvent::FTTransfer"); - } - - /// Burns `amount` of token - /// - /// Requirements: - /// * `msg::source()` MUST have enough tokens on his balance - /// Arguments: - /// `amount`: The amount of token to be burnt - fn burn(&mut self, amount: u128) { - if self - .get() - .balances - .get(&msg::source()) - .expect("The account has no balance at all") - < &amount - { - panic!("Amount exceeds account's balance"); - } - self.get_mut() - .balances - .entry(msg::source()) - .and_modify(|balance| *balance -= amount); - self.get_mut().total_supply -= amount; - msg::reply( - FTTransfer { - from: msg::source(), - to: ZERO_ID, - amount, - }, - 0, - ) - .expect("Error during a reply with FTEvent::FTTransfer"); - } - - /// Transfer `amount` of token - /// - /// Requirements: - /// * Only the token owner or approved account can call that action - /// * `from` MUST have enough tokens - /// * `from` and `to` MUST be non-zero addresses - /// - /// Arguments: - /// * `from`: An account from which token will be transerred - /// * `to`: An account to which token will be transferred - /// * `amount`: The amount of token of be transferred - fn transfer(&mut self, from: &ActorId, to: &ActorId, amount: u128) { - if from == &ZERO_ID || to == &ZERO_ID { - panic!("Zero addresses"); - }; - if !self.can_transfer(from, amount) { - panic!("Not allowed to transfer") - } - if self - .get() - .balances - .get(from) - .expect("The account has no balance at all") - < &amount - { - panic!("Amount exceeds account's balance"); - } - self.get_mut() - .balances - .entry(*from) - .and_modify(|balance| *balance -= amount); - self.get_mut() - .balances - .entry(*to) - .and_modify(|balance| *balance += amount) - .or_insert(amount); - msg::reply( - FTTransfer { - from: *from, - to: *to, - amount, - }, - 0, - ) - .expect("Error during a reply with FTEvent::FTTransfer"); - } - - /// Gives a right to another account to manage the `amount` of token - /// - /// Requirements: - /// * Only the token owner can call that action - /// * `to` MUST be a non-zero account - /// - /// Arguments: - /// * `to`: An account that will be approved to manage the indicated amount of token - /// * `amount`: The amount of tokens to be approved - fn approve(&mut self, to: &ActorId, amount: u128) { - if to == &ZERO_ID { - panic!("Approve to zero address"); - } - self.get_mut() - .allowances - .entry(msg::source()) - .or_default() - .insert(*to, amount); - msg::reply( - FTApproval { - from: msg::source(), - to: *to, - amount, - }, - 0, - ) - .expect("Error during a reply with FTEvent::FTApproval"); - } - - /// Checks whether it is possible to perform a transfer - fn can_transfer(&mut self, from: &ActorId, amount: u128) -> bool { - if let Some(allowed_amount) = self - .get() - .allowances - .get(from) - .and_then(|m| m.get(&msg::source())) - { - if allowed_amount >= &amount { - self.get_mut().allowances.entry(*from).and_modify(|m| { - m.entry(msg::source()).and_modify(|a| *a -= amount); - }); - return true; - } - } - false - } -} diff --git a/contracts/gear-lib-old/src/fungible_token/io.rs b/contracts/gear-lib-old/src/fungible_token/io.rs deleted file mode 100644 index 5a080cbbf..000000000 --- a/contracts/gear-lib-old/src/fungible_token/io.rs +++ /dev/null @@ -1,19 +0,0 @@ -use gstd::{prelude::*, ActorId}; - -#[derive(Debug, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTTransfer { - pub from: ActorId, - pub to: ActorId, - pub amount: u128, -} - -#[derive(Debug, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTApproval { - pub from: ActorId, - pub to: ActorId, - pub amount: u128, -} diff --git a/contracts/gear-lib-old/src/fungible_token/mod.rs b/contracts/gear-lib-old/src/fungible_token/mod.rs deleted file mode 100644 index b6ebe9960..000000000 --- a/contracts/gear-lib-old/src/fungible_token/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod ft_core; -pub mod io; -pub mod state; diff --git a/contracts/gear-lib-old/src/fungible_token/state.rs b/contracts/gear-lib-old/src/fungible_token/state.rs deleted file mode 100644 index 8fa4eb11c..000000000 --- a/contracts/gear-lib-old/src/fungible_token/state.rs +++ /dev/null @@ -1,59 +0,0 @@ -use gstd::{collections::HashMap, prelude::*, ActorId}; - -#[derive(Debug, Default)] -pub struct FTState { - /// Token name. - pub name: String, - /// Token symbol. - pub symbol: String, - /// Token's total supply. - pub total_supply: u128, - /// Token's decimals. - pub decimals: u8, - /// Token holders balances. - pub balances: HashMap, - /// Token holders allowance to manipulate token amounts. - pub allowances: HashMap>, -} - -pub trait FTStateKeeper { - fn get(&self) -> &FTState; - fn get_mut(&mut self) -> &mut FTState; -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTQuery { - Name, - Symbol, - Decimals, - TotalSupply, - BalanceOf { account: ActorId }, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTQueryReply { - Name(String), - Symbol(String), - Decimals(u8), - TotalSupply(u128), - BalanceOf(u128), -} - -pub trait FTMetaState: FTStateKeeper { - fn proc_state(&self, query: FTQuery) -> Option> { - let reply = match query { - FTQuery::Name => FTQueryReply::Name(self.get().name.clone()), - FTQuery::Symbol => FTQueryReply::Symbol(self.get().symbol.clone()), - FTQuery::Decimals => FTQueryReply::Decimals(self.get().decimals), - FTQuery::TotalSupply => FTQueryReply::TotalSupply(self.get().total_supply), - FTQuery::BalanceOf { account } => { - FTQueryReply::BalanceOf(*self.get().balances.get(&account).unwrap_or(&0)) - } - }; - Some(reply.encode()) - } -} diff --git a/contracts/gear-lib-old/src/lib.rs b/contracts/gear-lib-old/src/lib.rs deleted file mode 100644 index d7ae5a5ec..000000000 --- a/contracts/gear-lib-old/src/lib.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![no_std] - -pub mod fungible_token; -pub mod multitoken; -pub mod non_fungible_token; -pub mod sr25519; diff --git a/contracts/gear-lib-old/src/multitoken/io.rs b/contracts/gear-lib-old/src/multitoken/io.rs deleted file mode 100644 index 7449ad5cb..000000000 --- a/contracts/gear-lib-old/src/multitoken/io.rs +++ /dev/null @@ -1,62 +0,0 @@ -use gstd::{prelude::*, ActorId}; - -pub type TokenId = u128; - -#[derive(Debug, Decode, Encode, TypeInfo, Default, Clone, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TokenMetadata { - pub title: Option, - pub description: Option, - pub media: Option, - pub reference: Option, -} - -#[derive(Debug, Decode, Encode, TypeInfo, Default, Clone, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Token { - pub id: TokenId, - pub amount: u128, - pub metadata: Option, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitConfig { - pub name: String, - pub symbol: String, - pub base_uri: String, -} - -#[derive(Debug, Encode, Decode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct BalanceReply { - pub account: ActorId, - pub id: TokenId, - pub amount: u128, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MTKEvent { - Transfer { - operator: ActorId, - from: ActorId, - to: ActorId, - ids: Vec, - amounts: Vec, - }, - BalanceOf(Vec), - Approval { - from: ActorId, - to: ActorId, - }, - RevokeApproval { - from: ActorId, - to: ActorId, - }, -} diff --git a/contracts/gear-lib-old/src/multitoken/mod.rs b/contracts/gear-lib-old/src/multitoken/mod.rs deleted file mode 100644 index e8a618300..000000000 --- a/contracts/gear-lib-old/src/multitoken/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod io; -pub mod mtk_core; -pub mod state; diff --git a/contracts/gear-lib-old/src/multitoken/mtk_core.rs b/contracts/gear-lib-old/src/multitoken/mtk_core.rs deleted file mode 100644 index 265a8c603..000000000 --- a/contracts/gear-lib-old/src/multitoken/mtk_core.rs +++ /dev/null @@ -1,270 +0,0 @@ -use crate::multitoken::{io::*, state::*}; -use gstd::{msg, prelude::*, ActorId}; - -const ZERO_ID: ActorId = ActorId::zero(); - -pub trait MTKCore: StateKeeper + MTKTokenState { - fn assert_can_burn(&mut self, owner: &ActorId, id: &TokenId, amount: u128) { - if self.get_balance(owner, id) < amount { - panic!("MTK: Not enough balance"); - } - } - - fn assert_can_transfer(&self, from: &ActorId, id: &u128, amount: u128) { - if !(from == &msg::source() || self.get_balance(&msg::source(), id) >= amount) { - panic!("MTK: Wrong owner or insufficient balance"); - } - } - - fn assert_approved(&self, owner: &ActorId, operator: &ActorId) { - if !self.get().approvals.contains_key(owner) - && *self.get().approvals[owner].get(operator).unwrap_or(&false) - { - panic!("MTK: Caller is not approved"); - } - } - - // The internal implementation of mint action with all the checks and panics - fn mint_impl( - &mut self, - account: &ActorId, - id: &TokenId, - amount: u128, - meta: Option, - ) { - if let Some(metadata) = meta { - if amount > 1 { - panic!("MTK: Mint metadata to a fungible token") - } - self.get_mut().token_metadata.insert(*id, metadata); - // since we have metadata = means we have an nft, so add it to the owners - self.get_mut().owners.insert(*id, *account); - } - let prev_balance = self.get_balance(account, id); - self.set_balance(account, id, prev_balance.saturating_add(amount)); - } - - /// Mints multiple new tokens (in case all input length is 1 - simple mint) - /// Requirements: - /// * `ids` element must a unique value - /// * `account` must be a non-zero account - /// Arguments: - /// * `account`: An account to which minted token will be assigned - /// * `ids`: The vector of IDs of minted tokens - /// * `amounts`: The vector of amounts of tokens to mint (1 in case of an NFT) - /// * `meta`: The vector of optional additional metadata for NFTs - fn mint( - &mut self, - account: &ActorId, - ids: Vec, - amounts: Vec, - meta: Vec>, - ) { - if account == &ZERO_ID { - panic!("MTK: Mint to zero address") - } - - if ids.len() != amounts.len() { - panic!("MTK: ids and amounts length mismatch") - } - - meta.into_iter() - .enumerate() - .for_each(|(i, meta)| self.mint_impl(account, &ids[i], amounts[i], meta)); - - msg::reply( - MTKEvent::Transfer { - operator: msg::source(), - from: ZERO_ID, - to: *account, - ids: ids.to_vec(), - amounts: amounts.to_vec(), - }, - 0, - ) - .expect("Error during a reply with MTKEvent::Transfer"); - } - - // The internal implementation of burn action with all the checks and panics - fn burn_impl(&mut self, id: &TokenId, amount: u128) { - self.get_mut().owners.remove(id); - self.set_balance( - &msg::source(), - id, - self.get_balance(&msg::source(), id).saturating_sub(amount), - ); - } - - /// Burns multiple tokens (in case all input length is 1 - simple burn) - /// Requirements: - /// * Only token owner can perform this action - /// * `ids` element must be the ID of the existing token - /// * `amounts` element must not exceed user's token balance - /// Arguments: - /// * `ids`: The vector of ids of the token to be burnt - /// * `amounts`: The vector of amounts of token to be burnt - fn burn(&mut self, ids: Vec, amounts: Vec) { - if ids.len() != amounts.len() { - panic!("MTK: ids and amounts length mismatch") - } - - for (id, amount) in ids.iter().zip(amounts.clone()) { - self.assert_can_burn(&msg::source(), id, amount); - } - - ids.iter() - .enumerate() - .for_each(|(i, id)| self.burn_impl(id, amounts[i])); - - msg::reply( - MTKEvent::Transfer { - operator: msg::source(), - from: msg::source(), - to: ZERO_ID, - ids: ids.to_vec(), - amounts: amounts.to_vec(), - }, - 0, - ) - .expect("Error during a reply with MTKEvent::Transfer"); - } - - // The internal implementation of transfer action with all the checks and panics - fn transfer_from_impl(&mut self, from: &ActorId, to: &ActorId, id: &TokenId, amount: u128) { - let from_balance = self.get_balance(from, id); - - if from_balance < amount { - panic!("MTK: insufficient balance for transfer") - } - self.set_balance(from, id, from_balance.saturating_sub(amount)); - let to_balance = self.get_balance(to, id); - self.set_balance(to, id, to_balance.saturating_add(amount)); - } - - /// Transfers multiple tokens to a new user (in case all input length is 1 - simple transfer) - /// Requirements: - /// * Only the token owner or approved account can call that action - /// * `to` must be a non-zero account - /// * `ids` element must be the ID of the existing token - /// * `amounts` element must not exceed from's balance - /// Arguments: - /// * `from`: An account from which token will be transferred - /// * `to`: An account to which token will be transferred - /// * `ids`: The vector of IDs of transferred token - /// * `amounts`: The vector of amounts of transferred token - fn transfer_from( - &mut self, - from: &ActorId, - to: &ActorId, - ids: Vec, - amounts: Vec, - ) { - if from == to { - panic!("MTK: sender and recipient addresses are the same") - } - - if from != &msg::source() { - panic!("MTK: caller is not owner nor approved") - } - - if to == &ZERO_ID { - panic!("MTK: transfer to the zero address") - } - - if ids.len() != amounts.len() { - panic!("MTK: ids and amounts length mismatch") - } - - for (id, amount) in ids.iter().zip(amounts.clone()) { - self.assert_can_transfer(from, id, amount); - } - - ids.iter() - .enumerate() - .for_each(|(i, id)| self.transfer_from_impl(from, to, id, amounts[i])); - - msg::reply( - MTKEvent::Transfer { - operator: msg::source(), - from: *from, - to: *to, - ids: ids.to_vec(), - amounts: amounts.to_vec(), - }, - 0, - ) - .expect("Error during a reply with MTKEvent::Transfer"); - } - - /// Gives a right to another account to manage its tokens - /// Requirements: - /// * Only the token owner can call that action - /// * `to` must be a non-zero account - /// Arguments: - /// * `to`: An account that will be approved to manage the tokens - fn approve(&mut self, to: &ActorId) { - if to == &ZERO_ID { - panic!("MTK: approving zero address") - } - self.get_mut() - .approvals - .get_mut(&msg::source()) - .expect("Caller has not approved any accounts") - .insert(*to, true); - msg::reply( - MTKEvent::Approval { - from: msg::source(), - to: *to, - }, - 0, - ) - .expect("Error during a reply with MTKEvent::Approval"); - } - - /// Removed a right to another account to manage its tokens - /// Requirements: - /// * Only the token owner can call that action - /// * `to` must be a non-zero account - /// Arguments: - /// * `to`: An account that won't be able to manage the tokens - fn revoke_approval(&mut self, to: &ActorId) { - self.get_mut() - .approvals - .get_mut(&msg::source()) - .expect("Caller has not approved any accounts") - .remove_entry(to); - - msg::reply( - MTKEvent::RevokeApproval { - from: msg::source(), - to: *to, - }, - 0, - ) - .expect("Error during a reply with MTKEvent::RevokeApproval"); - } - - /// Returns the amount of multiple specific tokens multiple users have - /// (in case all input length is 1 - simple balance_of) - /// Arguments: - /// * `accounts`: The vectors of IDs of the actor - /// * `id`: The vector of token IDs which balance will be returned - fn balance_of(&self, accounts: Vec, ids: Vec) { - if accounts.len() != ids.len() { - panic!("MTK: accounts and ids length mismatch") - } - - let res = ids - .iter() - .zip(accounts) - .map(|(id, account)| BalanceReply { - account, - id: *id, - amount: self.get_balance(&account, id), - }) - .collect(); - - msg::reply(MTKEvent::BalanceOf(res), 0) - .expect("Error during a reply with MTKEvent::BalanceOf"); - } -} diff --git a/contracts/gear-lib-old/src/multitoken/state.rs b/contracts/gear-lib-old/src/multitoken/state.rs deleted file mode 100644 index aa3073dd5..000000000 --- a/contracts/gear-lib-old/src/multitoken/state.rs +++ /dev/null @@ -1,154 +0,0 @@ -use crate::multitoken::io::*; -use gstd::{collections::HashMap, prelude::*, ActorId}; - -#[derive(Debug, Default)] -pub struct MTKState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub balances: HashMap>, - pub approvals: HashMap>, - pub token_metadata: HashMap, - // owner for nft - pub owners: HashMap, -} - -pub trait StateKeeper { - fn get(&self) -> &MTKState; - fn get_mut(&mut self) -> &mut MTKState; -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MTKQuery { - Name, - Symbol, - Uri, - BalanceOf(ActorId, TokenId), - MetadataOf(TokenId), - URI(TokenId), - TokensForOwner(ActorId), - TokensIDsForOwner(ActorId), - Supply(TokenId), - OwnerOf(TokenId), -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MTKQueryReply { - Name(String), - Symbol(String), - Uri(String), - Balance(TokenId), - URI(String), - MetadataOf(TokenMetadata), - TokensForOwner(Vec), - TokensIDsForOwner(Vec), - Supply(u128), - OwnerOf(ActorId), -} - -pub trait MTKTokenState: StateKeeper { - fn get_balance(&self, account: &ActorId, id: &TokenId) -> u128 { - *self - .get() - .balances - .get(id) - .and_then(|m| m.get(account)) - .unwrap_or(&0) - } - - fn set_balance(&mut self, account: &ActorId, id: &TokenId, amount: u128) { - let mut _balance = self - .get_mut() - .balances - .entry(*id) - .or_default() - .insert(*account, amount); - } - - fn get_uri(&self, id: TokenId) -> String { - self.get() - .base_uri - .clone() - .replace("{id}", &format!("{id}")) - } - - fn get_metadata(&self, id: TokenId) -> TokenMetadata { - self.get() - .token_metadata - .get(&id) - .cloned() - .unwrap_or_default() - } - - fn tokens_for_owner(&self, owner: &ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - let balances = &self.get().balances; - for (token, bal) in balances { - if let Some(amount) = bal.get(owner) { - // tokens ActorId, u128 - tokens.push(Token { - id: *token, - amount: *amount, - metadata: gstd::Some( - self.get() - .token_metadata - .get(token) - .cloned() - .unwrap_or_default(), - ), - }) - } - } - tokens - } - - fn tokens_ids_for_owner(&self, owner: &ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - let balances = &self.get().balances; - for (token, bals) in balances { - if bals.get(owner).is_some() { - tokens.push(*token); - } - } - tokens - } - - fn supply(&self, id: TokenId) -> u128 { - self.get() - .balances - .get(&id) - .expect("Balances always exist; qed") - .values() - .sum() - } - - fn owner_of(&self, id: TokenId) -> ActorId { - *self.get().owners.get(&id).expect("No owner for a token") - } - - fn proc_state(&mut self, query: MTKQuery) -> Option> { - let state = match query { - MTKQuery::Name => MTKQueryReply::Name(self.get().name.clone()), - MTKQuery::Symbol => MTKQueryReply::Symbol(self.get().symbol.clone()), - MTKQuery::Uri => MTKQueryReply::Uri(self.get().base_uri.clone()), - MTKQuery::BalanceOf(account, id) => { - MTKQueryReply::Balance(Self::get_balance(self, &account, &id)) - } - MTKQuery::URI(id) => MTKQueryReply::URI(Self::get_uri(self, id)), - MTKQuery::MetadataOf(id) => MTKQueryReply::MetadataOf(Self::get_metadata(self, id)), - MTKQuery::TokensIDsForOwner(owner) => { - MTKQueryReply::TokensIDsForOwner(Self::tokens_ids_for_owner(self, &owner)) - } - MTKQuery::TokensForOwner(owner) => { - MTKQueryReply::TokensForOwner(Self::tokens_for_owner(self, &owner)) - } - MTKQuery::Supply(id) => MTKQueryReply::Supply(Self::supply(self, id)), - MTKQuery::OwnerOf(id) => MTKQueryReply::OwnerOf(Self::owner_of(self, id)), - }; - Some(state.encode()) - } -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/delegated.rs b/contracts/gear-lib-old/src/non_fungible_token/delegated.rs deleted file mode 100644 index be285f101..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/delegated.rs +++ /dev/null @@ -1,44 +0,0 @@ -use crate::non_fungible_token::token::*; -use gstd::{exec, msg, prelude::*, ActorId}; - -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct DelegatedApproveMessage { - pub token_owner_id: ActorId, - pub approved_actor_id: ActorId, - pub nft_program_id: ActorId, - pub token_id: TokenId, - pub expiration_timestamp: u64, -} - -impl DelegatedApproveMessage { - pub(crate) fn validate(&self, signed_approve: &[u8], true_token_owner: &ActorId) { - if msg::source() != self.approved_actor_id { - panic!("Source is wrong, msg::source must be equal to approved_actor_id") - } - - if exec::program_id() != self.nft_program_id { - panic!("You have tried to use delegated_approve with wrong program") - } - - if self.approved_actor_id == ActorId::zero() { - panic!("Zero address, just use burn if you want to remove token"); - } - - if true_token_owner != &self.token_owner_id { - panic!("This user doesn't own the token") - } - - if exec::block_timestamp() >= self.expiration_timestamp { - panic!("Delegated approve has expired") - } - - let owner: [u8; 32] = self.token_owner_id.into(); - if crate::sr25519::verify(signed_approve, self.encode(), owner).is_err() { - panic!("Failed sign verification"); - } - } -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/io.rs b/contracts/gear-lib-old/src/non_fungible_token/io.rs deleted file mode 100644 index 9cc5eca3f..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/io.rs +++ /dev/null @@ -1,34 +0,0 @@ -use crate::non_fungible_token::{royalties::*, token::*}; -use gstd::{prelude::*, ActorId}; - -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTTransfer { - pub from: ActorId, - pub to: ActorId, - pub token_id: TokenId, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTTransferPayout { - pub from: ActorId, - pub to: ActorId, - pub token_id: TokenId, - pub payouts: Payout, -} - -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTApproval { - pub owner: ActorId, - pub approved_account: ActorId, - pub token_id: TokenId, -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/mod.rs b/contracts/gear-lib-old/src/non_fungible_token/mod.rs deleted file mode 100644 index 489320a5d..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod delegated; -pub mod io; -pub mod nft_core; -pub mod royalties; -pub mod state; -pub mod token; diff --git a/contracts/gear-lib-old/src/non_fungible_token/nft_core.rs b/contracts/gear-lib-old/src/non_fungible_token/nft_core.rs deleted file mode 100644 index 646f32b8d..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/nft_core.rs +++ /dev/null @@ -1,280 +0,0 @@ -use crate::non_fungible_token::{delegated::*, io::*, royalties::*, state::*, token::*}; -use gstd::{collections::HashSet, msg, prelude::*, ActorId}; - -const ZERO_ID: ActorId = ActorId::zero(); - -pub trait NFTCore: NFTStateKeeper { - /// Mints a new token - /// - /// Requirements: - /// * `token_id` must be unique - /// * `to` must be a non-zero account - /// - /// Arguments: - /// * `to`: An account to which minted NFT will be assigned - /// * `token_id`: the ID of minted NFT - /// * `token_metadata`: optional additional metadata about NFT - fn mint( - &mut self, - to: &ActorId, - token_id: TokenId, - token_metadata: Option, - ) -> NFTTransfer { - self.assert_token_exists(token_id); - self.assert_zero_address(to); - self.get_mut().owner_by_id.insert(token_id, *to); - self.get_mut() - .tokens_for_owner - .entry(*to) - .and_modify(|tokens| tokens.push(token_id)) - .or_insert_with(|| vec![token_id]); - self.get_mut() - .token_metadata_by_id - .insert(token_id, token_metadata); - NFTTransfer { - from: ZERO_ID, - to: *to, - token_id, - } - } - - /// Burns a token - /// - /// Requirements: - /// * Only NFT owner can call that action - /// * `token_id` must be the ID of the existing NFT - /// - /// Arguments: - /// * `token_id`: the ID of NFT that will be burnt - fn burn(&mut self, token_id: TokenId) -> NFTTransfer { - let owner = *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - self.assert_owner(&owner); - self.get_mut().owner_by_id.remove(&token_id); - self.get_mut().token_metadata_by_id.remove(&token_id); - self.get_mut() - .tokens_for_owner - .entry(owner) - .and_modify(|tokens| tokens.retain(|&token| token != token_id)); - NFTTransfer { - from: owner, - to: ZERO_ID, - token_id, - } - } - - /// Transfers a token to the new owner - /// - /// Requirements: - /// * Only the token owner or approved account can call that action - /// * `to` must be a non-zero account - /// * `token_id` must be the ID of the existing NFT - /// - /// Arguments: - /// * `to`: An account to which NFT will be transferred - /// * `token_id`: the ID of transferred NFT - fn transfer(&mut self, to: &ActorId, token_id: TokenId) -> NFTTransfer { - let owner = self.internal_transfer(to, token_id); - NFTTransfer { - from: owner, - to: *to, - token_id, - } - } - - /// Transfers a token to the new owner - /// - /// Requirements: - /// * Only the token owner or approved account can call that action - /// * `to` must be a non-zero account - /// * `token_id` must be the ID of the existing NFT - /// - /// Arguments: - /// * `to`: An account to which NFT will be transferred - /// * `token_id`: the ID of transferred NFT - fn transfer_payout( - &mut self, - to: &ActorId, - token_id: TokenId, - amount: u128, - ) -> NFTTransferPayout { - let owner = self.internal_transfer(to, token_id); - let payouts = self.nft_payout(&owner, amount); - NFTTransferPayout { - from: owner, - to: *to, - token_id, - payouts, - } - } - - fn internal_transfer(&mut self, to: &ActorId, token_id: TokenId) -> ActorId { - let owner = *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - self.assert_can_transfer(token_id, &owner); - self.assert_zero_address(to); - // assign new owner - self.get_mut() - .owner_by_id - .entry(token_id) - .and_modify(|owner| *owner = *to); - // push token to new owner - self.get_mut() - .tokens_for_owner - .entry(*to) - .and_modify(|tokens| tokens.push(token_id)) - .or_insert_with(|| vec![token_id]); - // remove token from old owner - self.get_mut() - .tokens_for_owner - .entry(owner) - .and_modify(|tokens| tokens.retain(|&token| token != token_id)); - // remove approvals if any - self.get_mut().token_approvals.remove(&token_id); - owner - } - - /// Gives a right to another account to manage the token with indicated ID - /// - /// Requirements: - /// * Only the token owner can call that action - /// * `to` must be a non-zero account - /// * `token_id` must be the ID of the existing NFT - /// - /// Arguments: - /// * `to`: An account that will be approved to manage the indicated NFT - /// * `token_id`: the ID of the NFT - fn approve(&mut self, to: &ActorId, token_id: TokenId) -> NFTApproval { - let owner = *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - self.assert_owner(&owner); - self.assert_zero_address(to); - self.get_mut() - .token_approvals - .entry(token_id) - .and_modify(|approvals| { - approvals.insert(*to); - }) - .or_insert_with(|| HashSet::from([*to])); - NFTApproval { - owner, - approved_account: *to, - token_id, - } - } - - fn revoke_approval(&mut self, approved_account: &ActorId, token_id: TokenId) -> NFTApproval { - let owner = *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - self.assert_owner(&owner); - self.get_mut() - .token_approvals - .entry(token_id) - .and_modify(|approvals| { - approvals.remove(approved_account); - }); - NFTApproval { - owner, - approved_account: ZERO_ID, - token_id, - } - } - - fn owner_of(&self, token_id: TokenId) -> ActorId { - *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist") - } - - fn is_approved_to(&self, to: &ActorId, token_id: TokenId) -> bool { - self.get() - .token_approvals - .get(&token_id) - .expect("NonFungibleToken: token does not exist") - .contains(to) - } - - fn delegated_approve( - &mut self, - message: DelegatedApproveMessage, - signed_approve: [u8; 64], - ) -> NFTApproval { - let to = &message.approved_actor_id; - let token_id = message.token_id; - let owner = *self - .get() - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - - message.validate(&signed_approve, &owner); - - self.get_mut() - .token_approvals - .entry(token_id) - .and_modify(|approvals| { - approvals.insert(*to); - }) - .or_insert_with(|| HashSet::from([*to])); - NFTApproval { - owner, - approved_account: *to, - token_id, - } - } - - /// Returns a `Payout` struct for a given token - /// If NFT contract has no royalties it just returns BtreeMap {“owner”: "amount"} - fn nft_payout(&self, owner: &ActorId, amount: u128) -> Payout { - if let Some(ref royalties) = self.get().royalties { - royalties.payouts(owner, amount) - } else { - [(*owner, amount)].into() - } - } - - /// Checks that NFT with indicated ID already exists - fn assert_token_exists(&self, token_id: TokenId) { - if self.get().owner_by_id.contains_key(&token_id) { - panic!("NonFungibleToken: Token already exists"); - } - } - - /// Checks account for a zero address - fn assert_zero_address(&self, account: &ActorId) { - if account == &ZERO_ID { - panic!("NonFungibleToken: Zero address"); - } - } - - /// Checks that `msg::source()` is allowed to manage the token with indicated `token_id` - fn assert_can_transfer(&self, token_id: TokenId, owner: &ActorId) { - if let Some(approved_accounts) = self.get().token_approvals.get(&token_id) { - if approved_accounts.contains(&msg::source()) { - return; - } - } - self.assert_owner(owner); - } - - /// Checks that `msg::source()` is the owner of the token with indicated `token_id` - fn assert_owner(&self, owner: &ActorId) { - if owner != &msg::source() { - panic!("Not allowed to transfer"); - } - } -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/royalties.rs b/contracts/gear-lib-old/src/non_fungible_token/royalties.rs deleted file mode 100644 index 99645b356..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/royalties.rs +++ /dev/null @@ -1,44 +0,0 @@ -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -pub type Payout = BTreeMap; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Royalties { - accounts: Payout, - percent: u16, -} - -impl Royalties { - pub fn validate(&self) { - // percent must be less than or equal to 100% (100 * 100) - if self.percent > 10_000u16 { - panic!("royalty percent must be less than 100%"); - } - let mut total_percents = 0; - self.accounts.iter().for_each(|(_, percent)| { - if *percent as u16 > 10_000u16 { - panic!("account percent must be less than or equal to 100%"); - } - total_percents += percent; - }); - if total_percents as u16 > 10_000u16 { - panic!("total percent of royalty be less than or equal to 100%"); - } - } - - pub fn payouts(&self, owner: &ActorId, amount: u128) -> Payout { - let royalty_payment = amount * self.percent as u128 / 10_000; - let mut payouts: Payout = self - .accounts - .iter() - .map(|(account, percent)| (*account, *percent * royalty_payment / 10_000)) - .collect(); - - let rest = amount - royalty_payment; - let owner_payout = payouts.get(owner).map_or(0, |p| *p) + rest; - payouts.insert(*owner, owner_payout); - payouts - } -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/state.rs b/contracts/gear-lib-old/src/non_fungible_token/state.rs deleted file mode 100644 index d71a9a7af..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/state.rs +++ /dev/null @@ -1,159 +0,0 @@ -use crate::non_fungible_token::{royalties::*, token::*}; -use gstd::{ - collections::{HashMap, HashSet}, - prelude::*, - ActorId, -}; - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -pub struct NFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: HashMap, - pub token_approvals: HashMap>, - pub token_metadata_by_id: HashMap>, - pub tokens_for_owner: HashMap>, - pub royalties: Option, -} - -pub trait NFTStateKeeper { - fn get(&self) -> &NFTState; - fn get_mut(&mut self) -> &mut NFTState; -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTQuery { - NFTInfo, - Token { token_id: TokenId }, - TokensForOwner { owner: ActorId }, - TotalSupply, - SupplyForOwner { owner: ActorId }, - AllTokens, - ApprovedTokens { account: ActorId }, -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTQueryReply { - NFTInfo { - name: String, - symbol: String, - base_uri: String, - }, - Token { - token: Token, - }, - TokensForOwner { - tokens: Vec, - }, - TotalSupply { - total_supply: u128, - }, - SupplyForOwner { - supply: u128, - }, - AllTokens { - tokens: Vec, - }, - ApprovedTokens { - tokens: Vec, - }, -} - -pub trait NFTMetaState: NFTStateKeeper { - fn token(&self, token_id: TokenId) -> Token { - let mut token = Token::default(); - if let Some(owner_id) = self.get().owner_by_id.get(&token_id) { - token.id = token_id; - token.owner_id = *owner_id; - } - if let Some(approved_account_ids) = self.get().token_approvals.get(&token_id) { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some(Some(metadata)) = self.get().token_metadata_by_id.get(&token_id) { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token - } - - fn tokens_for_owner(&self, owner: &ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - if let Some(token_ids) = self.get().tokens_for_owner.get(owner) { - for token_id in token_ids { - tokens.push(self.token(*token_id)); - } - } - tokens - } - - fn total_supply(&self) -> u128 { - self.get().owner_by_id.len() as u128 - } - - fn supply_for_owner(&self, owner: &ActorId) -> u128 { - self.get() - .tokens_for_owner - .get(owner) - .map(|tokens| tokens.len() as u128) - .unwrap_or(0) - } - fn all_tokens(&self) -> Vec { - self.get() - .owner_by_id - .keys() - .map(|id| self.token(*id)) - .collect() - } - fn approved_tokens(&self, account: &ActorId) -> Vec { - self.get() - .owner_by_id - .keys() - .filter_map(|id| { - self.get().token_approvals.get(id).and_then(|approvals| { - if approvals.contains(account) { - Some(self.token(*id)) - } else { - None - } - }) - }) - .collect() - } - - fn proc_state(&self, query: NFTQuery) -> Option> { - let encoded = match query { - NFTQuery::NFTInfo => NFTQueryReply::NFTInfo { - name: self.get().name.clone(), - symbol: self.get().symbol.clone(), - base_uri: self.get().base_uri.clone(), - }, - NFTQuery::Token { token_id } => NFTQueryReply::Token { - token: self.token(token_id), - }, - NFTQuery::TokensForOwner { owner } => NFTQueryReply::TokensForOwner { - tokens: self.tokens_for_owner(&owner), - }, - NFTQuery::TotalSupply => NFTQueryReply::TotalSupply { - total_supply: self.total_supply(), - }, - NFTQuery::SupplyForOwner { owner } => NFTQueryReply::SupplyForOwner { - supply: self.supply_for_owner(&owner), - }, - NFTQuery::AllTokens => NFTQueryReply::AllTokens { - tokens: self.all_tokens(), - }, - NFTQuery::ApprovedTokens { account } => NFTQueryReply::ApprovedTokens { - tokens: self.approved_tokens(&account), - }, - } - .encode(); - Some(encoded) - } -} diff --git a/contracts/gear-lib-old/src/non_fungible_token/token.rs b/contracts/gear-lib-old/src/non_fungible_token/token.rs deleted file mode 100644 index ed4194c7a..000000000 --- a/contracts/gear-lib-old/src/non_fungible_token/token.rs +++ /dev/null @@ -1,31 +0,0 @@ -use gstd::{collections::BTreeSet, prelude::*, ActorId}; -use primitive_types::U256; - -pub type TokenId = U256; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Token { - pub id: TokenId, - pub owner_id: ActorId, - pub name: String, - pub description: String, - pub media: String, - pub reference: String, - pub approved_account_ids: BTreeSet, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TokenMetadata { - // ex. "CryptoKitty #100" - pub name: String, - // free-form description - pub description: String, - // URL to associated media, preferably to decentralized, content-addressed storage - pub media: String, - // URL to an off-chain JSON file with more info. - pub reference: String, -} diff --git a/contracts/gear-lib-old/src/sr25519.rs b/contracts/gear-lib-old/src/sr25519.rs deleted file mode 100644 index 97ddd8d0c..000000000 --- a/contracts/gear-lib-old/src/sr25519.rs +++ /dev/null @@ -1,26 +0,0 @@ -use schnorrkel::PublicKey; - -// check sp-core/sr25519.rs for details -const SIGNING_CONTEXT: &[u8] = b"substrate"; - -pub enum Error { - BadSignature, - BadPublicKey, - VerificationFailed, -} - -pub fn verify, M: AsRef<[u8]>>( - signature: &[u8], - message: M, - pubkey: P, -) -> Result<(), Error> { - let signature = - schnorrkel::Signature::from_bytes(signature).map_err(|_| Error::BadSignature)?; - - let pub_key = PublicKey::from_bytes(pubkey.as_ref()).map_err(|_| Error::BadPublicKey)?; - - pub_key - .verify_simple(SIGNING_CONTEXT, message.as_ref(), &signature) - .map(|_| ()) - .map_err(|_| Error::VerificationFailed) -} diff --git a/contracts/gear-lib/Cargo.toml b/contracts/gear-lib/Cargo.toml deleted file mode 100644 index 53c833c55..000000000 --- a/contracts/gear-lib/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "gear-lib" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -indexmap.workspace = true -ahash.workspace = true -primitive-types.workspace = true - -[dev-dependencies] -gstd.workspace = true diff --git a/contracts/gear-lib/README.md b/contracts/gear-lib/README.md deleted file mode 100644 index 5a7bcc589..000000000 --- a/contracts/gear-lib/README.md +++ /dev/null @@ -1,18 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=gear-lib/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/gear_lib) - -# Gear library - -Token primitives, helpers for contracts, and everything else that wasn't included in `gstd`. - -### ⚙️ Usage - -Include the following line under the `[dependencies]` table in your contract's `Cargo.toml` file: -```toml -gear-lib = { git = "https://github.com/gear-foundation/dapps", tag = "v1.0.1" } -``` - -### ✅ Testing -```sh -cargo t -p gear-lib -``` diff --git a/contracts/gear-lib/src/lib.rs b/contracts/gear-lib/src/lib.rs deleted file mode 100644 index fb4db695b..000000000 --- a/contracts/gear-lib/src/lib.rs +++ /dev/null @@ -1,4 +0,0 @@ -#![no_std] - -pub mod tokens; -pub mod tx_manager; diff --git a/contracts/gear-lib/src/tokens.rs b/contracts/gear-lib/src/tokens.rs deleted file mode 100644 index ee62254eb..000000000 --- a/contracts/gear-lib/src/tokens.rs +++ /dev/null @@ -1,30 +0,0 @@ -//! Basic token implementations & primitives. - -pub mod fungible; -pub mod multi; -pub mod non_fungible; -pub mod types; - -#[cfg(test)] -mod test_helper { - extern crate std; - - use gstd::{cell::Cell, ActorId}; - use std::thread_local; - - thread_local! { - static SOURCE: Cell = const { Cell::new(ActorId::zero()) }; - } - - pub mod msg { - use super::*; - - pub fn source() -> ActorId { - SOURCE.with(Cell::get) - } - - pub fn set_source(source: ActorId) { - SOURCE.with(|old_source| old_source.set(source)); - } - } -} diff --git a/contracts/gear-lib/src/tokens/fungible.rs b/contracts/gear-lib/src/tokens/fungible.rs deleted file mode 100644 index 89f5d6854..000000000 --- a/contracts/gear-lib/src/tokens/fungible.rs +++ /dev/null @@ -1,533 +0,0 @@ -//! The fungible token. - -use super::types::{Amount, Operator, Owner}; -use gstd::{collections::HashMap, prelude::*, ActorId}; - -#[cfg(test)] -use super::test_helper::msg; -#[cfg(not(test))] -use gstd::msg; - -pub mod encodable; -pub mod extensions; - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct OwnerData { - balance: Amount, - allowances: HashMap, -} - -/// The fungible token implementation. -#[derive(Default, Debug, PartialEq, Eq, Clone)] -pub struct FTState { - total_supply: Amount, - owners: HashMap, -} - -impl FTState { - pub fn new() -> Self { - Self::default() - } - - /// Gets the current total token supply. - pub const fn total_supply(&self) -> Amount { - self.total_supply - } - - /// Allows `operator` to spend `amount` of [`msg::source()`]'s tokens. - /// - /// # Errors - /// - [`FTError::ZeroRecipientAddress`] if `operator` is - /// [`ActorId::zero()`]. - pub fn approve(&mut self, operator: Operator, amount: Amount) -> Result { - self.internal_approve(msg::source(), operator, amount) - } - - fn unchecked_internal_approve(&mut self, owner: Owner, operator: Operator, amount: Amount) { - self.owners - .entry(owner) - .or_default() - .allowances - .insert(operator, amount); - } - - fn internal_approve( - &mut self, - owner: Owner, - operator: Operator, - amount: Amount, - ) -> Result { - if operator.is_zero() { - return Err(FTError::ZeroRecipientAddress); - } - - self.unchecked_internal_approve(owner, operator, amount); - - Ok(FTApproval { - owner, - operator, - amount, - }) - } - - /// Returns a balance of `owner`'s tokens. - pub fn balance_of(&self, owner: Owner) -> Amount { - self.owners - .get(&owner) - .map(|owner_data| owner_data.balance) - .unwrap_or_default() - } - - /// Returns an allowance of `owner`'s tokens for `operator`. - pub fn allowance(&self, owner: Owner, operator: Operator) -> Amount { - self.internal_allowance(owner, operator) - .copied() - .unwrap_or_default() - } - - fn internal_allowance(&self, owner: Owner, operator: Operator) -> Option<&Amount> { - self.owners - .get(&owner) - .and_then(|owner_data| owner_data.allowances.get(&operator)) - } - - /// Transfers `amount` of tokens from [`msg::source()`] to `to`. - /// - /// # Errors - /// - [`FTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`FTError::InsufficientAmount`] if [`msg::source()`] doesn't have - /// given `amount` of tokens. - pub fn transfer(&mut self, to: ActorId, amount: Amount) -> Result { - self.internal_transfer(msg::source(), to, amount) - } - - fn internal_transfer( - &mut self, - from: Owner, - to: ActorId, - amount: Amount, - ) -> Result { - if to.is_zero() { - return Err(FTError::ZeroRecipientAddress); - } - - self.burn_balance(from, amount)?; - self.owners - .entry(to) - .and_modify(|owner| owner.balance += amount) - .or_insert(OwnerData { - balance: amount, - ..Default::default() - }); - - Ok(FTTransfer { from, to, amount }) - } - - fn burn_balance(&mut self, from: Owner, amount: Amount) -> Result<(), FTError> { - self.owners - .get_mut(&from) - .and_then(|owner| { - owner - .balance - .checked_sub(amount) - .map(|total_amount| owner.balance = total_amount) - }) - .ok_or(FTError::InsufficientAmount) - } - - /// Transfers `amount` of tokens from `from` to `to`. - /// - /// Requires an allowance for [`msg::source()`] to transfer `amount` or a - /// larger amount of `from`'s tokens. Note that this function will **not** - /// work as an equivalent of [`FTState::transfer()`] if [`msg::source()`] - /// equals `from`. - /// - /// # Errors - /// - [`FTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`FTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`FTError::InsufficientAllowance`] if [`msg::source()`] doesn't have - /// an allowance for given `amount` of tokens. - /// - [`FTError::InsufficientAmount`] if `from` doesn't have given `amount` - /// of tokens. - pub fn transfer_from( - &mut self, - from: Owner, - to: ActorId, - amount: Amount, - ) -> Result { - if from.is_zero() { - return Err(FTError::ZeroSenderAddress); - } - - let msg_source = msg::source(); - let approved_amount = self - .internal_allowance(from, msg_source) - .and_then(|allowance| allowance.checked_sub(amount)) - .ok_or(FTError::InsufficientAllowance)?; - - self.unchecked_internal_approve(from, msg_source, approved_amount); - self.internal_transfer(from, to, amount) - } - - fn change_allowance( - &mut self, - msg_source: ActorId, - operator: Operator, - delta_amount: Amount, - checked_op: impl FnOnce(Amount, Amount) -> Option, - ) -> Result { - self.internal_allowance(msg_source, operator) - .and_then(|allowance| checked_op(*allowance, delta_amount)) - .ok_or(FTError::InsufficientAllowance) - } - - /// Increases by `delta_amount` an allowance for `operator` to spend - /// [`msg::source()`]'s tokens. - /// - /// # Errors - /// - [`FTError::InsufficientAllowance`] if given `delta_amount` with the - /// current allowance overflows the [`Amount`] type. - pub fn increase_allowance( - &mut self, - operator: Operator, - delta_amount: Amount, - ) -> Result { - let msg_source = msg::source(); - let amount = - self.change_allowance(msg_source, operator, delta_amount, Amount::checked_add)?; - - self.internal_approve(msg_source, operator, amount) - } - - /// Decreases by `delta_amount` an allowance for `operator` to spend - /// [`msg::source()`]'s tokens. - /// - /// # Errors - /// - [`FTError::InsufficientAllowance`] if `operator` doesn't have given - /// `delta_amount` of an allowance. - pub fn decrease_allowance( - &mut self, - operator: Operator, - delta_amount: Amount, - ) -> Result { - let msg_source = msg::source(); - let amount = - self.change_allowance(msg_source, operator, delta_amount, Amount::checked_sub)?; - - self.internal_approve(msg_source, operator, amount) - } - - /// Mints to `to` `amount` of tokens. - /// - /// # Errors - /// - [`FTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`FTError::InsufficientAmount`] if given `amount` with the current - /// total token supply overflows the [`Amount`] type. - pub fn mint(&mut self, to: ActorId, amount: Amount) -> Result { - if to.is_zero() { - return Err(FTError::ZeroRecipientAddress); - } - - if let Some(total_supply) = self.total_supply.checked_add(amount) { - self.total_supply = total_supply; - } else { - return Err(FTError::InsufficientAmount); - } - - self.owners.entry(to).or_default().balance += amount; - - Ok(FTTransfer { - from: ActorId::zero(), - to, - amount, - }) - } - - /// Burns from `from` `amount` of tokens. - /// - /// # Errors - /// - [`FTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`FTError::InsufficientAmount`] if `from` doesn't have given `amount` - /// of tokens. - pub fn burn(&mut self, from: Owner, amount: Amount) -> Result { - if from.is_zero() { - return Err(FTError::ZeroSenderAddress); - } - - self.burn_balance(from, amount)?; - self.total_supply -= amount; - - Ok(FTTransfer { - from, - to: ActorId::zero(), - amount, - }) - } -} - -/// Fungible token error variants. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTError { - /// Token owner doesn't have a sufficient amount of tokens. Or there was the - /// [`Amount`] overflow during token minting. - InsufficientAmount, - /// [`msg::source()`] or operator doesn't have a sufficient allowance of - /// tokens. Or there was the [`Amount`] overflow during allowance - /// increasing. - InsufficientAllowance, - /// A recipient/operator address is [`ActorId::zero()`]. - ZeroRecipientAddress, - /// A sender address is [`ActorId::zero()`]. - ZeroSenderAddress, -} - -/// The fungible token transfer event. -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTTransfer { - /// A sender address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token minting. - pub from: ActorId, - /// A recipient address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token burning. - pub to: ActorId, - pub amount: Amount, -} - -/// The fungible token approval event. -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTApproval { - pub owner: Owner, - pub operator: Operator, - /// An amount of a total token allowance. - pub amount: Amount, -} - -#[cfg(test)] -mod tests { - use super::*; - - const AMOUNT: u64 = 12345; - const REMAINDER: u64 = AMOUNT / 2; - - #[test] - fn mint() { - let mut state = FTState::new(); - - assert_eq!( - state.mint(1.into(), AMOUNT.into()), - Ok(FTTransfer { - from: ActorId::zero(), - to: 1.into(), - amount: AMOUNT.into() - }) - ); - assert_eq!(state.balance_of(1.into()), AMOUNT.into()); - assert_eq!(state.total_supply(), AMOUNT.into()); - } - - #[test] - fn mint_failures() { - let mut state = FTState::new(); - - assert_eq!( - state.mint(ActorId::zero(), Amount::default()), - Err(FTError::ZeroRecipientAddress) - ); - - state.mint(1.into(), 1u64.into()).unwrap(); - - assert_eq!( - state.mint(1.into(), Amount::MAX), - Err(FTError::InsufficientAmount) - ); - } - - #[test] - fn burn() { - let mut state = FTState::new(); - - state.mint(1.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.burn(1.into(), (AMOUNT - REMAINDER).into()), - Ok(FTTransfer { - from: 1.into(), - to: ActorId::zero(), - amount: (AMOUNT - REMAINDER).into() - }) - ); - assert_eq!(state.balance_of(1.into()), REMAINDER.into()); - assert_eq!(state.total_supply(), REMAINDER.into()); - } - - #[test] - fn burn_failures() { - let mut state = FTState::new(); - - assert_eq!( - state.burn(ActorId::zero(), Amount::default()), - Err(FTError::ZeroSenderAddress) - ); - - state.mint(1.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.burn(1.into(), (AMOUNT + 1).into()), - Err(FTError::InsufficientAmount) - ); - } - - #[test] - fn transfer() { - let mut state = FTState::new(); - - state.mint(1.into(), AMOUNT.into()).unwrap(); - msg::set_source(1.into()); - - assert_eq!( - state.transfer(2.into(), REMAINDER.into()), - Ok(FTTransfer { - from: 1.into(), - to: 2.into(), - amount: REMAINDER.into() - }) - ); - assert_eq!(state.balance_of(1.into()), (AMOUNT - REMAINDER).into()); - assert_eq!(state.balance_of(2.into()), REMAINDER.into()); - } - - #[test] - fn transfer_failures() { - let mut state = FTState::new(); - - msg::set_source(1.into()); - - assert_eq!( - state.transfer(ActorId::zero(), Amount::default()), - Err(FTError::ZeroRecipientAddress) - ); - - state.mint(1.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.transfer(2.into(), (AMOUNT + 1).into()), - Err(FTError::InsufficientAmount) - ); - } - - #[test] - fn approve() { - let mut state = FTState::new(); - - msg::set_source(1.into()); - - assert_eq!( - state.approve(2.into(), AMOUNT.into()), - Ok(FTApproval { - owner: 1.into(), - operator: 2.into(), - amount: AMOUNT.into() - }) - ); - assert_eq!(state.allowance(1.into(), 2.into()), AMOUNT.into()); - - assert_eq!( - state.increase_allowance(2.into(), AMOUNT.into()), - Ok(FTApproval { - owner: 1.into(), - operator: 2.into(), - amount: (AMOUNT * 2).into() - }) - ); - assert_eq!(state.allowance(1.into(), 2.into()), (AMOUNT * 2).into()); - - assert_eq!( - state.decrease_allowance(2.into(), REMAINDER.into()), - Ok(FTApproval { - owner: 1.into(), - operator: 2.into(), - amount: ((AMOUNT * 2) - REMAINDER).into() - }) - ); - assert_eq!( - state.allowance(1.into(), 2.into()), - ((AMOUNT * 2) - REMAINDER).into() - ); - } - - #[test] - fn approve_failures() { - let mut state = FTState::new(); - - assert_eq!( - state.approve(ActorId::zero(), Amount::default()), - Err(FTError::ZeroRecipientAddress) - ); - - msg::set_source(1.into()); - state.approve(2.into(), 1u64.into()).unwrap(); - - assert_eq!( - state.increase_allowance(2.into(), Amount::MAX), - Err(FTError::InsufficientAllowance) - ); - assert_eq!( - state.decrease_allowance(2.into(), 2u64.into()), - Err(FTError::InsufficientAllowance) - ); - } - - #[test] - fn transfer_from() { - let mut state = FTState::new(); - - state.mint(1.into(), AMOUNT.into()).unwrap(); - msg::set_source(1.into()); - state.approve(3.into(), AMOUNT.into()).unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), REMAINDER.into()), - Ok(FTTransfer { - from: 1.into(), - to: 2.into(), - amount: REMAINDER.into() - }) - ); - assert_eq!( - state.allowance(1.into(), 3.into()), - (AMOUNT - REMAINDER).into() - ); - } - - #[test] - fn transfer_from_failures() { - let mut state = FTState::new(); - - assert_eq!( - state.transfer_from(ActorId::zero(), 2.into(), Amount::default()), - Err(FTError::ZeroSenderAddress) - ); - - msg::set_source(1.into()); - state.approve(2.into(), AMOUNT.into()).unwrap(); - msg::set_source(2.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), (AMOUNT + 1).into()), - Err(FTError::InsufficientAllowance) - ); - } -} diff --git a/contracts/gear-lib/src/tokens/fungible/encodable.rs b/contracts/gear-lib/src/tokens/fungible/encodable.rs deleted file mode 100644 index 4113621de..000000000 --- a/contracts/gear-lib/src/tokens/fungible/encodable.rs +++ /dev/null @@ -1,114 +0,0 @@ -//! The encodable fungible token state. -//! -//! Due to limitations of the SCALE codec, it's impossible to encode the -//! [`HashMap`](gstd::collections::HashMap) & [`HashSet`](gstd::collections::HashSet) types, and therefore -//! [`super::FTState`] too, so as a workaround there's the encodable [`FTState`] -//! type that use [`Vec`] instead of unencodable types and can be constructed -//! from [`super::FTState`]. - -use super::{Amount, FTState as SuperFTState, Operator, Owner}; -use gstd::prelude::*; - -/// The encodable fungible token state. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTState { - pub total_supply: Amount, - pub owners: Vec<(Owner, OwnerData)>, -} - -impl FTState { - /// Returns a balance of `owner`'s tokens. - pub fn balance_of(&self, owner: Owner) -> Amount { - self.owners - .iter() - .find_map(|(stored_owner, owner_data)| { - (*stored_owner == owner).then_some(owner_data.balance) - }) - .unwrap_or_default() - } - - /// Returns an allowance of `owner`'s tokens for `operator`. - pub fn allowance(&self, owner: Owner, operator: Operator) -> Amount { - self.owners - .iter() - .find_map(|(stored_owner, owner_data)| { - (*stored_owner == owner).then(|| { - owner_data - .allowances - .iter() - .find_map(|(stored_operator, allowance)| { - (*stored_operator == operator).then_some(*allowance) - }) - .unwrap_or_default() - }) - }) - .unwrap_or_default() - } -} - -impl From for FTState { - fn from(state: SuperFTState) -> Self { - let owners = state - .owners - .into_iter() - .map(|(owner, owner_data)| { - ( - owner, - OwnerData { - balance: owner_data.balance, - allowances: owner_data.allowances.into_iter().collect(), - }, - ) - }) - .collect(); - - Self { - total_supply: state.total_supply, - owners, - } - } -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct OwnerData { - pub balance: Amount, - pub allowances: Vec<(Operator, Amount)>, -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::tokens::test_helper::msg; - use gstd::ActorId; - - #[test] - fn balance_of() { - let mut state = SuperFTState::new(); - - state.mint(1.into(), 1u64.into()).unwrap(); - - let encoded_state = FTState::from(state); - - assert_eq!(encoded_state.balance_of(2.into()), 0u64.into()); - assert_eq!(encoded_state.balance_of(ActorId::zero()), 0u64.into()); - assert_eq!(encoded_state.balance_of(1.into()), 1u64.into()); - } - - #[test] - fn allowance() { - let mut state = SuperFTState::new(); - - msg::set_source(1.into()); - state.approve(2.into(), 100u64.into()).unwrap(); - - let encoded_state = FTState::from(state); - - assert_eq!(encoded_state.allowance(1.into(), 3.into()), 0u64.into()); - assert_eq!(encoded_state.allowance(2.into(), 1.into()), 0u64.into()); - assert_eq!(encoded_state.allowance(1.into(), 2.into()), 100u64.into()); - } -} diff --git a/contracts/gear-lib/src/tokens/fungible/extensions.rs b/contracts/gear-lib/src/tokens/fungible/extensions.rs deleted file mode 100644 index 5b98dffe1..000000000 --- a/contracts/gear-lib/src/tokens/fungible/extensions.rs +++ /dev/null @@ -1,13 +0,0 @@ -//! Fungible token implementation extensions. - -use gstd::prelude::*; - -/// Fungible token metadata. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTStateMeta { - pub name: Option, - pub symbol: Option, - pub decimals: u8, -} diff --git a/contracts/gear-lib/src/tokens/multi.rs b/contracts/gear-lib/src/tokens/multi.rs deleted file mode 100644 index c64b717cc..000000000 --- a/contracts/gear-lib/src/tokens/multi.rs +++ /dev/null @@ -1,1263 +0,0 @@ -//! The multi token. - -use super::types::{Amount, Id, Operator, Owner}; -use gstd::{ - cell::Cell, - collections::{HashMap, HashSet}, - prelude::*, - ActorId, -}; - -#[cfg(test)] -use super::test_helper::msg; -#[cfg(not(test))] -use gstd::msg; - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct TokenOwnerData { - allowances: HashMap>, - balance: Cell, -} - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct GeneralOwnerData { - balance: Amount, - operators: HashSet, -} - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct Token { - total_supply: Amount, - owners: HashMap, - attributes: HashMap, Vec>, -} - -/// The multi token implementation. -#[derive(Default, Debug, PartialEq, Eq, Clone)] -pub struct MTState { - tokens: HashMap, - owners: HashMap, - total_supply: Amount, -} - -impl MTState { - pub fn new() -> Self { - Self::default() - } - - /// Gets the current total token supply. - /// - /// - If `id` is [`Some`], returns the supply of the tokens with this `id`. - /// - If `id` is [`None`], returns the supply of all tokens. - pub fn total_supply(&self, id: Option<&Id>) -> Amount { - id.map_or(self.total_supply, |unwrapped_id| { - self.tokens - .get(unwrapped_id) - .map(|token| token.total_supply) - .unwrap_or_default() - }) - } - - /// Returns a balance of `owner`'s tokens. - /// - /// - If `id` is [`Some`], returns the balance of the tokens with this `id`. - /// - If `id` is [`None`], returns the balance of all tokens. - pub fn balance_of(&self, owner: Owner, id: Option<&Id>) -> Amount { - id.map_or_else( - || { - self.owners - .get(&owner) - .map(|general_owner_data| general_owner_data.balance) - }, - |unwrapped_id| { - self.tokens.get(unwrapped_id).and_then(|token| { - token - .owners - .get(&owner) - .map(|token_owner_data| token_owner_data.balance.get()) - }) - }, - ) - .unwrap_or_default() - } - - /// Mints to `to` `amount` of the tokens with given `id`. - /// - /// # Errors - /// - [`MTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`MTError::InsufficientAmount`] if given `amount` with the total - /// supply of all the tokens overflows the [`Amount`] type. - pub fn mint(&mut self, to: ActorId, id: Id, amount: Amount) -> Result { - self.mint_batch(to, vec![(id.clone(), amount)])?; - - Ok(MTTransfer { - from: ActorId::zero(), - to, - id, - amount, - }) - } - - fn mint_batch( - &mut self, - to: ActorId, - ids_for_amount: Vec<(Id, Amount)>, - ) -> Result { - if to.is_zero() { - return Err(MTError::ZeroRecipientAddress); - } - - let (total_supply, total_amount) = ids_for_amount - .iter() - .try_fold(Amount::default(), |total_amount, (_, amount)| { - total_amount.checked_add(*amount) - }) - .and_then(|total_amount| { - total_amount - .checked_add(self.total_supply) - .map(|total_supply| (total_supply, total_amount)) - }) - .ok_or(MTError::InsufficientAmount)?; - - self.total_supply = total_supply; - self.owners.entry(to).or_default().balance += total_amount; - - for (id, amount) in &ids_for_amount { - let token = self.tokens.entry(id.clone()).or_default(); - - token.total_supply += *amount; - *token.owners.entry(to).or_default().balance.get_mut() += *amount; - } - - Ok(MTTransferBatch { - from: ActorId::zero(), - to, - ids_for_amount, - }) - } - - /// Burns from `from` `amount` of the tokens with given `id`. - /// - /// # Errors - /// - [`MTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`MTError::InsufficientAmount`] if `from` doesn't have given `amount` - /// of the tokens. - pub fn burn(&mut self, from: Owner, id: Id, amount: Amount) -> Result { - self.burn_batch(from, vec![(id.clone(), amount)])?; - - Ok(MTTransfer { - from, - to: ActorId::zero(), - id, - amount, - }) - } - - fn burn_batch( - &mut self, - from: Owner, - ids_for_amount: Vec<(Id, Amount)>, - ) -> Result { - if from.is_zero() { - return Err(MTError::ZeroSenderAddress); - } - - let mut balance_entries_and_amounts = Vec::with_capacity(ids_for_amount.len()); - - for (id, amount) in &ids_for_amount { - let balance = &self - .tokens - .get(id) - .and_then(|token| token.owners.get(&from)) - .ok_or(MTError::InsufficientAmount)? - .balance; - - balance_entries_and_amounts.push((balance, amount)); - } - - let total_amount = Self::burn_balances( - &mut self.owners, - from, - balance_entries_and_amounts.into_iter(), - )?; - - for (id, amount) in &ids_for_amount { - self.tokens.get_mut(id).unwrap().total_supply -= *amount; - } - - self.total_supply -= total_amount; - - Ok(MTTransferBatch { - from, - to: ActorId::zero(), - ids_for_amount, - }) - } - - fn burn_balances<'slf>( - owners: &mut HashMap, - from: Owner, - balance_entries_and_delta_amounts: impl Iterator, &'slf Amount)>, - ) -> Result { - let size_hint = balance_entries_and_delta_amounts.size_hint(); - let mut total_amount = Amount::default(); - let mut balance_entries_and_amounts = - Vec::with_capacity(size_hint.1.unwrap_or(size_hint.0)); - - for (balance_entry, amount) in balance_entries_and_delta_amounts { - let new_amount = balance_entry - .get() - .checked_sub(*amount) - .ok_or(MTError::InsufficientAmount)?; - - balance_entries_and_amounts.push((balance_entry, new_amount)); - total_amount += *amount; - } - - for (balance_entry, new_amount) in balance_entries_and_amounts { - balance_entry.set(new_amount); - } - - owners.get_mut(&from).unwrap().balance -= total_amount; - - Ok(total_amount) - } - - /// Allows or disallows `operator` to transfer all [`msg::source()`]'s - /// tokens or only the ones with given `id`. - /// - /// # Errors - /// - [`MTError::ZeroRecipientAddress`] if `operator` is - /// [`ActorId::zero()`]. - /// - [`MTError::InsufficientAmount`] if [`msg::source()`] doesn't have any - /// tokens or there are no tokens with given `id`. - pub fn approve( - &mut self, - operator: Operator, - approve: ApproveType, - ) -> Result { - if operator.is_zero() { - return Err(MTError::ZeroRecipientAddress); - } - - let msg_source = msg::source(); - - let does_entry_not_exist = match approve { - ApproveType::Operator(approve_bool) => self - .owners - .get_mut(&msg_source) - .map(|owner| { - if approve_bool { - owner.operators.insert(operator) - } else { - owner.operators.remove(&operator) - } - }) - .is_none(), - ApproveType::Allowance((ref id, amount)) => self - .tokens - .get_mut(id) - .and_then(|token| token.owners.get_mut(&msg_source)) - .map(|owner| owner.allowances.insert(operator, amount.into())) - .is_none(), - }; - - if does_entry_not_exist { - Err(MTError::InsufficientAmount) - } else { - Ok(MTApproval { - owner: msg_source, - operator, - approved: approve, - }) - } - } - - /// Returns an allowance of `owner`'s tokens for `operator`. - /// - /// - If `id` is [`Some`], returns an approved amount of the tokens with - /// this `id`. - /// - If `id` is [`None`], returns [`Amount::MAX`] if `operator` is approved - /// for all `owner`s tokens, otherwise returns 0. - pub fn allowance(&self, owner: Owner, operator: Operator, id: Option<&Id>) -> Amount { - id.map_or_else( - || { - self.owners.get(&owner).and_then(|general_owner_data| { - general_owner_data - .operators - .contains(&operator) - .then_some(Amount::MAX) - }) - }, - |unwrapped_id| { - self.tokens - .get(unwrapped_id) - .and_then(|token| token.owners.get(&owner)) - .and_then(|token_owner_data| { - token_owner_data.allowances.get(&operator).map(Cell::get) - }) - }, - ) - .unwrap_or_default() - } - - /// Transfers `amount` of the tokens with given `id` from [`msg::source()`] - /// to `to`. - /// - /// # Errors - /// - [`MTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`MTError::InsufficientAmount`] if [`msg::source()`] doesn't have - /// given `amount` of the tokens. - pub fn transfer(&mut self, to: ActorId, id: Id, amount: Amount) -> Result { - self.transfer_batch(to, vec![(id.clone(), amount)])?; - - Ok(MTTransfer { - from: msg::source(), - to, - id, - amount, - }) - } - - /// Transfers multiple amounts of tokens with given IDs from - /// [`msg::source()`] to `to`. - /// - /// # Errors - /// - [`MTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`MTError::InsufficientAmount`] if [`msg::source()`] doesn't have - /// given amount of one of given tokens. - pub fn transfer_batch( - &mut self, - to: ActorId, - ids_for_amount: Vec<(Id, Amount)>, - ) -> Result { - if to.is_zero() { - return Err(MTError::ZeroRecipientAddress); - } - - let msg_source = msg::source(); - - Self::inner_transfer_batch( - &mut self.owners, - msg_source, - to, - Self::balance_entries_and_amounts(&mut self.tokens, msg_source, to, &ids_for_amount)?, - )?; - - Ok(MTTransferBatch { - from: msg_source, - to, - ids_for_amount, - }) - } - - fn balance_entries_and_amounts<'slf>( - tokens: &'slf mut HashMap, - from: Owner, - to: ActorId, - ids_for_amount: &'slf [(Id, Amount)], - ) -> Result>, MTError> { - for (id, _) in ids_for_amount { - tokens - .get_mut(id) - .and_then(|token| { - token.owners.entry(to).or_default(); - token.owners.get(&from) - }) - .ok_or(MTError::InsufficientAmount)?; - } - - let mut bepams = Vec::with_capacity(ids_for_amount.len()); - - for (id, amount) in ids_for_amount { - let owners = &tokens.get(id).unwrap().owners; - - bepams.push( - ( - &owners.get(&from).unwrap().balance, - &owners.get(&to).unwrap().balance, - amount, - ) - .into(), - ); - } - - Ok(bepams) - } - - /// Transfers `amount` of the tokens with given `id` from `from` to `to`. - /// - /// Requires [`msg::source()`] to have an allowance to transfer `amount` or - /// a larger amount of the `from`'s tokens with given `id`, or to be an - /// operator of all `from`'s tokens. Note that this function will **not** - /// work as an equivalent of [`MTState::transfer()`] if [`msg::source()`] - /// equals `from`. - /// - /// If [`msg::source`] is an operator of all `from`'s tokens, this function - /// will **not** decrease [`msg::source()`]'s allowance for the tokens with - /// given `id`. - /// - /// # Errors - /// - [`MTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`MTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`MTError::NotApproved`] if [`msg::source()`] doesn't have any - /// allowance for given `amount` of the tokens. - /// - [`MTError::InsufficientAmount`] if `from` doesn't have given `amount` - /// of the tokens. - pub fn transfer_from( - &mut self, - from: Owner, - to: ActorId, - id: Id, - amount: Amount, - ) -> Result { - self.transfer_from_batch(from, to, vec![(id.clone(), amount)])?; - - Ok(MTTransfer { - from, - to, - id, - amount, - }) - } - - /// Transfers multiple amounts of tokens with given IDs from `from` to `to`. - /// - /// Requires [`msg::source()`] to have an allowance to transfer all given - /// amounts or a larger ones of `from`'s tokens with given IDs, or to be an - /// operator of all `from`'s tokens. Note that this function will **not** - /// work as an equivalent of [`MTState::transfer_batch()`] if - /// [`msg::source()`] equals `from`. - /// - /// If [`msg::source`] is an operator of all `from`'s tokens, this function - /// will **not** decrease [`msg::source()`]'s allowance for tokens with - /// given IDs. - /// - /// # Errors - /// - [`MTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`MTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`MTError::NotApproved`] if [`msg::source()`] doesn't have any - /// allowance for given amounts of tokens. - /// - [`MTError::InsufficientAmount`] if `from` doesn't have given amount of - /// one of given tokens. - pub fn transfer_from_batch( - &mut self, - from: Owner, - to: ActorId, - ids_for_amount: Vec<(Id, Amount)>, - ) -> Result { - if from.is_zero() { - return Err(MTError::ZeroSenderAddress); - } - - if to.is_zero() { - return Err(MTError::ZeroRecipientAddress); - } - - let Some(owner) = self.owners.get(&from) else { - return Err(MTError::InsufficientAmount); - }; - - let msg_source = msg::source(); - - let (balance_entries_and_amounts, allowances_and_amounts) = - if owner.operators.contains(&msg_source) { - ( - Self::balance_entries_and_amounts(&mut self.tokens, from, to, &ids_for_amount)?, - vec![], - ) - } else { - for (id, _) in &ids_for_amount { - self.tokens - .get_mut(id) - .and_then(|token| { - token.owners.entry(to).or_default(); - token.owners.get(&from) - }) - .ok_or(MTError::InsufficientAmount)?; - } - - let mut bepams = Vec::with_capacity(ids_for_amount.len()); - let mut allowances_and_amounts = Vec::with_capacity(ids_for_amount.len()); - - for (id, amount) in &ids_for_amount { - let owners = &self.tokens.get(id).unwrap().owners; - let from_owner = owners.get(&from).unwrap(); - let allowance_and_amount = from_owner - .allowances - .get(&msg_source) - .and_then(|allowance_entry| { - allowance_entry - .get() - .checked_sub(*amount) - .map(|new_allowance| (allowance_entry, new_allowance)) - }) - .ok_or(MTError::NotApproved)?; - let to_balance_entry = &owners.get(&to).unwrap().balance; - - allowances_and_amounts.push(allowance_and_amount); - bepams.push((&from_owner.balance, to_balance_entry, amount).into()); - } - - (bepams, allowances_and_amounts) - }; - - Self::inner_transfer_batch(&mut self.owners, from, to, balance_entries_and_amounts)?; - - for (allowance_entry, new_allowance) in allowances_and_amounts { - allowance_entry.set(new_allowance); - } - - Ok(MTTransferBatch { - from, - to, - ids_for_amount, - }) - } - - fn inner_transfer_batch( - owners: &mut HashMap, - from: Owner, - to: ActorId, - bepams: Vec>, - ) -> Result<(), MTError> { - let total_amount = Self::burn_balances( - owners, - from, - bepams - .iter() - .map(|bepam| (bepam.from_balance_entry, bepam.amount)), - )?; - - owners.entry(to).or_default().balance += total_amount; - - for bepam in bepams { - bepam - .to_balance_entry - .set(bepam.to_balance_entry.get() + bepam.amount); - } - - Ok(()) - } - - /// Gets an attribute with given `key` for the tokens with given `id`. - /// - /// Returns [`None`] if an attribute with given `key` doesn't exist. - /// - /// To set an attribute, use [`MTState::set_attribute()`]. - /// - /// # Errors - /// - [`MTError::InsufficientAmount`] if there are no tokens with given - /// `id`. - pub fn get_attribute(&self, id: &Id, key: &Vec) -> Result>, MTError> { - self.tokens - .get(id) - .ok_or(MTError::InsufficientAmount) - .map(|token| token.attributes.get(key)) - } - - /// Sets an attribute with given `key` & `value` for the tokens with given - /// `id`. - /// - /// Returns [`None`] if an attribute with given `key` doesn't exist, - /// otherwise replaces the old value with given one and returns [`Some`] - /// with the old one. - /// - /// Note that it's impossible to remove a set attribute, only overwrite it. - /// - /// To get an attribute, use [`MTState::get_attribute()`]. - /// - /// # Errors - /// - [`MTError::InsufficientAmount`] if there are no tokens with given - /// `id`. - pub fn set_attribute( - &mut self, - id: &Id, - key: Vec, - value: Vec, - ) -> Result>, MTError> { - self.tokens - .get_mut(id) - .ok_or(MTError::InsufficientAmount) - .map(|token| token.attributes.insert(key, value)) - } -} - -struct BalanceEntryPairAndAmount<'state> { - from_balance_entry: &'state Cell, - to_balance_entry: &'state Cell, - amount: &'state Amount, -} - -impl<'state> From<(&'state Cell, &'state Cell, &'state Amount)> - for BalanceEntryPairAndAmount<'state> -{ - fn from(value: (&'state Cell, &'state Cell, &'state Amount)) -> Self { - Self { - from_balance_entry: value.0, - to_balance_entry: value.1, - amount: value.2, - } - } -} - -/// The approval types. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ApproveType { - /// Approval for all tokens. - Operator(bool), - /// Approval for specific amount of the tokens with specific ID. - Allowance((Id, Amount)), -} - -/// The multi token transfer event. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct MTTransfer { - /// A sender address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token minting. - pub from: ActorId, - /// A recipient address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token burning. - pub to: ActorId, - /// A tokens ID. - pub id: Id, - pub amount: Amount, -} - -/// The multi token batch transfer event. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct MTTransferBatch { - /// A sender address. - pub from: ActorId, - /// A recipient address. - pub to: ActorId, - /// Pairs of a tokens ID & token amount. - pub ids_for_amount: Vec<(Id, Amount)>, -} - -/// The multi token approval event. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct MTApproval { - pub owner: ActorId, - pub operator: Operator, - pub approved: ApproveType, -} - -/// Multi token error variants. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MTError { - /// [`msg::source()`] doesn't have allowance to transfer tokens with given - /// IDs. - NotApproved, - /// A recipient/operator address is [`ActorId::zero()`]. - ZeroRecipientAddress, - /// A sender address is [`ActorId::zero()`]. - ZeroSenderAddress, - /// Token owner doesn't have a sufficient amount of tokens. Or there was the - /// [`Amount`] overflow during token minting/burning. - InsufficientAmount, -} - -#[cfg(test)] -mod tests { - use super::*; - - const AMOUNT: u64 = 12345; - const REMAINDER: u64 = AMOUNT / 2; - - #[test] - fn meta() { - let key: Vec<_> = "Name".into(); - let data: Vec<_> = "Nuclear Fish Tank".into(); - let mut state = MTState::new(); - - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), data.clone()), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 0u8.into(), 0u64.into()).unwrap(); - - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), "NFT".into()), - Ok(None) - ); - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), data.clone()), - Ok(Some("NFT".into())) - ); - assert_eq!(state.get_attribute(&0u8.into(), &key), Ok(Some(&data))); - assert_eq!( - state.get_attribute(&0u8.into(), &"Nonexistent attribute".into()), - Ok(None) - ); - assert_eq!( - state.get_attribute(&1u8.into(), &key), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn mint() { - let mut state = MTState::new(); - - assert_eq!( - state.mint(1.into(), 0u8.into(), AMOUNT.into()), - Ok(MTTransfer { - from: ActorId::zero(), - to: 1.into(), - id: 0u8.into(), - amount: AMOUNT.into() - }) - ); - assert_eq!(state.balance_of(1.into(), Some(&0u8.into())), AMOUNT.into()); - assert_eq!(state.balance_of(1.into(), None), AMOUNT.into()); - assert_eq!(state.total_supply(Some(&0u8.into())), AMOUNT.into()); - assert_eq!(state.total_supply(None), AMOUNT.into()); - } - - #[test] - fn mint_failures() { - let mut state = MTState::new(); - - assert_eq!( - state.mint(ActorId::zero(), 0u8.into(), Amount::default()), - Err(MTError::ZeroRecipientAddress) - ); - - state.mint(1.into(), 0u8.into(), 1u64.into()).unwrap(); - - assert_eq!( - state.mint(1.into(), 0u8.into(), Amount::MAX), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn burn() { - let mut state = MTState::new(); - - state.mint(1.into(), 0u8.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.burn(1.into(), 0u8.into(), (AMOUNT - REMAINDER).into()), - Ok(MTTransfer { - from: 1.into(), - to: ActorId::zero(), - id: 0u8.into(), - amount: (AMOUNT - REMAINDER).into() - }) - ); - assert_eq!( - state.balance_of(1.into(), Some(&0u8.into())), - REMAINDER.into() - ); - assert_eq!(state.balance_of(1.into(), None), REMAINDER.into()); - assert_eq!(state.total_supply(Some(&0u8.into())), REMAINDER.into()); - assert_eq!(state.total_supply(None), REMAINDER.into()); - } - - #[test] - fn burn_failures() { - let mut state = MTState::new(); - - assert_eq!( - state.burn(ActorId::zero(), 0u8.into(), Amount::default()), - Err(MTError::ZeroSenderAddress) - ); - - state.mint(1.into(), 0u8.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.burn(1.into(), 0u8.into(), (AMOUNT + 1).into()), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn transfer() { - let mut state = MTState::new(); - - state.mint(1.into(), 0u8.into(), AMOUNT.into()).unwrap(); - msg::set_source(1.into()); - - assert_eq!( - state.transfer(2.into(), 0u8.into(), REMAINDER.into()), - Ok(MTTransfer { - from: 1.into(), - to: 2.into(), - id: 0u8.into(), - amount: REMAINDER.into() - }) - ); - assert_eq!( - state.balance_of(1.into(), Some(&0u8.into())), - (AMOUNT - REMAINDER).into() - ); - assert_eq!( - state.balance_of(1.into(), None), - (AMOUNT - REMAINDER).into() - ); - assert_eq!( - state.balance_of(2.into(), Some(&0u8.into())), - REMAINDER.into() - ); - assert_eq!(state.balance_of(2.into(), None), REMAINDER.into()); - } - - #[test] - fn transfer_failures() { - let mut state = MTState::new(); - - msg::set_source(1.into()); - - assert_eq!( - state.transfer(ActorId::zero(), 0u8.into(), Amount::default()), - Err(MTError::ZeroRecipientAddress) - ); - assert_eq!( - state.transfer(2.into(), 0u8.into(), Amount::default()), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 0u8.into(), AMOUNT.into()).unwrap(); - - assert_eq!( - state.transfer(2.into(), 0u8.into(), (AMOUNT + 1).into()), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn approve() { - let mut state = MTState::new(); - - state.mint(1.into(), 0u8.into(), 1u8.into()).unwrap(); - - assert_eq!( - state.allowance(1.into(), 2.into(), Some(&0u8.into())), - 0u8.into() - ); - assert_eq!(state.allowance(1.into(), 2.into(), None), 0u8.into()); - - let mut approved = ApproveType::Allowance((0u8.into(), AMOUNT.into())); - - msg::set_source(1.into()); - assert_eq!( - state.approve(2.into(), approved.clone()), - Ok(MTApproval { - owner: 1.into(), - operator: 2.into(), - approved - }) - ); - assert_eq!( - state.allowance(1.into(), 2.into(), Some(&0u8.into())), - AMOUNT.into() - ); - assert_eq!(state.allowance(1.into(), 2.into(), None), 0u8.into()); - - approved = ApproveType::Operator(true); - - assert_eq!( - state.approve(2.into(), approved.clone()), - Ok(MTApproval { - owner: 1.into(), - operator: 2.into(), - approved - }) - ); - assert_eq!( - state.allowance(1.into(), 2.into(), Some(&0u8.into())), - AMOUNT.into() - ); - assert_eq!(state.allowance(1.into(), 2.into(), None), Amount::MAX); - - approved = ApproveType::Allowance((0u8.into(), REMAINDER.into())); - - assert_eq!( - state.approve(2.into(), approved.clone()), - Ok(MTApproval { - owner: 1.into(), - operator: 2.into(), - approved - }) - ); - assert_eq!( - state.allowance(1.into(), 2.into(), Some(&0u8.into())), - REMAINDER.into() - ); - assert_eq!(state.allowance(1.into(), 2.into(), None), Amount::MAX); - } - - #[test] - fn approve_failures() { - let mut state = MTState::new(); - - assert_eq!( - state.approve(ActorId::zero(), ApproveType::Operator(true)), - Err(MTError::ZeroRecipientAddress) - ); - assert_eq!( - state.approve(1.into(), ApproveType::Operator(true)), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn transfer_from() { - let mut state = MTState::new(); - - state - .mint(1.into(), 0u8.into(), (AMOUNT + REMAINDER).into()) - .unwrap(); - msg::set_source(1.into()); - state - .approve( - 3.into(), - ApproveType::Allowance((0u8.into(), AMOUNT.into())), - ) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), 0u8.into(), AMOUNT.into()), - Ok(MTTransfer { - from: 1.into(), - to: 2.into(), - id: 0u8.into(), - amount: AMOUNT.into() - }) - ); - assert_eq!( - state.allowance(1.into(), 3.into(), Some(&0u8.into())), - 0u8.into() - ); - - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Operator(true)) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), 0u8.into(), REMAINDER.into()), - Ok(MTTransfer { - from: 1.into(), - to: 2.into(), - id: 0u8.into(), - amount: REMAINDER.into() - }) - ); - assert_eq!(state.allowance(1.into(), 3.into(), None), Amount::MAX); - assert_eq!(state.balance_of(1.into(), Some(&0u8.into())), 0u64.into()); - assert_eq!(state.balance_of(1.into(), None), 0u64.into()); - assert_eq!( - state.balance_of(2.into(), Some(&0u8.into())), - (AMOUNT + REMAINDER).into() - ); - assert_eq!( - state.balance_of(2.into(), None), - (AMOUNT + REMAINDER).into() - ); - } - - #[test] - fn transfer_from_failures() { - let mut state = MTState::new(); - - assert_eq!( - state.transfer_from(ActorId::zero(), 1.into(), 0u8.into(), Amount::default()), - Err(MTError::ZeroSenderAddress) - ); - assert_eq!( - state.transfer_from(1.into(), ActorId::zero(), 0u8.into(), Amount::default()), - Err(MTError::ZeroRecipientAddress) - ); - assert_eq!( - state.transfer_from(1.into(), 2.into(), 0u8.into(), Amount::default()), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 0u8.into(), 1u64.into()).unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), 0u8.into(), Amount::default()), - Err(MTError::NotApproved) - ); - assert_eq!( - state.transfer_from(1.into(), 2.into(), 2u8.into(), Amount::default()), - Err(MTError::InsufficientAmount) - ); - - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Allowance((0u8.into(), 2u64.into()))) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), 0u8.into(), 2u64.into()), - Err(MTError::InsufficientAmount) - ); - - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Operator(true)) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from(1.into(), 2.into(), 1u8.into(), Amount::default()), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn transfer_batch() { - let mut state = MTState::new(); - - state.mint(1.into(), 0u8.into(), AMOUNT.into()).unwrap(); - state - .mint(1.into(), 1u8.into(), (AMOUNT + REMAINDER).into()) - .unwrap(); - msg::set_source(1.into()); - - let ids_for_amount = vec![ - (0u8.into(), (AMOUNT - REMAINDER).into()), - (1u8.into(), AMOUNT.into()), - ]; - - assert_eq!( - state.transfer_batch(2.into(), ids_for_amount.clone()), - Ok(MTTransferBatch { - from: 1.into(), - to: 2.into(), - ids_for_amount - }) - ); - - assert_eq!( - state.balance_of(1.into(), Some(&0u8.into())), - REMAINDER.into() - ); - assert_eq!( - state.balance_of(1.into(), Some(&1u8.into())), - REMAINDER.into() - ); - assert_eq!(state.balance_of(1.into(), None), (REMAINDER * 2).into()); - - assert_eq!( - state.balance_of(2.into(), Some(&0u8.into())), - (AMOUNT - REMAINDER).into() - ); - assert_eq!(state.balance_of(2.into(), Some(&1u8.into())), AMOUNT.into()); - assert_eq!( - state.balance_of(2.into(), None), - ((AMOUNT - REMAINDER) + AMOUNT).into() - ); - } - - #[test] - fn transfer_batch_failures() { - let mut state = MTState::new(); - - state.mint(1.into(), 0u8.into(), 1u64.into()).unwrap(); - msg::set_source(1.into()); - - assert_eq!( - state.transfer_batch( - 2.into(), - vec![ - (0u8.into(), Amount::default()), - (1u8.into(), Amount::default()) - ] - ), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 1u8.into(), 1u64.into()).unwrap(); - - assert_eq!( - state.transfer_batch( - 2.into(), - vec![(0u8.into(), 1u64.into()), (1u8.into(), 2u64.into())] - ), - Err(MTError::InsufficientAmount) - ); - } - - #[test] - fn transfer_from_batch() { - let mut state = MTState::new(); - - state - .mint(1.into(), 0u8.into(), (AMOUNT * 2 + REMAINDER).into()) - .unwrap(); - state - .mint(1.into(), 1u8.into(), (AMOUNT + REMAINDER * 2).into()) - .unwrap(); - msg::set_source(1.into()); - state - .approve( - 3.into(), - ApproveType::Allowance((0u8.into(), AMOUNT.into())), - ) - .unwrap(); - state - .approve( - 3.into(), - ApproveType::Allowance((1u8.into(), REMAINDER.into())), - ) - .unwrap(); - msg::set_source(3.into()); - - let mut ids_for_amount = vec![(0u8.into(), AMOUNT.into()), (1u8.into(), REMAINDER.into())]; - - assert_eq!( - state.transfer_from_batch(1.into(), 2.into(), ids_for_amount.clone()), - Ok(MTTransferBatch { - from: 1.into(), - to: 2.into(), - ids_for_amount, - }) - ); - assert_eq!( - state.allowance(1.into(), 3.into(), Some(&0u8.into())), - 0u8.into() - ); - assert_eq!( - state.allowance(1.into(), 3.into(), Some(&1u8.into())), - 0u8.into() - ); - - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Operator(true)) - .unwrap(); - msg::set_source(3.into()); - - ids_for_amount = vec![(0u8.into(), REMAINDER.into()), (1u8.into(), AMOUNT.into())]; - - assert_eq!( - state.transfer_from_batch(1.into(), 2.into(), ids_for_amount.clone()), - Ok(MTTransferBatch { - from: 1.into(), - to: 2.into(), - ids_for_amount - }) - ); - assert_eq!(state.allowance(1.into(), 3.into(), None), Amount::MAX); - - ids_for_amount = vec![]; - - assert_eq!( - state.transfer_from_batch(1.into(), 2.into(), ids_for_amount.clone()), - Ok(MTTransferBatch { - from: 1.into(), - to: 2.into(), - ids_for_amount - }) - ); - - assert_eq!(state.balance_of(1.into(), Some(&0u8.into())), AMOUNT.into()); - assert_eq!( - state.balance_of(1.into(), Some(&1u8.into())), - REMAINDER.into() - ); - assert_eq!( - state.balance_of(1.into(), None), - (AMOUNT + REMAINDER).into() - ); - - assert_eq!( - state.balance_of(2.into(), Some(&0u8.into())), - (AMOUNT + REMAINDER).into() - ); - assert_eq!( - state.balance_of(2.into(), Some(&1u8.into())), - (AMOUNT + REMAINDER).into() - ); - assert_eq!( - state.balance_of(2.into(), None), - ((AMOUNT + REMAINDER) * 2).into() - ); - } - - #[test] - fn transfer_from_batch_failures() { - let mut state = MTState::new(); - - assert_eq!( - state.transfer_from_batch(ActorId::zero(), 1.into(), vec![]), - Err(MTError::ZeroSenderAddress) - ); - assert_eq!( - state.transfer_from_batch(1.into(), ActorId::zero(), vec![]), - Err(MTError::ZeroRecipientAddress) - ); - assert_eq!( - state.transfer_from_batch(1.into(), 2.into(), vec![]), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 0u8.into(), 1u64.into()).unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from_batch( - 1.into(), - 2.into(), - vec![ - (0u8.into(), Amount::default()), - (1u8.into(), Amount::default()) - ] - ), - Err(MTError::InsufficientAmount) - ); - - state.mint(1.into(), 1u8.into(), 1u64.into()).unwrap(); - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Allowance((0u8.into(), 1u64.into()))) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from_batch( - 1.into(), - 2.into(), - vec![(0u8.into(), 1u64.into()), (1u8.into(), 1u64.into())] - ), - Err(MTError::NotApproved) - ); - - msg::set_source(1.into()); - state - .approve(3.into(), ApproveType::Operator(true)) - .unwrap(); - msg::set_source(3.into()); - - assert_eq!( - state.transfer_from_batch( - 1.into(), - 2.into(), - vec![(0u8.into(), 1u64.into()), (1u8.into(), 2u64.into())] - ), - Err(MTError::InsufficientAmount) - ); - } -} diff --git a/contracts/gear-lib/src/tokens/non_fungible.rs b/contracts/gear-lib/src/tokens/non_fungible.rs deleted file mode 100644 index b066f8eba..000000000 --- a/contracts/gear-lib/src/tokens/non_fungible.rs +++ /dev/null @@ -1,607 +0,0 @@ -//! The non-fungible token. - -use super::types::{Amount, Id, Operator, Owner}; -use gstd::{ - collections::{HashMap, HashSet}, - prelude::*, - ActorId, -}; - -pub mod encodable; - -#[cfg(test)] -use super::test_helper::msg; -#[cfg(not(test))] -use gstd::msg; - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct Token { - owner: Owner, - approvals: HashSet, - attributes: HashMap, Vec>, -} - -#[derive(Default, Debug, PartialEq, Eq, Clone)] -struct TokenOwner { - operators: HashSet, - balance: Amount, -} - -/// The non-fungible token implementation. -#[derive(Default, Debug, PartialEq, Eq, Clone)] -pub struct NFTState { - owners: HashMap, - tokens: HashMap, - total_supply: Amount, -} - -impl NFTState { - pub fn new() -> Self { - Self::default() - } - - /// Gets the current total token supply. - pub const fn total_supply(&self) -> Amount { - self.total_supply - } - - /// Returns a balance of `owner`'s tokens. - pub fn balance_of(&self, owner: Owner) -> Amount { - self.owners - .get(&owner) - .map(|token_owner| token_owner.balance) - .unwrap_or_default() - } - - /// Returns [`Owner`] of the token with given `id`. - pub fn owner_of(&self, id: &Id) -> Owner { - self.internal_owner_of(id).unwrap_or_default() - } - - fn internal_owner_of(&self, id: &Id) -> Result { - self.tokens - .get(id) - .map(|token| token.owner) - .ok_or(NFTError::TokenNotExists) - } - - /// Returns [`true`] if `operator` is allowed to transfer all `owner`'s - /// tokens or the token with given `id`. - /// - /// - If `id` is [`Some`], firstly checks if `operator` is allowed for all - /// `owner`'s tokens, and if not, whether `operator` is allowed for the - /// token with this `id`. - /// - If `id` is [`None`], only checks if `operator` is allowed for all - /// `owner`'s tokens. - pub fn allowance(&self, owner: Owner, operator: Operator, id: Option<&Id>) -> bool { - Self::inner_allowance( - &self.owners, - id.map(|unwrapped_id| (&self.tokens, unwrapped_id)), - owner, - operator, - ) - } - - fn inner_allowance( - owners: &HashMap, - tokens_and_id: Option<(&HashMap, &Id)>, - owner: Owner, - operator: Operator, - ) -> bool { - owners - .get(&owner) - .map(|token_owner| { - token_owner.operators.contains(&operator) - || tokens_and_id - .map(|(tokens, id)| tokens.get(id).unwrap().approvals.contains(&operator)) - .unwrap_or_default() - }) - .unwrap_or_default() - } - - /// Transfers the token with given `id` to `to`. - /// - /// If [`msg::source()`] isn't the owner of the token, [`msg::source()`] - /// must be an operator of all token's owner's tokens or the token with - /// given `id`. - /// - /// # Errors - /// - [`NFTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - /// - [`NFTError::NotApproved`] if [`msg::source()`] isn't the owner of the - /// token and doesn't have any allowance for its transfer. - pub fn transfer(&mut self, to: ActorId, id: Id) -> Result { - if to.is_zero() { - return Err(NFTError::ZeroRecipientAddress); - } - - let Some(token) = self.tokens.get_mut(&id) else { - return Err(NFTError::TokenNotExists); - }; - let msg_source = msg::source(); - - if !(token.owner == msg_source - || token.approvals.remove(&msg_source) - || Self::inner_allowance(&self.owners, None, token.owner, msg_source)) - { - return Err(NFTError::NotApproved); - } - - let from = token.owner; - - token.owner = to; - - self.decrement_balance(from); - self.increment_balance(to); - - Ok(NFTTransfer { from, to, id }) - } - - /// Allows or disallows `operator` to transfer all [`msg::source()`]'s - /// tokens or only the one with given `id`. - /// - /// - If `id` is [`Some`], sets an approval only for the token with this - /// `id`. - /// - If `id` is [`None`], sets an approval for all [`msg::source()`]'s - /// tokens. - /// - /// If [`msg::source()`] is an operator of all tokens of the owner of the - /// token with given `id`, [`msg::source()`] can also set approval for them. - /// - /// # Errors - /// - [`NFTError::ZeroRecipientAddress`] if `operator` is - /// [`ActorId::zero()`]. - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - /// - [`NFTError::NotApproved`] if [`msg::source()`] isn't the owner of the - /// token and operator of token's owner's tokens. - pub fn approve( - &mut self, - operator: Operator, - id: Option, - approve: bool, - ) -> Result { - if operator.is_zero() { - return Err(NFTError::ZeroRecipientAddress); - } - - let msg_source = msg::source(); - let mut owner = msg_source; - - let operators = if let Some(ref unwrapped_id) = id { - let current_owner = self.internal_owner_of(unwrapped_id)?; - - if current_owner != owner { - if !self.allowance(current_owner, owner, None) { - return Err(NFTError::NotApproved); - } - - owner = current_owner; - } - - &mut self.tokens.get_mut(unwrapped_id).unwrap().approvals - } else { - &mut self.owners.entry(owner).or_default().operators - }; - - if approve { - operators.insert(operator); - } else { - operators.remove(&operator); - } - - Ok(NFTApproval { - owner, - operator, - id, - approved: approve, - }) - } - - fn balance_of_mut(&mut self, owner: Owner) -> &mut Amount { - &mut self.owners.entry(owner).or_default().balance - } - - fn increment_balance(&mut self, owner: Owner) { - *self.balance_of_mut(owner) += Amount::one(); - } - - fn decrement_balance(&mut self, owner: Owner) { - *self.balance_of_mut(owner) -= Amount::one(); - } - - /// Mints to `to` the token with given `id`. - /// - /// # Errors - /// - [`NFTError::ZeroRecipientAddress`] if `to` is [`ActorId::zero()`]. - /// - [`NFTError::TokenNotExists`] if the total supply of tokens reached the - /// maximum limit of the [`Amount`] type. - /// - [`NFTError::TokenExists`] if the token with given `id` already exists. - pub fn mint(&mut self, to: ActorId, id: Id) -> Result { - if to.is_zero() { - return Err(NFTError::ZeroRecipientAddress); - } - - if self.total_supply == Amount::MAX { - return Err(NFTError::TokenNotExists); - } - - if self.tokens.contains_key(&id) { - return Err(NFTError::TokenExists); - } - - self.increment_balance(to); - self.tokens.insert( - id.clone(), - Token { - owner: to, - ..Default::default() - }, - ); - - self.total_supply += Amount::one(); - - Ok(NFTTransfer { - from: ActorId::zero(), - to, - id, - }) - } - - /// Burns from `from` the token with given `id`. - /// - /// # Errors - /// - [`NFTError::ZeroSenderAddress`] if `from` is [`ActorId::zero()`]. - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - pub fn burn(&mut self, from: Owner, id: Id) -> Result { - if from.is_zero() { - return Err(NFTError::ZeroSenderAddress); - } - - self.internal_owner_of(&id)?; - self.tokens.remove(&id); - self.decrement_balance(from); - - self.total_supply -= Amount::one(); - - Ok(NFTTransfer { - from, - to: ActorId::zero(), - id, - }) - } - - /// Gets an attribute with given `key` for the token with given `id`. - /// - /// Returns [`None`] if an attribute with given `key` doesn't exist. - /// - /// To set an attribute, use [`NFTState::set_attribute()`]. - /// - /// # Errors - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - pub fn get_attribute(&self, id: &Id, key: &Vec) -> Result>, NFTError> { - self.tokens - .get(id) - .ok_or(NFTError::TokenNotExists) - .map(|token| token.attributes.get(key)) - } - - /// Sets an attribute with given `key` & `value` for the token with given - /// `id`. - /// - /// Returns [`None`] if an attribute with given `key` doesn't exist, - /// otherwise replaces the old value with given one and returns [`Some`] - /// with the old one. - /// - /// Note that it's impossible to remove a set attribute, only overwrite it. - /// - /// To get an attribute, use [`NFTState::get_attribute()`]. - /// - /// # Errors - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - pub fn set_attribute( - &mut self, - id: &Id, - key: Vec, - value: Vec, - ) -> Result>, NFTError> { - self.tokens - .get_mut(id) - .ok_or(NFTError::TokenNotExists) - .map(|token| token.attributes.insert(key, value)) - } -} - -/// The non-fungible token transfer event. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTTransfer { - /// A sender address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token minting. - pub from: ActorId, - /// A recipient address. - /// - /// It equals [`ActorId::zero()`], if it's retrieved after token burning. - pub to: ActorId, - /// A token ID. - pub id: Id, -} - -/// The non-fungible token approval event. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTApproval { - pub owner: Owner, - pub operator: Operator, - /// If it's [`Some`], it means this approval is only for the token with this - /// `id`, if it's [`None`] - this approval is for all `owner`s tokens. - pub id: Option, - pub approved: bool, -} - -/// Non-fungible token error variants. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTError { - /// [`msg::source()`] doesn't have any allowance to make a transfer/approval - /// for the token. - NotApproved, - /// The token already exists. - TokenExists, - /// The token doesn't exist. - TokenNotExists, - /// A recipient/operator address is [`ActorId::zero()`]. - ZeroRecipientAddress, - /// A sender address is [`ActorId::zero()`]. - ZeroSenderAddress, -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn meta() { - let key: Vec<_> = "Name".into(); - let data: Vec<_> = "Nuclear Fish Tank".into(); - let mut state = NFTState::new(); - - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), data.clone()), - Err(NFTError::TokenNotExists) - ); - - state.mint(1.into(), 0u8.into()).unwrap(); - - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), "NFT".into()), - Ok(None) - ); - assert_eq!( - state.set_attribute(&0u8.into(), key.clone(), data.clone()), - Ok(Some("NFT".into())) - ); - assert_eq!(state.get_attribute(&0u8.into(), &key), Ok(Some(&data))); - assert_eq!( - state.get_attribute(&0u8.into(), &"Nonexistent attribute".into()), - Ok(None) - ); - assert_eq!( - state.get_attribute(&1u8.into(), &key), - Err(NFTError::TokenNotExists) - ); - } - - #[test] - fn mint() { - let mut state = NFTState::new(); - - assert_eq!( - state.mint(1.into(), 0u8.into()), - Ok(NFTTransfer { - from: ActorId::zero(), - to: 1.into(), - id: 0u8.into() - }) - ); - - assert_eq!(state.owner_of(&0u8.into()), 1.into()); - assert_eq!(state.balance_of(1.into()), 1u64.into()); - assert_eq!(state.total_supply(), 1u64.into()); - } - - #[test] - fn mint_failures() { - let mut state = NFTState::new(); - - assert_eq!( - state.mint(ActorId::zero(), 0u8.into()), - Err(NFTError::ZeroRecipientAddress) - ); - - state.mint(1.into(), 0u8.into()).unwrap(); - - assert_eq!(state.mint(1.into(), 0u8.into()), Err(NFTError::TokenExists)); - - state.total_supply = Amount::MAX; - - assert_eq!( - state.mint(1.into(), 1u8.into()), - Err(NFTError::TokenNotExists) - ); - } - - #[test] - fn burn() { - let mut state = NFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - - assert_eq!( - state.burn(1.into(), 0u8.into()), - Ok(NFTTransfer { - from: 1.into(), - to: ActorId::zero(), - id: 0u8.into() - }) - ); - assert_eq!(state.owner_of(&0u8.into()), ActorId::zero()); - assert_eq!(state.balance_of(1.into()), 0u64.into()); - assert_eq!(state.total_supply(), 0u64.into()); - } - - #[test] - fn burn_failures() { - let mut state = NFTState::new(); - - assert_eq!( - state.burn(ActorId::zero(), 0u8.into()), - Err(NFTError::ZeroSenderAddress) - ); - assert_eq!( - state.burn(1.into(), 0u8.into()), - Err(NFTError::TokenNotExists) - ); - } - - #[test] - fn transfer() { - let mut state = NFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(1.into()); - - assert_eq!( - state.transfer(2.into(), 0u8.into()), - Ok(NFTTransfer { - from: 1.into(), - to: 2.into(), - id: 0u8.into() - }) - ); - assert_eq!(state.balance_of(1.into()), 0u64.into()); - assert_eq!(state.balance_of(2.into()), 1u64.into()); - assert_eq!(state.owner_of(&0u8.into()), 2.into()); - } - - #[test] - fn transfer_failures() { - let mut state = NFTState::new(); - - assert_eq!( - state.transfer(ActorId::zero(), 0u8.into()), - Err(NFTError::ZeroRecipientAddress) - ); - assert_eq!( - state.transfer(2.into(), 0u8.into()), - Err(NFTError::TokenNotExists) - ); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(2.into()); - - assert_eq!( - state.transfer(2.into(), 0u8.into()), - Err(NFTError::NotApproved) - ); - } - - #[test] - fn approve() { - let mut state = NFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(1.into()); - - assert_eq!( - state.approve(2.into(), Some(0u8.into()), true), - Ok(NFTApproval { - owner: 1.into(), - operator: 2.into(), - id: Some(0u8.into()), - approved: true - }) - ); - assert!(state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - assert_eq!( - state.approve(2.into(), Some(0u8.into()), false), - Ok(NFTApproval { - owner: 1.into(), - operator: 2.into(), - id: Some(0u8.into()), - approved: false - }) - ); - assert!(!state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - - assert_eq!( - state.approve(2.into(), None, true), - Ok(NFTApproval { - owner: 1.into(), - operator: 2.into(), - id: None, - approved: true - }) - ); - assert!(state.allowance(1.into(), 2.into(), None)); - assert!(state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - - assert_eq!( - state.approve(2.into(), None, false), - Ok(NFTApproval { - owner: 1.into(), - operator: 2.into(), - id: None, - approved: false - }) - ); - assert!(!state.allowance(1.into(), 2.into(), None)); - assert!(!state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - } - - #[test] - fn approved_transfer() { - let mut state = NFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(1.into()); - state.approve(2.into(), Some(0u8.into()), true).unwrap(); - msg::set_source(2.into()); - state.transfer(2.into(), 0u8.into()).unwrap(); - - assert!(!state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - - state.approve(1.into(), None, true).unwrap(); - state.mint(2.into(), 1u8.into()).unwrap(); - msg::set_source(1.into()); - state.transfer(1.into(), 1u8.into()).unwrap(); - - assert!(state.allowance(2.into(), 1.into(), None)); - assert!(state.allowance(2.into(), 1.into(), Some(&0u8.into()))); - } - - #[test] - fn approve_failures() { - let mut state = NFTState::new(); - - assert_eq!( - state.approve(ActorId::zero(), None, true), - Err(NFTError::ZeroRecipientAddress) - ); - assert_eq!( - state.approve(2.into(), Some(0u8.into()), true), - Err(NFTError::TokenNotExists) - ); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(2.into()); - - assert_eq!( - state.approve(2.into(), Some(0u8.into()), true), - Err(NFTError::NotApproved) - ); - } -} diff --git a/contracts/gear-lib/src/tokens/non_fungible/encodable.rs b/contracts/gear-lib/src/tokens/non_fungible/encodable.rs deleted file mode 100644 index fb22e06bf..000000000 --- a/contracts/gear-lib/src/tokens/non_fungible/encodable.rs +++ /dev/null @@ -1,228 +0,0 @@ -//! The encodable non-fungible token state. -//! -//! Due to limitations of the SCALE codec, it's impossible to encode the -//! [`HashMap`](gstd::collections::HashMap) & [`HashSet`](gstd::collections::HashSet) types, and therefore -//! [`super::NFTState`] too, so as a workaround there's the encodable -//! [`NFTState`] type that use [`Vec`] instead of unencodable types and can be -//! constructed from [`super::NFTState`]. - -use super::{Amount, Id, NFTError, NFTState as SuperNFTState, Operator, Owner}; -use gstd::prelude::*; - -/// The encodable non-fungible token state. -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTState { - pub total_supply: Amount, - pub tokens: Vec<(Id, Token)>, - pub owners: Vec<(Owner, TokenOwner)>, -} - -impl NFTState { - /// Returns a balance of `owner`'s tokens. - pub fn balance_of(&self, owner: Owner) -> Amount { - self.owners - .iter() - .find_map(|(stored_owner, token_owner)| { - (*stored_owner == owner).then_some(token_owner.balance) - }) - .unwrap_or_default() - } - - /// Returns [`Owner`] of the token with given `id`. - pub fn owner_of(&self, id: &Id) -> Owner { - self.tokens - .iter() - .find_map(|(stored_id, token)| (stored_id == id).then_some(token.owner)) - .unwrap_or_default() - } - - /// Returns [`true`] if `operator` is allowed to transfer all `owner`'s - /// tokens or the token with given `id`. - /// - /// - If `id` is [`Some`], firstly checks if `operator` is allowed for all - /// `owner`'s tokens, and if not, whether `operator` is allowed for the - /// token with given `id`. - /// - If `id` is [`None`], only checks if `operator` is allowed for all - /// `owner`'s tokens. - pub fn allowance(&self, owner: Owner, operator: Operator, id: Option<&Id>) -> bool { - self.owners - .iter() - .find_map(|(stored_owner, token_owner)| { - (*stored_owner == owner).then_some(&token_owner.operators) - }) - .map(|operators| { - operators.contains(&operator) - || id - .map(|unwrapped_id| { - self.tokens - .iter() - .find_map(|(stored_id, token)| { - (stored_id == unwrapped_id).then_some(&token.approvals) - }) - .unwrap() - .contains(&operator) - }) - .unwrap_or_default() - }) - .unwrap_or_default() - } - - /// Gets an attribute with given `key` for the token with given `id`. - /// - /// Returns [`None`] if an attribute with given `key` doesn't exist. - /// - /// # Errors - /// - [`NFTError::TokenNotExists`] if the token doesn't exist. - pub fn get_attribute(&self, id: &Id, key: &Vec) -> Result>, NFTError> { - self.tokens - .iter() - .find_map(|(stored_id, token)| (stored_id == id).then_some(&token.attributes)) - .ok_or(NFTError::TokenNotExists) - .map(|attributes| { - attributes - .iter() - .find_map(|(stored_key, value)| (stored_key == key).then_some(value)) - }) - } -} - -impl From for NFTState { - fn from(state: SuperNFTState) -> Self { - let tokens = state - .tokens - .into_iter() - .map(|(id, token)| { - ( - id, - Token { - owner: token.owner, - approvals: token.approvals.into_iter().collect(), - attributes: token.attributes.into_iter().collect(), - }, - ) - }) - .collect(); - let owners = state - .owners - .into_iter() - .map(|(owner, token_owner)| { - ( - owner, - TokenOwner { - operators: token_owner.operators.into_iter().collect(), - balance: token_owner.balance, - }, - ) - }) - .collect(); - - Self { - total_supply: state.total_supply, - tokens, - owners, - } - } -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Token { - pub owner: Owner, - pub approvals: Vec, - pub attributes: Vec<(Vec, Vec)>, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TokenOwner { - pub operators: Vec, - pub balance: Amount, -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::tokens::test_helper::msg; - use gstd::ActorId; - - #[test] - fn balance_of() { - let mut state = SuperNFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - - let encoded_state = NFTState::from(state); - - assert_eq!(encoded_state.balance_of(ActorId::zero()), 0u64.into()); - assert_eq!(encoded_state.balance_of(2.into()), 0u64.into()); - assert_eq!(encoded_state.balance_of(1.into()), 1u64.into()); - } - - #[test] - fn owner_of() { - let mut state = SuperNFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - - let encoded_state = NFTState::from(state); - - assert_eq!(encoded_state.owner_of(&123u16.into()), ActorId::zero()); - assert_eq!(encoded_state.owner_of(&1u8.into()), ActorId::zero()); - assert_eq!(encoded_state.owner_of(&0u8.into()), 1.into()); - } - - #[test] - fn allowance() { - let mut state = SuperNFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - msg::set_source(1.into()); - state.approve(2.into(), Some(0u8.into()), true).unwrap(); - - let mut encoded_state = NFTState::from(state.clone()); - - assert!(!encoded_state.allowance(ActorId::zero(), 2.into(), Some(&0u8.into()))); - assert!(!encoded_state.allowance(1.into(), 3.into(), Some(&0u8.into()))); - assert!(encoded_state.allowance(1.into(), 2.into(), Some(&0u8.into()))); - assert!(!encoded_state.allowance(1.into(), 2.into(), None)); - - state.approve(2.into(), None, true).unwrap(); - - encoded_state = NFTState::from(state); - - assert!(!encoded_state.allowance(1.into(), 3.into(), None)); - assert!(encoded_state.allowance(1.into(), 2.into(), None)); - assert!(encoded_state.allowance(1.into(), 2.into(), Some(&123u8.into()))); - } - - #[test] - fn get_attribute() { - let key: Vec<_> = "A".into(); - let value: Vec<_> = "B".into(); - let mut state = SuperNFTState::new(); - - state.mint(1.into(), 0u8.into()).unwrap(); - state - .set_attribute(&0u8.into(), key.clone(), value.clone()) - .unwrap(); - - let encoded_state = NFTState::from(state); - - assert_eq!( - encoded_state.get_attribute(&123u8.into(), &key), - Err(NFTError::TokenNotExists) - ); - assert_eq!( - encoded_state.get_attribute(&0u8.into(), &"ABCD".into()), - Ok(None) - ); - assert_eq!( - encoded_state.get_attribute(&0u8.into(), &key), - Ok(Some(&value)) - ); - } -} diff --git a/contracts/gear-lib/src/tokens/types.rs b/contracts/gear-lib/src/tokens/types.rs deleted file mode 100644 index 2baa91a94..000000000 --- a/contracts/gear-lib/src/tokens/types.rs +++ /dev/null @@ -1,47 +0,0 @@ -//! Token primitives. - -use gstd::{prelude::*, ActorId}; -use primitive_types::U256; - -/// An owner of some tokens. -pub type Owner = ActorId; -/// An operator of some tokens. -pub type Operator = ActorId; -/// An amount of some tokens. -pub type Amount = U256; - -/// The simple & flexible identifier type for different types of tokens. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Id { - U8(u8), - U16(u16), - U32(u32), - U64(u64), - U128(u128), - U256(U256), - Bytes(Vec), -} - -macro_rules! impl_from_for_id { - { $( $from:ty => $to:ident ),*, } => { - $( - impl From<$from> for Id { - fn from(id: $from) -> Self { - Self::$to(id) - } - } - )* - }; -} - -impl_from_for_id! { - u8 => U8, - u16 => U16, - u32 => U32, - u64 => U64, - u128 => U128, - U256 => U256, - Vec => Bytes, -} diff --git a/contracts/gear-lib/src/tx_manager.rs b/contracts/gear-lib/src/tx_manager.rs deleted file mode 100644 index 3e1a3203f..000000000 --- a/contracts/gear-lib/src/tx_manager.rs +++ /dev/null @@ -1,718 +0,0 @@ -//! The transaction manager. -//! -//! With the advent of complex asynchronous smart contracts, like -//! [SFT](https://github.com/gear-dapps/sharded-fungible-token), the transaction -//! caching was introduced. It allows transaction data to be saved on different -//! stages, and a failed transaction to be reexecuted whilst skipping completed -//! stages, thereby saving gas. Most often the reason for the failed transaction -//! is the lack of gas. Unfortunately, this algorithm isn't too user-friendly -//! because users of contracts with caching must track cached -//! [`TransactionId`]s, and increment their number on each successful execution. -//! [`TransactionManager`] is intended to help solve this problem. -//! -//! In simple words, [`TransactionManager`] stores pairs of [`msg::source()`] & -//! some data that a contract developer wants to save for this -//! [`msg::source()`]. The manager has a limit at which it starts to replace old -//! pairs with new ones. While doing all this, it tracks transaction identifiers -//! (or more specifically slices of identifiers) for all pairs. Thus, having -//! only [`msg::source()`], it's possible to acquire [`TransactionGuard`] with -//! [`Stepper`] inside, and by calling [`Stepper::step()`] always get the -//! correct [`TransactionId`] regardless of whether the transaction is new or -//! cached. -//! -//! [`msg::source()`]: gstd::msg::source - -use ahash::AHasher; -use core::num::{NonZeroU32, NonZeroUsize}; -use gstd::{hash::BuildHasherDefault, prelude::*, ActorId}; -use indexmap::{map::MutableKeys, IndexMap}; -use offset::Offset; - -mod offset; - -/// The default transaction limit. -/// -/// The contract storage is limited, so cached transactions can't take up all -/// the space. Note that although this limit may be enough for most example -/// cases, the real contract structure may still be very different, so it's -/// recommended to calculate an individual limit for each contract, and set it -/// with [`TransactionManager::new_with_custom_limit()`]. -pub const DEFAULT_TX_LIMIT: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(2u32.pow(16)) }; -/// The maximum transaction limit. -/// -/// A transaction limit mustn't be more than [`u32::MAX`]` / `[`u8::MAX`]` - 1`. -/// With the current contract memory limit (32 MB), it's impossible to store -/// even the half of this amount, so consider this just as an additional -/// restriction. -/// -/// The reason for it is the [`TransactionManager`]'s logic for -/// [`TransactionId`] traversing. The manager divides available -/// [`TransactionId`]s by [`u8::MAX`], saves only division indexes, and -/// multiplies them by [`u8::MAX`] to get actual [`TransactionId`]s. Hence to -/// avoid the [`u32`] overflow, the maximum amount of cached transactions -/// multiplied by [`u8::MAX`] mustn't be more than -/// [`u32::MAX`]` / `[`u8::MAX`]` - 1`. -pub const MAX_TX_LIMIT: NonZeroU32 = unsafe { NonZeroU32::new_unchecked(Offset::MAX) }; - -/// A transaction identifier. -// TODO: change to `u32` after the SFT refactor. -pub type TransactionId = u64; - -impl Default for TransactionManager { - fn default() -> Self { - Self { - actors_for_tx: IndexMap::default(), - tx_limit: DEFAULT_TX_LIMIT.try_into().unwrap(), - cursor: 0, - offset: 0.try_into().unwrap(), - } - } -} - -/// The transaction manager. -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct TransactionManager { - actors_for_tx: IndexMap>, - tx_limit: NonZeroUsize, - cursor: usize, - offset: Offset, -} - -impl TransactionManager { - /// Creates the manager with [`DEFAULT_TX_LIMIT`]. - /// - /// To create it with a custom limit, use - /// [`TransactionManager::new_with_custom_limit()`]. - pub fn new() -> Self { - Self::default() - } - - /// Creates the manager with custom `tx_limit`. - /// - /// # Errors - /// [`TransactionManagerError::Overflow`] if `tx_limit` > [`MAX_TX_LIMIT`]. - /// - /// To create the manager with the default limit, use - /// [`TransactionManager::new()`]. - pub fn new_with_custom_limit(tx_limit: NonZeroU32) -> Result { - if tx_limit > MAX_TX_LIMIT { - Err(TransactionManagerError::Overflow) - } else { - Ok(Self { - tx_limit: tx_limit.try_into().unwrap(), - ..Self::new() - }) - } - } - - /// Acquires the transaction for a given [`msg::source()`]. - /// - /// Important notes: - /// - Only one transaction for each `msg_source` is cached. Hence an attempt - /// to save a [new](TransactionKind::New) transaction over a failed one will - /// delete the failed one, so it'll be **impossible** to - /// [retry](TransactionKind::Retry) the latter. - /// - There's no guarantee every underprocessed asynchronous action will - /// result in a cached transaction. Usually caching occurs after the first - /// blocking `.await` during action processing. - /// - The cache memory has a limit, so when it's reached every oldest cached - /// transaction is replaced with a new one. See also [`DEFAULT_TX_LIMIT`]. - /// - /// # Errors - /// [`TransactionManagerError::TransactionNotFound`] if `kind` is - /// [`TransactionKind::Retry`], and transaction for given `msg_source` - /// wasn't found. - /// - /// # Panics - /// If `msg_source` is [`ActorId::zero()`]. [`msg::source()`] can't be - /// [`ActorId::zero()`] because the manager use it for shadowing old - /// transaction data. - /// - /// [`msg::source()`]: gstd::msg::source - pub fn acquire_transaction( - &mut self, - msg_source: ActorId, - kind: TransactionKind, - ) -> Result, TransactionManagerError> { - assert!( - !msg_source.is_zero(), - "`ActorId::zero()` in `msg_source` is forbidden in the transaction manager" - ); - - let (tx_id, tx_data) = match kind { - TransactionKind::New(data_to_cache) => { - if self.actors_for_tx.len() < self.tx_limit.get() { - self.hoard(msg_source, data_to_cache) - } else { - self.cycle(msg_source, data_to_cache) - } - } - TransactionKind::Retry => { - let (tx_index, _, tx_data) = self - .actors_for_tx - .get_full_mut(&msg_source) - .ok_or(TransactionManagerError::TransactionNotFound)?; - let tx_id = if tx_index < self.cursor { - self.offset - .wrapping_add((tx_index as u32).try_into().unwrap()) - } else { - self.offset.wrapping_sub( - (self.tx_limit.get() as u32 - tx_index as u32) - .try_into() - .unwrap(), - ) - }; - - (tx_id.get(), tx_data) - } - }; - - Ok(TransactionGuard { - tx_data: TransactionData(tx_data), - stepper: Stepper { - tx_id: tx_id * 255, - step: 0, - }, - }) - } - - /// Returns pairs of [`msg::source()`](gstd::msg::source) & cached - /// transaction data in order from oldest to newest. - /// - /// Can be used to generate a list of cached transaction for the `state()` - /// entry point. - pub fn cached_transactions(&self) -> impl Iterator { - (self.cursor..self.actors_for_tx.len()) - .chain(0..self.cursor) - .filter_map(|index| { - let (actor, tx_data) = self.actors_for_tx.get_index(index).unwrap(); - - (self.actors_for_tx.get_index_of(actor).unwrap() == index) - .then_some((actor, tx_data)) - }) - } - - fn hoard(&mut self, msg_source: ActorId, data_to_cache: T) -> (u32, &mut T) { - // Hoarding mode. The manager will cache transactions until it hits the - // set limit. - - let (mut tx_index, old_tx_data_option) = - self.actors_for_tx.insert_full(msg_source, data_to_cache); - - if let Some(old_tx_data) = old_tx_data_option { - // Inserting the old data at the end of the map. - let (last_tx_index, _) = self.actors_for_tx.insert_full(ActorId::zero(), old_tx_data); - let (_, key, _) = self.actors_for_tx.get_full_mut2(&ActorId::zero()).unwrap(); - - // Invalidating the old data key so that the data can't be looked - // up. - *key = msg_source; - - // Moving the new data to the end. - self.actors_for_tx.swap_indices(tx_index, last_tx_index); - - tx_index = last_tx_index; - } - - self.update_cursor_and_offset(); - - (tx_index as u32, &mut self.actors_for_tx[tx_index]) - } - - fn cycle(&mut self, msg_source: ActorId, data_to_cache: T) -> (u32, &mut T) { - // Cycling mode. The manager will cycle through saved transactions and - // overwrite oldest ones with new ones. - - let (mut tx_index, old_tx_data_option) = - self.actors_for_tx.insert_full(msg_source, data_to_cache); - - if old_tx_data_option.is_some() { - let (key, _) = self.actors_for_tx.get_index_mut2(self.cursor).unwrap(); - - // Invalidating the old data key so that the data can't be looked - // up. - *key = msg_source; - - // Moving the new data to the end (the current cursor position). - self.actors_for_tx.swap_indices(tx_index, self.cursor); - } else { - // Swapping the old data with the new one, and popping the old data - // off. - self.actors_for_tx.swap_remove_index(self.cursor); - } - - tx_index = self.cursor; - - let tx_id = self - .offset - .wrapping_add((tx_index as u32).try_into().unwrap()); - - self.update_cursor_and_offset(); - - (tx_id.get(), &mut self.actors_for_tx[tx_index]) - } - - fn update_cursor_and_offset(&mut self) { - let next_cursor_index = self.cursor + 1; - - if next_cursor_index < self.tx_limit.get() { - self.cursor = next_cursor_index; - } else { - self.cursor = 0; - self.offset = self - .offset - .wrapping_add((self.tx_limit.get() as u32).try_into().unwrap()); - } - } -} - -/// The kind of a transaction to get from [`TransactionManager`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionKind { - /// A new transaction with some data to be cached. - /// - /// Keep the data as compact as possible because it'll stay in the contract - /// memory until the transaction limit for [`TransactionManager`] is - /// reached and the data overwritten with new transaction data. - New(T), - - /// A cached transaction. - Retry, -} - -impl Default for TransactionKind { - fn default() -> Self { - Self::New(T::default()) - } -} - -/// The transaction manager error variants. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionManagerError { - /// There's no cached transaction for given - /// [`msg::source()`](gstd::msg::source()). The reason may be a - /// transaction's action wasn't asynchronous or just wasn't cached, or a - /// cached transaction was removed because it was too old. - TransactionNotFound, - /// [`TransactionData`] failed a check in one of its methods. - MismatchedTxData, - /// See [`TransactionManager::new_with_custom_limit()`] or - /// [`Stepper::step()`]. - Overflow, -} - -/// A transaction guard. -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct TransactionGuard<'tx, T> { - pub tx_data: TransactionData<'tx, T>, - pub stepper: Stepper, -} - -/// Transaction data. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TransactionData<'tx, T>(pub &'tx mut T); - -impl TransactionData<'_, T> { - /// Checks transaction data with a given closure and returns a mutable - /// reference to the data or a part of it. - /// - /// ``` - /// use gear_lib::tx_manager::TransactionData; - /// - /// #[derive(Debug, PartialEq)] - /// enum SomeData { - /// One(u8), - /// #[allow(dead_code)] - /// Two, - /// } - /// - /// let mut some_data = SomeData::One(123); - /// let mut transaction_data = TransactionData(&mut some_data); - /// - /// let number = transaction_data - /// .check_and_get_tx_data(|tx_data| { - /// if let SomeData::One(ref mut number) = *tx_data { - /// Some(number) - /// } else { - /// None - /// } - /// }) - /// .unwrap(); - /// - /// assert_eq!(*number, 123); - /// - /// *number = 23; - /// - /// assert_eq!(some_data, SomeData::One(23)); - /// ``` - /// - /// # Errors - /// [`TransactionManagerError::MismatchedTxData`] if a check resulted in - /// [`None`]. - pub fn check_and_get_tx_data( - &mut self, - mut check: impl FnMut(&mut T) -> Option<&mut D>, - ) -> Result<&mut D, TransactionManagerError> { - check(self.0).ok_or(TransactionManagerError::MismatchedTxData) - } - - /// Checks transaction data with a given closure. - /// - /// ``` - /// use gear_lib::tx_manager::{TransactionData, TransactionManagerError}; - /// - /// #[derive(PartialEq)] - /// enum SomeData { - /// One(u8), - /// #[allow(dead_code)] - /// Two, - /// } - /// - /// let mut some_data = SomeData::One(123); - /// let transaction_data = TransactionData(&mut some_data); - /// - /// assert_eq!( - /// transaction_data.check_tx_data(|tx_data| SomeData::One(123) == *tx_data), - /// Ok(()) - /// ); - /// assert_eq!( - /// transaction_data.check_tx_data(|tx_data| SomeData::One(1) == *tx_data), - /// Err(TransactionManagerError::MismatchedTxData) - /// ); - /// ``` - /// - /// # Errors - /// [`TransactionManagerError::MismatchedTxData`] if a check resulted in - /// [`false`]. - pub fn check_tx_data( - &self, - mut check: impl FnMut(&T) -> bool, - ) -> Result<(), TransactionManagerError> { - if check(self.0) { - Ok(()) - } else { - Err(TransactionManagerError::MismatchedTxData) - } - } -} - -/// A [`TransactionId`] tracker for the current transaction. -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub struct Stepper { - tx_id: u32, - step: u8, -} - -impl Stepper { - /// Gets the next [`TransactionId`] for the current transaction. - /// - /// The current limit for steps is [`u8::MAX`]. Since there are usually far - /// fewer than [`u8::MAX`] interactions between contracts per action, this - /// should be sufficient. - /// - /// # Errors - /// [`TransactionManagerError::Overflow`] if the limit for [`Stepper`] was - /// exceeded. - pub fn step(&mut self) -> Result { - let step = self.tx_id + u32::from(self.step); - - if let Some(next_step) = self.step.checked_add(1) { - self.step = next_step; - - Ok(TransactionId::from(step)) - } else { - Err(TransactionManagerError::Overflow) - } - } -} - -/// The generic action type for use with [`TransactionManager`]. -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Action { - pub action: T, - pub kind: ActionKind, -} - -impl Action { - pub const fn new(action: T) -> Self { - Self { - action, - kind: ActionKind::New, - } - } - - pub fn to_retry(self) -> Self { - Self { - action: self.action, - kind: ActionKind::Retry, - } - } -} - -/// A kind of [`Action`]. -/// -/// The same as [`TransactionKind`], but without the data field. Should be used -/// instead of [`TransactionKind`] in a public interface. -#[derive( - Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ActionKind { - #[default] - New, - Retry, -} - -impl ActionKind { - /// Converts [`ActionKind`] to [`TransactionKind`]. - pub fn to_tx_kind(self, tx_data: T) -> TransactionKind { - match self { - Self::New => TransactionKind::New(tx_data), - Self::Retry => TransactionKind::Retry, - } - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn new_custom() { - TransactionManager::<()>::new_with_custom_limit(1.try_into().unwrap()).unwrap(); - TransactionManager::<()>::new_with_custom_limit(MAX_TX_LIMIT).unwrap(); - assert_eq!( - TransactionManager::<()>::new_with_custom_limit(MAX_TX_LIMIT.saturating_add(1)), - Err(TransactionManagerError::Overflow) - ); - } - - #[test] - #[should_panic = "`ActorId::zero()` in `msg_source` is forbidden in the transaction manager"] - fn forbidden_zero() { - TransactionManager::<()>::new() - .acquire_transaction(ActorId::zero(), TransactionKind::default()) - .unwrap(); - } - - #[test] - fn extra_small_limit() { - let tx_limit: NonZeroUsize = 1.try_into().unwrap(); - let mut manager = - TransactionManager::::new_with_custom_limit(tx_limit.try_into().unwrap()).unwrap(); - let cursor = 0; - let mut guard; - - for offset in 1..101 { - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::New(228)) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (228, (offset - 1) * 255) - ); - - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::Retry) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (228, (offset - 1) * 255) - ); - assert_eq!( - manager, - TransactionManager { - actors_for_tx: IndexMap::from_iter([(ActorId::from(1), 228)]), - tx_limit, - cursor, - offset: offset.try_into().unwrap(), - } - ); - assert!(manager - .cached_transactions() - .eq([(&ActorId::from(1), &228)])); - } - - manager.offset = (MAX_TX_LIMIT.get() - 1).try_into().unwrap(); - - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::New(123)) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (123, u32::MAX - 255 * 2) - ); - assert_eq!( - manager, - TransactionManager { - actors_for_tx: IndexMap::from_iter([(ActorId::from(1), 123)]), - tx_limit, - cursor, - offset: MAX_TX_LIMIT.get().try_into().unwrap(), - } - ); - - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::New(123)) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (123, u32::MAX - 255) - ); - assert_eq!( - manager, - TransactionManager { - actors_for_tx: IndexMap::from_iter([(ActorId::from(1), 123)]), - tx_limit, - cursor, - offset: 0.try_into().unwrap(), - } - ); - assert!(manager - .cached_transactions() - .eq([(&ActorId::from(1), &123)])); - } - - #[test] - fn small_limit() { - let tx_limit: NonZeroUsize = 5.try_into().unwrap(); - let mut manager = - TransactionManager::::new_with_custom_limit(tx_limit.try_into().unwrap()).unwrap(); - let mut guard; - let mut txs = vec![]; - - for offset in 1..6 { - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::New(228)) - .unwrap(); - - txs.push((ActorId::from(1), 228)); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (228, (offset - 1) * 255) - ); - - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::Retry) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (228, (offset - 1) * 255) - ); - assert_eq!( - (manager.tx_limit, manager.cursor, manager.offset), - ( - 5.try_into().unwrap(), - offset as usize % tx_limit, - (offset - offset % tx_limit.get() as u32) - .try_into() - .unwrap() - ) - ); - assert_eq!( - manager - .actors_for_tx - .iter() - .map(|(&k, &v)| (k, v)) - .collect::>(), - txs - ); - assert!(manager - .cached_transactions() - .eq(iter::once((&ActorId::from(1), &228)))); - } - - let mut guard = manager - .acquire_transaction(ActorId::from(2), TransactionKind::New(77)) - .unwrap(); - - assert_eq!((*guard.tx_data.0, guard.stepper.tx_id), (77, 5 * 255)); - - guard = manager - .acquire_transaction(ActorId::from(2), TransactionKind::Retry) - .unwrap(); - - assert_eq!((*guard.tx_data.0, guard.stepper.tx_id), (77, 5 * 255)); - assert_eq!( - (manager.tx_limit, manager.cursor, manager.offset), - (tx_limit, 1, (tx_limit.get() as u32).try_into().unwrap()) - ); - assert!(manager - .actors_for_tx - .iter() - .eq(iter::once((&ActorId::from(2), &77)) - .chain(iter::repeat((&ActorId::from(1), &228)).take(4)))); - assert!(manager - .cached_transactions() - .eq([(&ActorId::from(1), &228), (&ActorId::from(2), &77)])); - } - - #[test] - fn borderline() { - let mut manager = TransactionManager { - actors_for_tx: IndexMap::from_iter([ - (ActorId::from(2), 234), - (ActorId::from(3), 345), - (ActorId::from(1), 123u16), - ]), - tx_limit: 3.try_into().unwrap(), - cursor: 2, - offset: 0.try_into().unwrap(), - }; - - assert!(manager.cached_transactions().eq([ - (&ActorId::from(1), &123), - (&ActorId::from(2), &234), - (&ActorId::from(3), &345), - ])); - - let mut guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::Retry) - .unwrap(); - - assert_eq!( - (*guard.tx_data.0, guard.stepper.tx_id), - (123, u32::MAX - 255) - ); - - guard = manager - .acquire_transaction(ActorId::from(2), TransactionKind::Retry) - .unwrap(); - - assert_eq!((*guard.tx_data.0, guard.stepper.tx_id), (234, 0)); - - guard = manager - .acquire_transaction(ActorId::from(3), TransactionKind::Retry) - .unwrap(); - - assert_eq!((*guard.tx_data.0, guard.stepper.tx_id), (345, 255)); - - guard = manager - .acquire_transaction(ActorId::from(1), TransactionKind::New(7654)) - .unwrap(); - - assert_eq!((*guard.tx_data.0, guard.stepper.tx_id), (7654, 255 * 2)); - assert!(manager.cached_transactions().eq([ - (&ActorId::from(2), &234), - (&ActorId::from(3), &345), - (&ActorId::from(1), &7654), - ])); - } -} diff --git a/contracts/gear-lib/src/tx_manager/offset.rs b/contracts/gear-lib/src/tx_manager/offset.rs deleted file mode 100644 index b85b36d62..000000000 --- a/contracts/gear-lib/src/tx_manager/offset.rs +++ /dev/null @@ -1,72 +0,0 @@ -use core::num::TryFromIntError; - -#[derive(PartialEq, Eq, Debug, Clone, Copy)] -pub(crate) struct Offset(u32); - -impl Offset { - pub(crate) const MAX: u32 = u32::MAX / u8::MAX as u32 - 1; - - pub(crate) const fn wrapping_add(self, rhs: Self) -> Self { - Self((self.0 + rhs.0) % (Self::MAX + 1)) - } - - pub(crate) const fn wrapping_sub(self, rhs: Self) -> Self { - let number = self.0.wrapping_sub(rhs.0); - - Self(if number > Self::MAX { - Self::MAX - (u32::MAX - number) - } else { - number - }) - } - - pub(crate) const fn get(self) -> u32 { - self.0 - } -} - -impl TryFrom for Offset { - type Error = TryFromIntError; - - fn try_from(value: u32) -> Result { - if value > Self::MAX { - Err(get_try_from_int_error()) - } else { - Ok(Self(value)) - } - } -} - -fn get_try_from_int_error() -> TryFromIntError { - u8::try_from(256u16).unwrap_err() -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn wrapping_add() { - assert_eq!(Offset(123).wrapping_add(Offset(321)), Offset(444)); - assert_eq!(Offset(Offset::MAX).wrapping_add(Offset(1)), Offset(0)); - assert_eq!(Offset(Offset::MAX - 2).wrapping_add(Offset(4)), Offset(1)); - } - - #[test] - fn wrapping_sub() { - assert_eq!(Offset(444).wrapping_sub(Offset(321)), Offset(123)); - assert_eq!(Offset(0).wrapping_sub(Offset(1)), Offset(Offset::MAX)); - assert_eq!(Offset(2).wrapping_sub(Offset(4)), Offset(Offset::MAX - 1)); - } - - #[test] - fn from_u32() { - assert_eq!(123321u32.try_into(), Ok(Offset(123321u32))); - assert_eq!(Offset::try_from(u32::MAX), Err(get_try_from_int_error())); - assert_eq!(Offset::try_from(Offset::MAX), Ok(Offset(Offset::MAX))); - assert_eq!( - Offset::try_from(Offset::MAX + 1), - Err(get_try_from_int_error()) - ); - } -} diff --git a/contracts/horse-races/Cargo.toml b/contracts/horse-races/Cargo.toml deleted file mode 100644 index 60516b71e..000000000 --- a/contracts/horse-races/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "horse-races" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -oracle-randomness-io.workspace = true -horse-races-io.workspace = true -fungible-token-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -# External binaries - -fungible-token.workspace = true -horse-races-state.workspace = true -oracle-randomness.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -horse-races-io.workspace = true diff --git a/contracts/horse-races/README.md b/contracts/horse-races/README.md deleted file mode 100644 index 6cda30c94..000000000 --- a/contracts/horse-races/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=horse-races/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/horce_races_io) - -# Horse Races - -### 🏗️ Building - -```sh -cargo b -r -p "horse-races*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "horse-races*" -``` - -## Overview - -The game is a betting on horse racing. The winning horse is determined with random using the oracle. The probability of winning is also affected by additional characteristics of the horse. - -The game is based on "races", only one "race" can exist at a time and they alternate. The "races" are managed by a "manager", he can add any number of horses with any characteristics. In addition, the "manager" manages the state of the "races" and can cancel in time or determine the winner. It is important to understand that the "manager" cannot choose any particular participant and cannot influence the result of the "race" in any way!. The "manager" himself cannot take part in bets. - -When the "manager" creates a "race", participants are given some time to bid(note that each user is charged a fee for the bet, which was set by the "manager"). When time is up, the "manager" can either cancel the "race" or continue. If the "race" is cancelled, all participants can get their tokens back. If the "race" continues, the contract contacts the oracle, the oracle returns a random value and the contract chooses the winning horse. After that, the tokens of the losing participants are proportionally distributed between the participants who bet on the winning horse. Then the "manager" creates a new "race" and the cycle repeats. diff --git a/contracts/horse-races/build.rs b/contracts/horse-races/build.rs deleted file mode 100644 index 1fd17271e..000000000 --- a/contracts/horse-races/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use horse_races_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/horse-races/io/Cargo.toml b/contracts/horse-races/io/Cargo.toml deleted file mode 100644 index feed8a1a2..000000000 --- a/contracts/horse-races/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "horse-races-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/horse-races/io/src/action.rs b/contracts/horse-races/io/src/action.rs deleted file mode 100644 index fd8d3e9ab..000000000 --- a/contracts/horse-races/io/src/action.rs +++ /dev/null @@ -1,24 +0,0 @@ -use crate::Horse; -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Action { - UpdateFeeBps(u16), - UpdateManager(ActorId), - UpdateOracle(ActorId), - ProgressLastRun, - CancelLastRun, - CreateRun { - bidding_duration_ms: u64, - horses: BTreeMap, - }, - FinishLastRun, - Bid { - horse_name: String, - amount: u128, - }, - WithdrawCanceled(u128), - WithdrawFinished(u128), -} diff --git a/contracts/horse-races/io/src/config.rs b/contracts/horse-races/io/src/config.rs deleted file mode 100644 index f11438f6e..000000000 --- a/contracts/horse-races/io/src/config.rs +++ /dev/null @@ -1,12 +0,0 @@ -use codec::{Decode, Encode}; -use gstd::{prelude::*, ActorId, TypeInfo}; - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitConfig { - pub manager: ActorId, - pub token: ActorId, - pub oracle: ActorId, - pub fee_bps: u16, -} diff --git a/contracts/horse-races/io/src/event.rs b/contracts/horse-races/io/src/event.rs deleted file mode 100644 index 3e00d37e8..000000000 --- a/contracts/horse-races/io/src/event.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::Horse; -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - FeeBpsUpdated(u16), - ManagerUpdated(ActorId), - OracleUpdated(ActorId), - LastRunProgressed(u128), - LastRunCanceled(u128), - LastRunFinished { - run_id: u128, - winner: (String, Horse, u128), - }, - RunCreated { - run_id: u128, - bidding_duration_ms: u64, - horses: BTreeMap, - }, - NewBid { - horse_name: String, - amount: u128, - }, - NewWithdrawCanceled { - user: ActorId, - run_id: u128, - amount: u128, - }, - NewWithdrawFinished { - user: ActorId, - run_id: u128, - amount: u128, - profit_amount: u128, - }, -} diff --git a/contracts/horse-races/io/src/lib.rs b/contracts/horse-races/io/src/lib.rs deleted file mode 100644 index 6bce51ba0..000000000 --- a/contracts/horse-races/io/src/lib.rs +++ /dev/null @@ -1,218 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -mod action; -mod config; -mod event; -mod meta; - -pub use action::*; -pub use config::*; -pub use event::*; -pub use meta::*; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub runs: BTreeMap, - pub manager: ActorId, - pub owner: ActorId, - pub token: ActorId, - pub oracle: ActorId, - pub fee_bps: u16, - pub run_nonce: u128, -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Horse { - pub max_speed: u8, -} - -impl Horse { - pub fn get_power(&self) -> u128 { - self.max_speed.into() - } -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo, Hash, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Run { - pub start_timestamp: u64, - pub end_bidding_timestamp: u64, - pub horses: BTreeMap, - pub bidders: BTreeMap, - pub status: RunStatus, -} - -impl Run { - pub fn progress(&mut self, oracle_round: u128) { - self.status = RunStatus::InProgress { oracle_round }; - } - - pub fn cancel(&mut self) { - self.status = RunStatus::Canceled; - } - - pub fn finish(&mut self, seed: u128, run_id: u128) { - let mut last_range_index: u128 = 0; - let ranges: Vec<(u128, u128, String)> = self - .horses - .iter() - .map(|(horse_name, (horse, _))| { - let min = last_range_index; - let max = last_range_index + horse.get_power(); - let result = (min, max, horse_name.to_owned()); - last_range_index = max; - - result - }) - .collect(); - - let winner_index = seed % (last_range_index.checked_add(1).expect("Math overflow!")); - let winner_horse: String = { - let mut result = String::from(""); - for (min, max, horse_name) in ranges { - if winner_index >= min && winner_index <= max { - result = horse_name; - break; - } - } - - if !self.horses.contains_key(&result) { - panic!("Winner not found!"); - } - - result - }; - - self.status = RunStatus::Finished { - horse_name: winner_horse, - run_id, - }; - } - - /// Subtracts all funds from `user` and return amount. - pub fn withdraw_all(&mut self, user: ActorId) -> u128 { - let (_, amount) = self.bidders.get_mut(&user).expect("Bidder is not found!"); - let result = *amount; - *amount = 0; - - result - } - - /// Deposits `amount` to `user` and associated `Horse`. - pub fn deposit(&mut self, user: ActorId, horse_name: &str, amount: u128) { - self.bidders - .entry(user) - .and_modify(|(existing_horse_name, deposited_amount)| { - if existing_horse_name != horse_name { - panic!("Provided horse didn't match bid horse!"); - } - - *deposited_amount = deposited_amount - .checked_add(amount) - .expect("Math overflow!"); - }) - .or_insert((horse_name.to_owned(), amount)); - - let (_, horse_amount) = self - .horses - .get_mut(horse_name) - .expect("Provided horse is not found!"); - *horse_amount = horse_amount.checked_add(amount).expect("Math overflow!"); - } - - pub fn sum_deposits_except_winner(&self) -> u128 { - let (horse_name, _, _) = self.get_winner_horse().expect("Run is not finished!"); - let sum: u128 = self - .horses - .iter() - .filter(|(name, _)| &horse_name != *name) - .map(|(_, (_, amount))| *amount) - .sum(); - - sum - } - - pub fn get_user_deposit_bps(&self, user: ActorId) -> Option { - let (horse_name, user_amount) = self.bidders.get(&user)?; - let (_, total_deposits) = self.horses.get(horse_name)?; - - Some( - user_amount - .checked_mul(MAX_BPS.into()) - .expect("Math overflow!") - .checked_div(*total_deposits) - .expect("Math overflow"), - ) - } - - pub fn get_user_horse(&self, user: ActorId) -> Option<(String, Horse, u128)> { - let (horse_name, amount) = self.bidders.get(&user)?; - let (horse, _) = self.horses.get(horse_name)?; - - Some((horse_name.to_owned(), horse.clone(), *amount)) - } - - pub fn get_winner_horse(&self) -> Option<(String, Horse, u128)> { - match &self.status { - RunStatus::Finished { - horse_name, - run_id: _, - } => { - let (horse, amount) = self - .horses - .get(horse_name) - .expect("Winner horse is not found!"); - - Some((horse_name.to_owned(), horse.clone(), *amount)) - } - _ => None, - } - } -} - -/// Represent `100%` in basis points. -pub const MAX_BPS: u16 = 10_000; - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RunStatus { - /// Indicates that `Run` is in bidding stage. - Created, - - /// Indicates that `Run` is canceled. - Canceled, - - /// Indicates that `Run` is in progress. - InProgress { oracle_round: u128 }, - - /// Indicates that `Run` is finished. - Finished { horse_name: String, run_id: u128 }, -} - -pub fn validate_fee_bps(fee_bps: u16) -> u16 { - if fee_bps > MAX_BPS { - panic!("Provided fee bps is greater than max bps!"); - } - - fee_bps -} diff --git a/contracts/horse-races/io/src/meta.rs b/contracts/horse-races/io/src/meta.rs deleted file mode 100644 index 2cb491c90..000000000 --- a/contracts/horse-races/io/src/meta.rs +++ /dev/null @@ -1,33 +0,0 @@ -use crate::{Horse, Run}; -use codec::{Decode, Encode}; -use gstd::{prelude::*, ActorId, TypeInfo}; - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MetaQuery { - GetRuns, - GetHorses(u128), - GetManager, - GetOwner, - GetToken, - GetOracle, - GetFeeBps, - GetRunNonce, - GetRun(u128), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MetaResponse { - Runs(Vec<(u128, Run)>), - Horses(Vec<(String, Horse, u128)>), - Manager(ActorId), - Owner(ActorId), - Token(ActorId), - Oracle(ActorId), - FeeBps(u16), - RunNonce(u128), - Run(Run), -} diff --git a/contracts/horse-races/src/lib.rs b/contracts/horse-races/src/lib.rs deleted file mode 100644 index 18b5644c3..000000000 --- a/contracts/horse-races/src/lib.rs +++ /dev/null @@ -1,552 +0,0 @@ -#![no_std] - -use gstd::{ - collections::{BTreeMap, HashMap}, - exec, msg, - prelude::*, - ActorId, -}; -use horse_races_io::*; - -#[derive(Debug, Default)] -struct HorseRaces { - runs: HashMap, - manager: ActorId, - owner: ActorId, - token: ActorId, - oracle: ActorId, - fee_bps: u16, - run_nonce: u128, -} - -impl HorseRaces { - /// Updates current `fee_bps` for `new_fee_bps`, - /// which will be used for charing comissions from users. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub fn update_fee_bps(&mut self, new_fee_bps: u16) { - self.assert_manager(); - self.assert_last_run_ended(); - - self.fee_bps = validate_fee_bps(new_fee_bps); - msg::reply(Event::FeeBpsUpdated(new_fee_bps), 0).expect("Unable to reply!"); - } - - /// Updates current `manager` for `new_manager`, - /// which will be used for calling service functions. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub fn update_manager(&mut self, new_manager: ActorId) { - self.assert_manager(); - self.assert_last_run_ended(); - - self.manager = new_manager; - msg::reply(Event::ManagerUpdated(new_manager), 0).expect("Unable to reply!"); - } - - /// Updates current `oracle` for `new_oracle`, - /// which will be used for random. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub fn update_oracle(&mut self, new_oracle: ActorId) { - self.assert_manager(); - self.assert_last_run_ended(); - - self.oracle = new_oracle; - msg::reply(Event::OracleUpdated(new_oracle), 0).expect("Unable to reply!"); - } - - /// Change(move) current `Run` `status` to `InProgress`. - /// At this stage we will expect oracle value. - /// - /// - Can be called after bidding time period. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub async fn progress_last_run(&mut self) { - self.assert_manager(); - self.assert_last_run_bidding_finished(); - - let current_run = self - .runs - .get_mut(&self.run_nonce) - .expect("Last run is not found!"); - - let oracle_reply: oracle_randomness_io::Event = msg::send_for_reply_as( - self.oracle, - oracle_randomness_io::Action::GetLastRoundWithRandomValue, - 0, - 0, - ) - .expect("Unable to send oracle action!") - .await - .expect("Unable to await oracle event!"); - - if let oracle_randomness_io::Event::LastRoundWithRandomValue { - round, - random_value: _, - } = oracle_reply - { - current_run.progress(round); - - msg::reply(Event::LastRunProgressed(self.run_nonce), 0).expect("Unable to reply!"); - } else { - panic!("Invalid oracle reply!"); - } - } - - /// Change(move) current `Run` `status` to `Canceled`. - /// - /// - Can be called after bidding time period. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub fn cancel_last_run(&mut self) { - self.assert_manager(); - self.assert_last_run_bidding_finished(); - - let current_run = self - .runs - .get_mut(&self.run_nonce) - .expect("Last run is not found!"); - - current_run.cancel(); - - msg::reply(Event::LastRunCanceled(self.run_nonce), 0).expect("Unable to reply!"); - } - - /// Handle oracle result with random value. - /// Picks horse randomly according to stats. - /// - /// - Checks that last `Run` is valid. - pub async fn finish_last_run(&mut self) { - self.assert_last_run_in_progress(); - - let run_id = self.run_nonce; - - let current_run = self.runs.get_mut(&run_id).expect("Last run is not found!"); - if let RunStatus::InProgress { oracle_round } = current_run.status { - let oracle_reply: oracle_randomness_io::Event = msg::send_for_reply_as( - self.oracle, - oracle_randomness_io::Action::GetLastRoundWithRandomValue, - 0, - 0, - ) - .expect("Unable to send oracle action!") - .await - .expect("Unable to await oracle event!"); - - if let oracle_randomness_io::Event::LastRoundWithRandomValue { - round, - random_value, - } = oracle_reply - { - if round <= oracle_round { - panic!("Oracle round is not changed!"); - } - - let seed = random_value.0; - - current_run.finish(seed, run_id); - - msg::reply( - Event::LastRunFinished { - run_id, - winner: current_run - .get_winner_horse() - .expect("Winner horse is not found!"), - }, - 0, - ) - .expect("Unable to reply!"); - } else { - panic!("Invalid oracle reply!") - } - } else { - panic!("Invalid last run status!"); - } - } - - /// Creates new run. - /// - /// - Checks that last `Run` is valid. - /// - /// - Only `manager` can call this function. - pub fn create_run(&mut self, bidding_duration_ms: u64, horses: BTreeMap) { - self.assert_manager(); - self.assert_last_run_ended(); - - self.run_nonce = self.run_nonce.checked_add(1).expect("Math overflow!"); - let id = self.run_nonce; - - let start_timestamp = exec::block_timestamp(); - let end_bidding_timestamp = start_timestamp - .checked_add(bidding_duration_ms) - .expect("Math overflow!"); - - if self - .runs - .insert( - id, - Run { - start_timestamp, - end_bidding_timestamp, - horses: horses - .iter() - .map(|(horse_name, horse)| (horse_name.to_owned(), (horse.clone(), 0))) - .collect(), - bidders: BTreeMap::new(), - status: RunStatus::Created, - }, - ) - .is_some() - { - panic!("Invalid ID!"); - } - - msg::reply( - Event::RunCreated { - run_id: id, - bidding_duration_ms, - horses, - }, - 0, - ) - .expect("Unable to reply!"); - } - - /// Places new bid in last `Run`. - /// Charges fees(`fee_bps`) from user. - /// - /// - Checks that last `Run` is valid. - pub async fn bid(&mut self, horse_name: &str, amount: u128) { - self.assert_not_manager(); - self.assert_last_run_bidding(); - - // 1. Calculate fee amount with bps - let fee_amount = amount - .checked_mul(self.fee_bps.into()) - .expect("Math overflow!") - .checked_div(MAX_BPS.into()) - .expect("Math overflow!"); - - // 2. Calculate actual amount(subtract fee amount) - let amount = amount.checked_sub(fee_amount).expect("Math overflow!"); - - // 3. Track deposit amount - let current_run = self - .runs - .get_mut(&self.run_nonce) - .expect("Last run is not found!"); - - current_run.deposit(msg::source(), horse_name, amount); - - // 4. Collect fee(transfer to `manager`) - let _reply: fungible_token_io::FTEvent = msg::send_for_reply_as( - self.token, - fungible_token_io::FTAction::Transfer { - from: msg::source(), - to: self.manager, - amount: fee_amount, - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Failed to transfer fee!"); - - // 5. Transfer funds into vault - let _reply: fungible_token_io::FTEvent = msg::send_for_reply_as( - self.token, - fungible_token_io::FTAction::Transfer { - from: msg::source(), - to: exec::program_id(), - amount, - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Failed to transfer bid amount!"); - - msg::reply( - Event::NewBid { - horse_name: horse_name.to_string(), - amount, - }, - 0, - ) - .expect("Unable to reply!"); - } - - /// Withdraw full deposited amount from - /// canceled `Run`, which specified by `run_id`. - /// - /// - Checks, that provided `Run` is in canceled stage. - pub async fn withdraw_canceled(&mut self, run_id: u128) { - self.assert_canceled(run_id); - - let run = self.runs.get_mut(&run_id).expect("Run is not found!"); - let amount = run.withdraw_all(msg::source()); - - let _reply: fungible_token_io::FTEvent = msg::send_for_reply_as( - self.token, - fungible_token_io::FTAction::Transfer { - from: exec::program_id(), - to: msg::source(), - amount, - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Failed to transfer bid amount, to source!"); - - msg::reply( - Event::NewWithdrawCanceled { - user: msg::source(), - run_id, - amount, - }, - 0, - ) - .expect("Unable to reply!"); - } - - /// Withdraw full deposited amount from - /// finished `Run`, which specified by `run_id`. - /// - /// - Checks, that provided `Run` is in finished stage. - pub async fn withdraw_finished(&mut self, run_id: u128) { - self.assert_finished(run_id); - - let run = self.runs.get_mut(&run_id).expect("Run is not found!"); - - let user = msg::source(); - - let (winner_horse_name, _, _) = run.get_winner_horse().expect("Winner horse is not found!"); - let (user_horse_name, _, user_deposit_amount) = - run.get_user_horse(user).expect("Can't get user horse!"); - - if winner_horse_name != user_horse_name { - panic!("Sorry, but you lose!"); - } - - if user_deposit_amount == 0 { - panic!("Bid amount is empty!"); - } - - // 1. Get user deposit percentage(bps) - let user_deposit_bps = run - .get_user_deposit_bps(user) - .expect("Can't get user deposit percentage!"); - - // 2. Get sum of all deposits(across all horses), except winner - let total_deposits = run.sum_deposits_except_winner(); - - // 3. Calculate profit amount - let profit_amount = total_deposits - .checked_mul(user_deposit_bps) - .expect("Math overflow!") - .checked_div(MAX_BPS.into()) - .expect("Math overflow!"); - - let user_deposit_amount = run.withdraw_all(user); - - // 4. Transfer profits with bid amount - let _reply: fungible_token_io::FTEvent = msg::send_for_reply_as( - self.token, - fungible_token_io::FTAction::Transfer { - from: exec::program_id(), - to: user, - amount: user_deposit_amount - .checked_add(profit_amount) - .expect("Math overflow!"), - }, - 0, - 0, - ) - .unwrap() - .await - .expect("Failed to transfer profits with bid amount!"); - - msg::reply( - Event::NewWithdrawFinished { - user, - run_id, - amount: user_deposit_amount, - profit_amount, - }, - 0, - ) - .expect("Unable to reply!"); - } - - fn assert_manager(&self) { - if self.manager != msg::source() { - panic!("Only manager can call this!"); - } - } - - fn assert_last_run_ended(&self) { - if let Some(last_run) = self.get_last_run() { - match last_run.status { - RunStatus::Canceled - | RunStatus::Finished { - horse_name: _, - run_id: _, - } => {} - _ => panic!("Last run is not ended!"), - } - } - } - - fn assert_last_run_bidding(&self) { - if let Some(last_run) = self.get_last_run() { - match last_run.status { - RunStatus::Created => { - let last_timestamp = exec::block_timestamp(); - - if last_run.end_bidding_timestamp <= last_timestamp { - panic!("Last run bidding stage is ended!"); - } - } - _ => panic!("Last run stage is invalid!"), - } - } else { - panic!("Last run is not found!"); - } - } - - fn assert_last_run_bidding_finished(&self) { - if let Some(last_run) = self.get_last_run() { - match last_run.status { - RunStatus::Created => { - let last_timestamp = exec::block_timestamp(); - - if last_run.end_bidding_timestamp > last_timestamp { - panic!("Last run bidding stage is not ended!"); - } - } - _ => panic!("Last run stage is invalid!"), - } - } else { - panic!("Last run is not found!"); - } - } - - fn assert_last_run_in_progress(&self) { - if let Some(last_run) = self.get_last_run() { - match last_run.status { - RunStatus::InProgress { oracle_round: _ } => {} - _ => panic!("Last run stage is invalid!"), - } - } else { - panic!("Last run is not found!"); - } - } - - fn assert_canceled(&self, run_id: u128) { - if let Some(run) = self.runs.get(&run_id) { - match run.status { - RunStatus::Canceled => {} - _ => panic!("Run stage is invalid!"), - } - } else { - panic!("Provided run id is invalid!"); - } - } - - fn assert_finished(&self, run_id: u128) { - if let Some(run) = self.runs.get(&run_id) { - match run.status { - RunStatus::Finished { - horse_name: _, - run_id: _, - } => {} - _ => panic!("Run stage is invalid!"), - } - } else { - panic!("Provided run id is invalid!"); - } - } - - fn assert_not_manager(&self) { - if self.manager == msg::source() { - panic!("Manager can't call this!"); - } - } - - pub fn get_last_run(&self) -> Option { - self.runs.get(&self.run_nonce).cloned() - } -} - -static mut HORSE_RACES: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let config: InitConfig = msg::load().expect("Unable to decode InitConfig."); - let horse_races = HorseRaces { - manager: config.manager, - owner: msg::source(), - token: config.token, - oracle: config.oracle, - fee_bps: validate_fee_bps(config.fee_bps), - ..Default::default() - }; - - HORSE_RACES = Some(horse_races); -} - -#[gstd::async_main] -async fn main() { - let horse_races: &mut HorseRaces = unsafe { HORSE_RACES.get_or_insert(HorseRaces::default()) }; - - let action: Action = msg::load().expect("Unable to decode Action."); - match action { - Action::UpdateFeeBps(new_fee_bps) => horse_races.update_fee_bps(new_fee_bps), - Action::UpdateManager(new_manager) => horse_races.update_manager(new_manager), - Action::UpdateOracle(new_oracle) => horse_races.update_oracle(new_oracle), - Action::ProgressLastRun => horse_races.progress_last_run().await, - Action::CancelLastRun => horse_races.cancel_last_run(), - Action::CreateRun { - bidding_duration_ms, - horses, - } => horse_races.create_run(bidding_duration_ms, horses), - Action::FinishLastRun => horse_races.finish_last_run().await, - Action::Bid { horse_name, amount } => horse_races.bid(&horse_name, amount).await, - Action::WithdrawCanceled(run_id) => horse_races.withdraw_canceled(run_id).await, - Action::WithdrawFinished(run_id) => horse_races.withdraw_finished(run_id).await, - } -} - -#[no_mangle] -unsafe extern fn state() { - let contract = HORSE_RACES.get_or_insert(Default::default()); - - msg::reply( - State { - runs: contract.runs.clone().into_iter().collect(), - manager: contract.manager, - owner: contract.owner, - token: contract.token, - oracle: contract.oracle, - fee_bps: contract.fee_bps, - run_nonce: contract.run_nonce, - }, - 0, - ) - .expect("Unable to reply!"); -} diff --git a/contracts/horse-races/state/Cargo.toml b/contracts/horse-races/state/Cargo.toml deleted file mode 100644 index c5f5bf0e9..000000000 --- a/contracts/horse-races/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "horse-races-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -horse-races-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/horse-races/state/build.rs b/contracts/horse-races/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/horse-races/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/horse-races/state/src/lib.rs b/contracts/horse-races/state/src/lib.rs deleted file mode 100644 index 1e6d93a13..000000000 --- a/contracts/horse-races/state/src/lib.rs +++ /dev/null @@ -1,39 +0,0 @@ -#![no_std] - -use horse_races_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = horse_races_io::State; - - pub fn query(state: State, query: MetaQuery) -> MetaResponse { - match query { - MetaQuery::GetRuns => MetaResponse::Runs( - state - .runs - .iter() - .map(|(id, run)| (*id, run.clone())) - .collect(), - ), - MetaQuery::GetHorses(run_id) => MetaResponse::Horses( - state - .runs - .get(&run_id) - .expect("Run is not found!") - .horses - .iter() - .map(|(name, (horse, amount))| (name.clone(), horse.clone(), *amount)) - .collect(), - ), - MetaQuery::GetManager => MetaResponse::Manager(state.manager), - MetaQuery::GetOwner => MetaResponse::Owner(state.owner), - MetaQuery::GetToken => MetaResponse::Token(state.token), - MetaQuery::GetOracle => MetaResponse::Oracle(state.oracle), - MetaQuery::GetFeeBps => MetaResponse::FeeBps(state.fee_bps), - MetaQuery::GetRunNonce => MetaResponse::RunNonce(state.run_nonce), - MetaQuery::GetRun(run_id) => { - MetaResponse::Run(state.runs.get(&run_id).expect("Run is not found!").clone()) - } - } - } -} diff --git a/contracts/horse-races/tests/horse_races.rs b/contracts/horse-races/tests/horse_races.rs deleted file mode 100644 index ca7ee4e70..000000000 --- a/contracts/horse-races/tests/horse_races.rs +++ /dev/null @@ -1,1830 +0,0 @@ -// mod utils; - -// use gstd::collections::BTreeMap; -// use gtest::System; -// use horse_races_io::*; -// use utils::*; - -// #[test] -// fn success_init() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => assert!(runs.is_empty()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetManager)) -// .unwrap(); -// match meta_state { -// MetaResponse::Manager(manager) => assert_eq!(manager, MANAGER.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetOwner)) -// .unwrap(); -// match meta_state { -// MetaResponse::Owner(owner) => assert_eq!(owner, OWNER.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetToken)) -// .unwrap(); -// match meta_state { -// MetaResponse::Token(token) => assert_eq!(token, TOKEN_ID.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetOracle)) -// .unwrap(); -// match meta_state { -// MetaResponse::Oracle(oracle) => assert_eq!(oracle, ORACLE_ID.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetFeeBps)) -// .unwrap(); -// match meta_state { -// MetaResponse::FeeBps(fee_bps) => assert_eq!(fee_bps, FEE_BPS), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRunNonce)) -// .unwrap(); -// match meta_state { -// MetaResponse::RunNonce(run_nonce) => assert_eq!(run_nonce, 0), -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_update() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(MANAGER, Action::UpdateManager(NEW_MANAGER.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::ManagerUpdated(NEW_MANAGER.into()).encode()))); - -// let result = horse_races_program.send(NEW_MANAGER, Action::UpdateFeeBps(NEW_FEE_BPS)); -// assert!(!result.main_failed()); -// assert!(result.contains(&(NEW_MANAGER, Event::FeeBpsUpdated(NEW_FEE_BPS).encode()))); - -// let result = horse_races_program.send(NEW_MANAGER, Action::UpdateOracle(NEW_ORACLE.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// NEW_MANAGER, -// Event::OracleUpdated(NEW_ORACLE.into()).encode() -// ))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetManager)) -// .unwrap(); -// match meta_state { -// MetaResponse::Manager(manager) => assert_eq!(manager, NEW_MANAGER.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetOracle)) -// .unwrap(); -// match meta_state { -// MetaResponse::Oracle(oracle) => assert_eq!(oracle, NEW_ORACLE.into()), -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetFeeBps)) -// .unwrap(); -// match meta_state { -// MetaResponse::FeeBps(fee_bps) => assert_eq!(fee_bps, NEW_FEE_BPS), -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_create_run() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let start_timestamp = sys.block_timestamp(); -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses: horses.clone(), -// }, -// ); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// MANAGER, -// Event::RunCreated { -// run_id: 1, -// bidding_duration_ms: 1000, -// horses -// } -// .encode() -// ))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm.clone(), Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert_eq!(run.start_timestamp, start_timestamp); -// assert_eq!(run.end_bidding_timestamp, start_timestamp + 1000); -// assert_eq!( -// *run.horses.get("Pegasus").unwrap(), -// (Horse { max_speed: 50 }, 0u128) -// ); -// assert_eq!( -// *run.horses.get("Max").unwrap(), -// (Horse { max_speed: 65 }, 0u128) -// ); -// assert_eq!( -// *run.horses.get("Vitalik").unwrap(), -// (Horse { max_speed: 80 }, 0u128) -// ); -// assert!(run.bidders.is_empty()); -// assert_eq!(run.status, RunStatus::Created); -// } -// _ => std::panic!("Invalid meta state!"), -// } - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRunNonce)) -// .unwrap(); -// match meta_state { -// MetaResponse::RunNonce(run_nonce) => assert_eq!(run_nonce, 1), -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_bid() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewBid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount_after_fees -// } -// .encode() -// ))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert!(!run.bidders.is_empty()); -// assert_eq!( -// *run.horses.get(&String::from("Max")).unwrap(), -// (Horse { max_speed: 65 }, user_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.bidders.get(&USER.into()).unwrap(), -// (String::from("Max"), user_deposit_amount_after_fees) -// ); - -// let result = token_program.send( -// OWNER, -// fungible_token_io::FTAction::BalanceOf(MANAGER.into()), -// ); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance(user_deposit_fees_amount).encode() -// ))); -// } -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_cancel_last_run() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::CancelLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunCanceled(1).encode()))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert_eq!(run.status, RunStatus::Canceled); -// } -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_progress_last_run() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(!result.others_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert_eq!(run.status, RunStatus::InProgress { oracle_round: 2 }); -// } -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_finish_last_run() { -// let state_wasm = get_state(); -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// let result = horse_races_program.send(MANAGER, Action::FinishLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// MANAGER, -// Event::LastRunFinished { -// run_id: 1, -// winner: ( -// String::from("Max"), -// Horse { max_speed: 65 }, -// user_deposit_amount_after_fees -// ) -// } -// .encode() -// ))); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert_eq!( -// run.status, -// RunStatus::Finished { -// horse_name: String::from("Max"), -// run_id: 1 -// } -// ); -// } -// _ => std::panic!("Invalid meta state!"), -// } -// } - -// #[test] -// fn success_withdraw_finished() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// let result = horse_races_program.send(MANAGER, Action::FinishLastRun); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(USER, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewWithdrawFinished { -// user: USER.into(), -// run_id: 1, -// amount: user_deposit_amount_after_fees, -// profit_amount: 0 -// } -// .encode() -// ))); - -// let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(USER.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance(user_deposit_amount_after_fees).encode() -// ))); -// } - -// #[test] -// fn success_withdraw_finished_more_users() { -// let sys = System::new(); -// let state_wasm = get_state(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let user_1_deposit_amount: u128 = 1000000; -// let user_1_deposit_fees_amount: u128 = -// user_1_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_1_deposit_amount_after_fees: u128 = user_1_deposit_amount - user_1_deposit_fees_amount; - -// let user_2_deposit_amount: u128 = 1000000; -// let user_2_deposit_fees_amount: u128 = -// user_2_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_2_deposit_amount_after_fees: u128 = user_2_deposit_amount - user_2_deposit_fees_amount; - -// let user_3_deposit_amount: u128 = 1000000; -// let user_3_deposit_fees_amount: u128 = -// user_3_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_3_deposit_amount_after_fees: u128 = user_3_deposit_amount - user_3_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); -// mint_token(&token_program, USER_1, user_1_deposit_amount); -// mint_token(&token_program, USER_2, user_2_deposit_amount); -// mint_token(&token_program, USER_3, user_3_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_1, -// horse_races_program.id().into_bytes().into(), -// user_1_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_1, -// Action::Bid { -// horse_name: String::from("Pegasus"), -// amount: user_1_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_2, -// horse_races_program.id().into_bytes().into(), -// user_2_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_2, -// Action::Bid { -// horse_name: String::from("Vitalik"), -// amount: user_2_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_3, -// horse_races_program.id().into_bytes().into(), -// user_3_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_3, -// Action::Bid { -// horse_name: String::from("Vitalik"), -// amount: user_3_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// let meta_state: MetaResponse = horse_races_program -// .read_state_using_wasm(0, "query", state_wasm, Some(MetaQuery::GetRuns)) -// .unwrap(); -// match meta_state { -// MetaResponse::Runs(runs) => { -// assert!(!runs.is_empty()); - -// let (id, run) = &runs[0]; - -// assert_eq!(*id, 1); -// assert!(!run.bidders.is_empty()); -// assert_eq!( -// *run.horses.get(&String::from("Max")).unwrap(), -// (Horse { max_speed: 65 }, user_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.horses.get(&String::from("Pegasus")).unwrap(), -// (Horse { max_speed: 50 }, user_1_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.horses.get(&String::from("Vitalik")).unwrap(), -// ( -// Horse { max_speed: 80 }, -// user_2_deposit_amount_after_fees + user_3_deposit_amount_after_fees -// ) -// ); - -// assert_eq!( -// *run.bidders.get(&USER.into()).unwrap(), -// (String::from("Max"), user_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.bidders.get(&USER_1.into()).unwrap(), -// (String::from("Pegasus"), user_1_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.bidders.get(&USER_2.into()).unwrap(), -// (String::from("Vitalik"), user_2_deposit_amount_after_fees) -// ); -// assert_eq!( -// *run.bidders.get(&USER_3.into()).unwrap(), -// (String::from("Vitalik"), user_3_deposit_amount_after_fees) -// ); -// } -// _ => std::panic!("Invalid meta state!"), -// } - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// let result = horse_races_program.send(MANAGER, Action::FinishLastRun); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(USER, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewWithdrawFinished { -// user: USER.into(), -// run_id: 1, -// amount: user_deposit_amount_after_fees, -// profit_amount: user_1_deposit_amount_after_fees -// + user_2_deposit_amount_after_fees -// + user_3_deposit_amount_after_fees -// } -// .encode() -// ))); - -// let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(USER.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance( -// user_deposit_amount_after_fees -// + user_1_deposit_amount_after_fees -// + user_2_deposit_amount_after_fees -// + user_3_deposit_amount_after_fees -// ) -// .encode() -// ))); -// } - -// #[test] -// fn success_withdraw_finished_more_winners() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let user_1_deposit_amount: u128 = 1000000; -// let user_1_deposit_fees_amount: u128 = -// user_1_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_1_deposit_amount_after_fees: u128 = user_1_deposit_amount - user_1_deposit_fees_amount; - -// let user_2_deposit_amount: u128 = 1000000; -// let user_2_deposit_fees_amount: u128 = -// user_2_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_2_deposit_amount_after_fees: u128 = user_2_deposit_amount - user_2_deposit_fees_amount; - -// let user_3_deposit_amount: u128 = 1000000; -// let user_3_deposit_fees_amount: u128 = -// user_3_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_3_deposit_amount_after_fees: u128 = user_3_deposit_amount - user_3_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); -// mint_token(&token_program, USER_1, user_1_deposit_amount); -// mint_token(&token_program, USER_2, user_2_deposit_amount); -// mint_token(&token_program, USER_3, user_3_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_1, -// horse_races_program.id().into_bytes().into(), -// user_1_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_1, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_1_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_2, -// horse_races_program.id().into_bytes().into(), -// user_2_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_2, -// Action::Bid { -// horse_name: String::from("Vitalik"), -// amount: user_2_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_3, -// horse_races_program.id().into_bytes().into(), -// user_3_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_3, -// Action::Bid { -// horse_name: String::from("Vitalik"), -// amount: user_3_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// let result = horse_races_program.send(MANAGER, Action::FinishLastRun); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(USER, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewWithdrawFinished { -// user: USER.into(), -// run_id: 1, -// amount: user_deposit_amount_after_fees, -// profit_amount: (user_2_deposit_amount_after_fees + user_3_deposit_amount_after_fees) -// / 2 -// } -// .encode() -// ))); - -// let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(USER.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance( -// user_deposit_amount_after_fees -// + ((user_2_deposit_amount_after_fees + user_3_deposit_amount_after_fees) / 2) -// ) -// .encode() -// ))); - -// let result = horse_races_program.send(USER_1, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER_1, -// Event::NewWithdrawFinished { -// user: USER_1.into(), -// run_id: 1, -// amount: user_1_deposit_amount_after_fees, -// profit_amount: (user_2_deposit_amount_after_fees + user_3_deposit_amount_after_fees) -// / 2 -// } -// .encode() -// ))); - -// let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(USER_1.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance( -// user_1_deposit_amount_after_fees -// + ((user_2_deposit_amount_after_fees + user_3_deposit_amount_after_fees) / 2) -// ) -// .encode() -// ))); -// } - -// #[test] -// fn success_withdraw_finished_all_winners() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let user_1_deposit_amount: u128 = 1000000; -// let user_1_deposit_fees_amount: u128 = -// user_1_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_1_deposit_amount_after_fees: u128 = user_1_deposit_amount - user_1_deposit_fees_amount; - -// let user_2_deposit_amount: u128 = 1000000; -// let user_2_deposit_fees_amount: u128 = -// user_2_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_2_deposit_amount_after_fees: u128 = user_2_deposit_amount - user_2_deposit_fees_amount; - -// let user_3_deposit_amount: u128 = 1000000; -// let user_3_deposit_fees_amount: u128 = -// user_3_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_3_deposit_amount_after_fees: u128 = user_3_deposit_amount - user_3_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); -// mint_token(&token_program, USER_1, user_1_deposit_amount); -// mint_token(&token_program, USER_2, user_2_deposit_amount); -// mint_token(&token_program, USER_3, user_3_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_1, -// horse_races_program.id().into_bytes().into(), -// user_1_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_1, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_1_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_2, -// horse_races_program.id().into_bytes().into(), -// user_2_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_2, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_2_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER_3, -// horse_races_program.id().into_bytes().into(), -// user_3_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER_3, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_3_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// set_oracle_value(&oracle_program, 2, 2141258129341892512471); - -// let result = horse_races_program.send(MANAGER, Action::FinishLastRun); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(USER, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewWithdrawFinished { -// user: USER.into(), -// run_id: 1, -// amount: user_deposit_amount_after_fees, -// profit_amount: 0, -// } -// .encode() -// ))); - -// let result = horse_races_program.send(USER_1, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER_1, -// Event::NewWithdrawFinished { -// user: USER_1.into(), -// run_id: 1, -// amount: user_1_deposit_amount_after_fees, -// profit_amount: 0, -// } -// .encode() -// ))); - -// let result = horse_races_program.send(USER_2, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER_2, -// Event::NewWithdrawFinished { -// user: USER_2.into(), -// run_id: 1, -// amount: user_2_deposit_amount_after_fees, -// profit_amount: 0, -// } -// .encode() -// ))); - -// let result = horse_races_program.send(USER_3, Action::WithdrawFinished(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER_3, -// Event::NewWithdrawFinished { -// user: USER_3.into(), -// run_id: 1, -// amount: user_3_deposit_amount_after_fees, -// profit_amount: 0, -// } -// .encode() -// ))); -// } - -// #[test] -// fn success_withdraw_canceled() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::CancelLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunCanceled(1).encode()))); - -// let result = horse_races_program.send(USER, Action::WithdrawCanceled(1)); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// USER, -// Event::NewWithdrawCanceled { -// user: USER.into(), -// run_id: 1, -// amount: user_deposit_amount_after_fees -// } -// .encode() -// ))); - -// let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(USER.into())); -// assert!(!result.main_failed()); -// assert!(result.contains(&( -// OWNER, -// fungible_token_io::FTEvent::Balance(user_deposit_amount_after_fees).encode() -// ))); -// } - -// #[test] -// fn fail_create_run_not_manager() { -// let sys = System::new(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// let result = horse_races_program.send( -// FAKE_MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses: horses.clone(), -// }, -// ); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_create_run_last_run_not_ended() { -// let sys = System::new(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses: horses.clone(), -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses: horses.clone(), -// }, -// ); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_bid_manager() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); -// mint_token(&token_program, MANAGER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// MANAGER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// MANAGER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_bid_last_run_not_bidding() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// sys.spend_blocks(1); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_cancel_last_run_not_manager() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(FAKE_MANAGER, Action::CancelLastRun); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_cancel_last_run_bidding_not_finished() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(MANAGER, Action::CancelLastRun); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_withdraw_finished_not_finished() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(MANAGER, Action::ProgressLastRun); -// assert!(!result.main_failed()); -// assert!(result.contains(&(MANAGER, Event::LastRunProgressed(1).encode()))); - -// let result = horse_races_program.send(USER, Action::WithdrawFinished(1)); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_withdraw_canceled_not_canceled() { -// let sys = System::new(); - -// let user_deposit_amount: u128 = 1000000; -// let user_deposit_fees_amount: u128 = user_deposit_amount * FEE_BPS as u128 / MAX_BPS as u128; -// let _user_deposit_amount_after_fees: u128 = user_deposit_amount - user_deposit_fees_amount; - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// mint_token(&token_program, USER, user_deposit_amount); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let mut horses = BTreeMap::new(); -// horses.insert(String::from("Pegasus"), Horse { max_speed: 50 }); -// horses.insert(String::from("Max"), Horse { max_speed: 65 }); -// horses.insert(String::from("Vitalik"), Horse { max_speed: 80 }); - -// let result = horse_races_program.send( -// MANAGER, -// Action::CreateRun { -// bidding_duration_ms: 1000, -// horses, -// }, -// ); -// assert!(!result.main_failed()); - -// set_oracle_value(&oracle_program, 1, 2141258129341892512471); - -// approve( -// &token_program, -// USER, -// horse_races_program.id().into_bytes().into(), -// user_deposit_amount, -// ); - -// let result = horse_races_program.send( -// USER, -// Action::Bid { -// horse_name: String::from("Max"), -// amount: user_deposit_amount, -// }, -// ); -// assert!(!result.main_failed()); - -// sys.spend_blocks(1); - -// let result = horse_races_program.send(USER, Action::WithdrawCanceled(1)); -// assert!(result.main_failed()); -// } - -// #[test] -// fn fail_update() { -// let sys = System::new(); - -// let (horse_races_program, oracle_program, token_program) = get_programs(&sys); -// init_oracle(&oracle_program); -// init_token(&token_program); - -// let result = horse_races_program.send( -// OWNER, -// InitConfig { -// manager: MANAGER.into(), -// token: TOKEN_ID.into(), -// oracle: ORACLE_ID.into(), -// fee_bps: FEE_BPS, -// }, -// ); -// assert!(!result.main_failed()); - -// let result = horse_races_program.send(FAKE_MANAGER, Action::UpdateManager(NEW_MANAGER.into())); -// assert!(result.main_failed()); - -// let result = horse_races_program.send(FAKE_MANAGER, Action::UpdateOracle(NEW_ORACLE.into())); -// assert!(result.main_failed()); - -// let result = horse_races_program.send(FAKE_MANAGER, Action::UpdateFeeBps(NEW_FEE_BPS)); -// assert!(result.main_failed()); - -// let result = horse_races_program.send(MANAGER, Action::UpdateFeeBps(10001)); -// assert!(result.main_failed()); - -// let result = horse_races_program.send(MANAGER, Action::UpdateFeeBps(30000)); -// assert!(result.main_failed()); -// } diff --git a/contracts/horse-races/tests/utils.rs b/contracts/horse-races/tests/utils.rs deleted file mode 100644 index c092529af..000000000 --- a/contracts/horse-races/tests/utils.rs +++ /dev/null @@ -1,113 +0,0 @@ -pub use gstd::{prelude::*, ActorId}; -use gtest::{Program, ProgramBuilder, System}; - -pub const FEE_BPS: u16 = 200; -pub const NEW_FEE_BPS: u16 = 500; -pub const HORSE_RACES_ID: u64 = 3; -pub const ORACLE_ID: u64 = 4; -pub const TOKEN_ID: u64 = 5; -pub const OWNER: u64 = 6; -pub const MANAGER: u64 = 7; -pub const NEW_MANAGER: u64 = 8; -pub const NEW_ORACLE: u64 = 9; -pub const FAKE_MANAGER: u64 = 10; -pub const USER: u64 = 11; -pub const USER_1: u64 = 12; -pub const USER_2: u64 = 13; -pub const USER_3: u64 = 14; - -pub fn get_programs(sys: &System) -> (Program<'_>, Program<'_>, Program<'_>) { - sys.init_logger(); - - let current_program = Program::current_with_id(sys, HORSE_RACES_ID); - - let oracle_program = ProgramBuilder::from_file( - "../target/wasm32-unknown-unknown/release/oracle_randomness.opt.wasm", - ) - .with_id(ORACLE_ID) - .build(sys); - let token_program = ProgramBuilder::from_file( - "../target/wasm32-unknown-unknown/release/fungible_token.opt.wasm", - ) - .with_id(TOKEN_ID) - .build(sys); - (current_program, oracle_program, token_program) -} - -pub fn init_oracle<'a>(oracle_program: &'a Program<'a>) { - let result = oracle_program.send( - OWNER, - oracle_randomness_io::InitConfig { - manager: MANAGER.into(), - }, - ); - assert!(!result.main_failed()); -} - -pub fn set_oracle_value<'a>(oracle_program: &'a Program<'a>, round: u128, value: u128) { - oracle_program.send( - MANAGER, - oracle_randomness_io::Action::SetRandomValue { - round, - value: oracle_randomness_io::state::Random { - randomness: (value, 0), - signature: String::from("signature"), - prev_signature: String::from("prev_signature"), - }, - }, - ); -} - -pub fn init_token<'a>(token_program: &'a Program<'a>) { - let result = token_program.send( - OWNER, - fungible_token_io::InitConfig { - name: String::from("TestToken"), - symbol: String::from("TST"), - decimals: 18, - }, - ); - - assert!(!result.main_failed()); -} - -pub fn mint_token<'a>(token_program: &'a Program<'a>, user: u64, amount: u128) { - let result = token_program.send(OWNER, fungible_token_io::FTAction::Mint(amount)); - assert!(!result.main_failed()); - - let result = token_program.send( - OWNER, - fungible_token_io::FTAction::Transfer { - from: OWNER.into(), - to: user.into(), - amount, - }, - ); - assert!(!result.main_failed()); - assert!(!result.others_failed()); - - let result = token_program.send(OWNER, fungible_token_io::FTAction::BalanceOf(user.into())); - - assert!(!result.main_failed()); - assert!(result.contains(&(OWNER, fungible_token_io::FTEvent::Balance(amount).encode()))); -} - -pub fn approve<'a>(token_program: &'a Program<'a>, from: u64, user: ActorId, amount: u128) { - let result = token_program.send( - from, - fungible_token_io::FTAction::Approve { to: user, amount }, - ); - assert!(result.contains(&( - from, - fungible_token_io::FTEvent::Approve { - from: from.into(), - to: user, - amount - } - .encode() - ))); -} - -pub fn get_state() -> Vec { - std::fs::read("../target/wasm32-unknown-unknown/release/horse_races_state.meta.wasm").unwrap() -} diff --git a/contracts/identity/Cargo.toml b/contracts/identity/Cargo.toml deleted file mode 100644 index 88b8c9935..000000000 --- a/contracts/identity/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "identity" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -identity-io.workspace = true - -[dev-dependencies] -gtest.workspace = true -sp-core.workspace = true -sha2.workspace = true -hex-literal.workspace = true - -# External binaries -identity-state.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -identity-io.workspace = true diff --git a/contracts/identity/README.md b/contracts/identity/README.md deleted file mode 100644 index b43b20c55..000000000 --- a/contracts/identity/README.md +++ /dev/null @@ -1,18 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=identity/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/identity_io) - -# Identity - -An example of the identity storage. - -### 🏗️ Building - -```sh -cargo b -r -p "identity*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "identity*" -``` diff --git a/contracts/identity/build.rs b/contracts/identity/build.rs deleted file mode 100644 index 35420205e..000000000 --- a/contracts/identity/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use identity_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/identity/io/Cargo.toml b/contracts/identity/io/Cargo.toml deleted file mode 100644 index 66dd8d47a..000000000 --- a/contracts/identity/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "identity-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/identity/io/src/lib.rs b/contracts/identity/io/src/lib.rs deleted file mode 100644 index 7397f158f..000000000 --- a/contracts/identity/io/src/lib.rs +++ /dev/null @@ -1,207 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, prelude::*}; - -/// Typings for u8 arrays. -pub type PublicKey = [u8; 32]; -pub type Signature = [u8; 64]; -pub type PieceId = u128; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(TypeInfo, Encode, Decode)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub user_claims: BTreeMap>, - pub piece_counter: u128, -} - -/// ClaimData represents an internal data stored inside a claim. -#[derive(Decode, Encode, TypeInfo, Debug, Clone, PartialEq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct ClaimData { - /// Set of hashed data (e.g. Vec::from(`[city]`, `[street]`)). - pub hashed_info: Vec<[u8; 32]>, - /// Date of issuance of this claim. - pub issuance_date: u64, - /// Validation status of the claim. - pub valid: bool, -} - -/// Claim is a main object stored inside the identity storage. -/// Consists of the claim data and all the public keys and signatures. -/// -/// # Requirements: -/// * all public keys and signatures MUST be non-zero arrays -#[derive(Decode, Encode, TypeInfo, Debug, Clone, PartialEq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Claim { - /// Issuer's public key (e.g. who issued the claim). Can be equal to subject keys - /// if the subject issues any claim about himself. - pub issuer: PublicKey, - /// Issuer's signature with the issuer keypair. - pub issuer_signature: Signature, - /// Subject's public key. - pub subject: PublicKey, - /// Map of verifiers PublicKey -> Signature - pub verifiers: Vec<(PublicKey, Signature)>, - /// Internal data of the claim - pub data: ClaimData, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IdentityAction { - /// Issues a new claim either by a subject himself - /// or by an issuer on behalf of the subject - /// - /// # Requirements: - /// * all public keys and signatures MUST be non-zero arrays - IssueClaim { - /// Issuer's public key. - issuer: PublicKey, - /// Issuer's signature with his keypair. - issuer_signature: Signature, - /// Subject's public key. - subject: PublicKey, - /// Claim's data. - data: ClaimData, - }, - /// Changes a validation status of the claim. - /// Can only be performed by a subject or an issuer of the claim. - /// - /// # Requirements: - /// * all public keys and signatures MUST be non-zero arrays - ChangeClaimValidationStatus { - /// Validator's public key. Can be either a subject's or an issuer's one. - validator: PublicKey, - /// Subject's public key. - subject: PublicKey, - /// Claim's id. - piece_id: PieceId, - /// New status of the claim. - status: bool, - }, - /// Verify a specific claim with a public key and a signature. - /// Can not be performed by an issuer or a subject. - /// - /// # Requirements: - /// * all public keys and signatures MUST be non-zero arrays - VerifyClaim { - /// Verifier's public key. - verifier: PublicKey, - /// Verifier's signature. - verifier_signature: Signature, - /// Subject's public key. - subject: PublicKey, - /// Claim's id. - piece_id: PieceId, - }, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IdentityEvent { - ClaimIssued { - /// Issuer's public key. - issuer: PublicKey, - /// Subject's public key. - subject: PublicKey, - /// Claim's id generated automatically. - piece_id: PieceId, - }, - ClaimValidationChanged { - /// Validator's public key. - validator: PublicKey, - /// Subjects's public key. - subject: PublicKey, - /// Claims' id. - piece_id: PieceId, - /// Claim's new validation status. - status: bool, - }, - VerifiedClaim { - /// Verifier's public key. - verifier: PublicKey, - /// Subject's public key. - subject: PublicKey, - /// Claim's id. - piece_id: PieceId, - }, -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IdentityStateQuery { - /// Get all the claims for a specified public key. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claims are queried - UserClaims(PublicKey), - /// Get a specific claim with the provided public key and a claim id. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claim is queried - /// `PieceId` - is the claim id - Claim(PublicKey, PieceId), - /// Get all the verifiers' public keys for a corresponding claim. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claim is queried - /// `PieceId` - is the claim id - Verifiers(PublicKey, PieceId), - /// Get claim's validation status. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claim is queried - /// `PieceId` - is the claim id - ValidationStatus(PublicKey, PieceId), - /// Get claim's issuance date. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claim is queried - /// `PieceId` - is the claim id - Date(PublicKey, PieceId), - /// Check the claim with a hash from it's data set. - /// - /// Arguments: - /// `PublicKey` - is the public key of a user whose claim is queried - /// `PieceId` - is the claim id - /// `[u8; 32]` - is the hash being queried. - /// If it is in the claim hashed_info set then true is returned. Otherwise - false. - CheckClaim(PublicKey, PieceId, [u8; 32]), -} - -#[derive(Debug, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum IdentityStateReply { - UserClaims(Vec<(PieceId, Claim)>), - Claim(Option), - Verifiers(Vec), - ValidationStatus(bool), - Date(u64), - CheckedClaim(PublicKey, PieceId, bool), -} - -/// Initializes an identity storage. -#[derive(Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitIdentity; diff --git a/contracts/identity/src/lib.rs b/contracts/identity/src/lib.rs deleted file mode 100644 index 5054b780b..000000000 --- a/contracts/identity/src/lib.rs +++ /dev/null @@ -1,200 +0,0 @@ -#![no_std] - -use gstd::{collections::HashMap, msg, prelude::*}; -use identity_io::*; - -#[derive(Debug, Default)] -struct IdentityStorage { - user_claims: HashMap>, - piece_counter: u128, -} - -static mut IDENTITY: Option = None; - -impl IdentityStorage { - /// Creates a new claim. - /// - /// # Requirements: - /// * all the public keys and signatures MUST be non-zero. - /// - /// # Arguments: - /// * `issuer` - the claim issuer's public key. - /// * `issuer_signature` - the corresponding signature with the `issuer` public key. - /// * `subject`- the subject's public key. - /// * `data` - claim's data. - fn issue_claim( - &mut self, - issuer: PublicKey, - issuer_signature: Signature, - subject: PublicKey, - data: ClaimData, - ) { - self.user_claims.entry(subject).or_default().insert( - self.piece_counter, - Claim { - issuer, - issuer_signature, - subject, - verifiers: vec![], - data, - }, - ); - - msg::reply( - IdentityEvent::ClaimIssued { - issuer, - subject, - piece_id: self.piece_counter, - }, - 0, - ) - .expect("IDENTITY: Error during replying with IdentityEvent::ClaimIssued"); - - self.piece_counter += 1; - } - - /// Changes claim's validation status. - /// - /// # Requirements: - /// * all the public keys and signatures MUST be non-zero. - /// - /// # Arguments: - /// * `validator` - the claim issuer's or subject's public key. - /// * `subject`- the subject's public key. - /// * `piece_id` - claim's id. - /// * `status` - new claim's status. - fn change_validation_status( - &mut self, - validator: PublicKey, - subject: PublicKey, - piece_id: PieceId, - status: bool, - ) { - let data_piece = self - .user_claims - .get(&subject) - .expect("The user has no claims") - .get(&piece_id) - .expect("The user has not such claim with the provided piece_id"); - if data_piece.subject != validator && data_piece.issuer != validator { - panic!("IDENTITY: You can not change this claim"); - } - self.user_claims - .entry(subject) - .or_default() - .entry(piece_id) - .and_modify(|claim| claim.data.valid = status); - - msg::reply( - IdentityEvent::ClaimValidationChanged { - validator, - subject, - piece_id, - status, - }, - 0, - ) - .expect("IDENTITY: Error during replying with IdentityEvent::ClaimValidationChanged"); - } - - /// Verifies the claim. - /// - /// # Requirements: - /// * all the public keys and signatures MUST be non-zero. - /// * `verifier` - MUST differ from the claim's subject or issuer. - /// - /// # Arguments: - /// * `verifier` - the claim verifier's public key. - /// * `verifier_signature` - the corresponding signature with the `verifier` public key. - /// * `piece_id` - claim's id. - /// * `subject` - subject's public key. - fn verify_claim( - &mut self, - verifier: PublicKey, - verifier_signature: Signature, - subject: PublicKey, - piece_id: PieceId, - ) { - let piece = self - .user_claims - .get(&subject) - .expect("The user has no claims") - .get(&piece_id) - .expect("The user has not such claim with the provided piece_id"); - if piece.issuer == verifier || piece.subject == verifier { - panic!("IDENTITY: You can not verify this claim"); - } - self.user_claims - .entry(subject) - .or_default() - .entry(piece_id) - .and_modify(|claim| { - claim.verifiers.push((verifier, verifier_signature)); - }); - msg::reply( - IdentityEvent::VerifiedClaim { - verifier, - subject, - piece_id, - }, - 0, - ) - .expect("IDENTITY: Error during replying with IdentityEvent::VerifiedClaim"); - } -} - -#[no_mangle] -extern fn init() { - let id_storage = IdentityStorage { - piece_counter: 0, - ..Default::default() - }; - unsafe { - IDENTITY = Some(id_storage); - } -} - -#[gstd::async_main] -async fn main() { - let action: IdentityAction = msg::load().expect("Unable to decode IdentityAction"); - let identity = unsafe { IDENTITY.get_or_insert(Default::default()) }; - match action { - IdentityAction::IssueClaim { - issuer, - issuer_signature, - subject, - data, - } => identity.issue_claim(issuer, issuer_signature, subject, data), - IdentityAction::ChangeClaimValidationStatus { - validator, - subject, - piece_id, - status, - } => identity.change_validation_status(validator, subject, piece_id, status), - IdentityAction::VerifyClaim { - verifier, - verifier_signature, - subject, - piece_id, - } => identity.verify_claim(verifier, verifier_signature, subject, piece_id), - } -} - -#[no_mangle] -extern fn state() { - let identity = unsafe { IDENTITY.get_or_insert(Default::default()) }; - - msg::reply( - State { - user_claims: identity - .user_claims - .clone() - .into_iter() - .map(|(k, v)| (k, v.into_iter().collect())) - .collect(), - piece_counter: identity.piece_counter, - }, - 0, - ) - .expect("Error during replying from `state()`"); -} diff --git a/contracts/identity/state/Cargo.toml b/contracts/identity/state/Cargo.toml deleted file mode 100644 index d610153dc..000000000 --- a/contracts/identity/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "identity-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -identity-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/identity/state/build.rs b/contracts/identity/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/identity/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/identity/state/src/lib.rs b/contracts/identity/state/src/lib.rs deleted file mode 100644 index 1fdf5d3d9..000000000 --- a/contracts/identity/state/src/lib.rs +++ /dev/null @@ -1,66 +0,0 @@ -#![no_std] - -use gstd::prelude::*; -use identity_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = identity_io::State; - - pub fn query(mut state: State, query: IdentityStateQuery) -> IdentityStateReply { - match query { - IdentityStateQuery::UserClaims(pkey) => { - IdentityStateReply::UserClaims(match state.user_claims.get(&pkey) { - None => vec![], - Some(claims) => Vec::from_iter(claims.clone()), - }) - } - IdentityStateQuery::Claim(pkey, piece_id) => IdentityStateReply::Claim( - state - .user_claims - .entry(pkey) - .or_default() - .get(&piece_id) - .cloned(), - ), - IdentityStateQuery::ValidationStatus(pkey, piece_id) => { - let mut status = false; - if let Some(user_claim) = state.user_claims.get(&pkey) { - if let Some(claim) = user_claim.get(&piece_id) { - status = claim.data.valid - } - } - IdentityStateReply::ValidationStatus(status) - } - IdentityStateQuery::Date(pkey, piece_id) => { - let mut date: u64 = 0; - if let Some(user_claim) = state.user_claims.get(&pkey) { - if let Some(claim) = user_claim.get(&piece_id) { - date = claim.data.issuance_date - } - } - IdentityStateReply::Date(date) - } - IdentityStateQuery::Verifiers(pkey, piece_id) => { - let mut verifiers: Vec = vec![]; - if let Some(user_claim) = state.user_claims.get(&pkey) { - if let Some(claim) = user_claim.get(&piece_id) { - let (public_keys, _signatures): (Vec, Vec) = - claim.verifiers.clone().into_iter().unzip(); - verifiers = public_keys; - } - } - IdentityStateReply::Verifiers(verifiers) - } - IdentityStateQuery::CheckClaim(pkey, piece_id, hash) => { - let mut status = false; - if let Some(user_claim) = state.user_claims.get(&pkey) { - if let Some(claim) = user_claim.get(&piece_id) { - status = claim.data.hashed_info.contains(&hash) - } - } - IdentityStateReply::CheckedClaim(pkey, piece_id, status) - } - } - } -} diff --git a/contracts/identity/tests/identity_tests.rs b/contracts/identity/tests/identity_tests.rs deleted file mode 100644 index e373c5d90..000000000 --- a/contracts/identity/tests/identity_tests.rs +++ /dev/null @@ -1,445 +0,0 @@ -use gstd::prelude::*; -use gtest::System; -use hex_literal::hex; -use identity_io::*; -use sha2::{Digest, Sha256}; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -mod utils; -use utils::*; - -const USER: u64 = 10; -const PIECE_ID: PieceId = 0; -const DATE: u64 = 12288282; - -#[test] -fn issue_claim_by_subject() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); -} - -#[test] -fn issue_claim_by_issuer() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - let issuer_pair = Sr25519Pair::from_seed(&hex!( - "9D61B2EBC4197073EF857A385EB42990CB647497353884B9703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: issuer_pair.public().0, - issuer_signature: issuer_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); -} - -#[test] -fn issue_multiple_claim() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let city = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let mut hasher = Sha256::new(); - hasher.update(b"Nikolskaya"); - let street = hasher.finalize().as_slice().try_into().expect("Wrong size"); - - let claim_data = ClaimData { - hashed_info: Vec::from([city, street]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); -} - -#[test] -fn validation_status_from_subject() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - check_valid_state_utils(&id_program, subject_pair.public().0, PIECE_ID, true); - - validation_claim_utils( - &id_program, - USER, - subject_pair.public().0, - subject_pair.public().0, - PIECE_ID, - false, - false, - ); - check_valid_state_utils(&id_program, subject_pair.public().0, PIECE_ID, false); -} - -#[test] -fn validation_status_from_issuer() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - let issuer_pair = Sr25519Pair::from_seed(&hex!( - "9D61B2EBC4197073EF857A385EB42990CB647497353884B9703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: issuer_pair.public().0, - issuer_signature: issuer_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - - validation_claim_utils( - &id_program, - USER, - issuer_pair.public().0, - subject_pair.public().0, - PIECE_ID, - false, - false, - ); - check_valid_state_utils(&id_program, subject_pair.public().0, PIECE_ID, false); -} - -#[test] -fn validation_status_failures() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - let issuer_pair = Sr25519Pair::from_seed(&hex!( - "9D61B2EBC4197073EF857A385EB42990CB647497353884B9703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: issuer_pair.public().0, - issuer_signature: issuer_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - - // try to validate with the third key - let third_key = Sr25519Pair::from_seed(&hex!( - "9A61B2EBC4197073EF857A385EB42990CB647497353884B9703BAC031CAE7F60" - )); - validation_claim_utils( - &id_program, - USER, - third_key.public().0, - subject_pair.public().0, - PIECE_ID, - false, - true, - ); - // validate wrong PIECE_ID - validation_claim_utils( - &id_program, - USER, - subject_pair.public().0, - subject_pair.public().0, - PIECE_ID + 1, - false, - true, - ); - // validate the user with no claims - validation_claim_utils( - &id_program, - USER, - subject_pair.public().0, - third_key.public().0, - PIECE_ID, - false, - true, - ); -} - -#[test] -fn verify_claim() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data.clone(), - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - - let verifier_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5D60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - verify_claim_utils( - &id_program, - USER, - verifier_pair.public().0, - verifier_pair.sign(claim_data.encode().as_slice()).0, - subject_pair.public().0, - PIECE_ID, - false, - ); - check_verifiers_state_utils( - &id_program, - subject_pair.public().0, - PIECE_ID, - vec![verifier_pair.public().0], - ); -} - -#[test] -fn verify_claim_failures() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let result = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let claim_data = ClaimData { - hashed_info: Vec::from([result]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data.clone(), - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - - let verifier_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5D60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - // verify user with no claims - verify_claim_utils( - &id_program, - USER, - verifier_pair.public().0, - verifier_pair.sign(claim_data.encode().as_slice()).0, - verifier_pair.public().0, - PIECE_ID, - true, - ); - // verify wrong piece_id - - verify_claim_utils( - &id_program, - USER, - verifier_pair.public().0, - verifier_pair.sign(claim_data.encode().as_slice()).0, - subject_pair.public().0, - PIECE_ID + 1, - true, - ); -} - -#[test] -fn check_claim() { - let sys = System::new(); - let id_program = init_identity(&sys, USER); - let subject_pair = Sr25519Pair::from_seed(&hex!( - "9D61B19DEFFD5A60BA844AF492EC2CC44449C5697B326919703BAC031CAE7F60" - )); - - let mut hasher = Sha256::new(); - hasher.update(b"Amsterdam"); - - // read hash digest and consume hasher - let city = hasher.finalize().as_slice().try_into().expect("Wrong size"); - let mut hasher = Sha256::new(); - hasher.update(b"Nikolskaya"); - let street = hasher.finalize().as_slice().try_into().expect("Wrong size"); - - let claim_data = ClaimData { - hashed_info: Vec::from([city, street]), - issuance_date: DATE, - valid: true, - }; - - let claim = Claim { - issuer: subject_pair.public().0, - issuer_signature: subject_pair.sign(claim_data.encode().as_slice()).0, - subject: subject_pair.public().0, - verifiers: vec![], - data: claim_data, - }; - - issue_claim_utils(&id_program, USER, claim.clone(), PIECE_ID, false); - let claims = vec![(PIECE_ID, claim.clone())]; - check_user_claims_state_utils(&id_program, subject_pair.public().0, claims); - check_claim_state_utils(&id_program, subject_pair.public().0, PIECE_ID, claim); - check_date_state_utils(&id_program, subject_pair.public().0, PIECE_ID, DATE); - - check_claim_hash_state_utils(&id_program, subject_pair.public().0, PIECE_ID, city, true); - check_claim_hash_state_utils( - &id_program, - subject_pair.public().0, - PIECE_ID, - [0; 32], - false, - ); -} diff --git a/contracts/identity/tests/utils.rs b/contracts/identity/tests/utils.rs deleted file mode 100644 index acddb4332..000000000 --- a/contracts/identity/tests/utils.rs +++ /dev/null @@ -1,251 +0,0 @@ -use gstd::prelude::*; -use gtest::{Program, System}; -use identity_io::*; - -// MESSAGES -pub fn init_identity(sys: &System, user: u64) -> Program<'_> { - sys.init_logger(); - let id_program = Program::current(sys); - assert!(!id_program.send(user, InitIdentity).main_failed()); - - id_program -} - -pub fn issue_claim_utils( - id_program: &Program<'_>, - user: u64, - claim: Claim, - piece_id: PieceId, - should_fail: bool, -) { - let res = id_program.send( - user, - IdentityAction::IssueClaim { - issuer: claim.issuer, - issuer_signature: claim.issuer_signature, - subject: claim.subject, - data: claim.data, - }, - ); - - if should_fail { - assert!(res.main_failed()); - } else { - assert!(res.contains(&( - user, - IdentityEvent::ClaimIssued { - issuer: claim.issuer, - subject: claim.subject, - piece_id, - } - .encode() - ))); - } -} - -pub fn validation_claim_utils( - id_program: &Program<'_>, - user: u64, - validator: PublicKey, - subject: PublicKey, - piece_id: PieceId, - status: bool, - should_fail: bool, -) { - let res = id_program.send( - user, - IdentityAction::ChangeClaimValidationStatus { - validator, - subject, - piece_id, - status, - }, - ); - - if should_fail { - assert!(res.main_failed()); - } else { - assert!(res.contains(&( - user, - IdentityEvent::ClaimValidationChanged { - validator, - subject, - piece_id, - status, - } - .encode() - ))); - } -} - -pub fn verify_claim_utils( - id_program: &Program<'_>, - user: u64, - verifier: PublicKey, - verifier_signature: Signature, - subject: PublicKey, - piece_id: PieceId, - should_fail: bool, -) { - let res = id_program.send( - user, - IdentityAction::VerifyClaim { - verifier, - verifier_signature, - subject, - piece_id, - }, - ); - - if should_fail { - assert!(res.main_failed()); - } else { - assert!(res.contains(&( - user, - IdentityEvent::VerifiedClaim { - verifier, - subject, - piece_id, - } - .encode() - ))); - } -} - -// META-STATE -pub fn check_claim_hash_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - piece_id: PieceId, - hash: [u8; 32], - status: bool, -) { - match query_state( - id_program, - IdentityStateQuery::CheckClaim(subject, piece_id, hash), - ) { - IdentityStateReply::CheckedClaim(_, _, real_status) => { - if real_status != status { - std::panic!("IDENTITY: Checking statuses differ") - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::CheckClaim payload has occurred" - ) - } - } -} -pub fn check_user_claims_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - claims: Vec<(PieceId, Claim)>, -) { - match query_state(id_program, IdentityStateQuery::UserClaims(subject)) { - IdentityStateReply::UserClaims(real_claims) => { - if real_claims != claims { - std::panic!("IDENTITY: User claims differ") - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::UserClaims payload has occurred" - ) - } - } -} - -pub fn check_claim_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - piece_id: PieceId, - claim: Claim, -) { - match query_state(id_program, IdentityStateQuery::Claim(subject, piece_id)) { - IdentityStateReply::Claim(real_claim) => { - if claim != real_claim.expect("IDENTITY: No such claim") { - std::panic!("IDENTITY: Claims differ"); - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::Claim payload has occurred" - ) - } - } -} - -pub fn check_verifiers_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - piece_id: PieceId, - verifiers: Vec, -) { - match query_state(id_program, IdentityStateQuery::Verifiers(subject, piece_id)) { - IdentityStateReply::Verifiers(real_verifiers) => { - if real_verifiers != verifiers { - std::panic!("IDENTITY: Verifiers differ"); - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::Verifiers payload has occurred" - ) - } - } -} - -pub fn check_date_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - piece_id: PieceId, - date: u64, -) { - match query_state(id_program, IdentityStateQuery::Date(subject, piece_id)) { - IdentityStateReply::Date(real_date) => { - if real_date != date { - std::panic!("IDENTITY: Dates differ"); - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::Date payload has occurred" - ) - } - } -} - -pub fn check_valid_state_utils( - id_program: &Program<'_>, - subject: PublicKey, - piece_id: PieceId, - valid: bool, -) { - match query_state( - id_program, - IdentityStateQuery::ValidationStatus(subject, piece_id), - ) { - IdentityStateReply::ValidationStatus(real_valid) => { - if real_valid != valid { - std::panic!("IDENTITY: Validation status differ"); - } - } - _ => { - unreachable!( - "Unreachable metastate reply for the IdentityStateQuery::ValidationStatus payload has occurred" - ) - } - } -} - -pub fn query_state(id_program: &Program<'_>, query: IdentityStateQuery) -> IdentityStateReply { - id_program - .read_state_using_wasm( - 0, - "query", - std::fs::read("../target/wasm32-unknown-unknown/release/identity_state.meta.wasm") - .unwrap(), - Some(query), - ) - .unwrap() -} diff --git a/contracts/nft-marketplace/Cargo.toml b/contracts/nft-marketplace/Cargo.toml deleted file mode 100644 index a121627af..000000000 --- a/contracts/nft-marketplace/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "nft-marketplace" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -non-fungible-token-io.workspace = true -nft-marketplace-io.workspace = true -sharded-fungible-token-io.workspace = true -gear-lib-old.workspace = true -async-trait.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true -blake2-rfc.workspace = true - -# External binaries - -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true -non-fungible-token.workspace = true - -[build-dependencies] -nft-marketplace-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/nft-marketplace/README.md b/contracts/nft-marketplace/README.md deleted file mode 100644 index 8e1a55b26..000000000 --- a/contracts/nft-marketplace/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=nft-marketplace/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/nft_marketplace_io) - -# [NFT marketplace](https://wiki.gear-tech.io/docs/examples/NFTs/nft-marketplace/marketplace/) - -### 🏗️ Building - -```sh -cargo b -r -p "nft-marketplace*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "nft-marketplace*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "nft-marketplace*" -``` diff --git a/contracts/nft-marketplace/build.rs b/contracts/nft-marketplace/build.rs deleted file mode 100644 index b856ee116..000000000 --- a/contracts/nft-marketplace/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use nft_marketplace_io::MarketMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/nft-marketplace/io/Cargo.toml b/contracts/nft-marketplace/io/Cargo.toml deleted file mode 100644 index 1189beb24..000000000 --- a/contracts/nft-marketplace/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "nft-marketplace-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -primitive-types.workspace = true diff --git a/contracts/nft-marketplace/io/src/lib.rs b/contracts/nft-marketplace/io/src/lib.rs deleted file mode 100644 index 62696eec2..000000000 --- a/contracts/nft-marketplace/io/src/lib.rs +++ /dev/null @@ -1,387 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{ - collections::{BTreeMap, BTreeSet}, - prelude::*, - ActorId, -}; -use primitive_types::U256; - -pub type ContractId = ActorId; -pub type TokenId = U256; -pub type Price = u128; -pub type TransactionId = u64; - -pub struct MarketMetadata; - -impl Metadata for MarketMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Default, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Market { - pub admin_id: ActorId, - pub treasury_id: ActorId, - pub treasury_fee: u16, - pub items: BTreeMap<(ContractId, TokenId), Item>, - pub approved_nft_contracts: BTreeSet, - pub approved_ft_contracts: BTreeSet, - pub tx_id: TransactionId, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct ItemInfoArgs { - nft_contract_id: ActorId, - token_id: TokenId, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitMarket { - pub admin_id: ActorId, - pub treasury_id: ActorId, - pub treasury_fee: u16, -} - -#[derive(Debug, PartialEq, Eq, Default, Encode, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Auction { - pub bid_period: u64, - pub started_at: u64, - pub ended_at: u64, - pub current_price: Price, - pub current_winner: ActorId, -} - -#[derive(Debug, Encode, Decode, TypeInfo, Clone, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MarketTx { - CreateAuction, - Bid { - account: ActorId, - price: Price, - }, - SettleAuction, - Sale { - buyer: ActorId, - }, - Offer { - ft_id: ContractId, - price: Price, - account: ActorId, - }, - AcceptOffer, - Withdraw { - ft_id: ContractId, - price: Price, - account: ActorId, - }, -} - -#[derive(Debug, PartialEq, Eq, Encode, Decode, TypeInfo, Clone, Default)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Item { - pub token_id: TokenId, - pub owner: ActorId, - pub ft_contract_id: Option, - pub price: Option, - pub auction: Option, - pub offers: BTreeMap<(Option, Price), ActorId>, - pub tx: Option<(TransactionId, MarketTx)>, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MarketAction { - /// Adds NFT contract addresses that can be listed on marketplace. - /// - /// # Requirements: - /// Only admin can add approved NFT accounts. - /// - /// On success replies [`MarketEvent::NftContractAdded`]. - AddNftContract( - /// the NFT contract address - ContractId, - ), - - /// Adds the contract addresses of fungible tokens with which users can pay for NFTs. - /// - /// # Requirements: - /// Only admin can add approved fungible-token accounts. - /// - /// On success replies [`MarketEvent::FtContractAdded`]. - AddFTContract( - /// the FT contract address - ContractId, - ), - - /// Adds data on market item. - /// If the item of that NFT does not exist on the marketplace then it will be listed. - /// If the item exists then that action is used to change the price or suspend the sale. - /// - /// # Requirements - /// * [`msg::source()`](gstd::msg::source) must be the NFT owner - /// * `nft_contract_id` must be in the list of `approved_nft_contracts` - /// * if item already exists, then it cannot be changed if there is an active auction - /// - /// On success replies [`MarketEvent::MarketDataAdded`]. - AddMarketData { - /// the NFT contract address - nft_contract_id: ContractId, - /// the fungible token contract address (If it is `None` then the item is traded for the native value) - ft_contract_id: Option, - /// the NFT id - token_id: TokenId, - /// the NFT price (if it is `None` then the item is not on the sale) - price: Option, - }, - - /// Sells the NFT. - /// - /// # Requirements: - /// * The NFT item must exists and be on sale. - /// * If the NFT is sold for a native Gear value, then a buyer must attach value equals to the price. - /// * If the NFT is sold for fungible tokens then a buyer must have enough tokens in the fungible token contract. - /// * There must be no an opened auction on the item. - /// - /// On success replies [`MarketEvent::ItemSold`]. - BuyItem { - /// NFT contract address - nft_contract_id: ContractId, - /// the token ID - token_id: TokenId, - }, - - /// Creates an auction for selected item. - /// If the NFT item doesn't exist on the marketplace then it will be listed - /// - /// Requirements: - /// * Only the item owner can start auction. - /// * `nft_contract_id` must be in the list of `approved_nft_contracts` - /// * There must be no active auction. - /// - /// On success replies [`MarketEvent::AuctionCreated`]. - CreateAuction { - /// the NFT contract address - nft_contract_id: ContractId, - /// the fungible token contract address (If it is `None` then the item is traded for the native value) - ft_contract_id: Option, - /// the NFT id - token_id: TokenId, - /// the starting price - min_price: Price, - /// the time interval the auction is extended if bid is made if the auction ends before `exec::blocktimestamp() + bid_period` - bid_period: u64, - /// the auction duration - duration: u64, - }, - - /// Adds a bid to an ongoing auction. - /// - /// # Requirements: - /// * The item must extsts. - /// * The auction must exists on the item. - /// * If the NFT is sold for a native Gear value, then a buyer must attach value equals to the price indicated in the arguments. - /// * If the NFT is sold for fungible tokens then a buyer must have enough tokens in the fungible token contract. - /// * `price` must be greater then the current offered price for that item. - /// - /// On success replies [`MarketEvent::BidAdded`]. - AddBid { - /// the NFT contract address. - nft_contract_id: ContractId, - /// * `token_id`: the NFT id. - token_id: TokenId, - /// the offered price. - price: Price, - }, - - /// Settles the auction. - /// - /// Requirements: - /// * The auction must be over. - /// - /// On successful auction replies [`MarketEvent::AuctionSettled`]. - /// If no bids were made replies [`MarketEvent::AuctionCancelled`]. - SettleAuction { - /// the NFT contract address - nft_contract_id: ContractId, - /// the NFT id - token_id: TokenId, - }, - - /// Adds a price offer to the item. - /// - /// Requirements: - /// * NFT item must exists and be listed on the marketplace. - /// * There must be no an ongoing auction on the item. - /// * If a user makes an offer in native Gear value, then he must attach value equals to the price indicated in the arguments. - /// * If a user makes an offer in fungible tokens then he must have enough tokens in the fungible token contract. - /// * The price can not be equal to 0. - /// * There must be no identical offers on the item. - /// - /// On success replies [`MarketEvent::OfferAdded`]. - AddOffer { - /// the NFT contract address - nft_contract_id: ContractId, - /// the FT contract address (if it is `None, the offer is made for the native value) - ft_contract_id: Option, - /// the NFT id - token_id: TokenId, - /// the offer price - price: Price, - }, - - /// Withdraws tokens. - /// - /// Requirements: - /// * NFT item must exists and be listed on the marketplace. - /// * Only the offer creator can withdraw his tokens. - /// * The offer with indicated hash must exist. - /// - /// On success replies [`MarketEvent::Withdraw`]. - Withdraw { - /// the NFT contract address - nft_contract_id: ContractId, - /// the FT contract address (if it is `None, the offer is made for the native value) - ft_contract_id: Option, - /// the NFT id - token_id: TokenId, - /// The offered price (native value) - price: Price, - }, - - /// Accepts an offer. - /// - /// Requirements: - /// * NFT item must exists and be listed on the marketplace. - /// * Only owner can accept offer. - /// * There must be no ongoing auction. - /// * The offer with indicated hash must exist. - /// - /// On success replies [`MarketEvent::ItemSold`]. - AcceptOffer { - /// the NFT contract address - nft_contract_id: ContractId, - /// the NFT id - token_id: TokenId, - /// the fungible token contract address - ft_contract_id: Option, - /// the offer price - price: Price, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MarketEvent { - NftContractAdded(ContractId), - FtContractAdded(ContractId), - MarketDataAdded { - nft_contract_id: ContractId, - token_id: TokenId, - price: Option, - }, - ItemSold { - owner: ActorId, - nft_contract_id: ContractId, - token_id: TokenId, - }, - BidAdded { - nft_contract_id: ContractId, - token_id: TokenId, - price: Price, - }, - AuctionCreated { - nft_contract_id: ContractId, - token_id: TokenId, - price: Price, - }, - AuctionSettled { - nft_contract_id: ContractId, - token_id: TokenId, - price: Price, - }, - AuctionCancelled { - nft_contract_id: ContractId, - token_id: TokenId, - }, - NFTListed { - nft_contract_id: ContractId, - owner: ActorId, - token_id: TokenId, - price: Option, - }, - OfferAdded { - nft_contract_id: ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Price, - }, - OfferAccepted { - nft_contract_id: ContractId, - token_id: TokenId, - new_owner: ActorId, - price: Price, - }, - Withdraw { - nft_contract_id: ActorId, - token_id: TokenId, - price: Price, - }, - TransactionFailed, - RerunTransaction, - TransferValue, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum MarketErr { - NFTTransferFailed, - TokenTransferFailed, - WrongTransaction, - RerunTransaction, - WrongPrice, - InvalidCaller, - ItemOnAuction, - ItemDoesNotExists, - ItemIsNotOnSale, - AuctionBidPeriodOrDurationIsInvalid, - AuctionMinPriceIsZero, - AuctionIsAlreadyExists, - AuctionIsAlreadyEnded, - AuctionIsNotOver, - AuctionDoesNotExists, - AuctionIsOpened, - ContractNotApproved, - OfferAlreadyExists, - OfferShouldAcceptedByOwner, - OfferIsNotExists, -} - -pub fn all_items(state: Market) -> Vec { - state.items.values().cloned().collect() -} - -pub fn item_info(state: Market, args: &ItemInfoArgs) -> Option { - state - .items - .get(&(args.nft_contract_id, args.token_id)) - .cloned() -} diff --git a/contracts/nft-marketplace/src/auction.rs b/contracts/nft-marketplace/src/auction.rs deleted file mode 100644 index d48efb024..000000000 --- a/contracts/nft-marketplace/src/auction.rs +++ /dev/null @@ -1,447 +0,0 @@ -use crate::{ - nft_messages::{nft_transfer, payouts, Payout}, - payment::transfer_tokens, - {MarketHandler, BASE_PERCENT, MINIMUM_VALUE}, -}; -use gstd::{exec, msg, prelude::*, ActorId}; -use nft_marketplace_io::*; - -const MIN_BID_PERIOD: u64 = 60_000; - -#[async_trait::async_trait] -pub trait AuctionHandler { - async fn create_auction( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - min_price: Price, - bid_period: u64, - duration: u64, - ) -> Result; - - /// Settles the auction. - /// - /// Requirements: - /// * The auction must be over. - /// - /// Arguments: - /// * `nft_contract_id`: the NFT contract address - /// * `token_id`: the NFT id - /// - /// On success auction replies [`MarketEvent::AuctionSettled`]. - /// If no bids were made replies [`MarketEvent::AuctionCancelled`]. - #[allow(unused_must_use)] - async fn settle_auction( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ) -> Result; - - async fn add_bid( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - price: Price, - ) -> Result; -} - -#[async_trait::async_trait] -impl AuctionHandler for Market { - async fn create_auction( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - min_price: Price, - bid_period: u64, - duration: u64, - ) -> Result { - self.check_approved_nft_contract(nft_contract_id); - self.check_approved_ft_contract(ft_contract_id); - let contract_and_token_id = (*nft_contract_id, token_id); - - if let Some(item) = self.items.get_mut(&contract_and_token_id) { - assert_eq!( - item.owner, - msg::source(), - "Only owner has a right to add NFT to the marketplace and start the auction" - ); - - if item.auction.is_some() { - return Err(MarketErr::AuctionIsAlreadyExists); - } - - assert!( - item.price.is_none(), - "Remove the item from the sale before starting the auction" - ); - - if bid_period < MIN_BID_PERIOD || duration < MIN_BID_PERIOD { - return Err(MarketErr::AuctionBidPeriodOrDurationIsInvalid); - } - - #[allow(clippy::absurd_extreme_comparisons)] - if min_price <= 0 { - return Err(MarketErr::AuctionMinPriceIsZero); - } - - if let Some((tx_id, tx)) = item.tx.clone() { - if tx == MarketTx::CreateAuction { - return create_auction_tx( - tx_id, - item, - nft_contract_id, - ft_contract_id, - token_id, - min_price, - bid_period, - duration, - ) - .await; - } else { - return Err(MarketErr::WrongTransaction); - } - } - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(1); - item.tx = Some((tx_id, MarketTx::CreateAuction)); - - create_auction_tx( - tx_id, - item, - nft_contract_id, - ft_contract_id, - token_id, - min_price, - bid_period, - duration, - ) - .await - } else { - Err(MarketErr::ItemDoesNotExists) - } - } - - /// Settles the auction. - /// - /// Requirements: - /// * The auction must be over. - /// - /// Arguments: - /// * `nft_contract_id`: the NFT contract address - /// * `token_id`: the NFT id - /// - /// On success auction replies [`MarketEvent::AuctionSettled`]. - /// If no bids were made replies [`MarketEvent::AuctionCancelled`]. - #[allow(unused_must_use)] - async fn settle_auction( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - if let Some(item) = self.items.get_mut(&contract_and_token_id) { - let Some(auction) = item.auction.clone() else { - return Err(MarketErr::AuctionDoesNotExists); - }; - - if auction.ended_at > exec::block_timestamp() { - return Err(MarketErr::AuctionIsNotOver); - } - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::Bid { account, price } => { - let ft_id = item.ft_contract_id.expect("Can't be None"); - add_bid_tx( - tx_id, - item, - nft_contract_id, - &ft_id, - token_id, - &account, - price, - ) - .await; - } - MarketTx::SettleAuction => { - let price = auction.current_price; - // calculate fee for treasury - let treasury_fee = - price * (self.treasury_fee * BASE_PERCENT) as u128 / 10_000u128; - - // payouts for NFT sale (includes royalty accounts and seller) - let mut payouts = - payouts(nft_contract_id, &item.owner, price - treasury_fee).await; - payouts.insert(self.treasury_id, treasury_fee); - return settle_auction_tx( - tx_id, - item, - &payouts, - nft_contract_id, - token_id, - price, - ) - .await; - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - - let price = auction.current_price; - // calculate fee for treasury - let treasury_fee = price * (self.treasury_fee * BASE_PERCENT) as u128 / 10_000u128; - - // payouts for NFT sale (includes royalty accounts and seller) - let mut payouts = payouts(nft_contract_id, &item.owner, price - treasury_fee).await; - payouts.insert(self.treasury_id, treasury_fee); - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(payouts.len() as u64); - item.tx = Some((tx_id, MarketTx::SettleAuction)); - settle_auction_tx(tx_id, item, &payouts, nft_contract_id, token_id, price).await - } else { - Err(MarketErr::ItemDoesNotExists) - } - } - - async fn add_bid( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - price: Price, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - if let Some(item) = self.items.get_mut(&contract_and_token_id) { - if let Some(auction) = item.auction.as_mut() { - if auction.ended_at < exec::block_timestamp() { - return Err(MarketErr::AuctionIsAlreadyEnded); - } - - let ft_id = match item.ft_contract_id { - Some(ft_id) => ft_id, - None => { - if price <= auction.current_price { - return Err(MarketErr::WrongPrice); - } - - assert!(msg::value() == price, "Not enough attached value"); - - msg::send( - auction.current_winner, - MarketEvent::TransferValue, - auction.current_price, - ) - .expect("Error in sending value"); - - auction.current_price = price; - auction.current_winner = msg::source(); - - return Ok(MarketEvent::BidAdded { - nft_contract_id: *nft_contract_id, - token_id, - price, - }); - } - }; - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::Bid { account, price } => { - let new_price = price; - let result = add_bid_tx( - tx_id, - item, - nft_contract_id, - &ft_id, - token_id, - &account, - price, - ) - .await; - if account == msg::source() && new_price == price { - return result; - } - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(2); - item.tx = Some(( - tx_id, - MarketTx::Bid { - account: msg::source(), - price, - }, - )); - - add_bid_tx( - tx_id, - item, - nft_contract_id, - &ft_id, - token_id, - &msg::source(), - price, - ) - .await - } else { - Err(MarketErr::AuctionDoesNotExists) - } - } else { - Err(MarketErr::ItemDoesNotExists) - } - } -} - -#[allow(clippy::too_many_arguments)] -async fn create_auction_tx( - tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Price, - bid_period: u64, - duration: u64, -) -> Result { - if nft_transfer(tx_id, nft_contract_id, &exec::program_id(), token_id) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::NFTTransferFailed); - } - item.ft_contract_id = ft_contract_id; - item.auction = Some(Auction { - bid_period, - started_at: exec::block_timestamp(), - ended_at: exec::block_timestamp() + duration, - current_price: price, - current_winner: ActorId::zero(), - }); - item.tx = None; - Ok(MarketEvent::AuctionCreated { - nft_contract_id: (*nft_contract_id), - token_id, - price, - }) -} - -async fn add_bid_tx( - mut tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - ft_contract_id: &ContractId, - token_id: TokenId, - account: &ActorId, - price: Price, -) -> Result { - let auction: &mut Auction = item.auction.as_mut().expect("Can't be None"); - if price <= auction.current_price { - return Err(MarketErr::WrongPrice); - } - - if transfer_tokens(tx_id, ft_contract_id, account, &exec::program_id(), price) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::TokenTransferFailed); - } - - tx_id += 1; - if !auction.current_winner.is_zero() - && transfer_tokens( - tx_id, - ft_contract_id, - &exec::program_id(), - &auction.current_winner, - auction.current_price, - ) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - } - - item.tx = None; - auction.current_price = price; - auction.current_winner = *account; - - Ok(MarketEvent::BidAdded { - nft_contract_id: *nft_contract_id, - token_id, - price, - }) -} - -async fn settle_auction_tx( - mut tx_id: TransactionId, - item: &mut Item, - payouts: &Payout, - nft_contract_id: &ContractId, - token_id: TokenId, - price: Price, -) -> Result { - let auction: &mut Auction = item.auction.as_mut().expect("Can't be None"); - let winner = if auction.current_winner.is_zero() { - item.auction = None; - item.tx = None; - - return Ok(MarketEvent::AuctionCancelled { - nft_contract_id: *nft_contract_id, - token_id, - }); - } else { - auction.current_winner - }; - - // send tokens to the seller, royalties and tresuary account - // since tokens are on the marketplace account, the error can be only due the lack of gas - if let Some(ft_id) = item.ft_contract_id { - for (account, amount) in payouts.iter() { - tx_id = tx_id.wrapping_add(1); - if transfer_tokens(tx_id, &ft_id, &exec::program_id(), account, *amount) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - }; - } - } else { - for (account, amount) in payouts.iter() { - if account != &exec::program_id() && price > MINIMUM_VALUE.into() { - msg::send(*account, MarketEvent::TransferValue, *amount) - .expect("Error in sending value"); - } - } - } - - if nft_transfer(tx_id, nft_contract_id, &winner, token_id) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - } - - item.tx = None; - item.auction = None; - item.owner = winner; - - Ok(MarketEvent::AuctionSettled { - nft_contract_id: *nft_contract_id, - token_id, - price, - }) -} diff --git a/contracts/nft-marketplace/src/lib.rs b/contracts/nft-marketplace/src/lib.rs deleted file mode 100644 index 1f2b423d6..000000000 --- a/contracts/nft-marketplace/src/lib.rs +++ /dev/null @@ -1,229 +0,0 @@ -#![no_std] - -use auction::*; -use gstd::{collections::BTreeMap, msg, prelude::*, ActorId}; -use nft_marketplace_io::*; -use nft_messages::get_owner; -use offers::OffersHandler; -use sale::SaleHandler; - -mod auction; -mod nft_messages; -mod offers; -mod payment; -mod sale; - -const MIN_TREASURY_FEE: u16 = 0; -const MAX_TREASURT_FEE: u16 = 5; -pub const BASE_PERCENT: u16 = 100; -pub const MINIMUM_VALUE: u64 = 11_000_000_000_000; - -static mut MARKET: Option = None; - -#[async_trait::async_trait] -pub trait MarketHandler { - fn add_nft_contract(&mut self, nft_contract_id: &ContractId) -> Result; - - fn add_ft_contract(&mut self, ft_contract_id: &ContractId) -> Result; - - async fn add_market_data( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Option, - ) -> Result; - - fn check_admin(&self); - - fn check_approved_nft_contract(&self, nft_contract_id: &ActorId); - - fn check_approved_ft_contract(&self, ft_contract_id: Option); -} - -#[async_trait::async_trait] -impl MarketHandler for Market { - fn add_nft_contract(&mut self, nft_contract_id: &ContractId) -> Result { - self.check_admin(); - self.approved_nft_contracts.insert(*nft_contract_id); - Ok(MarketEvent::NftContractAdded(*nft_contract_id)) - } - - fn add_ft_contract(&mut self, ft_contract_id: &ContractId) -> Result { - self.check_admin(); - self.approved_ft_contracts.insert(*ft_contract_id); - Ok(MarketEvent::FtContractAdded(*ft_contract_id)) - } - - async fn add_market_data( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Option, - ) -> Result { - self.check_approved_nft_contract(nft_contract_id); - self.check_approved_ft_contract(ft_contract_id); - let contract_and_token_id = (*nft_contract_id, token_id); - - let owner = get_owner(nft_contract_id, token_id).await; - assert_eq!( - owner, - msg::source(), - "Only owner has a right to add NFT to the marketplace" - ); - self.items - .entry(contract_and_token_id) - .and_modify(|item| { - item.price = price; - item.ft_contract_id = ft_contract_id - }) - .or_insert(Item { - token_id, - owner, - ft_contract_id, - price, - auction: None, - offers: BTreeMap::new(), - tx: None, - }); - - Ok(MarketEvent::MarketDataAdded { - nft_contract_id: *nft_contract_id, - token_id, - price, - }) - } - - fn check_admin(&self) { - if msg::source() != self.admin_id { - panic!("Only owner can make that action"); - } - } - - fn check_approved_nft_contract(&self, nft_contract_id: &ActorId) { - if !self.approved_nft_contracts.contains(nft_contract_id) { - panic!("that nft contract is not approved"); - } - } - - fn check_approved_ft_contract(&self, ft_contract_id: Option) { - if ft_contract_id.is_some() - && !self - .approved_ft_contracts - .contains(&ft_contract_id.expect("Must not be an error here")) - { - panic!("that ft contract is not approved"); - } - } -} - -#[gstd::async_main] -async fn main() { - let action: MarketAction = msg::load().expect("Could not load Action"); - let market: &mut Market = unsafe { MARKET.get_or_insert(Market::default()) }; - let result = match action { - MarketAction::AddNftContract(nft_contract_id) => market.add_nft_contract(&nft_contract_id), - MarketAction::AddFTContract(nft_contract_id) => market.add_ft_contract(&nft_contract_id), - MarketAction::AddMarketData { - nft_contract_id, - ft_contract_id, - token_id, - price, - } => { - market - .add_market_data(&nft_contract_id, ft_contract_id, token_id, price) - .await - } - MarketAction::BuyItem { - nft_contract_id, - token_id, - } => market.buy_item(&nft_contract_id, token_id).await, - MarketAction::AddOffer { - nft_contract_id, - ft_contract_id, - token_id, - price, - } => { - market - .add_offer(&nft_contract_id, ft_contract_id, token_id, price) - .await - } - MarketAction::AcceptOffer { - nft_contract_id, - token_id, - ft_contract_id, - price, - } => { - market - .accept_offer(&nft_contract_id, token_id, ft_contract_id, price) - .await - } - MarketAction::Withdraw { - nft_contract_id, - ft_contract_id, - token_id, - price, - } => { - market - .withdraw(&nft_contract_id, token_id, ft_contract_id, price) - .await - } - MarketAction::CreateAuction { - nft_contract_id, - ft_contract_id, - token_id, - min_price, - bid_period, - duration, - } => { - market - .create_auction( - &nft_contract_id, - ft_contract_id, - token_id, - min_price, - bid_period, - duration, - ) - .await - } - MarketAction::AddBid { - nft_contract_id, - token_id, - price, - } => market.add_bid(&nft_contract_id, token_id, price).await, - MarketAction::SettleAuction { - nft_contract_id, - token_id, - } => market.settle_auction(&nft_contract_id, token_id).await, - }; - msg::reply(result, 0).expect("Failed to encode or reply with `Result`"); -} - -#[no_mangle] -extern fn init() { - let config: InitMarket = msg::load().expect("Unable to decode InitConfig"); - - // In case when `MIN_TREASURY_FEE` is zero, operator `<=` is not required, - // because this is minimum value. But if `MIN_TREASURY_FEE` could be changed later, - // usage of `==` operator can lead to unwanted errors or exploits - #[allow(clippy::absurd_extreme_comparisons)] - if config.treasury_fee <= MIN_TREASURY_FEE || config.treasury_fee > MAX_TREASURT_FEE { - panic!("Wrong treasury fee"); - } - - let market = Market { - admin_id: config.admin_id, - treasury_id: config.treasury_id, - treasury_fee: config.treasury_fee, - ..Default::default() - }; - unsafe { MARKET = Some(market) }; -} - -#[no_mangle] -extern fn state() { - let market = unsafe { MARKET.as_ref().expect("Uninitialized market state") }; - msg::reply(market, 0).expect("Failed to share state"); -} diff --git a/contracts/nft-marketplace/src/nft_messages.rs b/contracts/nft-marketplace/src/nft_messages.rs deleted file mode 100644 index dffdc1942..000000000 --- a/contracts/nft-marketplace/src/nft_messages.rs +++ /dev/null @@ -1,61 +0,0 @@ -use gstd::{collections::BTreeMap, msg, prelude::*, ActorId}; -use nft_marketplace_io::*; -use non_fungible_token_io::{NFTAction, NFTEvent}; -use primitive_types::U256; - -pub type Payout = BTreeMap; - -pub async fn nft_transfer( - transaction_id: TransactionId, - nft_program_id: &ActorId, - to: &ActorId, - token_id: U256, -) -> Result<(), ()> { - msg::send_for_reply_as::( - *nft_program_id, - NFTAction::Transfer { - transaction_id, - to: *to, - token_id, - }, - 0, - 0, - ) - .expect("Error in sending a message `NFTAction::Transfer`") - .await - .map(|_| ()) - .map_err(|_| ()) -} - -pub async fn payouts(nft_program_id: &ActorId, owner: &ActorId, amount: u128) -> Payout { - let reply: NFTEvent = msg::send_for_reply_as( - *nft_program_id, - NFTAction::NFTPayout { - owner: *owner, - amount, - }, - 0, - 0, - ) - .expect("Error in sending a message `NFTAction::NFTPayout`") - .await - .expect("Unable to decode `NFTEvent`"); - - match reply { - NFTEvent::NFTPayout(payout) => payout, - _ => panic!("Wrong received reply"), - } -} - -pub async fn get_owner(nft_contract_id: &ContractId, token_id: TokenId) -> ActorId { - let reply: NFTEvent = - msg::send_for_reply_as(*nft_contract_id, NFTAction::Owner { token_id }, 0, 0) - .expect("Error in sending a message `NFTAction::Owner`") - .await - .expect("Unable to decode `NFTEvent`"); - - match reply { - NFTEvent::Owner { owner, token_id: _ } => owner, - _ => panic!("Wrong received message"), - } -} diff --git a/contracts/nft-marketplace/src/offers.rs b/contracts/nft-marketplace/src/offers.rs deleted file mode 100644 index 256fd8ca9..000000000 --- a/contracts/nft-marketplace/src/offers.rs +++ /dev/null @@ -1,455 +0,0 @@ -use crate::{ - nft_messages::*, - payment::*, - {BASE_PERCENT, MINIMUM_VALUE}, -}; -use gstd::{exec, msg, prelude::*, ActorId}; -use nft_marketplace_io::*; - -#[async_trait::async_trait] -pub trait OffersHandler { - async fn add_offer( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Price, - ) -> Result; - - async fn accept_offer( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> Result; - - async fn withdraw( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> Result; -} - -#[async_trait::async_trait] -impl OffersHandler for Market { - async fn add_offer( - &mut self, - nft_contract_id: &ContractId, - ft_contract_id: Option, - token_id: TokenId, - price: Price, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - if let Some(ft_contract_id) = &ft_contract_id { - let is_ft_approved = self.approved_ft_contracts.contains(ft_contract_id); - if !is_ft_approved { - return Err(MarketErr::ContractNotApproved); - } - } - - #[allow(clippy::absurd_extreme_comparisons)] - if ft_contract_id.is_some() && price <= 0 - || ft_contract_id.is_none() && price <= MINIMUM_VALUE.into() - { - return Err(MarketErr::WrongPrice); - } - - if ft_contract_id.is_none() && msg::value() != price { - return Err(MarketErr::WrongPrice); - } - - let item = self - .items - .get_mut(&contract_and_token_id) - .ok_or(MarketErr::ItemDoesNotExists)?; - if item.auction.is_some() { - return Err(MarketErr::AuctionIsAlreadyExists); - } - - if item.offers.contains_key(&(ft_contract_id, price)) { - return Err(MarketErr::OfferAlreadyExists); - }; - - let ft_id = if let Some(ft_id) = ft_contract_id { - ft_id - } else { - item.offers.insert((None, price), msg::source()); - return Ok(MarketEvent::OfferAdded { - nft_contract_id: *nft_contract_id, - ft_contract_id, - token_id, - price, - }); - }; - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::Offer { - ft_id, - price, - account, - } => { - let new_price = price; - let new_ft_id = ft_id; - let result = - add_offer_tx(tx_id, item, nft_contract_id, &ft_id, token_id, price).await; - if account == msg::source() && new_price == price && new_ft_id == ft_id { - return result; - } - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(1); - item.tx = Some(( - tx_id, - MarketTx::Offer { - ft_id, - price, - account: msg::source(), - }, - )); - - add_offer_tx(tx_id, item, nft_contract_id, &ft_id, token_id, price).await - } - - async fn accept_offer( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - let item = self - .items - .get_mut(&contract_and_token_id) - .ok_or(MarketErr::ItemDoesNotExists)?; - - if item.auction.is_some() { - return Err(MarketErr::AuctionIsOpened); - } - - if item.owner != msg::source() { - return Err(MarketErr::OfferShouldAcceptedByOwner); - } - - assert!( - item.price.is_none(), - "Remove the item from the sale when accepting the offer" - ); - let offers = item.offers.clone(); - - let account = offers - .get(&(ft_contract_id, price)) - .ok_or(MarketErr::OfferIsNotExists)?; - - // calculate fee for treasury - let treasury_fee = price * (self.treasury_fee * BASE_PERCENT) as u128 / 10_000u128; - - // payouts for NFT sale (includes royalty accounts and seller) - let mut payouts = payouts(nft_contract_id, &item.owner, price - treasury_fee).await; - payouts.insert(self.treasury_id, treasury_fee); - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::AcceptOffer => { - return accept_offer_tx( - tx_id, - item, - nft_contract_id, - ft_contract_id, - account, - token_id, - price, - &payouts, - ) - .await; - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(1); - item.tx = Some((tx_id, MarketTx::AcceptOffer)); - - accept_offer_tx( - tx_id, - item, - nft_contract_id, - ft_contract_id, - account, - token_id, - price, - &payouts, - ) - .await - } - - async fn withdraw( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - let item = self - .items - .get_mut(&contract_and_token_id) - .ok_or(MarketErr::ItemDoesNotExists)?; - - let account = if let Some(account) = item.offers.get(&(ft_contract_id, price)) { - *account - } else { - return Err(MarketErr::OfferIsNotExists); - }; - - if account != msg::source() { - return Err(MarketErr::InvalidCaller); - } - - let ft_id = if let Some(ft_id) = ft_contract_id { - ft_id - } else { - msg::send(account, MarketEvent::TransferValue, price).expect("Error in sending value"); - return Ok(MarketEvent::Withdraw { - nft_contract_id: *nft_contract_id, - token_id, - price, - }); - }; - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::Withdraw { - ft_id, - price, - account, - } => { - let new_price = price; - let new_ft_id = ft_id; - let result = withdraw_tx( - tx_id, - item, - nft_contract_id, - &ft_id, - token_id, - &account, - price, - ) - .await; - if account == msg::source() && new_price == price && new_ft_id == ft_id { - return result; - } - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - - let tx_id = self.tx_id; - self.tx_id = self.tx_id.wrapping_add(1); - item.tx = Some(( - tx_id, - MarketTx::Withdraw { - ft_id, - price, - account: msg::source(), - }, - )); - withdraw_tx( - tx_id, - item, - nft_contract_id, - &ft_id, - token_id, - &account, - price, - ) - .await - } -} - -async fn add_offer_tx( - tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - ft_contract_id: &ContractId, - token_id: TokenId, - price: Price, -) -> Result { - let ft_id = Some(*ft_contract_id); - if transfer_tokens( - tx_id, - ft_contract_id, - &msg::source(), - &exec::program_id(), - price, - ) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::TokenTransferFailed); - } - - item.tx = None; - item.offers.insert((ft_id, price), msg::source()); - - Ok(MarketEvent::OfferAdded { - nft_contract_id: *nft_contract_id, - ft_contract_id: ft_id, - token_id, - price, - }) -} - -#[allow(clippy::too_many_arguments)] -async fn accept_offer_tx( - mut tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - ft_contract_id: Option, - new_owner: &ActorId, - token_id: TokenId, - price: Price, - payouts: &Payout, -) -> Result { - let ft_id = if let Some(ft_contract_id) = ft_contract_id { - ft_contract_id - } else { - return accept_offer_tx_with_value( - tx_id, - item, - nft_contract_id, - new_owner, - token_id, - price, - payouts, - ) - .await; - }; - - // Transfer NFT to the marketplace account - if nft_transfer(tx_id, nft_contract_id, &exec::program_id(), token_id) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::NFTTransferFailed); - } - - // Send tokens to the seller, royalties and tresuary account - // since tokens are on the marketplace account, the error can be only due the lack of gas - for (account, amount) in payouts.iter() { - tx_id = tx_id.wrapping_add(1); - if transfer_tokens(tx_id, &ft_id, &exec::program_id(), account, *amount) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - }; - } - - // Transfer NFT to the buyer - if nft_transfer(tx_id, nft_contract_id, new_owner, token_id) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - } - - item.owner = *new_owner; - item.price = None; - item.tx = None; - item.offers.remove(&(ft_contract_id, price)); - - Ok(MarketEvent::OfferAccepted { - nft_contract_id: *nft_contract_id, - token_id, - new_owner: *new_owner, - price, - }) -} - -pub async fn accept_offer_tx_with_value( - tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - new_owner: &ActorId, - token_id: TokenId, - price: Price, - payouts: &Payout, -) -> Result { - // transfer NFT to the - if nft_transfer(tx_id, nft_contract_id, new_owner, token_id) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::NFTTransferFailed); - } - - // send tokens to the seller, royalties and tresuary account - // since tokens are on the marketplace account, the error can be only due the lack of gas - for (account, amount) in payouts.iter() { - if account != &exec::program_id() && price > MINIMUM_VALUE.into() { - msg::send(*account, "", *amount).expect("Error in sending value"); - } - } - - item.owner = *new_owner; - item.price = None; - item.tx = None; - - item.offers.remove(&(None, price)); - - Ok(MarketEvent::OfferAccepted { - nft_contract_id: *nft_contract_id, - token_id, - new_owner: *new_owner, - price, - }) -} - -async fn withdraw_tx( - tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - ft_contract_id: &ContractId, - token_id: TokenId, - account: &ActorId, - price: Price, -) -> Result { - if transfer_tokens(tx_id, ft_contract_id, &exec::program_id(), account, price) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::TokenTransferFailed); - } - - item.tx = None; - item.offers.remove(&(Some(*ft_contract_id), price)); - - Ok(MarketEvent::Withdraw { - nft_contract_id: *nft_contract_id, - token_id, - price, - }) -} diff --git a/contracts/nft-marketplace/src/payment.rs b/contracts/nft-marketplace/src/payment.rs deleted file mode 100644 index 0214c6914..000000000 --- a/contracts/nft-marketplace/src/payment.rs +++ /dev/null @@ -1,31 +0,0 @@ -use gstd::{msg, prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -pub async fn transfer_tokens( - transaction_id: u64, - ft_contract_id: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, -) -> Result<(), ()> { - let reply = msg::send_for_reply_as::<_, FTokenEvent>( - *ft_contract_id, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender: *sender, - recipient: *recipient, - amount, - }, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTokenAction::Message`") - .await; - - match reply { - Ok(FTokenEvent::Ok) => Ok(()), - _ => Err(()), - } -} diff --git a/contracts/nft-marketplace/src/sale.rs b/contracts/nft-marketplace/src/sale.rs deleted file mode 100644 index 9f6dacfd3..000000000 --- a/contracts/nft-marketplace/src/sale.rs +++ /dev/null @@ -1,188 +0,0 @@ -use crate::{ - nft_messages::*, - payment::*, - {BASE_PERCENT, MINIMUM_VALUE}, -}; -use gstd::{exec, msg, prelude::*, ActorId}; -use nft_marketplace_io::*; - -#[async_trait::async_trait] -pub trait SaleHandler { - async fn buy_item( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ) -> Result; -} - -#[async_trait::async_trait] -impl SaleHandler for Market { - async fn buy_item( - &mut self, - nft_contract_id: &ContractId, - token_id: TokenId, - ) -> Result { - let contract_and_token_id = (*nft_contract_id, token_id); - - if let Some(item) = self.items.get_mut(&contract_and_token_id) { - if item.auction.is_some() { - return Err(MarketErr::ItemOnAuction); - } - assert!(item.auction.is_none(), "There is an opened auction"); - - let Some(price) = item.price else { - return Err(MarketErr::ItemIsNotOnSale); - }; - - // calculate fee for treasury - let treasury_fee = price * (self.treasury_fee * BASE_PERCENT) as u128 / 10_000u128; - - // payouts for NFT sale (includes royalty accounts and seller) - let mut payouts = payouts(nft_contract_id, &item.owner, price - treasury_fee).await; - payouts.insert(self.treasury_id, treasury_fee); - - if let Some((tx_id, tx)) = item.tx.clone() { - match tx { - MarketTx::Sale { buyer } => { - if buyer != msg::source() { - return Err(MarketErr::WrongTransaction); - } - return buy_item_tx( - tx_id, - item, - nft_contract_id, - &buyer, - token_id, - &payouts, - ) - .await; - } - _ => { - return Err(MarketErr::WrongTransaction); - } - } - } - let buyer = msg::source(); - let tx_id = self.tx_id; - item.tx = Some((tx_id, MarketTx::Sale { buyer })); - buy_item_tx(tx_id, item, nft_contract_id, &buyer, token_id, &payouts).await - } else { - Err(MarketErr::ItemDoesNotExists) - } - } -} - -async fn buy_item_tx( - mut tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - new_owner: &ActorId, - token_id: TokenId, - payouts: &Payout, -) -> Result { - let ft_id = if let Some(ft_contract_id) = item.ft_contract_id { - ft_contract_id - } else { - return buy_item_tx_with_value(tx_id, item, nft_contract_id, new_owner, token_id, payouts) - .await; - }; - - // transfer NFT to the marketplace account - if nft_transfer(tx_id, nft_contract_id, &exec::program_id(), token_id) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::NFTTransferFailed); - } - - let price = item.price.expect("Can't be None"); - - // transfer tokens to the marketplace account - if transfer_tokens(tx_id, &ft_id, new_owner, &exec::program_id(), price) - .await - .is_err() - { - // if there is a fail during the token transfer - // we transfer NFT back to the seller - tx_id = tx_id.wrapping_add(1); - if nft_transfer(tx_id, nft_contract_id, &item.owner, token_id) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - } - item.tx = None; - return Err(MarketErr::TokenTransferFailed); - } - // send tokens to the seller, royalties and tresuary account - // since tokens are on the marketplace account, the error can be only due the lack of gas - for (account, amount) in payouts.iter() { - tx_id = tx_id.wrapping_add(1); - if transfer_tokens(tx_id, &ft_id, &exec::program_id(), account, *amount) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - }; - } - - // transfer NFT to the buyer - if nft_transfer(tx_id, nft_contract_id, new_owner, token_id) - .await - .is_err() - { - return Err(MarketErr::RerunTransaction); - } - - item.owner = *new_owner; - item.price = None; - item.tx = None; - - Ok(MarketEvent::ItemSold { - owner: *new_owner, - nft_contract_id: *nft_contract_id, - token_id, - }) -} - -pub async fn buy_item_tx_with_value( - tx_id: TransactionId, - item: &mut Item, - nft_contract_id: &ContractId, - new_owner: &ActorId, - token_id: TokenId, - payouts: &Payout, -) -> Result { - let price = item.price.expect("Can't be None"); - if msg::value() < price { - return Err(MarketErr::WrongPrice); - } - - // transfer NFT to the - if nft_transfer(tx_id, nft_contract_id, new_owner, token_id) - .await - .is_err() - { - item.tx = None; - return Err(MarketErr::NFTTransferFailed); - } - - // send tokens to the seller, royalties and tresuary account - // since tokens are on the marketplace account, the error can be only due the lack of gas - for (account, amount) in payouts.iter() { - if account != &exec::program_id() && price > MINIMUM_VALUE.into() { - msg::send(*account, "", *amount).expect("Error in sending value"); - } - } - - item.owner = *new_owner; - item.price = None; - item.tx = None; - - Ok(MarketEvent::ItemSold { - owner: *new_owner, - nft_contract_id: *nft_contract_id, - token_id, - }) -} diff --git a/contracts/nft-marketplace/state/Cargo.toml b/contracts/nft-marketplace/state/Cargo.toml deleted file mode 100644 index 929bf030b..000000000 --- a/contracts/nft-marketplace/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "nft-marketplace-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -nft-marketplace-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/nft-marketplace/state/build.rs b/contracts/nft-marketplace/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/nft-marketplace/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/nft-marketplace/state/src/lib.rs b/contracts/nft-marketplace/state/src/lib.rs deleted file mode 100644 index ef8b7f085..000000000 --- a/contracts/nft-marketplace/state/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![no_std] - -use gstd::prelude::*; -use nft_marketplace_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = Market; - - pub fn all_items(state: State) -> Vec { - nft_marketplace_io::all_items(state) - } - - pub fn item_info(state: State, args: ItemInfoArgs) -> Option { - nft_marketplace_io::item_info(state, &args) - } -} diff --git a/contracts/nft-marketplace/tests/auction.rs b/contracts/nft-marketplace/tests/auction.rs deleted file mode 100644 index 043117c5e..000000000 --- a/contracts/nft-marketplace/tests/auction.rs +++ /dev/null @@ -1,343 +0,0 @@ -// pub mod utils; - -// use nft_marketplace_io::*; -// use utils::prelude::*; - -// // TODO: fix test -// #[test] -// #[ignore] -// fn auction_with_native_tokens() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// nft_program.approve(0, SELLER, market.actor_id(), TOKEN_ID.into()); - -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// for (i, &participant) in PARTICIPANTS.iter().enumerate() { -// let bid_price = (i as u128 + 2) * NFT_PRICE; -// system.mint_to(participant, bid_price); -// market -// .add_bid( -// participant, -// nft_program.actor_id(), -// TOKEN_ID.into(), -// bid_price, -// bid_price, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), bid_price)); - -// // check that marketplace has returned funds to the previous participant -// if i != 0 { -// system.claim_value_from_mailbox(PARTICIPANTS[i - 1]); -// assert_eq!( -// system.balance_of(PARTICIPANTS[i - 1]), -// (i as u128 + 1) * NFT_PRICE -// ); -// } -// } - -// let winner_price = 6 * NFT_PRICE; -// let _winner = PARTICIPANTS[4]; - -// // check balance of nft marketplace contract -// assert_eq!(system.balance_of(MARKET_ID), winner_price); - -// system.spend_blocks((DURATION / 1000) as u32); - -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .succeed(MarketEvent::AuctionSettled { -// nft_contract_id: nft_program.actor_id(), -// token_id: TOKEN_ID.into(), -// price: winner_price, -// }); - -// let treasury_fee = winner_price * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - -// // Check balance of SELLER -// system.claim_value_from_mailbox(SELLER); -// assert_eq!(system.balance_of(SELLER), winner_price - treasury_fee); - -// // Check balance of TREASURY_ID -// system.claim_value_from_mailbox(TREASURY_ID); -// assert_eq!(system.balance_of(TREASURY_ID), treasury_fee); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn cancelled_auction() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// nft_program.approve(0, SELLER, market.actor_id(), TOKEN_ID.into()); - -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// system.spend_blocks((DURATION / 1000) as u32); - -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .succeed(MarketEvent::AuctionCancelled { -// nft_contract_id: nft_program.actor_id(), -// token_id: TOKEN_ID.into(), -// }); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn auction_with_fungible_tokens() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// nft_program.approve(0, SELLER, market.actor_id(), TOKEN_ID.into()); - -// market -// .create_auction( -// &system, -// SELLER, -// ( -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// ), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// let mut tx_id: u64 = 100; -// for (i, &participant) in PARTICIPANTS.iter().enumerate() { -// let bid_price = (i as u128 + 2) * NFT_PRICE; -// ft_program.approve(tx_id, participant, market.actor_id(), bid_price); -// tx_id += 1; -// ft_program.mint(tx_id, participant, bid_price); -// market -// .add_bid( -// participant, -// nft_program.actor_id(), -// TOKEN_ID.into(), -// bid_price, -// 0, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), bid_price)); - -// // Check that marketplace has returned funds to the previous participant -// if i != 0 { -// ft_program -// .balance_of(PARTICIPANTS[i - 1]) -// .check((i as u128 + 1) * NFT_PRICE); -// } -// } - -// let winner_price = 6 * NFT_PRICE; -// let _winner = PARTICIPANTS[4]; - -// // Check balance of nft marketplace contract -// ft_program.balance_of(MARKET_ID).check(winner_price); - -// system.spend_blocks((DURATION / 1000) as u32); - -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .succeed(MarketEvent::AuctionSettled { -// nft_contract_id: nft_program.actor_id(), -// token_id: TOKEN_ID.into(), -// price: winner_price, -// }); - -// let treasury_fee = winner_price * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - -// // Check balance of SELLER -// ft_program -// .balance_of(SELLER) -// .check(winner_price - treasury_fee); - -// // Check balance of TREASURY_ID -// ft_program.balance_of(TREASURY_ID).check(treasury_fee); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn auction_failures() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// // Create auction failures - -// // Must fail since the bid period is less than 1 minute -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// MIN_BID_PERIOD - 100, -// DURATION, -// ) -// .failed(MarketErr::AuctionBidPeriodOrDurationIsInvalid); - -// // Must fail since the bid duration is less than 1 minute -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// MIN_BID_PERIOD - 100, -// ) -// .failed(MarketErr::AuctionBidPeriodOrDurationIsInvalid); - -// // Must fail since the min price is equal to zero -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// 0, -// BID_PERIOD, -// DURATION, -// ) -// .failed(MarketErr::AuctionMinPriceIsZero); - -// nft_program.approve(0, SELLER, market.actor_id(), TOKEN_ID.into()); - -// // start auction -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// // Must fail since the auction is already on -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .failed(MarketErr::AuctionIsAlreadyExists); - -// // add bid and create auction failures - -// // Must fail since the price is equal to the current bid price -// system.mint_to(BUYER, NFT_PRICE * 2); -// market -// .add_bid( -// BUYER, -// nft_program.actor_id(), -// TOKEN_ID.into(), -// NFT_PRICE, -// NFT_PRICE, -// ) -// .failed(MarketErr::WrongPrice); - -// // Must fail since the auction is not over -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .failed(MarketErr::AuctionIsNotOver); - -// system.spend_blocks((DURATION as u32) / 1000 + 1); - -// // Must fail since the auction has alredy ended -// market -// .add_bid( -// BUYER, -// nft_program.actor_id(), -// TOKEN_ID.into(), -// NFT_PRICE, -// NFT_PRICE, -// ) -// .failed(MarketErr::AuctionIsAlreadyEnded); - -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .succeed(MarketEvent::AuctionCancelled { -// nft_contract_id: nft_program.actor_id(), -// token_id: TOKEN_ID.into(), -// }); - -// // Must fail since the auction doesn't exist -// market -// .settle_auction(SELLER, nft_program.actor_id(), TOKEN_ID.into()) -// .failed(MarketErr::AuctionDoesNotExists); -// } diff --git a/contracts/nft-marketplace/tests/fail_buy_with_ft.rs b/contracts/nft-marketplace/tests/fail_buy_with_ft.rs deleted file mode 100644 index af4f35c2a..000000000 --- a/contracts/nft-marketplace/tests/fail_buy_with_ft.rs +++ /dev/null @@ -1,112 +0,0 @@ -pub mod utils_gclient; - -use gstd::prelude::*; -use utils_gclient::{ - common::{self, gear_api_from_path, init_gear_api_from_path}, - marketplace, nft, -}; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_fail_buy_with_ft() -> gclient::Result<()> { - let api = init_gear_api_from_path().await?; - - let (ft_contract, nft_contract, marketplace_contract) = common::init(&api).await?; - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - 0, - true, - ) - .await?; - } - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::add_market_data( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - None, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - 0, - true, - ) - .await?; - } - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - nft::approve( - &seller_api, - &mut listener, - &nft_contract, - 123, - &marketplace_contract, - common::TOKEN_ID.into(), - ) - .await?; - - marketplace::create_auction( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - common::BID_PERIOD, - common::DURATION, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - 0, - true, - ) - .await?; - } - - Ok(()) -} diff --git a/contracts/nft-marketplace/tests/fail_offers.rs b/contracts/nft-marketplace/tests/fail_offers.rs deleted file mode 100644 index 8915aeea1..000000000 --- a/contracts/nft-marketplace/tests/fail_offers.rs +++ /dev/null @@ -1,207 +0,0 @@ -pub mod utils_gclient; - -use gstd::prelude::*; -use utils_gclient::{ - common::{self, gear_api_from_path, init_gear_api_from_path}, - marketplace, nft, -}; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_fail_offers() -> gclient::Result<()> { - let api = init_gear_api_from_path().await?; - - let (ft_contract, nft_contract, marketplace_contract) = common::init(&api).await?; - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - marketplace::add_market_data( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - None, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - 0, - 0, - true, - ) - .await?; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - common::NFT_PRICE - 1_000_000_000_000, - true, - ) - .await?; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - common::NFT_PRICE, - false, - ) - .await?; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - common::NFT_PRICE, - true, - ) - .await?; - - marketplace::accept_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - true, - ) - .await?; - } - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::accept_offer( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - 2 * common::NFT_PRICE, - true, - ) - .await?; - - nft::approve( - &seller_api, - &mut listener, - &nft_contract, - 123, - &marketplace_contract, - common::TOKEN_ID.into(), - ) - .await?; - - marketplace::create_auction( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - common::BID_PERIOD, - common::DURATION, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE - 1_000_000_000_000, - common::NFT_PRICE - 1_000_000_000_000, - true, - ) - .await?; - } - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::accept_offer( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - true, - ) - .await?; - - marketplace::withdraw( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - common::NFT_PRICE, - true, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::withdraw( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - 2 * common::NFT_PRICE, - true, - ) - .await?; - } - - Ok(()) -} diff --git a/contracts/nft-marketplace/tests/offers.rs b/contracts/nft-marketplace/tests/offers.rs deleted file mode 100644 index ff1b7c670..000000000 --- a/contracts/nft-marketplace/tests/offers.rs +++ /dev/null @@ -1,347 +0,0 @@ -// pub mod utils; - -// use gstd::{collections::BTreeMap, ActorId}; -// use nft_marketplace_io::*; -// use utils::prelude::*; - -// // TODO: fix test -// #[test] -// #[ignore] -// fn offers() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// let mut offers: BTreeMap<(Option, Price), ActorId> = BTreeMap::new(); -// for i in 0..10 { -// let offered_price = 200_000_000_000_000 * (i + 1) as u128; -// system.mint_to(BUYER, offered_price); -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// offered_price, -// offered_price, -// ) -// .succeed((nft_program.actor_id(), None, TOKEN_ID.into(), offered_price)); -// offers.insert((None, offered_price), BUYER.into()); -// } -// let mut tx_id: u64 = 100; - -// for i in 10..20 { -// let offered_price = 200_000_000_000_000 * (i + 1) as u128; -// tx_id += 1; -// ft_program.mint(tx_id, BUYER, offered_price); -// tx_id += 1; -// ft_program.approve(tx_id, BUYER, market.actor_id(), offered_price); -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// offered_price, -// 0, -// ) -// .succeed(( -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// offered_price, -// )); -// offers.insert((Some(ft_program.actor_id()), offered_price), BUYER.into()); -// } - -// let market_state = market.meta_state().state().0; -// assert!(market_state -// .items -// .contains_key(&(nft_program.actor_id(), TOKEN_ID.into()))); - -// // Accept offer (for fungible tokens) -// let accepted_price = 200_000_000_000_000 * 15; -// market -// .accept_offer( -// SELLER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// accepted_price, -// ) -// .succeed(( -// nft_program.actor_id(), -// TOKEN_ID.into(), -// BUYER.into(), -// accepted_price, -// )); - -// let treasury_fee = accepted_price * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - -// // Check balance of SELLER -// ft_program -// .balance_of(SELLER) -// .check(accepted_price - treasury_fee); - -// // Check balance of TREASURY_ID -// ft_program.balance_of(TREASURY_ID).check(treasury_fee); - -// let market_state = market.meta_state().state().0; -// assert!(!market_state -// .items -// .get(&(nft_program.actor_id(), TOKEN_ID.into())) -// .expect("Unexpected invalid item.") -// .offers -// .contains_key(&(Some(ft_program.actor_id()), accepted_price))); - -// // Withdraw tokens -// let withdrawn_tokens = 2_200_000_000_000_000; -// market -// .withdraw( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// withdrawn_tokens, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), withdrawn_tokens)); - -// // Withdraw native tokens -// let withdrawn_tokens = 200_000_000_000_000 * 2_u128; -// market -// .withdraw( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// withdrawn_tokens, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), withdrawn_tokens)); - -// // Check balance of SELLER after tokens withdrawal -// system.claim_value_from_mailbox(BUYER); -// assert_eq!(system.balance_of(BUYER), withdrawn_tokens); - -// // Previous owner makes offer for native value -// let offered_value = 20_000_000_000_000_000; -// let buyer_balance = system.balance_of(BUYER); -// let treasury_fee = offered_value * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - -// system.mint_to(SELLER, offered_value); -// market -// .add_offer( -// SELLER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// offered_value, -// offered_value, -// ) -// .succeed((nft_program.actor_id(), None, TOKEN_ID.into(), offered_value)); - -// // New owner accepts offer -// market -// .accept_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// offered_value, -// ) -// .succeed(( -// nft_program.actor_id(), -// TOKEN_ID.into(), -// SELLER.into(), -// offered_value, -// )); - -// // Check balance of BUYER -// system.claim_value_from_mailbox(BUYER); -// assert_eq!( -// system.balance_of(BUYER), -// buyer_balance + offered_value - treasury_fee -// ); - -// // Check balance of TREASURY_ID -// system.claim_value_from_mailbox(TREASURY_ID); -// assert_eq!(system.balance_of(TREASURY_ID), treasury_fee); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn offers_failures() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs_without_ft_approve(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// None, -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// // Must fail since the fungible token contract is not approved -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// NFT_PRICE, -// 0, -// ) -// .failed(MarketErr::ContractNotApproved); - -// market -// .add_ft_contract(ADMIN, ft_program.actor_id()) -// .succeed(ft_program.actor_id()); - -// // Must fail since the price is zero -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// Some(ft_program.actor_id()), -// 0, -// 0, -// ) -// .failed(MarketErr::WrongPrice); - -// system.mint_to(BUYER, 4 * NFT_PRICE); - -// // Must fail since the attached value is not equal to the offered price -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// NFT_PRICE - 100_000_000_000, -// ) -// .failed(MarketErr::WrongPrice); - -// // Add offer -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// NFT_PRICE, -// ) -// .succeed((nft_program.actor_id(), None, TOKEN_ID.into(), NFT_PRICE)); - -// // Must fail since the offers with these params already exists -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// NFT_PRICE, -// ) -// .failed(MarketErr::OfferAlreadyExists); - -// // Accept offer - -// // Must fail since only owner can accept offer -// market -// .accept_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// ) -// .failed(MarketErr::OfferShouldAcceptedByOwner); - -// // Must fail since the offer with the params doesn't exist -// market -// .accept_offer( -// SELLER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// 2 * NFT_PRICE, -// ) -// .failed(MarketErr::OfferIsNotExists); - -// // Start auction -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// // Must fail since auction is on -// market -// .add_offer( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE - 100_000_000_000, -// NFT_PRICE - 100_000_000_000, -// ) -// .failed(MarketErr::AuctionIsAlreadyExists); - -// market -// .accept_offer( -// SELLER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// ) -// .failed(MarketErr::AuctionIsOpened); - -// // Withdraw failures - -// // Must fail since the caller isn't the offer author -// market -// .withdraw( -// SELLER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// NFT_PRICE, -// ) -// .failed(MarketErr::InvalidCaller); - -// // Must fail since the indicated offer hash doesn't exist -// market -// .withdraw( -// BUYER.into(), -// nft_program.actor_id(), -// TOKEN_ID.into(), -// None, -// 2 * NFT_PRICE, -// ) -// .failed(MarketErr::OfferIsNotExists); -// } diff --git a/contracts/nft-marketplace/tests/sale.rs b/contracts/nft-marketplace/tests/sale.rs deleted file mode 100644 index 8cff558bf..000000000 --- a/contracts/nft-marketplace/tests/sale.rs +++ /dev/null @@ -1,132 +0,0 @@ -// pub mod utils; - -// use nft_marketplace_io::*; -// use utils::prelude::*; - -// // TODO: fix test -// #[test] -// #[ignore] -// fn buy_with_fungible_tokens() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// Some(NFT_PRICE), -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), Some(NFT_PRICE))); - -// let tx_id: u64 = 100; -// ft_program.mint(BUYER, tx_id, NFT_PRICE); - -// market -// .buy_item(BUYER, nft_program.actor_id(), TOKEN_ID.into(), 0) -// .succeed((BUYER.into(), nft_program.actor_id(), TOKEN_ID.into())); - -// // Check balance of SELLER -// let treasury_fee = NFT_PRICE * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; -// ft_program -// .balance_of(SELLER) -// .check(NFT_PRICE - treasury_fee); - -// // Check balance of TREASURY_ID -// ft_program.balance_of(TREASURY_ID).check(treasury_fee); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn buy_with_fungible_tokens_failures() { -// let system = utils::initialize_system(); - -// let (ft_program, nft_program, market) = utils::initialize_programs(&system); - -// // Must fail since item does not exist -// market -// .buy_item(BUYER, nft_program.actor_id(), TOKEN_ID.into(), 0) -// .failed(MarketErr::ItemDoesNotExists); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// Some(ft_program.actor_id()), -// TOKEN_ID.into(), -// None, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), None)); - -// // Must fail since item isn't on sale -// market -// .buy_item(BUYER, nft_program.actor_id(), TOKEN_ID.into(), 0) -// .failed(MarketErr::ItemIsNotOnSale); - -// market -// .create_auction( -// &system, -// SELLER, -// (nft_program.actor_id(), TOKEN_ID.into(), None), -// NFT_PRICE, -// BID_PERIOD, -// DURATION, -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE)); - -// // Must fail since auction has started on that item -// market -// .buy_item(BUYER, nft_program.actor_id(), TOKEN_ID.into(), 0) -// .failed(MarketErr::ItemOnAuction); -// } - -// // TODO: fix test -// #[test] -// #[ignore] -// fn buy_with_native_tokens() { -// let system = utils::initialize_system(); - -// let (_, nft_program, market) = utils::initialize_programs(&system); - -// market -// .add_market_data( -// &system, -// SELLER, -// nft_program.actor_id(), -// None, -// TOKEN_ID.into(), -// Some(NFT_PRICE), -// ) -// .succeed((nft_program.actor_id(), TOKEN_ID.into(), Some(NFT_PRICE))); - -// system.mint_to(BUYER, NFT_PRICE * 2); - -// // Must fail since not enough value was attached to the message -// market -// .buy_item( -// BUYER, -// nft_program.actor_id(), -// TOKEN_ID.into(), -// NFT_PRICE - 1000, -// ) -// .failed(MarketErr::WrongPrice); - -// market -// .buy_item(BUYER, nft_program.actor_id(), TOKEN_ID.into(), NFT_PRICE) -// .succeed((BUYER.into(), nft_program.actor_id(), TOKEN_ID.into())); - -// let treasury_fee = NFT_PRICE * ((TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - -// // Check balance of SELLER -// system.claim_value_from_mailbox(SELLER); -// assert_eq!(system.balance_of(SELLER), NFT_PRICE - treasury_fee); - -// // Check balance of TREASURY_ID -// system.claim_value_from_mailbox(TREASURY_ID); -// assert_eq!(system.balance_of(TREASURY_ID), treasury_fee); -// } diff --git a/contracts/nft-marketplace/tests/success_buy_with_ft.rs b/contracts/nft-marketplace/tests/success_buy_with_ft.rs deleted file mode 100644 index d8745b02c..000000000 --- a/contracts/nft-marketplace/tests/success_buy_with_ft.rs +++ /dev/null @@ -1,87 +0,0 @@ -pub mod utils_gclient; - -use gstd::prelude::*; -use nft_marketplace::BASE_PERCENT; -use utils_gclient::{ - common::{self, gear_api_from_path, init_gear_api_from_path}, - ft, marketplace, -}; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_success_buy_with_ft() -> gclient::Result<()> { - let api = init_gear_api_from_path().await?; - - let (ft_contract, nft_contract, marketplace_contract) = common::init(&api).await?; - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::add_market_data( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - Some(common::NFT_PRICE), - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - ft::mint( - &buyer_api, - &mut listener, - &ft_contract, - 100, - &common::get_current_actor_id(&buyer_api), - common::NFT_PRICE, - ) - .await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - 0, - false, - ) - .await?; - } - - let mut listener = api.subscribe().await?; - let treasury_fee = - common::NFT_PRICE * ((common::TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - assert_eq!( - ft::balance_of( - &api, - &mut listener, - &ft_contract, - &common::get_user_to_actor_id(common::SELLER).await?, - ) - .await?, - common::NFT_PRICE - treasury_fee - ); - - assert_eq!( - ft::balance_of( - &api, - &mut listener, - &ft_contract, - &common::get_user_to_actor_id(common::TREASURY).await?, - ) - .await?, - treasury_fee - ); - - Ok(()) -} diff --git a/contracts/nft-marketplace/tests/success_buy_with_native_tokens.rs b/contracts/nft-marketplace/tests/success_buy_with_native_tokens.rs deleted file mode 100644 index 04bc51002..000000000 --- a/contracts/nft-marketplace/tests/success_buy_with_native_tokens.rs +++ /dev/null @@ -1,62 +0,0 @@ -pub mod utils_gclient; - -use gstd::prelude::*; -use utils_gclient::{ - common::{self, gear_api_from_path, init_gear_api_from_path}, - marketplace, -}; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_success_buy_with_native_tokens() -> gclient::Result<()> { - let api = init_gear_api_from_path().await?; - - let (_, nft_contract, marketplace_contract) = common::init(&api).await?; - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::add_market_data( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - Some(common::NFT_PRICE), - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - common::NFT_PRICE - 1_000_000_000_000, - true, - ) - .await?; - - marketplace::buy_item( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - common::TOKEN_ID.into(), - common::NFT_PRICE, - false, - ) - .await?; - } - - Ok(()) -} diff --git a/contracts/nft-marketplace/tests/success_offers.rs b/contracts/nft-marketplace/tests/success_offers.rs deleted file mode 100644 index ff6a78cbe..000000000 --- a/contracts/nft-marketplace/tests/success_offers.rs +++ /dev/null @@ -1,229 +0,0 @@ -pub mod utils_gclient; - -use gstd::prelude::*; -use nft_marketplace::BASE_PERCENT; -use utils_gclient::{ - common::{self, gear_api_from_path, init_gear_api_from_path}, - ft, marketplace, -}; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_success_offers() -> gclient::Result<()> { - let api = init_gear_api_from_path().await?; - - let (ft_contract, nft_contract, marketplace_contract) = common::init(&api).await?; - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::add_market_data( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - None, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - for i in 0..10 { - let offered_price = 200_000_000_000_000 * (i + 1) as u128; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - offered_price, - offered_price, - false, - ) - .await?; - } - - let mut tx_id: u64 = 100; - for i in 10..20 { - let offered_price = 200_000_000_000_000 * (i + 1) as u128; - - tx_id += 1; - ft::mint( - &buyer_api, - &mut listener, - &ft_contract, - tx_id, - &common::get_current_actor_id(&buyer_api), - offered_price, - ) - .await?; - tx_id += 1; - - let marketplace_id: common::Hash = marketplace_contract - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - ft::approve( - &buyer_api, - &mut listener, - &ft_contract, - tx_id, - &marketplace_id.into(), - offered_price, - ) - .await?; - - marketplace::add_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - offered_price, - 0, - false, - ) - .await?; - } - } - - let market_state = marketplace::state(&api, &marketplace_contract).await?; - assert!(market_state - .items - .contains_key(&(nft_contract, common::TOKEN_ID.into()))); - - let accepted_price = 200_000_000_000_000 * 15; - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::accept_offer( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - accepted_price, - false, - ) - .await?; - } - - let treasury_fee = - accepted_price * ((common::TREASURY_FEE * BASE_PERCENT) as u128) / 10_000u128; - - let mut listener = api.subscribe().await?; - - assert_eq!( - ft::balance_of( - &api, - &mut listener, - &ft_contract, - &common::get_user_to_actor_id(common::SELLER).await? - ) - .await?, - accepted_price - treasury_fee - ); - - assert_eq!( - ft::balance_of( - &api, - &mut listener, - &ft_contract, - &common::get_user_to_actor_id(common::TREASURY).await? - ) - .await?, - treasury_fee - ); - - let market_state = marketplace::state(&api, &marketplace_contract).await?; - assert!(!market_state - .items - .get(&(nft_contract, common::TOKEN_ID.into())) - .expect("Unexpected invalid item.") - .offers - .contains_key(&(Some(ft_contract), accepted_price))); - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - let withdrawn_tokens = 2_200_000_000_000_000; - marketplace::withdraw( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - Some(ft_contract), - common::TOKEN_ID.into(), - withdrawn_tokens, - false, - ) - .await?; - - let withdrawn_tokens = 200_000_000_000_000 * 2_u128; - marketplace::withdraw( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - withdrawn_tokens, - false, - ) - .await?; - } - - let offered_value = 20_000_000_000_000_000; - - { - let seller_api = gear_api_from_path().with(common::SELLER)?; - let mut listener = seller_api.subscribe().await?; - - marketplace::add_offer( - &seller_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - offered_value, - offered_value, - false, - ) - .await?; - } - - { - let buyer_api = gear_api_from_path().with(common::BUYER)?; - let mut listener = buyer_api.subscribe().await?; - - marketplace::accept_offer( - &buyer_api, - &mut listener, - &marketplace_contract, - &nft_contract, - None, - common::TOKEN_ID.into(), - offered_value, - false, - ) - .await?; - } - - Ok(()) -} diff --git a/contracts/nft-marketplace/tests/utils/common.rs b/contracts/nft-marketplace/tests/utils/common.rs deleted file mode 100644 index 8a4ab9611..000000000 --- a/contracts/nft-marketplace/tests/utils/common.rs +++ /dev/null @@ -1,168 +0,0 @@ -use super::{prelude::*, FungibleToken, Market, NonFungibleToken}; -use convert::identity; -use core::fmt::Debug; -use gstd::ActorId; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use marker::PhantomData; -use nft_marketplace_io::*; - -pub fn initialize_system() -> System { - let system = System::new(); - system.init_logger(); - system -} - -pub fn initialize_programs( - system: &System, -) -> (FungibleToken<'_>, NonFungibleToken<'_>, Market<'_>) { - let ft_program = FungibleToken::initialize(system); - - let mut tx_id: u64 = 0; - let nft_program = NonFungibleToken::initialize(system); - nft_program.add_minter(tx_id, SELLER); - tx_id += 1; - nft_program.mint(tx_id, SELLER); - - let market = Market::initialize(system); - ft_program.approve(tx_id, BUYER, market.actor_id(), NFT_PRICE); - - tx_id += 1; - let token_id: TokenId = 0.into(); - nft_program.approve(tx_id, SELLER, market.actor_id(), token_id); - market - .add_ft_contract(ADMIN, ft_program.actor_id()) - .succeed(ft_program.actor_id()); - market - .add_nft_contract(ADMIN, nft_program.actor_id()) - .succeed(nft_program.actor_id()); - - (ft_program, nft_program, market) -} - -pub fn initialize_programs_without_ft_approve( - system: &System, -) -> (FungibleToken<'_>, NonFungibleToken<'_>, Market<'_>) { - let ft_program = FungibleToken::initialize(system); - - let mut tx_id: u64 = 0; - let nft_program = NonFungibleToken::initialize(system); - nft_program.add_minter(tx_id, SELLER); - tx_id += 1; - nft_program.mint(tx_id, SELLER); - - let market = Market::initialize(system); - ft_program.approve(tx_id, BUYER, market.actor_id(), NFT_PRICE); - - tx_id += 1; - let token_id: TokenId = 0.into(); - nft_program.approve(tx_id, SELLER, market.actor_id(), token_id); - market - .add_nft_contract(ADMIN, nft_program.actor_id()) - .succeed(nft_program.actor_id()); - - (ft_program, nft_program, market) -} - -pub trait Program { - fn inner_program(&self) -> &InnerProgram<'_>; - - fn actor_id(&self) -> ActorId { - let bytes: [u8; 32] = self.inner_program().id().into(); - bytes.into() - } -} - -pub struct MetaStateReply(pub T); - -impl MetaStateReply { - #[track_caller] - pub fn check(self, value: T) { - assert_eq!(self.0, value); - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - event: fn(T) -> R, - ghost_data: PhantomData, -} - -impl RunResult { - pub fn new(result: InnerRunResult, event: fn(T) -> R) -> Self { - Self { - result, - event, - ghost_data: PhantomData, - } - } - - #[track_caller] - fn assert_contains(self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - self.assert_contains(Err::(error)); - } - - #[track_caller] - fn common_succeed(self, value: T, wrap: fn(R) -> V) { - let event = (self.event)(value); - - self.assert_contains(wrap(event)); - } - - #[track_caller] - pub fn succeed(self, value: T) { - self.common_succeed(value, Ok::); - } - - #[track_caller] - pub fn contains(self, value: T) { - self.common_succeed(value, identity); - } -} - -#[must_use] -pub struct InitResult { - contract_instance: T, - pub result: InnerRunResult, - pub is_active: bool, - ghost_data: PhantomData, -} - -impl InitResult { - pub fn new(contract_instance: T, result: InnerRunResult, is_active: bool) -> Self { - Self { - contract_instance, - result, - is_active, - ghost_data: PhantomData, - } - } - - fn assert_contains(&self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - assert!(!self.is_active); - self.assert_contains(Err::<(), E>(error)); - } - - #[track_caller] - pub fn succeed(self) -> T { - assert!(self.is_active); - self.assert_contains(Ok::<_, E>(())); - - self.contract_instance - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(result.contains(&Log::builder().payload(payload))); -} diff --git a/contracts/nft-marketplace/tests/utils/ftoken.rs b/contracts/nft-marketplace/tests/utils/ftoken.rs deleted file mode 100644 index d3cec602b..000000000 --- a/contracts/nft-marketplace/tests/utils/ftoken.rs +++ /dev/null @@ -1,100 +0,0 @@ -use super::{prelude::*, MetaStateReply}; -use gstd::ActorId; -use gtest::{Log, Program as InnerProgram, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub struct FungibleToken<'a>(InnerProgram<'a>); - -impl Program for FungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> FungibleToken<'a> { - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ); - let storage_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let ft_logic_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - assert!(!program - .send( - ADMIN, - InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - }, - ) - .main_failed()); - - Self(program) - } - - pub fn mint(&self, transaction_id: u64, from: u64, amount: u128) { - let payload = LogicAction::Mint { - recipient: from.into(), - amount, - }; - - assert!(self - .0 - .send( - from, - FTokenAction::Message { - transaction_id, - payload, - } - ) - .contains(&Log::builder().payload(FTokenEvent::Ok))); - } - - pub fn balance_of(&self, actor: u64) -> MetaStateReply { - let payload = FTokenAction::GetBalance(actor.into()).encode(); - let result = self.0.send_bytes(ADMIN, payload); - assert!(!result.main_failed()); - - let amount = result - .log() - .iter() - .find_map(|log| { - let mut payload = log.payload(); - if let Ok(FTokenEvent::Balance(amount)) = FTokenEvent::decode(&mut payload) { - Some(amount) - } else { - None - } - }) - .expect("Invalid balance reply!"); - - MetaStateReply(amount) - } - - pub fn approve(&self, transaction_id: u64, from: u64, to: ActorId, amount: u128) { - let payload = LogicAction::Approve { - approved_account: to, - amount, - }; - - assert!(self - .0 - .send( - from, - FTokenAction::Message { - transaction_id, - payload, - } - ) - .contains(&Log::builder().payload(FTokenEvent::Ok))); - } -} diff --git a/contracts/nft-marketplace/tests/utils/marketplace.rs b/contracts/nft-marketplace/tests/utils/marketplace.rs deleted file mode 100644 index 491851299..000000000 --- a/contracts/nft-marketplace/tests/utils/marketplace.rs +++ /dev/null @@ -1,293 +0,0 @@ -use super::{prelude::*, MetaStateReply, RunResult}; -use gstd::ActorId; -use gtest::{Program as InnerProgram, System}; -use nft_marketplace_io::*; - -pub struct Market<'a>(InnerProgram<'a>); - -impl Program for Market<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -type MarketRunResult = RunResult; - -impl<'a> Market<'a> { - pub fn initialize(system: &'a System) -> Self { - Self::initialize_custom( - system, - InitMarket { - admin_id: ADMIN.into(), - treasury_id: TREASURY_ID.into(), - treasury_fee: TREASURY_FEE, - }, - ) - .succeed() - } - - pub fn initialize_custom(system: &System, config: InitMarket) -> MarketInit<'_> { - let program = InnerProgram::current_opt(system); - - let failed = program.send(ADMIN, config).main_failed(); - - MarketInit(program, failed) - } - - pub fn meta_state(&self) -> MarketMetaState<'_> { - MarketMetaState(&self.0) - } - - pub fn add_nft_contract( - &self, - from: u64, - nft_contract_id: ActorId, - ) -> MarketRunResult { - RunResult::new( - self.0 - .send(from, MarketAction::AddNftContract(nft_contract_id)), - MarketEvent::NftContractAdded, - ) - } - - pub fn add_ft_contract( - &self, - from: u64, - ft_contract_id: ActorId, - ) -> MarketRunResult { - RunResult::new( - self.0 - .send(from, MarketAction::AddFTContract(ft_contract_id)), - MarketEvent::FtContractAdded, - ) - } - - pub fn add_market_data( - &self, - _sys: &System, - from: u64, - nft_contract_id: ActorId, - ft_contract_id: Option, - token_id: TokenId, - price: Option, - ) -> MarketRunResult<(ContractId, TokenId, Option)> { - RunResult::new( - self.0.send( - from, - MarketAction::AddMarketData { - nft_contract_id, - ft_contract_id, - token_id, - price, - }, - ), - |(nft_contract_id, token_id, price)| MarketEvent::MarketDataAdded { - nft_contract_id, - token_id, - price, - }, - ) - } - - pub fn buy_item( - &self, - from: u64, - nft_contract_id: ActorId, - token_id: TokenId, - value: u128, - ) -> MarketRunResult<(ActorId, ContractId, TokenId)> { - RunResult::new( - self.0.send_with_value( - from, - MarketAction::BuyItem { - nft_contract_id, - token_id, - }, - value, - ), - |(owner, nft_contract_id, token_id)| MarketEvent::ItemSold { - owner, - nft_contract_id, - token_id, - }, - ) - } - - pub fn add_offer( - &self, - from: ActorId, - nft_contract_id: ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - value: u128, - ) -> MarketRunResult<(ContractId, Option, TokenId, Price)> { - RunResult::new( - self.0.send_with_value( - from.as_ref(), - MarketAction::AddOffer { - nft_contract_id, - ft_contract_id, - token_id, - price, - }, - value, - ), - |(nft_contract_id, ft_contract_id, token_id, price)| MarketEvent::OfferAdded { - nft_contract_id, - ft_contract_id, - token_id, - price, - }, - ) - } - - pub fn accept_offer( - &self, - from: ActorId, - nft_contract_id: ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> MarketRunResult<(ContractId, TokenId, ActorId, Price)> { - RunResult::new( - self.0.send( - from.as_ref(), - MarketAction::AcceptOffer { - nft_contract_id, - token_id, - ft_contract_id, - price, - }, - ), - |(nft_contract_id, token_id, new_owner, price)| MarketEvent::OfferAccepted { - nft_contract_id, - token_id, - new_owner, - price, - }, - ) - } - - pub fn withdraw( - &self, - from: ActorId, - nft_contract_id: ContractId, - token_id: TokenId, - ft_contract_id: Option, - price: Price, - ) -> MarketRunResult<(ContractId, TokenId, Price)> { - RunResult::new( - self.0.send( - from.as_ref(), - MarketAction::Withdraw { - nft_contract_id, - token_id, - ft_contract_id, - price, - }, - ), - |(nft_contract_id, token_id, price)| MarketEvent::Withdraw { - nft_contract_id, - token_id, - price, - }, - ) - } - - pub fn create_auction( - &self, - _sys: &System, - from: u64, - (nft_contract_id, token_id, ft_contract_id): (ContractId, TokenId, Option), - min_price: u128, - bid_period: u64, - duration: u64, - ) -> MarketRunResult<(ContractId, TokenId, Price)> { - RunResult::new( - self.0.send( - from, - MarketAction::CreateAuction { - nft_contract_id, - ft_contract_id, - token_id, - min_price, - bid_period, - duration, - }, - ), - |(nft_contract_id, token_id, price)| MarketEvent::AuctionCreated { - nft_contract_id, - token_id, - price, - }, - ) - } - - pub fn add_bid( - &self, - from: u64, - nft_contract_id: ActorId, - token_id: TokenId, - price: u128, - value: u128, - ) -> MarketRunResult<(ContractId, TokenId, Price)> { - RunResult::new( - self.0.send_with_value( - from, - MarketAction::AddBid { - nft_contract_id, - token_id, - price, - }, - value, - ), - |(nft_contract_id, token_id, price)| MarketEvent::BidAdded { - nft_contract_id, - token_id, - price, - }, - ) - } - - pub fn settle_auction( - &self, - from: u64, - nft_contract_id: ActorId, - token_id: TokenId, - ) -> MarketRunResult { - RunResult::new( - self.0.send( - from, - MarketAction::SettleAuction { - nft_contract_id, - token_id, - }, - ), - |market_event| market_event, - ) - } -} - -pub struct MarketMetaState<'a>(&'a InnerProgram<'a>); - -impl MarketMetaState<'_> { - pub fn state(&self) -> MetaStateReply { - MetaStateReply(self.0.read_state(0).expect("Unexpected invalid state.")) - } -} - -pub struct MarketInit<'a>(InnerProgram<'a>, bool); - -impl<'a> MarketInit<'a> { - #[track_caller] - pub fn failed(self) { - assert!(self.1) - } - - #[track_caller] - pub fn succeed(self) -> Market<'a> { - assert!(!self.1); - Market(self.0) - } -} diff --git a/contracts/nft-marketplace/tests/utils/mod.rs b/contracts/nft-marketplace/tests/utils/mod.rs deleted file mode 100644 index 0660f1113..000000000 --- a/contracts/nft-marketplace/tests/utils/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -mod common; -mod ftoken; -mod marketplace; -mod nftoken; -pub mod prelude; - -pub use common::*; -pub use ftoken::*; -pub use marketplace::*; -pub use nftoken::*; diff --git a/contracts/nft-marketplace/tests/utils/nftoken.rs b/contracts/nft-marketplace/tests/utils/nftoken.rs deleted file mode 100644 index 6d22076ad..000000000 --- a/contracts/nft-marketplace/tests/utils/nftoken.rs +++ /dev/null @@ -1,106 +0,0 @@ -use super::{prelude::*, MetaStateReply}; -use gear_lib_old::non_fungible_token::{io::*, token::Token}; -use gstd::ActorId; -use gtest::{Log, Program as InnerProgram, System}; -use nft_marketplace_io::*; -use non_fungible_token_io::{Collection, Config, InitNFT, NFTAction, NFTEvent}; - -pub struct NonFungibleToken<'a>(InnerProgram<'a>); - -impl Program for NonFungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> NonFungibleToken<'a> { - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm", - ); - - assert!(!program - .send( - ADMIN, - InitNFT { - royalties: Default::default(), - collection: Collection::default(), - config: Config { - authorized_minters: vec![ADMIN.into()], - ..Default::default() - } - } - ) - .main_failed()); - - Self(program) - } - - pub fn add_minter(&self, transaction_id: u64, to: u64) { - assert!(self - .0 - .send( - ADMIN, - NFTAction::AddMinter { - transaction_id, - minter_id: to.into() - } - ) - .contains(&Log::builder().payload(NFTEvent::MinterAdded { - minter_id: to.into() - }))); - } - - pub fn mint(&self, transaction_id: u64, from: u64) { - assert!(self - .0 - .send( - from, - NFTAction::Mint { - transaction_id, - token_metadata: Default::default() - } - ) - .contains(&Log::builder().payload(NFTEvent::Transfer(NFTTransfer { - from: ActorId::zero(), - to: from.into(), - token_id: TOKEN_ID.into(), - })))); - } - - pub fn approve(&self, transaction_id: u64, from: u64, to: ActorId, token_id: TokenId) { - assert!(self - .0 - .send( - from, - NFTAction::Approve { - transaction_id, - to, - token_id - } - ) - .contains(&Log::builder().payload(NFTEvent::Approval(NFTApproval { - owner: from.into(), - approved_account: to, - token_id: TOKEN_ID.into(), - })))); - } - - pub fn meta_state(&self) -> NonFungibleTokenMetaState<'_> { - NonFungibleTokenMetaState(&self.0) - } -} - -#[allow(dead_code)] -pub struct NonFungibleTokenMetaState<'a>(&'a InnerProgram<'a>); - -impl NonFungibleTokenMetaState<'_> { - pub fn owner_id(self, token_id: u64) -> MetaStateReply { - MetaStateReply(self.token(token_id).0.owner_id) - } - - pub fn token(self, _token_id: u64) -> MetaStateReply { - unreachable!() - } -} diff --git a/contracts/nft-marketplace/tests/utils/prelude.rs b/contracts/nft-marketplace/tests/utils/prelude.rs deleted file mode 100644 index a0d0940e9..000000000 --- a/contracts/nft-marketplace/tests/utils/prelude.rs +++ /dev/null @@ -1,16 +0,0 @@ -pub use super::{Market, Program}; -pub use gstd::prelude::*; -pub use nft_marketplace::*; - -pub const BUYER: u64 = 100; -pub const SELLER: u64 = 101; -pub const NFT_PRICE: u128 = 1_000_000_000_000_000; -pub const ADMIN: u64 = 200; -pub const TREASURY_ID: u64 = 300; -pub const TREASURY_FEE: u16 = 3; -pub const TOKEN_ID: u64 = 0; -pub const BID_PERIOD: u64 = 3_600_000; -pub const DURATION: u64 = 86_400_000; -pub const PARTICIPANTS: &[u64] = &[500, 501, 502, 503, 504]; -pub const MARKET_ID: u64 = 3; -pub const MIN_BID_PERIOD: u64 = 60_000; diff --git a/contracts/nft-marketplace/tests/utils_gclient/common.rs b/contracts/nft-marketplace/tests/utils_gclient/common.rs deleted file mode 100644 index 3e3348e1d..000000000 --- a/contracts/nft-marketplace/tests/utils_gclient/common.rs +++ /dev/null @@ -1,165 +0,0 @@ -use blake2_rfc::blake2b; -use gclient::GearApi; -use gstd::{ActorId, Encode}; - -pub const HASH_LENGTH: usize = 32; -pub type Hash = [u8; HASH_LENGTH]; -pub const USERS: [&str; 5] = ["//Mike", "//John", "//Alex", "//Peter", "//Alice"]; -pub const USERS_FUND: u128 = 1_000_000_000_000_000; -pub const SELLER: &str = "//Markus"; -pub const BUYER: &str = "//Jim"; -pub const TREASURY: &str = "//Treasury"; -pub const TREASURY_FEE: u16 = 3; -pub const TOKEN_ID: u128 = 0; -pub const NFT_PRICE: u128 = 1_000_000_000_000_000; -pub const BID_PERIOD: u64 = 3_600_000; -pub const DURATION: u64 = 86_400_000; - -static mut API: Option = None; - -pub async fn init_gear_api_from_path() -> gclient::Result { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - unsafe { API = Some(api.clone()) }; - - Ok(api) -} - -pub fn gear_api_from_path() -> GearApi { - unsafe { API.as_ref().unwrap().clone() } -} - -pub fn get_current_actor_id(api: &GearApi) -> ActorId { - ActorId::new(*api.account_id().clone().as_ref()) -} - -pub async fn get_user_to_actor_id(user: impl AsRef) -> gclient::Result { - let api = gear_api_from_path().with(user)?; - let actor_id = ActorId::new(*api.account_id().clone().as_ref()); - - Ok(actor_id) -} - -pub async fn init(api: &GearApi) -> gclient::Result<(ActorId, ActorId, ActorId)> { - for user in &USERS[..4] { - let user_id = get_user_to_actor_id(user).await?; - api.transfer_keep_alive( - user_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - USERS_FUND, - ) - .await?; - } - - let seller_id = get_user_to_actor_id(SELLER).await?; - let buyer_id = get_user_to_actor_id(BUYER).await?; - let treasury_id = get_user_to_actor_id(TREASURY).await?; - - api.transfer_keep_alive( - seller_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - api.total_balance(api.account_id()).await? / 2, - ) - .await?; - api.transfer_keep_alive( - buyer_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - api.total_balance(api.account_id()).await? / 2, - ) - .await?; - api.transfer_keep_alive( - treasury_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - USERS_FUND, - ) - .await?; - - let ft_contract = super::ft::init(api).await?; - let nft_contract = super::nft::init(api).await?; - - super::nft::add_minter( - api, - &mut api.subscribe().await?, - nft_contract, - 0, - get_user_to_actor_id(SELLER).await?, - ) - .await?; - - { - let seller_api = gear_api_from_path().with(SELLER)?; - let mut listener = seller_api.subscribe().await?; - super::nft::mint(&seller_api, &mut listener, &nft_contract, 0).await?; - } - - let admin_id = get_current_actor_id(api); - let treasury_id = get_user_to_actor_id(TREASURY).await?; - let market_contract = super::marketplace::init(api, &admin_id, &treasury_id).await?; - - { - let buyer_api = gear_api_from_path().with(BUYER)?; - let mut listener = buyer_api.subscribe().await?; - super::ft::approve( - &buyer_api, - &mut listener, - &ft_contract, - 0, - &market_contract, - NFT_PRICE, - ) - .await?; - } - - { - let seller_api = gear_api_from_path().with(SELLER)?; - let mut listener = seller_api.subscribe().await?; - super::nft::approve( - &seller_api, - &mut listener, - &nft_contract, - 1, - &market_contract, - TOKEN_ID.into(), - ) - .await?; - } - let mut listener = api.subscribe().await?; - super::marketplace::add_ft_contract(api, &mut listener, &market_contract, &ft_contract, false) - .await?; - super::marketplace::add_nft_contract( - api, - &mut listener, - &market_contract, - &nft_contract, - false, - ) - .await?; - - Ok((ft_contract, nft_contract, market_contract)) -} - -pub async fn upload_with_code_hash( - api: &GearApi, - wasm_path: impl AsRef, -) -> gclient::Result { - let mut code_hash: Hash = Default::default(); - let wasm_code = gclient::code_from_os(wasm_path.as_ref())?; - - code_hash[..].copy_from_slice(blake2b::blake2b(HASH_LENGTH, &[], &wasm_code).as_bytes()); - - api.upload_code(wasm_code).await?; - - Ok(code_hash) -} diff --git a/contracts/nft-marketplace/tests/utils_gclient/ft.rs b/contracts/nft-marketplace/tests/utils_gclient/ft.rs deleted file mode 100644 index 8a3d7ebb7..000000000 --- a/contracts/nft-marketplace/tests/utils_gclient/ft.rs +++ /dev/null @@ -1,160 +0,0 @@ -use super::common; -use gclient::{EventListener, EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -const FT_STORAGE_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm"; -const FT_LOGIC_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm"; -const FT_MAIN_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm"; - -pub async fn init(api: &GearApi) -> gclient::Result { - let storage_code_hash = common::upload_with_code_hash(api, FT_STORAGE_WASM_PATH).await?; - let ft_logic_code_hash = common::upload_with_code_hash(api, FT_LOGIC_WASM_PATH).await?; - - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let init_ftoken_config = InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - } - .encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(FT_MAIN_WASM_PATH)?, - init_ftoken_config.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(FT_MAIN_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - init_ftoken_config, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn mint( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - tx_id: u64, - recipient: &ActorId, - amount: u128, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - FTokenAction::Message { - transaction_id: tx_id, - payload: LogicAction::Mint { - recipient: *recipient, - amount, - }, - }, - ) - .await?; - - assert_ft_ok(&reply); - - Ok(()) -} - -pub async fn balance_of( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - account: &ActorId, -) -> gclient::Result { - let reply = send_message( - api, - listener, - program_id, - FTokenAction::GetBalance(*account), - ) - .await?; - let FTokenEvent::Balance(balance) = - FTokenEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `FTokenEvent` data.") - else { - std::panic!("Unexpected invalid `FTokenEvent`."); - }; - - Ok(balance) -} - -pub async fn approve( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - tx_id: u64, - approved_account: &ActorId, - amount: u128, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - FTokenAction::Message { - transaction_id: tx_id, - payload: LogicAction::Approve { - approved_account: *approved_account, - amount, - }, - }, - ) - .await?; - - assert_ft_ok(&reply); - - Ok(()) -} - -async fn send_message( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - payload: FTokenAction, -) -> gclient::Result> { - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, 0) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - Ok(reply_data_result.expect("Unexpected invalid reply.")) -} - -fn assert_ft_ok(mut reply: &[u8]) { - let FTokenEvent::Ok = - FTokenEvent::decode(&mut reply).expect("Unexpected invalid `FTokenEvent` data.") - else { - std::panic!("Unexpected invalid `FTokenEvent`."); - }; -} diff --git a/contracts/nft-marketplace/tests/utils_gclient/marketplace.rs b/contracts/nft-marketplace/tests/utils_gclient/marketplace.rs deleted file mode 100644 index cbee7fd70..000000000 --- a/contracts/nft-marketplace/tests/utils_gclient/marketplace.rs +++ /dev/null @@ -1,515 +0,0 @@ -use super::common; -use gclient::{EventListener, EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; -use nft_marketplace_io::*; - -const MARKETPLACE_WASM_PATH: &str = - "../target/wasm32-unknown-unknown/release/nft_marketplace.opt.wasm"; -pub const TREASURY_FEE: u16 = 3; - -pub async fn init(api: &GearApi, admin: &ActorId, treasury: &ActorId) -> gclient::Result { - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let init_marketplace_config = InitMarket { - admin_id: *admin, - treasury_id: *treasury, - treasury_fee: TREASURY_FEE, - } - .encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(MARKETPLACE_WASM_PATH)?, - init_marketplace_config.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(MARKETPLACE_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - init_marketplace_config, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn add_nft_contract( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AddNftContract(*nft_contract), - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::NftContractAdded(_)): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -pub async fn add_ft_contract( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - ft_contract: &ActorId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AddFTContract(*ft_contract), - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::FtContractAdded(_)): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn add_market_data( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - ft_contract: Option, - token_id: TokenId, - price: Option, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AddMarketData { - nft_contract_id: *nft_contract, - ft_contract_id: ft_contract, - token_id, - price, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::MarketDataAdded { - nft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -pub async fn buy_item( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - token_id: TokenId, - value: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::BuyItem { - nft_contract_id: *nft_contract, - token_id, - }, - value, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::ItemSold { - owner: _, - token_id: _, - nft_contract_id: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn create_auction( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - ft_contract: Option, - token_id: TokenId, - min_price: u128, - bid_period: u64, - duration: u64, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::CreateAuction { - nft_contract_id: *nft_contract, - ft_contract_id: ft_contract, - token_id, - min_price, - bid_period, - duration, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::AuctionCreated { - nft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(unused)] -pub async fn add_bid( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - token_id: TokenId, - price: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AddBid { - nft_contract_id: *nft_contract, - token_id, - price, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::BidAdded { - nft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(unused)] -pub async fn settle_auction( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - token_id: TokenId, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::SettleAuction { - nft_contract_id: *nft_contract, - token_id, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::AuctionSettled { - nft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn add_offer( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - ft_contract: Option, - token_id: TokenId, - price: u128, - value: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AddOffer { - nft_contract_id: *nft_contract, - ft_contract_id: ft_contract, - token_id, - price, - }, - value, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::OfferAdded { - nft_contract_id: _, - ft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn withdraw( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - ft_contract: Option, - token_id: TokenId, - price: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::Withdraw { - nft_contract_id: *nft_contract, - ft_contract_id: ft_contract, - token_id, - price, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::Withdraw { - nft_contract_id: _, - token_id: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -#[allow(clippy::too_many_arguments)] -pub async fn accept_offer( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - nft_contract: &ActorId, - ft_contract: Option, - token_id: TokenId, - price: u128, - should_fail: bool, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - MarketAction::AcceptOffer { - nft_contract_id: *nft_contract, - ft_contract_id: ft_contract, - token_id, - price, - }, - 0, - ) - .await?; - - if !should_fail { - let Ok(MarketEvent::OfferAccepted { - nft_contract_id: _, - token_id: _, - new_owner: _, - price: _, - }): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketEvent` data.") - else { - std::panic!("Unexpected invalid `MarketEvent`."); - }; - } else { - let Err(_): Result = - Result::decode(&mut reply.as_ref()).expect("Unexpected invalid `MarketErr` data.") - else { - std::panic!("Unexpected invalid `MarketErr`."); - }; - } - - Ok(()) -} - -pub async fn state(api: &GearApi, program_id: &ActorId) -> gclient::Result { - api.read_state( - program_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - vec![], - ) - .await -} - -async fn send_message( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - payload: MarketAction, - value: u128, -) -> gclient::Result> { - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), value, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, value) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - Ok(reply_data_result.expect("Unexpected invalid reply.")) -} diff --git a/contracts/nft-marketplace/tests/utils_gclient/mod.rs b/contracts/nft-marketplace/tests/utils_gclient/mod.rs deleted file mode 100644 index b897c2816..000000000 --- a/contracts/nft-marketplace/tests/utils_gclient/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod common; -pub mod ft; -pub mod marketplace; -pub mod nft; diff --git a/contracts/nft-marketplace/tests/utils_gclient/nft.rs b/contracts/nft-marketplace/tests/utils_gclient/nft.rs deleted file mode 100644 index 143128deb..000000000 --- a/contracts/nft-marketplace/tests/utils_gclient/nft.rs +++ /dev/null @@ -1,164 +0,0 @@ -use crate::utils_gclient::common::get_user_to_actor_id; - -use super::common; -use gclient::{EventListener, EventProcessor, GearApi}; -use gear_lib_old::non_fungible_token::token::TokenMetadata; -use gstd::{prelude::*, ActorId}; -use nft_marketplace_io::*; -use non_fungible_token_io::{Collection, Config, InitNFT, NFTAction, NFTEvent}; - -const NFT_WASM_PATH: &str = "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm"; - -pub async fn init(api: &GearApi) -> gclient::Result { - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let init_nft_config = InitNFT { - royalties: Default::default(), - collection: Collection::default(), - config: Config { - authorized_minters: vec![get_user_to_actor_id(common::USERS[4]).await?], - ..Default::default() - }, - } - .encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(NFT_WASM_PATH)?, - init_nft_config.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(NFT_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - init_nft_config, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn mint( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - tx_id: u64, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - NFTAction::Mint { - transaction_id: tx_id, - token_metadata: TokenMetadata { - name: "a".to_owned(), - description: "b".to_owned(), - media: "c".to_owned(), - reference: "d".to_owned(), - }, - }, - ) - .await?; - - let NFTEvent::Transfer(_) = - NFTEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `NFTEvent` data.") - else { - std::panic!("Unexpected invalid `NFTEvent`."); - }; - - Ok(()) -} - -pub async fn approve( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - tx_id: u64, - to: &ActorId, - token_id: TokenId, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - program_id, - NFTAction::Approve { - transaction_id: tx_id, - to: *to, - token_id, - }, - ) - .await?; - - let NFTEvent::Approval(_) = - NFTEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `NFTEvent` data.") - else { - std::panic!("Unexpected invalid `NFTEvent`."); - }; - - Ok(()) -} - -pub async fn add_minter( - api: &GearApi, - listener: &mut EventListener, - program_id: ActorId, - tx_id: u64, - to: ActorId, -) -> gclient::Result<()> { - let reply = send_message( - api, - listener, - &program_id, - NFTAction::AddMinter { - transaction_id: tx_id, - minter_id: to, - }, - ) - .await?; - - let NFTEvent::MinterAdded { .. } = - NFTEvent::decode(&mut reply.as_ref()).expect("Unexpected invalid `NFTEvent` data.") - else { - std::panic!("Unexpected invalid `NFTEvent`."); - }; - - Ok(()) -} - -async fn send_message( - api: &GearApi, - listener: &mut EventListener, - program_id: &ActorId, - payload: NFTAction, -) -> gclient::Result> { - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, 0) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - Ok(reply_data_result.expect("Unexpected invalid reply.")) -} diff --git a/contracts/nft-master/Cargo.toml b/contracts/nft-master/Cargo.toml deleted file mode 100644 index c312ab608..000000000 --- a/contracts/nft-master/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "nft-master" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -nft-master-io.workspace = true -gstd.workspace = true - -[build-dependencies] -nft-master-io.workspace = true -gear-wasm-builder.workspace = true - -[dev-dependencies] -gtest.workspace = true -gstd.workspace = true -tokio.workspace = true -gclient.workspace = true diff --git a/contracts/nft-master/README.md b/contracts/nft-master/README.md deleted file mode 100644 index b2e276c90..000000000 --- a/contracts/nft-master/README.md +++ /dev/null @@ -1,28 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=nft-master/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/nft_master_io) - -# [NFT master](https://wiki.gear-tech.io/docs/developing-contracts/token-standards/gnft721) - -This smart contract serves as a generic router for standardized gNFT (gRC-721) contracts on the blockchain network. Its main function is to provide an approved list of addresses for gNFT smart contracts that have been uploaded to Gear-powered networks. Only smart contract operators can change the approved address list. - -In general, this smart contract allows for the modification of an entire gNFT contract logic, the addition of new features, and the creation of new collections without sacrificing the backward compatibility. This enables a web application to dynamically load the necessary gNFTs with all updates, without requiring any additional frontend code or redeployment. - -### 🏗️ Building - -```sh -cargo b -r -p "nft-master*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "nft-master*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "nft-master*" -``` diff --git a/contracts/nft-master/build.rs b/contracts/nft-master/build.rs deleted file mode 100644 index 4713bcdd2..000000000 --- a/contracts/nft-master/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use nft_master_io::NFTMasterMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/nft-master/io/Cargo.toml b/contracts/nft-master/io/Cargo.toml deleted file mode 100644 index e6d6b56b5..000000000 --- a/contracts/nft-master/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "nft-master-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/nft-master/io/src/lib.rs b/contracts/nft-master/io/src/lib.rs deleted file mode 100644 index c520d1766..000000000 --- a/contracts/nft-master/io/src/lib.rs +++ /dev/null @@ -1,67 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub struct NFTMasterMetadata; - -impl Metadata for NFTMasterMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTMasterInit {} - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTMasterAction { - AddNFTContract { nft_contract: ActorId, meta: String }, - RemoveNFTContract { nft_contract: ActorId }, - AddOperator { operator: ActorId }, - RemoveOperator { operator: ActorId }, -} - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTMasterEvent { - NFTContractAdded { - operator: ActorId, - nft_contract: ActorId, - meta: String, - }, - NFTContractUpdated { - operator: ActorId, - nft_contract: ActorId, - meta: String, - }, - NFTContractDeleted { - operator: ActorId, - nft_contract: ActorId, - }, - OperatorAdded { - operator: ActorId, - new_operator: ActorId, - }, - OperatorRemoved { - operator: ActorId, - removed_operator: ActorId, - }, - Error(String), -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTMasterState { - pub nfts: Vec<(ActorId, String)>, - pub operators: Vec, -} diff --git a/contracts/nft-master/src/lib.rs b/contracts/nft-master/src/lib.rs deleted file mode 100644 index 2e3dc8900..000000000 --- a/contracts/nft-master/src/lib.rs +++ /dev/null @@ -1,154 +0,0 @@ -#![no_std] - -use gstd::{ - collections::{HashMap, HashSet}, - msg, - prelude::*, - ActorId, -}; -use nft_master_io::*; - -#[derive(Debug)] -struct NFTMaster { - pub nfts: HashMap, - pub operators: HashSet, -} - -impl NFTMaster { - pub fn new_with_operator(operator: &ActorId) -> Self { - let mut operators = HashSet::new(); - operators.insert(*operator); - - NFTMaster { - nfts: HashMap::new(), - operators, - } - } - - pub fn add_nft_contract( - &mut self, - caller: &ActorId, - nft_contract: &ActorId, - meta: String, - ) -> NFTMasterEvent { - if !self.operators.contains(caller) { - NFTMasterEvent::Error("Only operator can change nfts.".to_owned()) - } else if self.nfts.insert(*nft_contract, meta.clone()).is_some() { - NFTMasterEvent::NFTContractUpdated { - operator: *caller, - nft_contract: *nft_contract, - meta, - } - } else { - NFTMasterEvent::NFTContractAdded { - operator: *caller, - nft_contract: *nft_contract, - meta, - } - } - } - - pub fn remove_nft_contract( - &mut self, - caller: &ActorId, - nft_contract: &ActorId, - ) -> NFTMasterEvent { - if !self.operators.contains(caller) { - NFTMasterEvent::Error("Only operator can remove nfts.".to_owned()) - } else if !self.nfts.contains_key(nft_contract) { - NFTMasterEvent::Error("NFT does not exist.".to_owned()) - } else { - self.nfts.remove(nft_contract); - NFTMasterEvent::NFTContractDeleted { - operator: *caller, - nft_contract: *nft_contract, - } - } - } - - pub fn add_operator(&mut self, caller: &ActorId, operator: &ActorId) -> NFTMasterEvent { - if !self.operators.contains(caller) { - NFTMasterEvent::Error("Only operator can add operators.".to_owned()) - } else if self.operators.contains(operator) { - NFTMasterEvent::Error("Operator already exist.".to_owned()) - } else { - self.operators.insert(*operator); - NFTMasterEvent::OperatorAdded { - operator: *caller, - new_operator: *operator, - } - } - } - - pub fn remove_operator(&mut self, caller: &ActorId, operator: &ActorId) -> NFTMasterEvent { - if !self.operators.contains(caller) { - NFTMasterEvent::Error("Only operator can remove operators.".to_owned()) - } else if !self.operators.contains(operator) { - NFTMasterEvent::Error("Operator does not exist.".to_owned()) - } else { - self.operators.remove(operator); - NFTMasterEvent::OperatorRemoved { - operator: *caller, - removed_operator: *operator, - } - } - } -} - -impl From<&NFTMaster> for NFTMasterState { - fn from(value: &NFTMaster) -> Self { - NFTMasterState { - nfts: value.nfts.iter().map(|(k, v)| (*k, v.clone())).collect(), - operators: value.operators.iter().copied().collect(), - } - } -} - -static mut NFT_MASTER: Option = None; - -#[no_mangle] -extern fn init() { - let _init: NFTMasterInit = msg::load().expect("Unable to decode `NFTMasterInit`."); - let caller = msg::source(); - - unsafe { NFT_MASTER = Some(NFTMaster::new_with_operator(&caller)) } -} - -#[no_mangle] -extern fn handle() { - let action: NFTMasterAction = msg::load().expect("Couldn't load `NFTMasterAction`."); - let nft_master: &mut NFTMaster = - unsafe { NFT_MASTER.as_mut().expect("Couldn't load `NFTMaster`.") }; - - let caller = msg::source(); - - let event = match action { - NFTMasterAction::AddNFTContract { nft_contract, meta } => { - nft_master.add_nft_contract(&caller, &nft_contract, meta) - } - NFTMasterAction::RemoveNFTContract { nft_contract } => { - nft_master.remove_nft_contract(&caller, &nft_contract) - } - NFTMasterAction::AddOperator { operator } => nft_master.add_operator(&caller, &operator), - NFTMasterAction::RemoveOperator { operator } => { - nft_master.remove_operator(&caller, &operator) - } - }; - - msg::reply(event, 0).expect("Failed to encode or reply with `NFTMasterEvent`."); -} - -#[no_mangle] -extern fn state() { - msg::reply( - unsafe { - let nft_master = NFT_MASTER - .as_ref() - .expect("Uninitialized `NFTMaster` state."); - let nft_master_state: NFTMasterState = nft_master.into(); - nft_master_state - }, - 0, - ) - .expect("Failed to share `NFTMarketState`."); -} diff --git a/contracts/nft-master/state/Cargo.toml b/contracts/nft-master/state/Cargo.toml deleted file mode 100644 index df70dfb75..000000000 --- a/contracts/nft-master/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "nft-master-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -nft-master-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/nft-master/state/build.rs b/contracts/nft-master/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/nft-master/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/nft-master/state/src/lib.rs b/contracts/nft-master/state/src/lib.rs deleted file mode 100644 index 9897dd6b0..000000000 --- a/contracts/nft-master/state/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; -use nft_master_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = NFTMasterState; - - pub fn get_nfts(state: State) -> Vec<(ActorId, String)> { - state.nfts - } - - pub fn get_operators(state: State) -> Vec { - state.operators - } -} diff --git a/contracts/nft-master/tests/add_nft_contract.rs b/contracts/nft-master/tests/add_nft_contract.rs deleted file mode 100644 index a1e65a004..000000000 --- a/contracts/nft-master/tests/add_nft_contract.rs +++ /dev/null @@ -1,44 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::nft_master::NFTMasterMock; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let nft = utils::NFTS[0]; - let nft_id = nft.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_nft_contract(utils::ADMIN, &nft_id, "1", false); - let state = nft_master_mock.get_state(); - - assert_eq!(state.nfts[0], (nft_id, "1".to_owned())); - - nft_master_mock.add_nft_contract(utils::ADMIN, &nft_id, "2", false); - let state = nft_master_mock.get_state(); - - assert_eq!(state.nfts[0], (nft_id, "2".to_owned())); -} - -#[test] -fn fail_only_operator_can_add_nft() { - let system = System::new(); - system.init_logger(); - - let fake_user = utils::USERS[0]; - - let nft = utils::NFTS[0]; - let nft_id = nft.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - nft_master_mock.add_nft_contract(fake_user, &nft_id, "1", true); -} diff --git a/contracts/nft-master/tests/add_operator.rs b/contracts/nft-master/tests/add_operator.rs deleted file mode 100644 index e5369994a..000000000 --- a/contracts/nft-master/tests/add_operator.rs +++ /dev/null @@ -1,60 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::nft_master::NFTMasterMock; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(utils::ADMIN, &user_id, false); - let state = nft_master_mock.get_state(); - - assert!(state.operators.contains(&user_id)); -} - -#[test] -fn fail_operator_already_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(utils::ADMIN, &user_id, false); - nft_master_mock.add_operator(utils::ADMIN, &user_id, true); -} - -#[test] -fn fail_only_operator_can_add_operator() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(user, &user_id, true); -} diff --git a/contracts/nft-master/tests/node_tests.rs b/contracts/nft-master/tests/node_tests.rs deleted file mode 100644 index 5773f8d7e..000000000 --- a/contracts/nft-master/tests/node_tests.rs +++ /dev/null @@ -1,24 +0,0 @@ -mod utils_gclient; - -use gclient::GearApi; - -#[tokio::test] -async fn gclient_success() -> gclient::Result<()> { - let nft = 1337u64; - let nft_id = nft.into(); - - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let nft_master = utils_gclient::common::init(&api).await?; - let state = utils_gclient::nft_master::get_state(&api, &nft_master).await?; - - assert!(state.nfts.is_empty()); - assert!(!state.operators.is_empty()); - - utils_gclient::nft_master::add_nft_contract(&api, &nft_master, &nft_id, "1", false).await?; - let state = utils_gclient::nft_master::get_state(&api, &nft_master).await?; - - assert_eq!(state.nfts[0], (nft_id, "1".to_owned())); - - Ok(()) -} diff --git a/contracts/nft-master/tests/remove_nft_contract.rs b/contracts/nft-master/tests/remove_nft_contract.rs deleted file mode 100644 index bf91255e2..000000000 --- a/contracts/nft-master/tests/remove_nft_contract.rs +++ /dev/null @@ -1,65 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::nft_master::NFTMasterMock; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let nft = utils::NFTS[0]; - let nft_id = nft.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_nft_contract(utils::ADMIN, &nft_id, "1", false); - nft_master_mock.remove_nft_contract(utils::ADMIN, &nft_id, false); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); -} - -#[test] -fn fail_nft_does_not_exist() { - let system = System::new(); - system.init_logger(); - - let nft = utils::NFTS[0]; - let nft_id = nft.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_nft_contract(utils::ADMIN, &nft_id, "1", false); - nft_master_mock.remove_nft_contract(utils::ADMIN, &nft_id, false); - nft_master_mock.remove_nft_contract(utils::ADMIN, &nft_id, true); -} - -#[test] -fn fail_only_operator_can_remove_nft() { - let system = System::new(); - system.init_logger(); - - let nft = utils::NFTS[0]; - let nft_id = nft.into(); - - let fake_user = utils::USERS[0]; - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_nft_contract(utils::ADMIN, &nft_id, "1", false); - nft_master_mock.remove_nft_contract(fake_user, &nft_id, true); -} diff --git a/contracts/nft-master/tests/remove_operator.rs b/contracts/nft-master/tests/remove_operator.rs deleted file mode 100644 index 8148aae0e..000000000 --- a/contracts/nft-master/tests/remove_operator.rs +++ /dev/null @@ -1,67 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::nft_master::NFTMasterMock; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(utils::ADMIN, &user_id, false); - nft_master_mock.remove_operator(utils::ADMIN, &user_id, false); - let state = nft_master_mock.get_state(); - - assert!(!state.operators.contains(&user_id)); -} - -#[test] -fn fail_operator_does_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let fake_user = utils::USERS[1]; - let fake_user_id = fake_user.into(); - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(utils::ADMIN, &user_id, false); - nft_master_mock.remove_operator(utils::ADMIN, &fake_user_id, true); -} - -#[test] -fn fail_only_operator_can_remove_operators() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let fake_user = utils::USERS[1]; - - let nft_master_mock = Program::nft_master_mock(&system); - let state = nft_master_mock.get_state(); - - assert!(state.nfts.is_empty()); - assert_eq!(state.operators[0], utils::ADMIN.into()); - - nft_master_mock.add_operator(utils::ADMIN, &user_id, false); - nft_master_mock.remove_operator(fake_user, &user_id, true); -} diff --git a/contracts/nft-master/tests/utils/mod.rs b/contracts/nft-master/tests/utils/mod.rs deleted file mode 100644 index b8dcb3053..000000000 --- a/contracts/nft-master/tests/utils/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub mod nft_master; - -pub const ADMIN: u64 = 100; -pub const USERS: [u64; 3] = [101, 102, 103]; -#[allow(unused)] -pub const NFTS: [u64; 3] = [1001, 1002, 1003]; -pub const NFT_MASTER_ID: u64 = 200; diff --git a/contracts/nft-master/tests/utils/nft_master.rs b/contracts/nft-master/tests/utils/nft_master.rs deleted file mode 100644 index 733e1d834..000000000 --- a/contracts/nft-master/tests/utils/nft_master.rs +++ /dev/null @@ -1,85 +0,0 @@ -use super::{ADMIN, NFT_MASTER_ID}; -use gstd::{prelude::*, ActorId}; -use gtest::{Program, System}; -use nft_master_io::*; - -#[allow(dead_code)] -pub trait NFTMasterMock { - fn nft_master_mock(system: &System) -> Program<'_>; - fn add_nft_contract(&self, from: u64, nft_contract: &ActorId, meta: &str, error: bool); - fn remove_nft_contract(&self, from: u64, nft_contract: &ActorId, error: bool); - fn add_operator(&self, from: u64, operator: &ActorId, error: bool); - fn remove_operator(&self, from: u64, operator: &ActorId, error: bool); - fn send_nft_master_tx(&self, from: u64, action: NFTMasterAction, error: bool); - fn get_state(&self) -> NFTMasterState; -} - -impl NFTMasterMock for Program<'_> { - fn nft_master_mock(system: &System) -> Program<'_> { - let nft_master = Program::current_with_id(system, NFT_MASTER_ID); - assert!(!nft_master.send(ADMIN, NFTMasterInit {}).main_failed()); - - nft_master - } - - fn add_nft_contract(&self, from: u64, nft_contract: &ActorId, meta: &str, error: bool) { - self.send_nft_master_tx( - from, - NFTMasterAction::AddNFTContract { - nft_contract: *nft_contract, - meta: meta.to_owned(), - }, - error, - ) - } - - fn remove_nft_contract(&self, from: u64, nft_contract: &ActorId, error: bool) { - self.send_nft_master_tx( - from, - NFTMasterAction::RemoveNFTContract { - nft_contract: *nft_contract, - }, - error, - ) - } - - fn add_operator(&self, from: u64, operator: &ActorId, error: bool) { - self.send_nft_master_tx( - from, - NFTMasterAction::AddOperator { - operator: *operator, - }, - error, - ) - } - - fn remove_operator(&self, from: u64, operator: &ActorId, error: bool) { - self.send_nft_master_tx( - from, - NFTMasterAction::RemoveOperator { - operator: *operator, - }, - error, - ) - } - - fn send_nft_master_tx(&self, from: u64, action: NFTMasterAction, error: bool) { - let result = self.send(from, action); - assert!(!result.main_failed()); - - let maybe_error = result.log().iter().find_map(|log| { - let mut payload = log.payload(); - if let Ok(NFTMasterEvent::Error(error)) = NFTMasterEvent::decode(&mut payload) { - Some(error) - } else { - None - } - }); - - assert_eq!(maybe_error.is_some(), error); - } - - fn get_state(&self) -> NFTMasterState { - self.read_state(0).expect("Unexpected invalid state.") - } -} diff --git a/contracts/nft-master/tests/utils_gclient/common.rs b/contracts/nft-master/tests/utils_gclient/common.rs deleted file mode 100644 index dfb3140d5..000000000 --- a/contracts/nft-master/tests/utils_gclient/common.rs +++ /dev/null @@ -1,42 +0,0 @@ -use super::{nft_master, USERS}; -use gclient::GearApi; -use gstd::{prelude::*, ActorId}; - -pub const HASH_LENGTH: usize = 32; -pub type Hash = [u8; HASH_LENGTH]; - -pub fn get_current_actor_id(api: &GearApi) -> ActorId { - ActorId::new(*api.account_id().clone().as_ref()) -} - -pub async fn fund_users(api: &GearApi) -> gclient::Result<()> { - let balance = api.total_balance(api.account_id()).await?; - let amount = balance / (USERS.len() + 1) as u128; - - for user in USERS { - let user_id = get_user_to_actor_id(user).await?; - let user_program_id = user_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."); - - api.transfer_keep_alive(user_program_id, amount).await?; - } - - Ok(()) -} - -pub async fn init(api: &GearApi) -> gclient::Result { - fund_users(api).await?; - nft_master::init(api).await -} - -pub async fn get_user_to_actor_id(user: impl AsRef) -> gclient::Result { - let api = GearApi::dev_from_path("../target/tmp/gear") - .await? - .with(user)?; - let actor_id = ActorId::new(*api.account_id().clone().as_ref()); - - Ok(actor_id) -} diff --git a/contracts/nft-master/tests/utils_gclient/mod.rs b/contracts/nft-master/tests/utils_gclient/mod.rs deleted file mode 100644 index 422e49ce6..000000000 --- a/contracts/nft-master/tests/utils_gclient/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![allow(unused)] - -pub mod common; -pub mod nft_master; - -pub const USERS: [&str; 2] = ["//Jack", "//Alex"]; diff --git a/contracts/nft-master/tests/utils_gclient/nft_master.rs b/contracts/nft-master/tests/utils_gclient/nft_master.rs deleted file mode 100644 index 1429d9dbd..000000000 --- a/contracts/nft-master/tests/utils_gclient/nft_master.rs +++ /dev/null @@ -1,159 +0,0 @@ -use super::common; -use gclient::{EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; -use nft_master_io::*; - -const NFT_MASTER_WASM_PATH: &str = "../target/wasm32-unknown-unknown/release/nft_master.opt.wasm"; - -pub async fn init(api: &GearApi) -> gclient::Result { - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let nft_master_init = NFTMasterInit {}.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(NFT_MASTER_WASM_PATH)?, - nft_master_init.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(NFT_MASTER_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - nft_master_init, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn add_nft_contract( - api: &GearApi, - program_id: &ActorId, - nft_contract: &ActorId, - meta: &str, - error: bool, -) -> gclient::Result<()> { - let result = send_message( - api, - program_id, - NFTMasterAction::AddNFTContract { - nft_contract: *nft_contract, - meta: meta.to_owned(), - }, - 0, - ) - .await?; - assert_eq!(matches!(result, NFTMasterEvent::Error(_)), error); - - Ok(()) -} - -pub async fn remove_nft_contract( - api: &GearApi, - program_id: &ActorId, - nft_contract: &ActorId, - error: bool, -) -> gclient::Result<()> { - let result = send_message( - api, - program_id, - NFTMasterAction::RemoveNFTContract { - nft_contract: *nft_contract, - }, - 0, - ) - .await?; - assert_eq!(matches!(result, NFTMasterEvent::Error(_)), error); - - Ok(()) -} - -pub async fn add_operator( - api: &GearApi, - program_id: &ActorId, - operator: &ActorId, - error: bool, -) -> gclient::Result<()> { - let result = send_message( - api, - program_id, - NFTMasterAction::AddOperator { - operator: *operator, - }, - 0, - ) - .await?; - assert_eq!(matches!(result, NFTMasterEvent::Error(_)), error); - - Ok(()) -} - -pub async fn remove_operator( - api: &GearApi, - program_id: &ActorId, - operator: &ActorId, - error: bool, -) -> gclient::Result<()> { - let result = send_message( - api, - program_id, - NFTMasterAction::RemoveOperator { - operator: *operator, - }, - 0, - ) - .await?; - assert_eq!(matches!(result, NFTMasterEvent::Error(_)), error); - - Ok(()) -} - -pub async fn get_state(api: &GearApi, program_id: &ActorId) -> gclient::Result { - let program_id = program_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."); - api.read_state(program_id, vec![]).await -} - -async fn send_message( - api: &GearApi, - program_id: &ActorId, - payload: NFTMasterAction, - value: u128, -) -> gclient::Result { - let mut listener = api.subscribe().await?; - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), value, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, value) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - let reply_data = reply_data_result.expect("Unexpected invalid reply data result."); - - Ok(NFTMasterEvent::decode(&mut reply_data.as_ref())?) -} diff --git a/contracts/nft-pixelboard/Cargo.toml b/contracts/nft-pixelboard/Cargo.toml deleted file mode 100644 index 9736c30cf..000000000 --- a/contracts/nft-pixelboard/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "nft-pixelboard" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -nft-pixelboard-io.workspace = true -gear-lib-old.workspace = true -sharded-fungible-token-io.workspace = true -non-fungible-token-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -# External binaries - -non-fungible-token.workspace = true -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -nft-pixelboard-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/nft-pixelboard/README.md b/contracts/nft-pixelboard/README.md deleted file mode 100644 index 809b2d2b3..000000000 --- a/contracts/nft-pixelboard/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=nft-pixelboard/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/nft_pixelboard_io) - -# [NFT pixelboard](https://wiki.gear-tech.io/docs/examples/NFTs/nft-pixelboard) - -### 🏗️ Building - -```sh -cargo b -r -p "nft-pixelboard*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "nft-pixelboard*" -``` diff --git a/contracts/nft-pixelboard/build.rs b/contracts/nft-pixelboard/build.rs deleted file mode 100644 index 121de6fde..000000000 --- a/contracts/nft-pixelboard/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use nft_pixelboard_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/nft-pixelboard/io/Cargo.toml b/contracts/nft-pixelboard/io/Cargo.toml deleted file mode 100644 index bf0bfbb3c..000000000 --- a/contracts/nft-pixelboard/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "nft-pixelboard-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -gmeta.workspace = true diff --git a/contracts/nft-pixelboard/io/src/lib.rs b/contracts/nft-pixelboard/io/src/lib.rs deleted file mode 100644 index d5d38159d..000000000 --- a/contracts/nft-pixelboard/io/src/lib.rs +++ /dev/null @@ -1,352 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::token::{TokenId, TokenMetadata}; -use gmeta::{InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = InOut>; - type Handle = InOut>; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct NFTPixelboardState { - pub owner: ActorId, - pub block_side_length: BlockSideLength, - pub pixel_price: u128, - pub resolution: Resolution, - pub commission_percentage: u8, - pub painting: Vec, - - pub rectangles_by_token_ids: Vec<(TokenId, Rectangle)>, - pub tokens_by_rectangles: Vec<(Rectangle, TokenInfo)>, - - pub ft_program: ActorId, - pub nft_program: ActorId, - - pub txs: Vec<(ActorId, (TransactionId, NFTPixelboardAction))>, - pub tx_id: TransactionId, -} -/// The maximum price that can be set to a pixel. -/// -/// This number is calculated to avoid an overflow and precisely calculate a -/// resale commission. Here's an explanation. -/// -/// The maximum number of pixels that a canvas can contain is -/// [`BlockSideLength::MAX`]² = 2³². So the maximum price that each pixel can -/// have is [`u128::MAX`] / [`BlockSideLength::MAX`]² = 2⁹⁶. -/// -/// To calculate the commission, the number can be multiplied by 100, so, to -/// avoid an overflow, the number must be divided by 100. Hence 2⁹⁶ / 100. -pub const MAX_PIXEL_PRICE: u128 = 2u128.pow(96) / 100; - -/// A block side length. -/// -/// It's also used to store pixel [`Coordinates`], [`Resolution`] of a canvas, -/// and NFT [`Rectangle`]s. -pub type BlockSideLength = u16; -/// A pixel color. -pub type Color = u8; -/// A transaction id for tracking transactions in the fungible token contract. -pub type TransactionId = u64; - -/// Coordinates of the corners of an NFT rectangle on a canvas. -#[derive(Decode, Encode, TypeInfo, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Default)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Rectangle { - pub top_left_corner: Coordinates, - pub bottom_right_corner: Coordinates, -} - -impl Rectangle { - pub fn width(&self) -> BlockSideLength { - self.bottom_right_corner.x - self.top_left_corner.x - } - - pub fn height(&self) -> BlockSideLength { - self.bottom_right_corner.y - self.top_left_corner.y - } -} - -impl - From<( - (BlockSideLength, BlockSideLength), - (BlockSideLength, BlockSideLength), - )> for Rectangle -{ - fn from( - rectangle: ( - (BlockSideLength, BlockSideLength), - (BlockSideLength, BlockSideLength), - ), - ) -> Self { - Self { - top_left_corner: rectangle.0.into(), - bottom_right_corner: rectangle.1.into(), - } - } -} - -/// Coordinates of some pixel on a canvas. -#[derive(Decode, Encode, TypeInfo, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Default)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Coordinates { - pub x: BlockSideLength, - pub y: BlockSideLength, -} - -impl From<(BlockSideLength, BlockSideLength)> for Coordinates { - fn from((x, y): (BlockSideLength, BlockSideLength)) -> Self { - Self { x, y } - } -} - -/// A resolution of a canvas. -#[derive(Decode, Encode, Default, Clone, Copy, TypeInfo, Debug, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Resolution { - pub width: BlockSideLength, - pub height: BlockSideLength, -} - -impl From<(BlockSideLength, BlockSideLength)> for Resolution { - fn from((width, height): (BlockSideLength, BlockSideLength)) -> Self { - Self { width, height } - } -} - -/// An NFT with its [`Rectangle`] and [`TokenInfo`]. -#[derive(Decode, Encode, TypeInfo, Clone, Copy, Debug, Default, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Token(pub Rectangle, pub TokenInfo); - -/// NFT info. -#[derive(Decode, Encode, TypeInfo, Clone, Copy, Debug, Default, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TokenInfo { - pub token_id: Option, - pub owner: ActorId, - /// If this field is [`None`], then this NFT isn't for sale, and vice versa. - /// - /// To calculate a price of the entire NFT, its area must be calculated and - /// multiplied by `pixel_price`. The area can be calculated by multiplying a - /// [width](`Rectangle::width`) & [height](`Rectangle::height`) from NFT - /// [`Rectangle`]. NFT [`Rectangle`] can be obtained by - /// [`token_info()`](../nft_pixelboard_state/metafns/fn.token_info.html) using `token_id` from this - /// struct. - pub pixel_price: Option, -} - -/// Initializes the NFT pixelboard program. -/// -/// # Requirements -/// * `owner` address mustn't be [`ActorId::zero()`]. -/// * `block_side_length` must be more than 0. -/// * `pixel_price` mustn't be more than [`MAX_PIXEL_PRICE`]. -/// * A [width](`Resolution#structfield.width`) & -/// [height](`Resolution#structfield.height`) (`resolution`) of a canvas must be -/// more than 0. -/// * Each side of `resolution` must be a multiple of `block_side_length`. -/// * `painting` length must equal a pixel count in a canvas (which can be -/// calculated by multiplying a [width](`Resolution#structfield.width`) & -/// [height](`Resolution#structfield.height`) from `resolution`). -/// * `commission_percentage` mustn't be more than 100. -/// * `ft_program` address mustn't be [`ActorId::zero()`]. -/// * `nft_program` address mustn't be [`ActorId::zero()`]. -#[derive(Decode, Encode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitNFTPixelboard { - /// An address of a pixelboard owner to which minting fees and commissions - /// on resales will be transferred. - pub owner: ActorId, - /// A block side length. - /// - /// To avoid a canvas clogging with one pixel NFTs, blocks are used instead - /// of pixels to set NFT [`Rectangle`]s. This parameter is used to set a - /// side length of these pixel blocks. If blocks aren't needed, then this - /// parameter can be set to 1, so the block side length will equal a pixel. - pub block_side_length: BlockSideLength, - /// The price of a free pixel. It'll be used to calculate a minting price. - pub pixel_price: u128, - /// A canvas (pixelboard) [width](`Resolution#structfield.width`) & - /// [height](`Resolution#structfield.height`). - pub resolution: Resolution, - /// A commission percentage that'll be included in each NFT resale. - pub commission_percentage: u8, - /// A painting that'll be displayed on the free territory of a pixelboard. - pub painting: Vec, - - /// A FT program address. - pub ft_program: ActorId, - /// An NFT program address. - pub nft_program: ActorId, -} - -/// Sends a program info about what it should do. -#[derive(Decode, Encode, TypeInfo, Clone, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTPixelboardAction { - /// Mints one NFT on a pixelboard with given `token_metadata` & `painting`. - /// - /// Transfers a minted NFT to [`msg::source()`]. - /// - /// # Requirements - /// * `rectangle` coordinates mustn't be out of a canvas. - /// * `rectangle` coordinates mustn't be mixed up or belong to wrong - /// corners. - /// * `rectangle` coordinates must observe a block layout. In other words, - /// each `rectangle` coordinate must be a multiple of a block side length in - /// the canvas. The block side length can be obtained by - /// [`block_side_length()`](../nft_pixelboard_state/metafns/fn.block_side_length.html). - /// * NFT `rectangle` mustn't collide with already minted one. - /// * `painting` length must equal a pixel count in an NFT - /// (which can be calculated by multiplying a [width](`Rectangle::width`) & - /// [height](`Rectangle::height`) from `rectangle`). - /// * [`msg::source()`] must have enough fungible tokens to buy all free - /// pixels that `rectangle` will occupy. An enough number of tokens can be - /// calculated by multiplying a `rectangle` area and the price of a free - /// pixel. The area can be calculated by multiplying a - /// [width](`Rectangle::width`) & [height](`Rectangle::height`) from - /// `rectangle`. The price of a free pixel can be obtained by - /// [`pixel_price()`](../nft_pixelboard_state/metafns/fn.pixel_price.html). - /// - /// On success, returns [`NFTPixelboardEvent::Minted`]. - /// - /// [`msg::source()`]: gstd::msg::source - Mint { - rectangle: Rectangle, - token_metadata: TokenMetadata, - /// A painting that'll be displayed in a place of an NFT on a pixelboard - /// after a successful minting. - painting: Vec, - }, - - /// Buys an NFT minted on a pixelboard. - /// - /// Transfers a purchased NFT from a pixelboard program to - /// [`msg::source()`]. - /// - /// **Note:** If [`msg::source()`] has enough fungible tokens to pay a - /// resale commission but not the entire NFT, then the commission will still - /// be withdrawn from its account. - /// - /// # Requirements - /// * An NFT must be minted on a pixelboard. - /// * An NFT must be for sale. This can be found out by - /// [`token_info()`]. See also the documentation of - /// [`TokenInfo#structfield.pixel_price`]. - /// * [`msg::source()`] must have enough fungible tokens to buy all pixels - /// that an NFT occupies. This can be found out by - /// [`token_info()`]. See also the documentation of - /// [`TokenInfo#structfield.pixel_price`]. - /// - /// On success, returns [`NFTPixelboardEvent::Bought`]. - /// - /// [`msg::source()`]: gstd::msg::source - /// [`token_info()`]: ../nft_pixelboard_state/metafns/fn.token_info.html - Buy(TokenId), - - /// Changes a sale state of an NFT minted on a pixelboard. - /// - /// There are 3 options of a sale state change: - /// * Putting up for sale\ - /// If an NFT is **not** for sale, then assigning `pixel_price` to [`Some`] - /// price will transfer it to a pixelboard program & put it up for sale. - /// * Updating a pixel price\ - /// If an NFT is for sale, then assigning `pixel_price` to [`Some`] price - /// will update its pixel price. - /// * Removing from sale\ - /// Assigning the `pixel_price` to [`None`] will transfer an NFT back to its - /// owner & remove an NFT from sale. - /// - /// **Note:** A commission is included in each NFT resale, so a seller - /// will receive not all fungible tokens but tokens with a commission - /// deduction. A commission percentage can be obtained by - /// [`commission_percentage()`](../nft_pixelboard_state/metafns/fn.commission_percentage.html). - /// - /// # Requirements - /// * An NFT must be minted on a pixelboard. - /// * [`msg::source()`](gstd::msg::source) must be the owner of an NFT. - /// * `pixel_price` mustn't be more than [`MAX_PIXEL_PRICE`]. - /// - /// On success, returns [`NFTPixelboardEvent::SaleStateChanged`]. - ChangeSaleState { - token_id: TokenId, - /// A price of each pixel that an NFT occupies. To calculate a price of - /// the entire NFT, see the documentation of - /// [`TokenInfo#structfield.pixel_price`]. - pixel_price: Option, - }, - - /// Paints with `painting` an NFT minted on a pixelboard. - /// - /// # Requirements - /// * An NFT must be minted on a pixelboard. - /// * [`msg::source()`](gstd::msg::source) must be the owner of an NFT. - /// * `painting` length must equal a pixel count in an NFT. The count can be - /// calculated by multiplying a [width](`Rectangle::width`) & - /// [height](`Rectangle::height`) from a rectangle of the NFT. The NFT - /// rectangle can be obtained by [`token_info()`](../nft_pixelboard_state/metafns/fn.token_info.html). - /// - /// On success, returns [`NFTPixelboardEvent::Painted`]. - Paint { - token_id: TokenId, - painting: Vec, - }, -} - -/// A result of processed [`NFTPixelboardAction`] in case of successfull execution. -#[derive(Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTPixelboardEvent { - /// Should be returned from [`NFTPixelboardAction::Mint`]. - Minted(TokenId), - /// Should be returned from [`NFTPixelboardAction::Buy`]. - Bought(TokenId), - /// Should be returned from [`NFTPixelboardAction::ChangeSaleState`]. - SaleStateChanged(TokenId), - /// Should be returned from [`NFTPixelboardAction::Paint`]. - Painted(TokenId), -} - -/// A result of processed [`NFTPixelboardAction`] in case of failure. -#[derive(Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTPixelboardError { - ZeroWidthOrHeight, - ZeroAddress, - ZeroBlockSideLength, - WrongResolution, - WrongCommissionPercentage, - WrongPaintingLength, - PixelPriceExceeded, - NFTNotFoundById, - NFTNotFountByRectangle, - NFTIsNotOnSale, - NotOwner, - CoordinatesNotObserveBlockLayout, - CoordinatesWithWrongCorners, - CoordinatesOutOfCanvas, - CoordinatesCollision, - PreviousTxMustBeCompleted, - NFTTransferFailed, - FTokensTransferFailed, - NFTMintFailed, -} diff --git a/contracts/nft-pixelboard/src/lib.rs b/contracts/nft-pixelboard/src/lib.rs deleted file mode 100644 index 428abf568..000000000 --- a/contracts/nft-pixelboard/src/lib.rs +++ /dev/null @@ -1,472 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::token::{TokenId, TokenMetadata}; -use gstd::{async_main, collections::BTreeMap, exec, msg, prelude::*, ActorId}; -use nft_pixelboard_io::*; -pub const MIN_STEP_FOR_TX: u64 = 3; - -mod utils; - -fn get_pixel_count>(width: P, height: P) -> Result { - let pixel_count = width.into() * height.into(); - if pixel_count == 0 { - return Err(NFTPixelboardError::ZeroWidthOrHeight); - }; - Ok(pixel_count) -} - -fn check_painting(painting: &[Color], pixel_count: usize) -> Result<(), NFTPixelboardError> { - if painting.len() != pixel_count { - return Err(NFTPixelboardError::WrongPaintingLength); - } - Ok(()) -} - -fn check_pixel_price(pixel_price: u128) -> Result<(), NFTPixelboardError> { - if pixel_price > MAX_PIXEL_PRICE { - return Err(NFTPixelboardError::PixelPriceExceeded); - } - Ok(()) -} - -fn get_mut_token<'a>( - rectangles: &'a BTreeMap, - tokens: &'a mut BTreeMap, - token_id: TokenId, -) -> Result<(&'a Rectangle, &'a mut TokenInfo), NFTPixelboardError> { - let rectangle = if let Some(rectangle) = rectangles.get(&token_id) { - rectangle - } else { - return Err(NFTPixelboardError::NFTNotFoundById); - }; - let tokens = if let Some(tokens) = tokens.get_mut(rectangle) { - tokens - } else { - return Err(NFTPixelboardError::NFTNotFountByRectangle); - }; - Ok((rectangle, tokens)) -} - -fn paint( - canvas_resolution: Resolution, - rectangle: &Rectangle, - rectangle_width: usize, - rectangle_height: usize, - canvas_painting: &mut [Color], - token_painting: Vec, -) { - let canvas_width = canvas_resolution.width as usize; - - let first_row_end = canvas_width * rectangle.top_left_corner.y as usize - + rectangle.bottom_right_corner.x as usize; - let first_row_start = first_row_end - rectangle_width; - - let (first_row_painting, rest_of_painting) = token_painting.split_at(rectangle_width); - canvas_painting[first_row_start..first_row_end].copy_from_slice(first_row_painting); - - for (canvas_row, painting_row) in canvas_painting - [first_row_end..first_row_end + (rectangle_height - 1) * canvas_width] - .chunks_exact_mut(canvas_resolution.width as _) - .zip(rest_of_painting.chunks_exact(rectangle_width)) - { - canvas_row[canvas_width - rectangle_width..].copy_from_slice(painting_row); - } -} - -#[derive(Default)] -pub struct NFTPixelboard { - pub owner: ActorId, - pub block_side_length: BlockSideLength, - pub pixel_price: u128, - pub resolution: Resolution, - pub commission_percentage: u8, - pub painting: Vec, - - pub rectangles_by_token_ids: BTreeMap, - pub tokens_by_rectangles: BTreeMap, - - pub ft_program: ActorId, - pub nft_program: ActorId, - - pub txs: BTreeMap, - pub tx_id: TransactionId, -} - -impl NFTPixelboard { - async fn mint( - &mut self, - mut tx_id: TransactionId, - rectangle: Rectangle, - token_metadata: TokenMetadata, - painting: Vec, - ) -> Result { - let msg_source = msg::source(); - let rectangle_width = rectangle.width() as usize; - let rectangle_height = rectangle.height() as usize; - let rectangle_pixel_count = get_pixel_count(rectangle_width, rectangle_height)?; - - // Payment: transfer to contract account - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &msg_source, - &exec::program_id(), - rectangle_pixel_count as u128 * self.pixel_price, - ) - .await?; - - if let Err(error) = self.coordinates_check(rectangle, painting.clone()) { - // transfer tokens back to user - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &exec::program_id(), - &msg_source, - rectangle_pixel_count as u128 * self.pixel_price, - ) - .await?; - return Err(error); - } - - // Painting - paint( - self.resolution, - &rectangle, - rectangle_width, - rectangle_height, - &mut self.painting, - painting, - ); - let token_info = self - .tokens_by_rectangles - .entry(rectangle) - .or_insert_with(|| TokenInfo { - owner: msg_source, - pixel_price: None, - token_id: None, - }); - - let token_id = utils::mint_nft(tx_id, &self.nft_program, token_metadata).await?; - tx_id = tx_id.wrapping_add(1); - utils::transfer_nft(tx_id, &self.nft_program, &msg_source, token_id).await?; - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &exec::program_id(), - &self.owner, - rectangle_pixel_count as u128 * self.pixel_price, - ) - .await?; - // Insertion and replying - token_info.token_id = Some(token_id); - self.rectangles_by_token_ids.insert(token_id, rectangle); - Ok(NFTPixelboardEvent::Minted(token_id)) - } - - async fn buy( - &mut self, - mut tx_id: TransactionId, - token_id: TokenId, - ) -> Result { - let msg_source = msg::source(); - let (rectangle, token) = get_mut_token( - &self.rectangles_by_token_ids, - &mut self.tokens_by_rectangles, - token_id, - )?; - - let pixel_price = if let Some(pixel_price) = token.pixel_price { - pixel_price - } else { - return Err(NFTPixelboardError::NFTIsNotOnSale); - }; - - // get_pixel_count() isn't used here because it checks an NFT area for - // equality to 0, but here it's always not equal 0. - let token_price = - (rectangle.width() as usize * rectangle.height() as usize) as u128 * pixel_price; - let resale_commission = token_price * self.commission_percentage as u128 / 100; - - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &msg_source, - &exec::program_id(), - token_price, - ) - .await?; - - tx_id = tx_id.wrapping_add(1); - - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &exec::program_id(), - &self.owner, - resale_commission, - ) - .await?; - - tx_id = tx_id.wrapping_add(1); - - utils::transfer_ftokens( - tx_id, - &self.ft_program, - &exec::program_id(), - &token.owner, - token_price - resale_commission, - ) - .await?; - - utils::transfer_nft(tx_id, &self.nft_program, &msg_source, token_id).await?; - - token.pixel_price = None; - token.owner = msg_source; - - Ok(NFTPixelboardEvent::Bought(token_id)) - } - - async fn change_sale_state( - &mut self, - tx_id: TransactionId, - token_id: TokenId, - pixel_price: Option, - ) -> Result { - let msg_source = msg::source(); - let (_, token) = get_mut_token( - &self.rectangles_by_token_ids, - &mut self.tokens_by_rectangles, - token_id, - )?; - if token.owner != msg_source { - return Err(NFTPixelboardError::NotOwner); - } - - if let Some(price) = pixel_price { - check_pixel_price(price)?; - if token.pixel_price.is_none() { - utils::transfer_nft(tx_id, &self.nft_program, &exec::program_id(), token_id) - .await?; - } - } else if token.pixel_price.is_some() { - utils::transfer_nft(tx_id, &self.nft_program, &msg_source, token_id).await?; - } - token.pixel_price = pixel_price; - - Ok(NFTPixelboardEvent::SaleStateChanged(token_id)) - } - - fn paint( - &mut self, - token_id: TokenId, - painting: Vec, - ) -> Result { - let (rectangle, token) = get_mut_token( - &self.rectangles_by_token_ids, - &mut self.tokens_by_rectangles, - token_id, - )?; - if token.owner != msg::source() { - return Err(NFTPixelboardError::NotOwner); - } - - let rectangle_width = rectangle.width() as usize; - let rectangle_height = rectangle.height() as usize; - let pixel_count = get_pixel_count(rectangle_width, rectangle_height)?; - check_painting(&painting, pixel_count)?; - - paint( - self.resolution, - rectangle, - rectangle_width, - rectangle_height, - &mut self.painting, - painting, - ); - - Ok(NFTPixelboardEvent::Painted(token_id)) - } - - fn coordinates_check( - &self, - rectangle: Rectangle, - painting: Vec, - ) -> Result<(), NFTPixelboardError> { - if rectangle.top_left_corner.x % self.block_side_length != 0 - || rectangle.top_left_corner.y % self.block_side_length != 0 - || rectangle.bottom_right_corner.x % self.block_side_length != 0 - || rectangle.bottom_right_corner.y % self.block_side_length != 0 - { - return Err(NFTPixelboardError::CoordinatesNotObserveBlockLayout); - } - - if rectangle.top_left_corner.x > rectangle.bottom_right_corner.x - || rectangle.top_left_corner.y > rectangle.bottom_right_corner.y - { - return Err(NFTPixelboardError::CoordinatesWithWrongCorners); - } - - if rectangle.bottom_right_corner.x > self.resolution.width - || rectangle.bottom_right_corner.y > self.resolution.height - { - return Err(NFTPixelboardError::CoordinatesOutOfCanvas); - } - - if self.tokens_by_rectangles.keys().any(|existing_rectangle| { - existing_rectangle.top_left_corner.x < rectangle.bottom_right_corner.x - && existing_rectangle.bottom_right_corner.x > rectangle.top_left_corner.x - && existing_rectangle.top_left_corner.y < rectangle.bottom_right_corner.y - && existing_rectangle.bottom_right_corner.y > rectangle.top_left_corner.y - }) { - return Err(NFTPixelboardError::CoordinatesCollision); - } - - let rectangle_width = rectangle.width() as usize; - let rectangle_height = rectangle.height() as usize; - let rectangle_pixel_count = get_pixel_count(rectangle_width, rectangle_height)?; - - check_painting(&painting, rectangle_pixel_count) - } -} - -static mut PROGRAM: Option = None; - -#[no_mangle] -extern fn init() { - let result = process_init(); - let is_err = result.is_err(); - - msg::reply(result, 0) - .expect("Failed to encode or reply with `Result<(), Error>` from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } -} - -fn process_init() -> Result<(), NFTPixelboardError> { - let InitNFTPixelboard { - owner, - ft_program, - nft_program, - block_side_length, - painting, - resolution, - commission_percentage, - pixel_price, - } = msg::load().expect("Unable to decode `InitNFTPixelboard`"); - - if owner == ActorId::zero() { - return Err(NFTPixelboardError::ZeroAddress); - } - - if ft_program == ActorId::zero() { - return Err(NFTPixelboardError::ZeroAddress); - } - - if nft_program == ActorId::zero() { - return Err(NFTPixelboardError::ZeroAddress); - } - - if block_side_length == 0 { - return Err(NFTPixelboardError::ZeroBlockSideLength); - } - - let pixel_count = resolution.width as usize * resolution.height as usize; - if pixel_count == 0 { - return Err(NFTPixelboardError::ZeroWidthOrHeight); - }; - - if painting.len() != pixel_count { - return Err(NFTPixelboardError::WrongPaintingLength); - } - - if resolution.width % block_side_length != 0 || resolution.height % block_side_length != 0 { - return Err(NFTPixelboardError::WrongResolution); - } - - if commission_percentage > 100 { - return Err(NFTPixelboardError::WrongCommissionPercentage); - } - - if pixel_price > MAX_PIXEL_PRICE { - return Err(NFTPixelboardError::PixelPriceExceeded); - } - let program = NFTPixelboard { - owner, - ft_program, - nft_program, - block_side_length, - painting, - pixel_price, - commission_percentage, - resolution, - ..Default::default() - }; - unsafe { - PROGRAM = Some(program); - } - Ok(()) -} -#[async_main] -async fn main() { - let action: NFTPixelboardAction = msg::load().expect("Unable to decode `NFTPixelboardAction`"); - let program = unsafe { PROGRAM.get_or_insert(Default::default()) }; - let msg_source = msg::source(); - - let _reply: Result = - Err(NFTPixelboardError::PreviousTxMustBeCompleted); - let tx_id = if let Some((tx_id, pend_action)) = program.txs.get(&msg_source) { - if action != *pend_action { - msg::reply(_reply, 0).expect( - "Failed to encode or reply with `Result`", - ); - return; - } - *tx_id - } else { - let tx_id = program.tx_id; - program.tx_id = program.tx_id.wrapping_add(MIN_STEP_FOR_TX); - program.txs.insert(msg_source, (tx_id, action.clone())); - tx_id - }; - - let result = match action.clone() { - NFTPixelboardAction::Mint { - rectangle, - token_metadata, - painting, - } => { - let reply = program - .mint(tx_id, rectangle, token_metadata, painting) - .await; - program.txs.remove(&msg_source); - reply - } - NFTPixelboardAction::Buy(token_id) => { - let reply = program.buy(tx_id, token_id).await; - program.txs.remove(&msg_source); - reply - } - NFTPixelboardAction::ChangeSaleState { - token_id, - pixel_price, - } => { - let reply = program - .change_sale_state(tx_id, token_id, pixel_price) - .await; - program.txs.remove(&msg_source); - reply - } - NFTPixelboardAction::Paint { token_id, painting } => program.paint(token_id, painting), - }; - msg::reply(result, 0) - .expect("Failed to encode or reply with `Result`"); -} - -#[no_mangle] -extern fn state() { - let nft_pixelboard = unsafe { PROGRAM.take().expect("Program is not initialized") }; - let nft_pixelboard_state: NFTPixelboardState = nft_pixelboard.into(); - msg::reply(nft_pixelboard_state, 0).expect("Failed to share state"); -} diff --git a/contracts/nft-pixelboard/src/utils.rs b/contracts/nft-pixelboard/src/utils.rs deleted file mode 100644 index 0ef1cc491..000000000 --- a/contracts/nft-pixelboard/src/utils.rs +++ /dev/null @@ -1,111 +0,0 @@ -use super::NFTPixelboard; -use gear_lib_old::non_fungible_token::token::{TokenId, TokenMetadata}; -use gstd::{msg, prelude::*, ActorId}; -use nft_pixelboard_io::*; -use non_fungible_token_io::{NFTAction, NFTEvent}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; - -pub async fn transfer_ftokens( - transaction_id: u64, - ft_contract_id: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, -) -> Result<(), NFTPixelboardError> { - let reply = msg::send_for_reply_as::<_, FTokenEvent>( - *ft_contract_id, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Transfer { - sender: *sender, - recipient: *recipient, - amount, - }, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTokenAction::Message`") - .await; - match reply { - Ok(FTokenEvent::Ok) => Ok(()), - _ => Err(NFTPixelboardError::FTokensTransferFailed), - } -} - -pub async fn transfer_nft( - transaction_id: TransactionId, - nft_program: &ActorId, - to: &ActorId, - token_id: TokenId, -) -> Result<(), NFTPixelboardError> { - let reply = msg::send_for_reply_as::<_, NFTEvent>( - *nft_program, - NFTAction::Transfer { - transaction_id, - to: *to, - token_id, - }, - 0, - 0, - ) - .expect("Error during sending `NFTAction::Transfer` to an NFT program") - .await; - match reply { - Ok(NFTEvent::Transfer(_)) => Ok(()), - _ => Err(NFTPixelboardError::NFTTransferFailed), - } -} - -pub async fn mint_nft( - transaction_id: TransactionId, - nft_program: &ActorId, - token_metadata: TokenMetadata, -) -> Result { - let reply = msg::send_for_reply_as::<_, NFTEvent>( - *nft_program, - NFTAction::Mint { - transaction_id, - token_metadata, - }, - 0, - 0, - ) - .expect("Error during sending `NFTAction::Mint` to an NFT program") - .await; - match reply { - Ok(NFTEvent::Transfer(transfer)) => Ok(transfer.token_id), - _ => Err(NFTPixelboardError::NFTMintFailed), - } -} - -impl From for NFTPixelboardState { - fn from(state: NFTPixelboard) -> NFTPixelboardState { - NFTPixelboardState { - owner: state.owner, - block_side_length: state.block_side_length, - pixel_price: state.pixel_price, - resolution: state.resolution, - commission_percentage: state.commission_percentage, - painting: state.painting.clone(), - rectangles_by_token_ids: state - .rectangles_by_token_ids - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - tokens_by_rectangles: state - .tokens_by_rectangles - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - ft_program: state.ft_program, - nft_program: state.nft_program, - txs: state - .txs - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - tx_id: state.tx_id, - } - } -} diff --git a/contracts/nft-pixelboard/state/Cargo.toml b/contracts/nft-pixelboard/state/Cargo.toml deleted file mode 100644 index 7c38cda7a..000000000 --- a/contracts/nft-pixelboard/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "nft-pixelboard-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -nft-pixelboard-io.workspace = true -gear-lib-old.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/nft-pixelboard/state/build.rs b/contracts/nft-pixelboard/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/nft-pixelboard/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/nft-pixelboard/state/src/lib.rs b/contracts/nft-pixelboard/state/src/lib.rs deleted file mode 100644 index 2dc3f0afd..000000000 --- a/contracts/nft-pixelboard/state/src/lib.rs +++ /dev/null @@ -1,73 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::token::TokenId; -use gstd::{prelude::*, ActorId}; -use nft_pixelboard_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = NFTPixelboardState; - - pub fn painting(state: State) -> Vec { - state.painting - } - - pub fn resolution(state: State) -> Resolution { - state.resolution - } - - pub fn pixel_price(state: State) -> u128 { - state.pixel_price - } - - pub fn block_side_length(state: State) -> BlockSideLength { - state.block_side_length - } - - pub fn commission_percentage(state: State) -> u8 { - state.commission_percentage - } - - pub fn pixel_info(state: State, coordinates: Coordinates) -> Token { - let mut token = Default::default(); - - if coordinates.x < state.resolution.width && coordinates.y < state.resolution.height { - for (rectangle, token_info) in state.tokens_by_rectangles.iter() { - if coordinates.x < rectangle.bottom_right_corner.x - && coordinates.y < rectangle.bottom_right_corner.y - { - token = Token(*rectangle, *token_info) - } - } - } - - token - } - - pub fn token_info(state: State, token_id: TokenId) -> Token { - let mut token = Default::default(); - - if let Some((_, rectangle)) = state - .rectangles_by_token_ids - .iter() - .find(|&(x, _)| x == &token_id) - { - if let Some((_, token_info)) = state - .tokens_by_rectangles - .iter() - .find(|&(x, _)| x == rectangle) - { - token = Token(*rectangle, *token_info); - } - } - token - } - - pub fn ft_program(state: State) -> ActorId { - state.ft_program - } - - pub fn nft_program(state: State) -> ActorId { - state.nft_program - } -} diff --git a/contracts/nft-pixelboard/tests/initialization.rs b/contracts/nft-pixelboard/tests/initialization.rs deleted file mode 100644 index 1fbe21404..000000000 --- a/contracts/nft-pixelboard/tests/initialization.rs +++ /dev/null @@ -1,162 +0,0 @@ -use gstd::ActorId; - -pub mod utils; -use utils::{prelude::*, FungibleToken, NonFungibleToken, FOREIGN_USER}; - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn initialization_failures() { - let system = utils::initialize_system(); - - let ft_program = FungibleToken::initialize(&system); - let nft_program = NonFungibleToken::initialize(&system); - - let pixelboard_config = InitNFTPixelboard { - ft_program: ft_program.actor_id(), - block_side_length: 10, - nft_program: nft_program.actor_id(), - owner: FOREIGN_USER.into(), - painting: vec![0; 100], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 100, - resolution: (10, 10).into(), - }; - - let mut failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.owner = ActorId::zero(); - // Should fail because `owner` address mustn't be `ActorId::zero()`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroAddress); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.ft_program = ActorId::zero(); - // Should fail because `ft_program` address mustn't be `ActorId::zero()`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroAddress); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.nft_program = ActorId::zero(); - // Should fail because `nft_program` address mustn't be `ActorId::zero()`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroAddress); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.block_side_length = 0; - // Should fail because `block_side_length` must be more than 0. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroBlockSideLength); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution.width = 0; - // Should fail because canvas `width` must be more than 0. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution.height = 0; - // Should fail because canvas `height` must be more than 0. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution = (0, 0).into(); - // Should fail because a width & height of a canvas must be more than 0. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution.width = 15; - failed_pixelboard_config.painting = vec![1; 150]; - // Should fail because each side of `resolution` must be a multiple of `block_side_length`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::WrongResolution); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution.height = 15; - failed_pixelboard_config.painting = vec![1; 150]; - // Should fail because each side of `resolution` must be a multiple of `block_side_length`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::WrongResolution); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.resolution = (15, 15).into(); - failed_pixelboard_config.painting = vec![1; 225]; - // Should fail because each side of `resolution` must be a multiple of `block_side_length`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::WrongResolution); - - failed_pixelboard_config = pixelboard_config.clone(); - failed_pixelboard_config.commission_percentage = 101; - // Should fail because `commission_percentage` mustn't be more than 100. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::WrongCommissionPercentage); - - failed_pixelboard_config = pixelboard_config; - failed_pixelboard_config.pixel_price = MAX_PIXEL_PRICE + 1; - // Should fail because `pixel_price` mustn't be more than `MAX_PIXEL_PRICE`. - NFTPixelboard::initialize_custom(&system, failed_pixelboard_config) - .failed(NFTPixelboardError::PixelPriceExceeded); - - // failed_pixelboard_config = pixelboard_config.clone(); - // failed_pixelboard_config.painting = vec![1; 101]; - // // Should fail because `painting` length must equal a pixel count in a canvas. - // NFTPixelboard::initialize_custom(&system, failed_pixelboard_config).failed(); - - // failed_pixelboard_config = pixelboard_config; - // failed_pixelboard_config.painting = vec![1; 99]; - // // Should fail because `painting` length must equal a pixel count in a canvas. - // NFTPixelboard::initialize_custom(&system, failed_pixelboard_config).failed(); -} - -// #[test] -// fn initialization_n_meta_state() { -// let system = utils::initialize_system(); - -// let ft_program = FungibleToken::initialize(&system); -// let nft_program = NonFungibleToken::initialize(&system); - -// let pixelboard_config = InitNFTPixelboard { -// ft_program: ft_program.actor_id(), -// block_side_length: 1, -// nft_program: nft_program.actor_id(), -// owner: FOREIGN_USER.into(), -// painting: vec![0; 100], -// pixel_price: MAX_PIXEL_PRICE, -// commission_percentage: 100, -// resolution: (10, 10).into(), -// }; -// let pixelboard_program = -// NFTPixelboard::initialize_custom(&system, pixelboard_config.clone()).succeed(); - -// # TODO: uncomment when new meta will be ready for gtest - -// pixelboard_program -// .meta_state() -// .ft_program() -// .check(ft_program.actor_id()); -// pixelboard_program -// .meta_state() -// .nft_program() -// .check(nft_program.actor_id()); -// pixelboard_program -// .meta_state() -// .block_side_length() -// .check(pixelboard_config.block_side_length); -// pixelboard_program -// .meta_state() -// .painting() -// .check(pixelboard_config.painting); -// pixelboard_program -// .meta_state() -// .pixel_price() -// .check(pixelboard_config.pixel_price); -// pixelboard_program -// .meta_state() -// .commission_percentage() -// .check(pixelboard_config.commission_percentage); -// pixelboard_program -// .meta_state() -// .resolution() -// .check(pixelboard_config.resolution); -//} diff --git a/contracts/nft-pixelboard/tests/minting.rs b/contracts/nft-pixelboard/tests/minting.rs deleted file mode 100644 index 51853d7dc..000000000 --- a/contracts/nft-pixelboard/tests/minting.rs +++ /dev/null @@ -1,299 +0,0 @@ -use gear_lib_old::non_fungible_token::token::TokenMetadata; - -pub mod utils; -use utils::{prelude::*, FungibleToken, NonFungibleToken, FOREIGN_USER, OWNER}; - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn minting_failures() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(FOREIGN_USER, MAX_PIXEL_PRICE * 36); - - let nft_program = NonFungibleToken::initialize(&system); - - let pixelboard_config = InitNFTPixelboard { - ft_program: ft_program.actor_id(), - block_side_length: 2, - nft_program: nft_program.actor_id(), - owner: OWNER.into(), - painting: vec![0; 100], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 100, - resolution: (10, 10).into(), - }; - let pixelboard_program = NFTPixelboard::initialize_custom(&system, pixelboard_config).succeed(); - let default_painting = vec![0; 36]; - let default_rectangle = ((2, 2), (8, 8)).into(); - - // Should fail because the coordinates doesn't observe a block layout. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((8, 3), (3, 8)).into(), - ) - .failed(NFTPixelboardError::CoordinatesNotObserveBlockLayout); - // Should fail because the coordinates doesn't observe a block layout. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((3, 8), (8, 3)).into(), - ) - .failed(NFTPixelboardError::CoordinatesNotObserveBlockLayout); - // Should fail because the coordinates are mixed up or belong to wrong corners. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((8, 2), (2, 8)).into(), - ) - .failed(NFTPixelboardError::CoordinatesWithWrongCorners); - // Should fail because the coordinates are mixed up or belong to wrong corners. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((8, 8), (2, 2)).into(), - ) - .failed(NFTPixelboardError::CoordinatesWithWrongCorners); - // Should fail because the coordinates are mixed up or belong to wrong corners. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((2, 8), (8, 2)).into(), - ) - .failed(NFTPixelboardError::CoordinatesWithWrongCorners); - // Should fail because the coordinates are out of a canvas. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((2, 2), (12, 12)).into(), - ) - .failed(NFTPixelboardError::CoordinatesOutOfCanvas); - // Should fail because the coordinates are mixed up or belong to wrong corners. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((12, 12), (8, 8)).into(), - ) - .failed(NFTPixelboardError::CoordinatesWithWrongCorners); - // Should fail because pixel `painting` length must equal a pixel count in an NFT. - pixelboard_program - .mint(FOREIGN_USER, vec![0; 35], default_rectangle) - .failed(NFTPixelboardError::WrongPaintingLength); - // Should fail because pixel `painting` length must equal a pixel count in an NFT. - pixelboard_program - .mint(FOREIGN_USER, vec![0; 37], default_rectangle) - .failed(NFTPixelboardError::CoordinatesWithWrongCorners); - // Should fail because a width & height of an NFT must be more than 0. - pixelboard_program - .mint(FOREIGN_USER, vec![], ((4, 4), (4, 4)).into()) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - // Should fail because a width & height of an NFT must be more than 0. - pixelboard_program - .mint(FOREIGN_USER, vec![], ((0, 4), (10, 4)).into()) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - // Should fail because a width & height of an NFT must be more than 0. - pixelboard_program - .mint(FOREIGN_USER, vec![], ((4, 0), (4, 10)).into()) - .failed(NFTPixelboardError::ZeroWidthOrHeight); - - pixelboard_program - .mint(FOREIGN_USER, default_painting.clone(), default_rectangle) - .succeed(0); - - // Should fail because the given NFT rectangle collides with already minted one. - pixelboard_program - .mint(FOREIGN_USER, default_painting.clone(), default_rectangle) - .failed(NFTPixelboardError::CoordinatesCollision); - // Should fail because the given NFT rectangle collides with already minted one. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((0, 0), (4, 4)).into(), - ) - .failed(NFTPixelboardError::CoordinatesCollision); - // Should fail because the given NFT rectangle collides with already minted one. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((4, 0), (10, 4)).into(), - ) - .failed(NFTPixelboardError::CoordinatesCollision); - // Should fail because the given NFT rectangle collides with already minted one. - pixelboard_program - .mint( - FOREIGN_USER, - default_painting.clone(), - ((0, 4), (4, 10)).into(), - ) - .failed(NFTPixelboardError::CoordinatesCollision); - // Should fail because the given NFT rectangle collides with already minted one. - pixelboard_program - .mint(FOREIGN_USER, default_painting, ((4, 4), (10, 10)).into()) - .failed(NFTPixelboardError::CoordinatesCollision); -} - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn minting_n_meta_state() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(FOREIGN_USER, MAX_PIXEL_PRICE * (6 + 25 + 1)); - - let nft_program = NonFungibleToken::initialize(&system); - let pixelboard_program = - NFTPixelboard::initialize(&system, ft_program.actor_id(), nft_program.actor_id()); - - let mut token = Token( - ((1, 1), (2, 7)).into(), - TokenInfo { - owner: FOREIGN_USER.into(), - pixel_price: None, - token_id: Some(0.into()), - }, - ); - - pixelboard_program - .mint(FOREIGN_USER, vec![0; 6], token.0) - .succeed(0); - - ft_program - .balance(FOREIGN_USER) - .succeed(MAX_PIXEL_PRICE * (25 + 1)); - ft_program.balance(OWNER).succeed(MAX_PIXEL_PRICE * 6); - //pixelboard_program.meta_state().token_info(0).check(token); - // pixelboard_program - // .meta_state() - // .pixel_info((1, 4).into()) - // .check(token); - - token.0 = ((3, 3), (8, 8)).into(); - token.1.token_id = Some(1.into()); - let token_metadata = TokenMetadata { - name: "The incredibly ordinary rectangle".into(), - description: "Really, it can't be more boring".into(), - media: "1029384756".into(), - reference: "https://youtu.be/dQw4w9WgXcQ".into(), - }; - pixelboard_program - .mint_with_metadata(FOREIGN_USER, vec![0; 25], token.0, token_metadata) - .succeed(1); - - // ft_program.balance(FOREIGN_USER).check(MAX_PIXEL_PRICE); - // ft_program.balance(OWNER).check(MAX_PIXEL_PRICE * (6 + 25)); - // pixelboard_program.meta_state().token_info(1).check(token); - // nft_program.meta_state().token_metadata(1).check(NFToken { - // owner_id: FOREIGN_USER.into(), - // description: token_metadata.description, - // media: token_metadata.media, - // name: token_metadata.name, - // reference: token_metadata.reference, - // id: token.1.token_id, - // approved_account_ids: Default::default(), - // }); - - // // NFT center - // pixelboard_program - // .meta_state() - // .pixel_info((5, 5).into()) - // .check(token); - // // NFT corners - // pixelboard_program - // .meta_state() - // .pixel_info((3, 3).into()) - // .check(token); - // pixelboard_program - // .meta_state() - // .pixel_info((7, 7).into()) - // .check(token); - // pixelboard_program - // .meta_state() - // .pixel_info((3, 7).into()) - // .check(token); - // pixelboard_program - // .meta_state() - // .pixel_info((7, 3).into()) - // .check(token); - // // Pixels outside of the NFT - // pixelboard_program - // .meta_state() - // .pixel_info((2, 2).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((8, 8).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((2, 8).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((8, 2).into()) - // .check(Token::default()); - // // Pixel between NFTs - // pixelboard_program - // .meta_state() - // .pixel_info((2, 5).into()) - // .check(Token::default()); - // // Pixels on the edge/outside of the canvas - // pixelboard_program - // .meta_state() - // .pixel_info((0, 0).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((9, 9).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((10, 10).into()) - // .check(Token::default()); - - token.0 = ((9, 9), (10, 10)).into(); - token.1.token_id = Some(2.into()); - // Minting a one pixel NFT - pixelboard_program - .mint(FOREIGN_USER, vec![0], token.0) - .succeed(2); - - ft_program.balance(FOREIGN_USER).succeed(0); - ft_program - .balance(OWNER) - .succeed(MAX_PIXEL_PRICE * (6 + 25 + 1)); - // pixelboard_program.meta_state().token_info(2).check(token); - // pixelboard_program - // .meta_state() - // .pixel_info((9, 9).into()) - // .check(token); - - // // Pixels outside of the one pixel NFT - // pixelboard_program - // .meta_state() - // .pixel_info((8, 8).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((10, 10).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((8, 10).into()) - // .check(Token::default()); - // pixelboard_program - // .meta_state() - // .pixel_info((10, 8).into()) - // .check(Token::default()); -} diff --git a/contracts/nft-pixelboard/tests/painting.rs b/contracts/nft-pixelboard/tests/painting.rs deleted file mode 100644 index a36ccbabe..000000000 --- a/contracts/nft-pixelboard/tests/painting.rs +++ /dev/null @@ -1,215 +0,0 @@ -pub mod utils; -use utils::{prelude::*, FungibleToken, NonFungibleToken, FOREIGN_USER, USER}; - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn painting_failures() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(USER[0], MAX_PIXEL_PRICE * 25); - - let nft_program = NonFungibleToken::initialize(&system); - let pixelboard_program = - NFTPixelboard::initialize(&system, ft_program.actor_id(), nft_program.actor_id()); - - pixelboard_program - .mint(USER[0], vec![0; 25], ((3, 3), (8, 8)).into()) - .succeed(0); - - // Should fail because USER[0] isn't the owner of the NFT. - pixelboard_program - .paint(USER[1], 0, vec![0; 25]) - .failed(NFTPixelboardError::NotOwner); - // Should fail because `painting` length must equal a pixel count in an NFT. - pixelboard_program - .paint(USER[0], 0, vec![0; 24]) - .failed(NFTPixelboardError::WrongPaintingLength); - // Should fail because `painting` length must equal a pixel count in an NFT. - pixelboard_program - .paint(USER[0], 0, vec![0; 26]) - .failed(NFTPixelboardError::WrongPaintingLength); -} - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn painting() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(FOREIGN_USER, MAX_PIXEL_PRICE * (25 + 7 + 20 + 1)); - - let nft_program = NonFungibleToken::initialize(&system); - - let mut pixelboard_program = - NFTPixelboard::initialize(&system, ft_program.actor_id(), nft_program.actor_id()); - - pixelboard_program - .mint(FOREIGN_USER, vec![0; 25], ((3, 3), (8, 8)).into()) - .succeed(0); - #[rustfmt::skip] - pixelboard_program - .paint( - FOREIGN_USER, - 0, - vec![ - 1, 0, 7, 0, 1, - 0, 7, 0, 7, 0, - 7, 0, 0, 0, 7, - 0, 7, 0, 7, 0, - 1, 0, 7, 0, 1, - ], - ) - .succeed(0); - // #[rustfmt::skip] - // pixelboard_program.meta_state().painting().check(vec![ - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 1, 0, 7, 0, 1, 0, 0, - // 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, - // 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, - // 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, - // 0, 0, 0, 1, 0, 7, 0, 1, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // ]); - - pixelboard_program - .mint(FOREIGN_USER, vec![0; 7], ((3, 9), (10, 10)).into()) - .succeed(1); - pixelboard_program - .paint(FOREIGN_USER, 1, vec![4, 4, 4, 4, 4, 4, 4]) - .succeed(1); - // #[rustfmt::skip] - // pixelboard_program.meta_state().painting().check(vec![ - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 1, 0, 7, 0, 1, 0, 0, - // 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, - // 0, 0, 0, 7, 0, 0, 0, 7, 0, 0, - // 0, 0, 0, 0, 7, 0, 7, 0, 0, 0, - // 0, 0, 0, 1, 0, 7, 0, 1, 0, 0, - // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - // 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, - // ]); - - pixelboard_program - .mint(FOREIGN_USER, vec![0; 20], ((0, 0), (2, 10)).into()) - .succeed(2); - #[rustfmt::skip] - pixelboard_program - .paint( - FOREIGN_USER, - 2, - vec![ - 8, 9, - 9, 8, - 8, 9, - 9, 8, - 8, 9, - 9, 8, - 8, 9, - 9, 8, - 8, 9, - 9, 8, - ], - ) - .succeed(2); - // #[rustfmt::skip] - // pixelboard_program.meta_state().painting().check(vec![ - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - // 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - // 9, 8, 0, 1, 0, 7, 0, 1, 0, 0, - // 8, 9, 0, 0, 7, 0, 7, 0, 0, 0, - // 9, 8, 0, 7, 0, 0, 0, 7, 0, 0, - // 8, 9, 0, 0, 7, 0, 7, 0, 0, 0, - // 9, 8, 0, 1, 0, 7, 0, 1, 0, 0, - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - // 9, 8, 0, 4, 4, 4, 4, 4, 4, 4, - // ]); - - pixelboard_program - .mint(FOREIGN_USER, vec![0], ((9, 0), (10, 1)).into()) - .succeed(3); - pixelboard_program - .paint(FOREIGN_USER, 3, vec![3]) - .succeed(3); - // #[rustfmt::skip] - // pixelboard_program.meta_state().painting().check(vec![ - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 3, - // 9, 8, 0, 0, 0, 0, 0, 0, 0, 0, - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - // 9, 8, 0, 1, 0, 7, 0, 1, 0, 0, - // 8, 9, 0, 0, 7, 0, 7, 0, 0, 0, - // 9, 8, 0, 7, 0, 0, 0, 7, 0, 0, - // 8, 9, 0, 0, 7, 0, 7, 0, 0, 0, - // 9, 8, 0, 1, 0, 7, 0, 1, 0, 0, - // 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, - // 9, 8, 0, 4, 4, 4, 4, 4, 4, 4, - // ]); - - // A few extreme cases... - - ft_program.mint(FOREIGN_USER, MAX_PIXEL_PRICE * (1 + 10 + 10)); - - // One pixel canvas - let mut pixelboard_config = InitNFTPixelboard { - ft_program: ft_program.actor_id(), - block_side_length: 1, - nft_program: nft_program.actor_id(), - owner: FOREIGN_USER.into(), - painting: vec![0], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 100, - resolution: (1, 1).into(), - }; - pixelboard_program = - NFTPixelboard::initialize_custom(&system, pixelboard_config.clone()).succeed(); - - pixelboard_program - .mint(FOREIGN_USER, vec![0], ((0, 0), (1, 1)).into()) - .succeed(4); - - pixelboard_program - .paint(FOREIGN_USER, 4, vec![4]) - .succeed(4); - // pixelboard_program.meta_state().painting().check(vec![4]); - - // One column canvas - pixelboard_config.resolution = (1, 10).into(); - pixelboard_config.painting = vec![0; 10]; - pixelboard_program = NFTPixelboard::initialize_custom(&system, pixelboard_config).succeed(); - - pixelboard_program - .mint(FOREIGN_USER, vec![0; 3], ((0, 2), (1, 5)).into()) - .succeed(5); - - pixelboard_program - .paint(FOREIGN_USER, 5, vec![1, 2, 3]) - .succeed(5); - // pixelboard_program - // .meta_state() - // .painting() - // .check(vec![0, 0, 1, 2, 3, 0, 0, 0, 0, 0]); - - // // One row canvas - // pixelboard_config.resolution = (10, 1).into(); - // pixelboard_program = NFTPixelboard::initialize_custom(&system, pixelboard_config).succeed(); - - // pixelboard_program - // .mint(FOREIGN_USER, vec![0; 8], ((1, 0), (9, 1)).into()) - // .check(6); - - // pixelboard_program - // .paint(FOREIGN_USER, 6, vec![8, 7, 6, 5, 4, 3, 2, 1]) - // .check(6); - // pixelboard_program - // .meta_state() - // .painting() - // .check(vec![0, 8, 7, 6, 5, 4, 3, 2, 1, 0]); -} diff --git a/contracts/nft-pixelboard/tests/reselling.rs b/contracts/nft-pixelboard/tests/reselling.rs deleted file mode 100644 index 2cc423cbf..000000000 --- a/contracts/nft-pixelboard/tests/reselling.rs +++ /dev/null @@ -1,148 +0,0 @@ -pub mod utils; -use utils::{prelude::*, FungibleToken, NonFungibleToken, FOREIGN_USER, OWNER, USER}; - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn reselling() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(USER[0], MAX_PIXEL_PRICE * 25); - ft_program.mint(USER[1], 25); - - let nft_program = NonFungibleToken::initialize(&system); - - let pixelboard_config = InitNFTPixelboard { - ft_program: ft_program.actor_id(), - block_side_length: 1, - nft_program: nft_program.actor_id(), - owner: OWNER.into(), - painting: vec![0; 100], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 13, - resolution: (10, 10).into(), - }; - let pixelboard_program = - NFTPixelboard::initialize_custom(&system, pixelboard_config.clone()).succeed(); - - let mut token = Token( - ((3, 3), (8, 8)).into(), - TokenInfo { - owner: USER[0].into(), - token_id: Some(0.into()), - pixel_price: Some(MAX_PIXEL_PRICE), - }, - ); - - pixelboard_program - .mint(USER[0], vec![0; 25], token.0) - .succeed(0); - // Putting the NFT up for sale - pixelboard_program - .change_sale_state(USER[0], 0, Some(MAX_PIXEL_PRICE)) - .succeed(0); - - // pixelboard_program.meta_state().token_info(0).check(token); - // nft_program - // .meta_state() - // .owner(0) - // .check(pixelboard_program.actor_id()); - - // Removing the NFT from sale - pixelboard_program - .change_sale_state(USER[0], 0, None) - .succeed(0); - token.1.pixel_price = None; - - // pixelboard_program.meta_state().token_info(0).check(token); - // nft_program.meta_state().owner(0).check(USER[0].into()); - - pixelboard_program - .change_sale_state(USER[0], 0, Some(0)) - .succeed(0); - // Updating an NFT pixel price - pixelboard_program - .change_sale_state(USER[0], 0, Some(1)) - .succeed(0); - token.1.pixel_price = Some(1); - - // pixelboard_program.meta_state().token_info(0).check(token); - // nft_program - // .meta_state() - // .owner(0) - // .check(pixelboard_program.actor_id()); - - pixelboard_program.buy(USER[1], 0).succeed(0); - token.1.owner = USER[1].into(); - token.1.pixel_price = None; - - let commission = 25 * pixelboard_config.commission_percentage as u128 / 100; - ft_program - .balance(OWNER) - .succeed(MAX_PIXEL_PRICE * 25 + commission); - ft_program.balance(USER[0]).succeed(25 - commission); - ft_program.balance(USER[1]).succeed(0); - // nft_program.meta_state().owner(0).(USER[1].into()); - // pixelboard_program.meta_state().token_info(0).check(token); -} - -// TODO: uncomment & remove `#[allow(unused)]` after fixing tests. -// #[test] -#[allow(unused)] -fn reselling_failures() { - let system = utils::initialize_system(); - - let mut ft_program = FungibleToken::initialize(&system); - ft_program.mint(USER[0], MAX_PIXEL_PRICE * 25); - ft_program.mint(USER[1], MAX_PIXEL_PRICE * 24); - - let nft_program = NonFungibleToken::initialize(&system); - - let pixelboard_config = InitNFTPixelboard { - ft_program: ft_program.actor_id(), - block_side_length: 1, - nft_program: nft_program.actor_id(), - owner: OWNER.into(), - painting: vec![0; 100], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 13, - resolution: (10, 10).into(), - }; - let pixelboard_program = - NFTPixelboard::initialize_custom(&system, pixelboard_config.clone()).succeed(); - - pixelboard_program - .mint(USER[0], vec![0; 25], ((3, 3), (8, 8)).into()) - .succeed(0); - // Should fail because FOREIGN_USER isn't the owner of the NFT. - pixelboard_program - .change_sale_state(FOREIGN_USER, 0, Some(MAX_PIXEL_PRICE)) - .failed(NFTPixelboardError::NotOwner); - // Should fail because `pixel_price` mustn't be more than `MAX_PIXEL_PRICE`. - pixelboard_program - .change_sale_state(USER[0], 0, Some(MAX_PIXEL_PRICE + 1)) - .failed(NFTPixelboardError::PixelPriceExceeded); - // Should fail because the NFT isn't for sale. - pixelboard_program - .buy(USER[1], 0) - .failed(NFTPixelboardError::NFTIsNotOnSale); - - pixelboard_program - .change_sale_state(USER[0], 0, Some(MAX_PIXEL_PRICE)) - .succeed(0); - - // Should fail because USER[0] doesn't have enough fungible tokens to buy this NFT. - pixelboard_program - .buy(USER[1], 0) - .failed(NFTPixelboardError::FTokensTransferFailed); - - // But a commission should still be debited from USER[0] because USER[0] has enough tokens for it. - let commission = MAX_PIXEL_PRICE * 25 * pixelboard_config.commission_percentage as u128 / 100; - ft_program - .balance(USER[1]) - .succeed(MAX_PIXEL_PRICE * 24 - commission); - ft_program - .balance(OWNER) - .succeed(MAX_PIXEL_PRICE * 25 + commission); -} diff --git a/contracts/nft-pixelboard/tests/utils/common.rs b/contracts/nft-pixelboard/tests/utils/common.rs deleted file mode 100644 index 4e6e8acca..000000000 --- a/contracts/nft-pixelboard/tests/utils/common.rs +++ /dev/null @@ -1,131 +0,0 @@ -use convert::identity; -use fmt::Debug; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use marker::PhantomData; - -pub fn initialize_system() -> System { - let system = System::new(); - - system.init_logger(); - - system -} - -pub trait Program { - fn inner_program(&self) -> &InnerProgram<'_>; - - fn actor_id(&self) -> ActorId { - let bytes: [u8; 32] = self.inner_program().id().into(); - - bytes.into() - } -} - -pub trait TransactionalProgram { - fn previous_mut_transaction_id(&mut self) -> &mut u64; - - fn transaction_id(&mut self) -> u64 { - let tx_id = self.previous_mut_transaction_id(); - - *tx_id = tx_id.wrapping_add(1); - - *tx_id - } -} - -#[must_use] -pub struct MetaStateReply(pub T); - -impl MetaStateReply { - #[track_caller] - pub fn eq(self, value: T) { - assert_eq!(self.0, value); - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - event: fn(T) -> R, - ghost_data: PhantomData, -} - -impl RunResult { - pub fn new(result: InnerRunResult, event: fn(T) -> R) -> Self { - Self { - result, - event, - ghost_data: PhantomData, - } - } - - #[track_caller] - fn assert_contains(self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - self.assert_contains(Err::(error)); - } - - #[track_caller] - fn common_succeed(self, value: T, wrap: fn(R) -> V) { - let event = (self.event)(value); - - self.assert_contains(wrap(event)); - } - - #[track_caller] - pub fn succeed(self, value: T) { - self.common_succeed(value, Ok::); - } - - #[track_caller] - pub fn contains(self, value: T) { - self.common_succeed(value, identity); - } -} - -#[must_use] -pub struct InitResult { - contract_instance: T, - pub result: InnerRunResult, - pub is_active: bool, - ghost_data: PhantomData, -} - -impl InitResult { - pub fn new(contract_instance: T, result: InnerRunResult, is_active: bool) -> Self { - Self { - contract_instance, - result, - is_active, - ghost_data: PhantomData, - } - } - - fn assert_contains(&self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - assert!(!self.is_active); - self.assert_contains(Err::<(), E>(error)); - } - - #[track_caller] - pub fn succeed(self) -> T { - assert!(self.is_active); - self.assert_contains(Ok::<_, E>(())); - - self.contract_instance - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(result.contains(&Log::builder().payload(payload))); -} diff --git a/contracts/nft-pixelboard/tests/utils/ftoken.rs b/contracts/nft-pixelboard/tests/utils/ftoken.rs deleted file mode 100644 index 1c995d9c9..000000000 --- a/contracts/nft-pixelboard/tests/utils/ftoken.rs +++ /dev/null @@ -1,94 +0,0 @@ -use super::{Program, RunResult, TransactionalProgram, FOREIGN_USER}; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub struct FungibleToken<'a>(InnerProgram<'a>, u64); - -impl Program for FungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl TransactionalProgram for FungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> FungibleToken<'a> { - #[track_caller] - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ); - let storage_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let logic_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - assert!(!program - .send( - FOREIGN_USER, - InitFToken { - storage_code_hash: storage_code_id.into(), - ft_logic_code_hash: logic_code_id.into(), - }, - ) - .main_failed()); - - Self(program, 0) - } - - #[track_caller] - pub fn mint(&mut self, recipient: u64, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - FOREIGN_USER, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Mint { - recipient: recipient.into(), - amount, - }, - }, - )) - } - - #[track_caller] - pub fn approve(&mut self, from: u64, approved_account: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - from, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }, - }, - )); - } - - pub fn balance(&self, actor_id: impl Into) -> RunResult { - RunResult::new( - self.0 - .send(FOREIGN_USER, FTokenAction::GetBalance(actor_id.into())), - FTokenEvent::Balance, - ) - } -} - -fn assert_ft_token_event_ok(run_result: InnerRunResult) { - assert!(run_result.contains(&Log::builder().payload(FTokenEvent::Ok))) -} diff --git a/contracts/nft-pixelboard/tests/utils/mod.rs b/contracts/nft-pixelboard/tests/utils/mod.rs deleted file mode 100644 index f96909d40..000000000 --- a/contracts/nft-pixelboard/tests/utils/mod.rs +++ /dev/null @@ -1,17 +0,0 @@ -mod pixelboard; -pub use pixelboard::*; - -mod ftoken; -pub use ftoken::*; - -mod nftoken; -pub use nftoken::*; - -mod common; -pub use common::*; - -pub mod prelude; - -pub const FOREIGN_USER: u64 = 12345; -pub const OWNER: u64 = 54321; -pub const USER: [u64; 2] = [3746287346, 13856289765]; diff --git a/contracts/nft-pixelboard/tests/utils/nftoken.rs b/contracts/nft-pixelboard/tests/utils/nftoken.rs deleted file mode 100644 index 9e8a9aadb..000000000 --- a/contracts/nft-pixelboard/tests/utils/nftoken.rs +++ /dev/null @@ -1,61 +0,0 @@ -use super::{prelude::*, MetaStateReply, FOREIGN_USER}; -use gear_lib_old::non_fungible_token::token::{Token, TokenId}; -use gstd::ActorId; -use gtest::{Program as InnerProgram, System}; -use non_fungible_token_io::{Collection, Config, InitNFT}; -use std::fs; - -pub struct NonFungibleToken<'a>(InnerProgram<'a>); - -impl Program for NonFungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> NonFungibleToken<'a> { - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm", - ); - - assert!(!program - .send( - FOREIGN_USER, - InitNFT { - royalties: Default::default(), - collection: Collection::default(), - config: Config::default() - } - ) - .main_failed()); - - Self(program) - } - - pub fn meta_state(&self) -> NonFungibleTokenMetaState<'_> { - NonFungibleTokenMetaState(&self.0) - } -} - -pub struct NonFungibleTokenMetaState<'a>(&'a InnerProgram<'a>); - -impl NonFungibleTokenMetaState<'_> { - pub fn owner_id(self, token_id: u128) -> MetaStateReply { - MetaStateReply(self.token(token_id).0.owner_id) - } - - pub fn token(self, token_id: u128) -> MetaStateReply { - if let Ok(token) = self.0.read_state_using_wasm::( - 0, - "token", - fs::read("target/nft_state.wasm").unwrap(), - Some(token_id.into()), - ) { - MetaStateReply(token) - } else { - unreachable!(); - } - } -} diff --git a/contracts/nft-pixelboard/tests/utils/pixelboard.rs b/contracts/nft-pixelboard/tests/utils/pixelboard.rs deleted file mode 100644 index 8a9efbc07..000000000 --- a/contracts/nft-pixelboard/tests/utils/pixelboard.rs +++ /dev/null @@ -1,240 +0,0 @@ -use super::common::{InitResult, Program, RunResult}; -use super::{FOREIGN_USER, OWNER}; -use gear_lib_old::non_fungible_token::token::TokenMetadata; -use gstd::ActorId; -use gtest::{Program as InnerProgram, System}; -use nft_pixelboard_io::*; - -pub const EXISTENTIAL_DEPOSIT: u128 = 10_000_000_000_000; - -type NFTPixelboardRunResult = RunResult; - -pub struct NFTPixelboard<'a>(InnerProgram<'a>); - -impl Program for NFTPixelboard<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> NFTPixelboard<'a> { - pub fn initialize(system: &'a System, ft_program: ActorId, nft_program: ActorId) -> Self { - Self::initialize_custom( - system, - InitNFTPixelboard { - ft_program, - block_side_length: 1, - nft_program, - owner: OWNER.into(), - painting: vec![0; 100], - pixel_price: MAX_PIXEL_PRICE, - commission_percentage: 100, - resolution: (10, 10).into(), - }, - ) - .succeed() - } - - pub fn initialize_custom( - system: &'a System, - config: InitNFTPixelboard, - ) -> InitResult, NFTPixelboardError> { - let program = InnerProgram::current_opt(system); - - system.mint_to(program.id(), EXISTENTIAL_DEPOSIT); - - let result = program.send(FOREIGN_USER, config); - let is_active = system.is_active_program(program.id()); - InitResult::new(Self(program), result, is_active) - } - - pub fn mint( - &self, - from: u64, - painting: Vec, - rectangle: Rectangle, - ) -> NFTPixelboardRunResult { - self.mint_with_metadata(from, painting, rectangle, Default::default()) - } - - pub fn mint_with_metadata( - &self, - from: u64, - painting: Vec, - rectangle: Rectangle, - token_metadata: TokenMetadata, - ) -> NFTPixelboardRunResult { - RunResult::new( - self.0.send( - from, - NFTPixelboardAction::Mint { - painting, - rectangle, - token_metadata, - }, - ), - |value| NFTPixelboardEvent::Minted(value.into()), - ) - } - - pub fn change_sale_state( - &self, - from: u64, - token_id: u128, - pixel_price: Option, - ) -> NFTPixelboardRunResult { - RunResult::new( - self.0.send( - from, - NFTPixelboardAction::ChangeSaleState { - token_id: token_id.into(), - pixel_price, - }, - ), - |token_id| NFTPixelboardEvent::SaleStateChanged(token_id.into()), - ) - } - - pub fn buy(&self, from: u64, token_id: u128) -> NFTPixelboardRunResult { - RunResult::new( - self.0.send(from, NFTPixelboardAction::Buy(token_id.into())), - |token_id| NFTPixelboardEvent::Bought(token_id.into()), - ) - } - - pub fn paint( - &self, - from: u64, - token_id: u128, - painting: Vec, - ) -> NFTPixelboardRunResult { - RunResult::new( - self.0.send( - from, - NFTPixelboardAction::Paint { - token_id: token_id.into(), - painting, - }, - ), - |token_id| NFTPixelboardEvent::Painted(token_id.into()), - ) - } -} - -// # TODO: uncomment when new meta will be ready for gtest - -// pub fn meta_state(&self) -> NFTPixelboardMetaState { -// NFTPixelboardMetaState(&self.0) -// } - -// pub struct NFTPixelboardMetaState<'a>(&'a InnerProgram<'a>); - -// impl NFTPixelboardMetaState<'_> { -// pub fn ft_program(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::FTProgram(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::FTProgram) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn nft_program(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::NFTProgram(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::NFTProgram) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn block_side_length(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::BlockSideLength(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::BlockSideLength) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn painting(self) -> MetaStateReply> { -// if let NFTPixelboardStateReply::Painting(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::Painting) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn pixel_info(self, coordinates: Coordinates) -> MetaStateReply { -// if let NFTPixelboardStateReply::PixelInfo(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::PixelInfo(coordinates)) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn pixel_price(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::PixelPrice(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::PixelPrice) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn commission_percentage(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::CommissionPercentage(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::CommissionPercentage) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn resolution(self) -> MetaStateReply { -// if let NFTPixelboardStateReply::Resolution(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::Resolution) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } - -// pub fn token_info(self, token_id: u128) -> MetaStateReply { -// if let NFTPixelboardStateReply::TokenInfo(reply) = self -// .0 -// .meta_state(NFTPixelboardStateQuery::TokenInfo(token_id.into())) -// .unwrap() -// { -// MetaStateReply(reply) -// } else { -// unreachable!(); -// } -// } -// } diff --git a/contracts/nft-pixelboard/tests/utils/prelude.rs b/contracts/nft-pixelboard/tests/utils/prelude.rs deleted file mode 100644 index 46767117c..000000000 --- a/contracts/nft-pixelboard/tests/utils/prelude.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub use super::{NFTPixelboard, Program}; -pub use gstd::prelude::*; -pub use nft_pixelboard_io::*; diff --git a/contracts/nft/Cargo.toml b/contracts/nft/Cargo.toml deleted file mode 100644 index 717d6f8b5..000000000 --- a/contracts/nft/Cargo.toml +++ /dev/null @@ -1,21 +0,0 @@ -[package] -name = "nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -nft-io.workspace = true -gmeta.workspace = true - -[dev-dependencies] -sp-core.workspace = true -gclient.workspace = true -gtest.workspace = true -gear-core.workspace = true -tokio.workspace = true - -[build-dependencies] -nft-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/nft/README.md b/contracts/nft/README.md deleted file mode 100644 index cc4da1ac9..000000000 --- a/contracts/nft/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=non-fungible-token/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/non_fungible_token_io) - -# [Non-fungible token](https://wiki.gear-tech.io/docs/examples/Standards/gnft-721) - -### 🏗️ Building - -```sh -cargo b -r -p "nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "nft*" -``` diff --git a/contracts/nft/build.rs b/contracts/nft/build.rs deleted file mode 100644 index 0501a2c79..000000000 --- a/contracts/nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use nft_io::NftMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/nft/io/Cargo.toml b/contracts/nft/io/Cargo.toml deleted file mode 100644 index 84e759ee0..000000000 --- a/contracts/nft/io/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -gmeta.workspace = true -scale-info.workspace = true -parity-scale-codec.workspace = true diff --git a/contracts/nft/io/src/lib.rs b/contracts/nft/io/src/lib.rs deleted file mode 100644 index 97be16ee7..000000000 --- a/contracts/nft/io/src/lib.rs +++ /dev/null @@ -1,140 +0,0 @@ -#![no_std] -use gmeta::{In, InOut, Metadata}; -use gstd::{prelude::*, ActorId}; - -pub type TokenId = u128; -pub const ZERO_ID: ActorId = ActorId::zero(); - -pub struct NftMetadata; - -impl Metadata for NftMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = InOut; -} - -#[derive(Default, Debug, Encode, Decode, TypeInfo)] -pub struct Config { - pub max_mint_count: Option, -} - -#[derive(Default, Debug, Encode, Decode, TypeInfo)] -pub struct InitNft { - pub collection: Collection, - pub config: Config, -} - -#[derive(Default, Debug, Encode, Decode, TypeInfo)] -pub struct Collection { - pub name: String, - pub description: String, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -pub enum NftAction { - Mint { - to: ActorId, - token_metadata: TokenMetadata, - }, - Burn { - token_id: TokenId, - }, - Transfer { - to: ActorId, - token_id: TokenId, - }, - Approve { - to: ActorId, - token_id: TokenId, - }, - GetOwner { - token_id: TokenId, - }, - CheckIfApproved { - to: ActorId, - token_id: TokenId, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -pub enum NftEvent { - Minted { - to: ActorId, - token_metadata: TokenMetadata, - }, - Burnt { - token_id: TokenId, - }, - Transferred { - from: ActorId, - to: ActorId, - token_id: TokenId, - }, - Approved { - owner: ActorId, - approved_account: ActorId, - token_id: TokenId, - }, - Owner { - owner: ActorId, - token_id: TokenId, - }, - CheckIfApproved { - to: ActorId, - token_id: TokenId, - approved: bool, - }, -} - -#[derive(Default, Debug, Encode, Decode, TypeInfo, Clone)] -pub struct TokenMetadata { - // ex. "CryptoKitty #100" - pub name: String, - // free-form description - pub description: String, - // URL to associated media, preferably to decentralized, content-addressed storage - pub media: String, - // URL to an off-chain JSON file with more info. - pub reference: String, -} - -#[derive(Default, Debug, Encode, Decode, TypeInfo)] -pub struct State { - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, ActorId)>, - pub token_metadata_by_id: Vec<(TokenId, TokenMetadata)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub token_id: TokenId, - pub owner: ActorId, - pub collection: Collection, - pub config: Config, -} - -#[derive(Encode, Decode, TypeInfo)] -pub enum StateQuery { - All, - Config, - Collection, - Owner, - CurrentTokenId, - OwnerById { token_id: TokenId }, - TokenApprovals { token_id: TokenId }, - TokenMetadata { token_id: TokenId }, - OwnerTokens { owner: ActorId }, -} - -#[derive(Encode, Decode, TypeInfo)] -pub enum StateReply { - All(State), - Config(Config), - Collection(Collection), - Owner(ActorId), - CurrentTokenId(TokenId), - OwnerById(Option), - TokenApprovals(Option), - TokenMetadata(Option), - OwnerTokens(Option>), -} diff --git a/contracts/nft/src/lib.rs b/contracts/nft/src/lib.rs deleted file mode 100644 index 798449d64..000000000 --- a/contracts/nft/src/lib.rs +++ /dev/null @@ -1,305 +0,0 @@ -#![no_std] - -use gstd::{ - collections::{HashMap, HashSet}, - msg, - prelude::*, - ActorId, -}; -use nft_io::*; - -#[derive(Debug, Default)] -pub struct Nft { - pub owner_by_id: HashMap, - pub token_approvals: HashMap, - pub token_metadata_by_id: HashMap, - pub tokens_for_owner: HashMap>, - pub token_id: TokenId, - pub owner: ActorId, - pub collection: Collection, - pub config: Config, -} - -static mut NFT: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let init: InitNft = msg::load().expect("Unable to decode InitNft"); - - let nft = Nft { - collection: init.collection, - config: init.config, - owner: msg::source(), - ..Default::default() - }; - NFT = Some(nft); -} - -impl Nft { - /// Mint a new nft using `TokenMetadata` - fn mint(&mut self, to: &ActorId, token_metadata: TokenMetadata) -> NftEvent { - self.check_config(); - self.check_zero_address(to); - self.owner_by_id.insert(self.token_id, *to); - self.tokens_for_owner - .entry(*to) - .and_modify(|tokens| { - tokens.insert(self.token_id); - }) - .or_insert_with(|| HashSet::from([self.token_id])); - self.token_metadata_by_id - .insert(self.token_id, token_metadata.clone()); - - self.token_id += 1; - - NftEvent::Minted { - to: *to, - token_metadata, - } - } - /// Burn nft by `TokenId` - fn burn(&mut self, token_id: TokenId) -> NftEvent { - let owner = *self - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - - self.check_owner(&owner); - self.owner_by_id.remove(&token_id); - self.token_metadata_by_id.remove(&token_id); - - if let Some(tokens) = self.tokens_for_owner.get_mut(&owner) { - tokens.remove(&token_id); - if tokens.is_empty() { - self.tokens_for_owner.remove(&owner); - } - } - self.token_approvals.remove(&token_id); - - NftEvent::Burnt { token_id } - } - /// Transfer token from `token_id` to address `to` - fn transfer(&mut self, to: &ActorId, token_id: TokenId) -> NftEvent { - let owner = *self - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - - self.can_transfer(token_id, &owner); - self.check_zero_address(to); - // assign new owner - self.owner_by_id - .entry(token_id) - .and_modify(|owner| *owner = *to); - // push token to new owner - self.tokens_for_owner - .entry(*to) - .and_modify(|tokens| { - tokens.insert(token_id); - }) - .or_insert_with(|| HashSet::from([token_id])); - // remove token from old owner - if let Some(tokens) = self.tokens_for_owner.get_mut(&owner) { - tokens.remove(&token_id); - if tokens.is_empty() { - self.tokens_for_owner.remove(&owner); - } - } - // remove approvals if any - self.token_approvals.remove(&token_id); - - NftEvent::Transferred { - from: owner, - to: *to, - token_id, - } - } - /// Approve token from `token_id` to address `to` - fn approve(&mut self, to: &ActorId, token_id: TokenId) -> NftEvent { - let owner = self - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - self.check_owner(owner); - self.check_zero_address(to); - self.check_approve(&token_id); - self.token_approvals.insert(token_id, *to); - - NftEvent::Approved { - owner: *owner, - approved_account: *to, - token_id, - } - } - /// Get `ActorId` of the nft owner with `token_id` - fn owner(&self, token_id: TokenId) -> NftEvent { - let owner = self - .owner_by_id - .get(&token_id) - .expect("NonFungibleToken: token does not exist"); - - NftEvent::Owner { - owner: *owner, - token_id, - } - } - /// Get confirmation about approval to address `to` and `token_id` - fn is_approved_to(&self, to: &ActorId, token_id: TokenId) -> NftEvent { - if !self.owner_by_id.contains_key(&token_id) { - panic!("Token does not exist") - } - self.token_approvals.get(&token_id).map_or_else( - || NftEvent::CheckIfApproved { - to: *to, - token_id, - approved: false, - }, - |approval_id| NftEvent::CheckIfApproved { - to: *to, - token_id, - approved: *approval_id == *to, - }, - ) - } - - /// Checking the configuration with current contract data - fn check_config(&self) { - if let Some(max_mint_count) = self.config.max_mint_count { - if max_mint_count <= self.token_metadata_by_id.len() as u128 { - panic!( - "Mint impossible because max minting count {} limit exceeded", - max_mint_count - ); - } - } - } - /// Check for ZERO_ID address - fn check_zero_address(&self, account: &ActorId) { - if account == &ZERO_ID { - panic!("NonFungibleToken: zero address"); - } - } - /// Checks that `msg::source()` is the owner of the token with indicated `token_id` - fn check_owner(&self, owner: &ActorId) { - if owner != &msg::source() { - panic!("NonFungibleToken: access denied"); - } - } - /// Checks that `msg::source()` is allowed to manage the token with indicated `token_id` - fn can_transfer(&self, token_id: TokenId, owner: &ActorId) { - if let Some(approved_accounts) = self.token_approvals.get(&token_id) { - if approved_accounts == &msg::source() { - return; - } - } - self.check_owner(owner); - } - /// Check the existence of a approve - fn check_approve(&self, token_id: &TokenId) { - if self.token_approvals.contains_key(token_id) { - panic!("Approve has already been issued"); - } - } -} - -#[no_mangle] -extern fn handle() { - let action: NftAction = msg::load().expect("Could not load NftAction"); - let nft = unsafe { NFT.as_mut().expect("`NFT` is not initialized.") }; - let result = match action { - NftAction::Mint { to, token_metadata } => nft.mint(&to, token_metadata), - NftAction::Burn { token_id } => nft.burn(token_id), - NftAction::Transfer { to, token_id } => nft.transfer(&to, token_id), - NftAction::Approve { to, token_id } => nft.approve(&to, token_id), - NftAction::GetOwner { token_id } => nft.owner(token_id), - NftAction::CheckIfApproved { to, token_id } => nft.is_approved_to(&to, token_id), - }; - msg::reply(result, 0).expect("Failed to encode or reply with `NftEvent`."); -} - -#[no_mangle] -extern fn state() { - let nft = unsafe { NFT.take().expect("Unexpected error in taking state") }; - let query: StateQuery = msg::load().expect("Unable to load the state query"); - match query { - StateQuery::All => { - msg::reply(StateReply::All(nft.into()), 0).expect("Unable to share the state"); - } - StateQuery::Config => { - msg::reply(StateReply::Config(nft.config), 0).expect("Unable to share the state"); - } - StateQuery::Collection => { - msg::reply(StateReply::Collection(nft.collection), 0) - .expect("Unable to share the state"); - } - StateQuery::Owner => { - msg::reply(StateReply::Owner(nft.owner), 0).expect("Unable to share the state"); - } - StateQuery::CurrentTokenId => { - msg::reply(StateReply::CurrentTokenId(nft.token_id), 0) - .expect("Unable to share the state"); - } - StateQuery::OwnerById { token_id } => { - msg::reply( - StateReply::OwnerById(nft.owner_by_id.get(&token_id).cloned()), - 0, - ) - .expect("Unable to share the state"); - } - StateQuery::TokenApprovals { token_id } => { - let approval = nft.token_approvals.get(&token_id).cloned(); - msg::reply(StateReply::TokenApprovals(approval), 0).expect("Unable to share the state"); - } - StateQuery::TokenMetadata { token_id } => { - msg::reply( - StateReply::TokenMetadata(nft.token_metadata_by_id.get(&token_id).cloned()), - 0, - ) - .expect("Unable to share the state"); - } - StateQuery::OwnerTokens { owner } => { - let tokens = nft - .tokens_for_owner - .get(&owner) - .map(|hashset| hashset.iter().cloned().collect()); - msg::reply(StateReply::OwnerTokens(tokens), 0).expect("Unable to share the state"); - } - } -} - -impl From for State { - fn from(value: Nft) -> Self { - let Nft { - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - token_id, - owner, - collection, - config, - } = value; - - let owner_by_id = owner_by_id.into_iter().collect(); - - let token_approvals = token_approvals.into_iter().collect(); - - let token_metadata_by_id = token_metadata_by_id.into_iter().collect(); - - let tokens_for_owner = tokens_for_owner - .into_iter() - .map(|(id, tokens)| (id, tokens.into_iter().collect())) - .collect(); - - Self { - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - token_id, - owner, - collection, - config, - } - } -} diff --git a/contracts/nft/tests/node_tests.rs b/contracts/nft/tests/node_tests.rs deleted file mode 100644 index 9a5f90384..000000000 --- a/contracts/nft/tests/node_tests.rs +++ /dev/null @@ -1,224 +0,0 @@ -use gclient::{EventProcessor, GearApi, Result}; -use gstd::Encode; - -use nft_io::*; -mod utils_node; -use utils_node::*; - -const ALICE: [u8; 32] = [ - 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, - 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, -]; - -#[tokio::test] -async fn gclient_mint_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Check State - let state = get_state(&api, &program_id) - .await - .expect("Unexpected invalid state."); - assert_eq!(state.owner_by_id, [(0_u128, ALICE.into())]); - assert_eq!(state.tokens_for_owner, [(ALICE.into(), vec![0])]); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_burn_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Burn - let (message_id, _) = burn(&api, &program_id, 0).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Check State - let state = get_state(&api, &program_id) - .await - .expect("Unexpected invalid state."); - assert!(state.owner_by_id.is_empty()); - assert!(state.tokens_for_owner.is_empty()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_transfer_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Transfer - let (message_id, _) = transfer(&api, &program_id, 4.into(), 0).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Check State - let state = get_state(&api, &program_id) - .await - .expect("Unexpected invalid state."); - assert_eq!(state.owner_by_id, [(0_u128, 4.into())]); - assert_eq!(state.tokens_for_owner, [(4.into(), vec![0])]); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_approved() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Approve - let (message_id, _) = approve(&api, &program_id, 3.into(), 0).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Check state - let state = get_state(&api, &program_id) - .await - .expect("Unexpected invalid state."); - assert_eq!(state.token_approvals, [(0_u128, 3.into())]); - - // Transfer - let (message_id, _) = transfer(&api, &program_id, 4.into(), 0).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Check state - let state = get_state(&api, &program_id) - .await - .expect("Unexpected invalid state."); - assert!(state.token_approvals.is_empty()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_owner_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let owner_payload = NftAction::GetOwner { token_id: 0 }; - - let gas_info = api - .calculate_handle_gas(None, program_id, owner_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, owner_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_is_approved_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - // Init - let (message_id, program_id, _hash) = init(&api).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - // Mint - let (message_id, _) = mint(&api, &program_id, ALICE.into()).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - // Approve - let (message_id, _) = approve(&api, &program_id, 3.into(), 0).await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let is_approved_payload = NftAction::CheckIfApproved { - to: 3.into(), - token_id: 0, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, is_approved_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, is_approved_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - Ok(()) -} diff --git a/contracts/nft/tests/tests.rs b/contracts/nft/tests/tests.rs deleted file mode 100644 index cca0ee273..000000000 --- a/contracts/nft/tests/tests.rs +++ /dev/null @@ -1,229 +0,0 @@ -use gstd::{ActorId, Encode}; -use gtest::System; -mod utils; -use nft_io::*; -use utils::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - - let res = mint(&nft, USERS[0], USERS[1].into()); - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - let message = NftEvent::Minted { - to: USERS[1].into(), - token_metadata, - } - .encode(); - assert!(res.contains(&(USERS[0], message))); - - let state = get_state(&nft).expect("Unexpected invalid state."); - assert_eq!(state.owner_by_id, [(0_u128, USERS[1].into())]); - assert_eq!(state.tokens_for_owner, [(USERS[1].into(), vec![0])]); -} - -#[test] -fn mint_failures() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNft { - collection, - config: Config { - max_mint_count: Some(1), - }, - }; - - let res = nft.send(USERS[0], init_nft); - assert!(!res.main_failed()); - - // zero address - let res = mint(&nft, USERS[0], 0.into()); - assert!(res.main_failed()); - - // limit_exceed - let nft = sys.get_program(1).unwrap(); - let res = mint(&nft, USERS[0], USERS[1].into()); - assert!(!res.main_failed()); - let res = mint(&nft, USERS[0], USERS[1].into()); - assert!(res.main_failed()) -} - -#[test] -fn burn_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let res = mint(&nft, USERS[0], USERS[1].into()); - assert!(!res.main_failed()); - let res = burn(&nft, USERS[1], 0); - let message = NftEvent::Burnt { token_id: 0 }.encode(); - assert!(res.contains(&(USERS[1], message))); - - let state = get_state(&nft).expect("Unexpected invalid state."); - assert!(state.owner_by_id.is_empty()); - assert!(state.tokens_for_owner.is_empty()); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - mint(&nft, USERS[0], USERS[1].into()); - // must fail since the token doesn't exist - assert!(burn(&nft, USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(burn(&nft, USERS[0], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - - let res = transfer(&nft, USERS[1], USERS[2], 0); - let message = NftEvent::Transferred { - from: USERS[1].into(), - to: USERS[2].into(), - token_id: 0, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let state = get_state(&nft).expect("Unexpected invalid state."); - assert_eq!(state.owner_by_id, [(0_u128, USERS[2].into())]); - assert_eq!(state.tokens_for_owner, [(USERS[2].into(), vec![0])]); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - - // must fail since the token doesn't exist - assert!(transfer(&nft, USERS[1], USERS[2], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(transfer(&nft, USERS[0], USERS[2], 0).main_failed()); - // must fail since transfer to the zero address - assert!(transfer(&nft, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - let res = approve(&nft, USERS[1], USERS[2], 0); - let message = NftEvent::Approved { - owner: USERS[1].into(), - approved_account: USERS[2].into(), - token_id: 0, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - let state = get_state(&nft).expect("Unexpected invalid state."); - assert_eq!(state.token_approvals, [(0_u128, USERS[2].into())]); - - assert!(!transfer(&nft, USERS[2], USERS[0], 0).main_failed()); - - let state = get_state(&nft).expect("Unexpected invalid state."); - assert!(state.token_approvals.is_empty()); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - // must fail since the token doesn't exist - assert!(approve(&nft, USERS[1], USERS[2], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(approve(&nft, USERS[0], USERS[2], 0).main_failed()); - // must fail since approval to the zero address - assert!(approve(&nft, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - assert!(!approve(&nft, USERS[1], USERS[2], 0).main_failed()); - //transfer - assert!(!transfer(&nft, USERS[1], USERS[0], 0).main_failed()); - //must fail since approval was removed after transferring - assert!(transfer(&nft, USERS[2], USERS[0], 0).main_failed()); -} - -#[test] -fn owner_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - let res = owner_of(&nft, USERS[1], 0); - - let message = NftEvent::Owner { - token_id: 0, - owner: ActorId::from(USERS[1]), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn owner_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - let res = owner_of(&nft, USERS[1], 1); - assert!(res.main_failed()); -} - -#[test] -fn is_approved_to_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - assert!(!approve(&nft, USERS[1], USERS[2], 0).main_failed()); - - let res = is_approved_to(&nft, USERS[0], 0, USERS[2]); - let message = NftEvent::CheckIfApproved { - to: USERS[2].into(), - token_id: 0, - approved: true, - } - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn is_approved_to_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!mint(&nft, USERS[0], USERS[1].into()).main_failed()); - assert!(!approve(&nft, USERS[1], USERS[2], 0).main_failed()); - let res = is_approved_to(&nft, USERS[1], 1, USERS[2]); - assert!(res.main_failed()); -} diff --git a/contracts/nft/tests/utils.rs b/contracts/nft/tests/utils.rs deleted file mode 100644 index 3571ddedf..000000000 --- a/contracts/nft/tests/utils.rs +++ /dev/null @@ -1,100 +0,0 @@ -use gstd::ActorId; -use gtest::{Program, RunResult, System}; -use nft_io::*; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNft { - collection, - config: Config { - max_mint_count: Some(100), - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, member: u64, to: ActorId) -> RunResult { - nft.send( - member, - NftAction::Mint { - to, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn burn(nft: &Program<'_>, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - NftAction::Burn { - token_id: token_id.into(), - }, - ) -} - -pub fn transfer(nft: &Program<'_>, from: u64, to: u64, token_id: u64) -> RunResult { - nft.send( - from, - NftAction::Transfer { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn owner_of(nft: &Program<'_>, from: u64, token_id: u64) -> RunResult { - nft.send( - from, - NftAction::GetOwner { - token_id: token_id.into(), - }, - ) -} - -pub fn is_approved_to(nft: &Program<'_>, from: u64, token_id: u64, to: u64) -> RunResult { - nft.send( - from, - NftAction::CheckIfApproved { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve(nft: &Program<'_>, from: u64, to: u64, token_id: u64) -> RunResult { - nft.send( - from, - NftAction::Approve { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn get_state(nft: &Program<'_>) -> Option { - let reply = nft - .read_state(StateQuery::All) - .expect("Unexpected invalid reply."); - if let StateReply::All(state) = reply { - Some(state) - } else { - None - } -} diff --git a/contracts/nft/tests/utils_node.rs b/contracts/nft/tests/utils_node.rs deleted file mode 100644 index 067bf2283..000000000 --- a/contracts/nft/tests/utils_node.rs +++ /dev/null @@ -1,119 +0,0 @@ -use gclient::{GearApi, Result}; -use gear_core::ids::{MessageId, ProgramId}; -use gstd::{ActorId, Encode}; -use nft_io::*; -use sp_core::H256; - -pub async fn get_state(api: &GearApi, program_id: &ProgramId) -> Option { - let reply = api - .read_state(*program_id, StateQuery::All.encode()) - .await - .expect("Unexpected invalid reply."); - if let StateReply::All(state) = reply { - Some(state) - } else { - None - } -} - -pub async fn init(api: &GearApi) -> Result<(MessageId, ProgramId, H256)> { - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNft { - collection, - config: Config { - max_mint_count: Some(100), - }, - } - .encode(); - - let path = "../target/wasm32-unknown-unknown/release/nft.opt.wasm"; - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(path)?, - init_nft.clone(), - 0, - true, - ) - .await?; - - api.upload_program_bytes( - gclient::code_from_os(path)?, - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await -} - -pub async fn mint(api: &GearApi, program_id: &ProgramId, to: ActorId) -> Result<(MessageId, H256)> { - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NftAction::Mint { to, token_metadata }; - - let gas_info = api - .calculate_handle_gas(None, *program_id, mint_payload.encode(), 0, true) - .await - .unwrap(); - - api.send_message(*program_id, mint_payload, gas_info.burned * 2, 0) - .await -} - -pub async fn burn( - api: &GearApi, - program_id: &ProgramId, - token_id: TokenId, -) -> Result<(MessageId, H256)> { - let burn_payload = NftAction::Burn { token_id }; - - let gas_info = api - .calculate_handle_gas(None, *program_id, burn_payload.encode(), 0, true) - .await - .unwrap(); - - api.send_message(*program_id, burn_payload, gas_info.burned * 2, 0) - .await -} - -pub async fn transfer( - api: &GearApi, - program_id: &ProgramId, - to: ActorId, - token_id: TokenId, -) -> Result<(MessageId, H256)> { - let transfer_payload = NftAction::Transfer { to, token_id }; - - let gas_info = api - .calculate_handle_gas(None, *program_id, transfer_payload.encode(), 0, true) - .await?; - - api.send_message(*program_id, transfer_payload, gas_info.burned * 2, 0) - .await -} - -pub async fn approve( - api: &GearApi, - program_id: &ProgramId, - to: ActorId, - token_id: TokenId, -) -> Result<(MessageId, H256)> { - let approve_payload = NftAction::Approve { to, token_id }; - - let gas_info = api - .calculate_handle_gas(None, *program_id, approve_payload.encode(), 0, true) - .await?; - - api.send_message(*program_id, approve_payload, gas_info.burned * 2, 0) - .await -} diff --git a/contracts/non-fungible-token/Cargo.toml b/contracts/non-fungible-token/Cargo.toml deleted file mode 100644 index e9aad9324..000000000 --- a/contracts/non-fungible-token/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "non-fungible-token" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -non-fungible-token-io.workspace = true -gear-lib-old.workspace = true -gear-lib-derive.workspace = true -sp-core-hashing.workspace = true -gmeta.workspace = true - -[dev-dependencies] -hex-literal.workspace = true -sp-core.workspace = true -gclient.workspace = true -gtest.workspace = true -tokio.workspace = true - -[build-dependencies] -non-fungible-token-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/non-fungible-token/README.md b/contracts/non-fungible-token/README.md deleted file mode 100644 index 886d0064a..000000000 --- a/contracts/non-fungible-token/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=non-fungible-token/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/non_fungible_token_io) - -# [Non-fungible token](https://wiki.gear-tech.io/docs/examples/Standards/gnft-721) - -### 🏗️ Building - -```sh -cargo b -r -p "non-fungible-token*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "non-fungible-token*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "non-fungible-token*" -``` diff --git a/contracts/non-fungible-token/build.rs b/contracts/non-fungible-token/build.rs deleted file mode 100644 index fd634bf67..000000000 --- a/contracts/non-fungible-token/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use non_fungible_token_io::NFTMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/non-fungible-token/io/Cargo.toml b/contracts/non-fungible-token/io/Cargo.toml deleted file mode 100644 index c02a0f7bf..000000000 --- a/contracts/non-fungible-token/io/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "non-fungible-token-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -gmeta.workspace = true diff --git a/contracts/non-fungible-token/io/src/lib.rs b/contracts/non-fungible-token/io/src/lib.rs deleted file mode 100644 index 1320729b6..000000000 --- a/contracts/non-fungible-token/io/src/lib.rs +++ /dev/null @@ -1,220 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - io::{NFTApproval, NFTTransfer, NFTTransferPayout}, - royalties::*, - state::NFTState, - token::*, -}; -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; -use primitive_types::H256; - -pub struct NFTMetadata; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Config { - pub max_mint_count: Option, - pub authorized_minters: Vec, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitNFT { - pub collection: Collection, - pub royalties: Option, - pub config: Config, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Collection { - pub name: String, - pub description: String, -} - -impl Metadata for NFTMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTAction { - Mint { - transaction_id: u64, - token_metadata: TokenMetadata, - }, - Burn { - transaction_id: u64, - token_id: TokenId, - }, - Transfer { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - TransferPayout { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - amount: u128, - }, - NFTPayout { - owner: ActorId, - amount: u128, - }, - Approve { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - DelegatedApprove { - transaction_id: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], - }, - Owner { - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - }, - Clear { - transaction_hash: H256, - }, - AddMinter { - transaction_id: u64, - minter_id: ActorId, - }, -} - -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTEvent { - Transfer(NFTTransfer), - TransferPayout(NFTTransferPayout), - NFTPayout(Payout), - Approval(NFTApproval), - Owner { - owner: ActorId, - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - approved: bool, - }, - MinterAdded { - minter_id: ActorId, - }, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, Vec)>, - pub token_metadata_by_id: Vec<(TokenId, Option)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub royalties: Option, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNft { - pub token: IoNFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: Vec<(H256, NFTEvent)>, - pub collection: Collection, - pub config: Config, -} - -impl From<&NFTState> for IoNFTState { - fn from(value: &NFTState) -> Self { - let NFTState { - name, - symbol, - base_uri, - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties, - } = value; - - let owner_by_id = owner_by_id - .iter() - .map(|(hash, actor_id)| (*hash, *actor_id)) - .collect(); - - let token_approvals = token_approvals - .iter() - .map(|(key, approvals)| (*key, approvals.iter().copied().collect())) - .collect(); - - let token_metadata_by_id = token_metadata_by_id - .iter() - .map(|(id, metadata)| (*id, metadata.clone())) - .collect(); - - let tokens_for_owner = tokens_for_owner - .iter() - .map(|(id, tokens)| (*id, tokens.clone())) - .collect(); - - Self { - name: name.clone(), - symbol: symbol.clone(), - base_uri: base_uri.clone(), - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties: royalties.clone(), - } - } -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Nft { - pub owner: ActorId, - pub name: String, - pub description: String, - pub media_url: String, - pub attrib_url: String, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub tokens: Vec<(TokenId, Nft)>, - pub owner: ActorId, - pub transactions: Vec<(H256, NFTEvent)>, - pub owners: Vec<(ActorId, TokenId)>, - pub collection: Collection, - pub nonce: TokenId, - pub config: Config, -} diff --git a/contracts/non-fungible-token/src/lib.rs b/contracts/non-fungible-token/src/lib.rs deleted file mode 100644 index 2637e33dc..000000000 --- a/contracts/non-fungible-token/src/lib.rs +++ /dev/null @@ -1,327 +0,0 @@ -#![no_std] - -use gear_lib_derive::{NFTCore, NFTMetaState, NFTStateKeeper}; -use gear_lib_old::non_fungible_token::{io::NFTTransfer, nft_core::*, state::*, token::*}; -use gstd::{collections::HashMap, exec, msg, prelude::*, ActorId}; -use non_fungible_token_io::*; -use primitive_types::{H256, U256}; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[derive(Debug, Default, NFTStateKeeper, NFTCore, NFTMetaState)] -pub struct Contract { - #[NFTStateField] - pub token: NFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: HashMap, - pub collection: Collection, - pub config: Config, -} - -static mut CONTRACT: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let config: InitNFT = msg::load().expect("Unable to decode InitNFT"); - if config.royalties.is_some() { - config.royalties.as_ref().expect("Unable to g").validate(); - } - let nft = Contract { - token: NFTState { - name: config.collection.name.clone(), - royalties: config.royalties, - ..Default::default() - }, - collection: config.collection, - config: config.config, - owner: msg::source(), - ..Default::default() - }; - CONTRACT = Some(nft); -} - -#[no_mangle] -unsafe extern fn handle() { - let action: NFTAction = msg::load().expect("Could not load NFTAction"); - let nft = CONTRACT.get_or_insert(Default::default()); - match action { - NFTAction::Mint { - transaction_id, - token_metadata, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(MyNFTCore::mint(nft, token_metadata)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Burn { - transaction_id, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::burn(nft, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Transfer { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::transfer(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::TransferPayout { - transaction_id, - to, - token_id, - amount, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::TransferPayout(NFTCore::transfer_payout(nft, &to, token_id, amount)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::TransferPayout`"); - } - NFTAction::NFTPayout { owner, amount } => { - msg::reply( - NFTEvent::NFTPayout(NFTCore::nft_payout(nft, &owner, amount)), - 0, - ) - .expect("Error during replying with `NFTEvent::NFTPayout`"); - } - NFTAction::Approve { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::approve(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Owner { token_id } => { - msg::reply( - NFTEvent::Owner { - owner: NFTCore::owner_of(nft, token_id), - token_id, - }, - 0, - ) - .expect("Error during replying with `NFTEvent::Owner`"); - } - NFTAction::IsApproved { to, token_id } => { - msg::reply( - NFTEvent::IsApproved { - to, - token_id, - approved: NFTCore::is_approved_to(nft, &to, token_id), - }, - 0, - ) - .expect("Error during replying with `NFTEvent::IsApproved`"); - } - NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::delegated_approve(nft, message, signature)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Clear { transaction_hash } => nft.clear(transaction_hash), - NFTAction::AddMinter { - transaction_id, - minter_id, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - nft.config.authorized_minters.push(minter_id); - NFTEvent::MinterAdded { minter_id } - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - }; -} - -pub trait MyNFTCore: NFTCore { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer; -} - -impl MyNFTCore for Contract { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer { - let transfer = NFTCore::mint(self, &msg::source(), self.token_id, Some(token_metadata)); - self.token_id = self.token_id.saturating_add(U256::one()); - transfer - } -} - -impl Contract { - fn process_transaction( - &mut self, - transaction_id: u64, - action: impl FnOnce(&mut Contract) -> NFTEvent, - ) -> NFTEvent { - let transaction_hash = get_hash(&msg::source(), transaction_id); - - if let Some(nft_event) = self.transactions.get(&transaction_hash) { - nft_event.clone() - } else { - let nft_event = action(self); - - self.transactions - .insert(transaction_hash, nft_event.clone()); - - nft_event - } - } - - fn clear(&mut self, transaction_hash: H256) { - assert_eq!( - msg::source(), - exec::program_id(), - "Not allowed to clear transactions" - ); - self.transactions.remove(&transaction_hash); - } - - fn check_config(&self) { - if let Some(max_mint_count) = self.config.max_mint_count { - if max_mint_count <= self.token.token_metadata_by_id.len() as u32 { - panic!( - "Mint impossible because max minting count {} limit exceeded", - max_mint_count - ); - } - } - - let current_minter = msg::source(); - let is_authorized_minter = self - .config - .authorized_minters - .iter() - .any(|authorized_minter| authorized_minter.eq(¤t_minter)); - - if !is_authorized_minter { - panic!( - "Current minter {:?} is not authorized at initialization", - current_minter - ); - } - } -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `IoNft` from `state()`"); -} - -pub fn get_hash(account: &ActorId, transaction_id: u64) -> H256 { - let account: [u8; 32] = (*account).into(); - let transaction_id = transaction_id.to_be_bytes(); - sp_core_hashing::blake2_256(&[account.as_slice(), transaction_id.as_slice()].concat()).into() -} - -impl From for IoNft { - fn from(value: Contract) -> Self { - let Contract { - token, - token_id, - owner, - transactions, - collection, - config, - } = value; - - let transactions = transactions - .iter() - .map(|(key, event)| (*key, event.clone())) - .collect(); - Self { - token: (&token).into(), - token_id, - owner, - transactions, - collection, - config, - } - } -} - -impl From for State { - fn from(value: Contract) -> Self { - let Contract { - token, - token_id, - owner, - transactions, - collection, - config, - } = value; - - let owners = token - .owner_by_id - .iter() - .map(|(hash, actor_id)| (*actor_id, *hash)) - .collect(); - - let transactions = transactions - .iter() - .map(|(hash, event)| (*hash, event.clone())) - .collect(); - - let token_metadata_by_id = token - .token_metadata_by_id - .iter() - .map(|(id, metadata)| { - let metadata = metadata.as_ref().unwrap(); - let nft = Nft { - owner: token.owner_by_id[id], - name: metadata.name.clone(), - description: metadata.description.clone(), - media_url: metadata.media.clone(), - attrib_url: metadata.reference.clone(), - }; - (*id, nft) - }) - .collect(); - - Self { - tokens: token_metadata_by_id, - collection, - nonce: token_id, - owners, - owner, - transactions, - config, - } - } -} diff --git a/contracts/non-fungible-token/state/Cargo.toml b/contracts/non-fungible-token/state/Cargo.toml deleted file mode 100644 index 70d082a87..000000000 --- a/contracts/non-fungible-token/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "non-fungible-token-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -non-fungible-token-io.workspace = true -gear-lib-old.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/non-fungible-token/state/build.rs b/contracts/non-fungible-token/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/non-fungible-token/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/non-fungible-token/state/src/lib.rs b/contracts/non-fungible-token/state/src/lib.rs deleted file mode 100644 index 600cbaf06..000000000 --- a/contracts/non-fungible-token/state/src/lib.rs +++ /dev/null @@ -1,128 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - state::NFTQueryReply, - token::{Token, TokenId}, -}; -use gstd::{ActorId, Vec}; -use non_fungible_token_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoNft; - - pub fn info(state: State) -> NFTQueryReply { - NFTQueryReply::NFTInfo { - name: state.token.name.clone(), - symbol: state.token.symbol.clone(), - base_uri: state.token.base_uri, - } - } - - pub fn token(state: State, token_id: TokenId) -> Token { - token_helper(&token_id, &state) - } - - pub fn tokens_for_owner(state: State, owner: ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - if let Some((_owner, token_ids)) = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)) - { - for token_id in token_ids { - tokens.push(token_helper(token_id, &state)); - } - } - tokens - } - pub fn total_supply(state: State) -> u128 { - state.token.owner_by_id.len() as u128 - } - - pub fn supply_for_owner(state: State, owner: ActorId) -> u128 { - let tokens = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)); - - tokens - .map(|(_id, tokens)| tokens.len() as u128) - .unwrap_or(0) - } - - pub fn all_tokens(state: State) -> Vec { - state - .token - .owner_by_id - .iter() - .map(|(id, _owner)| token_helper(id, &state)) - .collect() - } - - pub fn token_by_id(state: State, id: TokenId) -> Option { - state - .token - .owner_by_id - .iter() - .find(|(i, _)| id.eq(i)) - .map(|(token_id, _)| token_helper(token_id, &state)) - } - - pub fn approved_tokens(state: State, account: ActorId) -> Vec { - state - .token - .owner_by_id - .iter() - .filter_map(|(id, _owner)| { - state - .token - .token_approvals - .iter() - .find(|(token_id, _approvals)| token_id.eq(id)) - .and_then(|(_token_id, approvals)| { - if approvals.contains(&account) { - Some(token_helper(id, &state)) - } else { - None - } - }) - }) - .collect() - } -} - -fn token_helper(token_id: &TokenId, state: &IoNft) -> Token { - let mut token = Token::default(); - if let Some((_token_id, owner_id)) = state - .token - .owner_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.id = *token_id; - token.owner_id = *owner_id; - } - if let Some((_token_id, approved_account_ids)) = state - .token - .token_approvals - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some((_token_id, Some(metadata))) = state - .token - .token_metadata_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token -} diff --git a/contracts/non-fungible-token/tests/nft_tests.rs b/contracts/non-fungible-token/tests/nft_tests.rs deleted file mode 100644 index ce13559ed..000000000 --- a/contracts/non-fungible-token/tests/nft_tests.rs +++ /dev/null @@ -1,487 +0,0 @@ -use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; -use gear_lib_old::non_fungible_token::io::*; -use gstd::{ActorId, Encode}; -use gtest::System; -mod utils; -use hex_literal::hex; -use non_fungible_token_io::*; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -use utils::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - let message = NFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn mint_limit_exceed() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(1), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[0]); - assert!(!res.main_failed()) -} - -#[test] -fn mint_not_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_added() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = add_minter(&nft, transaction_id, USERS[1].into(), USERS[0]); - assert!(!res.main_failed()); - let res = add_minter(&nft, transaction_id + 1, USERS[2].into(), USERS[1]); - assert!(!res.main_failed()); - - let res = add_minter(&nft, transaction_id + 1, 5.into(), 7); - assert!(res.main_failed()) -} - -#[test] -fn burn_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = burn(&nft, transaction_id, USERS[0], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: ZERO_ID.into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - // must fail since the token doesn't exist - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[0], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[1], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = transfer(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - - // must fail since the token doesn't exist - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - // must fail since transfer to the zero address - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn owner_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = owner_of(&nft, USERS[1], 0); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::Owner { - token_id: 0.into(), - owner: ActorId::from(USERS[0]), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[1]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[1].into(), - token_id: 0.into(), - approved: true, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[0]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[0].into(), - token_id: 0.into(), - approved: false, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = is_approved_to(&nft, USERS[1], 1, USERS[1]); - println!("{:?}", res.decoded_log::()); - assert!(res.main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = approve(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Approval(NFTApproval { - owner: USERS[0].into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - // must fail since the token doesn't exist - assert!(approve(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - transaction_id += 1; - // must fail since the caller is not the token owner - assert!(approve(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - transaction_id += 1; - // must fail since approval to the zero address - assert!(approve(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - //transfer - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); - //must fail since approval was removed after transferring - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); -} - -#[test] -fn delegated_approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - assert!(!mint_to_actor(&nft, transaction_id + 1, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10 + 3000, - }; - let signature = pair.sign(message.encode().as_slice()); - - transaction_id += 1; - let res = delegated_approve(&nft, transaction_id, USERS[1], message, signature.0); - let message = NFTEvent::Approval(NFTApproval { - owner: owner_id.into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[1], message))); - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn delegated_approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - transaction_id += 1; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - // Not owner can't approve nft - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 1.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); - - // Only approved actor in delegated approve can send delegated approve action - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!(delegated_approve(&nft, transaction_id, USERS[0], message, signature.0).main_failed()); - // Must fail if user tries to approve token in wrong contract - init_nft(&sys); - let second_nft = sys.get_program(2).unwrap(); - transaction_id += 1; - assert!(!add_minter(&second_nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&second_nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!( - delegated_approve(&second_nft, transaction_id, USERS[1], message, signature.0) - .main_failed() - ); - - // Must fail if user tries to approve token to zero_id - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: 0.into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, 0, message, signature.0).main_failed()); - - // Signature not corresponds to the message content - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - let wrong_message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 2.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - assert!( - delegated_approve(&nft, transaction_id, USERS[1], wrong_message, signature.0).main_failed() - ); - - // Approve expired - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - sys.spend_blocks(1); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); -} diff --git a/contracts/non-fungible-token/tests/node_tests.rs b/contracts/non-fungible-token/tests/node_tests.rs deleted file mode 100644 index 36b8a2a74..000000000 --- a/contracts/non-fungible-token/tests/node_tests.rs +++ /dev/null @@ -1,462 +0,0 @@ -use gclient::{EventProcessor, GearApi, Result}; -use gstd::{ActorId, Encode}; -use non_fungible_token::WASM_BINARY_OPT; -use non_fungible_token_io::*; - -#[tokio::test] -async fn gclient_mint_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_burn_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - // failures - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 666.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_transfer_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let transfer_payload = NFTAction::Transfer { - transaction_id, - to: ActorId::from(4u64), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, transfer_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, transfer_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_owner_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let owner_payload = NFTAction::Owner { token_id: 0.into() }; - - let gas_info = api - .calculate_handle_gas(None, program_id, owner_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, owner_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_approved() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - let approve_payload = NFTAction::Approve { - transaction_id, - to: ActorId::from(3), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, approve_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, approve_payload, gas_info.burned * 2, 0) - .await?; - - let processed = listener.message_processed(message_id).await?; - assert!(processed.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} diff --git a/contracts/non-fungible-token/tests/utils.rs b/contracts/non-fungible-token/tests/utils.rs deleted file mode 100644 index 871f08373..000000000 --- a/contracts/non-fungible-token/tests/utils.rs +++ /dev/null @@ -1,152 +0,0 @@ -use gear_lib_old::non_fungible_token::token::*; -use gstd::ActorId; -use gtest::{Program, RunResult, System}; -use non_fungible_token_io::*; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, transaction_id: u64, member: u64) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn add_minter( - nft: &Program<'_>, - transaction_id: u64, - minter_id: ActorId, - member: u64, -) -> RunResult { - nft.send( - member, - NFTAction::AddMinter { - transaction_id, - minter_id, - }, - ) -} - -pub fn burn(nft: &Program<'_>, transaction_id: u64, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - NFTAction::Burn { - transaction_id, - token_id: token_id.into(), - }, - ) -} - -pub fn transfer( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Transfer { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn owner_of(nft: &Program<'_>, from: u64, token_id: u64) -> RunResult { - nft.send( - from, - NFTAction::Owner { - token_id: token_id.into(), - }, - ) -} - -pub fn is_approved_to(nft: &Program<'_>, from: u64, token_id: u64, to: u64) -> RunResult { - nft.send( - from, - NFTAction::IsApproved { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Approve { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn delegated_approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], -) -> RunResult { - let action = NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - }; - nft.send(from, action) -} - -pub fn mint_to_actor(nft: &Program<'_>, transaction_id: u64, member: [u8; 32]) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} diff --git a/contracts/on-chain-nft/Cargo.toml b/contracts/on-chain-nft/Cargo.toml deleted file mode 100644 index 0f937f966..000000000 --- a/contracts/on-chain-nft/Cargo.toml +++ /dev/null @@ -1,27 +0,0 @@ -[package] -name = "on-chain-nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -gear-lib-old.workspace = true -gear-lib-derive.workspace = true -on-chain-nft-io.workspace = true -gmeta.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true - -# External binaries - -on-chain-nft-state.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -on-chain-nft-io.workspace = true diff --git a/contracts/on-chain-nft/README.md b/contracts/on-chain-nft/README.md deleted file mode 100644 index 41e11b9d8..000000000 --- a/contracts/on-chain-nft/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=on-chain-nft/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/on_chain_nft_io) - -# [On-chain NFT](https://wiki.gear-tech.io/docs/examples/NFTs/onchain-nft) - -### 🏗️ Building - -```sh -cargo b -r -p "on-chain-nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "on-chain-nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "on-chain-nft*" -``` diff --git a/contracts/on-chain-nft/build.rs b/contracts/on-chain-nft/build.rs deleted file mode 100644 index 0f3448dc1..000000000 --- a/contracts/on-chain-nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use on_chain_nft_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/on-chain-nft/io/Cargo.toml b/contracts/on-chain-nft/io/Cargo.toml deleted file mode 100644 index 9a52ece84..000000000 --- a/contracts/on-chain-nft/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "on-chain-nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -gear-lib-old.workspace = true diff --git a/contracts/on-chain-nft/io/src/lib.rs b/contracts/on-chain-nft/io/src/lib.rs deleted file mode 100644 index 996085c17..000000000 --- a/contracts/on-chain-nft/io/src/lib.rs +++ /dev/null @@ -1,315 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - io::{NFTApproval, NFTTransfer, NFTTransferPayout}, - royalties::*, - state::*, - token::*, -}; -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub type LayerId = u128; -pub type ItemId = u128; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum OnChainNFTQuery { - /// Returns an NFT for a specified `token_id`. - /// - /// Requirements: - /// * `token_id` MUST exist - /// - /// Arguments: - /// * `token_id` - is the id of the NFT - /// - /// On success, returns TokenURI struct. - TokenURI { token_id: TokenId }, - /// Base NFT query. Derived from gear-lib. - Base(NFTQuery), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum OnChainNFTAction { - /// Mints an NFT consisting of layers provided in the `description` parameter. - /// - /// Requirements: - /// * `description` MUST contain layers and layers' items that EXIST - /// - /// Arguments: - /// * `token_metadata` - is a default token metadata from gear-lib. - /// * `description` - is the vector of layer's item id, where - /// the index i is the layer id. - /// - /// On success, returns NFTEvent::Mint from gear-lib. - Mint { - /// Metadata - token_metadata: TokenMetadata, - /// Layers description of an NFT - description: Vec, - }, - /// Burns an NFT. - /// - /// Requirements: - /// * `token_id` MUST exist - /// Arguments: - /// - /// * `token_id` - is the id of the burnt token - /// - /// On success, returns NFTEvent::Burn from gear-lib. - Burn { - /// Token id to burn. - token_id: TokenId, - }, - /// Transfers an NFT. - /// - /// Requirements: - /// * `token_id` MUST exist - /// * `to` MUST be a non-zero addresss - /// - /// Arguments: - /// * `token_id` - is the id of the transferred token - /// - /// On success, returns NFTEvent::Transfer from gear-lib. - Transfer { - /// A recipient address. - to: ActorId, - /// Token id to transfer. - token_id: TokenId, - }, - /// Approves an account to perform operation upon the specifiefd NFT. - /// - /// Requirements: - /// * `token_id` MUST exist - /// * `to` MUST be a non-zero addresss - /// - /// Arguments: - /// * `token_id` - is the id of the transferred token - /// - /// On success, returns NFTEvent::Approval from gear-lib. - Approve { - /// An account being approved. - to: ActorId, - /// Token id approved for the account. - token_id: TokenId, - }, - /// Transfers payouts from an NFT to an account. - /// - /// Requirements: - /// * `token_id` MUST exist - /// * `to` MUST be a non-zero addresss - /// * `amount` MUST be a non-zero number - /// - /// Arguments: - /// * `token_id` - is the id of the transferred token - /// - /// On success, returns NFTEvent::Approval from gear-lib. - TransferPayout { - /// Payout recipient - to: ActorId, - /// Token id to get the payout from. - token_id: TokenId, - /// Payout amount. - amount: u128, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct TokenURI { - /// Token metadata derived from gear-lib - pub metadata: TokenMetadata, - /// List of base64encoded svgs representing different layers of an NFT. - pub content: Vec, -} - -/// Initializes on-chain NFT -/// Requirements: -/// * all fields except `royalties` should be specified -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitOnChainNFT { - /// NFT name - pub name: String, - /// NFT symbol - pub symbol: String, - /// NFT base_uri (not applicable in on-chain) - pub base_uri: String, - /// Base Image is base64encoded svg. - /// Provides a base layer for all future nfts. - pub base_image: String, - /// Layers map - mapping of layerid the list of layer items. - /// Each layer item is a base64encoded svg. - pub layers: Vec<(LayerId, Vec)>, - /// Royalties for NFT - pub royalties: Option, -} - -#[derive(Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum OnChainNFTEvent { - Transfer(NFTTransfer), - TransferPayout(NFTTransferPayout), - Approval(NFTApproval), -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, Vec)>, - pub token_metadata_by_id: Vec<(TokenId, Option)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub royalties: Option, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub token: IoNFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub base_image: String, - pub layers: Vec<(LayerId, Vec)>, - pub nfts: Vec<(TokenId, Vec)>, - pub nfts_existence: Vec, -} - -impl From<&NFTState> for IoNFTState { - fn from(value: &NFTState) -> Self { - let NFTState { - name, - symbol, - base_uri, - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties, - } = value; - - let owner_by_id = owner_by_id - .iter() - .map(|(hash, actor_id)| (*hash, *actor_id)) - .collect(); - - let token_approvals = token_approvals - .iter() - .map(|(key, approvals)| (*key, approvals.iter().copied().collect())) - .collect(); - - let token_metadata_by_id = token_metadata_by_id - .iter() - .map(|(id, metadata)| (*id, metadata.clone())) - .collect(); - - let tokens_for_owner = tokens_for_owner - .iter() - .map(|(id, tokens)| (*id, tokens.clone())) - .collect(); - - Self { - name: name.clone(), - symbol: symbol.clone(), - base_uri: base_uri.clone(), - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties: royalties.clone(), - } - } -} - -impl IoNFTState { - pub fn token(&self, token_id: TokenId) -> Token { - let mut token = Token::default(); - if let Some((_, owner_id)) = self.owner_by_id.iter().find(|(id, _)| token_id.eq(id)) { - token.id = token_id; - token.owner_id = *owner_id; - } - if let Some((_, approved_account_ids)) = - self.token_approvals.iter().find(|(id, _)| token_id.eq(id)) - { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some((_, Some(metadata))) = self - .token_metadata_by_id - .iter() - .find(|(id, _)| token_id.eq(id)) - { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token - } - - pub fn tokens_for_owner(&self, owner: &ActorId) -> Vec { - let mut tokens = vec![]; - - if let Some((_owner, token_ids)) = self.tokens_for_owner.iter().find(|(id, _)| owner.eq(id)) - { - for token_id in token_ids { - tokens.push(self.token(*token_id)) - } - } - tokens - } - - pub fn total_supply(&self) -> u128 { - self.owner_by_id.len() as u128 - } - - pub fn supply_for_owner(&self, owner: &ActorId) -> u128 { - if let Some((_owner, tokens)) = self.tokens_for_owner.iter().find(|(id, _)| owner.eq(id)) { - tokens.len() as u128 - } else { - 0 - } - } - - pub fn all_tokens(&self) -> Vec { - self.owner_by_id - .iter() - .map(|(token_id, _toks)| self.token(*token_id)) - .collect() - } - - pub fn approved_tokens(&self, account: &ActorId) -> Vec { - self.owner_by_id - .iter() - .filter_map(|(id, _)| { - self.token_approvals - .iter() - .find(|(token_id, _)| id.eq(token_id)) - .and_then(|(id, approvals)| { - approvals.contains(account).then_some(self.token(*id)) - }) - }) - .collect() - } -} diff --git a/contracts/on-chain-nft/src/lib.rs b/contracts/on-chain-nft/src/lib.rs deleted file mode 100644 index a4e80e3e3..000000000 --- a/contracts/on-chain-nft/src/lib.rs +++ /dev/null @@ -1,209 +0,0 @@ -#![no_std] - -use gear_lib_derive::{NFTCore, NFTMetaState, NFTStateKeeper}; -use gear_lib_old::non_fungible_token::{io::NFTTransfer, nft_core::*, state::*, token::*}; -use gstd::{ - collections::{HashMap, HashSet}, - msg, - prelude::*, - ActorId, -}; -use on_chain_nft_io::*; -use primitive_types::U256; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[derive(Debug, Default, NFTStateKeeper, NFTCore, NFTMetaState)] -pub struct OnChainNFT { - #[NFTStateField] - pub token: NFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub base_image: String, - pub layers: HashMap>, - pub nfts: HashMap>, - pub nfts_existence: HashSet, -} - -static mut CONTRACT: Option = None; - -#[no_mangle] -extern fn init() { - let config: InitOnChainNFT = msg::load().expect("Unable to decode InitOnChainNFT"); - let nft = OnChainNFT { - token: NFTState { - name: config.name, - symbol: config.symbol, - base_uri: config.base_uri, - ..Default::default() - }, - owner: msg::source(), - base_image: config.base_image, - layers: HashMap::from_iter(config.layers), - ..Default::default() - }; - unsafe { CONTRACT = Some(nft) }; -} - -#[no_mangle] -extern fn handle() { - let action: OnChainNFTAction = msg::load().expect("Could not load OnChainNFTAction"); - let nft = unsafe { CONTRACT.get_or_insert(Default::default()) }; - match action { - OnChainNFTAction::Mint { - description, - token_metadata, - } => msg::reply( - OnChainNFTEvent::Transfer(OnChainNFTCore::mint(nft, description, token_metadata)), - 0, - ), - OnChainNFTAction::Burn { token_id } => msg::reply( - OnChainNFTEvent::Transfer(OnChainNFTCore::burn(nft, token_id)), - 0, - ), - OnChainNFTAction::Transfer { to, token_id } => msg::reply( - OnChainNFTEvent::Transfer(NFTCore::transfer(nft, &to, token_id)), - 0, - ), - OnChainNFTAction::TransferPayout { - to, - token_id, - amount, - } => msg::reply( - OnChainNFTEvent::TransferPayout(NFTCore::transfer_payout(nft, &to, token_id, amount)), - 0, - ), - OnChainNFTAction::Approve { to, token_id } => msg::reply( - OnChainNFTEvent::Approval(NFTCore::approve(nft, &to, token_id)), - 0, - ), - } - .expect("Error during replying with `OnChainNFTEvent`"); -} - -pub trait OnChainNFTCore: NFTCore { - fn mint(&mut self, description: Vec, metadata: TokenMetadata) -> NFTTransfer; - fn burn(&mut self, token_id: TokenId) -> NFTTransfer; - fn token_uri(&mut self, token_id: TokenId) -> Option>; -} - -impl OnChainNFTCore for OnChainNFT { - /// Mint an NFT on chain. - /// `description` - is the vector of ids , - /// where each index represents a layer id, and element represents a layer item id. - /// `metadata` - is the default metadata provided by gear-lib. - fn mint(&mut self, description: Vec, metadata: TokenMetadata) -> NFTTransfer { - // precheck if the layers actually exist - for (layer_id, layer_item_id) in description.iter().enumerate() { - if layer_id > self.layers.len() { - panic!("No such layer"); - } - if *layer_item_id - > self - .layers - .get(&(layer_id as u128)) - .expect("No such layer") - .len() as u128 - { - panic!("No such item"); - } - } - - // also check if description has all layers provided - if description.len() != self.layers.len() { - panic!("The number of layers must be equal to the number of layers in the contract"); - } - - // precheck if there is already an nft with such description - let key = description - .clone() - .into_iter() - .map(|i| i.to_string()) - .collect::(); - if self.nfts_existence.contains(&key) { - panic!("Such nft already exists"); - } - self.nfts_existence.insert(key); - let transfer = NFTCore::mint(self, &msg::source(), self.token_id, Some(metadata)); - self.nfts.insert(self.token_id, description); - self.token_id = self.token_id.saturating_add(U256::one()); - transfer - } - - /// Burns an NFT. - /// `token_id` - is the id of a token. MUST exist. - fn burn(&mut self, token_id: TokenId) -> NFTTransfer { - let transfer = NFTCore::burn(self, token_id); - let key = self - .nfts - .get(&token_id) - .expect("No such token") - .iter() - .map(|i| i.to_string()) - .collect::(); - self.nfts.remove(&token_id); - self.nfts_existence.remove(&key); - transfer - } - - /// Returns token information - metadata and all the content of all the layers for the NFT. - /// `token_id` - is the id of a token. MUST exist. - fn token_uri(&mut self, token_id: TokenId) -> Option> { - let mut metadata = TokenMetadata::default(); - if let Some(Some(mtd)) = self.token.token_metadata_by_id.get(&token_id) { - metadata = mtd.clone(); - } - // construct media - let mut content: Vec = Vec::new(); - // check if exists - let nft = self.nfts.get(&token_id).expect("No such nft"); - for (layer_id, layer_item_id) in nft.iter().enumerate() { - let layer_content = self - .layers - .get(&(layer_id as u128)) - .expect("No such layer") - .get(*layer_item_id as usize) - .expect("No such layer item"); - content.push(layer_content.clone()); - } - Some(TokenURI { metadata, content }.encode()) - } -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `State` from `state()`"); -} - -impl From for State { - fn from(value: OnChainNFT) -> Self { - let OnChainNFT { - token, - token_id, - owner, - base_image, - layers, - nfts, - nfts_existence, - } = value; - - let layers = layers.iter().map(|(id, s)| (*id, s.clone())).collect(); - let nfts = nfts - .iter() - .map(|(token_id, item_id)| (*token_id, item_id.clone())) - .collect(); - let nfts_existence = nfts_existence.iter().cloned().collect(); - - Self { - token: (&token).into(), - token_id, - owner, - base_image, - layers, - nfts, - nfts_existence, - } - } -} diff --git a/contracts/on-chain-nft/state/Cargo.toml b/contracts/on-chain-nft/state/Cargo.toml deleted file mode 100644 index e69b8e054..000000000 --- a/contracts/on-chain-nft/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "on-chain-nft-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -on-chain-nft-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/on-chain-nft/state/build.rs b/contracts/on-chain-nft/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/on-chain-nft/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/on-chain-nft/state/src/lib.rs b/contracts/on-chain-nft/state/src/lib.rs deleted file mode 100644 index c53f17c27..000000000 --- a/contracts/on-chain-nft/state/src/lib.rs +++ /dev/null @@ -1,71 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::state::{NFTQuery, NFTQueryReply}; -use gear_lib_old::non_fungible_token::token::TokenId; -use gstd::prelude::*; -use on_chain_nft_io::*; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[gmeta::metawasm] -pub mod metafns { - pub type State = on_chain_nft_io::State; - - pub fn token_uri(state: State, token_id: TokenId) -> Option> { - let metadata = state - .token - .token_metadata_by_id - .iter() - .find(|(id, _)| token_id.eq(id)) - .and_then(|(_id, metadata)| metadata.clone()) - .unwrap_or_default(); - // construct media - let mut content: Vec = Vec::new(); - // check if exists - - if let Some((_id, nft)) = state.nfts.iter().find(|(id, _)| token_id.eq(id)) { - for (i, layer_item_id) in nft.iter().enumerate() { - if let Some((_id, layer_content)) = - state.layers.iter().find(|(id, _)| (i as u128).eq(id)) - { - let s = layer_content - .get(*layer_item_id as usize) - .expect("No such layer item"); - content.push(s.clone()); - } - } - } - - Some(TokenURI { metadata, content }.encode()) - } - - pub fn base(state: State, query: NFTQuery) -> Option> { - let encoded = match query { - NFTQuery::NFTInfo => NFTQueryReply::NFTInfo { - name: state.token.name.clone(), - symbol: state.token.symbol.clone(), - base_uri: state.token.base_uri, - }, - NFTQuery::Token { token_id } => NFTQueryReply::Token { - token: state.token.token(token_id), - }, - NFTQuery::TokensForOwner { owner } => NFTQueryReply::TokensForOwner { - tokens: state.token.tokens_for_owner(&owner), - }, - NFTQuery::TotalSupply => NFTQueryReply::TotalSupply { - total_supply: state.token.total_supply(), - }, - NFTQuery::SupplyForOwner { owner } => NFTQueryReply::SupplyForOwner { - supply: state.token.supply_for_owner(&owner), - }, - NFTQuery::AllTokens => NFTQueryReply::AllTokens { - tokens: state.token.all_tokens(), - }, - NFTQuery::ApprovedTokens { account } => NFTQueryReply::ApprovedTokens { - tokens: state.token.approved_tokens(&account), - }, - } - .encode(); - Some(encoded) - } -} diff --git a/contracts/on-chain-nft/tests/node_tests.rs b/contracts/on-chain-nft/tests/node_tests.rs deleted file mode 100644 index 6cf477f0d..000000000 --- a/contracts/on-chain-nft/tests/node_tests.rs +++ /dev/null @@ -1,83 +0,0 @@ -use gclient::{EventProcessor, GearApi, Result}; -use gstd::{ActorId, Encode}; -use on_chain_nft::WASM_BINARY_OPT; -use on_chain_nft_io::*; - -pub const TOKEN_ADDRESS: u64 = 1; -pub const ICO_CONTRACT_ID: u64 = 2; -pub const OWNER_ID: u64 = 100001; -pub const USER_ID: u64 = 12345; - -pub const ZERO_ID: ActorId = ActorId::zero(); - -pub const TOKENS_CNT: u128 = 100; -pub const START_PRICE: u128 = 1000; -pub const PRICE_INCREASE_STEP: u128 = 100; -pub const TIME_INCREASE_STEP: u128 = 1000; - -// const USERS: &[u64] = &[1, 2, 3, 4, 5, 6, 7, 8]; - -#[tokio::test] -async fn gclient_init() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let mut layers = vec![]; - let first_layer = vec![ - String::from( - "PHN2ZyBoZWlnaHQ9JzIxMCcgd2lkdGg9JzUwMCc+PHBvbHlnb24gcG9pbnRzPScxMDAsMTAgNDAsMTk4IDE5MCw3OCAxMCw3OCAxNjAsMTk4JyBzdHlsZT0nZmlsbDpsaW1lO3N0cm9rZTpwdXJwbGU7c3Ryb2tlLXdpZHRoOjU7ZmlsbC1ydWxlOm5vbnplcm87Jy8+PC9zdmc+", - ), - String::from( - "PHN2ZyBoZWlnaHQ9JzIxMCcgd2lkdGg9JzUwMCc+PHBvbHlnb24gcG9pbnRzPScxMDAsMTAgNDAsMTk4IDE5MCw3OCAxMCw3OCAxNjAsMTk4JyBzdHlsZT0nZmlsbDpibHVlO3N0cm9rZTpyZWQ7c3Ryb2tlLXdpZHRoOjU7ZmlsbC1ydWxlOm5vbnplcm87Jy8+PC9zdmc+", - ) - ]; - let second_layer = vec![ - String::from( - "PHN2ZyBoZWlnaHQ9JzMwJyB3aWR0aD0nMjAwJz48dGV4dCB4PScwJyB5PScxNScgZmlsbD0ncmVkJz5PbiBDaGFpbiBORlQ8L3RleHQ+PC9zdmc+" - ), - String::from( - "PHN2ZyBoZWlnaHQ9JzMwJyB3aWR0aD0nMjAwJz48dGV4dCB4PScwJyB5PScxNScgZmlsbD0nZ3JlZW4nPk9uIENoYWluIE5GVDwvdGV4dD48L3N2Zz4=" - ) - ]; - layers.push((0, first_layer)); - layers.push((1, second_layer)); - - let init = InitOnChainNFT { - name: String::from("OnChainToken"), - symbol: String::from("OCT"), - base_uri: String::from(""), - royalties: None, - base_image: String::from(""), - layers, - }; - - let init_payload = init.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - WASM_BINARY_OPT.to_vec(), - init_payload.clone(), - 0, - true, - ) - .await?; - - let (message_id, _program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_payload, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - Ok(()) -} diff --git a/contracts/on-chain-nft/tests/on_chain_tests.rs b/contracts/on-chain-nft/tests/on_chain_tests.rs deleted file mode 100644 index 8eab4c8ef..000000000 --- a/contracts/on-chain-nft/tests/on_chain_tests.rs +++ /dev/null @@ -1,177 +0,0 @@ -mod utils; - -use gear_lib_old::non_fungible_token::io::*; -use gear_lib_old::non_fungible_token::token::*; -use gstd::prelude::*; -use gtest::System; -use on_chain_nft_io::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let res = utils::mint(&nft, USERS[0], vec![0, 1]); - let message = OnChainNFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - // Check that we minted a token properly - utils::check_token_from_state(&nft, USERS[0], 0); -} - -#[test] -fn mint_failures() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(utils::mint(&nft, USERS[0], vec![3, 3]).main_failed()); - - // mint token - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // mint it again - assert!(utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); -} - -#[test] -fn burn_success() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // Check that we minted a token properly - utils::check_token_from_state(&nft, USERS[0], 0); - - let res = utils::burn(&nft, USERS[0], 0); - let message = OnChainNFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: ZERO_ID.into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - // We should check against owner_id = 0 since the token is burned - utils::check_token_from_state(&nft, 0, 0); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // must fail since the token doesn't exist - assert!(utils::burn(&nft, USERS[0], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(utils::burn(&nft, USERS[1], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // Check that we minted a token properly - utils::check_token_from_state(&nft, USERS[0], 0); - - let res = utils::transfer(&nft, USERS[0], USERS[1], 0); - let message = OnChainNFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - - // Check the token now belongs to another user - utils::check_token_from_state(&nft, USERS[1], 0); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - - // must fail since the token doesn't exist - assert!(utils::transfer(&nft, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(utils::transfer(&nft, USERS[1], USERS[0], 0).main_failed()); - // must fail since transfer to the zero address - assert!(utils::transfer(&nft, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // Check that we minted a token properly - utils::check_token_from_state(&nft, USERS[0], 0); - - let res = utils::approve(&nft, USERS[0], USERS[1], 0); - let message = OnChainNFTEvent::Approval(NFTApproval { - owner: USERS[0].into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - assert!(!utils::transfer(&nft, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - assert!(!utils::mint(&nft, USERS[0], vec![0, 1]).main_failed()); - // must fail since the token doesn't exist - assert!(utils::approve(&nft, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - assert!(utils::approve(&nft, USERS[1], USERS[0], 0).main_failed()); - // must fail since approval to the zero address - assert!(utils::approve(&nft, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - assert!(!utils::approve(&nft, USERS[0], USERS[1], 0).main_failed()); - //transfer - assert!(!utils::transfer(&nft, USERS[1], USERS[2], 0).main_failed()); - //must fail since approval was removed after transferring - assert!(utils::transfer(&nft, USERS[1], USERS[0], 0).main_failed()); -} - -#[test] -fn test_token_uri_state() { - let sys = System::new(); - utils::init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let res = utils::mint(&nft, USERS[0], vec![0, 1]); - let message = OnChainNFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - // Check that we minted a token properly - utils::check_token_from_state(&nft, USERS[0], 0); - - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - let content = vec![String::from("PHN2ZyBoZWlnaHQ9JzIxMCcgd2lkdGg9JzUwMCc+PHBvbHlnb24gcG9pbnRzPScxMDAsMTAgNDAsMTk4IDE5MCw3OCAxMCw3OCAxNjAsMTk4JyBzdHlsZT0nZmlsbDpsaW1lO3N0cm9rZTpwdXJwbGU7c3Ryb2tlLXdpZHRoOjU7ZmlsbC1ydWxlOm5vbnplcm87Jy8+PC9zdmc+"), String::from("PHN2ZyBoZWlnaHQ9JzMwJyB3aWR0aD0nMjAwJz48dGV4dCB4PScwJyB5PScxNScgZmlsbD0nZ3JlZW4nPk9uIENoYWluIE5GVDwvdGV4dD48L3N2Zz4=")]; - utils::check_token_uri(&nft, 0, token_metadata, content); -} diff --git a/contracts/on-chain-nft/tests/utils.rs b/contracts/on-chain-nft/tests/utils.rs deleted file mode 100644 index e42d9200e..000000000 --- a/contracts/on-chain-nft/tests/utils.rs +++ /dev/null @@ -1,163 +0,0 @@ -use gear_lib_old::non_fungible_token::{state::*, token::*}; -use gstd::{prelude::*, ActorId}; -use gtest::{Program, RunResult, System}; -use on_chain_nft_io::*; -use on_chain_nft_state::WASM_BINARY; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let mut layers = vec![]; - let first_layer = vec![ - String::from( - "PHN2ZyBoZWlnaHQ9JzIxMCcgd2lkdGg9JzUwMCc+PHBvbHlnb24gcG9pbnRzPScxMDAsMTAgNDAsMTk4IDE5MCw3OCAxMCw3OCAxNjAsMTk4JyBzdHlsZT0nZmlsbDpsaW1lO3N0cm9rZTpwdXJwbGU7c3Ryb2tlLXdpZHRoOjU7ZmlsbC1ydWxlOm5vbnplcm87Jy8+PC9zdmc+", - ), - String::from( - "PHN2ZyBoZWlnaHQ9JzIxMCcgd2lkdGg9JzUwMCc+PHBvbHlnb24gcG9pbnRzPScxMDAsMTAgNDAsMTk4IDE5MCw3OCAxMCw3OCAxNjAsMTk4JyBzdHlsZT0nZmlsbDpibHVlO3N0cm9rZTpyZWQ7c3Ryb2tlLXdpZHRoOjU7ZmlsbC1ydWxlOm5vbnplcm87Jy8+PC9zdmc+", - ) - ]; - let second_layer = vec![ - String::from( - "PHN2ZyBoZWlnaHQ9JzMwJyB3aWR0aD0nMjAwJz48dGV4dCB4PScwJyB5PScxNScgZmlsbD0ncmVkJz5PbiBDaGFpbiBORlQ8L3RleHQ+PC9zdmc+" - ), - String::from( - "PHN2ZyBoZWlnaHQ9JzMwJyB3aWR0aD0nMjAwJz48dGV4dCB4PScwJyB5PScxNScgZmlsbD0nZ3JlZW4nPk9uIENoYWluIE5GVDwvdGV4dD48L3N2Zz4=" - ) - ]; - layers.push((0, first_layer)); - layers.push((1, second_layer)); - let res = nft.send( - USERS[0], - InitOnChainNFT { - name: String::from("OnChainToken"), - symbol: String::from("OCT"), - base_uri: String::from(""), - royalties: None, - base_image: String::from(""), - layers, - }, - ); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, member: u64, description: Vec) -> RunResult { - nft.send( - member, - OnChainNFTAction::Mint { - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - description, - }, - ) -} - -pub fn burn(nft: &Program<'_>, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - OnChainNFTAction::Burn { - token_id: token_id.into(), - }, - ) -} - -pub fn transfer(nft: &Program<'_>, from: u64, to: u64, token_id: u64) -> RunResult { - nft.send( - from, - OnChainNFTAction::Transfer { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve(nft: &Program<'_>, from: u64, to: u64, token_id: u64) -> RunResult { - nft.send( - from, - OnChainNFTAction::Approve { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn check_token_uri( - nft: &Program<'_>, - token_id: u64, - metadata: TokenMetadata, - content: Vec, -) { - match nft.read_state_using_wasm::>>( - 0, - "token_uri", - WASM_BINARY.into(), - Some(token_id.into()), - ) { - Ok(token_uri) => { - let token_uri = TokenURI::decode(&mut token_uri.unwrap().as_ref()).unwrap(); - - let rec_metadata = token_uri.metadata; - let rec_content = token_uri.content; - - // since they don't have PartialEq do it manually - if metadata.name != rec_metadata.name { - std::panic!("Metadata name is different"); - } - if metadata.description != rec_metadata.description { - std::panic!("Metadata description is different"); - } - if metadata.media != rec_metadata.media { - std::panic!("Metadata media is different"); - } - if metadata.reference != rec_metadata.reference { - std::panic!("Metadata reference is different"); - } - if content != rec_content { - std::panic!("Content is different"); - } - } - _ => unreachable!( - "Unreachable metastate reply for the OnChainNFTQuery::TokenURI payload has occured" - ), - } -} - -pub fn check_token_from_state(nft: &Program<'_>, owner_id: u64, token_id: u64) { - match nft.read_state_using_wasm::>>( - 0, - "base", - WASM_BINARY.into(), - Some(NFTQuery::Token { - token_id: token_id.into(), - }), - ) { - Ok(reply) => { - let NFTQueryReply::Token { token } = - NFTQueryReply::decode(&mut reply.unwrap().as_ref()).unwrap() - else { - std::panic!() - }; - - let true_token_id = token.id; - let true_owner_id = token.owner_id; - - if !(ActorId::from(owner_id) == true_owner_id - && TokenId::from(token_id) == true_token_id) - { - std::panic!( - "There is no such token with token_id ({token_id:?}) for the owner ({owner_id:?})" - ) - } - } - _ => { - unreachable!("Unreachable metastate reply for the NFTQuery::Token payload has occured") - } - } -} diff --git a/contracts/rentable-nft/Cargo.toml b/contracts/rentable-nft/Cargo.toml deleted file mode 100644 index d504305f0..000000000 --- a/contracts/rentable-nft/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "rentable-nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -rentable-nft-io.workspace = true -gear-lib-old.workspace = true -gear-lib-derive.workspace = true -sp-core-hashing.workspace = true -gmeta.workspace = true - -[dev-dependencies] -hex-literal.workspace = true -sp-core.workspace = true -gclient.workspace = true -gtest.workspace = true -tokio.workspace = true - -[build-dependencies] -rentable-nft-io.workspace = true -gear-wasm-builder.workspace = true diff --git a/contracts/rentable-nft/README.md b/contracts/rentable-nft/README.md deleted file mode 100644 index 9c7c60ea1..000000000 --- a/contracts/rentable-nft/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=rentable-nft/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/rentable_nft_io) - -# [Rentable NFT](https://wiki.gear-tech.io/docs/examples/Standards/gnft-4907) - -### 🏗️ Building - -```sh -cargo b -r -p "rentable-nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "rentable-nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "rentable-nft*" -``` diff --git a/contracts/rentable-nft/build.rs b/contracts/rentable-nft/build.rs deleted file mode 100644 index 4247b2828..000000000 --- a/contracts/rentable-nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use rentable_nft_io::NFTMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/rentable-nft/io/Cargo.toml b/contracts/rentable-nft/io/Cargo.toml deleted file mode 100644 index 82143d486..000000000 --- a/contracts/rentable-nft/io/Cargo.toml +++ /dev/null @@ -1,11 +0,0 @@ -[package] -name = "rentable-nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -gmeta.workspace = true diff --git a/contracts/rentable-nft/io/src/lib.rs b/contracts/rentable-nft/io/src/lib.rs deleted file mode 100644 index 5c6b1c6f5..000000000 --- a/contracts/rentable-nft/io/src/lib.rs +++ /dev/null @@ -1,227 +0,0 @@ -#![no_std] - -pub use gear_lib_old::non_fungible_token::delegated::DelegatedApproveMessage; - -use gear_lib_old::non_fungible_token::{ - io::{NFTApproval, NFTTransfer, NFTTransferPayout}, - royalties::*, - state::NFTState, - token::*, -}; -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; -use primitive_types::H256; - -pub struct NFTMetadata; - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Config { - pub max_mint_count: Option, - pub authorized_minters: Vec, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitNFT { - pub collection: Collection, - pub royalties: Option, - pub config: Config, -} - -#[derive(Default, Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Collection { - pub name: String, - pub description: String, -} - -impl Metadata for NFTMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTAction { - Mint { - transaction_id: u64, - token_metadata: TokenMetadata, - }, - Burn { - transaction_id: u64, - token_id: TokenId, - }, - Transfer { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - TransferPayout { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - amount: u128, - }, - NFTPayout { - owner: ActorId, - amount: u128, - }, - Approve { - transaction_id: u64, - to: ActorId, - token_id: TokenId, - }, - DelegatedApprove { - transaction_id: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], - }, - Owner { - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - }, - Clear { - transaction_hash: H256, - }, - AddMinter { - transaction_id: u64, - minter_id: ActorId, - }, - SetUser { - token_id: TokenId, - address: ActorId, - expires: u64, // unix timestamp - transaction_id: u64, - }, - UserOf { - token_id: TokenId, - }, - UserExpires { - token_id: TokenId, - }, -} - -#[derive(Clone, Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum NFTEvent { - Transfer(NFTTransfer), - TransferPayout(NFTTransferPayout), - NFTPayout(Payout), - Approval(NFTApproval), - Owner { - owner: ActorId, - token_id: TokenId, - }, - IsApproved { - to: ActorId, - token_id: TokenId, - approved: bool, - }, - MinterAdded { - minter_id: ActorId, - }, - TransactionMade, - UpdateUser { - token_id: TokenId, - address: ActorId, - expires: u64, - }, - UserOf { - address: ActorId, - }, - UserExpires { - expires: u64, - }, -} - -#[derive(Debug, Clone, Copy, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct UserInfo { - pub address: ActorId, // address of user role - pub expires: u64, // unix timestamp -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFT { - pub token: IoNFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: Vec<(H256, NFTEvent)>, - pub users_info: Vec<(TokenId, UserInfo)>, -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoNFTState { - pub name: String, - pub symbol: String, - pub base_uri: String, - pub owner_by_id: Vec<(TokenId, ActorId)>, - pub token_approvals: Vec<(TokenId, Vec)>, - pub token_metadata_by_id: Vec<(TokenId, Option)>, - pub tokens_for_owner: Vec<(ActorId, Vec)>, - pub royalties: Option, -} - -impl From<&NFTState> for IoNFTState { - fn from(value: &NFTState) -> Self { - let NFTState { - name, - symbol, - base_uri, - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties, - } = value; - - let owner_by_id = owner_by_id - .iter() - .map(|(hash, actor_id)| (*hash, *actor_id)) - .collect(); - - let token_approvals = token_approvals - .iter() - .map(|(key, approvals)| (*key, approvals.iter().copied().collect())) - .collect(); - - let token_metadata_by_id = token_metadata_by_id - .iter() - .map(|(id, metadata)| (*id, metadata.clone())) - .collect(); - - let tokens_for_owner = tokens_for_owner - .iter() - .map(|(id, tokens)| (*id, tokens.clone())) - .collect(); - - Self { - name: name.clone(), - symbol: symbol.clone(), - base_uri: base_uri.clone(), - owner_by_id, - token_approvals, - token_metadata_by_id, - tokens_for_owner, - royalties: royalties.clone(), - } - } -} diff --git a/contracts/rentable-nft/src/lib.rs b/contracts/rentable-nft/src/lib.rs deleted file mode 100644 index 0ecfeaee1..000000000 --- a/contracts/rentable-nft/src/lib.rs +++ /dev/null @@ -1,345 +0,0 @@ -#![no_std] - -use gear_lib_derive::{NFTCore, NFTMetaState, NFTStateKeeper}; -use gear_lib_old::non_fungible_token::{io::NFTTransfer, nft_core::*, state::*, token::*}; -use gstd::{ - collections::HashMap, - exec::{self, block_timestamp}, - msg, - prelude::*, - ActorId, -}; -use primitive_types::{H256, U256}; -use rentable_nft_io::*; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -static mut CONTRACT: Option = None; - -#[derive(Debug, Default, NFTStateKeeper, NFTCore, NFTMetaState)] -pub struct Contract { - #[NFTStateField] - pub token: NFTState, - pub token_id: TokenId, - pub owner: ActorId, - pub transactions: HashMap, - pub collection: Collection, - pub config: Config, - pub users_info: HashMap, -} - -#[no_mangle] -unsafe extern fn init() { - let config: InitNFT = msg::load().expect("Unable to decode InitNft"); - if config.royalties.is_some() { - config.royalties.as_ref().expect("Unable to g").validate(); - } - let nft = Contract { - token: NFTState { - name: config.collection.name.clone(), - royalties: config.royalties, - ..Default::default() - }, - collection: config.collection, - config: config.config, - owner: msg::source(), - ..Default::default() - }; - CONTRACT = Some(nft); -} - -#[no_mangle] -unsafe extern fn handle() { - let action: NFTAction = msg::load().expect("Could not load NFTAction"); - let nft = CONTRACT.get_or_insert(Default::default()); - match action { - NFTAction::Mint { - transaction_id, - token_metadata, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(MyNFTCore::mint(nft, token_metadata)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Burn { - transaction_id, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::burn(nft, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::Transfer { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Transfer(NFTCore::transfer(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Transfer`"); - } - NFTAction::TransferPayout { - transaction_id, - to, - token_id, - amount, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::TransferPayout(NFTCore::transfer_payout(nft, &to, token_id, amount)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::TransferPayout`"); - } - NFTAction::NFTPayout { owner, amount } => { - msg::reply( - NFTEvent::NFTPayout(NFTCore::nft_payout(nft, &owner, amount)), - 0, - ) - .expect("Error during replying with `NFTEvent::NFTPayout`"); - } - NFTAction::Approve { - transaction_id, - to, - token_id, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::approve(nft, &to, token_id)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Owner { token_id } => { - msg::reply( - NFTEvent::Owner { - owner: NFTCore::owner_of(nft, token_id), - token_id, - }, - 0, - ) - .expect("Error during replying with `NFTEvent::Owner`"); - } - NFTAction::IsApproved { to, token_id } => { - msg::reply( - NFTEvent::IsApproved { - to, - token_id, - approved: NFTCore::is_approved_to(nft, &to, token_id), - }, - 0, - ) - .expect("Error during replying with `NFTEvent::IsApproved`"); - } - NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - } => { - msg::reply( - nft.process_transaction(transaction_id, |nft| { - NFTEvent::Approval(NFTCore::delegated_approve(nft, message, signature)) - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::Clear { transaction_hash } => nft.clear(transaction_hash), - NFTAction::AddMinter { - transaction_id, - minter_id, - } => { - nft.check_config(); - msg::reply( - nft.process_transaction(transaction_id, |nft| { - nft.config.authorized_minters.push(minter_id); - NFTEvent::MinterAdded { minter_id } - }), - 0, - ) - .expect("Error during replying with `NFTEvent::Approval`"); - } - NFTAction::SetUser { - token_id, - address, - expires, - transaction_id, - } => { - nft.set_user(address, token_id, expires); - - let event = nft.process_transaction(transaction_id, |_nft| NFTEvent::UpdateUser { - token_id, - address, - expires, - }); - msg::reply(event, 0).expect("Error during replying with `NFTEvent::SetUser`"); - } - NFTAction::UserOf { token_id } => { - let address = nft.user_of(&token_id); - let payload = NFTEvent::UserOf { address }; - msg::reply(payload, 0).expect("Error during replying with `NFTEvent::UserOf`"); - } - NFTAction::UserExpires { token_id } => { - let expires = nft.user_expires(&token_id); - let payload = NFTEvent::UserExpires { expires }; - msg::reply(payload, 0).expect("Error during replying with `NFTEvent::UserExpires`"); - } - }; -} - -pub trait MyNFTCore: NFTCore { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer; -} - -impl MyNFTCore for Contract { - fn mint(&mut self, token_metadata: TokenMetadata) -> NFTTransfer { - let transfer = NFTCore::mint(self, &msg::source(), self.token_id, Some(token_metadata)); - self.token_id = self.token_id.saturating_add(U256::one()); - transfer - } -} - -impl Contract { - fn process_transaction( - &mut self, - transaction_id: u64, - action: impl FnOnce(&mut Contract) -> NFTEvent, - ) -> NFTEvent { - let transaction_hash = get_hash(&msg::source(), transaction_id); - - if let Some(nft_event) = self.transactions.get(&transaction_hash) { - nft_event.clone() - } else { - let nft_event = action(self); - - self.transactions - .insert(transaction_hash, nft_event.clone()); - - nft_event - } - } - - fn clear(&mut self, transaction_hash: H256) { - assert_eq!( - msg::source(), - exec::program_id(), - "Not allowed to clear transactions" - ); - self.transactions.remove(&transaction_hash); - } - - fn check_config(&self) { - if let Some(max_mint_count) = self.config.max_mint_count { - if max_mint_count <= self.token.token_metadata_by_id.len() as u32 { - panic!( - "Mint impossible because max minting count {} limit exceeded", - max_mint_count - ); - } - } - - let current_minter = msg::source(); - let is_authorized_minter = self - .config - .authorized_minters - .iter() - .any(|authorized_minter| authorized_minter.eq(¤t_minter)); - - if !is_authorized_minter { - panic!( - "Current minter {:?} is not authorized at initialization", - current_minter - ); - } - } - - fn set_user(&mut self, address: ActorId, token_id: TokenId, expires: u64) { - self.assert_zero_address(&address); - - let owner = &self.owner; - - // is Approved or Owner - if !self.is_approved_to(&msg::source(), token_id) { - self.assert_owner(owner); - } - - self.users_info - .entry(token_id) - .and_modify(|user_info| user_info.expires = expires) - .or_insert(UserInfo { address, expires }); - } - - fn user_of(&self, token_id: &TokenId) -> ActorId { - if let Some(user_info) = self.users_info.get(token_id) { - if user_info.expires < block_timestamp() { - return user_info.address; - } - } - - ActorId::zero() - } - - fn user_expires(&self, token_id: &TokenId) -> u64 { - if let Some(user_info) = self.users_info.get(token_id) { - user_info.expires - } else { - 0u64 - } - } -} - -#[no_mangle] -extern fn state() { - let contract = unsafe { CONTRACT.take().expect("Unexpected error in taking state") }; - msg::reply::(contract.into(), 0) - .expect("Failed to encode or reply with `IoNFT` from `state()`"); -} - -pub fn get_hash(account: &ActorId, transaction_id: u64) -> H256 { - let account: [u8; 32] = (*account).into(); - let transaction_id = transaction_id.to_be_bytes(); - sp_core_hashing::blake2_256(&[account.as_slice(), transaction_id.as_slice()].concat()).into() -} - -impl From for IoNFT { - fn from(value: Contract) -> Self { - let Contract { - token, - token_id, - owner, - transactions, - users_info, - .. - } = value; - - let transactions = transactions - .iter() - .map(|(key, event)| (*key, event.clone())) - .collect(); - - let users_info = users_info.iter().map(|(id, info)| (*id, *info)).collect(); - - Self { - token: (&token).into(), - token_id, - owner, - transactions, - users_info, - } - } -} diff --git a/contracts/rentable-nft/state/Cargo.toml b/contracts/rentable-nft/state/Cargo.toml deleted file mode 100644 index cc68395a4..000000000 --- a/contracts/rentable-nft/state/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "rentable-nft-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -rentable-nft-io.workspace = true -gear-lib-old.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/rentable-nft/state/build.rs b/contracts/rentable-nft/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/rentable-nft/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/rentable-nft/state/src/lib.rs b/contracts/rentable-nft/state/src/lib.rs deleted file mode 100644 index 223f286d9..000000000 --- a/contracts/rentable-nft/state/src/lib.rs +++ /dev/null @@ -1,120 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::{ - state::NFTQueryReply, - token::{Token, TokenId}, -}; -use gstd::{ActorId, Vec}; -use rentable_nft_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoNFT; - - pub fn info(state: State) -> NFTQueryReply { - NFTQueryReply::NFTInfo { - name: state.token.name.clone(), - symbol: state.token.symbol.clone(), - base_uri: state.token.base_uri, - } - } - - pub fn token(state: State, token_id: TokenId) -> Token { - token_helper(&token_id, &state) - } - - pub fn tokens_for_owner(state: State, owner: ActorId) -> Vec { - let mut tokens: Vec = Vec::new(); - if let Some((_owner, token_ids)) = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)) - { - for token_id in token_ids { - tokens.push(token_helper(token_id, &state)); - } - } - tokens - } - - pub fn total_supply(state: State) -> u128 { - state.token.owner_by_id.len() as u128 - } - - pub fn supply_for_owner(state: State, owner: ActorId) -> u128 { - let tokens = state - .token - .tokens_for_owner - .iter() - .find(|(id, _tokens)| owner.eq(id)); - - tokens - .map(|(_id, tokens)| tokens.len() as u128) - .unwrap_or(0) - } - - pub fn all_tokens(state: State) -> Vec { - state - .token - .owner_by_id - .iter() - .map(|(id, _owner)| token_helper(id, &state)) - .collect() - } - - pub fn approved_tokens(state: State, account: ActorId) -> Vec { - state - .token - .owner_by_id - .iter() - .filter_map(|(id, _owner)| { - state - .token - .token_approvals - .iter() - .find(|(token_id, _approvals)| token_id.eq(id)) - .and_then(|(_token_id, approvals)| { - if approvals.contains(&account) { - Some(token_helper(id, &state)) - } else { - None - } - }) - }) - .collect() - } -} - -fn token_helper(token_id: &TokenId, state: &IoNFT) -> Token { - let mut token = Token::default(); - if let Some((_token_id, owner_id)) = state - .token - .owner_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.id = *token_id; - token.owner_id = *owner_id; - } - if let Some((_token_id, approved_account_ids)) = state - .token - .token_approvals - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.approved_account_ids = approved_account_ids.iter().copied().collect(); - } - if let Some((_token_id, Some(metadata))) = state - .token - .token_metadata_by_id - .iter() - .find(|(id, _metadata)| token_id.eq(id)) - { - token.name.clone_from(&metadata.name); - token.description.clone_from(&metadata.description); - token.media.clone_from(&metadata.media); - token.reference.clone_from(&metadata.reference); - } - token -} diff --git a/contracts/rentable-nft/tests/nft_tests.rs b/contracts/rentable-nft/tests/nft_tests.rs deleted file mode 100644 index a40da12c7..000000000 --- a/contracts/rentable-nft/tests/nft_tests.rs +++ /dev/null @@ -1,612 +0,0 @@ -use gear_lib_old::non_fungible_token::io::NFTApproval; -use gear_lib_old::non_fungible_token::io::NFTTransfer; -use gstd::{ActorId, Encode}; -use gtest::System; -use std::time::{Duration, Instant}; -mod utils; -use hex_literal::hex; -use rentable_nft_io::*; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -use utils::*; - -const USERS: &[u64] = &[3, 4, 5]; -const ZERO_ID: u64 = 0; - -#[test] -fn mint_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - let message = NFTEvent::Transfer(NFTTransfer { - from: ZERO_ID.into(), - to: USERS[0].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn mint_limit_exceed() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(1), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[0]); - assert!(!res.main_failed()) -} - -#[test] -fn mint_not_authorized() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = mint(&nft, transaction_id, USERS[0]); - assert!(!res.main_failed()); - let res = mint(&nft, transaction_id + 1, USERS[1]); - assert!(res.main_failed()) -} - -#[test] -fn mint_added() { - let sys = System::new(); - sys.init_logger(); - let nft = gtest::Program::current_opt(&sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let authorized_minters: Vec = vec![USERS[0].into()]; - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: None, - authorized_minters, - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); - - let nft = sys.get_program(1).unwrap(); - let transaction_id: u64 = 0; - let res = add_minter(&nft, transaction_id, USERS[1].into(), USERS[0]); - assert!(!res.main_failed()); - let res = add_minter(&nft, transaction_id + 1, USERS[2].into(), USERS[1]); - assert!(!res.main_failed()); - - let res = add_minter(&nft, transaction_id + 1, 5.into(), 7); - assert!(res.main_failed()) -} - -#[test] -fn burn_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = burn(&nft, transaction_id, USERS[0], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: ZERO_ID.into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn burn_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - // must fail since the token doesn't exist - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[0], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(burn(&nft, transaction_id, USERS[1], 0).main_failed()); -} - -#[test] -fn transfer_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = transfer(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Transfer(NFTTransfer { - from: USERS[0].into(), - to: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); -} - -#[test] -fn transfer_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - - // must fail since the token doesn't exist - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - // must fail since the caller is not the token owner - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - // must fail since transfer to the zero address - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); -} - -#[test] -fn owner_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = owner_of(&nft, USERS[1], 0); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::Owner { - token_id: 0.into(), - owner: ActorId::from(USERS[0]), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn set_user() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id = 0u64; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - transaction_id += 1; - let duration = Duration::from_secs(1); - - let expires = duration.as_secs(); - println!("expires = {expires}"); - - let res = utils::set_user( - &nft, - USERS[1], - ActorId::from(owner_id), - 0u64.into(), - expires, - transaction_id, - ); - - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::UpdateUser { - token_id: 0.into(), - address: ActorId::from(owner_id), - expires, - } - .encode(); - - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[1]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[1].into(), - token_id: 0.into(), - approved: true, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let res = is_approved_to(&nft, USERS[1], 0, USERS[0]); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::IsApproved { - to: USERS[0].into(), - token_id: 0.into(), - approved: false, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn is_approved_to_failure() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let res = is_approved_to(&nft, USERS[1], 1, USERS[1]); - println!("{:?}", res.decoded_log::()); - assert!(res.main_failed()); -} - -#[test] -fn approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - let res = approve(&nft, transaction_id, USERS[0], USERS[1], 0); - let message = NFTEvent::Approval(NFTApproval { - owner: USERS[0].into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[0], message))); - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id: u64 = 0; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - // must fail since the token doesn't exist - assert!(approve(&nft, transaction_id, USERS[0], USERS[1], 1).main_failed()); - transaction_id += 1; - // must fail since the caller is not the token owner - assert!(approve(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); - transaction_id += 1; - // must fail since approval to the zero address - assert!(approve(&nft, transaction_id, USERS[1], ZERO_ID, 0).main_failed()); - - //approve - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - //transfer - transaction_id += 1; - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); - //must fail since approval was removed after transferring - transaction_id += 1; - assert!(transfer(&nft, transaction_id, USERS[1], USERS[0], 0).main_failed()); -} - -#[test] -fn user_of() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id = 0u64; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let token_id = 0.into(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - transaction_id += 1; - let expires = (Instant::now() + Duration::from_secs(1)) - .elapsed() - .as_secs(); - let res = utils::set_user( - &nft, - USERS[1], - ActorId::from(owner_id), - 0u64.into(), - expires, - transaction_id, - ); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::UpdateUser { - token_id: 0.into(), - address: ActorId::from(owner_id), - expires, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - let res = utils::user_of(&nft, USERS[1], token_id); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::UserOf { - address: ActorId::from(owner_id), - } - .encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn user_expires() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let mut transaction_id = 0u64; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!approve(&nft, transaction_id, USERS[0], USERS[1], 0).main_failed()); - let token_id = 0.into(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - transaction_id += 1; - - let expires = (Instant::now() + Duration::from_secs(1)) - .elapsed() - .as_secs(); - let res = utils::set_user( - &nft, - USERS[1], - ActorId::from(owner_id), - 0u64.into(), - expires, - transaction_id, - ); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::UpdateUser { - token_id: 0.into(), - address: ActorId::from(owner_id), - expires, - } - .encode(); - assert!(res.contains(&(USERS[1], message))); - - let res = utils::user_expires(&nft, USERS[1], token_id); - println!("{:?}", res.decoded_log::()); - let message = NFTEvent::UserExpires { expires }.encode(); - assert!(res.contains(&(USERS[1], message))); -} - -#[test] -fn delegated_approve_success() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - assert!(!mint_to_actor(&nft, transaction_id + 1, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10 + 3000, - }; - let signature = pair.sign(message.encode().as_slice()); - - transaction_id += 1; - let res = delegated_approve(&nft, transaction_id, USERS[1], message, signature.0); - let message = NFTEvent::Approval(NFTApproval { - owner: owner_id.into(), - approved_account: USERS[1].into(), - token_id: 0.into(), - }) - .encode(); - assert!(res.contains(&(USERS[1], message))); - assert!(!transfer(&nft, transaction_id, USERS[1], USERS[2], 0).main_failed()); -} - -#[test] -fn delegated_approve_failures() { - let sys = System::new(); - init_nft(&sys); - let nft = sys.get_program(1).unwrap(); - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner_id = pair.public().0; - - let mut transaction_id: u64 = 0; - assert!(!add_minter(&nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - transaction_id += 1; - assert!(!mint(&nft, transaction_id, USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&nft, transaction_id, owner_id).main_failed()); - - // Not owner can't approve nft - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 1.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); - - // Only approved actor in delegated approve can send delegated approve action - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!(delegated_approve(&nft, transaction_id, USERS[0], message, signature.0).main_failed()); - // Must fail if user tries to approve token in wrong contract - init_nft(&sys); - let second_nft = sys.get_program(2).unwrap(); - transaction_id += 1; - assert!(!add_minter(&second_nft, transaction_id, owner_id.into(), USERS[0]).main_failed()); - transaction_id += 1; - assert!(!mint_to_actor(&second_nft, transaction_id, owner_id).main_failed()); - - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - assert!( - delegated_approve(&second_nft, transaction_id, USERS[1], message, signature.0) - .main_failed() - ); - - // Must fail if user tries to approve token to zero_id - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: 0.into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - assert!(delegated_approve(&nft, transaction_id, 0, message, signature.0).main_failed()); - - // Signature not corresponds to the message content - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - let wrong_message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 2.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - assert!( - delegated_approve(&nft, transaction_id, USERS[1], wrong_message, signature.0).main_failed() - ); - - // Approve expired - let message = DelegatedApproveMessage { - token_owner_id: owner_id.into(), - approved_actor_id: USERS[1].into(), - nft_program_id: 1.into(), - token_id: 0.into(), - expiration_timestamp: sys.block_timestamp() + 10, - }; - let signature = pair.sign(message.encode().as_slice()); - - sys.spend_blocks(1); - assert!(delegated_approve(&nft, transaction_id, USERS[1], message, signature.0).main_failed()); -} diff --git a/contracts/rentable-nft/tests/node_tests.rs b/contracts/rentable-nft/tests/node_tests.rs deleted file mode 100644 index 9ce56dae1..000000000 --- a/contracts/rentable-nft/tests/node_tests.rs +++ /dev/null @@ -1,448 +0,0 @@ -use gclient::{EventProcessor, GearApi, Result}; -use gstd::{ActorId, Encode}; -use rentable_nft::WASM_BINARY_OPT; -use rentable_nft_io::*; - -#[tokio::test] -async fn gclient_mint_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_burn_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - // failures - let burn_payload = NFTAction::Burn { - transaction_id, - token_id: 666.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, burn_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, burn_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_transfer_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - - let transfer_payload = NFTAction::Transfer { - transaction_id, - to: ActorId::from(4u64), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, transfer_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, transfer_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_owner_test() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - let mut listener = api.subscribe().await?; // Subscribing for events. - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - assert!(listener.blocks_running().await?); - - let owner_payload = NFTAction::Owner { token_id: 0.into() }; - - let gas_info = api - .calculate_handle_gas(None, program_id, owner_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, owner_payload, gas_info.burned * 2, 0) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} - -#[tokio::test] -async fn gclient_approved() -> Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let mut listener = api.subscribe().await?; // Subscribing for events. - - // Checking that blocks still running. - assert!(listener.blocks_running().await?); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - let actor_id = ActorId::new( - api.account_id() - .encode() - .try_into() - .expect("Unexpected invalid account id length."), - ); - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![actor_id], - }, - } - .encode(); - let gas_info = api - .calculate_upload_gas(None, WASM_BINARY_OPT.to_vec(), init_nft.clone(), 0, true) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - WASM_BINARY_OPT.to_vec(), - gclient::now_micros().to_le_bytes(), - init_nft, - gas_info.burned * 2, - 0, - ) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - let transaction_id: u64 = 0; - use gear_lib_old::non_fungible_token::token::TokenMetadata; - let token_metadata = TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }; - - let mint_payload = NFTAction::Mint { - transaction_id, - token_metadata, - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, mint_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, mint_payload, gas_info.burned * 2, 0) - .await?; - - assert!(listener.message_processed(message_id).await?.succeed()); - - assert!(listener.blocks_running().await?); - - let transaction_id = transaction_id + 1; - let approve_payload = NFTAction::Approve { - transaction_id, - to: ActorId::from(3), - token_id: 0.into(), - }; - - let gas_info = api - .calculate_handle_gas(None, program_id, approve_payload.encode(), 0, true) - .await?; - - let (message_id, _) = api - .send_message(program_id, approve_payload, gas_info.burned * 2, 0) - .await?; - - let processed = listener.message_processed(message_id).await?; - assert!(processed.succeed()); - - assert!(listener.blocks_running().await?); - - Ok(()) -} diff --git a/contracts/rentable-nft/tests/utils.rs b/contracts/rentable-nft/tests/utils.rs deleted file mode 100644 index 21c54c190..000000000 --- a/contracts/rentable-nft/tests/utils.rs +++ /dev/null @@ -1,178 +0,0 @@ -use gear_lib_old::non_fungible_token::token::*; -use gstd::ActorId; -use gtest::{Program, RunResult, System}; -use rentable_nft_io::*; - -const USERS: &[u64] = &[3, 4, 5]; - -pub fn init_nft(sys: &System) { - sys.init_logger(); - let nft = Program::current_opt(sys); - - let collection = Collection { - name: String::from("MyToken"), - description: String::from("My token"), - }; - - let init_nft = InitNFT { - collection, - royalties: None, - config: Config { - max_mint_count: Some(100), - authorized_minters: vec![USERS[0].into()], - }, - }; - - let res = nft.send(USERS[0], init_nft); - - assert!(!res.main_failed()); -} - -pub fn mint(nft: &Program<'_>, transaction_id: u64, member: u64) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn is_approved_to(nft: &Program<'_>, from: u64, token_id: u64, to: u64) -> RunResult { - nft.send( - from, - NFTAction::IsApproved { - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Approve { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn set_user( - nft: &Program<'_>, - from: u64, - address: ActorId, - token_id: TokenId, - expires: u64, - transaction_id: u64, -) -> RunResult { - let payload = NFTAction::SetUser { - token_id, - address, - expires, - transaction_id, - }; - nft.send(from, payload) -} - -pub fn user_of(nft: &Program<'_>, from: u64, token_id: TokenId) -> RunResult { - let payload = NFTAction::UserOf { token_id }; - nft.send(from, payload) -} - -pub fn user_expires(nft: &Program<'_>, from: u64, token_id: TokenId) -> RunResult { - let payload = NFTAction::UserExpires { token_id }; - nft.send(from, payload) -} -pub fn delegated_approve( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - message: DelegatedApproveMessage, - signature: [u8; 64], -) -> RunResult { - let action = NFTAction::DelegatedApprove { - transaction_id, - message, - signature, - }; - nft.send(from, action) -} - -pub fn mint_to_actor(nft: &Program<'_>, transaction_id: u64, member: [u8; 32]) -> RunResult { - nft.send( - member, - NFTAction::Mint { - transaction_id, - token_metadata: TokenMetadata { - name: "CryptoKitty".to_string(), - description: "Description".to_string(), - media: "http://".to_string(), - reference: "http://".to_string(), - }, - }, - ) -} - -pub fn add_minter( - nft: &Program<'_>, - transaction_id: u64, - minter_id: ActorId, - member: u64, -) -> RunResult { - nft.send( - member, - NFTAction::AddMinter { - transaction_id, - minter_id, - }, - ) -} - -pub fn owner_of(nft: &Program<'_>, from: u64, token_id: u64) -> RunResult { - nft.send( - from, - NFTAction::Owner { - token_id: token_id.into(), - }, - ) -} - -pub fn transfer( - nft: &Program<'_>, - transaction_id: u64, - from: u64, - to: u64, - token_id: u64, -) -> RunResult { - nft.send( - from, - NFTAction::Transfer { - transaction_id, - to: to.into(), - token_id: token_id.into(), - }, - ) -} - -pub fn burn(nft: &Program<'_>, transaction_id: u64, member: u64, token_id: u64) -> RunResult { - nft.send( - member, - NFTAction::Burn { - transaction_id, - token_id: token_id.into(), - }, - ) -} diff --git a/contracts/roll-the-dice/Cargo.toml b/contracts/roll-the-dice/Cargo.toml deleted file mode 100644 index d874908e2..000000000 --- a/contracts/roll-the-dice/Cargo.toml +++ /dev/null @@ -1,23 +0,0 @@ -[package] -name = "roll-the-dice" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -oracle-io.workspace = true -roll-the-dice-io.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -[build-dependencies] -roll-the-dice-io.workspace = true -gear-wasm-builder.workspace = true - -# External binaries - -oracle.workspace = true -roll-the-dice-state.workspace = true diff --git a/contracts/roll-the-dice/README.md b/contracts/roll-the-dice/README.md deleted file mode 100644 index 1d5c094e9..000000000 --- a/contracts/roll-the-dice/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=roll-the-dice/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/roll_the_dice_io) - -# Roll The Dice - -### 🏗️ Building - -```sh -cargo b -r -p "roll-the-dice*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "roll-the-dice*" -``` diff --git a/contracts/roll-the-dice/build.rs b/contracts/roll-the-dice/build.rs deleted file mode 100644 index 65006763d..000000000 --- a/contracts/roll-the-dice/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use roll_the_dice_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/roll-the-dice/io/Cargo.toml b/contracts/roll-the-dice/io/Cargo.toml deleted file mode 100644 index 8f986760f..000000000 --- a/contracts/roll-the-dice/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "roll-the-dice-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta.workspace = true diff --git a/contracts/roll-the-dice/io/src/lib.rs b/contracts/roll-the-dice/io/src/lib.rs deleted file mode 100644 index 5472ff5a1..000000000 --- a/contracts/roll-the-dice/io/src/lib.rs +++ /dev/null @@ -1,67 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, prelude::*, ActorId}; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = In; - type Handle = InOut; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Default, Decode, Encode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub users_data: BTreeMap, - pub oracle: ActorId, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Action { - Roll, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Event { - RollValueRequested(u128), - RollFinished((u128, u128)), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StateQuery { - GetUsersData, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StateResponse { - UsersData(Vec<(u128, ActorId, RollStatus)>), -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RollStatus { - Rolling, - Finished(bool), -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitConfig { - pub oracle: ActorId, -} diff --git a/contracts/roll-the-dice/src/lib.rs b/contracts/roll-the-dice/src/lib.rs deleted file mode 100644 index 7cc0ca68b..000000000 --- a/contracts/roll-the-dice/src/lib.rs +++ /dev/null @@ -1,93 +0,0 @@ -#![no_std] - -use gstd::{collections::HashMap, msg, prelude::*, ActorId}; -use roll_the_dice_io::*; - -#[derive(Debug, Default)] -struct Contract { - users_data: HashMap, - oracle: ActorId, -} - -impl Contract { - /// Request random value from `oracle`. - pub async fn roll(&mut self) { - let oracle_reply: oracle_io::Event = - msg::send_for_reply_as(self.oracle, oracle_io::Action::RequestValue, 0, 0) - .expect("Unable to request value from oracle!") - .await - .expect("Unable to decode oracle reply!"); - - if let oracle_io::Event::NewValue { value: _ } = oracle_reply { - // TODO: Implement random value handler - /* self.users_data - .insert(id, (msg::source(), RollStatus::Rolling)); - msg::reply(Event::RollValueRequested(id), 0).unwrap(); */ - } else { - panic!("Invalid oracle reply!"); - } - } - - /// Handle reply from `oracle` with random value and id. - pub fn roll_finished(&mut self, id: u128, value: u128) { - let (_, roll_status) = self.users_data.get_mut(&id).expect("Invalid ID!"); - *roll_status = RollStatus::Finished(value % 2 == 0); - - msg::reply(Event::RollFinished((id, value)).encode(), 0).expect("Unable to reply!"); - } -} - -static mut ROLL_DICE: Option = None; - -#[no_mangle] -unsafe extern fn init() { - let config: InitConfig = msg::load().expect("Unable to decode InitConfig."); - let roll_dice = Contract { - oracle: config.oracle, - ..Default::default() - }; - - ROLL_DICE = Some(roll_dice); -} - -#[gstd::async_main] -async fn main() { - let roll_dice: &mut Contract = unsafe { ROLL_DICE.get_or_insert(Contract::default()) }; - - // Handler(proxy) for oracle messages - if msg::source() == roll_dice.oracle { - let payload = msg::load_bytes().expect("Unable to load payload bytes."); - let id: u128 = u128::from_le_bytes( - payload[1..17] - .try_into() - .expect("Unable to obtain id bytes."), - ); - let value: u128 = u128::from_le_bytes( - payload[17..] - .try_into() - .expect("Unable to obtain value bytes."), - ); - - roll_dice.roll_finished(id, value); - return; - } - - let action: Action = msg::load().expect("Unable to decode Action."); - match action { - Action::Roll => roll_dice.roll().await, - } -} - -#[no_mangle] -unsafe extern fn state() { - let roll_dice = ROLL_DICE.get_or_insert(Default::default()); - - msg::reply( - State { - users_data: roll_dice.users_data.clone().into_iter().collect(), - oracle: roll_dice.oracle, - }, - 0, - ) - .expect("Unable to reply!"); -} diff --git a/contracts/roll-the-dice/state/Cargo.toml b/contracts/roll-the-dice/state/Cargo.toml deleted file mode 100644 index ea1a20037..000000000 --- a/contracts/roll-the-dice/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "roll-the-dice-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta = { workspace = true, features = ["codegen"] } -gstd.workspace = true -roll-the-dice-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/roll-the-dice/state/build.rs b/contracts/roll-the-dice/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/roll-the-dice/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/roll-the-dice/state/src/lib.rs b/contracts/roll-the-dice/state/src/lib.rs deleted file mode 100644 index e70fe16e3..000000000 --- a/contracts/roll-the-dice/state/src/lib.rs +++ /dev/null @@ -1,20 +0,0 @@ -#![no_std] - -use roll_the_dice_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = roll_the_dice_io::State; - - pub fn query(state: State, query: StateQuery) -> StateResponse { - match query { - StateQuery::GetUsersData => StateResponse::UsersData( - state - .users_data - .iter() - .map(|(id, (user, status))| (*id, *user, *status)) - .collect(), - ), - } - } -} diff --git a/contracts/roll-the-dice/tests/roll_dice.rs b/contracts/roll-the-dice/tests/roll_dice.rs deleted file mode 100644 index 15ea4d828..000000000 --- a/contracts/roll-the-dice/tests/roll_dice.rs +++ /dev/null @@ -1,116 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, ProgramBuilder, System}; -use roll_the_dice_io::*; -use utils::*; - -// TODO: reimplement tests after fixing Oracle. - -#[test] -#[ignore] -fn success_roll() { - let sys = System::new(); - sys.init_logger(); - let oracle_program = - ProgramBuilder::from_file("../target/wasm32-unknown-unknown/release/oracle.opt.wasm") - .with_id(ORACLE_ID) - .build(&sys); - let roll_dice_program = Program::current_with_id(&sys, ROLL_DICE_ID); - - let result = oracle_program.send( - OWNER, - oracle_io::InitConfig { - owner: OWNER.into(), - manager: MANAGER.into(), - }, - ); - assert!(!result.main_failed()); - - let result = roll_dice_program.send( - OWNER, - InitConfig { - oracle: ORACLE_ID.into(), - }, - ); - assert!(!result.main_failed()); - - let result = roll_dice_program.send(USER, Action::Roll); - assert!(!result.main_failed()); - assert!(!result.others_failed()); - // assert!(result.contains(&(USER, Event::RollValueRequested(1u128).encode()))); - println!("{:?}", result); -} - -#[test] -#[ignore] -fn success_roll_finished() { - let sys = System::new(); - sys.init_logger(); - - let state_wasm = get_state(); - let oracle_program = - ProgramBuilder::from_file("../target/wasm32-unknown-unknown/release/oracle.opt.wasm") - .with_id(ORACLE_ID) - .build(&sys); - - let roll_dice_program = Program::current_with_id(&sys, ROLL_DICE_ID); - - let result = oracle_program.send( - OWNER, - oracle_io::InitConfig { - owner: OWNER.into(), - manager: MANAGER.into(), - }, - ); - assert!(!result.main_failed()); - - let result = roll_dice_program.send( - OWNER, - InitConfig { - oracle: ORACLE_ID.into(), - }, - ); - assert!(!result.main_failed()); - - let result = roll_dice_program.send(USER, Action::Roll); - assert!(!result.main_failed()); - assert!(!result.others_failed()); - assert!(result.contains(&(USER, Event::RollValueRequested(1u128).encode()))); - - let meta_result: StateResponse = roll_dice_program - .read_state_using_wasm( - 0, - "query", - state_wasm.clone(), - Some(StateQuery::GetUsersData), - ) - .unwrap(); - match meta_result { - StateResponse::UsersData(users_data) => { - assert_eq!(users_data[0].0, 1u128); - assert_eq!(users_data[0].1, USER.into()); - assert_eq!(users_data[0].2, RollStatus::Rolling); - } - } - - sys.spend_blocks(2); - - /* let result = oracle_program.send( - MANAGER, - oracle_io::Action::UpdateValue { id: 1, value: 1337 }, - ); - assert!(!result.main_failed()); - assert!(!result.others_failed()); */ - - let meta_result: StateResponse = roll_dice_program - .read_state_using_wasm(0, "query", state_wasm, Some(StateQuery::GetUsersData)) - .unwrap(); - match meta_result { - StateResponse::UsersData(users_data) => { - assert_eq!(users_data[0].0, 1u128); - assert_eq!(users_data[0].1, USER.into()); - assert_eq!(users_data[0].2, RollStatus::Finished(false)); - } - } -} diff --git a/contracts/roll-the-dice/tests/utils.rs b/contracts/roll-the-dice/tests/utils.rs deleted file mode 100644 index 5c4d9ee52..000000000 --- a/contracts/roll-the-dice/tests/utils.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub const OWNER: u64 = 3; -pub const MANAGER: u64 = 4; -pub const USER: u64 = 5; -pub const ORACLE_ID: u64 = 100; -pub const ROLL_DICE_ID: u64 = 200; - -pub fn get_state() -> Vec { - std::fs::read("../target/wasm32-unknown-unknown/release/roll_the_dice_state.meta.wasm").unwrap() -} diff --git a/contracts/sharded-fungible-token/Cargo.toml b/contracts/sharded-fungible-token/Cargo.toml deleted file mode 100644 index 9129c7351..000000000 --- a/contracts/sharded-fungible-token/Cargo.toml +++ /dev/null @@ -1,28 +0,0 @@ -[package] -name = "sharded-fungible-token" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -sharded-fungible-token-io.workspace = true -sharded-fungible-token-logic-io.workspace = true -primitive-types.workspace = true -sp-core-hashing.workspace = true - -[dev-dependencies] -gtest.workspace = true -gstd.workspace = true -sp-core.workspace = true -hex-literal.workspace = true -gear-lib-old.workspace = true - -# External binaries - -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -sharded-fungible-token-io.workspace = true diff --git a/contracts/sharded-fungible-token/README.md b/contracts/sharded-fungible-token/README.md deleted file mode 100644 index bff0c929e..000000000 --- a/contracts/sharded-fungible-token/README.md +++ /dev/null @@ -1,18 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=sharded-fungible-token/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/sharded_fungible_token_io) - -# [Sharded fungible token](https://wiki.gear-tech.io/docs/examples/Standards/gft-20) - -An advanced version of fungible token that supports sharding. - -### 🏗️ Building - -```sh -cargo b -r -p "sharded-fungible-token*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "sharded-fungible-token*" -``` diff --git a/contracts/sharded-fungible-token/build.rs b/contracts/sharded-fungible-token/build.rs deleted file mode 100644 index ae70ebf41..000000000 --- a/contracts/sharded-fungible-token/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use sharded_fungible_token_io::FMainTokenMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/sharded-fungible-token/io/Cargo.toml b/contracts/sharded-fungible-token/io/Cargo.toml deleted file mode 100644 index 5972c9c90..000000000 --- a/contracts/sharded-fungible-token/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "sharded-fungible-token-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -primitive-types.workspace = true diff --git a/contracts/sharded-fungible-token/io/src/lib.rs b/contracts/sharded-fungible-token/io/src/lib.rs deleted file mode 100644 index 7b1fb051b..000000000 --- a/contracts/sharded-fungible-token/io/src/lib.rs +++ /dev/null @@ -1,115 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; -use primitive_types::{H256, H512}; - -pub struct FMainTokenMetadata; - -impl Metadata for FMainTokenMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTokenState { - pub admin: ActorId, - pub ft_logic_id: ActorId, - pub transactions: Vec<(H256, TransactionStatus)>, -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTokenAction { - Message { - transaction_id: u64, - payload: LogicAction, - }, - UpdateLogicContract { - ft_logic_code_hash: H256, - storage_code_hash: H256, - }, - GetBalance(ActorId), - GetPermitId(ActorId), - Clear(H256), - MigrateStorageAddresses, -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTokenInnerAction { - Message(Vec), - UpdateLogicContract { - ft_logic_code_hash: H256, - storage_code_hash: H256, - }, - GetBalance(ActorId), - GetPermitId(ActorId), - Clear(H256), - MigrateStorageAddresses, -} - -#[derive(Encode, Debug, Decode, TypeInfo, Copy, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum LogicAction { - Mint { - recipient: ActorId, - amount: u128, - }, - Burn { - sender: ActorId, - amount: u128, - }, - Transfer { - sender: ActorId, - recipient: ActorId, - amount: u128, - }, - Approve { - approved_account: ActorId, - amount: u128, - }, - Permit { - owner_account: ActorId, - approved_account: ActorId, - amount: u128, - permit_id: u128, - sign: H512, - }, -} - -#[derive(Debug, Encode, Decode, TypeInfo, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTokenEvent { - Ok, - Err, - Balance(u128), - PermitId(u128), -} - -#[derive(Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitFToken { - pub storage_code_hash: H256, - pub ft_logic_code_hash: H256, -} - -#[derive(Encode, Decode, TypeInfo, Copy, Clone, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionStatus { - InProgress, - Success, - Failure, -} diff --git a/contracts/sharded-fungible-token/logic/Cargo.toml b/contracts/sharded-fungible-token/logic/Cargo.toml deleted file mode 100644 index 46bf19bf8..000000000 --- a/contracts/sharded-fungible-token/logic/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "sharded-fungible-token-logic" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -sharded-fungible-token-logic-io.workspace = true -sharded-fungible-token-io.workspace = true -sharded-fungible-token-storage-io.workspace = true -gear-lib-old.workspace = true -primitive-types.workspace = true -hex.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -sharded-fungible-token-logic-io.workspace = true diff --git a/contracts/sharded-fungible-token/logic/build.rs b/contracts/sharded-fungible-token/logic/build.rs deleted file mode 100644 index 20ee1bdca..000000000 --- a/contracts/sharded-fungible-token/logic/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use sharded_fungible_token_logic_io::FLogicMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/sharded-fungible-token/logic/io/Cargo.toml b/contracts/sharded-fungible-token/logic/io/Cargo.toml deleted file mode 100644 index 9b8229567..000000000 --- a/contracts/sharded-fungible-token/logic/io/Cargo.toml +++ /dev/null @@ -1,12 +0,0 @@ -[package] -name = "sharded-fungible-token-logic-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -gmeta.workspace = true -sharded-fungible-token-storage-io.workspace = true -sharded-fungible-token-io.workspace = true diff --git a/contracts/sharded-fungible-token/logic/io/src/instruction.rs b/contracts/sharded-fungible-token/logic/io/src/instruction.rs deleted file mode 100644 index 65aac39c8..000000000 --- a/contracts/sharded-fungible-token/logic/io/src/instruction.rs +++ /dev/null @@ -1,131 +0,0 @@ -use crate::H256; -use gstd::{msg, prelude::*, ActorId}; -use sharded_fungible_token_storage_io::{FTStorageAction, FTStorageEvent}; - -#[derive(Debug, Encode, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum InstructionState { - ScheduledRun, - ScheduledAbort, - RunWithError, - Finished, -} - -#[derive(Debug, Encode, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Instruction { - pub state: InstructionState, - pub address: ActorId, - pub transaction: FTStorageAction, - pub compensation: Option, -} - -impl Instruction { - /// Create a new instruction from a given transaction and a compensation - pub fn new( - address: ActorId, - transaction: FTStorageAction, - compensation: Option, - ) -> Self { - Instruction { - state: InstructionState::ScheduledRun, - address, - transaction, - compensation, - } - } - - pub async fn start(&mut self) -> Result<(), ()> { - match self.state { - InstructionState::ScheduledRun => { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - self.address, - self.transaction, - 0, - 0, - ) - .expect("Error in sending a message in instruction") - .await; - match result { - Ok(FTStorageEvent::Ok) => { - self.state = InstructionState::ScheduledAbort; - Ok(()) - } - _ => { - self.state = InstructionState::RunWithError; - Err(()) - } - } - } - InstructionState::RunWithError => Err(()), - _ => Ok(()), - } - } - - pub async fn abort(&mut self) -> Result<(), ()> { - match self.state { - InstructionState::ScheduledAbort => { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - self.address, - self.compensation - .expect("No compensation for that instruction"), - 0, - 0, - ) - .expect("Error in sending a compensation message in instruction") - .await; - match result { - Ok(FTStorageEvent::Ok) => { - self.state = InstructionState::Finished; - Ok(()) - } - _ => Err(()), - } - } - InstructionState::Finished => Ok(()), - _ => Err(()), - } - } -} - -pub fn create_decrease_instruction( - transaction_hash: H256, - msg_source: &ActorId, - sender_storage: &ActorId, - sender: &ActorId, - amount: u128, -) -> Instruction { - Instruction::new( - *sender_storage, - FTStorageAction::DecreaseBalance { - transaction_hash, - msg_source: *msg_source, - account: *sender, - amount, - }, - Some(FTStorageAction::IncreaseBalance { - transaction_hash, - account: *sender, - amount, - }), - ) -} - -pub fn create_increase_instruction( - transaction_hash: H256, - recipient_storage: &ActorId, - recipient: &ActorId, - amount: u128, -) -> Instruction { - Instruction::new( - *recipient_storage, - FTStorageAction::IncreaseBalance { - transaction_hash, - account: *recipient, - amount, - }, - None, - ) -} diff --git a/contracts/sharded-fungible-token/logic/io/src/lib.rs b/contracts/sharded-fungible-token/logic/io/src/lib.rs deleted file mode 100644 index c856162dc..000000000 --- a/contracts/sharded-fungible-token/logic/io/src/lib.rs +++ /dev/null @@ -1,84 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; -use instruction::Instruction; -use primitive_types::H256; -use sharded_fungible_token_io::LogicAction; - -pub struct FLogicMetadata; -pub mod instruction; - -impl Metadata for FLogicMetadata { - type Init = In; - type Handle = InOut; - type Others = InOut; - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTLogicState { - pub admin: ActorId, - pub ftoken_id: ActorId, - pub transaction_status: Vec<(H256, TransactionStatus)>, - pub instructions: Vec<(H256, (Instruction, Instruction))>, - pub storage_code_hash: H256, - pub id_to_storage: Vec<(String, ActorId)>, -} - -#[derive(Encode, Decode, TypeInfo, Clone, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionStatus { - InProgress, - Success, - Failure, -} - -#[derive(Debug, Encode, Decode, TypeInfo, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTLogicAction { - Message { - transaction_hash: H256, - account: ActorId, - payload: Vec, - }, - GetBalance(ActorId), - GetPermitId(ActorId), - Clear(H256), - UpdateStorageCodeHash(H256), - MigrateStorages, -} - -#[derive(Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTLogicEvent { - Ok, - Err, - Balance(u128), - PermitId(u128), -} - -#[derive(Encode, Debug, Decode, TypeInfo, Copy, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct PermitUnsigned { - pub owner_account: ActorId, - pub approved_account: ActorId, - pub amount: u128, - pub permit_id: u128, -} - -#[derive(Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitFTLogic { - pub admin: ActorId, - pub storage_code_hash: H256, -} diff --git a/contracts/sharded-fungible-token/logic/src/lib.rs b/contracts/sharded-fungible-token/logic/src/lib.rs deleted file mode 100644 index 480269790..000000000 --- a/contracts/sharded-fungible-token/logic/src/lib.rs +++ /dev/null @@ -1,490 +0,0 @@ -#![no_std] - -use gear_lib_old::sr25519; -use gstd::{collections::HashMap, exec, msg, prelude::*, prog::ProgramGenerator, ActorId}; -use sharded_fungible_token_io::LogicAction; -use sharded_fungible_token_logic_io::instruction::*; -use sharded_fungible_token_logic_io::*; - -mod messages; -use messages::*; -use primitive_types::{H256, H512}; - -const GAS_STORAGE_CREATION: u64 = 3_000_000_000; -const DELAY: u32 = 600_000; - -#[derive(Default)] -struct FTLogic { - admin: ActorId, - ftoken_id: ActorId, - transaction_status: HashMap, - instructions: HashMap, - storage_code_hash: H256, - id_to_storage: HashMap, -} - -static mut FT_LOGIC: Option = None; - -impl FTLogic { - /// The message received from the main contract. - /// - /// Arguments: - /// * `transaction_hash`: the hash associated with that transaction; - /// * `account`: the account that sent the message to the main contract; - /// * `action`: the message payload. - async fn message(&mut self, transaction_hash: H256, account: &ActorId, payload: &[u8]) { - self.assert_main_contract(); - let action = LogicAction::decode(&mut &payload[..]).expect("Can't decode `Action`"); - - let transaction_status = self - .transaction_status - .get(&transaction_hash) - .unwrap_or(&TransactionStatus::InProgress); - - match transaction_status { - // The transaction has already been made but there wasn't enough gas for a message reply. - TransactionStatus::Success => reply_ok(), - TransactionStatus::Failure => reply_err(), - // The transaction took place for the first time - // Or there was not enough gas to change the `TransactionStatus`. - TransactionStatus::InProgress => { - send_delayed_clear(transaction_hash); - self.transaction_status - .insert(transaction_hash, TransactionStatus::InProgress); - match action { - LogicAction::Mint { recipient, amount } => { - self.mint(transaction_hash, &recipient, amount).await; - } - LogicAction::Burn { sender, amount } => { - self.burn(transaction_hash, account, &sender, amount).await; - } - LogicAction::Transfer { - sender, - recipient, - amount, - } => { - self.transfer(transaction_hash, account, &sender, &recipient, amount) - .await; - } - LogicAction::Approve { - approved_account, - amount, - } => { - self.approve(transaction_hash, account, &approved_account, amount) - .await; - } - LogicAction::Permit { - owner_account, - approved_account, - amount, - permit_id, - sign, - } => { - let payload = PermitUnsigned { - owner_account, - approved_account, - amount, - permit_id, - }; - self.permit( - transaction_hash, - &owner_account, - &approved_account, - amount, - &sign, - &payload, - ) - .await; - } - } - } - } - } - - async fn mint(&mut self, transaction_hash: H256, recipient: &ActorId, amount: u128) { - let recipient_storage = self.get_storage_address(recipient); - - let result = - increase_balance(transaction_hash, &recipient_storage, recipient, amount).await; - - match result { - Ok(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok() - } - Err(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - } - - async fn burn( - &mut self, - transaction_hash: H256, - account: &ActorId, - sender: &ActorId, - amount: u128, - ) { - let sender_storage = self.get_storage_address(sender); - - let result = - decrease_balance(transaction_hash, &sender_storage, account, sender, amount).await; - - match result { - Ok(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok() - } - Err(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - } - - async fn transfer( - &mut self, - transaction_hash: H256, - msg_source: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, - ) { - let sender_storage = self.get_storage_address(sender); - let recipient_storage = self.get_storage_address(recipient); - - if recipient_storage == sender_storage { - self.transfer_single_storage( - transaction_hash, - &sender_storage, - msg_source, - sender, - recipient, - amount, - ) - .await; - return; - } - let (decrease_instruction, increase_instruction) = self - .instructions - .entry(transaction_hash) - .or_insert_with(|| { - let decrease_instruction = create_decrease_instruction( - transaction_hash, - msg_source, - &sender_storage, - sender, - amount, - ); - let increase_instruction = create_increase_instruction( - transaction_hash, - &recipient_storage, - recipient, - amount, - ); - (decrease_instruction, increase_instruction) - }); - - if decrease_instruction.start().await.is_err() { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - return; - } - - match increase_instruction.start().await { - Err(_) => { - if decrease_instruction.abort().await.is_ok() { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - Ok(_) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok(); - } - } - } - - async fn transfer_single_storage( - &mut self, - transaction_hash: H256, - storage_id: &ActorId, - msg_source: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, - ) { - let result = transfer( - transaction_hash, - storage_id, - msg_source, - sender, - recipient, - amount, - ) - .await; - - match result { - Ok(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok() - } - Err(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - } - - async fn approve( - &mut self, - transaction_hash: H256, - account: &ActorId, - approved_account: &ActorId, - amount: u128, - ) { - self.transaction_status - .insert(transaction_hash, TransactionStatus::InProgress); - let account_storage = self.get_storage_address(account); - - let result = approve( - transaction_hash, - &account_storage, - account, - approved_account, - amount, - ) - .await; - - match result { - Ok(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok() - } - Err(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - } - - fn check_signature(message: &PermitUnsigned, owner: &ActorId, sign: &H512) -> bool { - let message_u8 = message.encode(); - sr25519::verify(sign.as_bytes(), message_u8, owner).is_ok() - } - - async fn permit( - &mut self, - transaction_hash: H256, - owner: &ActorId, - spender: &ActorId, - amount: u128, - owner_sign: &H512, - message: &PermitUnsigned, - ) { - if !FTLogic::check_signature(message, owner, owner_sign) { - reply_err(); - return; - } - - self.transaction_status - .insert(transaction_hash, TransactionStatus::InProgress); - - if !self - .check_and_increment_permit_id(transaction_hash, owner, &message.permit_id) - .await - { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - return; - } - - let account_storage = self.get_storage_address(owner); - let result = approve(transaction_hash, &account_storage, owner, spender, amount).await; - match result { - Ok(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Success); - reply_ok() - } - Err(()) => { - self.transaction_status - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - } - } - - fn update_storage_hash(&mut self, storage_code_hash: H256) { - self.assert_admin(); - self.storage_code_hash = storage_code_hash; - } - - fn get_storage_address(&mut self, address: &ActorId) -> ActorId { - let encoded = hex::encode(address.as_ref()); - let id: String = encoded.chars().next().expect("Can't be None").to_string(); - if let Some(address) = self.id_to_storage.get(&id) { - *address - } else { - let (_message_id, address) = ProgramGenerator::create_program_with_gas( - self.storage_code_hash.into(), - "", - GAS_STORAGE_CREATION, - 0, - ) - .expect("Error in creating Storage program"); - self.id_to_storage.insert(id, address); - address - } - } - - async fn get_permit_id(&self, account: &ActorId) { - let encoded = hex::encode(account.as_ref()); - let id: String = encoded.chars().next().expect("Can't be None").to_string(); - if let Some(address) = self.id_to_storage.get(&id) { - let permit_id = get_permit_id(address, account).await; - msg::reply(FTLogicEvent::PermitId(permit_id), 0) - .expect("Error in a reply `FTLogicEvent::PermitId`"); - } else { - msg::reply(FTLogicEvent::PermitId(0), 0) - .expect("Error in a reply `FTLogicEvent::PermitId`"); - } - } - - async fn check_and_increment_permit_id( - &self, - transaction_hash: H256, - account: &ActorId, - expected_id: &u128, - ) -> bool { - let encoded = hex::encode(account.as_ref()); - let id: String = encoded.chars().next().expect("Can't be None").to_string(); - if let Some(address) = self.id_to_storage.get(&id) { - return check_and_increment_permit_id(address, transaction_hash, account, *expected_id) - .await; - } - false - } - - async fn get_balance(&self, account: &ActorId) { - let encoded = hex::encode(account.as_ref()); - let id: String = encoded.chars().next().expect("Can't be None").to_string(); - if let Some(address) = self.id_to_storage.get(&id) { - let balance = get_balance(address, account).await; - msg::reply(FTLogicEvent::Balance(balance), 0) - .expect("Error in a reply `FTLogicEvent::Balance`"); - } else { - msg::reply(FTLogicEvent::Balance(0), 0) - .expect("Error in a reply `FTLogicEvent::Balance`"); - } - } - - fn clear(&mut self, transaction_hash: H256) { - self.transaction_status.remove(&transaction_hash); - } - - fn assert_main_contract(&self) { - assert_eq!( - self.ftoken_id, - msg::source(), - "Only main fungible token contract can send that message" - ); - } - - fn assert_admin(&self) { - assert_eq!( - self.admin, - msg::source(), - "Only admin can send that message" - ); - } -} - -#[gstd::async_main] -async fn main() { - let action: FTLogicAction = msg::load().expect("Error in loading `StorageAction`"); - let logic: &mut FTLogic = unsafe { FT_LOGIC.get_or_insert(Default::default()) }; - match action { - FTLogicAction::Message { - transaction_hash, - account, - payload, - } => logic.message(transaction_hash, &account, &payload).await, - FTLogicAction::UpdateStorageCodeHash(storage_code_hash) => { - logic.update_storage_hash(storage_code_hash) - } - FTLogicAction::Clear(transaction_hash) => logic.clear(transaction_hash), - FTLogicAction::GetBalance(account) => logic.get_balance(&account).await, - FTLogicAction::GetPermitId(account) => logic.get_permit_id(&account).await, - _ => {} - } -} - -#[no_mangle] -unsafe extern fn init() { - let init_config: InitFTLogic = msg::load().expect("Unable to decode `InitFTLogic`"); - let ft_logic = FTLogic { - admin: init_config.admin, - storage_code_hash: init_config.storage_code_hash, - ftoken_id: msg::source(), - ..Default::default() - }; - FT_LOGIC = Some(ft_logic); -} - -fn reply_err() { - msg::reply(FTLogicEvent::Err, 0).expect("Error in sending a reply `FTLogicEvent::Err`"); -} - -fn reply_ok() { - msg::reply(FTLogicEvent::Ok, 0).expect("Error in sending a reply `FTLogicEvent::Ok`"); -} - -fn send_delayed_clear(transaction_hash: H256) { - msg::send_delayed( - exec::program_id(), - FTLogicAction::Clear(transaction_hash), - 0, - DELAY, - ) - .expect("Error in sending a delayled message `FTStorageAction::Clear`"); -} - -#[no_mangle] -extern fn state() { - let logic = unsafe { FT_LOGIC.as_ref().expect("FTLogic is not initialized") }; - let logic_state = FTLogicState { - admin: logic.admin, - ftoken_id: logic.ftoken_id, - transaction_status: logic - .transaction_status - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - instructions: logic - .instructions - .iter() - .map(|(key, value)| (*key, value.clone())) - .collect(), - storage_code_hash: logic.storage_code_hash, - id_to_storage: logic - .id_to_storage - .iter() - .map(|(key, value)| (key.clone(), *value)) - .collect(), - }; - msg::reply(logic_state, 0).expect("Failed to share state"); -} diff --git a/contracts/sharded-fungible-token/logic/src/messages.rs b/contracts/sharded-fungible-token/logic/src/messages.rs deleted file mode 100644 index 29ebda853..000000000 --- a/contracts/sharded-fungible-token/logic/src/messages.rs +++ /dev/null @@ -1,178 +0,0 @@ -use crate::H256; -use gstd::{msg, ActorId}; -use sharded_fungible_token_storage_io::{FTStorageAction, FTStorageEvent}; - -pub async fn increase_balance( - transaction_hash: H256, - storage_id: &ActorId, - account: &ActorId, - amount: u128, -) -> Result<(), ()> { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::IncreaseBalance { - transaction_hash, - account: *account, - amount, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::IncreaseBalance`") - .await; - match result { - Ok(storage_event) => match storage_event { - FTStorageEvent::Ok => Ok(()), - _ => Err(()), - }, - Err(_) => Err(()), - } -} - -pub async fn decrease_balance( - transaction_hash: H256, - storage_id: &ActorId, - msg_source: &ActorId, - account: &ActorId, - amount: u128, -) -> Result<(), ()> { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::DecreaseBalance { - transaction_hash, - msg_source: *msg_source, - account: *account, - amount, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::DecreaseBalance`") - .await; - match result { - Ok(storage_event) => match storage_event { - FTStorageEvent::Ok => Ok(()), - _ => Err(()), - }, - Err(_) => Err(()), - } -} - -pub async fn approve( - transaction_hash: H256, - storage_id: &ActorId, - msg_source: &ActorId, - account: &ActorId, - amount: u128, -) -> Result<(), ()> { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::Approve { - transaction_hash, - msg_source: *msg_source, - account: *account, - amount, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::DecreaseBalance`") - .await; - match result { - Ok(storage_event) => match storage_event { - FTStorageEvent::Ok => Ok(()), - _ => Err(()), - }, - Err(_) => Err(()), - } -} - -pub async fn transfer( - transaction_hash: H256, - storage_id: &ActorId, - msg_source: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, -) -> Result<(), ()> { - let result = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::Transfer { - transaction_hash, - msg_source: *msg_source, - sender: *sender, - recipient: *recipient, - amount, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::Transfer`") - .await; - match result { - Ok(storage_event) => match storage_event { - FTStorageEvent::Ok => Ok(()), - _ => Err(()), - }, - Err(_) => Err(()), - } -} - -pub async fn get_permit_id(storage_id: &ActorId, account: &ActorId) -> u128 { - let reply = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::GetPermitId(*account), - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::GetPermitId") - .await - .expect("Unable to decode `FTStorageEvent"); - if let FTStorageEvent::PermitId(permit_id) = reply { - permit_id - } else { - 0 - } -} - -pub async fn check_and_increment_permit_id( - storage_id: &ActorId, - transaction_hash: H256, - account: &ActorId, - expected_permit_id: u128, -) -> bool { - let reply = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::IncrementPermitId { - transaction_hash, - account: *account, - expected_permit_id, - }, - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::IncrementPermitId") - .await - .expect("Unable to decode `FTStorageEvent"); - if let FTStorageEvent::Ok = reply { - return true; - } - false -} - -pub async fn get_balance(storage_id: &ActorId, account: &ActorId) -> u128 { - let reply = msg::send_for_reply_as::<_, FTStorageEvent>( - *storage_id, - FTStorageAction::GetBalance(*account), - 0, - 0, - ) - .expect("Error in sending a message `FTStorageAction::GetBalance") - .await - .expect("Unable to decode `FTStorageEvent"); - if let FTStorageEvent::Balance(balance) = reply { - balance - } else { - 0 - } -} diff --git a/contracts/sharded-fungible-token/src/lib.rs b/contracts/sharded-fungible-token/src/lib.rs deleted file mode 100644 index 4149b0aeb..000000000 --- a/contracts/sharded-fungible-token/src/lib.rs +++ /dev/null @@ -1,237 +0,0 @@ -#![no_std] - -use gstd::{collections::HashMap, exec, msg, prelude::*, prog::ProgramGenerator, ActorId}; -use primitive_types::H256; -use sharded_fungible_token_io::*; -use sharded_fungible_token_logic_io::{FTLogicAction, FTLogicEvent, InitFTLogic}; - -const DELAY: u32 = 600_000; - -#[derive(Default)] -struct FToken { - admin: ActorId, - ft_logic_id: ActorId, - transactions: HashMap, -} - -static mut FTOKEN: Option = None; - -impl FToken { - /// Accepts the payload message that will be sent to the logic token contract. - /// - /// Arguments: - /// * `transaction_id`: the id of the transaction indicated by the actor that has sent that message; - /// * `payload`: the message payload that will be sent to the logic token contract - async fn message(&mut self, transaction_id: u64, payload: &[u8]) { - // Get the transaction hash from `msg::source` and `transaction_id` - // Tracking the trandaction ids is a responsibility of the account or programs that sent that transaction. - let transaction_hash = get_hash(&msg::source(), transaction_id); - let transaction = self.transactions.get(&transaction_hash); - - match transaction { - None => { - // If transaction took place for the first time we set its status to `InProgress` - // and send message to the logic contract. - send_delayed_clear(transaction_hash); - self.transactions - .insert(transaction_hash, TransactionStatus::InProgress); - self.send_message_then_reply(transaction_hash, payload) - .await; - } - // The case when there was not enough gas to process the result of the message to the logic contract. - Some(transaction_status) => match transaction_status { - TransactionStatus::InProgress => { - self.send_message_then_reply(transaction_hash, payload) - .await; - } - TransactionStatus::Success => { - reply_ok(); - } - TransactionStatus::Failure => { - reply_err(); - } - }, - } - } - - async fn send_message_then_reply(&mut self, transaction_hash: H256, payload: &[u8]) { - let result = self.send_message(transaction_hash, payload).await; - //debug!("REPLY"); - match result { - Ok(()) => { - self.transactions - .insert(transaction_hash, TransactionStatus::Success); - reply_ok(); - } - Err(()) => { - self.transactions - .insert(transaction_hash, TransactionStatus::Failure); - reply_err(); - } - }; - } - - async fn send_message(&self, transaction_hash: H256, payload: &[u8]) -> Result<(), ()> { - let result = msg::send_for_reply_as::<_, FTLogicEvent>( - self.ft_logic_id, - FTLogicAction::Message { - transaction_hash, - account: msg::source(), - payload: payload.to_vec(), - }, - 0, - 0, - ) - .expect("Error in sending a message to the fungible logic contract") - .await; - match result { - Ok(FTLogicEvent::Ok) => Ok(()), - _ => Err(()), - } - } - - async fn get_balance(&self, account: &ActorId) { - let reply = msg::send_for_reply_as::<_, FTLogicEvent>( - self.ft_logic_id, - FTLogicAction::GetBalance(*account), - 0, - 0, - ) - .expect("Error in sending a message `FTLogicGetBalance") - .await - .expect("Unable to decode `FTLogicEvent"); - if let FTLogicEvent::Balance(balance) = reply { - msg::reply(FTokenEvent::Balance(balance), 0) - .expect("Error in a reply `FTokenEvent::Balance`"); - } - } - - async fn get_permit_id(&self, account: &ActorId) { - let reply = msg::send_for_reply_as::<_, FTLogicEvent>( - self.ft_logic_id, - FTLogicAction::GetPermitId(*account), - 0, - 0, - ) - .expect("Error in sending a message `FTLogic::GetPermitId") - .await - .expect("Unable to decode `FTLogicEvent"); - if let FTLogicEvent::PermitId(permit_id) = reply { - msg::reply(FTokenEvent::PermitId(permit_id), 0) - .expect("Error in a reply `FTokenEvent::PermitId`"); - } - } - - fn update_logic_contract(&mut self, ft_logic_code_hash: H256, storage_code_hash: H256) { - self.assert_admin(); - let (_message_id, ft_logic_id) = ProgramGenerator::create_program( - ft_logic_code_hash.into(), - InitFTLogic { - admin: msg::source(), - storage_code_hash, - }, - 0, - ) - .expect("Error in creating FToken Logic program"); - self.ft_logic_id = ft_logic_id; - } - - fn assert_admin(&self) { - assert!( - msg::source() == self.admin, - "Only admin can send that message" - ); - } - - fn clear(&mut self, transaction_hash: H256) { - self.transactions.remove(&transaction_hash); - } -} - -#[gstd::async_main] -async fn main() { - let bytes = msg::load_bytes().expect("Unable to load bytes"); - let ftoken: &mut FToken = unsafe { FTOKEN.as_mut().expect("The contract is not initialized") }; - - if bytes[0] == 0 { - let array: [u8; 8] = bytes[1..=8] - .try_into() - .expect("Unable to get an array from slice"); - let transaction_id = u64::from_ne_bytes(array); - let payload: Vec = bytes[9..].to_vec(); - ftoken.message(transaction_id, &payload).await; - } else { - let action = FTokenInnerAction::decode(&mut &bytes[..]) - .expect("Unable to decode `FTokenInnerAction`"); - match action { - FTokenInnerAction::UpdateLogicContract { - ft_logic_code_hash, - storage_code_hash, - } => ftoken.update_logic_contract(ft_logic_code_hash, storage_code_hash), - FTokenInnerAction::Clear(transaction_hash) => ftoken.clear(transaction_hash), - FTokenInnerAction::GetBalance(account) => ftoken.get_balance(&account).await, - FTokenInnerAction::GetPermitId(account) => ftoken.get_permit_id(&account).await, - _ => {} - } - } -} - -#[no_mangle] -unsafe extern fn init() { - let init_config: InitFToken = msg::load().expect("Unable to decode `InitFToken`"); - let (_message_id, ft_logic_id) = ProgramGenerator::create_program( - init_config.ft_logic_code_hash.into(), - InitFTLogic { - admin: msg::source(), - storage_code_hash: init_config.storage_code_hash, - }, - 0, - ) - .expect("Error in creating FToken Logic program"); - let ftoken = FToken { - admin: msg::source(), - ft_logic_id, - ..Default::default() - }; - - FTOKEN = Some(ftoken); -} - -fn reply_ok() { - msg::reply(FTokenEvent::Ok, 0).expect("Error in a reply `FTokenEvent::Ok`"); -} - -fn reply_err() { - msg::reply(FTokenEvent::Err, 0).expect("Error in a reply `FTokenEvent::Ok`"); -} - -pub fn get_hash(account: &ActorId, transaction_id: u64) -> H256 { - let account: [u8; 32] = (*account).into(); - let transaction_id = transaction_id.to_be_bytes(); - sp_core_hashing::blake2_256(&[account.as_slice(), transaction_id.as_slice()].concat()).into() -} - -fn send_delayed_clear(transaction_hash: H256) { - msg::send_delayed( - exec::program_id(), - FTokenAction::Clear(transaction_hash), - 0, - DELAY, - ) - .expect("Error in sending a delayled message `FTStorageAction::Clear`"); -} - -#[no_mangle] -extern fn state() { - let token = unsafe { FTOKEN.as_ref().expect("FToken is not initialized") }; - let token_state = FTokenState { - admin: token.admin, - ft_logic_id: token.ft_logic_id, - transactions: token - .transactions - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - }; - msg::reply(token_state, 0).expect("Failed to share state"); -} diff --git a/contracts/sharded-fungible-token/storage/Cargo.toml b/contracts/sharded-fungible-token/storage/Cargo.toml deleted file mode 100644 index e426b4b4d..000000000 --- a/contracts/sharded-fungible-token/storage/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "sharded-fungible-token-storage" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -sharded-fungible-token-storage-io.workspace = true -primitive-types.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -sharded-fungible-token-storage-io.workspace = true diff --git a/contracts/sharded-fungible-token/storage/build.rs b/contracts/sharded-fungible-token/storage/build.rs deleted file mode 100644 index 17199b0ec..000000000 --- a/contracts/sharded-fungible-token/storage/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use sharded_fungible_token_storage_io::FTStorageMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/sharded-fungible-token/storage/io/Cargo.toml b/contracts/sharded-fungible-token/storage/io/Cargo.toml deleted file mode 100644 index 22286d39e..000000000 --- a/contracts/sharded-fungible-token/storage/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "sharded-fungible-token-storage-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -primitive-types.workspace = true -gmeta.workspace = true diff --git a/contracts/sharded-fungible-token/storage/io/src/lib.rs b/contracts/sharded-fungible-token/storage/io/src/lib.rs deleted file mode 100644 index 69270bc8c..000000000 --- a/contracts/sharded-fungible-token/storage/io/src/lib.rs +++ /dev/null @@ -1,74 +0,0 @@ -#![no_std] - -use gmeta::{InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; -use primitive_types::H256; - -pub struct FTStorageMetadata; - -impl Metadata for FTStorageMetadata { - type Init = (); - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Default, Encode, Decode, TypeInfo, Debug)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct FTStorageState { - pub ft_logic_id: ActorId, - pub transaction_status: Vec<(H256, bool)>, - pub balances: Vec<(ActorId, u128)>, - pub approvals: Vec<(ActorId, Vec<(ActorId, u128)>)>, - pub permits: Vec<(ActorId, u128)>, -} - -#[derive(Encode, Decode, Debug, Copy, Clone, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTStorageAction { - GetBalance(ActorId), - GetPermitId(ActorId), - IncrementPermitId { - transaction_hash: H256, - account: ActorId, - expected_permit_id: u128, - }, - IncreaseBalance { - transaction_hash: H256, - account: ActorId, - amount: u128, - }, - DecreaseBalance { - transaction_hash: H256, - msg_source: ActorId, - account: ActorId, - amount: u128, - }, - Approve { - transaction_hash: H256, - msg_source: ActorId, - account: ActorId, - amount: u128, - }, - Transfer { - transaction_hash: H256, - msg_source: ActorId, - sender: ActorId, - recipient: ActorId, - amount: u128, - }, -} - -#[derive(Encode, Decode, Clone, Debug, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum FTStorageEvent { - Ok, - Err, - Balance(u128), - PermitId(u128), -} diff --git a/contracts/sharded-fungible-token/storage/src/lib.rs b/contracts/sharded-fungible-token/storage/src/lib.rs deleted file mode 100644 index 74a957b31..000000000 --- a/contracts/sharded-fungible-token/storage/src/lib.rs +++ /dev/null @@ -1,296 +0,0 @@ -#![no_std] - -use gstd::{collections::HashMap, msg, prelude::*, ActorId}; -use primitive_types::H256; -use sharded_fungible_token_storage_io::*; - -#[derive(Default)] -struct FTStorage { - ft_logic_id: ActorId, - transaction_status: HashMap, - balances: HashMap, - approvals: HashMap>, - permits: HashMap, -} - -static mut FT_STORAGE: Option = None; - -impl FTStorage { - fn get_permit_id(&self, account: &ActorId) { - let permit_id = self.permits.get(account).unwrap_or(&0); - msg::reply(FTStorageEvent::PermitId(*permit_id), 0).expect(""); - } - - fn check_and_increment_permit_id( - &mut self, - transaction_hash: H256, - account: &ActorId, - signed_permit_id: &u128, - ) { - self.assert_ft_contract(); - - // check transaction status - if let Some(status) = self.transaction_status.get(&transaction_hash) { - match status { - true => reply_ok(), - false => reply_err(), - }; - return; - } - - if self.permits.get(account).unwrap_or(&0) != signed_permit_id { - reply_err(); - return; - } - - self.permits - .entry(*account) - .and_modify(|id| *id += 1) - .or_insert(1); - reply_ok(); - } - - fn get_balance(&self, account: &ActorId) { - let balance = self.balances.get(account).unwrap_or(&0); - msg::reply(FTStorageEvent::Balance(*balance), 0).expect(""); - } - - fn decrease(&mut self, msg_source: &ActorId, sender: &ActorId, amount: u128) -> bool { - if let Some(balance) = self.balances.get_mut(sender) { - if *balance >= amount { - if msg_source == sender { - *balance -= amount; - return true; - } else if let Some(allowed_amount) = self - .approvals - .get_mut(sender) - .and_then(|m| m.get_mut(msg_source)) - { - if *allowed_amount >= amount { - *balance -= amount; - *allowed_amount -= amount; - return true; - } - } - } - } - false - } - fn transfer( - &mut self, - transaction_hash: H256, - msg_source: &ActorId, - sender: &ActorId, - recipient: &ActorId, - amount: u128, - ) { - self.assert_ft_contract(); - - // check transaction status - if let Some(status) = self.transaction_status.get(&transaction_hash) { - match status { - true => reply_ok(), - false => reply_err(), - }; - return; - } - - match self.decrease(msg_source, sender, amount) { - true => { - self.balances - .entry(*recipient) - .and_modify(|balance| *balance = (*balance).saturating_add(amount)) - .or_insert(amount); - - self.transaction_status.insert(transaction_hash, true); - reply_ok(); - } - false => { - self.transaction_status.insert(transaction_hash, false); - reply_err(); - } - } - } - - fn increase_balance(&mut self, transaction_hash: H256, account: &ActorId, amount: u128) { - self.assert_ft_contract(); - - // check transaction status - if let Some(status) = self.transaction_status.get(&transaction_hash) { - match status { - true => reply_ok(), - false => reply_err(), - }; - return; - } - - // increase balance - self.balances - .entry(*account) - .and_modify(|balance| *balance = (*balance).saturating_add(amount)) - .or_insert(amount); - - self.transaction_status.insert(transaction_hash, true); - reply_ok(); - } - - fn decrease_balance( - &mut self, - transaction_hash: H256, - msg_source: &ActorId, - account: &ActorId, - amount: u128, - ) { - self.assert_ft_contract(); - // check transaction status - if let Some(status) = self.transaction_status.get(&transaction_hash) { - match status { - true => reply_ok(), - false => reply_err(), - }; - return; - } - - // decrease balance - match self.decrease(msg_source, account, amount) { - true => { - self.transaction_status.insert(transaction_hash, true); - reply_ok(); - } - false => { - self.transaction_status.insert(transaction_hash, false); - reply_err(); - } - } - } - - fn approve( - &mut self, - transaction_hash: H256, - msg_source: &ActorId, - account: &ActorId, - amount: u128, - ) { - self.assert_ft_contract(); - - // check transaction status - if let Some(status) = self.transaction_status.get(&transaction_hash) { - match status { - true => reply_ok(), - false => reply_err(), - }; - return; - } - - self.approvals - .entry(*msg_source) - .and_modify(|accounts| { - accounts - .entry(*account) - .and_modify(|allowed_amount| { - *allowed_amount = (*allowed_amount).saturating_add(amount) - }) - .or_insert_with(|| amount); - }) - .or_insert_with(|| [(*account, amount)].into()); - - reply_ok(); - } - - fn assert_ft_contract(&self) { - assert!( - msg::source() == self.ft_logic_id, - "Only fungible logic token contract is allowed to call that action" - ); - } -} - -#[no_mangle] -unsafe extern fn handle() { - let action: FTStorageAction = msg::load().expect("Error in loading `StorageAction`"); - let storage: &mut FTStorage = FT_STORAGE.get_or_insert(Default::default()); - match action { - FTStorageAction::GetBalance(account) => storage.get_balance(&account), - FTStorageAction::GetPermitId(account) => storage.get_permit_id(&account), - FTStorageAction::IncrementPermitId { - transaction_hash, - account, - expected_permit_id, - } => storage.check_and_increment_permit_id(transaction_hash, &account, &expected_permit_id), - FTStorageAction::IncreaseBalance { - transaction_hash, - account, - amount, - } => storage.increase_balance(transaction_hash, &account, amount), - FTStorageAction::DecreaseBalance { - transaction_hash, - msg_source, - account, - amount, - } => storage.decrease_balance(transaction_hash, &msg_source, &account, amount), - FTStorageAction::Approve { - transaction_hash, - msg_source, - account, - amount, - } => storage.approve(transaction_hash, &msg_source, &account, amount), - FTStorageAction::Transfer { - transaction_hash, - msg_source, - sender, - recipient, - amount, - } => storage.transfer(transaction_hash, &msg_source, &sender, &recipient, amount), - } -} - -#[no_mangle] -unsafe extern fn init() { - let storage = FTStorage { - ft_logic_id: msg::source(), - ..Default::default() - }; - FT_STORAGE = Some(storage); -} - -fn reply_ok() { - msg::reply(FTStorageEvent::Ok, 0).expect("error in sending a reply `FTStorageEvent::Ok"); -} - -fn reply_err() { - msg::reply(FTStorageEvent::Err, 0).expect("error in sending a reply `FTStorageEvent::Err"); -} - -#[no_mangle] -extern fn state() { - let storage = unsafe { FT_STORAGE.as_ref().expect("Storage is not initialized") }; - let storage_state = FTStorageState { - ft_logic_id: storage.ft_logic_id, - transaction_status: storage - .transaction_status - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - balances: storage - .balances - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - approvals: storage - .approvals - .iter() - .map(|(key, value)| { - ( - *key, - value.iter().map(|(key, value)| (*key, *value)).collect(), - ) - }) - .collect(), - permits: storage - .permits - .iter() - .map(|(key, value)| (*key, *value)) - .collect(), - }; - msg::reply(storage_state, 0).expect("Failed to share state"); -} diff --git a/contracts/sharded-fungible-token/tests/high_load_tests.rs b/contracts/sharded-fungible-token/tests/high_load_tests.rs deleted file mode 100644 index 19b1ad9be..000000000 --- a/contracts/sharded-fungible-token/tests/high_load_tests.rs +++ /dev/null @@ -1,78 +0,0 @@ -pub mod utils; -use gtest::{Program, System}; -use utils::*; - -// Change this parameter to scale test -#[allow(dead_code)] -const ACCOUNTS_AMOUNT: u64 = 1000; - -#[allow(dead_code)] -fn gclient_high_load_mint() { - const FIRST_ID: u64 = 100; - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = FIRST_ID; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - while transaction_id < FIRST_ID + ACCOUNTS_AMOUNT { - // Mint tokens to account and check it - println!("id is {transaction_id}"); - ftoken.mint( - transaction_id, - transaction_id, - transaction_id, - amount, - false, - ); - transaction_id += 1; - } -} - -#[allow(dead_code)] -fn high_load_transfer() { - const FIRST_ID: u64 = 100; - - // Change this parameter to control ratio Transfer/Mint - const MINT_TRANSFER_RATIO: u64 = 10; - - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = FIRST_ID; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - let transfer_amount = amount / MINT_TRANSFER_RATIO as u128; - - while transaction_id < FIRST_ID + ACCOUNTS_AMOUNT / MINT_TRANSFER_RATIO { - // Mint tokens to account and check it - println!("id is {transaction_id}"); - ftoken.mint( - transaction_id, - transaction_id, - transaction_id, - amount, - false, - ); - transaction_id += 1; - } - - let last_id = transaction_id + ACCOUNTS_AMOUNT; - let mut sender_id = FIRST_ID; - while transaction_id < last_id { - // Each account with minted tokens transfers tokens MINT_TRANSFER_RATIO times - println!("user {sender_id} sending to {transaction_id}"); - ftoken.transfer( - transaction_id, - sender_id, - sender_id, - transaction_id, - transfer_amount, - false, - ); - - transaction_id += 1; - if transaction_id % MINT_TRANSFER_RATIO == 0 { - sender_id += 1; - } - } -} diff --git a/contracts/sharded-fungible-token/tests/mod.rs b/contracts/sharded-fungible-token/tests/mod.rs deleted file mode 100644 index 95adf51c8..000000000 --- a/contracts/sharded-fungible-token/tests/mod.rs +++ /dev/null @@ -1 +0,0 @@ -mod utils; diff --git a/contracts/sharded-fungible-token/tests/token_tests.rs b/contracts/sharded-fungible-token/tests/token_tests.rs deleted file mode 100644 index cb8ef1f32..000000000 --- a/contracts/sharded-fungible-token/tests/token_tests.rs +++ /dev/null @@ -1,341 +0,0 @@ -pub mod utils; -use gear_lib_old::sr25519; -use gstd::Encode; -use gtest::{Program, System}; -use hex_literal::hex; -use sharded_fungible_token_logic_io::*; -use sp_core::{sr25519::Pair as Sr25519Pair, Pair}; -use utils::*; - -// TODO: fix test -#[test] -#[ignore] -fn mint() { - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = 0; - let account: u64 = 100; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - // check balance before - ftoken.check_balance(account, 0); - // mint tokens - ftoken.mint(transaction_id, account, account, amount, false); - // check balance after - ftoken.check_balance(account, amount); - - // try to mint again with the same transaction id - ftoken.mint(transaction_id, account, account, amount, false); - // check balance - ftoken.check_balance(account, amount); - transaction_id += 1; - - // mint again - ftoken.mint(transaction_id, account, account, amount, false); - // check balance - ftoken.check_balance(account, 2 * amount); -} - -// TODO: fix test -#[test] -#[ignore] -fn burn() { - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = 0; - let account: u64 = 100; - let wrong_account: u64 = 101; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - // mint tokens - ftoken.mint(transaction_id, account, account, amount, false); - // check balance - ftoken.check_balance(account, amount); - transaction_id += 1; - - // burn token - ftoken.burn(transaction_id, account, account, amount / 2, false); - // check balance - ftoken.check_balance(account, amount / 2); - transaction_id += 1; - - // must fail since not approved account tries to burn tokens - ftoken.burn(transaction_id, wrong_account, account, amount / 10, true); - transaction_id += 1; - - // must fail since account has no enough tokens to burn - ftoken.burn(transaction_id, account, account, amount, true); -} - -// TODO: fix test -#[test] -#[ignore] -fn transfer() { - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = 0; - let sender: u64 = 100; - let recipient: u64 = 200; - let wrong_account: u64 = 101; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - // mint tokens - ftoken.mint(transaction_id, sender, sender, amount, false); - // check balance - ftoken.check_balance(sender, amount); - transaction_id += 1; - - ftoken.transfer( - transaction_id, - sender, - sender, - recipient, - amount / 10, - false, - ); - transaction_id += 1; - - // check balance - ftoken.check_balance(sender, amount - amount / 10); - ftoken.check_balance(recipient, amount / 10); - - // must fail since not approved account tries to transfer the tokens - ftoken.transfer( - transaction_id, - wrong_account, - sender, - recipient, - amount / 10, - true, - ); -} - -// TODO: fix test -#[test] -#[ignore] -fn approve() { - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = 0; - let sender: u64 = 100; - let recipient: u64 = 200; - let approved_account: u64 = 300; - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - // mint tokens - ftoken.mint(transaction_id, sender, sender, amount, false); - // check balance - ftoken.check_balance(sender, amount); - transaction_id += 1; - - ftoken.approve(transaction_id, sender, approved_account, amount / 2, false); - transaction_id += 1; - - ftoken.transfer( - transaction_id, - approved_account, - sender, - recipient, - amount / 10, - false, - ); - transaction_id += 1; - - // check balance - ftoken.check_balance(sender, amount - amount / 10); - ftoken.check_balance(recipient, amount / 10); - - // must fail since approved account tries to transfer more token than allowed amount - ftoken.transfer( - transaction_id, - approved_account, - sender, - recipient, - amount / 2, - true, - ); - transaction_id += 1; - - // approve one more time - ftoken.approve(transaction_id, sender, approved_account, amount / 10, false); - transaction_id += 1; - - ftoken.transfer( - transaction_id, - approved_account, - sender, - recipient, - amount / 2, - false, - ); - transaction_id += 1; - - // check balance - ftoken.check_balance(sender, amount - amount / 10 - amount / 2); - ftoken.check_balance(recipient, amount / 10 + amount / 2); - - // approve one more time for burn - ftoken.approve(transaction_id, sender, approved_account, amount / 10, false); - transaction_id += 1; - - // must fail since sender has no enough tokens - ftoken.burn(transaction_id, approved_account, sender, amount / 10, false); - - ftoken.check_balance(sender, amount - amount / 5 - amount / 2); -} - -// TODO: fix test -#[test] -#[ignore] -fn permit() { - let system = System::new(); - system.init_logger(); - let mut transaction_id: u64 = 0; - let mut permit_id: u128 = 0; - let sender: u64 = 100; // those who send permit - let approved: u64 = 200; // those who is permitted spend - let amount: u128 = 100_000; - let ftoken = Program::ftoken(&system); - - let pair = Sr25519Pair::from_seed(&hex!( - "9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" - )); - let owner = pair.public().0; - - ftoken.mint(transaction_id, sender, sender, amount, false); - ftoken.check_balance(sender, amount); - transaction_id += 1; - - let signature; - // Check that signing algorithm matches - { - let action_permit = PermitUnsigned { - owner_account: owner.into(), - approved_account: approved.into(), - amount, - permit_id, - }; - let message_vec = action_permit.encode(); - let message_bytes = message_vec.as_slice(); - - signature = pair.sign(message_bytes); - - assert!(sr25519::verify(signature.encode().as_slice(), message_bytes, owner).is_ok()); - } - - ftoken.check_permit_id(owner, 0); - - /* - * sender -> 100k tokens - * owner -> 0 tokens, permit_id 0 - * approved -> 0 tokens - */ - // Failing 'cause of invalid signature - ftoken.permit( - transaction_id, - sender, - owner.into(), - approved.into(), - amount * 2, - permit_id, - signature.clone(), - true, - ); - transaction_id += 1; - - // Sending tokens to owner_id and aprrove - ftoken.transfer(transaction_id, sender, sender, owner, amount, false); - transaction_id += 1; - ftoken.check_balance(owner, amount); - ftoken.check_permit_id(owner, permit_id); - - /* - * sender -> 0 tokens - * owner -> 100k tokens, permit_id 0 - * approved -> 0 tokens - */ - ftoken.permit( - transaction_id, - sender, - owner.into(), - approved.into(), - amount, - permit_id, - signature.clone(), - false, - ); - transaction_id += 1; - ftoken.transfer(transaction_id, approved, owner, sender, amount / 2, false); - /* - * sender -> 50k tokens - * owner -> 50k tokens, permit_id 1 - * approved -> 0 tokens - */ - ftoken.check_balance(sender, amount / 2); - ftoken.check_balance(owner, amount / 2); - ftoken.check_permit_id(owner, 1); - - // Failing cause of current permit_id is already executed - ftoken.permit( - transaction_id, - sender, - owner.into(), - approved.into(), - amount, - permit_id, - signature.clone(), - true, - ); - transaction_id += 1; - - // Failing cause of invalid permit_id sign - permit_id += 1; - ftoken.permit( - transaction_id, - sender, - owner.into(), - approved.into(), - amount, - permit_id, - signature, - true, - ); - transaction_id += 1; - /* - * sender -> 50k tokens - * owner -> 50k tokens, permit_id 1 - * approved -> 0 tokens - */ - ftoken.check_permit_id(owner, 1); - - let new_signature; - { - let action_permit = PermitUnsigned { - owner_account: owner.into(), - approved_account: approved.into(), - amount, - permit_id, - }; - let message_vec = action_permit.encode(); - let message_bytes = message_vec.as_slice(); - - new_signature = pair.sign(message_bytes); - - assert!(sr25519::verify(new_signature.encode().as_slice(), message_bytes, owner).is_ok()); - } - ftoken.permit( - transaction_id, - sender, - owner.into(), - approved.into(), - amount, - permit_id, - new_signature, - false, - ); - ftoken.check_permit_id(owner, 2); -} diff --git a/contracts/sharded-fungible-token/tests/utils.rs b/contracts/sharded-fungible-token/tests/utils.rs deleted file mode 100644 index 546ae3bfe..000000000 --- a/contracts/sharded-fungible-token/tests/utils.rs +++ /dev/null @@ -1,204 +0,0 @@ -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program, System}; -use sharded_fungible_token_io::*; -use sp_core::sr25519::Signature; - -#[allow(dead_code)] -pub trait FToken { - fn ftoken(system: &System) -> Program<'_>; - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn check_balance(&self, account: impl Into, expected_amount: u128); - fn check_permit_id(&self, account: [u8; 32], expected_permit_id: u128); - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool); - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: impl Into, - recipient: impl Into, - amount: u128, - error: bool, - ); - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ); - - #[allow(clippy::too_many_arguments)] - fn permit( - &self, - transaction_id: u64, - from: u64, - owner: ActorId, - approved_account: ActorId, - amount: u128, - permit_id: u128, - sign: Signature, - error: bool, - ); - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool); -} - -const HARDCODED_ACCOUNT: u64 = 100; - -impl FToken for Program<'_> { - fn ftoken(system: &System) -> Program<'_> { - let ftoken = Program::current_opt(system); - let storage_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - - let ft_logic_code_hash: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - let res = ftoken.send( - HARDCODED_ACCOUNT, - InitFToken { - storage_code_hash: storage_code_hash.into(), - ft_logic_code_hash: ft_logic_code_hash.into(), - }, - ); - assert!(!res.main_failed()); - ftoken - } - - fn mint(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Mint { - recipient: account.into(), - amount, - }; - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn burn(&self, transaction_id: u64, from: u64, account: u64, amount: u128, error: bool) { - let payload = LogicAction::Burn { - sender: account.into(), - amount, - }; - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn transfer( - &self, - transaction_id: u64, - from: u64, - sender: impl Into, - recipient: impl Into, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Transfer { - sender: sender.into(), - recipient: recipient.into(), - amount, - }; - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn approve( - &self, - transaction_id: u64, - from: u64, - approved_account: u64, - amount: u128, - error: bool, - ) { - let payload = LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }; - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn permit( - &self, - transaction_id: u64, - from: u64, - owner: ActorId, - approved_account: ActorId, - amount: u128, - permit_id: u128, - sign: Signature, - error: bool, - ) { - let payload = LogicAction::Permit { - owner_account: owner, - approved_account, - amount, - permit_id, - sign: sign.into(), - }; - self.send_message_and_check_res( - from, - FTokenAction::Message { - transaction_id, - payload, - }, - error, - ); - } - - fn check_balance(&self, account: impl Into, expected_amount: u128) { - let res = self.send(HARDCODED_ACCOUNT, FTokenAction::GetBalance(account.into())); - let payload = Log::builder() - .dest(HARDCODED_ACCOUNT) - .payload(FTokenEvent::Balance(expected_amount)); - assert!(res.contains(&payload)); - } - - fn check_permit_id(&self, account: [u8; 32], expected_permit_id: u128) { - let res = self.send(HARDCODED_ACCOUNT, FTokenAction::GetPermitId(account.into())); - let payload = Log::builder() - .dest(HARDCODED_ACCOUNT) - .payload(FTokenEvent::PermitId(expected_permit_id)); - assert!(res.contains(&payload)); - } - - fn send_message_and_check_res(&self, from: u64, payload: FTokenAction, error: bool) { - let res = self.send(from, payload); - let reply = if error { - FTokenEvent::Err.encode() - } else { - FTokenEvent::Ok.encode() - }; - - assert!(res.contains(&(from, reply))); - } -} diff --git a/contracts/staking/Cargo.toml b/contracts/staking/Cargo.toml deleted file mode 100644 index 111d7d3ff..000000000 --- a/contracts/staking/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "staking" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -staking-io.workspace = true -sharded-fungible-token-io.workspace = true -gmeta.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true - -# External binaries - -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true -sharded-fungible-token.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -staking-io.workspace = true diff --git a/contracts/staking/README.md b/contracts/staking/README.md deleted file mode 100644 index 3cb60b591..000000000 --- a/contracts/staking/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=staking/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/staking_io) - -# [Staking](https://wiki.gear-tech.io/docs/examples/DeFi/staking) - -### 🏗️ Building - -```sh -cargo b -r -p "staking*" -``` - -### ✅ Testing - -```sh -cargo t -r -p "staking*" -``` diff --git a/contracts/staking/build.rs b/contracts/staking/build.rs deleted file mode 100644 index 6da817f5e..000000000 --- a/contracts/staking/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use staking_io::StakingMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/staking/io/Cargo.toml b/contracts/staking/io/Cargo.toml deleted file mode 100644 index df7435a34..000000000 --- a/contracts/staking/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "staking-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/staking/io/src/lib.rs b/contracts/staking/io/src/lib.rs deleted file mode 100644 index 6579cfbe4..000000000 --- a/contracts/staking/io/src/lib.rs +++ /dev/null @@ -1,105 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{collections::BTreeMap, errors::Error as GstdError, prelude::*, ActorId}; - -pub type TransactionId = u64; - -pub struct StakingMetadata; - -impl Metadata for StakingMetadata { - type Init = In; - type Handle = InOut>; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Clone, Decode, Encode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct InitStaking { - pub staking_token_address: ActorId, - pub reward_token_address: ActorId, - pub distribution_time: u64, - pub reward_total: u128, -} - -#[derive(Debug, Default, Encode, Decode, TypeInfo, Clone, PartialEq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Staker { - pub balance: u128, - pub reward_allowed: u128, - pub reward_debt: u128, - pub distributed: u128, -} - -#[derive(Debug, Clone, Decode, Encode, TypeInfo, PartialEq, Eq)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StakingAction { - Stake(u128), - Withdraw(u128), - UpdateStaking(InitStaking), - GetReward, -} - -#[derive(Debug, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StakingEvent { - StakeAccepted(u128), - Updated, - Reward(u128), - Withdrawn(u128), -} - -#[derive(Debug, Clone, Default, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct IoStaking { - pub owner: ActorId, - pub staking_token_address: ActorId, - pub reward_token_address: ActorId, - pub tokens_per_stake: u128, - pub total_staked: u128, - pub distribution_time: u64, - pub produced_time: u64, - pub reward_total: u128, - pub all_produced: u128, - pub reward_produced: u128, - pub stakers: Vec<(ActorId, Staker)>, - pub transactions: BTreeMap>, - pub current_tid: TransactionId, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - ZeroAmount, - ZeroReward, - ZeroTime, - TransferTokens, - PreviousTxMustBeCompleted, - InsufficentBalance, - NotOwner, - StakerNotFound, - ContractError(String), -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Transaction { - pub id: TransactionId, - pub action: T, -} - -impl From for Error { - fn from(value: GstdError) -> Self { - Self::ContractError(value.to_string()) - } -} diff --git a/contracts/staking/src/lib.rs b/contracts/staking/src/lib.rs deleted file mode 100644 index 585932851..000000000 --- a/contracts/staking/src/lib.rs +++ /dev/null @@ -1,357 +0,0 @@ -#![no_std] - -use gstd::{collections::BTreeMap, collections::HashMap, exec, msg, prelude::*, ActorId}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; -use staking_io::*; - -#[derive(Debug, Clone, Default)] -struct Staking { - owner: ActorId, - staking_token_address: ActorId, - reward_token_address: ActorId, - tokens_per_stake: u128, - total_staked: u128, - distribution_time: u64, - produced_time: u64, - reward_total: u128, - all_produced: u128, - reward_produced: u128, - stakers: HashMap, - transactions: BTreeMap>, - current_tid: TransactionId, -} - -static mut STAKING: Option = None; -const DECIMALS_FACTOR: u128 = 10_u128.pow(20); - -impl Staking { - /// Transfers `amount` tokens from `sender` account to `recipient` account. - /// Arguments: - /// * `token_address`: token address - /// * `from`: sender account - /// * `to`: recipient account - /// * `amount_tokens`: amount of tokens - async fn transfer_tokens( - &mut self, - token_address: &ActorId, - from: &ActorId, - to: &ActorId, - amount_tokens: u128, - ) -> Result<(), Error> { - let payload = LogicAction::Transfer { - sender: *from, - recipient: *to, - amount: amount_tokens, - }; - - let transaction_id = self.current_tid; - self.current_tid = self.current_tid.saturating_add(99); - - let payload = FTokenAction::Message { - transaction_id, - payload, - }; - - let result = msg::send_for_reply_as(*token_address, payload, 0, 0) - .unwrap() - .await - .unwrap(); - - if let FTokenEvent::Err = result { - Err(Error::TransferTokens) - } else { - Ok(()) - } - } - - /// Calculates the reward produced so far - fn produced(&mut self) -> u128 { - let mut elapsed_time = exec::block_timestamp() - self.produced_time; - - if elapsed_time > self.distribution_time { - elapsed_time = self.distribution_time; - } - - self.all_produced - + self.reward_total.saturating_mul(elapsed_time as u128) - / self.distribution_time as u128 - } - - /// Updates the reward produced so far and calculates tokens per stake - fn update_reward(&mut self) { - let reward_produced_at_now = self.produced(); - - if reward_produced_at_now > self.reward_produced { - let produced_new = reward_produced_at_now - self.reward_produced; - - if self.total_staked > 0 { - self.tokens_per_stake = self - .tokens_per_stake - .saturating_add((produced_new * DECIMALS_FACTOR) / self.total_staked); - } - - self.reward_produced = self.reward_produced.saturating_add(produced_new); - } - } - - /// Calculates the maximum possible reward - /// The reward that the depositor would have received if he had initially paid this amount - /// Arguments: - /// `amount`: the number of tokens - fn get_max_reward(&self, amount: u128) -> u128 { - (amount * self.tokens_per_stake) / DECIMALS_FACTOR - } - - /// Calculates the reward of the staker that is currently available - /// The return value cannot be less than zero according to the algorithm - fn calc_reward(&mut self) -> Result { - match self.stakers.get(&msg::source()) { - Some(staker) => Ok(self.get_max_reward(staker.balance) + staker.reward_allowed - - staker.reward_debt - - staker.distributed), - None => Err(Error::StakerNotFound), - } - } - - /// Updates the staking contract. - /// Sets the reward to be distributed within distribution time - /// param 'config' - updated configuration - fn update_staking(&mut self, config: InitStaking) -> Result { - if msg::source() != self.owner { - return Err(Error::NotOwner); - } - - if config.reward_total == 0 { - return Err(Error::ZeroReward); - } - - if config.distribution_time == 0 { - return Err(Error::ZeroTime); - } - - self.staking_token_address = config.staking_token_address; - self.reward_token_address = config.reward_token_address; - self.distribution_time = config.distribution_time; - - self.update_reward(); - self.all_produced = self.reward_produced; - self.produced_time = exec::block_timestamp(); - self.reward_total = config.reward_total; - - Ok(StakingEvent::Updated) - } - - /// Stakes the tokens - /// Arguments: - /// `amount`: the number of tokens for the stake - async fn stake(&mut self, amount: u128) -> Result { - if amount == 0 { - return Err(Error::ZeroAmount); - } - - let token_address = self.staking_token_address; - - self.transfer_tokens(&token_address, &msg::source(), &exec::program_id(), amount) - .await?; - - self.update_reward(); - let amount_per_token = self.get_max_reward(amount); - - self.stakers - .entry(msg::source()) - .and_modify(|stake| { - stake.reward_debt = stake.reward_debt.saturating_add(amount_per_token); - stake.balance = stake.balance.saturating_add(amount); - }) - .or_insert(Staker { - reward_debt: amount_per_token, - balance: amount, - ..Default::default() - }); - self.total_staked = self.total_staked.saturating_add(amount); - Ok(StakingEvent::StakeAccepted(amount)) - } - - ///Sends reward to the staker - async fn send_reward(&mut self) -> Result { - self.update_reward(); - let reward = self.calc_reward()?; - - if reward == 0 { - return Err(Error::ZeroReward); - } - - let token_address = self.reward_token_address; - - self.transfer_tokens(&token_address, &exec::program_id(), &msg::source(), reward) - .await?; - - self.stakers - .entry(msg::source()) - .and_modify(|stake| stake.distributed = stake.distributed.saturating_add(reward)); - - Ok(StakingEvent::Reward(reward)) - } - - /// Withdraws the staked the tokens - /// Arguments: - /// `amount`: the number of withdrawn tokens - async fn withdraw(&mut self, amount: u128) -> Result { - if amount == 0 { - return Err(Error::ZeroAmount); - } - - self.update_reward(); - let amount_per_token = self.get_max_reward(amount); - - match self.stakers.get(&msg::source()) { - Some(staker) => { - if staker.balance < amount { - return Err(Error::InsufficentBalance); - } - } - None => return Err(Error::StakerNotFound), - }; - - let token_address = self.staking_token_address; - self.transfer_tokens(&token_address, &exec::program_id(), &msg::source(), amount) - .await?; - - let staker = self - .stakers - .get_mut(&msg::source()) - .ok_or(Error::StakerNotFound)?; - - staker.reward_allowed = staker.reward_allowed.saturating_add(amount_per_token); - staker.balance = staker.balance.saturating_sub(amount); - self.total_staked = self.total_staked.saturating_sub(amount); - - Ok(StakingEvent::Withdrawn(amount)) - } -} - -#[gstd::async_main] -async fn main() { - let staking = unsafe { STAKING.get_or_insert(Staking::default()) }; - - let action: StakingAction = msg::load().expect("Could not load Action"); - let msg_source = msg::source(); - - let _reply: Result = Err(Error::PreviousTxMustBeCompleted); - let _transaction_id = if let Some(Transaction { - id, - action: pend_action, - }) = staking.transactions.get(&msg_source) - { - if action != *pend_action { - msg::reply(_reply, 0) - .expect("Failed to encode or reply with `Result`"); - return; - } - *id - } else { - let transaction_id = staking.current_tid; - staking.current_tid = staking.current_tid.saturating_add(1); - staking.transactions.insert( - msg_source, - Transaction { - id: transaction_id, - action: action.clone(), - }, - ); - transaction_id - }; - let result = match action { - StakingAction::Stake(amount) => { - let result = staking.stake(amount).await; - staking.transactions.remove(&msg_source); - result - } - StakingAction::Withdraw(amount) => { - let result = staking.withdraw(amount).await; - staking.transactions.remove(&msg_source); - result - } - StakingAction::UpdateStaking(config) => { - let result = staking.update_staking(config); - staking.transactions.remove(&msg_source); - result - } - StakingAction::GetReward => { - let result = staking.send_reward().await; - staking.transactions.remove(&msg_source); - result - } - }; - msg::reply(result, 0).expect("Failed to encode or reply with `Result`"); -} - -#[no_mangle] -extern fn init() { - let config: InitStaking = msg::load().expect("Unable to decode InitConfig"); - - let mut staking = Staking { - owner: msg::source(), - ..Default::default() - }; - - let result = staking.update_staking(config); - let is_err = result.is_err(); - - msg::reply(result, 0) - .expect("Failed to encode or reply with `Result<(), Error>` from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } - - unsafe { STAKING = Some(staking) }; -} - -#[no_mangle] -extern fn state() { - let staking = unsafe { STAKING.take().expect("Unexpected error in taking state") }; - msg::reply::(staking.into(), 0) - .expect("Failed to encode or reply with `IoStaking` from `state()`"); -} - -impl From for IoStaking { - fn from(value: Staking) -> Self { - let Staking { - owner, - staking_token_address, - reward_token_address, - tokens_per_stake, - total_staked, - distribution_time, - produced_time, - reward_total, - all_produced, - reward_produced, - stakers, - transactions, - current_tid, - } = value; - - let stakers = stakers - .iter() - .map(|(id, staker)| (*id, staker.clone())) - .collect(); - - Self { - owner, - staking_token_address, - reward_token_address, - tokens_per_stake, - total_staked, - distribution_time, - produced_time, - reward_total, - all_produced, - reward_produced, - stakers, - transactions, - current_tid, - } - } -} diff --git a/contracts/staking/state/Cargo.toml b/contracts/staking/state/Cargo.toml deleted file mode 100644 index 40fcd4263..000000000 --- a/contracts/staking/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "staking-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -staking-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/staking/state/build.rs b/contracts/staking/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/staking/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/staking/state/src/lib.rs b/contracts/staking/state/src/lib.rs deleted file mode 100644 index 5ac54d254..000000000 --- a/contracts/staking/state/src/lib.rs +++ /dev/null @@ -1,21 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; -use staking_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = IoStaking; - - pub fn get_stakers(state: State) -> Vec<(ActorId, Staker)> { - state.stakers - } - - pub fn get_staker(state: State, address: ActorId) -> Option { - state - .stakers - .iter() - .find(|(id, _staker)| address.eq(id)) - .map(|(_, staker)| staker.clone()) - } -} diff --git a/contracts/staking/tests/node_test.rs b/contracts/staking/tests/node_test.rs deleted file mode 100644 index 91a2b2aad..000000000 --- a/contracts/staking/tests/node_test.rs +++ /dev/null @@ -1,118 +0,0 @@ -// use gclient::{EventProcessor, GearApi, Result}; -// use gstd::Encode; -// use staking::WASM_BINARY_OPT; -// use staking_io::{InitStaking, StakingAction}; - -// const USERS: &[u64] = &[1, 2, 3, 4, 5, 6, 7, 8]; - -// #[tokio::test] -// #[ignore] -// async fn init() -> Result<()> { -// let api = GearApi::dev() -// .await -// .expect("The node must be running for a gclient test"); - -// let mut listener = api.subscribe().await?; - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let staking = InitStaking { -// staking_token_address: USERS[1].into(), -// reward_token_address: USERS[2].into(), -// distribution_time: 10000, -// reward_total: 1000, -// }; - -// let staking_payload = staking.encode(); - -// let gas_info = api -// .calculate_upload_gas( -// None, -// WASM_BINARY_OPT.to_vec(), -// staking_payload.clone(), -// 0, -// true, -// ) -// .await?; - -// let (message_id, _program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// staking_payload, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// Ok(()) -// } - -// #[tokio::test] -// #[ignore] -// async fn stake_failed() -> Result<()> { -// let api = GearApi::dev().await?; - -// let mut listener = api.subscribe().await?; // Subscribing for events. - -// // Checking that blocks still running. -// assert!(listener.blocks_running().await?); - -// let init_staking = InitStaking { -// staking_token_address: USERS[1].into(), -// reward_token_address: USERS[2].into(), -// distribution_time: 10000, -// reward_total: 1000, -// }; - -// let init_staking_payload = init_staking.encode(); - -// let gas_info = api -// .calculate_upload_gas( -// None, -// WASM_BINARY_OPT.to_vec(), -// init_staking_payload.clone(), -// 0, -// true, -// ) -// .await?; - -// let (message_id, _program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// init_staking_payload, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.succeed()); - -// // Skip Init Staking Token -// // Skip Init Reward Token - -// let stake = StakingAction::Stake(1000); -// let stake_payload = stake.encode(); - -// let gas_info = api -// .calculate_upload_gas(None, WASM_BINARY_OPT.into(), stake_payload.clone(), 0, true) -// .await?; - -// let (message_id, _program_id, _hash) = api -// .upload_program_bytes( -// WASM_BINARY_OPT.to_vec(), -// gclient::now_micros().to_le_bytes(), -// stake_payload, -// gas_info.min_limit, -// 0, -// ) -// .await?; - -// assert!(listener.message_processed(message_id).await?.failed()); - -// Ok(()) -// } diff --git a/contracts/staking/tests/panic_test.rs b/contracts/staking/tests/panic_test.rs deleted file mode 100644 index 6eab62f6b..000000000 --- a/contracts/staking/tests/panic_test.rs +++ /dev/null @@ -1,166 +0,0 @@ -use gstd::{ActorId, Encode}; -use gtest::{Program, System}; -use staking_io::*; - -mod utils; -use utils::{FungibleToken, PROGRAMS}; - -fn init_staking(sys: &System) { - let staking = Program::current_opt(sys); - - let res = staking.send( - 4, - InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 10000, - reward_total: 1000, - }, - ); - - assert!(res.contains(&(4, Ok::(StakingEvent::Updated).encode()))); -} - -fn init_staking_token(sys: &System) -> FungibleToken<'_> { - let mut st_token = FungibleToken::initialize(sys); - - st_token.mint(1, 100000); - st_token.balance(1).contains(100000); - - st_token.mint(5, 10000); - st_token.balance(5).contains(10000); - - st_token.mint(6, 20000); - st_token.balance(6).contains(20000); - - st_token.mint(7, 20000); - st_token.balance(7).contains(20000); - - st_token.mint(8, 20000); - st_token.balance(8).contains(20000); - - st_token -} - -fn init_reward_token(sys: &System) { - let mut rw_token = FungibleToken::initialize(sys); - - rw_token.mint(1, 100000); - - rw_token.balance(1).contains(100000); -} - -#[test] -fn stake() { - let sys = System::new(); - init_staking(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let res = staking.send(5, StakingAction::Stake(0)); - assert!(res.contains(&(5, Err::(Error::ZeroAmount).encode()))); -} - -#[test] -fn update_staking() { - let sys = System::new(); - init_staking(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let res = staking.send( - 5, - StakingAction::UpdateStaking(InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 10000, - reward_total: 1000, - }), - ); - assert!(res.contains(&(5, Err::(Error::NotOwner).encode()))); - - let res = staking.send( - 4, - StakingAction::UpdateStaking(InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 10000, - reward_total: 0, - }), - ); - assert!(res.contains(&(4, Err::(Error::ZeroReward).encode()))); - - let res = staking.send( - 4, - StakingAction::UpdateStaking(InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 0, - reward_total: 1000, - }), - ); - println!("{:?}", res.decoded_log::>()); - assert!(res.contains(&(4, Err::(Error::ZeroTime).encode()))); -} - -// TODO: fix test -#[test] -#[ignore] -fn send_reward() { - let sys = System::new(); - init_staking(&sys); - init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let res = staking.send(5, StakingAction::GetReward); - - assert!(res.contains(&( - 5, - Err::(Error::StakerNotFound).encode() - ))); -} - -// TODO: fix test -#[test] -#[ignore] -fn withdraw() { - let sys = System::new(); - - init_staking(&sys); - let mut st_token = init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let id: ActorId = staking.id().into_bytes().into(); - st_token.approve(5, id, 1500); - - let res = staking.send(5, StakingAction::Stake(1500)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::StakeAccepted(1500)).encode() - ))); - st_token.approve(6, id, 2000); - let res = staking.send(6, StakingAction::Stake(2000)); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::StakeAccepted(2000)).encode() - ))); - - let res = staking.send(5, StakingAction::Withdraw(0)); - assert!(res.contains(&(5, Err::(Error::ZeroAmount).encode()))); - - let res = staking.send(7, StakingAction::Withdraw(1000)); - assert!(res.contains(&( - 7, - Err::(Error::StakerNotFound).encode() - ))); - - let res = staking.send(6, StakingAction::Withdraw(5000)); - assert!(res.contains(&( - 6, - Err::(Error::InsufficentBalance).encode() - ))); -} diff --git a/contracts/staking/tests/simple_test.rs b/contracts/staking/tests/simple_test.rs deleted file mode 100644 index afad36a0f..000000000 --- a/contracts/staking/tests/simple_test.rs +++ /dev/null @@ -1,459 +0,0 @@ -use gstd::{collections::HashMap, ActorId, Encode}; -use gtest::{Program, System}; -use staking_io::*; -mod utils; -use utils::{FungibleToken, PROGRAMS}; - -const DECIMALS_FACTOR: u128 = 10_u128.pow(20); - -#[derive(Debug, Default)] -struct Staking { - tokens_per_stake: u128, - total_staked: u128, - distribution_time: u64, - produced_time: u64, - reward_total: u128, - all_produced: u128, - reward_produced: u128, - stakers: HashMap, -} - -fn init_staking(sys: &System) { - let staking = Program::current_opt(sys); - - let res = staking.send( - 4, - InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 30000, - reward_total: 1000, - }, - ); - - assert!(res.contains(&(4, Ok::(StakingEvent::Updated).encode()))); -} - -fn init_staking_token(sys: &System) -> FungibleToken<'_> { - let mut st_token = FungibleToken::initialize(sys); - - st_token.mint(1, 100000); - st_token.balance(1).contains(100000); - - st_token.mint(4, 100000); - st_token.balance(4).contains(100000); - - st_token.mint(5, 10000); - st_token.balance(5).contains(10000); - - st_token.mint(6, 20000); - st_token.balance(6).contains(20000); - - st_token.mint(7, 20000); - st_token.balance(7).contains(20000); - - st_token.mint(8, 20000); - st_token.balance(8).contains(20000); - - st_token -} - -fn init_reward_token(sys: &System) -> FungibleToken<'_> { - let mut rw_token = FungibleToken::initialize(sys); - - rw_token.mint(1, 100000); - rw_token.balance(1).contains(100000); - - rw_token -} - -/// Sets the reward to be distributed within distribution time -/// param 'reward' The value of the distributed reward -fn update_staking(staking: &mut Staking, reward: u128, time: u64) { - if reward == 0 { - panic!("update_staking(): reward is null"); - } - - staking.distribution_time = 30000; - update_reward(staking, time); - staking.all_produced = staking.reward_produced; - staking.produced_time = time; - staking.reward_total = reward; -} - -/// Calculates the reward produced so far -fn produced(staking: &Staking, time: u64) -> u128 { - let mut elapsed_time = time - staking.produced_time; - - if elapsed_time > staking.distribution_time { - elapsed_time = staking.distribution_time; - } - - staking.all_produced - + staking.reward_total.saturating_mul(elapsed_time as u128) - / staking.distribution_time as u128 -} - -/// Calculates the maximum possible reward -/// The reward that the depositor would have received if he had initially paid this amount -/// Arguments: -/// `amount`: the number of tokens -fn get_max_reward(staking: &Staking, amount: u128) -> u128 { - (amount * staking.tokens_per_stake) / DECIMALS_FACTOR -} - -/// Updates the reward produced so far and calculates tokens per stake -fn update_reward(staking: &mut Staking, time: u64) { - let reward_produced_at_now = produced(staking, time); - - if reward_produced_at_now > staking.reward_produced { - let produced_new = reward_produced_at_now - staking.reward_produced; - - if staking.total_staked > 0 { - staking.tokens_per_stake = staking - .tokens_per_stake - .saturating_add((produced_new * DECIMALS_FACTOR) / staking.total_staked); - } - - staking.reward_produced = staking.reward_produced.saturating_add(produced_new); - } -} - -/// Calculates the reward of the staker that is currently available -fn calc_reward(staking: &Staking, source: &ActorId) -> u128 { - if let Some(staker) = staking.stakers.get(source) { - return get_max_reward(staking, staker.balance) + staker.reward_allowed - - staker.reward_debt - - staker.distributed; - } - - panic!("calc_reward(): Staker {source:?} not found"); -} - -// TODO: fix test -#[test] -#[ignore] -fn stake() { - let sys = System::new(); - init_staking(&sys); - let mut st_token = init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let id: ActorId = staking.id().into_bytes().into(); - st_token.approve(5, id, 1000); - let res = staking.send(5, StakingAction::Stake(1000)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::StakeAccepted(1000)).encode() - ))); - st_token.approve(6, id, 3000); - let res = staking.send(6, StakingAction::Stake(3000)); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::StakeAccepted(3000)).encode() - ))); -} - -// TODO: fix test -#[test] -#[ignore] -fn update_staking_test() { - let sys = System::new(); - init_staking(&sys); - init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let staking = sys.get_program(1).unwrap(); - - let res = staking.send( - 4, - StakingAction::UpdateStaking(InitStaking { - staking_token_address: PROGRAMS[1].into(), - reward_token_address: PROGRAMS[2].into(), - distribution_time: 30000, - reward_total: 1000, - }), - ); - assert!(res.contains(&(4, Ok::(StakingEvent::Updated).encode()))); -} - -// TODO: fix test -#[test] -#[ignore] -fn send_reward() { - let sys = System::new(); - init_staking(&sys); - let mut st_token = init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let st = sys.get_program(1).unwrap(); - - let time = sys.block_timestamp(); - - let mut staking = Staking { - ..Default::default() - }; - - update_staking(&mut staking, 1000, time); - - st_token.approve(5, st.id().into_bytes(), 1500); - let res = st.send(5, StakingAction::Stake(1500)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::StakeAccepted(1500)).encode() - ))); - - update_reward(&mut staking, time); - staking.stakers.insert( - 5.into(), - Staker { - reward_debt: get_max_reward(&staking, 1500), - balance: 1500, - ..Default::default() - }, - ); - - staking.total_staked = 1500; - - sys.spend_blocks(2); - - st_token.approve(6, st.id().into_bytes(), 2000); - let res = st.send(6, StakingAction::Stake(2000)); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::StakeAccepted(2000)).encode() - ))); - - update_reward(&mut staking, time + 6000); - staking.stakers.insert( - 6.into(), - Staker { - reward_debt: get_max_reward(&staking, 2000), - balance: 2000, - ..Default::default() - }, - ); - - staking.total_staked = 3500; - - sys.spend_blocks(1); - - update_reward(&mut staking, time + 9000); - let reward = calc_reward(&staking, &5.into()); - - staking - .stakers - .entry(5.into()) - .and_modify(|stake| stake.distributed = stake.distributed.saturating_add(reward)); - - let res = st.send(5, StakingAction::GetReward); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::Reward(reward)).encode() - ))); - - sys.spend_blocks(1); - - update_reward(&mut staking, time + 12000); - let reward = calc_reward(&staking, &6.into()); - - staking - .stakers - .entry(6.into()) - .and_modify(|stake| stake.distributed = stake.distributed.saturating_add(reward)); - - let res = st.send(6, StakingAction::GetReward); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::Reward(reward)).encode() - ))); -} - -// TODO: fix test -#[test] -#[ignore] -fn withdraw() { - let sys = System::new(); - - init_staking(&sys); - let mut st_token = init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let st = sys.get_program(1).unwrap(); - - let time = sys.block_timestamp(); - - let mut staking = Staking { - ..Default::default() - }; - - update_staking(&mut staking, 1000, time); - let id: ActorId = st.id().into_bytes().into(); - st_token.approve(5, id, 1500); - let res = st.send(5, StakingAction::Stake(1500)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::StakeAccepted(1500)).encode() - ))); - - update_reward(&mut staking, time); - staking.stakers.insert( - 5.into(), - Staker { - reward_debt: get_max_reward(&staking, 1500), - balance: 1500, - ..Default::default() - }, - ); - - staking.total_staked = 1500; - - sys.spend_blocks(2); - - st_token.approve(6, st.id().into_bytes(), 2000); - let res = st.send(6, StakingAction::Stake(2000)); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::StakeAccepted(2000)).encode() - ))); - - update_reward(&mut staking, time + 6000); - staking.stakers.insert( - 6.into(), - Staker { - reward_debt: get_max_reward(&staking, 2000), - balance: 2000, - ..Default::default() - }, - ); - - staking.total_staked = 3500; - - sys.spend_blocks(1); - - let res = st.send(5, StakingAction::Withdraw(500)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::Withdrawn(500)).encode() - ))); - - update_reward(&mut staking, time + 9000); - let max_reward = get_max_reward(&staking, 500); - let actor_id: &ActorId = &5.into(); - let opt = staking.stakers.get_mut(actor_id); - if let Some(staker) = opt { - staker.reward_allowed = staker.reward_allowed.saturating_add(max_reward); - - staker.balance = staker.balance.saturating_sub(500); - staking.total_staked -= 500; - } - - sys.spend_blocks(1); - - update_reward(&mut staking, time + 12000); - let reward = calc_reward(&staking, &5.into()); - - staking - .stakers - .entry(5.into()) - .and_modify(|stake| stake.distributed = stake.distributed.saturating_add(reward)); - - let res = st.send(5, StakingAction::GetReward); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::Reward(reward)).encode() - ))); - - sys.spend_blocks(2); - - update_reward(&mut staking, time + 18000); - let reward = calc_reward(&staking, &6.into()); - - staking - .stakers - .entry(6.into()) - .and_modify(|stake| stake.distributed = stake.distributed.saturating_add(reward)); - - let res = st.send(6, StakingAction::GetReward); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::Reward(reward)).encode() - ))); -} - -// TODO: fix test -#[test] -#[ignore] -fn meta_tests() { - let sys = System::new(); - init_staking(&sys); - let mut st_token = init_staking_token(&sys); - init_reward_token(&sys); - sys.init_logger(); - let st = sys.get_program(1).unwrap(); - - let time = sys.block_timestamp(); - - let mut staking = Staking { - distribution_time: 30000, - ..Default::default() - }; - - update_staking(&mut staking, 1000, time); - - st_token.approve(5, st.id().into_bytes(), 1500); - let res = st.send(5, StakingAction::Stake(1500)); - assert!(res.contains(&( - 5, - Ok::(StakingEvent::StakeAccepted(1500)).encode() - ))); - - update_reward(&mut staking, time); - staking.stakers.insert( - 5.into(), - Staker { - reward_debt: get_max_reward(&staking, 1500), - balance: 1500, - ..Default::default() - }, - ); - - staking.total_staked = 1500; - - sys.spend_blocks(6); - - st_token.approve(6, st.id().into_bytes(), 2000); - let res = st.send(6, StakingAction::Stake(2000)); - assert!(res.contains(&( - 6, - Ok::(StakingEvent::StakeAccepted(2000)).encode() - ))); - - update_reward(&mut staking, time + 6000); - staking.stakers.insert( - 6.into(), - Staker { - reward_debt: get_max_reward(&staking, 2000), - balance: 2000, - ..Default::default() - }, - ); - - staking.total_staked = 3500; - let stakers: HashMap = staking.stakers.clone().into_iter().collect(); - let state: IoStaking = st.read_state(0).expect("Can't read state"); - - assert_eq!(state.stakers.len(), stakers.len()); - - let actor_id: &ActorId = &5.into(); - let staker = staking.stakers.get(actor_id).unwrap(); - - let (_id, state_staker) = state - .stakers - .iter() - .find(|(id, _staker)| id.eq(actor_id)) - .expect("Can't find id"); - assert_eq!(state_staker, staker); -} diff --git a/contracts/staking/tests/utils/common.rs b/contracts/staking/tests/utils/common.rs deleted file mode 100644 index 654a4a2a4..000000000 --- a/contracts/staking/tests/utils/common.rs +++ /dev/null @@ -1,55 +0,0 @@ -use convert::identity; -use gstd::prelude::*; -use gtest::{Log, RunResult as InnerRunResult}; -use marker::PhantomData; - -pub trait TransactionalProgram { - fn previous_mut_transaction_id(&mut self) -> &mut u64; - - fn transaction_id(&mut self) -> u64 { - let tx_id = self.previous_mut_transaction_id(); - - *tx_id = tx_id.wrapping_add(1); - - *tx_id - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - event: fn(T) -> R, - ghost_data: PhantomData, -} - -impl RunResult { - pub fn new(result: InnerRunResult, event: fn(T) -> R) -> Self { - Self { - result, - event, - ghost_data: PhantomData, - } - } - - #[track_caller] - fn assert_contains(self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - fn common_succeed(self, value: T, wrap: fn(R) -> V) { - let event = (self.event)(value); - - self.assert_contains(wrap(event)); - } - - #[track_caller] - pub fn contains(self, value: T) { - self.common_succeed(value, identity); - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(result.contains(&Log::builder().payload(payload))); -} diff --git a/contracts/staking/tests/utils/ftoken.rs b/contracts/staking/tests/utils/ftoken.rs deleted file mode 100644 index c4ab02d98..000000000 --- a/contracts/staking/tests/utils/ftoken.rs +++ /dev/null @@ -1,88 +0,0 @@ -use super::{RunResult, TransactionalProgram, FOREIGN_USER}; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; - -pub struct FungibleToken<'a>(InnerProgram<'a>, u64); - -impl TransactionalProgram for FungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> FungibleToken<'a> { - #[track_caller] - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file( - system, - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm", - ); - let storage_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm", - ) - .into(); - let logic_code_id: [u8; 32] = system - .submit_code_file( - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm", - ) - .into(); - - assert!(!program - .send( - FOREIGN_USER, - InitFToken { - storage_code_hash: storage_code_id.into(), - ft_logic_code_hash: logic_code_id.into(), - }, - ) - .main_failed()); - - Self(program, 0) - } - - #[track_caller] - pub fn mint(&mut self, recipient: u64, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - FOREIGN_USER, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Mint { - recipient: recipient.into(), - amount, - }, - }, - )) - } - - #[track_caller] - pub fn approve(&mut self, from: u64, approved_account: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - from, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }, - }, - )); - } - - pub fn balance(&self, actor_id: impl Into) -> RunResult { - RunResult::new( - self.0 - .send(FOREIGN_USER, FTokenAction::GetBalance(actor_id.into())), - FTokenEvent::Balance, - ) - } -} - -fn assert_ft_token_event_ok(run_result: InnerRunResult) { - assert!(run_result.contains(&Log::builder().payload(FTokenEvent::Ok))) -} diff --git a/contracts/staking/tests/utils/mod.rs b/contracts/staking/tests/utils/mod.rs deleted file mode 100644 index b64b89594..000000000 --- a/contracts/staking/tests/utils/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -mod ftoken; -pub use ftoken::*; - -mod common; -pub use common::*; - -pub const FOREIGN_USER: u64 = 12345678; -pub const PROGRAMS: &[u64] = &[1, 2, 3]; diff --git a/contracts/student-nft/Cargo.toml b/contracts/student-nft/Cargo.toml deleted file mode 100644 index abc89f99f..000000000 --- a/contracts/student-nft/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "student-nft" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -student-nft-io.workspace = true -gstd.workspace = true - -[build-dependencies] -student-nft-io.workspace = true -gear-wasm-builder.workspace = true - -[dev-dependencies] -gtest.workspace = true -gstd.workspace = true -tokio.workspace = true -gclient.workspace = true diff --git a/contracts/student-nft/README.md b/contracts/student-nft/README.md deleted file mode 100644 index ceeecff43..000000000 --- a/contracts/student-nft/README.md +++ /dev/null @@ -1,26 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=student-nft/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/student_nft_io) - -# Student NFT - -A special NFT implementation for Gear Academy students. Learn, react, upvote, comment! - -### 🏗️ Building - -```sh -cargo b -r -p "student-nft*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "student-nft*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "student-nft*" -``` diff --git a/contracts/student-nft/build.rs b/contracts/student-nft/build.rs deleted file mode 100644 index 836b5164c..000000000 --- a/contracts/student-nft/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use student_nft_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/student-nft/io/Cargo.toml b/contracts/student-nft/io/Cargo.toml deleted file mode 100644 index 06745ddc1..000000000 --- a/contracts/student-nft/io/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "student-nft-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true diff --git a/contracts/student-nft/io/src/lib.rs b/contracts/student-nft/io/src/lib.rs deleted file mode 100644 index f2dca4a3d..000000000 --- a/contracts/student-nft/io/src/lib.rs +++ /dev/null @@ -1,262 +0,0 @@ -#![no_std] - -use gmeta::{In, InOut, Metadata, Out}; -use gstd::{prelude::*, ActorId}; - -pub type NftId = u128; -pub type CourseId = u128; -pub type EmoteId = u128; -pub type LessonId = u64; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = In; - type Handle = InOut; - type Others = (); - type Reply = (); - type Signal = (); - type State = Out; -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StudentNftAction { - Mint, - CreateCourse { - name: String, - description: String, - }, - AddCourseHelper { - course_id: CourseId, - helper: ActorId, - }, - RemoveCourseHelper { - course_id: CourseId, - helper: ActorId, - }, - StartCourse { - course_id: CourseId, - }, - AddLesson { - course_id: CourseId, - lesson: Lesson, - }, - ApproveHw { - nft_id: NftId, - course_id: CourseId, - lesson_id: LessonId, - solution_url: String, - comment: Option, - rate: u8, - }, - Emote { - id: EmoteId, - action: EmoteAction, - }, - AddLessonReview { - course_id: CourseId, - lesson_id: LessonId, - review: String, - }, - FinishCourse { - course_id: CourseId, - }, - CompleteCourse { - course_id: CourseId, - }, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum StudentNftEvent { - Minted { - user: ActorId, - id: NftId, - }, - CourseCreated { - owner: ActorId, - id: CourseId, - }, - CourseHelperAdded { - id: CourseId, - helper: ActorId, - }, - CourseHelperRemoved { - id: CourseId, - helper: ActorId, - }, - CourseStarted { - user: ActorId, - id: CourseId, - }, - LessonAdded { - course_id: CourseId, - }, - HwApproved { - course_id: CourseId, - nft_id: NftId, - hw: Hw, - }, - Emote { - user: ActorId, - action: EmoteAction, - }, - LessonReviewAdded { - user: ActorId, - course_id: CourseId, - lesson_id: LessonId, - review: String, - }, - CourseFinished { - course_id: CourseId, - }, - CourseCompleted { - user: ActorId, - course_id: CourseId, - }, - Error(String), -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct StudentNftInit {} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct EmoteState { - pub upvotes: Vec, - pub reactions: Vec<(ActorId, String)>, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct StudentNftState { - pub nfts: Vec<(NftId, Nft)>, - pub nft_owners: Vec<(ActorId, NftId)>, - pub courses: Vec<(CourseId, Course)>, - pub emotes: Vec<(EmoteId, EmoteState)>, - pub nft_nonce: NftId, - pub course_nonce: CourseId, - pub emote_nonce: EmoteId, -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Nft { - pub owner: ActorId, - pub actual_courses: Vec, -} - -impl Nft { - pub fn new(owner: &ActorId) -> Self { - Nft { - owner: *owner, - actual_courses: Vec::new(), - } - } -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct ActualCourse { - pub id: CourseId, - pub hws: Vec, - pub is_completed: bool, -} - -impl ActualCourse { - pub fn new(id: CourseId) -> Self { - ActualCourse { - id, - hws: Vec::new(), - is_completed: false, - } - } -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Hw { - pub lesson_id: LessonId, - pub solution_url: String, - pub comment: Option, - pub rate: u8, - pub check_date: i64, -} - -impl Hw { - pub fn new( - lesson_id: LessonId, - solution_url: String, - comment: Option, - rate: u8, - check_date: i64, - ) -> Self { - Hw { - lesson_id, - solution_url, - comment, - rate, - check_date, - } - } -} - -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Course { - pub owner: ActorId, - pub owner_helpers: Vec, - pub name: String, - pub description: String, - pub lessons: Vec, - /// Identifier of associated `Emote` struct. - pub emote_id: EmoteId, - pub is_finished: bool, -} - -impl Course { - pub fn new(owner: &ActorId, name: String, description: String, emote_id: EmoteId) -> Self { - Course { - owner: *owner, - owner_helpers: Vec::new(), - name, - description, - lessons: Vec::new(), - emote_id, - is_finished: false, - } - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Lesson { - pub name: String, - pub description: String, - pub media_url: String, - pub thumb_url: String, - pub reviews: Vec<(ActorId, String)>, - /// Identifier of associated `Emote` struct. - pub emote_id: EmoteId, - pub is_provide_hw: bool, -} - -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum EmoteAction { - Upvote, - Reaction { emoji: Option }, -} diff --git a/contracts/student-nft/src/lib.rs b/contracts/student-nft/src/lib.rs deleted file mode 100644 index 74c1a44b8..000000000 --- a/contracts/student-nft/src/lib.rs +++ /dev/null @@ -1,502 +0,0 @@ -#![no_std] - -use gstd::{ - collections::{HashMap, HashSet}, - exec, msg, - prelude::*, - ActorId, -}; -use student_nft_io::*; - -#[derive(Debug, Default)] -pub struct Emote { - pub upvotes: HashSet, - pub reactions: HashMap, -} - -impl From<&Emote> for EmoteState { - fn from(value: &Emote) -> Self { - EmoteState { - upvotes: value.upvotes.iter().copied().collect(), - reactions: value - .reactions - .iter() - .map(|(k, v)| (*k, v.clone())) - .collect(), - } - } -} - -#[derive(Debug, Default)] -struct StudentNFT { - nfts: HashMap, - nft_owners: HashMap, - courses: HashMap, - emotes: HashMap, - - nft_nonce: NftId, - course_nonce: CourseId, - emote_nonce: EmoteId, -} - -impl From<&StudentNFT> for StudentNftState { - fn from(value: &StudentNFT) -> Self { - StudentNftState { - nfts: value.nfts.iter().map(|(k, v)| (*k, v.clone())).collect(), - nft_owners: value.nft_owners.iter().map(|(k, v)| (*k, *v)).collect(), - courses: value.courses.iter().map(|(k, v)| (*k, v.clone())).collect(), - emotes: value.emotes.iter().map(|(k, v)| (*k, v.into())).collect(), - nft_nonce: value.nft_nonce, - course_nonce: value.course_nonce, - emote_nonce: value.emote_nonce, - } - } -} - -static mut STUDENT_NFT: Option = None; - -fn process_mint(student_nft: &mut StudentNFT, user: &ActorId) -> StudentNftEvent { - let Some(next_nft_nonce) = student_nft.nft_nonce.checked_add(1) else { - return StudentNftEvent::Error("Math overflow.".to_owned()); - }; - - if student_nft.nft_owners.contains_key(user) { - return StudentNftEvent::Error("User already has student nft.".to_owned()); - } - - student_nft.nft_owners.insert(*user, next_nft_nonce); - student_nft.nft_nonce = next_nft_nonce; - student_nft.nfts.insert(next_nft_nonce, Nft::new(user)); - - StudentNftEvent::Minted { - user: *user, - id: next_nft_nonce, - } -} - -fn process_create_course( - student_nft: &mut StudentNFT, - owner: &ActorId, - name: String, - description: String, -) -> StudentNftEvent { - let Some(next_course_nonce) = student_nft.course_nonce.checked_add(1) else { - return StudentNftEvent::Error("Math overflow.".to_owned()); - }; - - let Some(next_emote_nonce) = student_nft.emote_nonce.checked_add(1) else { - return StudentNftEvent::Error("Math overflow.".to_owned()); - }; - - student_nft.course_nonce = next_course_nonce; - student_nft.emote_nonce = next_emote_nonce; - student_nft.courses.insert( - next_course_nonce, - Course::new(owner, name, description, next_emote_nonce), - ); - student_nft - .emotes - .insert(next_emote_nonce, Emote::default()); - - StudentNftEvent::CourseCreated { - owner: *owner, - id: next_course_nonce, - } -} - -fn process_add_course_helper( - student_nft: &mut StudentNFT, - owner: &ActorId, - id: CourseId, - helper: ActorId, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&id) { - if owner != &course.owner { - return StudentNftEvent::Error("Only owner can add more helpers.".to_owned()); - } - - if course.owner_helpers.contains(&helper) { - return StudentNftEvent::Error("Helper already added.".to_owned()); - } - - course.owner_helpers.push(helper); - StudentNftEvent::CourseHelperAdded { id, helper } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_remove_course_helper( - student_nft: &mut StudentNFT, - owner: &ActorId, - id: CourseId, - helper: ActorId, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&id) { - if owner != &course.owner { - return StudentNftEvent::Error("Only owner can remove helpers.".to_owned()); - } - - if !course.owner_helpers.contains(&helper) { - return StudentNftEvent::Error("Helper not found.".to_owned()); - } - - let helpers: Vec = course - .owner_helpers - .iter() - .filter(|&h| h != &helper) - .copied() - .collect(); - - course.owner_helpers = helpers; - StudentNftEvent::CourseHelperRemoved { id, helper } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_add_lesson( - student_nft: &mut StudentNFT, - source: &ActorId, - id: CourseId, - lesson: Lesson, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&id) { - if source != &course.owner && !course.owner_helpers.contains(source) { - return StudentNftEvent::Error( - "Only owner or helpers can add more lessons.".to_owned(), - ); - } - - if course.is_finished { - return StudentNftEvent::Error("Provided course is finished.".to_owned()); - } - - let Some(next_emote_nonce) = student_nft.emote_nonce.checked_add(1) else { - return StudentNftEvent::Error("Math overflow.".to_owned()); - }; - - student_nft.emote_nonce = next_emote_nonce; - student_nft - .emotes - .insert(next_emote_nonce, Emote::default()); - - course.lessons.push(Lesson { - emote_id: next_emote_nonce, - ..lesson - }); - StudentNftEvent::LessonAdded { course_id: id } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_start_course( - student_nft: &mut StudentNFT, - user: &ActorId, - id: CourseId, -) -> StudentNftEvent { - if let Some(nft_id) = student_nft.nft_owners.get(user) { - if student_nft.courses.get(&id).is_none() { - return StudentNftEvent::Error("Provided course does not exist.".to_owned()); - }; - - let Some(nft) = student_nft.nfts.get_mut(nft_id) else { - return StudentNftEvent::Error("Invalid nft id.".to_owned()); - }; - - if nft.actual_courses.iter().any(|ac| ac.id == id) { - return StudentNftEvent::Error("Course already started.".to_owned()); - } - - nft.actual_courses.push(ActualCourse::new(id)); - StudentNftEvent::CourseStarted { user: *user, id } - } else { - StudentNftEvent::Error("User don't have student nft.".to_owned()) - } -} - -#[allow(clippy::too_many_arguments)] -fn process_approve_hw( - student_nft: &mut StudentNFT, - source: &ActorId, - nft_id: NftId, - course_id: CourseId, - lesson_id: LessonId, - solution_url: String, - comment: Option, - rate: u8, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&course_id) { - if source != &course.owner && !course.owner_helpers.contains(source) { - return StudentNftEvent::Error("Only owner or helpers can approve hw.".to_owned()); - } - - if let Some(lesson) = course.lessons.get(lesson_id as usize) { - if !lesson.is_provide_hw { - return StudentNftEvent::Error("Lesson does not provide hw.".to_owned()); - } - } else { - return StudentNftEvent::Error("Invalid lesson id.".to_owned()); - } - - let Some(nft) = student_nft.nfts.get_mut(&nft_id) else { - return StudentNftEvent::Error("Invalid nft id.".to_owned()); - }; - - let Some(actual_course) = nft.actual_courses.iter_mut().find(|ac| ac.id == course_id) - else { - return StudentNftEvent::Error("Course is not started by nft owner.".to_owned()); - }; - - if actual_course.is_completed { - return StudentNftEvent::Error("Course is already completed by nft owner.".to_owned()); - } - - if actual_course.hws.iter().any(|hw| hw.lesson_id == lesson_id) { - return StudentNftEvent::Error("Hw already approved for provided lesson.".to_owned()); - } - - let hw = Hw::new( - lesson_id, - solution_url, - comment, - rate, - exec::block_timestamp() as i64, - ); - - actual_course.hws.push(hw.clone()); - - StudentNftEvent::HwApproved { - course_id, - nft_id, - hw, - } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_finish_course( - student_nft: &mut StudentNFT, - source: &ActorId, - course_id: CourseId, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&course_id) { - if source != &course.owner && !course.owner_helpers.contains(source) { - return StudentNftEvent::Error("Only owner or helpers can finish course.".to_owned()); - } - - if course.is_finished { - return StudentNftEvent::Error("Course is already finished.".to_owned()); - } - - course.is_finished = true; - StudentNftEvent::CourseFinished { course_id } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_complete_course( - student_nft: &mut StudentNFT, - user: &ActorId, - course_id: CourseId, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&course_id) { - if !course.is_finished { - return StudentNftEvent::Error("Course is not finished by owner.".to_owned()); - } - - let Some(nft_id) = student_nft.nft_owners.get(user) else { - return StudentNftEvent::Error("User does not have nft.".to_owned()); - }; - - let Some(nft) = student_nft.nfts.get_mut(nft_id) else { - return StudentNftEvent::Error("Invalid nft id.".to_owned()); - }; - - let Some(actual_course) = nft.actual_courses.iter_mut().find(|ac| ac.id == course_id) - else { - return StudentNftEvent::Error("Course is not started by nft owner.".to_owned()); - }; - - if actual_course.is_completed { - return StudentNftEvent::Error("Course is already completed.".to_owned()); - } - - // List with id's of all lessons, which require hw - let mut required_lessons_id: Vec = course - .lessons - .iter() - .enumerate() - .filter_map(|(id, lesson)| { - if lesson.is_provide_hw { - Some(id as u64) - } else { - None - } - }) - .collect(); - required_lessons_id.sort(); - - // List with submited id's of lessons(which require hw) - let mut actual_lessons_id: Vec = - actual_course.hws.iter().map(|h| h.lesson_id).collect(); - actual_lessons_id.sort(); - - if required_lessons_id == actual_lessons_id { - actual_course.is_completed = true; - StudentNftEvent::CourseCompleted { - user: *user, - course_id, - } - } else { - StudentNftEvent::Error("Required hw's are not completed.".to_owned()) - } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -fn process_emote( - student_nft: &mut StudentNFT, - user: &ActorId, - id: EmoteId, - action: EmoteAction, -) -> StudentNftEvent { - if let Some(emote) = student_nft.emotes.get_mut(&id) { - match &action { - EmoteAction::Upvote => { - if emote.upvotes.contains(user) { - emote.upvotes.remove(user); - } else { - emote.upvotes.insert(*user); - } - } - EmoteAction::Reaction { emoji } => { - if let Some(emoji) = emoji { - emote.reactions.insert(*user, emoji.clone()); - } else { - emote.reactions.remove(user); - } - } - } - - StudentNftEvent::Emote { - user: *user, - action, - } - } else { - StudentNftEvent::Error("Invalid emote id.".to_owned()) - } -} - -fn process_add_lesson_review( - student_nft: &mut StudentNFT, - user: &ActorId, - course_id: CourseId, - lesson_id: LessonId, - review: String, -) -> StudentNftEvent { - if let Some(course) = student_nft.courses.get_mut(&course_id) { - if review.is_empty() { - return StudentNftEvent::Error("Review is empty.".to_owned()); - } - - let Some(lesson) = course.lessons.get_mut(lesson_id as usize) else { - return StudentNftEvent::Error("Invalid lesson id.".to_owned()); - }; - - lesson.reviews.push((*user, review.clone())); - - StudentNftEvent::LessonReviewAdded { - user: *user, - course_id, - lesson_id, - review, - } - } else { - StudentNftEvent::Error("Provided course does not exist.".to_owned()) - } -} - -#[no_mangle] -extern fn init() { - let _init: StudentNftInit = msg::load().expect("Unable to decode `StudentNftInit`."); - - unsafe { STUDENT_NFT = Some(StudentNFT::default()) }; -} - -#[no_mangle] -extern fn handle() { - let action: StudentNftAction = msg::load().expect("Could not load `StudentNftAction`."); - let student_nft: &mut StudentNFT = unsafe { STUDENT_NFT.get_or_insert(StudentNFT::default()) }; - - let user = msg::source(); - - let result = match action { - StudentNftAction::Mint => process_mint(student_nft, &user), - StudentNftAction::CreateCourse { name, description } => { - process_create_course(student_nft, &user, name, description) - } - StudentNftAction::AddCourseHelper { course_id, helper } => { - process_add_course_helper(student_nft, &user, course_id, helper) - } - StudentNftAction::RemoveCourseHelper { course_id, helper } => { - process_remove_course_helper(student_nft, &user, course_id, helper) - } - StudentNftAction::StartCourse { course_id } => { - process_start_course(student_nft, &user, course_id) - } - StudentNftAction::AddLesson { course_id, lesson } => { - process_add_lesson(student_nft, &user, course_id, lesson) - } - StudentNftAction::ApproveHw { - nft_id, - course_id, - lesson_id, - solution_url, - comment, - rate, - } => process_approve_hw( - student_nft, - &user, - nft_id, - course_id, - lesson_id, - solution_url, - comment, - rate, - ), - StudentNftAction::Emote { id, action } => process_emote(student_nft, &user, id, action), - StudentNftAction::AddLessonReview { - course_id, - lesson_id, - review, - } => process_add_lesson_review(student_nft, &user, course_id, lesson_id, review), - StudentNftAction::FinishCourse { course_id } => { - process_finish_course(student_nft, &user, course_id) - } - StudentNftAction::CompleteCourse { course_id } => { - process_complete_course(student_nft, &user, course_id) - } - }; - - msg::reply(result, 0).expect("Failed to encode or reply with `StudentNftEvent`."); -} - -#[no_mangle] -extern fn state() { - msg::reply( - unsafe { - let student_nft = STUDENT_NFT - .as_ref() - .expect("Uninitialized `StudentNFT` state."); - let student_nft_state: StudentNftState = student_nft.into(); - student_nft_state - }, - 0, - ) - .expect("Failed to share state."); -} diff --git a/contracts/student-nft/state/Cargo.toml b/contracts/student-nft/state/Cargo.toml deleted file mode 100644 index a69ffd13e..000000000 --- a/contracts/student-nft/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "student-nft-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -student-nft-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/student-nft/state/build.rs b/contracts/student-nft/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/student-nft/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/student-nft/state/src/lib.rs b/contracts/student-nft/state/src/lib.rs deleted file mode 100644 index a2cb7b085..000000000 --- a/contracts/student-nft/state/src/lib.rs +++ /dev/null @@ -1,25 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; -use student_nft_io::*; - -#[gmeta::metawasm] -pub mod metafns { - pub type State = StudentNftState; - - pub fn get_nfts(state: State) -> Vec<(NftId, Nft)> { - state.nfts - } - - pub fn get_nft_owners(state: State) -> Vec<(ActorId, NftId)> { - state.nft_owners - } - - pub fn get_courses(state: State) -> Vec<(CourseId, Course)> { - state.courses - } - - pub fn get_emotes(state: State) -> Vec<(EmoteId, EmoteState)> { - state.emotes - } -} diff --git a/contracts/student-nft/tests/add_course_helper.rs b/contracts/student-nft/tests/add_course_helper.rs deleted file mode 100644 index 799df774e..000000000 --- a/contracts/student-nft/tests/add_course_helper.rs +++ /dev/null @@ -1,61 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(user, 1, helper, false); - - let state = student_nft.get_state(); - assert!(!state.courses[0].1.owner_helpers.is_empty()); -} - -#[test] -fn fail_helper_already_added() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(user, 1, helper, false); - student_nft.add_course_helper(user, 1, helper, true); -} - -#[test] -fn fail_only_owner_can_add_helper() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - let fake = utils::USERS[2]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(fake, 1, helper, true); -} diff --git a/contracts/student-nft/tests/add_lesson.rs b/contracts/student-nft/tests/add_lesson.rs deleted file mode 100644 index ee7e57975..000000000 --- a/contracts/student-nft/tests/add_lesson.rs +++ /dev/null @@ -1,85 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "2", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.lessons.is_empty()); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(user, 1, &lesson, false); - - let state = student_nft.get_state(); - - assert_eq!(lesson, state.courses[0].1.lessons[0]); -} - -#[test] -fn fail_only_owner_can_add_lessons() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let fake_user = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "2", false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - emote_id: 0, - is_provide_hw: false, - }; - - student_nft.add_lesson(fake_user, 1, &lesson, true); -} - -#[test] -fn fail_provided_course_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "2", false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - emote_id: 0, - is_provide_hw: false, - }; - - student_nft.add_lesson(user, 1337, &lesson, true); -} diff --git a/contracts/student-nft/tests/add_lesson_review.rs b/contracts/student-nft/tests/add_lesson_review.rs deleted file mode 100644 index e6d3a30cb..000000000 --- a/contracts/student-nft/tests/add_lesson_review.rs +++ /dev/null @@ -1,133 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.lessons[0].reviews.is_empty()); - - student_nft.add_lesson_review(user, 1, 0, "1337", false); - - let state = student_nft.get_state(); - assert!(!state.courses[0].1.lessons[0].reviews.is_empty()); - assert_eq!( - state.courses[0].1.lessons[0].reviews[0].1, - "1337".to_owned() - ); -} - -#[test] -fn fail_invalid_lesson_id() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.add_lesson_review(user, 1, 1337, "1337", true); -} - -#[test] -fn fail_review_is_empty() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.add_lesson_review(user, 1, 0, "", true); -} - -#[test] -fn fail_course_does_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.add_lesson_review(user, 1337, 0, "1337", true); -} diff --git a/contracts/student-nft/tests/approve_hw.rs b/contracts/student-nft/tests/approve_hw.rs deleted file mode 100644 index 8d22d8288..000000000 --- a/contracts/student-nft/tests/approve_hw.rs +++ /dev/null @@ -1,216 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - - let state = student_nft.get_state(); - assert!(state.nfts[0].1.actual_courses[0].hws.is_empty()); - - student_nft.approve_hw(teacher, 1, 1, 0, "1", None, 5, false); - - let state = student_nft.get_state(); - assert!(!state.nfts[0].1.actual_courses[0].hws.is_empty()); -} - -#[test] -fn fail_course_does_not_provide_hw() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: false, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1, 0, "1", None, 5, true); -} - -#[test] -fn fail_hw_already_approved() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1, 0, "1", None, 5, false); - student_nft.approve_hw(teacher, 1, 1, 0, "1", None, 5, true); -} - -#[test] -fn fail_course_is_not_started_by_user() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1, 0, "1", None, 5, true); -} - -#[test] -fn fail_invalid_lesson_id() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1, 1337, "1", None, 5, true); -} - -#[test] -fn fail_only_owner_can_approve_hw() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(user, 1, 1, 0, "1", None, 5, true); -} - -#[test] -fn fail_provided_course_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1337, 0, "1", None, 5, true); -} diff --git a/contracts/student-nft/tests/complete_course.rs b/contracts/student-nft/tests/complete_course.rs deleted file mode 100644 index c05a7ffc7..000000000 --- a/contracts/student-nft/tests/complete_course.rs +++ /dev/null @@ -1,195 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.finish_course(teacher, 1, false); - student_nft.approve_hw(teacher, 1, 1, 0, "", None, 3, false); - - let state = student_nft.get_state(); - assert!(!state.nfts[0].1.actual_courses[0].is_completed); - - student_nft.complete_course(user, 1, false); - - let state = student_nft.get_state(); - assert!(state.nfts[0].1.actual_courses[0].is_completed); -} - -#[test] -fn fail_course_already_completed() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - let lesson_1 = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 3, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.add_lesson(teacher, 1, &lesson_1, false); - student_nft.finish_course(teacher, 1, false); - student_nft.approve_hw(teacher, 1, 1, 0, "", None, 3, false); - student_nft.approve_hw(teacher, 1, 1, 1, "", None, 5, false); - student_nft.complete_course(user, 1, false); - student_nft.complete_course(user, 1, true); -} - -#[test] -fn fail_required_hws_are_not_completed() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - let lesson_1 = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 3, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.add_lesson(teacher, 1, &lesson_1, false); - student_nft.finish_course(teacher, 1, false); - student_nft.approve_hw(teacher, 1, 1, 0, "", None, 3, false); - student_nft.complete_course(user, 1, true); -} - -#[test] -fn fail_course_is_not_finished_by_owner() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.approve_hw(teacher, 1, 1, 0, "", None, 3, false); - student_nft.complete_course(user, 1, true); -} - -#[test] -fn fail_course_does_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - - let lesson = Lesson { - name: "".to_owned(), - description: "".to_owned(), - media_url: "".to_owned(), - thumb_url: "".to_owned(), - reviews: Vec::new(), - // This field is not required, because will be filled automatically on-chain - // but required for test assert - emote_id: 2, - is_provide_hw: true, - }; - - student_nft.add_lesson(teacher, 1, &lesson, false); - student_nft.finish_course(teacher, 1, false); - student_nft.approve_hw(teacher, 1, 1, 0, "", None, 3, false); - student_nft.complete_course(user, 1337, true); -} diff --git a/contracts/student-nft/tests/create_course.rs b/contracts/student-nft/tests/create_course.rs deleted file mode 100644 index 81b28c555..000000000 --- a/contracts/student-nft/tests/create_course.rs +++ /dev/null @@ -1,30 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - let state = student_nft.get_state(); - - assert!(state.courses.is_empty()); - assert!(state.emotes.is_empty()); - assert_eq!(state.course_nonce, 0); - assert_eq!(state.emote_nonce, 0); - - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - - assert!(!state.courses.is_empty()); - assert!(!state.emotes.is_empty()); - assert_eq!(state.course_nonce, 1); - assert_eq!(state.emote_nonce, 1); -} diff --git a/contracts/student-nft/tests/emote.rs b/contracts/student-nft/tests/emote.rs deleted file mode 100644 index e90f33d1f..000000000 --- a/contracts/student-nft/tests/emote.rs +++ /dev/null @@ -1,64 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "2", false); - - let state = student_nft.get_state(); - assert!(state.emotes[0].1.upvotes.is_empty()); - assert!(state.emotes[0].1.reactions.is_empty()); - - // Toggle first time - student_nft.emote(user, 1, EmoteAction::Upvote, false); - - let state = student_nft.get_state(); - assert!(!state.emotes[0].1.upvotes.is_empty()); - - // Toggle second time: remove - student_nft.emote(user, 1, EmoteAction::Upvote, false); - - let state = student_nft.get_state(); - assert!(state.emotes[0].1.upvotes.is_empty()); - - // Toggle third time with emoji - student_nft.emote( - user, - 1, - EmoteAction::Reaction { - emoji: Some("🚀".to_owned()), - }, - false, - ); - - let state = student_nft.get_state(); - assert!(!state.emotes[0].1.reactions.is_empty()); - - // Toggle 4th time with emoji: remove - student_nft.emote(user, 1, EmoteAction::Reaction { emoji: None }, false); - - let state = student_nft.get_state(); - assert!(state.emotes[0].1.reactions.is_empty()); -} - -#[test] -fn fail_invalid_emote_id() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "2", false); - student_nft.emote(user, 1337, EmoteAction::Upvote, true); -} diff --git a/contracts/student-nft/tests/finish_course.rs b/contracts/student-nft/tests/finish_course.rs deleted file mode 100644 index 3203c4311..000000000 --- a/contracts/student-nft/tests/finish_course.rs +++ /dev/null @@ -1,62 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "1", false); - - let state = student_nft.get_state(); - assert!(!state.courses[0].1.is_finished); - - student_nft.finish_course(user, 1, false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.is_finished); -} - -#[test] -fn fail_only_owner_can_finish_course() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let fake_user = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "1", false); - student_nft.finish_course(fake_user, 1, true); -} - -#[test] -fn fail_course_already_finished() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "1", false); - student_nft.finish_course(user, 1, false); - student_nft.finish_course(user, 1, true); -} - -#[test] -fn fail_course_does_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "1", "1", false); - student_nft.finish_course(user, 1337, true); -} diff --git a/contracts/student-nft/tests/mint.rs b/contracts/student-nft/tests/mint.rs deleted file mode 100644 index 0c5d462df..000000000 --- a/contracts/student-nft/tests/mint.rs +++ /dev/null @@ -1,42 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let user_id = user.into(); - - let student_nft = Program::student_nft(&system); - let state = student_nft.get_state(); - - assert!(state.nfts.is_empty()); - assert!(state.nft_owners.is_empty()); - assert_eq!(state.nft_nonce, 0); - - student_nft.mint(user, false); - - let state = student_nft.get_state(); - - assert!(!state.nfts.is_empty()); - assert!(!state.nft_owners.is_empty()); - assert_eq!(state.nft_nonce, 1); - assert_eq!(state.nft_owners[0], (user_id, 1)); -} - -#[test] -fn fail_user_already_has_nft() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - - let student_nft = Program::student_nft(&system); - student_nft.mint(user, false); - student_nft.mint(user, true); -} diff --git a/contracts/student-nft/tests/node_tests.rs b/contracts/student-nft/tests/node_tests.rs deleted file mode 100644 index 8b6abf223..000000000 --- a/contracts/student-nft/tests/node_tests.rs +++ /dev/null @@ -1,24 +0,0 @@ -mod utils_gclient; - -use gclient::GearApi; - -#[tokio::test] -async fn gclient_success() -> gclient::Result<()> { - let api = GearApi::dev_from_path("../target/tmp/gear").await?; - - let student_nft = utils_gclient::common::init(&api).await?; - - let state = utils_gclient::student_nft::get_state(&api, &student_nft).await?; - assert!(state.nfts.is_empty()); - assert_eq!(state.nft_nonce, 0); - assert!(state.nft_owners.is_empty()); - - utils_gclient::student_nft::mint(&api, &student_nft, false).await?; - - let state = utils_gclient::student_nft::get_state(&api, &student_nft).await?; - assert!(!state.nfts.is_empty()); - assert_eq!(state.nft_nonce, 1); - assert!(!state.nft_owners.is_empty()); - - Ok(()) -} diff --git a/contracts/student-nft/tests/remove_course_helper.rs b/contracts/student-nft/tests/remove_course_helper.rs deleted file mode 100644 index ed74b9a3a..000000000 --- a/contracts/student-nft/tests/remove_course_helper.rs +++ /dev/null @@ -1,64 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(user, 1, helper, false); - student_nft.remove_course_helper(user, 1, helper, false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); -} - -#[test] -fn fail_helper_not_found() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - let fake = utils::USERS[2]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(user, 1, helper, false); - student_nft.remove_course_helper(user, 1, fake, true); -} - -#[test] -fn fail_only_owner_can_remove_helper() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let helper = utils::USERS[1]; - let fake = utils::USERS[2]; - - let student_nft = Program::student_nft(&system); - student_nft.create_course(user, "", "", false); - - let state = student_nft.get_state(); - assert!(state.courses[0].1.owner_helpers.is_empty()); - - student_nft.add_course_helper(user, 1, helper, false); - student_nft.remove_course_helper(fake, 1, helper, true); -} diff --git a/contracts/student-nft/tests/start_course.rs b/contracts/student-nft/tests/start_course.rs deleted file mode 100644 index 6b9765f7d..000000000 --- a/contracts/student-nft/tests/start_course.rs +++ /dev/null @@ -1,72 +0,0 @@ -mod utils; - -use gstd::prelude::*; -use gtest::{Program, System}; -use utils::student_nft::StudentNft; - -#[test] -fn success() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - - let state = student_nft.get_state(); - assert!(state.nfts[0].1.actual_courses.is_empty()); - - student_nft.start_course(user, 1, false); - - let state = student_nft.get_state(); - assert!(!state.nfts[0].1.actual_courses.is_empty()); -} - -#[test] -fn fail_course_already_started() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, false); - student_nft.start_course(user, 1, true); -} - -#[test] -fn fail_provided_course_not_exist() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - - student_nft.mint(user, false); - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1337, true); -} - -#[test] -fn fail_user_dont_have_nft() { - let system = System::new(); - system.init_logger(); - - let user = utils::USERS[0]; - let teacher = utils::USERS[1]; - - let student_nft = Program::student_nft(&system); - - student_nft.create_course(teacher, "1", "2", false); - student_nft.start_course(user, 1, true); -} diff --git a/contracts/student-nft/tests/utils/mod.rs b/contracts/student-nft/tests/utils/mod.rs deleted file mode 100644 index aacb48d09..000000000 --- a/contracts/student-nft/tests/utils/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -pub mod student_nft; - -pub const ADMIN: u64 = 100; -pub const USERS: [u64; 3] = [101, 102, 103]; diff --git a/contracts/student-nft/tests/utils/student_nft.rs b/contracts/student-nft/tests/utils/student_nft.rs deleted file mode 100644 index 1537fd02e..000000000 --- a/contracts/student-nft/tests/utils/student_nft.rs +++ /dev/null @@ -1,177 +0,0 @@ -use super::ADMIN; -use gstd::prelude::*; -use gtest::{Program, System}; -use student_nft_io::*; - -#[allow(dead_code)] -pub trait StudentNft { - fn student_nft(system: &System) -> Program<'_>; - fn mint(&self, from: u64, error: bool); - fn create_course(&self, from: u64, name: &str, description: &str, error: bool); - fn start_course(&self, from: u64, course_id: CourseId, error: bool); - fn add_course_helper(&self, from: u64, course_id: CourseId, helper: u64, error: bool); - fn remove_course_helper(&self, from: u64, course_id: CourseId, helper: u64, error: bool); - fn add_lesson(&self, from: u64, course_id: CourseId, lesson: &Lesson, error: bool); - #[allow(clippy::too_many_arguments)] - fn approve_hw( - &self, - from: u64, - nft_id: NftId, - course_id: CourseId, - lesson_id: LessonId, - solution_url: &str, - comment: Option, - rate: u8, - error: bool, - ); - fn emote(&self, from: u64, id: EmoteId, action: EmoteAction, error: bool); - fn add_lesson_review( - &self, - from: u64, - course_id: CourseId, - lesson_id: LessonId, - review: &str, - error: bool, - ); - fn finish_course(&self, from: u64, course_id: CourseId, error: bool); - fn complete_course(&self, from: u64, course_id: CourseId, error: bool); - fn send_tx(&self, from: u64, action: StudentNftAction, error: bool); - fn get_state(&self) -> StudentNftState; -} - -impl StudentNft for Program<'_> { - fn student_nft(system: &System) -> Program<'_> { - let student_nft = Program::current_opt(system); - assert!(!student_nft.send(ADMIN, StudentNftInit {}).main_failed()); - - student_nft - } - - fn mint(&self, from: u64, error: bool) { - self.send_tx(from, StudentNftAction::Mint, error); - } - - fn create_course(&self, from: u64, name: &str, description: &str, error: bool) { - self.send_tx( - from, - StudentNftAction::CreateCourse { - name: name.to_owned(), - description: description.to_owned(), - }, - error, - ); - } - - fn start_course(&self, from: u64, course_id: CourseId, error: bool) { - self.send_tx(from, StudentNftAction::StartCourse { course_id }, error); - } - - fn add_course_helper(&self, from: u64, course_id: CourseId, helper: u64, error: bool) { - self.send_tx( - from, - StudentNftAction::AddCourseHelper { - course_id, - helper: helper.into(), - }, - error, - ); - } - - fn remove_course_helper(&self, from: u64, course_id: CourseId, helper: u64, error: bool) { - self.send_tx( - from, - StudentNftAction::RemoveCourseHelper { - course_id, - helper: helper.into(), - }, - error, - ); - } - - fn add_lesson(&self, from: u64, course_id: CourseId, lesson: &Lesson, error: bool) { - self.send_tx( - from, - StudentNftAction::AddLesson { - course_id, - lesson: lesson.clone(), - }, - error, - ); - } - - fn approve_hw( - &self, - from: u64, - nft_id: NftId, - course_id: CourseId, - lesson_id: LessonId, - solution_url: &str, - comment: Option, - rate: u8, - error: bool, - ) { - self.send_tx( - from, - StudentNftAction::ApproveHw { - nft_id, - course_id, - lesson_id, - solution_url: solution_url.to_owned(), - comment, - rate, - }, - error, - ) - } - - fn add_lesson_review( - &self, - from: u64, - course_id: CourseId, - lesson_id: LessonId, - review: &str, - error: bool, - ) { - self.send_tx( - from, - StudentNftAction::AddLessonReview { - course_id, - lesson_id, - review: review.to_owned(), - }, - error, - ) - } - - fn emote(&self, from: u64, id: EmoteId, action: EmoteAction, error: bool) { - self.send_tx(from, StudentNftAction::Emote { id, action }, error); - } - - fn complete_course(&self, from: u64, course_id: CourseId, error: bool) { - self.send_tx(from, StudentNftAction::CompleteCourse { course_id }, error); - } - - fn finish_course(&self, from: u64, course_id: CourseId, error: bool) { - self.send_tx(from, StudentNftAction::FinishCourse { course_id }, error); - } - - fn send_tx(&self, from: u64, action: StudentNftAction, error: bool) { - let result = self.send(from, action); - assert!(!result.main_failed()); - - let maybe_error = result.log().iter().find_map(|log| { - let mut payload = log.payload(); - if let Ok(StudentNftEvent::Error(error)) = StudentNftEvent::decode(&mut payload) { - Some(error) - } else { - None - } - }); - - assert_eq!(maybe_error.is_some(), error); - } - - fn get_state(&self) -> StudentNftState { - self.read_state(0).expect("Unexpected invalid state.") - } -} diff --git a/contracts/student-nft/tests/utils_gclient/common.rs b/contracts/student-nft/tests/utils_gclient/common.rs deleted file mode 100644 index 3191f7a1b..000000000 --- a/contracts/student-nft/tests/utils_gclient/common.rs +++ /dev/null @@ -1,45 +0,0 @@ -use super::{student_nft, USERS}; -use gclient::GearApi; -use gstd::{prelude::*, ActorId}; - -pub const HASH_LENGTH: usize = 32; -pub type Hash = [u8; HASH_LENGTH]; - -pub fn get_current_actor_id(api: &GearApi) -> ActorId { - ActorId::new(*api.account_id().clone().as_ref()) -} - -pub async fn get_user_to_actor_id(user: impl AsRef) -> gclient::Result { - let api = GearApi::dev_from_path("../target/tmp/gear") - .await? - .with(user)?; - let actor_id = ActorId::new(*api.account_id().clone().as_ref()); - - Ok(actor_id) -} - -pub async fn fund_users(api: &GearApi) -> gclient::Result<()> { - let balance = api.total_balance(api.account_id()).await?; - let amount = balance / (USERS.len() + 1) as u128; - - for user in USERS { - let user_id = get_user_to_actor_id(user).await?; - - api.transfer_keep_alive( - user_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - amount, - ) - .await?; - } - - Ok(()) -} - -pub async fn init(api: &GearApi) -> gclient::Result { - fund_users(api).await?; - student_nft::init(api).await -} diff --git a/contracts/student-nft/tests/utils_gclient/mod.rs b/contracts/student-nft/tests/utils_gclient/mod.rs deleted file mode 100644 index bdf54ad2a..000000000 --- a/contracts/student-nft/tests/utils_gclient/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -#![allow(unused)] - -pub mod common; -pub mod student_nft; - -pub const USERS: [&str; 2] = ["//Jack", "//Alex"]; diff --git a/contracts/student-nft/tests/utils_gclient/student_nft.rs b/contracts/student-nft/tests/utils_gclient/student_nft.rs deleted file mode 100644 index e55629374..000000000 --- a/contracts/student-nft/tests/utils_gclient/student_nft.rs +++ /dev/null @@ -1,87 +0,0 @@ -use super::common; -use gclient::{EventProcessor, GearApi}; -use gstd::{prelude::*, ActorId}; -use student_nft_io::*; - -const STUDENT_NFT_WASM_PATH: &str = "../target/wasm32-unknown-unknown/release/student_nft.opt.wasm"; - -pub async fn init(api: &GearApi) -> gclient::Result { - let mut listener = api.subscribe().await?; - assert!(listener.blocks_running().await?); - - let student_nft_init = StudentNftInit {}.encode(); - - let gas_info = api - .calculate_upload_gas( - None, - gclient::code_from_os(STUDENT_NFT_WASM_PATH)?, - student_nft_init.clone(), - 0, - true, - ) - .await?; - - let (message_id, program_id, _hash) = api - .upload_program_bytes( - gclient::code_from_os(STUDENT_NFT_WASM_PATH)?, - gclient::now_micros().to_le_bytes(), - student_nft_init, - gas_info.burned * 2, - 0, - ) - .await?; - assert!(listener.message_processed(message_id).await?.succeed()); - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - Ok(program_id.into()) -} - -pub async fn mint(api: &GearApi, program_id: &ActorId, error: bool) -> gclient::Result<()> { - let result = send_message(api, program_id, StudentNftAction::Mint, 0).await?; - assert_eq!(matches!(result, StudentNftEvent::Error(_)), error); - - Ok(()) -} - -pub async fn get_state(api: &GearApi, program_id: &ActorId) -> gclient::Result { - api.read_state( - program_id - .encode() - .as_slice() - .try_into() - .expect("Unexpected invalid `ProgramId`."), - vec![], - ) - .await -} - -async fn send_message( - api: &GearApi, - program_id: &ActorId, - payload: StudentNftAction, - value: u128, -) -> gclient::Result { - let mut listener = api.subscribe().await?; - - let program_id: common::Hash = program_id - .encode() - .try_into() - .expect("Unexpected invalid program id."); - - let gas_info = api - .calculate_handle_gas(None, program_id.into(), payload.encode(), value, true) - .await?; - - let (message_id, _) = api - .send_message(program_id.into(), payload, gas_info.burned * 2, value) - .await?; - - let (_, reply_data_result, _) = listener.reply_bytes_on(message_id).await?; - let reply_data = reply_data_result.expect("Unexpected invalid reply data result."); - - Ok(StudentNftEvent::decode(&mut reply_data.as_ref())?) -} diff --git a/contracts/supply-chain/Cargo.toml b/contracts/supply-chain/Cargo.toml deleted file mode 100644 index ca09dea01..000000000 --- a/contracts/supply-chain/Cargo.toml +++ /dev/null @@ -1,32 +0,0 @@ -[package] -name = "supply-chain" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -supply-chain-io.workspace = true -gstd.workspace = true -non-fungible-token-io.workspace = true -sharded-fungible-token-io.workspace = true -gear-lib-old.workspace = true - -[dev-dependencies] -gtest.workspace = true -gstd.workspace = true -gclient.workspace = true -tokio.workspace = true -supply-chain-deploy.workspace = true - -# External binaries - -supply-chain-state.workspace = true -non-fungible-token.workspace = true -non-fungible-token-state.workspace = true -sharded-fungible-token.workspace = true -sharded-fungible-token-logic.workspace = true -sharded-fungible-token-storage.workspace = true - -[build-dependencies] -gear-wasm-builder.workspace = true -supply-chain-io.workspace = true diff --git a/contracts/supply-chain/README.md b/contracts/supply-chain/README.md deleted file mode 100644 index 2e8780f92..000000000 --- a/contracts/supply-chain/README.md +++ /dev/null @@ -1,24 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=supply-chain/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/supply_chain_io) - -# [Supply chain](https://wiki.gear-tech.io/docs/examples/Infra/supply-chain) - -### 🏗️ Building - -```sh -cargo b -r -p "supply-chain*" -``` - -### ✅ Testing - -Run all tests, except `gclient` ones: -```sh -cargo t -r -p "supply-chain*" -- --skip gclient -``` - -Run all tests: -```sh -# Download the node binary. -cargo xtask node -cargo t -r -p "supply-chain*" -``` diff --git a/contracts/supply-chain/build.rs b/contracts/supply-chain/build.rs deleted file mode 100644 index 04b4db0b5..000000000 --- a/contracts/supply-chain/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -use supply_chain_io::ContractMetadata; - -fn main() { - gear_wasm_builder::build_with_metadata::(); -} diff --git a/contracts/supply-chain/deploy/Cargo.toml b/contracts/supply-chain/deploy/Cargo.toml deleted file mode 100644 index d6e874488..000000000 --- a/contracts/supply-chain/deploy/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "supply-chain-deploy" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gclient.workspace = true -gstd.workspace = true -supply-chain-io.workspace = true -supply-chain-state.workspace = true -supply-chain.workspace = true -sp-core-hashing.workspace = true -primitive-types.workspace = true -non-fungible-token-io.workspace = true -sharded-fungible-token-io.workspace = true -tokio.workspace = true -clap.workspace = true diff --git a/contracts/supply-chain/deploy/src/lib.rs b/contracts/supply-chain/deploy/src/lib.rs deleted file mode 100644 index 33390f817..000000000 --- a/contracts/supply-chain/deploy/src/lib.rs +++ /dev/null @@ -1,205 +0,0 @@ -use gclient::{ - errors::{Gear, ModuleError}, - Error as GclientError, EventListener, EventProcessor, GearApi, Result, -}; -use gstd::{ - prelude::{fmt::Debug, *}, - ActorId, -}; -use primitive_types::H256; -use supply_chain_io::*; -use supply_chain_state::{WASM_BINARY, WASM_EXPORTS}; - -pub const FT_MAIN: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token.opt.wasm"; -pub const FT_STORAGE: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_storage.opt.wasm"; -pub const FT_LOGIC: &str = - "../target/wasm32-unknown-unknown/release/sharded_fungible_token_logic.opt.wasm"; -pub const NFT_BINARY: &str = "../target/wasm32-unknown-unknown/release/non_fungible_token.opt.wasm"; - -pub struct Client { - client: GearApi, - listener: EventListener, -} - -impl Client { - pub async fn global() -> Result { - let client = GearApi::vara_testnet().await?; - let listener = client.subscribe().await?; - - Ok(Self { client, listener }) - } - - pub fn login(mut self, suri: impl AsRef) -> Result { - self.client = self.client.with(suri)?; - - Ok(self) - } - - pub async fn local() -> Result { - let client = GearApi::dev_from_path("../target/tmp/gear").await?; - let listener = client.subscribe().await?; - - Ok(Self { client, listener }) - } - - pub async fn upload_code(&self, path: &str) -> Result { - let code_id = match self.client.upload_code_by_path(path).await { - Ok((code_id, _)) => code_id.into(), - Err(GclientError::Module(ModuleError::Gear(Gear::CodeAlreadyExists))) => { - sp_core_hashing::blake2_256(&gclient::code_from_os(path)?) - } - Err(other_error) => return Err(other_error), - }; - - println!("Uploaded `{path}`."); - - Ok(code_id.into()) - } - - pub async fn upload_program(&mut self, path: &str, payload: impl Encode) -> Result<[u8; 32]> { - let (message_id, program_id) = self - .common_upload_program(gclient::code_from_os(path)?, payload) - .await?; - - assert!(self - .listener - .message_processed(message_id.into()) - .await? - .succeed()); - println!("Initialized `{path}`."); - - Ok(program_id) - } - - pub async fn upload_program_and_wait_reply( - &mut self, - code: Vec, - payload: impl Encode, - ) -> Result<([u8; 32], R)> { - let (message_id, program_id) = self.common_upload_program(code, payload).await?; - let (_, raw_reply, _) = self.listener.reply_bytes_on(message_id.into()).await?; - let reply = decode( - raw_reply.expect("initialization failed, received an error message instead of a reply"), - )?; - - Ok((program_id, reply)) - } - - async fn common_upload_program( - &self, - code: Vec, - payload: impl Encode, - ) -> Result<([u8; 32], [u8; 32])> { - let encoded_payload = payload.encode(); - let gas_limit = self - .client - .calculate_upload_gas(None, code.clone(), encoded_payload, 0, true) - .await? - .burned - * 2; - let (message_id, program_id, _) = self - .client - .upload_program( - code, - gclient::now_micros().to_le_bytes(), - payload, - gas_limit, - 0, - ) - .await?; - - Ok((message_id.into(), program_id.into())) - } - - pub async fn send_message( - &mut self, - destination: [u8; 32], - payload: impl Encode + Debug, - ) -> Result { - Ok(self - .send_message_with_custom_limit(destination, payload, |gas| gas * 2) - .await? - .expect("action failed, received an error message instead of a reply")) - } - - pub async fn send_message_with_custom_limit( - &mut self, - destination: [u8; 32], - payload: impl Encode + Debug, - modify_gas_limit: fn(u64) -> u64, - ) -> Result> { - let encoded_payload = payload.encode(); - let destination = destination.into(); - - let gas_limit = self - .client - .calculate_handle_gas(None, destination, encoded_payload, 0, true) - .await? - .burned; - let modified_gas_limit = modify_gas_limit(gas_limit); - - println!("Sending a payload: `{payload:?}`."); - println!("Calculated gas limit: {gas_limit}."); - println!("Modified gas limit: {modified_gas_limit}."); - - let (message_id, _) = self - .client - .send_message(destination, payload, modified_gas_limit, 0) - .await?; - - println!("Sending completed."); - - let (_, raw_reply, _) = self.listener.reply_bytes_on(message_id).await?; - - Ok(match raw_reply { - Ok(raw_reply) => Ok(decode(raw_reply)?), - Err(error) => Err(error), - }) - } - - pub async fn send_message_with_insufficient_gas( - &mut self, - destination: [u8; 32], - payload: impl Encode + Debug, - ) -> Result { - Ok(self - .send_message_with_custom_limit::<()>(destination, payload, |gas| gas - gas / 100) - .await? - .expect_err("received a reply instead of an error message")) - } - - pub async fn send_message_for_sc( - &mut self, - destination: [u8; 32], - payload: impl Encode + Debug, - ) -> Result> { - self.send_message(destination, payload).await - } - - pub async fn is_action_cached( - &self, - supply_chain_actor_id: [u8; 32], - action: Action, - ) -> Result { - self.client - .read_state_using_wasm::<_, bool>( - supply_chain_actor_id.into(), - vec![], - WASM_EXPORTS[7], - WASM_BINARY.into(), - Some((ActorId::from(ALICE), action.clone().action)), - ) - .await - } -} - -pub const ALICE: [u8; 32] = [ - 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, - 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, -]; - -fn decode(payload: Vec) -> Result { - Ok(T::decode(&mut payload.as_slice())?) -} diff --git a/contracts/supply-chain/deploy/src/main.rs b/contracts/supply-chain/deploy/src/main.rs deleted file mode 100644 index 1c9b0e149..000000000 --- a/contracts/supply-chain/deploy/src/main.rs +++ /dev/null @@ -1,77 +0,0 @@ -use clap::{Arg, ArgAction, Command}; -use gclient::Result; -use non_fungible_token_io::InitNFT; -use primitive_types::U256; -use sharded_fungible_token_io::InitFToken; -use supply_chain::WASM_BINARY_OPT as WASM_BINARY; -use supply_chain_deploy::*; -use supply_chain_io::*; - -#[tokio::main(flavor = "current_thread")] -async fn main() -> Result<()> { - let matches = Command::new(env!("CARGO_PKG_NAME")) - .arg(Arg::new("local").short('l').action(ArgAction::SetTrue)) - .arg(Arg::new("login")) - .arg(Arg::new("full").short('f').action(ArgAction::SetTrue)) - .get_matches(); - - let mut client = if matches.get_flag("local") { - Client::local().await - } else { - Client::global().await - }?; - - if let Some(login) = matches.get_one::("login") { - client = client.login(login)? - } - - let storage_code_hash = client.upload_code(FT_STORAGE).await?; - let ft_logic_code_hash = client.upload_code(FT_LOGIC).await?; - - let ft_actor_id = client - .upload_program( - FT_MAIN, - InitFToken { - storage_code_hash, - ft_logic_code_hash, - }, - ) - .await?; - - println!(">>> 0x{:x} <<<", U256::from(ft_actor_id)); - - let nft_actor_id = client - .upload_program( - NFT_BINARY, - InitNFT { - royalties: Default::default(), - collection: Default::default(), - config: Default::default(), - }, - ) - .await?; - - println!(">>> 0x{:x} <<<", U256::from(nft_actor_id)); - - if matches.get_flag("full") { - let (supply_chain_actor_id, reply) = client - .upload_program_and_wait_reply::>( - WASM_BINARY.into(), - Initialize { - producers: vec![ALICE.into()], - distributors: vec![ALICE.into()], - retailers: vec![ALICE.into()], - - fungible_token: ft_actor_id.into(), - non_fungible_token: nft_actor_id.into(), - }, - ) - .await?; - assert_eq!(reply, Ok(())); - - println!("Initialized the main contract."); - println!(">>> 0x{:x} <<<", U256::from(supply_chain_actor_id)); - } - - Ok(()) -} diff --git a/contracts/supply-chain/io/Cargo.toml b/contracts/supply-chain/io/Cargo.toml deleted file mode 100644 index 2ef077c91..000000000 --- a/contracts/supply-chain/io/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "supply-chain-io" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -gear-lib-old.workspace = true diff --git a/contracts/supply-chain/io/src/lib.rs b/contracts/supply-chain/io/src/lib.rs deleted file mode 100644 index 421a9370d..000000000 --- a/contracts/supply-chain/io/src/lib.rs +++ /dev/null @@ -1,663 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::token::{TokenId, TokenMetadata}; -use gmeta::{InOut, Metadata, Out}; -use gstd::{errors::Error as GstdError, prelude::*, ActorId}; - -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - type Init = InOut>; - type Handle = InOut>; - type Reply = (); - type Others = (); - type Signal = (); - type State = Out; -} - -/// The contract state. -/// -/// For more info about fields, see [`Initialize`]. -#[derive(Encode, Decode, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct State { - pub items: Vec<(ItemId, ItemInfo)>, - - pub producers: Vec, - pub distributors: Vec, - pub retailers: Vec, - - pub fungible_token: ActorId, - pub non_fungible_token: ActorId, - - /// Used by - /// [`is_action_cached()`](../supply_chain_state/metafns/fn.is_action_cached.html). - /// Also see [`TransactionKind`]. - pub cached_actions: Vec<(ActorId, CachedAction)>, -} - -/// A counterpart of [`InnerAction`] for caching of some its variants. -/// -/// See the source code of -/// [`impl From for Option`](enum.InnerAction.html#impl-From-for-Option) -/// to find out how the conversion works. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum CachedAction { - Purchase(ItemId), - PutUpForSale(ItemId), - Approve(ItemId), - Receive(ItemId), - Other, -} - -impl From for Option { - fn from(action: InnerAction) -> Self { - match action { - InnerAction::Producer(ProducerAction::Produce { .. }) => Some(CachedAction::Other), - InnerAction::Producer(ProducerAction::PutUpForSale { item_id, .. }) - | InnerAction::Distributor(DistributorAction::PutUpForSale { item_id, .. }) - | InnerAction::Retailer(RetailerAction::PutUpForSale { item_id, .. }) => { - Some(CachedAction::PutUpForSale(item_id)) - } - InnerAction::Producer(ProducerAction::Approve { item_id, .. }) - | InnerAction::Distributor(DistributorAction::Approve { item_id, .. }) => { - Some(CachedAction::Approve(item_id)) - } - InnerAction::Distributor(DistributorAction::Purchase { item_id, .. }) - | InnerAction::Retailer(RetailerAction::Purchase { item_id, .. }) - | InnerAction::Consumer(ConsumerAction::Purchase(item_id)) => { - Some(CachedAction::Purchase(item_id)) - } - InnerAction::Distributor(DistributorAction::Receive(item_id)) - | InnerAction::Retailer(RetailerAction::Receive(item_id)) => { - Some(CachedAction::Receive(item_id)) - } - _ => None, - } - } -} - -/// The maximum number of items on a supply chain. -/// -/// The limited number of items is required because this contract (like -/// all the others) has a limited amount of memory, so it can't store too many -/// items. -pub const MAX_NUMBER_OF_ITEMS: usize = 2usize.pow(17); - -/// An item ID. -/// -/// Should equal [`TokenId`] of an item's NFT. -pub type ItemId = TokenId; - -/// Initializes the Supply chain contract. -/// -/// # Requirements -/// - Each [`ActorId`] of `producers`, `distributors`, and `retailers` mustn't -/// equal [`ActorId::zero()`]. -#[derive(Encode, Decode, Hash, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Initialize { - /// IDs of actors that'll have the right to interact with a supply chain on - /// behalf of a producer. - pub producers: Vec, - /// IDs of actors that'll have the right to interact with a supply chain on - /// behalf of a distributor. - pub distributors: Vec, - /// IDs of actors that'll have the right to interact with a supply chain on - /// behalf of a retailer. - pub retailers: Vec, - - /// A FT contract [`ActorId`]. - pub fungible_token: ActorId, - /// An NFT contract [`ActorId`]. - pub non_fungible_token: ActorId, -} - -/// Sends the contract info about what it should do. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Action { - pub action: InnerAction, - pub kind: TransactionKind, -} - -impl Action { - pub fn new(action: InnerAction) -> Self { - Self { - action, - kind: TransactionKind::New, - } - } - - pub fn to_retry(self) -> Self { - Self { - action: self.action, - kind: TransactionKind::Retry, - } - } -} - -/// A part of [`Action`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum InnerAction { - Producer(ProducerAction), - Distributor(DistributorAction), - Retailer(RetailerAction), - Consumer(ConsumerAction), -} - -/// A part of [`Action`]. -/// -/// Determines how an action will be processed. -/// -/// The contract has a transaction caching mechanism for a continuation of -/// partially processed asynchronous actions. Most often, the reason of an -/// underprocession is the lack of gas. -/// -/// Important notes: -/// - Only the last sent asynchronous action for -/// [`msg::source()`](gstd::msg::source) is cached. -/// - Non-asynchronous actions are never cached. -/// - There's no guarantee every underprocessed asynchronous action will be -/// cached. Use -/// [`is_action_cached()`](../supply_chain_state/metafns/fn.is_action_cached.html) -/// to check if some action is cached for some [`ActorId`]. -/// - It's possible to send a retry action with a different payload, and it'll -/// continue with it because, for some action, not all payload is saved in the -/// cache (see [`CachedAction`]). -/// - The cache memory has a limit, so when it's reached every oldest cached -/// action is replaced with a new one. -#[derive( - Default, Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionKind { - #[default] - New, - Retry, -} - -/// Actions for a producer. -/// -/// Should be used inside [`InnerAction::Producer`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ProducerAction { - /// Produces one item and a corresponding NFT with given `token_metadata`. - /// - /// Transfers the created NFT for the item to a producer - /// ([`msg::source()`]). - /// - /// # Requirements - /// - [`msg::source()`] must be a producer in a supply chain. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Produced`] & [`Role::Producer`]. - /// - /// [`msg::source()`]: gstd::msg::source - Produce { token_metadata: TokenMetadata }, - - /// Puts a produced item up for sale to distributors for given `price` on - /// behalf of a producer. - /// - /// Transfers an item's NFT to the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the producer of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Produced`] & - /// [`Role::Producer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::ForSale`] & [`Role::Producer`]. - PutUpForSale { item_id: ItemId, price: u128 }, - - /// Approves or not a distributor's purchase on behalf of a producer. - /// - /// If the purchase is approved, then item's [`ItemEventState`] changes to - /// [`Approved`](ItemEventState::Approved) and, from that moment, an item - /// can be shipped (by [`ProducerAction::Ship`]). - /// - /// If the purchase is **not** approved, then fungible tokens for it are - /// refunded from the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)) to the item's - /// distributor and item's [`ItemEventState`] changes back to - /// [`ForSale`](ItemEventState::ForSale). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the producer of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Produced`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Approved`]/[`ItemEventState::ForSale`] & - /// [`Role::Producer`]. - Approve { - item_id: ItemId, - /// Yes ([`true`]) or no ([`false`]). - approve: bool, - }, - - /// Starts a shipping of a purchased item to a distributor on behalf of a - /// producer. - /// - /// Starts the countdown for the delivery time specified for the item in - /// [`DistributorAction::Purchase`]. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the producer of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Approved`] & - /// [`Role::Producer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Shipped`] & [`Role::Producer`]. - Ship(ItemId), -} - -/// Actions for a distributor. -/// -/// Should be used inside [`InnerAction::Distributor`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum DistributorAction { - /// Purchases an item from a producer on behalf of a distributor. - /// - /// Transfers fungible tokens for purchasing the item to the Supply chain - /// contract ([`exec::program_id()`](gstd::exec::program_id)) until the item - /// is received (by [`DistributorAction::Receive`]). - /// - /// **Note:** the item's producer must approve or not this purchase by - /// [`ProducerAction::Approve`]. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be a distributor. - /// - Item's [`ItemState`] must contain [`ItemEventState::ForSale`] & - /// [`Role::Producer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Purchased`] & [`Role::Distributor`]. - Purchase { - item_id: ItemId, - /// Milliseconds during which the producer of an item should deliver it. - /// A countdown starts after [`ProducerAction::Ship`] is executed. - delivery_time: u64, - }, - - /// Receives a shipped item from a producer on behalf of a distributor. - /// - /// Depending on the time spent on a delivery, transfers fungible tokens for - /// purchasing the item from the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)) to the item's producer - /// or, as a penalty for being late, refunds a half or all of them to the - /// item's distributor ([`msg::source()`]). - /// - /// Transfers an item's NFT to the distributor ([`msg::source()`]). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`] must be the distributor of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Shipped`] & - /// [`Role::Producer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Received`] & [`Role::Distributor`]. - /// - /// [`msg::source()`]: gstd::msg::source - Receive(ItemId), - - /// Processes a received item on behalf of a distributor. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the distributor of the - /// item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Received`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Processed`] & [`Role::Distributor`]. - Process(ItemId), - - /// Packages a processed item on behalf of a distributor. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the distributor of the - /// item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Processed`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Packaged`] & [`Role::Distributor`]. - Package(ItemId), - - /// Puts a packaged item up for sale to retailers for given `price` on - /// behalf of a distributor. - /// - /// Transfers an item's NFT to the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the distributor of the - /// item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Packaged`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::ForSale`] & [`Role::Distributor`]. - PutUpForSale { item_id: ItemId, price: u128 }, - - /// Approves or not a retailer's purchase on behalf of a distributor. - /// - /// If the purchase is approved, then item's [`ItemEventState`] changes to - /// [`Approved`](ItemEventState::Approved) and, from that moment, an item - /// can be shipped (by [`DistributorAction::Ship`]). - /// - /// If the purchase is **not** approved, then fungible tokens for it are - /// refunded from the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)) to the item's retailer - /// and item's [`ItemEventState`] changes back to - /// [`ForSale`](ItemEventState::ForSale). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the distributor of the - /// item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Purchased`] & - /// [`Role::Retailer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Approved`]/[`ItemEventState::ForSale`] & - /// [`Role::Distributor`]. - Approve { - item_id: ItemId, - /// Yes ([`true`]) or no ([`false`]). - approve: bool, - }, - - /// Starts a shipping of a purchased item to a retailer on behalf of a - /// distributor. - /// - /// Starts the countdown for the delivery time specified for the item in - /// [`RetailerAction::Purchase`]. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the distributor of the - /// item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Approved`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Shipped`] & [`Role::Distributor`]. - Ship(ItemId), -} - -/// Actions for a retailer. -/// -/// Should be used inside [`InnerAction::Retailer`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum RetailerAction { - /// Purchases an item from a distributor on behalf of a retailer. - /// - /// Transfers fungible tokens for purchasing the item to the Supply chain - /// contract ([`exec::program_id()`](gstd::exec::program_id)) until the item - /// is received (by [`RetailerAction::Receive`]). - /// - /// **Note:** the item's distributor must approve or not this purchase by - /// [`DistributorAction::Approve`]. - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be a retailer. - /// - Item's [`ItemState`] must contain [`ItemEventState::ForSale`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Purchased`] & [`Role::Retailer`]. - Purchase { - item_id: ItemId, - /// Milliseconds during which the distributor of an item should deliver - /// it. A countdown starts after [`DistributorAction::Ship`] is - /// executed. - delivery_time: u64, - }, - - /// Receives a shipped item from a distributor on behalf of a retailer. - /// - /// Depending on the time spent on a delivery, transfers fungible tokens for - /// purchasing the item from the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)) to the item's - /// distributor or, as a penalty for being late, refunds a half or all of - /// them to the item's retailer ([`msg::source()`]). - /// - /// Transfers an item's NFT to the retailer ([`msg::source()`]). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`] must be the retailer of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Shipped`] & - /// [`Role::Distributor`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Received`] & [`Role::Retailer`]. - /// - /// [`msg::source()`]: gstd::msg::source - Receive(ItemId), - - /// Puts a received item up for sale to consumers for given `price` on - /// behalf of a retailer. - /// - /// Transfers an item's NFT to the Supply chain contract - /// ([`exec::program_id()`](gstd::exec::program_id)). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - [`msg::source()`](gstd::msg::source) must be the retailer of the item. - /// - Item's [`ItemState`] must contain [`ItemEventState::Received`] & - /// [`Role::Retailer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::ForSale`] & [`Role::Retailer`]. - PutUpForSale { item_id: ItemId, price: u128 }, -} - -/// Actions for a consumer. -/// -/// Should be used inside [`InnerAction::Consumer`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ConsumerAction { - /// Purchases an item from a retailer. - /// - /// Transfers fungible tokens for purchasing the item to its retailer. - /// - /// Transfers an item's NFT to the consumer - /// ([`msg::source()`](gstd::msg::source)). - /// - /// # Requirements - /// - The item must exist in a supply chain. - /// - Item's [`ItemState`] must contain [`ItemEventState::ForSale`] & - /// [`Role::Retailer`]. - /// - /// On success, replies with [`Event`] where [`ItemState`] contains - /// [`ItemEventState::Purchased`] & [`Role::Consumer`]. - Purchase(ItemId), -} - -/// A result of successfully processed [`Action`]. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Event { - pub item_id: ItemId, - pub item_state: ItemState, -} - -/// A result of **un**successfully processed [`Action`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Error { - /// [`ActorId::zero()`] was found where it's forbidden. - ZeroActorId, - /// An item with given [`ItemId`] doesn't exist in a supply chain. - ItemNotFound, - /// An item with given [`ItemId`] has an invalid state for a requested - /// action. - UnexpectedItemState, - /// [`msg::source`](gstd::msg::source) doesn't have enough rights for a - /// requested action or for an item with given [`ItemId`]. - AccessRestricted, - /// The FT contract failed to complete a transfer transaction. - /// - /// Most often, the reason is that a user didn't give an approval to the - /// contract or didn't have enough tokens for a requested action. - FTTransferFailed, - /// The NFT contract failed to complete a transfer transaction. - NFTTransferFailed, - /// The NFT contract failed to complete a minting transaction. - NFTMintingFailed, - /// The contract reached a limit of protection against the memory overflow. - MemoryLimitExceeded, - /// See [`GstdError`]. - ContractError(String), - TxCacheError(TransactionCacheError), -} - -/// Transaction cache error variants. -/// -/// Also see [`TransactionKind`]. -#[derive(Debug, Encode, Decode, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, TypeInfo, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum TransactionCacheError { - /// There's no cached transaction for - /// [`msg::source()`](gstd::msg::source()). The reason may be a - /// transaction's action wasn't asynchronous or just wasn't cached, or a - /// cached transaction has been removed because it was completed or too old. - TransactionNotFound, - /// An action for retrying doesn't match its cached counterpart. - MismatchedAction, - /// Too many transaction IDs were acquired in one action. The maximum amount - /// is 256. - StepOverflow, -} - -impl From for Error { - fn from(error: TransactionCacheError) -> Self { - Self::TxCacheError(error) - } -} - -impl From for Error { - fn from(error: GstdError) -> Self { - Self::ContractError(error.to_string()) - } -} - -/// Roles of supply chain participants. -#[derive( - Encode, Decode, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum Role { - Producer, - Distributor, - Retailer, - #[default] - Consumer, -} - -/// Supply chain patricipants. -/// -/// For more info about fields, see [`Initialize`]. -#[derive(Encode, Decode, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct Participants { - pub producers: Vec, - pub distributors: Vec, - pub retailers: Vec, -} - -/// Item info. -#[derive( - Encode, Decode, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct ItemInfo { - /// Item’s producer [`ActorId`]. - pub producer: ActorId, - /// [`ActorId`] of an item’s current or past distributor (depends on item’s - /// `state`). If it equals [`ActorId::zero()`], then it means that an item - /// has never had a distributor. - pub distributor: ActorId, - /// [`ActorId`] of an item’s current or past retailer (depends on item’s - /// `state`). If it equals [`ActorId::zero()`], then it means that an item - /// has never had a retailer. - pub retailer: ActorId, - - pub state: ItemState, - /// An item’s price. If it equals 0, then, depending on item’s `state`, an - /// item is sold for free or has never been put up for sale. - pub price: u128, - /// Milliseconds during which a current seller should deliver an item. - pub delivery_time: u64, -} - -/// An item’s state. -#[derive(Encode, Decode, TypeInfo, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub struct ItemState { - pub state: ItemEventState, - pub by: Role, -} - -impl Default for ItemState { - fn default() -> Self { - Self { - state: Default::default(), - by: Role::Producer, - } - } -} - -/// A part of [`ItemState`]. -#[derive( - Encode, Decode, TypeInfo, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Hash, -)] -#[codec(crate = gstd::codec)] -#[scale_info(crate = gstd::scale_info)] -pub enum ItemEventState { - #[default] - Produced, - Purchased, - Received, - Processed, - Packaged, - ForSale, - Approved, - Shipped, -} diff --git a/contracts/supply-chain/src/lib.rs b/contracts/supply-chain/src/lib.rs deleted file mode 100644 index b2824fda1..000000000 --- a/contracts/supply-chain/src/lib.rs +++ /dev/null @@ -1,755 +0,0 @@ -#![no_std] - -use gear_lib_old::non_fungible_token::token::TokenMetadata; -use gstd::{ - collections::{HashMap, HashSet}, - exec, msg, - prelude::*, - ActorId, -}; -use supply_chain_io::*; -use tx_manager::{TransactionGuard, TransactionManager}; - -mod tx_manager; -mod utils; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -fn get_mut_item( - items: &mut HashMap, - item_id: ItemId, - expected_item_state: ItemState, -) -> Result<&mut Item, Error> { - let item = items.get_mut(&item_id).ok_or(Error::ItemNotFound)?; - - if item.info.state != expected_item_state { - return Err(Error::UnexpectedItemState); - } - - Ok(item) -} - -fn role_to_set_item_dr(role: Role) -> fn(&mut Item, ActorId) { - match role { - Role::Distributor => Item::set_distributor, - Role::Retailer => Item::set_retailer, - _ => unreachable!(), - } -} - -type IsPdr = fn(&Item, ActorId) -> Result<(), Error>; - -fn role_to_is_pdr(role: Role) -> IsPdr { - match role { - Role::Producer => Item::is_producer, - Role::Distributor => Item::is_distributor, - Role::Retailer => Item::is_retailer, - _ => unreachable!(), - } -} - -fn role_to_item_pdr(role: Role) -> fn(&Item) -> ActorId { - match role { - Role::Producer => Item::producer, - Role::Distributor => Item::distributor, - Role::Retailer => Item::retailer, - _ => unreachable!(), - } -} - -#[derive(Default)] -struct Item { - info: ItemInfo, - shipping_time: u64, -} - -impl Item { - fn set_retailer(&mut self, retailer: ActorId) { - self.info.retailer = retailer - } - - fn set_distributor(&mut self, distributor: ActorId) { - self.info.distributor = distributor - } - - fn set_state_and_get_event(&mut self, item_id: ItemId, item_state: ItemState) -> Event { - self.info.state = item_state; - - Event { - item_id, - item_state, - } - } - - fn is_pdr(pdr: ActorId, actor_id: ActorId) -> Result<(), Error> { - if pdr != actor_id { - Err(Error::AccessRestricted) - } else { - Ok(()) - } - } - - fn is_producer(&self, actor_id: ActorId) -> Result<(), Error> { - Self::is_pdr(self.info.producer, actor_id) - } - - fn is_distributor(&self, actor_id: ActorId) -> Result<(), Error> { - Self::is_pdr(self.info.distributor, actor_id) - } - - fn is_retailer(&self, actor_id: ActorId) -> Result<(), Error> { - Self::is_pdr(self.info.retailer, actor_id) - } - - fn producer(&self) -> ActorId { - self.info.producer - } - - fn retailer(&self) -> ActorId { - self.info.retailer - } - - fn distributor(&self) -> ActorId { - self.info.distributor - } -} - -#[derive(Default)] -struct Contract { - items: HashMap, - - producers: HashSet, - distributors: HashSet, - retailers: HashSet, - - fungible_token: ActorId, - non_fungible_token: ActorId, -} - -impl Contract { - async fn produce( - &mut self, - tx_guard: &mut TransactionGuard<'_, CachedAction>, - msg_source: ActorId, - token_metadata: TokenMetadata, - ) -> Result { - if self.items.len() == MAX_NUMBER_OF_ITEMS { - return Err(Error::MemoryLimitExceeded); - } - - let item_id = utils::mint_nft(tx_guard, self.non_fungible_token, token_metadata).await?; - - utils::transfer_nft(tx_guard, self.non_fungible_token, msg_source, item_id).await?; - - self.items.insert( - item_id, - Item { - info: ItemInfo { - producer: msg_source, - ..Default::default() - }, - ..Default::default() - }, - ); - - Ok(Event { - item_id, - item_state: Default::default(), - }) - } - - async fn purchase( - &mut self, - tx_guard: &mut TransactionGuard<'_, CachedAction>, - msg_source: ActorId, - item_id: ItemId, - expected_by: Role, - by: Role, - delivery_time: u64, - ) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: ItemEventState::ForSale, - by: expected_by, - }, - )?; - - utils::transfer_ftokens( - tx_guard, - self.fungible_token, - msg_source, - exec::program_id(), - item.info.price, - ) - .await?; - - role_to_set_item_dr(by)(item, msg_source); - item.info.delivery_time = delivery_time; - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state: ItemEventState::Purchased, - by, - }, - )) - } - - async fn put_up_for_sale( - &mut self, - tx_guard: &mut TransactionGuard<'_, CachedAction>, - msg_source: ActorId, - item_id: ItemId, - expected_item_event_state: ItemEventState, - by: Role, - price: u128, - ) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: expected_item_event_state, - by, - }, - )?; - role_to_is_pdr(by)(item, msg_source)?; - - utils::transfer_nft( - tx_guard, - self.non_fungible_token, - exec::program_id(), - item_id, - ) - .await?; - item.info.price = price; - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state: ItemEventState::ForSale, - by, - }, - )) - } - - async fn approve( - &mut self, - tx_guard: &mut TransactionGuard<'_, CachedAction>, - msg_source: ActorId, - item_id: ItemId, - expected_by: Role, - by: Role, - approve: bool, - ) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: ItemEventState::Purchased, - by: expected_by, - }, - )?; - role_to_is_pdr(by)(item, msg_source)?; - - let item_state = if approve { - ItemState { - state: ItemEventState::Approved, - by, - } - } else { - utils::transfer_ftokens( - tx_guard, - self.fungible_token, - exec::program_id(), - role_to_item_pdr(expected_by)(item), - item.info.price, - ) - .await?; - - ItemState { - state: ItemEventState::ForSale, - by, - } - }; - - Ok(item.set_state_and_get_event(item_id, item_state)) - } - - fn ship(&mut self, msg_source: ActorId, item_id: ItemId, by: Role) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: ItemEventState::Approved, - by, - }, - )?; - role_to_is_pdr(by)(item, msg_source)?; - - item.shipping_time = exec::block_timestamp(); - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state: ItemEventState::Shipped, - by, - }, - )) - } - - async fn receive( - &mut self, - tx_guard: &mut TransactionGuard<'_, CachedAction>, - msg_source: ActorId, - item_id: ItemId, - expected_by: Role, - by: Role, - ) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: ItemEventState::Shipped, - by: expected_by, - }, - )?; - role_to_is_pdr(by)(item, msg_source)?; - - let program_id = exec::program_id(); - let elapsed_time = tx_guard.timestamp - item.shipping_time; - // By default, all fungible tokens are transferred to a seller, - let (mut to, mut amount) = (role_to_item_pdr(expected_by)(item), item.info.price); - - // but if the seller spends more time than was agreed... - if elapsed_time > item.info.delivery_time { - // ...and is extremely late (more than or exactly 2 times in this example), - if elapsed_time >= item.info.delivery_time * 2 { - // then all fungible tokens are refunded to a buyer... - to = msg_source; - } else { - // ...or another half is transferred to the seller... - amount /= 2; - - // ...and a half of tokens is refunded to the buyer. - utils::transfer_ftokens( - tx_guard, - self.fungible_token, - program_id, - msg_source, - item.info.price - amount, - ) - .await?; - } - } - - utils::transfer_ftokens(tx_guard, self.fungible_token, program_id, to, amount).await?; - utils::transfer_nft(tx_guard, self.non_fungible_token, msg_source, item_id).await?; - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state: ItemEventState::Received, - by, - }, - )) - } - - fn process_or_package( - &mut self, - msg_source: ActorId, - item_id: ItemId, - expected_item_event_state: ItemEventState, - state: ItemEventState, - ) -> Result { - let item = get_mut_item( - &mut self.items, - item_id, - ItemState { - state: expected_item_event_state, - by: Role::Distributor, - }, - )?; - item.is_distributor(msg_source)?; - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state, - by: Role::Distributor, - }, - )) - } -} - -static mut STATE: Option<(Contract, TransactionManager)> = None; - -fn state_mut() -> &'static mut (Contract, TransactionManager) { - let state = unsafe { STATE.as_mut() }; - - debug_assert!(state.is_some(), "state isn't initialized"); - - unsafe { state.unwrap_unchecked() } -} - -#[no_mangle] -extern fn init() { - let result = process_init(); - let is_err = result.is_err(); - - msg::reply(result, 0).expect("failed to encode or reply from `init()`"); - - if is_err { - exec::exit(ActorId::zero()); - } -} - -fn process_init() -> Result<(), Error> { - let Initialize { - producers, - distributors, - retailers, - fungible_token, - non_fungible_token, - } = msg::load()?; - - if producers - .iter() - .chain(&distributors) - .chain(&retailers) - .chain(&[fungible_token, non_fungible_token]) - .any(|actor| actor.is_zero()) - { - return Err(Error::ZeroActorId); - } - - let [producers, distributors, retailers] = - [producers, distributors, retailers].map(|actors| actors.into_iter().collect()); - - unsafe { - STATE = Some(( - Contract { - producers, - distributors, - retailers, - fungible_token, - non_fungible_token, - ..Default::default() - }, - Default::default(), - )); - } - - Ok(()) -} - -#[gstd::async_main] -async fn main() { - msg::reply(process_handle().await, 0).expect("failed to encode or reply `handle()`"); -} - -async fn process_handle() -> Result { - let Action { - action, - kind: tx_kind, - } = msg::load()?; - - let msg_source = msg::source(); - let (contract, tx_manager) = state_mut(); - - match action { - InnerAction::Consumer(action) => match action { - ConsumerAction::Purchase(item_id) => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::Purchase(item_id), - )?; - - let item = get_mut_item( - &mut contract.items, - item_id, - ItemState { - state: ItemEventState::ForSale, - by: Role::Retailer, - }, - )?; - - utils::transfer_ftokens( - &mut tx_guard, - contract.fungible_token, - msg_source, - item.info.retailer, - item.info.price, - ) - .await?; - utils::transfer_nft( - &mut tx_guard, - contract.non_fungible_token, - msg_source, - item_id, - ) - .await?; - - Ok(item.set_state_and_get_event( - item_id, - ItemState { - state: ItemEventState::Purchased, - by: Role::Consumer, - }, - )) - } - }, - InnerAction::Producer(action) => { - if !contract.producers.contains(&msg_source) { - return Err(Error::AccessRestricted); - } - - match action { - ProducerAction::Produce { token_metadata } => { - let mut tx_guard = - tx_manager.asquire_transaction(tx_kind, msg_source, CachedAction::Other)?; - - contract - .produce(&mut tx_guard, msg_source, token_metadata) - .await - } - ProducerAction::PutUpForSale { item_id, price } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::PutUpForSale(item_id), - )?; - - contract - .put_up_for_sale( - &mut tx_guard, - msg_source, - item_id, - ItemEventState::Produced, - Role::Producer, - price, - ) - .await - } - ProducerAction::Approve { item_id, approve } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::Approve(item_id), - )?; - - contract - .approve( - &mut tx_guard, - msg_source, - item_id, - Role::Distributor, - Role::Producer, - approve, - ) - .await - } - ProducerAction::Ship(item_id) => contract.ship(msg_source, item_id, Role::Producer), - } - } - InnerAction::Distributor(action) => { - if !contract.distributors.contains(&msg_source) { - return Err(Error::AccessRestricted); - } - - match action { - DistributorAction::Purchase { - item_id, - delivery_time, - } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::Purchase(item_id), - )?; - - contract - .purchase( - &mut tx_guard, - msg_source, - item_id, - Role::Producer, - Role::Distributor, - delivery_time, - ) - .await - } - DistributorAction::Receive(item_id) => { - let mut tx_guard = tx_manager.asquire_transaction_with_timestamp( - tx_kind, - msg_source, - CachedAction::Receive(item_id), - )?; - - contract - .receive( - &mut tx_guard, - msg_source, - item_id, - Role::Producer, - Role::Distributor, - ) - .await - } - DistributorAction::Process(item_id) => contract.process_or_package( - msg_source, - item_id, - ItemEventState::Received, - ItemEventState::Processed, - ), - DistributorAction::Package(item_id) => contract.process_or_package( - msg_source, - item_id, - ItemEventState::Processed, - ItemEventState::Packaged, - ), - DistributorAction::PutUpForSale { item_id, price } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::PutUpForSale(item_id), - )?; - - contract - .put_up_for_sale( - &mut tx_guard, - msg_source, - item_id, - ItemEventState::Packaged, - Role::Distributor, - price, - ) - .await - } - DistributorAction::Approve { item_id, approve } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::Approve(item_id), - )?; - - contract - .approve( - &mut tx_guard, - msg_source, - item_id, - Role::Retailer, - Role::Distributor, - approve, - ) - .await - } - DistributorAction::Ship(item_id) => { - contract.ship(msg_source, item_id, Role::Distributor) - } - } - } - InnerAction::Retailer(action) => { - if !contract.retailers.contains(&msg_source) { - return Err(Error::AccessRestricted); - } - - match action { - RetailerAction::Purchase { - item_id, - delivery_time, - } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::Purchase(item_id), - )?; - - contract - .purchase( - &mut tx_guard, - msg_source, - item_id, - Role::Distributor, - Role::Retailer, - delivery_time, - ) - .await - } - RetailerAction::Receive(item_id) => { - let mut tx_guard = tx_manager.asquire_transaction_with_timestamp( - tx_kind, - msg_source, - CachedAction::Receive(item_id), - )?; - - contract - .receive( - &mut tx_guard, - msg_source, - item_id, - Role::Distributor, - Role::Retailer, - ) - .await - } - RetailerAction::PutUpForSale { item_id, price } => { - let mut tx_guard = tx_manager.asquire_transaction( - tx_kind, - msg_source, - CachedAction::PutUpForSale(item_id), - )?; - - contract - .put_up_for_sale( - &mut tx_guard, - msg_source, - item_id, - ItemEventState::Received, - Role::Retailer, - price, - ) - .await - } - } - } - } -} - -#[no_mangle] -extern fn state() { - let state: State = generate_state(); - msg::reply(state, 0).expect("Failed to encode or reply with `State` from `state()`"); -} - -fn generate_state() -> State { - let ( - Contract { - items, - producers, - distributors, - retailers, - fungible_token, - non_fungible_token, - }, - tx_manager, - ) = unsafe { STATE.take().expect("Unexpected error in taking state") }; - - let [producers, distributors, retailers] = - [producers, distributors, retailers].map(|actors| actors.iter().cloned().collect()); - - State { - items: items.iter().map(|item| (*item.0, item.1.info)).collect(), - producers, - distributors, - retailers, - fungible_token, - non_fungible_token, - cached_actions: tx_manager - .cached_actions() - .map(|(actor, action)| (*actor, *action)) - .collect(), - } -} diff --git a/contracts/supply-chain/src/tx_manager.rs b/contracts/supply-chain/src/tx_manager.rs deleted file mode 100644 index 824925a9a..000000000 --- a/contracts/supply-chain/src/tx_manager.rs +++ /dev/null @@ -1,145 +0,0 @@ -use gstd::{ - collections::{BTreeMap, HashMap}, - exec, - prelude::*, - ActorId, -}; -use supply_chain_io::*; - -const MAX_NUMBER_OF_TXS: usize = 2usize.pow(16); - -pub struct TransactionManager { - txs_for_actor: BTreeMap, - actors_for_tx: HashMap, - - tx_id_nonce: u64, -} - -impl Default for TransactionManager { - fn default() -> Self { - Self { - txs_for_actor: Default::default(), - actors_for_tx: Default::default(), - - tx_id_nonce: Default::default(), - } - } -} - -impl TransactionManager { - fn inner_asquire_transaction( - &mut self, - kind: TransactionKind, - msg_source: ActorId, - check_action: T, - timestamp: u64, - ) -> Result, TransactionCacheError> { - let (tx_id, timestamp) = match kind { - TransactionKind::New => { - let id = self.tx_id_nonce; - - self.tx_id_nonce = id.wrapping_add(u8::MAX as _); - - if self.txs_for_actor.len() == MAX_NUMBER_OF_TXS { - let (tx, actor) = self - .txs_for_actor - .range(self.tx_id_nonce..) - .next() - .unwrap_or_else(|| { - let key_value = self.txs_for_actor.first_key_value(); - - debug_assert!(key_value.is_some(), "tx cache cycle is corrupted, perhaps the `MAX_NUMBER_OF_TXS` constant is less than 2"); - - unsafe { key_value.unwrap_unchecked() } - }); - let (tx, actor) = (*tx, *actor); - - self.txs_for_actor.remove(&tx); - self.actors_for_tx.remove(&actor); - } - - self.txs_for_actor.insert(id, msg_source); - self.actors_for_tx - .insert(msg_source, (id, check_action, timestamp)); - - (id, timestamp) - } - TransactionKind::Retry => { - let (id, true_checked_action, timestamp) = self - .actors_for_tx - .get(&msg_source) - .ok_or(TransactionCacheError::TransactionNotFound)?; - - if check_action.ne(true_checked_action) { - return Err(TransactionCacheError::MismatchedAction); - } - - (*id, *timestamp) - } - }; - - Ok(TransactionGuard { - _manager: self, - _msg_source: msg_source, - tx_id, - - step: 0, - - timestamp, - }) - } - - pub fn asquire_transaction( - &mut self, - kind: TransactionKind, - msg_source: ActorId, - check_action: T, - ) -> Result, TransactionCacheError> { - Self::inner_asquire_transaction(self, kind, msg_source, check_action, 0) - } - - pub fn asquire_transaction_with_timestamp( - &mut self, - kind: TransactionKind, - msg_source: ActorId, - check_action: T, - ) -> Result, TransactionCacheError> { - Self::inner_asquire_transaction( - self, - kind, - msg_source, - check_action, - exec::block_timestamp(), - ) - } - - pub fn cached_actions(&self) -> impl Iterator { - self.actors_for_tx - .iter() - .map(|(actor, (_, action, _))| (actor, action)) - } -} - -pub struct TransactionGuard<'a, T> { - _manager: &'a mut TransactionManager, - _msg_source: ActorId, - tx_id: u64, - - step: u8, - - pub timestamp: u64, -} - -impl TransactionGuard<'_, T> { - pub fn step(&mut self) -> Result { - let step = self.tx_id + self.step as u64; - - if let Some(next_step) = self.step.checked_add(1) { - self.step = next_step; - - Ok(step) - } else { - Err(TransactionCacheError::StepOverflow) - } - } -} diff --git a/contracts/supply-chain/src/utils.rs b/contracts/supply-chain/src/utils.rs deleted file mode 100644 index 0caa4ba47..000000000 --- a/contracts/supply-chain/src/utils.rs +++ /dev/null @@ -1,96 +0,0 @@ -use super::tx_manager::TransactionGuard; -use gear_lib_old::non_fungible_token::{ - io::NFTTransfer, - token::{TokenId, TokenMetadata}, -}; -use gstd::{ - errors::Result as GstdResult, - msg::{self, CodecMessageFuture}, - prelude::*, - ActorId, -}; -use non_fungible_token_io::{NFTAction, NFTEvent}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, LogicAction}; -use supply_chain_io::*; - -fn send(actor: ActorId, payload: impl Encode) -> GstdResult> { - Ok(msg::send_for_reply_as(actor, payload, 0, 0)?) -} - -fn nft_event_to_transfer(event: GstdResult) -> Result { - if let NFTEvent::Transfer(transfer) = event? { - Ok(transfer) - } else { - Err(Error::NFTTransferFailed) - } -} - -pub async fn mint_nft( - tx_guard: &mut TransactionGuard<'_, T>, - non_fungible_token: ActorId, - token_metadata: TokenMetadata, -) -> Result { - let transfer = nft_event_to_transfer( - send( - non_fungible_token, - NFTAction::Mint { - transaction_id: tx_guard.step()?, - token_metadata, - }, - )? - .await, - ) - .map_err(|error| { - if error == Error::NFTTransferFailed { - Error::NFTMintingFailed - } else { - error - } - })?; - - Ok(transfer.token_id) -} - -pub async fn transfer_nft( - tx_guard: &mut TransactionGuard<'_, T>, - non_fungible_token: ActorId, - to: ActorId, - token_id: TokenId, -) -> Result<(), Error> { - nft_event_to_transfer( - send( - non_fungible_token, - NFTAction::Transfer { - transaction_id: tx_guard.step()?, - to, - token_id, - }, - )? - .await, - )?; - - Ok(()) -} - -pub async fn transfer_ftokens( - tx_guard: &mut TransactionGuard<'_, T>, - fungible_token: ActorId, - sender: ActorId, - recipient: ActorId, - amount: u128, -) -> Result<(), Error> { - let payload = FTokenAction::Message { - transaction_id: tx_guard.step()?, - payload: LogicAction::Transfer { - sender, - recipient, - amount, - }, - }; - - if FTokenEvent::Ok != send(fungible_token, payload)?.await? { - Err(Error::FTTransferFailed) - } else { - Ok(()) - } -} diff --git a/contracts/supply-chain/state/Cargo.toml b/contracts/supply-chain/state/Cargo.toml deleted file mode 100644 index b4e32ea0f..000000000 --- a/contracts/supply-chain/state/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "supply-chain-state" -version.workspace = true -edition.workspace = true -publish.workspace = true - -[dependencies] -gstd.workspace = true -gmeta = { workspace = true, features = ["codegen"] } -supply-chain-io.workspace = true - -[build-dependencies] -gear-wasm-builder = { workspace = true, features = ["metawasm"] } diff --git a/contracts/supply-chain/state/build.rs b/contracts/supply-chain/state/build.rs deleted file mode 100644 index b4c4a44e3..000000000 --- a/contracts/supply-chain/state/build.rs +++ /dev/null @@ -1,3 +0,0 @@ -fn main() { - gear_wasm_builder::build_metawasm(); -} diff --git a/contracts/supply-chain/state/src/lib.rs b/contracts/supply-chain/state/src/lib.rs deleted file mode 100644 index 76e338a12..000000000 --- a/contracts/supply-chain/state/src/lib.rs +++ /dev/null @@ -1,62 +0,0 @@ -#![no_std] - -use gstd::{prelude::*, ActorId}; -use supply_chain_io::*; - -include!(concat!(env!("OUT_DIR"), "/wasm_binary.rs")); - -#[gmeta::metawasm] -pub mod metafns { - pub type State = supply_chain_io::State; - - pub fn item_info(state: State, item_id: ItemId) -> Option { - state - .items - .into_iter() - .find_map(|(some_item_id, item_info)| (some_item_id == item_id).then_some(item_info)) - } - - pub fn participants(state: State) -> Participants { - Participants { - producers: state.producers, - distributors: state.distributors, - retailers: state.retailers, - } - } - - pub fn roles(state: State, actor: ActorId) -> Vec { - let mut roles = vec![Role::Consumer]; - - if state.producers.contains(&actor) { - roles.push(Role::Producer); - } - if state.distributors.contains(&actor) { - roles.push(Role::Distributor); - } - if state.retailers.contains(&actor) { - roles.push(Role::Retailer); - } - - roles - } - - pub fn existing_items(state: State) -> Vec<(ItemId, ItemInfo)> { - state.items - } - - pub fn fungible_token(state: State) -> ActorId { - state.fungible_token - } - - pub fn non_fungible_token(state: State) -> ActorId { - state.non_fungible_token - } - - pub fn is_action_cached(state: State, actor: ActorId, action: InnerAction) -> bool { - if let Some(action) = action.into() { - state.cached_actions.contains(&(actor, action)) - } else { - false - } - } -} diff --git a/contracts/supply-chain/tests/approve_reuse.rs b/contracts/supply-chain/tests/approve_reuse.rs deleted file mode 100644 index 8f71b9e49..000000000 --- a/contracts/supply-chain/tests/approve_reuse.rs +++ /dev/null @@ -1,114 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -const ITEM_PRICE_BY_PRODUCER: u128 = ITEM_PRICE; -const ITEM_PRICE_BY_DISTRIBUTOR: u128 = ITEM_PRICE * 2; - -// TODO: fix test -#[test] -#[ignore] -fn approve_reuse_and_ft_transfer() { - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for (from, amount) in [ - (DISTRIBUTOR, ITEM_PRICE_BY_PRODUCER), - (RETAILER, ITEM_PRICE_BY_DISTRIBUTOR), - ] { - fungible_token.mint(from, amount); - fungible_token.approve(from, supply_chain.actor_id(), amount * 2); - } - - supply_chain.produce(PRODUCER).succeed(0); - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE_BY_PRODUCER) - .succeed(0); - supply_chain - .state() - .item_price(0) - .eq(Some(ITEM_PRICE_BY_PRODUCER)); - - // There may be a case when a buyer puts an inconvenient delivery time for a - // seller. - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - fungible_token - .balance(supply_chain.actor_id()) - .contains(ITEM_PRICE_BY_PRODUCER); - // Then the seller can cancel this purchase and put its item back up for - // sale. - supply_chain - .approve_by_producer(PRODUCER, 0, false) - .succeed((0, false)); - fungible_token - .balance(DISTRIBUTOR) - .contains(ITEM_PRICE_BY_PRODUCER); - // Thereafter the same buyer or another can purchase this item again and put - // a more convenient delivery time for the seller... - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - fungible_token - .balance(supply_chain.actor_id()) - .contains(ITEM_PRICE_BY_PRODUCER); - // ...who will approve this purchase and ship the item later. - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE_BY_DISTRIBUTOR) - .succeed(0); - supply_chain - .state() - .item_price(0) - .eq(Some(ITEM_PRICE_BY_DISTRIBUTOR)); - - // There may be a case when a buyer puts an inconvenient delivery time for a - // seller. - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - fungible_token - .balance(supply_chain.actor_id()) - .contains(ITEM_PRICE_BY_DISTRIBUTOR); - // Then the seller can cancel this purchase and put its item back up for - // sale. - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, false) - .succeed((0, false)); - fungible_token - .balance(RETAILER) - .contains(ITEM_PRICE_BY_DISTRIBUTOR); - // Thereafter the same buyer or another can purchase this item again and put - // a more convenient delivery time for the seller... - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - fungible_token - .balance(supply_chain.actor_id()) - .contains(ITEM_PRICE_BY_DISTRIBUTOR); - // ...who will approve this purchase and ship the item later. - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); -} diff --git a/contracts/supply-chain/tests/nft_transfer.rs b/contracts/supply-chain/tests/nft_transfer.rs deleted file mode 100644 index d33d3a134..000000000 --- a/contracts/supply-chain/tests/nft_transfer.rs +++ /dev/null @@ -1,114 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -// TODO: fix test -#[test] -#[ignore] -fn nft_transfer() { - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for from in [DISTRIBUTOR, RETAILER, CONSUMER] { - fungible_token.mint(from, ITEM_PRICE); - fungible_token.approve(from, supply_chain.actor_id(), ITEM_PRICE); - } - - supply_chain.produce(PRODUCER).succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(PRODUCER.into()); - - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE) - .succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(supply_chain.actor_id()); - - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(DISTRIBUTOR.into()); - - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE) - .succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(supply_chain.actor_id()); - - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); - supply_chain.ship_by_distributor(DISTRIBUTOR, 0).succeed(0); - - supply_chain.receive_by_retailer(RETAILER, 0).succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(RETAILER.into()); - - non_fungible_token.approve(RETAILER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_retailer(RETAILER, 0, ITEM_PRICE) - .succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(supply_chain.actor_id()); - - supply_chain.purchase_by_consumer(CONSUMER, 0).succeed(0); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(CONSUMER.into()); - - supply_chain.state().item_info(0).eq(Some(ItemInfo { - producer: PRODUCER.into(), - distributor: DISTRIBUTOR.into(), - retailer: RETAILER.into(), - - state: ItemState { - state: ItemEventState::Purchased, - by: Role::Consumer, - }, - price: ITEM_PRICE, - delivery_time: DELIVERY_TIME, - })); - non_fungible_token - .meta_state() - .owner_id(0) - .eq(CONSUMER.into()) -} diff --git a/contracts/supply-chain/tests/other.rs b/contracts/supply-chain/tests/other.rs deleted file mode 100644 index cf0caff79..000000000 --- a/contracts/supply-chain/tests/other.rs +++ /dev/null @@ -1,154 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -// TODO: fix test -#[test] -#[ignore] -fn interact_with_unexistent_item() { - const NONEXISTENT_ITEM: u128 = 99999999; - - let system = utils::initialize_system(); - - let fungible_token = FungibleToken::initialize(&system); - let non_fungible_token = NonFungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - supply_chain - .put_up_for_sale_by_producer(PRODUCER, NONEXISTENT_ITEM, ITEM_PRICE) - .failed(Error::ItemNotFound); - supply_chain - .purchase_by_distributor(DISTRIBUTOR, NONEXISTENT_ITEM, DELIVERY_TIME) - .failed(Error::ItemNotFound); - supply_chain - .approve_by_producer(PRODUCER, NONEXISTENT_ITEM, true) - .failed(Error::ItemNotFound); - supply_chain - .ship_by_producer(PRODUCER, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .receive_by_distributor(DISTRIBUTOR, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .process(DISTRIBUTOR, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .package(DISTRIBUTOR, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, NONEXISTENT_ITEM, ITEM_PRICE) - .failed(Error::ItemNotFound); - supply_chain - .purchase_by_retailer(RETAILER, NONEXISTENT_ITEM, DELIVERY_TIME) - .failed(Error::ItemNotFound); - supply_chain - .approve_by_distributor(DISTRIBUTOR, NONEXISTENT_ITEM, true) - .failed(Error::ItemNotFound); - supply_chain - .ship_by_distributor(DISTRIBUTOR, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .receive_by_retailer(RETAILER, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - supply_chain - .put_up_for_sale_by_retailer(RETAILER, NONEXISTENT_ITEM, ITEM_PRICE) - .failed(Error::ItemNotFound); - supply_chain - .purchase_by_consumer(CONSUMER, NONEXISTENT_ITEM) - .failed(Error::ItemNotFound); - - supply_chain.state().item_info(NONEXISTENT_ITEM).eq(None); - supply_chain.state().existing_items().eq([].into()); -} - -// TODO: fix test -#[test] -#[ignore] -fn initialization() { - let system = utils::initialize_system(); - - let fungible_token = FungibleToken::initialize(&system); - let non_fungible_token = NonFungibleToken::initialize(&system); - - let mut supply_chain_config = Initialize { - producers: vec![ActorId::zero()], - distributors: vec![ActorId::zero()], - retailers: vec![ActorId::zero()], - - fungible_token: fungible_token.actor_id(), - non_fungible_token: non_fungible_token.actor_id(), - }; - SupplyChain::initialize_custom_with_existential_deposit(&system, supply_chain_config.clone()) - .failed(Error::ZeroActorId); - - supply_chain_config.producers = [PRODUCER.into()].into(); - SupplyChain::initialize_custom_with_existential_deposit(&system, supply_chain_config.clone()) - .failed(Error::ZeroActorId); - - supply_chain_config.distributors = [DISTRIBUTOR.into()].into(); - SupplyChain::initialize_custom_with_existential_deposit(&system, supply_chain_config.clone()) - .failed(Error::ZeroActorId); - - supply_chain_config.retailers = [RETAILER.into()].into(); - let supply_chain = - SupplyChain::initialize_custom(&system, supply_chain_config.clone()).succeed(); - - supply_chain.state().participants().eq(Participants { - producers: supply_chain_config.producers, - distributors: supply_chain_config.distributors, - retailers: supply_chain_config.retailers, - }); - supply_chain - .state() - .fungible_token() - .eq(fungible_token.actor_id()); - supply_chain - .state() - .non_fungible_token() - .eq(non_fungible_token.actor_id()); -} - -// TODO: fix test -#[test] -#[ignore] -fn query_existing_items() { - let system = utils::initialize_system(); - - let fungible_token = FungibleToken::initialize(&system); - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - let item_infos = (0..=5) - .map(|item_id| { - supply_chain.produce(PRODUCER).succeed(item_id); - - ( - item_id.into(), - ItemInfo { - producer: PRODUCER.into(), - distributor: Default::default(), - retailer: Default::default(), - - state: ItemState { - state: Default::default(), - by: Role::Producer, - }, - price: Default::default(), - delivery_time: Default::default(), - }, - ) - }) - .collect(); - - supply_chain.state().existing_items().eq(item_infos); -} diff --git a/contracts/supply-chain/tests/ownership_and_role.rs b/contracts/supply-chain/tests/ownership_and_role.rs deleted file mode 100644 index 0d8eae6c9..000000000 --- a/contracts/supply-chain/tests/ownership_and_role.rs +++ /dev/null @@ -1,205 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -// Pairs of participants are needed here to test ownership of items. -const PRODUCER: [u64; 2] = [5, 6]; -const DISTRIBUTOR: [u64; 2] = [7, 8]; -const RETAILER: [u64; 2] = [9, 10]; - -// TODO: fix test -#[test] -#[ignore] -fn ownership_and_role() { - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize_custom( - &system, - Initialize { - producers: [PRODUCER[0].into(), PRODUCER[1].into()].into(), - distributors: [DISTRIBUTOR[0].into(), DISTRIBUTOR[1].into()].into(), - retailers: [RETAILER[0].into(), RETAILER[1].into()].into(), - - fungible_token: fungible_token.actor_id(), - non_fungible_token: non_fungible_token.actor_id(), - }, - ) - .succeed(); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for from in [DISTRIBUTOR[0], RETAILER[0]] { - fungible_token.mint(from, ITEM_PRICE); - fungible_token.approve(from, supply_chain.actor_id(), ITEM_PRICE); - } - - // Should fail because `msg::source()` must be a producer. - supply_chain - .produce(FOREIGN_USER) - .failed(Error::AccessRestricted); - supply_chain.produce(PRODUCER[0]).succeed(0); - - supply_chain - .put_up_for_sale_by_producer(FOREIGN_USER, 0, ITEM_PRICE) - .failed(Error::AccessRestricted); - supply_chain - .put_up_for_sale_by_producer(PRODUCER[1], 0, ITEM_PRICE) - .failed(Error::AccessRestricted); - non_fungible_token.approve(PRODUCER[0], supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER[0], 0, ITEM_PRICE) - .succeed(0); - - supply_chain - .purchase_by_distributor(FOREIGN_USER, 0, DELIVERY_TIME) - .failed(Error::AccessRestricted); - supply_chain - .purchase_by_distributor(DISTRIBUTOR[0], 0, DELIVERY_TIME) - .succeed(0); - - supply_chain - .approve_by_producer(FOREIGN_USER, 0, true) - .failed(Error::AccessRestricted); - supply_chain - .approve_by_producer(PRODUCER[1], 0, true) - .failed(Error::AccessRestricted); - supply_chain - .approve_by_producer(PRODUCER[0], 0, true) - .succeed((0, true)); - - supply_chain - .ship_by_producer(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .ship_by_producer(PRODUCER[1], 0) - .failed(Error::AccessRestricted); - supply_chain.ship_by_producer(PRODUCER[0], 0).succeed(0); - - supply_chain - .receive_by_distributor(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .receive_by_distributor(DISTRIBUTOR[1], 0) - .failed(Error::AccessRestricted); - supply_chain - .receive_by_distributor(DISTRIBUTOR[0], 0) - .succeed(0); - - supply_chain - .process(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .process(DISTRIBUTOR[1], 0) - .failed(Error::AccessRestricted); - supply_chain.process(DISTRIBUTOR[0], 0).succeed(0); - - supply_chain - .package(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .package(DISTRIBUTOR[1], 0) - .failed(Error::AccessRestricted); - supply_chain.package(DISTRIBUTOR[0], 0).succeed(0); - - supply_chain - .put_up_for_sale_by_distributor(FOREIGN_USER, 0, ITEM_PRICE) - .failed(Error::AccessRestricted); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR[1], 0, ITEM_PRICE) - .failed(Error::AccessRestricted); - non_fungible_token.approve(DISTRIBUTOR[0], supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR[0], 0, ITEM_PRICE) - .succeed(0); - - supply_chain - .purchase_by_retailer(FOREIGN_USER, 0, DELIVERY_TIME) - .failed(Error::AccessRestricted); - supply_chain - .purchase_by_retailer(RETAILER[0], 0, DELIVERY_TIME) - .succeed(0); - - supply_chain - .approve_by_distributor(FOREIGN_USER, 0, true) - .failed(Error::AccessRestricted); - supply_chain - .approve_by_distributor(DISTRIBUTOR[1], 0, true) - .failed(Error::AccessRestricted); - supply_chain - .approve_by_distributor(DISTRIBUTOR[0], 0, true) - .succeed((0, true)); - - supply_chain - .ship_by_distributor(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .ship_by_distributor(DISTRIBUTOR[1], 0) - .failed(Error::AccessRestricted); - supply_chain - .ship_by_distributor(DISTRIBUTOR[0], 0) - .succeed(0); - - supply_chain - .receive_by_retailer(FOREIGN_USER, 0) - .failed(Error::AccessRestricted); - supply_chain - .receive_by_retailer(RETAILER[1], 0) - .failed(Error::AccessRestricted); - supply_chain.receive_by_retailer(RETAILER[0], 0).succeed(0); - - supply_chain - .put_up_for_sale_by_retailer(FOREIGN_USER, 0, ITEM_PRICE) - .failed(Error::AccessRestricted); - supply_chain - .put_up_for_sale_by_retailer(RETAILER[1], 0, ITEM_PRICE) - .failed(Error::AccessRestricted); -} - -// TODO: fix test -#[test] -#[ignore] -fn query_roles() { - let system = utils::initialize_system(); - - let fungible_token = FungibleToken::initialize(&system); - let non_fungible_token = NonFungibleToken::initialize(&system); - - let mut supply_chain = SupplyChain::initialize_custom( - &system, - Initialize { - producers: vec![FOREIGN_USER.into()], - distributors: vec![FOREIGN_USER.into()], - retailers: vec![FOREIGN_USER.into()], - - fungible_token: fungible_token.actor_id(), - non_fungible_token: non_fungible_token.actor_id(), - }, - ) - .succeed(); - supply_chain.state().roles(FOREIGN_USER).eq([ - Role::Consumer, - Role::Producer, - Role::Distributor, - Role::Retailer, - ] - .into()); - - supply_chain = SupplyChain::initialize_custom( - &system, - Initialize { - producers: [].into(), - distributors: [].into(), - retailers: [].into(), - - fungible_token: fungible_token.actor_id(), - non_fungible_token: non_fungible_token.actor_id(), - }, - ) - .succeed(); - supply_chain - .state() - .roles(FOREIGN_USER) - .eq([Role::Consumer].into()); -} diff --git a/contracts/supply-chain/tests/receive.rs b/contracts/supply-chain/tests/receive.rs deleted file mode 100644 index 3af14de34..000000000 --- a/contracts/supply-chain/tests/receive.rs +++ /dev/null @@ -1,216 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -const DELIVERY_TIME_IN_BLOCKS: u32 = (DELIVERY_TIME / 3000) as _; - -// TODO: fix test -#[test] -#[ignore] -fn delivery_wo_delay() { - const NO_DELAY: u32 = DELIVERY_TIME_IN_BLOCKS; - - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for from in [DISTRIBUTOR, RETAILER] { - fungible_token.mint(from, ITEM_PRICE); - fungible_token.approve(from, supply_chain.actor_id(), ITEM_PRICE); - } - - supply_chain.produce(PRODUCER).succeed(0); - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - - system.spend_blocks(NO_DELAY); - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - // Since the delivery is completed on time, - // all fungible tokens are transferred to the producer (seller). - fungible_token.balance(PRODUCER).contains(ITEM_PRICE); - fungible_token.balance(DISTRIBUTOR).contains(0); - - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); - supply_chain.ship_by_distributor(DISTRIBUTOR, 0).succeed(0); - - system.spend_blocks(NO_DELAY); - supply_chain.receive_by_retailer(RETAILER, 0).succeed(0); - // Since the delivery is completed on time, - // all fungible tokens are transferred to the distributor (seller). - fungible_token.balance(DISTRIBUTOR).contains(ITEM_PRICE); - fungible_token.balance(RETAILER).contains(0); -} - -// TODO: fix test -#[test] -#[ignore] -fn delivery_with_delay() { - // Even and odd prices required for a reliable penalty calculation check. - const ITEM_PRICE: [u128; 2] = [123123, 12341234]; - const DELAY: u32 = DELIVERY_TIME_IN_BLOCKS * 2 - 1; - - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for (from, amount) in [(DISTRIBUTOR, ITEM_PRICE[0]), (RETAILER, ITEM_PRICE[1])] { - fungible_token.mint(from, amount); - fungible_token.approve(from, supply_chain.actor_id(), amount); - } - - supply_chain.produce(PRODUCER).succeed(0); - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE[0]) - .succeed(0); - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - - system.spend_blocks(DELAY); - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - // Since the delivery is completed with the delay, - // the half of fungible tokens is transferred to the producer (seller) - // and the other half of them is refunded to the distributor (buyer). - fungible_token.balance(PRODUCER).contains(ITEM_PRICE[0] / 2); - fungible_token - .balance(DISTRIBUTOR) - .contains(ITEM_PRICE[0] - ITEM_PRICE[0] / 2); - - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE[1]) - .succeed(0); - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); - supply_chain.ship_by_distributor(DISTRIBUTOR, 0).succeed(0); - - system.spend_blocks(DELAY); - supply_chain.receive_by_retailer(RETAILER, 0).succeed(0); - // Since the delivery is completed with the delay, - // the half of fungible tokens is transferred to the distributor (seller) - // and the other half of them is refunded to the retailer (buyer). - fungible_token - .balance(DISTRIBUTOR) - .contains(ITEM_PRICE[0] - ITEM_PRICE[0] / 2 + ITEM_PRICE[1] / 2); - fungible_token - .balance(RETAILER) - .contains(ITEM_PRICE[1] - ITEM_PRICE[1] / 2); -} - -// TODO: fix test -#[test] -#[ignore] -fn delivery_with_big_delay() { - const BIG_DELAY: u32 = DELIVERY_TIME_IN_BLOCKS * 2; - - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for from in [DISTRIBUTOR, RETAILER] { - fungible_token.mint(from, ITEM_PRICE); - fungible_token.approve(from, supply_chain.actor_id(), ITEM_PRICE); - } - - supply_chain.produce(PRODUCER).succeed(0); - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - - system.spend_blocks(BIG_DELAY); - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - // Since the delivery is completed with the big delay, - // all fungible tokens are refunded to the distributor (buyer). - fungible_token.balance(PRODUCER).contains(0); - fungible_token.balance(DISTRIBUTOR).contains(ITEM_PRICE); - - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); - supply_chain.ship_by_distributor(DISTRIBUTOR, 0).succeed(0); - - system.spend_blocks(BIG_DELAY); - supply_chain.receive_by_retailer(RETAILER, 0).succeed(0); - // Since the delivery is completed with the big delay, - // all fungible tokens are refunded to the retailer (buyer). - fungible_token.balance(DISTRIBUTOR).contains(ITEM_PRICE); - fungible_token.balance(RETAILER).contains(ITEM_PRICE); -} diff --git a/contracts/supply-chain/tests/state.rs b/contracts/supply-chain/tests/state.rs deleted file mode 100644 index 3e7d0f868..000000000 --- a/contracts/supply-chain/tests/state.rs +++ /dev/null @@ -1,117 +0,0 @@ -use utils::{prelude::*, FungibleToken, NonFungibleToken}; - -pub mod utils; - -// TODO: fix test -#[test] -#[ignore] -fn state() { - let system = utils::initialize_system(); - - let mut non_fungible_token = NonFungibleToken::initialize(&system); - let mut fungible_token = FungibleToken::initialize(&system); - let mut supply_chain = SupplyChain::initialize( - &system, - fungible_token.actor_id(), - non_fungible_token.actor_id(), - ); - - non_fungible_token.add_minter(supply_chain.actor_id()); - - for from in [DISTRIBUTOR, RETAILER, CONSUMER] { - // Double balances to catch bugs. - fungible_token.mint(from, ITEM_PRICE * 2); - fungible_token.approve(from, supply_chain.actor_id(), ITEM_PRICE * 2); - } - - supply_chain.produce(PRODUCER).succeed(0); - - non_fungible_token.approve(PRODUCER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .put_up_for_sale_by_producer(PRODUCER, 0, ITEM_PRICE) - .failed(Error::UnexpectedItemState); - - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .purchase_by_distributor(DISTRIBUTOR, 0, DELIVERY_TIME) - .failed(Error::UnexpectedItemState); - - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .succeed((0, true)); - supply_chain - .approve_by_producer(PRODUCER, 0, true) - .failed(Error::UnexpectedItemState); - - supply_chain.ship_by_producer(PRODUCER, 0).succeed(0); - supply_chain - .ship_by_producer(PRODUCER, 0) - .failed(Error::UnexpectedItemState); - - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .succeed(0); - supply_chain - .receive_by_distributor(DISTRIBUTOR, 0) - .failed(Error::UnexpectedItemState); - - supply_chain.process(DISTRIBUTOR, 0).succeed(0); - supply_chain - .process(DISTRIBUTOR, 0) - .failed(Error::UnexpectedItemState); - - supply_chain.package(DISTRIBUTOR, 0).succeed(0); - supply_chain - .package(DISTRIBUTOR, 0) - .failed(Error::UnexpectedItemState); - - non_fungible_token.approve(DISTRIBUTOR, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .put_up_for_sale_by_distributor(DISTRIBUTOR, 0, ITEM_PRICE) - .failed(Error::UnexpectedItemState); - - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .succeed(0); - supply_chain - .purchase_by_retailer(RETAILER, 0, DELIVERY_TIME) - .failed(Error::UnexpectedItemState); - - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .succeed((0, true)); - supply_chain - .approve_by_distributor(DISTRIBUTOR, 0, true) - .failed(Error::UnexpectedItemState); - - supply_chain.ship_by_distributor(DISTRIBUTOR, 0).succeed(0); - supply_chain - .ship_by_distributor(DISTRIBUTOR, 0) - .failed(Error::UnexpectedItemState); - - supply_chain.receive_by_retailer(RETAILER, 0).succeed(0); - supply_chain - .receive_by_retailer(RETAILER, 0) - .failed(Error::UnexpectedItemState); - - non_fungible_token.approve(RETAILER, supply_chain.actor_id(), 0); - supply_chain - .put_up_for_sale_by_retailer(RETAILER, 0, ITEM_PRICE) - .succeed(0); - supply_chain - .put_up_for_sale_by_retailer(RETAILER, 0, ITEM_PRICE) - .failed(Error::UnexpectedItemState); - - supply_chain.purchase_by_consumer(CONSUMER, 0).succeed(0); - supply_chain - .purchase_by_consumer(CONSUMER, 0) - .failed(Error::UnexpectedItemState); -} diff --git a/contracts/supply-chain/tests/state_consistency.rs b/contracts/supply-chain/tests/state_consistency.rs deleted file mode 100644 index 2d232c22a..000000000 --- a/contracts/supply-chain/tests/state_consistency.rs +++ /dev/null @@ -1,550 +0,0 @@ -use gclient::Result; -use gear_lib_old::non_fungible_token::{io::NFTApproval, token::TokenMetadata}; -use gstd::prelude::*; -use non_fungible_token_io::{Config, InitNFT, NFTAction, NFTEvent}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; -use supply_chain::WASM_BINARY_OPT; -use supply_chain_deploy::*; -use supply_chain_io::*; - -// TODO: fix test -#[tokio::test] -#[ignore] -async fn gclient_state_consistency() -> Result<()> { - let mut client = Client::local().await?; - - let storage_code_hash = client.upload_code(FT_STORAGE).await?; - let ft_logic_code_hash = client.upload_code(FT_LOGIC).await?; - - let ft_actor_id = client - .upload_program( - FT_MAIN, - InitFToken { - storage_code_hash, - ft_logic_code_hash, - }, - ) - .await?; - - let nft_actor_id = client - .upload_program( - NFT_BINARY, - InitNFT { - royalties: Default::default(), - collection: Default::default(), - config: Config { - authorized_minters: vec![ALICE.into()], - ..Default::default() - }, - }, - ) - .await?; - - let (supply_chain_actor_id, reply) = client - .upload_program_and_wait_reply::>( - WASM_BINARY_OPT.into(), - Initialize { - producers: vec![ALICE.into()], - distributors: vec![ALICE.into()], - retailers: vec![ALICE.into()], - - fungible_token: ft_actor_id.into(), - non_fungible_token: nft_actor_id.into(), - }, - ) - .await?; - assert_eq!(reply, Ok(())); - - assert_eq!( - NFTEvent::MinterAdded { - minter_id: supply_chain_actor_id.into(), - }, - client - .send_message( - nft_actor_id, - NFTAction::AddMinter { - transaction_id: 0, - minter_id: supply_chain_actor_id.into(), - }, - ) - .await? - ); - - let item_id = 0.into(); - let price = 123456; - let delivery_time = 600000; - let approve = true; - let mut payload = Action::new(InnerAction::Producer(ProducerAction::Produce { - token_metadata: TokenMetadata::default(), - })); - - assert!( - FTokenEvent::Ok - == client - .send_message( - ft_actor_id, - FTokenAction::Message { - transaction_id: 0, - payload: LogicAction::Mint { - recipient: ALICE.into(), - amount: price - }, - }, - ) - .await? - ); - assert!( - FTokenEvent::Ok - == client - .send_message( - ft_actor_id, - FTokenAction::Message { - transaction_id: 1, - payload: LogicAction::Approve { - approved_account: supply_chain_actor_id.into(), - amount: price * 3, - }, - }, - ) - .await? - ); - - // InnerAction::Producer(ProducerAction::Produce) - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Produced, - by: Role::Producer - } - }) - ); - - // InnerAction::Producer(ProducerAction::PutUpForSale) - - assert_eq!( - NFTEvent::Approval(NFTApproval { - owner: ALICE.into(), - approved_account: supply_chain_actor_id.into(), - token_id: item_id - }), - client - .send_message( - nft_actor_id, - NFTAction::Approve { - transaction_id: 1, - to: supply_chain_actor_id.into(), - token_id: item_id - }, - ) - .await? - ); - - payload = Action::new(InnerAction::Producer(ProducerAction::PutUpForSale { - item_id, - price, - })); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Producer - } - }), - ); - - // InnerAction::Distributor(DistributorAction::Purchase) - - payload = Action::new(InnerAction::Distributor(DistributorAction::Purchase { - item_id, - delivery_time, - })); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Distributor - } - }), - ); - - // InnerAction::Producer(ProducerAction::Approve) - - payload = Action::new(InnerAction::Producer(ProducerAction::Approve { - item_id, - approve, - })); - - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.clone()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Approved, - by: Role::Producer - } - }) - ); - - // InnerAction::Producer(ProducerAction::Ship) - - assert_eq!( - client - .send_message_for_sc( - supply_chain_actor_id, - Action::new(InnerAction::Producer(ProducerAction::Ship(item_id))) - ) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Shipped, - by: Role::Producer - } - }), - ); - - // InnerAction::Distributor(DistributorAction::Receive) - - payload = Action::new(InnerAction::Distributor(DistributorAction::Receive( - item_id, - ))); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Received, - by: Role::Distributor - } - }), - ); - - // InnerAction::Distributor(DistributorAction::Process) - - assert_eq!( - client - .send_message_for_sc( - supply_chain_actor_id, - Action::new(InnerAction::Distributor(DistributorAction::Process( - item_id - ))) - ) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Processed, - by: Role::Distributor - } - }), - ); - - // InnerAction::Distributor(DistributorAction::Package) - - assert_eq!( - client - .send_message_for_sc( - supply_chain_actor_id, - Action::new(InnerAction::Distributor(DistributorAction::Package( - item_id - ))) - ) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Packaged, - by: Role::Distributor - } - }), - ); - - // InnerAction::Distributor(DistributorAction::PutUpForSale) - - assert_eq!( - NFTEvent::Approval(NFTApproval { - owner: ALICE.into(), - approved_account: supply_chain_actor_id.into(), - token_id: item_id - }), - client - .send_message( - nft_actor_id, - NFTAction::Approve { - transaction_id: 2, - to: supply_chain_actor_id.into(), - token_id: item_id - }, - ) - .await? - ); - - payload = Action::new(InnerAction::Distributor(DistributorAction::PutUpForSale { - item_id, - price, - })); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Distributor - } - }), - ); - - // InnerAction::Retailer(RetailerAction::Purchase) - - payload = Action::new(InnerAction::Retailer(RetailerAction::Purchase { - item_id, - delivery_time, - })); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Retailer - } - }) - ); - - // InnerAction::Distributor(DistributorAction::Approve) - - payload = Action::new(InnerAction::Distributor(DistributorAction::Approve { - item_id, - approve, - })); - - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.clone()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Approved, - by: Role::Distributor - } - }), - ); - - // InnerAction::Distributor(DistributorAction::Ship) - - assert_eq!( - client - .send_message_for_sc( - supply_chain_actor_id, - Action::new(InnerAction::Distributor(DistributorAction::Ship(item_id))) - ) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Shipped, - by: Role::Distributor - } - }), - ); - - // InnerAction::Retailer(RetailerAction::Receive) - - payload = Action::new(InnerAction::Retailer(RetailerAction::Receive(item_id))); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Received, - by: Role::Retailer - } - }), - ); - - // InnerAction::Retailer(RetailerAction::PutUpForSale) - - assert_eq!( - NFTEvent::Approval(NFTApproval { - owner: ALICE.into(), - approved_account: supply_chain_actor_id.into(), - token_id: item_id - }), - client - .send_message( - nft_actor_id, - NFTAction::Approve { - transaction_id: 3, - to: supply_chain_actor_id.into(), - token_id: item_id - }, - ) - .await? - ); - - payload = Action::new(InnerAction::Retailer(RetailerAction::PutUpForSale { - item_id, - price, - })); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Retailer - } - }), - ); - - // InnerAction::Consumer(ConsumerAction::Purchase) - - payload = Action::new(InnerAction::Consumer(ConsumerAction::Purchase(item_id))); - - println!( - "{}", - client - .send_message_with_insufficient_gas(supply_chain_actor_id, payload.clone(),) - .await? - ); - assert!( - client - .is_action_cached(supply_chain_actor_id, payload.clone()) - .await? - ); - assert_eq!( - client - .send_message_for_sc(supply_chain_actor_id, payload.to_retry()) - .await?, - Ok(Event { - item_id, - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Consumer - } - }), - ); - - Ok(()) -} diff --git a/contracts/supply-chain/tests/utils/common.rs b/contracts/supply-chain/tests/utils/common.rs deleted file mode 100644 index fd60295e9..000000000 --- a/contracts/supply-chain/tests/utils/common.rs +++ /dev/null @@ -1,149 +0,0 @@ -use convert::identity; -use fmt::Debug; -use gstd::{ - collections::{HashMap, HashSet}, - prelude::*, - ActorId, -}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use hash::Hash; -use marker::PhantomData; - -pub fn initialize_system() -> System { - let system = System::new(); - - system.init_logger(); - - system -} - -pub trait Program { - fn inner_program(&self) -> &InnerProgram<'_>; - - fn actor_id(&self) -> ActorId { - let bytes: [u8; 32] = self.inner_program().id().into(); - - bytes.into() - } -} - -pub trait TransactionalProgram { - fn previous_mut_transaction_id(&mut self) -> &mut u64; - - fn transaction_id(&mut self) -> u64 { - let tx_id = self.previous_mut_transaction_id(); - - *tx_id = tx_id.wrapping_add(1); - - *tx_id - } -} - -#[must_use] -pub struct StateReply(pub T); - -impl StateReply { - #[track_caller] - pub fn eq(self, value: T) { - assert_eq!(self.0, value); - } -} - -impl From>> for StateReply> { - fn from(value: StateReply>) -> Self { - Self(value.0.into_iter().collect()) - } -} - -impl From>> for StateReply> { - fn from(value: StateReply>) -> Self { - Self(value.0.into_iter().collect()) - } -} - -#[must_use] -pub struct RunResult { - pub result: InnerRunResult, - event: fn(T) -> R, - ghost_data: PhantomData, -} - -impl RunResult { - pub fn new(result: InnerRunResult, event: fn(T) -> R) -> Self { - Self { - result, - event, - ghost_data: PhantomData, - } - } - - #[track_caller] - fn assert_contains(self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - self.assert_contains(Err::(error)); - } - - #[track_caller] - fn common_succeed(self, value: T, wrap: fn(R) -> V) { - let event = (self.event)(value); - - self.assert_contains(wrap(event)); - } - - #[track_caller] - pub fn succeed(self, value: T) { - self.common_succeed(value, Ok::); - } - - #[track_caller] - pub fn contains(self, value: T) { - self.common_succeed(value, identity); - } -} - -#[must_use] -pub struct InitResult { - contract_instance: T, - pub result: InnerRunResult, - pub is_active: bool, - ghost_data: PhantomData, -} - -impl InitResult { - pub fn new(contract_instance: T, result: InnerRunResult, is_active: bool) -> Self { - Self { - contract_instance, - result, - is_active, - ghost_data: PhantomData, - } - } - - fn assert_contains(&self, payload: impl Encode) { - assert_contains(&self.result, payload); - } - - #[track_caller] - pub fn failed(self, error: E) { - assert!(!self.is_active); - self.assert_contains(Err::<(), E>(error)); - } - - #[track_caller] - pub fn succeed(self) -> T { - assert!(self.is_active); - self.assert_contains(Ok::<_, E>(())); - - self.contract_instance - } -} - -#[track_caller] -fn assert_contains(result: &InnerRunResult, payload: impl Encode) { - assert!(!result.main_failed()); - assert!(result.contains(&Log::builder().payload(payload))); -} diff --git a/contracts/supply-chain/tests/utils/fungible_token.rs b/contracts/supply-chain/tests/utils/fungible_token.rs deleted file mode 100644 index 3c4a09f0c..000000000 --- a/contracts/supply-chain/tests/utils/fungible_token.rs +++ /dev/null @@ -1,84 +0,0 @@ -use super::{Program, RunResult, TransactionalProgram, FOREIGN_USER}; -use gstd::{prelude::*, ActorId}; -use gtest::{Log, Program as InnerProgram, RunResult as InnerRunResult, System}; -use sharded_fungible_token_io::{FTokenAction, FTokenEvent, InitFToken, LogicAction}; -use supply_chain_deploy::{FT_LOGIC, FT_MAIN, FT_STORAGE}; - -pub struct FungibleToken<'a>(InnerProgram<'a>, u64); - -impl Program for FungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl TransactionalProgram for FungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> FungibleToken<'a> { - #[track_caller] - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file(system, FT_MAIN); - let storage_code_id: [u8; 32] = system.submit_code_file(FT_STORAGE).into(); - let logic_code_id: [u8; 32] = system.submit_code_file(FT_LOGIC).into(); - - assert!(!program - .send( - FOREIGN_USER, - InitFToken { - storage_code_hash: storage_code_id.into(), - ft_logic_code_hash: logic_code_id.into(), - }, - ) - .main_failed()); - - Self(program, 0) - } - - #[track_caller] - pub fn mint(&mut self, recipient: u64, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - FOREIGN_USER, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Mint { - recipient: recipient.into(), - amount, - }, - }, - )) - } - - #[track_caller] - pub fn approve(&mut self, from: u64, approved_account: impl Into, amount: u128) { - let transaction_id = self.transaction_id(); - - assert_ft_token_event_ok(self.0.send( - from, - FTokenAction::Message { - transaction_id, - payload: LogicAction::Approve { - approved_account: approved_account.into(), - amount, - }, - }, - )); - } - - pub fn balance(&self, actor_id: impl Into) -> RunResult { - RunResult::new( - self.0 - .send(FOREIGN_USER, FTokenAction::GetBalance(actor_id.into())), - FTokenEvent::Balance, - ) - } -} - -fn assert_ft_token_event_ok(run_result: InnerRunResult) { - assert!(run_result.contains(&Log::builder().payload(FTokenEvent::Ok))) -} diff --git a/contracts/supply-chain/tests/utils/mod.rs b/contracts/supply-chain/tests/utils/mod.rs deleted file mode 100644 index a3e06f207..000000000 --- a/contracts/supply-chain/tests/utils/mod.rs +++ /dev/null @@ -1,473 +0,0 @@ -use common::{InitResult, Program, RunResult, StateReply, TransactionalProgram}; -use gstd::{ - collections::{HashMap, HashSet}, - prelude::*, - ActorId, -}; -use gtest::{Program as InnerProgram, System}; -use supply_chain_io::*; -use supply_chain_state::{WASM_BINARY, WASM_EXPORTS}; - -mod common; -mod fungible_token; -mod non_fungible_token; - -pub mod prelude; - -pub use self::non_fungible_token::NonFungibleToken; -pub use common::initialize_system; -pub use fungible_token::FungibleToken; - -pub const EXISTENTIAL_DEPOSIT: u128 = 10_000_000_000_000; -pub const FOREIGN_USER: u64 = 1029384756123; -pub const PRODUCER: u64 = 5; -pub const DISTRIBUTOR: u64 = 7; -pub const RETAILER: u64 = 9; - -type SupplyChainRunResult = RunResult; - -pub struct SupplyChain<'a>(InnerProgram<'a>); - -impl Program for SupplyChain<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl<'a> SupplyChain<'a> { - pub fn initialize( - system: &'a System, - fungible_token: ActorId, - non_fungible_token: ActorId, - ) -> Self { - Self::initialize_custom( - system, - Initialize { - producers: vec![PRODUCER.into()], - distributors: vec![DISTRIBUTOR.into()], - retailers: vec![RETAILER.into()], - - fungible_token, - non_fungible_token, - }, - ) - .succeed() - } - - pub fn initialize_custom( - system: &'a System, - config: Initialize, - ) -> InitResult, Error> { - Self::common_initialize_custom(system, config, false) - } - - pub fn initialize_custom_with_existential_deposit( - system: &'a System, - config: Initialize, - ) -> InitResult, Error> { - Self::common_initialize_custom(system, config, true) - } - - fn common_initialize_custom( - system: &'a System, - config: Initialize, - is_exdep_needed: bool, - ) -> InitResult, Error> { - let program = InnerProgram::current_opt(system); - - if is_exdep_needed { - system.mint_to(program.id(), EXISTENTIAL_DEPOSIT); - } - - let result = program.send(FOREIGN_USER, config); - let is_active = system.is_active_program(program.id()); - - InitResult::new(Self(program), result, is_active) - } - - pub fn state(&self) -> SupplyChainState<'_> { - SupplyChainState(&self.0) - } - - pub fn produce(&mut self, from: u64) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Producer(ProducerAction::Produce { - token_metadata: Default::default(), - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Produced, - by: Role::Producer, - }, - }, - ) - } - - pub fn put_up_for_sale_by_producer( - &mut self, - from: u64, - item_id: u128, - price: u128, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Producer(ProducerAction::PutUpForSale { - item_id: item_id.into(), - price, - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Producer, - }, - }, - ) - } - - pub fn purchase_by_distributor( - &mut self, - from: u64, - item_id: u128, - delivery_time: u64, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Purchase { - item_id: item_id.into(), - delivery_time, - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Distributor, - }, - }, - ) - } - - pub fn approve_by_producer( - &mut self, - from: u64, - item_id: u128, - approve: bool, - ) -> SupplyChainRunResult<(u128, bool)> { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Producer(ProducerAction::Approve { - item_id: item_id.into(), - approve, - })), - ), - |(item_id, approved)| Event { - item_id: item_id.into(), - item_state: ItemState { - state: bool_to_event(approved), - by: Role::Producer, - }, - }, - ) - } - - pub fn ship_by_producer(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Producer(ProducerAction::Ship(item_id.into()))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Shipped, - by: Role::Producer, - }, - }, - ) - } - - pub fn receive_by_distributor( - &mut self, - from: u64, - item_id: u128, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Receive( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Received, - by: Role::Distributor, - }, - }, - ) - } - - pub fn process(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Process( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Processed, - by: Role::Distributor, - }, - }, - ) - } - - pub fn package(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Package( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Packaged, - by: Role::Distributor, - }, - }, - ) - } - - pub fn put_up_for_sale_by_distributor( - &mut self, - from: u64, - item_id: u128, - price: u128, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::PutUpForSale { - item_id: item_id.into(), - price, - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Distributor, - }, - }, - ) - } - - pub fn purchase_by_retailer( - &mut self, - from: u64, - item_id: u128, - delivery_time: u64, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Retailer(RetailerAction::Purchase { - item_id: item_id.into(), - delivery_time, - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Retailer, - }, - }, - ) - } - - pub fn approve_by_distributor( - &mut self, - from: u64, - item_id: u128, - approve: bool, - ) -> SupplyChainRunResult<(u128, bool)> { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Approve { - item_id: item_id.into(), - approve, - })), - ), - |(item_id, approved)| Event { - item_id: item_id.into(), - item_state: ItemState { - state: bool_to_event(approved), - by: Role::Distributor, - }, - }, - ) - } - - pub fn ship_by_distributor(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Distributor(DistributorAction::Ship( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Shipped, - by: Role::Distributor, - }, - }, - ) - } - - pub fn receive_by_retailer(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Retailer(RetailerAction::Receive( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Received, - by: Role::Retailer, - }, - }, - ) - } - - pub fn put_up_for_sale_by_retailer( - &mut self, - from: u64, - item_id: u128, - price: u128, - ) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Retailer(RetailerAction::PutUpForSale { - item_id: item_id.into(), - price, - })), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::ForSale, - by: Role::Retailer, - }, - }, - ) - } - - pub fn purchase_by_consumer(&mut self, from: u64, item_id: u128) -> SupplyChainRunResult { - RunResult::new( - self.0.send( - from, - Action::new(InnerAction::Consumer(ConsumerAction::Purchase( - item_id.into(), - ))), - ), - |item_id| Event { - item_id: item_id.into(), - item_state: ItemState { - state: ItemEventState::Purchased, - by: Role::Consumer, - }, - }, - ) - } -} - -pub struct SupplyChainState<'a>(&'a InnerProgram<'a>); - -impl SupplyChainState<'_> { - fn query_state_common( - self, - fn_index: usize, - argument: Option, - ) -> StateReply { - StateReply( - self.0 - .read_state_using_wasm(0, WASM_EXPORTS[fn_index], WASM_BINARY.into(), argument) - .unwrap(), - ) - } - - fn query_state_with_argument( - self, - fn_index: usize, - argument: A, - ) -> StateReply { - self.query_state_common(fn_index, Some(argument)) - } - - fn query_state(self, fn_index: usize) -> StateReply { - self.query_state_common::<(), _>(fn_index, None) - } - - pub fn item_price(self, item_id: u128) -> StateReply> { - StateReply(self.item_info(item_id).0.map(|item_info| item_info.price)) - } - - pub fn item_info(self, item_id: u128) -> StateReply> { - self.query_state_with_argument(1, ItemId::from(item_id)) - } - - pub fn participants(self) -> StateReply { - self.query_state(2) - } - - pub fn existing_items(self) -> StateReply> { - let result: StateReply> = self.query_state(4); - - result.into() - } - - pub fn fungible_token(self) -> StateReply { - self.query_state(5) - } - - pub fn non_fungible_token(self) -> StateReply { - self.query_state(6) - } - - pub fn roles(self, actor_id: u64) -> StateReply> { - let result: StateReply> = self.query_state_with_argument(3, ActorId::from(actor_id)); - - result.into() - } -} - -fn bool_to_event(is_approved: bool) -> ItemEventState { - if is_approved { - ItemEventState::Approved - } else { - ItemEventState::ForSale - } -} diff --git a/contracts/supply-chain/tests/utils/non_fungible_token.rs b/contracts/supply-chain/tests/utils/non_fungible_token.rs deleted file mode 100644 index 53d6cfa9d..000000000 --- a/contracts/supply-chain/tests/utils/non_fungible_token.rs +++ /dev/null @@ -1,109 +0,0 @@ -use super::{prelude::*, StateReply, TransactionalProgram}; -use gear_lib_old::non_fungible_token::{ - io::NFTApproval, - token::{Token, TokenId}, -}; -use gstd::ActorId; -use gtest::{Log, Program as InnerProgram, System}; -use non_fungible_token_io::{Config, InitNFT, NFTAction, NFTEvent}; -use supply_chain_deploy::NFT_BINARY; - -pub struct NonFungibleToken<'a>(InnerProgram<'a>, u64); - -impl Program for NonFungibleToken<'_> { - fn inner_program(&self) -> &InnerProgram<'_> { - &self.0 - } -} - -impl TransactionalProgram for NonFungibleToken<'_> { - fn previous_mut_transaction_id(&mut self) -> &mut u64 { - &mut self.1 - } -} - -impl<'a> NonFungibleToken<'a> { - pub fn initialize(system: &'a System) -> Self { - let program = InnerProgram::from_file(system, NFT_BINARY); - - assert!(!program - .send( - FOREIGN_USER, - InitNFT { - royalties: Default::default(), - collection: Default::default(), - config: Config { - authorized_minters: vec![FOREIGN_USER.into()], - ..Default::default() - }, - }, - ) - .main_failed()); - - Self(program, 0) - } - - pub fn add_minter(&mut self, actor: impl Into) { - let transaction_id = self.transaction_id(); - let actor = actor.into(); - - assert!(self - .0 - .send( - FOREIGN_USER, - NFTAction::AddMinter { - transaction_id, - minter_id: actor, - }, - ) - .contains(&Log::builder().payload(NFTEvent::MinterAdded { minter_id: actor })),) - } - - pub fn approve(&mut self, from: u64, to: ActorId, token_id: u128) { - let transaction_id = self.transaction_id(); - - assert!(self - .0 - .send( - from, - NFTAction::Approve { - transaction_id, - to, - token_id: token_id.into() - }, - ) - .contains(&Log::builder().payload(NFTEvent::Approval(NFTApproval { - owner: from.into(), - approved_account: to, - token_id: token_id.into() - }))),) - } - - pub fn meta_state(&self) -> NonFungibleTokenState<'_> { - NonFungibleTokenState(&self.0) - } -} - -pub struct NonFungibleTokenState<'a>(&'a InnerProgram<'a>); - -impl NonFungibleTokenState<'_> { - pub fn owner_id(self, token_id: u128) -> StateReply { - StateReply(self.token(token_id).0.owner_id) - } - - pub fn token(self, token_id: u128) -> StateReply { - StateReply( - self.0 - .read_state_using_wasm( - 0, - "token", - gclient::code_from_os( - "../target/wasm32-unknown-unknown/release/non_fungible_token_state.meta.wasm", - ) - .unwrap(), - Some(TokenId::from(token_id)), - ) - .unwrap(), - ) - } -} diff --git a/contracts/supply-chain/tests/utils/prelude.rs b/contracts/supply-chain/tests/utils/prelude.rs deleted file mode 100644 index 584835b65..000000000 --- a/contracts/supply-chain/tests/utils/prelude.rs +++ /dev/null @@ -1,7 +0,0 @@ -pub use super::{common::Program, SupplyChain, DISTRIBUTOR, FOREIGN_USER, PRODUCER, RETAILER}; -pub use gstd::{prelude::*, ActorId}; -pub use supply_chain_io::*; - -pub const CONSUMER: u64 = 11; -pub const ITEM_PRICE: u128 = 4321166243; -pub const DELIVERY_TIME: u64 = 1814400000; diff --git a/contracts/tic-tac-toe/README.md b/contracts/tic-tac-toe/README.md index e2c42b0cc..9f41fd0b0 100644 --- a/contracts/tic-tac-toe/README.md +++ b/contracts/tic-tac-toe/README.md @@ -1,16 +1,16 @@ [![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=vara-man/https://github.com/gear-foundation/dapps) [![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/vara_man_io) -# Tic-Tac-Toe +# Sails Tic-Tac-Toe ### 🏗️ Building ```sh -cargo b -r -p "tic-tac-toe*" +cargo b -r -p "tic-tac-toe-wasm" ``` ### ✅ Testing ```sh -cargo t -r -p "tic-tac-toe*" +cargo t -r -p "tic-tac-toe-app" ``` diff --git a/contracts/tic-tac-toe/sails/app/Cargo.toml b/contracts/tic-tac-toe/app/Cargo.toml similarity index 100% rename from contracts/tic-tac-toe/sails/app/Cargo.toml rename to contracts/tic-tac-toe/app/Cargo.toml diff --git a/contracts/tic-tac-toe/sails/app/src/lib.rs b/contracts/tic-tac-toe/app/src/lib.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/lib.rs rename to contracts/tic-tac-toe/app/src/lib.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/game/funcs.rs b/contracts/tic-tac-toe/app/src/services/game/funcs.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/game/funcs.rs rename to contracts/tic-tac-toe/app/src/services/game/funcs.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/game/mod.rs b/contracts/tic-tac-toe/app/src/services/game/mod.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/game/mod.rs rename to contracts/tic-tac-toe/app/src/services/game/mod.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/game/utils.rs b/contracts/tic-tac-toe/app/src/services/game/utils.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/game/utils.rs rename to contracts/tic-tac-toe/app/src/services/game/utils.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/mod.rs b/contracts/tic-tac-toe/app/src/services/mod.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/mod.rs rename to contracts/tic-tac-toe/app/src/services/mod.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/session/funcs.rs b/contracts/tic-tac-toe/app/src/services/session/funcs.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/session/funcs.rs rename to contracts/tic-tac-toe/app/src/services/session/funcs.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/session/mod.rs b/contracts/tic-tac-toe/app/src/services/session/mod.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/session/mod.rs rename to contracts/tic-tac-toe/app/src/services/session/mod.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/session/utils.rs b/contracts/tic-tac-toe/app/src/services/session/utils.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/session/utils.rs rename to contracts/tic-tac-toe/app/src/services/session/utils.rs diff --git a/contracts/tic-tac-toe/sails/app/src/services/utils.rs b/contracts/tic-tac-toe/app/src/services/utils.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/src/services/utils.rs rename to contracts/tic-tac-toe/app/src/services/utils.rs diff --git a/contracts/tic-tac-toe/sails/app/tests/test.rs b/contracts/tic-tac-toe/app/tests/test.rs similarity index 100% rename from contracts/tic-tac-toe/sails/app/tests/test.rs rename to contracts/tic-tac-toe/app/tests/test.rs diff --git a/contracts/tic-tac-toe/gstd/Cargo.toml b/contracts/tic-tac-toe/gstd/Cargo.toml deleted file mode 100644 index 30dffdc50..000000000 --- a/contracts/tic-tac-toe/gstd/Cargo.toml +++ /dev/null @@ -1,26 +0,0 @@ -[package] -name = "tic-tac-toe" -version.workspace = true -edition.workspace = true -license.workspace = true -authors.workspace = true - -[dependencies] -gstd = { workspace = true } -tic-tac-toe-io.workspace = true - -[build-dependencies] -gmeta.workspace = true -tic-tac-toe-io.workspace = true -gear-wasm-builder.workspace = true - -[dev-dependencies] -gstd.workspace = true -gtest.workspace = true -gclient.workspace = true -tokio.workspace = true -hex.workspace = true -gear-core.workspace = true - -[features] -binary-vendor = [] diff --git a/contracts/tic-tac-toe/gstd/README.md b/contracts/tic-tac-toe/gstd/README.md deleted file mode 100644 index 9a88cf8bd..000000000 --- a/contracts/tic-tac-toe/gstd/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=vara-man/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/vara_man_io) - -# Tic-Tac-Toe - -### 🏗️ Building - -```sh -cargo b -r -p "tic-tac-toe" -``` - -### ✅ Testing - -```sh -cargo t -r -p "tic-tac-toe" -``` diff --git a/contracts/tic-tac-toe/gstd/assets/accounts_10k.txt b/contracts/tic-tac-toe/gstd/assets/accounts_10k.txt deleted file mode 100644 index 4fa66d599..000000000 --- a/contracts/tic-tac-toe/gstd/assets/accounts_10k.txt +++ /dev/null @@ -1,10000 +0,0 @@ -0x2b06e1c02aae15f3842e36eab8d02a64dbc251a11bb8267fc4e105f3df2d245c -0xd01dd7bed4e906e73867987cbd0ac2403bc437461a0f3ce05082ab10f8f797c7 -0x2207612a88bdd79b1c0152a458e02c68c1a31689463ebdd7e00979cb7525c4c5 -0xf0d694ad6be2bcba205cce17594250f3652e61857daed9e60fdd9244c89e2472 -0x96140a3329b675e8c165a6367e7419e30b7cbf7ec292f23e3d5029e3ea07708c -0x8283067b46e223b8ba348be8799cadb4b427ff764376163cd2e47f8eaf67f4f7 -0x7c5b243f5ee9e2e03382587156b29847baf45d74086d89da029a2df472a6b62f -0xdd13633493889367f9bc6cbe09c62f0a427754195ebb851ccad2784568b1ee9e -0x610b7748611e28e2f6f09b7e0d14bf7607cd278b4c98221d34a2174978adc865 -0x10f4b77dfcf66fe93916b66a034746131ad1c4fcbadb64641f7515a34d1f352c -0xb79a42c5a85f87b592b91724d3c7fb2ed07552f6a75eef9ac21b9d7a7fa2f729 -0x9bf0c6a6306fcbccead3ed5e4ae3356c8b7b2770906486f0d73b3902722d7b7d -0x143483b2c0c4a1e12f5613eefdfe9ff3c5ea2c962643a31bcf962396c9e1e09d -0xe9f104be4605182518579f6b627f94ae0bfb2bcad30745ab208ebdee0128e6fe -0x692f6611bac34835e16716fff487a753b01668c3a6bfba982780f91e42db582d -0x432e02582978cd4d9484663d6c245ac40fc61dcc1e991825673bdcd0900c559a -0xffb9b73485ee2edf09c5e7aa98929e467979d3301492ca9c13fb1f11e0519ae1 -0x32b9f47075f6dac896b0ad7431f8b6110de862e834cd44bc9f4c1aa5f95d92fe -0xc6438ead507a7d8c3087de885cd116c496402a6b6543f0eb6164c82db30e8aa6 -0xe6b0161a8b7efe9b9fd47ae3847fe7a814f6de406d8dc106c170ca0751a6e3c1 -0x436fa2fca06fbbb9607579ffca137d6aff0b6c8715e81b85b346a81167679bb4 -0x1760e1630c02103ef48aa762ca0f13b6ad166c2fae28fef99f4186ba8c5dd903 -0x868b49cb92131f047739ef58732c03e54100da303220bce120d6a5cee51dcb1d -0x35a69715bf6ce0f79a4cb66ee51fc35e769b9f9ea34b0819912beb8c580feee5 -0x88d7716db3a1c2e95701a6d52b3a8d0fb6372ca9084bee9e1134546d71fd1453 -0xc7aabb403d0b31cb50adc7a7b3a1b73b50893e6929cf9f05c3581a7c9abe71fe -0x612ebb274a2773a619ad500d777f9b09e247edaf131920fa18f2bd26a1afd6d7 -0x7c86be45c80cc9618e812976ddd6849146e0fbf38ae3eabc446adb8efe72cd77 -0x1485314b1bb7b1848970afe26a57299c041cedaef7b287c374984320609269f2 -0x405db6cf3a1347411333a8936940964d2eee5c9771fddc3fa426cc24cfa86e5b -0x11ae00a81f1d9b0b409435375c1f4992cc434eeb5f55869623a866f02ad7b753 -0xe5dcc5c5699dfc3ce591eef745a14483c435b85d2377ab5303d2c89b6a929e22 -0x93eba60c335da1efd1de82f2bdbb99478ade599ff83cac21c7bd6cb59d25d1e8 -0xd0e4492d49e017e7aaf6b436e7f9ab2012281032ea856b410e2667ca3e7a8163 -0xfc259e75dcde9aa9f5949a760fb062e54049971d48d963a1ef25a34ab000d7d6 -0x0c20f6f2155e977b9910991af8c229ba479a4cb1291eff5a1075664d3974a9b2 -0x2993ea37bb0ca3ac1fc8a972a9ad68fcc354dd72b604219113b235895e7ad74e -0x8d9bb81e4581eb7798b64fabd3329485063cf7fb384af72a70343f706ce34926 -0xae39b99ab6a24c4f0e24f1fae0b9e804ac407d980b27e3c54ee4330e3a58512f -0x47d94191ffe1eaa947a7fcac72ae091d4ba12c57369271ad60ff8d4fec9ca987 -0xb2c25a76fed348bfff81f0fca6b2847d8eda7fbb5fdbfb5443976751a4b36837 -0x32baa4067cb0f31b29c8ce6faf6faa7f443b44fc9cfbd54d6de2f488f6f962c8 -0x3185529850dec2e964e7832ff335bae51a75cd03c701a1a4ad728e1aa6cfbe02 -0x9c16d64155142ece9c9de9e7ecc6b2c283dcc8d9eb57044f2ae816473abbb700 -0x9c92c649c48ead364551c3a108d7a8334dc99bc679d3cc87d80e2d6813478c68 -0x8eb63dae1c0eccf19ef4be5c2f1431378762ecf9bd7f7233c04b010494eb5f57 -0xb36b158cd7906e87c7fe2d0c545c19cb4dde6d2b033844a1effb5d1a90b96fd3 -0x48faea8775c3fa5c769809088c8b977b4e36eef328d5c797c17452f4fc709073 -0x84b1898b52f7f6b184bce8572c03d40e5f7add7c0cbf0e1fd6385eaa9d0d4c1b -0x4beb9e45b640d5e51175ef3c01a9fcf33e4a2c497832dc05bc59776a86c634ab -0x09945eae2bda6477c576193fe7368186301e6f20040fc6804d266ea6e3b9fea7 -0x6430d4380e166e4b039709e7f4c7853097bb068d670f0c27fd012f778bff06be -0x48b89309c059ea78f69b95e02b58da82e311de4560c0092c573b9efcf0be561e -0x025ffe9ec41f30d1661004367998ad0914ac139cdf20cc48d98fbfb937d84825 -0x2ca7f33384d328d080d2afe2c2801067a5b77f318238104532532649bc1d28b4 -0xebcd158bb1b73f1faa56bfc606a92020dd7ccf49a67d2e5f9d7dd84e9b517319 -0xa2466928ad397c8732b4eb0308680e564c515605609a13534fb7e3629993d5ed -0x371c4e9f99e35357bc538c331d2e4a2057844f18f229ea37741ef9cbb0339c20 -0xe7fd386daaa76a7617b3748e65739ec5ef448a2ed64ffb5ca133e29dd7a6f9fc -0xab0f5950420c912e8629c6b20853a753c68efc4c4f12a410c7a9eae12e2604aa -0x99a5232f49a993d37e792d2e27a26471a039097fa3c9d40d933c6d5d2323c595 -0x64cbe5669409c7bf72c8917675e2927ccc1aedfdd20c2f9cccee2ba9e7e335b0 -0xa50ea81cb0b492a2cc8767764b3eaf4ce24276c598f8ca724a97f85384d57334 -0xd4fce455a509766abc226f54b0da9a4636805d2f866d02ebd0b342d869f240b8 -0x688c76be932486cf9c131c70efb17dc6c08100ffdcfc9d9598f9d37dfdfa1bee -0x1d45666f92b34e5ca18a83137f909908dced5c56c604d410acde8f8678b1465a -0x2102239c1b7d263c1b180657fe361c6fb7e727af9189573b4b7bb9a89c2ff8d9 -0x805b8ae2d206230421887b590f3748cc91369e485d745096f4324d40f377a472 -0x40a02163865d520cb1a508b866e85a94bf80875bd5a80634f6bb4bc2ff64f367 -0xe8c5e8014ea28adcda994bbb7394a18fd34cf87538b55e30ac7cccc0926d8e1b -0xfc32583b5805c92ceb33b8866260b803c7a7c69d012765ae86a52a9121605569 -0x0184e65d9377d570485dac905d8f4685a2d8e62ec3729b65a52b9a7b29e7a327 -0xd402161ccb0d7df96b5a532490423d8903e213287458ff2a4994362f35484687 -0xae889a12216d956f63646bcf77248a280ee28632ca112e8aa7cb0e2718d8a75f -0xc220a61c02969926478ca06f5dd5de5e6a924f4198931cb530a2ca2b72cbde93 -0x2d17ba72a0841b963e79ab98c55bfb3a1e2f412d8d2b1f49406f66067192c175 -0x7d2b9c698fef936e802b43d212066c030db4374f72591896a6aff766e968bf65 -0x8395d8c8cb8e163e6026307a1f4cef6948f5b12e02b2795347c81bb6d48eab8c -0x738c448bdc19c171f18772305867a2db2f67e005f3f6bfd89d08a0c7c80a6e5d -0xab4162b4d249df31a95c58f307264c8d8305a9570ad21c8ca744de2a02b359a4 -0xcd2dbb8776c048ab91cbb373ac4e9345cbd58b1d9971ed8fc89cba97d86c2fd6 -0x4d0f308722f60fd4f24ab90135c4d246bdcc32b17b8ebca4eb3e83b228d11134 -0xfbd8dc8136995e8d91eab46d1becc364f86d5a53df180e7c7c0706cffc2909cb -0x783f6896aa3936c0573d1fd90a28af866735271c03d8a44a2d41fe0b85aea679 -0x6162a20279842bbc5dac80a2a22d7114421edf0efa45db572ebb294a9924ce3c -0x32c820f1fb08364d09a7f1c0fa2ddde9aa1ba30c480abc06fe636a795386116e -0x4d545934d5d2809d31459430d546f11e7122cecdbe53f0d825f171bc12f2154c -0xf277a55228ac0ce0520292f4e2c6045de398b3086d84d96fa0f40c04d51bcb13 -0x841ec26b67df26da5152dce2e955ca6dc8355f62792788eb37480005f9e3ffbd -0xf9f9791a87cd000c637c03bfcb165152a3a99e919cadb3a72700de55c5d2f253 -0x07e265c62e391f5b42de8792f2356bb551ac97607b26d3e1f65cfdba015ff042 -0x22af9ef44f1eca9d5c8b78fe6a125fe03450e5e90489f60122b08131270de436 -0x662a417eb229220ace652585be4f62b204c95a67ee3f6687d6ce13936f1e9fde -0x8229fd9a589b56bfefcb6312dff23cd7c7c77f7388c40d373752156087013d5a -0x52a4a24004b76475dcf4ec8798e981e7515c2ed088824a57f798015fa59b2d46 -0x2f8d72bc81a1acb2c41a07425d74fbb07db7dc78691f0601e7dba8a451a75414 -0x326ad5701185f2c5fc14fef77820e5a198d037ca0e727e57ba3e4927c2fcfd4d -0xc119867255b1ba6bce2e558231fd24c7e86211f4d2f392a9785f467f697601a5 -0x86141b40fe1c0882816386f7e4b332dab01465d019e0ceab04ba25ed6ed7ff57 -0x5938fa4f93e2f2ac066bd27045768d88855cdd69840a0a8603c28808d5d2521d -0x9b4805b1b2060178421a37da89ddf0ac9de23059f95ba2a11d8c222f442c672e -0xb9b54d5513c4b29d8db02ace2c15994271498f878d1a5fc3cd64bacc0c44189b -0xcd8d0e2468651e03d01bb80987a193bcb6e1599dccc00e2c016cc026c6873fa8 -0x57fb2eae46cd45d4c3e4ced9c9a37d84feaf47fb92f38beff29dbd9b0961b729 -0x7e54a0975801de46edd828f9067691a8379ab87044fae2704816b4feed56210b -0xfb7d618822fb3aa958e582955e2bbd11eeb59384a067e96d87f2149c40daa2d8 -0x86c09167e62415d7e77a0e8e2ea7932b8892b115a7bdb7004d982d18e7ea4e39 -0x3a05f835193d122db6599831fa87aa4f64f078ca115ce85cca34f4aecf7e4a18 -0xf961906a3deb49fd9a97e646c23c5c4bbba89227fab1c063598baaa9b72c2635 -0x5630f85ea0ef899e08afb62bbd21b88b3bcb82c2b0c316ac08d8aed0462660df -0xe18cd34549ee65b90491c3270a9cb4249424ebf830769908cc339676e7064d34 -0x1d4c3f3b2feb25f75aad949dc4dd813791dab71345cb7a00fb1e254bdbeb1641 -0x6a147ea9c35aabbddec379a6e3fa19e854578ad59190d6059cb4c122603ca899 -0x624663f12738ff1efb4b42eb35c52bbfa704a8e806235b92631df66590c0d469 -0xf758af1b65fdb5bfd4c1744f2ab0bab0579fef52a40c9e653c81f866e2143fdd -0x145e1912db13f643a017c12f94744f6b960bf45d01ebb9a572411ffa978b887d -0x69ed38cd43379e0816a7c3e0edfc7320a8118daeffb2875f43be7d92dff3ede9 -0xfa2f15c39b77ca7a1cf5bdb2e1e203f91cc478b698647123d06f661312013e21 -0xd09fb48457c7c73482069f8349aa11d291be20aa913e89f05ab47631cc48fdf5 -0x98e42ae082934557e20493d499793eee2862d40ce95bc29ccfb7d5eecf813c76 -0x48c4765393e6b53d735d81b8bffed2fa56a3248ccfeb44b1db88179f0cc60658 -0xd6c63b824e57c08341efd66af02816497fe579456caffb87fda8e237a96b7a10 -0xf632cdeb6a5b5dee6bc90a2c6941a142950f6e09c4207bb9f99d2da8f5b37c72 -0x232c88604eea6016df73177b3935a94a32e5acfd30a4aa7e44da2eee4ce57b95 -0x98f39820ae1284aca53d65c60062d623d05e03b01ba013f89310783949ee24c2 -0x4774bded28c8c58779e0097f4f09ab5e73c6fb28c9ba17f9a6e1554d42dfec75 -0x21a879c463b4915b95ab0cf333647d34b592e051955e56fe9785c10ab90103b0 -0x3155c21632f00a92ebdace18cba2d1d6633525d46bd031e1ac406ade7ca83910 -0x18354ba6e5539d00f3144319e87135ebb9bff95d0a98ab8ec3c2b8c4f53db565 -0x3b478441d99a43085385d9a7b8925bc43bdcdccac6d7423aeea7239e561f3cd9 -0x88f64cd90312812acde0f07bbad0b8aca0ff326bd5f7f2b7a9d2671977eae9b0 -0x5869494855912a4f040e07870581f47c641bfc532c997cd1ac9c8c8b867fdd86 -0xffd390d16985a0fea15ac5f2a2e75655ce8291b48ec0750be7940b0a31126b40 -0x5eb526b75982053e651bb65246b67ef862edde23fb8e0851e40f2922e658f417 -0x4e3e05deee1d2e064180940c228c1b8e5c1adaab1546b6aad6dc08e2be41053a -0x32ec8e1b556c1d9d4639f0473c15d485bfba627d0013c01aba6da4d63584cc79 -0xbda0e379c5aba68642dd58b9ffb61d47bcd678465d4d8896c2e10eb2b51e520d -0xc3de77276a6892edc0c6b0a564e1e1a35ffe66d69802d1fbb2bc609100a4cb67 -0xa670c964688e8b7dd19e296f3afa544f9c5f617ac0717b42dc041fdf2f2530c3 -0x8bdfce9af295afff928c6ac286ac40a84367fe9c30769611b56734789375d49f -0xbdeb30c44f75122ca397716495bbd7e8172c0f26212d3c867691df0ddd5f72e4 -0xc91e6381b2084e97c9dd9ad434d663d8cd416d79ec82d581db30939ceb7c7a31 -0x24d85bfd8880d4e8f1125ed89329abaf802f8a56414f924061ece3c950173752 -0x2a40629db3ef794e7c0281857fcd7451f5ea49929c6b3bffe2a1cf18d3b41865 -0xa031c4f5050f6dc39fecad6359be21458d2efe504941eab682f6d3f7dc4968db -0xd5586412f883a757f156125b91d4ea8c76a494f69217d141e8e11ed3e82aa464 -0xf23f181119d2d9e206ec2011385e0d7f735e1c23624854c6551d7281d1e1eef9 -0xca983143ae0714cb63f27026f3843ef977b66f50bd6a2b47576abbc6fc86575e -0x03392b3d0313f390cc83f0bfde888782871e0583c2b424869f35e294f43c0eaa -0x27c11b4d45e84ed235e39ce5f7111f90b77b08af03b0ad92ca6e3d1b8849bd29 -0x7039c5fe513cec58c3872c9f277f8e829d49a609549d56ac7df37fa73c9853d0 -0xeb7a621230a80662551c15e14142a5a212b1adb22ccfe1630ecedd3744e7562e -0xb7624ec0aaf7d409dc0613b6fd515d5871564b0a87aab06f1b0e9f4ae45e3e8c -0x418588d03d75bcf1c181ad135ba0a84ba58177f4deaee90b9b2bbcc9144681c2 -0x885ecb221bd63455404bea5573824f32d73e9f407393ed26e4943215b02e5748 -0x2241dd78d95ec71c9e9bb1e5484c316128d4b6310500b116137d9ee8c44edfb5 -0x76d0e0428f116d6f1845969713c253d254466da6052be65cca4d3b959fe61865 -0xc6943408a0a031d7a89da2c10b69cfa96bc4620d6b9fcc3906b5d5a12f888340 -0xaf5c8c599c4d1410cf07374fd00831fd8f94379b8bdc2052e3591d2adffe7d4f -0xa56f32962816aff6f99e7a65d96e12e8dbc3dbbc68fa8cdb7faecdc888ee6db6 -0x5a33b7b266058fc7b5e7fffb91600d864e41133b1e6006980bbdb8c7d41bef4b -0xd263ec188500d98d224e46c059f526827c10d8915caf68714c69c1c7a013348b -0x59682adae63c008d327046255c23ff708683c8390da64cff3b26fbe2e476083c -0xf3d98e450f5310cb8db1d22e4573af4e91308da0ea22c5b976ff3289e8232f86 -0x685117c2f15b0836e4e6694eef5a9ea810338b472eaee4c37b21758c490e25f3 -0x3b1b4721e6bbf7fe878df55e0f508d732498d9ab687638f88e1976964e80be44 -0x22e196982ab81449f7fc1375ce8c988cf3d4b16973bc7215a1dffe496023cd7a -0xd8720f5fad5ab28fd9937c4f502c466a03964bf4698a7cff443bc71ed14c344d -0x508968a0962f8e653402ccb8032e53b2c9b19c681bf5f616a8829a1d2e9fcc7c -0xd3bc1b67491014c10d46ec45ad432aa7e2fb9d60952ec56717cbe8c6c53bbc02 -0x0127de99da6779a267904a38c325fb6ba61a7df0a7fcc1c2b47f67fd920f09b6 -0xdcd25671939cc0432bcb29383bb8717be6ea9517c24061fe546ed80844eb69ac -0x8bd4cf2f926a437f5ca96adfcdd4d292b2d540ed074cae3ac5a5e03f94573b5f -0xbfe0f04c966f36d476d123ed9c7a674f467148072219d0dfbf59f9772543d179 -0x68ba7b3618f5fba65c414b71d2f7b0aea3598901cf606c948b61266a6a8da416 -0x3e3505ae4e7978a94fe0b66d23eab560cb18d5d8f326809b3d1728e284b8ba1d -0x06d06f713ac9064b7395b8062fcf534c95205daccf5f8f33625d620786394d43 -0xa9453c5a50ac1f04ca679f647660d1af21e6414f6810f8ba44dc5ef7aaaabc18 -0x4866173cc3194563a5f739b627829b5bc6078b76c5afee99f49b425d0c06f2cd -0x0854299ed2023613e836f26d44a17f44398af1b4c80d7dc99d705dc6afe4d4c2 -0x1640cb4bde541be32195d1c1523f55a9c149a6d17a475863a672b249b3206730 -0x8c451324fb9925365cd31697ee682cf7bb899df86993e3091df596d757fafeee -0xdb6db74f213f92d15145162a905682d62002c75b639d0d15ecae3f983decf07a -0xf7bb080c8243a416b5ff001edfa9829d7c4e2dc43769a22bd943db3deafa38d3 -0xc9330c2583718a13f0162fed64baa7565ff00d60837346af4c14dcee8faf41ab -0xe9ec3081ef9a7ecb5a856cf6242c01b230cbcd25929157975118bc13eece102c -0xf9857557da24166496c11537e2ebc75cacc1edea38c3f775ec356c6c0fee3f9a -0xbbab32d22f6878f917a1a8a09e1f8f9e486adf6faf5faae6ac5870b2bec053c3 -0x40d51b14c1629467d0e3adbc2344805bba7d1b565ce41b0dbbeb66f105208a49 -0x7ddc29985d2777672cd7d44113294855f33985802038db297b0bd37b23ce36c1 -0x782f9792fa253f33f08718658912d561e91460d12f40d94c617737d08e48838c -0xb2479ec2d2cf24c62145664519f67cf5aae460047b94ba07e98edff447ff5cbb -0x05c50a64184dd49a454106d9fb260607be1f7e938f0e68af20f56fb94e54b777 -0xe7792d91bb56a217b364c20f960ef2d00c2b0d2e8d2d05e06f83881bc3695206 -0x16edf94fa5695d8b86b460ffba0dfe4069f9a22c99bc7acfa1eac740c32015a7 -0x1883b4f9ff9955589015266c5c15a1e9d41f1c838d55a8b4a1a354e93e0f2122 -0xf56b2779120cc8aa69dc59821c8e78d1bea077881b49a400746c327eb6377827 -0xfa8b613cfca7e8168c0f9caf87772176b2a4c2faf86b5af4359201fae3760377 -0x0aa0333a297006c2938afe20721ed7c355944170d5d38f50636fa32974c53d6a -0xf6fc64090531d77ea21b275419d209ea352902fb05620eab9b9dcc735c727a8d -0x58893181a4452f904ff6e609dd14809f4ff2962de84f8ccb5f1700dd08812d5f -0x8f1fd5c163a75101e13972cc77fdd9673eb05bff1e9b8d6fd0b84c3c787318a7 -0x60ce91cd370dfa75106d78325e7c7487605ab0946f10e3600c76dd3f8ce8cf74 -0x8d3480724c3419d209bc134a9da6353c291f1a426081e9d6d8af174c6053e35f -0xdf04eee3e1c88904e733cc195422661c510c22fa0292ff64a1bc898c39a74fb7 -0x7ef2a65fbb36711efec8538de814c8e37575a38aed8eacc2e599d373f11f9d85 -0xefa6bc771b1d0fd920a98f76794c375457e5889fa02def3c9cabc76e869ef657 -0x22491100f1c9f9dd750f5d6e8b600762fee1e5ac7be042ed9bc3bc1cf12b6133 -0xb72742b419e48715dbccd922b5674eca6b4005b384f07b789867f7c6a889fc2d -0xfc63211f1f1c7ff150b019a8df0fad7bad3a8afbdc5a6b428c6d9ada9ddb15d7 -0x5627f40ff99fe2397bc3d145238883c785174a15edd42bd7da22ef724691faf5 -0x73a47d759bd1b0e63d6252bdac7c35855d9534bc793ad0c3099926b016fb01b0 -0x1cf54cae57fd5f43f1006b3a0f8d758729de9ada3881216647aeac8154ad455c -0x3a01e055688191e8264c2d88c7e4249b861c14bc991f65d0394676b994a30e40 -0x650266ed7a5a679ddd5c6b827aae88a8de6110381c415bdb9fa984040e7d7f98 -0x6b2a48e3f36dc2df37c666e98aeef2bdd270ee34e072abd1f5f378615b91329d -0x9d94d294e109756c0dc3022ce71cacb18258506968f06ba923da552bbcc5824e -0xeb6bdb11227e6722e6f265c692678ac4f1a0aa6d4cdcf96100c7320b014b7628 -0xfde4a5a2b83b56e940e1561770c1439ad93d0d72f136abe556e0b9bc53f0aeab -0x948fa9f5a8023149729eb939628057c4756497b17d98aed462c6439b890f40d5 -0x8f27c23bea4eaa7b941dfa118e5162066c9b550ed6c9d5990cf82a66e99996db -0x8281fbece7dd34b77e6f620b56245e4cb7c4e0605228e8a405e03212c0e64e6a -0xf30d0ba48803f7b9a6568578f8c8d6f01ced1cb11af59e4b9f5ebb885472cad4 -0xa086ac5fca35146441294db3721e7b89a66dbbca70febaed8bdecbe5be3fefad -0x3593241554ecba7b1d9eeb1557ed2e8cd8ffcce4fbf6141373f64e5734ae9d6e -0x14bb469caae3f450e67c4038eb9e532639ffddfc9f9c2320ca8565ddf74ece92 -0x8478fcaa50e81b25c6eb499d7635d96032e4cbc08d7e8aed31ea31feeafc0f56 -0x3049c4c190da149ba8524b2897b8a592982e0816830c3a95cc5d0c51cb1b9fc8 -0xa08fe7419b8603728eff4426a07660d5f1f5873cdaf47df0c1358b5033c73212 -0x002513edaff7c778870655f4712aad485f99e36393f696cd0163fb8700a77db3 -0x3af8a4dd697bbf2390930af942b81e41c85f89ebf432decac56c150255fbf1ec -0xda4f554734509ddfc582f38596e740e2ea48ebfca964f57da8f8345a904db28d -0x7806e45e585105489f03e447f72f399458142771df275377d0fed198ac52b84b -0x7c6b904847fb7f7c55b9277d648883c8787ad361f2b0039781b4b2a6542c2519 -0x7f7c060be11e15aa46da87fb1a6c5754e7eb3eee5c8ffd445d9da6a1adff1e3a -0xfcbf1dd14fd7daa74e8ad7c531d919277aef942fe63edabce1cb06a36fc09158 -0xa9472004a477852c0462b25d96666ce67d9c7d6efc667964dc185f410c9fee56 -0xe0cc180b4626e2818b99805e6e0edb7703496a5e170ac71ba718e5f336f43eb1 -0x1c14e2e85d24bf94cd3de4aceb9c90d735ff72d3d421a42b2a2ff21c06e3894c -0x3220f6479c68ca1a2cd97141c490e86f686845876990da09c1844b8a3526d80c -0x68e3565c745f8fe19eec3e3abd34a682370cddc0045c26b6838e0c01e1db2f76 -0xac470314548c060eaad66b9d5b58224941386f548fa104be7c4e8770b4a95d59 -0x57ad3e3ccb35f416080f86df15b3e584a365b608e5763797ec63560675450ad8 -0xf13a1ef5ac49f9a3e61e5443c2dc5a895162c1d99662d74e57fee753bd7fa28c -0xd6fa16ea9e49c07765af2efd6d2e1e5c23da1f9555e2f63122293950ec876a34 -0x0b899cc941f66701adbf2f059acce566edc82262b9032e2747e75ac3540fea40 -0x8d9fd6b62a2ec90269e30a72506f0132d392fce586f811b654d79ffdad1735a8 -0x7846f82a1584ec57bf9f0d3d26d170f95dc8db1a8a1f3e482c91216990adbba7 -0xf07e5165ab003bf484a47cd442e7e504b2b95ac73707e3ce38e6a1d2ca4da216 -0xf5dc025eb3f277ef52ad38158637817e7e0eb14bc10f337ccd1ada1984c84435 -0x5ea32ce5f6bf934496c72bb74ca1be317a8e66dd19161593069ab8067150d78d -0x242819633ef7eeb9a7f5b4fffc4cee401df7def671fe6a266886ecb593376146 -0x76e931250a857cad357c3d0fb8476d9bd1d3c0dda47e4cc7806c65f2f144fe9f -0x88c1dcf18fbd3b2755fe535e7d3767ae3cb3dd81c3e71b3b258839a051f6c421 -0xd5288f32f390f6ea781644d2626c33d1171506b723d1ae3827c051df4fcb6158 -0xc05fa9c2d4a36efc51137ae5c8a1b2b77525b6d72e2bf6ed017610aaf23bdce1 -0x8dfe30fc1422b284bcc1151191beda4c2bb7992f8defc5af5f375513728a1323 -0xa66a86c5a6745505a1dcb88f04e17e51037d0b08ceb2129f09c308677462195f -0xc97db514f9524bf55a486c4750dc5d367b0b0e085d8aec8d79438363f4682ffe -0x0bb1deea9e6a7476138f9ec13cbf413209052f1a687cbd108d82865afa4d9219 -0xa8dda275bd570c95c604bed09344e125129ddf3a7dbf9b1369cfdb70e4de269b -0x25a8811116c433cb74fdcc19e5c4794ae4e227772e2bb85063aa1b6f20e5919a -0xd9d2a7c6700b28d924a7adea2a5a23fbb7fdbcb50a9bc9bfdaff1d129adb7f40 -0xf1e0c9373256849421c1f7bba826f2209e4473025b21b439502743ac755da034 -0xd72fc984c333b79f04fc8049b3a5062c54662055a4b5fed5c818b16f4e8d273f -0x180d9f61c2ac8622035976ece08890a7e8621e0401fa1b1b7e2dbe5da4a2cf14 -0xbe29926fc67b616bb1d2977a2285f34b9b131799551bf97c558f014b813185d4 -0x5d87849026d2a56c5028fc85dcf52b0879a5c450009e4240d600aa7cf0b87436 -0x21c172f814b1b428537c0f23a02f0617836953766cd504ec5bf3adfccc1f418f -0x82eb33afbcac37687f6ec3c5d8c47de0817544bf7c89e5fc4bd69420cb1e09f8 -0x7eacb6fac29f4d2341408f6fa9e8aa656e42b1f6966ae171d83f4088a9238a42 -0xc9f0b04cb40c71c7474701273e4f940a9a194963b3cc6477cc37498d1e5c0c12 -0x82ecfb0a659836b71b7df4a1f21e02ad788df15c92c843e56591a2af674327c0 -0x20d9f76aca1d4430a2a0312d8978c6da7b9b347538a9966dfd851530e8c3bca8 -0x577904aecd14cec4e8930cebb91462bf83c52f2e8e7f8dc60803b7185c4885ab -0xeacef9f760bceeed22370b48401d6d7e59ff96b37d19e96392d3bd3fc977ce38 -0xe56c9f511d834bcd58426602f0b1732821722ca0d52582c360b6cee85ab3b160 -0xf8e9bccb00062b812c1922f67a80cd1d6c4233b3b9062811c23332de38d69b11 -0x4967a92f89f05ec0d8769fe231f6b3a5cc7a9859432d444e670289568cbb9432 -0xbb08d70766a30cfa6ca323854782c1acb4236265e2644d74591a7a0c618021f9 -0x63517f20290754ddd901e66475d556581a71be21715bb33fb3e356fed88b9e25 -0xcfef53c1894dc1e2f2e9f7ba5a881c5771cae4e7deb0eaec28f0d869de574e2d -0x6b5475db6c2a67a830095c1cc17264739ff158e9e67741f3e2a6b8d0dd30b9f3 -0xba47ba0ccfb3c8ef767516e78a40b34ebbc66e9d6ab533966f19048def98af81 -0xb3b19bafaf53c423d1622705f13c3a842983ef2352e7fbc04bdcbfb23876a81f -0x3b898ec02dbf51b55e949a280562d2cb8699b7aeb9cde5fc8983b93f6cc6d3b0 -0x1986d91087a7076bce5ec1a763cc6460ef9190f63e1ecce3ed4b271cdd38ec07 -0xfca848845b1f02b9dc4c334cdc520ef5592627a6badd83bbdbe81e239f5ddfeb -0x9c4f53761149cba3b9d581345657b668d0d1a027f5bb0a006068fee1ecdf5c78 -0x081bd8e75a08b59a45d2e5466bdd2a06a253ad56cbfc1bf9552eaa6777612629 -0x56626b95b4a764204e50c638df242ad6c27dafebb6b3432803e6bf0d974f678c -0x77618049c6042081be84c91f2c6d7a215e10e3b0e46839b44d2c106bd26353f5 -0x316456bc66aba9da04322996ebf88045b7940a6637b71065d42b1df4b8ff7892 -0x05e3b015f2feff65cc6f9bd7ebb3cd770fe55dce9b9f4da75e76e55e78eaf78d -0x0beb96cfdf1abd2ddf77deceedffdf4f1d466bf47173e40fabf0254ea12d2a83 -0x1d4506cf244496d3bebd2bd4d81d0ed74eaaaf97f55426ae3a70d39b99725e3c -0x51bca24c09a5ecda34604ffd12181b201c6389fc46256410f0e3c12e2d93106e -0x153b34748cbefd7c6c710a1a345ff765120493e737d659dd0542c0e43215e7fb -0x97d9b4f546d352e276fc7a89df27cf02af9591c807bc699b75db62640d22969d -0x804cc5a99e6ecdaec107bc27c82f4bd6b96a900c5800896a79b3164ac7adf7d2 -0x07b1679352890a30ab52a2ff979c915790a9983776eacce3e328de650652014d -0xf4f1352d7dcdee6049a20a746ab9b9678cb3525de6d381b35af5849e3c7b28e9 -0xd513a52175aad188e05c2f5c7035bec181923dc0b8db6dbf698ffc869d174b93 -0xd3497a7a521826586381e60c30c9728ee38f2b381a4dcb688ce8abbefa9b719f -0x5e05857102259775eac96031a849e44e3a93656eaa2262698714f147ddb8bcdd -0xb609c2af787ade89461dcf0c837a72bed6653dc124e8842e5f7529344d5ae0a3 -0xe0d2fcacfa64c90149fe7262178ca731fb4728a3e657810717509e3334a3a285 -0x63b7e755c4458d01390f93a37c84ecb8137257c486af3a9e11f9f9c445d8b6d4 -0x120fa122d4838d3f237f244c9b509d117cb8064ec70e06b79c5b08df74aea5f3 -0x15ecc921a162bef097b26fe73d58a05bebce47496f40377e363d74665bd13061 -0x4f1bdf6b6abfb027337ae65d04785289c4e05fc9d761b8776fd5133c32c5ddc0 -0x60e80057783aab00fdf25632a0535316257c6ca5720b464396bb9ffecfcefa16 -0xba6e795c1ead334572ba77d7830deaf87b12c5bf7c52c8fbdcadc13b2ced5921 -0x95f40c67a8212f9086e208fb6756738050bfb5723755aec5266bc4774ae9b524 -0x812ce0b9e1f52d4e507b2a99b38dc9219fc400838b8bf3748d45a48bd03d79b7 -0xa250f48d71d42645c229c6a324ab33835cd2502b602a9b1165689ce40bce6f43 -0x30b0405326b1de82cd9be281d3ec98c30cc9ffd0963c9cc1cbc8414f6c9f15dc -0xe9075257f3b7b1c374ef3954b6c9257ee4773804ec55e462fe8798cb7230c0e5 -0xa37e7f31fa536b88657a34b21da639cafe7aaf495f448796c4dfb0ba40e7f288 -0x9780b8db0d88bfdffe4730b6b667f3c6a39dc431de7d211ad4e1c623d31d7138 -0xac3fafe579d3b70c162633f4f0e587bd03cdbacf35368136b5891e53f5754242 -0x2cbaf6fea88b1ccedb61781fa30f0e1fd74fd5a60aaf1fe50c55473a41caa16f -0x52df74476524485bf3a8b0f70d2e91be8cc2b10a68e47d48af2a24af02bed437 -0x4ce8ba6f0d90108d5ff967446862aa4c45cc01ebbd474e8899397c6dd8c86d07 -0x42033d5318f35f9c5fbc62d7ebbb0580cf6e0fabf11d876076535e3c22bc06e0 -0xcf496aee196a317a5989a191423be59d745b43d05a37a322eadce6e04d3a90f7 -0x570c1d4e295f5ba0dc36cf930b3ab60bd06f9a8a5ac6aa8fc5f17c5ecbac4010 -0x399e18d301fbc745f5962b9e5e5c5f6a714fa56cfd1bbcf25ee225796018a2ad -0x9c00ecae775fb93398028fe0f55d85abe3bcc78d287cf3612b15d9a43f2fc319 -0x0db1a633ee90641b47b6e227935decda2a2b693ba6890883a226a1aad53bf462 -0x18b71bbe731dbc7de0b30eca0d991fdcb163d63139b896a45dd9287abc8e3d4e -0x02bff66610cfabaa6dfe91ef9c439ba25e21412332f35d41c33274952aa42803 -0xdff7f34843b6df8f505840a72582a97edb0d42ddb93709cf9879ab63ce58d44c -0xe44f9fb1c66a8ba23f5a8743832d3cc5ab34cec2df1569c32b28c9b3371fc205 -0x6ad3a5032eb89bd4b9f558e094f598d0ea2693a25cf11c582dde6ea92db3e4bb -0x0233a38eba429fc196adc048da13ef5005b6e0eb7221afc36e5eacb9c6877bdd -0x84dea1ee23e24651a17cfce3d0b4160d1ef3e6cb35ee21aa4b6883a02e422ed3 -0x52f359c27e18e155fe1167ae617237ca5f9b0830693be1da25b8f30751a3a82e -0xf8eca5390113359de577b796c3e6f831d94cd8462e0537809bca18aa1c6be007 -0xdf1d9dd45b09c4b04e694043b3dfa2f68d48798baff0749a455a5f04725a3263 -0x9ac37a78a4c2b2f486eeacd0365fafbafb01a51cfca6af25fb7f5e072bbfe2cc -0xb7c434a2a9315e1e0cf99cf3e700e36a8954151b5e4f1c6bc249962b199edd46 -0xf0d7405d673ae06799e83c5dd485d28c039fab8cede7b39bb099e0572fa83dae -0xf784160142496b2114732de842904e6608149351eb367f53646e0c2e2eded8bc -0x18ced5e1306e7170e3634261f5ce27d4411d923a4e5ba6b6161632c5684ec871 -0x455be94bd3beea1d3030462ad97e4332857d130627025498bb892df86fab5312 -0x0c656a345e1ae766a58bddc370de116f4a62a1fa084cc7945a15f6468ba10c51 -0x59d2e09b52bf5370522694dfe51cddfe18eb41566f66e0b4835708a2096e95a2 -0x38f401e1eaf46ab1fc24bc5c7a954bf3106df200e9131cc607ea976808d8ba0a -0xdc86ab5e9ddac04b8c595c1d7d8a765d6c72eeaea505d53ea416110aff2d9be7 -0xd7e923750c3c57abbda83e271016a44ce9ca84e46cc20eab8decbae6f97f7f5d -0x80153080bddd47be74c9857c01d1e921076dd739ef88c34290470d26f1973b72 -0xe93ab07d3e9a645e616efb57d041c3504d1120b3d77f0718576c55d339b8a53d -0xd97562c6c6180c962e1b0ba8a1a3af4fe36ed01d30ed3d0ccc58d6ff884d358b -0x8544de44fd50de62515f5f0a1ce5eb1f980e498a95b7a57490c20e23360c73ec -0xe4d10f99ffac5870c449891fcdfe2f16e535df495e0b10c4cda743b8d9b5a6e1 -0x08c5ab6c9320c928ab0d9e4b24e927e51b00552784b30336d19fe0317b0c14fd -0x3bfe690f9307c63aeeb9d9ee2347afb706d1f6976353217818b8104dec6d05ce -0xb84eea52b3bfb9a72e4e93ff0198215ddf208284b151a1f3b2a3b0b1bd0b7020 -0x02c267d8e66421b779fa654b057b14e1b61c59e39c8ad452aca674f531439275 -0x426cd14aade1431e5fba4bcd26e98134f3abfdefbca9575792d88244e2539253 -0x62b40a1e63ef9fe0a41d71cb54aa7b7f90709f3d83744764962fadde6c1fcc3a -0xf6d0a6a8d62277086fbe2b0c15e7b909a4da1e90fda4848c870dfaa2dfbab946 -0x9f479e9fb1d69128d43a15b55b39c25b7179ba2e6aafc6c8ca25b40b8f83cc24 -0xddeccb4cf05a377585bf3ea4c66ec7bffab5b9759b708192d79a6b56a184a591 -0x3ebd7aba1de90602af06e94bc2cd5c7f8297ce456206ea96dd6bbd33776c7a85 -0xb5221ad5f0de1d6b756b7f72c0c19b2fc208c81c3e2033564c15c0a7be61c4a0 -0x98aab53293bf088a05529742faece13a21fd604f72cea483721c2f366da46cc8 -0xb8e4e3852cb13d2a3bf772e827dce4e1ea7b46554e1ddc1344ea21d5ba1ffabb -0xa2f8a0b5566cc2d97f8308ad375ad534d959b74e315ec911750b89fd6890e81f -0xe57aab235a2c264b1ee10c4d395f581ea2fed12ff04e8627073f5d6f7e67ae8e -0xa7cf03459012152d5a0ee644326bac3606b418869493f184ad06c5295fe1fe77 -0x58cee9ab8e7982b46e85ec33c166e68df18d61414c0bfd3b3461841c371e4cc5 -0xe9c38103cdd172e9d48f2d0fd8063b774d5eaa55f520c53eeb598c1b4ecba706 -0x3d5db6b40538ff7b27a45bff13008db8634e4856b5c2058f07e38e7bfd9aa66b -0x03358900f70626a8956449a534c99209bd22cf7c29cebe50265999ef2a7ea70d -0xc09757d2cb261a3b463d0720c4424b959e696794e0abbfff478efe5fd4b76aca -0x919c43bedd96c1c549610e46483d9ab105bf5f60ced8612b39d9b115ffc8d094 -0xcdc6786ce407fd7fbcc3f98711168317b894c6cd63b2b9cb63523676ed66874f -0x588c61cda45f4163a302b2b2cf83d3a871644f1bb05935991d993d3fa8e8f4c6 -0x5df13e61e58c4230196227946bb7cc1f4cfb63e9cf88b7b1d0d3a0a11415b7b9 -0x547e67ec1a3ca125937ef23881af5784a88ecc58ff5d350918554cf129212b9e -0x907e5b0df69c578278308d1c71585cb23bc8048199697c75cd23f26274148a24 -0x02c768c93ec84d5a06cc2ce3052c66b331b840aa71ec6e961cdc7a78cdede463 -0x1643e4a4b82b7d383eade8e687fa9a0c1b74f7f06b54a031b8c3d96603c476fa -0xb469d89ab197a298978bde435250dcec50b055a566a4a59cd216cce3f16026b7 -0xbdd7d077e423ad7198d21ac3d6aa2680e63861a49eb3162abe1d87cdca970948 -0x048ff6a46b2237109221d34a2bfccaa6ad61242b838340483bfb2aee627ed919 -0x680a93cfb775c2743134a7e15e7ded46ee2bc60d4e9cd04db7ce6d8cd123842e -0x7f82404673270d5ed3c4b864f07adcc13c716ac9c240a960c8819e673bc1f32a -0x95a7194148a6e0459e722f43a3ed157e094740f56869df2ad6856cc64e52036c -0xe535b2bfae0b2cb8879c15ed8d98499deefb13fb028a3b0dcef8dea7bb042b80 -0xde19bf9b9c96544103f75df80b30034ddf5013dea3126cfcfc4a6637e5daceb3 -0xe195c6e5fe243cc10ac0ac3cefdffbbb0522aff488f1a556e9deb10784357f19 -0x85d3104dfdc3c9e5134270a22e50637f5e1a661335ee92f2ea1e3a90a4b7b28a -0x0abd44097e78994ae58cbfd71ffe72eecb1d24b2cc5b857561d1f02623b47db5 -0x79e8748dd14b0404a48e35d4ba44bf1cdfb7777af0ee345cb2685e829b7af4a1 -0xc328c7aa157f486ea118945b6dab588a52b5f33c0e84caac470f48cfd093cd01 -0x664997168fe37170aa1d5f2b3e925b6e963d3c9ce15d9c06571159f82cdd4d71 -0x1f9c1d18257d9e2b505f2bb4acc96409a45115c4c6a3ec8a74a41668c0bb0a1e -0x0bc78a102f22bc7b9187be58a0f399b3aed95b75649950ceb0b3cfbc11c3694c -0x3f70da52c0eccb53501d6a9f173fce9777cc8e1feb23b3841de0ebe98fecbed6 -0x43a628d2289be90974dc58d5f93d7f2948fc0578656e63ee0819b7cf0d75d134 -0xd7198d27fd5c67bf45d9037e3a62b16d149ca6f28d545ae28510c2b5672dc6c6 -0xb54d5cf9ff75f5085cc5a247853cf9ecd20adb0d2b4b7f019e5077fb8066d053 -0xfa2f7d12d3df2224dfd6398f54747e27fcb39317d9ccbef4d0021037b18392a0 -0x2d46a8726dbe50cd5f3401d1ef1f1c75d78481b14e57fa4347e0fd695883b06a -0xe396e2c070562b0113beec3019dc4fef3be76c3d1453c09931632d47efd24cf3 -0x60b2eb8e759aba7d22c445c009f1c06f09f5e24c9ae6afaa31d0984e124d20e3 -0xd429353416716ae99aab4f55e6a5136680aaa1d327ad63aa615ded8bc4decd39 -0x81c3fe6e20be0753a2892d9b2d16fc6bb4864e5cde460fdcde9f3b6cc80598e1 -0x2a5c5b1137c0f214c00412db8c45b2a4d0971c9be421258fe420548b255af8ba -0x292f7b37df6fd3bbe080b53c37bd3dc86aa369c192d4a044b53aeca8a60a238a -0x2e04ee7d2f92a3c74b91afabfdce8d7717777d0e64bec10a0261bab94e8ff3eb -0xcc30bffc371f8ed81e21e45ca52aa0dceeb6c8c4db74374990077cc27ef0f23e -0x69461b050b86add246e4d8ed4b32fd758e2548ce6277cde076e59ffc637c4416 -0xc6ab80092c9aff7ecf75020ebd6953be8a49626b3f9117680d481a2b7bc35e79 -0x4f3962cd1ecd1e0fdc4f5cc113615f587c98bff8fe64ea66d17f7fb6de934137 -0xcdccdf7e97df91212ecd027cc4fad87e95428d07bc91d21878e8edb98a902751 -0x8297bc11e5e376f6009ff5ca9e3fbba3e7f4b0a81633ed7fca1a31e8200ab98b -0xadd80ea37ae29739d697d433bf875bd9545c28aa3feeecdf29292da0113719f2 -0xae34d4853609a812dcaa9d56f10edd3e89efcef4d45c1b58d6bf15825070af8e -0xdbc9334be68bd86d0cc6d7c98d307d4ebe2d3bfb1251aa654d85162aab653f75 -0xe554cbd2c3d72601c000a5b3bd9d1be49d680bdddb99d79691d73a59e5952bc5 -0xc9fd26747f23c5a30414732b989ef594763e1c0826ec5b7f3d2a3c6abae2bba3 -0x100bac6e0ce4ddc7b854b7d45e19501d9e4869e0a419b93a1d954f921298d595 -0x0b494a38e8a37c8868b6c3f40b4eaf9350a9c8f7c57a1771b9108e5c8e4e2201 -0x29b8656c34b49fee57137e9c18eeb1e8e7b3f08e7184bf67f0cd444c6149df39 -0x3750f7404e04e4973f680fe3990b53371244210e0c8e0ab7d8fcd29ee82de1b6 -0x4fe432d2ba72ff79e9d9b1ba9ef132e0506e2a4ef4c6153da49e4f837fffdf44 -0x5e663e7df16ef98e476349b03da84005ebeb6b04c65d3c5fd0521163591b2554 -0xcb7d5f083209653ad517bbc715349f1a25893ae211f9d84e578bfd7845ab9e2f -0x449daf09f979352b16b57fb95af4ecd59afdfbd3fcc72e38cac1ffcad806dab5 -0x9223cfe1def610ce575fb43d8228517039e569377f00e4d77b45e379e5aa8667 -0x7e57539327091c73a2c3eab217ac6e29d093558770d0c8dd010eec00297c6859 -0x1d8ac20b605551b9b454292ded4cb8ba8caae3627e3cb314d41ff4a5f799b2c1 -0xb386c8548440bfc7022867c51c9df8bdfa4aa45e65e0ff67dbd0be55285d2876 -0xcad6778e22eecf590b442df78e24a2c4053001dabb0d8908274000825585cf88 -0x5d572802d513b6afa39cbeb9c498b7bf3d85340ef14458d5c87f28815288e34b -0x82a524ec439329c7ebe9b232c11b846eed70177e7158fdca68ffd939c89bdc0f -0x3b6236a82fd8cc010cff9b884938c46ba7cf6ae91ad6cbf804472d61e84271be -0xa13c462ca477ef9bfb0456d8342720f7eb23ad0f7ca8de29ba1099125dadef83 -0xa7e90903820b51c889762b646d492259101bcda4bdc3c3be309c93e3aac80915 -0x635ca476b2c4a474f7977181757f04887e8de0eb17eb15b90a80c9fad1c3cae9 -0xbea86ead2ab0c3dcf7fe48af359beca17c385a48c47354930adb9571221ddf23 -0xe26ed77ad4c5b2854c414a192dc562e15dc6b23b4436331643a36e130f81db1f -0xe2cfe6cfa910dbea18ba232777389ece3bac528322f54a1e111cf1d68e17a819 -0xa4cde9a6da4d40b8ac5cf9c8bf8ffc0a4c9e1f30be4b53094f89e4bc37026524 -0xf7b98fcb749c193707e0696ac525f4dd306f21f6478d8a4531f2580964a9bc96 -0xdb413678a33b1f9a5fae396ad54109fc3960dbaae6ec8153d953c29cebf6e79d -0xb9e7a8fa751051359f4f6ac3aff04e3748192af408710508e1ec936942b1e47b -0xb1d2f2b0c93e4b7c26121e701d4993ce55bfde303c216137a1839bc5fdfdea39 -0xaa6a4893c03d452fc54726d40c722dc699c72ba92a4b821521e4779350d47105 -0x4e1b11957d232a3abf64f490ad6f87da401ddf4486cf396e0ef51faeb8a970b2 -0x569ea04f65ca4cc22e9df03386d1cfe5b844b19fc06116585e51cb3725c7b040 -0x73ddb890ab39fda124f41c9e35e0fbeea59ae5fbadd63c0f4564b2b27ccc338a -0x9fd15915eec6a1f1a6bb64d390a7fdbce68f766bee50cd3b6704be3e9599c2cf -0x20cddb52454d957319c4376dec380d0dc768c6f7f913d8a512cb4c4bfbf17a71 -0x8d16cc2c23c4013d0dc1f07ea3ced53807cf05831688bea55af85601dc4adaa3 -0x04d80f24476c070ecbd74d378e1820b1ad4b4ab322139fee511568f79e244020 -0x8e436c9eb0cba21a9b403794126fe98614413251cfb43e1e94b2ff63da0ab880 -0xa2cf4b2bb23589dee44764e937e639e9df59632e424417f34501bd87cb4a3e24 -0x312158bdf78b352ae638ea206fa98d7163568de4ed8879c31cf06857141b3245 -0x43b92e86d3ae67ee23951de622aa3ddd743050d6f4d5b89f923a2b7e1d4766ea -0xa2842889f98b0fda11ebfdd2c9c4f55171e858a5f0e28983ace0c7413dbe7908 -0x747b8ce63dd691abd79f9efcd5369e036912e6c8333a0b7537db3d7702a15706 -0x38fd7eeccbc03c82a9d68e9af12d296e50c12472df77f1344e6c9d5dc8bbc7fc -0xa1707facd27132a45abbb1232c8211ec1b6b6b1356f4c3a5682303b528b2b0a5 -0x6868f678df6d8fddc1e13191afb88f63e6512f65dac29f5633f47904a0c5241b -0xea14f2587dd88a1917248f13295dbbcdb7e74c575cb8790fb8305271e8fc7cc0 -0xa19b52f9fcaf82dd8622fbda8ba5437fccb7734159763dc5b7969dc85256f57b -0x41d12c94b5e1a4eb93d32b34405a4bb0299e13fc7235066cda35ffe63f3211bd -0x40af120e121c8964c8c6f5cc42414cab1893e80548534347f8848a56e87358bf -0x3320a937fb9fe0d7b36066e28c557658e795e3c3a7921bfa3704d90d0046d0b3 -0x28296805f2cca80fdfa01004f62ac39a2ea34177c7f9db97fba87da8cd2d1b64 -0x083662b6f806dcd073a8e1641033457012c61c425957fc261ba6c0b62383b4a7 -0x763c021767d68a38512301e272cb7cec5a54a4062d0093312d5242dfe4a6ee84 -0xa2a2a261eb4acaebbaf43c388230ccd446899fb01c078b66431d4c3bc0b17a52 -0x97a8991c433f7d5942872252b4cfc9e2dc7d1b858bf6cc27da079d268db80b78 -0xef69ad28bbad5f9f5a7abafe10dafa47e7aecf29cb49f1faa45b2c8473c6d94e -0x62404c35e3257887a2f9c5c1cf8d2e1d470090a3b1c8784936480e9c1d811835 -0x539367eef8204627b999999467d06eaed366b7f589034c333a60461651d04b23 -0xca0e7ce420b6be6b2c3d11a0017e99f3f45b3559844ee83fbdc30a60a35633f9 -0xc895caa9dd5c8b05ac5087a73be9763b808b0c7ba5fa76d23d7785bf5a70e0d1 -0xef51531fe8138199112e5e3aa8f184d6d6e92583538d1b2cb6e9bb5a6008acb1 -0xb2f43b9de94a6896f0389688d4a73e428604ec1dc91ba0cb785f150ea45037a1 -0x9bb2c9119e203d20bc92044934e8fd04cd24d1afb4a819501e92e236369ecf80 -0x8b1c0e92aefaae983d7d187f57aa09356dd598ef5868450961311c4882ed43aa -0x648cdeafb9b64c5be7e2f07420a134ae75221538187ed8445dce9ffaca63b4f4 -0x8db9dbc46692eca245c2436eb611df067257c55780dff687b5983f882afbacd3 -0x4f3caec43db6b13445e182800afeb07291e417d38562a0e0c031a476af943796 -0xa12890ba54665f3fb29f7da8ac55c4f337f34546e48b9b4a5d518d89a784bf72 -0x5a554a6f416f14751285a7bed70e7264c31a66af8e5fefd3c495b75f32bf025e -0x743f2afcd360bb62f513f0f8cc6cd400d12262fe3fbb7e6e792753ff0ce5d4d7 -0x996b20b9db69c164d279e89df530c42d33d8ef0f8af200977bd25a7d5cc1cf4c -0xf7a73eaab5f1eb0db7be349e7db3cbf13e96a895a0ac39aac2ee1a0012725156 -0xbff1fdf708906fda6be75380afa11c2885d1b39ac07811184cb7081fe9480fd9 -0xdcfc2d590fb85c4a923e1de8fc32fe7664f0943d37e8b201f30afd1d735271e4 -0xa45e5979e194b02830294b126752760b934a182dcb34071e78378923b8a23b0a -0xc4d43295d3531bf2e7e9ad7926c629460b55eb003c82c12ae8f894e3df670575 -0x05a2ded1c588b65b4c2f3831011fda8eeae9b3c46f3e2a5b58acec859ce827ac -0x93817793c39254568b549b828897d310f97e6b8f0e1b5902f2cb0b930990e25a -0xda5af2a3e85cd9962d9089d1b3681479c355cb63efef9482960a739ba08a73ab -0x7def7aa559c86970e99aab2de5f9fd8101deb5c4405bf4927e935b3a95504c9e -0xbf4236b3d0b269ab5a6183cbea59a7d33ea6f566143de10a81663de689c76d45 -0x26efa1e97aaa98dc396e0d4b5a4bcda0ee059b0842298612aa9ab70bf69442ea -0xca12c5aba6a65106d63dda4c1e2066bb841484f0e654f348282b66b69bff6f3e -0x1052e6a2b33d71c9c4e035942006ea8dfc9b4cd70d0ce68ead3e3a078b34a33d -0x99aed415b6ec8a0c5af068bce1509192e0284a3da95c452f5213f36956e7b542 -0x6cb45d565aac2090d1df3dcb878a331e892db4578e84ce4af9f73fd2d6bd5d10 -0x9615d8f96de4b2f911d00291d17d27eb45b255f68c0a33bbc6d886dbd5c43e66 -0xbfbc047459567f14678a2b02eed0b547db063fa456b97664850c92488889ef11 -0x93b18fc8441a359b2790dd782a7e370b88186a8e3d6fe7bed69fec697a8c4150 -0xd4bd74cfa738176a6263db292930e2c558b92d38543cd9211aff059ef23cc0dc -0x506b682346e3010cdb5826248d3af2b449d847024c86a0a51b2968e02e8fb71e -0x72115280d3e933d31829647d489b7b0b9eac84696b3a723832250e94a49ac0d1 -0x85da8ff9a85697521edf3e9991396f80a9d3b8583df5a3a2a470debe449dac1c -0xf081c131fc43835254ebe7f03018cc6c699624feede98e73499b22947c839439 -0x9bb2ee0fdeed43acbc91da46db32df5f7d1907cdb9ed5e493ba68dadf52f2086 -0xb6ab474efefd6febb260736c2c6a7327546a9efdfc131cb4decf0b3a802055fa -0xbe3f62d12a9f00cf9d2b81919e51557e0eabe5180bec0438f3161784805dc3de -0xa7e11dde9b22320d31a019b17647fb6154cd0bd17babc59777fc4c26bd5eb9ae -0x364fc89543763c7ad611c8a3553ba3c5394ce1df0b392eee5501a1028b610381 -0xd188eaf130bf3213699b949572e5472ef6218817512c1b1dc9c3b52ff7d17a05 -0xa6844eaf800b3cc54f5ac0797033228cdcc1007069ca9a09c3a0a78340286d8a -0xf522bbd33218608bf10607bc82533e87f36ad95266839f8e4be095cd70bffc9d -0x126b70bf888364186f6a43558f7a956ea5a2b19289b96dfb3d3d165d4b5e9a13 -0xa333bfbe7a094dc8828d7d3e204670b25cc195fd1636856e34bb19da0ac473c2 -0x5161f3918ca34272693b28bd608118fa4903355e32299b77b3fdea0201b871d8 -0x8b2b1b7439ea04d68094a8e209495f6ca8c6bd891260702eaaa15c6f231a0244 -0x7d1d6c99df4c24a5740fe105fd329ec8d1d5d334e8400f4c705882cff16ded82 -0x11d37e14b440b56ef4b94c3b51934e3f3b6d9a52325eb3cc4d08bd569568667e -0x253676732e9b7bc8514af504c72b0401fad067fd1a7a73081f7bdade2f80c4e9 -0xe72abe21f52435d16d27d667dc9dda8253b1a38f159396eb78c64dd58cd7ea3b -0x55150e383932093103f475e8bd00ce91e2e933cd147fa193a5338590eb85087d -0x69406dcb96c7553f3824c7a6ee452b02a26b76cfb9474d46cafad72a49d330ac -0xd6a2f61d9356a2c451a123c24d931ae32c1b9273ff96dd33ddbca13852f957fe -0x0714d7a45433a892f834b2bedf291952b698dfcadae2a07170cece91bd848e31 -0xb90389dca7e9b6c73fa468322db769ff791df793ea7219e6a1e917a5b5665918 -0xa756910704f67c5073e859a952c5ef24c6aa0f1f43f164de52164adbb06a97ee -0xeca2541e2610bed1d48ee45b1bdd530fa27b3fbd49a8cbad47997aa6bd37e7eb -0xc0624ce55c1a2230f504323fe44055b35354f6a7bbd72918bceed0ede639b384 -0xc5fc3842478bcf475683923f0058787e5ca82db7f082d2b59d411a800de3a95d -0x2e13fef077b4ea57d845723e3ff94dc7e7f61df847ea3741224695ddcdfe03b2 -0xfd41556ea82a46ed232eb7a74479905ad97ad0e0f92bb2450cfa492c2237559c -0xbbe8f9b391ae96a9d2057852af70f4b3061df93e5b5fc229d39b9476f90e1c3e -0xc39ab969015a3af1e462bc958667f0bf3e7ae593bca148ce727593f00e82f388 -0x89e19fde1e1a4396d46158e17b84ec33b9374e5ade8b3def5d8fa018c5589700 -0x22fe9408d42f73daa933d0b8ac7ea902343816610603b1b717c931a469c33b00 -0x13930781de7f3b3aa28435edf2a69b18c129db6664cb94c6506ef729ad25483e -0x436581be5f8208a6eddf566d6ff76974d8806d73a27ccc6c81c5cdbf3331f7d2 -0x6c82c30b1f405b78cd584489b334d4c83c80a466c26e7593ffd638bc6010f58a -0x9994091ee6b284b3f4a7b1aabcd5419eac2e2a69753fa4a89a0ff420a44fbd3e -0x322ddeda4cc9d7b5ed0dd8d52683f10bbd974030dd37759852253750ddebdea8 -0xb7fac597e973f4f01a7c9ab7dee231ce2fbe11b34f64084a9b7462cf5dfc9a8c -0xb790e7f638f09c88af8f757effb577f712d3d44f323b5f30cdd4c13e15545990 -0x7a816f090991e4fe774306d71bd9dfd95107af02af49ebb6ad759a823d4ac0f5 -0xdabfbb2a210f71348aa48de2c5eb3f2f4a5e7b990442dab417b66bb2ff9a4783 -0x3af910d31ba69e3b67cc1867e3036e0a935e2e1b721c75774a30c485f849ff70 -0x5c72956fdde53969131af351821169017b435ebe7c3befb95ffff55443818331 -0xb4c3412e7c144de9d7f717274e46f08e39083ceddd841f847eeed287970346a2 -0x0af7a9e3c97bab0568b03015a782fcd9186b4d80f3edb38faa49987e8cecfcb4 -0x00a3be4b7b201fd84f18f01e17cb2e35cbd871ed6482efbbd4e4eb2ede331777 -0xb239572cdad5aa8b9eaab6f44bf969a391172525aadc15332ed7e60f32240aa1 -0x54b4b080c76b99b00527f894c0ca28f5f1f6c10662b71b517d3886acf887eaf9 -0xb8c76e08465041dc5b499fc63c08f0a76c2ad2b556b74f135fefdfb46ffa3c8e -0x896aea14428f7e80a6c424c4aae19fe363128a5217e67acd7071e09a974b59cb -0x0fe45946eab8006dadc2203b4757e78ae1e97541decfacbee74788edcb6193e5 -0x4cfbc9edfed383b40d3e9b2a71170845ee960f59d657e04cb40d189704b66f51 -0x110a27d74883dafb34e1175726eaff31743fcc15eee5ae914fae90a865ca5883 -0x419676e53cfaf15694d5060683f2c3ea73f4f90339f0341a4b1f4b1c33906bf0 -0xc5621e8c236224f220b60fdd00b1a0b67bea14f51f3ad27f4a486fe2ae6b500e -0xd1840d47f51298cb7774311ea83262bd61f2c927b8a857ef03865406263ed731 -0x0a0f86ecaed45f227806e6144acccbc917f71b2c8823310fae15812480f2b043 -0x8900a573fc47e4b37f6d5e94d2b96760eb7fcc536405518912b2a824c17eb6da -0x7e089fd9334290ad952233b347367c3e61fab6028109dfeee12eb808541ddb67 -0x126ade0d9663f82cede7f5b5040c6718d585162e9c190b43215890d424dd407c -0x219b45f8e2a433530a9ce6e6974cb6f12447b369e8b9bd838a0ffaef6ca1486e -0xfccb23eb658b6ae15338a80984943ba471d72ba8f108ac99b8b7fc2ece5fc2fb -0x2ec5533380f4d61d3fdd64681799a24f869e171f06a83ebf009d6b3d168375f8 -0xf6a1407da290cd50319482f0868bf018db75d5dfcb24604d9c6f9f62fe9aec08 -0xf4a68de5c8626fe5c692fc96e193fcc2c273e0b35744947f1cbbd47ec5ede9ef -0x5bb28a27072653f29ac55f12875d5112842c3efe784f68a7072f3f00f5f2af72 -0x82a66f0f6ad79824c95a4558962afe388c3d16e992e365754c06b39d5d1d6d76 -0xe866332f92122fd7383da3abdeb882472b7028ae245e6e6e0c085db5f06a6780 -0x2ecb219854a37dc8526b834f3ce931d378756818a3104ec6178f449194eede0b -0x5b6eb4f8d48056d73975ad4b7103aad114f55b5602cc96fd5633e3734edea63c -0x67ec399d584793fcefd7aaff588fc7c4d70a7113453bfe78789563ef71c9da56 -0xf194229e4014c6d19effd4b26bc7fd940e1a7de5a679e5a4616fc1bba249dab3 -0x8ed630affc56145de2d0e93cc8d0f8b4d2794036f35dda0c6208e8ada50b8236 -0xf1c3c1a157c4fe4e7eca64f9fc30cd8b1b2a814d9ef7d16162686a5b72b74da7 -0x22bf7897151fbb56fe01da42a68ec7a5ec9c5a6332e83460ffaff4091c2d56c8 -0xeeec313e0b642ed6d9ec50f0272716a0bd55b3327cb559874d60cd54793a3d15 -0x5eabd80f8db6e79c4b0e2840220fa083fde8f12da0c38010709a1b8558cad9d9 -0xb6ec885d7ff2c7b8ab011ba758f3058b292f1baafb7daea4b8b4489c9fd5f1c2 -0xab27d9000520372083c89fb020c0814511fabe2e8a695aa6f8cb75c943f437fb -0xa2d696109ee7df92fee4168755ffdcea42ed1ba73a22c728fdd2528c12a5b272 -0xe217773afd4be868b935e0de34b03df7d573bedc7dabfc6001182ec74c2857da -0x32e5f7a4d3437fd0dcdce39e74d71138ec3a9d7f1f12df79cfc14075cc2e4dd9 -0x4d2782a40ae1bdb9d9b148970185d48958f1662369ad128de2d30be5bd1bedd3 -0xa7c9c40e5c8712ff0b544a3c9adb6cd629471d4f3aaf7a01cdbe391043e53f65 -0x1768f519747ccd4515defbd01807f0721263943e87e4da9f710769e5e57e73c2 -0x90cb4c9560e97c84ed382b82d292098879bb801ce1f7ee26552dfbe942e447c4 -0x248a451727c163a06fea61dde3e23bc40a057f98041cccea1b590c80b820f306 -0xb955b4cc98d400adca3dcf882fefba350ab4276ae60f1832f07af2232bb832ca -0x7d28c7f9ea34d1d40219df0d5998b7c0682828a43b35af847b9782a3df20aa11 -0x027883a0d61898d0870ba7f22101424a6f3d57020893e23848caeb280e1175bb -0x82d574f9e809e0c8e024c9d02056ec9ad461cdadadaa5d0be41dab1894fd5fd7 -0x7be716fa01fff42abc131e9b00bc724b6db081edc1de49c0a88cef16b41a7dc1 -0x49eda0c0b584f162127fe3146854ae1dc6a28ad0ab45825623805aa4efcb0bbb -0x060e9bf279d7e7c57df93bb33387e1d45f0b3e8319ec81c402eb8dbe9879828e -0x5ee5407c718af51d54f445c8842a72c97dd1f1b807547440187ba72e25fbdac0 -0x4720e560cec72e8bd82a0d046e7c2d0ed34e2a04a1c86f4a5b44f846d99bffd2 -0xa4a0b5f9f85500765303dbda1ddc054d7e9a50968feefaed75c8920def875754 -0x16d29964c304a87282b41e947aa02439f39cd86cabb1e2f1d81e2fd3b5288ebc -0x464307bf62e1b9b0e226ad0776e78841ad6e8f102b32c3f058a7598edab0a7a5 -0xa3d7fdef5a561328d1e709385c6d3b91d8d4f00e62a9d68e0db37f918753c9ca -0x8eec5bfc13aa0a7e54df7d05ecf77ca11e6798618b083efa8b141974600641e5 -0x5c1021df00f5ec739a0dcc05c917bbc480d17157a5cc19011233bb02bacb4651 -0x4f3525ba757551a0f94db6b7c21332215c0acbf7d3c7c060b578fa2009c8ab8b -0x46b64df1fb63e77300f254363bd378ef6d399488bf9ae92c8d22cbc93b2a6b50 -0x6293865e511501712270915c9563c2d691b2a36f398f4e8fe71112d180b9b2a1 -0x2afb9e406d5c01fccae168dbe538454b855d06d24d796ad833487ba0594d7b32 -0x50ec744906b227e9e93656bef7ce02fba04b8f4f6c6734e43008fa50621dc6d7 -0x11402a9efa6ab32dbf9b4af060c5a18e3ae600692ca2c4160522d625a9685baf -0xdffb3bd97109340b88a586d4ce0f0fde30b30d57a6a29b2b399d916192093690 -0xc15bce5faa3f1e0475b21a30874881efe92c273f67e087b3aca06d241ee234ce -0x94ea03b09a644d4b9a52ab5de49adabacac296d623ef682d5596fb81f37839fb -0xf80cabba1ce8582c636618c5e2eca38665918c8677ede4d0734b85340ce47396 -0xc30e17d9e498380db42e8a2335f854b4f409c50fc85bcdf8499641edebff3fb5 -0x87027a424a450305f2be7e1d51a6c5b85a9e61ffd258993ac233b306571e1bdc -0xeae2cc41fd7dd43ad39ca8dde776bd2ee3182ca351f73a61a15d0c7af551cd14 -0x24b768df2e2eedcbc614b1153b2f8e1fd3a0696775efd3dafd5ffc539af3abf7 -0xbab7467bc37d27fedc9a014c1af72961de745c560ccdf949049d20dae9e68125 -0xc6c42c69377e23e65f457a0317987e14eed5bb22797a4283bcb4c35a8b6729df -0x43799c0f250d50cfb21b1d909d923096fcb2a1b2fe74edf59fec55a6c31ad530 -0xfbb12db5e8356a7d129ac711eeabadc24c8ee407f5f168f2208176422a848a84 -0x9e1c7061d2f9fb67c0323cb2dbcb7539276e7b8a031aa6300c1af481fdf7fb78 -0x6954d348eb94ee44f77116eb39d9df5689ef265c00c50c6e50faceccde7ccab9 -0x738e87d49e763c034584949c0ff5788a628c85287bc87e60acb458b8ff4af935 -0xcd82ed2d7470071f16662beea49bd27492f415d71cd2abf5b49a40e5ebaf64a6 -0xc81ed430f6307c8b80745e1dc349728c568ca573015eda24a1cd7d512e0ec3bc -0xf18dbc16dd37399c5aa08fcff90883f3031906853aa38a703ec410227fb1a5bc -0x6530e445e07f3852ca23d511f23163822ea9c0597cf43ec6cd36830850569f8e -0x026802269589151f5f827bd1671c725aa6a425bdeaf85015a2596bf74552962b -0x7214e1e4076baba3f4553405d48f504b559149a3372ff4b30279ea80b1f9e800 -0x712e22fe9415761107fce4e42fe86379d87b77f9f84d2d489db20e302912aad5 -0x5082a60d408803b9dd6162273282932685c610459eb078d9326fe9069347cbd6 -0x4d4d36de933c46b04a4a838000f94057300dac9caf8e26cf5a744a228796fb06 -0x19433b092f347012416fbb7963488a545bd9ecfd61ad98378e1f312ad22c678a -0xf3ccb8471bd041f1c5d89e13fb7d4b4e301236c2a8f9a0137ca09f2c4499a82b -0x1f2878764cc716be17bda216a7c4c37be0c699f4aafb137a61ee633a8669efd4 -0x01142be3b8b147c7b4d3eec8a42ad6b823ad1f6829c90c0e917a69a145e3587b -0x36b953e006656067c1f702119fc1188a78805600bfd26c36a44b9536e70461e0 -0x47512eecca69d0d2a4113920842ea98dcf3fa7bfab8246f853de4872717146e4 -0x865d0e9f1dc45e71add7db707f67486b1a6d7cef1a781b2cad2da8be57bcef56 -0x7082055f96f10baf7906159b772a7c454de579f78a781fa6e7d4625909bced53 -0xe54be45d54ca83ba2e9b20d81f21f7fb51dce0e541885e66de8f5277f91ccb30 -0x8ee121d15c299ec63a49739323b8fba72c0b459bd9271666c026a5f2e71e5c11 -0x39360143abb950dfbaff7befabc0696d781733ec8430475a128d02fb946cfbbd -0xd78b51832cd41526391db63f096aa2d178c3f0a55353eee8a8c97e33e422c972 -0xe28beb7d7c70c4aeff656afcd7ca13b67bc4ddeed50c4a1316a900d7b0a09439 -0x8ac6a2efffee9473230344405ee98347e0dca2acb2d1ba2f7e683db61d89814d -0x45b49a90c7417164cf5b390799a042796b46e5ddacc42c092b990f0cc5a00629 -0xb7ef00a64b0babd1d2e82e93208a90da22351af53c2ab330bce525dd1eab4342 -0x61dc27b713e990967294c724a1b45707530b9289424ce91e792d54941e2668d8 -0xadc4dbb4804c425631345a08c0acd8448068de5cb1fb06ae0334ac143b471fea -0x2cbe7c636b8e5560e206f73882ba8c9a76216d7c6be51a7596ee24b480b9a354 -0x59b67f936208fbf6ab3f904e5f7bfc0481109dc627550a1f5aa2d42d625d8e15 -0x8b4ceec758a72b922e5eb7b21f87faa22eae2a8d73f97db99466784045cd9d78 -0xdc552831680dc7a77ca65318042b867e5f7cbbf8c9a70131d80a0089edec54ad -0x38fe7965adad50f14dcca2b5073286d797cd22589703b2d2e3d84d300e8fe39a -0xb0258c106ef12ec75b7daba2384b6d6f925a0f1ecdc8a9656b8b54e8400a4c11 -0xc00f2ab6c94b6bd100246f72d6fc84e88b1a674047eef0a5e4dd48f3b63f419e -0x862959d1c286b384a2c28b953bd2c6d3d73d1d21d75cee8b62a6e853e4387bc3 -0x116cd1294fa9666ea14335275766fa7087a4ac94d2309169bd45fd2b5a64bb54 -0x227da6b9b2f808ff5a7bc1fc2b4ddb99258673c0e671c0fa5c1f87090c93ca78 -0xf38d3395606e8ffadc858919f9b674b8b944bbd67098d2283c6e1060a6d53221 -0x0b00ff2842781c965331318f3001b080358e068f38754d61782b2fb21cd1f5d3 -0x6b12c3422f6be5d189c641d6a52073cd2fb3aed53e9c55b3df1575d72dd41f5c -0x9d5b41997929f97273755beae26fc9de5756e4d8f8fc742ecdb4b6a502ef2ceb -0x0d8e588b79c09a8f4a8d9dbc6a888deaa54f4356b2014b7db72c9b0e37083c5d -0x3ea08543bc0868709f04c09dae0c14e3444460c7b1a675f3baca50e4c2ada0e9 -0x206d6a497005aad4da11f9bf05901d300fc9ce4f8c76d7609215029e756696da -0x203d1744e21ef24a55013d060dae07f265e960edac3158e59b8a3c996f9edf05 -0xc9effc27ece3d4951e7ce8f3a0bec75af02e1a4d6d816ed8fca5dd6bf505c69f -0x3ba7096c4a682d6c51be844a10073cb9be74ad1b8fe547da1d60ab207acbf6bd -0x8f4fbc5d4a25847d4b9360557df4d83c14746f0411a6796dc5e743e9d2af28a8 -0xc38cbb0180a445305409fbacc990372800109217aa3e466c6b10fa76c181ac99 -0x23f48b9c923fb8ec09908799fccf5d523aeae819763ab5f21c111a45300ad77a -0xe76de6c6cb61579b099f52cba412e1c7e29f70d670e5f150dbfaaca77727e636 -0xd8f5b0505ddcf71f439f4f7663a22d4916cdd04da030fce17e0946c7ee72949d -0x6ceff1f87041eb4b4d7eed4bd0fff6081f9717b8c063e8478d1c9cd0e1dcc736 -0x328a028b9f1f13cc06d46aff779273253c0d378f172edb7da2a7f403816580af -0x91fedc63eff46129505ca8c509e09f54bc6c866efcaf7553209136595cc2c309 -0x238cbece68e4d4fd3623921d23ebcb98899c139cca05c5311466254c69944d7d -0x54c1fad115480cf37d3e3b756df46e90dd0f6180d2386d00c0a63726f86702f9 -0xbc169668fbf856ddc048bb1b1cc63d383a159d37e0d8fcc39807b0a474eb7da7 -0x4dbd1979b44046e28dcb3aaf2d0368ea0939db4fb3da31604dd3257690f69a88 -0xcab152f24431d0ffca670832c5b68290d778054ed8927a9ad4009e3d7ab5061d -0xea3d07c19a7698166cca4078f9090719fb4a4a73c0e23130343421c2071a422c -0x0c9ef0f1763848c5b91e2e7f01a7060e36683c297f4aa8bed1f5c464b0a71e8e -0x3cdab65eb345f28a539a1e95a431251a525364a92728c871149b82f436cba7d1 -0x8c860d1d43706b2dc2860ed66e499c0d4bf80a9ebc401195a4560af797208162 -0x2862c7f51801118cce1112c2a8f75de153ecaf5c4df1110feb6b00d2a6faf602 -0x7b180e6a6702591b417ad6601d6f48dc973ed99c5757da95f2e798bef9bb3d4e -0x290c9213a4d1d65bed40ea4d61311de213c6ab39f99c55cc0f86891bf5fa20f0 -0x7e7da34c0bb7af44339d0632c176bd32fb91747da85ed115375a50395fa9c4bb -0x9ba05c1175e81579b7cf40b839b1aeddf7068c6ea9d543782220c43a7e8fa136 -0x4ce5ebf0c618ecb2e0d47a558f8635ace204b5516bb11692cde8efcb5d1a9b05 -0x525f1d5b9f0f45fdfbf795e579fcf7bf5a82115d79b04f1415be196112854cd6 -0xd8905d6ffcb430670faa4eb60a3e7c0d7402d2d05338518ac3c70488b29ae77e -0x6de4a3311980322cf66c2c703018bcb9510b11a5fe96443aa62dc67d2e1d4b50 -0x0dcf08b3ad820318cbb5f85c1077087c36638f6d2e3acd22074a2a7634cd07bc -0xba9f1bbb403a4e33f1ad816cc72fad6ee4586c1f8f47ebd680d46f619306bf09 -0x1fcebfc95db31ba01a148355cad33449f3e78cf7cb87546fcbddad37ad7ac267 -0x511e5820698da6e97cc25b6fa4197b70561a8b8d3731c58b7312b57ff0da884f -0x50331153da54314172b076d2c23c4de5ea34d1519458d226bdc43d09cb3a28df -0xac6f1651bc37525485c07eadb5f9576a21e6b3e33da2f40c5cc5cf299180dbc5 -0x7aed83e6d84e99a5cf3f0bab6beeb5b7f6e3f1375b59638e4c147ddb9909bf2f -0x0d51ea6914fca3cfb69051f64a70e0ab800ce17c303e9f85753ad2f781100003 -0xedda337fbc1272c729419b32bfbbf71b2623d2f692c4d180676851de84cd5b81 -0xcfeda2e75b535c0594580f8a55e1635abf230cd85256ffb6c0ca437d2d27892a -0x516cd707821e02ddfde66be6442194ba7a786b86fd9ee5e0f5c46b7d685d8d0d -0x4306e874e4a27ffea00f7c4003a733dcf167fb626d614e59992b0211615d0972 -0x48b6790d86e2c8ca8323fe23b511e2571abada029bdc9578ae37b69ae3625d38 -0x2281379668dba1cbf72af03b18f1aaffe90126e9e5ca2f46a41dcca154a6197e -0x60bb0c377b228c47d880aaae14f08514e544ea4a746aec4a17bc343aa75b440e -0x620d2b194cde27cb0dd44509e1b0b58b42af9bd67fc24d7a6057fd977e0fafd3 -0x5f8bba997abeee830bc9dbcd79df0a5702d6cc57220bcbaccd954f66a7e0f407 -0x0f570fd1058f639853fe280b69e37086bf0997852dce01964f96a8a9487f14c1 -0xcef3038e9c23aedd018388d4556bd75166306f53814fcf0f3d858737a1d1f399 -0xf6867dd75f886a8575a67261463ad7f22725f008bec99a1627380b3a33e7e666 -0xf7f747d62a59578a19f7843294c7897461643b6e0f18f1697886d8a2df4773a0 -0xb5559c0735e0665faf40d5dc177794497561c688f26710d1eaccf20f96f55566 -0x756e54e494b944be950c565e8ef4967b8c954ddc6aa96ba74e2f8619e5d95b5c -0xfb40fb1c216c9348e094a2ce988b195f4fcf45334099cf46dfa3ad30d47cee2c -0x01095ab17b30c43197c4c1e7f442f3c91d94aacf5bc50813aa592677f5420500 -0x0fe2c20e6b06199230dc5a49e31010c9a07adcbcce728f586f7881bdd28c7d6f -0xe5d8f6d732d3ef2db5034522c12d9688c8be57e7881e7f40fd8be52e08833821 -0x6a0fc549dfa6548b1d7b32dc1bd8958dfc2dd20830bf38903e5b871d8409756c -0x820bb9594e83fa76401355713d866195b7f9e8b2d828608e6fe5d14a67983c55 -0x9f89d62e2a1df170219b634da6398240803e2063bff73cac3abf03be9bd7f55e -0x1752336f04c4230df5dc20572018332f278eebe4f3bed0b7244bbd8a949a84fc -0x46ba6665af877bc9750ff45118dd6f7ec7702e6d61f0009002c2d230dba7823c -0xd306196d2f41057ec462f2b09ccdace4fb40e9979f0cb1f4388b69dbe66dfd86 -0xd5ceef361809c4b3986291fd8e4552cf26a6343fc95065b9eba4206840bc9b33 -0x7c7fe33f47ee3d734ee376fecd65e5c27e2226164e91488b14ce0fbdf9984217 -0xa7de712b98ecad4b4160fde72b80c5dc5546d15b819bb5b8db202484f17b58bc -0xc4f56056aa8a55cc6ca928b50195887a0f6b7258ffe6a4dfd4b4d28ccda6a9e2 -0x8714125cd5e31f7d7ffcb89d1b5a284bedd51979c701ef2255e7561eb7900195 -0x6b76782d0bda6503936d7dd7780f6819da556fe09ca756e62623b7721631f20a -0x1eafac250a8c63a99a2e6425cfac9224bfe310c90cf67bc9ef2e95fc2d43c00e -0x4eb2be53e0af417b2f6a7dfa558d447126a83d5941dc8f2f2d55e2204ab60fc9 -0xf808e94c4b6c85e29b025f78af1944adfeee38e09735ba974ea3b43a345cc058 -0xd4dc1876bcdd63c64305931df67794270c9391625e919ff0709272190fc5817a -0x31a28c63324e51c56684ea0781d3a5807d59b59e8f3198f821456d5f10b55146 -0xc6d1ae7be939c9eee01c432a33795fa1498b24419878985bb84ab070c7ed948f -0xd686baa480a3846c0d1d5cb349c9c2ef94f51fbce058f5e0351bf988cd99175a -0x9530c3822c337db73b93828325a4becdae8de6823836491d9d1c25bafa1e2a9f -0x7350efbd92578b9dcad04b99d6d0d655437e2b88799ec41e787e8216b5ec6b2b -0xfb8edab221569943f8eb039d256896e0e5380691e00832710722773004264a03 -0x72b9cf80455aba6f19432cbefe2661b14f5b8a83276d987d7626f8ea43576b93 -0x3fcb42113771680626c535381d26f9950007d9e3b10d6396bdb55979e902491e -0x79ce198ffb37970ce792471d21ea3d679ce881cd225f8defd8753090aab93db4 -0xfd197c4a3eb172b64f30f6349720d2f13c8b7ef68ef1ccb0d1ce7845af40eeed -0x497f2c6fb5e7534fc20c2c96770054645ea13746d6ef6c26b2ce4c4cfc87cf3a -0xc79558173b55495b818a1c136bd5e3226582823d3fb43306843e42573140510f -0x6035ed07973633ad5fc16d44cdacce679b654c0cee30117aa807f373e13d4554 -0xe235731403cf4da47eca15b78d47e5b95dc119de6d1f6868ce875778cd1fbf9f -0xd31575b70fb1b22c5562c82240a02cb894505a3d678cff484693e3ef24a47bb2 -0xbedb5a1be5c7936b43a893e449d4f16afd9736110787350d99d1ec397f292c10 -0x631536e20cc7212841db38b3595a3d338b6b9fe0989468ad6b25c60877a2d2ee -0xbbc3fae21290b46a3fa4cc34a5259e53e460e683ebd0bf720a43a77faf149841 -0xf54b075d5428fbd91d28745be7f2e9abf27834ddf59110884a6721dbd879f790 -0xf2e16f40a5735000375401cdea5bb932c0b084ac6b99e4fdd22ec14749f03d2d -0xaa2846b956e4136b5641500622392500692671f5ac6038c7cabe6acfa2493689 -0xb9088b006e39192df7c2921a7698bae5da8baf3e17732c5f071b3e1cbff77ca9 -0xcb38c209d09e534b0778c3a2ede78489f5e765595a43bbbe1c62b3e8de5a4d95 -0x0a9b11860342083d1f3dbe4fbbd18b392cfca5497d4936eea05a66b6be7da6b7 -0x77338bf4bf4392215b0e53904b5712e55e3e75e1832d74fdcec55be25f80dcb8 -0x5afdc89ea0037d2cbee83fecb9c40a880d3198dbddde371fd23fae1bf0f080ec -0x2347fc039a07cf925db501fd7763e30dd1bed6805862ba24cbd6639a26bea505 -0xd669794dcb2869fcaccbe1ee8dce513f2ff26c9fc4d3f4c65248cc3952faab82 -0x26cc38cd8a32c63a80dc11944ab19d587d174a0075d3f1e36503a8b36e1cf9f8 -0x08d30e0151d05d42d1329016d0147c909c17a5270ca295ef81bcc2ef699773e6 -0x0fb056434ff4eb7e9112714b7d22b23ecb1487e6e420f62372de01edf3c0dbe1 -0xdeb161e7b2591a9d290c8b5f83d683ded5b7ef736c28aea3b7d093f296ae69fe -0xf66125566d2aed6d09d8cdfaa4c49fac0b7f50afc2f46749331b948b069e415b -0x8025db9535ba6ace5e44926288b29c498ce1180210c0daad8f74b3b46a91524d -0xe16e8b73e7ffa0e7b1ebbebb0d4e81019228a6a4d15e510eeb881f4ab17b154f -0xe0fa23d270207440a346a1ad2b00c7b715ad830827bf096a2a42c8ab0c3ead76 -0x51221d504f8d45605f7e54348567f863f18463d40392479a8aab52fcd28baa99 -0x367440b63e93bbd5c3e598f0bd6d98cb57b5d348bc7139a71ad211e8ca800ef0 -0x1bfb610bb64dfe436ed8e41e4432f02df8ca1b1859d8b647f74da204c9028ef0 -0x84de5a019333c2ed70ddbc2a9e0a0156e276fa704e4cb681ca296ed67a3660f5 -0x4c75f098a798e31e3c96f8b94edbe1e396f21435012c13111e87cf8bb10c3e36 -0xb5da841d7b74e8725a614ff47e1d51a6c6f3d417f4922a0ae00b039f94683e77 -0x8eba48fd4827bd705614c0bd4525db5477ccc3288d68d8505b4ebc362ad3636e -0xfaf04c8be39b77dd04bd653cb7980d70c1a00f41b8d11444615ea44bfcb76254 -0xdfa509873a6c728bcc342f0e1c3482e06c5398b4b6882f3c1b412901a542f156 -0xe34de7fd395a9694e86e39083480e0ebec924946aa36450004716d84410f04a1 -0x0c8083d451fbd92e30795cc47753f82adef493623923108ccb0cd2631daf641f -0x06df8a52e3d6b799b615e9c61699c5d2292ec27e20ca1948eed6e3a980eca836 -0xda2dcbe6fd76dd8fcbb08831103e096e81b2b52cbe5f9835b2478c011f60c959 -0xa472dd8f5b358627729d2cc0ad3282594517262c82da6da858fdec9e4864fb06 -0xe0eb23c8e7e85750f34aa4e6a410c170fea91926315ce916c93bec590c2d09a5 -0xfe4e5865b3e9308b6dfdbb37d0a0ef4d22a0517c3aa5917bb452b5b25b356f3f -0x55e81d4334e85930d0fc92dd6373349b95bcfd8e10de3da7ff32763d2ebd2fd4 -0x1a38b7a569afc6fda39a37771991f60db359dc36a26f67a981a41abfa9b640b4 -0x80a6132d5454f8d2c611a3212d84da97da4fccf29399219460a11c468db842df -0xddbaebbbf2bbe602c77aaec4611793d91211675b23a8db55c89f309763f8454c -0xab2cab9174cafa818a08a5ac084f1d88fdfe2b038223d2642d29cbb22e9b310b -0xfeb4bbf485001c4d4d96f69f54c606b3a084cf2b6cc3f7d6e1ed7c0625f72365 -0x83372628ee85646cf92801113bfd01078e3807b8a9a4dcd91cb500b54c9b25b9 -0x3949cede8fc87b63ac7166d3649539a3dd3dbfa0615f977d10f908c2a02adeca -0xd2451db3176b8dc289c80ac8a3e46c958a6dfa219c9ba6c026d10f1c6a8f28b7 -0xd333d053f389c471de600b6a983b9c1c90bd86400694b2b9e4c8b4c1337cb452 -0x35528842ddd464ec4fbf32c3cf430f410767696f257c340bac66d2903c9d6b08 -0x2a2d6f52be32e1108740d19f05e88af8d14f7fb91990913243b700f35a54f418 -0xc5ba8d13bd1b53c1ff04c951163192945eb9ca09aaeac24275db34950dfcb6a6 -0xb1acb79664dd459b526ae4b1b515d96354e0da484c18275122d6888ff88d9d10 -0xb42786970765f54478ebab487c9babc4cf8ea6f4f5ae6f5cfde0e3d90fb068a2 -0x7d1786f2a111a44790b447f4ad4b48314593a0eee0820076481af7a63bda7ef4 -0xc7ac9dd28602a743ea6b03ebadc453115c34d7adc1cfa2f4bcdad549b181e18f -0xaca24721d603fdc5d7a872b2145bcf043cf4f3c84ed813f5c9e62d4be84e1868 -0xc3421c50e46635cf4d1cdc5e0e4c79a11059612ac8dce788749fc163b5aac725 -0xc14dd757ca9bef2b6009f4cf653771c2c257f12bf493d1cca4d491ea7551636f -0x014177dcc33e50e62eb9a23e58ecd5d2a3813b369d19a5313bff0ad52a1bb1a9 -0xe5838ad607e214a60722d33bae8d51e85a2ad27995f243d3c5ccefede62c2f86 -0xe415f89705fdb6738e7d3349716d59658185147625d2f7aadcbfdc2f5b1e9da6 -0xeba80fd28264af2239435afea94fb02aa800ab2d48f07d26e087e69a48f460b5 -0x87d24e6a7cd8301da87527c1289594560c1bd696c72a1243f1a954534026aea7 -0x23e0f4ec33b748dbda30505950d8045de94332e317d73eeeb9f903fed140f913 -0xf0f7cc5369964f55fd17aba6aac4f8e1f0ce9269ef90eb3db83f80c6d585d312 -0x8fc30cdc9c9b752a6b2385badaeb283c9b5cabd97682211740859d23aebc9f0a -0xe000b70b2789a2261851cc0f370d6ffed93ad829a21ceb7949372f70da8c3146 -0x208e83a6a5469aeebc4c2159614220195939c6bf2d8604bc5757971622588e37 -0x874203a05fee137b707f835e755b75564dce596a2ed4b6575bba3a809c28edbb -0x79f3bde8d1f9ad9d7e70c48ffe7531ab807bc276dbb0431b3a31871cd335afe1 -0xdf14aee8890683eae8e637e64cef01271847cf09288234a706bd22f2ca77d18c -0x6cdd666ac9aac69a30f3b5ca3aec09a166dfc5bd168a8d41ce89624326a185eb -0xcc9120f04e16e5abb2130b8c2167cda9868d5f12eb241dc4a7b4afd81d662517 -0x809b5931cee0ecbfcfd51e32c5cde1ec76bbf5b1f98e5d250fa15d5f0ef1cb06 -0x6cfb86942a005c1bd5253fb806813c92adb718cffe400e258059c409c6c73feb -0x6b317bdc9c95daa93cbcc3478b302bb53a2a42ad58440210a4f74b93ded8e15e -0x17dcf9b78ecd04b447c97370d5cf13c7d6ac98d8ffeaebe111ffbe6d9b235e7b -0xeaceb1f7b4c2b10c9c8d3904d52a0cf1bd2c95740b7ec88402afbde90a61ddcc -0x6ede14474a8fb225082d087877fc46f9647065e673d67048c59e83ae2a8f7bbd -0x655e2e6b73146087f648541dcee5f3f6e262646cb5742d91139ca199a687447c -0x9c9ff8ab3019e5e6953b36cdf431f84fd24cb6c4206a2366a1422faad7015144 -0x0d5f622ae138c909ab25fea72a7ae6ff27b068bd76902a8a1b4897173b9268ea -0xf563db9273d5171273a663e74c416a6f96f70229942c2911c0a97fcd7d898a25 -0x0dfac7d76ea0fddd8eb71d3bd760552d7d6faf043fce5824253e38a3df263abc -0x2141fb6740616e7675b0a3a3bfa34857b67922ad999b333088556cab27bd5216 -0xdc21751880cbc7eb4441ed4d2688c46048c0c2a1b2b000b242c91ccca4b1c38a -0x2a17939c1a7210130ca48d96817571833aed1c837c344ae1f2b21a91dd3545c2 -0x6464040ea24861d8f00c056b1928a01b12d0de8d7cf4c3794d0ac34c9375dca1 -0x510b3d0a328237bbb0207bce2e8ccc6ca3b8cfa9082f13d007ad56a72c095196 -0x797696360a4467b274eb22dd0e981932b95b5221968a0c3ec1d8676740a40e88 -0xe35d0ba3ef5de6713c9d30a3bd977dea99bfb29426a87f589cd48338664e833d -0x1a1a55f7768d43ebedcc5b2b846a4f7afacf10b92d794de84d3a06d3e2f619d4 -0xbb694001488282ab1604fbe75a79fe47964eacfb2447d0be80a4c6287e86cd27 -0x906b9f0473dd6c56fe456b01ad1da11472e427dad79f535a48b12debf8d68675 -0xd066b26d7a2ff0e800dea6993aebdce06d3bae62a9e96787c48d03bd622542fd -0x31d6c3f7afd096b5944f113aac77ed65313de2e05799ed95de0902439d9c0c2d -0x7729c95b9b0e055aae9a6751a08df449468a9dfa7af371808c4557ed725fc995 -0x5bbc6e6ad852df0f555f8df7aa0ba9bb2c0a15fdbc5e37941ac03663b338d9f7 -0xa5acf1826ea2308e622c03a4b16b08d72f29bfd5f12e88948093b440a6f1aa98 -0xf139c6e8464ca90d66daa6b80708eba3ac7ab289f45df0f70db940a10a429256 -0x6c48b2e50173baed756f67cf45052bac84130b4855ffa92bd3b1f76bce1d395c -0xa8052fb8b24211aa6fa47755b1280531ddd9238bb573c8e70cc853377df5d44f -0xe8405d667a35b534c4925be255ec7743ce80144e45678b9af5ac839936f9d13b -0x051a37b21cfd1b0b4e25aea81a29bc148427ea6eefc3960b2229544c015ca810 -0x9873ef75e19a802dc37a0af6182ae2560e8f5c7fb060c8aaaa181201bf9b24e7 -0x477c7d9568b1be78134785eeae81c4a08e62f1777e69ce52332922e248413d4d -0xd73e1efad257a6c2795eb5fb3c9fe5c85c19d566f8ebf65dc728ed3ce8392719 -0x5412ca27e2794c544e9891a1a9e8493f3c7508780fc26b8e34be63597ffde8e3 -0x0be997b17f6f13fb141497c9b388ae41cce96316c42e67c19f2b5874e14102a1 -0xeb8689aa4ee27ade4b630f0a96c47782d9e0f328a8a798d7f877aa0e6da1e2e9 -0xa29d2d88d20d95a3d8446bc9cc4a1cee9d1f5a25fac64f75e091271c590ab45a -0xbdbd58c027b9d0616d2c1819b0a6a68c9719bc43196036413d7ae8c5dd87bc90 -0xe38553b5094c369daa2fa8e261346d4232b909f1f32da62d20a908854ea38715 -0x1c5bb7ec973c3aef24f086849d97344bc56d42275be0fffe501551681bc34819 -0x212866d3e3a1cb504253543909d210c5187cd8042c1fba34271a1f90f48933f9 -0xeba7c3ec5f3ac34a556cb665ff6540d6e26a09935e27d332f7f4bacff51ff619 -0xb3c702bafc0e4291c0335e8e810e78a2a8ab0c2d1ae91f904bcec1b045f1d50a -0xb8c3cae0e43262e56bc28ee539ff5b68d2cb49079cca8c2de4cf54e2e9660f18 -0x8d404471e2053993a5998e1927b0620e87fb855da7cc052b2c823f9d1e6ae86f -0x729a637489cb99c3a1e8190c5ad4b3379cef9f5620aebb4ecc64e0001e998de4 -0x71a02ee17db5bf665172a49ed1de48af2bc8ed71471b7febbfe800ead58519f3 -0x4e2f2378cd6d9f4cd5a799f114bf050152414a72db9ed9d7f6ba2a49dfab9bae -0x9b837f88f0789ffae0199e3240782cfd2f2fbb95e0dc08a9505b511f61ab9f0e -0x31c10c5bbe72bbc23c7e7c9e6ddcfa6435893d185aeb70d25e73edfa3199c709 -0x57ec1ada1c1b02e7b4488148a170c1e96dfe14ac7579d1d8d5b3bd4198b55f15 -0xb334a9616f4913262cc446fe70e986dd5368c10ce193f6b13f013fbac3b1266d -0x292a8951dfc6e1c6d043bebaaafc0f248e685cb9e3363679785dad7583ae7136 -0xc6f17ce9df4b133450f4c09de03931d5c3b51e1e991e6b4a115b4252b60cef15 -0x0c15d1654c850bc99e38ee3894045644ef5c9b300f8b1a9fcddf77a72d187aad -0x4ebeef800d2a01a9c50e3cadb742cfe2d50f2f86b32c4cd622a363abf9aa750c -0xdf277a963ba894220602e37129969929f3341978738844be239c5842b6bd236b -0x1ce45929c5e3b1a199b57cf64c3d376e7b9982cade0027f0c202486b7fc6361c -0x3a61e3b9d655d5c507e6362b16bf7f6d4e34b85282cd2ed945411d34b042275f -0x2007b408cc45c85bd1d3cfe7555b4365d01337aa163071762b316205750bec9a -0x911fa6878c41b77dd121e1e0b37c4d9f14481d0d9facc32893f96d9e36f97d93 -0x5c051a7d69f2b7972927cbf26407c9742b62f01a690c8994887175fff4dcc45a -0x1c243c9ae0d92f9d0b05b98086c97ccd0d7940d53068be7572df2d9311e9548c -0x0756a2c12284d8449678661aa1868076304188dcba5e99b35c51a38b2cdfffd3 -0xe12e429dee5b30f132da124da09daa87382eab790943875772cbe2859d917cb5 -0x7abea14f79d37a42500b19854b9e0db2641547eb94d6c6d7da099b7f09aa6efa -0x74054c4d8a5d7e4223251ed0e4e74745c68ae3dc2517e15669f8f5dae78dc2d7 -0xf17750795c0256d66669c4d6e703d3bc78c2834cc671da70249187ca4822920d -0x2dc2d38b12573115f21281a37e8a9001deecfd709c4092435d82bf940b034b09 -0xe9afce23a71b3fb22f22cd5a7f5e7d0f8a98fa411efd2803d627df6045d7ff46 -0xb6c08fcad37683a886682b6cc7a8b2c89b4e70d236457d97e6c831b3edf9bd4a -0x177aaa682cd8f0bc421ae62e1942c43531696ff76d31b047a6e3b25cb558edba -0x28f1a33709214046b4cf1273885ee4a8ba59b20eeaf9ec205008dd618919cdbb -0x98c3d881921a2d167d319f5a9725fe6c981fc3ce2a42a82d4be71ee2f40915f4 -0xf8d9058df8c78eaaedc310a99a7d460f1d3234bbbe77a1272f9c3e0cc6809ff9 -0x41260719539c29b78588e0d92c05312d487d48b408ce71104f4b164fdd694ff5 -0x92545a0169a7a448f70df616bdacd651d8ec67b2a2c5e390fd7ff68749f8681f -0xafe2234e50f92b214d9e500aeb204911c0b4af78c67072e069f91aebb4edd512 -0xd01ee1f5229627be3a23a7f355375d2707c141924e3174db394352ced39a8474 -0x9021e2a2fc0c30b95e2064b0bcda55e0d7951c2fc29d9056a9a2d546383a02b0 -0x4d5195a26442a7d13333d44cf2955746366f7498ba7518b9ec68c1195c7b108c -0x36f6a5c6b8fef4457b17873012ecabc168f6847cb4cd39e13b7da86f8fc62192 -0x2b5990cb43d41d431302f8de47d9b705e4e5231af947993eac44e1b108105b6f -0x444d6c1f9a3b7b0fc6d8b96ee8e7a80a42314f65e1647656101a2dbbdde06078 -0x95a4ece3624fc8930528641a26fb38a2a46346847e29e4a287dd0f9bcb974309 -0x4d4348477d81d6265540493b45a79bee8b6a5bca297fe1a16444bb02500e2af9 -0x7837c0eef7d36dc41b06c5b706cc675376726dd6480b5b8ef91596ffd9c4903e -0x2544b4ee00758d1ae7412ddee3f4487fe6d75ccfb1281be1c31164c5fce6623a -0xdd6252fc73ce1c2d6fd38d976b0e0396c160edf870be799205186b40ba71d273 -0xdaaa0d14a37a8e0c357a25d616e44624cc8f19743f20af6a546a0975d1ca6080 -0x509ed48bcfa43aac8fe2004d30d7dd86c0817e8ce7bdb0b217822f2ff49b486a -0x3287c7ba7dca0fa2f1b5b1f56c5f345bc8120e4046f5dcb5884e7f370c7b8e57 -0x749f117084566634ae1435fcdc0dccfe1871d95a3598bea47c751c591e0a06f3 -0x261f361b88afa3e3adba24d41dc0f43c378db14946ca5f50b4e6faf85c331aed -0x95553b9c3638a1010677a576541b489aac2cef8d0a7f7cd3a85c12679e93ec2d -0xa96060cee7fa76c25e1fbb5bffb6c4b91eebafe99a7c76f6ce4b3178a8228a1a -0xda6470a58ad0d27a9aec0cf02680d49a942008645e4a8700521685660c555935 -0x889e8f2baf066d951c2e4f75e300e89a127060a76a7ce5e00004fdf75bbc475a -0x71fdb7d9c169442ae686c0b36ef5e11afb2a629049adec332cf79dce9166e86d -0xb29b35605fb0482159dfd5305575cc73f4adb9387971fc212262fc9c398b0409 -0xa4a335b61802d2e8accf28193b71ef20e2101eee20d1151f298d59b53cdbc4b6 -0x42d5a37b9efce5b41bc20c97c59bd2f8135e1ab4f7ecfa05b7e9ac312ff198ca -0xc5e3abfe42c6f1db4563ee96781dd3202e26a4611af91f53fe4812d0dff00ea8 -0x52281d6fa942261fca515c9f854c8d8e29964c4f541f79f0c2f49731636f1dbb -0xcbd170c2b19170ba8295b48557f799d3405ea2131f831044e4368fdf4a6e8225 -0xaade2db5d5d447b1e1aee6a2c9e105280c2d22f056d801af5328c24f759bb98a -0x26ddd462136c6947ef9d2b88ba2f763b1ccf5bca19b900e58a3a4171ba4ef365 -0xea46103edd19d3e1cd01e0e198c3bc24ecb881ff5238817ab7f6fe7a173a941b -0x3834ab9e2c658aeb5579411eec510b49bfe969c220466ca434e47af1c265697f -0x020b8bbc095060eb24afaf4ef0ea2f74fa203cff78887f6f9ec23b61a65f618b -0xec304982d7cb7f324e0c810ede357e276aa2e9fb95b1a7c4d3802386882837b0 -0x57459ec24cae281bda40234f21fa205eb404c5686907f36ba45f4a9f72dc4a84 -0x18e6cfff7931dfb7f185124c9729a61d541b2022f45f043619cf68bbddecf494 -0xae5d87c311e80df6254dbb375abb3679e069b42653f9635d92781e5472b0b8b9 -0x36aa37971d774d63b5bf89ba38b26cad4674c044fdaa60977240a7cb66deefaf -0x2ecccf30a7d74e676684e4d12f1bab4c3c6ac85ea9682592fb210677e317204a -0xcd5aad3a533703eb02a35a9407d0d3fd5ae6de5ed3bbdd1749f3f96d775a8371 -0xd32e52f1bb192f832b6f349062a5736a5a7522ecb99e8c7de4b0339ed0147b0d -0x27156be3908d62dfa787d924a4cce535e472234332f7d52fce66888cb007a8b2 -0xa028dc90841a60f5363688e2e5960e9f5304b1ee83e496b3dd90261f5f1f83bc -0xeb652399c72263be8afc2632eba14d4a545a8bf44b5aefb7e22db245ebd95ef5 -0x327d689c9d4c8af4a0a25084d00bfcf47e079ff37103cdf80b4730e5428890e1 -0x09dec1333bd64fd41e03cb6a2ed5a4da30d312a66ada4650e5146a0c279e93cd -0xb6973dd2b7329651ec3098de54137195712fa8eba682bc27903b05ffdf07654b -0x569daeb84330ebb8e777bff47ef63de7d9d4b9f015a790d998efeb574fabb621 -0x104863ab992015fbaab447f8529476910c939eb7e24be715ffffc63b25667f62 -0x670ab52e847fa4e690f69d41001da204dbe7559b44530a50c61fdf77955222ae -0xdd69af8e7ef172c4b7ed5d6e4dcf7c28610a79f7176de02149286fa5f9b4ef1a -0xd3e0db946e86a5fbad3ea387412c61749d05bcc3f17cc81f193fdb693f842f74 -0xd302667ddc96d4ce025d91530a1d588d1d738d902151d29908224aeb389dd44d -0x5fd31c818120dc23fcc000707fa21c6d00246abc862d2dae4d936e59a28c4187 -0xf99fda4e7b5201c041645bf43e7b8edee1529110cdc9c9f6b85933a3cc0996aa -0x3b9313529c828c0520d8e63a3280160a419088780bca7bde8ab99bba496731cf -0xf9f4490af31e06a98a2d7db01e2fc421e1fa9c9722a2d736007e46fb470f20ec -0xf825b412872bddf2d35a687cd72ec9f2a62de61cb969b6473d508beff7ab3e70 -0x5b46637dac6ff51c285970e57e429f6fa0c045313792bdae1af73ef80dafcccd -0xa529ccfec5336a526b433b77e3e89224ce61ed9c1b4e8c8d01e71de95efdf8bc -0xccba48b768ccc4c7cce485e37ba55ac1761e9252c141af52692a4e8931fdd21b -0x78d7477a08b865912afab417735d2520c383e6e73cef1b2bbc1ae6c265dc2e25 -0x5d6ea8571608e55f4a9c968c557c386a203ab09c5791fa6c61702d52edaffbc4 -0x625e1bca1457a139f8733164b053d5952c480b06582e7f259dfab1cc82676949 -0x1f3a9285f94f9eb2bc88fcc1af5072797f9a5576e993f752d2b495d6a336e91d -0x92a9a698ce2500a14035b5830c06cb7249354f40ac951d98fe6e4bb01306119a -0x89cd88de5f28b9e5b0d4ba187b2589ada04949b7621019ad8d0fd7af5879df8b -0xb76d2e8bfab8cbe6a6ad231f91e50c1ba7a20af3227575bd8a734e8a91d3c4b6 -0x32211ed275b259fcb78f5f13e6847bd21b254dd093193bc76a97628e854b7a0f -0x2c38caac473cf88b7dbbad85faf6fe8e2e6550f6c4d93a949dfc2789b1baa632 -0x7b4fb12cc299babca8f12137bc36074c4b29aff982601cdeac5e7095653234fa -0x31c9ca3e77afd67e543dd11d650de7cb6e06fa8868a5ae76ccc7001527d723a3 -0x247b3fab8b14fcc758c642bc4012db0bf293cad254cc0a7c3cc0e711c1268a5b -0x82052fc105fe5f94d06dbf4d7fd4a0cc8b39b0bd846d0d73ca9f18260e42c2de -0xd6b7afb2ac2cc9f5b4cf931ec165623d73b252c281d21767b3f51e8da6973f2a -0x6ad05cadf863e3ceb82921190e71f72c94a59afd4e7692e8d5bd8215d680bd5c -0x827a6214e17067baef2d359e120c6c5d3d5d7169fff1ab073e6501f51cff73ce -0xed8817b14d36ebef4162027b0c3c1d341eedbf12176f41ab2cca370400659393 -0x4ca46446b6285ed82208b25c6c84130284c030f4ca5076bb7ae910717ab478cd -0x9204de19a8dfa1b23ba9be29e4b31f64bc403d0e980dce82bdc39cafda67e82d -0x1320861da221e5b77c269000af8e8cd920fe5559a2628b31cfd4d5cfafbaf49d -0xaf3cd0677b669246031252d5c94d025b37d0f233bdf8693e21d7c0c9f80ee366 -0x363a366da58509194f0d04664a1e4ccec45f288bd7dea2bc7f2d8daad60ace5c -0x9c44a8d8977142a25441bad7c82c726ed2670d4f837b736efb1b2ba12acb68e7 -0x867c7ae49caf243482b16632f0ab4ef58f74516d1c0e6a1c9400c14cb054fe92 -0x775d2311e71852ef34d72ca0a8d951f70965418e12209890f2e8fd04bfe12dda -0xa7b3e9136df4d37823ff5bea63ecb239cb9d14be282b18077cbbdaadf6587073 -0x5306d9b5fb06929cb7364c2da9a4d7d363bb0d526397f260b6b2ba710e07172f -0x169d54767f26464bc34afe899cfb49b0347c91f14bf2ed6e770a7c806340c859 -0x57a639cccf6c96e2006b737048c696a17dc739f4b9efb218cafab9153fa5d9c4 -0xd8d74d516d35dd63da274fec4aa145aef32f2f6454e8d22c2148bb60c6b3fb34 -0x4c1c333f4ebaa216aa412f47d8740672678cba3772b353ed5ad88fe5360afce6 -0xb934b37da6e169e5dd83d2bd95b2d7de537a83c9438ac656dcd3be66890c58b0 -0xa5159f41291d8f8030914f1183c26c7a043985397abd48eed831db0efaecda3a -0x470996648e004204b1c52d29ff75a25524ba2b8a5c98bf2273527a66e93ca8e7 -0xe06a2ae75f62cc1afbfdb199d93bd8ff1ee3c82e4632553b08a118d108ec5b6a -0x3a47213ae311b14c154c71d043a2f1881b6f033eca9c39a55207e95c3ebad002 -0xa0fa346964749dea50b9801d86f338e466f822cb72db2a66ef48bbe1df1054fa -0xff041cfd33257a2e07edb9efc485334514053405aa2b3d151f2b218eb5de8e2c -0x004c77a55dd31d6d3fb0daac52aadfdda3ad60bb784aae14a6c85bd633baba95 -0xe8fa64381b41a89d4d51ae06370b84d929ea7e916029376a1828a99f1f6cc4ec -0x1e96dcc1eade11f55673bb2e9ef71ff9a76f4516311e98fe7e65aac4a165d90b -0x426300ed608701c544e7c19cd9a3756f985606850848ac30c969eaeac5c14548 -0x6e746e7d7e87531b891e8aa1f31b7f50cfaaaf02b1d6041d11a4aee36550ba37 -0x9e0115db1fb143b9739b0489a32b177c63406b0310afd22577e01004e0e14b11 -0x5ea4c16945d7d4f7822fed5168f3a288bd61c67db9cae06889c3b29527900613 -0x2c8772cb64123ff4e5a33ce567149b89f1b19a890a43811fa27692690e641027 -0x0a18423ee28fc282b99a2d472dd8f0d1275035c7400bdfbcd5554faed4e06e0d -0x9c999d3c0513516b17dcc280a95ee30ebd236be75c690fb66a5770c78ddcb28d -0x2308fc6f6fb4b7c786a8d2004a0bd254eb928649fda3e422d28d95097541d807 -0x7a803b36f8d1bde8ddd53a439c51c42ffffc93cb56bb13ef8809011844df16dd -0x3572993054c597dc5340ac117e4f58698b08d380c6a7e76bb59ee6191c2c4f3b -0x03731423825c0cac99ebd807edaa54d5a63075127aca7c6e64aac6cfca8939ca -0xb9ead386bf98f9de961feff0e9bea3c7a6ceb3daac6084b821178b0c812712c0 -0x6ceaed72350eeac26738fec5e8a490fa12042fe71c53f491c5562ccb84283a02 -0x66f750d270750d14b5c8680328a7695a26751843ff962aa4833aff8ec0eb53f5 -0x1263c28810ddd2e1feb8c68324726708920ff2e9ef169139c5fa559d1bfbe41d -0xc6f8e678d5807064c7ef3453e85eb4a4642d6144258a262ab2f2ebe936de26f4 -0xb093066146fe99b1fbf037b87bec87955238a9ac467b8365370fb24b9e3a4a54 -0x418194563b7e9065cff2c96eb5ca2468402e2dfb6188922078e26b07705552bb -0xbcd772cfd5a6e0f37771cb5d2b09f7e84f85bb41e7e1921651ca10beebb534a6 -0x06a982c4670fcee51c2bfa6f48ec42d9b903c43c7807ac5052e574cab07918fe -0x696e5c1378522245319188eac82d88b5ec6797489288c666212255518ff9b6ed -0x8891682684874a4a8bb8455110322ac10d1f430893df3a40101c0bc1113db2ae -0x4e2c4a5891cd30118ec1c95e55119219270ceb223294174cea18b23b8f686a52 -0x4c48768030f548a522f25f12e1598cd0841351f81562f40e624dc65c7b58c117 -0x69b8b6598cfc75d850b800947691c992759fd6c4a87a6b7b14710450e095dbb8 -0x12610feceb3d178cbc5aa6a9447e29cedb2d824ab0b35eb530893c00f62e0548 -0xfe2c171bd344b4274858fa9e9c0e51877217b60dd7faaa489aefe4e36b3170bc -0xcb4cafb81200d740ecfecb1e5b2e1245f782b446599b570d99261eb8da604713 -0xf903b629c5766c0a6c8a22db6a3fdbb891bd89d63c2464cd422e2a869a177b69 -0xd204a52f6177c3ab5e307ece9d4a8488f6e21645ddf903d57ce67ff021310e8b -0x34b5c877db172602f8f012612490ad8aa3491f2edce812c49dae07a6220b162b -0xab07906f89b10f9041903aea8543083a95a78681f9ffa82e0dfc4ca39d3fde36 -0x7a779340675997af81fa1cf07c5f5e7c9a9d9e914e624e31a1eb6b03e352ed29 -0xdce2612230bd76e1c748fbc9593c059bd7261306ab1b201972502109913e4323 -0x3943772055bb84dcdfac39bc20bf5b2d389fc3638bb758c83d7bb19fd00a8610 -0x4a1d83dfe49f1adf3be5d8e9aa1b092557873efc299fb616ec3ec9c306b3544d -0x1b94c36e261bded9e80359f5d8481712b277a15e8966c069a411a894b75b39af -0xb06dccf13865d7856961b8e16a6685746dce20f6f9dd3950e170bb9e3547e843 -0x1e679291d219de563dd325811c0a00290b8ef0c01d74110191c1ecd5658857f4 -0x762c227a94b48cc5b60b73538d8b25e21317ea3ab005cb542306635d4087f3f9 -0xa0b43096eefe6aa42082cdb4a8994d262a64dcb9b4b0aac3985712c9617cbb94 -0xda0bb93acfc2530b72e65382771c380e35f076c46346a3fbb180dfbd840c41dc -0xd948f7ee9218c773d040d1344bafd5d8db53ba9fde7746550a84bc7004628f9e -0x931e6adf147af3dad2e202d369a34c3730945d82e34999d2d9602801ef2df7c0 -0x0b16fcfa1d3a57797ebf39658bc4a506f22a73f939991a3e1cb159c9ae85f313 -0x477aca1e40fcfa2e8603e831a3856d2be389006109ff5bc5a9f7b870d5f61190 -0xa6a908ca7120acb6021813035720ec9801c5c7a3ea7ce461419313309dae4e01 -0x6c68a574d9a9c297d7b92bdaa353437668bd5dca5a8fa44251a1f1664aadbc7a -0x89e2e00c10d7f4816130ff5010ded4488e477a5e017cce8dd99a60a0a6cea74c -0x6492fd81e6b7e71b6966259edac053e45f0c672fa20e50b28790655b24ce1d21 -0x7e059feeb4209154d9ef18f3a8ceda10176c97421685c7b3e2faecf49e80f23d -0x176125bebdccfade0d761bf90d5606955e8d8ea16557ac5f12041df9e1ddff61 -0x337ac10eb580301ce3ec29209ed35d2c20c626a8d7e7d4bd2257cb43e112cc32 -0x0e647b5706187ff7e33709ec7bb2f893552bdf5d633987d4336666ce33175d43 -0x591a86e4ccb28fe0cdeb5b042fba9f310c189d64f4a02a9ffe5c6c8d8c0f8284 -0x2f92381432520f3f93c82ab00516d0b7a73dfb4bb64102a6fed5c585a1c161ed -0x14bf12668ed4ec31f0d568ca9bca191fae17b662a537555f842c0dcb4ca52a3b -0xe455885d8397987e78f258fff556761210e7c3b452dede5842606dd5305b57f7 -0x314fc21f906eb0d978cf2efc395e7b3ca6fccd4ef3e6eeb26b3290fd455b1261 -0xfc30483b3ec41038d71a98f72fc42a36383e87f0a5cd5f67c874a10b4b807971 -0xe2eb6423bb393f9c50c79247bfa921445216eec8566988f6dcc5624d8209a620 -0xb86b27b7cdfb8d2a2d3702259bbba6f9651bb9a4ee086fd2f83228d8acb4736b -0xf538bb03e942a34de826706b58b47a526dfe0fba1adb53a395df57f5d01b974e -0xd3d36be28cb5d0d220e7f90e62a01bf7c2ad7ae5f2d94234d8d30f54ae47c810 -0xf20a041971d9c8773af16084447a78fbccd1a375bb899890f2e2db60a0e15b37 -0xedf93d0039d77860fd988a8ba34b5bd5aad6735d4b8171ad98be264ba4789431 -0x18c880a93c088facd6f56333d934b1b8af8969cdf0e8b77c999f15cb8a325787 -0x7b833d4bc9591985dd750a700a8e929c023897b95ae86492dc1643d0388cd2f9 -0x62d2cd68031d90bad284980069ee0d15345dd14665f2967f210534683c0230ea -0xe4cafc86cacb3d9f84394d9cdca9d3ac07eb6e5260b8596aee0a14022c7ed817 -0xff05b4811bd37f030308116082a3484a52aa05107e80b2976963d344f644eced -0x1d3fc31970d1838bb4d0f7163562333a29ba2d4b50b4cd8335e75dcc27e4ec51 -0x8f80f915ec709a50a6f89c506a0bef99bc0c37678333fd968f158e026a6eb59c -0x52cdd225686833b253bb2466c033057e245f9a3e93b6cbaee29b062fb7fe2f2c -0xb87be1056163d97d3d4f09032c227debf2655c260cae08b621b79e6adf8d06d2 -0x3ebc2fa34ef38cdec95d02e69c40ac58c2d5aabf1f0748a78ef1736d70e32b56 -0x3ea31ca964edc1fc331b768faebb79ddcf6491a21df77f279704f501ce596cd7 -0x8fcd1f272b7b5539a0ce84910d382d3b29ad93b232409182200b3df7a0963066 -0x2744ded4e384005a8b808498356ca4b1a465b9977770f5307a5b9743c176b2f2 -0x5225171aa688a2c5cbdc43deef8dcf3d7a2ca761e5b4184efb3b34af56dd9e1a -0x3f6b6aec5a154fea88682fbbc9561e7bf24db84aed168f8ff573d0f10de50ddd -0xeeb6cd059c3f18d1ab4a80dbe81f3c7b2195f034f99abe28768a9c5327f9b98f -0x8339fa420ab9850d2153abbaf738cf24f29971996c25f5f7e428db313faf1796 -0xd1c87858d339ab57f32a3df7d48033f8d91a451f0d67820ba30cb49173105e76 -0x566e62efbaeadd32411b54b6926a96f75aff845164582a74736b994552b04cd2 -0x38136f831e9a025ca9bd851c8b72edc895342bd6294a48090a5afc92060af254 -0x4d0af63c6466fc8617d7b48de41f11c5a316e3e49816da240ea244698c53cb6e -0x704835eae4db3c9943fe4806114ef8e5524d9b8c981700d9ee244a8b35a8e1c1 -0x82275d6767290ecb707d2f71af1c62d8484191fe8b896d2d63a46a6e4294b435 -0x55a85ce4df8025473de099981ba526756ebb02b15231311e8653940ca3ae54dc -0xb87916e1e14f09b920cd748499a71e6ff2f8dbae143e609b5a0dbecb520ed69e -0x87029555b4fb3e671ef8230c442bff4eb22e3511f9a9a36463498894da9a1a22 -0x296b14a430453f6d10c3b9a966a6628adcfe7f0052bc57b3a01e44811015e3aa -0x81e30f73a8f5f5cd8fcb0aa19cf592a59c98d1d18dd4ad3ba501a1398bf58a94 -0x8c67907c8565e053a79796f938e13d4d7cd13f4f90d787acdbe972658593e84d -0xb4d8c2a8e36e3ba47d1c81b7e3bc1365aa0a12d6ede023d19b864361c4b4afe4 -0x22a799245f71cdafbfb48e66ca541c5b2c0e74ce21f8e10ef3a57fc2a29b8324 -0x00e0c75b69dc068832aabf85bedc8403a660f5985687142f8b3e02cea9edd3f9 -0x00e3bbc90c79b9d8ccc2f1d5aba4fd2832006a8b00f5fe296c04b585b684fbbe -0xce2f67b9b39d9907178a878915c4c2dff4870d1e95b390a13b34b648f74f8075 -0x5c3a107a116a4758454d9de9af9610fbac7c95ae3955d0f2ea314afcf81fed4e -0x27edf26a1517cd8017f6e7566085e89363390b795d16627f7317afc916aea75d -0xc64e16a6d268f5fcea54019ef093a2537b26381d605c1e925b4601525fb0373b -0x40a43f4ed4d8306d38373bbe263cf865db97dda04c7c87700f25eef2382758b8 -0xcb6ade95f2b0d59477c2f8778b904dc220acb062d1423c0f303e4d24076a0d2c -0x663bab5ee8f84f41874a2468689bd3ffcc594ef6f0a59cff4a1731def812ac00 -0x67516e4e45e226677382db313b71ce65e5a4b2dc22d040a537fc61c7a748c778 -0x6d4a7d7b36ab77b20dab44f7e8089ec4d3fb986d41a43b37243afec80f7ff8d4 -0xf08682e7197dc8f34111d541c9dca65024b14792437941d6fa284d33112cb37e -0x577aaa57a071b081a6e841400165610f5052c93a14c0c09e754916df2929dfed -0xfa6573121fada8d6db47a845d8cf137686085a7f5dc72334474598c8bcdaacab -0x769a55f5de7d9ccaf52343ed3b875edcc45acebc3b6768e388c057e36d2fba6a -0xb9e3d1ac1c29570c15d0dcfdb28313052a6ae9a951dcdbff1bc75a74ea144837 -0x3f604a1e4f25b4d209344a53511948a2dcfa03d6b729603e20a42c316e664acd -0xf108e48656683a8d9e898ea0a7b1815f68e210b4e1ad5a0e13fba29573aa936e -0xec253c5b47c212084f80e68c740884a445129e8778a0d827a854c62deec13a65 -0x9f1c85bb35a68cbda976854db9ba6a82a7de11dba10f9df829891435e08c2e23 -0xd01c12fe931a67b6e46d9ad5020e55e49810ff8e20058dbcdccfcbb3ca502c73 -0x4e6db8f8d9c68efa837807b92059616dea96d2cb0b1c616cc82f9721e56cc3dd -0x1794e2e01b83a36ccc6587450f1bc4e14d31129b9f272306547b5411d2a838b0 -0x7b736f7b697d0a6fc994427dacce1c5eaea7f927c609a9f0770797469cb62e9c -0x83c995efa59329e14e804eeb83ce036724b4e811b752936791c3366002bf34bc -0xf0c68096c7de2f0e9a4346f4c67f494e132fe17bbe3ad1ef2aa8cdb366822b3c -0x14999e73c49d8121148cf62ea25cf3debcca8d227a12b73d7c769f950df3d54c -0xbb56a20cc48f5f7e421891a9ad27fb76f6518ff1f1a192e635ac128f190ec230 -0x9dc2bb76aef188b4b5a45e95e7576a9997efac73133d7d36f76d12e4cc495aac -0xc49d19a50856534dd3e7b0e1b7f40685d5fdc619b2c539492de9b23c49b143fb -0xdc6cceabe9b142d0c23499dcb978c7f67e21c9ceb355cc9c442e318307aef62d -0x0ca44fd96b71234e48190baa1f62ed1ed5612217148c1a23c2b1353b029d1fe6 -0xfac1a5a787fb88e7ecb8074e816f1ff6ff2df9053df25e53b3d6f1f39cd7e52f -0xe0da7bf095c3551e0d9d555545be2dcbf43caae2488bf076c0f3bc72b45000c6 -0x22bdec901d6649645314f1fd16453dc652681c1d46d31f78991cc3da28aa0f8c -0xeab3909f5630a60bb6710240341a193aa63e3da9bfdd366c7e3f202c4231baec -0xbd8a3bdbedb4608dc8dc70162dec40fa96b26afc3db0768f8562f671530cd036 -0x52e93f0cd9243aa6e3e49705d76f4be98beb775e49fbd7866db607aeeddf7d4d -0xcf757b2361c9a91ab03a0fe26a52a326a982e925305ec4b21ea7cb9f75adc1ae -0x6c77adca1367cde09ef4b2fccbfb596a1da7f698d1b820036c96770209d7ae4b -0xf83c7ffc5a5de6352b523c6a8cfb1bea7209d4b4fda61fc409ff31d565ec2746 -0x05ccdd5659de59eea70bd654ee707965b89d231ac8961297a78df83877b05fef -0xbe1543a2856563e85080d188e08c07bbfd84bbd961a29299b4338ec3e77474c0 -0xcfdea63ede88afeaf76e529b8fb6a45707c79aeb7b502a75b00078017ae92b3f -0xbf8b4ad19270b5b863fa2bbb641a0dfce469c5a1086f9d43965771cbe4e40873 -0x6adce9f96e1f3255c994bc806f204267fcacf38790b5d444399398c661414468 -0xefaed166221ba997c289579c75144f4f497dc4ffafc8cd03fdb559760e1d8d1d -0x2a16c100bcb3eed56126b63767a7b66294bad0c37d541bc63dae65e684ae5f01 -0x2e00a524e1e7602a6e0301fc4b87995b5ea74016613eb0462fdecdbcbbf299ce -0x46b0ae6fac32823a96cad6a922a10e36b66d0338314de0726637b3cdaa651a2c -0xf6c2176c944f3a7d7a9998b98e7ba9a333306db7672723e4da7533adf1aae438 -0x3e41151229514418ead5ec3ad69def8600b0fc83371c7aa64e8db713c8a8ce90 -0x11e812b83de39d7b3d6ca81d41cbc3b4d76c54ab0da95b3ca55bf144d7e69862 -0x26df48771f53b17c2af6f34ebf49fd7c8235f248b911ee6cab2eae5203ee1273 -0x1a2acb88dcd07ca0e4b82ea1c7c0ce4d96f8d546b7e3cfae45aeca5838a15788 -0xa3051f7dfb2b2ce61ee5945ad5bbd88d4c2cf25bfb203d2ea5c28a9cdac60a39 -0x55c8a1e1acdd24c3db05019bb0313c90035d3ee25b53e5867b526392df60adc8 -0x048391a262188254e8cfc1200cf03d64352e15bee856037f3c39d11e2df63f64 -0xe63ee19327499197a80f0810be16d22011f65ddbe92defa4ab2fc59eea3c7ff2 -0xa61b383e69e15d90e5c51711c991e350336117728be4c69da23ee3eafec9bce4 -0x08b9fc0d5d82468b01c78ad3bdc0d1d9f56b40e274be9546c5c2cd6558a8a5f0 -0xfb668e406f3667d7b0ca98decebcb8eae60dd204199dc9075914c9518328a8b8 -0xd4a296f1c712554d63cf9f07bc7433b505a048e1caa929e5687454a08180632d -0xc08605052e3ad814e8b5e0b442bffa20941d094d497437bfb31e2af9e959dd90 -0xb34b464bf132133a5268a1cb082630ceb105e4dc4a10365bdbb686cde1ad7f08 -0x1e081ab6e52d0a7318dd5b4cf9bdf5815774b053f8565a26166a47512cbb32b3 -0x0e8ab0bf141b86661fdc11ac217783ed0f97ab51ba82c7238aad64e1b872d50a -0xddc36942c667b07c4bf32ed8d0153999135a0fee3e568a42c058a230a498d3ca -0xb066ecefd429e23adb46a7f4fc5a06550f78855d867c57b3291f818ac6c32a11 -0xf2be1340069f83d63f6d0863d8ad9deb4f4a06ff881c480ff35b0493b55df141 -0x76aca01bec294ad04a8905bc3e44e4e73666771d3bad70fc606d231349628df4 -0xb240f60a9b7378d2bc35ef536ea4c82d998e80483147d389819474818e36a2a7 -0xb889494c7a6382648a54ba7cbcef9b222c107cb71f46daccddde9aa9c1c40b60 -0x74ab35f95f60a23bf619c89e213135ea69731db621becf52d1549d3d9749673e -0x1618df141446e58b2d7f0639191ebb401ae71bd1afe77375a20e6d80614e8b61 -0xa5f096c819c6a27700b6fd2fd61f8ab4c395a8077c0bc4fa681bed0cf5e9fd29 -0x677d6b1f4e69dfd7e4d7e8a4e423f160a22baffc8cb5afc0aca67e3b557eb846 -0xa65a9c33168cf33113d3c6852a704e4253b8a3bf7785433bf72508a8c921a647 -0xa2cf2cd09aa4f2383f31f2900584aca8a2c3bbfde9b07be627f58a23009c72fb -0x693f371ad49e018063a605fe44a581ce3c72b2d78e614a0461ab187ef14c3884 -0x71bfd3fb78486295cd0f17509e395c82d46836366cad334b4d4d83227a9da625 -0x19295245c81c25299e06b4186912a2bc0b11e7ef8ad6dff1b3afd48a8601b1af -0xdd8a05909c3ec0d065da766a6d9d75ee2518c2d9702c1536d5bda0b098eef64e -0x038a2d132cfb63d2b7289290c38bcb59898453069ca21367fef544ea5e583e28 -0x76b740915a3f31514a23f2357b5d32e66f2fee12767bba1fb8a8a5e24fb5d7dc -0xaaf4d83d946a186e9d1e754605a034c70421ad7e77f398f33b1994a4daa5eed7 -0x01ffdbe16128cb5d374b785c5f80bc57cf6ff4fe06f907ab44e1720a2f992326 -0x4a4e4e7fda4db778d1d543064e7dc78d908c3d3e139773b0c3e62b8384f71fd9 -0xee6d509f6ef2a8575aaed06141cd36ebc3750539922d0bbfc46b27202dd31223 -0xfd5578e0b44a4fe64f5a6b977b995c5c61e4852c032aaa8a8a12efe0d713e959 -0xf311a869141a1fc6a2ef451d52ca0251a4238d0f87a19572984c72b1e8508af0 -0x49acefb13d739ea4e15c2501b1517d1aadacfc5208631875381d4abdc213fb96 -0xccec0049766c59f57a5b41abaf10effd18576521c2c93cae98ea4dc7e1b099c9 -0x8a65cc2ca87f8120c11f7c99a3a8440ce6f15325c5a958191bd438bf3e867266 -0xeccc8bbadfe35012cf348cf5c56d98f1e887db04e1df3bd5e2b79123bd26a804 -0x63c991344421b8a552705906732fc09a54d34a4779027afc08922a08a603e172 -0x504580a8b939a13c6a237a4d5c0023ef088e1ac93343141ae8d6a4c48e3665bd -0x44aba78ce5285d0dba19d8b8e8ce58d130c925eb86d5d08ef4a034b586f1f235 -0x7db0778e264c3294a3b88a57f7607566c7533823390a612364bcb74009d3d2d7 -0x323fa062e1bbe6248248ea4c55d410fc2524c31de0df4da639f13ea76ddbf998 -0x6ef20f01c41ccf57eebf2da9c030e958183aa7a210663d99a5a2a4f22ada7802 -0x670daee50cf0f351b35c243ae11e78dcec658b8bbfe7ab2ef5148dfa093ea0cc -0x6d6cc68752544118c91580409bef81381e81d1ef6c337e852276e623dbb44f7d -0x8ec39433e7b2ad6dc8c3dcb20b73d081c0b005f5b2fb5dfaf2c188966ec4e495 -0xec35c679cc56b6fe5749b4a07530c22578169a8a2adcc09cff78e820fc5dbc93 -0xd9f25a90919be61ef21c264c11a4bab151f476e222f15342331add025982c8d4 -0xa3bb4014856f38159f3dc036790c32f631a9429053e684ee57b17ba86954ac1a -0x1893dcb6009978525b439b47367d6f5ff9f6ab675b82b781fa9a31cf9b17b60b -0xd245bf2a2c979a6c924060398f9670995246fb619b01d24bbab38fe57d31f9fb -0xd14c1c4e583dc10b69e1aa98871dc532bc8267714f15c43530d0f1648ae347bb -0x4a85cf8393ee2dbd23df1da5109b7dd14591d686748b97b3898e20ccc67bd5db -0xbb42556f083b767dadeba4329df62dfe6bf78620f38705a0b64c46caee9859d1 -0xec756ee86ecc4de76242b216d73d05dbe48782d11c671f4a921e730d8d87035f -0xa98cbcda899ed0bbe0d1a9c58b8b394764b00006d9a089c9a0447e271f4a8f33 -0xf21b2fc56698f9c5d569dd5279dc20f0350274be3d3bd165c2e7809f62c38ed4 -0x61ce4ec23dd1276771a17a9bc6014f92cbc08a4e455bf495288992d88339fa9f -0x89a63fa72da4f4b16a1bd0e19b5dcc5880726736c7997f3469853041afdab722 -0x6bae9ea71a78e3c9bcfe8b037866b1af9cc8f0c175ffdd93e95afcdb94bfdefb -0x87fcc03e20894425efccc19e0affd7234b7e70c8561c52dc29b921fb1d61196e -0xb91a4b8f6200f0540c35f0d233932d9b32e24c5baf4d810492a98f60a64a62b1 -0xabd75dfef10b8c0dff9fc950c0ec2187e67caffcae951637674b78e74aee9ec9 -0x7833b77a8de957c4f39e8604f57b607658e0d2f0d21c7b57dc9614ba0eaeb98c -0x664c01ec0e3abcc4d2cefd57573e9be807f54bd166d1dfaec3cd011d45bf2ec0 -0x7e4915756207de245653bdf66c58ea058773814e497a639457f6b68f949d43e7 -0x6443c1f57b04bb823eeebb513774551f049a9cc35c7c831f17924da68f34dad3 -0x9faaad226cae9f640544b46eee7a83918c176c65b48e01b8d59da96d2e1c579d -0xd8093b29eca7660727b662b8c72fabb9e21bae7bec1fc112e95fb55f8694c831 -0x460256884c43408684f5c30e5a33c3ef88c13ec7e27da48cd625dddf40c8cfbd -0x65edd0d6b35557911c42194d2b47aeb737cd4477392c6b384fe07a21bbe3d12d -0xb0174da4909659df4ba8e285df01ac627d3020996dd50a8ee9c05b7fa67a76f8 -0x622de424a5567f755689848d2ed02ad7600c25fa5feda5a874d888463c9a617e -0x6787a8d8872bc8c8f80ac98294bfe492ea5598beb338b9503864d6cca146a66c -0xc4c3e7578fd7b6fa0f48f02108226d010da9135cd65a5c9a3086623ca618a49c -0x58dbddd93a1013fe8b7f68a99c99c07f57ad287cd2686a9186742951a09ab489 -0x791b9181e687e7749cdd1dc3c8750f7e52ff90aa557d7936dd733574fd0d9296 -0x4ab1ca7bf6eeb22b4d92ffd512b632911b7b9c445d803198a1cecb6f4399cf74 -0x6b65d07e4970866fc4be32b4543d11414bc87c4feb9893e82956cfe1d7c6183e -0x15054b639dc59442aad19359f0e29d1ff27154da8e7742bd6e66a83a719a47a3 -0x3f2a2add9fb8cc946bd4c24061fbac904ea9f16376f7ffff56f155cd4bad8468 -0xf8bf7a465e676c1ff2e8be38f8df040421898e207e082da1e5a296d021245aad -0x17885aa48afc67925d977acf0a71ef409a278540766fc8659284be0444f6338f -0xd4e4bfde51a71a3dd5aad923e2d9b635a3d0aaa9d7d6712e1514f9a7463f3425 -0x39edd6bb9cb9f8ad591b31f4ee32f83a91db973907cec7a17398e5f35e05cefb -0xff71df1f1a802ad82c54341b444387a2bd90317c09868cd3e48ece21958ede29 -0xbfbdb6dcf341219fa1926d6bbfbf9c64cbf99e481991e87065356198399ad2e8 -0x6a076ec52a6318867c903a5c8640041b3371782c1eca4a6887fc49e3229be575 -0x948b3c3bd971e15dd250a9ea89037ff8813cbb930e54ee03f641544a98eff3a4 -0x522545df03790cde623ddc02fd5579439346409509ba671e54687b4f05028b97 -0x1cf43960929b6999f9cd35c5dd56eac04ed8ffed24422c2a000b8d5ab4947af7 -0xbd0d56ba88a2e8f9adfc42f24f659c7269cfb0979ab6019260477951fcd5bc11 -0xe66e75c07b79abe040b60a016884701799708a064ac15561e70de61dc914e00d -0xaa49c634d19165a08ddfb6fdf8fbaa5d34b58e6c9743fb68e3eb3615e5a473fe -0x432381255c1d96e96e8bf5d13edc5a8f641b4a17010355a31656b7a5e3d4091c -0xac61a97be263422fc9eccb2a0b784e3e6b93141c637be0891fe9bfb8def0b420 -0x7b5fc8b59e397dc14c26bfc958b37dc748f908ace93c24b5951fc96e62dbeffe -0x6d1c3e0fa9c8594c727bf90a6e34192776e84749f6995e7dd458bebc50273c4f -0xa64e558da68b6effec471f999064b8edbaa91849962ac9ddbb002bac25d2ab00 -0x9bcdd312284af2b0d0349072cba3b6a4e9b095c028dd3e2b25429542a4ff1a3a -0x26547569f7a6491bc794f634bad64bff85e0d0831a5fcc958a68f17c99b404d2 -0x78b53384a0b129848687cd917de604319cdbc90930aabef0fd7755f0a8b46e9f -0xac6d0e6b5ff033c038ebd9a791678be68a4eaecf569d1d323e0cc99d8b66c700 -0x0e34a7a617f45ada37940ca5213329a089e60481e217ffc341f26921f0c602e6 -0x835100506ef16065dd41f0f86fb65be37c3b061b227ebd287dca2b764ec425c0 -0x6857e5d58ab4cf8b758bb4a84c028c07d3a4487013f57b0c057932a7448b34e6 -0x3343fced6fff35340a03b5920f7ab7ebe9b2680d823092ffb5143a1c66ebecb7 -0x3aaff9490faf50d1d5c949cc0d971f8b8926a3b39e73208a9f5ab8878e2bbe60 -0xf246732e1195471083ab3c0b361d97fcffa9f2d15bd05b18b2a6fcabc5992a34 -0x4a7261f4cd7a10bacfe2fcd771780853f44ab1533765d961b96d41f1407ac837 -0xb676cc5573f89e65a9a15ebf0be17ac5bde3d04991f75e770c64f43c0fca153b -0x0b70b7fb3728050fc3de70b5efd856339736cf5b8f4bbd85ee039e779ade75aa -0xdeb33a5396df79b27d2ef001da2f8025bed4b768e5b4f87d34859ebd252e8880 -0xcf452391ca9048c54d7684b9ff13d14928831101fec58c1a1d756e97ef737afc -0xa6d6db8ddd61b8822aba0d10f044bad3376bdb8ff8adc343d9d5d8528eb33040 -0x6c3668cb6a776c6d660d44fad1228fdb981c20fb3f40f6c510c108a348b09d2c -0xc1e05a0803c3608317b666760fb389c0649cd46709ee12e11b14971eee5e0a79 -0x8e91a04dde43544a15433eb1ffcd068eebeaac2517904aa49d25d977daaa5c7a -0x8a4e594c92ef0f70f7a62751163fd6abbaa1c24045be37ac90ac9f1cb7a81dab -0xe23fbc851596aec0d35d19a06e2ebbcc38ef90baad5e03725388d0feb1f3f19d -0x1ecc1c20b9a470f141ef9ccab487d0d05eea0581e7fc94f6b4060d728d7e33e1 -0x229d695b9ad939e605d5743281aead067cc9bd89a4ac1467113b68c6a1423ad9 -0xb404445533a8cb363113ca64700c4e6a8c6d91aab4a09c9c769d7f0d0964b1b7 -0x095f41bec69c30414aecd3164c5f54de9438e27d66e62b3d8b6fc959f21d328d -0x707a9ed680dd367b8e8c689e22d5ee2af5b6120a6947a5bb1d46473a7a67fd81 -0x6a509a167745a0e12fcba4a2eee61acbfea783f0e133bdfe6c5b451026a8c1e7 -0xb2d168e4ff9783fedaf9bdc4b06a543cbcb455164219f38583f6d2f84eba91e2 -0xa4e4e3a8d347e46af99872ca457b2a42574bccb5c14459233e1e19045f114a64 -0x2ffda6cdf0edf2987feede1382ec679099ac994d835b068a8d3fe5f18fbecd2d -0xfae45e1130f285fdae65f7618f238dfc5a9477490a83948082f6b700857f08e7 -0x2e882955768ebd9f4ec152217369b741f86461d75f1fd4002c361dcef19352f5 -0x6f13f6b2de8f9c9b0f7ad4d57accba72aeb1f5fac9bc1a216434a7560188c1a7 -0xd0470b03c5772c049a1943808cdb5b689b9c664e5b40591639e32f9ac8046665 -0x635a21b7adca0b572d642ffd3158db544d4678cb235f2c996c2a4bc3f764e6a4 -0xbefb6491e82562f146e926c7f125a134c348072bcafdbf7181b25eaf90d1e8f5 -0x52b10a3ffd55371f0fc9c930363cc4bf5c1fea1a137e1d009622dfa538b36302 -0xa6ad5c18b646a783eecb4eb0a0315f7b39861a68be8bce465c133f1c6ef17672 -0xf4b4048d128069479d88adfc8a766ce9b776fe81c891065deebb32e5153ccff5 -0x4a5f950bab3299eb6ace8ee3f392587f20f6084e12d2e6ea1b19d6969b69d0ff -0x1cfc126fb0bc569a3aa37aad9642f37a3dea72966e08fa3e17af4879378a35b4 -0x564c11b458db1612947c1725e696f4a26e7918a508ae048975edffc79065459d -0x95860426444993b58161c2883bae07bdb2261752fee2d2622af6b13740613d14 -0x89fe81bbf45eeaf27bae889685012be4eb8eeea8e077a7278694a2a1c5aeb866 -0xe5349045c1cccff028a604ae05e0843d7cbc5db8db785485ad0d729247291f07 -0x22f206cb8bb85dbf875453fb6a2d9b4ff2cf05a484811ac7fc745ffd733f2769 -0x66ff503a8e304ff0ef3647de5c8503f0ff5607ce845571aafff002579222559b -0xc9a20b068f658fa8e2c678e8d199d9d928b0b89b4df66e4f44a687ec8f36064e -0x00c7cb69f981da0d42a921b5f9012fdc01e970ffbf1c9d60e51891e254806061 -0xa652e0aa1d53c64f3cb3515b0b9aa1fd8eff08bca95058f5e1d846ca2ac04fe7 -0x04aa37e48126879bbc0027f048fb092461cbb482ef593ad3d259d691aa221132 -0xdd073e8343a3038095ee4e074a5afcb1623dd752261688007af935680bde3369 -0x6fe5e06526a812d0d8948600ef897bcd07e818ba62987c8676cd9c4846fadb89 -0x5754616b5cd0bcfdc5a692edffe01d2c082498b8414789877f4d839430dcbb30 -0x271d68d4fc67637bcd4362ff65dde3ef7ec15892587ad634f70603afd6e185d3 -0xda2077d9ea06ccedbc2ad59abbc00d3c5324d573dda391af48abcd237f66338c -0x516caf64bf0998f5e608f09c93dcaf44a8ef15a09fa59ba93d69e79bf049b8f3 -0x4f8c22a1fc0c0d957a1fe60a25c98adcf6350ab9c1830cbdb38372bad83ba219 -0x21e8c017bdbffa1034134b49cfe4b83af18cd9e987c55eaaf7bf63511e33f41c -0xe1d8b429cb22142c501d1bf479bf283e0e8c7f11d96407efbb23dcdaeeef4819 -0xbacc4bafcb37367b24bb5df154f9a84fe8c696eff915371abfcd9cf3e98a6d9c -0x0ca5838fcc684a8b31d82028d5237e46b9bbc01b1799d1f8934dfb259bb8a898 -0x2595503e2a381ab45b1fe7372941316ff00ced68f3c2464a499e636d19c1abe8 -0x740f5cd72fa393b3fb2d7a77c066f24b7d26f34d6e63f0c18450399782bc6240 -0x5bb57dde5f0e2a4178c84b7c44b6528514c8ed0945de09a2f23591135ffc71be -0xac37cc960e31933c814d8a67cf23771e55bb78747eae13e27b32c81473f853b5 -0x9029420b21dd1c85a153ca76b3e05e0d81b42dbfa9bad561cb7f4e64a1642c0f -0xb0a40da9e9c03942f77c5540a63dc1e41c7de733227a61118848caa5b9f384e3 -0xf0b271f279bbc582b6c7307967e3d299161ae6420ea79b09ab8b090a1967af1d -0x8d8a46deb0798525975b82b84c093a779a4411d04cea823bfac9ec353a240cec -0x550b8d766ef2ce0180c1673a2fc85eba5e533ef56985ee6f93681ed118ab62dc -0xdd732d789de27f1ee210676db1ea7df8ee75ae7b55a46d324f70492a91880204 -0xcc45f7a6e3f7cc5083767fec1b9162b42ab14c48b9ee786ce6102f57a02e1dc0 -0xb5124d36b8c7823273a13db15fc6622dad350685ea023db3f5fd8172e8865f22 -0xfa647a013a948cb48e1568d4c5f1317f1109aa390c7c75b32ed8d1451aaedccd -0x49ae9ed00cf3d3835c80add7b536ed74479f5b34110d9db7cccf784815a9c0d7 -0x3aa5f6d5f9c4d6842848eecc7266ffabb5e239dca93d5ce175031d24f14477a3 -0xb041b5bcdd1cc1c1bde9f7d5eee529d695d1ad4c5d7423be0542780302a51451 -0x6c6149cf2e894c939567b151420b400c31109cc3b91237df87c2e2192df8c9f8 -0xe2b26af0845b7ec5ad929b3d0035df09e7ea2e94a816ff8f4b5939e72de0f922 -0xa30864d8a6a3f5d14a0374ff348b0001ff5b2336cb1df99986d3fe781db9fb55 -0x179f82fdd72a00906931197433b15b9402b338b2aa2d1588c29293cac465a606 -0xd0a24f8f29b39e6749ca76051c663a9fd6794d96ae244d4ca438d62c1eb36a84 -0xa43458d7202e8ac0b67997c57424570fe8bd1b62f15d05bfe69a6c02c65ba0e3 -0x8b50e6017853a98fbb21c09a6bb730af7274a1fd87140facaac498a4176a5880 -0x5ca7c0b8133a102144bc4994f424f14099b0293fd8e9135c67bf505fe179e71e -0xf44bbe95fd821e1974f7af74a7695f614e135d13da34582f65057c7dd2d1e679 -0xf65441c9dd8ea1b5ad41e71b33d975b817fa4f45e94330f7eb492d2bf35bfb99 -0x5678d23bff2fe2fd33a324eed90bd9ed119279d0da20091d5589614910be0d12 -0x79ea6fcb787791a249a09aa465c3a1a85c4096615dfd530d433bacdc12a5b75e -0x47aaacd3779d4b3a5cfa5f1e0c1da2b74ca2a7a50e026915cabb77666c760f13 -0x2ee965561f2bfc479e309206f4381069deb04164e47c33971bcd9460cde33e7c -0x136df88dc944cbe46396ff7dcf83cbaa9df95ff83befcceebadf36961133103c -0x673051ec829526248e8175169943cdea75ee32ed02d0c760df302a8a015943b1 -0x43c81046762f4235bb01da36c00fee842776e6ed4e8d4487a6ab3ece385efc23 -0xf9cce788fef63f45f146596812db4e75b7870d6d7e7be394b95bdf67654a9e0f -0xdd1a74e7139473b32ccb3b24eefc8cb059feafbb6decb109634c8f8f914b9c67 -0x367591a8cc94e7266737f6993624f438e4c0d009fa344474c79239a005c86087 -0xe88f9e9495fd99b7e34f637d8652de9e971a43e540d0f72b89599e62ab82e3af -0x8fdb954ad4cd9d0cd18dbe64164a89e8cb5d7e2d32ef9e1056bc2f07600bd7b2 -0x1269fdcc80137a74d77e3b7258e5a05f453ef267f2f90e97ca2b4d138788d55e -0x8d68b5eecf6abb3489b0ab95904189001c4c054276e1a2ee4d4b3bc495a23dd0 -0x5ae00eb53331272e82d29da66815816c7a26060d5a32076e4f83bea2021df1ea -0xd525a5e21b6fe5bd348ea506a3e0723bdd6bfa9ed7f1a61c6c0eb5d7f249774c -0xc8ab1a8646a3c9f2ab2ada90bcd05b90e91a1d027077741bdc855b7519d42fc8 -0xb44043f811de16cc0114f68bd33a0ee6ece0681a5b983fed1a0763b93fe3070e -0xa6235b94bdf5d5631c4186e908d1bfe6c88581bfb2d3b8162dc3ef61d92aaf63 -0x3b562478440e7cdc922ad69fdde57940760ab0755c91f89c0022003447e6e8a3 -0xcfbe61949f098f027ac8112b7778a1af396f20057a8cd433dde97a7e0b85fd8e -0x5252cc91b49d7b955624b15fa39749bc1647d1263507dd6c8f8f952679a3d246 -0x185fd163a1355c5e32a55674c7875b9deafc40f4aa448556ff5f2f384503c518 -0x9db5dfa918c4947d277645fe270d9e0f16051781c659bcf033db3285b22ff93e -0x06bb3ab9e798c80e7a2ccac566e3ccf353930a0ee2ae84494284cf0712b5fd11 -0xe7de06c482fe978122600035d59202eec102af42d05bebbfe756f5b91588c682 -0x1d95be93ef69911823ec74bb9e39369399d605b641fd3563b7d830ba7129fca2 -0x53bf84706fe96ef5510905548fdb1fcf98cc611dd7e4b5e2bc2f0741c571df4d -0xcf27b2969e5377a53dcf696cea010fabc430ccc37de0d061da2f9bb274b8874e -0x4f0786f24979dc5236b4e81c9ea755b5e104dcdead0825b2df950f1a1c373f07 -0x0a1ac7c068acd0e7b72038fe06dd853ad8bdef2fd6cf81891b2971eaf59156c3 -0x386a3f9b9b18f5e1b6dcd918aa8782c9a1a391ac50a5e33a604662ed598edc74 -0x69f8316376698534352767d740096b0ffce72904b720f88e7f51ecf94c837a3a -0xb8568bd6a3dbfcae81a3cd664559f9fec4aa1eb0a7282c91bc11c07d7f74b0f5 -0x8829c8188f929e21b623187460c16f9530d4ddaabdc3339f893d8009aa117d67 -0x05d3922352a6df34cff1b29f0927d6c7a2adb7127a5a933f5932bd3dabd11f83 -0x4330711dbdd09fdc034e5e7dca58f506cf1f5e1d740aa4a15bcaa3395e4b91be -0xcf6afbcaef009e3820a134543c86f07041bf108a96b9c322f5fcd5b2220a9c01 -0xd68ebf0ed32781455ced115fd9347631c46089d27606f87e1c80018e90a4e0e9 -0x31f621fdad80d575af75b3f6c5610bf5b89507c5e96e0c6727229b8701a40709 -0x214ac321994ad287180d961c62abb125954236e95809562ae2b4b818e1f30d4d -0x58a13a4e18cce4c84ee2b3fa489eadd49c295c6080f68f1cdb3afd4fd2164627 -0xde7a9ce458b4bc577d13a070e9428b42db84889e324e931efe0debf21527f38f -0xb63e077b5e23c62c12d0d11155b928198d4ab46b63d23379b1830b4b20e5c879 -0xd6d5f43db2a5b9c00782336a4373afc2ade2d2eecab955c97373e6868e6f340e -0xa5d005320a63c8e1ec239d15cf283938cc0cafc0d3c6f5c15744e587875cddb5 -0xb1215be06bf30fe2b04a3f57db11f4829fa7a46a6d03ca0be5bb87bf19499b40 -0xe7e10ff4c6ba16b1ecb4c32b3d240016d1eb23f0138f63d4ff64eb3e34e96f20 -0x4e3464586e84347f26202f8a7a5be59e976fea6ae4512f8fb1782564ff1ee639 -0x73dd081602593c737a275e93363d69c78c56e1ff54c687fd4fccb95a07be470f -0xff0851e2cda1baf57ed2851c65d59c493125c049c30567ab5f2ac80830214791 -0x0fa53c7493e0d6a939cfc8a12d3d931cb16b635147cc6bf9566bb0e2fd2d7623 -0x62fe97d220e00a79665d2ad8df934a661b3bcc9259c5c6ae773ef0854b7a7c70 -0x001d0b167697889796a67248420b02cd1a2a893cdc10524bf654f565c79e9690 -0x4b3dbf33d38953b57961c5e6e9d6ffbc46802758096606d8fe08de9e6dc09476 -0x4dcc2f22531a4fd5cbb2abace51bcfd5330ca0353275efdb2d7111a3cd099dd9 -0xd142b30de1aab91313fb50869246f95a14e6df308caa18f46ef9b0f08f986132 -0x843b572686b016704df7ef2c4f998f9f7388a94bb74be385c40d5412fe18a7c1 -0x9c590dd13a5ce7307c0d91c83a3157d44602078d4c4a8fdaade6abe6999dd005 -0x4461351a946b76840a6fbf42748dbfbc96b6d98f9ac0f2d7ef8bdd2ca393c4ac -0x1a00760d9420456e46e734667939841df1b1bcb41e99db3c475855d50de93e44 -0xcfec79cf9dcf68d4bf56b64645e57ad0a644c14f08a19046b2a8520ef8bc0640 -0xa965c956575ff26ac15186fef38d5a8a19cd7de0081f6e7de20d7e7b978fa273 -0x187096e69d34dc9345540417da3f16840fb7d171e7c44d1e4b2226193b380d28 -0xc03ece1f567ccdc34a0d146efea6984e42483bf71616d35336bb6b8eaf30a92e -0xd37ee36afa0e5e93f7af5e0ea5383710a5c934cc29169d2ba307889a9ef56233 -0xd1a47dbbbe19c416016144f407111671e2ce4c7f17026a9d8a6d2846dbd33615 -0x30ccd4a50bad37d3c8bf476b94a1e36c33ceebc30396bd38d12409d9865af842 -0x02afc426500210433058638eaf17a6509595aba1f25a1b09113622ace02c72b5 -0x8aac621514f490f6c009c88f171effb922bcb7431d9a7a7de7b78faa81d233c2 -0xdd67e66d515a715ba7ece43a4e9239460e75d81885a210d65e3b408c10cc4d06 -0xc3544d0df6d79f29a6414d89d36bca5f2101d7c4e0ea22fbb87580ce7a9ecd85 -0xadba95b082b3842e949918fe32fe6909ca984ca97aa5468e66a70831fbfefd19 -0x4b87ada78364387b5a9212916193445ed73c7d08cef9cba81e421c0e6fc0c1b1 -0x317f8c5bfeb29053ab4827f917b7bfd92a52a2f4aa9621d46f9db04e8dedfd9b -0xf1ed010d6c60cdfba3091d01305fa7401994ae771c1481e4da5f25f380fb2122 -0xc367f194cbcb357c3d5632023857807413dbffc90561a06e2f75e0d68eafdab5 -0xe10ac4fdd5f6f7525316d58268636d577d2a32fe882be1e37fb2a8c58103ab05 -0x4b1902bb1dd3681086083f8f3eb6c728bd71a698f52360e45d0b917e70ad49a3 -0x470e6976e1d113a2675ec8b3bb8f48f96dbfebe028a7f2ef09cecc7af84f7249 -0xaf9ae2d47d56d2558f948e301535c062c561df549ec37d2cd5072ebe6906d6ed -0xd9aefea97684bcec29e45ebe9ca368eaf71a753199381d47e9a9c9a8a85c1e00 -0x5706da4bb0996c7c933a5185fe3a230fcba677fcb4f5d48e03f2147c32096594 -0xb276f460d06c74a403f90d7c030b97ae7c8eefda77f7590a55d0dec349675395 -0x3db98fe9586eb2ad25b5d7d901ae308a6ac23b722407cfba985b6db030161d20 -0x7e1c01d3c8828c7bdb4f8774d096c27d54e6760fd717f01727718dfdfa878e61 -0xd453ed815c9d19d0a12fef21a9062d7545f7d21688cb30f78ebd3dfd4715cd97 -0x510a4dfb34badad147f6ffa460a02d465d7980e7275d79a9defadd8f5472a3cf -0xb63c9180aadc4f83c661f7301846d790520fe7052f006c8c444bc8c8f7ebe666 -0x3bdd58128a7b6e58c922cab2271bc2939e351d1ff6c7f35533f57e13740f9857 -0xb9a352273cef388a3f65b0e3273f5607b57b8ae97731970b3c544ab2a1f6e1dd -0x19eb1af9c2a8f3e916bf30124825ecc68f95c9bb0fd2073e30827ac219d4042d -0x367a63fa250fc590ee872b4547c58d0b2f3972c15c7286fb7ecbc5957cf42b70 -0x964e6c9e871f93707cd21b271420322ce71128f42216371e1af5f38601a6fc6d -0x735513931ccd768b9f7a9cf2e91b27022d290fcd73e4244cb22266acebef0ff7 -0x6d2fbc1c09bd9d1de26e7e5b4e1943b278cb9a5e83d49411acd360aefa581352 -0x09c6536aa7c9d1c30c5eb9d52c9f7343cfe5a28cc954b066dd3683c328b69111 -0x54c59715ea42f6d7b5724759fc5993faa0f3a0f75d8595bd510cdf8f1ccfac46 -0x48d6967bf036943f912014f3df309d485515b309ddc6dd785c14493be6d83a5c -0xc5d3a7259e94f972b1a06b1f83426ed759f7fe3bddd209c9260f43ac4fd8c1a5 -0x004c7a749ce0901f8c03a1ec5f9b0db7d1b4195081cdd0a3f1284eadcee40a2a -0xe169c165c55a115aabff67567dfab2441db4897e7a8036ca44b4efd2974690d1 -0x76bb8cc96abaf5067f4ef2c8d94a34e26f72074a3f1599e3c0b8decd90c6cb04 -0xb05286dfc419b99a5db50f920bfda26c473935fcaeda8486922047ea400d74bd -0xcef130bf750407e641ef408e7dca72589501524e536de7710e3e436026579921 -0x9ab9fdb87e110f415c1b10a71eaaec9fd220a2d3ea4d9979414d389cc738b118 -0x828e434ef077612d85ad8c30a60d1170962c4201927a119ce0a97c0f08eed718 -0x2689191650585bbd9d7c07b1af6d3237eded28f8b6880c5c301249812afb933a -0xa663607abbaea0c596db8e8eb6b39005c0b2484b65e2f60b391f23d422202cad -0x71a5a7e0f549c3211d721a2826e40e2f65b445308ba4d1e08ad93d1577811a87 -0x8b3170bd732e383236f96b729ba74cb9620cb629300bc70e9d4f88a17212e7df -0xd3008acf2b6a597bba8f66c23e5dea00150b2420d103f67029ef7cb056c20d40 -0x26403ef77642c1c53caf090d81b824899cc7e28f99fa4367ad3490ab161900d6 -0x9fd0288f6c704b324e71568978722cb986f95a99fcb5c550bd65a36e3b2903fa -0x7c51aee8575f5b28a6e663deae7850758be957af71dfa177880061da88187452 -0x08a474b7414ef8a253b766c61c72c111f58cde8118400748484b4ada286461d3 -0x571216c38a32d8fefe6e3f85f6b9d4725ccfece95c5ec7383cb9fa75e84eab2d -0xc548bf58d40c0b3537769f7738daec02511555bbef715614a8b773074ad3e398 -0x07ff9c3afcddd02d85bf64d4a76256a35035baa0618539a88cf74ea6446ae8c6 -0x1f5ef9f1fab5381ba564c86177eae3930794bfe88752c82d43327eb673731700 -0x58602c19769daa6507cc2f04374c804384702a1b18efb316f943cba03d2a0c3b -0x13faffcbc1fe99a8d502e5c21165ef7c80ad7704763072605907dbb956a9f576 -0x8ae128df942f1dba14f7599e7ea1468f3331c88e8a68c7ab43e48879565fd0b1 -0x4abbdd55e20086744dacc2f68b6af7321184a56dab13207067148e7f5f05891e -0x64433c90b4d1940fe485eb9e807a638e6191aeaae24f6c4839de2bcc99aff07d -0x1bb4369167b9b5f2260a7545146fab04cb4540cb7529864bf6a733961545c563 -0x0421bbf129f475721821b623f3623a88a56cf89e35af6323943e004c3ca09c13 -0x2105a5aa260c92ddf378df77c93e85c43f045e97d9a12fc340e69c2030588b5c -0x948397298f67ab5734a2896926cda1232fc32967c59d99f43d824dfedc17e13a -0x83c20a686e75356f845bb15d6fb8446b883b2de8df76ae37a430002148caab26 -0x693097184793f3913900ecd97e0abca694edc3820b6313bc84d28b7cccb551f4 -0xd9cae63905738778b0262f8877c4dcfd1ea623f281925b229208c616329fb56d -0x65be3ab5cf8faa82e615057b166c096bde38f356673029a6a3eb4f6dc8c3d609 -0x5389bbbe18f4dbd756b4a0ba7b9d52a0d3ffea3bdfbb4e8531c9a3128ca3e11b -0xd6cc6ca03ba01910d4908bb347ba0d220752110340727ccf6c48e97446bdbd5e -0x53ce6f2a95db0a33e3fbe6416d8191f502529e325963936ca1166f7c06c4403d -0xd265117379f98d531c6b787d1a6c8d112c541cc873f3248fd2f67edfd8a00aaa -0x2b6186f61fc1e3c9d175aed9abdc27a7fe9fb20ff4924d3117160055689ab721 -0x80b76bf4a48c790631832f3a115770f0fe3a8724bd3aa2036bb0262d1e01d0a2 -0x6ff2a8a2cece00d35d739642bd954ca43ca020b7ee56017b0899e6bcd87f101d -0x7485115136716dab0478423c3f8a9b63b1aec93cec2cf25bb396b708debaade4 -0x6fa64a8892861fc2f5e1de0c6cd908ee47ffcf1827f99f18d87bb10cd1f9e5e7 -0xae14c98b62c2fb1b67d71feac908266982c5044090000836f141d8546f97a67b -0x4e6ac22438c8d6c80edd38673f1effcb8bbe717be1d49e468d03247de57e2032 -0x1fa4cf8bd395c6b5bf3af40cb34af13266af421ddf1c662df69e614fadfdd672 -0x428d7c79f8c44b192c4d5a14d3ae086d60bf1d179e218a3669ba558eb8bcae2d -0xda415b940624668a443e7c1225d5f96551ac5c97439c6c377e99ee6ba6c9b7a9 -0x6401ae2a3d61ea1d6f49bd82709c90b6b6010999d29fae4b0595ea6fe895e6af -0x2daf32e28959d3430c3e9cce8c85d6253c50483706cc3c84ad89f99ae26d5e29 -0xffdd72a0fdcdc6d243df572b5cc713a14b20de303e2b3ebb8cbca7cd622e7eb1 -0x60e3334d08688717af16b9ab0e9e40a4167d2a2e53c67ac2bdf1a49e9bee0185 -0x769c877dc3289ad2a419265f5c837bf72719116358ebf8f7b513cb1e87431068 -0xad7dc550414cf12adb43474aa73b5010b8b7d2d97beea047205edf0f8e2c820c -0x0034ecda50d57977918cee165cc30b482e56c259cc58798640326b388e2dab7b -0xfa1c9288b77ea61df3e437b5b06d31164e4681a6585cab38c649ce71c1fbbc76 -0x9fd9869558c38540da7ed0f807281073e62bd27baf95f7269d9a0307324ee0f8 -0x29da28a89adc1c1ebcedaffc71ad3a4784755f3f8cfd7eb679e6269910e3fb35 -0x0a868d04c98bcb35113113ade997b79409996d328e300ddf7c957d6e5129aede -0xb2c5327d9351911ff5fbc983757a2c483d1eeba3a2d1e346a0a2df70ab6e2f28 -0x5fc0326a2a70200b9886b70e9ce88139c1f9e0992e3568a1e10acde8bc210334 -0x93c1ba35fa62633bb18823f9ed3d7379cba4a6b1ba93242562f741aa49633fa2 -0xd6f35c3923dea4c876d062cd2d7f19a1a5d3daf649ce3dcdc0ebd467f7219162 -0x8381a8c05014cdef1870af14f17197207b965bc2344656a42d6b336a47ac9642 -0x847f1cad118cdb6aed337e92283f5efefa07127c9dd7f5c1f6166863ae032acd -0xfdc009cdf926f2cea3a4441bc874094991ddb1171a220af7165b9cb022410dc4 -0xd9c72ab94cdbfa96e666208837c335abb0e8af467acf0fae30097d37ae009b09 -0x09442ade96e93f278ec4fe8b76030446cb5705386c1ee41105bdc5d6752076d6 -0x652850ec515ff092df901e20b64d7c38b45e233d0ebf40c89ee3ab4b308b64b6 -0x8b6e8afbc375c18f4adb594a834f3267c171f59935ae4d374fb5b579879518e6 -0x073cdb33917e4ea9aa9a7a578b1214235275b5a632c074f8a925a9c417eedbcb -0xf7fc51dbe3cd687747ad91c8f26d78ed7ffe6ed5eb75e830472d15af12e287c9 -0x8632cae43655f074273e6e04cb1c76978dc6ec834c79c3fa703b255b2b0d01b4 -0x172846ce25ef2e7b980f999c323e93a410629249f485270a86df1d70276098a5 -0x09843b6a6bbf2b50b13d8dcc32ba88440ff951c91145904415cc53cc54cac4b1 -0x450ec9e915f9f6b5d80b509ecc83df01b7e8e9406b5300b4ed9358e2d2d76a07 -0xec82eb1b7277ec3d9cbb528a5fc99708e68d9f257d2614e22a8a32f0316f5531 -0x43581045807608242782fb4b1dd9419b85fd0f3dc117c2a1646449caaf6bc5de -0x95c591202fa1b736e8202f68ed31f97a207a8c86ef6a40d43868774302082855 -0xd1ed68b9948e0646a57daba8de63034f1558a6dee15629cd64b002f47590d456 -0xebe9ababf43d540cedbaa3b972580ddb30430c346f13be5ba854d56459ea0119 -0x03eba648daca9ea3150b4a9abc76118763ad65ab2943993d5fcb276fdd717071 -0xd4243a36540a8007baf7adbe603440e3e5830ba14d390838f7fb938ec4bc94ee -0x0de70c5e2523ace9c11b7fd254118c7bd389a7e3ecf5a6bd115446bf1784b514 -0x8c95bc9bf585cf9e0a6abdd114c72af53923f91b39fd3ed7283fd7430c43529a -0x0dd71faf3081abc8af2dc922308bcfd0cbb825cfa838082a5ba744148b12ccbb -0xf3915cfc5f3af3dc5e5d8dd9cd9c90c4e5c59601029312dd5f11e2d71e452430 -0xf86e1d98579997118612393eef697f93a6f0e451085dcecea8ccb519b4055ce5 -0x54cbe90caa21a6640ffc3066d7e463f0e4ba688de941eb2531bde59aabd96410 -0x6ed5d06f5e4fe248d019072ac6a516811a3b7bc2971981e3005b84ac07a32ba8 -0x2b0c9fbc1de480e83fa3665d397a0c1e9aa1f285ea9df99f382288c87b195a61 -0xe6a6af370b51f9224ddcac41d7fcd3048d3355c5857356be53568fc34ad11d7b -0xe9fd2c1485ce9ca59841083f754c1257be5970acee4041ca3551b4058bfacaac -0xb5a01e7e9ef7a64345ce993e0060cbc2d38ec64f29d3e423d5eec9079fa9af37 -0x31bbb01637a2e5fe6abad401d6872c1e3f30e723a15cb9d555d1dc107c77c6f7 -0xd233eea7d9454d531cd599d43d931f550abd82c3732dd22df0cd866b157be685 -0x6ae816296be344532a073732ee412d613fcd161727915794c0944b572fb79d5b -0xc455e1a4f4a7227c9996def5f2abf2bb7c56b00fe8c7fb0d6e1064c6d4e3bb0f -0xbe6afad10cc79fbd61a4445e35449ce433b37a9ba8802c6e3834087daeb758fd -0x1da72e7f28e67bd22142d958fbc738afd2b4ea1c83dd3e348d19c205ae6cc01e -0x771745a06b101b8ee113d500ea8e8157ffd61dadcd92f400e23cfb0ad886e439 -0x991eb1843560c02bd9fcc1f45993120db1f02837bdbf4ba871ff9ef22456d319 -0x0aaa1f10e8cd78fdf20b41e7fc4c9257e857157e897c7c9440a54e1cdd1b287c -0xfa15c75a32352f5d591dbe35810bfc3183f7ace8cd508804da13a510e8ffcef9 -0xbfa485a6504188f2e9e65ca932ad07fb0922195053981aa5adcc629c84ef40dd -0xe2d602d7a36d3f96e7ace6795122c4f6a9bdaafa43e8c53ea27e3ad8b8a2f06d -0x49ad7643b82391a42556e597029d2802bae91c01fd43410dbb45540a808752aa -0x40f073ea980c824dc2b5bbe5ebb69bfbc8ee38e9c2ca434065f4950c69467814 -0x236d618999bf8cc8ce36eb7150af84ce6470a457275f0bc57daac01100edeb5b -0x732260767bd7269cd2c3e9c5939ccf5e8517d0410f762a23e7e2337e6640df83 -0x4d27ad56908bad8ba05ccb4bdc26936f78b313f38783f57b00e21df9ef3256af -0x3e45f90651938b9b8bf3daae69f329e51346abaa047e84ca2eb7888e12cbde8d -0xc4f3c0219b18e9a2bd40d3cf4746fe4dca7588dbdc6624c004cedb6ec6d9a31f -0x506c708c0cf40f3c14f0a9e2b2cf6c0a7e3f6f903a87dc90f4b91c0a7caf72cd -0x3defd049082ee04478319e054d46ad27a20e841572b93cf0d2f0faed20ca9434 -0xa9bee72a12e7b1efed9b2dc738c4f50bff0289e9a58cb84c4cc91f9f8286668a -0xde95c860f29e6299f8eee68fcbcf920356fdbd495fbd349c59123fab90071d2f -0xd87a5319586c422ee7fde00a76ab798c3e12776f5cd557009229d4852db9a041 -0x42e8754e1977587153d6b7bc515abaa7b56a22461e45d2c3d78de881e4a2a790 -0xe0f28f263ca9fc63c62a65b66e2d692da1107f6e28986066f27b9c438e551422 -0x67c706ac8c481afda616a34b5790762f666b4b322a07a0d1afba8c03bb5b5b47 -0x3c2d3f84bd26ed9d9684ad8e87155da08a0af3da509ac05fe0ed30cba610783e -0xc4d53ced37f4790148d9a12cdf8d82c2b65a0df299cb6b3a391af4c18693254c -0x3e6879b283ec7d1402034fa21d692e26d0d7c61a4ce894339963ad95baf479d1 -0xc82dfb321b8cec538633d2ab3d2bb78cd3fd07ab55beae4c46207604adc2db28 -0x5c0e0d0334a338e1aa9510810ab8be376738fa7eecf2ed576029df3a99502200 -0x0417177302d05bb9556c77a1c8f81ed3d2002f561fb840e1af488717252458e2 -0x643212899645a208e0f101bc50c7f121da9eadce2b37f4d6b61bc7029e00f1cd -0x08fd3b0d7e46d2f6e1e4fdaac6755989e41df5be285109f34c9430c1277d2f9e -0x5dabae036220f0aa1a439803cd9e9b1d4562cfd7eebbbee98161f82385837973 -0x03bc82fc732723beffc76b1ee5a6e6a9205beba63a4ee009d612620370f4cef6 -0xac96ebadf488c8d84d98938665d20c041e8f6826b8dc95199557047cdc890491 -0x3cade1e0ff0a3177f45c7da9c04685b8ccf38d0e7b27bf2ef555d205b15dd14a -0xa390a0c527e51ae82bc18f105d681902f279714c4c0f4d87da5bc915496259f4 -0x0b4d4201ddba0d399a2b23e12303331116ec4ca340017ff8940ca5e85f363034 -0x0929f47c8c31002e201435c305d0c65c1ebddc32dc5fdb646e17a4b1d3261345 -0x59bcb5acd853c9977be63a5a74d42d9dc0aae86bd73da3bf1e7426c8d12f3a43 -0x47803c4f5e35c81c55912bf89729cd16c9cf7d67e8854cdd4a9dca0678593806 -0x2cc61f53206c0c5106e0257e1dd41af7871dd2f9900f43f9f473d7bdbb487748 -0xb2b706f90a6a9ea2d2b8acf641c1be7929cbde79f1c00ba87ac208287a819067 -0xc9951d05e837cde7d84b1742c01240708ab75d5e3bef2ab19d7f8ef60ea0b1e6 -0x399526607d569ad4b5a4ac01f50630a218e148e8a692e3d51f756d27ade4f4bd -0x2184da5d05abd1e69f25e6d458d03e901b175af18d33824f99d8b16b7a5ee7d0 -0xc480ddbb26f4fa2bf9f1baeb80ba553ff8221e44e3396769da5705ab5012ef9f -0x1f7258e022719702096c2e67ed0ba3c247d51e18afdd9082ffc3b64e71496a75 -0x73c75cf57824198bf1754a0ca0cd348fe8b414bccc2fc8c30aa89e073228f212 -0xd1dba534c994d9e0d773f9f07f35ba588b176e5c03aa42545cce3dbc9424a318 -0x82ba7f299f353d608a4d7e9f5dc7baf6bc7d7d71ab03e6b24b69b45bcb1569df -0x76f0292f7689db8e22801e8ad32e54977c7ff65ccc72d24db9b59b1ace81d008 -0x6991b92343205accc8aee451d8626b12f0d3761cd9aac5d264828e2b7c1b9b5d -0x133d47acd304a9c6ee346b45a4ef63c85b4a7052b9b9393c7366926e915fdbbc -0x7f1534d497eb08d123198202af69500305517d0cf3370256669ab58a0e419425 -0x5d979622280bf055a8b8d5e8d6ba94d872c2227e6b8f68e3f0cd3d0384f8bc81 -0xd3d66ccb3690fb9654a2a81f1cd997fce6240031edfd4190b52f91e92633e6a5 -0xedc9b0d81b96f58a7b6cc91361863fb2083a4a03d6f39c0fd2498d7698fd9fb9 -0x4daf8b7a51616adbb66b7e1d36955d55d6909ed2d2fb05b26355812f0e644eed -0xe90a6cb225e3d100b1c2b6cb0df34c72dccb98272ec8d44c37f8995ee737ef4e -0xfbc57d9b5f2bf55227300888b2e7f56a0a64c68053162b0e22f9fa24f4d96ca9 -0x274a8bab41a99d05e5a4073a6e97332d325066fb388c7948805a486deeeeefbb -0x0755f43465cd7db4cb838d93721593fd2a22a77e10258e9023dabe504ae34264 -0x45d9fa6b8ef94aa72bbbee7a513549d69b17b69c3154f6258f11920e68973bf5 -0x829afd81b99efe9c0a66f5ea44e49cbeb44025e9d089bb9f29ee17801bfeab53 -0x70c9947155e9de879b38ff4896444b4552adbb2fdcb1bc10279d6014681019de -0x3603b1be1926f366892400323709c8f4f27d45abab4124f35adc500f09c6a3e2 -0x1b2d1795bc288df0f10f0b6b311333bb3e30c04f097fbceebdf302535a21ed77 -0x4f07f46eee9f30d5473b7291c33edcd55cd7566d62a1a6587f19edd3a5417259 -0x686506cc750de94242a01b48370bd220ce0c05f866913cba631d2155224f6b56 -0x19284035c0158f8c0680df6c557991b662f6d0f17246a045111710615625b393 -0x2b5db5fc7f97bee8a1343a00fff67cd0e50b78713ee3e4984f6813e767ae6b6d -0x2e7dd96f48bdd8b9ca3375561f4a7ef1d5cd6804ba4b44ceb4baefb4504357f8 -0x7226561178304f812511db3140c0c72736c5d7dfd34b135bfc1e54f6812bcc95 -0xd812232d606b89d4d015e99872ebb070ef4d6fa1a41bc3aedeaac3a4b10bbda5 -0x14a801fab60e205410e3dfbde1418f763b4f894ef777e79107fd4baa607534cc -0xc05edc2b7d4ae86a73ecc5ad161474ac0a5fed55473255a1a3da9de9af6d8a4f -0x63f58b6aeac2aa791413e0416e1f5f5b91eb05df6d10e9540857a39b717eaf36 -0xd400a29e04f00ef65ac8b9f21a34dd64213170bf40370de3eebf06fcbde036fb -0x84c7f90ee6f2cb0184546035ccf8b41581f8c79a6c656b6248d2309b8d795396 -0x231d589acc2a1b8bf0710b51f14401e2f26715acf8b69d64578d58c9fdb2c327 -0x2051369b68f146334f7bf50a9d84c1567a507f1887010c7e0cb941e2ac3e45a1 -0x573a1c65be7c6bbb020ee5ddbb3506385ff4da8ec6b1d4b6b67383fa841653f0 -0x11760782da40a5554c8ddfdec0c23f236f72094a0b12d0be651718ec7892b5c3 -0xe15729467f543ac3a6a1e5217e3c2410c1cc8eae77092cecf56593a35516dfbc -0x999525189b7f4692978d1df7295e16d2489d433e148372524f8b593d7731644e -0x84d8bad4091edcd6b502954590c100f3343e16a9b2157fe3c9f99f3c2f88f293 -0x74fcec681378376deb24fd64e40eea25ac700b362b07b81777e8386ec34ff169 -0xf1c40d1c10eb2b11fb28c8a9c2a80b69144c96a19f8b9becea98d1084a02948a -0x794a646834b239fcb8bcc5747b20a2dc553a4774bd9a49372b252e83d63d2f6e -0x9e8cf62bcbb25acd7ec51bb28c2026366e6595e02f05967db304a161085a743d -0x02203a2804872f580323cc053c4f73cf2462eeeb02d5efc2ae10ea65d4f95adf -0x454efba509cb7bb8ee4b536a5103bc6932d067d60e8de6e86090fd570bac0a33 -0x3e672275a8773ca8c36014eebf9fb2c6bee4265bc623e3ca83540a003f604ccd -0x720d7bc8b8edcc877b06ef8fd67d741636781aa2b71876a576be557defd8599d -0xeb8830af7f07f0c884705af0d208ce458eb14ecf0fc66e3c116e4faf2e15150b -0x1de9bb8ccae9875702bc9bee9635c00fe092f33e72404e6259d5ea7f0584dd98 -0x653bbd3a1e0e5e962222c27ef7d7758e537834c2255f52c13175edb379dd9777 -0xba0075699a44e2624efc17427d898b4656578dfa7af043b1e88f67dd7891c04b -0x70e586f793f69a1bae3f52c547fa22e7c8104812a137ab44fb256fe54960ed66 -0xdb571dc6f1456a72b3502899ee19df80cae0225bd8e77d5961238e04376c545d -0x8751e2eaf01ae5e6570fabdec49dd1a6b05cbac636a1712ffbe6c4c4204dcafc -0xb9cbf9b3794948bdd94989d506dd97734d6ad517c8a43de13996e40ef8f837f7 -0xecaeab74b47086c8624861fb2e6759b1a4574661f2d695daa120b90b1a38bb5e -0x95b2dc7daaf22303eb62fdf469085fb160c35c7daa949812d0f18da50bf8cb41 -0x2e544d26dc44a4ab664b58e8cea9c93953d3f99bcabbc0a726ea99699fa098a9 -0xe50579bcbb64e610a98d0ca76f87876356684353ea4920dbb5cc3e5f197e0e6c -0xd6b94d46a236898d1f50975f53eab3d92012c10b989b44c547dd7483e412ee0e -0x7788005e9f14078bbb4d28cee396091fd0c3cd7737132cf6ae36d55e648f3eec -0xb96714277e3d78749ef4c52273a666ebd3fd7a360be91363a72eddc72401c9bd -0xddbb2fa1b5ad3a49ef88687b1550be2d69e29b1dac416c6249ae54b518e2a500 -0x6546cdd049de69d151a8bfb42cc98ecb0aa3038052b086a10a7e18f6cfba2230 -0x10acc4586bf5b5fdbafa8c525a8233c97defefe5ec16950d169d5e413c4b4a8a -0x513e481d9b86bb24341aa4606d47c32ba91b9d0f75088c70c0da10d2ec17eb25 -0xf53811112f1196b05663ea68f012ad888f3047bbaba508b3d14b083dbad851c3 -0xbc2aa39c6d07314c6b97a20cb9937798b99fb8975f2c60ff740ce64960a0de36 -0x9b1d21411ac2357dbf1da958b6d802e9b91f3a33a57efbdfa30a59f5bbf4b765 -0xad1d16293b4dd0fc687a21fe753d79e705eec50d34625c67e6dfc399762e9f26 -0x1052a3d20b4e9cf7ad4c8d5345ef67bdc74ea6e999362904021179e94d271826 -0x73dc5712944be9c15d4f255dfa2fcb91d9207fe6a1069b398a719c173c216ca4 -0x488d65733b0e0006356068a7c6401616d9e311f20f60f145b99a5f7f513db9b2 -0xcb7e7bf90b9251f66d63ea0b4faa51a63a7896ef1f8944f633f73035850af0b8 -0xeff60bf365ccf573cd73f19604feb179301e3fedbbb52dbe01a40b1f5f256930 -0x42bbd180bd389a60c65fc5e887c5af4f23c384d80f06782bb2984f897a4dac8f -0xdcd7d4939a88a15b9c6ef19ff5e43c87534dd4cfc83b9e727b0468559872738e -0xa98629d770d76449704233c9c521786de6a96cfd9ffc59918063357c2a253fca -0x53fe4b098bcf1455ff0645d905e0803767c3662388332df7fad12890bca96847 -0x7d1bf9e797f973d1c5111aba8b9f58bde5ab639511191ee0abf4fa8e12b3b0c5 -0x880b3d6b6bf60974af9de888f4aa306b6b4e9b07e2727dd5f2d8809b5f93ca18 -0x86cbb327c2c0cc0edbe94524a6756f27f36b12e20ed8bfa290b0f35c2ce5035c -0xb874ee8b3df0747ae06a5ab01a41258111a3d3c1e63741ddb8cccdbc33534a8c -0x7a844c5d4d8b231e58f7c17601351b6bddf1487e701d4e69e3aa9e4a63294f28 -0x2887d9de227edeb7142ec860dc6f6ec33d21cef8a0e5f00a004bd0e00d61e269 -0x6b9ef02d8c483a44a8c2cbd24aef5e29137ca70c190875cf92f7fc13edc68460 -0xcd128efb3805a87effb1ba9b07c8105b79b28a448cf3f48d971323263741fac7 -0x6746417e8c107aecba67f0b36441e09105da29edacad33e543390450c59d6280 -0xb92e550a64602dfc98bbcd207778c0650971b15f589c3214a4bb9cf379125487 -0x6a59c90cb319a17dfef538654ed9784ff68db2786d39d4a24a4b0307f195e51c -0xfa9cf9c08da58db36161305ee544e9da0a3e4cc9c7c7befa1019cba0cd159396 -0x8d6a3a61cb2fc7fea6300518fbea2e7da4fe66625c7c5f93353c001ba170541b -0x54f58b552d5fe873969e3dca83ceecac08dc895be8e0db6b8acd731b480e6202 -0x4c5f3e2183b94903ebe9fe4fc49e8858de190d5dd3029b0f65593c014c6ad4ec -0x898a3a9c2cd6623c3258037a5d167a94e52561d2d58141117135a725d319f1e5 -0xb543b8cf87f9f3c1134f1914b2d60be01d99dfaca84ea6209e2e1c6de6b04a77 -0x2d0aabd75bc25b88b6e9cfc8bb7f17df1973eaae2350fdfaa658596c3800c947 -0x6e12f23a9b1fe7dad89cb141ad0891376a8f2b887cb809bc9fb5ffac262056e9 -0x93c1a414cccc24e6fe0fc3d8f38b1e5dc02d97e9cb312466f12b7ea08f09e25b -0x186cb0994a61cbb209a5901c02e5c0e3037e262792a86bf636fc29e5380e1971 -0xcecb6de34f141d8d780888bfb362194157c7ae8ae33fc3380ea6ac7fcfe3c5fc -0x4c0b11a78e4642c66f141439293a93b2210ad8db5dff6cfeaf29ebd0a227a841 -0x4d9b2d61bc1163a7353ea5168cbab6048a950653094742f58bf4bee9626e1058 -0x58cf5f32d44729dc003a41e4bcf924321b7ce751a5e2ecf0639ef55353c01997 -0x28f212a17f581233b42fea906b611515c8f2e3ec415545a26999ba5bb123a817 -0x32410375425c5ca31389ba22ef3fc5ed916ee151a8e460ec486546329c6a1f0f -0x4a93355e85f7f0ba2d7a7ec108c6e1703ec3a9a6dee069c4572d12f85fc0aed1 -0xff66884c0758a9a722e927406df15d1086b4c3d06fd939269fe4f8d13d348283 -0xb2058c6923834c39805eeda5caadf6790f3e600e60e75c39693f9c5ecc9d045a -0xc50934c6069fac0137baba5f482d11f2b4e22021f82109baaaa633092ee1cdff -0x991a41cc12ada3e19920ac01863eb88ab7b1abfe71485282c779e50397661c03 -0xe09a21a1885ce35df00e7e3230dd11489afafef3f3bcd74817a027033ee08942 -0x24b8f58349a6308f77c8cbeecf84145b08b08d7fac64fa2bc49688388a989bcf -0xcabd3e8fbf88bb9edbf65a779b227f5f96cb7379eed07a4e7dac9e14755bb5bc -0x17b0f939519601780d37e1669fda26b53f34d39146feb17c772f4d7716bf7f8f -0xd144971ace8d447a8daef6218092197d2944522d3663296b54f5caeec8af61be -0x7b0a6e95e5c228fd01bab0acb6489a0a1ff24ea083f2f130e25fa9966dc4477b -0x04a147f4c9c1ca1c46eb36e52b42f2d837f56794f387eec8ba0169268120ed1d -0x82381c761157c9b67903321122011bae0f78ed4641cfaf348727ee83473ef3f7 -0x6fb071620c0c14aa6f81f7d8c19377c015eecfa78222d5bfe22a154e4a29184a -0xf6fc8ebc1428e84fb8833b5626ddba0ac9c9820611ce2d33920a5f1fdf07ef20 -0x632f9081b42eda414f942b6c6c15c1eb70116c6c61ce05cdc4f9e7b71246aef4 -0x6c1a88de3c9338c944c86b7ecc9cdd551020b367da3b4f433b243751eab65a19 -0x67c1fdb5083e9dde505d7a29582f8a7426c334b2780a97c6c19a7b73aebe43d0 -0x7e509fa650a927c771e2365c65d38609760d66a69dd6b1a8fbc908017a055a4a -0x997f3d809234a9d3cd1791f5ab10b7ffec8197fa3c7b46f059cacd75f5f108e7 -0xae21743ce0cbfb91825112c177b4f87ce537ea73dee60f755da9fd9c739a4246 -0x5d0830681dca8dd3035a7bdd8398dfc8c7e3f4513ca19fb414430f70b124e611 -0x810f8949a798d595c727bce44cbf773ee77ba601cb956154651a0bc1ea95b3c1 -0x9da5b51b249fc5a38a666500824a6648403228930916909991b8fae96cd3fced -0x6a844c8805edda8647274ca68819c1adfa320529db1aa507ce0511683b09a18d -0x2772873c225dd7a7531b12dde03c237889a8ec420893c2656293648f2052b9b9 -0x5be6379b7a139aa49bf9df11b128fc2d8a9dc6f296599d0fe803166f27e98463 -0xb61b770ab2287d060808681c8a1d181e45d1d4e7dca7fbabbcbe73bf87157924 -0x51eddb084cbcdfa38cced71cdca1b8b65f5340151eabf46cd0babefbbf5bf62f -0xe610ffc8337f9e93a1e6724bd398b263040f319f65d92f6e9fd35477284d54f3 -0x9281e6a44360de2fb75f3dbe03ea831b1ede3d9802f62d12e61996999c1e450e -0x027ee4a7bcce26a47366d55493bb54908d5508907c691eeadae2e41058f70319 -0x5ec3679f50cff5e8e3f65fb62d3ea473eca6843b04b982a41e7bc1a8577c7adc -0x5dd2da2b186390680ecf9536f5d8134f407b2a9a7d299d17df222103c0904be8 -0x4f452aa0aebf837cac10f3bb77bd824cc53360f82047533afac2a3e52f3687ee -0xd177250728c32ecb6ac7f248133657640098b99202bb312decc660fe1ec3e60a -0xed7fdc6ba00b4102159ba9127f014b51ee682b9d54293493b0b635df7357a246 -0x6c7e56c0406b96be7eeb44880ec5c25af16ceba8db449151a00809d17376477c -0x5db1f21da72bfc18804016852c6c82c87297b4cf29a901cd455dbd6cde2496e6 -0xd6c3238d31152331f1f00e7080e7c0ae5b964e4a2e1c8bb215d728e46c52b031 -0x16d6f0c94fcfb49097204d7c1bd012685bcadbb7caf360d523875a1b3ebba42a -0xa3205b28c3751f8a0f4a3e4b93046a856c85eeaff9f60ade84efd869ea4bcb4e -0xd3f938f7b6c29774c584e63480167ecff6df6a5a96fd98b8d86e674b1a952f67 -0x3e87c436c6c838416640db327c7c39b1890155461ae9defeb0cefff3d831cda4 -0x6413bc545dfe6281dd5682959a26ae649fff987b278dd6c496a6e9afe6a5599d -0xd1e0c4f2e0f31a70e66ea8797074f901eaab3b45a3c1b482fb2ca19204b20406 -0x42f736ad94528cb03f633c17dd9a13731d7fa41477528da351f4ca6ee2e0b39f -0x71cb0f0e3c6f387ec401e3ae0f876251d6083a1a3c9ae5c37eea644b5595ec3d -0x6081abb27e7cb4bb24d6fef8d4ad6cb8a808964d03796888bf61c8dadafa3d1a -0x7c66d5338614de3fec2ab0d161c0787721ee5008cdef2951f01a92c4cadd8a1a -0xf22e6b4e49295952987d5462bf9d5350c873bec3612ddf2c4c65df4ec02d5f6a -0xb26d20179ea73865581b93e53d1476fb5d039f8d278b5146913906952003c471 -0x948a96b19e39c30ea1ca00d1ee405bcb10b049398234c9b14f9afcdde30c7f77 -0x3adb8356df8e5384ae259814c423941a0fce152016bbbbcb1d29c67de10aee61 -0x6be93c80d1a612f6950b5a26be5b150f455fe1c653f4ab567be4113083bef159 -0xe5d399c269d55fb9b50a7fe7bb1bbc04ec0df273794b969c01997df61f0b2158 -0x1360e7270aa2503d025988feaacbcd748da6203bd599113cc4772a6dc5e20df2 -0xb7cf47cccb4a37d4dbab98473dea23fda591e22118b4ae791f97b3f6a3e76b40 -0x05959c6bf3409f8a537399907e167957b37f25c0d8025e5832487622f88fd4de -0x0ea5364ac841d8a966112a4fb1a225e42e67947f09724371c1fd97ab6f1ccafe -0xf9751cefdc320c87ece7151227fb187fbdde52e8641222d97a51fa59e857e4cb -0x69c35d2b4a5b0fac7bb4bb2d15f14d7d35e4b689bbb7f3dbaf64af1afe5328b4 -0x3171f209d872f19e6116a1f2befa9ede15c6dc05e56eeb86b40a523ac114f25a -0x6006cc01265ff9d7670d96cb31e83cccc814a4918c1673b2029f3d4e50ed85d3 -0xd93c70e051b68b430f7f92e88884a11aa58b90d2f0c3e61bddd05f5bed50040f -0x9680a13fb1f44a9717d10fefed927dbd9d560921fbff89aa0e324e1a0373aa7b -0xeb019c8c97735a82183083386ae6787502e025a08f2d97f9610907c24057ae5b -0x24e78b028aba7919edd1eab51e74e35e421d2a05770f44c361e2f99cbd899542 -0x55e65b552ed252bda70a2e6171aba0c68965fdc4afeb3c3576f43cd5572bd019 -0xacd561ee0f446c4c4d13332a1566fc68841ecfec7726cdd237d70e637a7b6b54 -0xb98adc29fddf8f0b2a6bd315182ec0f9c14be060251c5a7f15bb1de14f1ce3ae -0x30a8f020db4ffcc0c4df181950ff29a12f120f93ec40ed641b6ae6bcb2e6abeb -0xa82e981bc3ff75678c02e1be3bbcf48aed5159ef881f9fb314b0723d7bf94f38 -0xcd04885d66de27d93cf9c475cccd3aa43448d2cde0563b06a62927b4f0c0655d -0x36f258db10e2214ffd4ce7c1791777594eb5f23d5c559ab214f6a24006e59109 -0x5185df682c99306ad1fe986460aee72f588d543b5f8d5fda17fdf36f20eb5320 -0x91a289b8764f98503b48dfcb6092600d45eeaa14b989dadd49f0a43b74ad449f -0x2c9de75456933cdd8aca1409323ce08114dfb06a194ecedbd1df2f02a39dcd45 -0xa6f55e9f8a19b1cb9f4d5bb59af6f49c7899b92f3597f4be52014f7eee7c4fe5 -0xf6cf5e02dd5efc710891918c734274f55855cda77e93e219c30787a15b1cdbcd -0x28956e43f7f545ddfa24a30dd4fc8cf93b71b44ffc972c7026149cc17722b532 -0x606922fda76fc8d4171de4eb67803094b26ca90ee92e3f52bd8cf74c5cb476e2 -0x81c0ead66d250063752a614e1fa2737820804d5b56781f27840a96d74496e969 -0x4765b18e11865259b67bc2b0182a5d41b51938ca87e1a0e96a155a7d6057098e -0x14189825080a12f59644f2b1103c3d8cec56272b7b99f8d99dd86ddcedbc47e2 -0x48272a98bad8dc8182ec92b6045df57dc859ee456725042d2383fa40b475da35 -0xf5dad118cafeeff72f3bb7962cae28df0af2e3f1ce6428ea7f6b6c83d9727ab6 -0x89c2ef7a52af62fc444e373e7d28d8244317f24a315377def1efc53c81aa4dd8 -0x180e5a1718ddee92420f2e1ef3bb3e89e01cd23207dfae21d9419385f5225574 -0x09935d509fb1d00ea980cd462963ca277c4004c324771ca8e0d42ca556de71e8 -0x08a6f5665d74093cb96c48dcf73ccc2dee54610ede46393f777375834d5ed330 -0x6aece91cdc35217f36cbb78241a7962488842c2dc38f4072d78c050fe5135a75 -0x1822148642b80ec0667fe24f6d7cfbe2852ff6ee5b913f5931ff4d5e6857d42b -0x0f71dd6e7882587fbf9a6bb573082d3d844815442efd2afb3e19cf000c4f6ecb -0xe9e013ab2ab30901877d18f045186c39ed897e058405f71cb2d3ebfa75869b73 -0xcf86f3bff33ce898fe1c6ecd11625de292d9249085129ace9e5889e15cb54222 -0x89d8b7b7d53ad02e4cb853acbc485117b32dcd1a17512defc82f4c6243b1f893 -0x0eb2ce66bc14175a6e7f2878818c1499d530b1761a3158267e34d5dea8b4a5a8 -0xc0a5f4cce6fe016a89f0f5953f3dd4b067eb61f01e90b0f541c0d9f4a406a384 -0xafc48add234b64a1c6ebefc3836002fb7036e7ad5a97ce3793a013533739e9c8 -0x8fb7ac90de86b57ebb9e8270f021ffaae8cd06b216868bfee37405faf8e3f3e4 -0x06e60d3af2291669e81efc6001c592b722a926b1b658e03f9713913643be62ab -0xdaa2461651864aa4c34df89b430c1ff2dee247b3625000872ea624f94d0c6bc2 -0xf05aa3967b2216f74d6978edff5c2e04806bc20d6fd273d338d128dd66734634 -0x62a497cf3cc7d9e0b4889e84b7cb1fd10a14f5c491b923638d83985a9915e9ec -0x3ef72f00e2fae2cb38acb677bb06fc8af4227b1a32e0dadb5d679ee16d5944df -0x8e3b98f2d9d907a5c08f2965905c37c196ce1390a44d4c0420401e630fbcf9ac -0x76d93473ac08360fae9ff261bf7e8c2ffdf780e41734fc9a6d2c610cf9e94cf1 -0xe2a596620dbd3bb3580c4925326568e4d799cf6ee2d0a8f2a3683900496fdac6 -0x67704256baafebcb17333225bd4732012ed8337f9e50c3ede8ec9b54f961ca8d -0x3df8a5614b5f51cfdea2ea5b1fb2c2999f96e2ae3163c432d6ed3f66fe6172d0 -0xe4881d09d2e8d794dd550f3c109ce9c8424b265eef1e632a86e8e2fe0f1a6917 -0x2b6af13679550a4f89204f58d6cc7f36a34845002c24361260f3c643f1edbaf9 -0xfbd5da343cd69ded3720db92502ab6e43c2be5955506bcfc9401d258bf67e629 -0xd27b898a5ceaceceadb258fe869470bf2a06d57506621e6fb508c31a0c5c1860 -0x0f7ef354e231d63dc1cb4608e668ccf6b754978d972479292b5bc047892205de -0xa7847f6f6dc30bf2124c86893f4f91354b7e651ca170275495345b2f4d9a7689 -0x0d2dcd3bdbee6eb903a20dc3bb14ec51e78344a3cd728bf1e45a09231a822292 -0x72ea62a39642e2d3218883bf358d67bb05050b0b66727eb8dbd3d26fb665bb8f -0x627a56cbfbdf9cb80cc5b0923e189ef4f39846b7968ea7a7c162b970c85c4401 -0x319c59c298f87cf18101807efbe7f394bfb9967bd0afc13a53018f3f41438b51 -0xdbffd7dc6b805be9790a7ea90e9de25486870a8f9179e0a51e1589a234b41657 -0x0f4b00a6502c4e9d4e586232bc348776bec8bf585320848735443dca07f164ff -0x7eea7756e57e92ec5199537bfb8d86b95b2781c4326649fbceafe933562e213d -0x57082ccb2a34f417d16f0bad938734a626a470439d14aecb5544a4c7bb89cc67 -0xc2ae6f66899a2023b514ac654d67427e47986be949f65866b8c4b86ddb26750c -0x2e7e298397dd06a844869eea267c51f4845cb7a1f6bee252a438e255bc52b00e -0x4ed3186ce0860f9d062749ef0f254d66dec179d7425e0889c341fd65a494b666 -0xa2797740cf66772a7ab5db654a639bff52f25f2d3c1f51c0833acb7a9b42548d -0x147c6eece4ef9fa7c57679e4ca80948b62d07fba91b00822fed74b2538bb0220 -0x078d99a2387517d8bf6ab2fed3dece122f0891a81438c79d179c02a8ef24d7c8 -0xf72906d4dc57f3305f639838f7a85f86f18328541aca5615807d6385cabf1d55 -0x25fa50b9edc6fabf3b3a2428e2008a2ba67f8b62dc9e8d0ae83c9551da2586f8 -0x765ab1aa0546a0d09b11625a58031a7663cdb80d0d80eb8384959407b65097df -0xa928278053fcef23078894242ef32ead4175e0b8e5034a9bf61438930a8928f1 -0x5a7e2022171e2e66b1c70cbf0dbbd9cc8b94e754cc233febd038d468c2c8bdae -0xe8268d6adc5c4cb273c2cde74022c6fc98c79ceeced858e1d3c5e3f4efb2e1bb -0x07272f5022a78187c98b16ab585091f79782d542c5fc9463317d6c22912936ea -0x51a7294bfe2d9ef47930895c77a2741ad10e8ba912fd1e423a3d6bd9f52797c7 -0x021f0bcaf4898dfa3a813b51caca219bcf71c4ccf061051a01b14e24c8d213bf -0x030e373df9fa086f6268c003ec411fa8d74e25e64918289409057e595bc2f0c9 -0xfc61d4a7d44f84b7f2046b057512a396ccde43fa54a7dc2a2104cbddcfc754b4 -0xbb3d42722f6229df860e8a5aa071d4d8aa8bb55bc66ab8183875b72bff9a040b -0x53d965ff2ec51d4793466225a0d5279cfd7336d5835c11e082a4ce0c70552414 -0x3dc5b8c78e30c8726e796ef07e3e278bf36653ef7e48d7b627539e3dd6cbb7af -0x29d10de50dd3debf4040d202fdc23d72c8b9db07b0566d94c9be9373a822aa90 -0x5ede4bc16455641053a35ee7fc0b548477ebd93fe211329e138b1ee093484508 -0x8eddc351528ffad140c34225b46c7d57700f37a8df62025e8983f7e86739c6ac -0xb859b63a7b29a977987023bebe7016c30868345b0fa03b2c1d0533b1fd57fc30 -0x320e60aeffc06f40bf10ebc11776d7c19f6abc6b32c63c76b5beb3da05f40be5 -0xcecfd981e055874bff61b1831a361071fe9182ed41442d5a0de183f4c7540f79 -0xf6a112595f962a3bf806fb21e5106e81f46ad9d6baa92a9ea9157b0ae55eb2a9 -0x092942208ad46834580aba19f3026630c00dfa076e1f4da37e3037b5cc1c8c24 -0x4aa3e6ed842425c5ed7b97d22b8a0a07ba75556f7568ffa8f90e7b1782fa3beb -0x231d7f806c8abc68680ce8c1d4fd65cfbe6ff02a95e9f39af82cad24862efc90 -0x29a67f74d24ecbe05814dc1de098f241041a0345c180e5060783cf31bab32cb1 -0x6e939bf6a58f8dc5c008c7227801ae4149c87e54ec0a9b93ee9cde9f38e86b10 -0xd0c497857114198e0c32b0f8cd426f307821a3b9dc9c86b5441796a392c53e38 -0x976d1e10d0d2b9d5f4d7596fe609461f19adbc7de8bf776f908153bc195f0620 -0xfb909560d7722dded7e6bfe42008a2a9d53c5f7b99e225c4d38f1acd6373f28b -0x5031b819b63c0c7e50b9f6b40c7b1dc5388805268e6801924ead7b319e159821 -0x478373c533b23fbae0a76b9e2780c553352fb9f6e9cb2162cfafd6e7cd9b95e8 -0xf1d01301b4433a1dd618a64ef3a57e0daa7dcf13d52b7ebc5d2872ed7e119d4d -0xc919cb2c7c25f30141146f22e8e72bc26a73fcc0d150502c3ca8e876c2228c96 -0x2e1b346788ae18c1e8656c1ffa0974f9aad006fad249accf35f58abeaa63e16e -0x8323fcb96a188df4e3f51f57f6c4faaa5bff96fb7fb28681fa47101c0bc27620 -0xdb3ef4a0adc04f8926b7505d8658c52279833412bd7a50a30e33ae79636f4d9e -0xc59c9da8bf3a07d32bf2f19da7f874feb56032a1b13dba9a8750683ac3228843 -0x1ca8d94574637d0431deea9ec606b8ab5195700ef1f8f06832cb61f3dd4a0542 -0x2bd6ceceac888b3b4947b5f8a8bb40ac894c2519ca415ada1ff95f08321a0d9b -0x7f51b988783f96a3a7ce77354bb629239958fc85b56c650c2acccfa4cc73ee3c -0xae27c75a5b62eb4592f1a9fd1931026fbbf831877d771a1825f36e0f6f3170b9 -0x78281b7c023af669e9b5c53b52dd0dee3077d4eb0b169fe327c0469a8ff62b80 -0x6c507b0c468469f8868de8deb7cd26ae1d908066f37dd772184a70b5007e9171 -0x58c632e1846bf86d09f584522d9fd2a2420228eacbc19627c80b6c41626a6ed0 -0xa08fa9a3928bebc1b19261867726eb204539ce163d91c7fb3921c1de4977cb7a -0x5261eebeff70454da2403798291f027533a29c033c1e15c5c336730adef64a22 -0x8c590f2ca94219af4d58bb86cce77f60d83765ccf50e1b2133006130391e7a31 -0x762fee61309a253df50a6519ead95772b1f5dd529b6cd17fac467b256a34bac7 -0xd74bf8294232815ed17697035fc49c9d4a1a229c56dac353a8d7b676333e94ca -0xd7cb7300c413e448bd78f5196eafcb6668eb2aba925742aca97ad12702231338 -0x31fe446b4da9e10533badc686b05b2b7076c9114188e3c969fac0b62f633d518 -0xbb964a562eca693c60bc598d1baf39970e69de4c53b52de653089f0d7641b894 -0xcd29878744b3a590bfebbc2efe56fc99f4d4c2e113d04950b11f1a631b431873 -0x92efc7c412baea68533362ed178bc012acf31f243ff797a9763cca99ecdbf08b -0x4467c939cdce929365b6075b40d3771ae2e59239ef6fb59167480ab5098ff170 -0x5cc0f01689d7628484928abb3599aba339c1a0d934ce841d98cd0df6ddc9866a -0xee8e95e3ac03afacf35ab85d8db6dbbed9f213e986c57722c63ebc4a6592c297 -0xa3ac166097765e52f49733439e90c4b40c269d849fb1531328a0b85fc50e3981 -0x938d25d9189ba1d51d9f892667b161a34bb92a30cf7d55c60f24c78f80a654d5 -0x90b1825427998d84c519c58467cb6e794f9535d11136f328544b175df2f9d015 -0xebb7d2f74aa293d515e132cbea910680d14a280d909c58a847dd529ed118e8d6 -0x5f318d52fbbe6f9a30a86d5127021f759a077b8f22895b1d967d2db7a91c378a -0x96d12bf9d7cd76e1b5ba5cdb81b15f50462dbadb4f6d83a50adf78ef650193df -0x0d8f5da87903451391b5921aaccbe5c0502ea02b1d29885d9a76c37536aac616 -0x81d01e7e76fe08a1faf5b227a93c8226faf774ef8c4c3de2c66873f3c7a69a8f -0x0c9913ac637da2d8e4fee8af35432f0ece73b98be0abc8625ead1838e73f6bf2 -0x2f22a200050043b28410d8bbbb4cc16bd8d1588b24c352538a9f38b349dc268b -0x72b6549d528b5e85b953282b4e76a81a5cb55f3a16abe0113b607ed5052100e6 -0xc1e578a7c747d4baaec0e249292db43a9b3e37b987b798496bb8dd746cfee060 -0xed033e7c268ceae2ef881a8fb8e302b96d795b1801928e56da19d99c88577161 -0x6a3153dd358cd3433ba9e05909d113de138e89d1dfcb49ba26688fe6886cd08d -0xd84a1594c8471322fcfa30d6eddba847762fbcb07a11ecca961af9d9fa3342f1 -0x3c3d72bd81ee304c58217d980b6576f9a78fd3f03ff4ee21883c3c84b182b050 -0x22327f1b675df6bcb2b6276204d3cb0fb4ace841bf6058292003b6e308326dad -0xc57a16ce2a0ca577aa0e783892e111b262796286d02dfa0ddd21165e40b1c169 -0xab14f2918d207f3df1e9be1694a85e94fd83e8906477a42ff5960be99a8460de -0x0e797d7f10a3c91b80d439ff2317ec33647c24728fc9019a91508247d7fd1dfc -0x82f5f33d0a1b8e3ecedbef0b10fc5e8318cbd151f5e53846038d1681daab0856 -0x48c60a0dd0c8e5fff568b3a8ab9f0570cbb5497818a6ae414478b3dea2800502 -0xfdf5f6423501cc621f884db17ad0181d6f5b8af3c836e8f0848603a9c8be8fa7 -0x3ba6a91f49da3d43d0b2599d6b25508ea68a2b030af29840c960cca53a26cdc7 -0x5ac73b066f065148cae8e23f90e6521f6daf09a72daff937b73d236d2f9e4f0f -0x570fd0e02cf01cd75b7baa19d3669f94cbc19a2f0fec80c651024e6d7d48e61a -0x591b977c94435cd54d9e1d89b7f465b75e2f1aba35a38f66bef21a845d70c862 -0x7d42752c10c55adac3acaa01653f57cca4e53998916896c4072f5c2eecdd8c63 -0x37aa17e81ea0d7c4cf478796b5d769e63651c0be4fe9300b7893fa6bab527154 -0xf87436f8c5b4da8934c67a05aed9f4cc94f02ebf527b396d33fcda358493dc04 -0xb882125d105d141199cf84b5405c51ee0fd87f7c32fb29a0ce075f0243bf69c3 -0xbec409e398574fd3e642aa52a74eb9668c23a43a05c5cb6a4481e226ca5e285c -0xc9e2ca38983167c3f724c4cf0cecf95a879dfbf47bab31f5a252b98364caf57c -0xcada8bc778bb50406244e693f6d65d93951c5148800ada940c29cff838616bb8 -0xb981f3d218afc605706a304ac2c3257604136f53cb5bc890b46777f6bca54ab8 -0x7c5495a952539a0261871e6ebe904cac402d664f491d9c1a99a118049181dd13 -0xf39d693717a74d7ea3c3b091a98f9ec8c724ce51ec0e0fb4fb329b6287727592 -0xf06d85e00773989467ad8f3dc956ddbdd016f93b0f30fe02ad8ccbc7102935d5 -0x557e882092c241421bc36bce7266a38641f4f96f4e29118f64aab1d15f4c3624 -0xc7eaf79813cd6148166ba14a602d04a2d32b21f1a55198fccd762dccc2db960a -0xffbdb601aa16ce7c4c071119d6d50e6edbfde0ac0f2f59fcb8ac427c9a97b539 -0x6b54bc114b4619d383d2f33c026d8f6ef3eb49f4c93acdfe6b93bb310d666385 -0xe7fedc65e75c391f5d5a7405ae109d39c9ac2256b6ab65c8bf98e9a8ad4241b6 -0x4d1265f5bf6310e1dd187f2060ce667d8dc08c58591660f91a337b570dad6ad6 -0xbe573cdb8680b922dc15e274cfa14bc306c64fc7416d5bcc6e03432e69a48ec7 -0x399517e4bfe35db5441d574a7e71ee542398fd422783264fde3a9703421c1249 -0x36d4e96fe5933ba561f47dc41e747e6a6d2c4b2912163d133f4d3e94affd6adc -0x151840533ce326a61bb2f014c126f98ed8c30ae2c5536d87664c5fc95dff3793 -0xb1c33f04c5ec3b0cb1b814c553db80c35cec695d4d8e602cea3efc01ebc2873c -0x647a45d8c321f566013160f3ea3f0798e327b4ec506c087d76c04ddb2f284b64 -0xaa0111387dbff10fba044480bd22efe3c047f3c2d32268480c277b9c6c4e83f5 -0x8980eea5c2ec31d19fb144a694d545ec90fcf8817106292b601dcfae7853d2fd -0x8308b5f89cdbc536e4eed7db945b355c2c54b43ae869ae997682dad58b420540 -0x3524fce58b8b037b36d03ae473e3ab2ab2211c3b916a4cc09bd3b7fd7b0bbfb3 -0xb61b0ea385d3e912fa22e065a73395a55a3cd2680c7066cafeecb5d4ac6289d1 -0xee0b2a5b20b69e200f33bcdad06ae22b793fa4c9a2195cc6483dd4c874b6e604 -0x51c1f3c837cf816cdcd257f4b61865c2a11f68cbc7beb8c7013f6b1e3b74076d -0x1fa26b8db2359e88bc0f2d0b3e87d6e41fdda8e059ef35dd9768772679fb82b6 -0x3f4d2f1df63ccd0a2aaead1ffe596f58d17d8fa4bf3defa681753ba00cc94f55 -0x304af1c5a3b3b34c919f5d69ce74915731b08659fecd6d432f2f54fd520dad0e -0x52a52a437012b875aadca330efcf8ddb3ade3086dd04301c2d9df44fcd4e10b9 -0x0dccc14b46f24f9e390e81dfa94bbef792a7cada39d686279e1cb458d9a60c5e -0xe468f2b643b7a8b7fa0782ef15bf6ced2ce6f39caf939a2c82f2ac365310611a -0x616234d442e3dc4a191643c00bf14fea02cf17bbe3dfe89e2c899e1ac977474b -0x88e3df0c68763b75606f4727325e6f7fd6c09a50167c3fc06ae978a103d6f9b3 -0x23518baee2f74e2f2e87e72234f252a37ba71a3e123db55b394d8ba18c73b57a -0x3ed5643a586e63f54902a550dfd89855ea52039a63c3479833723b338ab4faec -0x0be9bf38bde52fda754e1a6aba69e38b84b474786c517fe2c730759d4ed17395 -0xcefa8a19e2b6c191b06fc16a1e9b83acae30096f17817c14b51b01d5163c9c92 -0xc7c9d7447665269708fbb6f5be98d9182f04a5d52f1e801bdce7fad140801460 -0x01f1491e5f46ffb90665c6c72b2a06818319dbb281f910cfd66f3889b561872f -0x3e581c4da1a3761cb8918b84134df41fe2df47a5361c4bb66785043decf1f97f -0x9c29929953a7ed083cce61a2aa55df87554e866b4b37ced3d5a52abffb3cac97 -0x596ad0020cc49dfa761d0e17e2ba65ae9db9cfc210f2939a8fd7ccf97a00c579 -0x971071a27185bdca0cf7695e4193538fe2fa3a6208bde6f44af0d8d13d2b91e9 -0x88ad2f91e8b51c1b949c66ea0bab3245d30c9149be96f16f368732d0a25a02ef -0x0f1688321473dafd0cf82b8b23dc394c49b1814bc9fd39dc8fafdf8225b99985 -0x4c082129f3da8056465f8a29277fe2cf82028b7d666ef0f09efe8a3329c6ab5e -0xe664a083b735b3502a3cf0b65dfeab7584de74c74bfbcadb7be84681615c6628 -0x8ef404c66d74c83aeb8e97a59ce6ab8caee52462d066dd4840d8fd399f5d9773 -0x9235b99f3dbd393925d87dd0c4623966ee6f28e3df3b4c0e59d78cdb5805ac2f -0xd658596bcaa921aa314f60ded64a25b2ae76a552e3edba8372d31a14653c3cc7 -0x4b4ebcea340d5a5fe2114ab4edcd946b175c73fb648987e0868097cf668e13fa -0x8f417c002bc05af9aa07270c76b46e3d4ef3c143d1ed1430a479816ba75bd4cb -0xe90ea85e0f178ad4b8c276dc31ed037ae2b13881e062d73b9ac5e2a8dd1e0db6 -0xda8564c87179de86a905dc83b3b92949910c006b1fb12e0b07f416c3bff6a31b -0x1eb03d1bf47d000483afc679e5560034027d35d054a9803c65e0ad84fe6a6d68 -0xa6cb4995ed62bc43dbb3d46462663bb9747c79b6daa92295cbaecedfa097aa43 -0xebe48330993b6ec7361b46bba8a6c00977eb8c3393977cad07ac7ac95f6676f9 -0xae4c90e2add9fcc8327341a85032804571768906d8562a61236dce6fd7f4e541 -0x88e62c205c771a956693c1841e6ca9b255739fb7f3a976bd294f06a9c0e95b0c -0x390f84d30fc480b5b4a4129a2b89829557a9ec51636bf8a2a423eb8beb776d41 -0x849425f7b160bf41cceebfb3f79ab9671ad0e30c7b4f1da0f8dc630eaf0e5775 -0x3c6aa08e127e02bff11f57e00a64f491f9d84e55b90f5a6e6109457bcde0d7ab -0x38543302517f4d6a61355b03cbc8f592a07e9bd967ffbd1906fa8aee27c36f6d -0xafb645b4bf723cc4340034e8bb350ec6b40e3532741a58ce5ad424c1efc6fbe6 -0x069299cd884b516a3cfc5163c6884d39eac626fb05877ee6a42d300bea50eee7 -0xe35c1897e81f5e6092d074db240a64357446ccf55c86e5167e5bf9a2460b955b -0x139d350fbcaf37b37fe675c4e04a2a9ae23c5d0901f53fcd63c621833ba248dc -0xc81a57062a74573822b56a89e02bbb867d1dbd49613d40c88ccb87837a1d68cd -0x73125d6e9ea201df090f03f618bd7fb9bdb04d69a11e9cc585f1bf4438994cc1 -0x45a256ba390f312541dd1c6492c031302f90cb2b90533559c76a6385b49e5bf7 -0x5bfc9b5355c8ebde388cdad34202c4fabb331edf1f73c3d43894bbb368d5a80b -0xb17000e331bdf37b885677a302239631da476627fec38f9cbbdb5c2a89ccdddc -0xc1e04ebf258c8c35b351e819d2e1b3f8bc6c42e3eacecf5a3b761e9a63aeedd1 -0xf1486e11f9bca21cb9c8fee20a7f7c5fc5168bda09e185fb68e81e68c528b59d -0x5f3ec0c0cbfd59b9ddf4eecbffa6798cdbe825a4b32db626525b8fc3d6242594 -0x0dc802aab13b084e624276bb6053992c8e7e8e368d2f0c2999f465d238b797f5 -0x8f2a7f344e273d88fd1925baa88a805fce1e1c5c955fd93396d7db0b48f5f90e -0x10c1d3e303c46405d11a7853bd08e247d3a862b3debce32b289ac86405e21e1e -0x1352acf4497b0827c2c2915ee8300785295ed391a8a54d5279ee069c3b55efad -0x32e5d2dd35711264bbdbf5d4f06503e1a21af5335daf44e48d63690eaed8d977 -0x804f6e7ab734427bd35ccf0ebca1c95a9576096e81767774bd16eebf10f6bb53 -0xa573a4c31ea574423f82536a0cca6bf3898f466023e51cbbde0188c6046a0cfd -0xb13ebe162b67dd48293267cc1677002d6cafc06efeb9486384e1bd9c6af0b2e6 -0x516ad8b6522fa6e9caf6d743e56e61a163b3b995665a42b0472ea35f1afa038b -0x6a5f3d520b9213aa374f1541f10668cf1f3ea054e17d52afa6aa0c3fd60f18fd -0x625090e8e0ed31881a384fb694bf65f4e4f5b55701b346de4078d07b0c3b3fe7 -0x2ec3c4168ab7001ce849e3f431d407b3057d3161bf8c0c92c024742a4689808b -0x5a6dc3fae6f1ddbd2f8afe4796c32d767bef7de3067be24fda1fd7ad0a5cb9b2 -0x2f7e0a58ff64c734e71da8dd05788bd37941d5a123f7c7d7975f39a1fe350396 -0x654ae1cd7bbfb2167c325b3d87569522dcbaf868043f0d0b69f3d74fb601a070 -0xc3d1d8c9210d394f7fec4c564cc9eb4ff1b8cb232866914fd8b6bbaf136e8c4e -0xbcfd130e4cbf21b1878b2a5b986705cdb8b90a89cc70671084a5c3ea0c439f95 -0x08846693c82b7ee85ff0833071427f730ba20928f3399e82ac7292fc28e4997a -0x12d1ccb554116e1bdf6d04dfb925cfec3972b73171a73a2ff0a0f99244276697 -0xb3a5a8febaf43637451f4f69c7cb534288f738a1629fbe55857b933efb5728b0 -0x933b89fe076ee766c96a80c82333c148452219b2f07d65611ca0a254c4cae357 -0xc31a09b636ad7ededc7f92c124949d6cef7d031804ea385f8ee49c37e823722b -0x5dc8cd7e7ffe5b6f35fbde598fb1c5937da04d5cc837f71327e6272d0886bd86 -0x778d68871ea84276aefd910189552f2c79b17e38c7ca75392449d5d7b90aa2f5 -0x194d5c979959d36c377fe70aa4b027dcf2ab91e366bff69b47dc80ca541ea83f -0x60d665a09895591226334a63780b7a4da66f081c7edeadff1417a9ee229642bf -0xd5c4aafa4b36d12e2daa5c652cc6c5f2f0ecb75f04195ec9fd3b1f8a8affa87b -0x7219acba4b32cbdf6ad78ad1300a6e09c0a9c8f7876edd8d82def3cf95efe236 -0xbcc86e36765732d82f05a84addf329cf906f91b72c561d76c1be8d8ac48273e4 -0xf4f422ea329ee0fe9156cf7469d704196b283d872961b7ec1eea48f96341d6fa -0xf4c29197e7ebac2ecf3ce5bbba7e2f52f20836845deed1b6a705f74905fda6e0 -0xe31f773f2750a9b0c24debe3c0291aa09454a60645de709c63df5dba346a044e -0x0890ccbdab6836d833e39c7724ba1e4104d1fb012b5338d97f071107340ad7fb -0x9a424eea529076eb540e79e070b9d7ec9ee306c5af5501f8a81f757ee36352f0 -0x4134911a1a1b91530e76ad50603835fd851f50d86548ee9efa7e11db92e2bea4 -0xd2bd89484cfb6b23f84dfe7ce2060a3b431c187ed63d5734c62e8b9ff35570d7 -0x70a88d4799cfaec117be66b00a6a0db0918af2ab5527bb8d7392ce19a762abbe -0xbaf778dc7ff12e54a1065ab81ad6582577187a857448c89741292be0f36be98e -0x40b9c6e95afda6f938beda39d5832a038fef59cae0bdd52180d60c5f67a33d93 -0x58f0b7e5268f60960875e633693f2f7dd6c4435731174f564206c17f8169688e -0x9acd87082888793a31284823584268df5dbe23a219e6fc865f67f11ba3e8db8f -0x9274b07053019e6593b98d478e7cf1480b6694838bebbe3a53ad09e9ff3608c2 -0x5d4fac827ac9b7aabcb446ee4a1db364b81e37b24e412ef9a58261dd103f5f17 -0xc3226ec68df2f312738f40b0169bcaff6b2280253cfdd7d74d58f6ba79538901 -0xce96d2cbff069bd0a097c4c642b436c9071ac38c7420afa6e188cd536b0fdfc8 -0x178b38c1c8ebe61ea9832d3f77084cd5f75c2ad57067f4c6c811be3e2e5f37b2 -0xe73a207d8f24e1b9c732a716bf5c1b210b14190b92d7be3e0fdfbe3a311764ab -0x76b0d6ac6d8a6c4fd21411d7d8aec9f7443c0e396886f035de4b0a0ea4bccbba -0x0d331196ee7a36b5dc9edae12da484ffc3abc2654509e8736b099c19d3b04670 -0x84f68d58e4324b9f77584486074f53c47dd0c7e688b670e0e2b41cc3263b4547 -0xcad9427eafd12bcd6bbdfd4e37a134ca5b7f5f84b89e59be897df26bef8b577d -0xc31e53e7928efc46ea4c51c50cc406a61bdb3cdcda00a98ff831e3b4b567315a -0x26941de4891654417898e9589997337e9eab2520d5336a206585b323c9677f5e -0x6de943bab467934c789ae8375e665d343748e720ad6f28a5fd136f6805119adf -0xdbd3ca764b096c6613cab2426eb587b36b7092a1daa7bb7c64bd5044573cb229 -0x3e02296b29e9ff1f6195d7330fb7058904a7e69b5ec9d4744508794f67862bae -0x3301110f33cc122d156ede24d11a1081585ba2016aca3c1390b3cb39ddb3079b -0x64885be8bac6b54f0bd6d4e378adc1e41babaeb43e951f88d7d89df484197795 -0x9d4e9a92dd1e6fcfbd43435d87144989a728a94ed77d71960a54c0afd1f4c282 -0x58d991f05fdea936924e7315403eaa0d8bb3801eadd515ba4221b1d521214a99 -0x9fac6b131e3c8969e96f2f3a69b920b7c0fffb21bddbdb47b9ce6eee7fc781ab -0x6d12d56f307bf8c68fb5f5b8e13e414783adce5a74eeb121fb99da506da375cf -0x9df05b8f8bced990c1c2e97bf1cdc1ce0bfa0bfa5fd0824760a483d9632950f7 -0xd93b003b5624d5ba96751ce3ef6200e08b9c252a786518bf1da9b5f68282ec5e -0x07f016f3abe2ba73a7c3021e8c93786e006f019a5ac6c393433e3a2687226603 -0x533fc721b51d0a1c47edf156c7c00db9823ef92461f8ca6bbea03cb1ad1babe4 -0x4df37c4a84bf37880fc655be44c22b645bf2ffbb6aa2111b4875a2d1cb45685c -0xdcebf9ef0884dcad74167a81323e562dcf8914919311ef0096b44a3459a5acd4 -0xa57797f4ddd2aec52dc28533d951c7a7b95f43c2f5ae06c5aa2429cadd379c78 -0x4ea596d39c18385a9c0c2b44649070cbf884106b37afb50dde99c8677e9c441f -0x070d05048d9f011ffa4a1cdaa57dae40851c5e7479b5e3b505bf9e5eab4c4ea0 -0x0f80bae19436674c948e067a0992300a5a2377ef00fb692bc7ec6ba9918a4fd2 -0x4c9d2e39f7e6995a070b26fad3602876f283d1c201e48009fec649e2b5c873d1 -0x2cfbf650a408406c4115f8f72e77945f9b0b2386af28bcd0764fe39dc6973e64 -0x5b032c8b80dc859c7370ee3e07fc66f8a7325c3705d907f3021b52f4ad2d10e0 -0xcd68f7a84421ac7bca542811e963eaeca13c106136f4cd49bd90903d6760e3c9 -0xe29363e5f5d6eb7410b670bccfd6627f77cf34903a0e902b5e6184d82047abd0 -0xca56b61b87c8b9f7fc92428fd67f15b7bc8b62fdbe53cd4a2fa520fb5edc6f13 -0x3010b952577036c57c7078825bd74898ecc2a3261dc863bf7d8becc476cae90e -0xb6777182eb55403f5dcfb007e8b2c03f10db91740ab158980dd6211a92f7adbd -0x234c235818b8b764a3a761a2c49943c151d54f0ad2e940fd081d09f07e8abdc7 -0xf335af803fa25f5d94ce0488f1bd28b19e1bff7822c7212c317f59971a9387a1 -0x87a3354e9c8c68ff6784b1704a128e654547dcae4068da9fe5e97daf14f79918 -0x11ca638356b8a68f5926cab25fc239bef9dc7b8ced36e88d1300e2219dce8ba5 -0xfcd72e81c44d2eb14f1010fbbd2d9a70e184f5f392378b2c15d0ad8e741ebb2e -0x5a133d836692e37b10dc146b919d871559f0183688c965440010db04459a0468 -0x49b01bf2abd29896c28fff3829309b9ab33b870dd42de31f888bad0e12d1ff93 -0xfaa58ca07108264923731d4f32139541fd14c0022ec12db281b00cd36478985f -0xbed99436215ee9e603fa34201676b0d705ae414bab96d7086fce50315066f914 -0x6ab5924e5d8afdef8d23460e7893aaa3ffe0d6f65fd76989c8e24692cb283704 -0x425066f6e3f85d28b8fc55796dba6cbe6b4e3df532d689428259935c3fddd807 -0x9952925d790f7fa1084d6665d3b79185aa48efb2dc323790775d78474e9f78cd -0x4ab94a9f442daa616157766ab6d06650d11e88ddcc1b02bad388e5e49df13eb2 -0xd86531cc036855972dc3028dd6e20d423f60dfe579a46b9c62ebec384ed3d894 -0x447d2670e8879b85bc1942bf8410f466b9de0049301d9853957efb47af7588f5 -0x55f037ad7ccb9d7961a0c58ec39e984317c0e7c7ecd06458589e3f43afb7cd8d -0x6f51039acc58214ff9c0a6fd728fd65cac049e6d5377e5a12bceb76387fd8fc8 -0xc8e6d6f784000ff660222a4b3e75b3a10da186a4e3ff4e8d701d193427e937c7 -0x56e95f420b91c2bc42f60a35e8d1e8566533ac8747df7fe2d8973cd64baf50cc -0xf326af74c22e43904d75283b3e492037345fea511a90f3c9c56e5b0fc41bc946 -0xb1b99f4075560f398b84daeda39e7b8d72574b597a2a4958d16525592339e98f -0xce6425b0fb402bb11e35d6ad3fcceef90906aa99686d93e43ba0b5a8b8c60d7f -0xce580a6b3e5a4159a23d4f3c7d4de2d24d79bfbaf9ba97852b90f9bd53189bd5 -0xd2fd67ba15340b6d72590a2b5ca4875c19be66e000d43d14b5632f60c6686149 -0x0b57268c55ae30c57d8b0bec690cd30592bb8ab36a9b4a20e9ee4d3a8d7012bc -0x9715e5a59e898fc8f0454ea0a45a007171457a80a2c1c7e523fa69e8ee2bc777 -0x15d8f974eece35b897165f4370961e657cac15f906fb8fef981723fe79409166 -0xcbd06e5051efd7d7f6af9421f28f430d769c0cee5ee63ab8f46ff99cc7878e2f -0x16798777991485965cd80f98a707bad4a8adcbbd71504b4b0c79cc8bf44427a6 -0xb4fce4e782f500418d5d8f1dac558a954cb4bede2aba7e1a03d2d173e445d863 -0x4913227503bd47a52fc613e68a96961456b366db1443170409e0569308c7efb7 -0x3c3b8aadd3b3e92b5cfd9f946f4ace6c81425f52c121f528a567d71ad2ec5f09 -0x638cd835fea3697fb1b13cb240f7606dd4e9fa37b0b7c3d8e2484846f89dac08 -0xf7ae8b19761076d845fb6001a012c3ad9a1cf3b2fd62b367772a2b53385ede0e -0x822f0e166d4f66a68b90828effa3dcd7180a7d1841640e63e49e7cd02b216000 -0x32f6a76e6c1c25fb6941f4e4fe3b03dcd2cc3c573d521ecca044f82d1c807935 -0xe06ed297c7bb2c6bc1efca9f74d1da93ee7f158078648b7b56bd45347e3df9f3 -0x84d980c754be4f2ceb8959cfb308cc4ef6da67447be38cbf09c3c23f7b1e3b5a -0x3caf463c0bfcb631da6864bd47bb19352509e9e2d567842068fd0564f176f8be -0x0072d09a4354796dfe845a8760d3dcdcb40c0a32affa4c0e29f601a0cb80ce5f -0xc016f303bb3dc26f0d3d54d13e184ef460784b48c2d49d46e7a6e195b0e3de05 -0x30095de1beea95cb6e9ea5358b168592f3c8739bed84179731598a77306a21a7 -0x26cb41d7647c7e0871a0d8c2cbe62cc4242ce710ff93ccf88094864529095955 -0x9edeeb78efce80ae616ea9c70d2c0156af603e56d8bc8b10661439e1ed917ae9 -0xbf7515849f9092a7bec64b9ee774687eaa4fb8c1ae4c6133b567a09e87466226 -0xd449fc68756beef78aeee8c8954fe34d99100e55c32377cc72894d3fb3a3c6e2 -0xb3035723b530ab6ac33eb601dafa1bb0802c76a1c1cdc5401cebc6c12053bb9b -0xf3012c7578cd86cdac3d2bf01f85cdabe2b97ab5a548af2e4819d1f69cc637e2 -0xeddda675c73e5420badde20058e78bfa28ce10f4c3066a8f668e2df62fef9e0d -0x8d3da6d912078c56524cf93d041095719e64ff5a07393cff25a8184c090f1969 -0x5ec7cf4788bca7016d4b1ebae8a46488bdc088c7eda64566e17f1c103d31a5e4 -0xb6c87ab14c03c382319b1e22097c3dfb69a95d1405c0bd6cdb7f334f4e9e9399 -0xb15ce6028a1fd35b252b94392b08d16c0f54197afc254e2c1f2c7f755b772a2f -0xce4b44232530a58ad1aa4c9231dcb8a32ad5df6798ad80cc447fe9d7a38b59ae -0x32aaacb7c60a71fc822e822d973584ade853cf0df462b3198f8fccbe4a7bbe32 -0x7b8d05c690d815df625ac489b4b717e796df76512511517482cbd4f16a6c6560 -0xa1d5d0a9da47d265d24c8cc1347f2f80dfb5c42dc904465c0d2f9c7821f26b5d -0x2642d675c2b5c828ba446b5eabe96af6af326827d567ee8b7893db55e4e5b989 -0xd124ccbaeaf57ab04c9f5cba66a4bc92c821c44f0ca319ea49565611f69f7cfa -0xfe42b124fcda504a47acf58bb38d2d05a5409be20745e4f851e829754d571732 -0x0a4953498d7f4e002ab941ab7078069f185cf96fa019b3aa063c77fb6d97e8ec -0x0651b342dfa86a10a8b2f144bcb82bbbf390b7b7d38d159c6697454c0c5aaad2 -0x284f1597b818f58ea1dae0e960c8134a9063cc07568ba26c2ba56532b632f23c -0x5dccf3c4b727d59de2209fc34a242fc089b3ed24df8f4950dfc761f667ede9e4 -0x5ee47343815771f152d2c8b0fc63bf8663cbb52d0b5d0432bc6892f591817bf5 -0x6c3516e336f79b646b07eb42cba9e06ad6220e55ba0f7a7f4116f5dd677bbadf -0x309a7a160426d774275a8b24288efd08eb0f1c2c4a0a50c2828c11d9f10f921a -0xf15b7dc63dcd93db8e4248b97c2933310e270e9cb34cbb4f785fea0493141b38 -0x4324dbd49352597cd16962aa8ff5c0d750ec3a6ff283ecc15b1efea493febad1 -0x26a91b57e4939cb867a2a62b804b7a782ea6914bc1c1c4bacdb8233bf0684aa9 -0x7f53c88e9073355d3cf4d88b50fdabad05220b85ecad732d63b18ac1a2e6a0a3 -0x40dfae9bfec143b8c77e0d08e7cf47c5ff76e75af0f771c0592832e8386e5785 -0xa88c21ef95fa25100c6825360046b4ac7b8f47fab62a4ef4a82551a21a8377ea -0xab6925cd9a671bd5129c820372f60dd6e6358392daefee1a08b6ae9eddff24b6 -0x687586f6cd44617cbb7f49acd2a08e015c84bf6ea0d4f53ac246e7e9a142f01d -0x216ed1fd604d0d3b603278e09485ba733227e6495d2491ebe416ee2a19832f59 -0xcb7ae45d4f1cb140e8e4a1e6bc668b7c4a7cc36472c9030b0833d65fd0597d9a -0xb98bf2aaf419aaf2570a22d2475550509672d0496b727d8258fea3ae76668a1d -0xdfae76b2f0f7b4cad6c4c24249330203c5bac8eb38d2f2520e5d1e8ac555f2ab -0xfded25a751e4d9231add8b5b6cd9d9e70aab5c073c77f25692aa2425d7629297 -0x5330705e39441c219508ede4b64a851d636e5aead98029e729768dc70f3e92fd -0x338b1ef23c235753022e1db97148c11e90d494d8555d76a9e29410977d9a52ba -0xa1b4e1123a9f3c1f445754fdd905b49d224a1763348b8c113fe30d1902bbacbb -0x529c8c1e2d187b09a4df16c10dc27aa699ce9c5f8be82b1dfe07384b0adbfc9a -0x25222ea3a851c840c701e9b294b223f37911452455b29dedea8f4f2f5e656926 -0x1435a54fc92811d20f439916c360d1f5d4f22617135d33dc0968ac9ec05e4143 -0x1446da47307a52599ee8a43aa9a6e519f930f881a3d8ac318e2420b7bbb8e6e1 -0xa4d11d0699da7101673540475a4b2b292eed80bf5181bfd540eaac2698da3e0b -0xc2ef988242b4324655041ed0404248c5e6a63118c33a73db294bf02461f0bddc -0xc610064c8e23b58f6119e15e71d8e2b118263b5982b209bb70309e6522b7f23e -0x2558eb9b62f6a928fc95c39867ed03ece070ff047170977f87b15b46f7b1a7dc -0xd97ff7635a88be37a9fe39356764edefd8708732fb32281e96681dc64027b88a -0xbc3484fb66ae8ba360847c1d5eca60e022c2b95caafe9250dff45d84055b6123 -0xef2ffcb77fd93c2f3541dd37d06368a7cfe14c4bc26469fde9afb92f720a1f90 -0x87b675474105f99747ed0ca8b621ce4e491a894b60eb905fc2899100531dab25 -0xf5d5e7418ea5ddef285d6f7ccc4ff433b6ff2f174cd5143381c66834160b70f5 -0xe84fb73c7ca37a2732cdbf196c712e19f2ab4768f57c320432cc16e881fd6107 -0xc7ca24f2858eabe4b95240ff628b42ca4b7a682fe9ea45779f6d1cbb99e09f18 -0xa2f66c5096126fba0a1223a4ee9c5bc298f8313cff4a222ec9fe73aba2bda217 -0x3910257b849b37d50222780517f4ef3b8d1fd301c9aa80f5a1a7f9b42ca038d1 -0x3f35e235787381b096421ccc50ced55e23940b7d2768a78b4acbd2119255e2a9 -0xd526beeb13a11a22004a6333d48b678325f419ad556c46e0baff4aa46457cb50 -0x7c378e52918bf087a021d32791fa2350dbb664fccec4538dfcaeed7f50346853 -0x6644f91e529334c78769fba4e8484684ca4b3837d167639ceee0bab04ef85949 -0x4c58dd6ffd62fe23dc4fe2be0753eb6e659d7332a007836d19c217bafa4d2505 -0x06d8bf2aacc23a193c6f01e44fb0db27884d57b409890ccf2f6e51f2813cd6f8 -0xb98a6458283e70825afe411d1b149c07feb1e35417b57bdd4d097558ca8bb852 -0xc9da9efdcb7210cd83e172095857c73f61e915e98880e5a73514dacb8cec94fb -0x24af907e4153aadd4b03c7a6269099553a396f9ba5c99771c591bbf4d29a1758 -0xcd2b2b733a242cb377b95eaff73e4beb3d32ee21ed7af2f2c5af5ee79e4e7ec4 -0xd691f7c54d3992962119a2a3b514e33b73ed731897bbe6312b304e583787c018 -0xa017e734c2aec1a264f5ad05f614796f8307e7f5481eb96edcb71de7659caccd -0xbaea51dd7655c2235422773878c0a350e2bc73d3d2da2521c47940eb89388d2c -0xd6fccdce57c991ce8b3c78a28a5cdd28e06ca7694290f09b393e6df3c4bc2535 -0x27be796ddfd8145ee1117b4916de9a7d5b9f182a4bbf7bc7f0c98ef5fefb3b2b -0x6467cac44b4044b549c6dc1f279003de6bf0280f851ee21c5c1c672de9af88cf -0x89bc24a533d79a4025ee3c4a7b42d4dcc8ebbda472f8be1933f620e7e3b3c4aa -0xeea5bc8d7a90e98fbb7782d70be829ec19bec68d878479e81b4d0095f473a768 -0x27064173862ef69b981cc303d6b5802379deebe93f3cdcd2e9d57ed2b0a6af2f -0x4d45c09b035bf4a54747b50eb43de360cbaa766b185949e9049e922db273d3c5 -0x206cf7c91811f85d494f4673b799bb844af0f19b1416770cfafce813e1d1095b -0xdd4dffb7651701b72db319ba59f0f648567fd8a4f1b94c71967bff84f5b673ac -0x97cd1b2f1e9e4cbab2287d729d4218c17c507c0250d99db7c58e27312da4c030 -0xac8ec8502155e2e3594965af150eaf9544be751d372426f8e8f26a1860ef4aab -0x871ca65b8d07fef5d02352ec36ed47b952f47220398a1a83b53eb7b7807459a9 -0xc09d8eff3c1dc8827e246f162e0e483b760a8f81480cf1bf88acf86c57ba71ec -0xc7ddec9a5fa3c74d2c6fac07b99f9716555baf4ec21e5e40d4ee63b656583866 -0x198300c561f8d95fe53039e7bd11bc06a2c368507892109e21a6aaf24c7e602f -0x45a7e769dcc05e8caea261ca71561ac2cb760a859f91c09384d4a4917a3576eb -0x9055da8f6663bff8d3be4bf4213e3ebd3ae39c04d375813255b1fd598ea4e954 -0x38830de94fb2491953a9af444cedcac51e8fec0084758f15e6f0467c4afac4dd -0x1de8585c4b63a24508198a88a969680d331b90ffcfe95239f56a335e33345fc9 -0x99945bca541e0ac0580e6ab4e34f293548cff7af665d190d17f564fc1905bec3 -0x73897eea8991aefbbcb2709169e0971a1331ef354ac1d145d7d9da81c1309be8 -0x3b2d772e4c30c462533aa6ce9d958988647ce6a3452d4fe82143dda1f49c5a05 -0x4e9dcb7b3f38f8c5cc1cb9739974f8660788985820f7d4f305411aed27cab250 -0x0be10a0763d4f43afad5f87c25c5ae12cf3805df2bcf5f6cf00329675ff5e005 -0x28291376861c5d0e7143dac6d13f7d1ba8ed4b096289a09d6764692a25eae4a6 -0x99cd1b3b57714ec24142bac6a7611160ce0c140b49a8e8d517cb7bc4721da237 -0xb29d298d9d1022b3bb9a74a6e6e4826b277d5c6f5c48dfeb6495a00da876c146 -0x4315e8beb753c027fedd43a7cf3e587178598058ebf56b99d361ca2393ec42bf -0xe28a5bdc56d31d5b8357ab31cb34e0c30babe0226f0f2589738d7fec794b0d55 -0x0ba05f540aace1b0229f54818998732844e602d85fe73178b23c8cf1e1e14691 -0x38fdddf243a396ac14dd81276a79aeed3f88c964ea71f70afd77279df1a7925a -0x57b5117ea020146243bca748ab3ce6005b33f97bc98fcb7c9b651b74591a2917 -0x2a6beb2e17e8ca5f5ff13a581ea777af519037fed3cd971ead91166c998d8019 -0x24c537832fcea2a0748284ac8b2e1a36c8c508c082e081c7acfd1f4c2eaaceed -0x231f3ec2a04adc0c0e821263168a26f3cf2b3af6cdbf50fcafd5b9f571077ad5 -0xbf61f41fa1df2e1efbb72398a1cbde166baad5926264faa0199beb38e3956478 -0x7f55a445a79c00bcfafd15ef992dbb688182043343d1e7b06bdc5d6f2b30a4db -0xfbe28c8bec3cb8beff9bc4a21fb8aff5ce34106503f031ccf378d66b1f1aa8b5 -0xcecbcc38ef6b9508b1a8d4a75ed0b5d352297ae4a2ad8c2eac71c119dd4d6b84 -0xdba8dbbb17bd45d310cb30a9e906a277326c3d78878a447c50aea2462e6b1255 -0x705750a1d4cb3dc4f3700519f24a89bde1aea5e30bc8c711860af872e3e0da1b -0xa75d990b728a2edbe02e5a8d46a9d109657f3246ebdedeb45bd8d12d294810ac -0x2a54538e7d311f1768865850cfc72434d61bf5964fe0a50e2bf00e96f036c23b -0x0739cbc88f5df7574be87d45401ac93d7264abdfe28d0cce29687b3c8a121a45 -0x0612c4c7ddf1ffbc45608748fcbf3fc2eaf9356672c784f95bb457255fbdad61 -0x9e065e5b003205d11ff29fdeddb79604291a8abd24de99c246f4162bc58d78ba -0xbbb7f02c74b80dc678f25ddadcfb91f6ed804b906904cdc6f1f4724d8e9653d4 -0xb5535d8951ada2f5c0655c94572260eb9072b6c92427994bed355e2241acfb7e -0x341a6444b2e945145da76bc7969143cafefcec8f168c425154f135611fe95458 -0x9fb93a20cdeb45d41d04cc22f4c2d9942d80b19f2d79748946d2e25904e7199b -0xadfce85334328745022138b824e96a07f9c005efde1200427c39d906ca34fdaf -0x8275867758008538f2dbfe044c5706ca30bd80088a669967049e9167a36b9759 -0x880b01c5110795ca238f5068afd7fb4a282221f9778038b2e13df80f3ef2c4e5 -0x57ef57849c150ca02591ebe74849a459420f9a67a37d512e0fd7e51a315da710 -0xe304e7dc4eaf2d950c39db52e5da7d21bc5fa6a7f9237894104c8a13e464d241 -0xc6a4815aa2edf5709961dbcbc87f47948a15570f3d17be2f8c94fee557325838 -0x8e55d24ce1c62c6de99fbd4ffeefd17bd9665ee2424cfbb4a4c6b2fd5a45c8c9 -0x9f4bd1b70920b27a3e55d9b7106166af03836afb696604bdd004dba3faae46e0 -0x3f4ccbc612e3811e8c51dc3b0a4cb53d3a49bc824bd3d5a4e68e6f4ee54f1810 -0xc37e48f422e633b9ad57d19a268b58aff09293379458717ee36de41371a6469c -0x7eab33d4fbeca836c7c80d60072051d05277781283d46147f3c3376a2ed746df -0xa6906df082d6abbd15e1846f238975694be118d1430ed58da68e201a3470c837 -0x10822272168820a0a09bc892519d92e7f2fc6b39cd67d9845d36923d02323013 -0x67250eae457daaa5c00847b74f61153aeefbe2c6b95edea63368d29b721cdade -0x710a22821a3d5eec1dc82bc86d2b3265d238c3f01d87ea54818df64a0312fa27 -0x1515e6a0d1b4a6caad1db97777c838168640e7e1a5cb44d077ae890800c55c1c -0xfd01235819234f20bb4ccef8c352d34d0fef712f56cce49be637188de6ea7ce4 -0x0e28fafeae68bf51ac24c29807fc835c63a001819404016ee7bc2bda2fd6c068 -0x4929c3ea8aacfa380769ba80f0daf2128e7ddfeecf4e815b4f49510afdfc0366 -0xe3d02e2cb0ac8d78d39cacbb08e60c3c7f3a4e0d374d12aa527bbb1afe5953a5 -0x53703bb0af621644ab5a7ae12c91f43843cd8439583c0414adf3f7d24f4b7c6f -0xb5491c80aea2b6b4307ad19638f5a34a9a65c3769fe506ee6aa9a52664af3201 -0xe64805d05e8185e3d3e19a82ef29e377cd6ba88bbcd9a6eb599c3485b1907566 -0x305222b58368f6b00ab0a75a778d89319948450c477c6abae96a1155877f8ef7 -0x65e7c7f11ff599493a6acea69231f94ec8e7799f0e8cf52220ea4a620bed908e -0x432b616ccc973c5e44c805815c1b883518bc07f3e3e68d575766134fa652f273 -0xe7ec24feed2dbc52336336d4e07aba410ff69ebaee7511224d3f771ec34a1748 -0xeccfee23686fc24a8a91ca1b4a87c271b68024d606def000c822bae4b1859820 -0x8f01c004f934bfab1ae35ad88f84c98ff8b0f4e0a8fd999f5b634d1fa0729e85 -0x039415da72a1af9e2f4c9dcc0f1833b3183c4b482304086d66a7904fe9b4c726 -0xe1498c49d05a0d6c2095f957400e4e5428dec7b3ef79ff77f50322c901eea4f6 -0x1ae800d1b9a1903912b7e4b27e1857da5ebf98589096d02e4e80e2a8ed36f4e6 -0xc6b4ddbbb4dad48108f2742325c6c44c9cfcfc13cd707ffde12a494d8425c2c5 -0x708e8b20549ffc9d628bdfc4df38ef0cb65b5837d9d534c15dc169ab44085533 -0x8824796872a188fbbea02c9b21b15b9dd3928fa6ef1959a076a5d7225261f811 -0x90c27b3463a89eed92690dfde2c40adf65f31c47cf042ab9ca73b980864fac7b -0x2165386ee2517675d101be1bf2b7553d4f38a93cc3685ab622359e734b050740 -0x68f916b812fd5d8979855b5f19a67f0249358049b2bd4ebacb570f8921256d7d -0x4ccfd04a931d759f991c9c8975d8a2b2bdb21f77801fbdf3759f78a0c35fc9d9 -0x1675eacb097a38ed13c44c19e82a0d10fddcad0c84bc1223f95b4039b471a173 -0x470d72af3cbc314b65e23c617990ac5b5847bac577fcbe7e19ef81ad7af14c5e -0xcc7ff206be5e632a4d2603d21539eebb578c743bdca1d586ba05d477a0af310e -0x9fa4450ed2cb3377821d69cd6649590b1b2646091a7be909b47ce66684c74f6e -0x8a5532c3d518415f2dd2b690593a26153cbbf030879378cf16041d40a0eddcdb -0x15146bea87659ab64087c8850108db1fe42153dd849f2f33fe3e248919cefa16 -0x74d15489ab5d0a95bf02eed7d2e305619cd062d34dd8f52c2ed1dd08e8cb8d65 -0xee631b1ce3205c1fe762959e3f753a034338bb7817fd29f90261c037b08c71c6 -0xc335f9c641b7430db98e385a46f5efe92cb15d9130f52d94ec8f636d35e7b47f -0x6338a14abefb674715d6e0761a7f384a1d96befb9a70165253ff93ef18f518f6 -0x4d16a98b15595587534883c866ef7a0583f1d8952152517fc9888f0a1aea1d42 -0x9135fab5257758384411e581e98a0f511b2716e577010ebe3f8e713cb2f01a34 -0x2185170a229829c4824f9cb4587ee78be4ad63d5d8a10b279e93c5142ff74904 -0xdfced48d841916aefb89cef42d3821fdabb9e544234ca0aa68fd29eda896af3e -0x3b905bcd3ec04f7ddb8ee7d823c2cfb797f7838a83797cac95f8a3a8cc98179d -0x1eef623590e20e9263fb66c5322ed78f53b9ac56412cd86dc249803a74efb9e1 -0x8ad0e4c8242b5b7a5501af929e8c17a76a1a0d056c69392311d96e5baa534445 -0xeb99a1a3637347a3eaa5b1d219fa22413b442dcae8eead728acd13048d88412f -0xeac9222badcce4865ac9557aec55f5fa9291b476a99fa052c55f1f5587fe2d7b -0x44e464486425340689cc5782a04453c47ccfa91b2df9ce917a601ae7f3b5cb03 -0xf4e868d0755246a63bfef5a8ba651428f8cec652e99e6379adf245b0993ed91e -0xbd60f2644fd1eb901aa49b09f7437d66a3f81c32d202f350a9873d965368dbe9 -0xb9d4909998f3626cdf563514883e493ef5c8847a5d0dddc772e688241895b75c -0x91bb4c128fad26073db09393dc2fe6383c6229f13b00f5ef05fcade2a78985be -0x22fe2f48aa1ac9e186eeee917f3cecf6c4d2d0220d1bf4b8b3318c00a0a90a16 -0x9a8d8c9c889d415ee315374b98a22843fa0159442df2341f00c712140c502d5a -0x5658e2d30f5d7301ec15f3b3d38f399b9964f5f3387a0552116f79d20ae7989d -0x1a3df8c3684f8172f97067451128b6adbb883337fdf523d07eda3fb2b7787df0 -0xc176071b8d99f24dc2baa21b461164fea1b0768f8cc3497e0a083bdf9f3c3834 -0x17de392ff27f17a81cb7e17f1862b600656bbd2cf3dfb2af98522475c108865b -0x5427ae7dadbcde5cbe01e8dc10a7ac26ec6a8dcdf204daf238649d74fcd3712a -0x0aea7f63024249c83a96ac2940fc2977f1fad0f68c44c7ebab064d3a0cf2354f -0x834aa925563c9d9c70009d746aff7b8c4e4881ae8092b5403ae53836eb8ca9b1 -0xf5143965f2521ae20919e2f12c0d03e2a69e7b4af103e8942572d865ef343b89 -0x33b062249f562158580bcce36711259b05ed6ffe4c3824af8f6ffacb958fe8b1 -0x627bb413e918c6ead1fbc859019eea8efb989815a438bfa1d8658286d3dfab44 -0xf8c40132bd105249d6590aaea8ef7dc74cdc7bc176b261fa98561c29a29d2e16 -0xc65181b4e832a59fa5da3a4fce947b1652bdbb445237d7e191951a2c0a23108f -0xe6f96ede2e7cd8f26ea6f1c65575aeff986b1330354c092038f5c62af3ce41fb -0xc67b42acf4432e2fbca28e00db93a87df7468b03454a2ce5bf2659d7d03b942c -0x699debcf91389319aaf1c1d38ae0f343c935e9900435c6e4aafdfcadaad04dc7 -0x69e70d8e05cbbeac5960bcbe691dcc2abe213bff5567d79dfa8f93caf20a2988 -0x3ae63e3278c14652d3a008e29e2c543f4e70c7110634ba1f2330c33b22659812 -0x1cd02f350d1b32a30e9fb7e6e46af00ec950324e4179286ecfca9f854b8a9ec9 -0x95d220de594c7b33615050125b7e10226f8b34f67bc932a3511e2904efd881d3 -0xd9291defad801b51dfc11379e8f0271397b2277a89de3d11bd3e4036ad21c150 -0x8aa6559137133a544d42e25ff83c6e60a71380430b59a23857d6b7e8438a9575 -0xbf15f4685a678e3f16e2add87851d6d2a5683084b6f57f6447fa02f201997ae9 -0x20f2222081cefa43b92685146cc2902d4423dc56fa636dd2c9ed92f12e7f0a00 -0xac39e1180aac3dd0f963d00f7b6f9d47b2446aa63ae71216a81ed6b01c9078cf -0x0c4ffc7da5592ad52c1a581fdae1af151fdbb83c3a439700eaacef9c87172364 -0x6170eeadb5af1cc61706a31164ec14518a8ba85e7024fd0cbb91b0831cae3389 -0x84a9bb746a705ee2456b1722a4e6e7df77ac8bd6eadd5fa10a4a911c1e4541f0 -0x029078d78c38aa8fcf32cc0828eb324dccaf078ac77ca756f5a5cdc6c42948ba -0x1ed34ec97632dd24cf557d0c5ac890845f7d0673f0c1f0afb6d29a2802d5f110 -0xdd6009d9ce6c94ea0f93abf72d06262f9f26fdb08b313868026533cf7d85656d -0x8e6a2747db5f64f5b06c2d97dfc8aa9f950d48c52bb2399a4c304b44c881324c -0x65a637daa74f1d56d9b406e0cfa66109aaced5a647cb043afd205e56dee1a6e3 -0xc5bcbd4614d76d0eb19427d5936a429686ce8ee962fc688844673d9e2f3dd3c9 -0x77bfed4414a4cbaba509e2bc856ac8d27c371f516f3914ba932cbd13970aa18c -0x1fb98364ced40e0f80b8b5ea66a2f9466bb0688ecd68652eb2e78beebe766c33 -0xe51ad020d269d16dae4f6d89fff3f936de3c43cccaf49cc9701f195de80af78f -0xf5d555b23c3a755b3cb83f6b2d90eeb7175dc13535e0fa6db4c60d54aa9d4d12 -0xf821f1a6cf5b612db02a97c5e624c14b95ec1394b27643b212b21e4ecf475228 -0xf09d6df9d0f1853df6e4ba3b69b5b897f5036306aca1cb01b85de1156186d22c -0x1c3fdb1e5de3e224642800737b1c98a72b9004b3399a7dea03803e7133723b7b -0x3e3b8ae94310c2706f0815683fca6153de6b4651b49aacb9685e92d4f1ff52ca -0x662d00e2aaf0222e16e7cb3c0602aa91745b2c51f43e97e487a3360f4c66e636 -0x4621becded61c55079db51956faf76770c42d599e83e1fcc3eb497dbc497cf39 -0x438fabcc78c8a7069469b4e05b4cd56a01f2014b6b5130b738ffde7688892396 -0xa07e31d68725f0c3ac2d431d9f8708089c100073048b425133abe508327c247a -0x3e814cb32811e2d495af7f39d1cba05da2c8f7fce7b2a299c0dc37882a34da3b -0x0e3f83b9e2a4708bfda80a5574a5571551de2e4474b53da9947da8791daecc3d -0x600b90dc01dc1803200664cc53d0b4ddd5affca05dd9b05dff4c1dbc51bfeddb -0x0694bd4a1e8a6388793be68cef72faa1da76522ab75769dfbcafa5c51ae0abb0 -0x78d939c6a3e5b5a0fb58cc8be99d2665550c3b26c7c4184afca1974f05401bbf -0x83cf50c3ed9e19cb3829f4720e94e776dc655516cac38e9514da8994cb381b15 -0x2f49927669f1aae725f97888acd0dff13da494d6a346e0bba53c7f30dd2b0a9d -0x98136790e7e0b598c71fa37e6c8754ce65403574538c3bcc5602ef83f57ac6d3 -0x61436f57569625be2efd6649d93e5e5adc98f1b07b48fea96ad32fa5de05f4b1 -0x14c16947cb531c8f6dc0ca39fc3c9787d62199cce6f76c11536654ce44ced68f -0x5553bd8f119572481dc4c89fc89ea4b20d43ad2480db25d3c65e66e4bc1651da -0x69b55fb49faf873a4c599ec138ea1c4573d9e6d9bc1284ff550e1669f08d0633 -0x10355b13a06699c56c4aafb411db8b7a725d09660d39ae4c42c29c96643e6129 -0x58f4b16d5c0e3f250fbf6cbf628018ca3199d89c67f2af41398ee1e5a2f12cfa -0x3a4e121479d5f93997c86bc911b39a57c277d1789c445076fb487a7f7d88b264 -0xc4e8e79f88b76384ced0e43d7b28456fc2ca4458c0724399c276bde4509cb289 -0x9a54cacf9f131c515b1055678ab03398208aa46f85b8b08fb402707c4960e2fa -0x6e6dc053c9cd006fc1e99144cc5bbf47bc10718bdcfe44459eb98f876296f013 -0x1e954d51644bb4749049dc53a4f026c2d71ad9a2a19e58bfa10e24f9d5723c61 -0xf57326db4da03ad5a93966130ad0dd0c2d5f29e4d9136a0e5958fd79743f66b7 -0x5009544a1296b17b30f5e1f61cc8ed5349d197ca1c53cc1f76e9212bd829b9d8 -0xb388b6c5ddae633a8d394e9ae29ebbc0259dbd9e45076825196619b781919a74 -0x1b01f9b3623afe82b42ffc5703d904abd4f34f49be0bd6229cac41370a2fd3b2 -0x6ba81d96f10cc3de804b20202d67cd1d508adc93217147e769b794dc38e1541f -0x5b46975e06f4ef7fb48b3b9c67789e06718a2f15c01f75ef8f8bc4c653ccbdb5 -0x75152934968846295e97981dbc1bc29398190845cbc1ace75db22efe32955611 -0x630852f97fbd616af14ea679494726fb0ed86a6221169e4400125d0a4b8a6318 -0xf8c6c900152c87d4a975343312d76454ca082881e6f1319de20ac62f03b83ad3 -0x775d42d45670e1b4a3e25b1ea7e44255fac717133fc4a8cdd18a87fe49c1720f -0xa88946dc725cab7ce6c75e87d9e30c0024edb897f50afe819289067cecff566e -0xe0b53d859fe5e495b64dc8c0abb6b5938c78f39ff1ccf326a44fb3b39630612e -0xe95c42a3f63b0a6d30ab8f3f0850fd1be5c1fd2e6521558a1b8c9e34b61f61f5 -0xd7df9cb394dfaf48be201c5e18285d669045f17a9322f52c29862fcdbd246284 -0x23f5a4a7d11533f46cdae08eb2afd80eb44174e0d96bbe3eb3be5aa27413b23f -0x5c9de386c8c929e6893f2cbd772e4e4bf7001781270f873104786bb1711a3baa -0x3f3aca35d89d50a73ae71ea6b669eb06a660d5d8cf88e96e91d4f8dff5aa395c -0xf06fdc127fc8b3a2c617229879187bcdb7a7c8c1e09c581f028e6208995c6775 -0x6cb9ba9fad50b7372d83b808412286e9247e6e7e77d50a6b588a2637e6243e3d -0xf3c09be81070a5bf2ec2472a94210df2f81e8f7d18623faf296150569f15caec -0x30d5307548471a88c2c81fccb15490dce56a6f892e3fb9b4218c7ffc080461f7 -0x0f12b99f91b91bc92f5341451f7608eac3ca11bd84c3e483b540d689116dae7b -0x7a89d59406421a80434d31825a21ea742b296f91f1aca03616545a6e95b66e95 -0x3a97aee82e780c073302264335a3d36a7b1492439656c3503e3728cb61478fdc -0xf058ac2698eeda1c52d0c86f23005ac43aab3933ee48e58bd0bc8e1a4b7a2576 -0x6cfdaa814791403d460414be65664d24b887ac997e7fe05785899df1ef22926e -0xeab8c326921355270128178fdf62c9c45a84712a59ba589db8b458f09a2b9571 -0xf66ca4028e0bcd5a8a538a733a642cc2f098f2a93ebf76167c472206526aaec0 -0xe4a64350578e1819f4240631408b32b53dcaa1c0d946a2e2ad58feb71e63a548 -0x5385706a726cecf5355222d3a18bc34b85b810e9f4bd45cd1a80f573465c1845 -0xdfd1904ad4666f85a4c11b68030825c0674513b87c3021721a963c1e59d02567 -0x81350454b13d537ae50c7be4da150e79b04d0072217975b61a2700e74f631291 -0xaf4e37b02b2dd209dacfedc443de33140ec51f4f9ba7bcf6dd82499df16ee731 -0x7f054d96fc0ab3d3a5d89e6fd5a91775b9a9460e44794a9da1b9ea890337874e -0x7cd1bf8ae8e24d450370090496b69b4edd8f125be23606a902caf6846dacac52 -0x37a0d92142ca095d49cfcb506fde1447bb18dcd80704821a1c7301e964d84b00 -0xdf1993cc5c5c0461e856def3c32d52507fe272bf2de81a9bbf2efdd7b5ebeb19 -0x2ed8e4aeb467bbe0166876efad65fb755f49806fe4b06d93f5215c41931e6377 -0x5dfd075a9045f30606d4e43d89b5af55257d19df7475e5feef50ea3292259446 -0xc3430b144d7b15c3d523c16ed3da8a4f78e0221c8e1b8992259153cadf12b7e9 -0x2fe16a6170e0ac7f2c2842b7edcf66921f703247aa63ddb3a15f13f544abdd9a -0xa1c8e82b91212a0d37a755eb508563c512a82a9623df8cfdbced54427ac4bece -0xcdf2db5ec0d062e15185f972b87e1799cbdea16099b881fb16c6760456052865 -0xeb0a85b72aae295c5ef068ad4c7e6cc1f10039bda08887afa67b7ebaa55dade8 -0x3d01e38ea6d7cdba192342e6bba7f7425bc7f25cbee046a4b431928147b187f2 -0xb18be0ee31a76da39cd86bd757d326eecdccdfa6b4f7f7615ef81f67b0e11f9e -0xebe96f5a89f7a5ab367f1313830bf8c8227b0843e760725c90a3f86906ba14a9 -0x57b960118e8e0f9501fef3f3f1ccffcc427687cb6506194e6201d11bdc0cb61e -0x05b7b800fc5da1c871d74dec4a8c375f86b6ed95574bf19dfed2e945aba69720 -0x92234f3a4e4b7c407511ff7c0efa958d2b2f32b35ac06abf669c9ba1e3ea2d2f -0x0e15b1c3cc6450b23a8342812d7e65af377582eecc25d4e7976d0b83ff049c9f -0x4aeb752c64ec73b9e03db48630150e56a54fea19c518b78945728a75b2d05c6c -0x3faa018ce6d20d72ddc17ea642c7833c8e6f9d8014bb1308815ff8c90af614e2 -0x268613302e0ee8d22959b9734ac9eeefeb369c7cbc3c79a52e55ef57221d9593 -0xd1135a0790d601c5b504e799a091622eb58e8e65534ca1a0bd5f7da63663ac95 -0x74ad07f38235448dd513ea38140a6ca381db7a2c5343e2705e2aca43e83d9d72 -0xcad406d8dc329ff33b96a5506a8f369f2e0e8cd7101db8987ceb83c287592447 -0x2aed583bfb435cb14b73f32d6fc6da7ec6c404daec23496ebfcb0188fb3bfae9 -0x68e1a4ab8cd0f6afe570dfa1b6b4339e4b236638a91a8699ce16f21a476487d2 -0x3b7b405b5802b95179244a4fe3c43325fa4bb25b6c8215bb22afffee7ef2925f -0x9f7cb8b7270604517899c1d63ec1234356d22b71243f271e27810ad8c6e7f6ac -0xac468bebea5de6adff54acfcde03a2b2b22afe83a699243977de9bb83e6a4080 -0x59cf359acca978ba928a552aa4658efc8a6b121252c008aec442d4a52cfb1d98 -0x8f55176911fe2cf1c76f8e605408bd7d897a3c5017bcb18addfd529edd1b281a -0x4df2fdb89d126b3438568f72da151729e78d31a5e3357feaa42d9c123c62f99f -0x1a4f1327943438a927ad327353424b67f6270d8df0b9eb916bd3e3b6f92f83ca -0x762f38e2d7b22a4c65354a91309967c42b087ee9967b9ef1b92b9b27ef058399 -0x31820e8eef8ed671f07f8a2a311e7c01526da811306decf46bd0011d2df803b7 -0x8acb07a56993f6b3d34b54df257c6f9bd4c70f25ec1d69e1b0ed623f67e0316a -0x88eef84d00f4b850b96480a6dc15d7a5ffdaecad58fbccaa4796f06531484ae0 -0x261b09a867d944ecfa5eef8cc72524e107ce0960a6259cf3dcd037c210129b8d -0x7c2c775b372e7d024a80652fcba5dfa2ce7ecb00633d1a9d339e38fcdf04d55f -0x43d87cc2beedcf11f75773b41378b5ec3c06386373c4e64f507e5c18bea97486 -0xc8c6a4f21158256cebb25186a017d72ed38bd550253c39c5b81ed1938c144924 -0x8c074130fa5c5b9eeb8bcf64fd999a2a3c9d7267ce5b14d02291eadc71678a69 -0x5349787c330fbbebab2aa10ace4d53363819bcebc19adea1563ddbffec052a60 -0x57d27a3f8c925b85907a8686a3889e0055d1d75ae48a683f14e5ccf97979410a -0x48adb78002dfd77f1d5ca368d7237dfe0e50cd52d76c238f49a4fa170c8bba46 -0x15dd83648050df97a4eb5c6f507051df0e5d88878a12f20666bcc5309a4e7129 -0x2f26dc82675837bf5d3684a5f3975969ab9db0caf269635f39211133ab68d587 -0xc583bcaf36ab82fc65f585e902ebb4c1d7b95857c3fe7b0deee9809e98f3807e -0x8be796d3b92ec4c7eeab13e586ca2a15db927c3d62ff22816a97a74237b77256 -0xaeb3ecfed0ddb4a72e0b27e57537853fc3de8df325d1e41cde39ee14103f8ce0 -0x50aa49926495dc7d2a11b5d4f7d976c6919bc17d9f7fffbb8aa7662e94500a68 -0xa920678a708cf5de1a80a7d629f353ffd9eb634efa106861caefdf655a6fd57f -0xe456b9891e1be2302177744d119e7d542ae3a5daa8e341a8e6d027f4abbe0952 -0xbdb91aca640460812afe9aee2ff52eee031656fa09a0b0e24f8fc2cfe61fb924 -0xfa97484fd23aff30b0f36b160725cb6e0b75dbb0641e97dde0329298e04055c8 -0x42dbd3fa0b43619b0dbb867ef035721b00eaa42cb3b4096a1656e29bf3f4000c -0x16f26a6a3f0f9ce4c19fd0d6bd71988a603d8aa3f577444dec289e6d3c5d377e -0x6d22f19cf194873e916d2fd2ebadd37fbfee376bbacb0471506054328725434c -0x22965cdda636b2a90534ddabed1dfe2fba61b5885f373ac2d3a1540ef9cc86c0 -0x14894bec1cdd85412b92383d15fd816b3eeaf19a53ca4a8cea4f2934ab46680e -0x3157e13d6d16a971dd7935fbfadbded4b8015f88fef4f7e74acab48e943c70a4 -0x7aff70db84be960812f58829501a8e41bc554fab874ae8169378211b8dcc47e1 -0xa1a13ea8078a776afc627ea883a8623d6b87048143d4a850ab76d9193245e828 -0xd302acbaef3b7da7b77fc1f2337eeca965ed3e92d1cb7d011ac6ccfcfed00ac3 -0x0af1205b137842191404ed573e3279e4e4573db51949e384e48f936511de339f -0xc0ab178b67baee145ce617260d22e40039eafc6a5162e17e4c5cac7f6c0e17a7 -0xd99dcb64d2f315d36878e2086640d8c5a7c5c3fc52a889dcbceda527fe487f73 -0x54aeb38466a436025bdecbcbe6c6e1e8da45231b0645859109e2e69c44ae8b2d -0x74b496cd7a23e43b5343ff1595789235e4a5d0372bf126b461930387ad9be714 -0x6b01a249c1921045315b935e80fddbbbd118ba01433125557d8889a2d9da8da5 -0xc72a450321489435833730d113c30c04b8e10f564c9f832808c4e68b2b08e34a -0x2a63171b5a7da8ae249c15cf29ed9149a9e526e75d2c463b9fdc9fb77c9ad329 -0x4c00b31603e758a245c845025128f6da43d20e8fb6ccb282e0d8d9f41b4cf09d -0x88b11000c0f193db081b9b19a6aa74f8ee203d397f37fd64cb8dda208cf06d5e -0x0d53f7f994473515acc2aa14b183f75819966a5b4cf86ab53687c4606e85d2f2 -0x9c615c48879ee422c7a5fd022449486698dc016e31df71d29dc35a266139246a -0xcb241e910404a72c0cd06fea5c4cb49ffbcdc79eabd0d4cfd9e258bdd4dfa6ec -0x1d1af1c19422282219c6980d2e3fc7a6117d6c2d39b39892a8c194b725fc39c0 -0x79224755ededf7bc9773404f7d512954675253f75f86e314c282e8c96b4f8d15 -0x5d9781954ccac5af503fd818c7c6f59eb35a76b8d0b963362e13a2b77eb0def8 -0x1e90d7d4ec6399bb83b0b32810dc385cc72c3fe2fc6efc8dba9c89d95ab8e62d -0xb071ba4e5267aa659d4f28c2891e093bd07e41fb64e2a9f5fe137f4f9daa873f -0x1c4e20878eeb0150e70abcf9f54ee189f37bfc2c7c421327862074c905303449 -0xb7c52e4136ae8667c194b7b4bc961f2e913ffa14702dc31d2ac3f81dc9bbe995 -0x438178c6460970dd862c6b9e7ca82bcc0d3d1d7439d8b52a8fc3b8f3ac268b6f -0xcd57b9bdbf0247dd727c815c9248585afb6d235aa9688c61502c8c98eea34a73 -0xfcf4bceeead588fc385b88f4cdce0418f19e28c8c91ad403fe2f0e45c2fc2f48 -0xf84bdf48603c06031bd102392321652a069d63ae43602230a1b9b974826f40a1 -0xacebbef9dcb36387618f9adf81c06c500a793279489f2f76d7da195a40e124af -0xc0c81c27a6b64cbfe26363bbd4e0ed24710a7b19a9955402a4c3a0960472e142 -0x2ba2a6b5768115348d2da1af66381bbe2a2362d4891685ac9d3250dc76b801d0 -0x40c07b8c513334ba90b93b939677a22ca4d1dbd848f18538d740c706361a31d4 -0xdeb8db4f22eb9dd7895408e96dad121b4625959a4c6ef5af46466f095857600b -0x0b8e87883474747f6e581f95a8375b2d52805455b7e56292344adc31a07cfb21 -0x134b4dde07fa94844e690f1de1f7efbfc227ee236febbc431cd139f00c0a61ba -0x8afed7358a41cbd13849dada1da3c370e04c48864d1e7d645e2bcf92ec5efe37 -0x34eaabdc0d7da15b3b7f775df557d01523a0a1c46facca013c5a5922c11496d6 -0x91b9f12c47a04bd4754e886c42d7cfbbb072d1da5650c3c3681fbcb5f66f088a -0xd80f9fdd3730ca96f718c8a06a057a89df70cd427264a90d26b026a0c9f8e1b0 -0xf8690470aaca4c56806987281dbe106a2089a370a3f88528372aa5193938f3b9 -0x314944e11788027a26d92447cee84c26d11fcea7227ef2cbf2a2a4ab52fa4569 -0x2659c044c759f0269fe69e8656293d8093111de6fcba70142adf8849214bd507 -0x800915ffeac75addab6b713039db555c379817f486e16465c90cbc2a9153053f -0xa8271beee3ee7164f496e94d6813cb56ce3fdc3b6384fb1c09dd70f9301cdd43 -0x9db09179a5beec5d9c212d24ab58d64e361198c3746c57fd4a1ae2fbde038366 -0x891fb5c02b52afad2d712ec5e9ddc602193ae404b66b97440bf0e0fb3243835c -0xa4e0424d40e5bd819e247beb450ab6ef575ea2633d575961eaa20d70e4b4b376 -0xce80cef88fa13c092d2f29bf91516a2eb86f1ff34b07e8bc76f3d8d50b911619 -0x5a4774579d6e14d413536bfeb73ef6f2e89324cb497d06bd73cb5359c229f088 -0x6eb7ab02012591651731999d3a86bf21062f5c9a426057e17e4b8ec6274f2885 -0x7db9c8e417eb5e9fddc6119a10e361ad45a4dd2040fd2ebe1d51fd8ca390a1e3 -0x5cb69894c56e04b6e2b41cb5b5f9530970874ea0461f32694f0be6af912f2a54 -0xa736bdba9a85b831c8751ac1615ab0e55b0b97a89eeb663803d2014c930b2c6b -0x3031189eee740d60b681a0688a977050154f123bf54a6e52471ec820e11cb5a2 -0xb1f34c9c678baf2a9906373e80e2f443e59d0fe5c16f293b2c5a60b8b25cbba5 -0xe99213af78d28b177bc9586f2da01bd53773014f28bcc59f6ae8b9f98e501169 -0x2a82d3ecc15efb9381fc5c0d013821a963d32021aa37252a12db4b6d4a5e2965 -0x64808a7f6846112b5ca8a395ceb12137bd40ff0efb04bd02c85ac5b7fc4b7f38 -0x8aac9a551a59e4398d63d926b89154ce59b53f56a6175927cf29c1b3dfe17330 -0xfcc42ee4ed9b264bfb248b3ca73bf87f9a08c7f024f3f564b2260af523cfb6c4 -0x1fc96800a2722f0bcdea5d016e7223a45fff5df6b74f06af94d688dfd260d9eb -0x0b6738af912988d14c5873f69b8ed86d2b1c9268a19ebf7d610ae1d5d331938c -0xb64e635daadb738cebaf4845e2571dc974a21d726a6335d63c7e302f6671be61 -0x80a965d7cee7835aafbfe6aa06e9f37c872ee17a286086f2744841d717a55b95 -0xfca853a6571deed56f92ebf61c58b7a6da9698aed3c881c824fac6446e245f78 -0x78bf7578632943176f1b2b295fb2205340397d94b62718be6ac1260d3b65dfc5 -0xe2f3f01d523e7f517806fd2050b73c9d6236f38e860e648bd315981f54685e4f -0xd282782f4052aaad3131a3a2196afb3ac0282fab627eeca25fb229be1d0e28a2 -0xd51738e4d1f6986a0ad79c8b9c7a3f21064e006a444d0d17e1ea6ac92f15d94f -0xc3a464e299288d0a0f7d7f522350d8d8074606edc7e200b997b5959000bb6c5e -0x4a13b8cdc131465b36ab6cba751d5fbdb6da7bb5ea77afe116a2bbfcbef32bb9 -0x542e5b10aca69017baff78977ee912f02936902afe30f1d7618c68d36a462563 -0x8db686a9ef8965bb3b0cc4378c29acebb7cf3b4ea2eb38605b35b2d4e0f4d2b8 -0x5c48221d5e6facb035789359a278d028ac0276022eda6dbb1b6138d319c96e96 -0x7d980300956598a0103305c47e6e30040b5c96e6a1ce5d469188a8374589f1e1 -0xa5aa0e6c58419b43e490d8d51fdcac13c45c0e3b5b1c554369552a0877bbebe8 -0xa230dc2809e34191a1d15451ac3ce46f7085cd22e88baef072b3717bd6c3dea1 -0x0556903c89025df6ec56ae58e09b94480c19f34928b3485c4e05af811a68a4e1 -0x6fa1ecdc7300587d154f2c041cfec89afa14b9259171b877e4d47c115d48f79c -0xbe6771285a2ab7c63c26dc54e815635d2f078423c62cfa2a246f93d0353670ae -0x987ab6c1ed3ddf757f3f2287de9d3deb7d292661414f0a40db56d33ca6319b58 -0xef63cb03f53d2f4a2f8572a39d4bfceb1d7c07d7f6f6889f345fb17af54cccb9 -0xf6f724ad0ea813e745ee137794c20251339096d0a89e4cd77b51977981b4695b -0x1db0a9851f5c2261e25e115cc60ce858fc98b8e2a5dbaffe66af3b5098bbd76a -0xdb73b185a7d66771752e7a0a5126d0892579b40a3fad5eac9d72086007eab433 -0x186927ddb7b6f23fcd722b316bed5dedff707383ff8e2c6321c24c158d176e1c -0x3b84e949db1c81a11bd381e466ff3dff0fd5cad3fee11f4382b006c7c5c1c808 -0x5801bfdfe2fc9b75052e1727126d3b0218ba84146b3c1dd7b98ef199eae1c1a2 -0x6077bc10f34825cab6ca4d30b5225a5298ebf1c449d4b9fc66d461ae6ad54342 -0x16c852c471cdb3bfc4cfefa2bd54437ee3eab2c956a576b42b32e001b3539811 -0x8646dd61be0e14e785f1fe9e14755675d1e1e6ab71e12fcc5e90378f68e3d944 -0x27931a180e10db617a57e7a378718763edfb6d987c9142dd6c1538c937c6bc8c -0x64f7de4e7a97b0a76eb97809dd3b89bc3dcb2f9ae3c5f3926ba0221d918ea23e -0xd6c1d3e4d2c54c7b024fe8b5f586a40d879391f250618a2bde3512d24d33c20d -0xb159471b7912814f1bc7268b0db5a7bf4b0b21003ac460f89517133b2bb2989f -0x7fbdd8bdb7b627983c86d73976a7b75b4e8955513f829242b797e0e3b8f6503f -0x7c4d3e6ce95d49514668e24dec23be222f92f671bc8c784335495aa75650901a -0x8bff58294269c76d763f10c834c5cdc475e331903c0b9bbfec58cfa1be8bd48f -0xf812fd626ecd94fad2a427f75309b4d8519c6e1f54f4aafd97b31bd82a2b7cea -0x7fe9bf11ef715ba9b2986d66cec48d6be353c1ebb6c53502ec3359b03e814194 -0x47eff13c692a25f2f280683d01898a8a69d6b5454c71a4e4449fa48cb751bf0f -0x636d0de17c308bb181481df85009243d50a172da002b35612970edd787721334 -0xeb3f0b745454e74971fc657f5d111e15213a03be0dd6ade29468b35ca9bad138 -0x0766c61f2498b331e8cbee29630ec93f481948056c02a256fb33d9f320e6f844 -0x95ee31dad55c9fb31300b5fae9e5ad26f85252fd13151f11f710a1b5da08bd51 -0x3c402ae716571ef9100a38b332b1955de05938088f0380f557eec905456c5a98 -0xfc6bb933c1ae97a8a62364df22a5308fe4dfcdf7b50cd4f0a885689d3753b7a2 -0x4828e4c2eb7c4c3507cd92f62cb3e6d40b252ddd6178a5f0ead4bf51aa6e5aeb -0x80a14b6431cdd2e76b04648b5772983779f29f66c0af4362503ff6ee567cfc5d -0x6217f9aba4a336f55e920d693ea974ee47705bbd53a9834c93465623588d4b9c -0x07ee7bb5885b5e436e74d6efcfeab7480ad58f66f155e4225fddfc93d8f7cf55 -0x9f6ab39bbc097f00f683bbfa80463063a5a703224bfe9f548e28071193049247 -0xd8096127e6c3b6b4d64dd4e48f9abf5ff22a1eb3b87d5fd0ea98bb0655ce89d7 -0xad3f213755d2e48e62d7aa9325ee730c06ec42a718a7133ca43fa59fe4932747 -0xe82a8fbb6e9f1938de30395d229043851cc6aa9e9939daf163397a3baad2fc65 -0x6b0a37db27bc6c2ef6281a9a4ef9cce6428247c7eea805f9033136e8bc20bfdb -0xa8bd90fe2c1a069cdf02571fe44165450e277479b956c1f689e1b79fbc04e294 -0x3e1cc5de0f56c075ba0f518ca8445389bc09dced71efeed94b1503f2f7a67046 -0xea1ff07adf1f11e62e7027a4fd636f4b53b80ef9ff65ccd6bf288bcae1753eb3 -0x4aa5da2fb9c4deac9c9ad21fc99f27a48457f46871b18c86c60e76e0d21d4619 -0x83ea5b325831646698ec885e5784293e0659e6b3b901e2b74b314f5868e10c6c -0x576cce5badbb43922fdcb0582b2831a88d352c45bccae6e72b4cad90d527b9a5 -0xa9973704e37496d79dc36635e4ecdc107aa497e75f54c83f6fe5a03c7885fc1e -0x4f36b9e2c03fde0f713bb4bd90d81a26ee12f508cba4b18446cf5102b6225b8a -0xa426c132d393731cb8845545d01ade4f34b6e90c21de461e8ee0b5008883d771 -0x0f306e2af157208f588c6640468eb87b22090d290d5fb9135325eeb2ad386bcb -0x9aaf7c5cee07061ec7988fc811658e3f8edb55f30a9f4a9cc0163eef97b0453c -0xdcbe0127143f9c6b42c0bba670ba4e098476bc372a5d1bb66ef6f15645cee74b -0x0a9e5398f0e9f9fb2d8e59c4fbd8d0a8bcdf4deb109f68bb3b13c901c323404c -0x90b19836203c69b412d928698852876d4af1d7be206e5d08e19f75f748cdcbe6 -0xf01feff24f16660027e40fc785575c91bdd8aa1014502fa8c44519c2bd59fb09 -0x051293692977961232c822e781228cdfcc757f3ceeb046d57d843bd438ef1caa -0x63e5d1a81ea7e949eaecfa7488727c430dbee7d41ab2c81bba73504766d877ee -0xb114d85baa195591185bba1de160a562558d884615b5661079ad568ebbcdc6a8 -0x51592b27d95f3b052332936c9cc6f72903de21bffa661ac66d8cd4047f31ad5e -0xb1f081b7c5e44dedb94d19da8398507cda7ed133fcdba06f6970cce7e073ba92 -0x0edb6d7c8ca866fdea164c75d920ab66e227a2a1db3b2faf93d20a71c513a326 -0x037b6b1ee8eabc9e8be29e69d27936ef6ecc7d00bde3780cc3d4d97ca5caecca -0x97df3245959707139b3bb81579765531b2fc866641cd468b50b15aae5e8b2f36 -0xe6b158ff1f5429d6e2b1f9c5378e04c7cf2febdb9a65872f754bb9288b458408 -0xad1280fbc41e1ef2b2c69818129f87ae80e2bad1d13acf217a4c9a2d62ee05c4 -0xdb68a6d4b788648b96a24858efcdf5aea16b01969a5c86911345d9ec316ec246 -0x37072acca2ec14b97a31106f3c19e904ae1a8b35151f86d898f50e94bfa53b60 -0x56b208139281db7da942ce3e461b103ac69c92bc5a5427768a3c9ff96705a38b -0x5b74a359f9ac7bcde1dddec201537564786697c4cb1d4830fe0ecaf6f2479228 -0xe7b931734aefdb240a7cd0565bce301e86d0037bcabfb87ad2335a38a6c7bc4c -0xff983fd19d358453b5e603513c29d287aa09419d8be2ae6c6a7b3fef69d0f7a6 -0x53e12356cbd61720bf7ea9fdd486b85e3cf8994d3926f9a12667fcc9c38adf55 -0xdde946192145f7121c7830c2370f170c35ad08ef92a2a76aa16eee727ebceade -0x4adbac9568c6f4cacf8785c90852e4c58cdfbf89a4bb8636875415f32e41c239 -0x3b0ef8dbb53cc38c4b3b312e9f36795fbca3a7fa6d7c91f2b35e91f04ebac097 -0x0400997a11cd1079968d54690d8bd266d1f23cdbbcc4245ebdafae96f237ce6c -0x15c074359bb57c1c292c456c3ef09e200f1a4d6e7744544a089049df0c5affe5 -0xa739dcf7eaeef2130bbf2a07bd11ef11c45997f1e1a8b289cf1c3aba63371615 -0xaca249dc9a83040d656878f45aad63b32a3c657ca51156096e81259784d44826 -0x60926c8bf9718143411fc8de6d3303f506fa09e2c84b19a92543afa5a55a2cf6 -0x4ea32fbf1cf2a9f6f380f2070e211bb7a9909f42987323624ca435e379adec4c -0x65929f838e4b8ee355a0f5d4fa2afdb38bc280a03f9285d62e6f5dbe7fa60994 -0x1ab76b55443db3a32c884ebd9d6c8173ba2b15d69677227c4b33a41f7d2aa253 -0x8f07b5c22510670e019a3518b7516de4f11648a320088067683dc8d2faceaec9 -0xfbe8ed4bf17849c27942c46afde0d44ce311439da6f19719150d3300340fb92f -0xaaaaee471b21d88b9d34a2800cfa9c7c25d1c612c7db73d87d020d707eca81ac -0x524e108d87389e2b4eb2fb7bdc78cf9b47d548592b1da9865979070d34a84480 -0x8182996d30c3140d90ed5733d24f6434446ae1f884aa9ab8f0a21493543fac20 -0x7e6dcc8062af16dd9112d0b3edeed4a9e448ad6dd73a8759845708e950d3a5ef -0x4d49a9d703fd6e6da57ba2ef991e86d6cac2556bc932c9a260bc45daf123334f -0x3124b7c7e5a2ace07991b6091430d5e2564929f2537545357edea0838c405ab1 -0x9e8165b3a47ed6d42e2a9c8bb239a33ccff66a5c58c3da12dfddbac92ccbeac6 -0xd6b7c799de2fd2933693bb812256ddf1cee408e79b5d892e32561b712cc69d3e -0x113f601af578856678aeead91ae1783418e088974db9704b8f2a88b8ce9935bf -0xbd6dda28fb36d69c72f974765e69aa0b3f3af2843fed679ef9d899f44cada59f -0x728223fdf1450fdc02dbe0aff99687bbcc738cfbe7cbb811bb7f64e6a9e2e310 -0xb68666278b4d7855dfc7eeb25535a3c7393e4e005aceff6d6468fecc6a43a050 -0x060215aa799d0c8fb9409938cb6e18ce2ddec695c8a07807ed0cf571346867fb -0x6cbe375468ee1be8028d0ad2c3e375dc73993f6eb0bdb126761cf50a9b48b8b6 -0x6f7ff36a576d7b4c1952f67cfa488836e5ed5457e03eb094e326be46453a1e6b -0x1335c5d8019b788eda4664c3000065c371aa9bbdb0a57db9796ec1c88845aa8c -0xe271c0adc29e80968e8973dd9299d1770233e2cc13662be65a172bca27ddc842 -0xa2af550100f8773c7153d9481bc02773e196c3a751628cbad683e986bf76ffc2 -0x6180ce31b0c43d8e9241517c8f7e13383d9bbf4770f59787cb5bdfa3d072a76d -0x91d31ae5d08dfa8b10dde38a33fbfecb3a7629fb9ad65f83a32ec372c0375b8e -0xd9247ae1d0457b03cd7bc653a425acc3ca95b7da5347e1d3f131da3cfeb64162 -0x6206adcc22756bd1f56f319172cff0fcc9d57676cc515030c1cf9c425b2f6fb7 -0xc8d8969aac985e305113431fb3abd1f5800905aa1ced28596a6eb9f2c0eff025 -0xf6f4cc08b3e9f86385d3664aafee99b748852b91aac8883ec73e49ff623d1dba -0x556281fe34fff77af24288b410d448da9befa12f0b98c21d713288c392729eab -0xdf9a7fce129e81bd391b005a137cfb1d7fe12183c4de459418b73945e0a26213 -0xe25f6cd3bc46a335dca44a77fe17e2f1bb8bb568c955db935450d8ccc1cde640 -0xa792e790cbce7d7665ece87d109c824b5ff03b3e1a972bc1abca567335a18326 -0xfe3e795e60dbfe47c2397c19e9e510e4f965c0f99745af0101babb21f59361e8 -0xbef933d1c815ab543e9aecf763fbe5d653f84b658510679971169b08d156e3a8 -0xde0a49ca1bd42635481fce8ea948de2594dc68e8744eb3367f0a454685c0791d -0x748fbfb28796561991068a063f36b644efe0b4391b061f5d8cf639d44f4cbe67 -0x0ec62117b0a790d634bf0026185f8d066dd22a958d5d1a3f67ebaaf485ba7d93 -0x0bd3d90089e4c425595cbd306ba507d45d543591e2d3308a14f5efa9452801bb -0x1e7144b00ecaf7043b21fd7addc909964b7c511eab88b12362fc4b3fbe280120 -0x84f388b344accff8b8dc7c71f10494264b347a131e02b11d056649402bf55091 -0xbdd6fdf5503e0d8512d360e8cb1327d466fed010eaa17509ad1aebea368a452f -0x24c373cdd96ac9133f2c4680123d1f8a09425b968b00b87eb3a601c173d90576 -0x295d6b7770323e46600caa126355a403ff671de95680972bd0e8f16124cacd0c -0x8b7004a85d7efde83c1ffacd96711fa5c746bf346ea3caa6c42f4eb9f5c9b984 -0x3e34c66ede29c39b5084efc798003618dd1e402ba27f2d041c34f18ac216f626 -0xab9d7bedad5f5a179b910d8168c8f076abd7bd3d425c25331756b64e766672c5 -0x525b0dd8c42558fbddff89f4e1bbef98f7ac8c82325588cc825de524cd110ab8 -0x9ffb150d6aededee2c52189453a4a6b159812e147429f22e8187e39465bfa14c -0xe8487e2801c23dca7e28faa538036f8eda697a0a5d231c101ee28714a1150bbb -0xec7521d2d989164f24141986602806dbddca4fa1b8c66e40c6328778e7684da2 -0x1f1a28c048253eec875746001942eb1278b6afeef5ae68b3c0ff64e534d385b2 -0xc8b0ded0ad8c62cbfb24c7b218b716a09efce373394f59eb08326cfecff4eebc -0xcd2809af2fc97c231ce88dbbe9590c4a567118ecc0fab11206f1f70adf2bfbb7 -0x5a25ae9c16851f45bee087c1fb64872cd4b216ed8cb9108342f47cfbc3ec89d5 -0xe59354c12f5c28161e2920262a07eeb515affe00fd0c29fb1a4cbb334ec3850b -0x4e75b2aa6c62d4827c9715fb533713cdf2d8f6232bacda6e03b9c532dc21ed43 -0x7481c90ac42f32b8457962f345e38b160dbfafee523f73694d89f7d7167c683d -0x9908836da19fe960860d832065585581776fa9011b6f8f04e616c15bde53a39b -0xd43336a915ff12e38e878a55e6bab202c8fbc2971c360abcbe15206add379770 -0x63844101ff0195b840c240fded7b5f76912edd8ef67430f9ff18267a40be2d82 -0x9a5d34555b9a8c531e5c312f62950d2737172dd5be834acdfedc7df7545c1fd6 -0x24292458fd71e2a781324e82e5f838d9cf3e994f0f25d396aecaf0644657d20c -0x02ed039b0bc6cf291b76a0cf23d5adb5fe3180dc333035534ed680cae1362c96 -0x7d5993e5362386a11b134c48d3b531f0b717d3a23aa046c8e91fb0acd7152841 -0xd5b3b6b5b084380dc2d287e1c5c7afa4ad07174e72527e6318d9d410809d2f5a -0xc1fce48b600208707debee9b56c4eb4edbb37d221699bec8354fc8a6c1b736c3 -0xfeedfc858ef50e85e566f2fb7f171822cb021179f4ab018c4721c0e11a4b35c4 -0xcf4563bc9ee10718c4e157e3e4b2501b45bd6be8b59b6c9e4349aa58c33a6746 -0xbe3908ce5bbbfb41189ef87896ef71eca33228fe92a9bbb9292cef00d5373f45 -0xf46ef442d6d16e2c8efa405729e21379c8b2641a07e4ac9ec6613994cc0be288 -0x695551f21bb5ffaa0fa092f4e1ebfc7f0143b559728bfb105caaea536ac4407b -0x6914ebe8fa6320ee5102d9e279d9cd8be76e6a65c3e8e317a7c25a58f50bac09 -0x3ecb4800ddf72b43e904b4b2cacdc59c83b6fdefca09d44568cc1463445526fc -0x6d67f38f32c0df3f148d30b15742e9c2912d02ad6c4dee0ff18a8acc04ed4a06 -0xd89ffbb80d70b45a3ed1f1d9e2a82851b1397f6f5419652b98dc9c209b6111f8 -0x9a0119cec6ad5629247c2f36483c52bd0fd3944785d0a8337b23b4a07380b834 -0x3dfb5fdad9990e6097ca1d7a5f1611b8fac19b3ba21897f9ad3de35847fb4b7e -0xfd794e14dbb43763e28d031c1170d6e8887c289244bb816ccc5a89680857838f -0x197e8661ba5c14749382dbe338c0939be9b2c9cf4202f2d5b414b52ec58ef525 -0xb55b4a29b31af3a526f18fb5ee0da9d7b9c8d89aa81e7d4f0a70f1e87ddc7189 -0xb46a43ff8d6ea77345b2db3e474a689a0c6a0247ab2b2e018632406241622ce6 -0x672fb3d9861c60e8fb2789658cbb176ffd8ef1acfbf36a79a2f9d2e7485fbfa6 -0x29f93abd4c4186b9ec7264c58c5646c42614ea1dde8fdb110fa5864a41f8a5e1 -0xb237e57f1e756ba99fd9ddaaf9652e43b8e36beabd9c69ef211f319ecf0ac59f -0x345700fee61d9edc932dda62fa4f9100b977f79117c4c706d50aa5d9bb98b8e8 -0x87a02200c627be15f469403955dbece3f6506c198eef592e50de62d584d4f13d -0xba1bbe5664ad23cf96e8e83b3cb93bb2ccbaa12787898195053bb16a8f9684cf -0x2b292de5dec32cea6a588db99ada41758843ce3188860e8fa852328ac34cbff2 -0xa700111c5ec0d8bc47e2cdafafefe61ea58f62a70f3f89c8a018274090152663 -0x8dc81af0ab285cae9b12d5712bf19bc2d91de56336eb6e94ac857575078ce73b -0x6999082249ef9b598a78e8e759f6fbc3d90a91b289cf4e48956faa58f16eb129 -0xb13fc347ba02d4fe25aa6f6d7d46a7d2cc31d117361e08931b61738617fb4e42 -0xc3c5d00ff9f7a3ffb36297c162b23d1b27c1a763de84eb5118ff960ef9fb72b2 -0x5e43ac21093c86c64f6dff1825e88e1fec2a27d97a8fab9ed7f5efbd3bd287de -0xa2f20564ffce463f4109c088e705b536b53f1756a71ad0a9572bedecd77cc91c -0x12ac576a5f2b8e8f7f7498f64e7d7b10e5cda9fababb221a270f8e4ee8b37ae8 -0x9ae4b728d40aa3cf844005b8936d1f2d34af85193a990e22e15bb8b7f706c9fe -0x9c7a896c6a48a87118c219e762c341eecdfbd11dc0f0f43e14c3262a50f43ba7 -0xe3d1b5499c580b1d23766cd4ecc8451ee91434319ab4c4273a1cb1993eccda8e -0x91628c088c84f2d021d175e1909b3c5fb3145ab4500b634b753d8a78bf84f9b0 -0x1c3e1474a1653c066006fee531ff8bdce49c77a8b7872dae0a78bbfb9d41c0ff -0xa9470cd47fc546f21acff7cec2a3d692df36174c8693706149d612f910e4216f -0x380a035f56c6fdcfbc3df1889c78ed625c14a8702ff6d50c5a46a353525a6437 -0x6fe4c28b6c86c1c3c145f3b9045a7d3c9b8c96f744e40e4419c0051ef1c37f0e -0x723f64656aff165adb7ca130b1b5c1c919cb7c0ba6815318a7b35e9466d1960f -0x1bfdeaadb265aa1f10f3412609ad4bd7c3ea7ccf16552e0b5a3eee4a9ffd1422 -0x7483f145d2b8d4a43341d4907da631c6fa846cb550fc64fc90d84d2e45ec5afd -0xbe9b5afd9e724729d01aa144c021667cb7183f66d5b927bec2c2685db437bcf2 -0x2896e080ec62dc250fd4111c31403665067d5ef3839a4a134190e5989e41a915 -0xf73d1f85f18c2974100db1333a8aa96365cc8d45e227956326eee21fe36b32cb -0x1718c743af64c9d1a2c6518a5f62ef618342a592be375bf9c95a1aa28dfeb31f -0x536ebfb856330fb6cfeee0f7b1ff9b5f4101ac918a6f56e6be255cec15ffc0cb -0x18fbcc5f55be595d196ccf72fce4958a8510462b95de4846b6345a1f482e448d -0x98437cf52197455886ebeef54a691e63a11ade4f558621e7c41090d012ecf1e2 -0x17c842df30146106beb021464134a0b5091f6fc5bcc93178c7f848899eac1e67 -0x87394ba95c873743248becca092fa9314058ba4bdfe2b1df0064c0d9f9e7eeaa -0xce9fbf909434b298f678d223c27d52f08194773933c943fcc79e5390e07c3ae6 -0x670f2cb17816a9b96a9ed97fecbc22f74e5fd9d171db02d983c05fdd2dea5429 -0xa05115e74f2b919f599f5ec6250d8c3a2d59ff8e1cdc390de3ed28bd2df381f6 -0x34edb4e928c435f48db746336da57b92492ae51651e9078b1ebc68de7e3083c8 -0xdf81fab5de25cdd6720a3967444317502cf4ca3ee27d4ab51342b1ae3c7fda28 -0xca0f89c65fd16d02b20a6b026ab2d1340a5f716a200307a4ea45379dc30f04e0 -0x02ea1a114112d159ea941f2d2aba405328baecbf04cfbbf9772af2d2907c68a4 -0x759c9a2d25cbc9dfa7ba93f25fb42734548599418e053bbebb6d87344d0814e1 -0x302c7b764ac0a2fb7665747799474e16710356694835e4cc2095e5c581b23d09 -0xcaeab273b9ed638fb5dd8fa16190dd5b8344f71d39cbf8631bf2757b4be0be5b -0x40672012b22302d8a610112586e0f3f42a113dcd2a22b07609cce78accda16ee -0x62da6364f4be95dbfa28975d93274e63a13639922f2ffc99a5380e31f4de8f25 -0x56d0c6579db5712cb2181b67595e3d23bf58f6efc55906019f1f8cda31a5c275 -0x0748d2bef19e3c39c8ff2da2c6cc7aef304c20e1921fb2faa2a3940e8eb5e906 -0xab9fc99cf0ceba5a0499b2e2957b62b53ffa6af517aea6976f18344d6baef40c -0xaa7250416d65bdf5e0c5fa4f63810ef1637b1b102ce33e3834b61fb652edc0ef -0xc7cb148413ad4e8e4d6a0f4bcaf038d1b5c0f1e4532ce803e3d2f117f3cd4990 -0x847d078859704643c2b8f7fd903a308dbd0ca48bc3ca8e7a63a46b1d7ca5d320 -0x76702e8b2392d666702566a68cc8ac2a4ec59a73091a2e35e15cbe64b2903426 -0xabcfc5ef75e05933e53eebd238821decee713e0f09913fe4c05a964b46b31aa0 -0xfb656f15a3a908b186bfa98ab9c373da0e095caeb6fbe2ea725ea313c633c818 -0xdd37d1ba7daab8bcf01a1f15f5e2c4eb5f2e405f552001e6c581f7984920d2db -0xff0273af44ab40d96958c788fe4f845f1ef79136cd7e2c9e163c22add2672064 -0x4ad01b6d77b1d0a391a30c9bcd265a330250c210776e276f7f4ff7335c0ea4d4 -0x83897411ea11afa65746d523d78abc3f9b50cf7cce99f44d0a4e002f9d1e8aed -0x70849f3122b17377c5de4bfd1b01ba1ecd2c015ef2f20d7fe00aedde8e75251a -0x6602c5c7224a282ff6cc5402d1a1829b8cfe1f89d40846384c1c4b2fdaa45405 -0xcb47c432368389045b5049c4fdd36b192148971bf6acd443c975dd3d0cf66011 -0x3568c340e3a684c93b37954e3941bb76f480425ccc5eabbec93535e67e9d51e8 -0x2d295298869e76d766215daa8e777028021be7b58f0ce6b10fa04f027a421427 -0xb9ab2144f2d4a09a28339516ff634f2eeb538b7ac69c7ffc3e556e4592bd2297 -0x74561a2b210e2207c20047565c4d068393aa2556df21ce91abeb6a165b33c5c3 -0xfcf528084fa1d6bdc7323c173382cb31c9de211d8ea5b1dc4ef5a658360a8523 -0x605ac7b3fc21a9306153c80dcab9920ffd69c1712bbc7af281d886ec441f0626 -0xe93f15562889040f111deb93d0ecf25cedc8715389095ad8a8fc3d8f18a573d0 -0xa729147e0a6d180b3b6ba01305867f278920dbcf76a05903f8807b327c369fab -0xdaab7f57ea54ea8a1074aa0b7f262cd0210e846c5b132a88a05e8d858505dc1d -0xefddddf7e113f5f5676615403427c23296e98d7d9f739ce34fc5177ab18ab57f -0xdc2288657533d8b523c1b4ffa08fc1138575186c64d9937251635bc1bc7bb2bd -0x6f5818385f148dfccce54029df711af4cedb9c512cf0e2ad179fb15f65e80d2d -0x49d385c9ae1011d6a1cc80e29dd2dcf73f14293aa09833dae88cadbd124b3030 -0xc6e21635e58dc389f82b875d6775483c5e2c369b2522abcd37d725ef6a1783e8 -0x58cc6cb921a03e10c5c75b2ad6e1b5e8a0615e678b55b0ee2b5ea464a207a78d -0x10e30f8d4dff97a09e6f24501a4703785f36a0a73fb633bbc4a4572f7152a238 -0xef5fcbad05441e6fddb527938bf0ad2b62ff2145e7c6ae2a23fff5467f08dc93 -0xa6fa4243e38ac3a34f38b9c048981bfd920a739ea9b724747421218904d51b51 -0xf1f0bf27ac8db31bbcf33bc5b8fbb534d4e486bd17e966f87fef31712728f4d2 -0x5579da0b4bdbb89e83dcc26e437146cdd62dbaa69ce9f06e97db618c39f79a68 -0xdfd83bd93c2aff7d4562a3e7c2cf5fdb502472518c7c99638f152e345413bce1 -0xe651519a13abbd162573889b0ba92e71af62f1ca2d86d8f583b6ce4e88e0a552 -0xaf7ecdab09cbab94956b13b8a8202420a2f75abedf3f09ab3859fbe4da239683 -0x5c9a5f5a8fe816136b7681619e0500d5a27323f0a0d57aefe88444d362cc8cb2 -0x58f60bb9594181a5baaeeb52b11bf4e5789a393e4942ae7ba3ed2136bedc9851 -0x087cbf8cd95572e7d80eeb633651d16efdbc14269a61eda322abdd130756299d -0x9e9aab8a497b38d5632f6ecfdb158645062c23f3497a85226bca0fb3c1e9d90f -0xb0819bc9385b07e5ad91a763af4084be146782770a4ee6fc33135649f93f25eb -0x11900a48145bd0a24b0657b8c1842742f4d3997be62ce3a46897e24fd08bad22 -0x178aabe2aa98b7d8c564b3be57206590978242c0b966f56273829aa5825d02b9 -0xb21579893f2fd33d294d3ff30993843ec577dcbd1b95be3ba0e079ef2c77c642 -0xcd6151b35a3b3856fa5ea7b9421a51474a8a36e24b9312015abf4c9e85f8cb25 -0xac731dfe74dafffe4ae9ecaf44291e0087cd878481c69659ff589cbd133ed8b9 -0x9f42ec31b015ec7c33cf09dc012a5e2200efbcbb200a29dd99e98faa2d21232f -0x37ce82d71f08d877741f53f5649d649efb2d303b9fc8a1c563641a38d383f2b1 -0xa8c5ae889c94f75f53584daf70f693b43cb3fecd52186fe34f13341457e5fc9d -0x3c6ec42044bc767f2b8ad3d998bdb8d9505eb788ff1090b8558cc3c1cfee75fa -0x6c72ddfbb254de59e7fdab6cb421d93507cc2d2ca4213f2403cd2f0c48c2dbc9 -0x02a1a76163f15878ea2dd37e71292de0109c84d8f3c51559da21f7cf9f60c777 -0x03b33a3cb24c9ca5969b03d49845a59d8b516b6d6a4f68e32fea47438e6adefb -0x63ba8b7698412987a4e6a6e3eb7b463f38918a37f7347f21f657ffeb7725b5d1 -0x5ebb17734da4a1dc44dda9323277e4c2d64f9c27a5a5b8782c596ac53bf92e68 -0x9a2b7542aae76fcd04622af249eb337ccf143baabb73ce6e99bfd477fb3afa7b -0x0e3236a4ad0fc987367d3ebfdbf544ca4938f67c4cf71706e58c738e77019fb3 -0x5e15a4fe2c64ffb88b9b268ff914f120a3c39a642d4c023c5dbf70f7be46887a -0x0831fb08bf11a56f4990433475ddea837bc0235d3ef2eebd0b943a732e83424f -0x3c6763679ba51f836d197eb46903226e03f20e1957ec3117b82bffdf3c6b63bb -0xbda66b9bfbac8957a4d3e3f837ec33a62c98dcc4af9faa1695e4a00ca240b829 -0x944d8986951b2eaafe83340452d95f63be1704a9a427fc2f3c719733f2ec809b -0x1519245c0d5f11b23928a5389807937b7cfda2927e429e34f5e6061457618cb4 -0x0e9f097685065f2adb20b669dfc63bf0b40a8f0137f3b6c5e3d4db54fff3fc38 -0x8cafee984c76fa354dc88ebe6e97db42011e8d8dd5e9bee9bfac39fb5f029ccc -0x0393aa94b4c2a6cd46c0c810e7806cf87e5bc9c321e233777ced76536c31b508 -0x0d2a3b8d293ec2d7801c18969ff4083a0dfd52fd5fbdc8d651a3fb60e345e8f0 -0x9ac862eb02709a5d3caa72a5bf5eea82ad2a26ab36699c8a0488cdd34190105d -0x78580e30a4fa7a7efeb12616482246bd402afdbb45a02a5500577d93e03cdc97 -0x28b189b7a83da6838eec60a340268f0823e125e54daed58ab86d67aaedb6cb26 -0x2c1ec6fe5d340c177e1abfd87de1cf477807be40bb6c27845a56034534b30221 -0x96bec689194d54c63d357106c362a9fee11d82df731a78f4fb74a9d8afd3efbe -0x68ccb10a40d37199e8fddec309059b372eb28f9fc731f1e5355d4147ad346c1a -0x83852faab234d944a02e3fd2ee7f06520d16c1f7117b44f6636cd62d0f509bf9 -0x32dc72699e41d6b9c7ab8209bce227345be5d350909bab7558fb4f3c5099bb22 -0x2302e773a6dfed6ea61a57308d9a242e2355a3e6b4322bf3890218f2d2ba8c12 -0xd91642d6916caf5f6d7131a0c08ac361ee93e1339e4aad28124f30d55aec9013 -0x6d76a478968f53363fdce6b8e03efa1c4b089f3db710c54836f521fa10e578fa -0x80780f3a4f29714c0c819ef327bc3a48ca08797f7e08fa0c107593a1d23336b5 -0x19af9c680fad07abb71bbe4f95843723b591b32a66c964fc5b747d7a0893be34 -0x639088452e291042b68245eb0ef50571acef145daca552d78d57695ed9e3173c -0x5d11df627e71d612e339c1d4d615f61619736829efa8cb36105ab613fcfb0d75 -0x2388c434312926cb60ed505ae2b0624a9df868dc298ac055c45f86c740e4f7da -0x9f5b98699f2fbc4c7822780731a0e8e3d46ebc44cf2d4620c8cac292c36f8639 -0x7ff1b6a8542f7ce2f06e194addd2624f579654381dcff64db4315abc7c84d589 -0x774436a0ddcba7a56c24bed420362e04ab57eebda4c01cc93dc33844839fc735 -0x3ead5d6987731a0635b6ae3083037b0e0dc4fc43c366d721132049044b9c5bbd -0x4c0e6acd421f9254060746018e5a60b8f858231ce646cd0add4a45e0d7562fd2 -0x56605f104f72c96db1231136ab44ed585468edd54dd32cbe8fac386a76894fd9 -0x4a0e9b716e00224eac22b539546e68db1829219f0a4c483a1b74b6c2cc2cf8c9 -0x25fd384e941f8cc4eb24de6477f145c5c574145390a11c96516908af732e38c2 -0x91b7ba444dd3960807aa0582d6f02f0b761193df2b0a14d2f67172f93695a251 -0xb85013115b8ab7f777cf3e8f31cabfd56ae453940653d3eb835acdb1f8fdfa29 -0x4bdd85fa67960d265e95460404728772dc15ff543f9e91a5b6fa3c8d7a462ec0 -0xbc99108b8b6039a8bc420306d583ec8459786a54a717bd6fce7e58fe12da8385 -0xb1e8ab1671f9dab060e05b3b32f7e9686e30156c9ecb892e407edec9fde19cf2 -0xe466806f3342280d2f2b77bf38c1f30ced615652a6cc2525d6c15755310b36ab -0xaee08b96d42de5112abbb5876a24e72a43acc4a4a51b01571008b038ca351d64 -0x1cc8f4b90ddccf3a684ca196572007001e98ccddfa469eb9dcff24182d918b09 -0x3e315ca4e047c3b09c826711e09cbe078a5c3b34fd3d4c58590560203b79cfab -0x16fa49037d929935f6c455acdff485b1a99f8ebe9bdb6391fb7472b161f6fab3 -0xefa0550aa922d278245d0aec6b1837d0e2ca6a90a48a9e7ef415fee665817793 -0xbbf8fd2698b94107fccb558a097f4022ab4e5fb41814ff6f0681bb38dfddd4b5 -0x83aaf8f3de1e1674f8b72783fd2c9fa6a2d6465b0bf54ac2ae0caf0095489c08 -0x1585a4b65a426f16820b75192c043899766353388d9ec9afad0125147b31f1b2 -0x1e6e216c0725bbf025b15e20853941630b9162027c850c01e8b345783cae4d78 -0x3e76ee683e753c03e9ec571019072c8beb6b681ca3210c7daa421905f95088de -0x15a16b82789f48e118f079a1f2538855187fe084a02bd6d9968568d5da6a8ccf -0x78a1b7b84e92ddeea3e99e1524a4da218b4658e4074881faec91395dda78fc15 -0xba9af1966637c7c3e4193e5f8da51994166dbcd056af2cd772c79fc4acfc3455 -0x2ed416f94be7aacfbf6933f8295ffca0c610449c99356e8b4ed66b02e0e48581 -0x5e7b2c3d2bb44914184b315049157054a9dfd0117447fe3532d634854a65792e -0x311464feba24fdb4a3bfa79080d2bfe2d91f183b52659e3103c40e01481555fa -0x4dad3f27beaec59467bcb5fbcd3142fb347533949efaa2c757465f28d1fec8f4 -0xdb92df10bf9194cd4ecccb9c834b57ffe065e83d3697922399ef168ffa78833a -0x6b8f4494c8e7a5027726a96519be7e7fbffc16fdd8290ca29056f3e0a675dd29 -0x6a2df81ff3ac06251ac349cfceaf2c5c76750ac994cd6a17602a6d6910b5888a -0xb1e32e7d7e3a89dcb57a4f0137087f581425c65bf0900a099f42ba27ed043920 -0x062375b00a1226cdd0d1c5dac0f78e21361d8fc5e05e9438127b07a45b6514db -0x513e10dffebf4f437ddec792eda549f40c21ff880e6c781fd0fc4ee405cbaf37 -0x813f274500ba245d3b077e8c94dce177cf1d95d0ca8157358d10db23265719ea -0x50df76511135ada60ae2a2854ac4274944756bab5017c28c799ba2830b5c144a -0x97d6f662bf48b8721d65c76890227edb88d67daf8448e6a47f3c4bf8df9a4b77 -0xdb408b95f08de5d5681c0ccec45b7fa8aaf2f87c6f64e2813cc3f76f73e10c68 -0xb126abc8928a126604f7bdf1756699e5ec6606f02e2b1bc452869ae81e96856e -0x3acbed916ecc4d94cac4165233c17b90a6b9b953172b64194401806c1a462c14 -0x5b3f79aeea46084975116dde09ada9270c3fd05aa8cce608eefd6fbd8ef68885 -0x2d10906764075c0933ce21997c4059d35bee43b9830d74ca5d73e47a750c1a58 -0xef69e452b0915f5cb03f9297497a47e07e4a16351e85b5a4b45199b9630752e1 -0xb47c9dd71d348e6c431b9fbf2b9583fe47c906e646411577b75ddbdf6065eb0d -0x7fad1cee98194966fd9a81c19703dcf566407eaeeabc0f4bbd288aa92e925459 -0x4281f21f9e589b25a6819859b6c15df26560474fe119280650e535c397d3016a -0x109fbbf8c792bcfc6041e367a14c770fbd551435fa43f4c0f2059dc1a2fb4f92 -0x18fe125e8ea41e26cc855f5a001daf4b808d47043f81f8c2dca0c24f72b3c7e9 -0x6fe1ee8af5ee40f142deb17599f46457ee49fde00826c84bb4af6edfbb4a25f7 -0xd2ff5cf41e6f5f5a4e53aa777bd5d7b150e584c660ac2accffa8f4e8ce2c8ff9 -0x65b6d0b0d1066fe5059eba4e265ca92b43cb9d100018203455c90503b6e8cd01 -0x7157be390e2b27435fc837280bea6882434d995d993b0223b8c3ad0b1b70119c -0x92df521f4555e6676af81e2d43110c0255aaf505138085d38403c175d31f5bba -0xa3a48648caf128a50eafec780e2ca6196a198652950426a6ac3a8ce812698b87 -0x66a738fcb4f5a62d37949f731ffde35dc99f6e9468a8d1e7997f69b61d71d70e -0x1553f19777f922cb4846c625c21843c8d0f795cf22d23caae8e8f232e7813b97 -0xb778b400bdbd60011de684168e88023b71b2840b4c804378776670c2919d8ded -0xcdb50986539ae3f62687a0128652f7d1ab50b68e7b4a3cfc1e2ccb96885193d2 -0xed86debaf0b7203f3eafcbfff50cb9704f95c3cae1e041cd4a6b54de1e7fb6f0 -0x21a50ac7d926cdde055a1eb81a5e257b913147c6622453c502d44fd00f17fc7e -0xc6e5f73a0480330b7187aafac9fa0d5e23ff0edbef8057e1f11ce458c474cb81 -0xcb961fce361788d1913f65edda13253c37a78c8ccd7c780f5cacb6301e53a287 -0x21280e07746d30ed6a167005714b8bf7c3f8f41541eb167aa1f64e2262882f59 -0xe9ff3f351a9d51dd31a1268e39f7158ccaaeaa3667f70d424553b34a3b6efca8 -0x7b128be75e04204e84f2e2d1ae0e6217af56253a85ad21cf8cfb5eaf9ddd399f -0x61fd2c35ecc91d74df1d63466b08ae38d4bbb82d2d1609053d553c14ab0cd784 -0xda30b6196be5b212b2ff7a2b90408818ce491251ef19aa1d9a183e1ab23c12e0 -0xde41c71633e0e42c5f9774c93ee6ca55e7427eb536acdc7dda3633cab167d0d5 -0x84c79c508cf5de41dada916bb0fd4ceeb480599789a69314bfba19bdc25ce8c0 -0x6b3524521ad56f0182e7705320fd5f63c90b9a0bc248d0e09b0e178ce8ad5703 -0xf8110d823ea8ba397682448d7f3133994a88da2a6fabdfe4721aa9d18ab4eba4 -0x77fbf6d99ee5f0c4094f95fe4c3b478483dd463e401a2567e2a4e1a805556bf0 -0x6592f28345b3e7fb1728808d73f06c673b600c4d3ed342cbf232539b64b14431 -0x77af77b42150ae2978e662800b29cee8363adc46ad44b0a3c18f1f290fcb488c -0x9bfef8b6167c1ee3429add228a92a4da81203ec005778818bdcaddb46cfed908 -0xfe30b0fa68406f7fde7d4b48e4fce8a65a99e391ddf125c003f8beee4f4a98bf -0x367594c47c168c306d1d444753960c4aea92f2a5c0cfe73cb8b6a53abf76e48d -0xa9a42bf36ded96304a8ca0d8ac70aa7f1e6e2125741548a568703e064242bd88 -0x3093b630b6b9243c08c4ef6083571fa3131d87ade94b3a3ce0dc2509852f2e59 -0x2b68388687dad347d24c550cd5e85e2d645fef1b9f6d33518f589bcc454c9277 -0x22fbf6d39c67470925b76a45363e0ca045f14f5bde83ebf38b254216e9051c21 -0x66cdc113ec0ad1985cf6e663415d4e1705ea4fa1b71d0ff344adbccfe04d84f1 -0x59f42881cff2c94d32fece9244ed6c65003362c675ab66994f624a9293900e85 -0x27815056b2e3a94fa895735a3cd834d6e0012f310b387c6056d657ec77ae67fa -0x365ab8f9b2f5a200ba5fac5ba0fb0b37307e70dbef22bffdede64c7f9b2f2a0c -0x42ba16c52e177a828ef6a9b3fc9e52fbde783ccb479cf5ebf5a7d7968d2b6e51 -0xcf9d184192b0d26475b9a26679085dd0aec9fc757eb728bb5258f494bea1288d -0x6ca105d96a5b5302d93b05a322f62e7c60aec55cdb7816a9179905b4e52c18e6 -0x3a07ecbd31178c20d58fc72672adee74635bf85dfd0c8cc9a0a9a3b3d9fda5a8 -0xacc913be2382e17c995d6fe79a66884fc65655e7cc405aa11f09f061b8c4b7bc -0xe381aa7b8b69cda39a8f04c6b6d03bb5fb0c988ebabbc386645a0d98fd55bbef -0xc94de6ad9a2ac7696a5a7bd60862d19509d395cc3e1537fcdf7480a0a502d466 -0x379d4da606bc87b80c84f82e7a1452f80a0ae4aa2a9386648dfd4a1e07b1cd9a -0xdb010765043dfeb5236a8681341c6bb691a75684b1e404174aa4256e2278711d -0xb312935203a2e9558cd27dbe1f04890b3a071bdad44515cb57e7887b42a93d6a -0xdae822d4a50b560cd5ca6f5833acbaf7c1bdbb31d87fe991481a665f5d03298c -0x84bcb00ed1145d1eedb766c1ef65c40e730616b6c3a56a330bfcec18a2c2c3f1 -0xccb030faead4399e86c2b30739f5022abd8c63b7f01db3860d53f1a4c0250d76 -0xa05cd5a1ddd4d3f0e57992e0c8fba6fe0e86f5e70ff94c083ca8458ad430a530 -0xca4e84416e57d3698549bd20b0211b6937fb746ef431cebd5c4e3c575d83032d -0xc0209aab834d4e4a4f5e9627f00b80cfe4ddb0546213f1d6844a57eb3d2380ec -0x84956fb32cdf9c1bcf76cd9e0008fe4ced6877d8da7fe9e50e99cca72a4818c5 -0xaaed7c3bc6cfefc1f6e78722818b569a35b090ed24335ee67d78aadc94cfccc6 -0xa2c060821bd71ff18b03020c6d887c09e096b2ad3a5363352d7fccd4c7205a7f -0x003361e038186aa125abbe2c82274fa5ef37e5e87a8e9dfe0500f84b4384bda4 -0xf6360e342d11766139e824c66463277c5eeb3270ee74e670f51632927ece4aed -0x6660cc009c442966005adb63dbbddc94622326a7fd84abd4630c1f88ead3541e -0xd7febbcab55e23a5188d5daadb38cf43c2139da05c9aeb82caf2ec9313e9b02c -0xb3d551660164a19e53c345de66aa29f909ed1abe39d2430d6867912c9f38f30a -0x7022307eefef3d2a72b13c285dd0d8e26abc4a77b9676ac840b23902aee3c16d -0xf22d67d78362e390df990b686740a63f0fe31f2f5496e4891a1e6a4f7e36e83b -0xfe1a79a710f8093e107f0837230df37f62a77594a25ed1e094353c05143bb4c7 -0x6db83eee6f4fab6cc3f30c02e45736827d9fb04dc8bf713bd131d60dfb9849e6 -0xb87954fb1ba8b438109a7231758d678e0123234d20e43d21f074bb5e113756ef -0x7df1ad505578e6bdeafcac2209879d16e01a2865a89687fd3085e76c6d40915c -0xd17dae8fc68463e3be3ab0b2df9c74614644d7230f434de7070bcc9dcec2f3d4 -0xa78e565e41d2ea16dd6c45472f34e49dd72f0b30f7ef0b3dc3849f9efd9b5a92 -0x9756c074335e165ab917b7b95d20da9b81c63298889a32e56187a5e4065bff74 -0xbad480bb90e0a2dd65ede6254a5862c0ca04f0c44c86330ab269af9534a12997 -0x2eb3474b2630a5771018c24e1545a2e192760ef7a9608deb33958c1a3a9e4c21 -0xc39a4e0219422d6185d61f1b06c89e9fa4000176fd99a4ddd72977c31e239406 -0x6c2b8914ebf26c2fb7fdc4b8c1f5600267df88a815c4c3fff49d070c201954e4 -0x94260fd4760b4420a638520aecbd6a40dc4d592774879bda3de28c00b275772c -0x72f0d202001b73696edc6c61a500696cd99e04a2cfda9a829acc3e7ba029b755 -0x24d29da2ee6a3f4f494e6d0024a6ce0fcbe56fe1a4125b5ce255a4e5fdb742d7 -0x878ca0c678658be7071174bcbdffc062d3a46aecd83a02d222174bc9408c2082 -0x3c4293a118e00a16a514fa424382d7877b306ea292086dfa9759d339909b4429 -0xcbfe06bdff431150ce1d6d1b658771105d0a85d52430924d105120ebbaf339e8 -0x2431dd0b36aee83506df874c7c4cace2931861eca93e9412808b1637f0b0d83b -0x72b0568b376c111d9f8ec9e083359d4bed8367af1aa6388b0f2bad8390e47d87 -0x2e328fbde171895b6c5d9a78d2aef403c0d243ce78246c7ae1e536e8ac09bfe1 -0xb90c5b6ead1af69002c93302fcb592ce704d39f29d0a1a0afdc2fd2766c45a7d -0x7e43c94469b30d1f8eadb845018ad18474fcfb64b25b6bbeb39499b89ece8db3 -0xf50f67ce5466f353b54e5016c6f3bc697f04313b50a11f0334aa6c2096f6bfb4 -0x532214b5c5c3fd0d6b6b2d5ce798747c2bc449dc29b04adabc96af7b5a72ef3c -0x9ce90a644749b49dfdc5ba74973a5e91ba34f5c1b1e1705b05e84bff010cb47f -0x433e4c00c3988207db0511e295e5e02e064e2b8063f38e01ba44bad0edd6c92f -0x02f6e3c41ad99bc18f88f63ce05d5174f8d4e1ffadb1fbca6252eec474b9c7c8 -0x61f7d83e4bf943f04b375c2375dec6ce8feae425b848384735c8304c76326af3 -0x8e2099d5a2f96df4d4f174810189a7286654303eae5d1c24e521f38fc45d2065 -0x96a40d4ad202f80674235e8eb326d7d6e7aa35c77f3eaefa429e03216d0585c3 -0xa572183c28fa00981f1c46e7031e786ab704bd0a0021534ec6f02dcf191cfb90 -0x6b8ffadf72aaf8cc13c61f74d2fb4c3fd2c7b345917f22c76b6b003584937fc9 -0x50b36426ded746432d3b14a9fce69602a594638168fbbc3236ee92cf5ad176b1 -0x5668783351d73a8ae756b437d3be6fcade55bc3b2b7d772e883e65e1beb181f6 -0x22be410a993296940a0349161ec2548796a8b9427ea584343af1f7ab312b87d4 -0x0872b9dc2046002692774146b9bb30a513923b954306683a3b60f2b67eecdbf9 -0xb2d12d6c92eab13c2f8fd5d634cbfe3c0ad3adf91b45b084147848906d6514d3 -0xef0d5524be6109593e6b6ef0fa980366d64c681aa03bda1c1159579c448a7886 -0xa1e3c44a2fa3fa225f7f38c8703c9a0191152568621bf7c9ff6f179aa7d687fb -0xb277923c3d60425ff07ead3ff65d0a606c991abee499b08630c83e51f6a93a87 -0xb5af8cf334b8f6ae163e986b670356c676ef510a7a0eb381d642f9cc26e1a688 -0x877a3f56d4872a05af1c5d6f9d68b2f67dbb74ab418636ae0e150ed55b2f27eb -0xa88bd11913045d67fda6844b3f6c8edf9870b0136041da4805d4d4931d05b82f -0xb76516b0d9bb0178895523f16ae1545445028444b52c3094b2296b4a943f4aca -0x5e57af935537e876cc6bc55683fbc53367b8054c1eecd085e2cc77318c7dc859 -0xc51e0f88c72de4cfffca3b7eabd957c929898f60b167f8d3b0ec94d918a261c2 -0x355e5b01c11239df229c996f2944e15b9ebd6c12fd5f77f9798f4d3fe27d8b95 -0x6e710451819e458fa845186eca0b13e205a886e496ec0a2c3e20c7270dbcedc9 -0xc4dbbfba5e06384b1ad97f3f2399175756c6f9a9569154d6c5fc93fc37429a79 -0x1918198c6ae2fbdacb1935f3c325c1a6b9ebccebbb5163488905c022cd22d1b0 -0x6ec925fc58e24eb74a4b7a148d18247e78c0137f3f489960f5a7d8eb5927dd12 -0x18950ea0eca07a80358de7ddd06be6703b5456d00de8408affee4538daed8172 -0xbe78399f12f8b098e84e0bbb7384fe73c443fa9a222306d5e6f3a2826e52a6f3 -0x9bf0fea6d959f7c8442e40b5a80ef4b473758d73582573c020d58369bcdfb94b -0x337bb78d8ef5c796ddf64fa869f31ad756a544c4be8dc5e48da9412fe9fa35d0 -0xbd70c07e4c40dcb3652ee616eb6dc0652c99cbed8158e9bbd224e931dba96b9c -0xbe9de990a7cd023145ab3b5eb57a9c1dd70c0bd70e30249a989611f7e2a1f635 -0xfdfc28e3fefd66dec39a082f57c68a8ef85fe2cd116794cda4ed9758c8618b4f -0x677e0806140040d0880e3ad4f61cb282708f02cdd7dec2408cc0d2b23a5abdd4 -0xd8fd55f3577293fd0eb93c9f56acb21b6b6bdb115f7c2a12d16b836d57de2136 -0x39a3fdc3cfebece34272c076d5b3afce4803d305c857680db2aab7f475be741a -0x4b4be23326d51e603549ab86c681af5d6a7fe6a279ed385019d33cb98027fdfb -0x56949d6970336430f287eeb3b3141806b04f8b95e80f142db062b69cd725eb43 -0x2bb1b50e35bf50451918b43fb634b4fc4f2cb7307a711b7336633b2cc85e60d1 -0xfedaaa467df28e524d71fbd352d8cb5ba6b08a3b8f4b1b742e88a7e2fde382fe -0x2cc6ccaab644bcf412c8cf467c6538c558b24f7decc16d1a5974d63b1cdf1834 -0x0f61861bbb20fd743815ee61ae55bda0586a3cc007ffc6ed2571dfc9e4cc5937 -0xb2b03d12cc05e2b6de9f19696743f5f84c7f3daef63520817ffcf95099e96854 -0x62d59c8ea5b1e335a341fa83edbf23c9d6332993fe36c7facee90bc74d917fd0 -0x4c81d71980a64a3bbdb55c0375e088451c2dc473b8ef825b333e80abfe06fa1b -0x0d6fdbb0f9d9943b9f2a20068331b2945521013e04ac1d623040957784511c96 -0x1a1473e743566307e754c0ecfbf0dbbe8f2e4e9661eddc775b861202d6aa466c -0x6fce6f8bf1a496d1baff7ea5c7c74ae48186fe1c3c9153281f661940d22195c9 -0xfaac4bbcf835153b18a89a300c643d3892626d18c5195d2413f663e6ac12880c -0xe37bb54f7f941b0ffb49045d522c66661f6c9d4a2b5088206e19f2e0f69ddf20 -0x1c54a804c8fe9c46105ad040699767afb865af1c543ab2d23bb336cac5268ead -0xb18bbe52d740309d2992b90e1b1dae5c711533e2bf77e67607085aa2be2be2d2 -0x96f1e4b18d12aa2ceadd5c3ca6c9814b42edf85e2052950f95f9cd40590590f1 -0xb11c80e58242d956f164b51021e8aff54aa8d467f92b51bd4a97e95dc9924a23 -0xa3564165de08d67db85e4321edbabc172d90fe3c1807a4e048c23fcd37cf9d8b -0xd45f93fe235b8b2c822258a20fdea572da648f4fbf7b289b9bec66af9974246b -0x2a97819d413d4c59d52b68724f2feccce40b9b744ea62429e7372a1a06c01d4e -0xe56a10fa1cb86e40f58ead2f202773112d4371a48d2764649b43bebd596c5881 -0x3b2f7357adb7156e6941eea5d7cecdedd5a6f82ec7a272c539d65bdf9befd60b -0x315c904554e388540cbf43da00f4717baf46918f3d89ad432912b1d0739887bd -0xed28efd19b1fa28e96106f5e8560a086b661eedaeb9ecb2097edf8728db03c92 -0x2dc60b8c6b1c250316c18d9d316669d20063006bd00e8c1d9eb3e0cc0b6df721 -0x094799f33752f7ddff50035f23697e2f3dfacbb43ebe384e3ffc38e54049eec3 -0xf9286c8f6fc5b2718c8fb2b216eeda2357868835d9e01fca1fe62082fa7331d5 -0xf8565453d4ec53c28c6338e6f7054f723b520451890615e88adcb5f82c5ab12d -0x69249a4d767e1e0b507ef97e02c9d4a22446909042fdd9f8b06ed49e06287a81 -0x882cf0502e1e9b6e045234ccb9832157d1aba0480f09ef0fb2c4e265bb19b7ec -0x95fb4026d8fefb95ba5f866c94110d0cb755b330c83633f33d03252b534a182b -0x72d0cd153c22c9ba206c6e298f4142589daff06a16b01de6b94d5dc86d7feff0 -0x7b65d46070ac99c85dd253148b0c845ae075a5f8ef5d0e99de2e7ed503386b0c -0x672206f04c300fb44d47397a2a3d38298e5c2d5d6c5ddefbba39c5779b975026 -0xc0e615b9dc2d12975426842b0977e07beb22cc8e1e27f667f45a2616da003a50 -0xf26be143e42a0026647e7b93ec70140acb5432b6f0bbd808cfeaaa63f1c4bc26 -0x026622e86926129355bf237905c17dd4a22aca340444a4326956b561dcb08299 -0xd6d728ebd73dccad1ef70f4638e0f0e456b9d4c08364964172f20070e114f384 -0xbae73ae0b5f2866e2264dc15d5898e8b6049ba35f74eee1f1e92abafccfd55fe -0x1ea4bf14ccea13676064048650404642d57929561c3a6cfd271b70ef7c100fa9 -0x61b9ce24bf2293c9f78152753cd2cd6f7ad82711cb0b5853eb6c946486804db9 -0x61073af76ff5195fc83e10b9768760909420257e11004e28ea84f2e56d035798 -0x5b3bac9e5f8c6cb068a39d070d6f624c6d15becf125e1f0fad599a3e2ff7a350 -0x5f4ed82e9c542f0a108c25e6364c6049e367fdb4e1df222d27c3e691a33ae6b7 -0x3ca76e37abe6e08c933044bd89f1dd2574b9289dee060076cf91476aa604ceb8 -0xedd4992b16b670b83101966c082a55f4e1403aee9f5ce5f2447b6414ca4bd5be -0x30e54ebdc40760c19684dd3dda4b682fa62ce3f90d449e04ff470d8d19218dd8 -0x18275152af72c2dfad5122bd0c4f21eaf980c137509b3b6633f8a57908d6c491 -0x9496b2d093698cc9e5ee02a27104d83838b212d098de2b70d620d3ae8392d558 -0x79493a72e721a15279af3cf3e26fca9105b78b8f13cb307d402eaa994620cd3c -0x96ffbd87483ec3e71c5ea8fc3bd0031e18dc735e2481bbf932a671e65b27b464 -0xe73b265fdb1667bc0a86180a75bcfb6765d80e666593bd99053a584fc0ebf49f -0x3152815ea31f0e9a60c975e7a87776ccee6cd39a9cff3ffee6345c3467496816 -0xceb21960efca0386e9ce52db012f8540a3986e022bc13f5f4a3664712bf5ce1c -0x7f0bb0f30dd17e6094dce61d380f63ff8470750cd58b833f6fdab8c0662fab79 -0xbc131e38dfd345fc6f6729e3dcebe12d74a144b162bc528c6e0b0e00128fdc30 -0xd47275663b67384401f36bdeb509234d719c57a2e9ca95d18a27cae995b619ac -0x71af03eebd6bacacd90882d9fda3030c454335ace852954a5fab94b7ec12d1de -0xa7ca4a483fd0a4d5cd8d208c01d733783e226aafd66bd6e7e6732f5e5563da66 -0x16db750468cfd54d1580965e21261414a29355b456c69aeacdd597fe15778cb3 -0xcb8ebe0cfad49863193851f5c9219cc9d2df344110d1252ad7c9b1be3f52a995 -0x645f87a3f193188726132a29620958c95fd2bade4b71639ff7946b72c02fb093 -0xe8c12d1d93fcf54e8efd1e335419fcf300b005a0e59ca8ca5e2391cfbbf97b9b -0x8dea084a5513a0d63b24570488f44959df8e9c7e20efe9829737fa3705ae1729 -0x04a6cc534dad68b775d23f23c412e0ced16a640c9635a09a4121cca160262b4f -0xe01cd5d68ab39664677a55b715f6d32b0a7644d2776694113d39005f8d44a978 -0xe7a6711d25c40580ab793e1f6faeb6fc8a4a61a601507b5b016ce9033d005c0a -0xfae64ed15ebf114b74124df11bd7ff21c3e3019caad31e7eda40d3552d9f72e7 -0x25bf541e5d199266b98a90e5985affccc9674eb707c115e79792e25ae84d6a8d -0xec73f6cdbd31cadd56cf8569efda85e2331bd15136c5f5e5b4bea2bf71f3a257 -0xdccd78787584129aaa70a797b441332e5e2444b2dada95e2dab10c173ab2da1e -0x8833448c67bd06408532a7a51551b1d9442a2a2792e8d896f61eab9512b3e824 -0xb5123ca49c6c79e39fc3156d6f15b32ee373c63fd8901ecf851c4a23f9c97950 -0x61201816ff48ed3acf751eca483e1e414c4bd88e1cc4023dcf03a460354d8327 -0x4b71a96d4894a46db3852f37a699404e698a5b5946d72e4be04421fe80b013d1 -0x3d0296ed95113ddfdcf7192d813bbe55dd386d7081f8c0257945fdce144da6c9 -0xe38d04d284a0fbc1033406fd6cc9409c9759e0700726f35a120c11d5df4a19af -0x4057590e1ca432b7c46e6f0ed34928d5fc147f6816534a03c92b1714e03f3ca5 -0x87e57833c066919c95b2529097f3d822d770903e74a4de65e4d935e67d4e4b59 -0x6e09c7648f36677fac12400d26030c616359df0bd20f51f42a805fd03685121d -0xf16c5fecaeadb73d3e8c2503b8f02a6b1e7b2a210b34f54eff888040d742b1ba -0xf2c31404479cae7cd753a1f46b89d1f6910fc0f3f4230657dd0723249acec1bb -0x414d9a53856e0ad076f3ce42c7e5a1eb975ff38538be5fe14488b442a2eb21d6 -0x6fb8c48b61977d5a2485f44a8a637e2107f73ae8813467de2469ac811eb40517 -0xdca87415dbac87a6885e45faf107784b043cf45e0addc7772a10735f38e5b9e0 -0x60929a32bc21c9f6dc2f2361d28ca1823eb30cfc63713a3d4cb2ff10e6d890bb -0x212b8ab46c9901d9a544a7ea1afe2c588e7c3d4a75852d27cb132636febf2956 -0xbc13e8d3b955c298ae8351a2b399aa908910f9e8369b5efc88c4140824a9ceac -0x88387a85adb577bcaff96616f0d85ff993ab91567ccb2725749a67df3a545e28 -0xa2416a18e2ab94d776e38f483b6eafb6570670e345b39bb30c31404d252f12cb -0x0ae7d86242fb1fbdb79877af22561a91709131b03e1bb2ff706edbbcc2059f35 -0x055fe9494a166e540ede3aeafd00b677a63604c1508e9976fed86446fa654961 -0x59c0846ae516be2dbc4243daba7ccee7a36ef1062ec6a957774f495e802da210 -0xe9b576c51da40247e441036f7e5463299fdf8609810c47b3af03e06ec2d14585 -0xa968b0f1e204baa79a8be5f2c2b7f8023fb1725745af1843954ceb9244d8875a -0x34797788c8b4a486c853ed694ba750dedb6ec7f19446af612e259cd85609ee6e -0x8babd79b4ead1a000ad887c77abd21a2ef50c86e0af3b6823c28500e91d6379d -0x7eefd8ea15cd2f82be90e24721d752e07771379826cef0225c980a5bef5fd722 -0xd43819d8099bfda736638b5112702b1cce20118bf8464e5a3696f677b2d508d8 -0xef117d526645471806eaba84739ca4cf6263afaefd714e65b09fbb96a43cf7b7 -0xddd1b0961b5e3c87e689d568613a85573342d5c485cee7c751f913fc10ca26c9 -0xf14950d3172c44aa06b79c1b55ae2c3b9960e8ea91e67193cb3b0775972a9e1f -0x8a21df1e8ea2660b1c63e24a7f2e031d8706cec3b43a6c16f946ebc7d6fef148 -0x0d009373abce3ff681de8c6dda4c1245cf274d84654ed1db1b4f313e3143e5d8 -0xaa51d5476eee3aeca915b8be5c8f2b068698cc5b73da9ffcc973a18387795460 -0x08cc715085a79a12d668d9ade103e61ff9a58effa6b729b54ff7cd3e2ea70535 -0x3fd3f2a87cfee3e316ce5368891c6106b6a7e72bacc839eae7291b61dfebbd6a -0x952ace8eefa9116878e4f2cab6f74406af636889be393e0e61f87995de192f06 -0xcc81954aec88549b2914ca2723dc8e86ccb77c8d594ce417df522d6a4ffaf5e3 -0xeb4ffd82cea543d340e53e935943ab8e7e7a951054f57a8173d49c359c34a6ae -0xccaa66dc534b53f5dc1f6f901d263fd9d4c8634b3f93fbc7b7511aef28d2e631 -0xbe0b09688835b3a105a0d244d92fef4ed91b4c75905900485c42ef159ca338ef -0x908e5f8a8154f03b4544ceb68e0ae2cb302eb1a9b0ccdd73f1ec2224756209e5 -0xe556dbee313a29dc1f072babe425fac04fa9afedcbec4ab848e157324bb328b5 -0x2da5c00d54026ddfb42e3a886a4d05c565dca33470a2414ecbc79750f563416c -0xacd4a76265b3dd5bce68781910f85c1fcc1efb90f6e5e8bb7796afb2c5973b39 -0x92118641937e2401f91902c06f89f77c01f16f63214e7f689acd03f7bcd10de5 -0xb78123b305ecf463ccfcd68b87dad99fc7f5a960cbbc5a47b02e436eb0fcda35 -0x78666d8a94049797eb4af3f5adf17adf8d367162992a9d03bc7927a355b94176 -0x46ef2987fb47db790534127f938bc0be3231aa162e3c8eed468be20020a5ccf3 -0x400835a00e61ef100f1f4b8a82a32bc2e79180b15ce311f3f12734034ee219e4 -0x280c5132261c13b7211c3e2efe8fbe1882417562b90fbdda0b65b5d909220131 -0x89af8f8663613eb5c0e21a8b8a84162a5b8261c2151b3bba10d6ed20cd5d6012 -0xbfeaac91de0df4ced14ec5765622f6d398da95623aeac2a0e68f4c51f344cb51 -0x8bb758aafffe0679b02715c1bf4ece06e2e087d8b0982164c8cc7d31fa31933f -0x3a4cc8f19353caae6f2b1643bd0178315d9ac85631c6d31f00990732709ecd84 -0x9ded24a6d17f09d1470cc576fddb4d4a758b0ba5bea3d3a6fdfb5982d051fd2d -0x3dd4344c9b1228b03c149e931747580548d13128f51b90c67fb2aa21c218b65e -0xb32ae6d699f69ccd35f330349968e5ae72dd640fa0a443e8a63cf3930da57737 -0x77b7874ef63d10e13b3b8b5f15c3f6505fdb64f54aefb9785b318d16b3989484 -0x956dc3235bb89ad34a7521e1cc3660825750ae952fce7ae9f4ce4aaf8cc1338c -0xf9387eec657a5a1252c729de3fc7edff6c47a614bc50b2a8cc8f416b41099f76 -0xfc9417e44ea9c5fbdf8d91c09855c840c2e58c31cafbd6010fdccf0fd196147a -0xf1c834a29c7394a8d399ad0cd2714d363b10f8fe8dbb7c2a10f86a0f679680f1 -0x8b1d4d4ceda758ec07397f6da78d0c14a7fba9ec70e5d2a54d6d586fdb1da72a -0x2b26b7404e90e3fcb89ed157141ee7f792359311e4052a444142ac23068d3ae0 -0xbd36463ce33305881d5e10c9cd8a1debb254dd74ec83be163638497116b67051 -0xbf43878d20957827cb29cb8c643a73efe1b04e66e207ba9716720c3cb58789bb -0x0588bfdcf9e5c32f873ac5089ade261ff01eade94765cca783d7e283469f40a3 -0x656def785aa3b30498c9c45740cd3a88561d9f586d45703c69fbe5e8f031fffb -0xd935fc30a814bb85f765f0f0fb34bd198ebb9577698db8b636fdbc34917c8b8b -0x5bd325b996d26ad1d1149ff98b93eb5e0d6013292e4035cefb949db0ad06f07a -0x17249fe435f274080eb9d03a3acdc1de93d59679341d052b787862c830ec34a1 -0x2b2b051326fcf00de3be4b20b32e68dfcb55176854652b27cf6bb93ce999629e -0x240a4803d815ae94b86b783890f39a5bf55a910a406f3ec392e0b88250e6b1c7 -0x5e21c2d2ac821c18d94e82ffd04c85d0a03e1a4a8c24d07ca5530907818fd1fb -0x644c164faf6a83ac1022e68d9c696b5a55d6f255a235d3af77d8ede2889420d9 -0x833c8e3a109f4f9887442e10a16a5ada599c722d94a3ad77991e377dbbaa0912 -0x4f6c5e6e1b2114425dbb07d11a37e1d86ba62d5f544840c4b7c281e2df859922 -0xcd00ac7f96e6cebbcf8e12f2b37ddfbf43db493f85519eae412f08e632e83314 -0x0ce5c94fcc3c211958e64c05635fa8160fab59f3c429ce8fa05e184f46da2763 -0x772cb24f4b109f0aff5da791c95ced9290ae51eeea69f8d24ac48f7063465a2d -0x3677818d1c45f7c8bc6ac5d226602258d40c93fb6dfb44d3f6bf377b5c9e91f4 -0x31ee376f0fe59911ce0bf0d02858eab8aa7ec0128fb8d10fc219fd60b10737a4 -0x2dde72e15d3ff769a27c7a003dd6e870e2ff4d62eb63a22046700ae2f474b9fa -0xc4421d5e54fa3a4da46cf48f75cf670923b017b234c662f9c751beaafabc5301 -0xca9f70a62ef23a053dddc8e134edb0ad7565fd7879544545e0cc50f70acd8794 -0x8cda89907229798d89fa9386cd15561fab00cbd7f7ae990dcfdbd5e545f3995e -0x207c4b888f25b2160ba1f4d6c4368afc07b165b8de455c1600f61b7efcec138b -0x5b26bac386ce7c9ee080a2a9c739eb903983e9c16903e0cc1ee56613beda37bc -0xbbbace4377dd4e7f0640979ec55848765780403ebb59a3251835f48b10776d9d -0x51c8109f5e244b56c17908e1dcc443aa8be266c8c9a191f46bf2b2ac0e8d2f84 -0x9d4a70cbbb20d516131df86978c434c06186e2f6e24d01976e6d92fb85a079ae -0x7ed8f8f2ce7d5bc1b8798090f17b384988035a9be2cf1546c3d146abd9404433 -0x957c4a133df66abcfbc725f0a4d4f473c808b16ac5c32ea63f3b9421be807636 -0xd2c564a20e7143896a49e6f73d6c7f2740bb61025191534a0eb6e3e7683f064f -0x070e625309fe49d6937b7557adf5e21c65e1a62a4a34894cfdc91bc2237b8d0d -0xab7fa632701ab208c553db11b26fa36d99a49af5f21d3af530c5c4dddf40e476 -0x10846152cb682657b2a32dd82b891878faa4f7581c7616a3e22f746e3a917964 -0x3a8031017a93a2e8a895b374ebd23be8f77e7efe36ab2c1931436760274f626a -0x6cddc7390488ee8f62aa0f8266c8571155361064818405ace62a455084e66bd9 -0xf01b4ffd11f9b839c10a27e11378c32e835924fcf7e7d2a071161864de85f142 -0xfc6209de33a4ddf25bbfa8cacae1fd2d9da03f06cddb58d225ce5e12f4c56e73 -0x75f9b945ea934701340f95872af01f56caecd94468de72d76ece0c095c360822 -0xf33dceeb2919886ff17c220138ee0c694b433d1a0c41df83462270669b2ecbac -0xb17d32079db417fa50952bc389feef6e94384765821d0a959967e74c4a519a7b -0x651c1f8cb2671fb95beb432a63e3601f06748bece1f742e225d0d5c3641ace4e -0x9e867941a73a8b2bfcd99eeafac4cc53a8f82c13d1be6661421f963cf1f03aaa -0x1bddc6d19317278e30ea105a237a1c11831529f10261c1eb12baaa2cd1a945c9 -0x4b2a21a77daf275a7a83c2aa4076914efa7e0ee24be04fc9d48f0bea2a76ffc1 -0xe60da2cf892d1ec4995c4cb5bd8b7a0284737b80a205bb5b1649b019a9571c50 -0x8a937b8466e865711c762aac151fbda9bcd5ddb80d21e7bcd423ee170d49f131 -0x1ac3f9ea3cae2ab60aba77fdf44aeb745f651c6d00b15d6dc6c33876b358d59e -0xfd3f72206de0ae6b9ce0f74a480e37809bb076b14707d1b1fefbc79e221d540c -0x3ea885c7825b8ef169e21fdd16f326feb0485f040a494ad6943993e8d17b345c -0x2689ed57d5655659abd1a0f252693a481ca056199b5133e4e9db85570d8b5d3c -0xe2bc2ac36d2553842003d0ee5568f62d8fd2094c4eaa342bfc77f2a07d8f4f97 -0x1d292fbd8f06a80c453fa0d14a97fb18b1400eaa0ec5b144b309dd71c6eab177 -0x1b50e383c04883d08fea13063aefcc55b3ff0f2a453ad1c5dd8fdc8759a5e747 -0xda08e94327def0eadeb8470d6948a88919e1e3add447f552d1850bf1277f35c2 -0x360095cfd8193c5259558331ea06fd1ff82922f660dc0f7cd5be74a469c6714a -0xa7de5dd68fa1e2b8625f37c623664cf3abcc852065f6db02f925558db711b456 -0x5e7eabf398c8e4b0346b4fe22cb43b1df7452198bc755de6e34330e455364e71 -0xec06b027005acdcc4ef2675d86d821dc7b9100fa8ec5848cacb34e62b942762e -0x924799b5fd6fd68cd15ff10eb88f529fe3bfdec089a168b94a7e26f4c29e68a6 -0x1c7e8f718521d75de65c6cc43702fbe9617723e4fc90b620db8864f9d57c613c -0x7f5e6d891c121e54772a9577eb1839364dcad40cfe777d30c97cad154318764f -0x95700ae24c174b6ca6404b9d236c80ba1ab06bbf05455bdd5a3af4cfca82e8ed -0x57279a3544befe36ff60facce29d656d7314b0ea6d72f1da0bc80a2965631cba -0x8ed922bf0d4384b9a4239ecf5c887d1ca33789a5cb3208cf116c146cf020faf8 -0x007798706d40db7461f6a2561e7f04ac6f9e76c6bf7329422a368d93821cb972 -0x1f9f882c49f3757d4441b4c1d9495cd423b85ecfacd2e9ee37b58155ffd2b977 -0xa08381b725c8c2ba6f8de44be2c14559e8eace7268b2cc1a8de429809f0997c1 -0x9028b32fa4ea319e1ac58c1e210eb8481697253e90fff1d8f339a162ea333ca0 -0xc5f964abe8ec052cab7e81b30d56c51407a56536892fd387cc77234095e01907 -0x4005986d40e42256fea8129646b617bfbca8db4d3b499681485c5e6415371f15 -0x3ead635f0d2e27432d5b9b35aa56432f8a564c3d8bc06e42002548e8f5c606ef -0x3c24c12c9cd98316941e725cd14e034775ce79b411f0d518fe48c1420f06b027 -0x5e99bc176b7932ff9a37a3133e7e62f5ea0938bbef2be0379df4ee2f272ddd7b -0xaf4aec75872ccc5695e94e668ea9203d8e9fea1dd531418e38ea4340df6e8ac6 -0x1f9716e852a01f045d124579d7c9a3f8914187f0f0bb591cd44c8ad741a06698 -0x0b26bd482168d5fef31e7a71d6f8bb55b719219fbf395853ea350a1602981d6c -0xc5401cd8edcbdc8ee566baa7602fb9848fa19c1a04e75a2e17b8b146d656ba3c -0x2357f0559607d970c0606e7eb34e152aeed2c856f9906e6850708301ccd8b6c7 -0x0e9cd2dc937a9a8d99812c9220fad45a5fc0f34132fdd38f18570ccd315dbb1a -0x077b1923787733edb85d486093957dcf43dd370a3bff339e27b436aff053dac6 -0x38cd5fe45d3fcf1a5cff00556337254bb923f3605798139bef82a14ccf223bc6 -0xd04852ebd32ca3655b126f159b3744a126c02d8652f83affea4d1e49967625f2 -0x9556d86a0e00c498183362d9954f520d5d2d3f1c91880726c6f2ab9ecfa93a7f -0xf826e56b93641692e60296b7dbb89eec36d416fec22af44eb34cabfc4d5af59d -0x69d3b731492dc58305dd98254e33ff151cbbb72d410da8cfd840164cc1f718f5 -0xc265782eaae4844aa75b239bb17416a6fcc306e551527c1bebca098b14d81167 -0x102c9d861775876c74a96d434d4bd007ca401ef7bb5c950a368b879bed8e4874 -0x2f3ba5e9350163dc29e85867aeaeefb28a935245acda72d02fedc9743e99069c -0xfeb1b2e14f71607f6e5ff8178c3bee52d8b1e6ff610f80b6b0c2aaab667afdde -0x8e718e39bf3bfb8ebffe09248dffe50a1c3440e64572519c8be648ac4bd7a68e -0xc95d206e60f392a31d958e5bcfb8c2867090e2a86a3d86681f484c8856821023 -0xae7de0fca02965586856e765ee688210529aa24ab0c52a584c46bb4e4c50b249 -0x1a42cbcaa90f19e085227a316ed55ff94a6ef3f2db0318b50e27a14c098f8347 -0x2d1dcaa2349d82ece5ed382580acb7bbbf22377c7713feb15e8afea306356b83 -0xd2868d6bd940a990c3c231923d725f16e4747d676aa3d7508f1b5fd7cf5224d8 -0xd2a0ae7424419e0cc32555880ba71821078f1da91f879d0e05063918507b723e -0x965b44bf30f6763671e10661ef5546af25dc0c5aa2eefc1196db21e454aeb7c3 -0xf9b9e6ee06a6e407ffda8392c6c9e67c6617f579a41461552ac3fd75f1294e7d -0x7d27c6b61ad7e5317c92206da7124f39c95057b608d13a6d4e48201972890706 -0x8bccd0d56a867e9c35e371131bd600031d07856aed7d2e5eb4e12e4afd87b42d -0xf421d05e856fc46e9aef6dfc94d5b1810498e6d25f1f0c832c0b14795c4913fb -0xfefbfff78f876cb531c8155bd7923317323d4966eb013492e3d9b39e22833726 -0x9af2d67f04a68a19d14e224650f103e93b1dc6a4822f92dc979b72af3c05f7c2 -0x19bb0e3bfec75a2c63658f4ce236accb9355c1c2088281236f0e3417fbc9311f -0x0308865d9509c7433b4c044cc2ea398dbe58febec1b2318ab3104e5412c71f68 -0xb66adfc03622a8383aed6d75afd3f5339cd0aaf9f1298cf617015c9d97638ab0 -0xe6f01d42e3fc278196942df852b57ccaa19d9398faa7c4bf494b234f429795f6 -0x91ba8841fd9fbd33f35254df16fd62464f3f2fe993186f243b85bcc7d8d21fdd -0x9d20296b4d927bc4024b1a817e6a276a7b210194b04ef79615863a5f0ea90ea0 -0xe554d5e2deb97707d037e4ae54a091e1c5a86833e19bea9afeb60f03807087e6 -0x7ee26ae51d36d936bb2b9059b6803d967f1d1b78fb4b361d9a57452f40c100c2 -0x2ddf9824c2be3f8e782b7e3ab13fc7349beb223f7b49e9d4ba375c4eaa5a7cef -0x40d093ba9689ece68af0f00e57659b5f7c761d81fb345d13f03f88a2a0ddff8e -0xe3853eab2f53f3a648042fac57d9446da0f66a115dca5827389f74a9f481affc -0x2dba464e4a6777ba33d6d916e126a314ccfb50be70800c28227c213f20170915 -0xb0b3ddb3afb56ce160f85b57d2ce8ff3b44efe4001112009107944e487e36022 -0x54fa35e0199d29f4a4f67ee0620c2131928041047fb87a08b946b11303b73c1c -0xfa7fbab09a507b8b6fd4ca8830a2e54046c1b825274656d063b85860b020b9dc -0x29b3a2caccf71877369791d86b89e30fe8a040a73415b031dee4681acc3cfce2 -0xa2c37bed8f8f6b7975b261d4170fba8f82ce5eb7d72de136803bce81322fce56 -0x4ebafb58a7e3e509f036df5e5238aa04c4ae11c866c75b8d69def9090013b5a2 -0xd236730f12345a7c6ff46e832c15e001597b2fc569e27cdc44b5e1c21181de90 -0x40faddab6fb83243f566de26bd4c5c10964325a9bc3d320fb2788f43f7984088 -0x601fcc69e3bae69c4bdd1ef51a389b9cc2f92c1ea037908067305ac14f92e944 -0x0fad729c1c4a7fbe380772d06764d6a389f4b3a1966c61c6551939b8504d65cf -0xd1467066513581ebeaebd7308263955aa26cf729da70e403e82baad09d11ee1b -0xa7ba863ee604c771ba87f18dc29eeb5b1b7e92e3fa0a030f8d6088147407eaab -0xba713e09b53426f8b8d605c55117eb970d83598f54319033f1a604952016b430 -0x39d4501c1fa9c3aed6392b17a03fa4c09d9a6b941abb1a7125a8bf7687d0ca1f -0xcc1b654d03cfd92b0e7690a9933fbbcbcf175a8b67eed66ae40265d0a04c9c93 -0x87f8f803940b942f8af98b6c8348720e5b10c23dce13e81f4765ce4f5bb63d6d -0x894b6d00c12f141a32c8c4e560344d671acd5f808e30e365255ea7c66a2b3295 -0xd602eb6db1082ea7b2de6a6328f0638651402798584aaaf3a027e9bf2af82423 -0x141f2fbafeb255ea40de726d34c777953f238234665a9e23334f7c06695ad729 -0xe896bfe2668755ad628612c01db505fc79468a28604ec7037cec482f0f8223f6 -0xa9bead9ec972379b9e095a0bba02d87595789374ea5079c120abbd9d272cbd41 -0xaa816984c17347ec7ac150190162b5e9af14dae5692187404e5c54703de72231 -0x36bdd2200c4d3e545a6610de4a9895c2eb3fd3cba4fb9ebd40db704343aecd53 -0x531ce08066421f4ea8cfcff300e8e5323b32541d94946fbbe8087527708d02a0 -0xd2d5fcf81cddf2933e9c17db241022e482431bcadc1fe5fa09c45adafd7ab3b4 -0x481e1cd1df7609b25c5a3deaf84be4533f203857c8a93c044815d2d531222509 -0x3076f741d692ae49a29bf26816cae2cb850a39497b65c17c38d99262ab7aa79f -0xedd8f7e389533ce9ffc2ee26170e73924923c49efe4eb74a6d97e35eddc5bb9f -0xabed204fe6e6fddd6c363e311148b9d42017a1d19dcdad47cd88db8de1ed6ff9 -0x5271ad95fcf435c5c3a13011262578b9a27574adb755f6fc2746fd94592e55b5 -0xc596345b4c8c44ea8243779aebf7cfef37d67c96f3c7787a99d5be0cc044864f -0x19591649fafd1843f89970bfb696af6243f96a68a86dcedb28298a91b26e38ae -0x0dc4ba1ab7ab57136e1948cf031267be2106458ce23acb6e7af9f8a572ad2dee -0xfda4e8b49952101d3df90477bb032a5980c469d4179b77cfca6a71a00782867f -0xe8e23b3071132b6a39c575f40afafa8f135f674badf2c12241d52fff29413038 -0x2698065ad143264f92e66efb1b1efa2d4f936552d77c283643939367271f262f -0x9d43e867b052faf43f43db855e241e21a65fdc3785929109cfeac72885264bba -0xca0de4bb59e589727ab3db057b404a5abd6622a51598e7f74f4574a1a6c61282 -0xdeacd6c2175214e7bee5a065dbdf7195c5b6a3936348d075c8508b6eddb891f5 -0x2ce2adb3ad4828abc09a470df944dbd51c364cc3b184eda72323d73192630976 -0x44cb13633e1ac6317ecba6af18948ac5ee1f1e2ef7e0e5265f461ca8c909fe49 -0x39da04bc78321a1c4f72f93d2b6db5c85ba3e51d30bfc852a222270a804a1057 -0x6e21f531a7ea4e8a07f6f8aa2f81d3404166729c16aa5c13be8099951cd6feae -0x72df332075871c44b799be0273f4464261ca2937f8718a093b0b8a94eba624c1 -0x7840d3de939704b906c35609ba4858e494927b113993c77fec0031f55c21dfbb -0x0f5329647e78a49e12281d7b08312e6332d31a3c5f264e3e64638a031982f8c3 -0x38153ae972c2e946382c636c562026a55a4f5913ccbd31782298108fc70da3d3 -0x656f35840b360c27aa38fdf1c0bec16d2e1e0d42d504d323b64240673aec4fba -0x29969cf7fc83381a874a3585d8b0db6bf52ed042af6d44b71ea5ef7e63016697 -0x0a0f84ca4f7ba7070e3cc830286cd55cb186bc698aee66a181be2e6091eeccf1 -0xf07b184626c38acde7ac833232b434e49ebdbe121ce2ef40fa66b0e32c8649c7 -0x0d2da18a1c54a7c411852c71e09576d07b47c23f45c0770c044109a7795b45a9 -0xb8ff396f04589699e59cdd533db8dcd7218e42460e2387a22b3e37371497160c -0x677a72a3817c1bd5b2bff58ce3890f3fcac00a7d0dbd551026599d17318a18ed -0x49ecc93dbcbd8ae72cd68a67934d39ca7ddd6d1d5c4e0f4e87dd820e076498b7 -0x960c26dcc7965ac2115008fe0b8bb5bd8033c1b9f6002cce673f582fc87e7a4c -0x18d638e18f92754490f9f0384ee13d6a6cae2a4b79213b3528c978930f7e9798 -0x051483fa52b9b3ea8695cf01d56576394263deaa349e03d418806bfd779236b0 -0x2ff3227426762d269e1e3eb947cbcb907f3bead0fccf3f2ba113702401a78d78 -0x75511699d390030cbf49a8b6a3580079852831de769522418a4cc98c95e7d843 -0x08d66c5c1a596232b4ef92d7b707f6fceef49a64499b9494007ae969fd2f6132 -0xfa8ed5d4e21a5bc51086dab3d4e06ac343eb62afa90bf4eb226b5b15bb139657 -0x4730a3c4588fa001859884b79f2cefed9f45b6bc58a4430b2d06ae2c84a6b1ef -0x8646f07e0ba91216faf5bedcda6f26acd30cb6b2c4263fb4d51ae664d1268643 -0xf62f6e6d04b94df7a912a5b00fd3d5b62a0ae7c6a6022ae6b0fac90d532d3624 -0xab75a82c9d0ecbbd4acfaba676d34bb6283137c92fcb2a0d224d3b55eb369333 -0x1357eaa0cf517eab8124a9198fccad1807447f37c6bf13db1655f3dbd7f9bc69 -0x0d2ed005f0a5220fa1910e3c7abd8e8d80997f55e3e5f33fbb0bf9872fd457cd -0x921b9b409b627604bf9680ff4218c7d2423f06f8f6c0707a85ffcf82277ae8ef -0xfcedb21c66492c9c18012678c4d8c18570e7a1e659152fad637287235b1f415e -0xaa57e2467f3fc218b41e2212532af51916d50dda25f142f398419b3763520583 -0xceb9a9a0bac4d8f0d2c542e674251336bf8f9dba74d4633d5f72190a8ecb7933 -0x1fe7ceaa9f76df6505ce9e3c732c3fec1e231a1cf1295d6ad4b050a3ead1ca14 -0x6f496e46be61d48a1425e45df3647555e63a8eceacd1235290688f0906ef57b1 -0xdebd7d09dfabe57ef684f58928e8d717ab38ddcc850460f8897cebe306ac1924 -0xdf984068ff8675fb0473dbbf2d7fba2850d764ece82ff164d3eff86617fb4148 -0xa2b77ac57d2840dce6508cf904e3c3dbee3289ff0012a1511e121267654d57a5 -0x34fb82ad0caa95a1acee058040812e2cd46477e3a869b93cc95751f9c205d357 -0x9a7462c3788d43c06c284957c712e9e7f9eb0c24d13bdd086ce888e3b796a249 -0x2a719db80b84c779ce5484d40c88e253e2c1ff41b7c091b9a90455d867d69f72 -0x8db43780851acff64663714f44d42e2c86278edaa02e0dbb4f3bcc6d5b1d0ad2 -0x3a99eb731695496bb5be5e31b9c7f775dcda81237f41d22a9f6dfac79aa86e38 -0xa02cbd718853c3f75205748df37cbe7a4657cea66a8368abaf36ea6127d7fe4d -0xcfbad9943d5ff5a48c6f6a0e3d7835c50e909be6d429bda437787c3eb4ed133b -0x69224c65ffd26f7e5c786f791967675866dac49fa5d16e39e648fe081f44a745 -0xeb4a9d3c027d14b33fe2868e6ce176e4ce03e496a59a226e521bed22b2d292dd -0xb003f771b967f54a319951ecae5bc067b81ee7f6f6a7539c58e46f124afdc5d6 -0x40542f73d81ee9b4e9d11ebdc81f48a83d60fd3d2e2e004ec79c4ead91d55a07 -0xa67fd7d7821759f9ecb799d9925e8fbd93fa37ed71a294724568ce1db1ae46dd -0x9f1b84b1c1a95a3770bc75e6a4319e273c6d46bb941f2661fd846513b054de42 -0x0a950aa5a25ae382bffda6706f04eb564426c31c2f22e3d1bcf3ae46556ec6aa -0x0397ad86c39087a7c295d8fb06e1a8c20d2ca8d92e7b1b9fbc4e4770e34ecc92 -0x0dba2deeacbec8ef257102b110bbdc1b59ccda456e3f1b985cd5f7bce7317dba -0xc836b07114d946779486842ff31473bc7fffa28948066e3cf2a0570ddfb5b812 -0x371d6dcd3f6f8d59b35252f75026f84b4997a651dc86bc685e49049478c459c7 -0x444d53ce933986afc271fc3740c57c50947b7254f617838104a32a4bc5d362ee -0x11a8456a7bde554f92b137741c0451241ffeee4a5ef4adcd18336e9a0cdca67e -0xe705e409302b410300336c98c1def3ab6a1661a03b796c000b13d60ed383c0bb -0x8f12140a9c943395a01730a6e16dfdb2b561338961c6219145b731dad6fea575 -0x7b4704d3882d3419437be284e11555a63cb8b8efc99110a92493bf6011b24f2f -0x6550dde0fb16e9d1e28804ebc6b7b04c0e140ca0c595b03062daaaa71159445b -0x29689348170eba2748b9be525110d4ff74f58a486ca308867df270ea042ce49e -0x8611dc78f2f60a981497197bb0508c207915a7dd6456bf64b7c64ebd46e403b6 -0x1547b3d550be667ca55bbf846378bd978f9e8840f4ca20736651b79f962a6e79 -0x64a6b335623214c01ae07ea0dbc520859c85bd6ff73f0e52adca9f86a827541c -0x7302e441343af9e76e75ba012c44dc91763881c3356e839dc495d67b052d2cd3 -0x5e076d7b0dd1d2a56e6013eff8330f3eabf1eaf4461217710fb958ec22e429b1 -0x6c7f13f8982079daddb6c4efcaf7e82a22ed0662613a7dc3f9d80abf137bd3d2 -0x3a2c395773f30dd01845824a6e2c90ca7b44c98d9223a46e19cb47778eb1ac2c -0x079ab4e7046cab0f93d609abeb4127dbafbc67f77a27deb2e1343ad476d606d3 -0x27e17a1c5e9801037809b6b8c2e8879b8e85372e2757b8e7993c4dab3066ac83 -0xcb37493bcb722d977daed89fd643b721986a804356370d7e90aba3f6dcfc9f08 -0x0a1f2de2aa414b2079bc091c14eb36300a63eb81899d9e22b68f2d818349da11 -0x9973cf95910037319458d56d5de58bd78099ef29ac22ec104d47fca03d4210cc -0x124696662f7c31e4cfc5b0ade9170c02c36aa67744f3678d22f6658a88106ed0 -0x93fd40a90874908ecf8bf4e72559572f86ec23bdb54c091d04b31508a18d2ed8 -0x2037e5b06ebbf6aa3e9981c8e922b0d3f71aed7411ef50f3856c584a76b3e6af -0x83afdab8833ecf91754720cd831367297c94cea4e492ef29695c75c01cc0dd6a -0x575a26076565135ae095b52a221578bca21d5bba2137e9c024d02055eb94a3e3 -0x8a76587bb2a5ce6e5aedafc34b7f7db2dc678e7ae68abe8626fd5f4452e1e8b0 -0x4df5c85d3daef0348c82856c4bd7e98876d923164778c1fd4ff764017fe03929 -0x9dc4fed2908ce4b61b198f37dc2ab6ba2b05684fff38c122cc3d888bd8ae6401 -0xe3140e6cdc78543220d6c60fec9f5974f91ab83458cfcfe867bea65741d086e1 -0x37922ad4290827aa51030be54b4f043389afdc8475a8aeb25c7ae6b251c3f0ca -0x633f6592e7405a96bdb185a4dfa0ef538ef085d5ba343c3b2536357bd91b7e77 -0xfc6b6ae06685e48084a98827e06ae71143d01e21456585ec62291172b95ea111 -0xa6e6c3243a757b3ebd20035a402212d43cda9086a8d376ab13cea9ed2cdc4e00 -0x98f65ad242368e2b93270fe913fce1e3eb33e5ca003a94618233c68aaac095f5 -0x2d70fe8851316c344069a34a7be52c1cae7e7c9eed4466178b8c778a91faf871 -0xce44a54515719a06a99e6021758066d36968ccfec240f3e65dc158fcf579e904 -0x4e28c709c4e48cab31405fddf31a736302c62b3730d8a880580fd9c8d8965d29 -0xb1419e7f02db1c92c6b8a419a02d077e28e9d12f98d1d748efc0fc6f6380a819 -0xd0140563fc17a022806a311b89c3fac6a6af35e9decf428f07caa447980572fd -0xd205fef10551acdd46d154bff98316a163270419c38210814cf9877e40a44194 -0x3f4ddccef0c1f026b478bd58102b723fd53d9893829316426cf7154c5e889209 -0x666148bd76f5a2f8b7ce17310ef9511be84beb54d8c1f59b926e38ba89008824 -0xfd46a270bdc347ec8c7f04b4d3bd42d3721a28c8a8fd16b504e47a375a510aad -0xa0853c4211d490f418ce06ae10756a8cc681319e08233b44c61b1943a08b4197 -0x7ae0cb2c445b95d61858ad3863ce14abcfcac24fee788b715cc4756755034cb5 -0x7dac5e14f12f80c0a0cfd48a012083535536594e570822eaaa4444d48fde128b -0xb57003dea996eb4a2c2f0c25e5a16077716eb604e62ed0bf35ace511240ad1e4 -0xad811f17c9aeb86483ad519da3bd977f23f78fe10fe0bdd1a0dcc55bb806188c -0x151b6fe3dc3916cbd4a48b2ad88a40c4a316eb9a32056b5251b8e897a6f7bd63 -0xd8a40bcfdb690058492444c096f82aa72f1d0faed608cf652a7109ac0ece609d -0x279b2f9c3b192076d0348a6e1ebc37b02b57b6a38e95567367db83f00a9ae52c -0x0c3744d1cd4af7ca4cddbc3d5df548a5b3b4422a53876c8f63d888b5d4d3eee6 -0x0fabeff00d1bc9c5eb8d6d75b2eb2c98924315d80384978a757949621a5d66ca -0x84da4c6f914de6a14848572812da4c6eaadc8acb49ccde717e1be937a625cef3 -0x16eb3f5c5406dae24263bafa0abdec4cf0379ae2ce545f140c1d02181fe45b73 -0x4ee65b869307933081b76284a177e967db25d91947dc1f3af2d4a56994fe003d -0x5dd9ea260bbe0650046bed29a9e5a7abac45554624fddbaa61413aa3726935fc -0x3a4fe024170b078797f92ac13ee320f164597d2d713700411fbd912a6c05ddf8 -0xf97ee3e94680c69946f0e82ad4a8b421c07a029fe20901dfe5e3646a450cf912 -0x700f4aadb7950b1965d3be99d6c4016be65fc8b21652739c19f4d8a9e20e7b15 -0x3215c045d2a2e3bf1f2afc62ab0bf977967988878f24f5869a53eb40afa2b229 -0xe4eb732cf0663914010623db71f28f429618819e8f2102e61abce56a843aeef4 -0xd54e616a3384a5b680ed845819ec431355106a653b0cbdd9a6b2fa2a1d915051 -0x98b5d8a565d70e9eec0bb3232108eab1f2717ec9ac0b3e9c7369421649f82805 -0xe76cba5b28a40b54395b2265b8a049562b012e938cd651607074a4a3b491055e -0x06499b8a3d9f9dc2612eacca8b152ad3067c0bb471eda44731abe96c22d331ac -0x87a1c0a507a51207d330a816380188c0c392faf321bf6e630431739a8b870f21 -0xf4d14beeebdaa172f9f9e1fdc55731689578a0dff89bee3ee6bdfc1b5019d20a -0x9330e8b5e89cef8c28685e3d08c00d965188b97fb98e8635eadb36f93b626bec -0x49751b8831ad841ad169dcb9acaa585f175093f83eaceac8b8913a593807349d -0x58cc0a70f2816194d807bbdb2c5ba312c8af9e09d70bbeb369cd4782527065a1 -0x726ffdd3bf1018e3eb7e1b8b7209fb55bb2d7fe2c818e3817e182b44331c06ef -0xbf90529cbcb53f9531717d174d76b92d4015f80fd4db8fb1db6160ac5ae728e5 -0x60583d1addc8de9e0e84c0358e520339f1f92101037a772b6e5c84fd45e9c74a -0x15bcb52c29fe7453ffd306b2fc32fe5a19b9dfb561989fe456dcc468d793490e -0x6d34a86f84cc19e7a7a72d251a0661cf8d08d193dd8b6231f9e35a58c615fab0 -0xdf0d05eebf742f5ac07a7142cb18c6903e041098f4b9362c3c804268e567970e -0xa9d56131bb05f0d765179475459aeeaedd8125e7fa4df29a87b505f29f33236b -0x8595738c71652a265d9ca8c3800441584e6dfa5b56005dc69a1a810cd1e3e2ae -0x85867542663accfb1dbe99be5ef16517cdf7a72f207f104d3c7ad70b52a8e8ef -0x53b66c25dbb9d7e1e2f29b0a34e482eb452d4350cb37a58046568563aabfff94 -0x883e0c052634ace5abd93455ff9673843e79587fb21ab8ce5edf44c099ce0351 -0x2b33914605587fecafe8452c44b27c70e7c8d4018e31ff854c0ba531b1b0bf16 -0x03cd3969f3fe0df46c33e2bdc52db05e008a46c5e675bc8063ddac393e2975d1 -0xa2407d198911c385d00a1ca42148c84dca60a058ac3fbf96d0a5e1e40c8ef5b7 -0x9deae608a9effe50358301a3bde5dcd2c085ea2c6fcd7836f2394adeec3e95a3 -0xb2e8f295f7625492e6ba4e78e28655b6e9fec54f0a85446aa0812477fba50a53 -0xcccbdc6956ad312c68c1f80cf73bff95afbb4b8542633f484e4325462ba1c0da -0x5e56125fd19bfaa4a9018e062fd09a52b0c84083bfdac92dbc313b7545f78b4c -0x680fcbb2180fb3ca1aa9329bb7b142a6464fa322fb4d2194a5c3b3b37275dbf7 -0x1aef1f945452e57c4688bcdcae69d64e826b851ee8769b2c7c971f7894245664 -0x923c133351ca3e07715a29d94112a6cc86e771a0843ca94e6fc03ccd28148e48 -0x54cb8dba7cd0918a34b2909e8b0affc9b31c09a640ac482998a815357ea7d825 -0x248a88c9a14ecdd2937cfb288915d8366e98744a230cfb2ec3d2fb8a76486484 -0x7d5122d2f3a04c9c0749bf40f981e771147cd047337194d030a694620d2a6c6f -0x16f7018950b6e73cc31f3a33a6bcf6fdab683d280ccb4d6041cfd4589f8cd119 -0x238aef9f4d138357d41bbd01f25279ad41eb981ac49d37b602770bc973cbdf78 -0x8622d91e0ed85edd644bac917f5cd5a5562cb4676ae77c28e1c706a5efa43896 -0x54eaebf52f2f96982186baaff466198d7ab9d29373ad1781a21c984446dffb42 -0xe94a817f9d7a6a6faa6e384caffe4cfc5f1fc2e68052ddf0a707d3663e018a20 -0x796f70d773ea9b2fca45309aa4fc363cd9ef4ae61d22582c4804fa6ed0b9447e -0xb9ec18fa57fd954359766a47cdee52c56ab9116a44406d11187f107fdab9ef83 -0x794299ba16948357969dda941b2ac905716ef5858db007b655f88213820af68f -0xe6f6c0fa8010d6ae5f02c467dd7c808edd374824e3674075443ac436cb10c713 -0xb72ecce6a1385c778fcc25c922861f98bc8f0ae51f51b6e7cc06d87e5c331d69 -0xc80db1ee48460d2d2114388ef7da8aa5faa69b2465d7a9978da0e672bef0caeb -0x6ec39b22262d6817f338826d67331c11c97a275c04308fea3ec49c8539d2087e -0x8f1b2f253cc916aeb30d00a7a9506adae241bae5a66270baaafb3c5cd2840c4c -0xd03778247b8907caa326318fdd0bf7e792d09ef3272eb2abf2966c798a16df52 -0x6dc60a0131568af0f13c2e48faaae1a802e02e173f496059387daaba7188a502 -0xa8ab5a69f33a7c856d9ae5ce45456214c9f37fe9aa19e90989d31e9ca1f6e975 -0xba86e3baeed5af6051a672a53a9c08ef1d2a5e952e02177b739307df62a1cb7c -0x6e108f82524b213bce59aa76cab702e948ef6d44565f27007a6170b51af06d41 -0x77882c0ab76cb524441c26993c8bcbae0eff9e54fe26ed11cd2f0fa68eefba9f -0x73f1a577c58f2d341be47b22913a7697901cc304b21e641d22942d9bfd0cfbba -0x768897d3d8d5dab9db2162d0b6508605515bc92712af85cfecee6223bb9db0ea -0x1987da5c0ea6048058e3ccadfb777e613fa121998db9fff7d6dfaf679c49c825 -0x9ceea7246970a43a0f760c208d6776d9e945622df7473dc473e064ac3f3823cc -0xa5e617197e49f7654392042cb3802434af1599954316d4d603e70d7c186205a6 -0x1ddcdd540fba9bbc5aae5f1cc2d43a629ac520955df5d732e8c0bebdd9b5d5c2 -0xa5836e1d82bc5d8d396366b542bb128b294f67a227ead258a718c1174a66f814 -0x69b809cbfc932a3ecff418c626ea0ee2d3b0cd1b6a5450974c4266506bb74ede -0x1b7df405588a1f75a258b6806d6e1bea76002071a6d48f424feae5123f0bb9b3 -0xb39f11d53b6df31d38aa67fec103e2b466b76e56edfc0dac94a4926098f4f154 -0xd38bdf5770d779ed83ce1f7acab3c663efba26de2001a319ab9141b0c89b8a36 -0x381a428cacfea9e87474a07e78d8de09bba1d916f87eb1a432eb2c8fba65942c -0x97877b6f9af9a1ee840acd31ad428d07481acc32a9bb1ea6e9dd69126cf155cc -0xe85766f66741fea65e8993996c32a40d271c02cc46fd167046eb2318d02309e4 -0xc4563bfc9119fed09a7bb5378d6442bf7199dfa20b80898d0470088baf270f81 -0x48d2df809d99542e62304b940e7a7182714ccfd6590895a1faec40cca8282150 -0x2e022c5b3807e180707e7fef81de8097d6f21342b8144b25133ae33bc4332c7e -0x9a83ea4e6ce4cd071f8a3a47d34ce893d65eb0003bf79bf22a4e5285bde6c855 -0xb4e7ff0b1ebee2c6852b6385641a014f351deb1a096f125426df09e0e5b697b9 -0xfeae6fced071252ed80c3dbf9bae0dbedcbf17b44c3049fdbba047efd05c8a74 -0xed3d442edb340d91398655e67094d205d326197d27055bb2b2b4a77e1874fe12 -0x12ee12e97ad7d736e3bd16e69b776fdcc886fbe84d36fba0a0775e1485dc3dbe -0xaeafd3035f0f76260d8ce98e4d972554b99ab5f2b7e67aa97e114535be25327f -0x04d234ffc8e970d57dd2cf8ece1b36d1b2abfb464ec826dc088df2673d5047f3 -0x27ab5f3aa467d7dde35c91849cc783f18b25f6eab44232c70629eeaab5b41ac2 -0xce57fe2b6d2cfa125247e0318b70013180319a69cf1e1a75f70d08ab90ca9a3e -0xe14635dfd3d8b4c61d7ad622a192be38eff45adf0825ea776c7776c63e1cef7b -0xa10da833e91f99042b0e4564a3155a7bd669e6ee0c6a79c6b6349d946001738a -0x3241480d8ae4a917d238e24d5e460db736a712f1faa4053c8d1ab340371f7740 -0xfacd9a4a18c2cd7be421f7f91a049013200fddd9b84ccc5e234d48ecee2abff6 -0x3e6c4a09a8556d267987213336d3410580b096ce68f945a46be80e8d8e90fc2d -0x0e8abe6dadfbb1449e8396c1cbce34af8a64d88356541d9cda6e3fbfdd928c17 -0x93e4ea5b5d72c58e6055a1239210f3d71042d313ebf6a4c3b271da4245b10be8 -0x158f13597cc9c5b705c4e6aa2a12a5d0dec89409c0d99151f910cfa9de761f5d -0x166e8f717f91b3f6608d7fb7c01bfaf9a6cfcdbfb1e31961ff15850ba1350dc8 -0x30853f5fb43c27bed2b1450f97f7f86b7e869f7b64b6fb532f45d86b96e42a7a -0xa1c7b46205f201b70a8fe2c6a5659c579f199cbeedc467ee8440b42d37aa50f5 -0xaa3b730552314090b35e8931717ba477849da823ab751b214ec0371bd6821a27 -0x55cdfa6fa22caab75a13a99bbd291e93147833ef8ed5639a0e4e3651160d141a -0x600f847f5fda43283df439842d5b5bcd23fa5c443fdc88e6bf3180b1b30bfce0 -0x3ee4f22c19cd5678d481ccc5a53a5f3a43299d5a79c7d73084c598430579ff37 -0xb2118bba4693ea15c167ed46470c521bae78f488795fb3cc5fad3a1001820210 -0x2a082a6b2f82346c9a188ab3eca7dd32094b405d6b779a0af67b3e19f51aa165 -0xb74a18747ab9d09db07cd5c43d700c4fcfb4323d33aaad8c869bd59c97e7f391 -0x96e48552b77b71059ded8c9966a488ab263871fe1687343cbb43a9c2309244a3 -0xd790dc5b095c9574f7e952dcbb77f39f820658fa177b972b585f50b36e4ac135 -0xe8cadc0d58a1a10d165ed576c7d1fdbedc80f5e60dfac201151187abfe75d1f1 -0x6811d9e60fedc95a0490c8f0e2574046c3551e54d7b9b7cd3e9072f83b328c2e -0x7f6e254a312a3f986f1cecff2728cb8c1bf011f9d55c7e9a91d3cf1e833b8648 -0x538c2e45a1eb7f88e4685d4453582ff69e79fe7bd4e3fd1450e1117560781332 -0x844c82bd2e584b7ae7de388419da9bb1fc931301f04559e1bb67d88fdcf362d9 -0x921924c9d258ee87c8b432d0ea1013e8d3dc5ba3b71562306ec9cf0de1d64ab6 -0x0091f13b2ffb1b2371eaf16857bbd23660ce08efed8c4f08344ae36f7730113e -0x0fb2e10c1ba3423bc117638542ba580c986b382ee627ce3f3e74256c39598b90 -0xc812336b007d31fbf0b2253495bdae04dea805cf55fa0c1a0735377c29f926df -0x04bbc77486fdf3a27052c5079d5c83743ec3661bc504b71950b75857b2b55ae0 -0x9c356f5a60871ad018fb47c85bcfbaa0917037bb13916b09778d2a26787c1d07 -0x517e1145896a34238fde388d0088e3137e826a641b55a7083b10b79153d4fba3 -0xae276f285f8ff9d29031fa0efac8fdc536712d1cabe3bd6017b4ace3dc43980b -0x51f40c32e7614ee3bc485d35b4da2953edd02684bca61c642334a1b53970c140 -0x4b91c5b7706a87ab19bc31809ea2898a4957bfc06b5ae0fb013c1c53e4725316 -0x78d9c8160077317327fda81a24b054e41df083b53bb5b713c7e6599ab5c6483f -0xde55cb73ffeeb845134706a5e19c3f91f91992beb63f56ad58f17873caff2489 -0x8b1b932ddb1df023db28c268c52bcfc560c7a506f0ea37878f4f56e27633073a -0xbac23fd49a9da40428339a2fdc8143872a628c0af1b861a7aa57431706b83a22 -0x9146dbe7c112d0424f7d05a605c1c1221021694023829e4276c19f42d4d7615a -0x6a5bbdf918510c69eadb05c50b46ee6f2825988d83d2592053f85fe8be654ebf -0x8e6911104ef83f57efb02fde6c814136ea17397e2e2a1df8a2f2e6ba603e0f2c -0xff7543b2448a9b0d8508e827796bf2185c269901eb58aae8b0284b956a160406 -0xaf541491a2c8b669b6c82314baf1fc55309f69a2b73a1439403454865b650797 -0x4608c500e7b407f5dc8616f424c7cc89fbb9a12be4fa6b691e1629d1bcfbd32e -0x922240c2a3e6aa5e93a0b15305155d557ad738db04ea4ec5a6c653a99814e714 -0xa26b043d50928cb57d0e97382941f24fbbe6b8dbab7b04d939cfe94c2862f862 -0xbeee13e684ea3aa5934e6f9e8ddff61d31941acd91202fdc146509ceb2df0b3a -0xdcf57e6e0b5bbae1f02d51a0546bba0dcd2a7d81f3e72f91e7497b0ca0e546ed -0xdee03ad715f9965abd85714534e7d7b56711d43e096ac644cd1cb77c640d460d -0x58f072a870990d42ec2a4438b184ce89327f4d5ad02b1919fc79842f1fcba1ca -0xcd439a51195fe9024e8981d41c500d18b78cf1d05e9915ded3c5dc4ad96adedd -0x45909fdba3d2bfa1e124b45dc8b6fe9bb1ae48118d58aae42e1cb65cc0fec07e -0x75841b4f3eb3f3e171946bbf43ce0ad9e1607a28cf0ab4cd9e7f816033d1d81d -0x945a622df0dbf1524bc88da86377e80ed07764e5ba30c3192320c898f67768b5 -0x83bab54859c323edc88ef39f082fa9c3849614d492e7f502a0dcde5ddb2b8f59 -0xc53c388edc7c984a12af517a5c76881e76abb3db90ae10c5930f6a1a7ce17e3f -0x5aea78833fbdbedaa216396f1ab44144c6f4f5f260d26a252af95119fb96aa09 -0x8e8dc17a9944ade409dbe5c79eb71673d438bb76573fca4b3bc576440632bcc4 -0x62d47229551019dcf8005acbe74c78b9920a688eeb1abe16febedcbfe7b3e8c0 -0xc18d4e559bc0650c77ce3c622ff1c7714c5ab080ec66f20577e1b5ab5e37b16c -0xf94e87fbb8c2e2e63888cc4a7587eb4e3bdd18b3cf11a029f7e71cd30503560c -0xf1290942991be1ff1ef89d97a8ea7464a2573555adf7ae4eb59045d1045e1bd3 -0x008a4f323dbedaeaefa227c5125f763e6a5ff64ec5ef1a84862ee15296478d30 -0x579d2364ef605ebfda01c04d2f6cd66d60a5fd5b25062586f1e7f7b1fc4e7dc5 -0x8be80291e9b83b14892ebe2e21ca7554b8a5ff2cd400985099253946ad0a0d23 -0xb26662a8370c8a35fce60b117cbcb5a21d4287a0c79711524b1c436217aa9268 -0x154ab527b69972f71fef1cd76385405bf7850458af0d8fc355fc9effeead2d62 -0xb3790e482273e51dc04b07a82b22f9bc134551dc6846272a2e11c733f31df34d -0x11208e0f5343ee523e60b6bdd9265fa81df3b26b0e421c9c3b6c7a4b502fd273 -0xd8331634eceda0a98fc680f6980f94174c13e70835bdd023270f489dd11a6605 -0xd5138aa06a59a1b5aed64e85724b2a0afba40d5fc8c5ed614a456298153d9abe -0xd45c4bb976bcfc3ff0a64b0f6718ece47492f4c9fb2c0bd554c74927c1d63411 -0x27ffa6d5518d51eb955eba823b6b95c13848d93c4ae399ec899020cc389a3fcc -0x0182b0615bed950d9b95f1234adaa6c33985335ff9973949bea1cbbb198dfe4d -0x5e7b6741a52c20199abd3e404c8494e32d93e5fd8f74472d20ce6877886375f4 -0x38c4835a07680580e4e6746e4d10a4272298842cab296561879431a0b99d5cf4 -0x059b3c4a576c75e6624546e4559dfba84edc795034cb36d56bdac2da3ef720bc -0xf03e9940a75d67f9b8409f59bbf5bad05d46850a8e32c61c1e4f932cb6d40d86 -0xf68aa3f4c4ca4f3ffde96635c72b2e802e9590efb65812c857e0a7766de99adf -0xd1b7f693c5da5419fadc5cad81cfd07c0871f3cb2756a38dfa4dd5ea884451ae -0x79be604aa3a0b696733a78acdad346815aa03f8440279d8f617020459874528a -0xd64ce6eefbaca8fd54165cf6fc0d6deb664c40f77a3771c3f55e5cec3747ecfa -0xafc2d8add4e497221938fda82efe5471cbdcb7f032692257477ec087236176bb -0xa9f372060a981b78275b5d91690f97e144a90e6202213f10cdfb7450c7154612 -0x48819e892e9f60adaab8e6373443765ca5117c13a9caec251e0cbad74ba33a09 -0x8629ad2b5c7565b19a81d30fe8e168880d1203f13f07f4435511e420a3107058 -0xc97b31bb199b5268b09f76f6034ff24a4798983e52471e10b3b953fd9ac353bc -0x00a170f968287675d5dfef46c0cfb35e3fb8449042714308f4001fc90280ee5e -0x96b2beae3ea7213781e9ed99e5f622f52869387416e7c405a731dc9350d31aab -0xb24d1fa8082fec6c2bb9c76f1c94ae67d6452b0b1faf8da937b4f88d1c67351a -0x3cade18dbdd63cc94458fd8fe8ee088533b58b64e71f083fb6a794a73f544db9 -0x5bc3040ee1ea0a5b97a6a244db512efdf5152f1ea63715ba63baab6966875311 -0xb27191d0203d3bf22ca5273ff019075f99f3f366be077977d1ec8cee64a805a7 -0xc59477a9a61fe033bff8a41738a8213b63a34cf86e24e25f3de4be6d7122db65 -0x2302787cb956c7a96c1adfe0a6519f68b26fd6b6b98ecbfae0d23eb7e29b9e06 -0x03cc85a9def9f761b1b9f59aa196427b62028b89f63e34e55725ce600f1a0648 -0x05240c9f99e655b22b85641fdd07e4168f6f974227d3ed7081c068fb9105c9d9 -0xd0b5d4c2b5350ad0f8b220960f045c4d11fa192c6905a805b5ea4dd55b8e9108 -0x2c902a49074112ccaf698932570dad79bd35e325f80e57fff1fcc832eecd0490 -0x4cf5e1283abad30d4b33d844f4cacbc4f121e79292066ea589baedd8b75080a5 -0x7f6408b8077276daf8d10444d0ea6d277a6cd6112badaba161eedf400bd52e9d -0x5c3905dce06d9f5a65aa026d3fb9c90f4dbc3f101fae4014de88cc154fc12fd3 -0x780d1fc905006fe5697c694d64d9e90d6702b3ce52f9be2a823c8709b26354e6 -0x9b7090d47b23e892f5b6b8624b0d43c02802108231883f4ab33499b9e1b2625e -0xa5c90c0c5df1cf55602ec1d95ef5724a54d6ab1a1beeb6cf71d0a21ad03d36ca -0x2bf7a0e2ddbd9fe0923bf15f6d57ff040367788510c1432bd93f822a5c0aa38b -0x74e09451c6c28bda5894d706e7ae237ca90f95683002fb34685df8b642fcdcbb -0xb40a65ab1ec13b20f577a9de80ae7e7df840b9ecad665a0ccf09fee70eea39a9 -0xce4ed0d284a1ea88061787e6bf2562b91bc01ab5a5bbfc9c495c428d8dc788c2 -0x102f46af19ceb76e3124573a9cf642639dce55a38971fc8f81dc5688fa5003ab -0x3af6acbc50b8a3d3ad2eda25e7a5cbf6ed2361b090183b5334533d66a5a1c888 -0x657674a6c5ca84d84b8906ba5a220250dee150851886597bff9efdd4aede0f91 -0x50ae06cc0dab05760d9aa36587ccea5ca6d0fb337b765129faf77f26352ef306 -0x9e69c4897ce5a96e9feb87a1224c9f925dc243b4b3f176f65048285a11418ec5 -0xe3c6aa805d514a099ee3a89818117cd8bcc46b5bb5b90a0494f91c3c248c42cf -0x82b17ac137e88cc06790821e49146b415c3e48b751fffd439bf252308bfc05ee -0xfa67cb50b9996af977db07055b05b87281c49fde771981c6f24ef5e421d16edb -0xa3495257dfaae3c419df1983b030001c661a17c76c0fc0d0b95b0b22a275dfea -0xcd2a0d623793536409d8138cd0994c030cb282fc35848b376eea9c8dd84a38fc -0x79d45f262ffdafa49c17304b4bdb01c98ec44746385d8df631ad8c8ad68d36ff -0x9957a2a3bddca7213d0fb392e004b0b058a3fe238a0eb0d6a846d8b1861cd7b7 -0x75925bbae78bd56b26ec4925f2110f833dc75626038f2a54bffdbb95da01e412 -0xfcb0b34c95d4135246a14da23f32fdf635c729d9eb9ab71383f01ffcfd798d76 -0xe26b0a4a04bd6207fdf6b8763d975788a976a933c7815f7efa261e052175a61f -0x1cfb211edce73f0c4c45d5614bcb44a80608b5fd3330262b8a282696908c6626 -0xbef6867c220efce123fc1a5cb5953e0e8aaed078fa0f1b8dcc4a54a4b7a7a68d -0x71b8fe1f1be080b6aaf80a5ce4ddc734d1150e0e0741efe800fbb472f146b4a3 -0x2a29175b0d319674c4d3aa83e6171ed201a0487c7478bf6bc5f40c7cc85529f6 -0xb67db4d8b418051133e18de2d4c7697c46ca8a9b4fc348ad611058c96cdcb75a -0xf42a5dcd6263ae2f8fb8e3b30518f4be042a0c922edfb7557881fa7178d3f90f -0x7baf7fc5f7dc812324cbcb16238016c2453b048d3155073a22d39d8355c5ee52 -0x2c6017728119b17d720f6700e2771602877280afd3708cccfc37afc976dd98cf -0x3a0cf0cf9ba1272d89193c99010427299af2d7bcd2e4ccf2ec118df42d3d61ca -0x53d9f3eb259318255481ff76f0cd5b13ca9617b2afd603e8e8e63f457c3bcfd9 -0x5395e7c7782ff3ff3d64c4a8c49732120b95033b849700e02a7d5011c045b202 -0xa31518fdb71e363646818d8ffa37652800fdb78ca1de244d342e014775f748b2 -0x343da6611785bb74498cc82b47520e5cd0b7a68bd5856cdb31d68625c739bea3 -0x46f75ebbd2716b449efdaf1dbc4f24287229935da0013edbb8d2157f3c15227d -0x937394666c96f7efab389075e7d098de109fdb1287c0759e8a13051e69367f7f -0x55ce00c5905ecbd4230c894892cf3b492a17fb1a1fda7ef6d6ce742720024db0 -0x9615724f53118377334f2920235eb119c9b48bb2a31327992e3575859772227b -0x39973d2ccc78e406babbae9f6788f52808240d3fab882d7aa0f8990850224b1f -0x696040b8f0560efe98e6e2c751e052ab7fd0bc8eeac2296c40caf5c90a5700fb -0x509e853a786160fc23ac0a73b8a4fe3f7d6ca76f7eb0fc17e770219ef0111136 -0x23379a92ebaa665a78987771b5c7e28ed81297384201ca61be4be74d56f65340 -0xfe354c5e91c537ed29eea517f8ab150cd059e4273ae010078c1adf39774623ca -0x3331c8f19cfd68f0bd94c17138e5dedbe885a41488bcfa68d49de7353d957684 -0x399dc3be87b17a1c5e421690075218c857f9f1c16c48301f08c63f4a44e17170 -0x0f908ae0c61091c0b31b646b30e2b106100e55dede4368c0e1519b4e9b95dfba -0x61db9afc7e6325ccce097719c706290e4b5d0f798eb68810aa3581ab83a679ee -0xdf5ff90c3bf5100e56992c78626a8a8847ba5387fd97278e528d56a2ce88c182 -0xcc522583953ebfd9f4d76c852ebd840efeb39173bbff4be77e36d6c0167112bd -0x08533de4d026edf0809c8780f0114534a4138196b10b41a9e6a51b70d92b7394 -0x73d86a696d0be8f99bc81c5a4735b7a294dd8f89d1c3088ec5d30e4fdfe24500 -0x14b0603067c258ce44d0e57180f2f95fc2f79b996f6909640f3b0ab60593c67f -0x4110793f3f5ad30380df5a812d5edf6937e6b9f679cf2985fffa975289f75226 -0x42872ebfffadc5d7480eda8ef5b46e58c5bde7a847b683524cd49a36d2ba1466 -0xaa97f8fc7eb1f7a839830d1fc2567ffda5a31f42ee879ece59d9ed68790bf494 -0x7b136a8b599bfac8942088a026010e99f710b42aed5f71379733f1717dc0f907 -0x8ec5419dad084e69155b9903e6f33857437fe2881951a0ef6c3ca3b410de66aa -0x381a76bea2f2f65555da2c9d5b6a338d6eddef5dcc17b884a3386f59640d76e9 -0xbccc3b9d01df16bac40dda0b270f8490db4ab70982fd7f4d244890bc73ac81fc -0xc6a7723d17783e01ee4f0b63bdb576341627ca41252d1ffbf13b90db2d8c45ab -0x77b1aaa4974af370b0a5bd2c859b916048738ea053588ebaa9d745fc857607b3 -0xc39220e7e1887387c0de8d036ef02bbc434f27681199db21ccd6035565d28d26 -0xa575038f0e0819b1c9f5449d6ffa9f26dd660f2fbbd0af0173f08f0584e08783 -0x1619e18019038657c2090f864872092f3088ecb893e71fec9b44b45cdf683d79 -0x7f3a5920350281db3864042f8de3fb891dfa92e4aef50b497f2610e561088167 -0xfa38ca9771443fb4951404e896f40fca0e541b436515b8c3959fdd5e857ee786 -0x43290cabdb0ba92ce7381264e2f47a3aed5a997a705247e7281ad86055c9d2a0 -0xc77118c6169735d91721d551e87a1487633027df0f4fd696853caad2529e33c7 -0xdab5350369e55938d165ad7b17e0c014e16b2d3f08fc38ae9400f1c52f126b9f -0x74e723c710583b99bf3e5e147ec6cd30848c5b815059a75fc645030230acd366 -0x0c2c48ceb80e3db775affdb2354d2fe7957b7b57fa4eefa1e9c53393aece6ba5 -0x9e080fb08d442eab557ecaa8dfe94581e586da5dc86d4ca551e811fa825ca0b2 -0xebb9620ba7fd712ab50e57159ad41adb857352ddb6979b6c3cd11e5476f3efa1 -0xfc625a8568307e4bb3d87d5b07258daec8fe55d2279b4fc6b8657776b08e351f -0x7983dc5395879f70560f0c1d62fdf046186906c67462ca2ba7f7dbbc74fc61e4 -0xd1de2d7d081e3407c94d5bddb48ff07409c48f5afe68ed130c8ed798b761046b -0x4a674de8dcecc6cf402807fc30f5ea0f6a6bc8b44f075e967a8653c9492bbb49 -0x6fe6568cdca5be1ba58e2103b4ca7bb3c04f151a288c6b4b91d46871f2313596 -0x068e7fb5ff5a82e7b36a9bbc18dc783963196f98e41da7a57741d8ac4d990de3 -0xb9421c09b60e28a423bd575340f7be0ed6cc44be408ec5cfae0a63e146bc128f -0xff6e735f52c3fd1566d52e5617d73c984c33e0155820f553cf55228fb901cd94 -0x6066392490702b76aefca51e2dd8ee9ede514e78ca3e0d2af4c03fb3d51738d8 -0x5746c2d343e11663bddcd026e4515a815f22399b6e47b113339b31a6ce41c290 -0x7213d3cf9621044968c5f963749e6dc184e861d6b5db7e5e2aa5e7e5531e1b2c -0xb1611d40fe87c9128212e2dedd0580c04c6ae01911c32994877423e95e0b2ee1 -0x76d77bd9acb2b81c7688480b07e80e256d90449b7bf7cd16241205e5d23a1e30 -0xbb8abb913f1570be19bedc0d187af7530a9ed5665e52edad0512142b95a3b609 -0xc7cc731d3cbc77110eac23010e4d533ae1505d4b184f0beaf607445dd05dd194 -0x6215e6f59b0d0425788b217beb5a594e9c1bfff7ee670b5a1496dbe446b41d25 -0x27d33b0db165c24c6bdfa055cf26ca0641c117b4514e03420a7a3eb74b72d0b6 -0xbf1522069adceea2c8a1d4291dcdfe15f3e8f3da9ae275784190b5b2467bcafa -0xfe87288157924e0ff8f4dcc02fdab16be2f151286a39ca5b6d2586529a7bc5ad -0xf52b98ec9995d4655416d3cc3c01032b6c498bda18cacd60d9823fd6312bcd84 -0x935c914ced6a48293607577c8514c755f2859b80d5c20b8219986177e168b0b7 -0x60bcf241bda2d0cc44e15c2b9dba9124eaa2a618de719427469f0b3d78f21b91 -0xad2e5b4f516d9a7d6b814507c56033e9f3a5228a5baea04f7781e60b8d206db8 -0x3ba9689ecf73596f23c97e32cf4418ee7a772313efb7b3f89d3f62517c9af7ea -0x4873151577d6d6c026e93d06a70026e2fddea908da1c07f81d4ed1cd08935923 -0x9f8dffbb7711e28492e1031ae02290d86108068e0053e31f80ef8bb3a9ae3857 -0x5a0ce259095a937dd40f3da073d57c90c1c2c2b9007a6daf7ccc7e7d46ba49d3 -0x7d70ffec7a70dafd66380446c02ad4d78d515773985d7b46afd93edafcc4782c -0x46b9d86ae46413625e5a82e85624da7e134e27d7a90358b0d5f38e994b0f8f50 -0xc25c3590bdce6b4c4600dc36a888ff66556eb1bd0d3076319db747c6c37a27dd -0xd1e48114f17edcfb5bc9e9072ebbe2ba89bdd5a5002c3e4840af40f2879e31aa -0xaff20f19d009b6365c00ce384af7cae610981cd5b9b95c3ca1897cdf2b1fe314 -0x79167c8b2052806d3086ec3d22cc6b0173bd72dbdc6d6e56791a413f2b436f42 -0x98dbb8cbc340d49f1be10656c3d84fe30ff0bb5eba168c950c51a94c3cbbbfe2 -0xb584f7e28a1ff585ea22e82639ed7a5e25da0b1dcaa04a95d44c7cd705ce171f -0x3f82fac95a7a8714590f12578829ddcf3aec9a2c9a34711bfbc13b47939e5142 -0x8d26022bb38194ba5d7d4500b7f6e2f3a18cf7c5f41f981ee4ce1cc81a2064e6 -0xf3d576428b58653ce6b417d8952cd3ee2f26012f75a40eba3adb4170bbc0d9e4 -0x47ce9d3ec1913ee464bf27b76bc7c9e822fade1cb21ce895cc0b04c0d116c515 -0x892930be23a1eb499b93e87e6e2c5ef32717fc59e763d525628e2a3ba91c1c8a -0xd8885162b897a8d06da3f587cc8be88b50ad3d3d5a06cc8567cc55785296e3ed -0xfb3b1b19dd1057212c0493cf0579234fea0d2a9ff9699bc61537db3a2d7ad445 -0xabcd64b49f95a222c2d910af02b44fe9997db736badca62575a5a3752ed45963 -0x4d5cfe4a5aeeb1eee8b8be67d3ee929323c36ca4dc971203c1e31c88884770c7 -0x8b2a9acfdf191901befd61128a7d202980787b739376881a86429ffecd4ea649 -0x14881e2b7f326196f84203f27efafcdaa3d6497cefd22a3f11b17165e19e45b0 -0xbab1909d17d5c4f984a13f69950d8f4336c6d59ee4aefb7f581e353eb6787492 -0x870d8eeb3f89c6cbb97a1ce2a946b4f4e927c3c7a0dfe9018fa3b6cea7a2a66f -0xbf45864adea20d59d4053bb66f8c5215968b62dc742b7e97fb066b58719641d7 -0xfcccc72a4f470f7e2710911d1a6ee43e05e79bbd2b6d829d9d091a485c65f1f9 -0x6eeda8cc68a273f7388c04d68f5f682b3a759df9fd5a6f4e6c0cf35e58416656 -0x08f18a8b3b9ac51dc9bfd726bd52d1ae18acc0cdcf5d5e6fb796404ea36e2720 -0xb14818ae598be96559d80ba0dae5c6939f88c145d43c38c7247ba90207a93829 -0xdb7ac952b55b2c5fd6c29ebee20c6e9b791141a9b9751e32145183353addd331 -0xfc00584ff10edf368c8da8c628e32b12178638426739b6b9083207872f37e327 -0x8f2c2a06f0ea3acb99314885d877a016cd060c552c7e93a102441a5891a1fd6c -0x865ca818eaa726ca994f0cebd3d3008ac19ab6e58de2187d8ef2f191746b4836 -0xd4e2d9176f4d4c4470924f7e5b18e3797601659ce8a083c1d156f370c0c15278 -0xd2680243d81a436cd5fde8d57dc530c2659f757d8a402be728807abf904ce75c -0x7e05b2a9b2898913dd765dd1c336779b9bd1ed8e2288cb23815378a334216271 -0x8f1d72439f9d08d0a09f16c231017d95d8b7453a11b18868c1c946d93ecbf996 -0x2f87c0db9a35339198bda637db9fad8a2ab3ed5171401f5facf9d697f5fba9cb -0x7ccc10add67333a77ea0479d1a1a8783793e7b9d928d482d6b42249f9c580605 -0x04adf44e37776a96cefafded6e48b5480b566ddb54634d7077057deadf2eabfc -0xd9a4757b43f481fc7680242f3d83c3f009e5bb115a24ddf9d6f97f3fa3616785 -0x30643f6bf09882ea015aee039401c383f2e19bbd47c3c8f11de7416d1f1eda24 -0x8e563ceab3f5406179a31742d9e9151a246ed6113348cfaf40c977c8b051c176 -0x8e8d0f2e0c8b8a611f82ec73d8802530567162d62f80fee4e13da36ec9d45791 -0x8f94ed9bf6ab01e6e1e615b6b9cb303384412e382fbcb307e074a7c43c7e9202 -0x9ba61514fdcba2caff8e5560f7db3ee49efa8f25b881622f197538225f15fa51 -0xfaae5e6570e80014f0f594cbda1165c87b9b577ad4ed4121ecb607a780f2694b -0x7ea75feaacd2a253e8f1172595c15d40ce65041495bc6aeb690f7dc826d75296 -0x888873f385accb70fa7e7831f61d7f4a0364e806fea7f640302a009770a0e95b -0xb3f89dfe34d5fec89fd69867057446e9641d5f60a7a471853cf4ca2e705da2a2 -0xb46ddcacc9bc2479eca5b64e5083dcba49959228301bf4b9dff0feef6712f3f1 -0x680c46ac05f624d3f143caff9eafcd3c6655d4363d2207fb8e4a24aa58b3292a -0x8fbf594b8271ae2de55c3b0367cd68eab19f4cde9a5b5d2b396f209893575ac8 -0xa44d326f65d024c52312ee2d457af7ae96e1dd9459162774db07f93e05790cc3 -0x6597382cf45d34837b6579db623bfc3b54074f229d47fd36b831a7b2bc70db09 -0x8f4c8c970d048bcbf08abbd47eb75ad13f9353ab17481793dabe84c7db584406 -0xbb3f5104c8717ee0c123e6ce1dbd7808711510126e086af19468289f533d9072 -0xcad3305b53a226938264c6e0033c7e60b1685a1dfbc65423c2d3d8e935061943 -0xeb86da325b09f8c49fc6c7dfd4fdedbad94f63d89cfcc61a068e145f3ccc4d29 -0x618b92de6065edd65052aa58b6f1d6d0024d93076fe39a0227bcf6ef5d4b8651 -0x5088d7998cf65f10dd153860c9276aad66545955adedd33917ef212139ec1cc5 -0x9da55477fbea6b3ddac192ddcd67d20aacb8798fa24de6796b097d30b89b6384 -0x32ec39e73fd2e676e5deea94b310b86136a191bf09670996a9c14b1632923d4f -0x9100b50e4e0efccc8b3c1a2dd4ebe29a09798203828ff00281efcd5d5bdfe050 -0xa54b740714fd76eba7ec5ce07d08ffb8eca8a73768b02d7cd9d4c86f4f2a5f62 -0xa0a53b6e61dcb68273402a5345530ed8e25c155a5427feb74eaf8cc6af1b24e8 -0xef2c7d53e100281afe76f22a035b9a2340063b8c0ae57eae6ce5e4d9a32e3d8f -0x082234e09af8bfc9ad6bac6d9998bff967f4c746ba506a304b742c7e979bb614 -0x1514094dc8221c4a30611ebd432fe430c474b22bf862163928faa7d758c907fb -0x00ce654ac2b047bac177d2ded9ed890fd27bb852502a3c0b371094d071420d51 -0xd1078cf35362e4e9264b97228ec9b0030af7a1a028072d1372f65b7c665c70ca -0xec731f55c3052bc716837f55a2d0de1e664a89c35c252f3b797d38b1ec822aa4 -0xea68dee96cab29987c31e7bc976c6e51e87f85ce4edd632c30f22868ad5216cf -0x03464e422a78d12924e66000bd091b3944b9eb9c567d1082895f67b1124dd5b2 -0x9f7dc8426241a5c55e449c745a98fe40737045883ba24ebabffe15fa01e62190 -0x2739107d49b41099f90c98d0cf06b158b6e4b7dfeee8d8246def9e2dedf8b25b -0x61c9d1357e4acf3eb804e400fb4fac9ee9cb4444115b3cc9da1327bac96ffd21 -0x0d11e60a2d9483b2921421e6225ae0b6f7603987c48ca17572f03ff15e2f2c02 -0x5dd169f3785e9411e07383ed3fa3f7b200e543b5160a5e83398cef958fdad414 -0xc5fec632a30d58729008e37acdf806378072d8dd446aca1c0f051425e0bedec9 -0x2036c08bb48bfdc1fce688500f0a29d9c901a975dc48d51d9a5cf82cf49d033f -0x69d5829f3fefcf26b8ba35bee1e1be53853c5f7e2c89208c56381f36e5c726b7 -0xd2ca3210c10d84c45ccc0aa8a1549907b6a183b7709d27e2f64973649382bf23 -0x14dbc51934712f07bcbf4d95e20db7163d149fca1643f4d7fac7ce23311150a6 -0xf4322910fd1e8a30960822380731fbc6443340c1eea28a39a5169432f4f50039 -0x369664f0dff0ae558a8ff857695846235c543ae5f3d565db96d1eca71080aa85 -0xb8cafd8725d735448eaa9a33e1ed6cef8a5cf7ff7eb261872c5fefb320483a1b -0x58c55db38452679398eb8dd0b95a8768c14aab704d0477fe8e17ec4a9c813d09 -0xe08310d2e54b4d5cfa149528bc7ae66009d4e9f6d5f98b4ec1e5acd88cb30ad4 -0xdf29c60d55820bf277b3c2d6419c4979caf4f128ca6423bde8b963703dd61c0f -0xafd26c0704b6eec0ce0ade066c9bb5ffbc49c4cb5fce756f434c3dd6c0be2859 -0x65ba7e4425a7bd3c7d06371f5d0935a51f1476d81c02adfc46b6692a960b703b -0xd4d8193320895b85fa159ad9d5d6831d4ea10f7da315d8709cbd09d2316d57bc -0xb0ef5f818eaf08e0694dbfa10f0cfdb0c750b05de86641c6b7cb832ee4f0378f -0xb359d8f5ac94d382ba8826f79e9baf7f1fc780545aac9120557a6301cef560ee -0xceb11149b1786704820b451809a9b106a60075fa1bfbdaf2e2e53c930a05e340 -0x784e2424f1b73071173170ee163dfb5567723b6a6a012a07b743d98c74046e16 -0xf795a002631f5076b8cd7b1c2051c98a785fa51bcfa674d34aaa5aa79e7892c6 -0x78958bd83a242892a4dc861c74c06839cd615bec31f5b47522f002ec7d588856 -0x55aacd0e728620abca4e52cfc01c04041c105eb3050a70de2e6b0c005b3c5867 -0x0c03d9c69066ab42d1108594c52558b0e4bd254f5f618bf697f69504aeac4bd8 -0xa08928053a7ca802cc79c2cff345bde715f2d624bda6e8945a0f608e501fff80 -0xa5a81ecbd1bdc34b5f18ea6e1716ddb204f92e487b12a8db6d58ee2919891d38 -0x7a3102369d1e99abc909383320c3b6d2e8074abe4858119b9365135d87b88da5 -0x01c22f5d7a3617e6c83c0ff3c17d71a47b1ec9494214c46e4f8fdb3797f87c4b -0x965fa504eea09812a60d5da6aa606699a62c49859ebb3bc9db56dae4cd94d587 -0xc68c0334cd2e2a834f8585deeef9573a8eeafcbad6125163f55dab0f3d3f5d1f -0xd58bc1727b926f528e83c9f9e80f26eb7752411852648a4c5d783629d998654e -0x8deef5d4a599dc0ab8d49c335176de6682feae61a3034cf998f440a9fa67120f -0x938bfcb773523126cd35f052de445eda44ec42ecbd6a541ddd8c35632e329a38 -0x0f92ee86f73459302d04716d43188aad7d2f337d0f219298952ec9774ff53fc5 -0xfc2ed2899340b5032632f33105bc72e1de28123e268a08ee8b205ca91e3e951e -0xa8963f57c751d6f7ab04c84d6c3b94aa0e1535640186758ccaf762277b106de7 -0x8e167c8d3602716d2eb8bdd587092c8978648a74d3fcec85bab8d2e13ed0261e -0xa3de36633ed38b5a07459e21728f9a93d97ee3355ffa56e2e7f5e3748619e2b9 -0xf2dc007314ec76e92a5bffdf4c6d3c71153a5de9a0e7ea2dddd0ad75294242f0 -0x3c790a95972880c0167c7f0a5ab8e5f37bf26f6e1def2703a2be219fa6790a6e -0xd50c6e9a7a898d6500c04ac2d7facd835aaaadc3409057300ab346caab2a4acd -0xa8be884cf8989d92a2c46b8558ccb6931af67c1dd64415d878a6544d5738f4f9 -0xeabcf2ba9426d287e9f559c922e31a3ab332e7e0c06a457e23d7b402f0ce9b80 -0xe642145bf10075685e231f391c8fa9b61f85853b14c76ac3eeff120982e02fc2 -0xdbbe8a1533eaa616ec95dedb58c552704d3bb9e3fe832dcdc73b9ba60c48d693 -0x4c0bbaac198d061ffe4871c5fe1da2f19faf2555565de6ca2265d670d3127197 -0x10930e07d8428f1fa6d882a80d445cd5bfd928d7054cc77adcd0d7e19e33437d -0xd737dcd37837dcc533e6be3f3f30ec58fb4bdacb1cf2f8d8c76a88fa3de152e5 -0xbd21b20aff31b3f601418dc0fd9649ed482e7a4480c3b1a762f0d12dd6759257 -0x988b95a8faea94253b30b6385fe3a7eb0406109cdf1d0be675f2e8449ffab8a1 -0x2749c3eb71bfbb8ece328e027b0a53a242298e166d2d767fb0ef8a55d403224b -0x225ece8cd7e0bd738c42d64419818d7f7937ec7833983cadbe1b0145a2cd2ea2 -0xc7dbd2c1504ac8d28585b9f5cd47900ba66386c3d6349d6a04a93833272d5c16 -0x7551a79f5300596fa6e4292a43c6a5fb3a67c3ea96e3d44215770adefdb5acf6 -0x0f36f349a739cefddaa73258d754a89f994f1b10326a91734aaab336883163f5 -0x827791e0cb186c09e252cfbe9d25cf0049c90733b0f8a4d7c146dc20c2ce374a -0x43cb925a95fe8264616cb17614f0578967f6cfe9aae730dc90017adf9674e734 -0x26094b1eee8c7190c4f8fd4ef4cfe32eb30bc7c9bd9b80af06572be408a66863 -0xa8493ae118a9f167f5451b1940748f53bf40259403da7f26b7c222a75ce5f78e -0xb55844dd152376739de3a5e9152884dbc05c4317c1464a5186bd8359488f6bce -0xdf3d2bb7dfdb3cc31fa950c5edb8012618eddbfa4c7e92a5c9c44bd6b74f5b42 -0xed32217ef8cb3832f49917aa7fd76351d48aac773c87a5b6bd24661be1aa5262 -0x8515fee9f82484cc884b7bf15dcaae69633a5ccab3f6a865a9d48657c92b9cb8 -0xb4a37193c40404983515871e1f1c12671393068fb7e11f1be8718bb8684d4ca4 -0x76deba24dfee068526ecb57b6c7494b3b90891cb0c7a7832eb87514cdde31433 -0xecbcb69a6649b1fdd36b7616dce3e84d20d6be44775254eb37426a2fd130d1ab -0x697806ac7f41584b5a002afe5557e9de83d3f4b79a3769286a4bf7003f4b7749 -0x31eca88293440faed99d834d300f9c5b9bb6916b622bb92d69b8d6203c8e74da -0x54a7ba9bf9308c3c6e6d32860d4abe1aec703b2924e0147614392f7bd672494e -0xe688e915c70eed2581e80a212bf656e968e605bd4fa742c3450f1e36dbdf9a5e -0x00b58cff90a1776f862138968746891383a1a4aac84bdfc0bf94c2db890b54ba -0x6fa336642823f20b89bc9c11aedeb29681a02ffd69ad8e3777c7dbd637950b1e -0x9a8649f55e79bd90493a12921add8d4772a3c1f23d75a5a2dd4de45ca26f6f39 -0xfa29f409070e9aacb9d3ba715cc19da8cb58c1ec39ccb720747bf56af96cb06f -0x6a48f086d1ca332427b399102c4a6a0eb1ccd4966dd3f002e479579b14f1c9c9 -0xdc0e3cda0dde76956328125ec9e8227a67743ec4e36feaa8b15d7889b2496cb3 -0x8bbe044d6c4da8936bfc7bb69bdbfbecde70a636962e56b20432550edd10dad6 -0x42cc880f527a96248c7d2b2a8fe2f5aeadbd9b49e2b845c4f237410dc693e351 -0xb849f15d61acab84aa557517954d3fed6bc8d1e5d61a18c301d2519bb48166b3 -0x7b1204e37c6b68585caeb7f452681716e1d99ca1181243f74552be5a701679c2 -0x2330c4b491c2174ea3c9c1956dd22e2b00842cfc9547238143c8290df1dff73c -0x8ebb3e12e903bc38aff247fe7991673362177a2a750a99d351e2fbd38e701393 -0x7fe2ba1cfda9402f21e53cfcf477a4b717fa283270e94c279d40b0e08d951014 -0xec55747e401d166e396feb4bced72b561f762dd6f42ed46ec1593e9c2da40517 -0x90a5cf3ff7d5e380eb3eca7c5974b7028f9a215b7fcf6ca7936c2ed1f9f16728 -0xb5320dd0b0eab4366d7ad4cb2468a1eb8319fdf6692fbb13608ca6582ef59f1c -0xb310c9dbc4b9ce2507b865d2bbcc476188e951ad193d788695e07c538a717577 -0x2297ab12f5df23a517b55ba90766df903532d73686cfd684e8d27550895eb8f9 -0x2aed00b44c920fa39fbb10c71f47c46151eb1602732ee2ab17c376857877a146 -0x2d6c9d2723c8ea9a5eb7fe16e132a3a949689f30e61f0382d41b96c119ce94e5 -0x4fc171f5a47dcee145a0201d3bf2a05c760b6a7f4d0abf6e398ace37e49795c6 -0x90ca2af114ab8ec9c97c2ad28c54194ae75e33341a555ef307a85e5f6eba44ca -0x81388aa96edaf41bd2c4059598b4063d5fa34828f54c205ad1d28970109b6ba3 -0x0edfe5b620082ce82e5e036a4ef3c3463db25ad84d82d35a2be5631b81d49a99 -0xe51bac711c7792649fe531b25e4e2d24c027520ba3cbec350287b35e2912b152 -0x791dabe6166f1d674c68d89f9168e56def22f2f48f7281f86f05afa6f4afba8a -0xb25761a65bc039e97e7d5e04803a6b7a2f746ade93d51b5f33014f8b59d6b3ec -0x6258ab6088c5fcc3ac44634ab5ed1aed8e4c6fd0f156c8f57b3862d58296b336 -0x96bf326f8378af4a212e8847403325e14514b740c12c7880031f7e767158d816 -0x8f57219fc1d4f8dbdfbeb15ff479689ce7248540c84fd50397f5cc64fbe13c0b -0xf40bfd7515b38e393180ae0f7bbb2de47330006c62c4923e58b25f2a2d321c5a -0xcc7d3b61ef0ddf581dc12cd3743910c3008e28444f3bf8c0735409ab3a25f783 -0x15e5a2561e2ae82c56f802feed16c79ccfa47b817cce9eeb4cf23cfaa9c0db38 -0xf67005ffa14ac860dbecfbe82411c55ad1a221bbbfb3d17b2317abd2ec9d7864 -0xfc4c0440a89e06b0ca60d61abd9979057abdb203d6f53908d5d69b1f7be68b43 -0x3974e1f1cd74b864fdb92040322aafdb2eb298cca90eb7b0902123d59a990496 -0x6e535628eeaad3c63483c5917dd736899b43f6da58d40e63ae66ac8bcd17c554 -0xeea04ad78bdf7876fe87a9a0e9053423b2bb71a1251fa70a71c42b2e658b77bc -0x9c57cc8952600ea934716627a0f4328a55fbb3861c4bf0def07849fd26fe2203 -0x65d186875d716dada9ad3155fe886afe0b2b0aef02b5fe42a4e6f951ff1dc8d8 -0x8d501a42df88f59e4d45048ba16d748de7600cad6ee24d19d164fadf68e9b534 -0xc61ab9ea5df76eb0e87e495258f27568fc4ab435253e0fcc4a6aa3c5f5ffb6f8 -0x1efdf30318f8d68e2a47648abf5a56ffad1c3b7342d5ec22eead57d350be8dfc -0x63ebc75823ffb71800159f94e3fec3d57e4af2c085760b86966a68a4cc02cfe5 -0x09f00b279bbf411315352bda2258ba616b83f8ebcead632adc88d52eabbd7271 -0x5727867d2b47922f212ce364a67b7a9d489745d6012ed4e3ab2313e61ddfb4e4 -0x55a7528fb828cf02ca3238dde5d486d449c5241c7da9842018a8cbe07d05ab3b -0xe7465ee7d8bd6962d2385c67bbd2ed7c59ebaa309b0cb0e6651fec34a0d56ff4 -0x3ba5ebb0682a96103af8e33d3c3aa208378ec0f44e02aa7adad80f57daf1a65f -0xdd41a5dfce19cac982d3cd3953cd711732475eb0876b87b37336d3e51eb3b2f0 -0x813666cd87e29c1fdc949e118847a1a93e2b4fcd3e01e06f9150f40c9ba7edd4 -0x43602dc11a5cca6b5046e5a4258baa5b2fde18f2f54878220e661a2e21098094 -0x8b8bdfce44a5a2868141a046f1f429d6e96224b193032e35a5684a06b7fdb281 -0x5d929c511032c41fe579cd31d68327cfff394b05a245a9524de5c4737e38f99e -0x058cc1d01f5b774162e25de78439c471cc3e0ea1cc6551590bac408be3aea6a5 -0x36adbdd8e84d00ab9eb85220a5887aabebddd86f75dab9ce142c29bb029f437a -0xccfe15a652fb6c7c56aa96a349c106d3b61785a08fa008ec996c5c549e57c530 -0x3bd9daaa7b4062f8cc17eee34bfc328be63cea3dccc7ab6d18cc1c527764e283 -0x2a9e2e14fe55ab3d0968d28c3e4479b8711ec0f8bd3822a157671277b6bb9519 -0x924264e81a378ed3358233ecad505100e22527f58f8f9bb6b26bc39cf10dfe70 -0xe861599e21e3fa3a4c4c3820c44f980dacf636b33d8473ab0095615ac4bf0fa2 -0xe27edba42eb0ad70ee423c6335e91ed101ae8db33f7dca67682eb9ba8563334e -0xba2e6e43dab24a72a8787233ce1f09fe9f0e960d68e334d8fdaa5fb0ccdc72fa -0xce70a2db99708c1c8ebf38e7e088dfa4e2c668ea80704705d5395e0620e7ec10 -0x0b13ad5a911cec44b039f6f5b1b6acd9eb3b3fff9c6d9378f9109d09f20ccbb3 -0x34a410fb0c1dc8f2d2237d6b4999a710ed9cbbfd9ab82ba461696e42c548f1b6 -0x8579ca47cc639691d7cfa6e54e18365c0b5cfaa33726be7ff1313fe1386184f1 -0x53155e311b9b8c55e83ddc45b1b159fa80123bab90adf9b8dd2bea0d12dbe012 -0x597e76eb3a055a97baaa2c97177ec80b4d079ec0b18cd1c4ff648ab5507a2b6d -0x659917470097758d1fd226dd90f2c16224bc6c25156e0790931a8c16c374fdd2 -0x4acdabcccf0668c5d0c8580786665981aeca945294fbe8b23cffbd6775e2b465 -0x484e11b7a3e4fba0b39e7d8692795972bb65b19f0b296c8320949b6dbf1f44e6 -0x42ad861f22da3d9870ea3e6cb846a1a47e62ba6754d3e052f5e21373dd62e643 -0x5d108987a6f95a656c1b90999ce7122930977918cbe2feec03a9b394603d5c1f -0x1350f7942e96d46351c2441b55490ada6172d489f70f34f87728ddde3d436650 -0x64f280db5e6ec947c3c565cd760c360df4f160fb9cd9f181c51c231570b43741 -0x92e5268a2dbb03066ada3c0a25874d71023cdabbe251536fdc6d5a5335a23000 -0xdc1e3e849d1159c1206cea14fa4d61bf78e3855e4959be9ae11ccbb01adb611f -0x8fa9e7f7fae225cff7d12c0a2d505e271833249c20505902efc5a315ff684b52 -0xda3b7bfb59d8b835c80c9ece5cda46681383c814b122d777f0437258a9a5ea32 -0x53a4e95e7dd668ec68f119f8721669eb5141c91f82a82c6a67cdee6a947d3dbe -0x721bca76afa73ab2f5ef1efa6ab8a3f58d933edb92c983d957e4e5fe611ceb10 -0xf3ea8034d347e426866f2b2a6831659fcbeeae14d0d324fa6fc5f3d58e65cc2a -0x49e3f44176f028f21f7614afcb43844ca180a6eca01f502c3906e48665aacc75 -0xcdc723222433db513002e4c07529f11a7e02c940db6fd8969ee3292c14a5ffc9 -0x46f00d91b7f6380034e4421ab730baeaeec708d9deb50c4388228a060cf78287 -0xf19f8de36bfa63b920bf598b1ada144d989eb9fe2cf7d0a23dd9e83348b9cc22 -0x482236d7b755a6f8be94b348932b2b7e1ddd459023075d6c3db95d5faed0b5c9 -0x72dbfeec84942f11340c29e246193dcac246f8d3a4438a5d57d29784730163ab -0x60b8a887333436180d188aba4aac053fd6004587bb657e17d7d7668eff7671e2 -0x8d2444071f05bfa1f5ce8d282bf5a39f2c3c96e69d5a39e85d5630ab6eb1d00f -0xe9b95725f85a958903722c67b3168f1a2ce3a119a37ec760a7dd7107c72cdedb -0x1b0969e44358126ac1d9e9da144802b9aa4b4711c6861a247dca6a1e2b6558ae -0x1b12955f60690fc953ef421c99b2cbed613937c7e724a0b67730bfcc013a1637 -0x796f22373f0afbe16ae3f55221e891f5da6978e989a9623a5a98e88d71726a68 -0xc45359a9ecce925ee50bc68da1529bb22fdcc0e2f89e0e730b57416b94cc5789 -0xe64b4a344424d50c5142a8c701b909f702e505b01762ab55e367b16ecedb9eb4 -0xd933d38ae5337f8964d6c0495e60237a11cfba75b90badbe5439ea53823324d3 -0x7d75b5b76ffc7ddb5f62c7796bae0026211aa469e1f749d1d1a3cda5483472ee -0x33a840989bb82861b97c052b679771c6f4a1c5b4ea9f12f3616c3b4ed33451d8 -0xe1abaadd848a9524f06a096e599a7fcb5985adc66f4ba3d07bebdba60cc6d2c0 -0x6b051e41a06c38e850e0ec599f6a934413f48b04881bcfdc81e4f490c7f56865 -0xaeafa018b26fbbc49a8e80325a4378df8ccb24a81fa9d9873892fa12dafcc6cf -0x32b5f5105141d9edb7d6514499ac2a0ab2de5b3b9349a424cf5b64a8732b1d43 -0x7f5989234c58d043dc0cb3eb678682870a18af8d0f469cdf2c18086b2395d97a -0x9393013481ca5061e8b8575a49ef2b93ea6fc32c6f80a907fcfe8f9e32073d9a -0xde15b255cb49b0a5535347dedc2d889a3c9f97f63b0ddf848ee1da2e648cf0ca -0x1c5bfc6fa1d8670c1bc5f3674da178b86f6886bf1aeea5210f9cf7bd022b850a -0xd9413f9e050ea8220bc80b3e90cd682bd62ff9e5055837bdbe47082c1be8e1a7 -0xc9822a836e4ce36fe4f42cf5eacdeebb0fbe4cf4f1b1abc2208d48f4cd61ba4e -0x898e289dcacecb5530b30c468a4e2629e41e72a831ef716f5c4fbc670037147a -0x64e767eb151a70d3145181aedc92024575416498141cf3aa1125155e5a6fb004 -0x3efad455761ca766ec56df6b2df8889d2d5f3986aec6eef0c16f769f7809f367 -0x37fe7172e78027fae26ff17380e75326f81fa6d67e269f8df68aced15d410fd9 -0x26c85a54796573260af42423bdd3502aae6db6ef1bf5ac72d3400bbcbd72f586 -0xda8478b391da0ca1bb043e0db60347a803c3fbd282656fe86093bfa7541b1799 -0x8fab3215ad31f3e8b2b7c3b43e1ed3afd13d671fb746fd7497192d6374140e6e -0x4966367afcd7312b7e33f84e6b2674eb458b5699e7a694542e3c4406eb9d67e2 -0xfdd3cf46366254bbffcc40d7ee2f1a5dad6f22695ea6b57e0c331f4b7c895ccb -0xf6e9857b1a67523d5a6b27414d6d707c898dc063f5f143226e6149f5e59f8dad -0x4c8980b0ba456cea2bbf9a75476e984554a76aff986268395d6a24d30ce1b62a -0xe3922ccdca8c5eb48d501ca91a7a33103ce60eb2070c10b246ab61d0af158b24 -0xd49a0853d2686acb1d3cf58e38ecd6312912812eee2efdb8d04f06196cc310ce -0x324e3145c0556f6ed8515eb4bfe0937f8b849cda2894327c6fb011ddbd39abe6 -0xa105f2a6cc2cce4b300ca798cd698dc97dbbb494ed204771faa4b8964a0883b0 -0x5b84664b0006e38c4844fed6ea5ebaabfa4cc661467969fb4b68f996e8aefd42 -0x1ee4380ed66da42f50f61b7e32ae639ed350e13e150605c250e5e4d3d02eda96 -0xdf82d978d2a983c67464fea584c09d9099d98aa39854a3e9ad68c6948c16bb91 -0x87d498cc480e0c93f3ac1c1c39210db24adc5c7f46ef7a0f40df077fe79cef80 -0x2f22d9448a5d727c114e9c9fd295212eab9521a2f9cf3d010252831c9c461b5b -0x916857b93b10e69b53ad469779e4979c121bd7ff83f3d698854a2fc1c388630c -0xaf8659b960b399ae61a034c3cfd3f895fa2c4a9a3eb76f8a74c98b9ff388ef59 -0x5fac8a7e18108db0285b25533b81ae379f8b39b7a12481afcd2cb03842051a94 -0x053deedf281ba0c8d3a662604b1992a303ee15dbc0e9cbf3c51a0c1461ed42bc -0xe2cf2fd2cbf0b174f847363215c734edb1c2f7c5ba6f4b0933d20f0ebda06037 -0x4d320298959899157ae750ab0b045cd769989b7cd3b740464251eddf20fbf0d8 -0x2b1f22c5b0aae575c9cac8112ef4f019586da3dbabfe9824bce90b1c9a208ecc -0xd18890d5fff4bf23264b617e973bab5b80bf0cf7eb54a37f5a2a0a574c1e3f39 -0xac00b01ce788c84440221aa54bfda408a257ac40f013d1cff4bec923e7571428 -0xe54cb1bf12e9915f49f13d347e07d515ae397fcbe373f0d1597efabeca5221d4 -0xf9e786e16239ae24414c4b7e7dc30f3be57e5e7adc8abc3922a2cd92200bb052 -0xf04bd417354f8a01c94a0663ac93a31071dd0ae645e39ab40f3b9e100e8bac78 -0x78e0c10ce13bae9a40b36d59ec7d59088cace810add4c83e3bef1ac0ebab27ca -0xc7e900030e2b78f1a73056a9d4e427276bf32e05b36922b5cc6e345de723b869 -0x12b3439d30c1ce04e16dd847f6fc1ccbbb1b0969de7f875b774cdfc11654c3e8 -0x01063609c41249e31d19573f557dc99f711a2b003bf49a72253f47a64930cbe7 -0xba3518367d9b43d3eff37bd7c885303714701e8fb664f43740f61fbf39361b44 -0x85b3ba519a16db43b7ea184b0e4958878a11f383c17aaeaac80d8d0653fbbf3f -0x1370a319904ace2b82ff164bba0706920544efa4f9cacf75531403fb84d0b3b1 -0xc5b08c65d2ea505fab4bc33c748b1f41a762602267c3663b4fef3dc702c1c6f2 -0x5c022c4ad24f48db83f98f918052ff5815cd6580a9706532ffb7d12fd02e126d -0xa75174c3e0fadf4d87b5010a82131ab02215fcbeffd3b14e0ebb9567d56b2f38 -0x0906a398cdbb99aa69ea16d8cafa141ef054a652adddc3d3cb874ea0fe576ea1 -0x96eadd41b093c5053ca939aa5001becdb2b1febb8ba5be93b12c1857f362fdfa -0xdb5583040f24e3114eceed24fe03f6af31a6eba1723fdb5fd26dfc3fe30e026d -0x270fc1bc74eecedb54298b113e2c5e79aa5fa2bb993362c13f0e69bfd228f6cc -0x0a01bf9c10ff2022bae54cc5490a86390466f8b2fe320efc3c2e5b92a5e814af -0x0fbc7b73a0974b870e5710cc22ed5717b80ddc4becebd339f99260a24f439fe9 -0x2b591b4f408bfb81dc665080070d1aa86249dea8c045f6458ce4de39a5f3485d -0x9721f6268bdc76e76bd1ed0a1f283b7b876d669202899cd76f3e020b55ec5d20 -0x0c50b0bd670944cb5ef30e3f2942b013e1a32eaaa01b7a82114b8af41ea7958c -0x528f519bdaa67f07131480462dabc80f1e3026369cc54da2f69e64dc473b5458 -0xd1fa5d09a8334805e02d26179ef416f0a1b0055ed4863b86c76d94dfe295bff8 -0xef1ffb3c5b66a83b2302c8fbc34f9b5d4d25dc4348f3d4d1876488ccc7617fed -0x71cb11b33bc28a2d68eb695569e93aa49f76d7d14465db7117edffbb23b63c52 -0xb93754dfcca3bd8852271094556eabeb948a59afbe9c4d74ffad9952ba966006 -0x4b64b6c907f486a7fec08aced80fcb784e8ef17ad13bbca027305c06e486ea5f -0x1bb54ba8ccec8e14a83935db520d45f9bb0140e811d3267ab54d52c5b546bb19 -0x34b8eaecb4c2101d6f543eaf2075b48bbe067d02e2b0b0870232a129ad905b32 -0x5337bde3ce97bd1632ce55deae8d83e6d20fe5d2c9a1abc8efd9b65b819b0e8f -0x60c404d6937630d7a73b456b585a9802679f6ec27f4dae492b8f4a9857cee944 -0x9813ff96ea1840126872f2581f2b2b470d7b22859e5611a248f0aab643530765 -0xf59efa7d50223f30d499868cbd4314e27311ef839110827621dad6c1561cc3cf -0x9806c89ef724e300368d0d666f760bf6f86efba85000de4af00f532a4d870018 -0x5458a91340c54ca7cfb294c19137d7e69a69d751b338a92aac7137ef10551ff3 -0x56b7fa87f1163d0953b5a95365e2609f6d51d1fbf39fb8d3c7875cdb7e985fd3 -0x8625c538c407bd718babc655225400d3862a829c4d2e909d1efaf2e4956997ca -0x9f56ef29ef6bf2a706484b11b14db274489fb3d13e7a508ad87d248dfa28c7ca -0x689d56793f7f375c6e51db71b59ef89418e6b09ae43b9b482e18ddc2c581794c -0x63cc12760eb5be73e2b1d825c19f76e9a775e70dec7f6985d13b370f5a10b199 -0x046512bc9f7e27aa8cc06bd48316a3b605ca79119787030ff440f499e9b3cfc1 -0x18cadbc34c320a36d4c86d86453e8ad798df65365644fad90a2313c670c82424 -0xa98081fdd0c9b1f1c02c895167b86b9452cff545e0d454e2c8ab43d86a2218f2 -0x281a08eeb04d806e65dd44a6d6439d3f76ea87837a33b440d754a24e8ee88b48 -0xd94ec367ca5a939a0b743eff114446ad8a5d5301330b7d8fb320ed2c526ac9a3 -0x133f4e15883d33d01b9471f04faffa9251917f003319d25818f647e1d7a386a8 -0x087db7e129701f876c582b81f5dbbecfae978440772704ad6d819be02648c9a0 -0xeff1fb9312235548fd84a8acc4c58f71212c6a2e7a17a3525bcf433061567604 -0xf4723f52659d6bc9315617567bda3cb804b3ddafbcbddeaeb80ea42267ef2433 -0x41a5df0204c6bdf9196c36701c4209fad1f11acb49052d42bbb09168c22d3803 -0x30430e13b32d24e06fdaca17b45193bd67531bacf1cb64967cc13420f3232a06 -0xa64c216f5f76d3ac5b7a5f5d4afbe3aeedc452f9f835f3c4e8f3047d2a901621 -0x6f0237965651c582cdb963b45c75aa21c78b9beb0d3eecf6da5a118d799afe4d -0xd123974d6ea84c7c6c6f6dabf4af31b50e03dbf0d7d3cbb62fea95551a90fb1f -0x59ede7de8a49ada94e79db515f09a0ca96f814f31b5a38c67f4d5ed23c5ff93a -0xb01147a6387dcb918813c79fde2387f1c553d383e8e78fc77a188859a9a68db6 -0xf1696658b8d089e64678ae8630b2fe66691fb6a6f6f001f66000ce34b00c223a -0xcd6dcc5008768099827acbf9bdaa79ec9456bcd610f3c39201d2b11bbdeb8507 -0x2976afc998e4b5811cd9df3131591856726cad24680828d6c604af69cbfd450c -0xc99e7b42c1deda2cd19c8422f85ca8942866bea83150fe4d284dc8c7e8960f8f -0x610b8be156cfffa7ae19b9d3762352d48dd412539d506cf3d128d1b7d962c42c -0x6cbf838ab99f64953aa9d9c68a3a883ed56d1d29707aaf1f86d8d8e32aa40c0e -0x253435b25f03200104165444d871ef92497b44b6bfe386dab1670e46e7fb4111 -0xa165032d45f2f38f54b586b0db997a2f4d207269f0bf95afb62f1b0fde393bc2 -0x26bda9470c6c203cf72e5f55f399b694f7cba8a77691d12db744100af819e225 -0x48bee597aacdf4a0fbe299353e5f48d60cc419e4d1637d139bcce2410a8c99d4 -0x5d339fbeeeb8f3a75c7f755ae389544347f3ca5375a7e2710f29255c709159d5 -0x4d2a227e360b85c59009097a80e5dd9945b6058a9c39ea51b20f06a2150b4014 -0xdacc62316bbf883a59afd4aec1539c3b484f5ed8a9f673ed966402ab9de21ed1 -0xd5928523578747d1671cf94e4ee2b9210ae2ef376d33a814fa2d8fa89d0b694b -0xae1d34317fa3d0153f3e4a55803ab56a525340de49ff4bf71f77a98417c0e225 -0x7f1106b3e7fd6e467ccbd4ada0e1c6c9ea539e6fe81baa1902cc6c44e9e6a6f6 -0x3009a04b4939bc54e0f70fdc2f9fc4cb7da55f135ff0831473655cee7af17f39 -0xc687faeb46cbbbf7fcba4742122be01b338919e7a90fb0c17d120aabd3a4c1a2 -0xe303f44de050f4f50a920a67f82b633962f2665b407c3eb2b850130e1d48e442 -0x116bae88c919bddc98bd798b25df79873756be3ebbdca3e99e7a742cd079025c -0x1aede673755599f0de4f311561a49a10618874391e4081cf2417d6fe60c47d9e -0xf8d039765806a97ae1554af14a07d67cdc66773abc284e400b9f779accd39be9 -0xf2a14853af8e4041450afc2569a7174d9bf3ef5b147ace7d3d536a9811be40b5 -0x18cfd3d63e53cd5672c58416d9022dc09fc7dcf85e31b17b3d5b6903e57568bf -0x6fa1fc86ca7f432defe06ddc028f41b1c31717708e614209170b3982c5f699ea -0x18e2effdc3148a137bdf693aae023d5530a00a39ef540b2ccf481dd65e0d3ef3 -0xcbbfc91d34e6e4b8190d4d16a029d505fd93a87383de05302c17f1488fa421c7 -0x471b4a5abfeac751a412dbf4823102278422dfa4d7f562ca2d13ab9a31bd4f31 -0xc31ddeb4fd3596366a1d9fc9980f67394525a7be8eb998c181aac34e1c655b20 -0x7064fcd8d98a315d739e53be606a85df81c11e0921c6abc23e75fc1b8fe54b98 -0x50e1732c579cb8598d5250a066550e0636d9cca4138fc6552974e95668b4368f -0x1b081e695dc5cee3a8f68d381be6d15995a1dcc3c04ee87a72151ce1d14e0699 -0xdae69d071b9614683f3394b394c213d8518f33e8ccd61ebdfd06549cd82d169b -0xd4e0f596ef2eb8f15a2c2d0ffb45c115a44f9f78c255a4b5976a47a26efe81f6 -0x34201fc39fd694051c8658df64be0227bc0cd18d7b59635541e76f93ada131b0 -0x6a5b2ddb7a83f723210cbdbb1ea18cd4456a6390b30c8dfc9cb377a3db428a63 -0xbe85a4e621eb1d7ea14d734c725bc910ed5aa7422b6afefa17cb2e00d10b1982 -0xe5532a0e8c5cea1d8cae3cd9be799c82a5e06f2a9b592294c31c8289889d7c79 -0x6ebf7e087f8d634549718f167666a911f6c04801f80e6dfea3334d1e026877b7 -0x19fea41be201467a1b271c8981d992f5abfd6014a3d1126105853529de8a7daf -0xc21289294e2c0b3d737fa0aa10bffd2ff1d452be13968e994a84d03421e52631 -0xe9c57bb4e3c411bbc8ad5525e1d8d75b9864af9f38e4db1a66cfb3168ba04a27 -0x4da04c4407106ac89629d8530cc988793a976d56a9b553e8953dcb028a981d4a -0x253ad5c4d2892955379bc5b56afc418b17b7131bfbf336134baf769430fec2c5 -0xbad94642f5d4b3289404c350df52fd3248812bc69b8dcaffdf0e1fcbd8f706c3 -0x4f18993a556328f3729ee349e73c03c49b9fa368a9aabf1e291c731bd05cd88c -0x45575b25bac768a65a1d8cbe19c60ff4a72d125d0a5ac3d2608eff4e43781ec0 -0xbfa50a7b931b67041e9a585db1a54b2d1ee3f593a852f69e6b8607256b17b189 -0xe1ff3a532562fe03a12bb47368836cb1ce0dedaee5f69e617bdc866a56c0ffc1 -0x59b26daff6f9608394decbccaf60fbfa2a92ae15d332dea0ed5cd988afb70dbf -0x83cbf2028fbb23e8ae6d02afbe50a4bedb9469236dd509f1764e66b82e47da38 -0x6e361eea974627fa6d98a99ff5d1d5ffca1e2ea3b663c5d1b33dcce952442164 -0x9a833acc74f3c26370607ba8f5a6f012c382fc877dc4d8f478eb9f7eba41a4c7 -0x941e8c1fbfd0242467a13e047c31f5036f8d0220a9a7e6a3d01ee6cef698d00c -0x8191d16a1309d45fb8bb080c44c875d63af151b82b0780512a1faf5b89bc7f15 -0x4c80fc73a6ccbd804715ed445c6e966b64566f8b5b1b63d3d2c4bdb54d18b313 -0xc2c18bd8c590731030c77d81c8cccaf9f062dace1174044575876fbd8b646f3a -0x0cf07af718a47bf0e58ed7104577fe9802af143b36254fcb48b04fa7fc40c96e -0x4923e7227dc3a6f582b0414ca9d786a1427af81d171397ee0aff2850c9397b26 -0x71f41240c971201087d6463b95b7d1a92a504585aa9e57c5665031a483c2acb5 -0x3ef12b80d377a83b58316bfdcbfc4b101f404e7b89d6f68ac20237f39dfbcdb8 -0x216b2238acf0055962a732813e71865c78c945c991f846f74741f05ecfc560a3 -0xc4e68b1fb466bbd13b12e44e5d1911f52b152ff6d05c1b9faa5f574c6b1c6346 -0x327b202257fe6471e3d695e9c78db63178cdd1f8dfb1bd15b51c2cffd2002af6 -0x235531b421d690c2005eadc7cc4b5a7e1e5a359cd538106aa2c7e00ddd7d8d99 -0xe58f67afdd8487ae30d1ef9d37311383a83b68eb2c383013c351b6d8cf6b4c10 -0x8e2e5eccb6cd4c5399cc8cf74d68fca5157623f647eee3d10395bfbee62f7a60 -0x01b705c4c1e11a88afa76fd189a46b65048713848dc4a6bc0721e367dcce733d -0xf6f66a12feb5e3c2535d2276b5092e8d859d188ab4b83457737aca58c3359078 -0x028a728de084581759083c4fd6f5090e38aebb68b4a42738cb75f8db783e1538 -0xa1bb057cb7e21b7fa04b2a3133b4434cd8613e561884b782402f8df0b4d6a1b1 -0x87ddf79bb1bc4915c2a67b0e72c04a469ef676a20f3d2520857c096c463ada81 -0x72773b2f23a68bf38a2d13ed0cf99d6c8e17d028bc8d77ea9fe1ceb322fde37b -0x4bc612f2a9fb0bb66480dee422251ed2e7488eaef8e820c0cef57e53ba6eabb4 -0x4f27bdc77d225cfb151792cb6202e4e9717d544228d7ae70c806c651e1275318 -0xf713893947676b3760e72965861193b24abf003980e65a3332d524bcd89a6a43 -0x4908e8cd43f80047648e7f5f39eb4c7885986b55e9837426e6118c32cbb0e175 -0xdd7f480a2faa54d8d91ef961500058360d1bfa638e1fc9f31325d8acd95bda7a -0x9d842798161e1b9a2329af52507c0c0402637c08f2fb05ac1e3bc48e77f7c0d2 -0x28be319dd81e7904b5dc9d67333cc23329dd6a48f9dac105e285e1876d17a97b -0xbf9c0213152d1654ec342244c4febaab3f725820fe7b2f689df17460e5a22425 -0xbc932997fd3288871111266e33c7828d579f827e3d6d8e8bcbfa4d668e3e674e -0x213b3b54ca68a91252bf4ae8920b83ba7172a2681a4dc93b53f77c6891e01bb3 -0xba32a457fecf274582641db16ba4c52cedfca83848bfdd6869e8c1902ac5152b -0xe164ba13c241eac552f795812ed559a2320d7c6fe1dd8f5c1174fc8031ffbdf4 -0xab37853077f763cb06787d23c8355166ba75c792ee65054e649090d727450252 -0xa96fd4d586f27a7014f2cdce23b98856383ed746991806e4dc395225ea335e72 -0x805527faa0f7f55901c7da30a918e2babde61f16293d8ac0ee9ecdba5a8c3df9 -0xe80e9a5c6c201a10ce2cacc385e6d6f865668abf038bcaa211141524225a2e98 -0xd48bcad9a1340ce751b712930a373f646ab92e0c7942c3f8defb3d50986909c1 -0xc008158f60e76974155ae64faabc203d2c25f4a230fe2f7b44f4e097406c4ea6 -0x4ed7ce0f4f2a93c777a33cd7560c5bd8a9ff5b1da92dead8b7c78c4cb4d75c4f -0x59e8d28d70c9c575e436d6ad97afcd91f4de01baf22ad61e4ae5afca2204f165 -0x4d120aeef0e93203b8e02554e234efa8e24daf87172d7c597ce8369408c53be5 -0x58b720bcca0cd49360441c06d85b4fa671930cea360a9651c139ba0b7869dc42 -0xb46764eeeff7552d1a1e1d6b165cbc23227d67620abcfadfaf6df8ebf354f07a -0xf0473ba2fea680c8e128a4e874f95da91eb3a8eab2b35dfb616a5cdcc1fb789f -0x93a5d9c08a0ea144c809681d919fb06c673456bd6be0b8a31c7ca68dff5e4c5f -0xc3736830601d32cc6e078d4fb044cea1e4783472cd943fdc4c6e633ff3db175d -0x4beb009fd102fdd4274f3934e1cef44bd12620d14f77e8c1e9dc923042cf34ff -0xdfe1faf7ce9843d93c827685112c2a5ab017a83b2042611e650e1c64b1018011 -0xd0d4153edc598e0f2c6511919ef4da92db232af5453f6fa23517edaef4eb1614 -0x0cbcf8d3b60dab8172573a2ad8e261b19feae92bdb4303058ed5df8c12207a55 -0x9fb012eee546ad40e098ac770c8f565169b182a8354808b04f97225c842e296c -0xa12ba8e29c944e0a9fdb3eba06c4806cfc2aec112911c19ffa0f52548380563d -0x06c37ab12d4898765480c3012237fb0adedaed846def5f8e6a60936400f16ee1 -0x58cf7acaaec6c66333046cecb6570768d7abe3d01e6b89d4729d5726367cf0f5 -0x227b4e52c2cead54b3e4ca8ed94584a43f0078282b50ac6b6272500614b981b8 -0xc0e4b21c9543510b8ad82d83fbe25df140662cf5029192431aab36491a87f458 -0x2350c7ed86f46838adf2312769dfa11c776f2d23574c3dee384d7f41aa7a436b -0xafd84a32b811e3c4dabfc3eed04d660baf53e5275e45215e594cefb36e55400d -0xd4a501bcfe5bf50a24484a23753335ee2891d946c7c0ab67654c2c942ef17826 -0x7fcbd6ec991440d3a15da9ef6ee5d28d8c453e6268ee0a6dc030c1346371d96f -0x39deef92f007d35c40317169b5cf75ddb561b61076db9b0b57cec2e1bdf43eaa -0xcf9cd73faef481884ac94e4fb0f32ac6d93d53f2aa80ad1ee0ae74eae89b7164 -0xec229d3b58684e4098b19923286771aa791d0faec5e198c6f3e9effbe4cfaaed -0xc76f22c62db1fe3c4d3d851cbfdce42968239a593574b558ef2db9e64bcd64c6 -0x14fcc2c02815535bba692323f0c35e5f30f28a82940f286e6ee9a272d31497a4 -0xe76f44eb1afb618d67ca58317fdfbeb6a1429c3cece371ca2e1d3c239485d751 -0xdadd431c247b5e5b084d2a967063042bb3a93058befc449432e1c88988cb487c -0x151ff303e33bc92bb9c713326c626b67e2ba259eaf3603ef703c9b9573d38676 -0x8cc543fad9847473978906fd72bd49dd49321f9e84e437a70819771849c3c687 -0xbdac88e0a6fe9514914fe0b48032584c81dbcdfdf32e0ce2a12fd68c317ffb0e -0x537be463967115f3a7bc28f133b5d84aeccfd885f1adf403e1776ed62980fe16 -0x98e851888e2692b0ed3ed2022d57f0ea52d63db94d306f2523aaa22364a86829 -0x37854ca9b2ca64c8f3d636238690ec014a4e1d4ac124cb23fe8cd66e27817b40 -0xb5fd369c84257c9d89a6ac5ba9890a46897cbb98c44033b971f3e1fdbf38dceb -0x42008bbd0f7bf8efd554f5212e2a81acc6a175d1984d31cfdaf40a55b2c97af7 -0x549a77bdb62ed3480946916c7b3326d1985964a4fed83c61c21d477eedfbb516 -0xa03d9d91014a0a6077d5730d3aca690215a7e1eb1785e8b88610cb9d95f95c2a -0xd3e61f4318740808ec51903ac1424608bde4d8c33f3674f2de01d413c0442195 -0x4447cef6a53502f952060e54cae14e6a2c637c147b5a4f76220f9597e59a170d -0x52e052173ec2718f4db9fbd951cfeeae677301c4de1230118b30e44c1a0a90af -0x65f034b7dcc04a662a50e09bcb7e669a35937cdf9d4f797537d42493bde9456a -0x2caf5209fe0ad73af514cec3104eaccc954cc7f325996b690f094a5c95936487 -0x91b85c08baf668d0688ee0146b4de462601c0bd1743b075aa8d23310fe2b7014 -0x0063db26c4b62937fde8771007d3cc17240c5115fad87c382ffd4fddf15fd4a7 -0x7e326e72173ecc298bd9d9ccdd9c272003c11f3032e2db92139b16557a6795cc -0xc883d3cca6040dc160a0410c0c801626372cf6ca762bf5d62261447fe9eadcdf -0x19453418839e75bdcd09ec10397309a8671c02a9088071e4223727f9caa647b3 -0x01d3be755c5b7c44b0df64a39289dd22573fc662880b42e4b7ee70db086ad9d4 -0x91b8f300c174f2a31e03d914cd50addf07e103e602f5e3e37dc5cdf8263a594b -0x4bb39b482549c6eb7e06081a1265bb72dc08cd442764dbb542d8e956d186e5ab -0xe5a85c085f9231220c41a2571157ae6f4076f45abc84c75a79694998347a8d53 -0xec98e0124ddaf069f6ed00acd50d258385db06e7d4982def45cd83be9f5ad7a3 -0xc3df42f1cee47acc271409fa1234d628af32ec3a37ff9d165404a651bac6822a -0x2cd675ca82da41cb62a9ff9adda1ff54f91262ff12c89b0a252d5d51c2ddc563 -0x4731f988dd82fdc33814f07b918e1c364cdf6d370d690d8cb8b59ab6ba3f9660 -0xe10601aaa7ddfd9ae39445938f0a0efe698f50f9faee014969360259a559d9dd -0xb4114af073b71b7cd31d073e9bf8d579a1d282611fa19666b0fe74cbf24a2560 -0xe99a57f9e40fd68730288874c8af94f60a22fad3105b42c9c728c52b666629b7 -0xf610ea56e1147ad7095d12c3b15f84e22ece49fa07dca349bad5a1fab2e14afe -0xcfdf0660d5f2cfb25591883fdd2c0d5d8bf28bc358e813dbec242fd473cfedd6 -0xad31e5c1fbd73d64ac050301fc08b8e8cef132be61d671b6c6a347461d0e39cc -0x029f6ae713522cc694f3838e737cbd41f617fdfec52718ada4a88525a56cd3d6 -0x20e7f40ffe5a3ae74b762d84fe1f2515a8ffbd547aef5e49a61b0fd68fa8a476 -0xc1322e4097d6a0174a4409e941eceff961c915b809b47e31a7dcc1854056a216 -0xc9dbc9260e2cf9377fbb27bc0bb475ed5e3cae07c6d2ace52695819bdca5c58b -0xe82fb49c0caabb52f23b548be7c09ebde018dc526b6102e58175a08e716244e7 -0x7dd05122de125a8a86f335e2c9922a3540484f3e6706ffa34c0697894648f0ba -0x34b4e117230c89a7d163250505e9eac892d93c3b250247b8aec9dad15e115cd0 -0xf574b30bb74dbfc11236a90cf74b94450b55d4529b13bda479bef9f252c90606 -0x3acb801413f8286b1d9c8aa622af8b1d083d86b7e085686a8c08cc399a03929a -0x319d2cba95cd0397c1913505b8ae20afa1c470066ada60ab872b5acd2d77732c -0x8dbc3203a6c215cce4889c460ad13cdda00e03f61b82548e893a442590407cb5 -0xbcfe0e1800be821b6a16b83cac81a26d9bcaef78004fa289bc33a2a611b3aafb -0x848292b498995117e4aad0097cfcc0339a80166170807d88bc9c37fec7c0768e -0x33b8eaceb7aac9c9bc63cf8c1522c1003524f6bcf1a0b6a84f8171feaf7c22d0 -0x2d5ca0072cb58d2b343ddde7839f9e7589b12c8ed9e13de5725e6fa69991d734 -0xe102cf40d0477cee275702eb47f6323b4148eda11821d0615a1c1e0957e0abb4 -0xa5d978142e4a648035a133ae2284f68a36119651b9c646bf20b5368cc31c27b6 -0x1e584dca4a98809faf463bdaaf361d22d78b74f029c39bb11e67ca151838f045 -0xcdc09dc074baa989306478fead25c5fa4f2d786eb39a98c57485c49f743f9016 -0x15339660d0d60359b33e97048ac3d8235d5b55cf7e4cc5244a25a7a22a54b518 -0x771021b58b8d6a91e48ebbdd2b1a1f3ada6f90d49d751626b82192f6f6c115c8 -0xa68c21e0835c4f323bae8003f07fd0d62ae3aa07fe2061527c2f5ed314d686e1 -0xd31a9358adcfb92ee52a6b4ccf96cbf597be4abdf9c4806ecc0072613cc80cd4 -0xf15b527f14ff0e0f3e469f28a1c5edae187b45ddcb82d19e4ea9fea32908dbd2 -0x43ec14e95d43b685b8371c4dc1456350fa9c8b6e09c56f2aed3cf8c4aacd3b18 -0xc4b7bc3b033b15b966c894634924feb9f3c2e142b45dcf495de07864464d37a5 -0x84d328de32088c66e8300872c33795eafb9110cbb4253747a39b18205c90fe05 -0x73f66708a9b5fff4770b6b86745f8b8946dd1bf67182ff2c8a9b89878b50c68d -0x763d1deb1e5bc7c4b5c3cfb05469bd529aaf6705ce99ef386d4f426bd0f82725 -0x9fb49713e66fa67289750fb10c32dd5ed28e837fff1864ae9c9f45b293e99157 -0xdb42e5c9dce4dd747f2336d49aa3291a835a6e5ce8fdfb149a4eaf912097b63e -0x2077c5ad37e83c02008423be4f105ae3161a72f0a5455ab90280bb76a7469812 -0x2f82f5883b5f3027f81bab8d54acdb392094750d2bed04aa4accb99c5520c635 -0xec84e30d3e1dd076db4c9f49e6db5ebda4d6b5b624e617f8be60a9f008a5b842 -0x72b0a91c4d8be5cd23b8ec648ea3ac21f1fe38f4a6af086d7e41d7bed1fe5366 -0xe115c2207f519a407cc346ed065c6d8358295205cbd28a1217291c2ec810d7e4 -0xf635cbe8648f81dcdb670ca24f5c7ebb6c1fe6aa5b0e9f5f17a162bb70f87db8 -0x2c3036fb8fde2e35dac95c256d472d3b82b050a031147c9e557ea44d909853ee -0x6920756995102f74d4818f90c9ba5ff3935ddbdf3e0c78e359c9c90da6748b0a -0x19316f9020ba5f640b4b0b909aadcad9cc8fbc8a366c30b70792f0b90a0675af -0x3d8cb8285907aa165be379cfc95eabb3cdd2898462a88b476d42d6aedb2f1293 -0x8009774e28d53e8ffbc46dc9a7d3074e539c5c506653a7123f0b4995134c816b -0x0dd8bb2f35fad9c0f44371aa12f1a2857a15e863e26a99c7cd0c22b2c1d02276 -0x5d5e8a9acd1f11fd71602f6075210f2a992de854d31d3e593ba92832535e4c3b -0xee003afa33d802ae1e4efccf62066736c548849631b83aa35ed55f651de9041f -0x6973ecf20b4571008a015e75024c559ea6d1a215e4a3ae70aac62b1eb15d8359 -0xc7207459cf0f02b1f331e1fe855ddec55420f2e74a2a387a74bd9afba3f76c47 -0x034c51255550b76da679b9d58f2ede27fbacb7ee8454a73d822a2392a56478db -0x339d6082054b3d24a26a83f0f342c5dc3714a7d75cbd48fdd02ac0a61a0bc32b -0x45b82fb7fb7fc01aff3b9866763335e4bb5ac6974fc8936e39032ce34aa01b8a -0x241860342786afd8dd2efdcb607e0c947812a32255a80f923f791c5cee2a0aab -0xfda445a2932db467a667d3653d0c106fc37de3b97d704abf8ff8c796b333b1ca -0xf0c82d58ab2df03c5758d8ef9f95c73b0177c9b4572ed0b6830fcb3d56b11e84 -0x16352a5b570a957dc165b3676cf898fbd8bf339bc739e5e651964c93e8d29f96 -0xedd5afe81c7b4606d09a1da7cfa9ea69865ced2f4d49b9fd8766a691a20549e7 -0x68d7b280d848cab8344f8982971ad0633c00c3dbf23160efef25f1e8d31d34a9 -0x6d2ed55d5d0208a5c2972eee8003dff118af2c587acd8ef3b9a13a2e97ff24f0 -0x670129e3bc978af3e83885c6d0852e40768c0af6ffa6f8a448948ce92edd59f6 -0x0d8717b56a60395de6295c43487734dc1e1a0d058ebe4ad3f81f8a0c6840758f -0x6f779a73e13b7aa5612567735394cae31645fb20a289164f3ebe55689a1cb37f -0x63c3d956729c13f7d91aca7efa5713cd1f17fef17aac117f2bc938356438f82a -0x2737c02e9650d09e971871125bd79100c240e94bccc760a638fab7f6cef1112f -0x39a492fe46e4a1f9b3d6f46cabdfe568ffb83c87a09163c833ec0559c9a532c0 -0x3ceab4b3f2be216d0143df4cfb0c6488036cef6df5ed5eb444d06fc968a0c9c7 -0xe48731126b9b4405b35d6d4e098765b619d52f638e5a16e82d794856e02f6c55 -0xe65d85f7d81c5606bfc3e221183b67d99872cc288c800aacbcb28a7341b01860 -0x7dd6d636b12dcd11f262a520620a9af1f4b9e783df10388a88061dc6f78e7db6 -0xbb6180907d17ce9e74a24d94d86e7da2638a11c0362c0f163534aaea537ec50e -0x5f5e18a79cf40830e2c94f6894c7b46a30533aa94bd88adf992cb2efd30fd5c4 -0x03abe1124103a95f1b10b873cbae0aae4bca54b647408dbb95067449dbfdbe8d -0xfdbd169438314e9304ab3ce089d8443743e37fc3052dd3c58c716fd6e43e6503 -0x2b039619da45ee4460c23c4daa172291a220deebead5edfe6dea5c976a9f484c -0x98fdaf356d3fd9368a06fe028df23345b0b9a304fec411f6f4f0cebf27bca0a7 -0x73e47ae29205e8a70466950a76be811b7f64d49b66f4b3e2f7479c260b5c3af2 -0x5cb6cdb82572bd04e6a666b3ed3affa3f8805ef9e0c88e560293a406ae94350c -0xac5e5faf0b0459337a52e2f7aab00a5732d8e8f5515c329922d8b6aaad9966a0 -0xeb3c5b92a0e07362d1762410e9a96e992175f11e1b87d6c3595e155d982ff1d2 -0xb2aff79595aa216725bb8a39df60d7b83a39507d46113a58c2d91312d9d4e599 -0x0e35db2a67061bc1f632c8a24d6f41f5ed5cdde71cbf6135fd6126d3ca145a63 -0x7962acccd3590f65caceaf6bcce68c49d41dc8fa7e5e50cace8c53773198bb9b -0x418b93dd3277332eeae3d2254bd1c61d776ab80bd7da2c4f068749788dae3253 -0x7baed8fd734db59e2141381e2608daca2c470fc871ce7a1ceba1c59b93999e30 -0x24065c475bbc106a8d21a07cceb5a33b727576b603d597c1e39b83b406cc418c -0xcf62646da11e295c123d17f3871d487652be2c4026eb94ddf5b7c1f829c3406e -0x32956b989cf060bdc1d9377202aa0c42ccc012cf2c48015786f42ef33b50ced1 -0xa956132502ded489a20cfc20ae607f642a5c3193c9cb0fda1b5f3e720c364a77 -0x02c511577bce9b2ebe919faee1d801fb2a166dc70d26bb9e34b46e0f4412628a -0x58d01902dd821c40bf733c504cc9c4bb9aee24983bf9a74732e7d979cf762b98 -0x0f3585506aa532e5938ded43f86625b085f12de41472b8ddfb36059e3e120e53 -0x04d7bff67036ee040673234f6f46eec866e9cffe457d76e02d926f7647ff29bb -0xb0b0ca541d7b12cb677d01fe078496a37f9dec9fe314a8ba947e4c1a67a775c8 -0x0b377fe18ffbc99df28b5197e49354ee8c7e40f9511e1a50fa75e94832f7f2d0 -0xf7f4ad17f6cb48dc9def2f2ae4b11f8f9503f1fe7c6b2230c1f89ac4873807bf -0x215f9971de3f14a963164bb8e8d0e3d8104f276c687a167ba79cde1963a7320a -0xc7a346ab2a8ad8d57297a9431d099d559d863a5bf098436fc7b81f88c2e81910 -0xdb1bb4f0aa1b8dec809fb7afea76099e11bf9c7dc8a725f59c7f1c93a3021b75 -0xcf4b9de61434bef06d30fcd92e1d781458b7db915edb6a37876fc7a4782b0d28 -0xc702aedd0b2da9862b3020bbc8e494499490b8f265914d4e1012dffe1772b62c -0xb41f12cefee843f34e81d04ccc4c279b630ee39c950e983ad94ce8f27e760d1d -0x4b083cd1ffb9d962bf50ab7a05a8912e1650c3b93031cf76ebc6e75433665dea -0xf37d8ddfee98c59f2d05bc3493be0d0df4f94fd904add5c4153c3052d49b9a84 -0xce428e7f55cea44beccc5e7f776f8b630ac92ad6eab079f2113ef9483e857801 -0x61e72aa335b0d56c679bccde5fd7b446074185bbe4ecd5a405f6c7e70f2943a6 -0xdaaf02c20078bc33da6b184a66eb432fd57c63bd7656cf029e7e3e6d6dbe1634 -0xa11d22ba535ec42a6427916545f59f916ff1a62e7efd64c09f002a42fe5296c0 -0xf9171a83bea306faa4cb57b8f6120cfe7f9f4ffb2b17721cc7c43d6df9a48192 -0x2721e69e86188805b83c9730e80c977c5ecb1d03e615fa2abd75bfe4021d068a -0xe0551c51f1f505cee2e395780c4fc957818a9cab1c1345cf1f6229936aec0877 -0x2272759c6f5c05565d9ea92f04f684fea661da7bfdc2b70ed719de15c8e7683e -0xe8bbe3166361cdc8cd45dd28ebfc32dd1b7347c71a8bd50ccb350e594440d213 -0x86615040485f6954cad605d0eb9347eafcc53ea8913e686fdf15acbc8b508db2 -0x8a83632fcb5e8e58f39827e9a6183a21fc11c029929129419e57e5982bb01d01 -0xd5e66f3425698fc7e0ddab9c4f8577067af90f68b7a313911cddade20121d378 -0x1607c8d240e6308bdb3ef8fd9976013e0d07c63628a103f2b5200ba426fe1da4 -0x6c3cb53a908743b8d1125bd952967f109dc0ec6853651ba9c859cb1c9c454555 -0xc7d6191d4ae3c45c2f5c39ebc01c235018f8af5648736ca45446114048035a9d -0x738e283697d1bb6fdecdd8cfd0810b7df2902c2694197bd7623700d7635a7cca -0x43a1ee41a9d81870a009d9fa3e064da4c4f087e0754d6d56600c103068c39cf3 -0x8324363f2ef80e45a0ab237dd7df26b23b932bd86583391b97f239533248b636 -0x7397b07fadc403d2a558812e897a964546ccb46b0190b15023454c1b83c84efb -0xfd3753f764a6b546b118f5fdc788d884c916ba0045b79c94420beba24a5c62a1 -0xce472b82c94a3b7b4f523d92cfccf1df4a3d872926fba5e316c7163e3d728f8c -0x20f4f429f3cdc80ed216427dfb37e6cb7f30ff5b9ad1c7879abc936c5c45b6f6 -0xc7c58a07c4fd993eea3faf702648564462c8fcfd76a28ddb3a72bb47d9df7d75 -0x9eabd044a012a71da52cead5c3888485624b564858d8723081f0b0fa663826c7 -0x36208121804afafa524a7d3717917c112427ec6e3666a7b6bb729f27a528a23d -0x8517bcb944dcb4b95f9cae7d0672026a8788595a7e2f07915bc86ed542801e6a -0x9cfa19aab00ff83cf20786b6c1d50bcc07fb29bfbfc5d0e92822fa7c9fcabd74 -0x7faa79d196f881b477845e4921d7dcadd7e75cd4d3e1df8fd4e256c86cbc3a0f -0xe41b016fe3e7b7b0b365980e0ab3ea54660283d6676f33958c07d68506760c92 -0x72e1b424402dc28d8ab8c7668bd3240bf58eb8e51bdaa75d4395f9f60a596d59 -0xdc0728329017cf6cd40af0922139bb784bc0447117156b059728fbfa1b39c458 -0xb5fd29a4995ff64892d3c6fb5010d3b78697a41c39b467a799f6a59fc68b0f9e -0x64e06f01e87f88163164abce20b8a0f22855c327fe76f00a4b565709ff65f0b1 -0x997b59d2ca644a1daeffdee3fd1faa3b28def044a6531cdca81f0e41259adef0 -0xf99e3a2c613ec1caa0af59456b1c1920f4649da86c43681f0d4d85e187581192 -0xe85c0b2a434b605b60136afd6d988061db006760e7e5c75196447fd3b5573fb9 -0xf4e9b4bb16c076e1f232b111bd67895e7b4e1efe4481a63c47399017756c4388 -0x3a3d2c80f558582fbe9d57b19c06fd494d41646a9ab36574c244a2e8250edc37 -0xc3a199eb6b6a199cc5d1b82a78e10b54b75133a4150bf7ca9d1648be0d10bab0 -0x7f10a736f9d2ce498f92d99a79967ccfdafa1e8a0fa35d1a6d73c142fba685dd -0x1f6d5ebf03c1e0ff66d90a9bb95142fdb67cf628d4bb763c1d31a3d45ea52fd7 -0xa3a0903c21925ea5484d57b502e87b9b986fabdd57d7be641e85807c3a51acc9 -0xd77c8028ecb3f09a808a3f76db8358ad67469849f3e601eba6040e59d7063ab0 -0x71c7bd0b35e788e39b4af1abcb4cf468c2b6e186159ea4aa3a062b8d63461ed0 -0xcb4924138bade22e16a08f0e1a7ff809b84567ca5a33e2ecc2148cd1d85c158d -0xc9b6d3ac9a6fcf500746747ac3ed022c2ac8aa6188f64b2daaa5c534afa464dc -0xf1b3bfcf8b9fd83fced41f1f25f98000d6fb29e46c46746994907db16930b265 -0x7f88c7da8af5994bb78cab4ba33a417fb1f87ad941fce6a2ffa7e2f9c8c0f528 -0xefc113cf990c551d9ab1a4158e51879cf96074a2e91baa7e5b8a0bef9bad7ac9 -0x8d462d69a3bb28a76d2a34971a55f812c1f910cdcceae885835a7f19e0815884 -0x05b5c4afcc895a084b3d481e0d13a260d646285fdaf78e2dd2f6f1a1fb8696eb -0xaf541212691af518e79e97070f0df1a1393f22b189bacf6ad9eba2e562347935 -0xaece154c724ee873206b7ef44addb890d35b86cb421eded5762e6242bb2be170 -0xa34cbf1bc88a855c55197c56e6c1cffd03c48e9c2696e80ad4cc0738232ee1b1 -0x8d0a915288a2390afdc56e7460d213aba2bead6799cd9a8f759dabb4201a432b -0x0fe418479e8d8bdc45a484e2d5dd791b8bc0f52e04d271daf6450c565b5757ff -0x36c88333387c24fceaa499b09e1f548496f997ad82216b9000e6be29351e25af -0x50a3cf59e5b54279baf11e3cb749d82b17e90af1ad81083c0d0d1ceb2c665c79 -0x36b88d99fa321b4ab1c56771410c88772d7567001a99ad166da0d6d50a7326d4 -0x6492858fd80f687f1900c265efd49c8db82b1e448f6accae36623fa01f0ce10d -0xf8646b15507fb99d963a3a16e3e7f707d0cb99e6926006d7bc3baeac7cc529f2 -0xac11948d97ef3aa537ae663380162a80fc9543808da3af6cd8905284d3487a5d -0x2aac0e9ac6d0340ce6c4e362d299e78e2f700514db97fcaaadeb08f4e27b8ba0 -0xfb564803f4acff1406ec09667c5e16e841ac344474f1b998c057d1630219dd5b -0xf576538261ff257cd73f140594cf669c20a7721a162ce4ed64284e9589f9a9a6 -0xf7489daaf5618c69f6d91a44b25dc26d3d335008a36b9d8ec9b74f29a8787637 -0x561df24bd4e20d0f3813a537f7ad304cc55503e8c1768a4172be26870e8aab28 -0x58997eae0034ba23266bd1ede9a31ee8dc1882bf716f60f7daacb84e0642b842 -0x8b073e86bfe73e100253a1fb62ba9d4852681b3cf0595f730f662f0dafaa31c1 -0x8fcfd22f3bd5219234ef99dfd3a170ff5d4633c6b9d68852dd002b7504d3ca88 -0x933a89d7f53b4d2ddaa40791b5446390bdf7934c300f80b3d8618a264e43e590 -0x6e69aeedfe02084a605005c303c641d64a2ae4868876422b340c20b09355ce5d -0xaa7afa9f3ab0ba914f776a3eb5c9385c0be2468b5432487cbf93b6ee09200134 -0x712c7ef09376aba5dc5365e9d601de1655a0723939ad288cf890677ae31f2e68 -0xf5ab1b8a063d1c9cacccff233c837645d47a8d26f51295d155960b3c5167a373 -0x063006109850399fdbae5f14b2bde1815fe6f71a985df080f62b089790a3f5d7 -0x18c825b75fcb03d4504c326c4edaf97a27ebb1a5e185ff9bd3cb489b278856e2 -0xe802377658f094c676a9dc3be88f1e189091e210f15e7becdcc567220bcfcfda -0xc02d5bd55cce22ad6b60f66205d8a43eb650d4ff729d43aec5adc4f12cdfeb77 -0x73acd3c69c4a053d9cc3bd1d5a5c95f280a5cfa55296acd227a93c3bd67c3aed -0xe23c93fc2d8074a249e50e7c17c1de12413bcfe78a7369bf84ecac0ac5f236e6 -0x268225c3d6da8b2e5d0c71c73e0fc548298ca0aec4368926c5c20eaf71238dd9 -0xcabad280abf57df21df052c06cdb93c0db0f54a28691c66d91ca3c0f220330c3 -0xec0db6c542f1f30ad647964cd59b70c4b6496b2eb78434fa0178dc0500f84a3e -0xe885c073ec84de458fef1a68748f21c0c5a6bb7f672132b28ad3a9755842baf1 -0xee8e60faae82d9c597c708679385e16a31fc5cc96925b1317efae8bf1ef49838 -0x539ac69cbbd8f2b451bd09ab81ef5a095a36ba5dae13cb9ade1912bb5bdcd7f0 -0x4b58395f2278d4f7f407d91d4f1e50f3ce23aec2236224c694a940fe8748a0a2 -0x156c70e77679a5cd2e9ae282ce0c37f10416fae774209ff63c443466f2e58ceb -0xf24a99fa0640210d11d7b1074955a37530debeca7fa2d833102846ba4a0840d1 -0x3932f9bb1da683870b2a5cf18eac1d2734c060bbff50454f0830343720a8c0a1 -0x1c709900de6287e5cc2b4e5ff303633da5561f0f53f7e18f18d1abebec182c99 -0x6a5a3babb2708df829c4d689fd036e1f696d6543d484caf1c8c316e86275bb3e -0x027cb2f21d41843c2cd9723e73adb8236350fe807fc3c116731500159eae0b47 -0xbf1d5fffa63672e4aff4f3880bdc2855bdeb0316be6ea3c699690d8c5f169dc0 -0xf612f6b813a01519f0f3f8fe43f5d8d1bd7c693d65508ec1adb0aaa47deb9b14 -0x83c53e0004d1cd1376b7cf30006a7997b958b7a157d84345845eb8963d5a81b7 -0x606ca95b7f6def8e21eb82ecfa26d1a1b2b205e2dacf1631dbe3cb228ab3d1bd -0xb9256fecf786eb7889f0363203270ff6f0703fc23253f2b43ff022a4a08987ea -0xabb7fcbdffa49c7a95e69f3a22812dbebc89627b7ba14cc48a7f34d69433fc73 -0x0bbf028300ca56376b6f8db706901a6f7a0e7551d7e34844ace814032b91de00 -0xd05b2b26e7ecb5440c0f3b3253b0ae9f71469f680eb53aaed6a3b7753caa25ae -0x090a941c73faea48cb6a9bdc9557154881092366d3f481fcdc344411cf763296 -0x54053bb9ca95eeafc4eb16493d6841dc081a01df105e06a8f76864d9d15906e6 -0x8428e2180a4398ff1fd79e9fc4d74dcd745e7467d696d20794bcc9b0804f5a6c -0x2ddb9f89cfe3f5d5a57e048e1311bbc825d321e973174dd9660ab67aa4c27904 -0x209e788ed43010d257a9fe4808121751b050bd3840a741f5f9bb5ab681cc31be -0x3add14f6bd6a3b2a43726e03bf59a43acdd385275f932d2a9f335992c8708855 -0xb6d7c769ddaa269f623e369e534de211996c8567034b0748fae5751008c99996 -0xcd363eeec3f94e6d733bb749e07635203a3119ad7505700f937970108ec163ca -0x74786ea5dbd6ed10953690cb13487cf9cb11aa5d0b124d3e0d827d507df81070 -0x2cbfec49948b092e09b77aed83261ba1498413ada358978485ca48fd891a9dfb -0x4797296018da350acffdc7f49ee669ad74d3f1b9384ac56c94eaf735f74a5df0 -0x7c41e1099d4ee7f657786ec6adac54df63cb87550361c94f6eba79b88e38b1a7 -0xe19ff3d53c8cbf1c9e7ff2ac99fec6223abcd136d158957f3fa4263f8c3d6b3d -0xec9d8d0a99cf4a70ab89dea1745b79e4ca586871d6c86d8e2b062932d0555a2b -0x0469dc62421e843e8637d156133b6d5144e65f03e5effab1ffe95fceb219f871 -0xb4e78812b6a5e7dc960cace77267288f1d5c0e783dcd845ec343540a8ff52d15 -0xa27018239fc527b35d36a4a9bcd888c0fd7481e842379038679cf33991ff69f3 -0x221953e5c132b527b2596cedd8097d07f16940f378f06a89ac85dbbedb65e060 -0x08487e708f4f6a1415b87ce5c62da9e214c3a5b198ee504fa25aed24d03ec559 -0x7eccc39a872ee899ea3058273e8c34fcc7da5aa276a72b734afa594509c50628 -0x8abb74c08abbbcc1e95765648c0d18a909632da74871f09d01f17791d1b5cb20 -0x0c20426cfe32a9e45a63705a5327e0f7252e235e69aa7c91ac7a022d1802ea37 -0x668ca3fa82c2a2186677121896818d250d3ae967fb395006d4f11c2c1928e005 -0x8bdd4737b85150319ac3f79ffd80408911d641fd720c787217d4c4bf73ea827e -0x80ffd54bbba269e09692cfd66a0391d31a6bc5620c1c27b2830963ccccfe73d7 -0x8c4b8084cf68ba11a95520f2867765ce0fa18226def97f301625ae1f5a50b52b -0x190b10bbebe89b77ba021eb8fcb5d74e5d3c98e8e39929126873fc36918d561b -0x1f84424d715b3d8bc14bd5cc0a667e1ae021566ff4867562516c782ccc748312 -0x77bbc5c1c9d133f2df57b0774b29f75e76dc7cb1a0d3e0917076dbaf47b4b08e -0xa8854cd7f43bead48a2c4f193e14bb0af64aa3a3b1d3deb1fc44e9c50dbfcf03 -0x331dc175f8673f5fc2b99eb3811214b7bd703098f95f0133ee2b3ae91254fed0 -0xf6b6f3c50bfa1ba7a2c5d24cbcb79544d1ea22c0ef18a15080ea43a5bfebaa55 -0x869cd0f19104b7fb31f0e16ee7132ad83704b6cb9604de2f1737aaf61c7a3710 -0xce04062f45c171c95003d6b992c3072ae3aed8dd1fbf723834e0fd45dc8f7842 -0xf8fba8a44334249744ac15db2822631a3e92217499debf8f13ab49263a31437d -0x485f9c3cfc92294e8e1125b947d45d4e7e39ab6961ef10f2ba4e0769b9c38535 -0x58e503470e908af6170f7b0c58bfae0f2b241385277769bfa548769a3d0cba42 -0x0a2303d62d6d856902965d28f02e2d86c286395bdc2705922d3cc0f0f8e28fd0 -0x8395052174d965eb86416569a1bdc340e329e5281de17586ec7a25bf3e1d6114 -0x3bfbf111aa55e0cdb920efc759e822e469451eeb534dfcf3c7e389cf45b54dca -0x22b337dc324df3f0b4c07e3007c8d2eea47f754fedde07893f7baeb61b5c739c -0x9d2371ccb27c53678e4e0a67f9615af91ad57ee416148a2f33a7bdcaafa25bac -0xc8a12e657cc5125019e7777389bf8d45456d59d3ef79481b1339df34097cf26a -0xb2337fe918ce46587243479db5b4d5baefdf282fbf5a3a5747bd8dba2c2cec70 -0x7cb6ad1c6d00e072d85bd9924ac6f870f254271e5eb408ada8594b9e2069b91e -0x207e23fc4291dc33be63e09d4a10c1a3bb49250213eabfeca87ae15e29de0abb -0xd14837d73e038595668b392a185640a42d14b9c89224b5ef5c51af30a8a8a6e7 -0x16af27bb27b83eaa977a2919e79d29f82fec9929724b960cc5cf08d0b42620f7 -0x2042f4ea65a86fc993f40e93c6b65272c098e480e89128c46739ddd7d7dfb43f -0x82b5ceffdcdd6feba7f9204c75da021f5518912a42c014111c5f5ee5d4a5796d -0x236f8dba1b98a95eb1c108bba2d4818d2d8ded03aa49de50af8bede589dd042c -0xf4aef5eb521108930cc0e808247d1579485d49ff7d7f029cf253a672a8cbb4a7 -0xd280345e465b656bcfffe3e259494cd811da5c1d4ca0c8138155af0ea521aec3 -0x741df38135f0308bf85d3fb456af86768ca12db6f65f2f9fe9e2dced3aa05a5a -0x95a9b73b413da7c7dde3259f4ef1051c07719fed462179415a272c73e90c9835 -0x5991091f2033505ec14433c48cfad8a68ea1f80d8355972c8c77dbb30f2d8233 -0x0052194877269fc7a575475e4a4220ab3c92a7ca9dbc05cd287f913947124002 -0x1d97b20974c248109170e758727bf2316de4cee7e11299bfae1556da42c1b513 -0xb2f58ac2939cec8c5132419ea0b44e0ef591e5324a7a821a9130f3d25042fcc7 -0x1af9caaeccc700d711f167c984cfdb7b1a8cc52dab89254b8f2002db616e5053 -0xb93e1ff95589b4d18aed0b2c9873da7b56860a2648b6657fc6efd8d6f6617b24 -0x5a2ffdb9cec4b15cc5566004e573f9b05581871e4b925e65a86ff2a54dddaf22 -0xf3d3b88a204397d9463e310bde2b0dd279032edfdb69f6acb6c0e4009ff40290 -0x3a4bc7e438537ce0aa58334bc893855634be9d26eda65b2871c6dc11f0d9986f -0x3105382e030c3af6fef8a97b3969b2aa67872de0d7b959cfbfdd61985a3ec1a1 -0x5322d6fe44defcd7dcdf316d3447beeb386ff97b9cf5e0b7e214e3b3d26fcc8e -0x78ff7455e735629f124d2ba4bb6b538b063ebc643e21f7b720349dcfc7cb42f7 -0x37ba2efe0a571c7bad85f5f45e685123eb9b8e402c0d43cd084512c8423a1f59 -0x4bf4fe5a81ee8b977d2582bd568ed38dd0a958bccfd4f427ba362299f337e115 -0xe88db36ffb94982371a1ecf7e76b6da70ff3c0bbb3f7817d0bac200d52f408b9 -0x5f6b6ba7e3e7435b7d207e416cfe0b9c781846b7d98e3568d53abc9c18d43bfe -0xb0bba8f4a00901de0d8312ebbd65340a4d8bac450e5977c627e0961c5cda61b7 -0xe5f1a0e342c25c76792d05be435ff9e287b1f975f9b21eaaffb565c53ff6b380 -0x173d5612066a5ba49a527fa0f9d7fdc78e75ea6eb6cb6917cbcee77356347f4c -0x4efa6d129e2063552527558031e1aa86ef4231ffd74aa301d0596b0ad462fa4b -0x866b478f4bd1f528ad16c81dffc393b2ab7b2ce1606770d6a9ffb682d3a5087e -0x2e328cb6c61c90ca7e43b54d2a7ecb6f456b22890e452ad547d3ec799e9fa14f -0x64badbd572c9337b1d5af6c5c1af006b3fcb46843bded58aa216a12e64b571bd -0xe3af76e6c8a81d7afa20f67ddb9bc57d2cd249aa9db4487a6625d18224e0f4ca -0xd95be6e9db48b03749d58f59ae023b0b0542792a950445e9e87f0e892247e6f7 -0x150e91825e23000ce65ec5cf950afd2d844c51ce0e7fe3b219e0e2742588f300 -0xbde9f338c71e28fb82e882bdf7cd2fc7762807a49e7c4981e8d940f66b5c1ecd -0x2431254ba1568d987aaf492c404efd39087d8c29ceac04ea0b6cfa372a7102df -0x44cad2e29912336d686e2c275753d5fb24f2fc27ddf8bb44c61a7b2dac1eb508 -0x1ce28dc1a6b4ea994771533b1cb6e76d13678d996c246ac4778828e31fe80d98 -0xd3f49abd89113672f61ab41e108f732d7dab35400830cc626e3be12731efde13 -0xeb6feed96a6057e7b0a2bfa1fa0f8ac1d90a5a12b928f035a640bd467cc3bf7f -0x4972afc0ac74a23d20c7fd37475918c73ca3c9e782870031fb3dce8e72f0f432 -0x7b89f4f28bfe7fa53bacb5084cd1a149352da0f7e625405061bf9fcb85aec830 -0x24916fdd691c92d8ab1b8b781278e73822552e9613c75b4da3003a5e66738532 -0x588d2857b83d3bbbef425a3dd61a314332bc72812d166641511c67f3c5102612 -0xde790a85815e073e19bed5aee1df5d0d98428d40d001ec46475e3789bb048e0e -0x13112b3917435d2c03c4d21a1acaf3f41b3b122686741632061e813bcbb865b6 -0x8116fed39fdf6d529962352b79ea66e4bffc1204ad98374c220a2a1a3a45f87f -0x13600c22e3bd584584023c8ddd00033f4f189013a5b367ac0ec908ac59439d20 -0x48b5826d5e4b1483be94641dfad9e901e867b432a2a5f0495d81ebb152ccce6f -0xc82ba955dce744615760e56ed21b7e278eaa01be681dc0af7aef98fb9d9299c4 -0x3307c392d166a83ec0a4801965e3f0dcfb7d7421045956c882c131a4e2c09cbe -0xd7f7d18c065cfc4225fe878a391c8235d0ed06c9e802364feb43642526bb2164 -0xa43a931b48e0d832c4366f465d8a8d94777a24159b2356b2e6577cf6fc5ac2d8 -0x44a2debfe8addb9cc9a6afb470a552e36f021bc71eb692430d5d05917b05eda5 -0x80da77dc1f8934861bead41c8c788faa4c24a663ec4586bc6d62cca41979b359 -0x99e8f263114c51219a79b0e96150bf18de73908ba68601b31735d4a24691c645 -0x45a3e05d99dfc5c888c67a567cfa73eec065cec31d01ff2035c5bfa4bc9fa736 -0xe8f958e1a1095480d3934f90be8a6f106acb35d5f7c7db484542a60a051ece7d -0xd0e3e6f036862ecc4c9eb8c4143e01425df530fe7c72b69f966f510adc827510 -0xaf5b54bbb942afa0581fa035129885af2c7a1db1b4da0b6f97c9fd1975910ec9 -0xb9ceffeec3413df146d9f9865d9016aab3976a0be76705050ff42879b40ab5c9 -0x23f26a66f478202ca9639121560883ae832a164ec5246ed106c3bf07e50857d0 -0xa210183fa05ff08773457bd8693a676daaeae13a3a1bae680aa148212caaa280 -0x10ed115a954e7d32932f470f457f93889966b33ddd6c4c0bffc3873649e72f36 -0xd36ac1a212f445b283996c8282406a878ce27ca122e1080295ab2cb9afc6294d -0xe976bdeaae61db40d0cacd9e8e3c8e8275a60f0c006c37ca102518cca1d31013 -0xab5d9ec78bc2b4b4aed3d7dc216a57735d170132d7dc9d20c7c3b687b206b45e -0x03c66816ccbfdd20c8b968041941e4c3dc50e7cf505c509c4e04564e9809d231 -0xbc59d829e6b010ce3749faec03f065cb5aa6f4fc4304ac858e06d56263009198 -0xc999bb8808591c370d9608d679524b223bf14b6b4437e067cb10cb1bfca9dfc0 -0x31f27b31a193b356b43af80f14dca25226b0b1046ec75a00b6603f9dbba0913c -0x31051c2db4eadd886fcce4486b8c27fd28dd8df4cdb8b9abf11e7853999e5977 -0x4a6c67e9b722cc1f18bac1144a62f94280819d30f9bf75c191d4f6fde50bac0d -0x41abcd747c6aef662479c62f6f8ccb9bb6f4ba767eea506d0d6d4f1aae575a82 -0x5190e10031d290f07e7fb6caa7a8f25a4098062676b931f42c572e590ca5d657 -0x90e388622a304f7249ba62c7f0d2ec270628f1fee20ba25ecbcb1dfed27688b8 -0x25d4668e9d24a0d4518266038a73f47db0ed3e44f2b8de9054ac448fa8ad000d -0x4bc73931dced4cf91d8c22fdd63cfca9cbfed324436f544e903b0c129bcc2e2f -0x2d4058edc9d54f94c983d4da7093e54f3c24fe98c34cb7b75d5426953fbbdc03 -0xeb2874f40c155b40ed24ac326d1893450e5c1e1341c6eaea4fb9854047d6a08e -0xade08112ce1d93c553d39bd3703bcd277ddd56eb5cc4773be1702a965afe23f8 -0x66284c0507758ba3355e6cc84855055679d234da2c507285b7cccf400db208f9 -0xcdf7d67b3e76d2e8c582011f8fb751820d9376f5273e0ee5d8bb1dbcb86cf3b1 -0x806c67b14b24d3926511030e1d1a091a05b6ef7d88ce8eed53107769ce321692 -0x7579d478122961fb42835e669e0e19a4cca5bdadd2912f1f60524786b3cdac46 -0x87d7ddc3456f4149c7154d1a5dbdc024743e2b0fa93ffe0aa3cfb2ff9dd94e48 -0xd86b7c7fd600f88c8cb4b6534c64465c95295613a67f87f0aeb58f33f786ea9a -0x5ba901ab29efbb9d5784731de2a9bec88450f60dd27224c90eaa5be5f2712501 -0x88dd6fcc70ca904a20e1617164e7e85af41d68ae20638b4f10e82a210215fd34 -0x5c5739e7830a108289424f74a8103d279c7ea167c4626ce4cce42c410733ded6 -0x9a5453b66067b12362bf6cc93106e9a6674dcfae11529bf4ca3e13a3223ad6d9 -0x2246d2a7f49b8c8b051fa42cea25c513235a41157abbd8f8bf4c27c73ad2fc65 -0x30f98a57f31080305e9ec9bc0f3f3770def7332e63902958a25b51ad928dc6df -0xed9d994fef387211daa7115ad26ae0713263b4ce1249a5cc758a41a6a7bb34c5 -0xed04efd84bb1c4ee1a874db40d86f3e53b61e92b4907da1b79bd522c9d97c27f -0xdfdca8569a5f74f99dfc6b8d43f3776d0b00f8c0399f3a05f9982584c70a8008 -0x1318ee4280ef484d94b8d0ef1d66790bed15fb88d85ef72d9170c679619f3f91 -0x8ff0fa7de9cd93591152dd3e6b1f47dbbb03885daebf7b2a0ea439470bbd2065 -0xa63ae4567841d0dc527bf0fe4715180e10af203e0877e190124638bdec63dfc1 -0x31785bc206c7b849210c3abe9cbbd90535b53581745183407aac01a7545e1d72 -0x8f3b7f2808bbc743471ab74008666f445734d80ff3feda3d461c0072608ce61f -0x3c19abf785a6aabd6494644c83723d1e1679b037a99db2a1324b43b5d63c1ea9 -0xf5b37100ba7dd0c6c5ecac748385ab3a6ae0eda8eeb3c5fae5a220bfc22d65fa -0xd28799d5f554b9c52730a54254dadaa6f7a150971537f40334295c861a118170 -0xa607dc796c98e0196beeea6de6930ba57bf2cbaab73c6964aecec48aa1e84c81 -0x12aef95baa12056ba8c33b45b0181faf13fa1782b659c86eb826aca7344b2ecf -0x41fd621d9026c4ff75e9250ad3107160846d90b17ab36dae37fdc85366c63783 -0x74fa2f671d9bae48119ee2fe574dc663fb44c4427dc2e47a526db8c9c6449634 -0x7caeac334ed954e1760545a05d6e66736a79cbfbb80f5a7ae340569bbf1977b5 -0x5ccd0296b7a3da761fbf20d2153f6282c447228711f9ab2e9a1436876cc8382a -0xd88bbace03dac05cb02057ef20bf0fa59b6af5b3631f381c85c3cd444f9a39f7 -0x019e567467f005a5fb7c137bb0204a9f075bbd7f51cca34b1ca24d51ad9196e4 -0x1009c748074b9d64fa2a48f6dda2d602ce902ccf6cef23fc3f49406579b8978b -0x97e1b0ea93a39628a700bc96339c63d6005ab08867c9635dca77cc4bb133931b -0xb151a98ff1e88b5338587730c402a67d5b36ddba259e023dce5707f6890616f6 -0xc71f72c7715e40e35babb8230452936dd9cc0ffa73cae9c9cdbdbeee4a318e71 -0x2b90e6fa182552cebea59cce7995e8f20fc5aee686c17771a611c151b940f472 -0x1004e663a46e2ef040cc5a0b5473bc1f8781f91a00e617fa5da74a29d0ab9e80 -0x0eef925dad830df97c3be2a2064f2ed84bb0445d53039aeafadf0994cf65346d -0x3b7aa89e1390b087b882c2ffbfb67f9aae18c663afecd17406ee2537f3d30371 -0x872a8a9b1080575b5c4f8bae9a4bb5797198d1909d51fca67d6a4686d381d3ae -0xe2b818afcd9048b1063fa585a3a314c6dcd53a4c1348ba845c1a73fded542953 -0xbf733cebfac766f777b1817c80bc65bb9643805286fad17b69b9de0b53ec4bc2 -0xb2295d77392dba7e8b58feb77cd57d661a48b8e442307ed431573f65327a019f -0x6dc50c5a3792d07f28d7f311aa7a2c91e0e4758a077b349c71d6840afe29fa6b -0xe963c64f62240b6a1e53ba434f21609aa122c81ebedcc2bd27fd690806db5f18 -0x45e493fcc478f65a8c04ec295de8e4a3f971ced12f03ec7a85c0c7a43cdc6c98 -0x7a6732825403aca895bb06204a29f5be0b918afd4b648441ec6adcb26d65e279 -0xb7da57066502b06e18e82371b8b68318334a55a49d93b3bcdb8976ae896b1f22 -0x5ccc180aa3e30a603f3d46f5912e01bc475ffad77d6a511b6631d27b9e58984d -0xb499a3adea66c207299a94016c847314d768abccdd185b8631d4369552f36604 -0x26749df6daeb7fac8f97a96415cd9532da6a814a07fdf5bd90b8d284ef15fcbe -0xcdbbe6fea80fe221c8941ca13bb1cc4a4babcb24bfff7a396d6748b7ceaca5cb -0xfc3db842570e69fc0112279f0468d6af7ee9b084e425236ccb3a773057224ff3 -0x3319ea345dff8824fb5dd70fa757b090255500176ffd2703757b21addda1b2f6 -0x11f62e55a7396d937c195bd1b774829d1c33925dd10b48384e86e17fdeb82ace -0xe944f57f56e772156eb9e2597810d6091d308b5576221df428ac73c52613fc46 -0x933e1f014c603dd2eb9a72115f5929a10f1573131d6a30aba4ae4a9b7c206cbd -0xe824b0f286663b25505737593e19e8a88d220f8479da63ab08fb88973e31754d -0x94370fd9fdb3179b19889053a334e15f3087dbc846e59782aa493126c2506205 -0xf743a59658cb2805dc9c88027cd69e2826325b8689777ce675f58d141e6fa073 -0xbd233f4c532509b70b4929550921a18bc862df6b134c9eb17b55e87cb9348fe0 -0x07249bbbff947aea00b74a617abf5479c3d9f076d662f7cf8a7ecee965081524 -0x69229022550ef526dc16c0f1390e15e8061e188514d70c40cf267882db2ccee7 -0xfc64571ed695eaa4f0012bb02f4bdd8f8ea7e387b9c6c98d47d03504ef88d86f -0xec7361089e9031c61f547547cd76d15ebf95b2bfcfc856b21339eaaebea46e4a -0x7236068cc5063ed1fec34f5e21cff50b9838b3b8c81b553432f0c940ed1fba6c -0x76209cdcee800903e88c1a95e149e29d0a8e52b63c2a057d14a4ff12ecf9a0f9 -0x9bae77c38c1ee9bbbebfa4a0e97b4b63ecb9291e08078f1421b21aed80c58142 -0xc2f9024ac94050939eabad280fc453bfd715d83026a7fefa27f8a0a6168d2b7f -0x90d4c8c83efacc758f9809ee48df2d0c76111a309703d758f80d741a08d344f0 -0x86da3cc69485e321d39b6d747effb9831718692e5600cfd135593abe7a0965c4 -0x2ed4ab8caf081a066bb4172c2aa1549787a203861ade1d083375421c182d0247 -0x93bdd153b072ca25121ed2881cb6d27c53e9f7a524e326d652f0c44604c737cb -0x9cf4b7c601d57db0fe0f17f322ae383d3be8f940d4f0ffaafda9770a27d5e051 -0xce9d8c93dad4193213da28d7092b29e7b8411fcb1033ca6b1edfcee148e39af6 -0xe4ff7e60e752baebf1cae421dfa49b3b64b0a788aa5383a96e97ce4a1c9dcdff -0x70b3ced3c2c69120d6a0df618f42c41667b881cea8eb5051aeec137ab47785c9 -0x9424e06a4ef3427fe5db53a8702423b757db82aaf19a43ab61f5cab33485f232 -0xc314d1a47f030b3dcc87776e5d72407862c1d77c0725266a532dd93292703193 -0xff616c55f08aae5ad85ab6270ad8ecbd9316c708426eb7218b25ecc2def1ff06 -0x2782cd8eb09586dbaff956208e00cb324df5120c5eb8826e1ed18304cf4833b9 -0xd8d2b17d20a532426f8639cdd4b358710e14fe6c440653e9973d814d19b9a607 -0xf32f19e36741e43a9fac99e6c042ba20749e76670a798d8d3706aaa2b7bf1463 -0xcb5f824ced0970d2776995caf4c89600e65261bb8a4b3c1efa3d1d0065fe53c1 -0x1e3998be69e9099e4ef913bb6340ac1971177b25ec034d787a7f30743fbb8424 -0xb0abec82b3af81d39673cce19a9ac199d34f9e268a0810a8da40f02d29b018b8 -0xd5b29f7e811b529c6fd9649b1500cbec517b588a06c3a0aa5cb669dcd3c8b364 -0xcb61824e6894906bd40916aee9716d8f7bc337ad24b7005c3100bae35f962757 -0xaefd9d118512b60eb03c5bed6b4e912646597d98df286587ee11637d3d584d50 -0xbb279f6415507d6e46847c4d0d607a8c36942c235f45fc3dd285d0f5a6712edc -0xa02a10e85ff4541930eac1de1922973d1eec430f2d7023c9ee10f7d1448303de -0x1316d282db4d372b223581a61511a70ab6ca397d4f6e38587dff70f444d1abe2 -0xb1ed456cbc5021dc7283c1b42358352d465864be10bd4492cf007925d6bd4cf7 -0x47f40d20f38277ab0280433b9c0119de5127c66f8811853ca7c55db7048d029a -0xab5da942483efbc3cb71df532367d6e9a729c07f6b8d03f2c0294e63da051ddc -0xac318ca7f310621f9308b2cfe86778dbba24cffd6825d7b8472156cfd7aa3beb -0x8df5d458186466c943d9b56444d1354e58344a37944cd8f1c0eafd1795e3108b -0x972d1ab1f955941170daa92008d212499ad67142e7b7ccda610b089dcd104625 -0x5bb1e362d02b79389940be30b767aa44c272bad61fab83927e7d1caf390bfbcf -0xf07efd2f3a36f5eb9a7a67db1339bbe837518b99cee7c6ec4d3256462a2e5628 -0xbfcd07eb3c54a4c4d2bbd18f70b29c44eac1b54ea6c6e8bf5ff1387a3bbc8306 -0xb4a4a50faeb6df3272751b6572c266f3320856dfbdf24cc916572164da1e275d -0x053546a60e58102be112462390b63175b95570031ad8bb875ded47c02fba9c56 -0xf324b29ac43ef93aa684f2191a0b644fcecbeffea2e59ab773ccc6f33685e4cf -0x4fbf2e39a2eeb39d8fe3fc11e47e6fdb46ec77170c77af553f4e76da35e9861a -0x2a15cab9a3c4096058973db84b253659090608ad216322f165e5002e05e8e629 -0x2398243639def635b0cf4ae9ae84842411502ddf8e3407db31b02785a33cfa88 -0x15a5ea581105b4358bb2e5600a92ad264a363f69edc5f42e4d02177540e9af78 -0xd39543d625e069cedb25278e09d15100e428d7e4cb75498260b960b765be2316 -0xa2db53ba58799275c976d0330a225687e623b9c23524fdbcb66a8d12df37b0f9 -0x808e60b6564d3e6d229a3417ef83edc4fc26b09e9cda99a3f816b5a26f3c9f60 -0xa1a12159c3ad9769a8712422efd7fa88d611f5732a13082e98677c2e973e8978 -0x58e8b143ad71a7185ddfbe4dae39af4ffb38a8ebca5247bd92c824ec2eb94221 -0x99c76d668f14fd56bbaf585721f26696ec9c38d7d7fb625326cdfcfa752c4e4b -0x71c28123e6033ce6f8c7ec74ed5156f7b2f3d0ec8021033f057746efea74f44a -0xa3867882cb98fe081a0b4c8c68dd2b888c4e2c9c346cb0130d2fee786738a970 -0x85cb6cc9de8afe16de3f1c144e248fbc9963dd50c4f55dfaf747afc2ffe82124 -0x0012a7d7d3291efd31e15071cae344c4f822ee15aafe1dabba7b9cb37b6f1da6 -0xdfb681bc74201ea475ef711b30b6f455c9660cf44f48ef0571b4b0a385550190 -0x39608b8b45e20b933b00b2f8979a7bb921bcea9dfd17eb07dd7ef9f5c2b1cd1b -0xa6eb4baceff183cfbc540b0a4a025b8144f4938dcae86f9a689cc000d12fd8a1 -0x2d7ea62a8a1f3f55f7208e547238c859317749240ebffa9cebb46a4bc12ff280 -0xa69585daac0c0b63287d82830590794b72a52b8cb1a9ce017d08f31f5e19b13e -0xaf1561b089b78a27078dae340b44b129fd71faba6fef56d5855a87b0b667f902 -0x5ea7494fb191c0725ac393844dbc69b9bc910394f9df9759f3654710d6377e5f -0x1932c2a44e509ad70c30e8d1335a857facd05d58337b4885384de3e2d093e94f -0x331fd5d53a64832a2107f773307c32742055b1fcfbd98ee9800b55c7837a8443 -0xc0feb0c6769a3046a62c94cfea16f5eaf20ba7c7087ac8fb4bc6b543f01aba5b -0x540d534fc3b168e256f452989916922522fff3b1906e59a48ca7bb675265ba8f -0x1fb039ba5ff6ffed68f65c6f620a94505d4167c207dc03f7ab428f500cb01f81 -0x1341f651149eb6bf293116e1a15951a0dbaa6402a452378a8e718d638c90226c -0x1e3edc300c14b89216a72823ffc8011e5ffdc3ba649d307293364a5b612eb065 -0xc8b4dcc5eb55490bad5a22ca959587080875764691d44f7b5bb854f52ef06a41 -0x51a598d33510de094da543f70a3012f8ec00d78ea822626e9288de56b9d913c6 -0x704372c4b2cc0d658896ccebace5149760628a47ef15aa7b4240d4b5a5e96d37 -0x639252478defa2972cb5089f04bf59512d4277a0831ed726bca9a91697beacda -0x46c789ddaf521076849142f5525380aa67c74688c94c0eba2ec71aaaaba899c4 -0x7a589dfbd260d9f529b5a8a70093ac422ccb69d597dd0545db83cf45124c8027 -0x21fb0096880c8af95787689c93e1f19c9accdea6f5e0026e64e72e709894fd18 -0x50001236028c66a5b73ffbeaac85c81aeb303534604a3d4d36b0d39bffac850c -0x2375bba43866b21c18d1972914511c6e0c2cd90732547e80b74570c09790a83a -0xde09557b5c4f353b1aa8089c5b4ac7c847de4b7fdd5a8e3f4e17f4d5f428f1e0 -0x2e19319043e07a015d7b932b71b2e79ad9cbbe62c3e7cce860a6704bb8186afa -0xb58c16f6990a0baa8ef2f97c2e02060ae2cbbe822fb510e6f115808bd2c23e2f -0x7a307801da30c7d9008bb6de919ee21f837c35d3ff43e63e310821f269cc7fb5 -0xcd1476788d2a3dd26e13a1b46d13ddadcc916ffab184d712d7f38ae9d0b3af94 -0x2c493dfa0619dd74fe64c754d4da5f81f47e836879df6573250e1a9ec0f116eb -0x9e60bb7585293f122a0ba9c23588bbcad13ebdefb82f1a10f9f588c81e6b2701 -0x3f7b2be5d2e8d371f575b2bdf359bde7b000feaeb1fd9c98ba0e3857ff2b54ff -0x64ecc6e1e73d2300d0df720830dd4c8eaa61cdbd1e3762b26cec8b1fbc42dc25 -0x1cd20ef8741f5dfb20d52e8c0721c653e1443d87842fd57748360a0b78a47c19 -0x17ad4747918dc245a163334f6b4fc5f610316d15efd3dddd032509ebf7b6470f -0x1ab6b4315a4fd9605df7a704489f1aed61d49f7c4cc936f5fa9f374928e56d14 -0xa2b3c2228ef357b9cee92e567d31b9451003565cb8c04d676de74f564a171e75 -0xde9725f4c6a653c5b74d1ca5dc236e7512c0af1ad260d2bfe8882ec931831986 -0xfbae8c0d4f02c57e1bdabe5c2e051bccda3d08458defa1f54becda4b67417484 -0x1d288ed048ee91a215014e9ca3b65a012de560f048ef355bec306dc958cfef14 -0xa8ac535c0f235c32bb4cb72f951043f21c57cdb94a11454ba78f37258eb010fa -0x8898a5983b6b2bf1bd70b8ba6db04bceab62ae148217718158c73de46d5be33e -0x64385fbc74e1719063ae9174a029d44a24b58b4e760a4cfeaa9cab99628b6cf4 -0xc632c625211bf42535e85d6dceb3cfe01f80df39593122bd7d9d4ddf9eafff68 -0x01f4c481faea8ae38d9bd231c4a8df845118a542d1e74f4eef5d708766cdf81c -0x567cba903454d534e53200ec19ebb740157537e47f669080d159c6951caa4243 -0xcef7d9e2bb3ddad70fda70c58d2c1f9ab54a70d3d328a8cfc78c490c6b7699e6 -0x8178f9bee24313a9576042c5f5b71b12e60ce40fd3174a3d35f5395d821c0a70 -0x1206d46112f8428691b1964b3530aaefb405a01a72c42a17fac8f0d0d0ab752e -0x2a98b0b5add4798e85dfb1e8926047b0114fca93b7125a82bbf0cd6aad4552d1 -0x6529ccfa3b8ff4ff7a240bbe2971f375572de98171a72e95b68e39c9976617c6 -0xfddc833376560f80031cb344b3597683f6ff07ce4631dd54472724500ad165d0 -0x088172552088282063c64d4698bcdddd20b8120be82ff99c0cfd6f10b6bbe479 -0x7ae727ed2234de5d9a72e4a39ebdba8d40ecf31ec6fe8b584183a94842b07307 -0x0266a85b0045661b449a16043f200c85011443c510bdac83e460e302b91b853e -0xd1a1dd275f0251f365c8c55807bf4abb84cec4f03397ce58838a52fc794bd2d1 -0x8fc04dc632a51d0d7aae97ac4358630a5c4e287cca5ac5c129df23a5b5a69510 -0xe34de965d6bbf40e54fcf854436663032900a77d8c93579ab012fc2f31a1f44c -0xc2452ce08f68855c85570719c096a4ac904c528dad90fb26eadcc32f12914eb0 -0xa4e8575a69a6a3e23cfad423370dc714883f83b24fe89adaca674c95f300aa15 -0x2f824d112c718f67fc30f9e42280a59cccc2de85a0ed210c3a736d3fa28fbbb3 -0xdad391f770656ce23f5ad002f73a6901bac1714be4311332baefa935d21f15cf -0x4e929cc3aba738d1b4a553046f5e73802e56ac0d33d0aec12a2fe3996118f7e7 -0xfe5fd9730a6d77b83f7eda68661ce302c8914130a3a6091c688972dfbad5c294 -0x8723ceccb526011712d12604f133f19faf4f967e4a8815ea42bbf32d63e895d3 -0xddca230d50300b2e95ecd429a5fe3a7defd787082b3a8022c928ac22218b4455 -0x326b987f6d2c7389a7a84d596b5de3804dccbf493477414131ec15c66ba37194 -0xe7f013f4041058b634db5e45b1740cb923dfb236afa36619ec8c4dd5f0a40f06 -0x0d8866795085e0a98854a7c7b883bb08ffcb0839fe8f84fa69d868ae4e87ce73 -0x0e956074f7c784122abf58dd28450be169aa4a3fc36ecd11ac3ed274a7aa6b9a -0xd085bf60a37e221d807c5013c6682705588fddedfd7c5295fd084cb7b85cfcbf -0x38ef941fc2d7d751f5edcef363ac565501e20fac71c068c289ef6c70a91cc439 -0xf02aedf4575e3f74b1fa77fe1d7a361fa1382f74c2be143ac8a3630a2acb4484 -0xea34d427d70743b8aa62d3b70e99527dea1a35c0d42da99e6dc6d60a0f9178e9 -0x3d47b7a15e60dcc3145cae9ff5d21e63a5e8690689b62a544c6564659c1d0fa0 -0x9ae00094b20d69c04b2d3c7aed9aa66dc58cd0e42bb052bb6f4be68caeac821e -0x204db4c5e43c32130ea46bb1cfe2f807193baff2551a87835eda3e95674486d2 -0x80b374609b5600a955e57a221d63c437f2d67931812be85d6387f9332421bd6d -0xe914c973ad53785f3979b0b07bd3eb7a7d52d31cb6d819541e8b8de48ed4ac92 -0xe78adb59b006c6f985f039c4704e909fd5a691867c74faf33e602b6bcf146876 -0xea7eb8b864b4c36061cbba63653be8e14d054937ed048cdb1e1810ff0a3950f6 -0x35d509d05eb1fc021d394f413d44efc4c942af8f614a60e36641c759ae274591 -0xbafbd64f0e75b93f3a846238ca2080818c611dc5bda5169a84248e5eb94dad0a -0x65f3462a98fcf13ae8b380e99d243360eb8b538b09141e90a3da5ae2d422d6d0 -0x60bb028cfc9f354ad991bdc0c6db4157e872ce5110d4211ccca749b11f5611e8 -0x11353c38b472bf8ff848174d537b6c34eb12f056f6b3f67005ca97cd155f3214 -0x9694e4459245fc0bebb07c93ff66c564018f24d74f4d0a1862475019274f764e -0xdcafa72de86cb16334f2e26006d1fbc4c2ed67fa25bebfa194a309c521883481 -0x8118bce1241b2be24fb472c2227f0d19bfbf0e4706eb21539c4bcd0e2ba7a784 -0x44e7f93698cdd0ec2a91736ddeeb1336fa61ea945b3f942f46ccfb4639f486ea -0x448940cea25ae0c638dba84154f2c721d811c773f273d00636cfef1f3a6b3f1c -0x7e4756f2b87a5988a19873d54ac4eccf8e24ec335e91b677d86ab47a37132dae -0x1fab49bfd92bf99b7705b541fdbad63d8425ecbdeb17e7b4ed988dc518fb1a1e -0xeabd0c370a881a0ab2e189bded7bfe9ffee58e4fa82959359e10b5a5f779d6a2 -0x01ca79d9d8a468fc0e41a9ea5ebce48d011f1e08bd7c43a1c72b62a24e8d95f1 -0x99d73a61472a78041a668111c834afef99f7fa4b6a21547a59e5796954b8a2a0 -0x554672db229a5a0ed4c0b03a72a4214a26442466c1cd048a21d97a40d1750752 -0xfe3a60d443d87e5e1cae8e4df85df9f6a0bfde3496b141d971bd3b7e3d5bc5fc -0x6e2669a0d4dc51c2514ef10a2ceb687efeca4111baf8f96ec780c4819d49d471 -0xce8513af75bd5e773f70303fb5791f75559107cdc94c8074ff2ed6af22836ec0 -0x6eac87da66454f4431828f3867e0158d4f9aee78a255b906cad33b421ef27aaa -0xcfe2ce7c115d96b443ffc0ef7746a9c01055b3b62b88bcb163ba5a2584949614 -0x5ed72541065c505d21e9a7ced2a6a563bbc6038f54f3ddce152a212a012ac532 -0xd776fbc2a3aec42be2dfaa94f7067749b5183bfe5cf62ed0c29f6aa4a09dfc21 -0x018d10d952af18143ae80395970081631744a5fa9340a94b80d4f06b8c25a0bd -0xc57c5dd2173d34a16a5fdbd1ad8cd30868a95b1abae22acb17ab65d2a617a202 -0xdaa83cc2632a3efed92103bf27ba247a2ab4e5f7684e5c2bb909bb982e9d7a7c -0x403aec3846d787be1a4dfa21b8eee0e3acbb5f45408e508c66c52b763a555a3e -0x173c2630116c636d7f04d24ecc74db2c8c3c28db70c58b3aa4fd4805daa5624c -0x58b096647959573b2ae326d8c64b8d6249fa604387d331a16c20ce05582adfa8 -0x0254700aa4a79cd57034d557358f468d3e281f986d7bdbf5003440573b2e9e47 -0xf00189477931bf56563ac4023585e86defcf1def03473202b1409b9487a768dc -0x40e4f366f21aa1ac74f30cf2e47ba15d67a72fa61e6e2037352fc3ba8707b035 -0x28209f270b766b5e682426b8a90ee4c7a0894b1044a88655f0738f4e9ba738d6 -0x97a91b33bf5eda38b4c9a018b3b0f68d2235296e3024e852c80f5c421213f547 -0xd4c3be048139ad6b8959c8e2314493f75a7c8cb4127dbf9e58219561e86ffacf -0xbeec73202f09c38a1d0a9af55ec22a3d45eaf6c17442da0ab71bb840475fda31 -0xe59a71f4a3dd2ae3792c83c3365e3dcd6a201ffc847d332e87dbab609c102951 -0x24cf6701f7d8eaa0972fd68ac886d36f8ec1b29f5b79b9eb8f1b7a1341f0e29f -0xdbda9ea3d9af1c61d6e75fdb973ef76acf8d32bbe0e562090c95d84a7d79bd78 -0xb3426c4acf9307b23707e283d6a3ed91b968f6dd224c327674b89e3a5d2ea059 -0x74aa8c43eba50cf7cd811b17eee016274a545262be7eecaedf4302604a96be8e -0x879c620eb9e6a1bfb613895db36b522810ac1e2ab819cab966b0a963159938d1 -0xa647511484f069ebd6b5c98cf6ea20a66fd240bca65d42c23684a83a680963b0 -0x17cae20be492aa9844a1313a487d00f1f16e2aa6d368a15256293eac1244ad0b -0xda6c07335e49ea9229b75da80249fd7dfe94e6d410fbef65f08fa92777f0de86 -0x1a37ee59e1b585b865b1ebbf902b43803b50b9a47dfa00b8f527b3f58beb1cd5 -0x338c6eddd9093d9cb679539f9bf731b0f69db2c8a1b46cb0722a891be7c45b70 -0x8b458ebe0244b35746659985dbbc4dc65d5d27026d918e6d15dcdb3bfb70a1be -0xd1bae27fe47abf3d738da0041b2813a994dbbddad071a2a595545dbbc1d8cbec -0x56c57146f2c5125402948428a992303483506745f48fbbd52efed32b8771a475 -0x33266368c049f2cc7685e1c14bb1d80f5fd88f26d911666730069ffaa204d6be -0x5c7d630c8d02c22ccce1c96e219214c25fd155ec2027f2d6b08975b0308be3fd -0x2d5c434df9f3bf3a6b68c30f79b57926fd436f74557a2ed708ec556b44079442 -0x3d05a436b6d07d86efaa3e84e8ec76c12840ae7267f69c4dca0132db29ceda6f -0x635e25c0c6c5f32199cde9495ad4de34e6cbb1850155811579c3444385d3e11a -0x40a41156ef3b2afb155034a53d7032adf23c959b29588d90a10be38a328c4049 -0x11cec81365153270b98e6e6eca7576b62ecdcc2e4de57fadd82bcdc6c5552858 -0x8087e172b135f42d90e08155247cb64eae9264a89eed2f78fcd8997c1a3777ad -0x19c3695c9c591263112d6232c813c89c7b967b1728938006fe348fa7362bb444 -0x73ca15fd8013e74ecd92bc15431f3944c225818a2e6850cb3af78baa76ef72ec -0x82ae5f72f465ce3cb3ce99e0464115d07675a11e9a59e6ae7b263739384a7101 -0x355d55e558f890a8ad20b467a4523e3298d5b9ed3c44847509d1f462ebf2dd4c -0x28ba866993ed7ef45e59c134383881fb92df6886f2a0ee21dc72c4fa96703912 -0xfb6a389ceabb382d814560b518c6c174ba8b51eacae3cbac9017dc374cf0c605 -0xa26bc7b514bd96c34f0781f86777f90f085373ad4748ef8c0c6467c3e01e47d7 -0x189aa97d51b20d8746476b0972b8f7d9869c031a48b9a6f27b1f1628cc45b3b9 -0x4ece3d9994d8d6289dea8b4791b41d9eebd564f160b6056a2228d6bae3bdf86c -0x2281d49158ac245666ca08ba9b9969bf6cf28ffb701007bcfe10bf2fe52c6b9d -0xe431e8fb452669344d420834e86addc24c37e07190f7b996156f3456650048be -0xe8d3eb4a68215384f7425c98f698c8c5843e96a20dba69f7c62fd3aa0c37793a -0x2353a8514d74e69c66812980c223dd5dfabceaf67f7b3fe16667497d20f880b0 -0x4c39fe3d1bb64a486581506b716ebd5036b12286e7cf62c7d04b8dbd5bd78066 -0x982f3e32818cb92c3c06f3829093687a453b772102866a6365676ac5e6618ba4 -0xefbf3cb6bbd7cca1e4be7a6462abe325a66a3c4036f3e84ef5e1c52d8a40b7f3 -0x497c1a45d09e59593329c46f48d23f521f81ece39bf54628bbd1d1811d090c69 -0xb7b26be96b4913151fab95829f540b15175991861d1908eb7439e2e7de664900 -0xb187faf8460987021c879340c7ba36bb64fa6461fd676a1dc1abacc20bc39638 -0x015fa4a6549a87c00c1eda2c4202fec7f4c840230b1292913af56eba99a6bf22 -0x786100b7c6fe7e5a8c00caf37dbebb9f57713ecaa809f76a0d9068e68f786b66 -0x92e043ccf4db6a2f3e3a93a108904ed59a87557eb74c71e410705c79ecef2f0c -0x1514f849614f8edc23e2f840a580880f3550eaf2bb5a9bf26f9f6b173495eacb -0xf10c902730d3cb0601a2eda039583be80e25325258abd5fde40259be2dc55e11 -0xb88c4222644e916becda46c7a0ce2f9091c45c37aaef30ac89c28daea8218b03 -0x76131add8527a0ec3a97324d3d9452c114f71e3074bbb79070c527119bc8124f -0xedb032dd6b2219b68aa1911b8663ca6958ae94b664d2a183864d05c21758f9a3 -0xb6574fbe224918833c52f381e2c48fd71b2b75824883137569938d4b0eba05e7 -0xa2a014f75fb5966d1bb4482a8c104aaebba9b84205f5d1ef3667b360728367e8 -0xc364926dc5cdfdd03b99f621a07cfbdf4651dd6308ee615456e225dda1c558f9 -0x43742e45bc90272eda9945b0991b8f69a7884a91f011e80e6ec8b46b39f87e20 -0x944a464b3bb81e18f745be8b466246ca89b886d693ab790f1f2f9fc4cdc54623 -0xa08a32e117b6b89b1294c7cb3d48c09a2f6d7e63a46d3ef41f9a29cca80b6b2f -0x69f1b04d182f2a22cd68d25432d798608331db234ca5f5dddfd9fdfe32db62aa -0x82f77d62239733b636e002d434663fae04452c6c80bbf768635c4505d82c48f0 -0xc0d13b6f39feffa75d7f150eb83ba952fa77d76d0e8462dbec951bd652f896b0 -0xf8e8195f4dce0c6f1d741dadd41b3b9223a3a94fa07d9789eecd5a55750de8a9 -0xf8126912a7b51d49dd4ac0133e9a34914b85497125cf31c8265d9daf3c43b36c -0xc62b3dd4bc429ed1d9b0c9417094de65b846a799574337b13f0d77795a611f78 -0x03d46911d4165e2cfec2cfd24a106f83f136ce5ea231a07638530e32ba731718 -0x662b21da17125e1aa2496889c411b32de0477e7677138a1906625de24c8a0d07 -0x79c83430c7fb7732b5039f89d222c84529350e241b0c7d2174fc7708be3d003b -0xd779464d38a6d81a53a542cb225b0211b42a80466c540fe51dc9c78004aa5e19 -0x4f894a9ae13b9c503611bed5b7cd85509fcb518df064f2c64572d195794b118e -0xff81723badbea3d8e8c6dcbf3f5bc0246ff3d60fcc1946ef22abd6f33de1d155 -0x4e0d9865406fcb25d82baaf4af32831f99bc560477cb8ef9ae4636ef395dcfc4 -0xdd58a89d284c97c09bcb551b867f42c664223a98edb1c4f22fcdf398a2ef3305 -0x8ca4c06fa8851b0aef27c06d5c48d45730db8c285240e077e8cc68cedc6e32b5 -0xa96f823353eb07ca0fab1e9f69a53ba383e6725f1aef7c7cd1469984ba48a8f1 -0x4936593b5b336b59e7693efd21722caa3bc2789970dfde276844a6287bbe67a3 -0x738dffe9a2419973d45cdb676e5a85f126b4b28887c7bc2aa4c046a0393cad04 -0xa6a4b1f96bc46ddbaf8342a9737393556e7c6a6f4d31e00edef2d924aa76bf1f -0x0b8df43fa2f6403e5308f06a686e7b4b0ad2cb3ae5d55986ec21d3096ea9d21c -0x1bcf3d6f4decf974d28b38489943f2e8e52738fa2a910cc55324ff5a495a326f -0x0c02638795da7f8f3ca1550fe21b9015c968a1ff42097d4c713404ac0e4361d7 -0x0e368487f15a0fa0fafdbd33137f57691b5eb368eb082bbc7d39a7a68fe7d618 -0x9fcbbfc967d2dbfc1245a1c33073318306c3fa787fbcbb56a53a5a9cfcd1dc10 -0xa702747a4540061249ab4582a8c87caed0f5503c8a92b7c780adaac7938cb1c6 -0x671b610b0d4dcd12eb8d8b1f0458a3ff1f89a7b2d3d5c4f305d66be53118bc70 -0xe2a9c0828c895631f1a6e75e13416facc7ad6b22fbec28520168ab26d1d7241f -0xd1db355cf5e73b6e417ca1fd7a379943e30e147634e969a5aad4f229ef428426 -0xf3cba6e9b16a5e18712ff0c9eb63ec91632fa4972f55f48882f58a63acd8bf49 -0x4f6abe1624a3fc58d4fd4b09b8d699fc52e44ef104547f301720c4e2feb46cf9 -0x89ce4caded662ee14e5aa438ddf55e1edbcad9b7512941a6c14a1b59dd59665a -0x56d0f58c1b47907bc9f2992826fcc24a78d632953fbf6fd68fa08d312d00d370 -0x26a10fe3e385d9ccfd9d8f32adf578b630b5d7466dc01af2be92501bc38648e1 -0x8d7f07b9b691934db31b0d8707509d6872e8f7f1301792141f8e1be5ebf9046b -0x40860efe01592a235cb654ad98ca55c760db7fdf7fe36e9b849cde2f7869659d -0xdf16f815535fe5ac52c2c13c16d67c14ed9181e6286e4d4e68e4fa2bbab67a39 -0x03a262ecadeaee0bd4c5bbb4799704096f96afbfa446a195547414d668ace9df -0xee59b45ad4750e53bec655e7012e74b6c7f7c825015a893c0a0ee7d0c0c0aa53 -0x8a980c4b7e69e27ea6d76a466a1ec9c9a2ebc8f84ad88f9e029b21a696e0e682 -0x8a271acd8fccad7144db1fe6b5707f2c48d5507bdeb136ec5805a2c2bf70b9c5 -0x8710d84b9d2ceb012a814912021dfc7d1458fba929f0450bc68325ef6f0dedfd -0x025ace40dc2b60f5c0e7d7c235f53bfa558308d474e333ce00851c634d93397a -0x62544f9f41751bef089b96e007854d2dd4b5e98350d160b8c932ec4639b81b46 -0x1c8856600507ccf9244bf833eb8b2de3bd8fd2129c35c766acde61b79e78ea50 -0x50a25c8c3efc263e3131809995cd2acc9c034039ba8ea3152ea0d6d351927c6c -0x974c73ec72c85511639c5a524f55fe7d30775b16fda7fc6373b5350d050434d3 -0x1a0519c2d072051d95816fdbd7d0dc458f1e46ec88848c58fd49dd8bfc55e492 -0x58eee4830a54603c410f1c13a7d14b0c081d622df780ec460292c5c7d7fe5976 -0xf786bd57b9ef1e26a7aa9e357010b922786c667d225fdb94344bb0ad3c17d693 -0x10404c1216a76e9bd558dc03b4377398cfcca8b78faa077d0d0089c22f0de33d -0xd67944e98e5d8a6ba58568c1b4490ab06b0d792588a6058d89d2be400f4c7e90 -0xe0c8125a891b0068ff38346fb65e1112fdc827eaef04aeb151814649da89fd00 -0xa398e9b4a75ed0655b520dbf5d70807faafcf572c9faaf0acd4522a684a4ad76 -0x78e3c93222de72c738a4d5a980f47b5b46526e05bad5550038aebc7b9cc54935 -0x8267649b55c4f5f3a3c2295e4be6042e24d50c170632b86f82eddbe2764c879a -0x39ca730d932166e36b777438f76a11aa19f4ef4f60966abd0157c6dae10e2689 -0xa02714058a6008e99267b3a96ee58b6f3f896652f603eb7a94f402f74c7cb4f3 -0xd8b86bfc468b085a484d81ac47127e1658a7d43621aa55fed5111aea733b92fd -0x6a347975c41072f5d32fc981bbc37916fb01b1ffbbaeaf205e20596ed2288dda -0x3184ac7e4337b5283e720cfe885cf0994917aefb96e9c03e00f974780097fcf0 -0x6eb743aecf241d2a83c8108a9304ae6cac4382019f962c69fff5b1cb6f185d08 -0xcfbab4e238703fda86c5a3f04f717289b25e300df77e3c6a3ee7cf0385b0ce00 -0xdfd6c5e8442027e9ba98c20e33341e316c085249f178b1de95290dd0c79b9802 -0x13ca4cd4f95f62f737ca47fe56160e4f6afe703e73054fb535da73011f5af401 -0xf92c5b430b5b6595390729242c1b08f0a7223b4a954527134c5a7a313eed9409 -0x473d2c9ad8b12d93d41cdd522a38b8e6e07ba44a86acd10b91d83b069dec555b -0xb1521e7d9aec8877883c91437ec4e8f7257c78324447da30f8bf61030fd31e0b -0x74aaa12652b5571fdf5862a2b99d94cf95f0131155249609eda7b2fd22277a0f -0xdefbb1384cd1563676c337d2b2e43a2cba4d093b5c34c56b627c9d5b83ee0e00 -0x8d38bf96c0169b90ed76cb0fb611c064ca69a2c1b30e56f1aa22249a0a6d44c9 -0x16e391d1d69c21d0e1a19ae322f70a2a3bdec3a7ff5651727005530ab444db21 -0x25bef1e8ec455b8d2fc6df66b18cd409bf50c763d51ad058c3f5381fac2dd25a -0x7ef984681a8af899879010d159ac0064b15408911fd894f4fd91657a63b4a437 -0x12a564b94e46f0721f4ca1b8fd99873b691791780ca3ba747835d35b0401abac -0x33223eec4d2ca661f78a5b1bc0db720209393ad0a9ea2eac49f5e45fef628ea6 -0x98a8d713e5a89f2a57233297c5b8532ff07769940c30e835e369135225338f40 -0xec3bca2dfeca8b680d3bdcdc656c0ba6a2bcf5219b0825a3c7a63245df563e7e -0x7f86eb42e345a1ea336d3e9c4850e22a331648772ef5f6f2420cee551debc9d9 -0xa50d7b691e62aafe0f23e64bd77ce615a03234cefb29806df2810c58d4b3506d -0xccde4d3feb750a528700a1f909b34f4007faf9c567316d0a9e2e685de2c850a0 -0xe0ab1a95eec034be1e3534696051b991a066ec8c2623d738536d30e15fc19e36 -0xbcc742d12eb263946125117fcb149736990752232a148a9f33f29a6b5366a33f -0x273d07a3b1a16670912302c574537b603e85f551e3d77a9c12128da641f38166 -0xdeb7ff65aec20f3b5901962ff5f13d4cdb70907ccb7aed197ae651d6d32c9577 -0xebdb2f135952008eb44c920f0e7b9026403e070b5a62724ab73a090bcfa2d411 -0x2e76d86356f6f264478a8d67b43f0d805ea67e7d3a250ae25b049b4560e6b54e -0xd7e54a7169c405dafe30db6f8e23d125bb564610902eaefd1aae4d34a808a65a -0xee78af61a5f45cb9806567114681daa02a9f2ef83c7b714ba92acf6a35deb564 -0xd9916fe2b103675c27950dc648e95e74a1bf47cbeb8b4ab45f3bd5574a8928fd -0x394f85329bd59e527c3d41cf3754bc1dfc2a93b0b7885d4a8421912f1d820c91 -0x5da249e721265efbff83bca103b5e23f09e56d03b12036361bf128773459dec6 -0x508fce2c55b076e7c44bc88a24a1ea159f53f99926a579119a5601578252fffa -0x7c5ba470d910a86fb4923d348c1279f04a098031cc09d944c44648a0d305ef5a -0x0df768019f075f1eb9e055d3cb78955aa90e7544c2cef92f87e95c18f5073a45 -0x2f752af74093deb6a6275fab013a28605b801e8c039612d7571fa64d3ee4be89 -0x61f8ddffe48960d776b65c19948dc94b19b2726cb39457c76970c54469413e1d -0xe9f32e57e2aa4f011afcc3537c04d023693bdaa42cfa18464db93cdddcf465ae -0xdd0b9fef8d84aa037622d00e26b9d9a4d55f18a71b2eb28b042b152688325dbc -0xece810f52658fce28c08ce69e9f8d33976ca12f000c4b33c31cd97101aa2a50a -0x7a9c2bcb48242c93f3b1724a68b3c258eb9f753e95a7dc5fe92aeddcf92d3bbe -0x8294b835edbf9e6b7906e0c120089ea2e55997a3cd362fd7c0fa2fed7fba229b -0x7eb9093160f686facf807b14919afa6db154f2b542cb3529a739f411f37f0fc5 -0x48a0d58996254699d8d932c9b3bfb0951be5cab6f800ef0da3c49208be891065 -0x0c2eb3c9e2191c0eecb097015b0c10a9a6fd8fe160d0bb2211e58bb8e0a4e6b3 -0xc57a2c15c014f0356ef64eb74a2fdb38f82a2762cd718c018691590847ee578e -0xa5539a64ae5b472cd3d1293d37b406983c398e4cc77a98568dd4e071edaee731 -0xc350a89cf7995719051929898a4bfae40672321b094426c31c35753df6d96ada -0xdb2ffda4b111b7f840dc540adc4b75c67358f0ec5d0465dc528dc3cff2de43a8 -0xec6972ea3d8503ff7766736d23d4c123060b008695e653affce87b26bd92461b -0xa74aaa779c6f81d816c1c15ae74e94aa521580680dbd343d7bfb477cd2be826d -0x3ffa172734b3831f177f51d59b4bd15df13841913c4c5e6a87066d2f65d6894f -0x0e8f538ded9c6bbe837fe5f1b1846df7187ff0a7ec193655719fb1e9919e7a3c -0x184bd69d360e66f98384c2bcc98fea3510c9465487e5396d68737ecc791c6e98 -0xfebdcfdf499c17e75c0b43f033dcb0c14b1b19ec32a5b5ca37aa9ac349f77397 -0xb2bf9a91f4104e8c1b877e4273396c017548e1bf4c649de722311347397ab92c -0xd6dc1ebb5657c6134c25b09fc9e103fb04d1393dc53d183ad179632469cb3675 -0x30cc04d19c6b506991a5657558663bf1fe46755bbb86e284c8048b6ecf312556 -0x157fcd55dc93f5f9d7afacf6e0df59913d017f29b69c74b04a93bd8a1f86ae24 -0xfd9b225874e7572a3958a9b5f0155faeccc95c34d84d70df106769fb044e3f76 -0x1f8be1686697bb924a165ceb7a86a29a79a070e2e59fca6b225cbab8beeef6d6 -0x0b19619242cfc60772bc8a263b12011f004e4fa24d949e8b4d2f29621199f7b7 -0xc56912d8459d6bd2ac0f9b9ee43dc6d2911a101ae1c8dccb27a03c348e7ba5c7 -0xd283573639957ec36374206d036982a49de00930fa3dcb7bca54ea2853af5fac -0x2b6c4083e84e4f369ca6bd077070b8f23cad339ad6f8e9c9f37fab70c6d1f3a4 -0x5c61105de873ef97fa7ff520c2751a511496963e7ab39bd6e201ea61e2429338 -0x7fec77c93d11980c6d5fb5fe98b04af0b97c842f3e81994edf28b52e8dae49d0 -0x8f8ccca58be5369985f85b7453c9502eb2ebee0916c5b72025eac29f3cad5911 -0xf3af96f26e9ff157d85c1bfaac4b81ec51f44f351e805a014757f9b516d6fd66 -0xe677a2f6c97a2986dce408de573ac101f812d90f0d793ba45f8d53a19b923eb9 -0x52d555f537784943d3242097ac67ea425ec372a1130c076d6115ed4762032d7b -0x6d6a878647193ccc8e8ddadadf271c4a53bca17d7f356382e7ae0033ea1a2c03 -0x9c7f76c10688f9a20b7d2860cd350613130a15c877eff0d851d242565c618fd2 -0x0cb89d9a4ac08a26ebc16cc13bce3d9bc96627f2fb2ce190f175da652a337412 -0xdb04782cc6d2076cd81f664e5c714e2481793773509759bf2389c63dbe15f25a -0xf8acb34256d1c5efe9d8e2035930b9fb87a3445943cba038c4ba9d40f6cadb76 -0xe9c751797643a573373c8fda3899c3f7e75b8f2afa8762913d9c2ac9294d8b69 -0x5ce47b2491a4f494b1a6d5b7d3b8689100a29de7355355c05f14f2019e29c727 -0x0d08ec69b0c1f415463eb62fab5b0e91e455069a2dc71b8735b4171a1833916c -0x53b58ed34a77fd9a4ea72fd3f0e80fc83e42ccfd26613d8f8096188563fca812 -0x80757c9bb1a5077bf9c093fbfb821bc05cf17f51c9272e22264b1286dc8564c6 -0x3371c0fe38f0a7bef6434b9765af555e1592092817f4850a106c1ad77977aba2 -0x4d7d5a1ba7138f6d9e8eb220efb68061081e976c9a047d3fe53447a63b27f844 -0x3eccf410bcff96b965e47c027ffe896ef25435cd7fd001007e6ef26a1764f697 -0x109822e7ca7a2fa48b81cb538c40cb2456d3f929c1e312fd01a0802c3b7f6c72 -0x78008ba9117018c8cf74101dc993d4e008a83e53d3602434a18b4f010f1ba716 -0x1f2d60dacbbfac3e8fd07e7dd122cf7abd510654d1eedf6ea02a8e6366991de8 -0xb00797f403568cc5684a7c1eeddb481e31e66879cfd028286402db72f98da182 -0xf381b75cf4c234de4555a6e44592f807932be8a77fd406f0389da99a1b248069 -0x335b735afaa1bcfd3830786cf50b6518147c3e76b0869a30cc5a9ed1dbed57e3 -0xf9638ebcf8a503361efdd0c73c9edd05bdcdf075a6664735fc322f436e45917e -0x70e6a9e50f6e105828fccb98988425e3ee33239cfa4b56a3d0bfbd938a0bc090 -0xd12146b1762b1a90eaf1fb2faedad7a521bb4cfd152dadb032415fcf30988b39 -0xfe32933f5a75d0362e32cbae266a4171174aad53bf1d5f9f22e23736cf3f7bfe -0x231d0fd9ed31a17506c40e03bc665c9bcdb652d883e1507b68e372f12b2759fb -0x28978e69f2ce06816a902dab544cc85fa5ffcdadd10238036eb05dcc2534dadc -0xdd05527063808ca4f10cfe4a2933734a05c1e205220400bee518807e45a97abe -0xc6a12e09d8b1c9fbfd405aec45dc2d953a090627bad40e8e08ae7d47f90b778a -0xcc50f9603c74de6610092c70c658b3c54436f4aa0d38cf049e6386c8efe61253 -0xab0aa23c47ce59787bcffb57fa8e9d33cbd7cbe050320887872c9c51b945f3ce -0xe2f6d64fcc89fb4f24cfad0d5c6822e84bd2a24adab7b44673ee86ceda3ff24c -0x9c2033207e4f8607a5224cdd506bc596536502c96b9fbdf160c7ca79467bfe0c -0x986af337127d0da1d99e3580f686ef25eb0bd36fa026c7e0a6588ede054359e0 -0x79aa552de190a370efa11efb33d0f919eb3f698c1e4c53d3f925adbbbbb28544 -0xb7744f586ef94abda56526cd1241f199fd86e4a4c661cca8182086cd30695cd3 -0x5f853af19bbb65c9604ed308f6e93ef224166a6076138a6b8f333649e027626a -0x9898f88413384da756bb24db4254167a3bc6d15142cfa978f068d0e6b611f421 -0x473aeca226f245dd1136f7df5893d9f0788d7baec3eada3de23307069c27cc69 -0x6128b2062cb6acda26cc91cba898cb390ce500efcdd5c911111a5d8609e388d3 -0x754136dcbdd2ecb765a87dbec0e10752e3ecaa9bce09d4ad1518fc1896d20aa0 -0x2659c29444821c4ef7f64abd508d87dd2ff4ef7052843494c566d053f9bb76ec -0xe2fac59592bc33b5b61def4b51120ec4dfedd8a4f74413ee294b00934e3a3ae4 -0x07ff4634234a02cb6d98a623064b56b44835cd78e874f0da94e089ccfd23ea62 -0x9e51046d4a0eead5c6e439711d6a767626a78ccaa7b45fe31bc1759c4253b7f7 -0x59e79e0e8073438a4c21b47e5a389c4a762ac07794a912ac6e98795740135597 -0xfae15061945a76911a7fef06cdde9bf6aa8cba9316ca67a153bcebb367ea834f -0xd695d0cdc5f6756910fff5d6b004ed990113ef10ff9338669d32939ddaec087b -0xe671d663551529530e67a7e7e403dc9c0896c1a67e3e6053666da6c1032e21f9 -0x8af27b1823e57729d2da32f6b5236832b95c0ba4f4994aa908c71f48be375ea7 -0x00a052df803e03688d51227cbe48a6bd8b7e883c5fd7b69c60451ca7906ad01c -0x8237ac33adba4ec75dfc843d2ac47347d6a9016368598abd8c5749af25c2afc1 -0x2e21a93e1a05268d81fd6d16a0ab92d18c4f319baf03f8d425e484d1aa022cc7 -0x5e266f0fffea3907287b46f4be8f5e2c54246b4fbf04243a91d6a9a7af1b50b4 -0x14e12c96c20ad45a336e089af2d92a26a0d6303fd50359219866f10e9bd8b0e5 -0x2ce25b35be5facbb9d75db063be45f94d0cf65a905a82fcbe2a5501db4934ec7 -0xc8c7f38686360294f5d756d6214e84dd45059b42f68b73d48ad1f78ce6ddaf13 -0xa37035cadce50ea9a9593f6522fae64015b9f951b92415995a796bfbbc5e68c7 -0x497fe91327b51a37b7edcdd6fe9651b8af135f128782304b1bebc36e8b91dd0e -0xe042bebf5e5fbbfa7d5a1666c17547b6fe022a5fd3882af663dd60bd9950976e -0x4361af7dc2b09e72d0c5fa3998da8214a1ff3fad70a7725e6d0ae248189a2ad6 -0x3e2c93229159867639015bada12db04f698f0024cf39783d85f06b26f6c788a0 -0x95334169ee75a2564a3c30a92b25650146245d1ea902264129ea64988fe26ffa -0xf385f0c03aaeafb4b4c9ada15fbca986d1d1f519172e4f3c651b3a859e2dcb89 -0xfe2961527e37b4c8033ef74eb81037bf1062b188dfb04ac3c283ac8f49e7236b -0xb109f3ad7150fe28a0e2c28f38dcade94a46366514fe09024ea206022d22a678 -0x561c1da9dc464db84dfc6e7f6d13c898ab0a0edfc108986d9d649950962462f6 -0x4f490afff3a412a25c129e700873be9b558e92f8480bdda31f974852c0ba1e3f -0xb500e1d32f744fcc3108d2c1c6f530906350561ee47b3d9ed7bd92d75f115eda -0xbdedf50526899fb9e070b52b796fdbb5e6ecf658b7deaeb33118882ee4f9b257 -0x0d03c78f90b8c622797f0806897a1cfdc2169a7870ed21d251319d88ca311b32 -0x4a3cf94420da7b7da259ac02c9f085c5a8fa9ea989d83630b7ca240c633cf15a -0x3f6e7ddb73e37028536eb7e68d1b0fc7564ae90a2458ba747add573b1fe90af0 -0x496d282055d3ba414be884b896894a5c9d88500e9c2ad623348c8378114b28cf -0xe58833366623b03539a028699bb4a2e41d69c13fa89a63299a1a9041ce692f8b -0x8e24d8255c3a0bef21dfffddad17b27eec441af2a7894b7f0dbf9c258b98007c -0xa4e9acc177370105740f5a40958818f0df645a0928f6eeee014f3e53f2a72dc6 -0xbd3ff8967cb0fd3490cc4b5a54ee188dcf40fbb0ec7791eecef055477d117727 -0xa01c8e3e6ef17ddbe8eee2515a6564fed5c5ee6c99d1509407168b4edce54955 -0x65a443ee23a7e52d95c465cd3c71c2776bc4965cc04f767fd3313e999568987e -0xb8fdd6ba926110ee8e79436d4311ebf414a9092ba495a56de1a3c753dc309aee -0x96f5e99899c3e049a5d722ebda38743d4f6e002d5309c0af96ff17d900d213b3 -0x4629cf7333a664efb01626395f18731f50b25aa88f6d1143d57efe8de594f191 -0x0d1bd625e8bf24227bdcbc4afaefb7d7dbf24015eeecbcb472f2ce12478d4bf5 -0xf34c8032937952703b635fdde5c468f13b39eba1e67ddfbd35dc2222ab138c43 -0x6b558e8062ea9ba138f299a132e7f6e1814f3cf56de98e7f3d9ceda02574617a -0x81a0768caa64620a48d7aca38eebf21b9cd769ee7f8d5d47c9d4f127b49d4689 -0x633f5b2605e1749c73e2cf05f72953d291f63da1e36502d7e2070dd211a06234 -0x250724aacf583e774206f8c89d828bf15ed448d7b03e1e046af92289e316eabb -0x693d83a1068d57ea6c40fb41f57f32061e9a672e2db77220b1935950dbb93715 -0x2d170fbbc8b46b198fa77e5f3760121ca6757c26ee31bc438ad24c0c8895b947 -0x592ee13b7f1c619871835794ce6505d3e6ab80975702b8af10563e00e1071d99 -0x9c98e871ff8701b753bdff1f204ef2d807fb09c6a0683ebf91edb569e87bbdbe -0xd35f96745c18b7e537fcf2dec5f6ef6d7d65c04016a84a530c4d13c9c96ff0c7 -0x9c875bcfa9a9752e158f57b001290f3318816af62ebe6d1007441e2c03e8ba46 -0x5cf346449963cee2c59a53545298a0d24ae44251d1ef000359b0173503feb705 -0xb612074a277865ab772d9baccd2dc3dbbfffbeb1a77df13a87b31e3371bb78f2 -0x2692784455ce0b5be9fccf62359b24dfea278cf211fe8a499fa8a69cb55df760 -0xe71b5de7beafa37f08b7e19137d3a10386cbdf5ba424a34ef663310efa284c38 -0xd47df0348e35d62738293dde9d47f93eaddd8f2d110b47e3221112c716a77f70 -0x1bdb0902ba8332b0120d1e152d69356071f83f831f961e1c2cacdfbd276d2f5c -0x74a6bd03ef1c1fdfcaae4700a5d0bed27d1fe08c9fe9c872fc8804f92c410755 -0x20a6c71621a09348bacedcf4b222a820b736298c20e1eddcdcf146aed6a59052 -0xcd8f38006799ea75a1235ecc50ff88e3c16023de7fab00024749d6961ed5cee9 -0x12d7d346ebc2bd993c15797e55556190b5b6c435c30ece4fd34aa6eecb6d9106 -0x0405c245fcd482372d122488d8c4f433b1c720f9f1733d26200d1b508f430f4e -0xa555b9ddd44829e32dac4cad5e89bb1202bfc5a7c91498796899d7353a89ed54 -0xcfd3f0cdba1ec380157e2812134ab19a473d0dc0c6f51b933dc851be0d193336 -0xedf4ec7dbbc0bb2137ebcb7d6c5cfb295c4068a3d29598fee693ecd5b0b9fe9a -0x45606d965dafa77393c429116b298726e5e10f997168cf865019123ff65ec714 -0xe5e7993017875c09de2290238d7abd2f6ec0c50cc0ca573e1f21c5820dd1eae5 -0x6f8ebdc1fa64a5b08e5d43873c9880d80d42bd45b2704db32a8c4404cdf4e6a3 -0xbd423892869956e9bc5d1a0848bbbe2a41e342f1d098b03959d7dfd07b014b98 -0x03ae04586a448af20da88c09bd9bc70635113564b9aac148069fa218746a2ca5 -0xdbe361f088ad2f995d64420f6c72e2babfcafa7232b0454b9d35ef68c56a820d -0xb87c1a2eb40b7fbc178ae4c94979ddda6ff8aa906c132e0ccb64ca50016b9a41 -0xbf4f1b133accbee67891e151727fb4f100e3101e1494fd927196ad1d2afb7482 -0xcc65e8e5c008b1cd34516d1ff0c71af1b60fbbbc2bd0aac8f7b7a28fe3e7915e -0xfb30239fa1b04a28d27737421987566d39dd024e0817b5e2d48176d93d9af4a6 -0x41841ef9b925808fa0893839b191aee3461ef3a2c81153fe6aee7887836c7c10 -0x741816d7c79c08b336083cc00c7276efdb9ce5be50423dbfc9f1f111ace86c9c -0xb51947273bf152ab82f2703439fba913c1dd44c1a3d4e897cd59c41bbd32f14c -0xa4207957d71db9d1b1dde9073f27979de7de15740d6a9cf05f238cb0f7d853f0 -0x9c43585991b17f0b4e0548f8308a6bf6406f0ed03f7d719d3238f6630a672453 -0x869111d1d974ef6680c737efdb323435ca875d2c48b4a1d293db629f5f50b3b3 -0x236b389f560b535307d86485e63c1742970073e428125b49dbe48f6c15566649 -0x745f9ecbe5dfd1f0cdf313f8a2378f574aec3e18f8019d4667d7750ed63616c7 -0x9f27f9354546dccc8e8409ddada27bca1a89af62342ed1683874293527deb1ff -0xea460ddac5d96a005ba53dab473367a9336c2ae03bda183e58f7519cb47492cc -0xc4778cf2a78ad1b755413084ec47374a73fd4b97bf921fbaa05115934a3e7d57 -0x6cfaf0effb3d1ef7587c8c14df0d2e0036867a78c69778dd741d27b3b7c477af -0xa29d20b96f97df1e45a8ed28a9d9ed15fd5e06d61a8fc35610f0d4e07d9abcaf -0x39c8c89cd1b136485c79cd89c8dcccc53602a65235734c955bda8f8cd4c5d18b -0x9b541dfcea108e917f04fc2987c5541f18ab70ace8009a62a3ed4e1d5f516ae1 -0x7635741fd8807f11da3feae934bc318c515d16536d750d5b00d209170c805dc4 -0xaa45b52584c81313d8f7af47f437b946e1cde7dc473a7afb842dddf3e6c6f3ef -0xe5bc37bae7d1d3efe9f7c08e920f5809a8512d20fc398313f39e5b0722fec2d1 -0xc9cb8cd01543bb09a295c8fd5283749353ff56962a62a54cd7ee750b206e14b1 -0xfaacbbddf4e163b3c92f747870703a129f032d412819fd577af984635bae51ef -0x23ed1d105d6709b5e3e01fe543163fe131139c31c15d0c7b7581ce5d85601f65 -0x6d15f6c1813c98be76f8275d5d1c63399588194acfc6daf65a09196ac8dfa15d -0x9c8c65040d15904a677b0da2f5b3283213114c26cc2b1fa7bff48861f6fe86b3 -0xed1a34cd4b518e8314b10f3619a8c2834d5ada7a5a477655e94a3d5e57c01f01 -0x603707d0d6f66a1bae110633da258fec2d51b27cc9b4024e131d6cfff0750362 -0xf574a9c4d1f56c96f2e15a1985e04b131eba4581903c8f75bbe0f64f93858024 -0xf0ee34b9c1601ec214e71cf887454eb2213513875d17eb1c1162f888551bfc14 -0xdf21c14971d37e7e5a087e91240772885f763e720995cf9d179088ff2b1ed753 -0x70b876a74d9d355eafbb4ece0f0bbf3132f3f2d16ca0e685a8d00092d251ca0c -0x272dced686b70ea8861a4e7a24d72f00600d7262f2d11fe3146bb5fc29d27898 -0x9b0d0e9ac7ff48a534cb4c4ecc4d48b4f6c579c9e0767de002378728e3c0277c -0x7617e890a364e25b28f1c1635f31c51fe147945254114e96a9dc296ad64ab067 -0x6e53906002f8ac640e9af120d60a8314f11e87d9e5e3ba5a1c442e933b237360 -0x82e3a0f1bc3a13165b6c3448c47c1c717e5fddcbcd3fb8373b64ccffefddfc0a -0x01f2ad72b562ffe769ab4eb4863afa801df9237f1aba219e435dd30338c6d751 -0xbce8f65e03843147807bc52b07e01a6cb162224e0dcc4f1a4834c4ac50865f37 -0xbce82b78f710092552a9b3d013215788b5d9c10c6eec53407de7545b94948692 -0x4c3a84fdcf7b1d40729ad5f722100d3e387061efc6c636bf3cdff77ea8b81fbe -0x72d2f7dcab43a4778ed9ca2088f6719d9f23d52ef508ca45e09f887eb55542cf -0xaa7fca0a8fb1372863d52b944e72cfdd1eb2d590d6fe80f76545d65be819bfbe -0xff11c687a6072a9ce9855e6f316f1cdc166b1a7efb38606cc7a6bf31b74cf915 -0x166f78879832903eed5ffa853dc78237fae6c3e6ce8502c790b8987e12f17bb6 -0x58d8e47dd437421ed0fe76f7b3a167944ded37a424ac31ac5a2d2fa539a83aa0 -0x394b6b7bbc09884b23beb928f39f8bde3f67cf58c69f580f81b44f34f85f3588 -0xabc1a6f7edfb4e855c3b76519f61817aaa381d58e78bcfdfc777517dce9afa1b -0x504a21f4f2e1731604d92a3178468c62b41604b49d98e1adac216b1349773576 -0xb70745c192a46deb6be5cb0bef64aeae7e47c32e04deaaa053295f1b233b1853 -0xa186954a8489a9a3453c9b015e8ef6f8658536b7346d4685e54571e1742d4aa6 -0x9863bd511a222c97cc7cbf4ec5b97390217843561af51f47c2796cd1c66de1b3 -0xdc8717aa43d90cc861f99be263a2a929077dac959465d8b1780ea0dc6ffbefd4 -0x5d03059d7d56dc8f56160bff56e9589e40c89c44080dc33aa5bfa769a00cbb9d -0x046d3c8195ddbeb2d67bb227b3f6b606f340576c143b2fd1671cc4aaec7d3d82 -0xc3efd459dff2f4e52f4674b2f1ca2b6e014123f36e505bb5d64ecea31a1bb76c -0x4d63c2e69b251e5e2010859f4f47ba71c892caa10c1946b3d49925b04b79b0ff -0x55aed15c0ca7bc70c30a28a3a9450796fdb44e8de8f21ae062d8c1f2f8f4f308 -0xb4c280254d7ffc1b753f5e4a4c69e82a3262fc6e3d86c23c760f91b51a338545 -0x2d7ad5be4e63d0badbacb0ded9a0ec9c329b26f12df6d28184ef129bad8f91f8 -0x427144cea632a57fa4bb57278612eda5ed0f8420cc2cd794e067725fc99a186f -0xd48d025e0a3433100ff11813df8a949aa7fd0cda8c344528491be9dab5c5439d -0x125e9f2940c3495a1acbf582d7204c48a83b57029b73a1ede431e219127fd950 -0x80a6a1cf8d3cc9e8c1a60dd8ac7bd19a13f908ef3ae76fe126c5736ed2fe7465 -0xfecf9f69818609bb122beeabe1501d9944aeaf1b9291b47573ece7e91002e691 -0x2a94591f3f96763606bf32755eec8e50d909eebf0f6b80d8450ca997fd5f5590 -0x3a6ce325054a9ebe09a7bd949e6f6d856a9b88b605e8a541fe36f03d2131e6b9 -0x5a85bb6a09333af11bf98889fb79ba7d2769199e801f9c0d6eb5a0daf32e823a -0xc4cecdd6d249acc036d555d9eac73ec8cb103c5e97156695759d72f21dcc2b54 -0x71a5e0ce119c4f1ee39a47dac16a72452bdbb51eff47e44a6cc6be19e6875721 -0xaab6c2eed224b6fbec46fbb29a908d84fe689f751e15f2e168eaf7b9f390d91f -0xedab78da0d47abb428529c163fbdfcb7e7bf1b36a5d59489b24c3f8a65521b40 -0xb31bd92d84d09b7b41355261cd244e475534bf8fc0d60d04cbb178bf3a7576da -0xf6b535009ec2d4b2caf3fd8cc101b8d8bb14a90c1bb90967e063cafeb4c60374 -0x82615a31ef0a4ffdf760f79f50ebc4e7e7bd894acc35581ed110ff2c221f456a -0xd93a17b25f47475e37304276eed371ff295a9d2200b839fac696b7786dc26c3a -0x8445934bc935b5aebf9ee77609d0b4dcc6f1608c48d5435c57adbc12d8c978c0 -0x049a6710a2015fda3febb87d3c9d6619d15f5bda8070f1c066f19e4e1d32e4b5 -0x18e949dcbd432c6422110a36238bc8dadde880f70276335346e8acb9218b6208 -0xf81dcc525da8981ba12465a6781f815d4231d0beb32de5b35c7a40beba9b1d73 -0xaf6898cf4ee27914cf2189e980b3df13a54ee105263dd3099afce18a3bcdbacd -0xdb348a293246b2924ad53992b37486f1d5d6369a69182898766d162b57c83025 -0x201f995dc340f998265b82684ce0219190a00a6a216462377bb2a5376d6d9113 -0x3427e3b2141da0be6c1f864216a0496be6ab0bf205ac6c2f2dbf5594242645ba -0x26654841f52a01cca23bd2b4e2fb6fae7ac3fbd6d849d3af650cebc0f4b3822d -0x5fa64b244d37a01aa580006c66055a127addfd2e3a9a1380b07bbdcb3deb4528 -0x37d992f3f0d87019003a66d2410cd4ee38a6887da646d9d69dba61427cd66560 -0x6b8f52957ba33ebb3cf17437d9ade19c0bd7aa839bb5e185ece8125b03346a10 -0xecfbd0930fd1246beb438d79c12f7f7ccce099d1353ef896ef066d744b3c7e88 -0x894f040935fad3f201a9426ae39b32af7bd04ae8c21250f9d500bee5533b4bc3 -0x0c0b7659a99ddd53e4a8df15df2d23cad34b294e118646dd4eced7ec74357d69 -0xccaf4e001273cae427035c0e70deeb136f9f18a7be4364c0941057faf5118a69 -0x3ecb87ad4fc23b3e1b1d1b0998e5052c406b5e94d584184cdefaf581d8c0fbd3 -0x4b767e0e9bd5a09e7383792c9c35c4133f04da4ff8790c305422011b1e92a30a -0x71f77190ef9dd2a603b15bfc2b9de4c561a6fa2724ca76c1c2aa9f3d1ae5ea0e -0xdbcc23e315a8d356e0be47b6cbb0760bd2d18860e8d3b82f4b5cb74cc4733074 -0xdb8d8f30215398207da9a184a84f4c7212257f5b6a6b14e9359ac0a0a00c42b7 -0xe54f9f1c988667a49c02f0642d265a7b287e34c810ab5ea084fef00827900a9f -0xf1812964b0c4808556e999d7afc093500ad6c96787e50b932d0f94b3f7759f06 -0x017e57f87fd7ad34443c2860671f865aabde51e275130db23233d3cc62fd8a47 -0x0c0bea8e67e1d35b6f6a12bcba88e282610f53c1b2de419fc75756f571d2eff9 -0x355e71dd7a202bcbde2fbc811195595248a24f9a092ef13eeb9cffdfe11ec229 -0x800fb6258b7d241864c93b9d8e310bce160607b3e558e1b66f457aebedba44f4 -0xe60c7fbfee2c4c1618ae0a0e757390e26a81bc25626848b681de18a7b6a3b2da -0x6eed15fbdd0aee7da1f27a90fec750939c0e609817a3d06bd7a550c8c234f512 -0xe1e014d2fa394605d9f8ac4f0bbc3f5f9092808c7bd307f8063a2126107df057 -0x9e9ad69472b863d6ed1fe5b7cb6f8867d7583bd8897d8cd666b8594509c00f78 -0x0dd8b43cad72b13638e8995cd8af62234ef1d0d3fe590e95093a97963aa9cd13 -0xfd17d10e9d27409b24894068b33bc1d677adb1068ccbf559c7645b387c765197 -0x4c71c2d44f455278bbd0146ab5fad1e3abad26eb7ae91438b45f87a15d7ad427 -0x3fa6833ffb65953287755238a46a6d2a8dc1087fe23c342a755773b6d3dbff46 -0x9cf7a384f9c67c508aa455b7496d08cd199da3d79384ee9984aa875dc5f01259 -0xdd90373f03fbacd28508ace7e1806ddd443033ae2e56be33981b7087e68a0ce4 -0xdb3e619affab5848a625e685e9ef6fdc8786adec201f0b1abd1046219fb430e8 -0x2cd0bdafa57cf0cda4bb3beb62fd72fc4e2e12e97541e2dc87fcbbad023d89a0 -0x0a3b2b60bc0df418df9638dfe4f53aff62653d8daab4a2de1c347f42b4e13a9b -0xf89a427e21a501f6d709e48adc21418048abe280720e49b3a46cf55a541f9759 -0xf0ca3975ff09a8d8b3fef5d85bc8c94e2cd8c8ce56c4f81a1be396e14efc1532 -0x6709e0c36f4635a19fc42244155096762f10801439fb3ab235e4736b765f2d72 -0x181fcda4492b96cb500bf8dd4c36c2db16b0bbc5495535e2a93cfe89dae59a03 -0x14d0b4d9a5eb000d71031f91942db6a45ec7d774e280adf525cd6b0cdfa211a2 -0xe11fad6a2be1d21adc9f6cdf8ef4b0f85df0bdda6705eefea8f733f87736634f -0xcf774a3a2f24f58cc3e7c66b91e30b9073bff5338dfe961de710e72308deb558 -0x414e9851b6161d1081f706c32752c23a3709363e1b17130727493a141d2bf90e -0xebab5338d2619cbac0de443e6b627cf9fbae203929a18a6f0eef557692a44677 -0xe3a27ed1615d2b025a2330dca2b112a606992dc3680a808532f4348d0d72b88b -0x62336ca05bf93fc24d83dab01ff7aa314a940fc827918dec06309a822e7d2ad4 -0x0a12d737b548d1ef3e80c25ca0f23755f6c4ba7b254143802c04fd4431c9d78a -0xc962e4921555af0f062ce940f12782182f040bff658b7deecad871f77333dec3 -0xa4fc09953fc2c440bc99f66ab3658a7faced6cb8c41f0c717166049659ade7a5 -0xd396f31578ceb10a6ae90d4868bc68360502ce572c45a2f828507a56a5d06ea0 -0xda22d6d769b2b454bf50bf86ba05b8204d4390a267b8838ab1e9b1fe658d17cb -0x03479cd6fe416469f4df10bd2cd369cb0933cd616f6be8ae442673484d7822dc -0x4eee8dc4d98335999b6baa83792ad5fa364d117a305ef6cfb91f5413a08ad13e -0xdc42b62607a109788b81d54fb456b8fba355c5aec46778fc4c152ef3ee01a020 -0x8aae21c9f63e34e869b528270673a760760fc245a3d39726c6eaaf54cc9a199a -0x450fd04c7be3f7b5f2978849fd5dbfbe53a8162a432097523bfcb35fb15ca0dc -0x497d35981eb44875766611c0092abfb4cf4648ca47eb3c0f0461a10c49153b41 -0x9e6f03301affc78656c5c59f2a38ee39bd4ac9d0a1ec7db54aa0e9d4129f8a7d -0xd20741e59495b40938fc699fca2f255a7b1f13b8a0bf001a520ee7aa4e925a13 -0xbeda3702c5764e5987d2754b4101f3642c20f9d16c348eaf3f4fa6451a254a11 -0x80ffdc05b0a628c50092640822ad12ed3aa81757656d804dc7e27df8229dde78 -0x157232e2ec246a8b64573f9e73964b6f56118a7c8f29ad25597a0c36fa52507a -0xfea3c70a8f5c67ee33d827a465e8c3f8ba2b1686afcc3cb773e0daa848670c9a -0x745a6b48ae49873b6ac29bc7b4b5838c0c4ca2ba83573b2c4350a55bac054cb2 -0xbad8555efca77e5cee37f5f8c98455e9993fd22abfcaa961922b5dce1d3470ca -0x9750e8d9445c4581be255a2123ac03f81f89c4d594547acab40033348d95ef05 -0x3951a97a8b62c452824e6362919d324f27b638c05c89ff0ec3d7f9580ae94e37 -0xcd45f103c18298c94a2097ea7ab5d32a329eb73744a524afcfe4c634248e3986 -0x8029928b36fa2d08fc69b3e64e6671a02d75c365a63dde91b435f485a570e03f -0xb495f21f975e1a7a7b4b7753a845f260938e5e2d41a8bfda9e913593f35ad1e7 -0xd99cf82f3638af1119c6501b126c0e2a34ddec36ff4c4b348495590d1b958530 -0x56db1427e108fa7046d24a97ab5dd37e627b0ebe41bb3688364e1dd9a7a5a990 -0x320ef038a98cfbfc1bc6206e2dbb055ec7b78ab6b8c6156b1e2459c32d0cf0e4 -0x4ee493c70e721df922f8580b930fd43b3b627b7bbdf7cd26089792333f6dbda1 -0x0d69c3bdedbc27150b81c3991a24af11e959e0a8fc1d2a1fb35e52db84f0195e -0x1b322684dc398d2b8f536eb0aec7ce3ac2596cafa54518f581258c0f17cbc94d -0x3d1881f226230d3209724f7d97c7479c686fcd6aba1524af79e1f8450f7c2aac -0xf63ca91e3d5663ff42f2e2449889159fbcdb312a4f700b35387a832ff60ce4ab -0xfb3bb31a9372edfde164439d694053a32765a2f866ffbb7a9f7066715d4379dd -0x27115886f0626730663a2183ea8c629041245f254ad325178be719368779e267 -0x21574d4308cb931e6cfa02995abbc1a5dca16a0ee2299ae213c4dacc84ade16d -0x19579c6ef175fc618d447d2a938dd8733d5752c14a719ce8e280b92258240ec8 -0x7c1ff5340fcc9b7f3fff21705fa9369849ab291f63fa25a69ce4e83412823836 -0x0854c227041de77d01aba9bcf2e9c2fcb512016f7da95e3dc4608e310d0cd414 -0xfa4c0cb3de87cb7e32649cb6d81e6e0007829afced8d1daa5f3593323bb96223 -0x99b772d3956565ab2c02155f7f8b8bac0af6f5688c7af89f1de1fbef6c5f488b -0x45bf0f3e6d4ee2970895e8cd47d399adb3e7d9a694f1d43314e12fde9d056db6 -0xcc1440b16d94a040e000d7d860b8d9e36b666b5fcd429df4a3541bf445cb6418 -0x66c114222ace695369bc9fa6a98986c9f02590d29c9a7b92f477830d54cd4c1b -0x27fcb26b5847bd170752503e057038e4d3edcb261665e083c0529e6b8092a617 -0x24e22d963d54366afa4721cc3cc055817b443359396aaabaac3ec8678f98d61c -0x1b416eb2d6bd12da5cf38deea66dd846c6db8a02af76945211314a5754f3308d -0x9119fcf7a59b34ce2542dfb84d37a3482f0c6c4fa8487c5238cc7a23d1b2e867 -0x8c2b5de7cb08c59170b592845574612885b5be088998e6a3e0f2fb5244186985 -0x3ac54313d384dfa1672cde2c381c7c949bd13de216187d9ea43592945cbc7423 -0x916b7b7f613392ec7ef5f8c9446807ae1ec17cace2b9b0de1377850e625404e7 -0x02c51d593879da5ab51f7546223b391d2728b4ba0b0aa8c29c70280d284641fa -0x709b821d93834d55ee2fe55202040bf3348fa9a6072f4ee2f87401989f1d93d6 -0x8fd21b9a283a1302e951d3f1e3366c27b56565b2eebadf6894bc6318db3a6539 -0x54d132a4b9c91d6053dad01f771f866b59689c7601da73de494410a6799a6df2 -0x78c5e36f192857d1f1e1e268fabc5be8d4e22d4200de1587506ffac71fbd3e4c -0x9717649c908eabbb8cbb805174120fb135c2d0de45e54fd40cc1557561608245 -0x9ee75818433b4898a61a850e1a21d313d0ff80dcbae521150e23c13435123769 -0x7a783aa8cac52af9a4a324770ba08aab0ec2cc35ac252ae8eeb377b17c5316ff -0x54705a96bbdf300a26f47b04ac5d9b3065da5b94f1ac4bf92f02bf834b3e6cc4 -0xe68174e294e6fa0f954474853c34d78a9655424038e27ad18d4d2de915030a9e -0x3aac54fdbc255a73b58417e5299e336ed074fa7694cd0e1564fa7e973a1555eb -0xbafaf115b717445fead02a88201dac2f79eb2f290282af0278248b1837e00893 -0xb4022882b1ce12cda0ffe243c994530ce5d49018011a006f0afed3b6b9b9fca9 -0x472e9750ac8de560ea4b1a351502b1df647563b4102772a8830fbefd7b424608 -0xceb73d74663c4c96b25ddd81fe30f0317973b8df4c924cf550629a117b5afb64 -0x3ea107b36bbc62af3093ff570562cf6493a71e9ec99f965708ab70e7ac5c6991 -0x5c97f55ce1b361e8f68407ba3854cbf63dfd4b9c7e29af1a7309dc6869b8735b -0x7073a21c21e6e0dbd00f9f714a461add5a153fba30e3cd4ca3febf13f1b03f1d -0xbd9e61656e9a3a87a870e845e016d105e2808d5bfaae1284fde85e18833567dd -0xeb362a9841208acf0800b8d53a19903a224dc60206f232c7d4dc9de4f0d016d6 -0x006afccbb27a66b934c5b203d382340bea3bac81a684ffb8e8c6a7f3e6fc7ef4 -0x4b2a3448abb77671ed701f0ed102a6ec10e246c8e9d81b770c66d9236d06024f -0x7905f08ba7fdf7d426726408dd1c852e3d26a4b27df5096ffe38d8f83b543312 -0x12601e3e2ee69b3ea294ebf13a93121ca01c3d678dd39bb73e705070791a1f3a -0x256a88f52e4e04e5e0e4d68956d8ae3502e2bb3c1af4c6ea053bbc6081db32a8 -0xa17f32b7093ad07ff9da027429d6dc0b06f553d20ecf052dbe9f52ee59552dca -0x5d9bf7dac3346ba63153b473890c743cdfdbe549748f7ee236dacc391f40a53b -0x7a8b21867f3df3b4c8517167f8702a36f22eec2a72cc3acc5f60a913c06a6e8b -0x48fe47cd2518f34ef15917ed5bc427e9e708a757c06dda65b315c3616b2614c5 -0xef322b6ab928d63509d023240bb48314abd6891908a06a647fd7697e53400be9 -0xb590a9194400bf65f37c53245a917c2f7cb580da005cd122af66fc4834d5116a -0xfa00e7486a6d30155fa5e34791ec97530d7befdbe212fe4e59fdb120b53bd55c -0x8a87ec747b6dde803aaffa8983939b3d61429f15bf15482e6c7f0caaf231e1ef -0x269090a9ca01cbde6200ccbe3c7ff7486fe7c0ff1030aaffd459c5af6dfdbac2 -0xe761e0fa9a8c6456f9541befd33525456943088bcda78a210a05a4452f2b7d9f -0x63427e324702d0322b3c6c1624863eaeab3548bfaa998bea60d821966a1eb215 -0x55d3dcd0d6d8867db0db0bde3fa7927ff7a78da81d085de353b8d4f705dd3761 -0x9eee6207d4e842c7de932195d33d561208de0d2c617e43892453496d2d35b2e4 -0x976cf5809a6589caaa46e25430f1816d2af30dad22aae83936fedae820893e2e -0x072d1d6bdcf15f992f8ced65e61953d86e81e3a6ab1a5e4665ab69ae2721522e -0x275d3d91e730ee89765df06af20a8f448602af9826fd82a90ecbeb262b6c9264 -0x7b74c7a1534c5292b1494624ceebab8faa204308654672b7f5350eb3d114636c -0xa1af2c23233875871433634dcb7e6139099a36c0323a34d8de1ee14c46e8f870 -0xe591bd3e3bc6d201a504f8db27b178b40b5a8a7d6e399bcc26d678fb8634ef3b -0x6b3cba5d3d9e01cbc8e7cd32ce891139cde232b3b902d3ec6608ebaf0bf3df3e -0xcf633753e52422df7672b461666836e5374e56ae9b676bc65d407e483202d57c -0xe022b932bdd4633d5323f085749fa6b92512ccd44caf9d635ddb670950f59da3 -0xc57fc9dbffd6b4fd3ec8f41834817e7a260690221c71168e07d065cd13cfc1ce -0xc1dff20d579fb54c173e0e8f24cdffef4ce0ed64e11c5048097955f0edca053f -0xf2045aaab12751353a8f1e6232959106bff39156dcc7f20d1aefaa64b66d9d6d -0x4b375990cbbfe9d5fd87c5b4460f814c470b6aad14daa85f871774c44386a901 -0xdb716617c77073715cd2b65a3d00a5d94f4adf51bdc7693e89f8e3554f2f876f -0x3fb3f3b18cda089d39e96802b2a47e2930b280feefbc10e1df90c974c4650449 -0x25334eb0a96342841d1638e7b9efb1aefa861655c575a5295a3db288308554c3 -0x6650ebca05b4f48aee15b37b7db2e910e8f5474e7ad05ba30bda75cce97273b1 -0x11347f54982f9eb08a2d24fc1d5e5f457d1675c84dc0033d90b8d5ac11519237 -0x0b978c061637af72ca12e98814647f8b3e0637abd7a217b5d6a300a9fed23269 -0xcd0adf266a91aef59d26afcc0907b79910f539a745ff6db86c7b59c01e4f466f -0x8637fd9a25ca0ce49d11b9172ca6acc430b2dbc498b6a2961bbd0a68ad801cfc -0xbb6ad05db5a23fcd8678df727371388bd74b202b1d8cfc92b431f0c97ef010c3 -0xdb26b323b371350e6a167851e367216ebed512de27cb261a0fb522796e7a871a -0x2e55c25acea3dc3b663143b7396443d46c25eee00162b5eb5f1f88dca7fb2f8b -0x3bdf16221d625d3cfc58d2675aa387896fcbfc21c5f5291c1acfc9afc2ffa701 -0x70c0b01c0553f66871f4d1608f3638115dbb73cd01aee4433ad85792c51a0200 -0x169704abf5244e94465ea1d8a40b8b32f75a58b47dc59693d2e9c7a75dcc4485 -0xf17c57c1bb947d7969c6b81cbcb1ab542493efc5b19906732751d7a3a0c83a49 -0xa6b33aead98f43bcbc47b63a5f787dcdd2740419584e353603d5b422a33b93cf -0xdc0f3011513080998cfef3dc1e794d06286a6164f05d6ea4e2b094afca707109 -0xc9f8983c4e713e248bd326bc75e27b4b690acc8147b980c2fbe22e9e3893ee95 -0xde32dbdd36a6bef07128346ea06e354769ca47e28e698a403b32ce0b010eb204 -0x738fb4418da378dde5e5e42ee7fedeb84383625601b7aa0f2a996087af72d76a -0x1a63048f1664f6ffee3211ab911e8e169507bf6bf41c1c85c4ef7ce871133425 -0x780d2d4c40bb48873691db130b42425378d3bd9135d187d69bcdb3b74bf65ac9 -0x3166217455fe5b7ad7eff90d97a198d3b6d16f8a1f7ccbac4d6f8612e99dd391 -0x598c91ddc64df3a999100cb8a5741150aa41955ac251112612aa2a089fdb56ea -0x4804a3daa67614edbe20d4f74fa1899c6e539f19f709b3f0bbcedc605c7c0be3 -0x013fb7d5b0b741ae6af451e143142d9ef83e596038661470bc20fc3da7cd1ca3 -0x2ca86a6b4096afab0f06b15f78f2e711569f7e7d85c0edcf1dd29cf1f554e5a3 -0x83c1933ef04527518d2f90e1a61da04bba4ea3b484fdec02a8865719786d567b -0x0a158f7943635330dae77bf21a9cee908c2a3c018ae32ef3d923f7cef5bee77a -0xdb111a42722a96daa3b324d50db556d648aa6e6b6e75b33c673359c7be7fe9f6 -0xf6f159acc53429c6ed7d0f70dbc3409af0146d9b7bcfadbde8ee83341f3de432 -0xdbfd6ec6c8c3386a0c2f8188f0acce7b73d46401348d35b13609c479b381e1ba -0x8386094d32ffdd30d57c7593aee172f13787edf90577e7de0d005371cd45176e -0x52fc70aa5511216cdee7b733572c6f1667ae53623fb4857712f2610459460009 -0x1015b07fb48728fdc2d919eb21fdb12c482f0e1156f40fd70bec7b8681d132bd -0x0e5ca8f136fcfb847137b01ca4379d4c66f804f221cb69dcdf61e56413cfa2ce -0xed08f80035c1aff06e7c319ed0c7db6e5adda9a0049829a5f8291e8b5557a299 -0x1193a70a10c918e6ded52831242868e4e303e60af5d6580d2d382d1fac141e34 -0x2d7e406fe2d63f63a81b1c4802b197348ea81946021c6aa3e149c4a7a84f3b1c -0xd4ab8d15ae970406a6567ca85efa0625ee88f9696ead0cbac10b888b1950d073 -0xdd52e49fd134532cdd3f1ba58d06f2e44fb8cf3070735f48c045b620a725d575 -0xf1e2a6d23c64dbf950dda401869bfff732202529d78ef59da7e3674cedcba686 -0x9f71b0be03fa9827a33bc89688e31e8c260cad1f7e1b8b8a0b835fa0b207519d -0xf76fddbd335ee406eb0fc628150d3a48e52d8cba4da8f3dfa623154c5ac267db -0x00c2e41f29c3dd2a7180b928f16c217f136e7ba86b76f81dea8a01122072901f -0x6ada66da9e14757af43fd6abdaca0b4e6ef344e188775a2a08aff78e4fc1fb5a -0x181a7837836f4bca24886d1bbcb70d0eb28120039b2fa61556a47000ca233b81 -0x7fd639e19308a45ac4d0256c4f235f1dc5645765e8ffe6bf8e2a0b93337a9ab2 -0xd7c9f33b66c0c4595f2537dd568101f352a628857e1db876ed4e5016ff5c840b -0xa500582ee8e1b488d0776b2d3293a46d2a91d6e92c242e65564789181f7d5b4d -0x88c71742afc978cec2f95120dd530beb714f29dbc5c3e1dd7c839ee8f3ae1392 -0x9868d90bd21d23911228d676a4add23b9768fac8997215b4c16934b95f43b6e9 -0x189a327dc0251767ebce035a0f53c00c85cb12dff03a5938e72c0973ec47d03e -0x081df0515c9587d0a73fbf7cd45addd26fe8c163155324b16e68426f31c7fc38 -0xd955e0ac6774e08842159053a7fd94e8cd2458bf1993f095928fceec53d864c1 -0x6179e980e9bbf57f4d4158c3f2171a9e0ba6e5080f58f7608bba70ce4edcdc29 -0xe6f51da1cbe63a77a28b96083e12d7339b39cd74eda48eab0cfd063aa301fe1e -0xf56154349390d3c27e9477a26cb12c4de7a8910ee9f4c7f3a4294a948e9ca3ba -0xf329009774aef65601b26023b83f095560eef03109d5ae851b3f93ac63b7e360 -0xc6cb4316c1e2178af1b1818f5b2180c926176f2ddfb0fb6297d6b627bcbe39a7 -0xb82177388dee0678abf46a922bafbcf339ed0b26dc4e93ca30e48a208f50ec86 -0xb78b0660effb61add51417094993820696d1b08008d6efeed93ae23cfc875b63 -0xef47ecdb8f613354d33d3c690adecebb5d6af614e8680c5308215b8769f33861 -0xb6da8b9ba36df0a086a3fd504b628da790c293d3580a1421ba05b40ab50a6a49 -0x22f7d85791c7669ce8902c081555b84e7561ca3105eadbb3eadbf37f37306d4f -0x0bb84c934d5776cd828a20401481a648676586e9a0b51b03e7c041a99296f454 -0x8d64d08c25165a4aa85e36bf57232dd6af8fdf35bc3dcba0a0f089bff0248faa -0x5990114d2e79b87a42e6833b14e54872400185285f8555bc238c5cf3acc982be -0x6a33be87c839e4300051444b6ce10337bb4c711ff4f527e3e96b242a9882becd -0x8e1c060bb27c935c560087bdb1a5e9335c5deb30b24baaa5ea325739090646b6 -0x04346c0207ec6c8d730975ad93b981aa621461c90c60b4353c761917551b7987 -0xf4f3a149b1d40de3603b29a3bf93998b61469c7f69555c03f68e434ea73f6b1c -0x8d3b74f00528cfb1f19a776216b9d7ca659bbc68edf441a0638c86919741db7e -0x7ee508ef650f6c60ff9c2dfea811f049ad4e626ab631e016c38ae227bdd0527a -0xf717ad726e713ca5a63f5762585d72520391a5fafd5077b8bca55e4f0d3a44fd -0x30b9c13f11734f06b2050f585b03af47a85b89d69a1c4f7fc4c9eaf8cbc0bb6a -0xb95f6c253dfeccc054f226a74283c53e1e408ef05612ee9001ba0fb1bdfcb580 -0x074fa8e4f910a79615fc2d7e8728b5d5fb577359aafaf0cfc875dd3fca365c19 -0x938f5cf60c986d97194859be6db520f4c45bb3532fc7aab33acad99eb40d80cb -0xd17c35435b9910e2770789ede2989dd1b3bde7e862a8815ad69f8176b49174ed -0x89afa84a39f75d5a9dd118cc03f2df289976774090db86d39bbdaf0ab6ea27d3 -0xca7be2014bcd4c239f5e3c261940cc786d646af7acd434f54ef1f9253f319eba -0x2e2514f26af347eaa4d320f127c40a7be9f09119d14c39985301b83bf4577080 -0x4c03232d00e4cfa54a7fd611e55f5d566ea8e7710e6c21d644b85fd69df91df3 -0x994eecce2954ddb7c368284a7b15ea3a9553a4e04ca10c7977888bbb71938af0 -0xe5344529b9742fd90b182dc66f252cb54e289814e09689155dbfba0e97fd3ed6 -0xce7cd2076e93ec0f14ed208f6bfd792d8ea0220ae1bafc27dcaca1b7fa49c49b -0x7fd46f969976887f73d1605d2df9e6b57d855abba5ca5d2d08379b608fd465bf -0xd4d816a0509d5dadba3f24d74ff0b2e3d97d6e89f1dc0d2b47da3ab03fe4e950 -0x5342f7fb916ed906efe712fd4d70ec8df244238a276ca3f118f05b1568d37b6c -0x539018af47728452cdefce8d4fe70a7b3192e8d3799c71219be523cd7f249534 -0x47dddd5e58200c73ea18ed38b6e00f69b47f705a1165c8b561b40687216bd650 -0x099741ce5ebf542478d9cf989222a70ec9a84721c674f207486fe76f7d1d1c48 -0x9559a2106cfacdf29a090f67d6103deeb14867bf530900a10ada985890b6dd75 -0xe8908dde5528d62ccbe61806b9b1459d39e8691403d8bca0917188cf36826b57 -0xb8b993461ea8d9aea7a839dc5c887c7147618ed4ce0064db77393f25c1126fab -0x159b51ce0461e7453d1ce8a909a3e5b3085fa12aaa5d1b4e7841d0b5065d02c2 -0xd75ca7f0bd79485de2cfc7f6e229d6aae5ab22199e6e5b297fb7db9e1534e212 -0xf3d272d3c7c49ed1172a9004de1070f7de3020b86c13469cfb29cf175713b92e -0xbc706d3978de6c3d67315248d16057422cf392ddc9b5583e93a551922463858d -0x882445ed70de85445b8ccbf75cf41e306ba7a2c2e90c8c03ca0245f40c02c1e7 -0xe662c56005957afc527e8c62a5b50807555610461e03ca4242b3443dc73a940e -0xa976f494f4b779593a2d8410ebade3aa51c8e402e6a462418adbc2565c956b0a -0x82331b2341541c31d72a84cd3f91328d783e000c56aa9653bc1ebb80fb263687 -0xed85d2e0e9ab1042994415944b2b5505b79b4f93f8e75ec20bc8ce25479b5049 -0x093fea1e8aac904203091141c96f40d380df9d2be1a7f3d8a4c6b324e1df1a88 -0xce673129917f90e243a58cbf581002df91cea31279c3effd32216ab984fc5f57 -0x22a5fecf1b29c2e37b2d768fe2f08d61e3487a14136df301f52d4a2fa0c1fd05 -0xdb293825026ec351ef3766c08806f007059d78fb1398eccbf3ef07ac042e0fdf -0x01f3c01f6a2aae1b299f4934918f6872b3b51c6b015e6389232cf5b34964788a -0xd8e1420efd453154437248ad985ebc383acb30d2bf186bd866ecb1b08df05f55 -0x2d23ece4f6dff5fc032f5acae15655018c3f296f830461727ca20e78f25959ff -0xb13eb8ee95714e76a151003528d3678c77f76b718936632fd3a1a6d2897a10ac -0x9419d835145db1a40ba17aea9e008825ccb4b749df3aaaf3fa8372583966f628 -0x29179ad17d2f3f55e35f7bc9cbc8abad7adb484ec7822cc7e33cb60c42d5bbc6 -0x34d9c1c3d7c0062a92bb334c699264ee9507db09832c077120579d48c7d1a8a2 -0x7cc16e3b38a0a3065ecb473891a3d51a8bce840aa6f380d629a9c8b6d84060cc -0xf233114fd7990669bba84c1c57a450e7aafa349a62be2cd9c8d72bc595cff0d2 -0x29b3c0a16bc5c549d1ab0f0d2ca156fc4d42a220bb5868c1053073f5d7b40026 -0xbadb5d0fa728980c3f12a0cce56538ee8e2310adb9837f05ce5bbfe177d40b76 -0xf5ada508d55c0fbae9980e40aee7fd57f594e0c010691bc23433cfe90912c4e9 -0x32fa33ea0cc5ee4cb04a240a09922c32d665b0e2ef84770565ed329aef9649f3 -0x46525eaa8b03ef4cf29ef806bcd03763b86d9db9793757526d2337dee0041242 -0xdf17d84a7b44a2c17ec646400697e78c191fcf49bd0c517325eae8fd33acb8d0 -0x2028337d720680569871931bbf2adb63437f33947ff85e9593323aa51e7a45a8 -0x52112d7de2998cb0e8a2e62c2542f1389d052b4e58a4185ff954c8bb54c69a4e -0x0d684d700599dcfd4a805df2ec4544f961078807b113a3cc38de5bd5f5d56b60 -0x84fe5bd5986a70b78dcb8b321a81179bc771d2defb739c4a864c3e8ce348e8e4 -0x7eae6ff23a97139292c9e87e9828c218a53ea8369db0baf687de1e10ccb6875c -0x4c7f23a43dd8699a04963be85bee368564221fb286b5b39f5ac6706843a681b8 -0xc870191d88f53586b69a457283f27230c5ed335c12c74a892739e1833d189200 -0x3e9d88c5d103e959f67a9ec0a7074974e3611be02a37ce19580642579d1e4ecc -0xccd6c0648419f818323eb75a0a5a6ea63c14273710e2cf734522ce6a8be85e50 -0xdb282ccaeb04b9b92402117da7a5a118b735aede625d03757c5dbc71e4989836 -0xb5a6c076d7d8e6bba99b6bd942a627123f469e76bec95874b7cd2f32ec2a4a67 -0x6461e90feb794dc8deb5a774a08b3bc289363ce63d7c2f21687f868a6a289d2d -0x952935cbc3d926350faf8846c2d1415f6c0f9e12f13400e34cabefd622bb7b75 -0xb24794afd33147c86f2575a7d108771b9ad51bf43f0602d9b4cbeca92a596942 -0x939faa2df04824ec835286f601c7d6a11d52cc9c2c427bf1743693f6dfa64324 -0x1c1b20885a7a1829c148d639da219e0e6873d834010ce31f476c124631157dee -0x7fbe3c4ffea9a5e05be0504be87906f6a322b2a58dd5fbb40ce4fd8cda0dfd38 -0x532e6866328545f6fde4b65683a0780ab8ddf86457ad8ff0930baebe2bbeeadc -0x57fec9d5d7aff6f8ce41d13951b1bb36d89f77cafe991d23f7a5b30bcbac72c0 -0xcd970022b082c8d99e6b0d3a609f74847b06841fa1840656b33ce00e040f4e98 -0xbd051a12c8b21b5228a7870ad6c1a5455904d8b636f683584a173c26634c4f39 -0xa365a71ba694ea109e5b2cf570209fd366752120a368370e4f7f02a90ab58941 -0x6698d9cdcf2ce6d4203a94571ca6ff9936fdc9e3bde3c8947c5b42a79a9e0f3c -0x937a594cd63ef43964d5f92c75cf52ce8f692a3bf19ae0a4b6511b611c8721ea -0x356bdcbd57ab784a90e5803586d3cb269dfbf2da8de31f2a1dfea1805afc96f0 -0x9583737a7cc6686659cebf284dbdbdac10a0e8dc252676eeec440c8ccaec54c6 -0x9ed8045e4ec38fe6e3032097c608d1b091285511a2c1c20c14080ab049ef58fa -0xc9681de94098b5b29fc353a17e15cd8101695971ea52bc438454ca2debb39177 -0x4497d8cd5525486c74a0d0a32cb0450b533869b8259a6f9e6e94739afde28ea2 -0x5e9409a98bcd835ec837dc2ed3d7edcff1157b15042c2c45fe5c8842a45066dc -0x353c521b31a4bc7a35b7f49d9b130ee1dd05ae59d293cc51c9af494220c5d51a -0x0673a08fa953c1cc032ae8dfcfe8fb825154aaa1e9d4faf6de5c472dd80396ed -0x9bcfc8da429fb5d674c6bc402baed3ca60161c43e2b27dd3793049f032e58d98 -0xf4ddf8c755b3c23a9222d617f3cedea1175baebc2f9782e94ee3aeff6cc76c92 -0x5e465e3d6b71e4f0e3fa9f3b252424fbfe231208da6891b1fd42865dca267c93 -0x29ceb696f00423f35f4f38e210dc1ce92ae439a35e2460e2d674d2b6e141bee0 -0x064b8c8324fb90d023254e84f62396701660e1365e5c0b63c51d0951f978302f -0xfc563bb97b84ce5576baefa772bb2a5f4097c2e881768a60da0efeb4648e0ba4 -0x1c2ec3e7d1a62dcd86c305698e767b317defdf0cda0c2cd37258b312f342a8a7 -0xaf3b9874bd14a873710fef9dbbe9c1fd23658f325a220cc38d08e27d8a64f942 -0x77512740a3a7de926ff214109998e799b3a51bc08a6c1501eed26ee3e2bc48c0 -0xde1c5f5b4e3bd4b54634d4bf9a23101d5f0731a098c1ee814d87004c5f6607ae -0x88b90e2a1a4d0f3eb0f99985902c44318746a262173382b4f5ee5b281f62fcfe -0x66582061c80d31ff92b356a678a5f6ea731b198d6be53ded3031e3e279c39cb4 -0xab9691f5dcbbec733418a32f7a4bb9b44e0b439d938f607d42e0e548f04746c4 -0x9ed276a49e39fd5ea035f0f20181cc7177a9534ce4032ce39384823501204c5e -0x7d9279d97532954c57e2533370cb0a98fc177ab34b0acf7f27ff11bf6ea9cdaa -0x55d1a53bff970ee854f03aa96fba4ba90960e4ef9a8e252f9e1c0a8488edb5ca -0xca7bef76888c8d263a48c57ad9504c16bdbc878feac9dd45c499c0f038089e55 -0x7154695329baace522afad64f98ccc227980cc9adbd76293301c38b4201f3677 -0x75550e0b32efe7cbe5c47a8d2ea7c06df9c30ba9e8fbd49c9bdb36d77a552f37 -0xe8787f8208b57c1408c450c88718849c2380f5c4d6f4da74f6ca5ac2ac8f9c47 -0x9b6480928b8ace24c3129e5a47e3bf207e0d41b74e3aed263cd40a64f7702cbe -0x62a9a5b940cd5b71fc7555a9c3893a5591069aae2486b48da5bc396840fb1b18 -0x0f4cf1066bff69a6e5ae77b907f6a7c74d888912bfe7d65c9a42c7618267e7c4 -0x54d359c9576e84a0a663dd0a10533c5cf4b52d3c30934e940f04692ea219a95f -0xb22df2fb6d28687590f39c65c2e8e3fb7d78e881e5e58ce72ec235a1d0c2f1f4 -0xda5cd527e928f54ab1dd55d772d22259a2991d4e66680f0ef4759dd7405149ed -0x9fd55aa20198f1001260149c0fe21a661c7282cdd19576f4cca1868776e0587f -0x4d67d5f127f506da4d9afc7cec384c3585a040eca5ba9eb187df50fb74391ee2 -0x108bb9d59c02a1b5627635c9a95a490055f206efe7071a1e62c2299d79c70a5a -0x9cb78b104701baa5f295ff2a625869bd5205d8579bbac677695d54ba01d47b3e -0xe942bcc32d0f000d6bc3d11536c25be022da14ada5c0a20f27c596ae9ccbd3b4 -0xd350c5b76a419aed1e8f20dcc4236a1157ad94205d68054cce6dc3334a5d2c21 -0x84b890cf2f53e1f3c6a522e39a934603504c9246f114aa0adf60b1326fd90d51 -0x8dd722b989626e56bf97e62d3542d5b50fc6616acfa9d08a5d04acbe96ffa085 -0xe4d3306613e765bbd8a96c128ed85b7c353c0eadc80b83065cba056395cac2d9 -0xa7ad68fa2eac2c8bccf09d39edf0798dc7badc0688ad41c0ac1367d8ac32755c -0x1f94000a4299200c08e36bd79ac5f193f72bdfe3abda6307aa1a096420574d5b -0xd4c7f170b17800b6fc6e355d0efbdcd11195d06f17227eaa9434c11487bed466 -0xc6979d2026be9c846a2e0068fd2ea7721cd660f0a0a599141abffdfbb9fa3d8e -0x9cb1cc121c3a51c9779ae4f4ac15b7d31a3fc9e108324cb17ac64cd9aca65632 -0x4505384e2c32812008cc2ecaedc9d93c3fb7b38123eea4b778f5a57ccf372b73 -0x8790beaaee4665ed2456187c9b0097421f035ea73e73b02506e22d7604a25557 -0x900cd161289efb6a469b4a0f415c4e499e6c01af830db366ac73e41f8479760b -0xa24feb40c0f29daaa4c9e6ff5e8b6cbc1bdb7483cdd9b7f2a9ac7c7fd47b0d30 -0xe23da811b1e82522a75976bb3d265d1b9838d5e95225b11f81cfaa90810f0b56 -0x27595dde2c88c2cf1af16de1d4c36a05ef5b9e57f4d1d742bb610fadb2325689 -0xc977e2e0adedcf893ac7c25ce4935a7b9535755d19bd785bd258ceed970e247d -0x75661dffd93f3969a56016f53a280ddf52162f4f22da5822f44453b70e59bb4d -0x6b4ca5baee7ead0964416da0617b9f7cfecf441d0d55e1cb50c028cfb71af5e5 -0xeb2425190c8692099c5136cda17f37f6401f27686c96125f4593ce7eb38f16b2 -0xae8967964660a679cd370efd38bdd8981093093c6976903a9039aada7a7a6f29 -0x88d078f75fd120a7f694360b0c18ec272324a1b8687db1e6491aa0997c91208d -0x2c6b08cc4b081d6aaabec375382d54b2260dd7fa00e3d02513b4832a9008d60f -0xf2c7c96998fa2126b03b7219b8bd88204f26de4586d679aabf2206bd247f6147 -0xb22f366f261904ebca61ac86e13cd61e0d6c61be4771a6e54e217750f6b8b227 -0xcc6acc0305fb01f8a67ad0f607013d6400dccb189dba92d3330f7f8b3a47de2d -0x7d9f2484d879d0367529c76c6058c0353ac327d38b9ecfa41cb09701ea4ccd38 -0xcb9b335fdaf2e1ca5e36bcb26159a372fdd06fd7b3e1b6a3205fc2b14ddced78 -0xefbe75c2833492e9ca996bf363d028688a647f35aa628a513a82cdf26b9d44a2 -0x9622e3f7cc164dc974ca30ffa9774a4bc2d122351c6ce9f7e5620d6236a5f173 -0x15280da9c5d86748991be32374b19c8774db90dfc10d6698ef1276aed7692914 -0x96da70c76d0f6c07ecde75f289773af110570d1318a38d6de882fbd3f294bb32 -0xb45b77df47c6a9a2fc25b15d380cc254932909b9d611c7cedde2b79aaffda957 -0x6587d1df009b7008c3407acbcb9ab6754ffcc629e480e8d24aa7791ab646215f -0xed767bd292ff11046ca32c10527e5335ee288a3edf3ff1a51feee7f6344475dd -0x3d216fa2fad391322015b1c22f6038925ece93cc0e12247d69b075edf85e3a66 -0xc6ab98b059db5765811761f723976b721c3eb6e90a97f5ef7d4f4a4808d35ed5 -0x0b39e5a83a368352bfda5738d173b7be521d84e6af8880a8b745d176137574c8 -0x3f612764311b7297ef02f4e2a512241119d19631e2a7bef40c045ac10b54bffa -0x6e96d6d06debe9b6f076000d4aac12771e63a6b273de1c5b50dabbfbe889d524 -0x06e15dfbbedc22f46c99760717429f9eb48bc6913de79ed7ee893f6e5771ef44 -0x8a3d9e03200bedbb62d068c18366061796640f4476813e9d97a97b6856cd9d36 -0xc46dc077a5b3d887fb6faa6113c6aff0ce40d0f7f25d4008bd211bd5624f154a -0x03d4628bd54269044405a9598ae38d4aa8b8603ce877861937b0f289155a0952 -0xbd728b815636ceb67197edaa34757e896e58bcc9bc9ee96790bae9007822752b -0x0fe849444c2dde99b891f4a9d29972b918f53535aa34a798021ecd0153d79edf -0xaba9aa820b6660f68b77ade4021fac823f9041c156b7fd2ebe57a77ac41ca45f -0x28c6323a4960e47e005d55d189df5f7eb812a7ee2e630098811df7c0a5851336 -0xd359d2c029b8ca7b8888de75c0f23f4ea3ec84975f422fa6f4edd4853da2a3ef -0x25f2a92b0c689875a270a51e1cf6c822da966eb5b29799eaef9a809de9472d7b -0xdc56664133fbdd504a85f798b3affde123890227cb673825124c6c541021b864 -0x619a9caa3828bc20c7ad8e4633718e73a85a597db65cddf075cfbec511ac106a -0x3d80416d6ff40e864476737d1675ac4a604a569772c9670d68b5b7d35013515b -0xbe548c2d532f4c8c883e40f2bed0c561d1fd54499e36d7526326bf8f60d598ab -0xc4bed23d24ccb4bab6c72138635dcc9f8072bc6fe9a68ca59db3349a0c49ffa7 -0xbfd56f96f6d4c3f70ca759ddb8c869d32da322270c4bd94975518ca9c58dc607 -0x88d3b0f3ef93a3703fa98a1ef58ad1c62fb7b4b068eaa2bca44212690776f565 -0xf04a1ca14cf49d352abf690c480c4d946c9faf5758a3018a9fb722acc6a2c97e -0x58f871e20b73b90a3ef0d24997ff5a6ca3431c349945ef5a7bb9894a0c4294e1 -0x8843c53201887b94a90bbc4760539d73e4331a2a701fe47ff5be3a94649d6831 -0x61d965d36b5f2c40b5c01e9b72dc6d91b78ec92a497243aa9773d381680a4585 -0xfef9cca79510d7aae51dcdf564a34ac3adb169be4d2f459a3d37dedab49db13a -0x5e2a710060bb95d7228520c1aa670b5d580c7c0cfa3bee113a0a2143db69eec7 -0x0d0b60e5d4a30dbe77b8286b6aeb1d03cc9d2d8756537543ce7b372227d36a60 -0x59c034ede584628ca34205c6346a922da4c8a72ab5289ec0b2e0e8d989a67056 -0xcd1f3918d37ca057a00e29c8898319678ff51e334e2d0ac6e2e4f297eb1a5629 -0x73607b8042977617ea23cb1b595acf0918de46266272331284219db4bde3d8f6 -0xf85a190696219b347600fd2757b1576552a36990a2ca0a429b9d2dd04bb4f7b6 -0xf7ef0f148f46ea660ffa7677927c8e3725248ede78f0d8ec4fd5e4309b07a713 -0x410cf348e764c0dbf23d2c6f4b6006a7d244849b428e72d096726072f38c3439 -0x5c4f6b3abadd193a64dc54b5850e086ab3bc2e818d3724c9fc054e093f18a5f1 -0xc0b3c986234457a7962610b0c4df86bc7eb0ce9707d285869177aa67323594d2 -0x4fc584fc6aaa2bd447bfb0f34612b10e12fe1e37768d5b24651a7e1317ae1bc1 -0x47a2d218628ec64a422c7fb659e654e1e99a73f91cc1d36c6834efa9cac7a6f5 -0x5e9583403aa7e4877576dba7e2765ee052f3ad5718e9bb4c740f7bc99bc0b50a -0x1d4a7fa60995827778c499b59ac07f4b59f8f350f0d775bc3630482adc426ff2 -0x164e2807a635aa52ecf04fe2d6c4814651022e548409c7fc6965899ab6a8d3eb -0x04ebf583c13008bdfddeb8bf1321526a8961bf1adaf0e678428be2bcd78eaf3a -0xd7abf102876effbd0ad3a0f3c58da03ba473e235f838c43ea2537f834c483296 -0xaa19e117a2d9e7e7420bfef186947738d686b8d32b350966f9e2d3239d7aa4c0 -0xa9b8837ab3b0c65d37a5368f68130dc8decdb79e16fe6127e32eb17d94cb3373 -0xc98fb88b117c00a97eee16c9ce7d0a003399d39518480c347de68274791c1de0 -0xb1fc35cfe2057f4881934c45035bfdf5b032393b87bb1e77d00534f621a59a78 -0xfb3038003a30eb48a15ab6ed1349ba5c7acd269b0acd8e9f68a9c3de47edf5bb -0x92038967956eb5e0061c78b5647307291fd1611b7f2ebd6104c6069964419679 -0x5982a84257b462e6b264dcad9cfaa24cd13c220a460ea3434cfb043c194ae945 -0x241f19c6531c371c91c33ab23a8f51bf3f94487220368ea4a295c6a8ce4633c1 -0xb3ebfc2462fd47e3b91801a5bcd14f4b0c72d32a95ae766eb5f52aefdbbabf70 -0xda3159895e042d88aebea82e3aff2a0c7683266d9e77e2531d8e8a5837070c80 -0x3b528269d160ddf549e8fff53cc8991746c34444b26f4e0d847f9857edc8216b -0x7639c5a611da9e40897f5d1eb04690af089e1b9ce40cc5d4867fe172a3e947ed -0xde28c7f6390423f0b94b27ee01bda22a1b529727ccee23610d872e5800f9f987 -0x3a4cfaa1fe098acd9000e7b19191d99db58ac75d8b123d76ce9489f9c0ab9f24 -0xe0a51af56f91b740ee6e8694cd0b755ee3ae3e4837d388602b71005f60d5c233 -0x0379244820740f59b3360bc5e5c1e4fa4d1cd90f2557a2f56cabc6430e4019f4 -0x6d9eef05e5aca04fe1a80a26f1fd1563b2e010d321e51aef2444d4e7f47aefa4 -0x4529fd09563c0dc06009e3b9703541df391cfeb7f14d0d034e1a1d790befe433 -0x8c0fd217f6f1612a5d5a96627c62a27bf16947d83c948955c91f0a5834b4eea8 -0x5350a7ba8cd8a0a80a6fdaf9c272033c4b579f9ccd79cc75c108712b22a9cdd0 -0xbaa387d06833ecb4db7cf3554afe6b796537c4b0d5b590f5a3f540da96e45f97 -0xb8a9e7f72c4b1f69c2f100479674fda8e2f7f80c9f4151ceb3644bb5064250af -0x9946980df80fcb1ae8d0c108a42bdbed8d2766c3f3a7da6178dd4c5bfa0599d4 -0x768d60383174650c527b675d9d59af22663f722292e953550469376f8fe3e638 -0x9718444d3f3992c19a1f2cb38a1058e35d19508d263f0ef6712b49b4945176d5 -0x61567d3149aaffd0a3fc3d260786fea7365f7db34acadfdeab00ea69e1ea11dc -0x262b539e2308874a06b7cc3255a4d8494321ea6c905d734f4cb10759629b19e1 -0xb24da3a54d7ad9d28c57b060852f02f6fab220ceb8fa511f04affd7de3dce276 -0xb9186abaa85e5f61e3214f954a9013631f407a1a87f4149d35681ce6e61ae9d5 -0x3fe081c5a778c0553d8174ec74d16c8d5e67cb1ba26ed94eabb1571f1241ddd4 -0xfa57f83eca11259e4d0c70ae1d66939d0c945da8658acdf7a7c5b677e7bd84bb -0x618fed1d351f16feb204178ea9e4e79c6a1ede9bfc299f86ec5c3dc7c40b4788 -0x44056431e323379b6431e2c984148dd828c53ccc101559b321bd4eddea0784a7 -0xd9530bbfeb4146d12b39eb4bd6d6d3f83e3168a6e7073f5636a162a119c6d4ec -0xe6f3496cdd2a8f62f4e61511487a6e7ee667a571777c70de0190989c87ac5369 -0x946bb739f73e29383d50e49a94048418202cdf8d8fcf7d37bfea5ed6dd7e9f24 -0xe6817fb08de85e6908d90b6df858db306692b2886f9d46e5769de76d3746c995 -0x4b9bff75e2aae1014eb02095612fa3efbd847b505bb2a6d462dda96a9c256d96 -0xbc0997ee37d8b8d632e2c98703cffcf0f2769dd2938e6c8b050ddc0bd63a217a -0x99f34cdce6bbbb799839bed2a988d2c0b1a8d38696ff4696f2dfe402b9b01188 -0x7a4d7c4b31fd181eb6ab74ef7120942c3dd818952db84b8be12a072202601010 -0xbb8748a9451c52c553dae377a121be8b46acc190e945ad2e47155c9e2de2dee2 -0x20d515469f34c787aa47681fae3f56cd838bc85d0b6567142459978ec546d7c5 -0xe34d665091e2d964184374adabeffea309555cc8f4741c2a8700b542f3c1ce07 -0xfd3b1f6a7fe29f5357382711c421016967fbb9c2d4fa70ef2db4749634a80220 -0xe441d178e5b210e6de410436717ada6abbdab5392d15a48cd90facfae5e88fe1 -0xca379872813616545bcc165fff3e38062a049f6d9b1af10130f1cb6171242e9e -0x24100a689746165574ef77335d6e5e5c5c9ba8f3f7138d99c03ccede02855927 -0x888ff2df7c4bd9118b0b9052c4515afd9574abde62b7a359b2f1fef8e9206246 -0xdd43407455e1151564706388d225bc2ddc8f2197066f61214fa2e6fca205c9bb -0x0218b3abac55d7654276857af02c054d588405e8bfdee6ffa8cbd07b81a3ddc1 -0xf8a35eac01fd2a0f8175e95b08d5093467678cf0cb18a7c1c1afecd12eb1ca44 -0x01cde19420c0b9a6c6819c8362256d14468c4dee28b2e2ea628ba5036319d0f6 -0x20e19453fb623c986169f89309b73f8e197ab51af98f8ae371cfe8d7529d68ba -0x21419128de6418fb97faeb6a3c2e78d139d91a3aa148ae0abb399e3703229e33 -0x0801d52d7172a778973d0df9a8900167a0f86681242d1e7ce7c9f9535ebbadec -0x624c96a96a040e473f8f379a551e1e1da7277463125c8835e90aef24a9f8546f -0x9eea6e7fb762f81c1558dcf2632c86fe026dec0121ec74b63f9efdc92c10f5ca -0xa400c62235ed14aab9af9683175298565adf9c17e3094559ac0f25d4fb5a9b05 -0x7032eebe73fef088c65d2cd7816f7fe22c1dcdb1bee9dfa4ca46b160cd3c6c34 -0xd26dcbc6599815e6de34eeae98af6306b942816e63d6ed6ab46499f2189cfd72 -0x66be7fe29a027e1297cad606886e9b9c9e9b1f938697cdc2be7ac13d68977dec -0xb383d6883fe8085ecaeea621e58c14ea063b00fbf8f3e5a79723a2b86459cbe2 -0xff69e49d20ebccf2d770ea43f710db81324ba045d474a13e21f3c69bd840b6ab -0x75fb7bcd55c14a111723499210434d7ef54393464e9d9ef5e19438ae098f0823 -0x37e5a9176ce46a8a0050537e01a60722e7a523a606600fe2dd8306fa64350f7d -0x0024d3f9c4e9040641f99052e26b31a43b92b5569f2077c6376d9197ae215521 -0xef7889e230be01bf6e4a84f3e7f8da5dd24e1b20b577f8c5ed1545714281c104 -0xcbae3b826596eca82187ed21006934f7fc2171a17df0af1b728a27f7ca93c43e -0xaa05ad0fa8ec4f1b3d217e4ab33802437bc2bd0c130dc31dfa603e3dde16706b -0x484c38597c3a46bab0e85d23b3a6cbe3a08d8713a086e7d05d3ddda3d37cd7c9 -0x702f60c0da85f0bc96726fa39a9e8b1ecf782d6155c1b808761aafd9c0b71be9 -0x5809e17161277c24a3b431cbd1294817d868efd76a8667de6a397980958a3541 -0x0845c2e92811654cba92a0a1b50938bfcc56b85f6539bda3ab5aaa8662ddce78 -0xfd0368db53ae6422f5bb814b42b7660a8bd26a510a463994318151101aba5604 -0xa6a6912f8740df5c5646d60c48e9dad06fec26597b478e6e4747500ed88a305d -0x94cd40d62a5b5bfbfc0a5725ca3cd597286d0cf958e9faaf80b0707f9b02f99d -0x5aa7e735337a187c472055d4bd541b10b06bf5239ccd3451a89876291734cc70 -0x8635978a89ce5f36fa09b3417b7614f753d129ebb6e7329566913feead8e2043 -0x205ce617b3d7f026d394477bb3e43ba8e3fa90f05e8fe91995194cb76b0cea08 -0x2604f14d965fd31972a5eec518a69f4329f210e745b4174d3375b07f71c59d8d -0x7e726e080b9479c564fbb77044fdcb17512bd50878786ebfa9e8e5f3f07ebc07 -0xccf81fd6268a32665d01fdb0e2b5584744485ffd878e4346d7edfc8a76042309 -0xcd8e561474e9b4f274ec4d386a2fec5e83ee9985d061e32ebbd290c18d355be6 -0x4622c6360ccbfd564ab528091da4db1d3103500cc1a7aff99aafcdf3430a8f61 -0xd0b0b4a8f5eb8b0ed2d8b105f456cae33c9b7f6247b551183f0464043edcb100 -0xa0f90752d970036bf0d7c31e59b306b6ef5ee24f3f5095e92847478bc6ac2e86 -0xf3f384f5ab131cf105ff688d32427ec4791a9f9c3b7a61f170d54c5893937dc0 -0x6510b1bcb862c66461d700b89f75a148761e6f9cef195d4e1a7e09f474ccc0f5 -0x6b89ea4cf09d6c0b0b53befd69a1401dc4d5d68a798568d03ea3af838e00a533 -0xa07fdf816b072d42c3a96c2374e9982be13e1cbe5caff8df9a17f0116dbe0ee2 -0x05b467474f129ca7201b661f4bdc790688ab4e097100b67242a8b10db298e28e -0xee6fc898375b2e3fba4a30ed1bb713dbba2fb09ec04b8b2d9caa63e773a1d05e -0xa8da53091a6b3b6e95c585afbdac9bcfb6ebb8362c409b113aede886e34e5a43 -0x8a9615ebdd74ba6c68e11fed56a1f4e294b1d769f62c2273d23d5d74ee600503 -0xcce91b4eab18d39a11dd80a554c3f05a462ea8e47a507c32b6d258ed2253ba54 -0xb7891cfe4a88babfbf74615c51c5d9bdcf1380b33679d511786aac0dc1fe8e18 -0x2dbb79723bf82cc6c5c6cc3f77f7444b133d50c5b73d9fa78e1b5857875b7170 -0x0ba6b1f25c887946f9e3dbcb7555ba6b44112293463a17ee90034058cd554bd5 -0x9537647d27fc051db5a26f5e1037378003253ca516a7c8e698b908540a1cdf56 -0xe441e8aef2334e1091b21ede9250141e58e23f01d14c31b083a73011e3519e88 -0x66673ac80abb674ef7b6edc41687fb95f123403151db62f00c4870649a835e2b -0x742289c8f6e59f950bf6b98f0f5fe2c734254070e33fe4997d3c6ad81c0f259e -0x8e43842960e876e4b41833fa544944646b772b4fc62ee5c3389f35a192ef64bb -0xb77b2b5071d6eb0dadff64862bb985044ecc840da9e2ab68c7341f0b79ed8d4f -0x59f9b40ff8fd6b2736be1fc5aa0929b8a8110d36dd2a2f6a5a5ad50c7cb84d55 -0x110870fdb3c2829d5ad565dae1e64aec4bdac10218d11a919f588f7c9477324c -0xb8b3ab18e2af5fcc83c56bba8a099958ef88f51ed48957c3b2319401db31af59 -0xfb6fcc1409a5978c2ed11e158a4a2f1a1b001d2a6d5c57d8b10393ce18ddaa14 -0x7e3cb4cd0e9f2563951368e37036758954c0d36f7e14beebacefb04300a50aee -0x85806a4caac221fa87a00af5a433dc026fcc7499bfa89e2f3edb94c301e386a0 -0xbbbf148f5e3a983d1cb27e1c81f80c67973514741deaa1262aeea936ff5ef37a -0xccac9e38734148b9f02fccadcea6cd2a7e10ee3a921bc2fcfad66c9409da440f -0xab13f7d0e4e4ce003121f72357cd271f8e99f4f71d5f8b5c18bae5c4b866a8bc -0x0c6af9864fb60e629fa06557d9f501e27d901d762880cdbdf9d5bd665f9b052a -0x2f3610fbdb2a1e742e92ea65dbd7de01e4400c683611f70536514a2523cfc26b -0x8e090662aa0714aca5a25e799d5f1a4e571b0e6b9cb8fb0f3e8463ba5c7d2018 -0x0f6dbc8ed1eac830bb53d275a412c5aa641817f3448f6716799f8387694fc0e7 -0x0208d296652b1ef927730bb8ca1ce631e04dfa6f3e646d1519a2fd3f0606bbb3 -0x16d0a790e80152d93a4126fc3410c1d88ac4c905ff4a2dbb00ac85510f171777 -0xe4dd8f4692fe9f3726ec4c5265280ca2261bf2b3b7d180daf9b6717e01b077a5 -0xec63d1dd65ea7b72657ca07582708b403b55846a1cf152417399da1fc153c2cd -0xfa8bc6b15b76958c607a1bf06b00481d9cfcdd36544e84f57e4fb02f44c0468f -0x27a32a6949871ab57afe69f63b968fe60f87012ff928fdf4cd0f4223a10251df -0x7981f961d849b1d1b025172961fb97151c5d3245482677ddb7d77504b662d926 -0xf826635a22ab6024ded08444884c460e389f336f7a96c3f6eb24623893147c36 -0x7d7f319a76b9157f90657f9cf7fee1533415d733bcd709521866dbcc7f448330 -0x65ed4d636c84ad856322bad4ee31b0ea93adf4f6e3973a431678d5feebc41558 -0x0a3875f9db7b3f607ee327ef6ef7aaf65944b0fd91ab52ea8e71da6de5234638 -0xec7ec20bfbc9301a1536bc56d9dbbcea2c4b5bcd71231443f2a26361c73ebaeb -0x0fac6c43012052cccebe6d8890a16a89c499438127068104c1b14cb9b11cbab3 -0xf915f592b1ffa23647918d776bb030ce7dd4c869cf796b7a0758c71b1dafc806 -0x3f0a0c87c2faef995da2ab632a638011eeaf747c0cd655a48de712486baa5e51 -0x047061c0fc609a8909148238563761bbf38838c8951a026e27cdc9c47fbab60b -0x1a59dda049e9a555fc8c2dbb4e136262ed0637d98bbe9b2353c6202c2946f906 -0x54748126101f071c95cec5bcbda4388e48ee235697133390f17546431014b8cd -0x1e8b26eb61de796ef9d14f08d3a1ed40c01b7ade1da14aeda9a4c184a450c8cf -0xba073f4c3e97993075f59dc42aff7f6a35b6c7dc15fd47da7fc92e79066a4baf -0xcfabaa20ee9cd860def8321efd651f7c37dc4c8b93d562c95590ec100c731f8c -0x7517b320de1d24300da35dfdbf7b3dcc03fde88740846371b52a41c4be250427 -0x6660d64e76bb9ba9c794c894129ab55c4f5e0dcf5eab3b81674443fc537d0c9f -0x3d474f84aef01b6362643527eccc3ae9e95319864b2c389c72a8dee9356d099e -0x957637609d369657933b57c60e9ae49c73aa21a8f990c3a3afab60906f0cbf53 -0x27904bf297a1a81d3c187a8ef291c99be0106f8eda9f2a655189ebeaf0d0b19c -0x58d365c40659d7b2e2e142e0a278f723d650f6e961759408f2a8d5688203c9da -0x33739824ce51564f1914ebf9b0e30ee9b40a8ec34df1a117df1543c81744a05a -0xfed508f3d37fa48218c8da920c3e614de6cef961c43587515fd52d509f743e68 -0xaeb850c69a56669d6090e5296ef52c0ed1080cf7968fde5a86022ef25feed142 -0xeda54a83bcb4346e07829264e2d8e22dcfe3b535b50287b01827093eb600dd0a -0x810a6c970ba2e59ed5d55b2d7b109e096a131910365935d72354d55e8fc46be9 -0x3e416799404a869dead8fd2ae9dac5d7019a787021fca528b659d9512e153394 -0x906730ef40df222ed8e9dc67324dbfc7244b72e0a5e8d1bc75a62a590bf86632 -0x8a3676fb261f74c63704a87cd5c33b380710362499f1d6b81a997134754a9875 -0x6163156ef8c7355e802ce9f8e5012434478b5da79e247d624fed46dca1734c53 -0xbd7cd7be480c01b2f7eb4f102fb50df2e554712718cf94c2aee579ff969ea703 -0x8f5c3252bb1c3c9c44f10bca447a3033f67d663eaedbc0523b480d6332b2a671 -0xc250416f367a94623ea552cf7e46093fdfdbd2f77baa2bac961bf72744bbe50a -0x7a1c6f7f2d72f095758f82d55ec63f98cac7f288132d4bd5c9c7f17c4743a97f -0x6fa0501ea756a761077ca2f49621d54bca55b3f577caab2c89cfce93ea3eeafb -0xead8ada04497f95b2e7565d72870af896fa5795f35d3b55d5ac2a9b00200e58f -0xce3b82c2f97a4bbf3b975946074ccb78f5905a3abdde2f8a6604334869ad281a -0xca6b1416d4a3690d0a4b938556fdcb0c444e160ef7b3b52e3d3ececd993fe86f -0x18501d61b4cc9ecf157e72ba67b9db855ea22ecf193ba5feff692038b6ad4a46 -0x26152bb2047613fbee37240786c441c4c932371ec68aff1a43edb4ba03b15c9f -0xbd3b188e43396c13c60219cf9f9117e6b3f65d962bbed930ff1538ce8ea2d521 -0x6e9ed64c2e2e0461fc788b9fe871ae44dce6a2954d19a0c1ce7e35eadeb1ffbd -0x6ec0a60331e8abd04d01907b5b22278a5a92ad93abe4786f0ec8e93277cdc3e4 -0x0d9b5daa2f44d18a6cf1cd58b3f91e41f5258a221df46b14a5c3d29ed9999586 -0xb0bb26b20845ac7533c89bf77cab7d51904800293a408b36694d821cfd59ef34 -0xb23c42037204292398db58214c766927f195994bfb41f92da9d027a868f84f49 -0x97ccf19e65d2f48f7e6d6e391c2093df38469d0caec17777403344b239c24dc8 -0xc2936196c08287dbd7071cf3958466d0f45c34e6e8e2186815a109ab6d328305 -0x4dd397260ccdb50ee971257cdb5ffc4b4b3290261db5e9b8a7d9d9ae2cc3366b -0xad6cd6c51c9c561c8c6cbc2b97e14025d9d3b3a5a9b1e6932ab4cc6efa8d28ae -0x3969e33a44db51dcd8c12e48ddaea536325b76a638dda68722df908902cef2f5 -0x37f312e0384772aef8c4fe3582216f9572538d74448630c6278aa8ee2ffe22bf -0x48943a9e60bca0ff4cd290ee0917da26d05f59256c10c9c4a9680b76f331d5a1 -0x481113a526c1ea8c49ae5a88a9889dbc929f1adb76866876a6da19bc583e6832 -0x19d16cb4f7671c768602bd3637305f5e6666c00f154ac2d93a22aa18301dcfb2 -0xd63e9647e61a51a00c6ed124b2ef1d258f17a733f3b9f39a0a4e4263be74cfa0 -0x25c53500a30ba41baf42c1c3c0ea178bd0743be6b5ea7e935f854f82555a76d6 -0xd345a9d41b7ad375228f68658c0a85e7a8129f46c3c1d911b8601d14da2aee22 -0xbc58bda09db351ff4cd6575732f48d46cc91e429d99c48cda49ee06ce1b40709 -0x7a013de547c495a46ed9f9aec2632c00a1b3c8b3b5de704edf4fa1b32716dc9f -0x012bcf096e6184973f25d388372fabfdff01279f4c9ca4afe6d09aa4c874f7bc -0xbe827f6cf7aace383dc06fd7604a97c476854611c508a60b0c44a09ed5c2e4d4 -0xd11390a1ef2a4fcae2e3a59d94d48c60b44f8e795ef2051677ebc30f0d0758ca -0x549239a0808e1cb0bbf40966bab1fa5eca6063704f0e059e2281530a111a90d8 -0xaeedf01adae05937e2b7fe1ac0ae1a8b6ff5223b1690b6936d707a86a4d9c558 -0x083fdaaae0daeb03b5f004becb6cd6c86f7362dd13873c6fe69ef4052211368f -0x369ae2e5847b8e043d059ad61ef66f4afbf82cafcaf027cacb81efde1c9e403d -0xa616d6158ed66cbb93518402bd75823cf49cb24bf8e839e21f02b4adedad0902 -0xb2dec0fb2ab48c05cec163c2464c65fbe01092bef531758398d669a342f0fe72 -0x7082c66b3412a8b334598278683346e31b36286f452492a1f06100eb51ba7477 -0xb4f6b0f4e8d614e32c82d973dd4f2965e1edaa4f629cadadf54126a0616bac68 -0xabe49bafdd16b3440635b4290439edca5ff5024d926596d45c85df28cbf18f8d -0xdeb395f72a9d9ba4e1841423d4340ac516a9b1ec79a651bd27da5a0e09a53a77 -0x9a8334d15bf432edb761a5578742f5e2e2abd621911f7f753a55ac47d2908225 -0xc0625a6becc7ebb1dd155a1df5c1a544f56b2161cf61da9f6eec571b8531bb7c -0xf99761eaddb8f22e17f05558217568d8b658eee8ae9123cb09b2e9397d5ec63e -0xabd957fe65a5a8ff8e7261ba2711512743957919b9a2286b811839e145b0aa35 -0x34ef6c3a0321aacb727f4b31f541ab5f32d23a5e1ca104c69c9491cf873212bf -0xcfa0976eb077cb3214d73c955d07e00a04c6f553b8efd850f95ca7f588914f89 -0x5b952b8a05d434948cfff711ec4a83895895f3987fe73b95ee8e3452be85cf88 -0x5fce457e656a4dd4ead4843b78f95566eb372015fe4edf35fd8787dc15c64089 -0x1c48664e5b5ef971070bd4e23e638bc087de77516a20d01a4010b84a2a10da5a -0x4400f45607fedbfb78d5a31d9c5fc2daef0805459d1922b9ea76c5c5df75e09c -0x0bef8da5bb8841dde5806d4b859d9265c5d87d1c8aff405f179cd86e142cd639 -0x461039a45629e7fb21ceb7cd3edbd87e997c67eeadd3a090680c0f3b55948b4a -0xc7d442f6d5a2a49a8806a1bcc4ce01e8ab3ae69f7510a6d51031fbdbb69a726b -0xe4c12276c0f0c9c545abb5607d782d3d2d553d135c03e057cc1f329ee475d0aa -0xc78188654c670ac35db1ecb7ae7345e23b22a19954d7b9107c9c2ad85e4ff731 -0xb6742dc844f375dbaed1db791a36ed980be52326ddddd44983210a7492dc3403 -0x6073dc882853074dac4205884f3a67aa9cb938f16b7afba4f0e50d1dc1ab1833 -0x99e637a87f3bb17b20ee19ce92f6a1514286e32f5e3b6d12bf756b4e70937ee5 -0x4255908442602d7c4f37b762f33c43a4bf1f2305188cb0bf0eb900df5fa7b01f -0x7a78042069281280035daf532793fa62d1e2a062f384cb3f813a8458a3ebdd6d -0xe5923c222ace1145bb5cb4a920bdcacfef6c438d76aef6ad0edb93b402a574af -0xc4fd94a7a1978a39234bc997adb9e850f065a1bbb1e1aa039001a58cffed9ba4 -0xa49a8e2cb695db8a716871f02e1bcbb05aefcb07cd7095b067c839f076f283a4 -0x45aaf7133a7936b3a8c39ad11c417dcf9d03ba3afa3bca573b8c6f5195380f64 -0x18fffc00f8b523ce12034245c7c2ca75a2b196ecc8f4bf44d15d66ec7269d8a0 -0xf326ff37ed066caba5af714fef33501a6ec4b0b302f334504616a6504da25d9e -0xee9904a595ab99b461044bb4fa99fec74b50575f9b12eff0dad5370ca1755598 -0x729c3a1d3e0580d265ca6dab9cb954c3a0ee1577029dd7c495b46e179f1f6d48 -0x598baeca69ce90f1a55c5f9db21063a31f769e23c15bd3b663e9b84befb37023 -0x7a8ea9de8ecd6b7f53f4a64a972c9136c7c5ab1ccc7f7b3bd852548fb6bd21a1 -0x4cd7d2a621f9fb332abced92686c96047479d119d2dafea227548f5a7e87e761 -0xa068c57513f1602d1f1abc407e6225e12b21a909f78f859c2351284ee143ede1 -0x6cf8736c365aea189e84eeb8988a9e9356a097f6edccbaa91a17bad7b37f714d -0xe6c848db6f6b7e728371671ec4cd1ad4acf19df2abaa2edfd366c52113afe41e -0xfc659ebfc00783a6aeed9ed328ad15aa687780633dc14741589aab6c07817aba -0xe8eca86de51e1930280e78a749ca4e554887d533bc9c3e58836b7410384a21cc -0x5aeeef9c8564cda73af80ccf922f3da62f2b422039632a0e7745771a9bc23921 -0x744272b234295ee1a31f11b3af5870282c92cfb05b6991201a87660ffab9802c -0x6cfc46f4fa11283aa7f9f0d4322d2e4c634b4ea376e22bc318f65e905c005c63 -0xd740554aa333a3beff3c86f6c769d16ab93ca50dff6a7abafd597045227fa8c5 -0x7dadde188eb2f6ac8562168a3cab17f28ae84d4024ee8624e15e69a6d988ed58 -0x1c3b82eb4878f8feecc701120a4ee21f65d5ec5b421300b1c0fb9a33451bde34 -0x1a3c73130d7e33ee6579601acf5b9cccb9ea6a59f22b0c389a6604b9b01cf84b -0xb071f7d27e577693398e80881baed91a8c79435ca035df3da3f71616ac0acc76 -0x2222f964555328847519719c3798012cf46746a8f554454d3f053e724d864087 -0x1ca6909112e6a4af21021a096023ce49feb84f784194854dbd3fd1b6f2ffbaa5 -0x99d641729bb664fc907e45c30705c58ce4a678889e328313a2b418f7fc887046 -0x61c8bf7b0d5ea8e573e120ed8443b304ea9418e83051c542edf9636192d47a23 -0xa265be6a0aca2d3630bca69e4b40f5cdab4cc5db00278911e4a2d505a99cf67b -0xa1d1881920989771a26f291e7ffebc6e581aee21634088c638b7cda1d15a9cb6 -0x468b62cd1055a3d29b887b1c3355ead83f068fe75b76f15772d1abe9b2c3f231 -0x2c69be139b8f5c3d1e8490046fa555fca38422ef25aadb1a51f650de3f10a584 -0x7e51d4d878418285fab67c4e8e448122ffa7ed4de8242a37e941a7a641a85b2b -0xffdca0a0adc7ac715fcdfced65175fa8fe2036c027810af821e6cd5e3c8961f4 -0x9229611e594e808d2fcdf62049699971ac0584625afa368ce13fa69fa547d2ce -0x9f2442ff4b48605ffe2829f461242379d84be33174849f003b33af55f35c8473 -0x9cfc967b5c5268458229a2ea4246ac1637043b49dd691837aaef49b9e2ea24b5 -0xc626173f2ca587b59134983244ed1c0fe23a1bbeab5fd82437aaca0b89f67115 -0xed2955492b46caf2a33fd41f503b8150a7ee7afe6b4d719ee3cb790f63f0cbd4 -0xd1296a4802ac624be092c06d9d7ff32f7d616cce8675b052e11f9a99c881eac9 -0xebf30b243e472772e15fff6022bcbb4dd77d6bf36aa235493da4ca37ed1a27be -0x9720ddcdc5afb909cee287eb1e87891169186f06bf0f3fbfdc898cf172f42120 -0x65248ec0f6c51e7ff169f5aed6dea1ad260c04f4315fee007c789a53a119a3c8 -0x589afbb5a53b5b6fc73f588af1c1e318b60ee8539c073ada4bdafd3ed31bad04 -0x10c69450ae5064de49585d9fbc507fe7f4167abeb267f6b024e9bcec631eea45 -0xeee7d3ef1e2fa3ef3b030199c0b5520ca8b86cc391ce8cefffde8e9c9879603b -0x9cff9ddf25396b1307bb03c3f80833ada73a308c6ce4b24bb4b0cca85c7fc185 -0x2eaa312fadf802d73ad3ee97d3e88c8219a3fee933a1500f54b9bb32305886e8 -0xa56e3f791a576b7228ec879b379e76ee7ef1747ac77d5cf8c6f074b349ecd801 -0x81a7a0b35b08596eb342e43bd34281b9264151b5505adc6fafbc667c371ebe26 -0x392b840bf3ece837139690298a266771c07e6a14b8308249e8dcfdafde41a8cb -0x1ac5c6027d93682fea678b97d3be0194747fb87914b273f50c535bc8508ea4ea -0xc2327693b6c22a70c0d71ced1c38b87aab5f28e3721c90462aeec0c54a72aea2 -0xee47259f6e366f675d3a02e6562afc272f9ffe7f690872d551da8da38390f656 -0x04b0bbe8fc16d394f7c22cca86bb007bc40571848690b97cdec8d897a7f965c8 -0xb8e80e3320dc4fa812e34d346dc702b554740f2bf2f64785a31a4a52a39bac8e -0xf89af1bafc06e2ff1abfb5ca47ce24c704e47d777af7a4719b23f3b60a7e2849 -0x890c27d2bdb4d6135f160f946ec1094aaa39b7fe27ae3195579453306347fd99 -0xeb59ac16bfc309d29bef3b8e856ff001a2c952a9bf13d068a652681680d1a1bf -0x40ff32242804137dee250d147b698f442af7f76cb26fc0c2390ba31156aab691 -0x69e2e607e1605c35390fca906390939a168961532be6766202471a7188f42ae8 -0x34163660bbe1ecac3eb8f6f739a707a1cdae8c5f39f6243ee49720b28bcf3c3d -0xf88bddfe09d9c33f39816a7fffaed5ca4d869fc61561d9a2f946acb99c32dd37 -0x804838d1e1442e2590a25c076adf1db9f05c34053813f9b41fd40e61b8f8a53c -0xe6206604fea7fe5406acebffb6e45ae3e463930add17deee2ffd21c23941e8ae -0x2d358a81e1644ad6ac79a3e5541c4fbe77d29f2011063c1b3e0879ebdc9119d8 -0x18e36a27976eeee35b3bfc4fd75a9c5a2b7c215408f3e28ccbdc1493a1dedc51 -0x507af225485bea801564cc0007a427b07d2937a27b1f70a16ae4b9b575b214f5 -0xef16901a3808ea72467cec48b4fed93db8b07a5f7cb94c8c2a7143efea1970e0 -0x4781135b94a9958b26c6070cabd88fa198aa2c814a638766c02ea3ff549ccb12 -0x7d6c690a7a2f1790edac2a758920aa645246422e8c6027c9347789857d3b4ec8 -0x0d32513e8977e546b94b9249fb50af02db0944c1635804ad905f6d30cb2ae907 -0xdad079c4f27e7decd74fce865af6f8cc49b39218fdf00c381f53b1c4ca7a8b0b -0xbc8739a14e15d0820f309bb34b7e876f6293ea18ac8a8b5820e6b90f6a727f58 -0xb05318c8f45dd25a2a788f2a5f1901a3fb278743333d59c6f4a414a02c1d5268 -0x90a374b5e1cd0efeb7ceb4d689292199ed7b347b6e555f44d1d2230621e1ef27 -0x3c72ad32f86804d0036d8a3fd497664840713c4d9e68d22c363a726e40bd3b5d -0xa376936ea41a2a8837acf75d597f4a3ada50228663e1464c53bca19a11b6e7c9 -0x44f4488d912e939f9c8caa0d14202955d2cb44e06616bcab6b0d0ba4d02ab3da -0xd8ada2792d855d101e2d6b5e4e7d611cc9f21bf585c71e1591df9b246511b6f4 -0xe2d296426b4ee4b2304521c15dfc5f1f2af92ea6569aaf34f38e235e6a029ff3 -0xbf1f2a14b7ff558f43208240b7aedab27c17c04b34665ce179201d172a2386b3 -0xac974feee97e0bcb629bfcd630efc99ada095043325e7a76054e2aa618643c31 -0xf5730cda27ce2428328d28b4485795725dd452d866ca66f3db587ed3fd02c45f -0x69313186ad5ea25cbeb121a9a039784eb766f3c65876e097bdbb37fce7a46eab -0xf874eb7f9aa72a20d5fdcd89b2bd889c2d9c54d1dee1360221e6cf950bb87401 -0x25569320af2b343f72932d8734988294f2f10faa864fd71310a24841ed20761f -0x5b1e4bf55782ac0579586c5b57b788ae983fc4f05ce0e6d20b4dd0393515b3f1 -0xa9a0411e71cc0652f2f7f56d6b7e262d66aa7993414b7af3eb0d28230ceb6256 -0x374b0a2ca8cafd027924b47e3f1db2e3fcab93e260076b7f3be257fb69882895 -0xaa7a59288077750d0ddc37ada42281638a93195eb553f7d64f94221254430375 -0x5145587ef9e1574b4cb8ccd29090acbcb4d774650cf95204d36bf9e140b60f61 -0xbdba2b8b875d06513e547c3170db1202877cb9e09f94a17ffd645fe9b27353f8 -0x3ed7879a6e1c19ff08037fcd5e6ccdca443fb6012a8d4a8e20b0aa63bee30258 -0xcb0dcd41e1ae21201f6c1302ad23e53d40964db058340857941a428f6182d4c1 -0xc9bc299a294151acba8dd572e9d8344096922c9d43aa6e099caf742f09743b02 -0x4943f8a90a3bae5699d90b50a78105b3e9987b505d75960fa92424d57180272b -0x7c22bcef2e69b08d864dd95f358803c8d1ebab888e8cdfe6b6eebce8b9b3dc28 -0x8d1faf86fe8ce13f2064a6e06161bff8f2de70c064cd37af23a30008aee0a93c -0xc952837a2f5f2080e1d97e47e695f6cdf205530bd68100754120c1d5021ed40f -0x4b1188521a57e6dbc189784a9feb2ffa0c37064612f76758a9457dcede06657a -0xbaea33d966804bfe9881e28d25717d3415844e9cd03a5a89f13dedd0acba7b94 -0xb9bae3dae4bed7ca3fcdaab494cd0fd34c21ded694495d9e3d7c760e48a900da -0xd8e5ed1fb71ea15e74bc997a880becbe63d5e43e4a53ae81bab1d12de71ffb05 -0xf54d0641f42ce3cdc4987f8c595cc3a18b71731f3d44c91a00327909409e2a26 -0x023cd245cc342d424a7825cba785f502e2c9d76e3bdf5cb5778122c189ea1c8e -0x89aee736a01e8bd4cb1735302c64f2aed09a375b16cf00488922bdf2a14af9d7 -0x27fea7b67dbc927216b83997c380f7664e922a813acc1e43074df628406b307b -0x218c643b1f61b15f75ea4fdc2d5431aa9a60e37d6996ab75e06c94fb9972b917 -0xc7f0aa85530485bb3ad85c4b2eef15808915554c0172c5736ed0a6bba3ed8a94 -0x8026ca04434d4840650d43311c59cdb60ae43a88078b7dcf2d44702f4dde6fe6 -0x57f3dd72fc887df1b9edadc6d933c3bd2db48f6005b29754c6460acaebf2123d -0x3bf2a6154df287ca61d2dd5d47c18d3771b54506f34f4a38951bd386c08c055c -0x991bde6ead8a3727e5cf492ba3d66a18f7fd09646bc39d46f730b5a53471e23d -0x793f4999bd568aa2fd092363775b04d7d55947360cb0300c44805de1310e4bcb -0xdd5f5fbc5ec7fbca24c77278cc1f29a69ffc8883758a5cfae1520704e048e5c7 -0x3a0b964de7531f5edb5db038dc0b639b0e8c01fbdf69062dae9436d76ad5d769 -0x331bfaa32379c2de7e7ddbbfa211396f2cc0754afdfedb7d14e197ca6947f7b8 -0x9d34017f0af6c870bf6fd20653cf4900759b4ff380f49c25cdcee151974ba120 -0xb6175e5f6dd9e5f7e316418bb8f09a83516e447ec988070b4166e01ec9872bd1 -0xb19ba2af9606c4eda322282a2406dfb70c1ca2faaf7feabd318435ad3d336b8a -0x6277f2993d1504317b64afbdde73badf3ab9a424adf99177e50a666151e36816 -0xc378e38ae25851fe0480e9f1a016cd39638a31e495b4922492d2bf39d900751b -0xd9990a50f85035517ace88b7b13a84d03c55322dcb543a44285c7fed76a848f1 -0x3763593b2aa2e7a8d56b2b105dfa9f96dd3361c4b6d50bd6dec913d2b8e11497 -0xa1f716cc514acbb264fc1a251e191e1f3eb55654476c52eef3c7c1e71b5a4acb -0x044793b14f84291a3f290b75718a3c39cec8ea5541bd5c6d63eeffc79ef99994 -0xfdee3f287cf2e81e05131a9bfffda563ce7c3cfeb5f374569cf5263d4c2670bb -0x75a102e54f6d7e6c39af3056d9f86af75ad33185f7c46440e6e9fca1a8d0820b -0xeb3720aa876477ff321956a34126410ffbb78a083427f56afaef3e51a0863c60 -0x183cb28ab05de24d3bfacba69257c025a14752d8bdcf90c2026bd658913aefa3 -0x8109c48b959254a947d7e0bbb23a6f81beff61a1f21bca4b00ae28f8540a7248 -0x24d1a1c1604fe2fc69a3ae9df4cbc4ef616ee6b0e74942429dc7a77572d02fba -0xe6240ca191d54ce2fb6e5496fc9c2a5d818edcfd33b348b4a046df52391d28bd -0xdcac93faae053313a4d87254142e7e16972192a3b32cc77cd248130bebe1ab60 -0x175927f96bc0d32723e0bf3f8936ce3fe18b8546d81d97637fe1848cc8c8e230 -0x2bd71de988f1bc69a4af460ee3db24940b848267b9cb2b565514ac478acbdf4e -0x8c922cc6541e2f257237856453687611f37c828ba4ffc348652888faaef1519e -0x22480d29963ac35f71aea07c5cfc30711618dd36fb538bd5cc1dfc37b7e0706a -0xc6e78654cd8e03a8bc330e8d1aa7aef3c3a5da6a6bee3e4487a9acf62475589f -0x7b2ae58f2f27786d996557378a81f057d387d473fd7e6e5aace88cbec6b525c0 -0x947f4ca1b0fad2df9b1b740a2aba4a5ff6642a9ac61b76cfafba00060b0af4ce -0x234f76be3b1f93ebb021e642a38f7dabc631bc317f54513fcfda8bedd249b257 -0x0d355190a5015e2c1bad7b504eaaacb7859874ddf55bf04c9a88b785e22cd396 -0xef602cb8e46de1cbbf5ba8aa5709a681f9890e18229de315c601de992f1a411f -0x53ba3e630326832b625148273938693f42bd59d3605913620e3886745e2c7c57 -0x5e9c70369bb0969508204e1dfcf12c7f488cd09b57846ae88dacb35a42c6385a -0x226a8ad485b56feeaf673f2e097f98358d45b3ba24afb1615576504b47e04226 -0xf1ec8503ee216e86376b5eee6ca9ed100af013c55bd733073d2ca51407032cfe -0x4dbc03869fb69dab4b236a35097892dfac2c80c2f91519042cbb94bdf3637cf5 -0x751e177ec868b16af943bc8cd183abeb2d9d8bc768d21b252e7a5f64c9f52129 -0xfe7a1751f1460a5f13b3d33dcd97d296eb671b91d18e8bd6f3ae9e621369b615 -0xfd6ae9b0295920b139a30c6fc62f7018032e88c6a2de1cf49f34102a67de9ad2 -0x5b143fc5b648a0417ccc8f3fcd508f32550491daec488777441d5f35eb79d55b -0xa2273e6e338afb21f3955a0cd123440e1bd6091f4835e2737958205e50b0571d -0xac3c87ad53ded59e0493e3e768919b16e1d0cae247ed3371c0093e9db3ed8fb2 -0x4c7ed9aab611f27ecf3993c966fb5449f854ef65cd4b9e477d81400b56ee49d7 -0x754c4b09bef88dca4c81b59d0d37c3ba1a11b0c4f40fa3d95e20fa0c0d4772c7 -0x6f845c97abe0412439777a59d4346b256e02b86c6eeb60b177f74c671dfce5c0 -0x1669d00b2292e5dfab97d79b4b783cb7c97c7981a064558e7c5ce93d4e68c5e0 -0x8b446f236f05853f2a1cdd300051d4952e764bc9a1751d3fb58769fd71406a41 -0x37818673d018b074f88b3fb2ae35b5f565b86ce2f2b7e16b2cee94a93d90e0b8 -0x190dae77b19c07429f14f37f6b9c3f8d98495961b9b73e85f5b17307c70d1621 -0xc7b37b5ddba45618efe9a71b47d4f3efe94c6cb6eeac22ffdaaa0f87a14a7421 -0x893844cebdffc46d88afe0ee7f6c74fdff24507b5a4010e4673c4af0f517cd45 -0xc0e00b1ac4f70ae091a11e64112ce2c62c3a76e5f96e264406a548b756b685b7 -0x705cad19552267fc25ccf773804b7f2a71e364cede49b549eb1bb2ca147b99fb -0x49dc4ee4027999fd665624ef1aab76cf9d701a0467d72ae87c01a4539990dca8 -0xccfd0f8460220ad61ba9c13dbe49872061b52dbbe5d0580b04e9c090930a6284 -0xea0b8db868b6f4e040e96926dab0eaff64036c0fb05032722b37e632b8a72619 -0xb4698867590637ab1eeba42d4386a3ae834dbf74130770298c2323b1aa17e747 -0x36d7a3b224ed87bae212ab73e0879697dd820d952cd0d3c6dc84782a9b75bb6d -0x8f44e92d69c7768012ff5623a52fbaab17a2a0050e7d8a03c1f94adb60f54ab4 -0xf3b1d2ef1e1e504b9d92db232cb1c1495520ace625de75ee07ef5ca31bfcf8eb -0xc9953915629ff2739ebfae3abe0a75514e231e4f2938250caf1760fc2a4125eb -0xc213cf036101715fc157fdf318eecd7fb8fae1960b1423ad9ce94edb81d76312 -0xfe1f3a7da5b87bac2735a4bc15ea4b9ab9c569ebd5cbeaad86352c80ddf5a674 -0x911746e7de57ec14b8a8190b76764f644aa027029644bb6034bb8eb3989c01bc -0x17e7af5e5e83f86d264a9d571d29a4bd3171bd59a7a9a9e55650fa55ab90951c -0x4073fbe7d227eaa1b13accfe22d1ce5341c3c6108c9a9e4bbdba14deb0b9bb32 -0x29ccf542b27e45cd96979290761d27f00c60ef07a0caf208b63410cc5be28f02 -0xb6fa3a2dfafde2def4f27bc7d370f5ad34e412fd4f8ec61d01c6ce93936fcb68 -0xbe7c8d2694b28497965e36d07b96b5f8e12db50dea3d46a4cc591ca08c202018 -0xbdfd5eab5a575fbbfe974332c0651a27c1cbb3a7953e5487134e2afbe8222af0 -0x5a2a84e33c12dc9ed5387bb304cc840606c4ed56628e26209678377649050048 -0x8b179b9b3d558a9a0fc02a96e52cd6bbd9ebc311e3b77d8ec0d5cb09940047e7 -0x86b245f1e5005774ad9628c4e92e15e37896a674d3a2c53e3314a5e5ffb58e53 -0xf1689b62f98d12bba1015df1eacc73370d1cae0d696ff811077da8abe7f878a7 -0xee2a23b4c6c08ff0583de4237dae3ae15a23309df3e57d39f87e968446ab1702 -0x11610dad858ef51cae3176b6d622980a6e5569ccb2cb0c08f071d747fe2c9639 -0xb076214feb89614fa84f03a200b101ce697d9dedf2125a113d0dbc826dddbd2f -0x7c3c2dbb091725447bd42f3926361245095bc09b57bddea3cd1a11698688aeb7 -0x73f524d348421f5285832842f5a158133cea5a63af02ede687c52c67449d8cc3 -0xdd513edd2c1dc0e4765cf2db551209feb5567242dc54333474d29b49312b8450 -0xc4f2009d4996809998ff5e4af03d0b87e15ed7192a38baa297b48c0d6ea082f6 -0xc4ad8b5c6cb738f07e83331c585dc89852b93897b01417f6f3bb1738d65f2a04 -0xb9f7df15c67145294c5b14d522560f9d827b06f5174203ff1663db9411886200 -0x0fa6b237d00dc39920f56ee1262841b1f7b395fd181b8be37e1e84b4691607fa -0x83926454c35b1faff4e0f21b2e79df0ba5b01f5e6e8f1f72f6853a33a2122114 -0x9dd18a22204f73111b979ee61863f10cdd28c4524a0dd1ea7d00a433704e1d0b -0x24edcb44818b8e4759d09a8b2030978b7833c8ebedb08be6b5e9753a4de01860 -0x46fad21ad40893cff563c62ddecb695289aab7d7572baae49153cb360e24d7b1 -0x6982aadf2eb4ca6e147ffc150611ec2c48f1ad7d03c50961a47162d709e36883 -0x12397a98343cd7f39e57e479e59f935b19b395d701b56da0de1962a0cc28f753 -0xc16e948436edc491407751264a703e1a64318f9eecc4b57484d81d2e6d09e028 -0x41020f2668dbd95a7889c2711bab21c066fb389d7933b8997020583cff36927d -0xba2ecbdbbaeb9a3527acd0ded4ea3c85d21fa2356a81deaa2e1cc634b46989de -0xb7fe2b5599f21714dc928e2915408ab181bdbc16bc2cd8b015876eb85ebe076b -0x7132bed7b0b5951647a3b7ecd0edf8a20be2597a18eb901f2a1a95942e5b8672 -0x3968732005980eceb0d220e02beaae08d2a937d605d553aaa49f3f87c8525431 -0x1aea2afe0f1d4d0bbdc38dee90ee3cc9d7e455e0d349dda278030bdbd3847e57 -0xe125881a62836382090e9108b718a705a350a81bedb7cc8fd29f6fef4c0396da -0xf2365a4af3933c78b5cfede69e41c72b0960e15ae7c6a352bbc28839a60ed029 -0x4c9a9a0b5a38df577426dbf83d95d8d593e1c728d3c37a45a785887139d21462 -0xe87fde08cbd92bddd8227162746b9d7be0f5a8d4670ff83f07a973032ba2c33a -0xdecf90e58889d5497dcebefed84340613136017b6f89063d6ce4f82eeb895f08 -0x5f83537611d94abfafe6db7518400f7e6f54aabf8258829c28207231cd779dd6 -0x899620fc00e952b04d6b5fd42780676a6e1a7716e303e769dd4d0589350ec3d8 -0xb2e0c11ee339ca070c2bf47f23e0379910aa2823e90ab43f3ab2b66094b44ead -0xaa068a0096c470e025de8a899dded303b1515fbfccc18b3b1494140ef0e51ec5 -0x5dd291be57404fa3911a43d28cacd4d8547c8f26d17a1ebfe9faa2caa1fb2425 -0x66b85e8b2b0adad3263e20cdd5ca76f5e34ff9c529e3de938f0b6f7af3bef648 -0x76d402eb661cb995f8311f06349aaf82bf1a02744568a6568bdf52363aaccc1f -0xaaa5bf41a863da16f361c62f283c5129a4b730100a45c6963caa15b88e74acbb -0x28de890e8932a683203239efab740f5e4ae2a4af1677b1f4bd6ca619b03fb888 -0x7c63e865802065d5f914677d03dfd7ecc0ce1496cff6634dd745968cf7bb0963 -0x99f67e4d3bd0a90d6efc08c5e6b17b17089ec8416a2cd016686b686a022622d6 -0x4b148f94ed04ab917e72b1acc0224219de3d24a51edbb576d67cda2f37ae60ef -0x86c3319b466c04fdc81c187b93350084404d000072146f07c3e05a9980e75cbf -0x393d4f1bdf2067ba2b07e18d6394ea92033c9b76adecee681724268f7e1f6c6d -0xc000da755618ad953a035ec0457f4e307d53f4fa8ab71a4493ea0e2d7061ff80 -0xa48a1472f65c3270814690a2692c772472264d81b46f2a9b639e66c8014e8bd4 -0xfd446630795198f875b9d697bded0ddcc95e02f1c32de838075481e1727ef4f9 -0xa12f671aef2fd3f6221e19410a6b1bef69c28eb1271375f3764c7659bc9a58de -0x372ede5f7334b876bdea1cc241f3b032159d1165c1834b062848d2def0d95b46 -0xa445806b95d4175699cba6f15343b19b5f5bbc59eae39bdcaa95bd3492bf9aa9 -0xd706e2074bea0897118522765debebaa6a044eb9486b1be07e9222426f9c6658 -0x364c5507c0d63fa2c0f39707b46c9c3a8b66bb835f2ae1170060159aefbaaf33 -0x5ba3ab1b29cf9b42d0076ffa4cfa3c5b688f687fc833d0ed0b0578013b541d32 -0x8d05b1ba384057e2d12bda4e9d9002a5fa186b2591e5f91bccfae18120c1a082 -0x17fe103fd437fd138fd1bddd26d37b08584fcf69b154cf6f37252eb1999f70fd -0xdf38578bb41862cf46caf220691281ed7c16816675fbd3b81f47abd06010d3bd -0xb1abe684c7c26e8bd35b71da7e60424f59b762449be89e5ec1e1a2100a960866 -0x5a7dc1f1250dd773511b733c47a33fe616e37b16194e5abfad8f19284e71e032 -0x47b8a01e935c0c5004c3dd4153b12d379aaa7dfbec4430bb4b64a1d8aff95110 -0xf444b1ab4044abdbcd760b4ca9d4ce3dae5c301dc40c960f917d3c60a99f7af5 -0x10e7f9cb85f680777ca54cc3d7dda762b12fd17b7a27617bc0655f828b16faee -0x25b5a34ef04e68ebd102416a19eb379820c272dcd33ae46add3fcd5a1c4b8bd8 -0xf4e8414108a63db7b25e06028f5ae0492c86179df0a6b62986389b888defb1f1 -0xb705a3a187877292e933ee37dbe6aae2d7e0630b21200f68c91067b9185f4ccc -0x491920be7f54e7becefbbcd501bf899bda17b9c94919e0d962e0a052b5f138c9 -0x138c3f841554d70de60ed449591e2f1fdb06b341867c23889ac13c8a6d80c948 -0xf810268d63d0e5cbd6199029daa6bfcb3c80d0199587f3b945ba7f956896ad45 -0x838e3fd8a6d54ed3fdf94d7e6021be8e62769a988e2f65e4a57fbc6bc068f9df -0xdac0825199be5c28d9ea44a4bfeb835a35ead56d4bca09a3b0aa0b39b81f877d -0xac713d14596fd69051c158c11073ed3ff7b1369ab965483ccfb9731b560b4cf5 -0xe39d6804da8152c206ff56a6840cc7d6a7bef7f0b286c0b3ed6171f9c3b64ce7 -0x16fcb7a5dbfde684aeb16911f4bfc75a4922bad47d508393ef0c0acb29f09edf -0x6672d21f77798e33616f95d0af94b6ff380ea74e2d6c82c65ceada3419477342 -0xbbdabcc4634434dbb1e27eb0cf703ea0df472fe4908ee8916ab9f42ed25704e4 -0x4b08e1577ff3f5adb74ee9ee8b4f9cad18b8fb10eef8d6f4f3698535ffb45f37 -0x3dbb98d88f54f4bd5a426608c2c49d2344824f85b0319278c9d9ebeb3025a91e -0x8064d3ee6566b205b2c2f3d6f2525d64bacaedfc5fcd3a0fb1c1fde57119e968 -0xb6f1d6cc0b8cb8ae4720956bd10b5b38cbadda03e694190912e68991de2f47fc -0x6b1f693291a563e0c006dcd2adadda2277fe053d004c0fcd9057ae4926c948e0 -0x669f142046e1f55c4c936472729c57a8dfd43ddf3bc50b6182078de3ffa79936 -0xb103dff6c4e0cc9b04578dc17259a00d09708320664618d3cfa04cfcfb078198 -0x09de187d82dee6ada1149da94e9e4d7e3e51f6df95d330405acdc7467219e05a -0xb45d70315ec07c5e29029be991040977f1c356e327ba368b9507123b53100318 -0xc1526b89d730404f7d651de8fb9100a88aeca1a16d2d2898a26a4aadfb121543 -0x7f62fbc68f9801d4c2628fc0447a2ae334bb36a82ff760a2c024183128b44263 -0xb8d5063b8f3766ce5717e64ec8544c5a8f60b05b4beffdbaaf93f9d23a897f38 -0x100699619df8893ccf6361414c7a00a5ca93dd877636cdd1a4001509dea23404 -0xe4f9235d11ce612fa14fc56f085dee8b6853b0322614cb09e36a172d15f4d25c -0xf7ba03655f938d767c3ba73f8ed7868a29f887e97a9c11f4ecc61e37f538de69 -0x430ee6e3a0fdcff8626bdd71af4f7d6a6cb4ed0377d6c8584440c2e112987bec -0x079ea26c36fd1e6ec416920483d273e6fd1fd8d356820fa738df8cdafc030483 -0x954e9b1f41fcb2aaedbcc1980d35eb35957f6aa5a00978b6bb44083e63464c75 -0x34740e47f2bff1259185585d9d87907de489b3e28c64e9a15d405a8b587913a5 -0xbf62894456468e8ff6d1654a9adaadfef2ba0ce678e8e84b0542df21e242ce47 -0x90d3764ebabc93f970cf766c36f60a93b07e2d5eb60b11e6013a8278903e84be -0xe818996f64dbc66c2b60b8e2f9d82ca3c696a71e45058d8997dcb9a432af9552 -0x58b8cd32f87dea117a7caa07eb7035c2a9a248edb7489d0521845e2c387aba76 -0x13d06d7e812ab2ef9f50d9044af5ed29cd078e5af897eb676263a54a4af6b86a -0x77bbe9235f4c2d0fcd67cdd3c0fe50ad8c177024916234dca8ceb540f302edd7 -0xc782eb2763f0b4cd19399b518206c9eeb6bc55a9fad3ce84f83ede85c84adb3b -0xd36286085b0592b5f69ea79e97c2cd5687a0320fe1a47ba2a433c67065793c90 -0x70d8965f1399d5296805221265aa3c5f9e4753de9800c504f0578d7cf3c48756 -0x0749aed835b39bd34af2055411dd3ee1d8218694d2f69b2d61f041ff33afec02 -0x15780e970a622fcb695f7da33c02a103fb54675b978d9b407870a4a4815077f8 -0x39cde7df364fe8dbd1fc475a84bf28c9827749571607c4fb84a729120c2a675b -0xcf1e6e8275fc977bbdab870ce831c9525230e3ff4cb0cdffcb556abc1f3fc774 -0xff8b3b81e50c3e78cb66e154601fabc16f701c21888088cd52d13088a9b2cde4 -0x9983d06eaa186674dbeec6b492afc6e5ad4168696370a6584018524a1cdfbbea -0x813dfbbfde0dfbf81fe6ea5e68a973507020445966c7c71a654a8c22a4ca15f9 -0x13db6f7806b0341aeb755d6270a66c984c4d794790a9c8522fd4fc06e0646b8d -0xd900c79775ca0cf113c2d2bdb109d13b4a921da25a66c7998b1db96c80a34c8a -0xeedacc7873f796735171ba2cdeeba6f9693be42e81c85e98cc06463154ed1c7e -0xdeded5f7a3b8b9a43e6546b89eafe4020475e3c9245a04b3fcba25a4649d91ce -0x421b2b89d74c755cda603d8e2568dd2eb7703ad874b7215fb597b9849a79e44a -0xa8c1e480eef4018df1d2f33dfee822d4acaa1c9864047f3c249e7eba8d636469 -0x787b07115af6a01e6f79925e053c548ee1e1e65727d772cc4b96bcb75a313e1a -0x3f3e404ddc26dd1b088ad8bd21c860f4f78898127b851676949552615b99021e -0xee121b9e502dce8d0cb36af4801ffe6037a64d5d792fe456ccc487a8d677b7ff -0xfb9f56545421159078816db1275a84d6ed87d4877a6dacabd91a817a5ae37cf2 -0x66b9bfb7b69cc5bb515115fa2e7cd1b095d8cf7a197d9422ffb387bd5ab4df41 -0x08e851107ae502597f6288aba293c9e074abc9c666cd7d4c55d3a6cd92523d0e -0x6160dcc662f3014d3fdd122dc2509f90e9f9dbb866ad327794b28914a39df8d9 -0x13f972cea050b618b64440c16b91b6eae2b38c8b8c5a263d88891b626d4757d1 -0xbb0698412fb054608843febe0e4fe8aae24de93dbe9ca3e906f08542506eb6b7 -0xc0da8126fe386833f3baadf1e66fc5e01294b56d36370d15c58f6f5d3fd5e422 -0x847b0c40b02eb11bb3031d88a2707e37c10e75b7de817a8508606995a904f5b5 -0xe0674375b11b090071fada54313eb27b7992ab1aaf0ab0b11fbf28f3122eba5d -0xe5ba9bb40dea27c3e44ddd695ee6e537064d753f43ec3cad5a3ed5a64374ae29 -0x36069dde51fe458ce83b1a7c3bca2f1ae841b488a56a8e5866a171b8bbba56a3 -0xf1b31c22e71e819b5e6f178c3822174074215c516f2518d0a28afa19d72e3de9 -0x8afdbf21bda13bd75a3be292015ae5a16a33adf265350a6767068ab04bede7a3 -0xded6680c8a0c8e15b8e25145d8822e4cdb4a166d7e13ff380dc6cd7035a29973 -0xa34fd6e6eb67fd0bfd228f92b6fa9affe8a78eb7fe46489850cc6ebf455e1ce3 -0x6995d52169fd97f79aaebfd607ca72c78b2f646362b91cdb1a972a1a2723aa08 -0x207600ba714e3926dccb92258674d239407cc4d980468f58b7276ee5543ba746 -0x5360d472072496d3e8627713af691103a00d19e098901d8523ed293c20cdaa66 -0x205c553ca8601d05f5b72d9cf80c72f34f7d2e8cdcf21a4c96d3efd7f01f565b -0xe95d7c20449f6f95835141dba96041ebb7469567e8f331da663870285bcfc53b -0x8aece942301648413cd9dae3db21ab0a6b9da784f6a4bed349ee4bc46975bfab -0x741319c88b0a7ec9d4e327691e21500910f69b8ceaf4c031c98e325b22700c76 -0x736ba28ff63d3110374621ab8c4ddcd3c69eb35ad75d2ee6aa4fea4a1b86c9ec -0x1c8b8380b0b84a78336bdda2de8bd25351dce27ce3ea4f947c3476fb5d9fcb15 -0x1eccd0c8453d0e729b25c0a4df82ab39e4c02acdccfa82c3c77283f915b365f0 -0x69bc6640e960ed71b613710f81a94d2684eabe51d2d9c9ff2618d2cf9b8a13e9 -0xe4eb75728e6792373198b8d16eef5195df350e387c8b5aed9e2017bf1b383abc -0xfb81d445c0124ff9126a1c557e66e98e3a27017367ed25037ebbba2a2b8930dc -0xc7c6788f6411af5b958efa46a550f3979661cac927877f489abb5d4852a3b846 -0x47b8c3edb05c1bd8da84e59ca8f4f7175acb95ae4f205eacac6b6eb3df16dd1f -0x9ac12aa144eeec14b965dadb6af95d737e659d1574a234c28b4c4d3d5a9785ec -0x7941f051017f0dc8e15fb35b8f3dd3374cfa1a8ac134e6d098815665f3ede590 -0xc7b3bb4b73b81e6812cbc7061904eab8f26cfd42c24192a30136d6cb70526716 -0x55300ad9b4f775fc53edf5ee30ebaeb862b7c659acd896f373a82a6c33a9e8e5 -0xcba1ef52e8f25975aaaf3de69597d75eb9b290c42ce21008ce4a004c701c5a9b -0x01fcbfa9e9fd4a3cab3c657da804d3cdc83d0215a003bdb39390c8b23d15e93a -0x24a59caae0a974bab8dbbe6bc0428f2893d92cda4673f90aeba79b179fcca595 -0xa3a340739f2870e82719a8fd63b59a7da0e1b126171c865c407cd867e992c378 -0x16b0929617fdbc1f202c6221b6c0502236234982700dfc57d84579e1e5ceefb6 -0x02a9f92f9457a8ad7ff55a1b86ee528563f0dd60ae7ba306cb75fe2110ae63b1 -0xc69415d3982bbc06942941d385a689602ad812b64bd14e036717eddc97af0bef -0xd7655b34453ee47551d9845d4f3a930f021e5a0e495adc9f3202a759c9ee9673 -0x0d80e2bd46653c1f6b8dfb1d5c936a5880e937a596f70296755379ebcd6dc88d -0x8b1812e8eb26311f39fb53cb9530bcdc263b7979de96e146abfa677884254c65 -0xd06d37af7e988b092ee6c250d2b7e01bcb0482694f99ba1f79261081a31b7578 -0x27524dc3d07069006633178b1f9b1afae65695d50e8e05b22b76801fb8c6cda4 -0x75aa42153691510b0ff0e2f704281c57fc4c913b0c6b05fea7ca3842e4659bb5 -0xe0ffff98f8bc3462fe857781dc5307c9e06d166d678051a26ac159410a624cc5 -0x155189d41dcd764ed07aa961784391d9ce4c0bced9d4c187d5f9d5696d9c149c -0x0c4f8715b6ed6d9dfdf8e9647ec44944b50b57b2aabd99343670d29c6bf93c80 -0x349abfd60ba4667d57f26c9d602682d1357dea0f652e09f926c94604136020d3 -0x91942b3dc9908ed05b6058b58139c1667d0c42289d2e149cf3b78d771a9975b1 -0x96f435bb57fda1ca3f5e335ae145998921280b0a3d879e1147cdf1c409e5507b -0x439f2a72783793aa81126f1a2317cd7bd7a7d4a16da1674beca2e7919c423d0c -0xf9ac93ef300f6efaed8dc3802f16ffed9e1a3fbb44cdf0189b5aec68aa29a5ec -0x8a997d8587c1b76c43bb5c71c7c0580fc692ab73c0c83914866a3c2bc8fe4d0e -0xd5817afb8ab3cf1f870267a59860c6a4321a3952433e9022f8cb850a443b2970 -0xb127090a1e053cec9acb209f8e7f0461601eb124b7cc6ad17a7937e81d1862a0 -0x08ce891ed5862f1344104717a952ad57b85945cee73fc23f92510fdaf97928de -0x2d0171e4d81e5e273cfd427bae33b5a37a2f73c72211e88365cb9ed721ba2437 -0x8d7cbe48dbab13a104efc52500cab69a3c53305b8c7302de07ae56aa53a38f92 -0x9aac75bbf8a41bac3634ee9ef725754730a2fb686543e05926142b47fdb3f7c6 -0x61a994951535886a098eba8361470f22c02d48ecbe0fd94fd24b379caadc1a14 -0x36f517dc9a1e5538fdf7cbaa88cc5afedc26286398cb427605a07eaeecaeef83 -0x9d1b210df39fabc44a577d07173fb4391105976b9b7c0e5d2d0c3283a9d1051f -0x85ec7a72d521c59d7cf7d74add066b0fd5eb56709a545aadc58fa8ded9c6d577 -0xaae6f62ba9762a0e3c4f3bdf1ae8f3913a4d93803d9cf96e7eece99d67c14005 -0x30aa3b0ae9d172c86aa5366fe9d219854f1ca602874a96fc0810e448d1ecf775 -0xceaad87f2d67b656f3f3775d82f3c9b1e47905cccfb360d935c86726961452f7 -0x66b61dbdb3f46407aa4356ee56fa56a192db14cd6028e082350cc9854cb1b787 -0x1fa87068f9d96f0efc578364ff6d0782a9c44332db934d3c9990b3d3f5612b53 -0x310af037de9f95456d48c236a815bc33516676fed13c097dab7c00ff6f907f38 -0x3c9dd18866efaa46a342957550c8c3f86142e2f427b3d762de107de1d9313d1e -0xd6087177e706f43c794991c04077de23168a6c884d28ca9aee2efbeaa392293c -0xa5bbe494ed20239915abc50aee12d32d1a2f0f0c28a9ab9856a332afaf3026ed -0xda529c6631150d17ccd75ebf38864d8b1908d8963b12cf6cb08a28cfd62d60a2 -0xf6889728976e2adcdafea9939e934d48acb5197439eddb8dbbb3ffef7a23d846 -0x986a837d4cf40499484633cd08c53b5b639b80e5f7394951b1aec8fa229494e4 -0xe652083600a5e6e5d4cda7c7496ecc928059de5c73a4bceb1ae3b13fa794bad4 -0x3d9df868e6d9af91fa1d850e6134351ee491b5ba6a4d81f36c6dd5cc2aabc5d7 -0xbcd4b3291e12c77f1f7361bcfef0433d13f89c69ff33996a3030b2c845a646c5 -0xdcfc9962f79b5c04d3f16b94a229cd955dabc47fc1c772ef171f6c5646115434 -0x4b234e60677a8901f38678b8a67aeb61a8aca056a3559646e4054142a9b55072 -0x1f197166bb62fa5136bc250d67b2d5f947c381a4cd95fadcf4361349634ca505 -0x503dbf900e53c65ca63a73589c5200c2bb7e35f78e78f197ebc879a3a288cd40 -0xd1034757dd039e004ff73aae69aacca77638a232cb91bf0d904660b9f59a666f -0xa5dd9016c13828d458c163666dd5db57b0fb0307a08f896022ce5ce3d0d51ffd -0x89c0d72f1e5a2de1a641bcb8f0d37623ec5b61b37e15e0486f54f3ab646e4c4a -0x4050a0b75e398cc9e94b624bfd89974a9547741a850257e1da78e4317b6ec3f3 -0x8d9fbf9f242b0c765f6802aa6d9d9c1cb5403e5de2194221ac62c6ff0e41a3b9 -0xf856afdc4a735bdf2fe01ae6c8e614733ff3bf20266918ee986f372e4e27dc14 -0x28af0abefd957f7091c363821e36605ea2642f2b87b257a9f3037be702666cff -0x031386e7298078a238f2b1ad15d6fd992ddaa855bbc76636f7fc7c4adbab78cc -0xa1da149edf405084d3faf26286a4bb5a4ad400c1fddb7b6f8de4621f605c07f4 -0x10ecb58f64b19f3a1ad24799acbcf3d0e6956cf16aa198116ff202fc716eda50 -0x983fc17e22eb6a1d0febaa64613447a0d84606186a139bd7a62af0dc5abc6a3a -0x36908204b004503336ccc55f550f0d64219f15c9ab74534658600f4eed17325b -0x218e8c013808d81daef067b71bf79704977cb3548b3b0725b4d08888cb369d89 -0x9527430cbae1a27dab62449631c2d0925750e33b5f6e5604ea399c6e7ef10e87 -0x56ae632fbf89ff3b16c2ad1920c175de6282ce2029a9cdbf920057f07198ce66 -0x23769eb486c8098fe850ce2b8807d0c2abf78cbb81505b878225d82233153137 -0xa64acbb206b26e20a5852b9f2296728647b8e3657998ea3ca9719851336702a2 -0xa6c0096ffcdb12922220cb5ff6dc8e601befb7cf3b4aa88a7a4581e00cd0470d -0xaab35422dfaf6a2efb88dbd9917cdd37099d6b0055cb3dc73010923a7ecbaf96 -0xcf5c138b3d1f7a8d20c8c801bae8ff90caca5ecde5424ac6f2561109a8b348ff -0xbd5b54696c5126a234f1f11c0bb9511cee267e0045aaccc8f9385ce23338a876 -0x0746011d07f098b1cf21c93cc2fca33680b76d4e6b26601b59c0fa450fe72e59 -0x77bb4ad74fb037ab95d27aa59ffbf46247d9ad5486b2dfad4213b7c72d399c1c -0xce9a21f82b1fa8014b23a5a49cab55fbb360a13aae23edd1b84c1c255cc28a4a -0x84b64880d9f84fc890c41489da80669034c13b4211958b5c4bfc4ae06389532c -0xd801e6591953afeca3aa8677ab270212185fdade0ac2e9bce70e428ede8d0005 -0xc97b9f23dfcb7753fe5ab64f03e7c95307085888f38a492bec45874eaf4e24ad -0xf67b19b94a7fa9c924a4ddf2b882def77713c6b9be899ebc8d5ba6efd7ee1a35 -0x19d59a3500e2044e5ce97c0e7a80fb3a42992de2a2b0e6609f711c6e13dbe51f -0x8c06491b7add438e894f32818ce6b89d45b291d4ab3184bba2bcc31f113691a3 -0x9cea72c371597be48f23dccf5d5ca3646593777ac993f818f981217f71f0fdf7 -0xc7a5c22ab839444abedd13b4a364032373301610ebda0a196b5618422921a87e -0xb2b45ab2e1a80a73a0eeb0c21fcacabeaa9ecbf44b0fb9b9a87a171d0c53bae4 -0x142a8b6cbe744754d5d5110b92ca0850670ec836fae8eec3e22d141f789b23ba -0x0450aafa50a4fb78eb0951c81e87385c83b811f0c90cb205154b005a43301ba9 -0x63388cee36a5cbb707b6f6de1888c8bd32d112b8b3c9e9eca470b6d4967e22e3 -0x9add30c25740ae807b667a8cc9ee1583aa973005d7af5f18f04aa9b115fadb40 -0x823c4454ff9fe3397f24270b66ca6227237e0c1241134b7889a32beeed8d94ed -0x5dacd269b9484caeefb2e6454d2cdbbf59028f86cbfd9c2cec11050d16d0e097 -0x9c86973f8c51b09647494a3949c8e22860def37a0f2ba1fd38e398b713646c69 -0x8932b2e020ec2cd07b567f7328f73eb71187ec3f2c6afb74de8180d2be3c22e9 -0x7b956e94672cd8c6de503a9173ce2cb2cb2d88cb18bfa247c314e0ddd14ea682 -0xd3e67cd134afec5907b5bc18a98eb5e2eaa277708f92a459fa31690326ab7ac0 -0xc9534ec890f150512f66fcf4aac18a01e796c82a233951314a9a65a01314cb51 -0xa588d6ecc7771cf7c4bfdfdbddf7199bd09cd8e813915d90a211ad987188c77f -0x24fa3a89e4df72623efaa0427b36fd292befb8eddad955aa5469283403252bdc -0xc7903f7ea7809569958692fa80f61e7604729c9af0aacd409d164ac67143d1db -0x202f2343c1384e80eea613947b109231e856371ddc719f892e0d1d202de27972 -0x6fbb6787e32cd1497b9c3840b613e865160db74c507249165d1980953e451311 -0x204b819018962abcb348697fad80aa75f8cea5177f0f0fc9e4ba2b8f3acfdb53 -0xf967336235cfe3c33add77137800bf264b17b1bad0bef093d38e24fd078f551b -0x6f4a619e5fae53937f874742cbba873d1ba1b75c230f7614d4fb30f5c65c36ca -0xd1507791bb887b43ccc31d59ff86093eeafb538e942a6d5454a17fde234b6f89 -0x9209fb53de9edac69e4468db248ef9a5e7e1d9ea69fc544078a6210388256fdb -0x6afe24116dc4a4101116e0567276e493d0805c3ca33bc928a311725af76c97b6 -0x95a3aa4e443541d99355662e816ca0377aab208db6bf5a878261eb72b4fca121 -0x3e9d07a936de4f0a5604b5def56a0b63d15ab89797b0c5fb3be23a300e479056 -0xded48f8a72a23dbb2c824cb65617d64d0e2856bed7e32370543f6a60255f9c2c -0x81406204129bec5cd6a6890d5ac19c3af6f2439783bf1a74b69f0c881d95a935 -0x2df3f31c674c50a7b5c59c42e1efece0994f3b9625d7b91477641547fdb1c6a6 -0xc3e6cd26c4f6f1d6df3e3c241b9789ba5d14c8f2bf3354d4bd40e9e83360c294 -0x90a64807772a26e03f6ff97a839f34354f6e2a7252f5d54a15a68852461cc72f -0x33432e8d59dbcfa658f2b6c3b305f43d753e792c0b3ab9f4fff73d249326a611 -0x9c5d8c3731955e7676276e60281fe15f7f12c98957a4db87e1afaf0ec227f823 -0xfd30392d4d6c329a1ec66a1907bec591b61c9d09b0a5d6e950a07419fb40f1e3 -0xbb4dd141d9fcc8bf528658d5bb58511072827ffd22fad50c2d2967a90eb78a5b -0x47cef0aab45334b62a0f889144df5ce5717c30ecb6990b9f5b1c7c9058c228b3 -0x17c9ef50ea436b636c3d3e6dc8c744aa2de5010ee02daef65df937468f25fe78 -0xc935913f955d21b390c132797836eb62520d25f46b33863074684b12cb0c3b59 -0xab6bf8bf81946ae3ebe6da399982ea496e8101a4d258265e7b0fa6d72c3b0f2d -0xe05c801d0c03759eb51b647268d175d0be31e7822c09d3b66809250e074192b1 -0x068b66854e1ce30f5587cc672606cdd8197d60236d3b92edd18d74f3ec34c6c8 -0x01098652a79dffcc1994aa0dc7737fb0f15393b1d834af9197e12aa9908b2774 -0x677135a71e3b2d5c218fe3e3da797196cc68ef77babac26fbaeb7e4a9cc6ce03 -0x9e5e1498d129069e901db565a06bcc6c3522f412960638061eb95aa0e2a1f979 -0x6d3d7b8518f3a1924d7dac221052dfbffa226a4fa0fba851c6d1dc8339e6b1b2 -0xfb419d927740d5390ba6c1eb771fc864841bf46ce9d40e350bfcfc6d42e0765a -0x23fa0cd5da1e871953d310ed4504ab524098a5aafd1fe0699e1ecd1e633f919a -0x26dc3f5fad9a33b16e736cd81734718fd35c4b37c882b59d62e0f10359b1cd8a -0x93a5bbd688ba46b209a8c892ec6d392e52b7d8b86c741a95db9b5d633ffa1b85 -0xebda3b1e5c8b183a0b17c4e176c751dc3085f8c01f9e1f5b3960bbb64a74205d -0x225797929373c78445a787ce695d7e3e611d02a33b61a5e6f7aa0def76d45b05 -0xbaaaf2110d754ec91e31067cc2f445ff350cf0a8115119097369a8c57001abaa -0x394a730995c2ffe232b2fd7d4fea0ff611fa0e2fd49bdb3fcfe30a10c5a88157 -0x07ce47a7ab4072cb258e6e79541bdf82aa43fff597100977a4374696dcfb1cf6 -0xb2fd3a5fc8ab54c95dd17a96499526427fca349f1906b363193d42d41df62a8a -0x4b6efb8743ff654ab99dd39b196c1812fcc6f74a7dadd82b62a614d246066f6f -0xc5a56f6310db349fc9d983f4d5b10400d283b202f2ff8b4e549af989abb284fe -0xecb822de69335385883b53ddfcf4a6f1067bceb4004d53ff46a70dbc0f39ecb7 -0x513b3fec84410cd137093a3fdb7e30f1723700b89683202110e4efddafd4dd80 -0x70f755af667e93224165adc3f07b7d2c9d23b86ca76a669ef4e41e076e271208 -0x4ef5fdd7b6a84a7587b1400d250ed930a9c2020f8d6e9c140231883fc40c5b26 -0xb3c4c8dc2bda87943f769bdcd763f18bf43dd8830b22a9ec8a7be3a368e8893c -0x7ff9cc55e7059852ef2bb0b95001201f280a48a37247eab7cfbd6568dc191f26 -0x8c996b81d9c0e01240302bfd0fdeb2a4a9f2c6c13b52b90521dfb0cfd63f242b -0x8538fdcb8a6f3aaa62f741e612e22335f908675c2ef8c77b9f122502375f409f -0x49bc96adfe6562f350f99a4095c686e7b8bf5338f79733339e9d168d9b55c1da -0xda9fd6cd03458ffb9208e877b92c797988d0ad91c364959c6674591f07e9efa7 -0x208a06cae32bfe1bf364b5f8fc18e8fdc2093bd73b66c2c6ebf7b30c5710c427 -0xf9b797ac39ff8b8596019ed63ba9a7e9c93963b0b7bab0538b9366b2da105bd8 -0x045635b28a453aa340f919c06e44bdc9316ded64e0341d99692ff2ad65a83711 -0x2a609a5fd2d98add950d34c87bddc0c58692fe491208a06dda00e1454efcdd0d -0xb79f21775dad96010bd9715d9e9f66f4914266b31a5ecac5e1d8540d164cef3a -0x80f41a295aaf33204805950948d14d83f3f530d70ad773f88d7d713e8a380d35 -0x8179aefb3ca8d8859f9d2d7f081a72950c910346c4e87b28e7d4c0ecbead8f0f -0xb0bcf01ca3e86749c917b5a243e5fa6ee0b935faa7840ed2b47a62dc0befe389 -0x5ff7fdc938430baeb2fd231803ade5042cb8415460e81a4f9d83ae4a32678d93 -0x27f6a0db9e43b0a19d0b1941e2d9ccdcce789f8602200504a9d0e0fe48fd0315 -0x4aa2ebd356f70359ec039bea70d8fd7944d1818497d2940d2339734febad9139 -0xcd9ab789360c3588750605bc482e81ba8db5505a96a128007daa0fe128b49256 -0x48905246766e09c7de47b31d049bcfa4cc42f894f2cd19f7f5d14fe4977b1d3e -0x0deb4e84d3478c6b3749b932b648825a7c55c7c279ee9a517b0a61f2f705e8b9 -0x48c048556abbb0fbc16182e78a613127bec6cbdfd21768dd752ec5aebae93580 -0x4ff4b53892e05c9a9057d878d392037fcccb3504a688e0045a12c005f4226ff6 -0xb9be78858d4ed7dcda560f44303d0010c18da148559107daebdedf828df48d69 -0x7f7a9c6d690ac828effd3113df1216d6b774fbd3635d75df118104fbfe441aa8 -0xa4d927333bd7ff49c060c37c166f08dccb08162e2cc35fe6647478f2670b386c -0x996d5d1097fa2a2408eafe34eb163fc5d1f84c279fc423594ab9410db263c047 -0x948c1c77f7e5a6e1c72fa91ab1a07b8fbaaf61ef1c3342dc0aa385cb717c207a -0xbc7185eb771285500dfb5a494004cae1d001f75d85f3a786e091f5a5a11e5c01 -0x81922b703ec3e011686fdeee7cf0232b96f2c0718c4f74f6069f76b890c9c766 -0xca8ab8dc611b1f0447633f4b079ab688ca0699804acf01e5ad362c42190217ca -0xda859e2b6973f3717994e1398b2cc1a6180eab5322ed6420862ad928e5cc2006 -0x4ce9a7fdc7042b3ea27e8fd353ce06dfef6bd73fd36a85bfa21377d1f2bc4b62 -0xa58276dc87b40d080c75f207575ad6cddd3af788acd514324d8616f834d93556 -0x223e55c21d60d2005586c50467807b4bdc76c0dca5119836e69bdaeca67326b9 -0xbbe677dd1f24ce34c146fa277955231115f88180039f2ceec8954dc9ccbb60a0 -0xadfdd044f41214a8878a5839de0ffd1a799b7473d7dd5d879c9f7cbb109a1347 -0x4cfee974db9737e1ccd4880beedc39c65724b2a7c9b0cdc30e9cc81f7b65c3e7 -0x4ec9d43f64aa940185a7ef9df98a81c148cc87e7392a74a7c445bc85340632f3 -0x50293b662fe25234127b953687ea7fcaba714eb278ec9f8286170faa44be4f0e -0xf5d07e3fe3b33830fadabeaacbfbe6ecf548c2907de04e9ed2b23a4231b9ea82 -0x8fd8f437d3cf266537a825f8a2bb6bd1851b1a1e54789a4552fc01e4a24d30ba -0xafbdccfa391b4f7da6061bd3d0fe50faf16252afb4c677d4ff498867505fbedc -0x45e2413b365a7af58507005324f46f32c4ecfb65aefc285f5c8d2251df33eeb0 -0xddb3bce26749dd0da1d4e566cee800bcd4c12b2d5ae610b617906fbdb9995df8 -0x5cd06957633de8372e8ef9ae7dea0c6d11f085bbd565059a24b265c1252910be -0x07faefb58eab3251f790eb7cb4170549d34dd1b8bee41181d225fd15f281b1d1 -0xf9f0751abd446aa6c52d8519ab5441f759246dc5291b1aa3ae7ea6d9664d645a -0x736b13a6f0533973c7648b015646dadfffeb65a24a85c78955b075df20a6859f -0x6f398c9176f45c86d65dfda492030083853aedd7a5e1dfd3626c67343c23ba18 -0x12e983807fd41952b555d1eecb4583d1b985585efe58a06ee8243a9a248b5bc3 -0xe3a7ac7f0a6e0fe8a7a17142d415d3fb58c0fb7ebd93fdefb18794f36e5fb093 -0xb716b92edf29cfe88cc715871eb22dca1a884bfeec18c57d0b20ad5a9b9ccf3e -0x805f7e72d8b76ba269bd9cc564254c1b4f53d3fd9e517555578ab647f4033049 -0xff41b04aeaace94e9cb9de8bec75c15488fbbd64bc6e6a5f5eb46f2d4e0000c4 -0x47eb5189a6d4580e8b162db4a6ddc776f6f3015af53580013021ce7e3a1a458d -0x314eb785c7d4edb1e5c02f064a34e946f0271578a65def71deedcaede46f811b -0xeb9e845e9a4e573098feb2e167da593571bdda858628a902c36884f8402bec5d -0xdde9d54044b345fb564c5fdad20249faf5777f728c64afaa99ce454a1047d6c4 -0x2eb39f5977e36954960826be5fd6a92e18bb8e4b9fb994f9813eef2f587299a9 -0xb3fda76daab083e60b6ac589bad7d0734427620cf60a76f39e5e55b885e88331 -0x01052556f052cb574743f347a933fe4a302a1c82180115822d8883eb6ecd773c -0x74c0218aeadee77e2ec8fb359c837f64475888eaf2037ade64b92226d2323cec -0xad62e4fdb92e0242e025caf4200f83917a4cc784eeb712afb8930a8343f1cede -0xf78577dfa7f1d1bca75bba1a0fee5cddb4b9ade1af38da5691ee25dc6b90f9b6 -0x676961a4b3623c7981cd526049f92c961adf10527ee1f08a305314f0fd9de08f -0xefae2fe541393592ccf82eeb5e08f26c9fa627f713089c95702abd8bc89bc827 -0xecc582f23161eb203f3165e433e83bd5003baaefc271aa5ccdcdc8f9df60ee27 -0x12734ef3f354ed54877aec424f104d17069d1dc712a3302fb46bc43bd7f6ee6f -0xb895559b603e36a27f41d5bd9e87f11e2dcc20709c3e1215a50067325554a7b4 -0x3b451d28d98a7f2430e924dbd41bed659746b8e6f28b85ed731782d646490519 -0x6f3a060101611a30861b0d356302c665d5587ffeaff39b2fe4eb44b014615ec5 -0x72dc6aea89d4a50bb1c9fec7e8d9411618ad371bcd1ca4ca0b4192566ae66943 -0xb4020d1461f52dfc47e790cb49fa7eaa9cba6e363735b60d641c97c232bfc933 -0x035b1fb0be594ca331dd0d531951d73228e35a1f419b0a80f6fcc1978484b975 -0x78d4607962e5216512b814423bda3a2c5cf956abb05345c9861ba2cdb5f143d6 -0xa63aa95923d7943b1ff8cdb327c3983cd40e0b574da290f8b559c2c8d15d2c09 -0xb785f06d2477ad4d8f27ce11a00c65d8e5eed8d4cbec40b36edc71ab2fc4fa8b -0x6f7ee5ce7e9329ad39b7216f5b6e8fb600aaa2662b70c6b34069cfc89bea9000 -0x5c0213b9d2e0722b578b92cb294d8d53820ecc73d833a4683163a5664224281e -0xee3ad5102bd42294ba69501388c87438c532e27a0f436ff553e419d42499e246 -0x434b55c61dbff62b7ca6ce6746d74eb6af4334979d430af8acd1a35ba46b9aeb -0x361d693d8de424510d03951a0eab0ccf5e19fac05f7b4e5dc71d7914fb117022 -0x6a4ec911c6bec3590be33a2ddb393d124008d29f818000ee1173c86680c1de13 -0x6a4f338a7cbed696aed6be855183479901b3ce53ed54e8745b39709ef7fe744d -0x5aa7f0dd34b43b68b19aaf7270f96f447e59f53ce87412ebb945b05a54ca6309 -0x462995ae826893613f639997d95ecd7ba746afff34a23a9bc19bb2f422c582c6 -0x5e863c9ba561db036d16bdc6f9bcb3d16e1c857392a2575694a17cde1bc4f66c -0x536c0d7496755e9ae4b3762a52e3945b1f63911be1e99c88c8b3ab9d674745f1 -0x3a5d4b297ea7d0b7d6697be7442f3a6cbf1cb2633f8f9e4dfcc0ee56b653dfe3 -0x44225eb44a18dec0759b05fe5819fb81eb268123358470e48db082ba7209cea7 -0x9b6b909eca6975dbd2abf2fd214772794f943d04b7719fd8f7819ba178edbff1 -0x090da34c984401adcae1fb0c209aec7cfa199de70118454ac914aff1634c3b1f -0x8155b32cd3f01889d62b2c0511f56787231b5b08beb9d9d8dca5e363347f05c9 -0x2b0225619c70d6d1b8de0e895739fc76fc269f277d0159578398ed1681e4b536 -0x212374f26d24abd28d8cf219a49cb59f59a84b91f0b82c93b780595e47362957 -0x19d5c5958e62ba53e2f210aef20c549b9029db183982927553a1115a96f473a8 -0x3050d2047cf79ff2f0e290e5a6830947754e0d79cdf3f7fd54b9c833adefb074 -0xc2bc0435a58e144097278ba6fd5ad30e5a1db94082d4c3898510fd46a6d0dc79 -0xd02d6ecbdfe2800ec620ba756523968c8fb36667018b426658a134c2756d6e61 -0xe4220a396a211608304a0f6bc3e6997c06335aba1189f5c999071c1bce72c0cc -0xd32f95f0bc1b77d46b1723cf4fe0fd257a6cebe7810682cdb6d46ef02e8adb9d -0x4319319aa60c08ce24bfac61fdb43caa7cc7bf5ea3b328e11bb74be0b088683f -0xb1085e68dd2419a2e0bfeb56480fe16bdb9c13e3cf213775497773b35e42443f -0x69abf77244cb7378425ae8f860a95d4ceceada94734a7f7fd9aa8fff7bdac1de -0x472a89ddd1499a1cae22bb3bf7a68da36fdc13a37d6589cb7d8b2f1dfd7c4d2d -0x680106dfcd467145e0f637cf762d1aeffad8b0c5c73d79248442cec667a40ca0 -0xb63c460d6819ed5383b0c26024f9bf101ec89002b031e55fcc3cc2afb6b69552 -0x3d80889c1beeb88615e21c8f195d668e8559a772fbb9fe95b189d095f0bf8035 -0xe3b95f38007fa891f5fb63f21ce1f2673ba8aea2e7ed60c8e48f1392d8a0cbea -0x8c099bb89d639662d027794686eca5e44c6bc4c0c033141a4d462c4e73c114fc -0x52ba7b6093cf68c557ec2fa54a427bc3413ec77decf0fee8e986e93ea34ff87f -0xf4590dd1ec7b2809326bd85dadbaf42a2920a7bf6dc2f288acc899ee389aa7aa -0xd59978918b4f189513a0f2a49e0ed888828eefef1cdae4451b7d1ed193fd466a -0x8504bf1b8e3755ced492e5a6cba2a1ea7660df0656e6264555fc53afa1bcf0f8 -0xa12311b1e64efdef79714d5247e1ca68da8c341bd90fbb2cb137f9433c62595f -0x76c529a04cfe7ef52470e5f7ae65e4a10f0cc19bd6540f26860c2c7c8aa18f45 -0xfba2b1001831fce351d076da099a0c8d1955336729afeb05a81f24c07b54baac -0xf79f845766b061d1077a7bc62a99d7ff4f53d696aa019169f1005a0a2b737832 -0xbf15a493efde59d3c083684e58afdf5c118327ad3125afcc1fd80c1a058f66e6 -0xc1ffdaab00808582cf4e13b98a68d41e8749bac1be0207257d350e715ff54613 -0x7e61ae946c226417ae5a4d5c6aa8c78953fd4b43374b426c5829b753c564b217 -0x6e4f8ae6611dad06386e0471f0eed43357249e733243faf6ccd20052b5f31c05 -0x68c45888fa7de96a0cc6659f1910276438427384288ce653b5b4691a9e8366e1 -0x923bc1982b4b82c4c50507cc68c7b5a7e602527d6a8b74bb78359b488d3277b3 -0x981a16214ae78bafbf1810336526dc836abe0c33fe312fa5c9db5b6314d60ba2 -0x372d97932919d4ab37954484509a934dfd4eb5406fd6efa9c1a5f6052443d592 -0x41ae35a6e95c2851fe798c1435c10b1bc57412cb7981066c784f48ffcd5909b2 -0x0c23d4c9114d8e4f38bb555c9e73d725e9f7e5305793a1f8679da3c1fba7fb99 -0x2c91bc56064f3045bf9b929888283452ad36c6cab284124b918346a2d7031cba -0x9f5d1ca7aec74a6f3bac2731716a4a36b02f5910859778a941a40a16f35a73cb -0x3c02786d62ec613d4cbaadc22500379e777a1bb700858761c9cbc13f47983a9e -0xf3f1c24284507058d7028585a5b4d5b00eb56c40fa7027d666ef580b64cbefac -0x821d60ed2b193b75ed3395e0885fc13ffe9cd3f35c0e8ba5d8b05ee1a35ebf1f -0x85cae091cc5c6b03d83da2633ade7474c1593c85221cdf87d38d1e14c83ea86b -0x82ab0103ea8a7cc41651db935a2e73a3bca282bebef05204b40efa0a23248412 -0x5a734f5ff1d0253c8212a32b65065ea29970d34e80885db0a497d2bb672ba1de -0x836ecfcd5932fcf24626e105b573932771827e952cd3f9acf23a823838711415 -0x64c81ceda3718dc81005bf703fc0d71337a7aa82840fe073a634831a42e27969 -0x10d63f98924689173accd919eda07a6012b2420572aa4fa3649beef867dc8989 -0x8a3c77aa76afb36a23bbf244c0e3c25c176d5fa54c133c0a01b515e6d16a5f90 -0x1bd70f25a99c86dd84b2617c44d062ec23c968cec7738e3242d484d69f689c35 -0x862f1d6f3dd5ea9db5485eaa607f2db589f02a913e8d755cd3473b4b73e9ef7a -0x939bc8df81498061c566f2931cd03cb19f272ece1e720b7561249537537ec01a -0x8ea68ced84123ef3bfea42f24bf2c57a91ebf931779e6376ef92613c22769525 -0x175700753f8156f528c8211bd062d4c4ef87b726bddf535feeb726a181396d97 -0xbe2b9fbff493a6ecefe3e87b9ae789ddba4a7dd1e4969f9422fde2564f6e8b3a -0xd026df2c8267fb85da73973e1926bea9d94302f530fd077698ef277e888d565b -0x80d48570c837a48e8895626e163afb6d1ecc58503fc406d22a3b28bd12ef762f -0xbebcd4504fe6065dd002c6ea683cf1498897237912a074718450a33e1fee03cd -0x200d57a725e639fb67e7584c73b49d2150df73ccf3e65bd0962f943579972007 -0x4de52cb18338fc33167ab70c442241f269d124ef7f0cb465a9ef9f21ca219156 -0xdb0eef63d2c65cc76657b4158019760329fe81325c6c27b775285c93dcb4bf46 -0xfbf67331ef3489ee59299ccd00c487a1c4f44b49bcad4669f8500e00de2ace82 -0x69e9b177d596d2aece13bd75d4c90633d9903ea479a45b6c6cca50038c97bee9 -0x6b9a69d67b2c7ffc4fb9ec3b77fc1c51edf8d6eb5211df9f95f2d68dd9858e91 -0x0c76fe69640ea5b1984056284c90b95a459ea31e0b1f285de41c515c9b5a0856 -0x45d1b157171b833a0148466b50d909a70af57e8178c637478a2e90f6c622b8f5 -0x17208861c74492a94deaaa74f12ec8fb646781ab6a565707681dfd56fa13349d -0x694406893fb472165269e8b5a0bf32d239742341140a01355b2cb237047bdb4a -0xd8ff3558d7da7cdb8aa22a6239f93d0eec2a5622f0dd372faf619ec2f0f7f172 -0x1deebb1ac629aba9a097eb5eb4b3dd0bd7e69a0951f8a5b0d6ddcd8736bc9d73 -0xd756b43e9dbfa53a1e0a78a6e262a2efa353f727244aceb71e6377dc14eaa8c2 -0xab8e5fb3e5afa54485dfaf0ad3f5261b9224559e13fc37caf69563e1cb15d1bd -0x98feb9f09de971264e5034db6f3484cdc3f814c20b3bf079212220a2ac6e8c4b -0x34db9922b8ba63e3db1ae2e9c14cedda81b14ba38a6d3807c927beceef0d8918 -0xcd8884051eb6971558c05215cc82b0574a506dac54908e73246c839fd230dcc9 -0xacbb8a84598f789a98ce214ea340dfc2ce79109644625645a3493db9241c1c63 -0xd4a6eab08074e1eeff53166955324d2256aefa2fc29d551e46e2abea6b0f64ba -0x44550f3c06f934f090ce1bd6cef76e6325d0119dad74ec6f938a09fc0cbff6ea -0xb7975c54492aa15975f18653344655d4cdd8bf186329d581212e7d8e2fa9ea64 -0x79a97f0c5765bc67aa3eff554b56ac3b03ab7816434bfa35e19a6b6ffcc98d50 -0x7a92519ece85e12641c0988c75bb0f5d1ef3117ccd6598fc59698df6bf294ced -0x40836187f2a0342fe245b222ad2cea01110e4f1344608fc865320018cd05b31e -0xde2dc1e24f8123b4a3e3a56470e6fc754c630aff904d0c2e85840940d3a296a4 -0x5d6f8f252df1e4ecf1ddc8fd0af69c012bc9def7d0e86596cc4253d24b12aaab -0x782aaf7fa29de90aae7ce02215e306fed60f6fec116ef9fe1df2dc7b64430bb5 -0x68cbfea47bb81e331de0406eae6b3d127eea4e41b6e6836fb702a6932b38439d -0xfd577bd3c8ceccff024630f00d3d8f767ba93c2648aefebb19338afcdb7c1886 -0x57f52e1d427b33786c7382e0b73e6fa7359944b17cc7824811c6ef1bc8c7cfe1 -0x8b624de116456f4d0e10932fc7d5afc9bb8c51085b062621ceb19dc545d1129f -0xee870a8e2ae322b8d65087a645ecfc8b4c6b0ca00ec06ae2c487a8cfc8372d34 -0x965b3e630e60426ac0ec9b6e671d61a6866ac475ac440ba68648e1c8db7a7153 -0x0bd78a34da6acc4ec2f76ef388b17936830850530e4f9c6446a96ed2e2186b06 -0xd3ad876a32c73091a39fbd661470fddd2ace7d55713321751025867a6d246fe8 -0xe03154a15a104e62000b82db1bea07fd329feaf54a2c10dfd8d5fc1c7983a357 -0x8b2e511ae2b5cedfa25cf53c4a7a11e21d0efa1ed338ca4ebf235bec0677027d -0xd05f9e517cab909fa8d78db2079d60d0ce4d9cd00e9e5b9974d51f1d60f8c61c -0x90f3fa4297d7ab73dcc4bc6306a1c56d8d73e1f185ad4169a314e42cf5092eef -0x0396590aaa0cf7da6e1665696be88c0a93d8df20a45b3c94bd9de2a9163f6067 -0x5b66a51b69bbd9c8d47c26ea0d656cbce45131352a1d8b2ef6594d908b890b58 -0xec543491ee50be7185c359ddc29cc927b8d5e8adf8285a3ab16064a9c46dbbfd -0x53a51e902e9969359c6c15f84efa180e02e1e965314c178dd9c8e18cb398f52d -0xf6a0374be3ee07bf5d5e95ec536ab57fd5b8970c87f66267d40f07899b6fb2c0 -0x87a9e84c9cca46c3a020aec853ced82be74bc53b52d9c0fd5a2f74e6ddf0053d -0x09ce42e85f38c51d17a869d9ac0b86d8ec8f83cff3fa86f8ced112968caad834 -0xc1d859319d4b5e3669ec844030ac3ac62ed7084e440c94e32f04b51fae2bc727 -0x65746fdb17c63a3511128a79c40827bfd2cb5e367c9a9e77fe8edd6606d7ebe9 -0xf44a9b7eca8584ef8c30849d76e9530fef353aef060eda372c7c52dde8ce6a9a -0x75a11ca8c4fe7d813bb7b42598ecbb253fc616727c566b42a86bc6042bb3c039 -0x8c449f5566cb5de41006e00ca242d5d43c26189995d03d0c8fca1a0392b1707d -0xdb0110286a22a2e4af98d4b4a319e91d93207e6c301f229bb793e7217912015a -0xdb7523273360e5f9bc24a5c413ab98febf7e9585ff204cf6f04270ec1ff41b25 -0xb202b5e5b58cc2f0a9b3380d950c6aa2092b7f1246981c1aa28140eb8c9a4be2 -0xfc6c105a1f304c4ea1c7ea3257dafc45231ac4000e513828125ce83c8f0e0d8e -0x1b8ac7511bcc91897e61d723d441579a4520e0db53a1fa94cd006bd98d86dbdb -0x0b3e3cd76545303c5a161079bf749830ca7bd4d34f376c611642419255085297 -0x57fedf6ac2c9ed82eb11d99b13c4950fac95a05ba9d4082328cd0604f5f6b105 -0xd8980d99f9770c8dadd8f2017e2b465b2f8ca3c734457973607fc28f9051a221 -0x13da01da20dc9994cb6648866a7ba55e186a97c6771749a408d361d58a63fc0a -0x0bbac2f1b8646b4f0a679a0e5e6c73f9c1690a14353215f698de35d6a5767150 -0xb1a91c47de3ccef628759f9c5cd79db3bda4e649755cf33046ea1318c4fe4641 -0x3f3ea50af600d56afbcec30babd9a93c5d1216ebc776fad6afdcd81093167ab0 -0x3a0bd53f41f97a8919f35f6327713cb288271162c35c6d16dbe16a1c282fa220 -0xbd777afe120a26a47902b41360e2c6f0a5c258cbe53f1468157d5b65e5211aa4 -0x602c4d8f5e650745a3ecf46393c604641cc9f03f5e9c343091d010b520ce69e1 -0x5790bd9188559ece63613e881729914b179efb6f135ba620c9c939d1dcd9b2ee -0xda94e39bf5016f20aaa8adb1fa0ba6bb1f7b4afcd2d9bc86e8ac7edb69c42722 -0x49b3268ddeaf41ee6e5a10e15a96f113035a544738abcd36aa521ada860cc609 -0xad38d87e7a708dd12815672cce24cb6045a78d14dd96a180c35dffe55a746e31 -0xaad96b1f2bfb5c71d62be6a92701201eebcf72c28eb03b7fa6f6d2e9f795adf1 -0x0ea142a5ac70ab29c9183c517e3325f766be42963154d16937631a06b3f19ed9 -0x34dd99829feecefc30b9e4cf7f533e1cff5c54ff77833b260e2e784e4e2ab670 -0x769a987d51168c8869b577374d4dcd714eee981f8e3302ca0ec5a0b006e778cf -0xead5cc0afa0adde88d63a3624affa125dff9ba09952a218f8938053421112ca0 -0x8743d611a6bf9a2a35670899ea78af4a79dde7a71a1250784522298dbdfbdc32 -0xf8f2ae4f82b673eb3a1623c2a055470ca547d8d12983a8fd177c681da8290542 -0x12aecf6b2c8d377fcaf63a1cf55540e177219a4025b04a4dc7f3c43885afbfc4 -0x1a4f5bb6e3c9118e67a4f73f4529c94ab8a776c2bfe7fd5ab7e5dc9b772f19a5 -0xcc000a14b64a1f25776906d5396f4a24d5e3d0f9e6cd5d4e430a44e32004fe75 -0x087d0f1a3482d7a0219e0c1061180619784231796ba9a8dfe37324c3772287fa -0xb36a4396fae12a96b705969e1b9cae65790e24d3588fa5d7f64dba4ca2582605 -0x627d064a4fe5b87611abb2a902b2f6ea7f25545f4bdfc577734a9aaab7a93ab7 -0xcdff6c6e551e3059ce1698ba50ef02529006afc199bc0e9a52c70f6042a78877 -0x2ca9b53ae5b9121513fd1549c6ad7ee23c2f8d0e4c4de3203d1f2b454f9c77c3 -0x09567b73480c398d2049825480c14787bdb6a1314b885b0d9d56c6230794aab2 -0xff09b27c2ce03314fe3bbbaad4f0f983dd1d4f90f1969ea7dedb5417e2593435 -0x3c962f6c6f019a861a7e4ca019a6519d46bcd2001f1ab9e7d6a550122e10d51d -0x77da2d64a9de5c823a1b85a3c95cb5c600dcb7b28ff55db515a20967619fc3e5 -0xd1ecad2e3554a6c6e0745216a69e4aa64f342c8ebc21eb31078cffdac6b8484e -0x2e718a40d6e2421c39b7b6dad5d408b35c3354f353865b73b3762f8cff006d09 -0xfbb7b43a713e4dc488388f8fe3f487737330e1707bac7e04a69fbf6b85e5bfd8 -0x06fbd1791cbf819e24397ea45f0274396e5cd5af1f7cdd01243c868e4b432001 -0x2fd896e638a662515aefda5f4e6d96d5248b74cea93ec17d2dfe8fc9bf9969bc -0x60bdd3ce188d75f295e7dde4c7f88fa828f2520adda4304e2102d81a0bf7356e -0xeace7e0e0c845151cebe09f0723d43089e7c9ac445bf88f67b092e8c7db92af5 -0x9d078946872f0c153fe4b6445b0768c2b5f8383486ed0b3cd385fba364cae319 -0x7d7ed258ebb7f220e789335404c11163ab9c8d49c6ac7ae6e3e79dfaf90cad97 -0x47576f2df9601996f4fae6d7490b7778c5e1177b0831b9062d8a8b769a6096d5 -0x2a723a4958dd3dd28e80005c015cb44785bb92a042b2711595c44eb913aad348 -0x27937b9ca896dd688b14c9703aaf60227768bb4de8ed1bcac44b111baeaeaa21 -0x7142e81e5450b4bcdd859f9a646db7f6dcbb7102194d42d3a43a474377308b4f -0x72931c60edc802d399c180cde776b35db51429309bfdcdccf928569c31802d80 -0x05dff8f52095981e3cb324bfcdbd69261c316ee4169652e4e94c4758b1fafaa3 -0xfaf376dc88b3b7b2b56523356bbd6c3e1a10517c4abfb617583af58fabe91d34 -0x12c58b6c6a6a4b8c236d4963ab53690a900285c7ebc66e70a80bf8bd696b29ce -0xf56b558c52475772c02c59ccf16d5423a1cc3216fb25164f7ecb7990aaca9b3e -0xf19ebeea4744f4bcfd56e25e19f06150dfd731bdb4f697c2286a9ddb4fc95a31 -0x25e1a2e56b2cc0ea596395c5cee24d4aa9e452f419fc3aa1fd24d85454f60d25 -0x483ed7e25f215ecf9dd1d5606aa47d3dcaa6aaf66047d14db6be6a3b440f441c -0xe87bc305d65b98d7872244ae7a1ac033318847987cf54d994c181a11b9f3f85f -0x1ac8c574d554fa81bcf5e8b172c268fb2b6458eada64803983935b1525e614bf -0x7be764a98c6149050c070b2b86ab7d5279185fe7086dc5e6d2340794e1823f47 -0xe70c0197509fbf88c6f17aa5fc6c3acdeab5fffeaf21c8d3825a2e3acaa55fe5 -0x1324f700c5033050831015353e685d3b1d62b99828062b377c197d4ec50efd1e -0xb7e9e1c533d759fa36dbbd18215ee380d1ccfc04a8226f28436ba589c9b47ac1 -0xd66e5d298fe584994c7fea3c139673a32b3e23d2c1114709ec31006513ffd54e -0x5715281853447cf205488e49fd3c04b1a7a30342a5e019035db5c10b7145198b -0x56939229270e66189d7918d9cb704b5577f0dd3322765b5a2adbfbac219223ef -0x0b42fd83bc54a73bfbed0655998db446700fb69db71a0cd1480fef02a0e81a3f -0x47edf583f3e7f176e0e414363d7bbeea40cb2842033d09394076e25ab76a3570 -0x64f2f786b4212985aef7dc02191ec9ca8ce3da4c8668a243b2bdbc35f112b519 -0x57108b1b92841a45384137537cc6a8d9f2d561e7b8a4836cb67d7699943dcd48 -0x472dce3d40b92e0260f71dca99244447b382234c6f5c11f33f72502fb68689fd -0xe7ad8cd4a8e41a125fcce3bc52433cca360e77d0546bf8436365cb46cfa2b643 -0x487c4adfa04dd81e410a2f18965a58f696902ae78cfde0d9806e2ca63360a255 -0x30c0883c1deebb07e6ce6b09df53c62d4826753e45ea59f8f066ed2c164e65fc -0x07f3c83c137b8ec19f054cadb429076c0296faaaa2b4920ce717bebbad6e3fd9 -0x5f29817dffcd657622b2ef2fba6fd6870a1ce538a31e2f71346e8a0c379afcc1 -0xdd09144352ae30486d85cd086da16d9f1471f5a738f37174dd81afdd07c7991f -0x0748674af95c52166df05ed2442f0e2ba23ac697ab4b5a1af6dd6ade9220a450 -0xc39fe82c8fd5663d5e73015493587c539f5cf89184e89f02d00b3376aadcbc6a -0x2e0fa221e65d958868602752a1533f2be1afaddb523b08b3b5513a63ecb7da33 -0xeb6bb9f25176f7042e6119c939dbd8562fd35f4e150fd25cb6133b471eabb2cc -0x34b0a7ef208c2ac6c5e0ffda0e623292612d4964c286ad1d818c324caa6cff6b -0x512430386228f1c1ac8d69df443fdcfa109386d6109cbeb0715e7919be4c8189 -0x0385edeb4bd8c4e33654f0af3c6a7feb7ee868de00b437904166fa96304bbaac -0xb9a870555daebb203ac84069139e2870a2eac24137a625e390250cb23a3740b5 -0xe5dd68869e852c38c8313ff59d1a772280d73f684e0e9cfd2db29c1993a94e07 -0x7c8cfcbcd2fde957ee87cbd48256712fe3e3174648bff235690cca7c3cb350c8 -0x118be6d527adc194533f0d6a9072a21633dc5ddca531523fd88c0e78f125b6b0 -0x6124ba7cdb9ac1730689f4ae62f1363408d6a6bc96251eccf4f3816da2f83b72 -0x876cb0380d20b83e68fdf66f2bdfb93874aea2f403e3fdc908814d279aee51ac -0xd818efd4422954a0641d08e09a41b724758df9ac3ae86e37d374b38d5ddbdbee -0x409459d09075b32511866789a6035208ecdbc4724de857895cc40d488e0d235d -0x9a22b6e5e04a938bc710ee1c563b15204e3ab35d00ee10832ee42c5ad2446d93 -0x18d96096ee3d9bca96b03fc23bb911f1dd9eab65c5d8acf8f896213e3755da23 -0xaaa8c2c351ed2dfd2db98370bcc70387490e9fe8959e61ed54403419909e2688 -0x214b35dc469d7afd6e64ed8a1e0d2db32608bb334f9b7d2b9565b5895dfb73db -0x6b146b1709946acce6c5ae6fa7829fb8cad12d2c9e3ee3049e8b29f4f2c8c248 -0x8c022f5c987302226121d91017c0b84bb77d250a6242ee781fca5ded3a6db40e -0xe96a280ee8e3041757f297a263d71dbe1c24d29b3d22820e05f055b727ba1cd6 -0x481ac735a08408abfc00712ea6d1e843467dbd965c4764bc8076ed0d0fdc1717 -0xa7584bc4b56e80d661c71fddd5cc98e8a47ef551f2a1fe4f0c90cc5658c897c0 -0xd2ce6dbe85686ac271f8e16aed7345759e089eb040ecd589f2380bfd45699bc7 -0x6b8e9971852287c999c3458685b233fc430438e3489534537d9ab53aaf265730 -0x0e5869b56359c7c0523e99819130e4cca40a7ce83c1c51685e5a3b07e9d0ab3b -0x6e93477aae801fafa1be83111f5e59d829ba61faa89633645fe5de8ddb607af7 -0x82155e69d8024586fe36d182069c08c51eaedb7bf55e79a34de8943a60e32552 -0x7a5e1d20c27ce8cb2ba87d786874e7fd4bab677c97aabf457c043aeb35f8b15e -0xc84a4428b3fff33ac7c798b0e29ac97c43ed63fe21597315e847fc27960c425d -0xb7d40410921f7e85508114bdf3bda4c2ea5ca2724c6be403f48709bcd23975e9 -0xc6dc15a0cdf256a20b3523bb05100e2effaa673857e986cec4f8d62c643e3f20 -0x12eb94b83984d17982fe5e5af68b490a9241d8116cea92b898c372e3dfbab065 -0x2b004605b9129ab17f08da834b79660ebc228038c1dcb4413601e01c614e50ef -0x60e9e44cddb3831f654939cc26ad447159e8b03a9b5744755698b0e95bfdaaa9 -0xf60c0d7ad2730feb78b734b646fc6bc11cb8534d4f9e338f7f36b7e7eeb00ce2 -0xe527283a79fe7bdf4e6ed3aea9d64025a3c44413eefb79f46dc30efdddd1bcb7 -0x137cd227daa3d90dc8d016c50c74ccbeae18142841817cdda14af461307a8d42 -0x25d772bcaac40c4b814cb78ed8b2338ba0b332cb7790600a87f44a92563d9be9 -0x8a2c4fdcb75bfbba5328e118bc77bf2bf81b2bd8017122dee0bb5e3dd65c9f89 -0x12517a19e4a596d19d4ee4a02aca315d9d08f700d96be8a1c905a272e2c8f5da -0x1e1a79d14ede48b4abcb9e5831cc18621a465a736dc5fa260a8fbc3769e28b53 -0x0bc51c8af6065dfcc9b5e19b44982521f9d2b645f6382cb20b8a0c392f2d4119 -0x1975510fa6897dcdb9d2d60faa8e20911aa1e381236dff311149def8748ae25a -0x1366bf2daed521afd5c7c21b318da3137cf9ec914d5393607e4d0e65f74cca6a -0x54506fabb73d67f4e9022bc8486367686f29f50e96aa9bb3309bb658d0b29be3 -0x13a4a073a5f027fe89e1ce7e07efe1b2bd8898d25de975f6dc1ff6232303f17f -0xff0f080969f62770930bc76ab2d4b62b5c8871a262202f7bcd163e323a2bab07 -0x66778abb6d57e1a82ad336a1ed83d511e437ed1384c6a4e303d80557fd82d187 -0xb34f9c007a39bce8be2a58dd86524db1f94167e80606e4588e9bde603d2b8a7e -0x0a8889a7adf1f89b56da00431734607cc4cf0fc2352866cb63169175a1dae0cc -0x57368ec43a37a55be9f81290a56b249d1c164a2ae7b42a140a6c605bd7641a95 -0x19ff29228118ba62c66ce630b9223f0361676516d90b759629d911636235b84e -0x9d5c3da683ee9a8cc1cf018562e681a08af2e47408efe47058b16c7f73b72d44 -0xa9e9404aa3e36b62561f3b3125e41b8bc6943b2c9c3039a0cd61ff5e0cd3f229 -0xdcaab19ac7b15add8f94049c6a299e65a348801de3e91861f728f9934c875cd4 -0x4899647f4e64be1df5d1236ade1ceb1cbe71af8d97db40ae65ac8be3a7caf2a7 -0x6f387dec55e6f0843897869ff5d417f1faad874ef2f5650f43ceeceb40e24dcb -0x78ebe7fdad595ad407be6d66f65b03f0c62e24a052cbef3f4c3cf1a2c856b14f -0xbbae041a706af4bf1c93f2cdffefde529abba9718ab2b0844ab153acda55416c -0x4698ae40edb98b4fb6ae4edfaf884cece86c6c282c0e691fd26fd97aed66c792 -0x9265d53198b448df667420a35464cdb5ebec494786b2e54d551e4090c4b8b852 -0x530e4637907cd892aabee14e5663406d08b02ca63bebfb510eadab2c43de90b0 -0x815be76d040d8feee5ab25a4cc70afa5c7757e1a1116c13f06c6dbc5373d6798 -0x46b5c4fcbc2dc4f3d73aba95d2009985d7c0554bd0c0e07c1f487dff92a15796 -0x4a62596fcef9453b93dfd6cf6383a67b5de3cb8072bb964e08cc92e5d43aef0d -0x86801418051093408ce6eb6d1edd67ffbd97b686a8eff73a39dc2af12f1b58c7 -0xb2014fb56f1caa92c8651331dbc7cce4e6fc864689cab110f43c10e86fa0ea9a -0xac9cce38a51d56f1b2febc8c86aefeb98070fcc7dbea008175f5eb3c99e219ba -0xfa8749fe58dc89850b461a64bbb0236cb5383fa76f508efb10b969c0cf640289 -0xbf7643cd1d101b847025973693f4b7d9358534afc19bf26abc02b2564b2b2b90 -0xc7feea3260ee82df0fb2be24e2a24bbd5c0487e1d1a92b2feb965c01b18052df -0xa7ef90d54646c09baa6eac0ad3fceb4bb7ed58bbb77575d58bdb9c27b720774a -0xa58e6487f3e19aff5020461c625d33c4ef8d557096b132594629312c6c5272d8 -0x6fbf896cc508460367c83eba7416e2427ba3ddaf15df9fa5d2b0d176ab080afb -0x6b3c8dbbb5e4f0b0365adc9f49eb83851173cf36d9ee1d7d9d2853d657319e44 -0x43c1ea789f116752996f22242c5a4179be569368efa7ab454d2d9487ec7c79a7 -0x0fbd8ced21062ef09d3264e02d192b369ebf0c147b8e47fa29c4ffd95e6eb66a -0xbfab081e88aa7c6aed2cf1d24f4613f172817e88808a597f17f6e64400681523 -0x77df3d83708ddd89d1353d5b80441640412ba776c547018845b5e727172e038d -0x2e9efb86bf14c344005d22abc75b53ee4c99e2fd4dbee75a779350bc25cf0d3e -0x51cebe579a9118b1fca5b738b7c90a7c0467f5336c98ebfa5a5892af172cdd02 -0xf9b792a6cac22da8f03652674c561b86e4187ddc1fd69ddedd05974d6a03db2e -0x3eec6164825f5c0f456c79ac31ac07cc91f0ee2258ed2d362d98ec460019fc52 -0xe9250e044c510e86b49da4eebba9fe77c0ae87d3bb836d2940f5e679ecb87fb5 -0xb1ff36940a42ce7e5d4dbdbe23ad70a420e23872becc1dbca9f37f1db2373c6b -0x8920c9287adbc74689fb2582ff2ff65d5792c3b3c9fee0bafcc6be7a1d173fdc -0x352803f7525d543a8dcc64ae38b937c22998d857cc50b75c26b85c554e5c1ad4 -0xb8551597dedb8a71f8943592d5b3c7a75a24553ee709b25fa78c7c76c636b451 -0xbbf77bdc120db07916fc63e376903d1eb0e360412818b6626aff505252fab866 -0x220aa3a8cdb49eae99111df83f4baa73e13e65a7473ce4334a38ecfd9f56565e -0xbf2e21934b1795d06bb671c287e8d51fddfdf242f3c404d24635dbaefaed38b8 -0xd6c23372eaa7a14d904cec6fea36729cd6a8d8aa2271a3d21bc9087ab14db827 -0xe8f15998f4973a191a989ea47853a3d20671fa3b1b0257139a4edcf3c42a5878 -0x047faeeae9ec5dcb6c167713fffba41080c1f4469f36a1c300e03f5ebeacb879 -0x5e2d0679f1a14367f223a0747a58391330ebaa97d8eb83c388383bd4eaa84add -0xd1ed7772412fc81c4f6cf2b2c361d1d6990df0185f69680f2256bf49f38eeed1 -0x8698c54f9fffbc9fcad13d504eadb9aa6d1b5751ff347e2a7b18098a4b6c5d68 -0x20d09037dab815d2aca9496122e715821fb43775650385c3bd0de606691a357b -0xf6f201282a0ea6e9043bcf93bf866cc1547946dcc3c432ead24a8a6f17f53393 -0x381d51dedfccf723c34d7827d920dd6cf8e3613dad2991bb746e55b0b1eb7846 -0x14b1c1a788698d90447732ac8f795606568495f7db8607353530ef4f5bc753e9 -0x687611ee6a1b8920d9b1d66cabe81b4515634e7ff937ccddeec15d13c9131187 -0xfc15f8ba28d670294f3caad36d8dd3431741cf02c605bc8c113b3b35cdb43f30 -0x75a5cbac1358e8ae60a4717621eb6d8e1cc8339adff7d87553eda710aec01c83 -0xfb70f1238a6d23900d55ac90de85f1b151c54079a706d91c2b0b556700ded2f7 -0xc6414c59bb75b7112538dc81be8a065ab565e41ab6882cf7190338e797015a88 -0x61124a19b81bc0ed98022b296662547c0c342c6404f25c796e8219379aa1e8ef -0xfc99de2b156bc8667301968b1da10e16d299d8c64e843dba69ce4bf102ac10c6 -0x50496ff9a8f6eb93f1f9390dcee111d673c23842ee288d9bed64723463c384e2 -0xe6e6f016eb7167a9805dff9e21ab1b7a6343cbfb1bdd3ce6f766ea054e7249ad -0x41ae6dad8bc1febf1935214255d333b8bf8e308cf67a97ff3286c9d7f547721b -0x6ebe3583edb5a7c38bb40c55e72126431c972e8b12617bfb3259a1f8c058d0d0 -0xb1e3c5404dcc2ae552146dadbe594d89a4127ed13100d8fa378c00453a6008d5 -0x6495d90700756d2e7c40865749d27881d541429e08f452b660282017646beddb -0x8cd4b58796bd4fa48c50af96e3b832568e6d2593e99a5921f16a16c457fe27f3 -0x1fdee8a6b1a198ee215dbd46993abe335d5239ca3218a7392aa1e5aeadcec408 -0x04043fb88700c6cd931b8501c5a279812cb0d098324463b976b1896cd2f1ec34 -0x4abbc2b9114f8ef7a34662d478e0418f632dd733a5f483f303fa0243213f3a58 -0x06491b0c4962a1473cb93f64d5efe79a57c72c1f9236d861ad56456fdfaa83f4 -0x9ef16073d0761efbd577afeb860f99d9d4fbb137774af9f517463cc7672e0020 -0x3fb9f0e70733da4c40e4c0aace22ffe9464827cd6e98835497642360cd0e1931 -0xf2ad3e2fcc9023c612433a2e917a8636a9019b844e4536e4a24caa1f3272e62c -0x236bd79c3aee3ad105342b4cef9f0edb4995e9307923d1ba54db610545fd983f -0xee7cf8d081f36b80821e506d78af0c3b7fc0ba539d26fb1cce0610db522186e0 -0x8e60b4758c505958f4a3cab5324533a78dd440334c25579cd11643e26f0d899c -0x2c13695e68222a3e0831c34b9d5f9ea71320634fd15730c8eb0b114732d2b659 -0x86fa0e503121816bee86a601958193ec88faaa83c16e67a2b7efb739de59fe47 -0x1ba6cac3b9a1e7370d2d4ea782a03fa5112f369acbb47d59c5fa1fe344da2213 -0xe0f414493f2afb543a9cfe8f9e4809516784610e64ae6f17a8f9b31e7832156c -0xab9ea73f25277b31042155a52b79e1d9df03b6053952962f1e7c34896f671af6 -0xe089d15a5081684c1101878d947f5bff67b0aa2efa595d2b4e0b7a290215fc63 -0x6466f56b15a6dbc3a4334d631f4839b82564cca75375fe4ac5a5679d81962cfc -0xc0d6a73adddd123788b281976747fa3d7397a5b6cd1f23eb11cbf6d6969fbae8 -0xd12c93189f7485a752e7fc98b1a711220291d9bda16e87752d6bfb475d038399 -0x623f5a6853c067e4dd11fd2aec8628aa3ae6819367928377dff1b128c4adb5d7 -0x6570ab3eabafd8eddf096e379a28b3a84422c1cc7d44dd2d1e0bf2df71a5b36f -0x238712d200b969202b210d58ff135bd34dfd80928f0c37e23b13a8f6a7a01391 -0xb2ab1cd0441254176f55e690e0d514987cb176ec1161525ed142ae2f96236083 -0x04d41314d91105135270e72f53a3c524702dabef89a3ed389a8dc683e85814a1 -0xc911812789996a55a46e4d3b3118748befa42a938a0891ab7d31307acc10d228 -0xaaa7efe7e2f0fee654c22fe214153618a392cd60ae8dcf8fd2e4b251ce9d2213 -0x928e265485e8d5ac6ad6896196d9f614151cb6d66e7c4cebf2a027a9f9ef7897 -0x8fe6aa1e2177aad6d6bf814e9353feb05ba44cae8f0f87d5f9f7be4c27e9fbfe -0xf7577e3eae5d63bb677784f17105e03cff31b2655b019db4a3f94a54994f4532 -0x472c3f251025d3ffa1a3556c560a85ae195c8b1b203022c2367912a1a75d4729 -0x9b0ac87288be1f4969de00f3caedafa8bf950f18e01b47de7eba11800a50af7a -0xdaea5480658aa278d729ab2a3323e5b121a1bbbdb71b33406f741bcd416e2bf8 -0x4cadf0c1ce9cd48dbc89b3b73206751808ebd643833f8aa0334a2891d30857e2 -0xc4f83a021a6a5adb87577f544e5da54e6ff5d20ae5618968036a8024ff83bf65 -0xfc53b351e59b7297816e26aa96340b7981e7401c3f780d97b66bdf39965a9544 -0x5660df6e537fc8023830b996c43dcccc6831abfd24a2bdc4dca4e1351d189cfe -0xefc8b272c24f9d3a6dcfb65c0a2ec41149d0a4e8d5563102e4b9d1c1c725189f -0x4c0e6241ea4244d853792344370910f2195172001ab26baa4316fc8331dd7a27 -0x6c59327796a63292865aa773e9ba52d5a2c2a733ef3f8f5d58ab8554d1416d28 -0x803400013e378f7eb49045084d8e184a5e99b359df4dd909e14e9820bcf87369 -0x1b7496a1ecd7014e3343bf419e8b64d870e1dd399f1009685756ccde573247c5 -0xb6d45ab218472dab3cf8ffd3fb05f5b4611b5d25a6aa5d6728b9efad44752d36 -0xde328d44ae14e2fcf1491858a93b547bcb99c8518aedaf572f15f2d172e028e9 -0xa95af6c732214315893f4f0f905377f1af194935313fbffae8be125390b4d3cf -0xe53b4cf604f67dbdd1a2bffcdbd8114b96fef5e6247d4b0ae975793e18a1d7cf -0xbf61ec5a034cef25ad98be629fe4e1cf71897ffe0e7c79377dcd3dabfaaa0c92 -0x6697fa7c93f20829d0d16f5d746c77db8c012acd82cf16710dcc03ce7c6d43ce -0x714596b59f76e8d3b8cb7f3038dd192af9adffe6610ef73e3d0bb8ba2c5898eb -0xc61ad144db363cb13d7bb1c5a95f322b2527b90ba07b8880ba5ed64c4022a574 -0x7158af7ed66168e29d0a7448c98b44b98b1e8fc7e2987308a5864d08aed3a531 -0x47d8c2b7dee071ff73da0d95facf4dc3e5b4b158174bf6c3d2568f11c48115c1 -0x1259c73fa38be2915251dd9c5dd6a5a26bd0c2e6a41a8a77c35d433972229d41 -0x093cb5390d4092c14ea500551538df9011b969320bc3cdb5a1b425d5b7083418 -0xec68ad686c7c9435e32c31e5fba7da70f72cd7fafe2e81a1706e0eea03046b06 -0xf6aa7dc6e96900c279f97d64e249c6e7fbfe7aa201635ef77db744bf83b94b38 -0x3266ada3b943a49f83fc08ff91e5931ac6ae13658223591d9d190f596b7fcea2 -0xa7efc53a07b339e6ee79a2e14d12e679bef7a1a60da4f6c7bedab5f6faf0eb22 -0x564cdff5b243d150cf54ab3c38408d561c62939672130fd75dacc282c22f52e8 -0x38ed2145fd2894dcaea6facdc2f30f5a87c434997661cdbca981378361a940c3 -0x3472ef3f50401ad85c01d9f2dc8d62a9d6007fd39a1915d249f3c8b8c3e068e3 -0xbafe836fd0f29cb6ac4c9a059a9b4b2a811175417ffb2642f700ef4379e0d4ac -0x36d8b6595ba70db1479ca466245bff6a94b2d2d5f0a5e8db781f92a3efd792d5 -0xa89b6f22a56526afd173f2f1598f7194fe6bc78caee765fcefd2444b208f6bf9 -0xebb2cf1a2ffd4919bad20fafb3634bddb52ab4bc5be54d73f41b29dbf52c90b1 -0xca040878edd9284a70b0e2a3a3d051456c31315a490c028bec7a296ac8e08dff -0x66541e74dd41f0b9a0e9af8613c1f949f751ab320ca49a90c6aa5f9668fbc3bc -0x7095c63a611159829cb4545ba86d9f761e69d42b50a1a7c6fcdd84ca9da65c63 -0x495a81279bffce3c476a15468bb82dcff6adc9b3628a0f877ffddbd72b8b1d56 -0xa040554a09aaec9a38825be871565332db0fdda31948576ed31ae850a13c136e -0x59fb588764ca5ad74b56bb4b58684f100a4f780a1f9648b15db096714a5731ce -0x49bf792e873cdd14217ba18e08d835b649953a4337119aa321bafcf8e6c23fc2 -0x0e8a97d64b2aff01a1b2071c1052fca8435171e9bdb4eb35e8e92e84b83ea437 -0x061d0527a9bd6e09b2497ef5a2bf5d2fba2d3fd046fd0ec30b47cd00e90e56e3 -0x869d744c74cada46933e6b994b5da244e7d676238870e4688356d80c01f902d5 -0xbc5ad909dd36c75dbd87e217e269fda439fb01de82b7a9598df286d74d3a9e27 -0x45be910527e834767024dee2f6189c65b68b2f0916d6584d7b4dc52b4a95f1fd -0xa4413cbd0c155513931a96cbeb8dd600a69a0f384e788f6e5927b8587775eecf -0xc38bc3cdfef461fbb7bbe73bf020ea51c577aed3c9e748bb3f1890eb1d26052a -0x38e0101445e9f98d96c307fcd35566345963b27fc1d84abf651a4eb47187ee7e -0x6905e423b0826b849aec3506f399ccada435384accf13065fd3023fee4f6ffd5 -0xda546b9b9b7afeab91523e246f3adf8f4718295b8fcf4045f05f9c58b9293754 -0x5ede2978c980effb42057647aca881ff960cd82896c783355fd8b7b5b366fd87 -0x52803e6e6c861aa8cf90f2c518dc3e7ec65423e97a7e0129f5c4d3c9b93578af -0x155775527eb866039c35bd41b5ef6b48a9c65a4b7a0ba8d2ff41b66ff1f1277d -0x61d3b6798205bc6139171f547900a9045e8a9ebfc9e40cd3f3670579cdcc72a7 -0x31a310cb13c109a4047391837db20d675aa62484433268fcedc12d9fa964061c -0x213866095c59deff5378e8dc6446f6c02eac8fed3e00edfd1b082b7f55cfebe7 -0x9ad21319fd1e8242e984774676ec2cecb24247b9ee5b1be1eabb96d2e1c9c666 -0x5e6fc9ddfdb8595bd763de67e66cf6704309d9a8610d63b73b1988b02b765bcb -0x869c04b940005a0a9fbe40adda8283e3a75438a597a102cd26503df19593e01c -0xeeb032b008e1ab781a9194d0d14286eb3d0966138b050ac1f444dfa4b5878029 -0x309e2fff69e995bb6a863a6a89c8710d704934b46d2c32baec4071f1354d12a5 -0x25bbbbb42150e2f89db9b7c2f0f636b940e6213c25e9345e1dc1f0c1338735b8 -0x6b6b5018bcd9837bb8d4f5e9079b001b7fd38e344a2e8210e73fef6bb6696905 -0x690358000e31210f962ec43d2f064f3925c24ed0ff8ee174ae08648020b15e75 -0xe32768d488a0e5b245689fd3c1d5ec1867a5dd458b16adb264a126b9f302f114 -0xc8da8c2e1d006fe96ddf94b4817be295335909efd8a599f3ea49c3eec4a66d94 -0x9818c845b768ae391b8af607044f5cd7a434698ea83db5402713d4af05394fc5 -0x3340074ff25bddee677973aa362611e49d8a33fac5a4098391c92aadf6771c4d -0x73a9b0d2d18ef607ad0f831788ac30debf53b2e578d5525bf4b7fad00ed1dd58 -0x32d61784dcda3327212cf2155a23f18254f91ea344d8b2b72a68be0a8abfeb6d -0xee142e780f2513c70b0f3706b6382a987138c320ccd7d12b0cc1ab2d2df602f3 -0x67f2658316142212de8256d7cb952ef3690b82f59c3b901fd859d87fff57855b -0xa6240559ae46bddfad207d3735c456f6f419424e89dee360c98ccdc2abd8bcef -0x6542bdb12205d38e0938b42bf36ddd3c0cab112b996638f719a375523323425f -0x591376599419c2037b256c7bef41cca4bb010e7cc51042092645c704cb95e376 -0xb691c67569b9036754a35864bdeec882a677fdb29a1278d4e44cfbdda639a59b -0x54f4e8d3289b97b73e73dab079944575c53f447f2a8aa5d60979e7bf5aa1c9e7 -0x2c7f40c6e583f4f8843d75476138417584a42dd3d18ac79ddfb01d0d12e5e5ef -0xcc14ac21ac4308970b223efdc204ad3e19a89a459fd799e77e1cff50a9255e1b -0x671c7e73020ea68eeea6642591d83af09778f7cbc670fdc7d03344d635fb0f11 -0xfd7abf0b222551e60a884fc146fe558480bb62bfdffbafb0449a8302b19ec83d -0x8b840dd15f4a1d8f5569f40a57361d636490a3999165051a70b800e6510cc814 -0x5ee7611d16d6228ee5899670b6805b16e3da9e517cd6245856547cad38b931f2 -0x7f80a49b8e8b4dba28cbdc894578f1e67fbbc27514629cfba13fa9117ffa4de9 -0x5487fd3c4e9037ddbb96891a1a7ed4a63d08524b492635189e0e7a61bc8813b0 -0x748202c259dfbf31949bb2e24a6777652f2a4a51c06b7678dee12f6687dffcc1 -0x34eeb844e12e52dd842cccaf07588b09be3f4ba775d78c1e629f77b55bf66ca2 -0xa94b13f9c8f8ca86b8927ab54962d1361a17b5f01f67570fa598ef529dea3bda -0xd9b441125e8adcd9802e0ad0794e9d28fe4feb7c141e171911e14d8c2cebeba3 -0x6bada757b8a8a16ab9d849e5aac7c391ba7ccef7b9d27d30d9f69dd55cd9fe11 -0x02072854f9c8ba75aedfba2de51ccc023fa87e8dfdf6cc2d26e3b5706d9c1693 -0xaf6b47fcaa29921ac13c4dc4d4b1fda0da47420c81f1d8d26678d3cf01826368 -0xf7b4f2c462027e1306ffef652cd0544c6c7ccd39bf97b009aa9904f563987949 -0x4e63670ebeff82355644cab1bfd5a5ae0d32b7ff9b4f69efe4ae0b833e3b1b96 -0xb62c033979a1e10a16865afecd672605dcc1b59729fc203db43fe4b9a5c95a12 -0x11273f3e6ed447fb968c05e4cc0d3096221ee084bd9648b8325ceb705282c3f9 -0x4269734109b38a96d4ce7190d42e018ff282b9202b91e79a744effca311bb30c -0xc3a258af65efe7950fe78809c41bc9def33edd60472bfe8ad56fee9ccfe0bdab -0x0e9bc2e512c5c6da997c4876c1a7d56a1ca5bd2cda007b84db6d1c1dfe3643f3 -0x7f61485658268dd63debc5ee3db739bb601f8225be03186f8ae74493a0ebadd5 -0x01cb8badaea2f887a0d930ad260604e9b2d469075cc9c21269a519cbf759b55c -0x4b9a2a21b5b8ddbec8d65dae6dc18827f1f0bcef44b93c1a847f96cd50d209f6 -0xaec940f819b480d81a5885f2736fd4738ff97d609e37293eb9f6d182face3eea -0x67d02aa2368e49de7b316ed22a744931ec03224313f31119eb1c3b7364de27e0 -0x85647b8aef1250c15fa68cb4ce95405f7a7ee9e32b637f18a2c66d946fbc81f6 -0x6c956f579085ad5b6558f55b13d4e2f667412eefd24b543c42f5476590592ec1 -0x009b89db3353411b14da377a638b0a0701581a435c7a6d0660db2ef4471c80b0 -0x27f43269bd2325324768ae23ac12ad74f405e7d3f932bf538995294c6d5be18e -0xcdec31b7bc169a4dfa38093e0ce0ac3fe02b0616732c014fb094e33d888daeda -0x96acb1649d01d6ed2735b9b3e2eddaa4dc6f243cc1611dbfdff02c60fe297671 -0xcdfa16c8c768d5fb98bf1ac861695280024aeb273a4d69ebef96007f1ef43402 -0x07235063beb6b4197fc9b5ef5cc48a34a5138d031e32e3acd32512982ad48042 -0x397b823c72bc8225c19d774a7150928effcf3af56e86432e45bf2dbc0e91b59c -0xb489e6d66de84dccfedf4ee99f10db90585de632829c0153aff684f64ef3bae7 -0x8633edff4ec9cb343d6e7f3053469d9c733badeaa4db7eb12d0b11acaf13c773 -0x9ebbe28d633e96b8781b1a952d9bc883b33e7ce4d6cdbcc3d6fbf646b1b706e1 -0x759751d1017be8361feb677faf466656cf4f4952bcf3cc0b25822484dd6564d1 -0x979ec41558ddbdc9db9a1af4ff4cade7350b08d41b13ba6bccef078c4bdd080c -0xfebe48b92cffa73fcdd03629b58019783a5e881ea0d867ecc1528e6f5cf293be -0x5dc7b44f80e2c5fd14f6755c21e18c4f4fa66aabde8207f31002c41cc8d29990 -0x8ba2791e4143629d60e17a6eaffeff5684725ba98ddea42fc33a4bcc3714e562 -0x0b56220a30a3c91659fd85bc5e7b7e5a8c3370dc50710ace2ca52649e8e71787 -0x0b3053acf769612f7ff21059edd7c4f4622e9acf844ddc8bc02de6a1016e11fc -0x1f1f512cea09ff0ebb7fe9c9d90ef0d3ba4e45d6d7dc245dfcfc2b28a01bb777 -0xc16566dc8bb4206c9a21e83bfe36839a57a0a78be7a34fca35e17f3653e43bf7 -0x13d1eab78dc19455fa8a5617b1f8b2dd7e6ea41e75f54baf2fd333e38b06b316 -0x9062ce6cf2bd974ab77ca874f02bc2f41f7955e52846407d3e5e22f966344f58 -0x0cf876784d87ec03726f5fa8dc45402617ba8c0b0ee8149485f928d08e64a5a1 -0x0457f8679d6ba9d1e8725fe7a2bf3558a2e87192510d63756d5dd97020fe95a1 -0x0b80e30d7529e0627bb9a48e41261d42ee672e174b959efd355b9ce6df1d8a46 -0x3c2c69c9745885ec450819ce41ed7141a6888068268ae6454cbd7b156f07664c -0x4bb00522a25ad6eef0b43b4b956080fbea395ed2640df1b6723a5f8c5548b9e5 -0xb4ec68d4db8498bd7e2112690476de9ee829f056532143bd4fbcdbaac34321e2 -0xdc8c79e316f28551f8671d1336a9445974ed031c565767d1625b8ddce778282e -0x07dfab85086d8bbcdeac4ff7cd430056b3c86771a8eb6d7a1cfb0b1e36850b8f -0x38106a6eb4a9d62091e5246c55051296c6bd14a2ae0bf31711c35c8b0a869949 -0xf7aa6efef9422538e0b286b694c0d9ea5a69ccde6c008566d6a92a4cbe255fec -0x783a74aad3350e7bec3becd785fd66222c8d71ee07f95a9399dff4f780047a91 -0xf72da836787ed8a0e9798e22e9d05910980fe27683f454ab87c02fb9aaae076f -0x739a335cd18284379871a8b1bcee0565c30ae25a5f905deefaf49c7adb77512c -0x9489b8b8fcd37a5d67aa8387083de82ee668661d777a82b35625edb2be7301ec -0x36b68e323622eeba767fe6c9c5298f537a905b192750380e29deef06ee1c2b1a -0x7a39576d2348017016846c4bec5bb7193917a069a5cc76ea33e1427e4ce036e2 -0xb253eacc54b0a8e29030cb88f1968b39bcbd392592b16c03e91a0c8bbc80e600 -0x575cd729e27a66a6ad66070075a29f99b96994d0ea29b2af319caf074cffb8ec -0x4665c277c7233071776598ea9e8c57d9db6724745641be436f3975faac0a0c44 -0xfa00c3aa888d0fe778ce60810eb50734d22e0d23bb689c635c317be25f78a535 -0x56794e5e1679fbaa0aba4afbb523df57dd7d872f678d7c60bf8ce3cc615a30a3 -0xb411a43f2a2724f94881b16358cabd20d6e51c680532c9ccd26c428f32b52263 -0xc9c102afa1e8c76662f10134fe04d8ab2dc610c968d49c6bd2787e1868302366 -0xf52c71a8c360988bcf205ac0b6d00a5e023781aaa75905038f86b691c3753c8c -0xbdd9080616e6525e1a5bd37a044a4bb9249a2662e7f4af359613941b1fdd6593 -0xf470b106a506d66ddccf65404133b6d7f55a2f7f4af7124ef4ac545dfaa19fab -0x3ea9d336de4892c966f7a631402a704671db13ebda9f0da11c8affa57967e267 -0x0d2218322c86efd34f2b6472c424aa676bcfb63ab08582af6c9331c338270ab1 -0x6b6607dee08036b9c0dc1e616395a941b00bf0a95799940db0565be98f8f97c0 -0x18a3c36f1de56c0e0fb230c07d4a743ce8af5743160f4f7a8c1222458943a6a5 -0xfb33a0e1819796d82dc3dc44d24c855d0124a20f10e76dfce344cbf5ed0c44ff -0x01d36afce3691819b21d33688470b548bccfc063f7f7ebae1cc6ee0b1d8ad43c -0x9e2a77c9e45ab743d524f10de0c4202f7048bf50f06f08933829004955166414 -0xe8ec2940c3c9cbf37c02a4d08393ea013089fb16e79071303d9f0ca8b9a62e99 -0x6cb22113491e8057edea8a4f36c0f8571730f9ccc8c95d256bb3eb353ce7b999 -0x71e9f35efb443ba6ba00712d0b77596593a349344976a2a9c5077f92eef48b1c -0xe902e01fcddcb6cea07baa311aefe6d74d2fd78d2b6d51f530cb1a91570ea4ba -0xf243ac1f6ec0754692c9e335b57bf050005a85f34e9c8f1d66abb409ccf13117 -0xcae1d73a6c03f88b19c693a4921fb53898a3744cf1d7874b18b52974a9af4607 -0x3d9e9e6aa6feca3f2b01ea3a1da68acc2dff2eacb42c050d5aac58cda2710018 -0x1318e197b3a926f2840ed8a2c2481cb56d14d8e511aecec945d9d38805d8dcba -0x73b28de2ef4594c99cfdfbff11b6440c5b318e2a89e5fc5c5a578783c0f92b5a -0xc87ba32806ae314cffc1efca6c1c68c8c0621ff9aae7b5a0a6f4cd7e5773f876 -0x9d8bbdc92fbf717cea41c109685876618ba5156b55d2d091893ac17c095c4062 -0x7d45f4cd896f836cf7f36ed5fe59bb73c0b60d5d3c43f1279b00ce68b50006c5 -0xa95746c24a6fe5529def13ed2a7608dfb4a77cfde766eadd00831c2a35e15e8e -0x93a8075259551631e7069c7632ba25bea5f23bb9ebd2b1e35bce99ee0193b696 -0x20cf28cb5178eee0665498c4668f77466530c8b731bbf28acff52c0346c4eb3e -0x34f69458371eb6016c3d310e69366465044a4db59737809a22a5fdd6cf5d110e -0x11427c601b609e6c43a543c7906af72281d59206abd6b397bece50be072893a0 -0x0868bf15b96b9bfdecfdff16f4fee959e702fe4d9d1ac0d1a4b8320d78bd6a63 -0x4bbd4982317e4cdedcd5b72bb66106e4dde36a3e00333a7de27e4eeec134aea3 -0x91b2abb0f45d3311d88d98bffafad9c64f36321604ee654ee27c8b9f881ac7e1 -0x1cec6997537dae9721972b860d141950c7881805a722d5fcbe3c3393af03b766 -0xd4dbdd9ed932f759fe43da983b9cb906989a0a0bdc84166de2e4e02ecf40b898 -0x84106929a7f0a9bbf361c38cdfed390b4182ea38a2b23c98087218f5fe8232ee -0x3d385e397678c4664ca283d0ed5825128e3751d535b43c3936e5611dafdce6fc -0xd901a402c814ee68a3aa3c83436ccde959f885c301b0518bc83923d5b2d08b65 -0x5e4a0da3d17fa2b2ed8e516c5ababd0700d4445649d981fb88cb41cecc889046 -0xf07179b5c82568aa82199c741c7ca73dc1664cd985421e2d2716657ff2f0b67a -0x8721279bfd312407bc573f99a1ad9eb4f9201b1f0cd902414bc17b11e174bd66 -0x1f65f22660ed3c875450d02953113cecd0c8dc3faaed4f298c03e07df92f42a1 -0x890258774c2c26be9702c16342708b6512c2c9ddfddc1e87be60e2bf8c409b4d -0xb393438ce1f3cd152f1ff5b2258558cf3742702712bf628cd7e9db04ce89937e -0x42e06ba78269b32cea3dd019405b18935d9d343172ff76d9aa01ec936d059cb1 -0xbf12b5373f9d8815f9b2d0dba2461fdfeaebddc0c6db6bfd374418c60e3c63b2 -0x9f32fc679777ee0d5be44214566309140ea392e42eddb69df52fe7f549f7e466 -0x247056ab00768ea4b64cdef1aafaf305f7aff8cb145a03cc9f10f037b944adcd -0xf5f8f2828cd686ca42ac1742cccfe9b79a2e36f0a06fd3ad93019477b83aed88 -0x1dff98a5cd55044851b8663945d5f8f4b0d0857b1ff830f227959ead6582c96e -0x94625b285c339d4004822f64a2cc1ea15221d1ddf3d92e08d6374136efd174d3 -0x6c5b59046e904375953d7c3ed83dfb1d6ffde9cdea0528d1fdcf8ca0c921f74d -0x8ad34b97626df9a7bdafd7a6f25f63b5dbf29b3575687e914e1b41aa41f5cdf2 -0x6697d290cfeb7d6321022147aa41f522f1685a3f7d7ac82a30073219d9083833 -0x7c3ddf3faefcf9d68493e05ded2243b93519a91fb2be6e4f2850b14354955670 -0x2e910bb9572967533aeda17223cc2efcb5d521af12192037fab74b5325bd18ef -0xfd75f52b177d8a7e0dea4da75ef56cd3010f66160a01ace8c35da7204f33545b -0x97c180def2e5d687f73969f6cd4aa5e907f8f26e72476f821661f99214211bfb -0x74ead276b6817c39c6b7532bf3ed09f048c5e4ffb5764aaa1513e5c7b31fcdeb -0x7c9c50ef8a4de8fe66ea9c5e02d3d4a2da33f15d0444932e97af3bebfc48e24a -0x1d67ed72b174a6b802856599643d85fbfd30be5dac15998848ac5ba18aa036c1 -0xfb1d349a71ebb83066b86399d31e229695f8a0d719ac45aeb8ade63e1c8e6f38 -0xd3e5ebb6048d09b68f1dc4e5e1a54e4381ed8213bc71c9aeb5f16abe27aad2f0 -0x62624ac14d4889d037f217df6240395e30b6a72a12fa307ed30105aaabbdb1c8 -0x62b79ff7bb8d06d73951233d100153d33a28af1a0383e62a8db59492db58e115 -0x26eff3071809ef367f31925be46f29c2a0edc8ad34bcb2f9e72ec43f7a13d06d -0x8e18e1ca100be74a0a31d0e9f55007be7ebb5dcaa0abe51eded0dd7e22b3ddff -0x70f96d9d15fe55ec726bdea8162fe2f89faec20c38bd6fd48f1f12e294f4c3c3 -0x41f479022ea768bdd992c8f24bbeada0b2d1d83af7e010ba7b77f262c36b0b2a -0x1d3ca68f39e6c4700842cc0e6fda03c47f6fc26f3940ddaf1747100501d4ca7b -0x473b864ac6e1b7805a91a4595e5758d1ad8a9c55e0c9afe4f16bc0010e48ccb2 -0x66ab86ac14b3c46d08c29bcc7d27975deb1cccef617a72039478872344dcad5a -0xbb28915136e228ca501fa5552c21844b647a3a777a05749f29006528a85c7ad0 -0x89035186273b7b8d30756278080d51fe186a96dcdc18d3266fd77f9fd8993850 -0xea68c7c6d6836a02c0373379a7de2b4f006cc7be8a317eeaa1da1bc942241493 -0x7e119ca461e35ebff1d5bd374f943fbbc2bf5ca5d6d434bb80226c2ca8db8d39 -0x9c70c0b6c567f6696a6d2424f5c6b23181c0f4bca1fcb2a0b5419a276540bb2e -0x13ae1c15d849df4bd1d145e50b600f32abb11a4783c65c8e7153a9937cd258e3 -0xc4aa3bf58135e0bb0f96e697afc20accd08f340d0ca5f7ca5c093b862f550527 -0x618b177c6ff7d07219cd1a23355002b8397a00c39ff194c8d8abf0893db0ec47 -0x177018547ca62c46e02fe7003243e5e2d912066c6d4fc2659c2191d33867ccf3 -0x60e244d0f556b6f37bfb6db4e7d823b35a0f23f0b6264ee75173ba6c444e4844 -0xb46ed68ef70e05f2620a64dc5d5139e40fd3ac542163677ca1368b78a0edda26 -0xf90ef2a1de38b0fafd650ed90a29f2d282371748549b87143189ae57b9a25132 -0xe1d1abd63260eb813693ceadc35fbdc9cbf9f5cd97acb97e7d76711c4a9c6a8c -0x85bcb3f6284c670d2576e354715d1e1048770b3c2de318244e5aadbe66ddf177 -0x7119db6b1ef78fa32e99759cc04540348eaea4f01f313ff790393b65bc70daeb -0x0548ca46252696a4d2b1603019b73bbc0f6e8bd5c8b56770a466f0e51eba5f4b -0x0a24ffac1d1466d34de9ca647b7874a90c70a0132b85f1194621f7f089c06b1b -0xdbb7469030c104dbb6ae09077b8a8c7cc364e02d2a341181ab557bda76308f15 -0xc28ef37dbc41ca3a82d7a6a033014c2c73c35915a8ac683d261eb46d01151722 -0xc217c0e178439965451870db7eb6ab0e189f956cb20a61fcff45c1772631bb5c -0x618149b1b2fe721ced26f520a796b82c7e4a71faa770b4f48d9b9894a95836f1 -0x4f37d99038700947c99a65d58d478033d5c314ed2ff220c4e7b115565a9737fa -0x1d31e51ee2d0dbbd12626f9d03981a2dc1c859f304a628e56cabfe564c96acf8 -0x9555a051713ad0f8f614e94bbc8a5941b2a88e0ea34a7700385b86f9e09dc0c9 -0xe9e41aab0117c32ebbd12fe37b5c0e6fa9e44da0ac5c8e99c0ee8f7c0ca698b7 -0x682fab794a090e98efc547cb87573c237f2772b8d6c97444a84ab79fefd1c6e8 -0x8e9ab0dcd5692e8779fcf5b6f77bb56d97f48a66824904eeb6cada414a7b4a73 -0x712f9be9244dc2017b4adf7136f6739038e7b0cd07141ad43663643636902e34 -0x5afd34f64b5f20cbca156ade6543d27293152e6b2ccd29805c2b6ef96673f83b -0xf17608918cd0cfd31c9ae916a70fa35de0f41e5bf21be3d311cac57dd823ed52 -0x8e4d22fe34ed53e25eb067cae365a01debe0a6ce781f0dce12a684bf22261da7 -0xbd625f02d8490daf3e59158abe155df364a9dba8789f79144959df321052f3a5 -0x97710792d51a657bc259c6d4192d2d5e7c4a400355d871c4880a9bd871afc4aa -0x2de050125abfc1b31bffe4d3770a4ff03777a4c23c56bba8ef5963d8afb286aa -0xba00802a15c715acbb3d13955abe67240f0a31d4a86b2b6e5f226478774cd41b -0x7546c77e0fa51dcab28b6a009fe3d5920ad6fa15681c50f96a1bcf302ac05e3b -0xa2f0d2369e92e2b6b27f1e23393a130b87f8bd69d3b3dff0f57f89fd02548484 -0x80e8a7393d592037959c1e77eb71d94d9fa6251a205490f0e80dde31eacb4ae7 -0x4bd8b10466ee987b28d03e8ce658946f80301733f269fb71fdc2715d8d333454 -0x70c63f48bbae4dc4dc3cec6aab9d673267e89162a9c832aadf6bb16f690b0a3d -0x43541cbce80fba07d0113bd1cf4b348ba651eafc7c3b5b16968c17fd631f0656 -0x41baf2a8dcb16ec3b71b2a3cd17917fc762929b2450ff67b687df2a12fb3502c -0xd8963f53c2f7a7a6fac77919afdfd061d54903efce09a88219dc9fd434d156e5 -0x941149f7dd8b933bb9daef837db3619eae73e9cec24b4b2b8f1f764b98860d9d -0x4eb9c78d1977cf2518c02c99279fd750fbe96be5a784aeee7249c99333bf743d -0x3ca778722973b8c55dcaafcc54c91c6734304d15f1fefc3ee2784bc20702bdae -0x631c98993f42dcdc1106ed5c77f99c59f310d31c461e451ab964098837a96f78 -0xe833c4315295d6b6026c08e745fe646deaa37f3617ccc0ade07d50c89a3c0e2a -0xa02f375903210647a9f22d11a7f512525a0cf7aaa64b8c677e90077f5f9c7508 -0xa6db052be11f5488670e74c87cff2f3490b2fb2f49202b05e13fd1c21e3a815d -0xb077165d0bd40bd7b240bcd6ff6ae808333b604ef942d548993a707ceb9509af -0xe83023310c8aacb8235b9a11fa9d206eb18d54fb8e977e25fbc87127dea565d8 -0x608a225d31de80be6dd85f1187a7693c0775bee9693a3e99ab05aa477111868b -0xdc1594cf6c819a4fda9cc152cb0b6f3df84c66c615ecc75682076b05b54f3335 -0x4768736a38b25eb59385ee9bdcfd2847f87102ed400a323a834ee4a3f0390d4b -0xc96710a6fc3dabda361265d9df10c53e3f239f0674db21da21399951f5c5f143 -0xfa850f5220bcb9021f331d65a81c8d7414493ce6bba4ad78a7b7d910f0bd290c -0x7c77e9f0c1110a90a79f91bcd8ab04982b966b25c3aab0d104368010d2b69d2e -0x77bc31f12aeb7b81d849f689455a3db713247d916a81bd7311e8ca16e4702f34 -0xce69e4da112653fd975a9ade840a8792657bb494295e384d0d14ca632e1b59db -0x8a6db5b0bd316e79913813704577cce944a63c67f5fdc5226aef2ca9286d3b7a -0x2753748bd7414f16e1bcecc3f4e1ec36713f0118a78cf6bd803c6591cd01811e -0x837acf9cbebada5c02dc8d523fce5a0e2a84da9ec81d9d048d063b82011acb63 -0x9cfd928206a3f208fbc809d79dec2394c2e650dee6de0231bf0949e66269bccb -0x47ae8015d96ee08417df7f851da744f0364d6dc87d2fc994204bd482ca87de64 -0x365a1f2591590612b6acb4d982a58eeec1aa647c471a318a6ec0ce3cbc99f399 -0x0c148337840a52855d46c5a141455200b33f79e2314a14532fa4336b5f68f919 -0x325a3f0a2d641458bbdaca84ef76b78fc6f68a824d735e74ff7aea8d889be6a3 -0x39dcdb9d840d6b470e51d8f2457019e34962a29e0e6d1d611c163898239ea194 -0x5dbece4e251fae7771818db6a152072eb2229503e6daa12f9fdefa923d2f6ff9 -0xd2b886977f2c6351bcd058bc49916702be9601abf12fb4187e08a18a814e52d5 -0xc6d628d8239acede0fbc009d76259a913ce8a134d38c252c907333b676d47427 -0x0a45dac13d4da0a41faaf697b174bd8bfe37a71c4c78de8adb3ed012aa7832b6 -0x4d5269630d7a222c76ff3dab0d003005cb4a373103108198daaf8b437d5965ff -0x07f9bfdd64f449daac18ec176b0385e32f70c465cb1f656b3ea792d81bc6d31d -0xbff232038d38c35973a3ad3636b0c91e35eaaeb16c49b320bf5104b22abf0320 -0x1e8fc6b2ea6299c5fe07accdb0c31523f5b2d5cb9485a16725908750074f5f69 -0x47346bd2182b6e849e07b52346014a0688ac41f9848ba31b956e6c7ec28638e2 -0x0b174cca1b0c1ef03d599f2a4c0c3217f041dece31772af4068938a50bfc9db0 -0xe955219e4a35330a72b5298fcd0d33e664085b8d506a945214e4485b847b3646 -0xd0dfb5a7e53da12b1f5dfdfee151c43343d715625e42a60f6dc6e88dc530e67c -0x3d65b213c63d07ab9fa744a3282094558fbf6e4fd24e633700885de6284dce2a -0xea2c5ab7a7fd0b44756e6cee7a5233ddd2f541c7987af70929960365506e19b1 -0x042fe0cb1d3fe7919c5db8f58c5425ac6916b55d89bbf413bcfc77a41fab30b4 -0xe6268426fef7bd3c5b0b7d823570243c08215478248c38ba8925ff5a30125d46 -0x5bce7b0e4d873200abe70f9d02544d0e3e52f545fbe06d61065af8133f3c155b -0x70089cc6d7e7f654882fe231d8a068fc5ba581b898ce14e9f2b8b6454496ea42 -0xe994fa5b9f4da5bf71ac8eedd455e6b81923cab01bbac1d5c87d308484624a66 -0x8472626437e81336e19d8477b66182bbe1dc39eba4689afd85ee5ba6b3b7f29f -0xead3ce64815ba558ba2deffb3f587d4da4e29b3bf19685159188691874295a69 -0x887db6a9fe437d38a3d57f7c01337b50720e98ec7bf8f60131b86c73ded18bcc -0xbb8aabc71ad1a7efd3d92f3f93e738bd1c398e9fae00b9b4bde4a397bc65bdd8 -0xfc3f5a21b0ad51e7c7a4ee4b203ac929908882069283943ac54e2b0086f770a8 -0xb36b883becdd3ab7717fd1a29090a6606cb0f4d620dbacc7c6578705875a2913 -0x3277fb68de15cb29c0aee5630e4e1de75a5c75501bb37aaf1e1233232db862e2 -0x48522d544087c77bf447db5080d1db141416458e31863dc856e481bde994d0d7 -0xd595ceb316bfc1f6e8ccae3858471d17561dc8812a0f32dc69ff32d91d962583 -0x3580efbd7bdcd8184749f7525420988da96ae63eaa8974dc267173d56392c2db -0xcba14098b43a66b25b023fe0fff330c6563ad1266cfb8f87667c10b30de0e467 -0x7b5f2ee6cb727ea6b02f069a2f2a1d2eb54aaa7c17518c9004a475b3bb644c32 -0x524a5f565fac4ea280fe6671fc1e108c282b4e34bab08b7ea9316a2b632cc1c5 -0x0de959d57318c7070280b79a0282ca385d64f45f1f0ea64d5ccf18a1819dadc3 -0x871d4f9760eea7fac8b68ba73cb3da3628a1ee338259082bd889643d58eb95ef -0xe1ee26720dec7b688f2a6526e5321ab210521a5f53b941a3f0d182d68d856ee3 -0x5f964b383e7706b7ca2db9453d38e4aa8c6bcd56df97a049887a9709048ad081 -0x7852df7a65e7257b26b25000ea96f1d176006b6b59c74c737ffe92eccf3c458c -0x3ab874f88b5f67ca3ccb8759b5655d8e5f58adc87ba2915fa811d28b709ead81 -0x0e9a65ae782b48ddb9f9943adc5a24b533572cc19d79746168be84cfb9038ef6 -0xfcb68a88a9a56635592e5b6c4d0bfd71090050aefb2a4dc451080c5dda5512ed -0xc1b1a35dbca374a3781c94d8d20021bd33b175e5111c541b74d14572aa2ed127 -0x5e2e56b914098a70eab685d22845e091d92053c8fe2f5c39b8313b384def3eb8 -0xe0b56a6611f258eecf776311404c27700680c3a4ed13d89de3fbedefcab85588 -0x58de26d2c13790ea9c953e444db780f77a3f81935fe011dd9dfe39622aa26878 -0xc87188b9dc9c3a5e83235f8522e70fac8069bc338b20c53ad6e6eb6e595e3ba4 -0x82cd8692bec956c7e71040470ae6ab44088c6ab9446335b0b5fbd4a0d76f3197 -0xca438425f4d2546a79c81c500af7728f761a6a11f51af483baa93da37c91b8c8 -0x32e65bf1fbe41c8561bb520b7bb91e4eb38c00feb9b1aa4af93e308da7c71a89 -0x1b48459f27f2d98ceeff5facdc88393053fea95751bdd0dabb520070054aad8a -0x5b82df8e4d279d358e951228034bdc7f159141ddc46ece12819ccf1aee622c23 -0xfea47bd09c3cc015178c52e06d82ca6bf2810f397b054234d5b77c0d753be2a6 -0xc2b2f67bdca40796f87679c9a0e5fe2343b09aa1ba60859d5298cb5d08f7c08b -0x88ba47646d81bc69644cee66a94503f425c8dc42c21b005e51c42560d70dc1f0 -0x82b1e71da0768bbe370948f5849456e481d5e5e92d7db392028e24e820d016b6 -0x60ee7f7897ab526ce063f543b2fb36ff98a8933024b017b6c95720a78f0e1e37 -0xb4078caa547a1a868f7aed1935fb093ae6b9b716a6ff77c4e562070785d676cb -0xe540ca752afc63e430486e3c08a736e96f8efe40b1495f2612b1597604ad9820 -0x301061560e5e020b63e406c83c9f086bf7b91a58ac96f3b7f7700aed3e6ef2f5 -0x3cd95e5652f959f16fc83f412fa7c1c4162ebdf0621d424cd8216dc454b4423f -0xd55ea662e34db1b65a1708d71a4238dc55ce5105f45882600cd63b342afcc8bf -0xa11087ab1bf06ccde2ba57e38b972a81f14337eec5983774e6949040599dd86b -0xd0d54a4f89afc75e1b498d208a7a58167594a2b17c587a2ea75cb321d5246812 -0x01a8bc84d55a4a983a7c0ba0003edfb8b565e1d2dfdc688616c12dfd924a2059 -0x39f571fca00c7bc066f5d3bc6783a0a434494f2e4b8286a5dabfc26f5b39484c -0xbf6b7515612ec61f6b4ff9433d37cbeb64d99078848f78b07c4300d382a8f60f -0x28a96b60b1a70762703061fdb46a3f52c92cf02bb203b9c0029a4174557aab85 -0x7031d2d544beac192abe96aaab624a48813af26a0c5084e06d6a29182a2c9652 -0xce86ca8b3c116ccf14632e52e1777d8c5e75fd23dcc506ba5858014cf00ca3be -0xa3cce87524d1a48e36648e4e2b6789a7dc96e49664bd16bb376016050949de66 -0xa105d62dd4f22452028af05482afe9ea16a20302f05a3917a6d824842f0fd2cb -0x05638dc0ef9aeb88f5eda9362ea3f5165021dc7d56803a86bb16222d9ddbe6f2 -0x8666a5008a22df6d679aea07b76556097a8bd6a03f4810e6b07e07ff8cf2462f -0xc1cc237b4005f7a743b6409af1462e90a53d3d0d7e1a0c1cba63ce3ab926f73e -0xdd9d03aee36907a5b2b371c6583d842ecc6c078bdb238badc977b39f82926261 -0xcaa63039e570c7bf83b4dad56c75383d4a7fcb8aaf7cc086d7132e1ac5042884 -0x3cc6939206e4a5eb2f415d943444f0af1b74f344323e0c32ae878eff16d05ffe -0x52f55388741053fd4872b84f6850795b6bad20febd8b1047eddb696a751b2d72 -0xfc8ff3fc71cf6e088d5f74a9c387387848e96ff6d44326b06b863562f72151d9 -0xc59e83fd0335c4119fea88b105cb7f44c31545af69d5207af31926c225d05ace -0x9196c2dc03c6eccbd0acead240aff40908b57485e4cb62315f8f0011c40089a8 -0x2990246ab43e32de1b3c057d8790345e5a7c93c408f6e2dd373c95cf4c21d665 -0xe4dcd78ed4e6c1b07e7fb4d3f96c6826f96d6fad5a412775560753e5dc654bcd -0x5af3dc941b4a7f3b6f69942f9a847596404d9310c7601af19c6a828cae81327b -0xc5970e28912b4c55fe71c3cd5886ef97c9195c719988143437635e86d3bad54f -0x47e04e3e4cb22cc7af8eb430d94c1235d3770a5bad6697ed1207c56ec8d5dea9 -0x4f643aabf13d490e8cc1fed95712aab6043454fffe5e2e9cd4a35189df02d287 -0xdf81ca5b62a4b3ddd40c0373b092d550f140d6b320b76f14853967b594f67a8d -0xe39d210dcfe8b6c5676c6dd07041c7aba75015d2a64e6bcc5fd93d7e486f5fd6 -0xcefeec32b3c54ac7ad012b00ecdb4bb0b1e9c7aa1eac346e2f18c6e89b872435 -0xbf0d7ce183f7225aaf2ce1c1e863e129be089fec7bf61230e8bcc653f40a33a4 -0xda4d4847e540f2d3ea934034ce505989bda2b312ca92e825da70e766055bb28f -0x516caa3384a20d6084a76ff7925a4d60c39a6b701c711b617bba3a06163f3ac8 -0x4fb8dcc324654e076be74e36acb8fb5812ba9befa6b238bdc1480a908e5fdd09 -0x3c8df8fba79e9a6c66648aac9beff1a368ca203b096db5938a20367ff91cdc31 -0x7d97315378a89543a50e4def58c7eb85b2b14336ef7da78225cc903e0c25aa95 -0x4005a224e588b131d14b8296ebb28110ab5950d034155b619c66f3f13d5aac46 -0x2c38e2d616f53645708e8031c7d438d9b5bbdc0805934b7097cf5bb704bc259c -0x08838b5e4bd452f2eb5f3d75c4b90025441d80d41ad1bb176181cbd4e3ad6198 -0xd2c0c8817f22d144f7789a2cf0695247d1b623d74dd66c69c90f3b9de0cb0a8f -0x58ffa59f7eb150b3c7062374e0f1f7282bd10e2ba53e618d03700808174a9bb2 -0xbe38012d6e456c37bbbae3b12d0c7d478dc9c8da8b88b82f84a9cd3308ae9ec8 -0x5365cfc9ed8a0e316db81aece9b2d225f7d290b3388a3285c74ffc534244ff9a -0x9b202744207bef82d3a3641cc98ca29ada6da117bca0a3dd705c86cb647b9e5d -0xcecf9184bf36763a500e8cf0b838f3898527752602e9f44beee0cfe309b2e95a -0xdef6cd8d0742474f9b1e1602052b8626d7f1e7edb6d9cc4150ed6442afb53f4c -0x83d7f5091053de9c4f7b8c583288a91c24c0d805bcb9827c0e667d1a20dcf78f -0x4511beb38264044c5986caff3613dbd28fc7b8b3eceec413a7b0090bbec2d936 -0x9197f2cc574e601062e3b2af1218336061d6889f06fce320ad753ec016d2d919 -0x0d60f16da9ef379cfef91ee968757d243553c2a6113e141d29cd74ae3c75d0a5 -0x41da67c6f8476ae547528939b25717fc3d86384d1ca87060f4cbca57cf3cc799 -0x7c77ce405248b99f70ff5485a0d83654dca0147274276e077bea95767b7e6efc -0x27b343f60e9573240bd970b8c3fb31377a72d40953d6160f1194ca66630dcedc -0xef23de3631c67a51b5290177fc0207d79f513cdf9d15f57cf50c2bc6b3efb810 -0x81ca9e740d4e703842b16d6cc9d184b0d5e1fb64d84d58b59be478dcf4f37d1f -0x45955d28c5067f447fb8272b5083ec3e7196256e53cbdb08cfcb0765b033f64e -0x2e6611e17c1507258c32e06d9ab5d87044b70dd6ecb8b804a61ea2d57ac80c36 -0x7e80e78e64705cb1264f96fe74a7fe327ffd5f9ff4228d20d94edfd0c685a3bc -0xac66527a24e04df1e2dc20ed8f1efdfe89bfecb16c0ce805c4f2227060fb31d2 -0xfddf2ebf86b2f694d0fd504a60bd70506b66f1fcb26874a0db29499197fe201d -0xa0630b8d993a4403bb139cc9693801431acae6fa58ce0a8fc3a1542346498278 -0x70369a334bef330c2eef8f1c055cff041d1ff9c49e924e3fe00fa44cfee52b94 -0xa58d89b4aa7e5c1434a98a5038ada195a538b1a2dd225473b50db94f81e1d149 -0x3fb4d6fb9ef6c8ebc853b5f49a0aed7c31477d22054a19a13f8910f03ce7955d -0x19b237f2f2cefbbdfdf9f805648da0e1730837080ef224e759bf1c0a33a5ce9f -0x77b40e9a54ab82c9f3f05dda49709a7dab47413f0e8e2da48f833128a8f5e0ad -0x6000d63a8e0f5882bd7e2fc4dccb687bb7a40d3caf5339021b14afe6effb4f47 -0xb05e09b9e563cf5b2dfcfa6375fa03b037a8d6b202d09eb90e1a1f9b4ec41a1a -0x4e67143efc998cfc911f61b511c885e4babc8acac572233ec6b01dc793facf76 -0xf53364bde91f1c389f76699dd924752787b69b09a662982e178343800ab7dc79 -0x3ac055528bbee18b1d5dab233721af2befb0386b339954ce086e30e3c8fa2128 -0xf7d0e6471ac623fe19e3638207fb4a247b48f441faf6fa2587ca8bbda55d2d0c -0x52794c6ca8d3a0343e9bebeba89c0a786aaab07deeeda36d5bccfdaa2b6b77e5 -0x7c4e0cc952830d8fa66dd90478d9444c3ec4a9c5958e07cfa390152dd116ab8f -0xb1f344e72f973da6772a1e861208507c7d0d38c11d165565b1c04931a7bbc884 -0x66a778bd1fe20fb19cca652c3848ea4293b40d2f73eca1ed8f7251c6cf7843c8 -0xf94e2a1cb91d7137f5040fc7d94c5592475ec03694997b076fe0b032ff905d9c -0x5c2c19e1cb3c1da57d2fd3eccd155586b15b5d3c01f2b5f030104bd111817cae -0x7d2ac433437715f6d7a1504db2621c485141f9c99bd74e1ae5704bfeaa0b50e9 -0xc2e7a87293db8747498c08c984c32b45ce068acd094d732e6b2cf4c83fe86f83 -0x947d22f2ce82ddb81b098d073ec4c99bd973f33364d647e4f7cd5ec681c0bd79 -0xfe21cef846a21ec46b874b76f9858c28c3dedf919cfa4ee5399aa760c8720e58 -0x53595c0df7c2ae17edd86ebff463913ff5f3868512bd6448c5cb288cce93bfde -0x1a6c4a7ad4f32c828404410ebb12030452f60135a1638d1295ce7dc14f2ca6c1 -0x6982cfd236ff4038e64deceea8d8fbb5fbb0f5d719f16e984bd262dd5624d2d6 -0x5e43cc0200bc2fa60379afbda4d202ec05bf18992d49fe7fb78209e0e34123f5 -0x05b6d4f93e5b0a0a0591390be940811199946f2aa42d4572ad9138c20261e5a1 -0xcf1821c23393378eeb95c3f86b2b66fbf6cd07d667c18bd11593e8cd4ac1489e -0xb334ba30eecbded5a4fe4cc67fd9d24fc39de1f293d1c405ed5cf30f8b155980 -0x403151a6de9ceee69b44edd777dcf2a503967a7962a93cd78943e4417560f02d -0xa63fbdae20858fd262fc2ed49eaafe76317c19a900b3b2bca7bcf57f7dbefd4f -0x4f4b182a338fbacc70c61e8d5032c85806424fb77e16397e5025d6d12e28e2fd -0xb998e91fbe17f5c11f8b60743eb9afe3ff43142c7e5f608e7543473b582d5254 -0x67763765bfef7f9f59a41674e2a623d10ed4e55839ba15faca07a386460eea4a -0x8747b37cc53379398dbf9d8c0cc5655a334d57d27a2e3bea5c15eb2dc51867b1 -0x5dbd2da945471a1916e4e094ef8898e04d956898864532c7e7d179c6aa0eba04 -0x71d1d23770e8e027a20db9ec765087e95e0c7680a5a8ce00d022a7903c2c9934 -0xcf85e691469470280f0d3e0c65bf44d498eb6228738df0facd441ca712d35173 -0x2f717c237caa5858075a99652b704a06555a86b4d0928a7437674424fc7e4391 -0xc3bcde3bd137d282ffcaa7e72661f373c1a7caebde7467bd6a6d32336fe21395 -0xee147e4abe40148019b86f3e372ff41a7861a2099845a7b7128c57533222009f -0xe4fb7672e1f989ec9d8a383a436eadd6c6e4256fecd86e07d6acd8a7904dac8d -0x778265f89745fa052c9ad6496008eaea9870257fe5dad6379839775054bb6af5 -0xb4bf876c2df43924040c5b7284b3cb6ff5b66e69e76827b43b9bfd563ddfef6a -0x0a5e69c6623b5f54ce322926bf48465df0fd53d93f39f92d66075ddc4fd791b3 -0x99424d4c831bc20c83e4af5ed495dafbdada9d4f3aae5372029381c4d7bb1105 -0x025c3ab07721b7b9b83fa740669e102125ca066b0635780476cefc209a8204e0 -0xffc82e7e36cee97051a0c08d08afe1a5cc91278327a20e0941918e2ed3001a20 -0x621726b80a02018a70369f6e0fcb9359b108c17ac2d659011c2ddbbe704945d0 -0x9c14f30b2f71efb3cedbb7272ad636ccb950af664b370441ec388b39ab8c1107 -0x0b4b8e703a85a2dc47ea3312ea2d9d943e8bdc328b142798975ccd934e7ad8d5 -0x2fbfd8bf43fc9c5bb94ecde891cffb06c9e5346d700c72766823907d2e3594e8 -0xf911d07d08b333b79f03bad1ed6c93fbf69d9eff50178685ce6e8c63740fe7e0 -0xb2e6fb40e753fc6cc8f5358638e549146fd1e88a9aac6d997bbd755dca6ae880 -0xb121448e6f4690f246fa3c17904cd3991d8c440e07fb11d9bf9324f9b061d934 -0x2e90f3eae02cb091768a53764ee15108e84a41a1f9240550588cffd11d2999d0 -0x6411003e36dc6a0802446704172904f0b2172383c070217a84cbe20c1edac140 -0xef65882cacaf3b648146826218b51f7410eed8f33846f34286e7ccc0c024ed5d -0x69ba358a8715925485ed8a0d0af404bdaf074600d4c4e1d27287c75f5331f844 -0x38249816f7b0fff736206809d9456b736bba30f57f6737e77e003ff0f64936f9 -0x03ee6a78b8a32dc0950f9d6e5a228492e720f5c09aa78b8f849ddedf28a3b97e -0x1d5881adf1355f3413ee1568454b25924c305c9f784bf93ed7fb85bdd8ba63c1 -0xa4eace03ba92b23a0d7ced38ef56f7eee3ab8931b2b565134ac4728814984160 -0x332325a2981a059a406f3ac6e5724601fcb76b324987eb8476a0619a15be7a54 -0x62ee3eaae3fb42feb6212cc7bddd9b04dac12ed0f3da6c1f0bf9eb1d519b9de8 -0x30e2ee0f9108a4244ca1f91abfcc04208793400cf832517d5a71e9015ca4461d -0x4aed73856cc909331f98b2042bebeee50948b5126ac10486d2fd633bc1a7f5ad -0xdf005e41e58d29ccabd48b5b7b8dc206b61bb4130b3a15462a5dc46b75bea755 -0x10f58f4d82f5a1e8ede766663fc8a37c7a49a512dd2ef432d1150226049bc09d -0x0f58c6bcfa5cf85eb533e163f31040c509241e953ef9ce0e47be75effb81d4f3 -0xd49a436c67e227eee4c7543ca33599c6669dd9df7ee115bd20e39343d0533025 -0x6b9cbad9566a5e3719718d831350d78f7333181ca26c299fa0a9a202b25739cf -0xa7c8e0cc3257dc85e8988e17fc090f34d7222ce2e0658f918e10d5b570898bc3 -0xd17f006e132d108a09d263a29dcf86cb97a0bdc82571e3bc885d3ff160093ca1 -0x7685708fb5c2073adb9480da43b4ff9ba217136073f60870ef059a2ce4e2d503 -0xd0e2007c49ef752e6050d7d49338b0b2f08f4ff1cc85a551810508afa2bd9e29 -0x72a7c049ffa7a1a686fc84c92a9ea64de9516cef1b8a73058b7fd019747dc766 -0x9556e24e611aa7cddab3a60d81bdc1284273f8e53e25c6db9a036022aeecf629 -0xbc8951cb0f56ec3f56522700a4a542b133d440b8ee2cd9c30c890cf6e386480d -0x04f84fcb4910eef2095f3f4d2f123423496695cfb43afb678a1467a589ec0ab9 -0x24d0ee2c63b3c208b718fa73b4d2ef72c96027d3055307915681280b651a3aff -0xad03bf44f2ed41c7e2f9b65a0aeabc928d663d6a7854373857511c2a4172baed -0xdad6cbe6b8c9b2b64835883aa48522af8a30064bfe0a8178900d7fb364d046bb -0x207eafdbb08e54adb219bf9e8236759aafa2bafcb83b0b00c431c5f6addbcc38 -0xfd3c6416424bf39de76da43440b97612a163e72dd4f3c947da4693d40c67dda5 -0x99d6e6cff93f1ee1fb11c97ac6e665e74eb5a1f961d3ce22320d863717270931 -0xeefe5e9295cc43bed4a76fd30a52b1f1d33c07a0de5ff673ec50ea4a36a97088 -0x7061f647660e3413cf2047a9df60286234a9b3001445edbd826cc057b3ef8e9c -0x6be2418f233b10418d719b4b1c7807eeb87f2eb71a9e99a9547bd8c64befafb7 -0x4c7b4b8501c8e3c829a255d223433950ef2602b1d50546b31a70376d11cebc0d -0x7c5d2361b2b246f5692b5a4223067b19cb24bf22383b75ecdc285cc6b6a19518 -0x4a4076d3c4f2fda693fd28afaba64ac2ca195a8d58557e1b724129cf74ba4d58 -0xcfd3483e7df022f5190f7bc627164b7ab8c2cca22a47b69f148f39512ffa6f54 -0xe51757bdf8324c28ab2fee6367ee9dd0cef94f15a5ee6d02eda74920950a3828 -0x016fb7c6ea721708efa905f121e200929be0457f25f709e8cb93f9758ee6761f -0x7cbfe7633e258352f7d8d8e8134825a96599e61d7f625236decbaeb3c48c5d17 -0x3e6d6c97c1b156e412c459375842f6dd1c9a89afc1a9f8fe2e2e7b217e6db1bc -0x4597d26b0b9b82c54bea5e95b84096b05110584183b9b77d8369c1abc72034d6 -0x55ff959479b4def6b7c21825be71639bdf2d48eefb2c76847c2d31e19c09b6b6 -0x91845c5b39b15b7ad56fe75ecbee27824313e3e61dc747c266d30eb1e91f696e -0xbfa6cb2b711ad61251b25273e9e7b5d663422b909bb26fef6fb2745fcc4e5afe -0x3d5196aa7c4d9ad0a7fbbbcbe92539d38d3aabfac5eecbbae097773cb113ded4 -0xa842edcef0d4af1d0a419772a26ec79cb45a9c0fdd6fedde8db68e7025ec67c8 -0xf25a9873562a58eb9f525a02c8687d85e18f0261427688380297e002fe3f82ef -0x5d8132292e1119d74c6a56ed373e6a2bf76a69d0aad2966e9919408b9d393139 -0x8dfb34e393d74b5de9c7c9709f5bb1d22d8d671a4a5ad5919e2d5733684e5cee -0x72ae47b6c9f99cedc42fa183eccb76b0386a3b75baa705754d9ee1b10da8730c -0xc0f0ec2e03c764c1a672c87bd554bed9deca89203dc7d1fa3243d2ce9442543a -0x3db60f26dd3a0ddb53aeaf79ac5d8c6869a525701b4a37a444f1a9912c4468c4 -0x2d488012d5a48a4c8aedde53036335f9da3a68faedc3e4d163a3fd1b5f3ff628 -0x02b0cad264444c7f93c2b9094c9021a2f069357d0f0d4edb8fe19bd52796c3b4 -0xca9732abb16095f62de0d4a745d27e979cc5edd4cf3ad705de896cf007dd54f7 -0x94897afdf8d8ca6e2a971f9c09256f54c2dfa458894a1818ab8a08f178334fe6 -0x20665c9cdf5752f6e0973a59246937d2f341c5b9dbc8dba0463015264adfd73f -0xe6d4b36c4b04e134fce7cb4a339d70ac5f5f1b35e0a3d515c32bd72b11d18a8f -0x284c43dc7e1cc71cd41c64b5f7e30498410541a21ca167cbbfde561b9e741be4 -0xaa77e2819501a4eef34c786c8babbc0f056de593e4fa7cd9b56c89978ff513d0 -0xf13389a07cd22f85146cf7405134f38705a7599a80b7005d5e93c6e915b8214d -0x24f9cff138fae351c052fa41b7546be936acaa0c58f80eec3ad9b99a69261f2b -0xfefb376c26b9ad33f3b7a41d7c1a575385fcbec215cd4a3c18c60de3e00718f9 -0x03d3231568eb65fa823927a14b721054355a5aece8927d12cffed92540abbe12 -0xab24a2282722dacac82fd4bb06eb03ca74107da5c7010bf72438f42d8e596106 -0x1f052f8e906ea44a0bd0bfd99cc5d730145c4b185e335a95e6d5ad3520f12bc6 -0xaeeb3cc0aa5b09f7957cbf81c3c587b70c14af0698a0611463440036088df31e -0x235dfdfcecd3fc71e66b1d759af235563174d40b023e7f3a6840506368f091ac -0xa848164fd8ab205745663fed4380cb0708063e27f8bbed26250186cdb3fb3e8a -0x72823a6dccf711ceaa3c5b666b2603b7b76b0b8afbe8fd1096a58ea710d42bbf -0x78332fe01428a18605f2c6c08542f07a5ee7cf33b50f3987905f9cefc33c7981 -0x2daeeb5c770e81c2f5853641eafa5fe9e802dd784aaf17c43b26244e0a1e4d8f -0xa76015f8245adf998324ab07e51470a035120ceb405519c5f690ddeb9f096b28 -0x4cad7d3e690a1a32f1ec7af3d148a06524e07aaa72e0358e5f471b3410c35087 -0xb70e810d8ea94f91fd97530f3e1e1906f21323284f088971a62e3b32149c953f -0x0db96e98d205a9f0559fcb29345068f6c937330ff827e22bdf01e7ec8fcecb9d -0x27de3e3cfb23572dff21f3ca417f00fc01b699d7ee3a657d826086f397ed85cc -0x70debb7bb2f11e704928ee0ab062943ca0ee2fcc050a68bc55cc44cf250f362d -0x0202f1433f3e1b9b43bf9d2e15e3006d379ebc0303a71caff6c97b4f6d876614 -0xe767b78bd8a2b61beda61f31e0d43dfddab79c24bf91272c8acf96eced53a312 -0x9f8a0c35bbfbba38f587aa8fecf14b915ad1d61acf4c9a842fa3305959cd5922 -0xa548e1adbc24a9866846158fca8863c9d13a7fbc63d1777b8a11afd39f4b0571 -0x33b77754490c59baea95b3f6f87025fceca4ed4b5b0a020ffcfcd42dedb69d0e -0x6a5b45a9b51193c20b6b89b10ed06cf85ff5639ea97e32e116dac4d7bccf0a5c -0xca1c54006ab0de565258927afadf3ee4b1039c9fee27050baa84ddfc837980c7 -0xe9a5e2341a7b30d908a755dde9d2d0fc5ce951dbc782f2e9718cca211bc20e53 -0x5f388b80ae3117b06db39b51643a1ead97a6d61870744a11523bf77ebff40db0 -0x1b7286e81189cf596086bed66bc95509e31a60ff1fe8fed8ebc269308148133b -0x6851f818dbcf84c62383dc62626b07ad47fb9ddc1833ec0a6dc35d863f505f75 -0x39933d67671135f037c25d84807041d2c43321d78680ae8ce4b53f11a8107aaf -0x0093556a570213021e77800cbe81da8f4889548307104f610035356aece92288 -0x4cfc3678ed5df498d2d2922e44a42faec5f70bb7b3dfb4d11a17d1ab0d650e81 -0xafb3d23e1c45ada4a0b2ac619fe050035fb2b8e71c1197e523c8bd88069e45e3 -0x35bcdba77dc21c201458de5c93529de13cb0e5b8783d4915f472b608b39089ec -0x9bde8922ba553daf142635df6357dbcfc1f9e32bfc8c277724dfe085e3567eea -0x02d8dd2659ad52f32d5eadccbf0944284efc985e340dd4abe6594090b19f55b4 -0xa52cb5e11371e6ad428b08a331d7faf0abc1830e8ff0ae855cea7c76762e8394 -0x161bc4b6be08395a986f760ca951f5af02ca2d095ec642a90e6d4d2a9654e41f -0x482e3080b4c1e944f4b7908bc34d8218a18b92b1b91b477abf25af15607de8d9 -0xaad771d56a51ff7423e4b1b5fb6b9618cb952df8423afcfa85a22060c09fc96d -0xec34826a00e0b0d45385d522c8113de18ecc0b5b420f6849f07dea3c482d7b89 -0x73a1ed8b644e66b27e134e76384d5e2ff0818d3713701afa390c92a8fbd7808d -0xfa9c784050dc1a78e3a80c6beaf788c9acc6a91061c6f7f48caad9c54d5efc45 -0xd3a3aa491ac8dc42c2deb53faa7824771f99eb33301e515e61564bcf3dad8184 -0xc87ea3fdb1f97fdb14a1b4451ca90c99f858614a45a6d993a1327f100a0b4a4b -0x6502cf20c729972ff2cce26e329f8782ceef4797e0a77d9f68b5b8e21e3bd26b -0x20fbeafaa477451fa43961b3ff17b540f29b6f3f6102f390969109b618e410e7 -0xb5bd951d132a74c235c66b4e6ae8963fd9de054c9f28701265e71dca2bd89956 -0x2390f2882b47babf39d220e58335221203f8c4d3e1fa405020e7e8ce684a370b -0x33c495675e159dedffa9d27e16c9025e569a1a20e9c72d71d95d38dd003956b3 -0x65df6074148554e7916306d9c3d7a29c6e3297616974d62e24aef53503154f4c -0x8b1a3a61634094195e8ab09201bc0ac9487f1a24f9eda291f2a952ac70ac6995 -0x2393058f7801ccd8c65d36bd0781cc5db0fd9e197f3f9ea00ef6227c0ad08f2d -0x3bf7c97ba79515ec319a8b2935e8e3d6b33fbd1534948a2fef90163bfd36ab62 -0x86bd63fe0c480585f60b5b9e9ef561a4887b166ac0de6ad5fb0aa67e364989bd -0xa812846f212a7796fb2270f2c77aca241c4f6533efc500f82c0a60e121139f04 -0xb7f7c78c7a1fb3db46474ae8e008f8da61f87c5e4554906cd4100e506893e330 -0x561b3c2c46e8ca93aa46e541e6707966489c2ffe9ecb89379be01c48b1aea1be -0x1f7a22f24d36f62d4dd45db4ebf4db324e473241cc6c50af7995ded3398dca92 -0x0ec744da0416d1416da45541691d529381908ad32ff1ebee1074212e33b03efa -0xd2affc590ead3ae9236e77b595b65963a4597ac35124bc855c18ba183ce553e2 -0xd42d2f504e8c92745b9b4347cc813f951775dfbb59f783c7d64232f33aa9a40c -0xc7f6f551af243ff66ef502f80b525f2da80854d9887a165e19dcdd843530e918 -0x13d45992e3fbb5229b707797c60b379e69b3b000d1bc0594257392afea89f19c -0xa3618671c89e85781cb3a84e52683625e9064639925bfcfaef079af99628d2a9 -0x619b034dd40b3b07f339c5a4c10da3f79ac002d2a5908d7f82d9e3665a9baee5 -0x23da964725af221855fb7bc40ea13e03c2ba0908e0337dbfae976446e7257c96 -0xd5c486ff6b8ac77f6d71fbb8e49093a55b6a14df27a78d2a8808c3565a945b71 -0x5c21eddae90b13405a0b0dddf471cc5a266578166b808ce43b614bba4aa2bc1f -0xd80e594a95690d28e05f272258ee22c2bb72166feaf2746c553aebf8f1bfc7f4 -0xae2a3feaee0263c7e015ff553f3559033a700c7f2f48e34f2d1b1f5e61d60d8d -0xcb07379f19196b37df438a25c4dd8600df7aba2beb93251ce8b5bd6a062dcf4e -0xc7e8d85605241431ec9af18345979ded6940b3d38a586111f0c531b749773aae -0xd1a2ae6b3264c90f9f0e8923449435ff004cf7c74dac3d8cb1fb7b5803efcc46 -0x6c8d2436a5b002a00fc1e0edbc9e8e0b224dcf8afaa8c554fca9fe41eda6215b -0xb4c3f30faf08a254cc0e74acec4d551cd737a87f3d3c5049975b55f6856b73cc -0xae15b478c01172c2a96e8c9664bb6f9f55cbf3ecf10c42d8b6ce193f6ddd3705 -0x71810d5d3c9aa15f485ac43d0da91aa8645c50884af2dbbc24fd35d6ef5afe2e -0x7109ba013412a70c7f2db22b625f7a908ee37ffcac2d8a7ba666d4a6fec40e7a -0x1d58e0f6c58f9d4d66c885dae1d14e7f684e04812c19f756c0126cd47ffce33e -0xc991cfe0628594c09702c50aa8dbe8eb1616e36a2bb1686f4ec92941f705d577 -0x3c599377f3f651d7f1c84f86a6437b582213601f10e29b74f6a52166a9c03427 -0xe75f9c4553c2f96b8aa5d46ce647e622bee5c9450f40439f207446a52b13bc19 -0x0eedeb77f9ea3373ffc00886137691bc20d071ebac97e140a447fafbc53407b8 -0x4ef729f2e6b8df57cfb5fd4a8ab5ee935b2a64275524285aeca877981cdf127a -0xd3d12c9b26cf7e4651dd76e8f8fd446d5cf586b1c1d9c620cdd82af5335d696d -0x6c69f942cab4a0cf37508efbaf68150d129ccc176f7d8618d2667b001abe1006 -0x559c8c832bdb7f382f894bd41a4673e258a1366ffe8aaa4300cfb5325d7d56b4 -0xcf41084134166de797565ad9d08eb058c8157aebb8541264b244a222f56daaf4 -0x129039ce1785319ed68b41a9709fadb47e2947aaca029819ab456bf9588b6299 -0x7bc2bd86467648758be33bc521897a1834d2ce2dacebb935c2b7a9616afa88b5 -0xd404a4a53da537f2900435d6a5458b7043cbc8f83e33a00ce731effe56aaaef7 -0x556a34831d5ecf46c478f638edceaf6600017004e32d472595d1270640d7a8ab -0xc8888697382720e7abf17d21ba41c865141fc67aaed7dbf29eb279a5c038a0b2 -0x82e5875cc0f6b0f6c4f690bdd5b8fc690d6f41430ae97c669f4fead7ad9cc9d4 -0xdb9f789e9e955ec896ee1b22d717fe4ae6345912c7f65c0c85e2a599aa2eee03 -0x0afaf1506ca3b5bfafa1d09bdaeda017986f61282e6367733fdf9e92cff9cd22 -0x12e40e4c40f9137835d92d18c259e369ecbb4980189154b4d01690f77dfcb055 -0xc2775f84a741e5b9ce60cf0f52a7ae1b84c2aae38a1154373833c572d7924778 -0x6d698566b7787412c729fadf94a12b3625169912f7dee436c9eabd90b26941b5 -0x3eb219a8121d5c157e69f89d94cb5135e5f1636a97311422ce38ac5d93504969 -0xb7a5b4165259808e39601fbc7b024c3c45df095c8baf4eea5ee0eaf95621eba5 -0xeae1ffe26d28206ebd560b3631876ae43f9c2243b704ad5726adbe3883c64459 -0xd35228272905a71bb0c89b8f9575908136dd68041087070cb16b8f190f8e9230 -0xf874408e94cf5789d0f801ac3a6f91759c0a36a4da4aa646d7325a259083d0dd -0xa8f853f6816455bd5ab3110907db4baee9ea8b96283d02dd7b7b63ee113b8b9c -0xb412a51ee54283c4253b9359b97ec2091513b9a505282e7658900bfd606f9e6a -0x8089daf7831969ce55c8eb2bcf49f78758d7585f76b35769af720e322eb2e1b9 -0xc1faa835e1947dd8ec41f3621206150b575d65e072e84ee6b953d660ff4e3ece -0xd08ef73e326170518dc8e5c32c9cd221c82096f0e51a7f523241808517f3fc78 -0x8b98b9d0606191892aa773eb7ae91e60443a4e1f6718c2de7489f2635d25fb08 -0xfae57e62dac7caf6d76e4972808e9d942375241ac74aa5abc563580eacf7e0e6 -0x712c2d652457fc99b2cb2ec352bd20b14e421d2a4d63bb118b52190897745fc9 -0x676b1bf435213cf98e60a6168e772dc9d9a5666373ea8852387794487d45d797 -0x81373c721c972baf61f6b3035d7fc5b6bee53a26c2397fff6f60204053c9def1 -0x56552f43d35478611d320c376b13f06e70161c4d3f43dc6c1b9fe2abc6a92f84 -0xccbd3a1cc0313af3224e989fa5937fee83a0f5f4f30103a90a8cb2ad8f1f564b -0x4de08b8da5370bcd85e52363bc7fcae0a54a360e4452b560f7fb30dfa0af8f87 -0xa36e6ba3f48963f3528bcd8eebfbcbcbefeb9dea3c40dae8d79e2b6d32061978 -0x80606914c7b3235ccc1e93c71bc2dc1aa11c109b5314c5dd7fca171ec7c0e92a -0xd27791d4e6c9d88d156ab86119ec85e486e0ccb2ab85d2be9e39fe2b02d05a20 -0xb3887c671a4c8c2fa78a4266e8f0000ecf59819395a7c4b6110f04d71a960dfe -0x7cf2a07bda2760f5bd656525794a97a6fb87ccb27fbc9eb3e69932eca93ad072 -0x3006c094e0f72384d471cfd0a5ab0d6ceb67f5217e397464a09b6cf6e0fc5717 -0xdd2965f9a3bd6fbbf7273dede383e823a5ecbf67ca93f30942fdde5c3af82566 -0x11c8c10454038636ee4bd927f2eef56d606379369dfdc57f37fd532429f30827 -0x398dcf00ae725f70952f348d7465e5e40a0a7d1c4dd976a1088ff738a0f4a89b -0x1dbd38801bba5803d531733046668a36bf722c4fa245d378e5aba8474e3a9666 -0x116bb3b6d981ecc0b7bfa9dbb10cf720b1594c4589dcfe1cd8249554e5ed3e56 -0x9a42a33c841e04cb2391577bb25edb093b64fef0c1823222a3d531cd7114d4d7 -0xd5593492e4cd725eddd7666345c103389c1974286d610297b370d31b7573c3d8 -0x764c4a51f8be619963593c7354ad9e80727a37fb0ae8952fbabb4de1d2938536 -0x6f9bb6d364cf6a9b60f76c49e2a55a43943e1e592e769e9f0ebd99ddb8f0d9a7 -0x53b2997ed6d7abc46b5dbf0c30146b1469f8f722b66a22273dfbe8693a59ba94 -0xe0ecc04e46a5149082e252500e63331871ef3a1c2d3aac6f91d353b25e3c6976 -0xdd6380e485e6674086dca677f6ed0486fc656597b467b15775a1ce239149a21d -0x4266c0f318d3e045d282004aee69d438cc07b304256f82eb759cc3cb09538491 -0xa27f8306e4889ea62f63c6dbf153b3acc1090d1bf2bc187d6f3942a87a8b447d -0x0901f8e0ac6e727caa26418b213b95c7ef20ab96b653222468420096456522f4 -0x51253514048d3854581bbb5942c5f503b849f6dcaee88859a8626a11a5607fe2 -0x017c5bc21b18a69ec265619a7dedf5b55cb7590df1659d966203ae7961ff6446 -0xc3137fa27cc1bf1b15ca58acd86f7d50fac3ff4a188c010598bdb55632b875e3 -0x046fb1996c2f1b53090657ea4738cd8a17ade5c55f8d35b3e118d17ec8c26820 -0xca847e7b309cea38a58a6ea62c7f193258019c2fd30973d801e760df0bbbdb07 -0x083f747e6e82ecd964d6c7dc786384a3595867e4f8a187342d3e627472ee3668 -0xbefaef8ab0e58313b675bbcf4b85162aefea801deaaaeb3f32534a2cd02b7b76 -0x54fc3d456404d596afc91f8c96ab2ba071da8eb609bad1c2c5dcdf3d810d79db -0x7eb1e07cc38a9b7ace4ab41f11cd2174916d2cad7fba4d6d89175370a11c1816 -0x8306a75dd2290ebbb53d643430c17f5a4f371df4efb69f6670bdf2c027a95478 -0x6f9e6164ced3551e7724a8ec762a87f92393b13c5122b86a0ffb443c40d99e0e -0xd6f8f3f6429304809040f674bfce4b5a0719eaa0fa5fee1071c782e7a0b93217 -0xc62f11a751fc400cc90469d7ea21b748b46c3303cd78d5bb29f88e55d8740499 -0x90d0aebf9ace543ab242d02b26cba3283aad37e8ac831303ac06df43c1a97490 -0xddcf413538bfa563d7157d9a8961313b7888fc0c0061b9d927971c880f84cd26 -0x2d9e04db393941cd0e064797f1cdc933a2df393c6c4147046bf0289d862b506c -0x7f1267f4d0710b8803739f0c9f6fe9dee8e929095aaf9003d91e652b6cdeed2a -0x11e447479188b8aaee45be54e518b3ec8be6ebeac396ba20f52f6fdf686272c8 -0x0c6be102692cb0a2c58cd2abd5da4b0bc24a6eeaf815f2bafd7addddbec26efd -0x38829e662b40678f169bd71cdb2e52f1e058c87fefad027191cd023043a67e3c -0x183e8b0df9e7301255d4ec5d7c2d228cc67ff11cdbceed74d30a4523136a0b2f -0xfe172540216021aad305086ba19970866f46f4619f8d2a11d4beccdca07d653b -0x2562aff1147f011cba12945655f7950c959661407092191ec07edf686a69667f -0x7512454d93111435434f034e61d1129334a50c857dc1aa02b7046cd59f0ee738 -0x91e0716e37a6e4541116393721a0081e1aabc2feff573a9fd8cbe084ab27f8b5 -0x468bdb618b42a4de999c951a9505ca07df5f0440ad057117b13e5b7ded7d54c8 -0x69f35e213b0f07325d37e688b1b02c5cbf43d5c4d987e1f69445fe33384320b7 -0x1a80b6cc78c0a583cacd7e1b6c17f2856771d83a3bfe5e4e11bb7bf9fab07c90 -0xb9dbfc43d40ed36c695f720212b144bd72976e8999be0c6b60ec1a6e2c3e90ba -0x86c870f557bfd4feb71353cd31b2a15d3b5dffb68277edf9453a3156bb8833e7 -0xab0db592a258c350e47dc89cb1f531594c581b7130c53b52c23a6e1e108624c4 -0x3ab596e365294c33037fa200d3d0cbb91285c833994de45c4b239744e9ebf110 -0x9a02a291aa19c732de5d5733a1d8a65c6f3f1c3c6688d5cd5c1da90e36b68e3a -0x2a762a1d01515940106c06f3660ab26aead7de2d54c65e015dd9e047a2119000 -0xa1031ae74d68017dce0f0e9a6b6aac0b42fe7ba928d7115854c6395b986350f6 -0x1cea559c99f784017452eda4666fbd08578020aa20a5206d53ed9931856f43b2 -0xfa2256b3db75da3efc9886491291139510cc383cf09b6835118c9f0892eaa3e1 -0x60b637031faf6f71c3cd36b78736a0cc54a8ecd306aaa599d256cae19cecda3f -0xe6edfa652340a54118617a6598240e5858dc994ae4e9af5389c88f209fcd82f3 -0xc1d6693dfc014f130e9e19c3abe0253fe842abd9b1a9c5ff408df5e188a5ce9e -0xd1691a13b17d6bb02f762b5657c53ac3597422287ef6425ad11808070332e42c -0x899b693b6c93385de118e5bf0f7807f6ea1b36c562ba43a9b418395de4cb78df -0x65aae44062676b7b572c582b24c44c91a86dac7aff620c866717edeaba6993ad -0x1aa12aeb2697b1fb5fc488910d650d49fa73667f21b8edcc17cf64b30cea1a88 -0x0673123eaf4325e4a4b3f0fdfd9cc5f0cde531b0df71a763d622e25df1314570 -0x7ffd87c3eb2ea4f35c52aa136cb314d32bfa110411623ce74a5619d2512e7e45 -0x1998ba3cc28f2bf03a9cb7311b963e5a97cb838b78f3ddc843d6088bf1da72ad -0xfdd1612847bd4487cbb75163c49de9a1ed90f1ba9d43c21d2fda9edb14f2e9f3 -0x418d233e2772913b497dcc24eea79221ebae9cb5d999ac41c559a293c6204c29 -0x4283664dc71a5a57ab3c02a2f2d9e66d1ca5e00900a02544dfb64c87a5bea4df -0xdaf3aeb5c2c82b1e4d1ded2488df5471c83064c1c904add95004f60c11472d4b -0x00ee257795a8b09f44bf6eca4e2a5a8abaf3322eb3bd5b74f9e57bbfafe7c6bc -0x5edc3ff11f8f188f8fad6fdf7046171541929dd00cc697a56c5580841c370127 -0x0a122a81996a21c7b4b71c727b191f4bc224a93a6a9ac69c3a1f8bd6130119d7 -0xb0ad1db9b74895af491690983187a1f81497946e4cf71155a540751e2d1d8229 -0x4b8a2a537d5f425bc4fbc9aa62ca7ba7f2cd7a8a7cbeea3b03c2000881714517 -0x4cfd1910ec8015a15068398e3b96c9a8262f0e18b7c677d3861b8417f9506621 -0x9c2708f0ea10a07a085591eeaff6a8bda766f80b410f8286ae81961922131dfb -0xe422c90e26bd30489b91462517617adc5527fced63b6ae8f0d1e5e9cfd321c88 -0x4f1492c8beb16645e4359e76eddabbdce328aa9c3ca24368cc5629c7ecc5a7f1 -0x428b0a426971d83f39a2aca47f0211807ae1044abbdbd80f2788c5d15e953a06 -0x3a4524ec16890de9470c8e8cf09e1583f01c4f3d312db95bad28a03a5f5b6554 -0xdceaa50d7afa055cdd21d4e799460103baf1ec8158df1b450d3f4795d7025930 -0x4d0af207d6e5c30632e44a3633f7d28d7f443abb00facc1acbba7757050fd7b6 -0xa9ff0bba26c425ce2e3b6c80eea2bb034a0400665188a9c845ba89eb68b29c90 -0xf5cecca035be232921ef907ad6ee137edddba637dc990ca4e892482762d4b7f1 -0x02dca44832147e64196a4a69e7d33f86d13404878a23f3e07a17eab9c319f90a -0x391f0c535d4f2b83dd739c1cb8613be7c7d19d499fbcebe75d7951f02acd264f -0xc62d69c6be9784897c34778bb01506fc8128c76ca9e4695d4d0a8cbbcbdadfbd -0x86c0e846895514812b3102a9d274a433763ee796624abd0575da32bdeddfb570 -0x4e5ddf905551b2be96d6935151c99d80ec61ca1e08e332f4a257ac1157f157ab -0x84c4ff8b7621e6fa75f9fd5a84b22bbfe6e03c3334f0e7be2efa611004454eb1 -0xc9e0ee7acf2dcd69cc0ae12bbff729729007beac6c7c69a9efa90ab5e01d24a1 -0x00d065eb9913bd6cb4f0ebc0c31211db8f17044080fdfe9017fe9b7b6463a53e -0x9e06529d79b3e0d76692d79aa0401b8278a62792cbf2e43b848b9a79e6d8855a -0xebfb59018970518fc60eda3c9f911d2ab8f07c0b67a6bfee681cbf4e33236394 -0xa6ce2f919cd17f7c191abbde12d289d0422fd1e408a50396e4445d8af1289665 -0x28fb1942b3c05def94026f3b9c29ebdb2159f0d966b53f20f2c7cdbdd3d8b9d6 -0x78cbbe3dd3a8ee86485da37832ca707d86050b41f9ce32830804c23d52407768 -0xff5ad9644d662579bd45e690cea2be8801bbaf5367c299f578065c6bbebb2186 -0x7d1b9f5e930ec27a46871199d29031fb58c6139d748c70cd1f9ea3705f4685f3 -0xdf05b361ebbaae3408d8ffadc7aee7d9a60a29000c44deba6d33993f83757f23 -0x6da221dd92725adaf529f95597c537ceea0392ebe1f8673112646c47bc7cf11c -0x60d0a0d0f7ebb5eff47f609e5fff392740bb489898de31cc8844c9633cbc1d06 -0x1a4238ac251197d918e84a513950cf49d43e326b140b6672f0505213aa065251 -0x5ca879bf5befdad032b19fadbebe71c32b2b68760bd42738636e0d36a40a8618 -0xfa86ef4f26a628533c6683791d7cda0729169ca614b482a53e46ee1e13c30719 -0x3ed414dece0cd66d14a5b4bbeb3829c04f838abc9e34328ebb43ee04fef54459 -0x0ad0614f07d874e5e71d121c891a8cebdce8333d427531f3fa45bab07e5972b0 -0x858657065ccf640ef694152417baa5853f86736f3d10b6cc716c4299f392763f -0x120c1e7ae4d8d4481c3ba4a4739258f8bc116eed1d970934962b2d0613bce16c -0x526333af513e364f1b86b2662a0e730b06a423407ed385cd759eaf8f42cecaa0 -0x7847b3213b5dd0d39c46446d56c806a1eb10bfb464a688d878ea7eddf1c93c33 -0x5d44dbc27a13741205c45930c399340b92ae837af48317e1894fdd055fe77240 -0x115f1dbcb1ee2142f798f46e673c175ae4210f33eb7f6952b17790b3372f347c -0xc8149bed3bacd6abf8c4f309be8a1ac9673090fd3171f7106195decf9a62a65b -0x8c93f01d9486b8a9dd98d574d46626b0b5bba7a7a9ed3653ef9cc04fbe0f981f -0xf1be94ff09fa0090d2705266e219dd96f5ba047a360203e228c846cac881f621 -0xadf78a570b4cd9b9f7b6171705e36d770a5ee60cef650ecc516e01d242d28e0a -0x656c81459aeede106eae0247fe2f091e60ab5f3896486f4eaaf68a30c2933a13 -0xc8fb69e3bc5e90556eb9a44ecd1b677306c75ca38614f9e02e811f4657f72e04 -0x26985c17a71ea6963c343968941c4e49a63a76811e707a1f2c57ea43aef0af73 -0xb90916969cd05cc3b219e8e4b21d48a1c7093aa98cef0dada1a3f663fd3db9dc -0x7301e568876b19d24d0140dd2d965001dd4d4b6f115e2fd0c12dd36353acb20a -0x7d4ef30e952089c3f5d2230db2f1726bc934ba566a5d23963bb65215d4d320d5 -0x57e6406f71020c2945353c971a10f8cd4f447fa416dbb35cb60260089dcd757d -0x61aa31f924ba8d08fae29d8de8fd69aeee33bcf3ca3b0fad3055f7d32841d5c8 -0x54e2feda8e8712b54fd8412d7aa58d00f5ca588827e6c66df61533c3204f3f0a -0x0e5a6464a80e555d2cb86eebf9c8f45049b0d01b7c1885fbb38c7735e0d80736 -0xa9b3e423658f0444ea33b3e3b015efd083f7c0708f7b5cb7f34f46e0fbfbbaf2 -0x94ffb64857f72c22805b1309d544d2297aa1fc1b32b63d757c29def317a61393 -0x827fad7425a9f0ac8690b573381f6ccd0f790f35304b24ab4f792a69ec2f624e -0x2cb7d2366213d816f0310b32ba6ed65b9b3d4b8017c3c3008548cdc7c2431d69 -0x738d3686d4a64b604f22bca2f4d50bdd86f4b414355e046f3c17f24953da7bdd -0x7b92e52be453d2d3483283214323649f9a3ff8091a6de157c93cfcd29da0575a -0x56659099a0e6cb64a01aeedb835148495228f1e351799866a1024f9d5b0ab42a -0x1b526d1150e6f0c402a4d1c096587532b7bd3b65d8a0e35bc5c29889f31db10c -0x2905ead50dde8885bea15d0912178117d86a3e3d94b22f321d3de6a7df31f6d8 -0xf091860a1ca8d5726dfcf497376b30007564902b40c280b29c0c28169c1688fc -0x31367af57c906351d6d3c7b23769b9bf75f5919ff26ab2fcd41734a7aaad0abc -0x5129dce1d0a147ca1b83a2f1994925bb6a04bce1ab826db0d646fcf33b9a6f1c -0x9b419936d9f5f03bcf0158239623e5440e72db0e00b5134b7401c4bfa02edfc1 -0xb23f2b748d1a18b4fd177686eae0b9a38714ac4378ec50601bda5b1e376be1db -0x0cf12474c27f4027328e35e1b3b64054253837cf7396df3bb495896d0fbf0d44 -0x4b7eb1f6ca973e17edc720a74cc879b0be97719dd41cc8a89b052f5839b75852 -0xc10d3b066a9c1ce2110ccdb8be70fc112cb27d402a89743f85d33a91200a5568 -0x4e9a2d25f73fc6d4b8ff698cb1598b19994bfa7f6c8782b81bfe6f7906c899d9 -0xc1177076f687480d4a224c28b09541b1f9a07f0cbadea39415a2ca1fef88cf73 -0xbfbd4c9e39112372c2dfb27833425ac1605403848bb90ea9821d87a7e562c236 -0x073a2b55e1deb80cf63b25381527fadedfc9ec0e95661b681cb6a64bdb1cf5cd -0xfd1fef9c8450bcefd7af030d3ccb4801b363f57f5dbd32099f5c1b6390e75efc -0x3508939192c0a3f90bb17de033dbc484871ffdb1347306c7a20614de22379677 -0x8f208e59d585619f2c6b36cc9272a1c09134a77e86cc77b19eb7cfd4c65e7e04 -0xc08ae6895db7ec30ab7a13bd6891a8a7d63091227cd1907f597ea8217914ba76 -0x00819a30e488f7c67b95bc679c4f1a86748ad7a4f62d4027e5098e46b69607ce -0x233039521cbcf157d6fb214dd1d2c9e607c99f4e380c0aa3819b7e3c159ccc2f -0x89c5d52b659d3c9e07956c9a383480a12ecdf6b4af2b1c8ff9209db880faea92 -0x1876616ce2729a3e7e682ce6a3e54af662af005d29819b8d1b8a7ccd6e2ce35b -0xf302d048b4ce55f941f53ab3c45a274744c177bbc55cb812bdf148856381cc9d -0x02d888a222c2d1c12ec7cf1919b2a542267d407717cb2f481d5b7e27a956fe5e -0x4207b3ad15d6ca3444e20cb0e7f8917d0171e18f7da961b14185a1439a0cea0d -0x10c83a9f6b0c5fc04c522b13f7327f61ff97e16635cc276bc871e4ac4f29653d -0xce5834c438479cf31ad8d786502e2bdb19db23ef77fa4e6b47833fa3323b5b10 -0x22c82bad4b1547369163a053ac0165fd23addcdf256ab3c188863c5ff7174219 -0x2ddcb683195f51f53ef105bc0dbb35a1deb9071a289fb8d7c9fe76b73677a457 -0xcd388c88c24bf93423cfdbfc5ce2ffb4ea6d746cda783ff4713bd2abc6dcd035 -0xdab9ae7b1d0b498592bb66d6470526f25426b0e308494a9fda52be5365e8b6ad -0x4679081d1414950bd6956986cc25888d784d518b03d096baaf0dfccca3181042 -0x073f66adc51fd8f110a93f9b04bbde57430e78088b5b0ef2236e4ca5f35589a2 -0xc6c9f2813bfdf0ebaeb9d05c1ecb40085b17ef62c1fb96b051701cb6c75b0ac2 -0xed8893b580408d2d9d7560534744e2c97d5de441ddaa00728f5c73a53f715c20 -0x93b7fb72c78e9d8e91cf65b4c7e09c0fc1c1e6113aa9462a3b3c25e69794f5d4 -0x65b162770ccfbf054aa0377228e45726892c4fc03b214d5d56fad3de07cf1ee1 -0x12cf7ebfc4166fac9ac69f7f3433b7497082ff996910fde571fb1d3de6af42ca -0xe6e4fb290e7c05d68ea749ec9adbdc16b6dede2f1190fe550830f0a77321a8a0 -0x4cd10a017bdab700ba6cb2683ff55f6aa9afc65420888f37a695baabd3f236c9 -0x3a132c4b2036da3ab16fd8f16457436dbb25002fc23071040e4e642421f51063 -0x80c7c5dcbbcbd5c31f7e9375f693997484f9559736161e9b43a0cfda52812d94 -0x9b7d3be8edfa9d95cb804f18282f3d1666f8c40bf6b315d93b3d57b8c32d349e -0x0e0bc7527dc937a62fb962293634da135ab558fc3a1f35fc72250652e0281682 -0x72f3d22164344bae9b733581676c95ba2664b64e7c7b50ac5c6655c1ec9ce324 -0xe61758c08e5de93f91aca45117341ea24484724445ff15bfcb9619df0fcca9c8 -0xa84b3d78039ceb18011f054de4b5e1d9f4c24f08a12b0cab72d51b2c5e14c25b -0x40b8643d59766215c3997232652d0eb5b0b7927e474052aee711ee8da4c78fef -0x3820f2caa021f3b0991615d3b9d3ee9a7aa30998bbd9653966bd49f6543ca48d -0x3d926016189ae5c92fd13af8d19e840b653acd959c8041e9df1755619f5a014d -0x772c00033bd9283388aafa978b7d35d122e88c19ac35c681ea1c1b45b045f170 -0xa81e971b08628348b0b65b9061ba70b63bb787d937eae49fec35232c1d46d220 -0x736820bcdbfeac3d2f40d4bd39c69724a5db8cea7962f09139c103d4bf2bcaf7 -0x2f8fa241e55cccdb7765935c51fbddbd57f4e0a410365258953fb50204c10976 -0x7ada4ca012db5147e2e90bb556b2586c8fef0c38e29c739d5d4e67277e48a872 -0xdc526fd5f325bb6261267a0068f4b6736cd9de1e40e3b965b4e811796ee2d0db -0x4cb37608491938fdccc9f19b203779c44334c264671be2e6d70a4e5ef4d7e449 -0x98d26a9225c646c0ae3c47234a0c158b8c03a3a38c2803a689c8ae4d1c32bcf6 -0xcab9e360d6c2e34eaac20cfe0101d91cfecace1944f9ce357959001de0421447 -0x6f56d44d2d04a1e0e2736442da04fe578574eea2d3e5c961bb49f3edc166205d -0xc7319c10a595e240bd1a4a6beeeec4f62f8a527745b273008c9a40fc1a1c9d1b -0xdf0782ac639babcb4d8fd184072fb17d1c12e3e7255821b8231764d4f53c2e0d -0x31c6e5640cd9cd2b136c7a11ede0850768514e8c368584679efbf3911a468dbd -0x5604a118b04b75648ee365f1ed6a7d5a6bbb496b03ecf9a88125b6a31c439b93 -0x68ce8fc3ba26584392524227e9aa517c8a7ad14b467b9a5387e269a8f0c5c5b5 -0xb565f6b9d27e8d12949af8bc87a58d3d98b337f32644abeddabae6c8c6589f17 -0x3346ad119378634fa377819e821a3d44d68455366797d6a08b51f1d405bd41b6 -0xfe3dca47afb984146c31c626ffc9087d818d0a34b3fe83441d5bc7b191f6ebff -0xe7a0e6c81f86e4f9e4d8f4e081cd1a585ee5feb6554f671619119dfecaa5195a -0xd2d5bf5e84755669ea319dd141fd3c57a0a4512d3d65f2cb35fda0a79cd92b40 -0xead649e66507225730270e7bb031eb4d0c4291997ef03efbdef6715e39a091b5 -0x50f11bbf3e66890fc6307da4e1199a2dc3f33e4588563814018eee7fa06e2f33 -0x4fbd16e646596bb993b98b69555a76aaac287b2b7ca3776d24d353ba3eaf82e5 -0xabe28402ae026a8fb7f3f152194e0f69f1472fa8e07e49054bdcf3d1e2fc3ca4 -0x88324e649c2f9e49ae0b938b265d61557e33566927466753599e420a004f0258 -0x5f22922d79d88af590dce85ca05348e02b09097c5eca3909d5eb4876d7f2a2b8 -0x3fb9275a358e89914059923dd23ade03792704c454a9a8bff30e21987ebb7270 -0xe9248978f46382b26c09110de9149bfba4ec6b093ad77b8dfa135eba7f02aae1 -0xa154625debad62630fb96c65cd16c2f75de6b91d9dac47ffeec97f2e77c920ac -0xb2ed37a8d52f048b646b97691307d7d6d246b90b907e61da6e23eb3b7779cbb8 -0x514c49281b585a2bdddd4f3a3044e2d3b4ec27c74aed300c4c9c6c9cb9583ba0 -0xb289a54825c9c88b9bf72dba52d923b2c5727894968242ba1f3c61ad8a339930 -0x8fa700900ec4df01d613f6279572cf1cb2680600cdd7cff7082d193d1f201876 -0x50eb619448745b1f6ce2f45ed0793e100a35bfab0c81cf609b590479d4541352 -0xb773a41759e992256a291ccc2192f7e18fe8e13bd7f1b92dcd03091a0e4657f8 -0xf86affb1b6f1fb746fd2dcbcef6865ca047273cf0d1e06ac4de22c9c1c50d522 -0x017e0a66e4c59da7ffcb41261712a726b54444469727cdac4f33840679e60ba1 -0xf4fbd9e7f69c8245dabc6e979a7e97609b989af1262485d567df1bfcb574fa70 -0xc1077399668e5fdbd3ced76b2c0f08d6a9f25ec5a1261708802614bd33cc4b32 -0x8c80d37457cb513c3bf07e30fe6100b40ef82c47103cf64291e0059305c2ddf4 -0x5b6298a868bf0f747799a6441fabd62c6f95f40a7304ce70e56c815d9a71698d -0x696453b97e6ecfdaab1323c644ea9dd5091ae76c85a87b9cbf0aab0f9a060bc5 -0x67f3ddc33d53e1dc4d93a883a5c33d678963c9b50828bc6bc6529da0082b3231 -0xdd01906388ac42a689bc5a84fa0296b7b1f3c0dfff6381c832c7894986db33fe -0xade67fc8bad28074fac5bf2c57f64b6286d6c8c6c3f1aba8b4ac52e80a460325 -0x5b78219e456e07555a18f9cb05cbc1c9e8e123cdc4c6e0b6b570af94ee7ff6d5 -0x4d2272effc86b022597e9b34c4028286a76c3ce0f9dd48c2aa46f26cd8082a0f -0xf72cac961076a441c44b1f4efd0ff2db8cae0ec6d51409c0f05262bdf531e16a -0xd76888344ce5226dd56cb682423b6f4e9b657c6eb1e195c72821212336e15b84 -0xbe1b189e24072c612ce7e4dbd7fbb54239941e9e3835a173647e9ae3a8c34eae -0xa78764d595d56ce91e8b8600343c414582ef1085167689475807a8934279bb54 -0xdfc688774c3eb84eb6bcc14fc11a65c19855957190aa698b58081d62a6e9c7ac -0xa549dd8cb485c9f41a0eacf09b353c972b0e073cfaa3a5a9bad740b544f35c39 -0xcf8678302e5f8d427431b84e3ec50a60c7627bd5b778bb71bf500b9bc5863513 -0xe0c60827b31b8c2e1d1f8dec0c198b104f23eb39b04958633b44d6f4f36da562 -0x660d35d106df1bbc243f1f2a77a6dfc55566cb7524b5a09e3d756471fd47ed2d -0xef9fcf906d7793eba5fac4d1bb829aa30755358033c296432cdc68ec85aed48a -0xf4ff67e5772f7c478b26e555cccdd10b12420bdb8d57c5cd1c71af94835d8b3f -0x523a09748aaaa2038163e3b40ed5e049b12b36cf21297dd2328e6240f9662ca9 -0xfb12591b92f1b444802595abad5faab3b21bd683d41ff8c6cb5ebc9eb937c281 -0x79ca821ed3adc10c78bdc8594afe079d21e74f1535659ba9fb64c2af82be5b0c -0xdb0d0f40953827167c2490b8806468f9644f3e9ddfd266cb80786ec1c2b248b5 -0x4a6714fd273088bb1e8f6948477fac64746d35b0f8a42b1f94b88072d9c09d93 -0x7164822d76e83367c9bf3166b0d6b624a1199f4d59988aea2a7a202249a9c1c8 -0x3a026f978afdf30a7a1de46aeca56a28223fcbc74fe96280d907c3710f5bfcff -0x1201bfa190fa5af0b45c49916934a4231bfc7c82b67e315ff5c442169275d9ff -0x5de6b33cc1fa1dbc5cd5d4733eb7503c47f9946e901541778cf817b1345e36cd -0xccc63e4b533e56b5d0280a0ff39f7a55833c16aa4cce06d86320631baa5a7419 -0x93c6b49d126fcdbbf4795abe7f3610b4318c076ea409c7b55485db323fc26507 -0x2e3dd101491f72f2ec301c6f276254491addb80882b643578aa4d8ac968c4be9 -0x2c3d46454fb74ae668f6ce9b0c55bac1065470716d4c0c62c07f1aec02efbf13 -0xca9c2e86cf66108be642e921b429cd7c8f4051abaa8c945bb5be74968d391dee -0x8a41cea1362bee22626da8dc1e440f2dffb5ab8526771f1823840c7be4fb7627 -0x34a84587b8e96d98d307ee96da63d5e00ff6cd573e21ce7b9bf9bbafca32ec39 -0x133fb69d0f614c99450d3e7243ca8f1ab37f51c5c2edfb64dd1f98b532f94bec -0xaa5f4579f5ac98a8fba189ea9b02a6d968ff42eac6e325860e2f3e290c831f68 -0xe2963c919259b96386803082d280d48a575aefa3e5407568946e0068fb16f31f -0x93adad0f379220c834af74ab53487e8a079ba40b8c1068ab694c4ab3c26bd923 -0xd0e500327b3e1ff5c89f86ed8b58e64c5094b7d599962eab05ade3d55971d48c -0x77299a87de58cd170df36edb75a289e0e96da39defbb414cfdee5a3add13432f -0xdbbb6d30d5efef65d3a27e7475f20449b78b44758e70c6d2f47bf4b95fefc51c -0x7cc506d0945829beb45c2acb50220b6890fc78c9d69df72b0086f333871c1091 -0xaf5bfd9092c0cb5978b2c8df82c2e5ec84d039f09dfcb95740eb6f525d26b878 -0x32fc743ce6b121c11bdc1762e0a4426757451d57fbf79afb26d2292d5ffbb464 -0xb97a240ab73b902b80e2edbf36778ae4a1ad8c39bfcaf5347a6dbe610150609b -0xf5c8c0ee53996605726f3ff53678b3af97ed9e4c5ea395ba316051744947432b -0xbf7776c3e0e02e225b9fa6a742d31d5d120ec4a77987d7482abe81b17c5ddca1 -0x6f9ee56891c6464f2d40de96b72a18502c342b70a162fe52718957ddbee4aa3c -0x093b6f5623103979d7ae998b232cbb63e241c5dd7aef58725a2fb04063c5fc6a -0x618bd479c39d0c31eb59f9447f86c9b0febcb1fffe4ad1d576ef959126b84f18 -0xe94c7d0b611f3abd3595cc039deb800400748a6d2849ee931a13d04cb1df882d -0xfe32f3f0804b47ff76e03d1ac45624c2f00de8a6289aa97dfda3df28cd651b40 -0x2d4aa23773750d0303b6bbe6d3ce6758c18c17a934649aaa59415d7c0f37512f -0xd4ceeb8abefb8e21a9251c44e940f343d81d371ba351b19d7398ebde011240cf -0x26f2e7ed4631cd77e450be054938adb6879b13caebdc10d76ccb9680d9694bec -0x57fe15d88b56222720ad21e183dc8d98b2a24a6dd27a22912b74fb78aacdc7d8 -0x50987048c73682517a4e1f194f48278916918d279e0766ae2f746ece5f860039 -0x39b718b54105ca253806c8e8692f6c474bd91c8b8b9c61537cbe67e0733c3a63 -0xbec578440f8de6cbc49512a56a7e30c1fa1d41b56382c06e54d7d11a69d205c0 -0x86c1647a4ab765e83779cf674e2a35db18c5485023d6010f94f017acdc292519 -0xc733fd3e7e99ca9e9b8ead269bd416cf0df6499246ebf5a03ae51cea36a1651a -0xae6335ffb1d71ab48218faf264d93343ad171839da9ca92a248a2c0a8dc57751 -0x3d8c9fedbc3fd588cd9fbfa274b0df263a9dea852dc013de43f7018f13718890 -0x1f6453062623b0e02a3be928e4bf92fcdaa074ac6c399ff34fd64d5c1e61f880 -0x4b38ed2b0a1457f981f4e3f89851a8a92966bfb3eae55e1c0fd694a9b2edd876 -0x36b057dfad6ace4501c6625d724c3bf1944238859e7a7e90ed8ae47fe05235fa -0xa168234308d8f8fcdbcd7d7eb4abcb2a610e5249b819754c1e88a244ca0f86ee -0x420f920ca632a89dd2cd1094b82517a6d23f656e813125b89ddc4dbc33337c57 -0x3fab2d5b28a1cf60e345d25eb6e0ce66d65c68925e16ed44bb6ceb8c4ab22dec -0xd37d80a6bfca5c515721d507148ccaf54425298ab7f95af236b74c55235366da -0xe373b358ef0bd2da53da8996f184cc28e8f286e4630c8170ff7dff4ea5b2cbf7 -0x615bbadcbd7e7049d8ad97831d23ce8dbb6cc312382344c5ad129b5ca36d790b -0x37bc96ba77716a117bb743bc70c34781669e76c6e975087935383574d9eb38e3 -0xbf3c9876ec0de6f27faea1330dd113ab8439c8eacbf3baea3914745238aacea4 -0x0c29ef8802abb34d25020d87013159b0a94e000e54c869d723c51a4e23ab62b3 -0x5266194df318ca12f3779e13c6e5aa4b0932e2164be24ab6c3b2cddeedde5d07 -0xfc05ca9b7630d5dc639c178cfa54b5dbd30f5a9ac98f4abdffa55dc84a879d8e -0xb5587846d44d0b2584a136c34a8a7418b22c0ac0bf60e5088b336ae41ff71c8c -0xca9af8a3bce0fe0bc3b4e638cc0d87138dbac466cde7ccdaa143830c4c8aaad5 -0x0fd4922b2b335f70c4eb0aeeae770033c7dae29038bf69221a0e40f4525784c5 -0x026b98d08fcff5a5aed91c9ef0b85cfe4990cde3c096ed7ebcc557c84f19d581 -0x7f0c01965ad40acdee974ef010c489972734895b76badca96d67ab81cf804dfa -0xccc699f8f949bf1c04282ab5a1383eecfd15498ab1f1b33194cfddc33b2646a0 -0x1485c7a4bb05cea234e45af246ff4b907595e29bb228d2c7eb5f961725e90f51 -0x2559cff80b38079ce3da17b2955b2b86dccb2528b40996e7fcbb0bf14cb6f1b8 -0x724b7660f85f6577ea6e6eae42d1d07b2d910e667a13e3675a34836a86f7598e -0x4c8414a9777b8522aff62188f2c1d4cbed1fbe2fc2214ba8945e4e1cdf61dc98 -0xec1b27ff8927c8b8fcccc1fa94f8fc90ba0924614f383bcd0ae11bd5907bedf6 -0x928eb500821dd60ae909690a78e4d35bd8b49ea11ef5a40cdb0d61d5f622403d -0x6095b163da09ecaaaab57ab5e7ba9e258ae148067bef45dbf8094f6a9793d1c6 -0xaabab3c07937b7a2a513489de612a1e1c8284269f4aaa29036724f674b5c28d3 -0xd9061d4a1c27857551d59ee7394f5ff9813c89b3364d0d9dd4abf401ebd85b58 -0xd2ce650395f4a8753d1aab81b79901ab8ab1c684e6ee5ccff4588ca85154fba6 -0xb2bb9f826d8de68edee7bb1e58718e1230eaf5e554066cc634dfe3f10ca4f13e -0x66630673a76738c313c6d5ac6523bd59f78e08f5ad6b39fd9c2a60702e153bd7 -0x48b13ada5256d46ed4526e8c4f2fa91f1020d7a8abf76ebdb4dda1a8987adb1b -0xc5ae72c5ffde170cf248d476360e6223cced70714f3e3ef3565bbb8c60e8e048 -0xaacc55633eba7d977720370fdeb8e76a1489b4604b5987cf5913dc2557398209 -0xd4301cf956fcb1708dca8684db11fa2c638f530d947710fdc4ba985557dd8d83 -0x59625e291a1660999d094423457bb4bd2b2a8631c5c68cb0ac1ff5f04594cd4e -0x2390bba3c0470400bffece648076f4e75138c0217d013ebdadee2cf37d872c5a -0x5ebbca21a7699a987288a14df6367c2a7a27d888319860df1810e16ce165c1bc -0x3503549f235b85137ea040f7ee29a6a55cefbb758b3abdad1990ab267e429c4b -0xdf83f916b549745adca67866c286805e3a8fea55d3351ebc69327962d8dec8e6 -0x045aaacbfc1a3b53eb794fda5fd0286ea05b1c4400b1e7afa1df07a1cb1a4f80 -0x719bb7ed1520326ed6f6664ca4e00c5f848b938714f5162620a52b339e1579d0 -0x9daf16afbb5bbacc5472fe928534a1b785443375d81b34defc8f1b185fabd89c -0x06a520e290730530b9bdc15a00a0b342a972e9225b462e6437763fb3b5d1d984 -0xb690d14f1f42f942fe7e6ef1402c0c634779d54f12234c515e3089c0cdb59c5d -0xa2a7d5cacf9506a9f556414b19b7b795585a01340a2c4dc0f5aa05995ed011ec -0xe11b6d17441d1742914a7a9d3ee6484e254e2e5611ef369e041aa5f337b8b554 -0xdb82e36beed2346b254b79253d06cfd8627d7ba38c956a3a5945b1b40bdbad76 -0xdbf5959774c2d137383d6dbc8644ec5cc00c28a4c28fc8a567fca266ddd4d351 -0x658d9f965c7eef248a402dd161d2e0f6edaadc234fc21848c4a697ab6b8f84cf -0xd9fbf423e6a08a24af12f6dea506b7d2e998759ba136d29537107e5e68eb8386 -0x01685d6291b0104325b70a14e77c6430fc59f2078f1416d374364976db919e32 -0xce3f52abf93b29b0b14686bc95932c2f7673ce70688d176cf016a6d0659027fc -0xe84666f6123652adb029ff015246ccd3a6cb1c0e9914883073be2d6f3b14be00 -0x9c24d8b59a2b62d95e9215538f33a2822fd0b84069b7e908a214ab900b439b8a -0x8c9ada2bcaa1830d10baea1a50a2d47b177bf92fb2ac9788972ab515398091e7 -0x2d0507d36575d2a3ded80eeb556d215369408ece8e1608063683cbaa456f92b3 -0xd9ab7a3f52a7d35cf8df6284ccb1281bbac13791527a81a2536c2567ff99741c -0x9a205552a8ef6ce8be3306ade42a72096d2eeef23d8ec6856fe83afabf6fcc29 -0xe3ecceaff34fdd073ed4403811e8332c42e8b72ccd7b587695cfe57cdffae035 -0x2dfe4c11572236812ce24aa6ec10dc550b9f1d73b4ac720715927d06fd504e13 -0x29e753fd5450203d3944dd0b8393b219e4177b5cebd7c8625d5d3583a6099e54 -0x53ab8e4c59e5ca871f02845d25e6fee6c18793287dfee466c1eb012fa17d464c -0x1e9ee500754b6a925184b64494312d34462e97cb5225ce4c854ae00f2a61b8d4 -0x1bc839157d8594e59f6f79900c4ee9cb8acd1ac6340efcea4205bbc00cf98170 -0x67cfcd96f860318bb7ea3788ecd90e46d17fe4ac12b5f9a62174c41a8e820318 -0x61fc7eeac1be8f27ca849756e2a9db3112add26a882f5a8c54553a4a8a6d2948 -0xfe22535fe41cdedfdd0115951f9ac92083ccdde5b902f81dc84b71199ac61f9d -0xa68efe652ebf1ccb7ea5dfbcc01a07660f4d25edf1551af536914a73e6c21040 -0xfad77ca6afa982fc5c9a52b0f2be3f0be89a811885bcf4bdfa42d4e7952a750a -0x98b3ddde8a4cce0f985653ab5fac601b4319c8d464f1c0e58ca9690f47ac905b -0xa7abb3253ce32a8b749ed951eec3cb09d57323311d667ece535634fa9dc43e5f -0xefa199457b604a29bc1eb40c0f3edb9898e634eba931a4b440463143f5e5cb19 -0x9b549682485805a48024e465154c25686f62704a4b7022a64aeb0ac2c0b089ba -0x2e1d18b0520982422e151b15b5661bc3a65a7feb9c0f8721aaf816569b5764ea -0x23ce765800185f435b9162d4f70eb05cd5572d73705cf0fc5b2d493024800b08 -0x4462a41d2006f66513006f0a36fda4a69c3480f65155d4a5eff268ee44a79770 -0x5ecb7be9679d4a534c51152c4cd3a4ceda1d3a7009106e90aef2f407a8f4a155 -0xe959f8923525569580070821a1bc921626faab3997fb26128edb8fa8b7d9bf43 -0xbfb876cd0d72005c58ecaf69a671aee4cca46b6ee7f08a8bc09b35c489749b0b -0x56fba507634f5613f957cc15a12ad52b81467f0d315e4d477bb33e8a4d75e561 -0xbf88d7f5bad3e31f5162299e24cd9bba7efd1da2295ac1d1a8a5d890b2fb626e -0x5cfbebee3dd1e096f8ce15ca2b5f6378c3256a24107295a30e22620eb0c256de -0x629df289b7705ef924916a24d3df39491c47aa843e1f2c6a2159302f9049d218 -0xd22c16e54d665d96c264d1512c8d8f6312aec8b63359869a6520630ade9885f8 -0x18bff5604a6edd9f4e941ef8c5b37330dfe4859eac6e65bcf778cface4419ffe -0x3176ae00c092d7f5270429628c1e7719919d1dd66583f8d7fedb2fd0e756ed96 -0x021026e6711765dd54b26ec8b118c6e9743a90b6128468031ae60c4f229b925c -0x77baad2f41015cb7bc82d1fbd3f8a6b2b80a7435e4634ab08eec932ba1f84166 -0x2eb866f8d7f6b9da84f5d47f9d8646650f1811018348452336ce383285eea713 -0x28dd21c3befe901af0359c9ebf949f1afd360aa797877efac0e8ac9040217da9 -0x5b4ffcaf5f86e4c282b672cedd1bfab7564b4a2972103b52588bbeeca9165020 -0x8632d82bdb1a160c21ad05e4f3a158f9e51925888ca77a8e4e9e179e816e3cee -0x5990ee7960d29b9ed9c7fa1b5e7ea1e4e344052cc6905c7f333961ddf2db56a4 -0x2102e4bfa8ad542a232e464b57d9bbfbf6e50a892c75300893469f9da73aebf2 -0xb9bd3805865b5f0336f38f9dfeb21147d86f19453857cf71e918ddb54f7ee1f1 -0x58abaadc1b1575a928722b6e608194593107ed0d4ca34fccfba55b73b18f5c13 -0xa1842ff882af92835a9ec5c5d479bd3532e442869adba5fe45072ed31de21dae -0x80d0ab100688cca189099a5a801f989303a725a8bde625d42742583a125d2e73 -0x87b8aaff25e50b735fe2f69f9be09d3e691cff98d009bee36b089b6339cfd6a6 -0x3b3323488f8168a636e855f79f8aa3aa7d877523f7a1faf6c0d21783a2478eff -0x92ad12ff1f22b682e99d35f9f4eb0f32e994ce103ae61e656fb37d5c248f2d6f -0x4cd3cc582329d50e4b4473180973cd4c7678dad54138b406d9e1e4cc0bda22aa -0xbd327b76cc38093d7a453068f1dc26eaccb6f78ef076aec980f4d57f438a91c7 -0x3feade8e62caf9914cdce98311b7ce63577cf75cb51f90401fa59a90979feb05 -0x046cb25819b1f0b474bfa9d76050f3bf9251fe3af859857d1bc2067a1598995d -0xa7e97b621ec140ba88d62e7b995b06ccf21bfff6c3f73389bc8ed11a2f17c8c9 -0x0e93c363dbb06cd8ad6307066cb3b08c669358f9e0fab095e73ea903e130f34b -0xd2088def4c365c7abadc293e01cabf40a3a551af792263b2027b2b67c6f2ba4a -0x56a479b2b74b71adcbf27cdde0c99baf13407f7066242d1b767bd8305d38d49c -0xac4761b90dbb5cc41191e27a7d512cf9b2d1f3afd84000b0aaaefcffa1611ce1 -0xf7ee214fd58c6aba064ac0a6c6fa9fdebf169972c85a57b909a5f87ee8dd01eb -0x93d597621b4431a8c0e2dac2fb286fd4fb2d6110040162ebef6cf0411393da58 -0xd28efedb51cad1b196e4bac1eb95b0425a82de6cc6ba687e6903bc0cc405836e -0x63236fba87e629c261f9d3128a0010e5c0f799b83b1104c10f168c0b2a75695e -0xba9dfc5cc3f7efc24f0a5637ec3ed83e9aef5b4339b4e517ba04c612eaa7d89b -0xd16bc6102b1dbd24233c1266dc069762b5fea3616b2328e0c82d79d28bedb630 -0x33529f4f1e2e51ca9210b05cfa522b60218671f9d7063d622f72bb8bb8fedf53 -0x4de0e55daab567a5e359220790f8b72f4f76c696016170c2b4f0fe2ae9a8899d -0xfebf3636f79718678650d9c977eb6e1646bd822551236e9c6c5afa04d35cba8c -0x5d0bfa8295a66a9a78441565da8e7c268ad68205683652b915ca5aada841d0d2 -0x5a5e81f87cf22d6e1952be325df6646bcd196c2e1393de0b5a68053e7ed1d37c -0x6a0cb400a4dc38c6985c2b141f85bbdf7c138f11435127070a798331a35ae9bf -0x8f7228f79336452da0b5da2ca888d6de6c81d62bf9ce797a8e24be714d23928b -0x57c2f944f88ba44aca025f0b67e7245e5b13ded7c65dd5642ef6bcff9bea28a7 -0x7eef23fdd93145297647d5349a1ff62b7d136d6c3d8ac2b7f79fb676b0daebaf -0x1c4d9f8624e0fe4109d0d01c37e0de6a4c78140693475d280683fcbbf05f2678 -0x9af2facd90ded1d29fef0bb623ecb08d9238e89d495e41fca9bd1fb2250474e1 -0x93faf039f8e7bba06b4627142564024bee110f816bc6a83a2d80ddf822474c72 -0xda85a3f7c977030be83ab0b4287db5ff250ac3abf934ba1d15aa4bd24dfbd229 -0x71bf0f5eff2a97bc2308988b0a89de9889a27c64d65aa3e486a70ac05e69cf3d -0x6f5bbbb6c2ad77f80b92bd1560a167eb322ec1cd6faaf79b3376a13774e8a70e -0x09f4fe7f6c69b6ec3dbb74615f125c7853da92d2cd7eb752b082f446223f9d19 -0x2f82e437405c96118ee15aca94e0e78c0598f8dabf214ff28551ffb0ca0d3b34 -0x05f50eaa24f9dab87b5420bf73a6e072791fba52a70e81230fc6b08005cf0b8d -0xeafd49ed81b817de7291f4c184168bec99f911553486cb0842bb8fee287b0510 -0x879fc40ee2a8b24358a17fef57231245c47a555846bcfca8732c383f5edc554a -0x7475ee0cf97bf7fa69da71ff5f171fb13be713c77e425d85b25ddc7ce4b3ee08 -0x9f4d936303e2f579bbda885211b22f1206c9607fe48ea4be8480f44e29d965e7 -0xc70ea3e0f01bca7cec15e3263e1e82cb758aaf56ba675cad555d98becb3cbac5 -0x73e736b926e75e64256b6cde0f06718be1d722e22934db220969289e9e5dd89e -0x23b88aa9526cd2b4661a16e14631eb8a9abe0f85f4b53cdfbdaa4056e66b7a37 -0x6fc7e1ef5bca56bee788fe8665e67612f347dd7873f3c92685a761a3b975cfdc -0x1fec266048ba6eabd994e9c197bde2b5c6a8349c9f53cbd0274275e066f68cd5 -0x5827f6e053f22e84650e9705877a39fe5b010347fd877a2b65890312f8ca69e4 -0x478e3e10a4117057e07600dd85a3259f53b8d1da09b9291dafea845d0b694b13 -0x5eeb4673e373eb8bc4d50ae6daae9a43a361b625e1aec59c21c6548b69d7a16a -0xdc1fd33e85633a80507e81a18574e9772ee00bdd23ddef71a8794b5f8d7bfda8 -0x6178649db2eec8fa7129abc17bf0ef8cc8ab890998c452813c16d7b8545ea5da -0x67d13b7b4f05a1632b3fad72d7658eda1b8417e1e6f711e3d69d799e022c3156 -0x08e9a301d4e3103e9190177ce12f7566c24f3e7a8ff915e5f95b8274a6f8a4f1 -0xc233fc5af7dad32af1b7256669c7bf1716ed120a1a2f12971b3dce042cb8e98c -0xe9652fe576f96e7b9d3258890c2876a5bef41a24c2d113927f3d4316c247da53 -0x40e8e1108c55ed276b1c0f7b0248de437fd561af802b8f924401e9c4cee6a11e -0x175adc69b0ab7b5eb11e2ac3cf087bfe6bdca4f1c71db78c6fa01e4cb5a98a28 -0x02d031c9663c45f0c64e0b925e9f94bdc63e6ebb2a24cdd6e48634104fc49b7b -0x2c1be9079f48137cfe7540d5a4fab1266c6f15130dd4f8920525135c3eea5835 -0xe505e443276db7b7e7dd77f35baee08796e08995a4147c929242b7d8383d61db -0x888cd9ae2c960117a8d2c82bbc12c57003f6a106acc0b92186ebb6d003ff8b7d -0xea197f980a3fc3c75b005c32db86b9ce73a9ee4a4cc809d368d9c68bc505ef8e -0x0346c05b2f6509d54b9d08a077e76c0d7d24178127390c3249f7d549384de4c9 -0xa90614c18fd444259b5d44a6a172e44c727a55031abbda33da51b81bebe31dff -0x653f9cacf4f4d65e07b320d8a60ba2399d25a48de16b353f0d65290ac9ee9ebc -0x6e291e5eb0fee2fbc70b735f2d3aa0117fb89ac51d508950abc35e2e83c85e85 -0xa8eb2501b538adb373a727dd965ff04d2111ba11852ffa6ca00a51c3405e0dd5 -0x6f6c44c9bb115fd5f3bb0520ba2418eb6dd127c8da3f0a2de2a4159a9c6dc006 -0x0f9059230daba33f2e2f466688c2cea1945ab15dd93202dc5bc7fe68326f5180 -0x9f5e27442a29b292b9b69c79ce1ced4f1e07ddad19b9945298c78d743313ec0e -0x1b5e04865fea5b840b82a6e567359f4bb2cff1faab291c62c0784c2f44c53542 -0x16946fc10db17e435a1909ffe601727d92840875874d3e858d9d2681d0c9f554 -0x23beddbaf8cea9142631e5e75fd6a41b241af2cf8656a221f94c9819974024f5 -0xda2e569f30171d12d8553660e30d4459184d26a13b97aefca585f47dcd0bebd8 -0xa3a4cb1f6604b57f72c1df0eb2a33d14fadfae1bc93be297b6d17a2cb9602e55 -0x8c244a044beec15709bf7f61e0c479838abcd8303308b585fa2f9f0c753b647f -0x6b3b9f4b4191d9c6ac654eb1178108a4e36a44843a8449f225ccfec52d5a28f5 -0xa650f13af4fd150cb62039bdbc4f3b37581271ee00799e3fccbc266f2dde2a1e -0x6962453a242d706dddefb2331561497036a8718aa9168d7ddc13e506d6c34278 -0xca60ea9927c2d43b4b90d7b08876f3218e1a4c30a17eed4f62a20724ad30cf42 -0x9126e43f790b7e7cfb7681df148aa8d1dcc04a32e54515906d8882aa26892f93 -0xdb043923c5dda0274eff4781d44249a03756a9d2f237f3424809e260d430101f -0xcd03ffbe6d46c57423290569bd5d2385f20c5e7ac0a56cd4b90ff44548f398c0 -0x198a133b267969ce4321d1cd7ba0da43a19581e51dc5f5e689e904529fc37105 -0xe5fde14d34e24a37e467fb714685b7d52848c4b6107deed32ce242d75be17a11 -0xbee553134a44f6f620aa2bd801f9915dcfc2a97e98c2b18be6d34635c3f8d25e -0xab83259e17e4b8d13635329d924a2b4993e89201606cde5a185420a9f80a5bef -0x3f88da58ce559be044821a7d053c74fafd6818fe8e865b74b5bd6b70e45c351a -0x19f9753ad263c9582460509a32a9a4c979853e163d3666dd3dd0a5296139d4f0 -0x4cf1c37f3a23116d2cdb2f99a4f7ec06dcc4fbe9bf706f6b18dd861670692b7e -0xcd3f6cc912ee97a17594d5f31e9265bec9311efa0d171d6151ce5605ee7fa5e8 -0x2dbb4603c2b6f56851304e3bcfe58eab422c9d5b50d068ba4d4be9edbae6326d -0x1363b0f6922e59aebaf806f75655b6c4b0bbd78b985bc83ef875499a3a33271b -0xef0be2bbab10afd218ddf566316fae65f92f28ea322c54aca04e9201fd29a84a -0x8332696598af5fad6911f60167662d016885a0f404d0e8cb9e4f84b05a52d0be -0xe7b8262b789df15e3410cf4c7f46c01032de6d196e4253c24242d70173c51328 -0xf96d39d6201e0f55166d6cf34b0561b6c8b6dce50b50c780936021894cc361ae -0x1f650bfb2bce6984402ddbd0fef94d8d23dd3ebd259b0efad0f176aa340c0464 -0x03ac4b91ae0215731de9748c64f1db487a9c3d67fe2f4498d180ba91bccff1ce -0x860ea9c160f8340f4dfd4c81a4a9719f977a68738ca2e72a2f3e0f07b53eb6a2 -0x6255a89cadd7e5f4b70727084340b8acf6b2e65d0e99dc13f048c396d44736e0 -0x4f0805f89dac430588c3ad73e678689f7858e7ee92f570d1bbdd1e399216c29d -0xfe87019c931b834a7a5d79bcad5052c529f21801c09442c1881112de5a80d767 -0xd90bcea949c5a08b97380c730da0a3e7ef41612e898c06b409594409ad0300fd -0x67877d7df1a154401db28059de5c700003e3ea04df20c10265161d2df0314e8b -0x5dad889046e61f7bea2420af9b546e6b51b6b90e581296728ea0e7fc39a98e33 -0xebadf1aee0cee8e4dc8cb419399deca20f93cb9be1202a5a959736a518beb7b8 -0x0f02f4f6d9dee26f4c803029a08ac8f399ad127c5dc6e781f48bfae718953916 -0x1e68927821f57b04cfc2a1b6d6a3c7ecc3531b86a6bf150bff2e2b57109283ce -0x63042aa3c38131909aaf46a9621617aaca3bb45b666da946d08acdb8c6333f77 -0x1e773d0e3322fef1f7c8cf0d711aab86f7f194eaa6639587879051b6dac40af5 -0xfcda5b75079e702bd67bd01565d58b708986c28140a1fcac437fbd38be237dcc -0xbbe82343f403363fe73f27776e58fe257029202101af76ae486eeb43c54c561a -0xe1631546bcf4446904334a3a48d709d7e3a7f41c3c224872dcbe68f1fa50dea1 -0x0e34fff1f1d6bec8416340c845e2e56d17c148dd8e262e434cb8ca537e069c58 -0xe9ecc19063bddad182b5601341de0b588d7ea5485a725cf13efac4b320cbebd1 -0x089dba0eceb73fd121978a829b2679bce02b64fcfaed3c21170e9bcc4d14617c -0xac9d6aee1975d3ad5d316e905cb01a29b06a8b5bf4e714dd023d59b1c70a6175 -0xcff9c3caff69572cf8f4517978ee7014785d2c53cb1eb09c36471cb71a71ec1a -0x122cf372f86dd8bd6595532904eac7fc2e9a16551d50a4eb3a1f9dff4bded68e -0x60ee5451d5f95f17bef5f16ee8c8430471501d155749e95b17bd8306bf276c39 -0xd0aaf29a2e5eacf5b653637c56f24b141e60c77600dc6dc309ce3adb3ecd4d62 -0x3dfceee26f38985f0fa9f1e3578da12fdedf8489bdb5a3ce8d3bd50b18481cb2 -0x007ff2a0140db876982521ea16b2e04452f8bd747b7be046bf899b6fe0098823 -0xd726226b9f480354fee9bedccaca4a900e208bbd869030ad69f2404b32807114 -0xc83f6d13cd9d7778ff516fe0fdd2f1800bf8ae3acefd33e7103b4e431a194a00 -0xcd5ddf9cc3ffd049b8a8d3b5604b5a1501fc16abdab7ba12088dd8e7e5e63922 -0xc299ecce8301a8618e9e7507b77a00c4f8b9d86caff2f9b1ec8072ae67443328 -0x899770a12aab81397bfacbf0fba45bbd2a058f6983f69678f756a0ba2baa644b -0x88186392bf1d001bf6f7a8def4c982dd466e9f68160d530ead9a8da38f96b80b -0x27d0ddea9c0c36f28a8b70d90573ed8fef50bf928232c2decf6b28dbb3177792 -0xe307a856f65746b62c33f90ee2311476457a3db1c9ffab81ef79a9ec7726ef8d -0x9328f5cec073a6dc2b4e2ab3110a406781e70ef78c5b71bac4b5b890f546bc37 -0x7bf9463d5199b9240b3d4e4d4ee3ab0b08a35a888908ba5f634cb9cf2bb2460d -0x2301ac388fa38f1b8627a825ab422e9f00c3af87a25ab099e0b799427730299b -0x5e1698e1116e987795a4628dbffd570c71a00f66544fee2514837f960f34d006 -0x1c506a4629e542a572eb52cd9bb815bd9cb99619c28aae70299932d20eb36cc8 -0x1ad5fd8f457ca922ab35dd911d719977d10a79c5a6cb0ad91fc1b59f825379ba -0x01ec28283c8f2c32cccfc3a91c1c4aad887db7394942819fac434c954809aabb -0x355e326dfa54d27b55a3f8bea7c691648138b1979ab729874d464eaf41eaaba2 -0x9bf83b8f5c709fddac9ac80ef7eeddc6f51a85a5146d200be8f61c7c57c75fb1 -0x8cce948860850909f56e9e8f74a4f055ef7cdd6d26d1a7c8513a002984dfc0b2 -0xc35a3c3fa7682a9440f5955625c30740d78f8487f64e74644b0dbb8fb4b27033 -0xfc93c392e1c303dd8e96509709a9a1c305f77ec60895fdd3ecc75fbac80ae059 -0xefacd4c52b8aa8701455fa00a389377308a00bf23857f01667d6ada98f8ed71a -0xec37d1d725d81fb7f65bb8d98a14d35b1b99a2a93899aa33c65444fcb9ab1220 -0x47c592fc6ec23034693163ebd32509e0991094a36e41778e388df5edc4477509 -0xb0b167c8ae83bd7d2836adba4b8294ddb8f524f34110ddfb01f1511e6cbef5ca -0x281d6e85aa87418d0bda136a9ee84df16fe85f76bf6cd15e5d3e3076f5b0829a -0x6f4ab24e58f13f42c6bb081025b34526440abdd737960893ded9dbb6519475ce -0x3b27e8413ed3c1c20e8f030691e00c03a114d2ea5b5390e48e4e6ad6bcb80691 -0xdcb774503cbcb645cf0a0d9265739966ab8a9ca5edc398f47536d1cedb0dbe31 -0x556a37735f7b5434aa51e63912adb8be3bee59f68c12b497e784fcb49bfa49fb -0xc2fed3d05e134beffa9aedb150221cc762d8464588fd32c59288be68b2b74351 -0x99640596142b1f2a4e412161e4d9a8b32e6ad9b80581057b21e1d7fa79e42065 -0xe80e440e4c8bba1ba1972910dc9d003b88e722c649cb0f570d299b8cace44bdc -0xfafa4099c18a5d7586db47eb1024dd6e672402e98bbdfeb9987231ee6b56d907 -0x0d31437f763c85ca82da9caf08f12350b7e397a01889ddb8de9e4c7e7a62ffbe -0xda420297a2cc06056c9aae4aef1b14ee382e4f6562507ad91e4836c16487c6c0 -0x4e9fa3b21b3d03de026d755bd79ab8ae1bb57347a45acee63595bfa941be816c -0x3192b82d9f3e4ec45fc3aed726de6f8948165eba6eec9a3390df028bf78abd3c -0x4359c5949c2a2c636a85b9ed34fef1322e8ef08072a97543628a3208f5cd7358 -0x5c5791ffb530c72c26fa3c9d5617de4117fbda251002ac719e73f8c58aa70f60 -0xec56ba1cf9c11e004f551f86c6684924fa70060196bbea528484f8591b9b9d59 -0xc5606a0683d2aaca56813b1b8e3fbdfaaff023a666f138e769c7de1ff126ab44 -0x8b005cb1bcc507c1d678b951de14f930891c312d7fc37919af9b7c2f5ed2706e -0x68dbdbec06b7360e40b7afea13b77b41b4465c927cb21b1ef6cc14fee61f7bff -0x836f655f07a6a06af8f51a29df5902d54223158d5c52fc6fc22aedcf6b140365 -0xb19fd79224406b764816c946f3220865ee46a65491aa64e9d0416dfb092193c9 -0x137497c25f9676df60e0ef384536777a2f7517db06e170b2efc31cabc4ce7e85 -0x8cc588feb9d1a47eb5fbc5b0d167ae4277fb87f4c6ead78b2f700008da99946d -0x5211729577991e3d036214a2dbe7641143a02cc61d65574a72cbc8cf1cab345e -0xda9493f1b49f07ab918bd0ea72090f408713038df6ec8b1c1e22c2e883ffc0f7 -0x04a11b5b36a52e4e34b4a5c284df70a5cb1d966265c95eda00f15bc179975633 -0x69bf9d8f9e20381f38fa05e3682c9f1aee0f362832069d1c98acf327b4f0ecdd -0xf62915f2268ed4a178af12b9f361325fd377f68011be65a7231ce0864b5d4e24 -0x37ec3c72bdc4c08edeb2d3de5eafe3a73dd51cd2c5b0afded8e442ff6dd42f71 -0x7af780278d9455a7ae88604b542068608e82b0c5bad80070b837c8b1cedc03e2 -0xae389eeabe0a7a762cbc82ec03275e4ff53c9a2b20517357f38eced91b11c7f4 -0x4b0180e8d63c0cb3097e37d164bd76d5e26f86bc5517bd08bbf1814930f59e06 -0x4db198156d22f5d885dd65ede9db537bd7f5533d344da9e26c5a076cfdc27a8f -0x73535a5680f98c4a828f5373a14f899096b445eeaf7ee415e0290c4c16e30ab6 -0x39bfbc3caa32ff3d29425c836d56bccae91b1e1bae6029444af277dead69df42 -0x6566df6dd4b84ea2f6c404b99ed5c29682c2b48e677f61630886f86103c5b718 -0xef560a4ac78fe708869613e10146acea8e077aca17cedff6919bc2777fb1cbaf -0x1a660e6dd42db8a2468b0f93d5f1b04624fb0007cddba99cbaeb09f50d84515e -0xf5527b12d89548aff6269082186b3c928fd37854947b7cac909c1ea45ffbdaf7 -0xdcfd10cd65cee326a4f7729bb913c98ab4e5c1296570f3864b088d36832244eb -0x68b3d0a51187e60852cd5c5fea56cd0075e01c14de856c79121b01a3c1217beb -0x4429196eae67ef725daef1c724d208caf22420b28387b3a521ee1bef5a053b5a -0x3aa66f22e4a69771586012e3870752530825c8624bccf9dc25021f56075e5022 -0xde1e88da2d1ac691d931b561a21ed239739be77b489de76c16d10f1cec8f352b -0xa177ad998f502c47d62ba058b65b102ba61a44bf1d4ee22dab3eb990c4b8a319 -0x7b3039a884468f8c09dc0524ca392cf4e58d7059b01ab654f3bbfe0a9b8dc852 -0xbad1fe776c1060f3efe58eef1ce8734912e9a932f667041e5c60ef8be9125a05 -0xe4f6486708071152f5ac9184e6f557530d5d065fc51ce0c70ed07e247f40373a -0xb54d63b8ec5cfaa4a1b3193af813c07936f823d8b91550ede3dccdacfb686d39 -0xf5a688b3f1a04946aa518d0291a2570919d5583d7276dbd022416baf53227bda -0xd6b062841c3319bf4ce36f00ce8f58162d49e7e85a49ca8001c515ace59df2ec -0x7a07e085b3c86f94ec4afb37192665b6dd99753aff92ebcc9c74e5cb0585b8ba -0x97d256c277b7e1b44ea4fd3c5f652c27bf96bc283923e3059116779f9223642f -0x0792687e67040080c13ec0b06538c07d0812b4d0aea936ef9d707f6244987227 -0x3eceeac246d2b663b6cdee50d312e6f45d803f98e342b02b2b72fd666bf3f8f2 -0x2e581bd16047080ec66ef5440542672c833e39deb2863eefd9e03d511610a48a -0x3b3c5af213771198f2851fe8a272f71f22524f83edc59530e52fbb78979b2fab -0x5d4b9adccd9c01cd59586a407e124a9d74545a5e8733f72ed8a53e154854070e -0xc8e48aa5847f127aa0dad3be7333f002369fa8fa1a926cd49b3b1dc1d5bdc15e -0x467cf753d0eadd76b116eb445244e2f0c0eeb040e32666cb09611574f40fcf12 -0xc36dc682fdd1e376ca39c83585ff39898acefe9496b8fc46b75b9ac2f32e4693 -0xee72f9974c7d6f3dba7b3dc88cad922f682f911b520185ae01358002e6ea8cb6 -0xa5829cd4dfb8900f84a1f7c3681a964cf4f0dfe4b4e23cd2bb3817cde0aa4636 -0x6924ea13e19f6cdea6d1e5154dbf19c304a643495ce2c000f26aceb1ed8c6ded -0xbec2f6819cad6bb1f734653d1226afc60b4f7abdbef6f9d835f3492cb9a2f875 -0x86911eb1988fa3d819c63cca9d19c99f5b5eec2904047a1641526228c6a7d473 -0x959035563729390f496711203744d6ccda43cdee8df9edf8840ac9ba97aa5088 -0x7384b337ffed8e6718f78adec9b047adaafec98ff13528b1a9e276a6eaead74f -0xa28a2b5b089ac1fae494c90847adb3fd82bbd9f6ca1c4f4e54908d6aaf66d9ee -0x2032f9ae1b6e6e49bf514743c5cc515c889b7fd1a9de4990f9348b9f42f23c41 -0x04d66bc8c8088567756ad16a7d165c21a4a7d6ddc9a68b1d77da03a6f08c1c1c -0xe67e74b46ce74901933c3d2b0312a4885232e2a497fc2072c189392633dab3ba -0xc72786ca31da4b0c0314e5d5f72e950e749134ee1dcfaa9bacecde78a048e45a -0x2315d93a4a9bb083bd3677131650760d5ddb2f98b357c5c2b81160ffddb25377 -0x2ba79d3d6c4be0bc3b403e8d63973d9faa44d1b8ab17f531376e96b50d0dcd05 -0x3268d0c45ac4e94bd9ac41cf6b6c3c256175b4057a4de0a7acd71d09eb04d13d -0xb0241167e1942a91425cae2d7a462ec204eeb005c7c8d13ecbd97da53c9329e2 -0x3cf780f78fcb0f06fcc8075f8942b8821e36a7baa66402372d0e2d5e480c079f -0xd040c2fd1ae31735bf0a573e37be8885862cebdbea7c642aa0a56d81cd118b59 -0xd2a9aabb4437cb01f58485deedf7ad375dd45c8c01d5a56edf7cbe00a7d2687a -0xfe5aa15662abdc8ef3f9e11b9b2c0dcbe9b8cb4a9faa8ead70247964252f29b3 -0x819aba54ebeee824ffc3249747bc93adbf8c9b15a2b5d9b98ed4b18762983487 -0xa1acb50d217c2f78dfa1db279e8179c42700dbc868a8c9bc29dc019b5b13343c -0xde036b9e803d2bae3bcfed82bb5965a4cc7a28bbc5924fd74980e51287c373cf -0x5e5907c4968480f8087182849e603eafad42bab0ac40918ee271535037fe457a -0xaf951bbbc3320838f0df96468085c27e43b4b9532650c3ae367a5297db2e47cf -0x0ac80491219aa4abe41b85aacfb7d5c787008b43c55cbc94f8cc41a4f7db0233 -0xf9ba20918c20db333439997ba0083ad0c0b40d4c4dfa421e7c3cb04611852f95 -0xf492ccd809cabe24fa64c5070908fceb23fea5eb93ecf64a455b25608ffe3981 -0xdaa6ff951224a9401f4ba0081af865187c9fd2b40aa1bfe45e34cd4223737723 -0xce206406dbd3db1db4a0892d38dd893193f33f4b7f5a71baf345b02682651dea -0x59332fe000861917c1b4f34703b1af15d59026180dc70764e576c6a66ec87c23 -0x54f9e5f7b8613ba3dbec500dddda806814be2123f386b2178af8125362f58044 -0x193b2b2b4316c150f877d49d8e1e8ee8dd2270e31b3ce74aab276f859de93aed -0x3326a2c77b61c93f1d058d7a516303a0291b54e9c99b098bfdb0d4706e07f927 -0xa5010b15d7bbdcabb4a0fc02ee709a8924c19510f1e9f6cedbd1aa2282d4882c -0xae55e9a9739ebc5906350742741451c7e93a4ae001f3ea7e01121cf4c9c4d229 -0xdcaa5a1fd55bbbb940c76746e80198f08eb433ee400bad0026fedd4e397b9977 -0x8320b47f5ddda0f54d9ddf504968b68c532cffafa818fe902dcd940bf59a4748 -0x01d764f3c1c2884144d4a0ed1847ebc7358e3aa8681cfcea29d53e976e1be08c -0x9325f4d0dcff87ae81eb463f224dfe71107f020ea0eec6a939dbd162821b477e -0x32589a2ef2cad72c6b5b75f23c8f74d82f3abaf386de8f339e02abe26b1ef89d -0x3d7251bf64cda230ac0e1ddcb117e6c991da23c4ba79c67e98f196b8e544c535 -0xabafae17e67a60ee6cdb1a725ff092be8312a7d82513fc5a054dca9b446f2816 -0xbb6cdff8c5a366223f649185e357808b93efa4d9fe5df529f2b21154cbcbb0cd -0x51b69ae3ace4f44d1eedb0004036b9ed598b6f987960beddb19753ecafb2aaba -0x7c53566146066b7f9e8467f74fe8492bf1efe5f96edf7d7f8d8e9803e6b486fd -0x1ba790026c59efe170e8e3117ff82b84adefeafcc352048df124735897a14966 -0x0c2c128beda98c28c158a6e7ddde11ec0d029c3010cb8693395919ebb6d917a1 -0x58568228966effd7020414947565b6a24b5c77631a63503911e7bac8d40f2e23 -0x1c0e70dc2fdc37c3e3f2de298a93c4536656d3125716ff3e86fd5487aca99a92 -0x90bcf007eaacc2dd0d9666933d191a4f0cbe323da559cf61e2358ff5ff426f1b -0x4ebeedeb729a7a97bdae43a2eba9ad4ad8a43daec3660e9e248f247ee7081ddf -0xee6452b26dda691053d2d80570e6b84af97c9c4b7e8a3010a6802d446ac3606d -0x5fb2bccde3fc2a5f91c5ca0ba89f27f4f9aac9e6f2b61b4226922438c3b8b8a7 -0x9e8e2ff7d279ef7c0d651565888c4ec09a8230f2fabe1dd0b11ef8450ac6516b -0x458639782c11fde12c58ca86f57764d859f38a84ee5917c701bbbcc54f33cde9 -0xc56f04cad04a54fa6428a9601aa0abacbde3348b2cf8c8a5f8bef242a8c29910 -0xa78f7e70b58b78559299de70dbf1566cd5cd500338750aa3c04bf0a2b86abbb0 -0xdca30badee6eee9fd32879e233bf61ded0c410e87e50c53e162fc58f716e3bf5 -0x4cd3c8990f8dc141e7a92505ae600cf442668beae53359da6739c22ffee8f4e9 -0x1dee611c878ed1ef952dfe61e0cadb69cff03761ca8ff0832601ce6c2a1ee674 -0x4a7781a1952f506ff648ba4113cc0daf2fe1e70a9c7591abea85fe9f820dd8d3 -0x4ff5a9eabc6632c1a2031d391697bf5240444eda5a3c986f0ac90f67c4bf7c9c -0x6d4e1566bd44c886abd84edd687f4311cea34fe2c3b7c8240d13f5a1314a7d0b -0x1fbf65868260c26894489988dc1bc0f49e6b1fb27e8693c50adbdb4f4468c394 -0x67561154e06978f2db0cd2fa7b4374c961f79ab2ab61923c49cf21278b032677 -0x7c39f01de0f6b09cf94fe33e770800a8e6be8194de2ffe045b9b84f09ffb0032 -0xf59fe270d1c0d9b74028be81abc920b6f85b072c7ad638c8e263febb9c2f7f8b -0x19c92d5c6c52d0495097dd1cb85373b798005016d45af401113e113da9da3238 -0x3b0041b6f7f38fb272c83c9071d3f06e42839b122b4b1e02cb075112c2feffe0 -0x8ccd66ee466e1478529334e480f484a11f22aa15da6e9c560d3bb8e77db80e56 -0x1efe8ced8c244586576e72c4ff257f76c5983842a5046ef518df39b8c91293f9 -0x223f07c625d5d0ec014054a34d4b49a5f7021d7c5ebd0e8bbf22bbe063a61f80 -0x061f68d86f8b0ec190887ddb33856761c723423c5cbcf0e7b62ae56953f4e1a2 -0x8873ab88e206dd0b9ed264b6399b0ca04104e38a31f5a3aa3bc3488b48ee9c2f -0xd857e812fa838431ea0dcce3a4222f689e030e601cd8a92fb1c38a37307aec7d -0x219318ea2f7cd40236e48743b1b660d84bf28b87caab66bb4893e94ba6187889 -0x4a4167d7235613adc69e4b95e95661dd60f572459db6b87cb9bbccb453c14abd -0x57c1710c0e31be359ca45159c07c1eb9b962cf0556b01f8d6b380cd6e0164c94 -0xcff7e54a86293fd2f510282c20d879c47aec9007a976decbc3e94e752d0705ea -0x2089f626b7416a1757a1091a2d958be18318cc67a21795f3c1a5dbf8dabfacfc -0xc5a37f06bc7d7f24ef9e0b373591ddabc9cc6663929d631b6b82acdd18b3133f -0xeb3ca54d4ff3497080f0b139dc2c9829228bee130071ac8b75328072760aecf9 -0xb1761fca017153775f0df8afd62e6a36272e62e8402403fcc93398d436587dca -0x1696e7d4ae2f73c649ad7f4c367a61d4b376c3c4f2b73436a67dbf336bc2357c -0x6ecd5342532a6571511251611d558dbbd7f3da095cf31579547aaaa8026d171f -0x10d7195aa71b8f5235394e39e66bfe009f99e6e03866acee43742fd255da2884 -0xc725dc0511f595e0273ad4540ed7ffaf597a9061f5387dbc25278b0786347f85 -0xafbd0df3c330bc3a30fcb5a749f759677bb10c31245b7d74feb4c80131c00393 -0x433dc5383395a6138ba95c5e0acdf0b1d58f9086ba55bffc8543bc8d3c07cdb7 -0x65c0c75ef4e8fe62b060f2a59d137553a5f440e2b9b5c12128c769d8a1c6439a -0xef2a00538d901798ccc4ac90b24f4619f60b67cbcb8807dac399443dfca21b5e -0x3b061cea9dbae8d6f81ab5a8205c2e3f3c581a701db6bf0d952f715014e60e74 -0x7a0949746190442496a5d9fbc294099708f01c4f382a94b1103933bc80e295ee -0xfc8e856f62cadd4e1824ddc0449934323beabddbe5c2bb56d351a4b867a9e3d0 -0xa1d440f89ad57fc9d0498a31e9df811cc5fc1ccd3ef522c0f42fff71952f869d -0x4fd5aab238bd2a3a8e81acaa93fd795f4688a54e5e3353bd2016fcfb30e67c9e -0x5a979277aef83bb4621d341c2bcbbac3ed8d1a8b3ccebaad880704092ef93cf3 -0xfbd25b4f5bf94a8a44a689640db9dfc21527acfa7cbacefe46a1eac4f3921803 -0x6c597ccb195aa59ecd9ba658429c3f51873a2f3f27003c8ec2da695fcedfbb3c -0x5ec78f3a00b849aba9cb2990da87e5f842860523cfa2d2199faab5612d9b4458 -0x25cca2b8b8ac8ca67dc6f45a4f8e6c18e21c66a5dcce69c2928ce9b3a180e4c2 -0x6441f5c761d3d8ba4e2cbcb9ecf13653ae5c0df4da80b44e8ea99d8fd2778457 -0x68a2d0a9638ee8c3fafdd23bd0e259690325457a0d75a6bcec3730a7d2fd7ed3 -0x2d63833ab4e908ad6b8e3224a676513a6dffe79101152eee40d702c36e43eeea -0xe77642001e65020c3348b6d91d7c4cbfbb2d30da35aead4c7d76b851c0bbf7e4 -0x82ff32c2df259ae427c4af9f477f4a5bdc7ca1c592cfadf31b69e75f4da306f9 -0x8672a7b5e209056dcd0c94d9f0147c225a56f4f067645d87c027d167baf5d707 -0x4793c8596426d1869aeda0b80c6dc3b8091d812204ba9e53868c36cce1bd47f6 -0xd2cd2bc9dba4bebf5100aab022b387467c882487482310565144db731513f50b -0x24dc15692f6728e47e7f2dd7ccc9f1ff20698b6cd34415f7325b49670c00f2d5 -0xa17554ae97b8f6144a513d89cde4f813ea8518539e81fbcb1264ca5db7e8599c -0xd6a48f4c8f48bb023c071562b3e07aa471a660aa68feab44139684fd62d3f284 -0xc251d0b7acb23c8bfaef29a7335d6c9461e4686fc7f09d37f7e4cca184b44358 -0x5427a739791bad34b523a5aa032e0be68b57b8bff72920f6fbeb8ecd783e224f -0xda90dee57aa7c7644fd56719acd79de0b8336eb1081d5ddcbd8ba6cace7fdee2 -0x31937eaaf7c2a242f2a9bcf6985383111c1c19e2a199310919e718695ceff2be -0x25eefa62bae75e6e2a403b6c2b23c80db33c60d98cc7c290c31a85b028557c4e -0x672e73a745e20763c1518388121766fbdbc0fecf8f7d2e1cf8a8705efb649aa7 -0xdbaa12a19a431bd0be2ec999f829c9a5ca1c136a30e11d3b798061857410b965 -0x8dcbe693d2f26ab7900f4f0257915f30b324384c49c4c893e8a3ba76492a175e -0xd078e59b0c474facbc3898a0e6de81ac8c5bf89a30145c1e820806d671b582e1 -0xb66a00a2d5d054f291ce7fb6536933cc48fc767c5d059a9014f100840145e871 -0x0c5873c5cb2d8f8f69b60e85973f65f7acacbe787043b7d5f969dac21f3cad9e -0x246676b4a1d601323b56509316510c54afe3b316aa9aeca438119a718bb1b3d7 -0xa966713bb75ce4441fd5ee454d8937bb70a036013e2ec4649df38eea386cc8fc -0x961c79194d0b29437be1a3d68a0a0e7b9d6811113ff4d13837628497e06bcdc3 -0x155fce252ab1d5126f2943a4d66548def7cc877a57b2adb18eff8cce41a2114c -0xeaf3e9b446c512311bcc55b9ca659ae6ad6801f5dd6dc994108b00967a4b751c -0x72143e27999e7109b7c4e653096689657b5757b2d9776ded87091c9049122ab7 -0x4b1ee3d2d4e6a524de16d5f8959a6137fbb1539d3472f5fd01d370515bf6c91e -0x4033e44bc830004794d1ffe54304a0d7d1a2f635225c67b2b7fb882db2596385 -0x01c13f18c8eaed0c1b76a008c58a15262074f81a6397fe9754964e7645552050 -0x2bf886cf71744135e6654da0672a21c9d435f64bd8ffd1d46af91619541d5bdd -0x4998da284739f6197762b6b1fd1b058d5d48d40ac1a2d7a33a5aa1a482e7b9ac -0x90b2b271b8eb32153f1f3e4760fa154a3e4e0def38744c99e2ed5269b6d1e25d -0x0dd93e920c048e9aa7ed778b04a0933bb7563aae237c5577281a7a0c583edffd -0xe58f6839349fed4345ec36d67e98e8870b84f35c5e53335d1e2ca3e23baab729 -0x09cedde52b0baf09543eaa5824ca70b98c3a84e3d47dbc71e60c7ca77749b496 -0x0cff0f38773adc0013bb6fca98f7289615696e4eaa1286357bb9c150dac91d76 -0x0e5d1322167524e3a7c88244425bd12d3529379402d2faf25d511ae7e25daf0d -0x105878cc0482beff213dbc962632322a498c91d8a732e470d53826b296acc6a0 -0xbd80757657ddd298088c54fc4eb3fea054b75dfa7079d3fa684934daf1cfa8de -0x22fc141f27f004e83b62402455e1a90d4e3e0b71a0253308d200a05a7f04f304 -0x21eb810fe609132fc954d00e4bbc1f803677217c340ae5afdc48496f82763878 -0xfcfefdedb12600c662f8bdfdc650174b24d6e102c857b1b5151b90e75bb8ec83 -0x13286973b66703df54b20b82f4419e4ae5e166c0e7996806b735bc62ab0434bb -0xeb36542648f90755d33bc14481fba00a3bd1dc8aad4a37e0b974924186192550 -0x4ac52132b8c7552868bd5409e30abf4b893ae268afbb7617182689bc02294b48 -0xffbcd6c91bd0b3a2b99f5f9f4a1dc74ae8f9b0c9fbb9485596811547727e44df -0xf3367da47361f8335f15576cb78dd929d7b8e5b6862426e73ac3522620cdddc2 -0x615346c5f914c35b8659709d1df3aa1364af1952aa615da38c7fe4717d4a5220 -0xce825d40e9c001f36b1795290c45f60a1021346ed6f7a852461925d20e8b7b4f -0x05247376070b475ee14fe95516b7e89c5765bfb7895ce03e1bc8b2edeeaec103 -0xf2a3e78fbf00d343c0c0c74d19bc0c70a1170dded5995e7c201e27342fe65322 -0x05b437bd57fcf96b6f173f902244fafcdc977a2125522fb07c57186c3f57cc7c -0xa8e3f22e2c13f522e1b1e3e37c9ac5f32a14a505b51a5bb554824f3b8e7baa54 -0xd301a8eebe7d3ca0eabfda4ef63e118525d03be5518e1481d081af464d5f2582 -0xd549f0fdc5674e4ae8438a50c120810ff1951a28b3e2df5ae78424101dccf240 -0x3817042823d271f179fee1ff0d1db0b82aa05abc26a2289774639da895700513 -0xf9a78a523e3d0c8c5255ebd0748c6a137b5121e8dc95b2cfa7bdf7d326369141 -0x98794ff78016871e22557a9bf8dbec014a5ad1fa6f44afdd314283d35cddccdb -0xac11bdb3884a67da7d6f5d49957841acbd5ca85ccb046d28642983d33be73292 -0x593a150196c169da3e96bc21b1f81a0a922516928adf66edc0ceec5f34b4a648 -0x2e971c08d99fd81f672f1c5e46795185ab4991cd4c70c41568ea65657b169666 -0xb5d610f883b24a0bf7b6166cbd02a251bcb0ffdf4c1b8d45acd415b77e877081 -0xa5618de2df43e2675e84dcc547dad7903903fc908677483599d78187a1e51355 -0x0e3cbdc9361df3cfe7cad2b253541086fb227c47b530d0f797af475aa760b8d6 -0x0560d2d21de422f5690dbabd922c4eb6fdd9f4e2d5d3783cc171048bb7ed41b4 -0xb2659aa62f2cc565e9adf237c0220b5120dfafb5ac246b1196f87def733fb1d2 -0x32cd033ba15a67ef6e3902771edba0d99c85810e26e3626aa67dc1917074bcbd -0xbe876133b2e98078f4ab00321a59e356094ed478937b2f99e69a1cfbee56654d -0x34905d681f16b85235cd0815c1559c69278fe4eac9fe1bbd5a64306872fe4b5e -0xdc18c968413af890a3ac7c479e67a2b2f5e79425914db3ae6855d66e4ad433ce -0x99941befe47e1bfd39dc9e85bfde80765e6a2623591b72c55ebd1a4fe1ccd90c -0x0fd276b4da4cfc64a2bba86ccc448f14f0782815772dc11bcf8bd6fbd833849c -0x3f814252eed735e5a5ec4c23776dea3fff70adf8ae6e2d2c7ca168669d3edac4 -0x8a30a4c831217b846bc808d3f0e50b93392551f23bdf82309ee026f8793168c5 -0xd229f2202fe70176afedd35c804286640c6a3be1d4e3a152842550aff4c89f5d -0xe2d2f98e214f91787e80a8b2d6e1ef800c3854b50f2dbcd147418f6859342ecf -0xac716039b2ac9abe5c982cb724615e49424f34918825b26091e22d402460a74b -0x328a4cb885a2c24b506d9eecefc227853fadd00dd8ab4fa6901b1bdb407ae55a -0xe855b5a8b09efb59341dcf4d4b709ab7629b3b76395291890fdd3a23f282ee6e -0x91503aeb277b01fad3e1b22f974a453ff0b23bd06f7c4eb945f89a6dc0b75838 -0xb18dee8d8e4198ab0470debc8edc8232af659abcffe5e024d36d7feec0eaceb2 -0x5c878c9e8dc809d53c8d1ff3a8a789f95073fae7b51da7ae1a1bdbbdc2beefcd -0xab94091fd08ac0e85ccf2f64f70065c2f814f76026a2b4d7237256a2c5235c9f -0x4584163112df91816c6ae17135aade6e146319c97c2fce311ad0d9d47f3ce04b -0x3d58d72ae660ccf0c8df5015b4b2aedf3584ad4b42a85578c1153a31cd9a3fb2 -0x2caa39c6009360d0d00d206c9cd4c1958fd20139c7f2919651514097e241b69e -0xb044039e741c7334d6e8754f6201f620273bc0b4be063fd1bfd72795178c1f7d -0x6a46f4e42f0fbc5e3c33ae0043c0ef3e292a7796a06e37e60452e9a881e4a522 -0xd92a33892562e419ad9d0534d108e693e42cf517d45cf48e571bce34ca4aef06 -0x7de4dfe230df135bcf8d6fa6b394828f7c130661b34e9fe23d385e89becec577 -0x597cbad88cc3f42a5edf8a5eb4cb7860fd25bb11332f7e85c63e026deb759bd3 -0xc7ca9073d304ce8b4fb1cf39dd8f8e6e8edd63fefec7aa4c081190f5d8207888 -0x7a834c7c60a8cddaa1a436b0f74435accbfd71f1f2334bd2cc87fd2588a155e0 -0xd5949a2dd31615f4640c9bd6bcab3a720e8f8ec6514bfe799b0172916f6a968d -0x08a0197991b3122cc22f103789bd634f3d227f023fedfdbe02a1a1426bb63fc4 -0xd89b9120bd662d69f83079e909d32592380a9832ae0f25bc352eb1d497abe8c2 -0x70b1ead3f30663ea5db91f8c03cd1ecf8280f532e2c5d8662b67a59bdcd42481 -0x446e32fe67495baf854e7a06c211221b27719b62954c2252bc21f5e0fab0b838 -0xbdf2539087599d71e078087196b75eb1b1904899086a226b8b8d66a45cbe1f26 -0xa1b463cbe40e93fdda0ffb62c38ffeb874422568b23836f81aba87884612c743 -0x545907e8d1a76e10fbf4f9f57ff5399ff63e3e79f9f5bbea8378ae927baddc89 -0xaba28895fa47ac3a1340ddb58513cc2306676a450274dc03ece68fe85445ae41 -0xab061e0291c9758ab72fcc4dce3a35f005189a1af80e1a2a1ab646519e38b589 -0x97a6a03fd301b6ecbcc5815d6a1a0c3f25680dba6d7da2690a9973b83d41de4d -0x720be8eab468b84d74217c9ce428cecffd5aaa4bc5063da88db6bfdf2ec1716a -0x0f594cf716edc8bbb786ced5cacf401dfbca50fd2751289d3c2c27e795ead752 -0x71db67ff4b80a2a7673151d2e08c8639c65f6f7ed0572c37e0b30e47b7de7e3a -0xf67160a737b900305282ebc69a54d389ad1cbd97b9edfceec803fef4becc368f -0x01f228f3b5fe383187caea9d59b3c90de0e13ca33dde157dcf34fc2f503b520c -0x2fcb025069058359674b9dd1210aa71264ad90f78e94f4775cd434a8d4c551f2 -0x157fd47c6111ccc676a186ebbfed9600f3862a7843e095e8e66c987f4eac0c3b -0x9e008a534a6a59148078be3d27133c24ac5257f0ada4b7d05fab85943f291f3a -0xc3411f3fef910b7b4120361ea6ba8f778b5e3f368888449f074d3b66ca649228 -0x769110b97c143ecf157bd0a95d9cea60f069574ff073efb85a45e148e1b482dc -0x2827cc2f5a23f2fbe910c779e94cf0571d81758069fc2185be0e20e01d205f8e -0xf7341f917b29e98d8abd6d1088935f0f912ac16ec7ecf6f6c8d42d30e9f28593 -0x9eb998c0b39cf7d1dc45cd7423f06a29d4e1bc4abec20ad31b6338b9ef18ec6d -0x65c8cc0430f35576dea698295a7f2b5d9ad197987a73a3d71c526b98415876f2 -0x0f61ad99550ec4601fd0385970f675720522e7bf6e81e86ed834f000fc6171b0 -0x5a1bb5039b19f508520d68b0d2977cd094ad2c8136f195e269182599c7c8f8b0 -0x1a00c874db4c6493beeaa56fb7ecc9b4b64a9eeb46ec3f0f1423d6f2468f9e00 -0xe432eee1adae2cb06161bca91952e2f383b1654a478ee4f87b4560f873400ec9 -0x177002948239e1932ac69512483d7a1df04835cbf8f1ba5759da04d8d1fe80f2 -0x26e6d06b31184955da09f11adbf62edd680c9bc4fbfcf872e644734303e53b53 -0xa1857e2a998894650183ae0335821720d79abb004b61e56bf374e82e750743a6 -0x3fa9b81738b013e71f9b090696dbdb01af19e9370fc3e657c9f031045635c370 -0x121fa166c57b46389e22aa4f7883d6a2880e2cd163889438268e352beaedba5a -0xfa3875ef256085e0ee573f33a327f9d45c8ed4edf5acb5dfd62955c43ac37de1 -0x5a11bb39654d9382c798c0ff6296edadebdd52a79f61148aad95a4a718483046 -0x439f2064fdc4c506effc4d5b1709fb75cb4c49e9279e09bf4ca01310f36885fe -0x72db6db89176a84a42e7731ee3f6be3420f5d91da32287a14b55ff18b1d09bdb -0x73939da022a2a50cdd904c1b2bb7af60c0986f75e5ff1cd04cb5c560352afdc2 -0x5ae589405ab0b5d614bf0019d1405a637ceadf6f3aab9a188272cfbd4c22104c -0x9bb10dad1c6edec56dbf3573d9f4b1b4ab425d594c385cabba5955cd72e9468e -0xa5813a3daba736946142394279bfee108a192c67e880b9b0df136cadd461b751 -0x1f4862e25c23a86fc2097bbbc0df426570eead807ba1cddd70488a14263f4fab -0x7b6e433849ceb158207fb6426148c425e6456765c0a69273a60572c9f44998b3 -0xf11bfe79f5cc6da2622f9ccbc1d6a5ac297500df3150df52b60600fbc7fa9826 -0x62588b9056fa596bb739bfaba2cae84f4d5391f4784b80ce7ea2e304bf7442c1 -0x7059990985541b69a936c58577e31b265ef5eb0be210b356ed7f93fa458a363d -0xd872593ed9c0a4c2e70facdec4b0865a7a3b94d9336a17ce191a9f9dbf9fe790 -0xa9f7b10dbac59c4278a7dd526ef852b74f2e53bc3c4642a76783161a86c4c07d -0xe08d6a6c53e785fe4cfc7aa2088472c1f308478eee9b1a92b4f2adf6783642ac -0xe38e3f05194034aae18e66287fcd7867258d12b2c6144353b74a6f5df6264791 -0xd70e59b9370362fc8b74f4ec67511eddea27e6319a0e8cb50df808c92a1e8007 -0xbccf6ac2f892bc13fb28d188e151e7591c6030d43b450bf9cb3204f8f4687eed -0x6024320f6003e113a8fc8f2088d877ef7b41d0be2244e469594fc8246f8657c3 -0x93cd985b1252acd10509f58cbbbb2b1466f9d71d86d1b25d0835cb21218ef858 -0xecc14afa86f4b658009d1e93aa624459793d2c48ebcecabb67514f45688da1c9 -0x59dfd5cd9f88d9894d9ef6daf0e7049d13df465400689ded352be5e481674d60 -0xa168ada5654c18843e8ac5efa3f93081afdedbabe42cc9609023d6a7d863ab68 -0x1ce013526f38bf039d493fe76c744439faabebd98ba7b7e1508010b48077928f -0x30a304d059603b2b014bad73382a54636a7e7e1c16527841fea65a8875f08d50 -0xd47ef7ba3026afc1d7a6ec9ff2292895e0d23133f1137dc961febb9f81c981f5 -0xf1ba4700f317df433ed8f3d1df3e91d79ea18ec39687adc91ea0de33eaf89dd5 -0xa24de5765aee12d78c088b0225c290dff0372f8aaf14ef4beda5df5e7d4cf427 -0x5e08361af29299ea8b53940f50eba63dfc34508782e531211fd516aaadaffd15 -0xee9d18a2b4962c7be7075aaf908319699c535fa82aecdc5fa400ceb1fc9a3a3d -0x01e5e3523c8b517c7a6028961efec79f885eb6afbee3e36627451a57d78517a5 -0x324e25054390db5f675ee803d8b7ea88df1f3b40279d12995c6246b7425dcd74 -0x0604ef3c5ba5a650df309bb618ef959c1f20e31ba31bf54ad676d33459b5a3c2 -0xfcef97b10b1ae25d4d49dd7b9b59f3927b171377cca7e420f20878e471283c06 -0x8255f8b851da440cd14ec6374ea094bb3d15c8d1532b5b841a4ef87f5b87449b -0xfc2930ea735a7d7ef17af3e938ff3e8f6e15d4ae85c08e770ec9c7cbc6b8fa0f -0x9748dbf301256f8f2ae433f29a7706e745b8c8dc5b556f3f55155a91150c2412 -0x680872faa6703dfb080e7beb0b29b3a5b65eac7bfc7e200a8781b86ea1314f2b -0x216e19115cd82dc8d8234b92dd3af9ef354e67bdbf4bf511d54f21e8dc2030d5 -0x4923a945403e9af9b90030826633327d36d4e00c30789d9cbc9d9df0f4210481 -0x03e4a055fc7610ce32a4efa627d8564c52c9f48bf6dc8b4a107f689ff6691e21 -0x184a4ee62e3ed9e034738a2fd5120a1a9e7669d9332d1bb9527ff4b51d58b4b5 -0xf4e572b9f49616090177ff42cd90c6f1e0252fc0b1ac2232c75373da466f0050 -0x254067a23178c078cdea2242bc8ea848d4a69e4575c03ac837531ec07d7897ce -0x0e6532bb431dbd1497567efba20e52165cd1b8771b3ec4017210bb902f3e3811 -0x7570c58eb19f2039dc6fd544973e0af5a8288c07f5aa392428d43a8ced356062 -0x64ca5e0ae609cc208231339a942be3735afd3a646b27270e4d0641282408d0fd -0x0b94adeae37d59a0735d057ed1aea19baf746ff7e55b5032e807d877f29d6218 -0xe3536e69eb2bc30c26b02063da3ca8041da24d6a109557a0ea3a60f48a85f0da -0x308e55b502c899979ca9818883febb0dfe7d99041c544c78e842a65c304431a5 -0x107ab5369ce3b2748897a9404fb85d715eb8528725c3205595ec4092bb6c7478 -0x73659de5e2d861bbae18375f654ea2c328a6808a1115175f297cff7d5c58a894 -0xe7a360ed14a60a7e5605ee651cd4331ee02a57a3000856bb7b867666ee320adf -0x121f18b7348df2c72e13ef6b105d13f55c1ded2a4ea392fd2fd446f4ee39b096 -0x497c887a63ef2602973647971369a38761a9d6201c0e91051ea74c33f26a5580 -0x4739d87fe5c5750c89cd281a93f9b5b290025bf8f9269169b19999e0f81e9a67 -0x96148888c4d2ffc04f2e50ee75bacb7c1abb41b02998e018a94a5c5e88a71e0d -0x1af4b7dcf10863ef27436f567a25f34cc3cb088f7fac63a329f19489338bb0d6 -0xe0c911afa8cf8d3d8a5118fc262d3cb9b55af6ad68316d3db5c76ac04838a9d7 -0x6bbe670b1903ef3adfc48125e11e2cab0d337c95812415f2fe6180cf3f1b1e9d -0xd3857637132248025145e837da79b5f94dd217797fd5baf9761f61cd7e8e21f7 -0x72d7b8271f965519060d2f168ab401a2a357d99cc3f5002911a8481c46781d05 -0x311d98ee631463c47d845c87e9f41779e0cba0542aecb737c87b4a3a5a73f291 -0x667dc08756cd98967e62b4e15763f8426d85e84f4e76ec1db2f7f604070a513f -0x4465d756e8b4a1e5defc0500500242f0d9a3a385f69f9486f4862286e5d1e91f -0xb3c8508c622909e3f52d509312d2aa0b9c032f4b04cab036d46d2ff8f9901490 -0xbe3f5ae8932c2c38946bd8f5ae06d5763541e73aa3e993f8103b36f7d3d2d733 -0xdbcf645bf7dddacdf357c36806d9c490e016043573bf339e7ff0cc5df5b682ca -0x304d94b5670082aa584561aa7d5882b8b1b66a142c2dad593adca28391abb085 -0x984f70d0723f89c2ef6b3ee8ec56f56cc56e17f457c92e01aea3ef2a11462594 -0x2a4a5b017c3ad72f655d3013a0c38c2ded6b8a66c821b857b0c8bd21a1627917 -0x3c0736f3eda7093652f3e8f823eda7fb84ce32430a818b3e3ee2db4bcb598ad7 -0xf049173ebf76e9fefe92df57fe3ec604e7dc812d6d19256d92eb00d4e09762c3 -0xac816ff11b8b1e3619e5a52e6048b69e4f4d72f8ec3b48f8ce9a830cfd14c813 -0x97e96cc50b167215fa930609e1cb17060409b186ada7694050a3f30ea0889266 -0x553ec988ed18d61e068e836b09c6da79d55d6e78322175ed70872f1057d30b1f -0xe0e4a4503216564df95b3ba85353b8c53fa8ef05c23e9eab6b487020c734a37d -0x17c540455af60e97d89145c6a7d2b976d712dc7128b0d6644820b12bea88abb8 -0x58aa4ec3e7f04b8a43a2064fa3bdc20addf2b991ce39455d46f32b9e1afd10ed -0x1e9a8288bc868b1ed93a7bfc38c25b2a9b14daf2264bc06bea0b18ef9a17d374 -0xe0cd622cc444d945664a69afbcb7374f257f6cf8448c96948e2723b6fa1bb4af -0x13fd7a297015ec147753eb334ed4d79c8afe102409e1c06ba111abe8a0774c57 -0xbd33c17bfb0817fdc23fdf1a07a22acc35df440dc1642a116453ce25f0711936 -0x60b732cce4ee56de5bfebe79094546b222ef5f370c1fb757e8d9b3fdf23f74ed -0xaa74f4d97c7db0c1ca3f805a22e198c3f871dcfdcd1c4f3ae28cbc66e128a9a1 -0xbb521ff62e7c2515bfd94c2e9b514a56c5c6f8648ab2313ee64657b2c83ea677 -0xd5f331f93e1157365cf83bc0a6b442cd882ecc0b346ff928b8ccab28b895eee7 -0x4028f864da21cbaca25c36fa70b745c8461051a35690ff750e3451237b490883 -0x5c3d202e709ed44afda77e5a1a462468497e47d173837d871e40235b2deb94b0 -0x5840ca6fe61407268cd5913151d0ec49bd15b2275d1d569a4315df9cca6a54cd -0xd882669f7d13593a45d5bb452c2b04341309f90732a9bd3dc0329b2fe32a1b5a -0xa50e93eacbf60bb548aa5982dd66c392cba5b285ed03cd6cd5150b6aff18c27c -0xe127f199b75cf004a2a7994594077e2266b04f37f2d8baa0ff762963532f3b90 -0xd6d8a28d91391a4f499723c7ef2d06b4e21c96e5730034ad889d1c4ee4f94841 -0x2ea5bf193de5dc7cc05cd935eb122bfd0943b48a32380242f78a6b684da79a37 -0x32f629905b8700b80a862cd6abbd16b53dbf46d3a6b39eef19905a5ae7e83807 -0x7293d89bb4095de231e838602f2f033549cab50d9fd8399f4dca2eb10e030ce2 -0x062a0986cdc6214955e8d4bb5bada2cffb77616df5389c067be7cf71cac8caa7 -0xa6a46c96714e323c4634fcbb9fa2e03969ec929dafa25a3afc7db2c93cdb8c22 -0xb63db72648c74b0da28b75ea567481e9f4e4e99c92cd5f01abb8a43cedbb0034 -0x5e7aeefc8bd7b634b5d13b1214a828a11107a118d53f76456bdfcf3ffcbe201e -0x44bf0bb6130afe7d8dc9c68eb87efbc0dcae8f402a37152a35f56c94fde59edd -0x14a90f0af1fe1a796bf5d5c4c684a54d26697c03b760deefe28835fb5f77446d -0xd8a334b86e18c2f876397c64a99872792e134c76cc34bd674c26141c3110e656 -0x1cb8e7d1a879a3bc521cad6b49424e66d3b6faa2cc21cce99df52f79855e9796 -0x1652310890b09bec5f1a174d7b0e37cd0aae2766d4e35ef201bc275bba70338a -0x3e95132f0301a06eb1999b8fc19e988220bed058968f01b785db1b6f7f30a0a0 -0x56ba6ae7ce7a4062539645f43b385bb18e72cf7c8e7884db9305d4922dc7dc56 -0xa6a0fa4d378775683370cd9d0092d06da1378bb72ca3bde99ad6f2393a6cc810 -0x9df987a7791a2feefb35a0b6235169b9c9604ed1884d63da6ead39a32b4c304b -0xd39a6d670400742976f45be7001225ff1ec198a971e0c5b1d903f3d06136a238 -0xd34748eb97b9373a79e5656639c984ad12a75ed62d44bd3e9872fc4ab6e1158a -0x8a9fa9cda7602a4ca96d11699f8f36493456d315e029b60009b660b17498697b -0x0bb2da6cdc3448d61178c63251c009c3d79b86d71291de54154ddad54b8ba737 -0x0ffcac6f3a1e95bdc54f8a09d365f71d986d5e923c57006380cfed3450ed4d89 -0xcd043841db86f0ac03db9ea7cb9ce26613733c1da1578a1334d4979ed5811742 -0x2b921083cc0235eb175a26d9a1354543d3a5070a866fc50b1e7fdea8deebc0d0 -0xa3e02bfafb68021a20ce137926531a937a88b2e44d44dcd1eb6f0a640a7dc244 -0x81eb414b574f89b78c8344b792e47e7bee993106d846f9936b35ab8309c5e805 -0x5de6d47f6a06191d564c99c203f46f11e64f0106ae90d194c945576428790d4d -0x2a34ec42202768563916e42cebd3fa511972cd61b1b086bff78ba6b06cd998db -0x21ac25f707bea94ef0166f47dd62494469fd23db222d311e4106c9b5e7e8dfa0 -0x2af197c4b9dcf92d923e64f9584e9c91d75d9063d9e4a8fee8ab15ea0c013e27 -0x42e8022593189cb78474d05d0c3c7a3be9db4a2bbece2c7ac60b835edeaf0a68 -0x79c078c0169090751cca4b69a05736465a42532050eaa9fcde4806402b717092 -0x5c8ab77f3595b1a4ec2045459068f7afd640972e9cab06c9622c016a1f4eed3a -0x2b31c9f387191bd908317d62bd0079ffb540f5d6e89d3ab6827668c2cce62074 -0xcb3536373a34caf236d47c7afdecb5e078bb13a40d2c4e65b30513dc4f9eda78 -0x7ac629fb5793bc049a688149a1826d797b42b421d60a042b1a4fbddfd8e2189f -0x3a1233c23ff8bfae10386ce4823e051a28d6c55d45512ded82aa16830062a817 -0x3246bbbebd42390fedcc4a724fe32a81926464e29be4632798e703a5a2b8e0df -0xd0d96a7dbd4d5ec30cfcdac4a185e23c7a2cbb27b8544a023f7d1c945a27fae5 -0x0a358c2265e463153c6a2fa4f33209fc606bc6bb2d0d789baeee537d864affb2 -0x65b67cabf4160e3bbf45b51006c0c9a40cfe5508f657637de68733322d6fe4a0 -0x4590feeab267bde9cfdcc7cb51cf483277cc103a51701f6f045b53c431166c41 -0xaa0ce4f818a03757ec65f5ceefa7123e1b0d5dd0605ee31d703cca430fa70298 -0x07f9c845420bb5cf6aef069348d4307f264e64d2feab7ae9911a508a3333c594 -0x2bb33d0a2eae8197d4568e051a8529faae60effaaa078146c4ba41cbd94fcbc7 -0x32729e574a14e8370c77943078b6be9ddaba066be7133ca7604b77215eacb573 -0x22e872c9cf753950de284aed275019d3159d94036f36b43fd59987dcf314dc7a -0x8ab2d2870dc303f3435fb82f865b5911af4303ed98c87f5afff27326dca58d04 -0xe04c75fb18656bcad22ee8cb89197bc13a4bcbb91ee6e930b5043588767a6cc8 -0x7d642d613a939eb33cbc6405bd81a206b32dbe9785a3fc4494570ac555ca21cd -0xaf8e36000f56bb7eda7e0c38866235a57bd4bf93f83df0cf97063ffae12e9e97 -0x4c7e477445b009976cd4b147f229193e3ca82a5ac183bfebca64ace5cde7fda8 -0xd5909c5cf2c5ad2f1ad41ea324c680dfea957b8050f612dd5c7e9c02e388542f -0x0248835a22ab1c1d4c0b340631ec6084c609232c9dfc4e6160ea604516af33ec -0xa14103f5e0fd951ed8310edc8a502f2d8b16d91dbe6e51efd8ac4e645be27431 -0xbd46f138110b6d256fe9b5b5ed1cff90d74681b4392ea5eed58c9a72d913646b -0x0efafdd71c7de79e5e6253d7a533b4550d1e2de190e69a2535ce6c2382e4552e -0x4a4f82a8e728a9e8b7d23e6f581571666eaf7cf31fd281826e77be2cf9957a98 -0x5f48feea3dfc47a52dfd1b751a8f7d40dc73f70c0d1215c0e7cbf9e81b086e00 -0x2e922ac302fc4e109d8162c00d4f14dd3381f5de2bd0f2213589f5bc9359576f -0xf7545b9a8a2359010231c39ab905fe792f4f68ca33369aef2ad6030c959d2a20 -0x3bc2096e85925e08619a8ff4b193bafac2372db20bc842cd0119e89bee9033a3 -0xa16da69c571b865cb9c037679b0d14c98a590dee70a2f4a57b4bc5429a22c017 -0x21e988884f0d823f71cd5e7d81fdfb1420ba8a285d643590dd3baa694104b263 -0x10cd7c90eb46cc22ea1e96f918ecbc41522ce6a1010bff1f64ada1d4dc901f7f -0x6719eac8dac7f712be046398fcec64ef8ebe4bbeb3d5d3e0b3547fbdd0e9efb9 -0xff352efbcd0b1cb9dd5f16b96d62790791bff48bf05e3bf73fca98d7ca4baa8e -0xf47088bb9df2b005938a34678e8471d2de3fbd94c79f7b9cd24457c5971d9906 -0xff6adc390c8dec441d93d9981128babeccf8a8786f53b0d8333e9e946aa8e992 -0xe2435c9f6d8d07c627262865be1f3d88c55639bd9273025820fb72790e5ecd9a -0x5ac8a42ff89fe7b1194c14f55fb1b19eaace3ecfb5a4eecb1fc96f3ea0fc234e -0x1fea6ebe4f32fac194df9983fa5caa0fdc9d34a3105cc77fb058c6067e832049 -0xb3a4122543d630377d1b4bd4f6858028ce136741715209e35df23a5aab9cc134 -0x0fb5aac8abe997fe3e7d5c2a9f286b1511dc3c9bf82603138cfdc439d3f9058e -0x6bcfbd47a58cfa02720f3966291147b4bc5a99920e493527539fe203553906c1 -0x37a91ed9893829550e0388a7f5d3d0f0bb8c056bdc0a25634274f164ca460ff0 -0xd8ce2f456ffcccb2fdddbd60919b7e7482271d61d34cd64dcf2dd38db16c2a8b -0xd0cffaa4dfdfb58ac0f39ad4bb080f1c28d8447a1ef3171ef9d1df346d4045db -0x0692e2d76905c9176be844c43817bd2b998053cf0a8a9fe06ff2f8d52c6e105e -0x31e469f5dc790f1e23cc4c017581c636e8c5bc84dd31f96c57893d1666e7b2f7 -0x79dbc949095967ccb06b723282104bfb7e7338e0b473392c4cbe9ba4476f3846 -0xf2e2023d3342888521707610cbb26c46572de5f137506208b4fa478e65fc2525 -0xae3401037d56d901312335be725898c4298ba80d0aecbf52a737d9994c12b480 -0x0a9e0efcb0ef48fd1ddcc612776daf5718e63db6b837ead8b05aade463c14d39 -0x3d80e8d441fbd084481c6059b731d9b03303f969f280653f7b58bf1c6c4c3d90 -0x53afc539409237b50022905857106191064821292c2f72fac18b63fdb9646519 -0x71df10ee20298fb99ca891d2ff957536591f560e6bf5bda00bcdf9c30b3188db -0x72cf451550377190b7dcbb4cbe4df897a6203bea0343a268624bc1bd9f7e9c80 -0x0fbffed25b156acee105064c9d837686e29d42daf7b636afdc7370b94424b6ab -0xca6e87be7714a5c4d2adbd562d668610d6c7136afe26ee21e66c472aa33aec54 -0xa2d0bf5073f5d7af2aa3087e92ff501e5b43809cd205023cb0bd576e5f2adee4 -0x0d0b644111ee5ce1e0384e3ed6ed6c425e775dd265234edf5a059a71ee6e72f1 -0xf14c9fd3d6e9a22c2f02cdf3514427d75e3dc98d5700eb2dd252c58b6aa7ae7a -0xdf9ba169866440b9f1b395309a67efdd198bc18e6b6ff213135f96348e95d02c -0x0e7d82eef270442da5bae442586904bd93ab856a6aac45abd3d4eae2d1821172 -0x11560fbba8c874f700d529a16871688cabb1b2b65892204aeeb12a69334e8eb3 -0xc14e378fa7d59a6f4bd73fd68847a334f06ae825498e636f1e6102493db228cd -0x750a0657d9c26de5eede845a7fcb1bbac1cdade1e54423d8a3f85ff8521ac200 -0x37de8bb0bd3e4ccbc6fb54bea38de3bb93bec038f018864d9ad7c0d49643945c -0xfab18665e9af54da21abf9626f195c67d06572a9e84bf7b1b218c1cdc793358b -0x1da708143a2f77d70b378faaa19bdc6f7214bf39a041a830f52c968e9c05a43b -0x1fd851cc9e3f2616936fd908d79ac269b1bb6635fe6f4bfb989a56d73ebef313 -0xe89280b1aa840c37b8e217eb4d57a65841fc5f742edc79ea1bebb7873e4edb3e -0x772233442b28c2cb4542d0efec4ec092a384c5a20e3d6e392e55cd38183ddc74 -0x4630c87316b019c405e2d00663a6ddcd3e5e798eb927f1815f4da2eee6a9b5fd -0x721aa8e65e4d90337385774947c81dcd97cff1676fe9b66412929a4e02708fd3 -0xaf2ac334a6e6d7f7d04c791df9ac940c31dcfc23c8f0e12931f0ced889686fdb -0x4c937a2252d2e19bfa488bec5d6c013915f90e8e951c504369fb42429d22a89f -0x75bc938f8c8eb55e5e16ae63fb26f973811759e91dcf340d71d893958e4cd3ec -0xe0caa327d537825a4e2e0084e1fc378166f2515e9894a3be71aa0a0cbbce6cf3 -0x0b8bb8b79e0b01fd72869cad7a8c63359fdd1d8cfdda47fa8b4d0372a169f8e1 -0x68501a5323dc9419db342f3a490fc518b74f982b3f4b7a7cde88d7841307913c -0x04752e9abd2981cda2379afd25236c99d00076ed7cf7beaba389398ba616a8ca -0x6c0452c00526ee23853d90d899ade4c81e1a2aae91916bf11f57826648d3c664 -0xd6700bce3546f8aabfebdb0db834aba075f604d83102766182fc3c0c94ea4121 -0xc055e7c91cc304fb9a5b18907299db2d68014607dc425a7106d8a41e17d4a020 -0x4dfddb632fd76dd9e419af3b972e80e4f9d760421512b80c1a4a4f26fa4584c5 -0x668cf25d25ebfb24b00df870903d259e7a4dfa6e1ae378a65cb7c23db815c207 -0x37cf76f43d06f6df2f831b120c6b5979ae8fe627058f95aa153a1ddaa68439ed -0x7c6f0d1acfc37fb0d09029c99230362664d58b49da8b299b25cee4a38409c79a -0x3264d11c5d616e2b238323e7aa83cc9f6a2bc4c9457d86529ce1d229ad04fc8a -0x7c0021d738ea6ef8edde5948a6fd3a3c3f5333ccc82f1c8774d86667c62f3046 -0x594ce6fb571088f33c00829fb297fd96a9c110322061ed32c58d56031ddfdd8b -0xc5478b7b5953394afd4aa2fbe4d574f5e0723883a1de78368301e4f67fe73f95 -0x3557a9077ce60f9256e722ccb7ad9bd3cccc78eeb77ae20abc1b6a87187f3f43 -0x92aef059fa4ce16678ff5733d2d26ac9318f39529103821ac6cd5b8ae22aee56 -0xccf21692e8e0a263a56de307c083cd289a8047f8e5c9c7b7de2f21498f3ae501 -0xbf3ce8dbb2dd08f0a16b5cc69decee921eafdf569fde1083559a607cdde872e5 -0x6b6f495113070a85144962b443d088bf276862097caf51fcd4a740ac53f174cf -0x1d919025245ad5697cc3f3f0e956559276d79a6f2ce107b457573bcb3de3f8b2 -0x2f4ee10c20b56f6a79f25501bfbfbb6c009e741a3749079193d9b6024a7517ac -0xd68a03a4d387e9dee2ef90b0819e9b791001c30470e8b0fb0fe5f43125f0f603 -0xd832472e9404e5dd0c55a096c6d1b5b3e7b6d20f65e95c5fbb0c1ab946cede6c -0xd2bb645eb50c15fc9b0a859a6a30e94856281f8b559739ff23d0735c119278c2 -0xc7cb406cfb17e9c8a4774213d7584fcc2eaa2e61003d3e7e66689f162ea40c58 -0xa4ccf8677794ed23b1893c06d7401f416b5522ef2f9652479770768401783a55 -0x4499aa674222536c8f6503e16c5af4bfd98d2f4785051eb08b16bf2fe7572db0 -0xfe45c3261d013dd65c8686a657a710ecbd71851af4b4f40d25c3ca18aba801c4 -0xd4f3f1767837b9bbb2a01f4e373a0d7e750382c3909338713469d747104f03af -0x1b8081ef2a3a7edd35bed811d7899dece041fb4a72d4cfd824ae5dcde72a9d18 -0xda7e592736fc976f06f3a497e939626ba69fd83630a1ffa416d420ba3f0ba634 -0x6a37502606b8b3be080696acbd1273e4f7b156b25ce0d615e4096594d515cdbb -0xec48df0d028481bc516f4703c0b2d817600996a87883de37cc1c3bc97782b0b3 -0x683095de9f45b9723dc7bdd83b16c682738c5955ad73baa23146bb68143afa37 -0x3e9356a3adbe09d8698344fb862eadad2a8344036a1cef622c9a8496db7203f2 -0xb099284afadcce83618755c263ef22b016963fa769c4de40ace98a060282ed13 -0x6478384a18efef6ef7b5496ec329c89262ecbe86ef0503b01ebb27fb76f7605d -0x5b712e383e39e71f2d29bac1b3e8758f3ffcd5a09fe82b05696dcb2d5d1cc6a7 -0x57208c47dd97d159637ad4e1804d25ea54c2abe1128051cd8de20e73b9f070ab -0x384ec2d82a5f584b88b652ae2c4f66974d513242b28287db8f6d25b0a7adf48e -0x987db4ab1706c850cf1d510a9a2f7b8f658595a4248c1ab4e12f9eacacbfb52b -0xbb988f7656b0907d5f732f326a5491060dc2b50660561cc9a8639120413d2552 -0x3a042270b1f72ec4836ba067d7d37a7c5001666a11550750c07b53e594e17bae -0x14497b2c0ac7b2e7253fd1562e8e92569b67b992e770222221e4c1893b772696 -0x69a32cbab71e8a9200fe7d3dcd93bb40d89e1c89ac152760c26bfdc1ca0e8893 -0x46b5fbac134267b71558d8d774cc15511c9c77670a93acc3675b030c1d09267f -0xf06fb395ff76f8eb4c8def9e3d88c09ff28194ffd4dde116308d8235c9c07442 -0xefd6793e01d36962978e4b1616b51fbe4f13baa38519bd008611e34a4ccfc84a -0x0dbfc0b8c8b213c83f7f2a41114ddd68420ab22362a07528b60bd81dfb3994ef -0x30e484e7cad8196c955314d299c4ca94af260cdf58371c9c14f2620ea004382a -0xa277b825c5fc5d788980600f574fe73a39e47388c7ef2dededb8a96df3abeaa2 -0x0b3274637529d95ce2fa3c65d702a6cc96aec4fd1c76f33739b75d8c6e4df1ce -0x4bc2af7c7d46eb27f689d54f94642490ba966ee0e89f8e56378bc41824676ffe -0x4ba8d34146e5855e4a8baebb2d0cf5e5d89efd151b1f972c7af3a88890a73537 -0xa3f7413413e61a616abb05bfb5fb72606e5bb4867dd6f00b807adb8deb3a49d2 -0x7319cb904a0f32c6f977d325f36484d5db1ecae53cb63c05e0c5995ac0109233 -0xc32d5eff7d0ac89e6a5bcce5ee8d6227523d69cfcdb8ce636ac08054e51b3787 -0x0756f989ae5a4325fa3d116a8230081c07efe0eab44e24d4bcb39cb913fe91c2 -0x0591bd403a79f007c323d441054023487ae751847f73ec6beaaa955df8b3d497 -0x6fe98a79d61e6f99b36b2b3fa73f3dd036cddf05824ebcb4b9113d92cba4388f -0xe17fb42ad270b0db6c3c0331f29f0c008608c0f3ec41bf08194580af97713616 -0xbd2fc68bc237769fe97dd845d15913483a23e4e85b515dcaf3c01969c68760a3 -0x906620bc8355b19092ffc5551556418ba5389db48c7f7d10ab1141b34d9b53e5 -0xd7c42b777684d237781959adf874cd2111a15ba87ca67a7210f45625c9189605 -0x75418d83bbb5b4743fa80305b49a1c0b859ffd3c29d71a6841b2a83aa78bc44d -0x07881c9b8df90648825fdc9f835fc343f7d23e244a8136e84c173853c52282eb -0x2e74159957198424ec5bc8b0747c65b274d2a1ae83d6a09e1efdbf622ff70dce -0xf704bdd3816261d34dfa581a1aadacec119c6e7c1df81cd1416d204d46675b17 -0x0ca12898f28b8d09152adbfd21d184fb876d03b80d83f625fb54a77430cf2379 -0xe0a10638dbb543a8833674319445634d28f282866170a804148b0c627050a70e -0x860ea747d7829cfb53bde93234dc49b944daf2b3670cfaa98f4df274abce679b -0xf45a3d20e9adb84aa6ac2b1747e780ab8bf441fa12676a630f7b8f225a23cf87 -0x502b88ae83f7305481a64e33f0d1ce2206892081befe4c9ad696698b9360c262 -0xe829f9fad05846526736d0ecb0fff8587522d265f6ea25f717556331d2fe7c8a -0x4a54a7c78396064702a8afc0e8a6cdbf99a2c1c949d40a9c02e390e776c84516 -0xa5a4656d7d5034425acf071ff1aa2aee31f07dd8a49a9c10f880837574ca1bc0 -0x2f694382df7a3f4c2f239907fe8542bd015ff197d0d4ce2bcd28856d281a08da -0x7f922ba664dd4b3b96f75d2a3fad0d50232fce9ce4e183c8949d2aedde4b626f -0x1b8d7a957d390061738bc1c466b8a8f8e464e7480a04ffa47ae2f9c0a06e682c -0x8d7f994a830450bd8a64456ce3ce2afacd05692fdd6455c4a22b5515be4dfdce -0x75fd6bd6def9739a880e076ee4aedfbac165ae7eab913bab03b75752218a69c7 -0xe5d4b6196de1e7751e8a2dc0b17944bb9d417c84851f4ee4f7ee9a126761f425 -0xfabd4a36ac51fba2c6d5687395f286dff3352eefe7c3c278b5c1abb66890183d -0xfcfc2a3b567bec76c4bef936a3e780a162dc862019ef05c6bffa168ec3826661 -0xbb06e0db048c7a9c106d3f7924ad83c82083137831141afe528d8850a5aea9eb -0x686ead10090c15219f2613c1ddb04c01932e69171d9ed4172ba80e44e7739a2a -0xc52a3db7fe826799326759be5f0b0f8e3063bf3fe6c5a1f3129a6a208d631a0f -0x00e5168114c90b0bab2450cb0ddbb80b40f569046106d01d231cf4a62cd58e1e -0x7731b6274227bcc83c144287859187ef44dbaa51dc53158b60887aa026899f4c -0x8a2b14ceadd0c8d53fdbb10f062b5f75b57717c89dcf17c54c2436edf2e5474d -0xbf6d6cac13cd3891bf350cdeb6252b7e86b5f155f63d3501451bf2500c9ed3fa -0xc188f66efa378083ade9146e4538d41253c6b3b522b94fa0ba53b09c22b0037c -0xae941f5865a41d59207ac2ad4f54323904a28c86ae8480970f9b5e878a578bd8 -0x5ab93ff5602422ef647a0974f7318d255ee82fa44ce422df5f47b8ba5afc781d -0xf36f6b24316cb55f840d6fd857385a19ee2d4161b01f5f9dd9439bbbc38a4fe0 -0x1e8f04a753eee93b02e94d40d8cc01f8491af5dd41321164df6ebb76a84a4bc4 -0x24305c5bddcbed932df96cb19fe0bfe704015605f503f6e093fb2a1f935f1165 -0xd82c738b138118deea88807046283e90fbdde1c8df91f1d84de5009a2e2a684c -0xbb0ba7c444d2fcc82aa5e64152d4e303399a81861d3889ef6fb0dd2c7cf4058f -0x97e92c8dde6bfc09e4e5e1e28c466f65c551c16fe997aa0e03ab88efe2f3abca -0x9f751cb9f82aaddeb425354c3e04cd1dff3d445f3e8e4d948adb56c8ede205bd -0x861a50666b52341e9776950a27da407a96213cb82fde6118dce55c35825e6d1a -0xb3eaf8592d818843fb43f5e88615ecb1dd6ef55f197fcb70b79cb35223293c1a -0x23f291ddf69691f82fde6a274d68de37f3d0770dcb9bfc271ab59b3d9e92c7f6 -0x7019070287955f992a28ab5678ea12976a79f715ef5d6770103011d1c6ddefe0 -0xb0ba7eff0179eb2d748f7b0bba00c39e3fad9342d46942fe3ae2b4ff03de10d3 -0x9a55ce9da30d5570e21a7e2bff70239c6badd5a21c49b46ef65202010e52a170 -0x9b1fffd8abebae03eb0b7fb9b873c34e86e8ac267b5b045577ce69c7a56e644a -0x0dece9f0b0e4f277899023d1e126243ac2091743444f75c2e466c56d41f62fda -0x302384cbb06a44bedc562ea300cccd808b49595fbdf8dcaed2993c8756abc17f -0x70bbf48fbad77d9fc038e2ec3d3c5aff1120308370340d861bbcb86519d931fe -0x20fc3e6eb19dec504c455a10051576e9882ad0d9bdcd3a571c59784b22027de5 -0x3f85ec14972e735950547cd93f4cf383de3658d1ddf597607f8aba8990d7752a -0x574d6186a66a6f6877d3a3377365adfd39cda0dd8f2d21abf6f7c1d7dcfe45db -0x9f29372ba92bea577cdeed60dec5339228fa8567601aabfbf952995b2e88eab3 -0x6b1c22a550cdc7a38d1aea1a8b8472784bd61279d0a3b1c95da2103b7ba49a9e -0x65a275cf408715c63061b41f50788c6a345d7832e9dd0947e63228bebe74e8f7 -0x2596cbe854cb9936b7017808d6d9a15a241e23a987dc9c667070308e3b2560ed -0x1da87562445ecb6472afbe1d1b498e5ee149a798c17f300cf2efdddd2efd7ac0 -0x84e7037fc5658e9e17ff7b1050e08dd1fd376ce3a1e268110e7eb8bbea0c5238 -0xafe81e5694a11002d8b1ef9aedae56bb50e011b01c92260b38a0e37ca6d8cae4 -0x98cf0dbddc708391494a446b349dce9eb87829088b4c1fbdd56b44593bd9161b -0x43b0ffd24b28f278c92178f39f99c753f97c3c785c2a3fbdf5a4706dc086f856 -0x9ec0961f44a04c64608a9629e0635ce8edc386be8297ccfc8ad8eb61311a7f11 -0xa36013b39dc0436a70f1b1fe9e3160455906077aec4869586723a815443270c4 -0x0509469602336714944635d9e06b819baadf8e63a98d3efd489f8e8e73ee17e1 -0xd8908ff4b6096b3153a63363a82908fc2d934c770f397dc2a35b0970665e4533 -0x6f5ab0c83083e76f3bbb44e1243f7315817052624b606ca71bfae4e6955ca867 -0x4bbdf49a984a69c7df434dc2232f4eef73e638dfcb8bc3dd83c7a03e32da4aa9 -0xd166e06f094d88cfa6a2fba7ac8f6d919b7fa3d48966a48116d70ae6fdb104f1 -0x271404e0b2a163de73379488663caa8c7842187e0604caefa337a8b6faaacc00 -0x0fb07cd8ea893c31918504a5f7b8d27391e2e2fb823c89038190433cc57fb868 -0x1528bf63cbcbfa2c3f3b5acabe7a69304302e4cd8ed5979198f7f5f4e147e68f -0xd0ac478cfd48bfa4bd9e331f78f998aa0af570464289ecc6a028a3b461727f8b -0x635e6d9a904a517c21c46b5924857660fe68cc4c6c7b86ee79fd2397fbde6fb2 -0x1f55d9d6ac1c9a5e2835bed6a21b9ebae9e05a256868166da487c8d934daf07e -0x9397768bcd63ba8f8ae9d15e6146e61581e0e55fdae012e357ae8a2059fe7ea6 -0x7f606005a40fbb6deb445f79164308d65c4d119dc8a1292c515476fde8967011 -0x7c9dbf00d9487176c7c38de2012f2d7d845f3ecc03daccd142b0a66d3192bfba -0x0fc775b64f80dd383a0d914f3885539450c9674680bd782aac353ff03f856134 -0xc81f7aebb7e963323a57beb374bd4a648e46aff224d754b03ac68863a8c92544 -0x247cd91d6de0586a2f7958bb6a5d6c6bb878e92d9931f554d12bf3ad6615e7bb -0x40b6dab56fdee0d6d6eed5c533ccb170b6b05d1f6845f87ed3592c42d50a8777 -0xe14225d4448276dce85377b070c556cd12a5bf9edc29a9f4a3e68b1943d915ae -0xc2efb9e5493100620d65322e49b332ba5b88f342b6a94cee4b4aaeedd64d1a8c -0x44a2b7f44570a7d250a4edcf9a97ae3b7f3051493f4d50b35859e99e19449071 -0xdbadc25ca85f3594fa79e8d01bb5a9a6dd31a25920603570f615ab03330cbb90 -0xadc04d2b298a3ecede1ef3abdc0aba276acf635255c337be2074a3ca181f9584 -0xb65e68560aa5aa7c785230f9dd09003afb5ac5fa59bd124334c39debfb74a003 -0x3c9a6285c033aef3c99d1609e09cd058ab97a209c255347b097cf88a4bce104e -0xeeb1250060beb657570a42a9497211eb61f019d888bf41b93d266500e6b59e7e -0x7fe6092d9c094b68d7c1e81b70232638d3c1e3058e5dcf891c3fc38351c4f8bb -0xf74c62161b2970e8343299281e2f5ad9c01979cc88c7b98de5e86a40380e23cb -0x00be57f48202a74b80826c154596b268e99621e91ae23876e4539e026bd7a4a1 -0xdd5b3eeb528b5177e0bd524655173f62a869c40aae2ff639dcff8c3abb2b015c -0x8a0e26dbb5b2e7e790077d6093a38a73185a34779bed9b87b52f6f8216cade15 -0x872812fc07e64f51b4357d01033803dfa64a273b41fab963263f20bbb4d79202 -0xf5bba98b518e4181ed2aae106ce8d97b2e78a6ec03edbc2fed652342adde70fb -0x26c08ff419485de9307fce26c5c5dd82856dbf7aee18ec9de77fef24b64112d0 -0xe12546e950088cfc35baa17c3ae8987311374808cb062c3ef49e9c841f14b2a1 -0xe336c2ec88adfc5df8c9552c1cec426050eabb7c8e3809ea866d117a23a3374c -0xd1ee5e6a27f72dd072466d1b52d4685d47e1f41c9bcb58e4d19eb87defb106eb -0x7f48ef460d5d9a21d53190522f48fe0f9f2fd9da5c8b40116835c4d84797e08e -0x4c1dc7c8ca94241a173fdc31a9febcdd70499e0cb7ad6ad43d593b72b71e026a -0xaabce3879ef1705de6f4edc9534cf1155cef00599708f656b31fea42528e4d96 -0x8449eca4c9e2fcaeaae8d17a95ce0daaf34145594f8add281e82e851c9025d3f -0x34a6e0dd51de58e1811a8be7e87f339d0b6330f489cf0265cea3057fa7a4c351 -0x5c692befd27ed7a89bf98e602da56c93bb5e3480408c93363d6e8a51d295c2ae -0x95c385eb660d93c21a54c48bc7b218ac26a23f49e3b4e9b7382e1ec8453a6070 -0xafa58a3cd106809b90a4e19e84e04f32b0a66297824bbbe87a324f5dd768434a -0x74365f7af3d353ab2856b458300b7b6bcd11c7c402af817f9d10535d49db03f5 -0xf8a4b9f8b7cdbb6aacd8818af4a09671a832bd320185830c0573b5f39f0de206 -0x1eb14e9c41fae7f48d87aeac28340f781a0aad7f4341dcbf32707fc310cb895b -0x4e6bc17cae411ec6b459a2456f25fe1ead5ef3985a0e1cf26f945106768fffc6 -0x3f9da378e77954631f745c78c1fe843309e5c8821025739a0c2808b1d7b049b4 -0x67a18304b0f08a8a52d14fde3ac42583ca6ed1d1b80236a4b11c0ab5f724b5c6 -0xc63d823c850ce030fa9c7879ae7ae2760aa2ac1daa7265e1af8d6dfbf91fc2fa -0x332e8a3184c8990f2b3ae7ae478b587f918365d78e729bc26c06ec390b757ad2 -0xdb199d20a57563cd138fea6ecd7b90f3eee4f2eb6a374e2d84011e986673351f -0x94b93b484c04e12133071b362cde9d92ee0718449d80ae707c08b2aa98093e4e -0xeef1a8759b8b07df78f0ee5db6ebc040dac01eabbf5c30812c1b82e97c048db0 -0x802b6872b9fd495ea5a68e90f771fb3fda1dbc823180816e27ec590d66cecfc6 -0xc9d65092171af70001f3de33217e7edf7c856675d6d336f0c9d4e8ee82a92760 -0x7f087357677c94ce62f673341f6651a2bbf51be2b7a218db21ec74cd6965305b -0xbaf21daa8c36b0fcc410844ff18a48a377234c7d8787bb47e21f7e6fd22ecfbc -0xdff3408e4ef23772b7d5cbb85cf2df8fdc94d5b3bfca09aec798aa2536247f1c -0x3ee88a26335255680316eb6853528e5d6c716f9eabeb78bebd9a0f3176a14ed7 -0x417c341f5e9d1a91364ad4e38fa079eb1447f189d780b8795e3b2bcd300cc8c6 -0xfa8efcc5d27db9ecd0f272af0cafb3cfd2347496a09076a0a0889e93d90b78c7 -0x3c377e19424bee36fa0e3958f31c10ecebae27d1b570eaa0121cdd6eadc51299 -0xba6e9a5e8a7c91b4d48b1fdc3da1318b9d92f85495d7fdce7b15d57209b88e5a -0x0aea45f8ecaf5ac286ea828277aaeefcad1eded359d52fd657e81ac4857b70cc -0x64b3b8b8d6c67fa7fd9b22724f2bb2a605762cc4353268fd2051d8a3243e4a5e -0xc8667ab4ac59b51f31dc0a540997453077f85d76310f212e686a5519af8dc024 -0x2faa3e146a173e4f61c214e2b9408da9d4a3cc80fdeb5016f5c68fc222c4604e -0xd36fb0f8aa5b4fb3b6b1fef328803af822ea96e2cb28880566df1556edc2d4fb -0x1a9beaec8857094878d2acca087d09f6f28543a095909978cba8280fcba7232d -0x7c263d03b349148f52e3e30b91bf3403558d41854d87b2d47145d1dac7ad15c8 -0x76c1cbb6c3513e6b833463f9b00e457dff0cc9a48bc707695ff7ac2c1e575f24 -0xdd221adaef40e1e569529823b824705fd2444e11eb7c5f56ca1c6926022a3b81 -0xd6b7e12fbb49b1cc2b60fc3790dc94d5c849a148419d6bd31eb20747810fdacf -0xdc21e73cffab79a3aae738f02377e686c2b027322d85f12325147bacfbe99a38 -0xf3fcbd1d583f3f4b60006a7d916a63d6e9356b14ea3ae93acdcdd41ff5997418 -0xebd2d701bead4133ecd6c53b1a39e472e5f7dfdf0fd1210c37ea3bb36949350e -0x71435eb6867587a18ea83a7f49505670d25421ea953fc21444fae3077bc1c3c8 -0x8cbf1d6e45e6b69e6d0ea8f76309b0a53dcf494a4cb96c8067e56801392562cd -0x47630d493d096bc95b611d93844eb1b70791bc63aa24a05e0fd356d29fa564e2 -0x31c3b6b4b2b6662e63fd9ecd0e58201eba66ef3fef104de532e3413e56aff83b -0x73473e781a5acbb4d2a78bbd376c4d4aba1b17ef8871476af51837b0e5c0bfc9 -0x180d8ca20a05310c9309b5540d28d0e0abfe4fa898456150d1cb3d9fa8c30ece -0x606673b40dd0a0675dfd3ad3de1bbd72eff235fde73146b54bf3dd85959836a0 -0x34de4a911b5f5b3e3561248d550a168cfa07387b70a226ab254d2c0519a2181a -0x00a24acfe6087b61c6642262f80fd1caee857e9f7cb5dc5144f4b72d6f281fd2 -0x7ffbf77f08130cd2b62fc78ff3977e001e9a0356bac5d93772c61e1ba285e6c9 -0x60a40f75986145f1a1acba3cdd3b567db547d9eea240b8e5d7a4e178fd313c04 -0x9a7f2e0b6f744fe9becb9ad82d74ecedc52af63c6f339f5e435ade09e7e6e8ca -0x916231070cdf1378c296ed2db6e96da483058eeed063a157d4bd501a6306b4fc -0x4be7d469ee65e049e3dc48e72e8ea5a888517d133e1ffb9829b648072abe53b5 -0x781f4e58afdd64678576ef5a56efc90e8f446a4eab0cbdde678d000801f02082 -0x08b5b079a43904ba593d28cb024d2e965ca0b01599d3711935833effa5f93283 -0xb546008d90c712a9d0a6273624c08cdfd3b3565ab974d0ee3b51849985c69805 -0x911b8d1b59483105910e090cad0b929cebafbe8c46c6f2eb4926d8c72e3c73d5 -0x6d71faec158808d9e1f4c1ee7ff0b675d7d54b54d8c8c98659a011363f81e929 -0x8e797de9aa64934573371cf9733e9a332f7da528f92fae80f732b155fcac238b -0x19c6b3a513bfa772c5252618fd7f8fba0c50f8532559acee8c5dfd6bc8d84283 -0x461850979bdd5e4ebb672ff20c223a92c96a39a831db60671a437b88ad94da03 -0x837ffb5452609221856dc5a604341c48d7a8b98492137839317ce02a5d5b9527 -0xdd060cf14cd6f15eee8604efe974acd8a71507c9d1fe944a8fc76edc7d5c7572 -0xf74c966a42177101c9f3fec017b591a8e931c452cba53e0e02b47bfedfb99a1a -0x748859d83f604a61bf9d297e4ea1f46f48c1117256ff7f504b8407b753bc3606 -0xae75bc1069fa91a365a83f0b88d48633d5e1873c7703e0905c26dcfdbd84e9f1 -0xa7a5c48968b6dd5ea1f9c31e3c29888fbaf951bd3d1435e4cba521c5315bcd53 -0x385c458aed843210c6d101e2523d4bd86ec5b45a3a46b147fb87ea5fa15721a1 -0xc89576b5a95d6d6b0f51dc51e5e5eef65f5a7f42ac53345e5e5bf337141f816e -0x807b1c57d89462cb5106fe03d69782264a6b5189a3a05e9a33930985e6b1f776 -0x1910a9bd1f616aa4042d46baf781af55b69a92f03e23d7dc1f41c41f0c8ed8a3 -0xcd9cc241f0b0dcbf230945abf51cfecefa65592ac5f725ce44b367c33b93a054 -0xc088cdadc0e2dc5da0680e8acb7d742d4843fbb78e14814c6629ad2bf36e17fc -0x310eb36a0898dc45adb84a61d8b4801101fb53c7427ea11ee5ed8be06e1bdec7 -0xe0024f7765d3afa7bfc4d1ad4904b29c22faba6e6562ae699da8ff34ee7aeab9 -0xbcd27ad5a9d57e0c4c59bdc7f327a7a0dbbd213d4a43eb4d987ddb7e886839ce -0x9957e0c1aaa1d453b70aa99922b0c274d1f3a8029e8e372543412d1ddef077c4 -0x38acc3892bbb8a0bf1371c12d136ba7a63113aa8074dbf5c69824fc49c2ee52d -0xe9ddc4bdee289157c699abd9af8e38ef5cc859da86f158d840f10c285b1aafb6 -0x792fdaf9a5ca1eea2d09a70b0cfe1660c73aeb56f20d9c7b89b6b332b6a77025 -0x27e0633234157fb4b0d77ab94e1e7fa4fdfd6e94609e91d25d0d514693e0368a -0x81734f2e7e0575fc6a7de2c57e1570091d925bb5311eab996a675a349236e112 -0xc91497d41d415883c876e701abc895f1861ecf34e8bb0f231711b95138e85484 -0x924d61ea6d57853c15fa79ea685b20fc87d0f29f67251684793cb0d3388eaa15 -0x0170837d1ea32b3719362f2815e1194fc7aa7c6f2818ef32c440ae0fa41ab854 -0x09259f966d6eda7b6888eef078577398a48f189f2474b04a1ad68e69201b6449 -0x7a692d04b9f87e0debfef6cbbc3e949c19d2d0ec8ba9fb5d093d8470a46fc0f6 -0xa4621fc80cc8c7b01561d6f716e2250c5c68371bb9ef454c00e2698cfc712398 -0xdbbb161780ebca8a982c8c6b6b53bd0ff296c6a1ade8f0b7aa656f1765be0775 -0xb627dbd7b185bc4c05dce3e71e66e5c162e43f24d8fd27c722508c633bb10967 -0xe3b526eff3438f689119faf453e0dea9087ce26d6c0e6f0ef722eb4e59803a03 -0x67c74f8835123e3f4c2821c2939c91d999afc68e335d73405555035a972d5381 -0x90065e0149be0831402b087afad3b7c8d107c2a3731db5d306656a7b596861d2 -0x865a145601049da170bc7cd24cd6410a2989a0bbc16cf6f1ed1aa410cf75cce6 -0x00baf827021351f7cbf3a56cf9e8c8696b3e0212380d4bf409e61ac808513937 -0x1db4c7bc37f52dab029b75ff6745dd550bd3eb7b8740931705183be1be794795 -0xddfad54f76a220473a5ae310c78ac24efb65812683e8165650cbe1390dcabe2f -0xa93ab84881946951f70405ac59961fbf461e39595d8ddcc952e5f41d21bbfada -0x71fb6711d9edd400799e7aac1b296c8a0bf1685d942e3ee44dd59de0e1c4da38 -0xd971e3deca1ac782d7f60978d151d7291938a90af8bde34f256089b7c9b0151d -0xcb40c2b0e2d9085cfa7cfea37f889c7c1a54eaee7c7fd5978cd222deeeb39ec9 -0xe2e2db981f26511ecac95e7f29923c199312d529a6445e8def6df8f8dc61ea29 -0xad94668c77719509d175b0c8dfac724374b7a02cf44d304136044dc3be1aea69 -0x9094497db65be90f06cbb99ed6a4a174a1807d333c000c147020b6ec97fed314 -0x1a0a763ea4444ad1688e8a6516b570f58a6c54e106155d2e404579df60938493 -0xfe738fe2fab571311c2f032a09477ef2c2f6dfb456a5d903087cac5a25cf6155 -0xc4e455fc8407cac82a24f3116d0c8db0df883188315d713b06c23778c3039f44 -0x86afa1ac42c219b6c8e0029c7a8e5b7121fca634275995520d18dfc0a4834ed2 -0x42bde40294e9c97feb207d63c56fd4b7a6db237ae969fa39a6ece962efde01d8 -0xd2bd4e9b8e843ed8ca1370957ad52c6b86620c2e4fb42e8f74b9686cd1015436 -0x4c897fff009373b98ec077cef953ab5b3132277b1ba577a8496d7904833a1333 -0x8e13724589c6b85cc1d57ba6e35c062779e2a4bbe5cf2b255ccd8a934eaa56ee -0xca637e057f27c30291d0626162cb2b1a9b0c16713c6345d82dccc33550ab514f -0x1d8edffeca7f17ac25f3e67875ff27741b3b1679375f40e59996167be893d9dd -0xbee20a00cf7247d3fdd3a4e70be77aa774eb67093eac7148989f3336e703705f -0xe10c5a3d6c6e8d228d4ef3934cf903af42f182d7012ed9b7997f23f1dc237692 -0x4b1cec0ccea9a07b60e77083fa1c6cc63383a3fb7537b52aee268b1d9f13561a -0xa452d8c4bef205a7be0b3d7ab3febbcc5bd0c76781a45ae2f96157c6cf2b598b -0xfa58bd65ca3d6bb181c2f1fd9e1ec8b9167270699bb61a3f17ede90cf4656ff2 -0x45b5eb6fa860f8bba4a52abd4f891c427a82256904a5bb1f8fdded280a82e1d5 -0x6c9c982078b6b7eb8102baf3959b8595acc86d1b99efe4c547584e4385c283b1 -0x1dcc2a5f4b341aa12c490f88eefd82e7168c9589f93e602478966aea7fb8b843 -0x058f684950b962a428f77d48a51c0417e233b69494d1ceccaa1369b44a4e6411 -0xb8eff3df2fae494d3ff6253cba7979dc66344056415cf220669792c59f2b8057 -0xa4d5543047d6f91c8e0f4bd77a88be85f7984c0193b8ae9b372aad533aad9466 -0xd54a3fd1360db6bc78d99851fbd83041a496f63361f0edaeed2d7c5fcddc275e -0x5fc30371f292caf93a3f2efe52aa0d11ae8c579af62d60803e055ba088fabefc -0x5150fab89945ed4f187527cf6dc568bac5273401d3fc7cb8a6c6b5eaa6309c1b -0x1990f0e84dd5aa1bf886d14c1242c27363b354b9d03af68880ac702b6980bdda -0xc9750136cbf4b77ae8f8bc35378d764a1bf892803d0c27009e21c8c768bd1597 -0x72f223429df83e9a511dccad2994ed4be8b9b2ce0e342b9388630bf8c80e651a -0x41c25c1ce35f6d98c57aa9a16f51d659c72f4f24976bb2a2cc8af1de466f3115 -0xd730713281ea3da2c9ae1e5d35189095be299dc9abb0fe3e49b45fcda33cff87 -0xab423918b0ab0cf0851d6543a4e7596f3eea54ea559c95ec8ba0b8c7dcca3488 -0xaf2c188d7661d83213b1624646a2d51408ce3446b83995b55390d8594ee4903b -0x518c665c7b02bafe1bfa3b795de7be6e6971fa80d24d730bc5958afc2264c306 -0x740c6f2e0066ef628771a5a62b561ba0b95c0f9cf6cae8a37ee476d164422979 -0x277211f505b34180c20b5650e825305a93c7bd352132e15bf28555d46f402a78 -0xb5a24a94cfd0494efb1751d4b0d92b53e8858fc23d175d3372f27aafe2098c01 -0x65ed8a6c1411cd6c86068afca8e997521d52c355409b4880f92ae3178ec75d63 -0x4df0b21ba5cb44c8df75060d166932dbb066238b04bfb57037cc3c5dd70a0807 -0x6d1817bc22ec0ceb29b4aa423f938afe3dd6df43e1deca254d731f8c61b14fcc -0xeac962901a1f15943cae15c113bbbdc31932ddfb90659a192bd9e8861bd06917 -0xb1081269d57a2637d2a1a82356a1e1a8309555baa7f64ad5a35bd84034e42bac -0x6e929559469c22530ec7dfbdaba85b6704c71871a500d7d90c1f938bd95061e1 -0x8b8b97f28fec2538a8eb0eb0154a3acb4ec582d0eaeb95fa0f8c4b3536bb8a5b -0xdab700ee61772c01c871840a6469041d7474590cc518a4fb218c846712e7cf04 -0xc8904f689f27d491b51ebb8a5ac072a58aabec261c9d8584c2a4fd421af0039b -0xbfa4e518a01c141b4662891f0dab9fdbfa0735615689291ed5f8536a2953b231 -0xc83e03b0af2192579efa4ba72cda89fedabfb782e7754400e1c4a899497e643a -0x6ddcc6f9c01f747ec6a7ca423ebff6771079203c41d285b04385accca862b492 -0xc0cee05c1c42a7739558c99d56e88d537596e63c145d7a36942894d2ce1a5710 -0x44fb872ed0f4d0f8e104d038c80f8a9fbc1ab6f6d1d375e713b6ec3ee5324ff1 -0x0d1b7d1de0596618989d437928a416c7fa1786e171e6428f748be9fee88933ec -0xc1417ac697e28036b45219ebe2fb9ef6547a17f98d165e4db09bfff911395db1 -0x29fc688018976207022e46f3484125b67cce7e2171a1adcfc88b37889d3be0eb -0x78f079f9ba7eb4f15457678aeb3147e3b43320e12a8f03a16e4b5ea7774ec4d2 -0x498fdf5307f1ba25ccd01a17e922c31dbb25bab85d74df0f22988d717261757f -0x6a6e1fcc299602e0af309991eabdab76a0f84a922096068f03354781726c155f -0x991021cf05e1c7ef2a61cbd03edbb8fe8aebcd5b186ac9c4936cf310780d6067 -0x339e23baded0808d2d2ef370d8be4cc3fe2466758a7bae15212a0571dfe5bb97 -0x37cf3d410455d4f2d761b64e51a24c4d9c0b1bd9ca40719d6bb9ba6a64b31e00 -0x8966cb16f57127510d4134f1cc0474074120e19c7d21dbe3b3b6f755071be416 -0x937a2d76fbe9625c1eeac031ae084352be2667a1217b08e5ec73fffb7a46f7f2 -0xeca3a5528bf368b5a8ff4f69891851e76d61d009593871450653aaf82484d5ba -0x20ca0a131f1d515dc1a044de8cc751b2cb7e02df1210cad3a3a9106d24480260 -0x1bb5f6a22195615a222ea416125781887456ed81f142d758ce103cc9155d7a56 -0xc224b9c623c98ac0f579b356b0c46ae20443b82a70d77872dbfca5e480c7ce94 -0x7e184ac346e134f8acadc733f999da8994b6e61297dec51ee7bad20e5de0da8b -0xaadb087f61350159a0efce49fa66cd6cf43da8739314fd7fea3845c406bb44a2 -0x0de30f7f68a32f598867baeaa3f0cc4c213a2b909c49d6f3bd25fe9a8717a8e9 -0xbc8254f85ef8d157f5fb6b839aafe7ac31aae225c35c3d5b996b39ac6b6672b2 -0x238ba01fe6dcb1c690fa9b8d1b80be0f8a7a787f5d322a606c01043693a37462 -0xe34a75fdb484e5dae10bef09d8ff4795dabc19b9495ee44f6dd77cac9f8eda94 -0xe2e12ad2f0896b721e08fc95766e0f27c4750527dda8624f3baf18979fed842a -0x99c635b783cb258fc1963ad2f91b557d2467465e32598b21c1852d8319350493 -0xb233a801c121312dd97adb942446cdcee7f833ee17e62ad031bc0fc54777e40f -0x7946eab893fc4f511c80763d435fdf94a6bd82e5fe19f36fd65feb6bc30ef0d8 -0x09fd2e2cb1c272dd57a3b46ba725440eb1b188dda6fd0de654643b29b878f1b9 -0x91714ae348904f225ea551604e31899689587a3f79950cf513c6eee3dc755f8f -0xfc15c9b70a4044aac0158ab5481af4623dbc14637a9664b027fa0245f73bda67 -0xa80107d88f47b04f2e7ba43f02f746239e234f1f633c742622a22abf3b4dde10 -0x58dc8a361daff18b92ae2abfbb57e00ab56bd910a04a35d9541055e7405f60c0 -0xf7e45ea1ea1a0fec07e323fdcaf3d7cad2ee217602210bdbc5facf64ba9e95dc -0xe432b4de3b2e820254319137225bb03e8ad12272834cb933bbda30d277434455 -0x5ac8d3a63879c8839f876161d6e2768842f421af05df2fdcaa00fcd21964494d -0xe777cc4d5dac2b9d897eff6e73464e9006cd4a2672ef06eaec12035a3858f6e6 -0x45c954f034e7809b996c030a8f55222d252f17c8aaa5d97c68da3b8704cf92bd -0x92e96ddca440f747bd70395b520bea1de7c9b9eeeba7e38671b6de28516956e0 -0x65a31aaba7d121462dfa0ec1873b3595f78f47246898154980da588a17f0439e -0x1c75ebf683d28ba3960dca71feec75ea02e28cb1b25f7a833eca493d5793c26f -0x97c5cefb1920c22d5e453f64e58d1f8fca52f41d63fc74c60bd8876b97ba2be6 -0xa4a01fbed8ccbf62615ddcfdac2bf52bee5080326345a535f1315cc236c202d5 -0x5c6a1c4e9f48cbeb20940e8bd0d41d8bdc0ca539ee1c2aaa13521d35406ed5cf -0xf12e63e932a88edc26f6fb23b6aba4066a94efe1a724e9a24ff2de352e6408b3 -0x841315b4c05fe82cb8381173b36a4dbbe4d9394528aa8149c67325caf0d0f27d -0xd92b3dda4b1b577dcc557753810eaff96389eb6b332dcb95e39130f5c612f4df -0xe017fd56a89d2bc32dcb9ecde67d9b23d8502fb817dbc6d43392e86896606e22 -0x1b21680e54a75ad03dac68716bd9588b244ccc7260f9703af0a49b1a85f58240 -0x30f868e731b02f28b0e8a682be6b415716db25e77d3f0b7a62dcb729c2e941e8 -0xaef77d9ec6c63a3dfe3c204b7db33180318007cbd8ce3a98f5c72647709b0b61 -0x0f28c3010a96ca7471872666f44a9c41b9aeb42ebf6161564e6032d9b1d77aca -0x7e64fc596c62389aaef596db4bc6dcb20a6fca207ed247e2179e6eb29a5cc219 -0xcb5951a5b6fcf632f137d00fc21d3186b6ca9dd6f31da3b9e467ccfe21af49e8 -0xb460fa4c618c79415c100f5c2cbfb52af3e545a997ac16dad10ed22b1dc5b35c -0x91822087c6d9a423d9cf2501b46e0b256fd7ca9f76515aeb238dca77b516bdf4 -0xd6b9526e6d01e2cfc7f21dae5ff0a06ef53446c115991434abfa62b6b035ae65 -0x2a3ab4b6a84ccb53fb284602978b8908e7c7cb7876cd054a3dd906e5072ed0a2 -0x1bb9735b9b8851b5787fc9244e39dabc43481493fa5ca912b2e2b4f698228510 -0x997076ff10a86a57045e517756283115f844c8a523b085ed409268da67a3e034 -0xcac3662766ef829e76752602b7cf12f6ef3606b23622abad572d3eb9c6ccf0fe -0xd3f69abb94461ecfd1d8664b7373310246cd754817107f7671f7a877ec0a084b -0xd2c25f7e7d2f28397114dfc6bbcd48d58268f85daf8c84701b060437cd41ce06 -0x333266588ce23b64adc8b770246d1c1b5075ab005e639699746222e509060f07 -0x70d6685d0716441c62b2be2cdbc999fe6aaae6faddfa53981d38de05a536f2ba -0x31cbd24217c455d16b37e65ef3cd0f6948f9192c447d225f8459ba6927b23867 -0xbad65440f334362510606f1731435a815323b69449e8c9ef97bc058cae6ec28e -0xa0615c4e17d4c6faff2538f6ace550cb31dfa61f48d7452ab773fe1692631e77 -0x83f8da99cce6a747858e1b2b14bdc63e3c2a38a5ed12fcb56d4dd49f3feaed57 -0x4a208628c6975b49ed4fcb26a48891b5efc182e5c48e14caf3d5dc620527a52d -0x73b7a9e32336a3c33834948a92d6d76c2f65b08529a3f9d472768155a29c1a98 -0x03d3fafd8ab6100dc53fb1dd441741b32f99a238f1c5fc9288ea23c70e3843e8 -0xe65df0be6c1ffce9cf1b1888f4f86f94223d4271bef322bfb712b59567cbc741 -0x3792b33c0fe52469d3bfb99a5da4c39a42013f9f3dbf15aa34e64252094f79dd -0x558f46b0c257e18e7dfa9d9f3979ca4478c2665312d9bc9f573e572df51e4702 -0x7cf9ed0b3edaecf0e935f92247c49f3c67e90c1af9082b8143b5a70dde7e6a0a -0x768d7f7941e1c4707cd289af2b36faff8e559283d89343c535c1142d929251ed -0x4bb1db81bc69255068d99234988fbc219396207fe124cf25666ed3abb1a90a31 -0xf4b2ba169a17158299998e969a9999cea610533502ccb55c553ad8d970e4a0f9 -0x1cb5640f97d1f281ef94bd43d9407efdf961a09c3cf84fd35b38ae41d285719d -0xfbb9578f88556129623b87990633e6713ce6c04b28a08c1ab48e977fd6c7833d -0x3fad8352290e36cf7defa6b64b4d9744b0bec29bb97962c0b1c118b36d3ccdf0 -0xcc843809143fe756b5af45895380e90de675ad41374f8b2ddff7a9a682cc300d -0x83dc5e62a9e06fde3a292eafd49913367383d7e213d89e55d1f5d6f8f1743cdd -0xb982af8e370af233c357a499a47087b4caab0e6d6770ac84ed77e50395a22667 -0x103cda298dede81057f21a3dabbfa94cc9510e2620843028f64805563f8617e2 -0x98cebf85943c75175a0b59de158ebe13872f0a40827c01983ba9502c6c79c35d -0x32fe7890a49b5524db15beaf6eaf087017b679ba0bf94ab1a954542dc0b9b40e -0x6138259b7328821848ce2a2584728670aaede94080551d8566ba26965a022d96 -0x82161007b36d30efe215292fe473b17be25cfec2ba357271d1f976dfb0338910 -0x2c8e23c9de091d59393c5c082ae9e7dd6213020c6ba2ee0f666d6bf8a4fe90d8 -0x7db0414a196fca8f81ae2de7884578a7bb30ca52d23f2450b394bc053fcf8121 -0x778dc8b2bd9261e889cef7808f78c50ed915a2e87619d9b72fcfb3a89323a33e -0x2ae7a7e49d28c38abc7175640edfbf9a218c96937b7d469e2d07d9b17f7009db -0x3321b9e0042461397ee18651122479265dc910e0c4171bcb85f81a4c910315ff -0x6115c56211ca8c17ff8d3fa8f926b19e860099e30faa58e3f60a8e1db13e08a7 -0xb72c524b042c09b69a0f7f21aae7a38fe76453b6dc0c2e70f9edcc2c8ffb6af7 -0x334fbc736366ff7885ba56dcc6d1cc74f6a2cf7c87d61e0c2d870a7934ffa7e5 -0x11c590d665447cb2deabb2894a2540d815e3e533787d49821d5dfa03d626fbc5 -0x34eca8e17b8c54c762a14d9f6b508cbffc82fa0517aaeaa92ac11aab2a09f36c -0x1ad78231c28fc8c92f62125a73d7c4653df1125e47903b0ff50ac6f46b86c494 -0x4748b714848207b489cda76526e382d79a613e5bb209e5761b8abaf726675e21 -0x56ad5ee1c2ea9239bfad7306ee23ef076c59318c9f073a32a61b56ebca2c2cb1 -0x2dc032ec1d9aeeb0a0ef92c591c590f9e5511f39572bd5d8cdbc8947672d8f07 -0x9edb10e1c77f3ab7ebaf3cd0af306354b20f6759ac6da1f15ad7a3f865af8979 -0xb6ef34d0a8572f0c1aca0849cfb37ab3f92894ce1fbfabcc586c8ad08342e5db -0x481f820160e80337693fffc65ca28dd054b390316eb7ac7ff0bbe57e02935826 -0xb4f607e5395b32257c99bb1a6743fae387227323d25fa5bddb536ba5a3adb7da -0xf436518e8bbb3fc02b0e8d9313f1613deaa5de5a4a08955b5c3986cbb66b3d50 -0x8977ab7786cdbeb2a7629a00d1fc84f39681cc6b9e3a4978bc8bb6e54f5a1a8b -0xb3b993ed89ed36d3cc7b40a4e7eccbbb4f638779213b8bc6b803a3e5c906b7a0 -0xe05f88d5734f132ee8212e239d2a0ed7e4a5a74f2bcccdc186a66c12dfb84537 -0x6b3ec0509a40aef1dee5ab3954b3d8b2c08730f68bfa3fe141ad6da7e55c9dd5 -0xa7998e381a7ad732862cdffba9fe210beebf6351a67ba617b6580824c69512cd -0xb0dc23931164fdb174adbf120bfec87b251e0462f4e5b4fc4784a02d802612f5 -0x8f78451ca1e7b8953f3f537e124111fa22ad5ef58cb30a58df988c1d8e1474ea -0xa37c4206d580060ac0f36c4574592676bc38993df08a910877570e9827138bd4 -0x874dcf02cc13ced293f84d78bcf3d0ec700a7dc3a767f63ed623334dd6af9067 -0xd3f0ddfc2b1a68e1dbad8419fc02e9136633eb194ba6bea7882303a7ae12d4d6 -0x44bf4fde6837fa67164692e1f2efc355cde2adea4c736d0f7cfbfccfd564d7d3 -0x1f22b721ee13ea9e568fdf0397babaf084950674e9d2c62b189c98979d39ea70 -0x5ddd1dd7b39341c1996e71ecfcb60ec5cbe8a0281b07716f804fa47771faf921 -0xf13781dce85151873f72533d8a2347be45f15cb377981fe779ee1a9cb98976f2 -0x403fd54ad5c491d55dfba321a5e03ff4ef73ef6a67888829ea7c51e4e8befcc0 -0x7da1b76a6790ed5e60fbe79cc2e6289279742b4a8b8827ae9bd2d9133706083f -0x18931528a7e03a6d8fcc305e06289283d179b8db7abcb1b34bb39c7c248a21d2 -0x149a7e34265903b8b729c42be2eaabda46b43f1a654901ac8cdb1ee7cc9665e9 -0x0f618c66705fcac80c0f2235701f6806afcb25d4910a114afef99c6d22004d49 -0x5e849d2509b4eaf7dc85f4657681634c359442c83467f73c83ba0a691cd7037f -0xe2bb7b4be8c207b8370791795ba9bbda76c29c0d1e494838362d8e9379c8a13e -0xd5de33dc714ce2d005ca77619c182f53e4e8fa2b259720407a4a1afa189cda40 -0xbe5538e41b99ff9a5206c5489e3eb855d4cec33b718e186fb21e2f3c59dba906 -0x6239995947b0d4f36e3cf7506d70c97e8ce6dde82a17c8abc9f1c9a34ae0181f -0xdff54935c299c6e81dee537ff04e16a83fbb04fc8e9c491d681bc453d6a82d68 -0x8fe4fad64f7ba9d053d7856fa9247e91c219ed8dc7ef041319ffd030e3dbf1f3 -0xe8b1b1f326c9b9655c8b5ca81f760d744d689bc78502e405e266860df12c41b1 -0x1dd5e58503426a72f6ae87c1ff6c0d9aa3fdf36ec05a35aadded9e6643013d6d -0x4d0d4cc4bd8b14b402804b1321e40f1f7009b3c2b882515322550ce0739ff82d -0x0c54f9b591ae728c9c4eda5a770fecd5b2f321b55c4af27673280d819358d54c -0x99456346f94a3c1f1028873a691578a493ebe44660a48714466c6f3efbb9be1a -0x895831da3a7bd5b73162c86ba4f447179d216c65a893894cc7cec7ce76c54164 -0xd005e1f11038d27e6d2814b6c9d3504e0ec2eef6d3f82ef68a0dd3b37f2e15d7 -0x9bd72e07022a75a4208c340030df205c982e5cc5f84f4cfcb9b970d69aed772e -0x7588ba429b71271a0ef7e1c1dfe583c509f67f375ba61dd7fe22f384aa99101c -0x55c24f02ae0bcac0e21d1d8d54a5e4169886a2e022a057705c98e5eb36efd47f -0x7b2521308c41bf45c2bc863971d0694b275017dc709d213ca3a44c6cc466da27 -0x3ae9f576f17047914a75c4a63542c35d74e84cd085f8ed8b48927ab441a53a7d -0xb801f865b49655a84cf159e382b943042730d2228cb2b99c51d40ce98293234b -0xf7f9aa8e0794565d78e8539a45742143796bf7104bb0d50973f7ec279b1982b8 -0xce1e76727af48d1f88ea7a3c1a13942a70816061efa473e5ec3b933ca4fe9594 -0x700cb69d79261c71c036de0856d77f43d8b72b5f24cd7c1155911ff3e5d8b477 -0xaa87e9fac8ef828fe4f83ece31911252d879dc3ce7bd361f7ce5432728a5f4d5 -0xc397a4f136306b090196dbf05f2d145537017f5b7e908c92116f2d5276a55775 -0x6b951ada40d5182affb7cf4f229da3b8e50bc2a56b663da0ef6da603e712390f -0xcb9a880706fec82e2aecd051aab223e095c0d31df447d3ca6a46e7798b3d41e1 -0x1c12aaf15173549b037eeb05107b52d779d1d554c160b39d6ee0bfa4761dba82 -0xf6f55f821432952a6640c9b90c28defef08da17846e63a4df8e1216e8f79fe1f -0xe65415c7593152962a55c017a4f1f4ac622bedb7d24832c1a206b00b94bdac01 -0x66651b393eb44d4de125f0e14510481482c621a6c1d47c7fba7a33ab41def418 -0x563e3ebe218210aafeab66af93a71e0cb9f6923c157a0dafd7cc73d13c0f7748 -0xce04336a26211ffdf03f38ac152f0d6c8f5e23beac4a168085a9f31f0a261678 -0xd85912ef2033a2d76a93b54fa6b7eb0a62af57d3036a5b02d13ed95d62218af1 -0x37ff3cb0b89fc9e9424c1464e17d61c6eee3a6da6702deb6f70452fdb5b7fe75 -0x1e812d5311f0f62ee972084f135aaf8c858a706c0ee2205e649916704c385c84 -0x5197e2ae95f370789f4b477215ff855674842490f2960492aafa249707db3c59 -0x1e119f7a84f5f34affe0c1bd186fcaaddbd3a9a6824f83db0f0bc4e08a704c63 -0x9536ef35a280b864890a47a42551af695bb4edf1cb5361f8a8d462f69a4cffe7 -0x902b627b2e8f3a453bf068f5f4e881fd7c5857a5711a3646b6b457c715eda4b9 -0x8e9cee7cc25aab8d91b1dc27e205dcf301f19f8586c28dd81f0ff6d8d4276940 -0xfa6b0ce08189e0aa6190ab33b16ccea1c6e22c5738db9be8084d496b8a7ebc17 -0xa8e2833b9a48d0dee3d92becc90f839ab03e34409314bb9d318957364bc4347e -0x2e810120ce2b65e9f7f24a8a393752d3458f3ac31527f48251eefc06892720cc -0x5407c658ea89d7c442631da8578a242b326ed4f813ac36fe4c641bce8e2791bc -0x4ca7890f70550db278dc9691c573cc8d9dd9d5066de6d7234956b97e7e32d031 -0x3ee5315bd9dbf5e67fd1e0f9fad2ecfe9ad882537ffaf16e2f72faf0378ae6a1 -0x01a0690e3b6165faa47a8abc52d02625928f34d80e84f4302ce411b472616928 -0xf0ddc1a20eb8207a07f8d93e99ca2c8252df351b06f1d3e8e9ca48f71c9f82e1 -0xca952731520dae42b68939b27824239907572364a961ce9c1e3b3541a3a90d2f -0x99c0dbfbb7acbea03d411da08722085c905ff04ac2c408514849bdf7034aaacc -0xa298d32477b1e5d04dd65ebd9b0abac9614aff7380e0ae9a5c45170350ffe1c7 -0x4719320b1bcc90f8edd1796074ed09dbba5a9b761a62d0b5a1d71b23a1a20a1c -0x6187cff9ad9b8b4a12942320e84ed7d158ea73c6099d597aa7f192dc11f68e7d -0x947f28cf4a359b52dae30a9d291a622c9fc7101a73c8e27bd5cd6667c1958f76 -0x5f03a2a9e18216f622e70f21c5e8cd0b493508456eca68292bb813eab7c0305d -0xc7155fa84fce6d020d27469c8c3c67d710ef4e2162b1f205f59289d6ec934d70 -0x9928be1600272e3ea2d1c0e3d9df69ef24c50410f0624eec876d10cb247f0676 -0x6e877cc60432f36ff69a662af275415c9d95359caff203ae5b1e01b51438050d -0x540f4c2b28a91ccead9601b79587494aa7c9f8eaf7ee2fecb0925375d3e9e24e -0xca0f03784aca17d204fa4816498ecb8a2da74a4512e572fac470cec6ca62a311 -0x7a1c6c6cc7553021260bda306e27800f49a185fda2e778f2081413edfb1d2b25 -0x3a280cb996aef6da78c8e557d3c9f1497a2d43bd79ca8b9d8377076f94c3acaf -0xae8d6e0338189e82bcf6118928cf169d549db47ee6b9b279df768833738cc9dc -0x9f8ffa0c42c2ca77ed6ea28b4a9e29e4c2fd6dbea4e3c8cc655b08bebf7cfa70 -0x89d68a656f029d5e8746bf70d0476a12c078ba06de9bc0eb5143f2f07fe6f72a -0xa0742b0a665d8a296d1d2a9e31a8d9e49e2156441c4fa923a0f2c527312c0193 -0xc693c8953c146d5a64b5387bef5fad35b7c133e4f7105205a157fdfe17cbd1c7 -0xcbc329462228911e88f86468e373ee3999e6073a72949bc019fd294031daebe2 -0x659c321eb487d18117c26789faf3933b01b983214ef38406788263e6b658081b -0x889e5b19731d479f83fd15d17c996fd3c5ca22814996fd647ff7521335b01ceb -0x4442c44cf126a370eea640d8693014bf2f7087990195601a500a24a16f5667ff -0x3878b5b4c15c7b0f785d1f954ed550b7c46192156dcc4307352467b6b6cf081d -0x9bf35542a76df6152520fe373ba285b920db2e149621a2c5feb2e5f9fa24c61d -0xb8e28034831839b06f9b537a12f1a467d23f41703c8261aa511ded3db2cb4a04 -0x03d77b2bbafde7f3a8f365a2dcf200e9ed60b59e58501d23dcd71b022a2f528c -0x1a0452856266a84ada8a7435b0c04fb57e03c3a25c4f4edb7e9b385ca49ea9f1 -0xfdd37e5ad7912425799ef37778405faf6df23f78b9c473c444b195fb016c0d6e -0x57be40d8fa9670c644567c335be1ff6704013548ace34e9a95eb01ba93d72ea2 -0xf671930cc65323e86b319a4405f0a6f15051d4e2217b4949f3b045801858f614 -0xcf19727067d8bdb43d50b4a23c04f5e97ec8e3b943821312ea3288b07c654ba7 -0xf1d84e46c302ff76a60984f3af477cb1df24c31ab0ffe2389bcddaefc6ed1e9f -0xccf3bda76f0cc1328d24ca0c12ec713188b1659d9e5a371c7b02b9629a70ea31 -0x4d2bae9731eea9aef94f34f7662054fc264243a2a2e40c665f9bd191aac47a42 -0x4c4b32fb8d5f92b46e2bac26d8259ad87a6b4648348580b77c0eb8b1b530314d -0x0811b76206728db49f75bd3964a18039203d69221393262ef05a56db811cf319 -0xd928274cbac9dd8ac209e06f845665eb8c18a8b6caff7028f2a7511665c0f23a -0xae0de1a6b47a164ea187bd010f23ed90d1c92d89029c1ad112184a16b0cb13c3 -0x07682509cf5ee8ee7359070dbefd8ae248bf7fde3247920cfb1d0a46ffefe58d -0x8a09b10e585f1eed98f31ec4f60087884478e2d27228a363f70b8f1ad9cfd9b6 -0x3228aa5fdf71cc562cdec62c0596110b66a4cfacf4d0af1a343f243a062abe7a -0x2c56f20413b556276468833b7fae5a83868017e70c10ee7dc93237e19c742c12 -0x511b369069d550b0f821b984aa847ab2f0c4e37b843a5410ad8fc881cdd45477 -0xa74ee972a16eace25d92f12867d5c2311b09a6884c9b17c42d73d5233141a099 -0xcb7f300fc3742cd0b6ed572db79fa37e65fe6b296f13527b8870db38d4a115e5 -0x9f3f96823c41a4c10fcaf67e5f42c3963097b1882d9e94d41193a3e6c46500f4 -0x43e2bb5f4a9f4b7d0f9b4aa646479497143e7b873e79ac9efe5df3ec4ed39ee9 -0x09f3d21f1bf299ee850946144d826a039bdf116af332ca3c213a2fd78f1bb3bc -0x3c89e5da017cb3792f356831a458f3199eec3ccc0db694183401eb16c1606004 -0xa4f1d2d1d3eee81adec64fa5fd4aad0d611203926ca08e32403684807936f80f -0x2f108b7661bcfa3eee228f86e67b20ca2610d51039475d3ccdec2758bb2b7cb8 -0x88c5f31f8cc533bb25dc9ffdee0ded9d34df9473a1b718af5845a87dfeb0f6c8 -0xbc13d013bc27959f766ce8bdc6f5c480102dc0120323a860f56ac6a709a39da7 -0x9b0d1a63f68de53f29b4fa787b65b3d8c05fae543e1c98096be0cfb500fff6e8 -0xf0162782290f5f36b51154def70e1e99c961ee28688653c1e8af989b06910094 -0xc472c589ba6ca225ef3e05c60e7ff11afc36b03c3e38ed77f3a86f32ce687801 -0xdbed3d46a2aba702889f2f72ed0277961c1011c8c9d9148f2be7447985562491 -0xdee26c5b0f9527ad88a953b50b4ebc569a55842e920d128fba857bdfdfdf9b96 -0x13a5256ad49a999fb91064c938de96d8ccaede268681233a3e0cb845f99adfcf -0xab3bca51c48a707e050a3f9b229bd7b00a53f710fa44efde058fc51e13c0f629 -0x66530d9fdfc597b91710f8c34ac37234dc115c2093d9e6a8a93f5bceac1b3005 -0xf3ba34dafb007240706f9de448d24e3f6111c5b1d9bebe6039cdfe80c8bae5cd -0xf11bdfa589502884a85e3a89e95e689cf8d79e24e40e6ea21bb617126f28cc80 -0x735f1ca489503b0e2989f94d60d6e25bf9fabf714c08b296a90262bc173e5b8c -0x785a1072a7c15156229a9d4d0a094b4930ff7f9085f4ad7acd9947641edff2a1 -0xb59d86ef3a5d3c33b17acfcda717fe347c84ff824d6d2131ede3412810e0d33e -0x76d32439088570173f69fe6e3c145caf73d3296b7e4617aa95435fbde9f12cf6 -0x38f6f2cfc4991db7247c676b24aba1a65b2aa1873f7403c0c5d3673a2ae05b29 -0xed6e7136b22460f5217e744f81b4386a24fb66c763735b5f97ced49dd4f6f0e5 -0x0d645c415efebb2d876429bfba17320894c6a62cafc5ff30075cb010feed87b1 -0xa0b61d658ed522518af57bff6d92de0de21cbbe9b7e343d1133a9b5cea7c4c65 -0xd1aa1ea9b616ca1ce50ad09c1fe2c09ba8d83d4493ec6633fb9515623a2648e6 -0x1cce2a6d68fcfe2756d4cc1fb696d6d30b44e67f7afdb2fedcf35c47022610d1 -0xb52d9cef19ac6ae4c7bafef727f2aad1a7b6fc29bf8a685b3181792202ec9eaf -0x24ac121238e01724c1a5e68969c42d5df5a24fbb862c96a977eefaeb3672670c -0x7be7005c8c6d80742639821828c19999a3b7b7c53bbcea9f772ff35874f7b868 -0xad3e46f715c587b2043a11a616fb7859d0ae2e5d32b4f4dfe76ab3e401388af6 -0x137c5be8ce90970151609b2cec1510c15beb452d3f256d02f437d51b7767024e -0xcfc06d81971de069a68e821c8ecd0152351525b700dc756d6eb1aa489e3abf21 -0xa70b5c8f4c79b072e5cb3aad7580188464cd684fdb8145dfc0babb1996a019c1 -0x2e4b0e748f186a41e35cf37dfe66c21334a816444c47a4413e6d58afd2c733db -0x2b73ca32e746ad646fc5178b9911d9d221a018b0208ee720707483240f1add3f -0xf8c3dd43ddd381481037124418d046c2ac4555680c4abf77683f80a044477f73 -0xa4426d0b8805b4fb15e36dc2d2a8368082713eeca931835c3df221264304cc82 -0x3e13a7f0acd1c97449b4ed273fed39dbba8187a31b1a227d589f08eca1e32067 -0xb9cb19d864750ac7db9b79bd49ef743fe749442ea2eb19f16d491c2b2692c7a1 -0x207e7fe2ee4a69f5029b891c0ea65f157c9ab607dbcf9fbbc142f92582825439 -0xd8e737593754f9703aad9e36d78ccd9a8ab47c0e8a25b2e833ff08b5b5188d02 -0x690f90c7a62828885d5baf2de809d6c009b733a6c748d55d489b215e12b06444 -0xe5a9a86e9a03c15e001817910480a769726ced49eaf306693d5ed67259036bbe -0xb76709f9e366f5ea759181be4ff554d11a37d725a52260ed8c737224ad504b08 -0x2fc37966fd4a71332f63c28842e815d219bda9fd37296ae55425b9da052cd640 -0x590985965f7df373214707aa6122d13a9a13103561b49320558e34065b48f1eb -0xb713caf98006d143b573d7070076961853e662560d1b2e1c1f5a715fdc47d8ef -0xba4a65242b900150e0fe278d8573abd3784ee40f33b2bf891f32200b87ba7f28 -0x08258ca0ddb4c18e2e8606f8cbd547b9c4037dd4c09c387fef6b5d13150e84b4 -0xdd6b08f5a08823d16c3728717ddc990a9bb284757dbc98e9810fe15e54e72ccd -0xdba58dbb1a1588b789bd7a3409b8e180ecbcca09fc06e496b379b521a2798752 -0xd253c3296fe278eaa42c1d1601b1f7422040f68fec1348b47969273598cd5c21 -0x1a4e99b0a2aa91d2478d56edfce90257ca6825c43e5895057cea07939bd8b123 -0xa580d39b09478d08602438feec62a5e2283c00d01365241f4e50e74fd141d430 -0xc2a1cd6f8352e459e9a9a413809dbc519817881b54e42854b4297aed360f68f6 -0xfbf9ade447a18b7ae1ca2dacdc096d9699538b061717784608a0259f5d9ef4cf -0x55889041cac9a419c98967397af3707dcda472077b5d0c07b1112d0ebb6dd4b1 -0xdbf566787012593568ef9042480e43035516a4b768e694079a881eab3a28c127 -0xf7af8376b4dd95f44696df54a7709d3bd811df51f4d13a1ed8520cf608f14b73 -0xbca47b1b3a9be2deb43c6bca398a814134b47590738aba9674690f1a26192261 -0x046ee6fa3e3473d1355a9e5beb945aa074d5d55e1748a7289a57ab0006ca1317 -0xd8e80edfe77387d3ba03c5420747e64df4af1c3acc33808e4c48f1984905d726 -0x8315783ab965ccb67a0b5f5ddfba4daf4657f2015c21debc8b77744c07e6b29e -0x29f372567549e8d53c3793d59ae071c112d218933d739ec2839d50534b607aa1 -0x092c1f8b79e032bcbe9405042e753f247cbc980585b62b25255015295a41d72d -0x216446cd3b0bb2fbd41167a1adbf4079c75afcf847d63ec2bcc18a03011ddc83 -0x264ce6e1f53b11ae5b4fd666884f91028d4d339e881391e753e9ba842b34a458 -0x3c65f77fe777a40ed8307976b1562b0b4ce931e72c87a7448e954d030075e071 -0x6fbb68d6d1e2ece3017795da062f1fd2c3d7bb18ef34e100c7adbd162dae0bbb -0x1ede15036081f7ac4ce1f570255d7007e9e3a8b9c32c4bc1a04440969e1de5fc -0x1ed1eff19cd3cd8d696c8b56d75426efdc81666783373e5ac36c683fbc80836a -0xb94e6f80b52465f2d441de9a3d58ae684aa3afb76d511b1617052336d15793cb -0x2e900381acb1fa8dfd512832a729c2e00088d04ab4d1aca034ddeb319233c317 -0xf3a0244b85f5c984fdee914006ffde3706640cc6e5f590fa9795b34fc9409e66 -0xf74f6ee61a3202b016ea9b98cc721c9ac7e7ffcc03df8a636a4b70373127364d -0xf727845b59e18c1dcfe21254c7fa92b26abe2610d1dd182e221d1e1501eb8bdb -0x40d2fac5f800f9d42d14b60c14940820080bdbc17047cd69d94d002b7966f171 -0x8b7e8362cf1630675604553ef5eb16366328ff5b2f0e90fca316b455837def7e -0x02ba9ba0e0c93709879eb31ce652feb7601405d3b952d1593b43076f68575002 -0x2e498483e8dc508b1969df09e7ed86571995a804bbaf7d17e900ae3f8f71d80f -0xf16f5c07a4e420de1d2103ac677cb0606ca11ef06171b366153ef9a892ef3ca0 -0xffdb0438de9418d8466413278bbf5e79b7085240a48613ab7c74584673d00a07 -0xef98e761c8d5f1142ab176b66176d932bb679a8c13c9965593c744ff5c659e42 -0x575748b913b857024f5a10dcf97d7c0aa09a77e1546f31350676727401d84b82 -0xcd83749d46bd7ce7b6ebbd8c75641dc3299a0a3806c1bf666211e67a000f0f81 -0x98ed6fda034cd06f45bd5e8780862a8fbe4f85419ea730e46ad6c6e47d83ff8d -0x9340ccf6fefb8ffce61b3115d247af260c830372efd0b0f4df85685c65bd4938 -0x8a5098127fcec5b124c43041bfa9b0e39f22d4df6e03edc03a54029c64bd5504 -0xd61d0d94968ecd27c399935ffe1e37b0004de791db21d636ca9620ca85c46328 -0x2bce7dd3f3b32b6d37c2ce3c64969d4b06fac513caf9c5755931f241324166db -0x63bf60cd239640032f77d3cf77bb7f358a341921c125f08f4feadd265643f6af -0x6966277160bbb5694d8e2fcd0bb4b2641ef70e636a9b92cbb3f53b9baf93409f -0xf569ac47094bd5646ecdcc9b3a0a2093840baff043c13c49d2b79abe125161ea -0x7f42cf0f114b3c1afc278428d6ae06cebf667aef9b31b37221bafb9782d7aea8 -0xe42cafaf572678cceefa135dfb547764a820672d4e60892c4e9b14d07f67deaf -0x82e4a7824a03b52da5f26e303b31bf480ddf68d0f1260fa37a7077e34c2243b1 -0x037e44f2dd41353227126bb6e5b96463b5f892b9b3db15d99dcb31ba92a09a13 -0xe94803b203d5c88b92d203757429981268f7dfc3c8ad031378cde72160388717 -0x333c659d80408b728363e7d07cff1dd3c5cb95781b890cb2efc3b63d7e809d44 -0xf42e2d0f476878807ac94d62adf739535be804162cf6603179f913ee2e504081 -0x24945aac5dba33568d116a23bf4a658526a487c8649456fca45bc0be8ce2ce75 -0x9c8236631edaf1371dab7f95fce478d222a61f77c88dd75acf01f01f60f4d86a -0x9fa785f0cf4088b87cd3e163624c41b719c7a3c29ad1b6b5b9c6d42c5086466a -0x57315d248de9f3a29785d2b92d4d708fe6da03573a64b24be6c67f82e9364e32 -0x4432b99948d99a64700b84126cda7ec5969c782034d242d1a78010a49dd0510c -0xb7376cae3dc796da2f5fb48513b1b68c765af442140f7ff1aec92a3cbe42b63f -0x8ff67eb51a63e36c13424c8216605262ed457f52f03719dd7d2ee3a5bf6de19d -0x9272cd4ab64e71a7e79210478b4c199f7097fe19055a278aa3191b666a39ff1c -0x33761077a8195bc9208e8863ad6c866230d644df3ba475587da0ee431b413db2 -0xb43c9a5c4dfa8b51089405b20d4d91fcaf024987075e3d970ba729a205849f59 -0x67782c4a4efa31d27043a7b70489dc77626dfa98a52edd336518849e7ce573db -0xe4883218ead60a239e7f0eb4e4d89194cf57c5186cfae059112d7deb643d03ea -0x6f9253780d804a6320dac2efab0cb082aa79472fda104233654f5e9303db9793 -0x4933c8b05dd0e288cda0ab51e9d364077de8543c8caf28036c7e14b29546b466 -0xe43b0ad8d2f9db506ef5e7d1856a18224bb49da26a55fb75525e0e3b41ef935f -0xbdb657d0e84a3122368abdf0575be9891943d85724b3d27edbc3c892a4485f6d -0xf24e0f2adc162703d3131a372abf588d6d0001e2052e8dc4e8c339701b93cbd9 -0x04a73cade222d283da918a105de6da8ef5dc76587e185165b83dbdf9c61112f8 -0xd52122ddedae0c92ba66fb470ef4a4418873a724bec85fa0271290b89c495f7c -0x4a5a65b9492c57b1c20e38a78cc7afcf5f9f32d8508e03d4775f1519d8696289 -0x22f13c0b4044965f47ecb0ef33c771103e1ecab53dcd6e14b4064060021fd6bc -0xfc9fc94b274bf4c9221cd51b2e3227bafd26584a4c6f2c154bc77ac6ed066ff4 -0xab55e108f6351715c8758200f3de34cfcfe720b421bed498c1b360a0184831e4 -0xf048018fc986340c3d41899ddc829f5f090b34fb77d61ad87577700c024c02b8 -0x689a35c30ac6e43a4fc0452695288754cc7bb790d04c5df08cbb97c89b002e5f -0x156828b360815feabae939d53653342f5f8b72919375225cd7aa2baf4cc9dd26 -0xbe1fcb2cd9e2f93999f8a3134365df485d1e0cbdb3506be4d8b3d139218c14a7 -0x4d1fe8b6a220b1ba7a5ade76d13f5b0dc009f3d7e4aa6295ce0435be6b772dba -0x6fd80721aa4965809ab02714958d5b6529e01bf5a08a2fcf5384c44b577da356 -0x84b44735b1b5cb8886787ea824b93402490ddaa28e4ec053e1930e639a3ba789 -0x3b3aae3ba73f3c1605a159acb3b95a4ae96025d4bce8489a14755e26560fd648 -0x801523887943e68a2b71339d3f892e7c120f1d47cd40bb40e2d37d335be4d4ec -0x2e1cb39434116a699300f2ae2741eed050a094f7bc472b17fbc9b17ebe73fc88 -0x7c034eba32f7229b8ca35afa466372f6254587321f83f86c5c914b76b80f1f36 -0xdc2b97d39eb905b0823b3d94555c5d502839f5053dbc4611975dda5a577790b5 -0xe5d4e1c9b0243124bd56fed6a5afc48573f0bca0f7ed6be72adbc6f6009d4bb7 -0xd23d881d5c8054dc53dbca522799a39fce7885841156acd7179f67d385292566 -0xc863ea8090eccafde4a3eed9d6a3b321ce1d3e59815ea48576078746a117b063 -0x9e2818056b2bc5391d7fc60e001427fd84397d095eac38b30ab22b9b5a6cc311 -0x96cf221a99bbe437232cd4379a08906cd656337784d4a7e4936c127a4ded1910 -0x5997aedce5afd691388aac9defdb6730557f49669af90166bb2eeffa1b26bda6 -0x06d15d5ba2f2077b6a9c3b3b4d8c109c8a165095b44559e4645fb776ad04a3d2 -0xfc1ed2493cc6826ec6ca240bc937d6fd8108b45386f6cd24a9c0e9a006c1389a -0xdcb686619b9ce01136df09dc2564a68b137ab88917c9ee86ff91f412970356d2 -0xeea40faa100a04f9d39fc3a262e7a4f2e61115529c5cedc7637ef8cee58eae80 -0x45b5b375a3fa4b27c1462c820e62af8729b7bc73b817fd0f9f490afdb572c10c -0xb0d060c82e904b3eff813323f22af5a5ebf75d6ea2e13af236ac859b1e9746a8 -0x688acdc18da36919271931579c69b5c444d2b19f7869c654129de9075b602412 -0x877fadc1b689769eb592f9ad2aae7c135e4e3e58d3bd450b19b3ad0a6252f806 -0x23d550a80d20d3e06d6630b0378a39c2cb97350ba4e221501ea82b987512fb6c -0x446c2ad04a91ec53f1f28fa5dbaeb1401da693a978abf1119b3747bffc284693 -0x8e64714357bf7ef8719aa1f92e7c85646383a1cfedb1d2549d8f8adc3857d5bb -0xb6e34e29ba3566d64b57d05d7f0cd1e7f2bc130cca201ce3f6f6c4393d5c9d46 -0x71f35a7c071d1c4402147bf0461457156b158332c11a1cbbf2f6862d3a18408d -0x9ca9075b6d517b8f6f8185e688b12d4ce9e3aae9c6fbb708c2cf46155a295420 -0x1f8d6895b601c51f775c0ef7e07c6b10fb2accba8d2e89d926d6e6e14c71bdcc -0xbb0ce1637153d10c8bfb74cba056760de59d2ddfe7b5a89ed3aba36dbaab185d -0x6a2d8a6cce4b7430bfa83807b551720e58f5521dcbca12ed3a917920edae8c3a -0x53aeeb92c52634e4560e977c0c359a76c661aad0a2e49965912c1c758201f066 -0x473691f836f715d1ef2e397349474516dacfa098733fc425a1e274b4952303f5 -0xbfcd67964099c312b7267c43907b9fbe696e6ad20db6646dac45d6034eabca1e -0x423073a3a9a68092c8ef4af6c37cd2b4420ad1087e45cfba9d0bc86798afb54a -0x5d99948cb199af9739fe5c5a34b4d042aa14bde065b31bb126101a96fa408c84 -0xc10244739c12f0ce5fd54d990022cfec2d27d196c95cceaa2aae35668210ba20 -0x6d65ef33c16b5fd963e3edab64a20c27c3302e94c06b9f828d75b8bd5c4145be -0x577e7cc104a3e747e828038ebc060e1100d19273fd31a27427314955716a3192 -0xdaba4ee455ca903fce4630f9e191c03d9125930dc2d1bb2b684008e8bddfd6a7 -0x51a5aa27b685803c65eae2f3478db09a65668982b3222449fc8ba5eaa590d827 -0x81100a86de7d9943e8fc0085a6d56afb96db543849851509efe7528bf6bc4c29 -0x36e7377ccb894628f5c4f169c48ef5da3cfaaa22ea18b7369bc6ce94c21b6680 -0xdb2231561c02eac4b6e8863388c992ad75ed2a90e2f125b5f795e619226cecf3 -0xc5edf358d26d54242da412510a603d48d13619eb348890d09e0310390dbe5f78 -0xb38f43f929b4f654998ff9e1dc21121d93f92584906f48f86609251f7bc2ceb2 -0xdf4be15c0bc2cd822cc2f8f4e99b936e7fb59c1b5e37bf1e77174d9dcf419c4c -0xb81c9174d75e21775db138c938375e8af58e1e94f98ed4f8788b9c349fb2b07d -0x6b52b9534c65abc45694b34d1c8081aacc55c45811cfdf8817cbdee875b82a41 -0x38ba030398e890e612cd290dbde8f84970fd3f029d5eb22d7bdb99f803a30d02 -0x0d4f49bd213bce09527bcf7c75c89ec8d516c30d975e3567632bd85296fbf0b9 -0x13bc6015e7d595eb7507f01bdf00c659a4cdf1fce17f077174abb70ad07de94a -0xfc5e811a9f087e1594ef20b89f6387205d5d7fec336ea1b32c015e505f35ab87 -0x0796351ef072b006f6e92b11f87296813596c22350fa8981aa16e71a009fe3d2 -0xbe492a0f8bbe0f3ea95d4cf81281b0e6fc4df4b9328af549b2b1441714df9c4a -0x0ec8becc9d3988d46585b2b2776fc736ae19a6f2e0f115e57f026e12bbb3f4fa -0x31e803c8ab567f973e4a0094df623afb2216e7742ca9a3e605bd1cf72ca0b4ea -0x4e7ac7f44347db72f9b81748547dc8692b5db3aa4eadccb42a57b1336d6d47cd -0x8db162fa697ff5cbad4f78c0cf4dae76a33c481b88a5b012e8cebc535aefa77a -0x3221e3bf8b19ca0ef0b2ce0bca7e7d9d283d2be22fddb83111003bfa8d7bcfe4 -0xcf455dd725304b5ebfc18c7a5f49bc849c2d42a3b2a9b5465da6f587d070f6fa -0x36a68acbb746cc77527d79190aa2829a179386fd80701215ef57009caead3330 -0x37112ef176852b9cff97368d676ae1cf052a0fe756ba58b7242553ecc3c55f30 -0x88282fe002fa54b55afee2dafd77d9516b4f623f27df6c2eb875d1e68ba38d8b -0x8e49ad90a95a7f05abbdb01e437d3452fabea78ce095243a3bd1fe46ce54029d -0x4ef173e72848b629d1169320262b540d68460c14408519fb3e45e696e69f64ae -0x31eade44361a0e2943a27cbae51a82d61e254be9e0602b600b1d2d6873be402d -0x457e03f106339b2cdba1d54be9edb09e049a319edeb850a2fc69c30b79167967 -0x9c39fa034fea4fd80522d0530570a3935da58e40e11c4f6060917ca9785cd0a0 -0xbaf2fd6cbecceb37219d8d3d89838fff332a9c75fd60655cc68936a6c0589fc1 -0x269f3265dbe47d93b42a1c595c84ba18f808d9de88fa4e141c324d259c370acb -0x22d7256516d066c3679828783664d827c239e5e452e4f576c2916be2bb7212cf -0x15c137136528d43f89f9060eb8221e423b1a267ab371f181f8757086ef05ddd1 -0xbdb2807d86210071b064488ec6eff7c66bffc43fd1baf2de369d3dd7551ca1e5 -0xe01ef808b42a43a85e240ca45f72b0533e994c72d5254b019914f67957be1be8 -0x117fd2015d737a47ce741132838eeb8815b05cbd9db210192d7a3a2f7bde1931 -0x9a7b58bf187e61ac8d4830d13196d2fa332a929eec9a5e4bba7dbddbcf299f34 -0x9c1a53dadb0ac5ba14db90b37b05c91cefff2b32443d1db71ad57d86580e15ba -0xb811c6e96c30213f25ee59553ba822a2987263ff0156af5860937707b7a61604 -0x8fa5dbede040ad95e6d4eefd1e5784cbcfd615a89271506f29ffbafa586c5a11 -0x70256f940f03d8c88bc52db733ae89b25fea92dc93b802012408e59bdbde531d -0x70fce10596158b6952537b32fbcd00f8dc281051ed17a402ca1becff5357bdeb -0x2456db6e82b074c61a861dc18de93c231f74819ca6fc896d509bcd5be75ae970 -0x94bbf80fce11aed650af9d7501faeb3a6d5b60b5192851759c1dcb1a6f7c4531 -0x04c7bf9da142d3781e3ee1283d79c4769413f9d9fc25c7f8f67aeeeec6a940d9 -0x49cb928aa72f789758c8b1f10e562aa3c338c601ec99949872d9901dc6999d78 -0xa881e012a717f21f693fbf64217c9a16d084a9fb5115b0055c4efd9a218cd077 -0x60c8b15cbf1f91538498e3b548539e3f468e6dab1559db85c2ce9e149a7e6057 -0x2451c8524467632ede461bf855572edcc0c30f8e3309a512fe94ad5b02cb1c6a -0x5579306b35ece370ba6c8a2b620df244b02af2f00f52455f26f20ebfa573a623 -0x2d7566d5ed2ba3600ee9634c6ecc082f13516adb5e3001baadaeb66260f01fe0 -0x8cd0b012eb33043d18206ac246be8235c2142dfa8d26dcbb7ccdeaa8e377959b -0x1e0724e2c4295bf6f2b9208c04c25feb3ddc751da4ee0ea3f1b14e2cd1635ffa -0x7543a304e83dd7f6340b80a005996fa16513e33379392fcb085878228aeb90cf -0x6f4c0b8a962183f210226f2932e224708e1181a2a423c0d6c42598c222987c8c -0x1ed8042a3b8c82d4cf4c1864252b292dd20a9676415a31e15d8652542440f916 -0x2c388c2a3c39d3d3111d56e56e6b85a15b0d4aec9c2c1a2b333a1d26f3d77772 -0x7a4b135a632d42f6ec3bfe10c56cc0a83198c19f186f9af82b9c12954aac9aaa -0x1d3ecfddded7a4a2681a5594dcfd09e31e7ec2b6abafb7641bf786b802e290c7 -0x9804f5578ceaffcbb3b93aef1cef721f1d80d13a2d4e6fd2738b5171569e8577 -0x6da47d11d3e600f4382dd7cf5f1af65bce8e20ab5b488965c4d53aa682198be5 -0x235157390be5b4c2c44a2267c8aecac93be78e7cc26f5d180a27c386430a9163 -0x1baf8238109be7a01062e27f813ee0930fac46eea35bb5f91367c296c923f52f -0x252abe4b7a3d21690bb5e6c1524f8e19552ce5dc4b3f8043b9286345921b143a -0xa80b3bdb5a5f2e5957a1d3bd3348148df5263558982923709e8455dbfdc8568c -0xf7f962583426101f6ce6da3ee4035e38b4561bc66b0bd5e84049d8e66e5ba190 -0x72b45900dc9b7dbdb16bb7fbce4904dfd07dde08a3c0cc2b84cd9d4086c87aa4 -0xde1e0e8a2b678a9e58ed5a948e0a8f361346087264598ecd744878f466dec957 -0xbcd9e3ea65d7ec43a1b491a445d55eb056a14a377f7a7c0a2502f24f0d6d9bb8 -0xc2428b416be9f8605ac901707d32461b2442fd76978e1dedf0e413972001bede -0xb8f6f7d4c25d4787a62c13a54c159bfd4a20250d2a989d9036b7da344fd90162 -0xab5153d902512db3086df39fbe55c1b353dcdeed9064e73f28b5e18d14ce5958 -0x853911c27952e855176e09b08d1f28b30827a5f928f899a99ab12197a3c4ec41 -0x3eb89fcff7321dc41c05cd828086d2d4cf9f3160efc4efc25db4cbbea7b21c6b -0x16a1a9b306172107d04c410285079fc8a384a8eef28d3c71beee61e681bdcb04 -0x9562febc52f5fb4aee8676025c791a1e3094a4948c36a116168bcf3284db267d -0x962b5c2ce4d0bbda5994ccb5ca88d8f5860985a5dd87f81b73702ad4afbdbd80 -0x5542d3e65df5eef6c9cec8f090935230dcb2fc92538b53e8b9611c4eb88936be -0x23183456d5161f704eb408bfb9982a445fd51bb6ab961c7524694a2d1dc5d106 -0xdfd50581ab06f1d3bf08eb3b2d959a7e70ff5cac299949d2ed98221f7339e13a -0x34b1faa152cbdc69fa69834011a5c9536d03be64ffeeee252f969d1a888dcce7 -0x887728c777917c3692fe4d298c26023a9bc66be82382e553cb29fbf43cb0f895 -0x7e7b3fda3d79d2ce352c495dd80f79a151a0e4928d69895771b6df7f0659ae4a -0x8489c8df31a5bcd2dfd9851c9d89ef99799da788e6dbf0a3d0f35937edd2650d -0xcab1e8640689d008cc13291298646e269aa50815ae4662b742fde7a28924835d -0xdacc65e7c54fb790ceb9ef8a45ecc4e1bd7bf376b4c440f31969933e0e405d7e -0xda568a1ca298d06e7653e220c45a7d6cade653a7857d4b59378fe8d78a4dad26 -0x43d16acfbc367636599e5964363520ffc388f9137f68f1eb33f280294277b665 -0x47c81c28f96c70c7d7f17cd7b2b0ac975e12c24133c2eaab0670d769882c22fa -0xb9990d856a9716e72f9565abe4d523a9f2159f499cb02ece8b9f8c7d2a888df7 -0x2515860a369f8007fe9ebc42d1cc4901da7256161b65e5ffdda7aba0926246d2 -0x4e0a08f95a04678bde8ed39902b23b99975ce6222e06fd526e62b6a7b1e6c1c6 -0xe20c1d061af4fa013d8f18fdc9fa06836ecb0882d92c007f20987c13b7723f2f -0xcadf1d026024da7e7d9f0c639e8935f35ec6c164dd4353d91613756354f609f8 -0x0fc9b789dceeebd3f18cd4c97f3c3478e9c0b04ef237912ae29044281f68297c -0x3d6b1609044c810fcb057ae6c87975050bffe264e4b7089e71036e7b782c0c53 -0x352394d0520721067a3b99b29f695c8074acb3aa215da6726d4417365fed8251 -0x759d4572b5917e319c23e5fca9c222b0b3adf0ad8681ce64da4970e534c8b91a -0x9d19f44d4e7efaded3c5fc834c5e6618415bebd458fd4041c25531d1657e60b9 -0xb6bb8d133597087093e3467cb708ab11deae9df406cdef7a325ca48638ca308d -0x99720637b564e94b7c04a0c53af36e87c5fc156980d91321e44aff6e77715fe5 -0x29669170ce530cc8d9be670cc600e98e6b1bd43950f0f4e48ad5d225872286da -0x00d3d8a5200e53d3a77cfe6e29ef801da442fa170cbb73df52fd4bd4e74d95cc -0x5237023a514ca86d25b69d98f8de815fda9e41e863411a5afd391adc2062d728 -0xb54062c9586641f69b5eb242bd71bedec2873d6cf3972680699a6a74d212f364 -0xd2e161f69ec6d9d58d82edf1dc20f28f79448bd92c5a32416de36b439ed7c5f1 -0xd6c6a1cf60b22f7359cdee711bdd0405007e579ab3f797fe09254a66e5ef3ad3 -0x42af13f37dc1c8b858de51d755e4f233f3c6c2ab4138db907f305eb0968b41bc -0xef7e74ff7947df887347bb8402d84b8fc00cd4cc698873704b542970cda12e01 -0x355a7b173c5ba4ad3d00949a708cc81c73f2b4bebd8074a0314d87c0c0aaae73 -0x5bca5e9fe9ebbc8ae2b6414386a83432b75411dc5ce85659183269cb9889f9e3 -0xd39edfb48ca3449c4b4daa0b8fce469e39e265361c2f9419f6b946e51700368a -0x0057a678b15fb3e09b1a4793b3377779eaf9badcb2db93dafe25179fee86aa94 -0x06ac647eb4dd063715ea33cd4f20cbf31f641b9699a4599c482f67d3d592191e -0x3c589c9af0987bc10d56a4dcc2283983659b32f807d77d9b7f3927d38560f27c -0xbc83982b64c83279189822b24eaabe4e87db12cd8ea4b5848fac9043544e3008 -0xa526f303332b70cee2316939629eff75b86b9147bc00046a54117bd4d802ef85 -0x4b956cdb2245f0005e5f8e58dd02a446e29c3f559ae8fef1feb76514d62c9e9d -0xdf5099b1f0b2486e09220e1fcfffde312ffe8ad1d4e4694adeb861b988db51d6 -0x52b7098e3895418cc965a9bfd6f30689d7ad16eb78f0f6489770bae3644f24f2 -0xdde63ed5f0744ea341de5568847b5af9291529ab42e728e7fae42d0c15dabc15 -0x71f822489c3311aa44716347fe1b8ccbfaf13c33d470477f5d855d267c6b12ce -0x4b1e482b40b5f1d879df94214d80db7761f34651aa6638d9010cc5dfecedba56 -0x826717b8f122e401fbf72232ead54ecc1c32c338353917aba66750de0a0c1182 -0x203d660cff8573dd6612d7bc0fba6c29f4d0699076868962e6b98322c1ef932b -0xf486dc300208413c183082c46f5c62c5ef99778222c764d543701a606956cf58 -0x615b9509208314d5976eecb00d7bd795487556776cd06fa1f1b005f415e77deb -0xba79991139ff4b5bf59e618d92d9e6cc0375d40442935fa5111183bf77b0fb88 -0x0fb20382525069cab749386a2cd10ad59ded35d3f683401ceed86b2a31d56321 -0x11449f40bfdcfa18780411720eee36f3d2fdb80cecbcc5479298e92a0b2e27ed -0xaa46bd1534359b3220575174bcf7e0d51ae0e73e19e2e54c053ea5689ceb43c5 -0xb06fe3162578582016f586ea5fc6f4f87b91a21ab4385eca4de6d49e88a55a3d -0x5e8434ea00c99cc06b2d8082f8e51b7f0443661a59c76e70e9369f74abf06517 -0x17c7139b5b63e106d351925a7be299851f8904cf7a9d0c770830fa69172935d3 -0xe52b51cfd6f6528ef6423c4d75410f265da717623a482970fdf11aff8422b5e5 -0x6bd82ef39778a152ba90901d7e25c3f3ab502e8816a123376ef5e4b7fb713399 -0xb7f227ff38ec572ae9a4e758991990fc6a33b8215f4e6c7385e2ae3e23bd113f -0xb0a7fab1936f2dfb7e98a259f45b67e924542b6a23712a5b4258ac44d7a9cc21 -0xf016d39a08bd999df04d1d34d7c8e467c00427a877c871038f4a500624b389d5 -0x65aeec4639d6938e2b4abdbbda24198db4a513332df8078b35b57cccac74d070 -0xa45b4bd2de75162d5edc5b58b12ceb2c49afb33738c812d46d0a9489f46cb99c -0x4637b27f1815529c4953186aee41a370a6755b443e27bc2cc77686e8dcd7bddd -0x4fc1f0b1fd5dd63f3853b32b2dc1daf81db855ae60bd7b80e6c4660bb66682eb -0xe50374e33ecd42c739ba54da07fe63a2cd76cf895a916fd8a82a6fc181c482d2 -0xda3cfe02739fd816489e8d038ef0411d291a79c899fa4fe651e1d59fa6554e5f -0x1fc9086bf6c08f12554cbfefec584d89fbfcf028d22e852fbb81621ea21dc749 -0x4b95cb4e8aa3bec7b2944f1c6e009ffe603132705cbd956fce60a3aac2cd5fd8 -0x7c22d8d3fb26bb72056c1ca43301d3a80476939f4a98518fbc10a15c9dadeeb0 -0xe2d42f39440bd96602ecd8b155544a9114d0fda1886b2dc63a30f687cc244f92 -0x861000dd638f730b55b45cfc45ca45bde47fef26e7c6672de2da074c45418380 -0x87bb0be5232e0fc3d8ed8bd181e83015e0745084c1bf67d9d7ef222e9d7c810f -0x39691e31c2cac983a06c19a4336a146e3d562888bbdb54f1b4e7021db11f9d82 -0x69a9fc2234d411e2bb357fef46201b918e26c804bf7c7e074253d8ae112dad98 -0xb71dd21c60e7291ce40bc6252774a155d5f3b73fb43cb46d114c23d03a99d61a -0x30239895b263e6ed63776c8ad9472a5a72c8c743928472c9326f941dcacc5b33 -0x5ec3884c353d5bebe72885358776ea4cadb20ab0f1b9f9d6387d6d6462cbf1f3 -0xe8c42e4d57138544d32af4c50fad33c99863462f330550333cfa74fc55b3650d -0x989df46ebaf6e1f7d26fe52589b58b2b78ddd043a47b3a00a7e4206a01093dda -0x88585560ef5652dc45b2a9f50d1b49d903576dba44aede64524e58db02f145ef -0x1b574a4672df51d217f629db2fa2682c98e9066ea2ea8e74362193fb005282d3 -0xd4cb0d0960280a620e3f383b13d2b7fe407c15bac7251aa2b0cf1fca1e915d13 -0xcee43ab2c3ccfada98bb83687d6f29fd734ad1690ed7a228e77ea3f1d5596b28 -0x1ec3cc230d4e69ecfea433a45ce51eb711178ce4483c8ac8db8a4abc48f70627 -0xa016a296f66e09230c0e238c8dc3ac94793dc6495aa59b7b1fc8ad67fda48bad -0x4f79aba94b8fc3cdc7615150ee746e9f786de2b1d71b317e3b4d34080481c196 -0x0548b59ffeb68c750fb37570aa79949f5b7d49c6a9b46b09b4ad43c3b764083c -0x376b5a79720657b15d923cb5169014c5cbf0b9609e2ca4efc4d6db8996906381 -0x88715a0702db27dc872e92656a05477348687b02ace3e8ef80d09f60d6390983 -0xd1b10e5b2d168bc0841cddb22f8352f8910c69f335bf41325c908b0df538b13c -0xe34c751c96f8e9063b47994e08ff6926acf1441697b6beef4b9bc24f8df806f9 -0x83d6a676d61698968d686d1817aecd4d62a897fe0273040a00918caef3942ef1 -0xce12bed314b8710c46404e31a295095fc8ac02b67a77155f43ca165d0fb13972 -0x17d67c2376c057967ce086e95b03f83b2443e52c2d98485f0a442f470965c776 -0x925ea175ba42bcc8c1df142662699272edad612888c7402431f063a997359e80 -0xa295c3d3a35e519fa35b0ed3d3c2583841edabb9a383c0f4409b991d34d1f8b4 -0xa94003b3ac10684b2475d994617cf60d5c6fb1f985b0a332fc9399f8adeb3252 -0x3662951ce462c8c73b2bae46c3c3fa83e8f6f083c68f73ecdfaac6add41183cb -0xd0c545ffcfa7d0b3b99bcfdbdb0c8a9fed3d4a1aaeb97b2ce1755c4b233ced3f -0x9e6be1e7b358b5169305cc1d743054d1f670291eab586216734df2a6681aca3f -0x4b79eae157c5b05b1eee67fd6cb549d2b05cd904b9bfeb9dac36046af35879bb -0x4f5852c91d277a819d6bc1437dd1afb6141baaaf4e905209d2beb9ea3b033de0 -0x3f7edf3cbad943018d4665a41dccb644800b688ddb639d0fccf536cffbe9062d -0xeee7a0360197abe5f71e302ac35736d2fc57a459fcb2926cfcb57d2b05406ed7 -0xa15c906fff642d1207459fe1df8b885df9156edc249a8c4611427087be7ba72f -0x0f1d03856ac6c89fc25a52f679c5d2c17637ae2bba346ba7ed0f326186190c11 -0xaac2d9af3ac015b7e4fb04560cf9686f707e407e1157b5935e436201706961c1 -0x2e50d49ae42079bb82dd28824d6669128ee62f24fd90814e3d5349f8fba4d1bc -0x6de85b5ba43dd63ce823035f8e310d928819ef629dd57c3e123533c31a7e2642 -0x2dfaa9b589daaa56ee6aae4a345e406b66d2782af6b75badf3f40cc1be3a8d5d -0xac40cb2142f47540d187b7f06a88f14cc9bcae36e217bf5cd2e07cc5581f7e79 -0x5f866282da5890870de179db2bbf01928420c7e4383c7d82ef381e92917648bc -0x699d1b547532336b58808d26c889fdb1115a6a0b2e3aa3d2a78d9f4b80d62530 -0x13243b6fa8312d6e88c295883223b911fb94761f9208b1079aad1d07d8dcf834 -0x833bee355d74f8a1bc3925965de3f09bde407e1b9b6a6bd6edb66a8539ad75df -0x6c3fa3defc63f531f53d05d46201df6fc42d7023461549ab7b70f9a1b52505a2 -0x0b63119a5b34079c4e8eeba2d5f6e3f022aacfeb2b3230c42eb1c435294dcf1b -0xf93e12f740b7d59f0ef1e96381188923ff3837db1ab660bdc82948c1e6b99864 -0x5a1a9b88a62508e5e6130d16803decd6053a4693e800af901347107e1bdfc90c -0x4af8ef5f0db6d62d2b93dc1c9289b18ec1e990e26e58cb4a551da917f4552957 -0xd310c6a471b6152cac96a9f83862a56b9823d0aa06d55f170fd2acc82d421d4a -0x17422faca982f9ad895712ccde1b86ad8d6e9b8da08ac4b671ed7657f563011f -0x84ad8764959fd927b6701d330b65cb76507a64996e8009d71b13c4ccbfa1345e -0x5e3eea37a1fb7cd13dcf6cb0d213d305136e6ac7bd1879255d0de445c530bc40 -0xf4d8eb00cd598ee807dbb84e84661883f64b65e4e4f9103f66a177f836cf119b -0x8f5cb98214f680b0b1354514119351ac867bec8915a4aee4c11ff2f75e5d77b5 -0x330dba286b2b44ee20d9d51d42cab0f08cd7aa9c5cd502f22abca10c466e6a67 -0x6ad7f8be5b1d3960d8721740fb164b8e0ea22a993198fd8ea9ae45801bab6137 -0xe6f6d445d82cc4e02e1e8ef546ade6ada70a06582bffd3c45da76b8259849405 -0xffe41410005b0d201f722fca58749a5d402d1debfb38eff0b7b29c26484be065 -0x11661c94c1af7984d8323288befbd639eea4629e3ffb37d0af454fcf8a2d4549 -0x6b7ddc80bb4eb732263d3fa09df836831a183eddcce68c6592c866a2ef80a246 -0x6c2d15ad90fe8bee434dae6c585dce54521b442d1f0ae967fce19d1aa2a90662 -0xda48372991561d935eafe9950aeeb6d308949ff931d563f95bdf6fd3be31c19c -0xe71cf79d12cc5fbaba53fac16d20e5bbb15781edbaa47e1d8104fd49449e4f12 -0xcdf4f7bf2f6528b498c596e0de164b231621a5c05ed2a7d98efc95d4ab8d9d59 -0x012d59b19aa0c41382b6160b475ae67082993fdae10224cac92083a9a780f16e -0xd1b180c3173c6953e1f76e2b14a1cb865520852e57825609b055e32648478ac0 -0xbc6969c48af5269bc78fac6f929c43df7a335e8f25623e47331405aabcaaee5c -0x6c6ef526e574c3d871254fb9f225cdd6e0c3b3a0c935d923f8da618efd470476 -0x731df40edeeb4f8c3207929d13e9e6177a5b51c88b1ee702f15359f901b07410 -0x989730067bc52a1316c4f9ff5a3370b42d14147f27520e26abec339fa8f6a430 -0xf1b1050a1e678e636bec8ec4b99894898793497aa0aa59062b6d889ed3b51ae1 -0xb8a1f0135a5cc2bd114e6aebcb1d63900c4ccfa414776866a55c15e8d216f3c0 -0xe3776ea9f3b048122028ddcd9c301f7c3bb0e910fd352bca6bc0baaf533b5926 -0xf7e36cdaa3a9fb6115eaab57bca320c8a0e55d5dd86bc7facaf3db9157ad7a41 -0x07c676d43ace67265f9f2047a3ff4c3c261ff14118af3aaef2626cfb2ca7e545 -0x74cd5a8ee1f1254d95b9a2cf616b55a635abdf61c66870b9fd920f72df307187 -0xc66a91dd57ab13e0e66474e8a13bed89e400279b00687889fd7a33e7643a3f2e -0x89b9aa3e04ecf87a2c382d6e9097b54d5e54c283fddd821aff205edef79413cb -0x5c47792f14d27eba15a14d58ecd9a420abf4729b190c6af10e62e402092065d3 -0x6c9fd1ce89d10bf65fb0d2ce6d875624e46100a2a573a1b3b06186ada33016ad -0xf30082fbb630f6727839275dd1a7d1c3d86d41098efc67a795a09dbd825a9808 -0x157fbfff9d0e1e7cbffa46b74e510c1efa24991e327d29198e182518d44794a7 -0xbbb847d4e36ea732e8ba46d6f4c635a40d2ead8be8b434c2abcc2569676ab236 -0x5ca67d2763e046c47021a1842620247e892f6c4f3758dac88335946d3bde1ac1 -0xefa772a8bdd2481e94075220069f6cb0f0d11123980ff900ea768a1e95181f0c -0x3d734d833753af40da4cf4cbc7eb0aa895d0be672db808a38d0e24b7d44eed3b -0xdd18c66ce42936d97d2fd8d68ab52e825e323fe99bf0e6926331f3f4527b743b -0x84bbb5675c6b75637d6c847a80b93136e103ada9296d278826efeb0575f14881 -0x8bdd9c4a1ca5cb8b66085bd5b7ee9864f594cf4cb98030e79af6a3164b842013 -0x51026a2d53b7af03fe4109b11dad2a8babb2e00cf73592d021ad68981d9803e0 -0xfb7d2cc3bd2b2e5128d227d8f5f0153710a50dde4cadb42e264f3168a41ea0f6 -0x48cd3e495261e23e033f9096344b262cb10cc6d022353ead63e526f7aa8fc6ec -0x4cce502c6785f1c8937ceecd7feef9e626e3d2b0828f335729d6e5c1782dcd60 -0xc744185e5fb14c5fdabfc4231278c76ae44a515376d243aa3c263d5e06a157df -0x7e81e4c136a3c4afb475e447faeaebd132df7a68edcc724d4a7cacf45be9865f -0x0812af28c3b2c927fe258f80bde914c00964e3981bdea9e38098b788005a211e -0xda156976092ca30a19e3055b3187fe375b1c8399c09786d5e7f61707f9fa1b46 -0xae1f4fab66b91b14394624dbd615156939426630f43fe01cc13cfe32d787884d -0x79bb80ae13f270f22b82212c9565f96d612175f6e33f2d1d8965ff00aa606aee -0x774e290a5bf6e0a0398164162afa7fd12b2c5d653dfcd69e405d7fabf3aa90c9 -0x3a45339f17b0f1668c8af39fada2fc449c0800cb13c637f0d3a6ffe0f31964d9 -0xf9fe62094b1f6b55ea3d01488f103ca80a92e7b2505332173bad873f0599cc71 -0x5514da40f29ad877d02faca81d32e4670532b9d584c85a8a204bc90af3a4c6fc -0x94b65a160804494ed5a0519880b508c992d293818c925ab58feb5f9ea40a27e9 -0x5c20fa05dab21fe13fffb620f47e33bd4e9805b3c230d8e7bf2b67fe57a812e8 -0x4204198770afae4e2faf54259e31eea92f8978c0ae33d5dfe92a3e562abe7188 -0x727643683c244150c1e768514bdbcec6465b0d0aab579afd0f1eb91ff4b0b6a5 -0xb2aff420ee6ebcd256cbb7e7a74dc83a36fe63a19e0c2fded2aad0183b8755b8 -0x2c84cf2bfc2bdf9aa4210ba50c7ebc3790b489238fe61061291b374d088301da -0xf78eb6993d6215583bdb41eb1bc79b003e5bc86dd8e94a7be410d1753500fd75 -0x68d6cddd57f8c26c7dfe039a22a9fe37f3ed652d955ccd9d48587e8477bd4225 -0x7420dd00ab8869cb05a50751dfc48c80107d689363148ac985712f5abec2e38f -0xb5f853f304f0699732df584491f3d2480831ee84d0b83c60bb7b02523fd275c1 -0x6bf42600f85c7d4b1143cb9f57f4570ea0fcb5e02a9de7e0e3c4022566ac4b93 -0x00f89257f632a745f1dc0da9924a703d230e610c9cec7b5c89a58a246760968c -0xad43f6d994db530856bc1aa1483f69e61b1576d6e7c8350939f50d35329ca55b -0x4ab75c732bb437118e24e71945884081c0216ee471d8a8f51afb753c181ef993 -0x14cbf9d7566ee415d24e2ef320c68dda81bbee3443defc74e7bc353c4f234da8 -0x48c75e97a8699574765e83d9f2008d8bfb961fb650679584997a1102ada5ff6a -0x8b8a8baeffedaf9e013d5d94dd5c900d3b90170ee6e3c0a02b6ec244911c07d0 -0xb1b45facf03ce5c12081722401fd02a378f3b2e073de2bf4e7534bb229cb00b2 -0xd6868a31ef4f45d88c59b68568b6391dcfb3ea48f1332c420a3747e6d814507e -0xf6c108e353a7649719e2a72f5e4f78cff181c6b34e5d6c347972821959cee213 -0x7e7e2e9eb98c266fe16d5c2c523d79259d9c8eaf2c0625c718ab5f4024ea1712 -0x6769584595e6ab1a883caef368c75c4a5832ed98016bfc2d767051baeb264df6 -0x0fbe343fa67da95ecc5c59f32e598dcad160304c2ec5d4c92d636d211e6d4178 -0xc44bf52be9f636325254c5c8049ab39195271bba7580d6f119ad8c4d73fe33ab -0x34ecdbb3cc1334b45fbf2a97c622ad1d1b8f0ba06d82e41a00181554cf759b5c -0xe7ae8c7831db3a5d39bf3b9f1657448791c6f1305cd6ed69e6d7ca3930d54803 -0x7c2f74701f8e13fb4f8008edbeeaea5c3731624a48c1d3d4d45fa7e3264a51a3 -0xe31cccb431f7b010eac6e9e3dd9f0e67c92f4ce67b5bf901b73356831f3e2bab -0xfc6a1e7577ba28bf81a7b7937b0667b3ef77b936aa6fef9eedbb962196ede0b8 -0x6082825fad1740cc7e03fdb06a92f5ddaece59527b521ffdd5d69f8182e15c2c -0xc6e44b2e83256b25fcee887a5876682600a58f3d76531a42cf30082f95fb0f2d -0x87c1a38a93e7fddaf1cd18dd1cb7fa42fbe5b9b6f187231545539ee117cc9823 -0x3969829f2be630bbb2c68e4505c975787bdcf8c06e11cd10ca288a0bb58b2252 -0x9e002885d50a1cf083577292482ff9f7673f44cfce9e323d096299a3f7d7c3b4 -0x34ee1939073795c9d138e24f8397d075e048629a1457f2a6b58c3063c0bbd867 -0xc92ad549951290385c65167ac6c7053501ddddab5816faef1ee03e4c8bb386be -0x68584d3a196d4569777653f16a857b871282be67bc312d2c55af2865cf8045b2 -0xbe89d757cada53f3ef5768fac5c89a8a6cf456c9963b389a43422161c4006008 -0x8a52d7a711adee88613fa67d05dba1b9855df1df3220132315cc908df0f8242b -0xd5a8bb33eebb554ce8a3eac1a9b5158f99f340e8e047e3b06d0b532d9564d8bb -0x0534f9406d067741490c49f729c1d26fc9c0872db79271f438dcf06b94ee3d1a -0x32c4bd9306241d789a4eab2f260f1e4aaedfcd309fb9c819db1ab0c3325cd21a -0xc30aab7b30e1c7d72004816d638d414cef9fe8af2e981b17367e6f88266ade35 -0x1693f4995345401e058faa61dc684c9f58cca776f67bd41cb19b03fadceae973 -0xce7395f63d9a42c0aa1ea39c63ef2f2978bf6ef4cd65021ea0b57c11b9f4531c -0xe71b0a469ecc66fcbf4613186e998f29d8fb4a3aa9fc720da00b97294b19b6a0 -0xe909a8ce302d79e7ece190d020b80e4607115c8745ab41b488f4fe920435c771 -0x46126c70110645adf8ca6c51c801d75f4c142f4ab04c4f6b7ce45a9efaef3dde -0xd285091975f67e8ef5161af4c5fb006ca9842c891d422ba83a37d2ad35456b3a -0x510810cd5acb0223debe6a70082059f2cbd3237dd83f0195645edb526599d8a8 -0x23ef7784abb0d6ff37aa076259052b75116827f67bcb60f67dc65dcf56fea9ff -0x900b2943c6ee4d669904433c29c30733a4937d298b8370bfad7cf4c20e316080 -0x05e45822d5e84bb2e1addb8120391835ab61dad7a207b4d1921e63f5268bc5b1 -0x4563d2fed9b773e055f7905c09acf8f2876e70b32c18a945dc2383389922b2b3 -0x511a6f2a030d0c4b50d616c8374a0929e67b01e8c5de9f38ff2e598d1266753f -0x35dc1dbdfc4369f21c147a794493c23138f8d4b0d18302088d3c50f21a31e6be -0x05abb368c4a2eac659b9038e1714ec23d9fac55d171b92cc8739529866100ce4 -0xdb7c12f3cc670229d1f9104234b43825aeb2c3bd9a0f324828347a49affd4d22 -0x25c9588470dc029ec34b755eeff3978bf6ee4793fea7a2b5a1ac5f2cee008e2e -0x6bfa02170eb580d8ec0157a43362a3ca1758be7a872fe606ad5102335835b450 -0x38f344579d9d12a66a49558891007686f5d7a4e8040d45e67bc586864a03c52c -0x06179c3ca09540793877f3382f9a89e6f19179c87e3e06494dde95e0ccdf7578 -0x5a0bf6f9a489f514faf7828324da222530db8499575922f82dde292f55ba440e -0xb4484f4333a5d6b49e56db2c9b6989fa3c315df9963b2ca5975f4b239c520c57 -0xd40c8997a1915c6cca7c1d35179aa172e312c0704b0d7ac6b8de544921934765 -0xc1c3cf064b484586db580afe2afad136852680b536c5fefaad57022e1782d45c -0x48b684648f45a0cfd28cbb94e369c7fa71007ade5f6264951002d8a773e72885 -0xc4f990796180d994af57d0393a408fc6e67d4e53ea2e4bc4c52d89ccb67ac8b6 -0xf6ef1245f3c3c8d34cad1bf980ce75c5b94eeedbc725bb3e74095ece6e2b9e76 -0x02e5692f096d8e91daa8649d1c3271a11216b44000734de6d1ccf5c2cfbbe563 -0x2695450dd04517ffc263b65ba7abe053c9c1ff0d22ce6fb0b76d45c84cd4af6c -0x142cd479f0ab5f57b2ceafee1af7aa356818af8b0d4dd84fcee9358533c1f020 -0x8a93f2d51aa29a8d1f2d567e6cca4609b4153e411b5eaae120172e1368229ee2 -0x6c7013f6800fd161c9ce5a730a13bb513089be78b35cfd273e83203f811ce84d -0xfd43f95800143e323365835c782024e97e5761b98f8a4cad1fd8191a35a23d6f -0x47b03ccdb2224f8d6be54496cde7dfbaa855bb108f04442157726cf29dea3706 -0xd9d54a613d7b7a0c6b8fcf40f867df3048a86330988e7ac5d3134c0a5a8b2e61 -0x780bae349225d1eef0e44a45f368faa68af5403d348dde877b1c4814076a03fc -0x090a59cc78069d4f041bb57f146e403e5cfbaf1e18721a3f953149ed362eccd0 -0x06b11cf6e824c721116cd04150c894739049c96af9c9e382654c24e9ea3b5093 -0xa3b05d50e57549d0840f7a0416eef8cedfd25af2e23b2486e6cd80207d862725 -0x79e8e2814e8962a3de0fe77213fdfbfb316874f39db426b6d3649fb32cc416de -0xe85b568e172ebfa733b40c53b2ad71a9d36b42849a74eccb841d2de5c3431501 -0x0197a34192cdbf6382601c9395109106ceb78b43aacf5c9fa2a8a97091838f11 -0xf4fac86ad4278b46a79e299463dcf9ed257a214ea41f840b4249dcceeac00979 -0x6f5c2cc5fe99bcbc7ca4c5bfa5f000720c9f2b6a13ba254ef1cc3aef44656985 -0xd6f59d4a5a5c0032d22cda2e668f2f875b01e67c06a63ca480a93fa25909928f -0xb25b234085f8783ebd788ff11df92b1fbc4aebf46d29619dc90675e06162237b -0x9edd1da8f666899e592973fa24e2d878376c070c0cd1f85ce5bad34df8c615e7 -0xc2e1ef9445dec61364061dc012d20170dfa3d91cf1c95c27bd2670bf73d64c2b -0x77336f14c157b873a8f3b51a4ea01c1cced72fab1f7a4dee5c7f6cdacd4a7c3c -0x8afa242f22f01c103bf0ad2b2258497efe4b685e20a2734cb7b71825767c71aa -0xc4ebcd9d62c2feb02b7f828e23e58269d032608f6171b7762745c9d5adaebdb9 -0x9a03ef76220d02165df52c86cd1bb75953faf515691867791aada9ceb4ad2f97 -0x2129a325e19e0f94a779eefc1dbd72008e135bc4e492508cc3560c23bb0af0b9 -0xa392ce1dd39bcb79178cc0c964c5dfcf891db23d5fac3ae67e2ca9f94d770e11 -0x4bfbb6b4b7fab745c3f0e79f49d80d442f76b7021936270035c724d2eeb57498 -0x8fbd075faf241fcc0255d7617157d102f51673be8662cbd8c189e404d962cecb -0x7ad3a6d15f6de4e9a28a627ae5392d3a2d0432faab39a1ff8790282c849ed1cc -0x537ce59d2a6d8b02b8b69a6b671d3d84f34be77a37046cffa94fc0ad6813ff48 -0x11dfa5d1aa16301a18a3c69fd2f4f32eb939ea796d25696a86fea70678017b2e -0xc7b8f871fcb097cc1d12ab48408078626d260f632bc4047d2620894c55c72cb1 -0xb392b7b3c038983d2e1b5609861b00a5e4c8ba524f64e3991c670c56e56400da -0x3492d43527ee85f8405c74820073cb4f01f44154c3060f544355d9aa515974cb -0x2d07301ab2250776e55931f603a5df2757b2fa8a037bb3cb4da7d36f6d524256 -0x50b1eeab1b1333e5d135871b431ec0632b950c8ff4da280110a7dd04e4bf4c83 -0x72b92e9708e5ce8a6edf5529047b15ee729e03d537fdbc36e8298199a70cf9d2 -0xe7219a901b68e89f1f1a09374a64135eec73d2aea8312368569c0e0051de4549 -0xaadc3838edc635c864a3fcf1cc1cbe12dc612b9ad454d62e5246d8c1c05ce7b0 -0x64c678e8ece193a174e74d3cd847792d307491aa2e71a63db938c1369d178621 -0x7ef70e4b67358f6a1d4b611f991612cebd371533e3923375cefeab7115e842cd -0x6075a293daaac7bfb4b975455922af5101f89bc2f6013dc070e14c507197b5b3 -0x06388ba82ec7f5ecf9311d8ae0a3a0d7c7b29df5ef75d060918fcf2a02980afb -0xca62583476ee8faddff00e9379837d6bc1e996f60a2c3b3ed18b18ca4925f9cc -0xec4977ac5da2235a15f210812dae99d6ef437fcd506cb61a30d4f1633901cb3d -0x6c1ed53100d2e1cb53ca6d42a281ce6c06ace1a805ee0843042e9bc0fb917482 -0xfb2697cb202d310e88c24b1aaec532d9261cf96271fdb2de132c09f97ac3b331 -0x073588f229a1051cc5ea38ef9225745a9005237ab9d804d9f802ee43f76af53c -0x5220e3459d18947c7f96c8e5cd7d3d01e650eb7d46db9ebfcdbdbc784cd25899 -0x264dd927d41dd725d9e83fa70dea89ed7a98ac3ffe0479353b667b9b699f9583 -0xdd8f9666ad625aed6f529ff478b4c6487c3112fd6c7eb6fa185fcd4bb87ab300 -0x6b12f767b186c064c6bfc2a4839754a3d11ec33b0041a3055b7e28d18766a1c1 -0x2759928681fa1e6bd367bd8b02d3278b9d02b07047092b110716dfcf748799de -0xdac3efdcf45794e54ae4bf8ad040a068a1d7d617c0eca10fa578833c8b0cfd81 -0x294f9bcfea636b81a3a765b5ee7559bdba4369a39ca31a824946117e9cd92580 -0x31ca563f7255d874a116995a6327e4744869a53eb5dbe970af4810212c8f6961 -0x35dc23f26319ea26ca909c3914b2f24c57fcfc72671340eb933028614394a8d1 -0x554ff140d237aaa6802818f1f3cc5e156cd639e3c15f70280cc5ada097674fa9 -0xbbfcc0aeb7af4695ae38420c1a348b21ad297275dcb64f07096d5796ef1d7dc9 -0x5162a18882ab5793dcc33aec245617c2e6b44f02b75dcfe85042a58ce13d2fd9 -0x291d3e4cf933c3e6dd63c1777c33d8492c9ab12cc49dfecf1ecea1ecf792c90a -0xd8b639a08bd05aac89e9b0b948a2c8874b17f86cb08f0e2d780aaee8a3d4cfd1 -0x9dde0fccd4c5aff81970c85c2c4b465cdaa28ee2782947a163c24fd88a48bd73 -0x662c62116280c63099bb7e813e1a6eced78580863734dc4243b8b0f528c02136 -0xa95206277a4247663ef15f409d8c2297509a33a917a0269af1c4320f422740ab -0x74bd66573e6de111731bcfcb59cd2f686de324475619831c90b2469c0c8300ec -0xfc220aca8cbf5adb7bb17ac20e54ddf725fdc73aa04bbee4ab1e2c4e227365c1 -0xf29d11487faac6588b3817e5af28021d94f35750801883ac4bda2834d119f7f1 -0x1d0086bb7ec64073ef97337b54a2f8ce782cfca9c4a3e88d6b6a2252b41c9789 -0xae58f202c326a516286d2f3b7235056672152aeb4c884b657df07fe48895b15e -0x70e995ea29a390da508880e19117e32109d751957ab5e68337de114de58e1d2f -0x79443d6a0430084a65aaee91cbf069547a1daf10ff1da089a8c8c26597049028 -0x47f03daf7621c0810de82438e31dc92914edba2aa329cb78cccbead5fdd33913 -0x27bb66e83832200d1abf48cc0b255823e7d98f3e4f63287ce42098b95ff9f7b3 -0x711644358b5a3b24ef66c64d057952195ed669ace120aea33d176439845d11ef -0x9951c478b25222ada41fdb0f355ddf386cdfa668dca6de653700de499d00d82f -0xe8f455e245a831601e74ad20a41d6031aa4816c0755dbacd9d50ca6f72439353 -0x41318c9a6629a53581a756c465b8e50efc71b105b822666b5e20e8ed35021159 -0xa64e29f5465af25755ce1f0e1ea6d971cd7263f67f3840501d424c3a3580b688 -0x092c82855c8e10ce5552e504d8960783b4a7b0448b97bd850012d0e5dc4c1615 -0xbabcb8c3b9e563d2a68f299e8542ed9fd5049d43251dcc0c13e3c2bccca8567b -0x718a632493d414129f159692010523cd88fceea308a2b57252f86e44f3bcfe98 -0xfd4e29bb3617149a4698211f0c38cf852c1ed947aac396d49b37bec8ebc72872 -0x3a17b5053a1e6ead419e3a04fabe8732065764062f16bf51c211cfc7a68eab05 -0x71fff843ddda537f674567a781e1b8e31fb17563b42f37e9bea86188c10ac5df -0x008d8e5123f846bfd2be18117924fe96339261291f6c0075bd3735ecb84727d8 -0xa9659e8405b8f803c505b67ce360524b84697c2fbf5512f879c4383ee06a1d47 -0x93ce59bb9d3dd45d847d10b89a3d10ccb34c78cb7049017e8ad225fc89265668 -0xc3f706c520703dd02d3699c63684239642831b1cc8fb9a7e9d0232f25b17e8b4 -0xcafee98b87c4fa24f428bf02feb111b022b1d08de8322c9bc744088e83732270 -0x332078953847066cb00b37b997906d2fb6d533806a11e3a4af8092c0974fae96 -0x4e19db1802048314530608be83e5dd0fa16cb7c7165ffd02134a91b42119ca77 -0x146bea888d0d16c173bc9a60b3826f4ed225f3f3c3efb1c07a5bccf64361b11d -0x84816505751778499bfe287a1e2ce4a30f93f3fb5a4ea2c601ec10bc36a9ed8f -0xb1c1949d4b4e19c5075044c13697cf5bc40aeaddcad346245abbd06a020c0a19 -0x1fc65875ce41a8d98b343398dec8fa631e09f25ca19ca05890487d0ba071cae7 -0xf94a9f7ac73e2eb54e7b17dd064682e1517b5f772e7448237e8adc36ebe83f60 -0x8ee36dd2b31bb52926fceb5a07a020395850c9c5ff5d0d7d7d4e11e2cbcbe898 -0x226288fec64576400561a046f0b32aa2c5930035cea59bd91cfac7d3b5cfd8bb -0xa1b5051f862f99b31d70769e35e93c89d72bc0e532181cc547524fe8b414bbce -0xeb57c71e1ba2529bb7efd5acb9398430d7393f2a600580bddd8ea155a34d4cda -0x7dd2104d65d5c5ae26c6c54700f5a333a67a52438649fe9d3adb846f6ef53579 -0x8b47514d61d6044d9f7103ce2915480d239682c24287eb89ed5f49ab6c694cb3 -0x0082792d201d5ed63162837d525de689d8304f472f5ea2ec64a016de7391e041 -0xefa8b6936d0583d2c07609aee76981f3ea536e67a21f96459b0066df18e086ae -0x65aaa34ebb20374ee039896bb39cf2fa56d87696b68ea97825c10e766f25d4c9 -0x73f93762df6dff132f620c290ad0d90cb8b85b0b189eaab1d6373878591f15d5 -0xc8d85fefb882ca79a8070ec324ca1ce5e738d9ae2e652c11121ac63dcacea992 -0xf6757739317f540dde83db44169301ddc378fc7db1db4916ac3e2f617ca45ae2 -0x8dc7645341cc27c3671945b4a8cfcf22ee38dccb0d3e3c3350565b9e62bdd59c -0xbf1964edfd3b2d2eabf34e9e324dec73c6c7e61da19908bf8b8ee832c7cd0526 -0x0b0fabeedb6eadb651c46512f0c811d215b51ff113992264a010dac75a194d57 -0x16171fd49f631ae99c9d3a048e2bec4be1561bf0ba7e511119ceeb74ba7c0951 -0xc81dbb08c032fba3d8ace59c0688f536cb915069ad67634d1a9644f8ef1a5d13 -0xc416687c9fc6b11b0ab15f73b8ecd51db965231ccc757b1cb28946d1f41f32b8 -0x27b83f9dce173a055c977a7836c87f3f694e68286ef73af1ae7032cd58cdc535 -0xf982ecaced2c6ba10964f8f1f570a4662f466ab743111744a4f59aef22072ece -0xc357efd394a39e342f19ce766e8a00d2b16160b90bce16ce8f4c03fe4057970a -0x61f43bcf037246351b87a9a4c41f8920c86ea9d4a279b4f3b33e4127504b98f9 -0x57a6b8c7bbbeb8d72d646d44d10414259ec8877a699871d69554f1ce28865422 -0x4c8c861e14d39e5ba602b73190d8121785d44252384d783d0d8d555a4f258141 -0xa5370840202d4f016ade4fb2d69b8acf86ecf3a642c8a0247b3a7bd86907b169 -0xcc15b42fe995a4462bfa530378ae31d4c60bd4e8503a4cd28e950755748eccf5 -0x5c9cc344d755513d080fc28b020855323b93898413b375afa044bc0f4f65227a -0x040f9d63ad830cd07710cdb95f1525ba7d9ac3022863d0e17ee682a40e43f72f -0xf822da1a7e24da0c6819306dad46b9e4637b3a84e3ede54f24abf24ccd81050f -0xc8043daa4b0365303247c4775874df4d77db16560530185a8b09a57d61274b64 -0x122a6f8c033e9a21c4ef788b25efcad74372e7faeb7b680842498ded6a0d1abf -0x7c8436c6bc34bbf351eb17bb4847b80acdacad0c8a81c9a40cd39d85b1fbde72 -0xf5957118b54d9d1b465294da7fe4a6f0ddd162084bd8ef68eed9cd2f2441ee7d -0xbb0041b8e9db123f7732c8c7fcb9853c1aa029a14b32e6ae663f1b54e59bb23f -0x75130899e8f1c51d65015c6f7d2c752519447232ba406816729e259dbbd22e0f -0xb2cc259231e409a3e3eb107603f04cf30ef856ba1660c2ca8fbeea84b45cd112 -0x78cf1db9aad45c80a624bf503adc4f82d91ac35668383225a35b4d34bf0b1b9d -0x0e1712d622b9dfdcdee97d3eeea0691bdcbb10013ee3871f917c8e6a7554e6a4 -0x2cb02dba9087ad2137131d5ebac3a237d75f719dd895abfaa7d8319070a91326 -0xb6ed0f0d7f13eac07ec21e902080c468f8bb9dd079d36fad76627c046aadd678 -0x78675657e63b94fde2df4fd4dcc5d9297bfbfd6ab67ec29d7a6f157fbeb744d7 -0x6c5272e8003336e24cf34166391c2421e371edfe9518e549b65d7f49e814f250 -0xe8ea50769bf2932b3efe64f7f513ab321c613619bfe6aab9eec5d75dea78df86 -0x016d01f2b4beb75267f1ea91bc23d009753f25db1f5f864f41b3b97d84e8ce45 -0xae831f7b0157aea3af4b700ddc3f6180429ccf4707d39d2bc3a13cf28486aa47 -0x63d45aafc530a56272591bba7dc8b280ed494f270443774cb257e2c9fb1af12f -0x4e99b0c2ed5f64d6984c66986111e3cea4dbe8c697c97ef4d9fe1c2cbcf5ba30 -0xafb07854c8f342ce2d063d9b350e50211d7c1fd8a832174c4bd317bac1f91d69 -0xb39d9e293377e560d3c5720c51699e8bcfc76eddb8c287bdc0e6f62d8e21cbb3 -0x652a0b685065d53cc3e423a0afaec073cfdf8d2cf87d3877a74bab9bb54800ea -0x3ef8a1edccfc3620b6c88cb5ca5521ec1a4da02f2d1cb317061c4ca3dfa46641 -0x1915279a21f8b7cca599169d2d0299d8ac0cebbfc0ac93c063f7e682e69fbfac -0xbe872c430e6710d692cd2ba4e89c42c6d9365b4fc4753aec39e52d610b1e3613 -0x76c95e75355a4a2bbf91ebd6178e84c5884fee0be94caa7ea0cc9de189d2f2df -0x8283773d7cb837eaaa7fdcea40ead46add87bb3f0b7203e1a4ce65372f9a60c3 -0x225a5b83dc8855ff126bc3a66829909f361c3743563662ae69873d1280133882 -0xc1d0c51452ccd9786dcb46f0ec695496f684e1571fabbab24d2cea4dfc2324f3 -0x1815d5613178ed57eb3220443b984060eadae0a4b353aac70cb83036a2bb8426 -0x4e9dee18fbab8d41a585f1ae354038f0eeca024b439c7df9bcc3b6205df44adb -0x1101416c8be3e42752a016dd60c369e6aee0a0c1b3e772a2e73b2d1c0364432a -0x62a9be2131518eda3a45f602a7f6e98797ce338344436cb02c23c3f2914b27f1 -0xc47e79b814d548e7546d9c92134382908acfbd99a09e07456efe85ba728614f5 -0x6d04a0cd9b8255dd5ac50e75bcbce1fdcf343e497adf86164e0b8c67d743a98f -0xec607d4e42b6bfdc0fb5fab2385667d6acb8a84f8d4afa1f058c89af87c85de9 -0x03ceb236549b4592e8ed7da8bf593c3885e90d78b0c7b52b7e41171f92a53979 -0xf29dd33bca2613909642dfb8bab4adfe1d9047d66ce9f7248cdafdc9b74d7d1a -0xddf92f3e4e1e6127fe3a976889726f7ae364f4b62f21fe3fa35b6ee6648d9c03 -0xbe5d436d354c0f6b8e67b6da821a41f352c4788280a8fdaaaa1505a2fc4b9a06 -0xaba39d5759bf7aa9e0a8dc65d154cb02002d7cfec016c4f9e090c04d22e0a3ed -0x84668e976927d92bf5e4f3b48c871daf25146939a86f88a0915d9bd04ed50d3f -0x4b9d9b18a04f816cda37b272849ab724cd7e65cd5bf02832ae098662cefadf4e -0xe942dd32694655f180ecc9351246eb6e1bf12d69d649167349668f970d8bf798 -0x22529ff27f8687e95465c9dbc2ef7fdc130058d5ac88e9640bbb044fdd1e526e -0xcf223841c9ebc9a8298239166173751eabb6e29826d979774fb96f5b7daf23a0 -0xd3cf90153a2d9208869cfc353655eb638e52b1627da4071b4f1105e5c87fc9c0 -0xfe2cdd37569d986daaff8e0745d9b793c4f7948c1d9bf33e26710d58dc45fb85 -0x1cd6abe80fbda772543b18f3b719e299e2e412b1dc383f7ec486a4323ade0553 -0x75463a7a7756af55e21699b81eab701967f8c7c78bc4e2b22de028196f231d52 -0x92d65e1ac2dffab4bc334ba0b5f903f144c3241ec365a3e10cbbd70c1c873927 -0xc743e606ea8f49bd1f0005d36b21bd4bae9ec7237d182ef1f93a8ce8bc88d461 -0xb29a42648200ac42da62b07e7400dd5f1a7a559317a2bd80c4391cc1e1347e32 -0xe41c25d479cea6194e2d2d07ec39620466442723c6f9311f5424b7cb1153af55 -0xf070dbc82a19c5f4b32c79987d117653601b4fdf7b59dbe3b19fc8048c54fde8 -0xbb0c09029d8fbee05d383e942cca4fad7c744511faafb7cff401edf13e5acc59 -0x8baa29b270ed47288a4e1e3140f07a92345e8c83fecc83883c268d0dc2c6a8b8 -0xfc25b17f418ef53b10d556847b5a0870431825b1549db394d05bdcee058d878f -0x1d69708e9fa864cbc15557bbff4a964a0d1924f1d297406e353d0091a51d58d7 -0x9317e380b4f1618beabb9a43fb0c5b851e1825c3b1764391396570dad60a60c1 -0xdadee529590f4b8fdf447bad5193b6ee696024cb4ed0cfb09e313c420b6be01d -0x9619c10626cab18e9427987317b55da27b0aba43d4d1cad01e3aa1f44ac16508 -0xc0fec4b5c9fffa3a30f4a8b119f19813cbe576bdff6d6dfa57f5e51256d7e132 -0x1c164262e27f5d39b059d53fea482337d4e24e99a3d8e439bbb6ad77f9f7639b -0xe371345365ea12ad6a168682027a831128db6202aa838296b0078fd60891b483 -0x70e852d2b54fe210a32b6ae65697d313eb4895acafef93089055ded1a9fea616 -0x692a7729df9462114e0fe47e27a5dbe4ae916c9e56eeb77f12e40943567fd280 -0xe4315c4a6e7a365ad2166becf98804e6f73f783a582832bb8ef9f552e0ce1352 -0xd8be08523ff778fa27afd3a2680051a1134bf1e6384ca82b1474b4ad71fc803d -0x4883be033ae5975733012daac2ecf74d4537b1bf992a2df2b29803b8ecec2cde -0xc021b1126fc83b8387c603b63ce6303a1df1f50f53578865acf9137bcbc19f69 -0x3a204174bb4bc25a7d0be0094be9aab12eec2fbe6e476f6084ab463d983af8de -0xb56878148a0a13c89373628c5fa88e272ffa0ae17dd1cc633dc97141c1f9719f -0x5d607b28aa1f407073c9fa1bb10aa9f9bbe7cc5f5a6d30423c8a57845903e665 -0xbfb98a36cadbb170db334d2a38d46a2933a986e9affb8e8cc9f125cea597a987 -0xcf59df4325a9ad300e5778e8fd546831521182b23ce2e82cd20914b14a7fab75 -0x3b228e955c71e6b8f55c32d9df3f03020e87fa96145248846c96384ec417bc88 -0x7a11221b7f32dccb4dfcfdb768fc487f7a9098ea76028a7e8e9b4133577fd8fc -0x2252250a1aa77a8fdb99e157300985c06f121193d058dc7cf63d1f1136e175d1 -0x61d4a28589bb5443adab9baf36cbad130be6f0c4728f3eb96e3e39a073fad5f4 -0x89795ed71f2ead350ced9f0f61551a90fec40b95b8cbefb00c11bd0fecd6b54d -0x6e9f8670bedb9f3f5df7aee7edc1f576a69580c5fd1ea0c8e33d87a6d73d7e97 -0x5b8d79026ddbdd26b23f2e689bc18be40ae682c37129b396511c860e82d6c7e0 -0x01a4f0680632fa3696f890660a602e150f5dd35c04037fd4e3cf9c1abd4276de -0xdf4ba6e8376854d1517986c335cd112acbb3c69d1010f2841b1f382a09c2448e -0xc4f1283ecfdc15c7d63f4c424dbe6ca73ec18879aeb7ae5e423f1cfbe7f045bd -0xc12b4ea00b0ba9956d0bc0e72c1bb6212b1fd246fc5885fbc4bdd15ea8aa6ec4 -0xe8903997783038f3815d8dd4862e84b4c641386d2362359a207130841f21d608 -0xdb69c69e6fcb29165d9715ac3d49ef2fd8c67cff917b4f3300ee33aa3092e209 -0xa3ba0a38405adcf9011ce51df0416f20252f165a87f031a82e0067f7dadd8bf0 -0x9d351dde1aa76c1ba7cf61b86fd105eb496dc44245e710994ebc59aeb104c2ba -0x0515bc1061b4c5f8731fe3c9141fcceca3bd71e58ae4731d59a1d60f0e86789f -0xed755360317d26f39652805050315cab1c3a239478e5ad50559cfe45e49efe36 -0xda5763abe2fe96f7c0bd442412825a687116d93248be18167c3240247be7fab0 -0xa01c4bce0a60bc87a347d0e63964a28929074159288a4e1e4609cbce9cbd2907 -0x087085f4f9dd669ce17067c4f34fe0071a0677c91efcd7a78fc75af64bcb862b -0xe1595c356a94f90603ac269f42f570c6f93498702088b4a0350ae964cd345e5c -0x7850bf091f7800ce3fb0f7c571ff44763979771df20109eede5359092e393b23 -0x6f424f769939e426269483752ba863f7fbc470822b27deaa6ce554509d2ce686 -0xbb9e7805e0b8425172193cb5c5d1ab5ad641f8516b5444581e7eea2095b7b028 -0x9c9765bba187a9dc0b65f6f69ee824530d9440e7e6202ff8db4ef869f435d6dc -0x9cb5e7e29d863e07c68434a5d8db26b70dbaefa1ad06f16f049f08922b480d8f -0xcd741cb23c0e4ecfd782a54ae7d074e452c90f7487ed461ecc6fd5c125e67938 -0x087e92162e65558e5a8681bd0ad6524896ac8baf7ca32ea1a5d4436d37665ad6 -0xa6e097d0e46aac242456be52ba528de95d43f0fab329e7d77cb41cd4d06ec6a6 -0x30874023db14cd8a6fc30b35772421c62c1dddcf47a386034af396708181b08e -0x0065b4b4d79b9cf7b7854591612b9a31f1966002fa85adc49acbcffaed7688cc -0x0412106141f24c9ffded07dcc6956213a6b2b0df704ca7743020d7023a7733e2 -0x502f997bf583f623db9dab4df566e8fae9fc8668569560f8b57c33e1ab9d3382 -0xcff9ff4446715d919f38fd0326d0e6ebde3172a6d906da27ab35e180af20cb7c -0xa8b269696e02acd01b30db7398ffb24cce3f70255562b233c80ba04cee22bb0c -0xfd4e3a81cc5655c308f61f63802aaf658b055bbae0ed6c5fce70dd551f0d3695 -0x9eb5d88b7ca11b3590865da52f50a6023f73a791c4890309fa83fdf03be1eb9a -0x069ce2b4a16d546969313a1c33657c62df9a29aa4332d4bd2356baeda67dec04 -0xa007d403f4076a00adc8dedd962fdd46f60cbd22155a5b7b3757224feb160742 -0x597c8eefd806424a925028e7d33ddfebd291df700599767a6a2f481627873d56 -0x472fb3aa44a8283e4c2f035eba0c492a2e0e94182c6d1a4bd54e212b84f7e22d -0x2be0792f6c39709f562f3ba2f1af2ba4eb45e23c9923b0d9d0899f50709f7f25 -0x3525c95069f1f89ac03cf91a0be197ffe1267f54268459f4f83e455711b30b3c -0x1a0a24d8b571f130f05c7980292c0b26eec971fc82daef60879d253bfed8e091 -0xf5b4a2f2144d4f95155b11d9bca4e54202d02eead567cf1e8f6cb4c40bd3cfc8 -0xe21060f47a49c62f048ad05b2a895a14988544c34c8f1e5fff5a7036481a684a -0x1af2a8132a63fe88278609318cb38b2990b90f61cde9d413c1d3830aeaab9321 -0xbc1cacc9cb5fa4f4f73962aab6490af614442c33969262de4301b557e04ea759 -0x19445c8b061febf7b28a533e57f2f5262e831b840ff93444e59f9deb1f963d54 -0xe869d0eb6ad4ad2d2651d707c9eee4398240784e9101709eb5618ed393eb5be9 -0xf7dc8b842f8df9a9b22ebe4c6cb9aba13985d1eb6b22c9011d8b01e1441e451f -0x9be8292b3e7efbecf1819bcd4053cdd529b633b8882937b08bf8c0be29e17210 -0x06ee1f675788a6a100f3b8d169d708825ab2cd9ae18ed2271d5253a866b9fe56 -0xc68d0f3439558dfb087f932580d6b2d80fdf050d72321f7bff654011a3900f1d -0x344120485950e59dce43bc6d0b28c9ccf0ba1e0e8f66d5f36ec12e72a4487092 -0xfd2d057971fa1dc77f58ec69ae5e44bbfa67c53230a6e7863648525806fa9a84 -0x64e0ad0e7bef7847f8f3d5c854af763dfee8ecc0e9359d3054839382307a100b -0x5559caed051a4465abc445351e35574fc14592292d8b2487b92eca6b4bd6a271 -0x0725b33741cff321e6855d34bfac60356285633c1889f748c88362e102e65faf -0x55ae66228cc79e1eb97c9c2f7d02f4ae0dd52a80f502aeb9b9a527b835e8d1bc -0x9436ccc9da542edfa620209903f9931cf75df4c1b21587a130a1c0c51354473e -0x2ed8e61a0ee5dd9d13bac8fe0e151c48d87d306e6a64eeae2c157a61c368721e -0x3abf943228aa3a7404de9d90d01fda3cde72359a726efd92ec5d0c4ac772a3c1 -0xdd792f20df1ef18585cb6723ed7dab5eb64125d978af2fdd5e767ee39160cfce -0x88c3e08af6b4b8d1fe26cf06ec3d7051ff9beeb4f3dbe631fbea280b823beeae -0xe5dba29ca9cd74a791e668c6489014b449727cffede7d2ef4bec471b5d11f68c -0xe24b207bb4db42ea68d2b854e2c76b7187e43558fd45916dac32367566b72873 -0x1f3389683a389dea5b18e99994fdc11795e3a11cf1503c0f8e43b06684d3472d -0xc6c722b744b93cfde933e227fa8588c4cf3ab72b7ae25121079348c27486752b -0x12d9dee18c0bc8d807ae4972ed370b7598de884e4b4b9e15031cc13ebafdf3b1 -0x980be079bed695da9de5e9111f4df0859eb3b509c8a0a97dc8f0e49b38c5bc7c -0x2f3741cfa2e371520539f6e8d1d137a408a57b2e6c721341a6f39e6c067f8c54 -0xa137559c6928a5edf52304b34647ad1c2abd6924dfdf1fda7fac1b0b95a407ee -0x50d68a53f62a3cce371b436364d55bd8b601324ddefc2226375d72fb51ef15d4 -0xffcd27944d04b0f92017f41d42f92b0e6ffd5e25e7e7877cdad5bfac6cde07ff -0xb3d48e1ce504ac41c47cdae5b9261f6c930d8d1ab442686bdd669feac1cb4bb5 -0xa4d8a1e12e140988cb3e7cf652cb92487bc3f7d7848f6b71ef8ba1b2995f2ff6 -0x5f14d48e34fed38692b60d92ccfef87cc3e5dc6f57c8c79fc9a82cfcb3f3f070 -0x43fda8b55ff2bf7fa9ececc9382f0349c9a99c3b1267661006ba4bd21cbe45f5 -0xed6b9c80b29a6a41f42b44f29e4bdbaa7ba33226a4ffdc0344dd64772a1372d6 -0xda76ccec150a2b1769da156cb997f77d30dbcad74bf44c25cd8b9dc17f2cfb5b -0x53fbbef7c47a7fd60d848cf002e50b63a9796f25df2166a1e6ba9d201ff06196 -0x7aac3a8ff0b7576ff6ef344fe86f8354dbc196c22d41b77a91cb460d1bbd4a9f -0x6e51f6cb16a32fbd644b6370ac2693d7aec1502051a219eead7986aa3f7ca424 -0xce98fd7101ac20c378ab2201295f7aa9590ab561497d60a3a299d869db5d8ea3 -0x7258a030a4f66ac0d35cd3bae69aa8239e12d32f0c23f62cfe9b195c15eefe05 -0x0271774417015b485ed159fb35c7034a6460950906d6cc4953356e170dc69947 -0x0376c62d7afdab8343a47c026f5ecbde353c02a6d23abb4ee502e6407f991ca2 -0xc1b55027eb63eb1119f43bad3b47940da0f1609c40ffbbfef787f246721e7f06 -0x28f79099f5cb32af861c9fc2986b3f243555179432ed6a447d3143dd62ee6f93 -0xf6f520b3895f67ef2ee946888b245de0545d72c77fff717f334faec3e4d10a01 -0x71b8da04e018ed7dbbfd4782ab50f9390f6a441b191dfbfeb1c573ec01d4ae5b -0xa90ecebe84336c2b04f7f0aa86b8682cd96058b3edf3f0393cc2db058a9ffef0 -0x11133098afee1250166f6fa0ff12e69fd64df333018a330f9bfd545029888e1e -0xe11a6c0f0a07394154d32c5995515fdb014341df099844cf04e550c67e111466 -0x3362793e566ec59ff286f46bd176b3d58dd6fffad63ea4addec794af56a8a626 -0x56dc9b26a7d4e6936cd83becd9d2a0d0ce0fea9c7692ca5925e5089392add3d5 -0xcb8d711632320c4a0e42300874ee43f70e99e47bd1e6d2d7b0b39080af422c08 -0x943ea6edb589258bc6f77ea0f74fe5fc82796935854b792edd6c66d6e62373e6 -0x5d6f16f3b0880608faee479ac19558ee7f4dd7e6bf02ac431ea0ed685e4daee2 -0xc7f616c6cbd10e9e4101ccda800c793c199b662d6d3c14b70b991855191fd0bc -0xb448b40554e118f8a32f2d58f46ac8572da51fe40eafc2e241572ca1dc479a86 -0x919123fc06ba006b7304fb6a6ce5f07540b2379537274259975a26d871d51b35 -0x6f1dbe125fe58214c3f8b9177da6be3d80947747e615a3ce58118318cc4d8039 -0x265ff1464a8a72757e6474ed4d58e47fb3c56e7fb3a30ad431f1a4562b444431 -0x44c5961cd7a09efb5b96874a18e6af7ef150b50f274995dc4924f8243b336d5b -0xe45ad523168afeb3c101b0b73f1a6b1002bd4e936358432df78c7eb361f71d4a -0xcf8628be8b6750b31a76900181e630ff9d462cc636214ad129ef0a0dc8766745 -0x3393c21a5877ba159faa780044ce589f0d3d3eabc8d7515d5215775a8401f251 -0x47342486c98043bdcf15be7e484ee74f9e56842195c6516ed1dfca41202d5adf -0x3914af4565cee4036a1726aa860e39cc4f377df7614cd4ab6e51b23dce685dca -0x890235151d863316835cca397c11fc27448adc3dae844a1bf6f67803c7a02ac9 -0x62c26999cf69d57e4af9dbd2475718ae54c3d718484399ce3324d1b267058398 -0xa6526b29bc5390f84fb5486aa4fb8d18fcd48318d28208ecf7e4d6836b6321bf -0xf5aef2bda6d9a195996284140da35dc11a6355da42297e8e0ad3e545fa1b0773 -0xe5f3ec272b762d184c8a2a5317ff0b5c915cd567cff64571534be31f0ed33203 -0x69b3881c62a423d439648ca74da4f2a660412e41bb5dda636b0b1e65944294b6 -0x4effffdbc8451fbe65e4a81487a2ad0bbd4b3de8d7c43906d5469db417f719b1 -0xc52b340c315f603f15b2f9bc5881d125757cc95d869eeb475aa0a54f80ba0001 -0x278f63f4e22a9705b9076614f6b7616d0b615df29d0445fd6900b97b5accca80 -0x235457eac7b482de6b7e5822e78d1345e002eb7837d28b53be22b46bc54489f5 -0xf767d18f5f57b9225932ba90b07b23e14f2f2f4ea1b504b86be291014a40258c -0xc8945f822d4b8c3585ddaf3bbc6e759166a98f46ad54b598d14362f0860ebb5e -0x47d3fe050962c84b7346d36293562ab85b634dd43d879abf45be68f12903e132 -0xa30bc8d9a22ffb3dad2496901c1cf814fa60db52c8736f7ca9e39564aac8edfb -0x091556914c34f0c679a501b8b680f39f3b46bcc356e8aa9a5a6d1817549ae74b -0x9d2ae2678e265ee46be15f10d9956203162909626464300bc6d8b349452e6387 -0xa0f2867971feeb0f5b0b0b51922027866b7a4b844cbb102f6d15ce8535fc8487 -0x7c3593bd627b7c448664753ae36107dfd545f3479cb05b820b87841497c2ef20 -0xbc9e1a3371bd48a167f3ae81ff43c421f72b5f44a149a6f59958ef97435d7a65 -0xf0bf40b54864d05f6b18f587b648abe1b456332213aa66ad3dbd610656e0cf6e -0x94758130cdd0c79b40cd1ec24009876875cb089e9b1b4b4d7741eda25d016a17 -0x8358c956d670d9b66af609db1acfb6728f728cfdd8ddf5f7ac21917b99885c9f -0xe601d07b66de426effff8f0461aacb90295c0f27b58225000ed303652a1a6599 -0x6b79bcd51292c4af0dcaa802ad11af18740a51186ce4078190d82d4b17634b41 -0x87f16ab1bd84fe6c43c6682338738a2d07c37d50947876056801b947a759228d -0x511f0b892681184d9b8d3655c72909724df4023a89062f6a2c0e154bb4a303ec -0x795f15311a673246cae3063085370240d9e4bf93e0a17fd2caee6566e79c7ee9 -0xfbe6857123c340194310047e7116551bf538f230516c3eb4b40d4f838dfda9f4 -0x5a4c192fdaad095ab2b75cfa4e5b53a01d866ebe0f58fcaef5da4f6657ab79a7 -0x3bf90cb1d3da1d6d47b01a91d69e3fe9e1ec95c82b46e533c206c8d42ee468c3 -0x3302f5834a5908b5509a67b746edff4f141b118a7b66d22f2bbdb8f9baee5ea8 -0x0ea878157c8fc25ab46bb9cac6a4da02701766a6f66a1525576e4e4d53b0ef74 -0xd8443dc9cfc1d9175350f10b001807f3eeb928ea316c38ef6494fdd3d6dfb417 -0x07b40b0a9a944e58c73f4409a7ff24519c94dcfba678fe262b07969d4713226a -0xbddd8ff5c3ebc4a74ca16df4c13c2b80069c5d223c07c9ce4b2979bde51b408d -0x6456fb88356c7723583aeb622c763cacbb2d777af9bdb4c4716590081c845836 -0x38a37bfdc7cfb19896efe8e663958f1f9449e217e11abd76438499bf0c619b0b -0x36d7db2f3f0dd076ca4b05c9eb11db88d21c3f4687df7ce0e82818af54fb9b86 -0x7c8ed11f9621e3b50d424020491b7ef3bed03a7bf4cd533758a23280cc24ac23 -0x9577f7a5814b8c0716dc2d7f95038d1944b6ca8ee04a8f2bb1c77f69f2b0b9f0 -0x9524c9cc96f374a457efc5cdc37d446395d2288780d43f7e9ee37bc992920716 -0x3c0eaa0dcfbba53bdd4d81774c6c4dcacc9ddab816d3a010c415d57d18dc40dd -0x860ff14784e9c2ae5ba2dae752027b536399bed58ed1ed60677a3e4dc15b8daa -0xb41d75092c93d48f7a0e0ccf68e8070020bab22431cb94861e9ae5943ba590c5 -0x0bab8ccc09481c2cc8652be8dbc6e08b98dab553ce2c9492302b14bab16a3aa8 -0x5e6446a205d2575ff194589f786bbc27d46187c59b4be3c20e0cd0d077da88e8 -0x1658c87b0bbb422fc0c4de882b14df1f9777f03a9cd20f7508364fdc0e68e12b -0x877e769c935edc60865315d50d661015f24b328efeffc3851af30ef7c80faf9d -0xc8344a494384beb35087fdf20f2450f72a1f9e195ad517330efa2ebc3c8b8294 -0x6a4f82213d2a220ded10f84c17c1e587388fdf04b7e5a57159fc97946f139cd3 -0xee91c73e5ec219f93d4842a6f3361e1b7223304e61c3fe4c5d9349b52a7eeb5d -0x7306ddb3fa81f76da8135fa3cb156ae210293e5a43bad08559f2d2d829a13610 -0x16bed7006f1ad4877d84130193d77ee0db7ae2f9837af8cee637b9306ca604e9 -0x4d4c582e18701e4367d718547ca0e529625285806211605554c3847c60d12c87 -0xa91b765282d7a802f4285dfb678d635ca36631b8e54d87a70e51670d66803bae -0x980cdb2458a0c83cc3d4ffad515e1a631608c8a2602e657402afe583202698ae -0xd88c0ae6b40381f6300fd06d86be4a320819dc1c6b041d83c66b52ce06e91fd5 -0xf9a2110eaaeef6fa4e9bf4e31106a4e99dbffb299d944d535f627c745294cbf4 -0x57335103de35723da43b66cd637bcfe436f9427630b6e12e4eff32c70d4ede6f -0x8e360f0079e15ba8ebac832947a7f3340232644721b096581204262df6fa4fc7 -0x45112b0b9fa01ba4ca1117ea2a792352aa012ce1e4249fbbb0e53b9c72106929 -0xbd71ecb66a51f6fb1b98962959e8810b791acf48e57e52d0f0fde333df85e58e -0x937696190e61272456dc295489ab00ee6ad8103a122184bc2aa636c2224b7f17 -0x4b76a3c10c89275bf5c93022f17888288e53b8921f9d30db031fae4f4dd5ee3d -0x5faeca737cc6ad80f9e7731a5e24da5684ed2c0cb82763bd211651433be74cf9 -0x3f19f48756d19aa2c15ca39b98dc625da5d3e4a9f97931f5cfd21d2f00e67e6d -0xe0c5393e0ed7150a98a1cc21a3ca092d1d0ba878aeb375ca1869086f710207f0 -0x4446946af2cecfa87c31793059a3efd777a7a1c13a9b79dc94edce6389f02336 -0xe4e813f9d3034eb003c1cd2892c1b8b18e808f9b6081014afe87f02f42944277 -0x4c3c467c3e43a7ddc34f795f55a9eec05bbfaf72295da0a66f201dbb0ddf86fc -0x80ee75982d71fdd3e2bfc5082b469b3a03144080450a9592672e9431d783cfcf -0x0833102393bd67563c6f7eb08ee95d153317eb4764bda37fc034cc9055773438 -0x99896d897fc64f0e02087cdf2aa510614ef5a0845243a958fd3d65c09d03c666 -0xbf0c075a719b0c002003ce2749d24396aba3c4d34d3c6583e27152d909868828 -0x6637ce368fd3beaf61c125173aa25e8c5e8a12fe78c750877bd7a8c34c019bb0 -0x0a340096fe5d731f6333fca06bdb4478f4c4fdb2e14498bea3111097e9195fb1 -0x9271b1c52577f6a72ab50f23b38bc19af1288c4ddf840b4bf314b7ab405d3005 -0xa4a7ce37df0b294adcd07d0ce4b308f12241b30fdbe8f3643d38f71f3c04e3ae -0x43574c6ed1d3ce5c61d8f95d4ac6654a4e113e7f0269196feae26a870fecfa62 -0xf224b9327a137015405ac04e305b7b90be8c40acb0a100626affe75f4008edd1 -0x839d88bdc3101068369621dc6d1eb72c50ceff820b02d69e7c3c7d6230232539 -0x31a9709416e94c86193357e649d966086fe9af6d1ef4cb36567e793a21826adc -0x60b68bdddc2864d1b36c0acf3bbd224b93250d84d39f26c5e3aaa32cb9a35422 -0xbb20cd599ec7c3ec63a59e22f2477eba8e133be238e65ba563fe6793bf75313d -0x4b527360adf0e692be9933a65f77a319ee8795fe8048397dc34792999cd39702 -0x0da787b3cc8e0500568c56f21ccf0cb95eaef3c9aeb94bc50598f025f1d5f83b -0x33945b84e23b3d73b6ba26cb6f90a84387b339e3f32639b6521e2127b66a9987 -0x3f0fe0f6641017ca146d7895b7bf2e7aa39812c2760de9bd90c20db5c321e1f1 -0x19f8aa979bee34507d4c62b147b1fbe5454b4cb480330059521eee87ed8c958b -0xd6fda7b42e537f7094ea2bc7dbff0c800da2ab6162857a06e054e204cc61531b -0x839180bad3af965eed82bd5240285128dbd1368066af0d38db60d0a208a3dae6 -0x3e9ccafb9deba69e4d4a41fbdf963283fc19e6a9d4ebc95720df8115c2b7efe3 -0x22b19254eb0431bb24d86b87ea680041415326a9c555747437b3463e26dc2604 -0x10b9307dfe0662ba5c0128152441d344ebbdc70e502adecbc0e230dff84177e7 -0x1374532c02383d41a043fa887c04f71d70058e004a509c5876ce1746bfef28dc -0x2507e6a1735ac0825af41fbf2238932d078df639a24eca80635dd1db306b91c1 -0xf4e8096f2b335e630e72c061d3a4481ed476267abbf28e2a4f3fbfc1115171a5 -0x8c34f2d81f93072d3c71371b77d0ac803675b08a60dfbbe4e709c14c46d163b1 -0xe525c1f82dc787f45ea0315c55b30426a5d4f8b3b6e239eaa12384c66774a9b0 -0x46336f1e5bf3485fe0d269e418d16b6fdd6628e0d6ff65fa8aeed88ebeecd327 -0x742a037a27a6d048eb76c84bcf9c57199386897cabdda718008280f30e8f360d -0xcd93d31d86f4cf9307ebc6371eff3b9107d73d0b07b4ba06e329129f27156347 -0xe16f9ffb4fb173f95a21f32c895c1249441f7ff40b0ed9aae79ff20dc9369870 -0xd1d548b953d4ae77c991db3a55c3a6135a1dccef6768b45ff768b1aae326c57c -0x13ee00d7799358b4936de20acefac63ca48d3011e87f8a479bd718aed231eeea -0x44b759c55f0efddc02592fcc5c5aa0af06fdd65c63de741732e323e365b79138 -0xf0a90e1350efce9708857669fd2cb6d794a842557b2eb9cacbdff672a8845b5c -0x92f5cc25b1066242f371a59f4e42aae05e3dc4dff4a0ee7ade29fc7c4cf30994 -0xb6e570198dd830154708bbebd509b31d52e913633b23ac07c602b0b58a4a8d6f -0xd8a6f06e972350f0ef20407b26beb325e76dd3c60cfd2a1b350b5d1951e29603 -0xe025b3d2a4e8bd8463963513fd98609701974cb3a542d2240cf9aa7640f03002 -0xf3f1d3f30b7ec47da5f242a47c786a31390186d2e3e1e17562965f3b3a83e269 -0x00b59ebc4611d1481ca61ab03f4e55efffeb49736c5bd819a5fbbd5f7c3c2971 -0xbc120a6c83bb66c04232337175ae11b6db12bcdc459e7ff3802e7eb08de76898 -0x8b0419597ccc49473507f67d057ef4239c245f23aa259650e469255e9ac0e0ee -0x543121410121f28e80ed8e35a0ddc3fd022f5ad643183ab132a8a60d3cc1cd48 -0x196a60eaa02105abd1b54ecd0f7bff4200c428f44d3193334ddbf2f7f0a95c43 -0x2d339abd07e559943f3ee884af2bc4a9703ca5d1e03fbd9d2f4f076f2b292d39 -0xad06b0bb4b7dea09cd7656bbb4798570211954a537872dd5d7d70c6d7e644370 -0x00cd8495e94475ebe4f0f6d99b9c175b2f0780835d86ad7404d1e5c5a70555b8 -0xd103f2c7efb8ac08c5101e79877d052f9a64cbb31d4b8eb364cde0b9553c1759 -0x28be04df00345c09fd849f5e53db2fd53433f79833dba4a92e0c403b54fc7fd0 -0x540eb44d5215a225307b8322db9b8810844d8f56afe5a6753ac4e43cdf596d85 -0x9795b2b00f2a6213d04e1905500daed32464aa1bff0508f464e92faa37012928 -0x8ad14ea4cf108a41b87aabe01668a70636bd0d90505be0e2533d907bf78f6757 -0xb4619590cfa69ba777635bee8758e46daf8b331491f21bb36c4673d083fe038b -0xe480d6a5d222e1ffbf92d8bc71a4e9162d99f508bd3ef5b870ea0a2b9bbb32b3 -0x7194d06cf4ede810a0262a39715c3a6dbb3b52bb9462ffe43d4f3ee56314685f -0x8f59ae456ea2c23fdce4ac16daafa119ded6e1d6b69e657f8d4beb7661866346 -0x3f6fc381047e7ab933863b795b524499eb16352859e3f205335bd8743316de08 -0xfd6cc35848a5e50a1f26ca874ef9fa0e1c04fb88b6996f02891f8e6b9e5edc57 -0x5792e5c55dbf3228182971fef867894c28abf2c49b267f3dc8279e9f3cf03425 -0xfa1525a30cfa4fc1ec7bcc8f20694f0b3bbb8b7cd51c9809a9e7fee197fdb00f -0x06147579311ae064263805b72d436e7451d868a70e949270ecb0348946ed72ed -0xa3d36cc80af72baeac9b5d7ddf92901362f08bd7e69d6c8bf4d2d0e11711d3ee -0x3d8c9bb1b77f84c606534a584fb8e6c3071995424bdec0dda0c4ab2c0ab8dbf5 -0xeefc53c88cc052b14e62369c8ace0020ab4935acdfef4f8dc35feb168588d2da -0x54a5f37ae1065e82d2063e2ab1cbae17667a26e20d36da10f16111ebb471b78b -0x7ee970b17788a39f82e97580e1ddf18a396eb0deccdcd46e26ff57b8f672be83 -0xfb25e4343a811b88f7484e0d91d9f46074a9ff937f7d377132f06f4d51af3f03 -0x61029b425910c235f87e3e0c055d5f41e04557e0ca75ec47f57c2cb2a8832ed0 -0x0ae5f387db015f3cc4895e07db7ce9d05c9bc034d01b6a021c2f43c9dfdaf82a -0x1b328a58b81cc4e6423d28cb3af8cd661787c8f3e5f4d60b2b11bd934f177b3d -0x170d75e50664b6fad449286c4a242953a549b07e45b11de28b623b76d398df34 -0x805659be3904c45b5a177fc0c3519db8f30c60116c2ec37d58ef27499d2ce452 -0x8f83a3a2955674d42bb76c0f6cf362f3a2c5a2ad325f9ca44053bcd38fa78980 -0xdd14effc3e960bcf103e8d92514c32dc8534e7296b2585a5041306b388cdc793 -0xb60353ba15a69a953af461d4668f7a2bc1d5bba39ef1e7a35b60e767ee1a54cb -0x7b32f17a63ea67c6fa7d909cf3be816c85f033374d5b556402d4382f861cc5a5 -0x254d8a115ca0895b78078382468707e92c24c662a30654f958978e3bfce23f8d -0x8745a5f77a426327bd444cd931f1abca1ba461a7e6951064f46619ccefc0751e -0x12a1dbd72ce6c5329955968fe9cf0f8acb68dec795ff30faa0e83bcaf20b1d8d -0x879eb4b2428f219ed7a9f259440a4574911fd04eee5fe0dbad45da280604e24c -0x7844f7fbb08c906178a93b382659cb9bb8e8c19cf1b8ab9e642599f1b827f010 -0xddbc8bd79dee696274bf683bbcbb4511c9fca4f29389bf173cc97dac2e349c73 -0x759ce92621a6678f1d8a0ddd5a6fba8a8bff5d69848e132a8c307f63d99b4c86 -0x1dc4cbbe6449f64ec85a5e784bfaec206fcbe45066eb87b2d86a65bc9fcf8a4b -0x7e3f7af1bbf8457baa8cf5b879856843f4be815ff8d7ff458efb8664667281dc -0x8e304f7e75f767d7956f86b18b08c7c7e61d4bfc91c0c4a4c1728ed18e74563f -0x5bf9e1139242ea9091ffaec70633c1e4c13afba3c77ab80d63a35f3688070e91 -0x5642b866a5166bf334c7f257cbe6a4d892831800d48a5ad87d4c0449689bb25d -0x10946272db899bca00474cee59dd53bf3dd3807c275acc9edb73aaa0095cdd44 -0x4450f5c3d88013a565265e45706faeb6b9ed11d8cd7078c67638482fdb4c777a -0xee99f6392442701a07b95338d585bbdf2bdd9a04134d5e7ea50b1a86e070fff1 -0x6d4fe1d4787324573e4311750f9e2e95f1df865725cbbdd92eb5fae4a80ffb84 -0x90c1bac850c509b988e37f12970cd9cebb3b6e62b00116f22de5891a0290cbaf -0x02e6466c6303619ea09671f8630821ce9cf393c8ea9c2812d7638043693b4fb2 -0xfaa2f11c520968fa0a51048919a017a2d38301ae9ff9cab592434ee26c4f2724 -0x4a63f98e941797534989ac40cf3dfcd1fb5618c74ccb2646471e55636895ec81 -0x323ca01ce312cafa09236ca0c5c9e883ab8da3a83811512658ce74d6239abfba -0x7aabd82f0efe3d933599bf38ed64f523f055a8cfb6fd30b765719725d289578b -0x74b506dd67deaf83d97df14723a2385b5955d0c299d5eb956c2fe06fdac87532 -0xc853c0ef3e2345b5404b112d92ec416a102913f8152c90404282f8b7a1a29393 -0x8b785a2484ef2ac7957644892736dea446b476eade2f2f1ffaf2fc94a7d6d133 -0x4a68e91ca628ae60666e33a0681ff5eddceb6aebdd5e8a2979d13dd885fe2ec5 -0xc62412c39c85fc4be79acad560095e6d3170e9ae27848d7d0686637944195985 -0x9bb3f97af6b1db74f86b81c32bb58f7be5e87aceabbddb60a2ed8742a73e366d -0x3e3c09be21b0541a493e007278641fea2049080a68becb098f6d09e1d21eb9d4 -0xd54a4e8a957354a3374f0c1083f45bc02362cd19f773e23a2c598d1ca754b4e8 -0x90beceea4c7099c9d21dac5695be0bd97e33af30e5ea345747ae5485faed314c -0xb27dc64afaef4b46b5526bc3a92cd8718846f0c48799de493b8c3493e3e3393c -0xbfcef034437e559052db108900c98b8357d63646403413cb2723d3f5a85fbd9e -0xa66282ec5ffc77f78762c80ffee57255ef38a232a755060ef3260fa611025739 -0x7ca77118b3f4230b9c49d3089ae51cf359788c747477ef3238f2dc89f6c3ad47 -0x4011ab5e93e1fad958b6370153c0089012fe36baa1a211e6a83f037b4ab5419f -0x721f3298f73b545e9996a1ee55dc1a1ca212855a03415aefa047414b207eb4f2 -0xe53566b11ab1d08749d6fdd3de4bbf3b0f86d605e3638aca248ca320aa9be0e8 -0x82f0d30508e226b0c39f44da19a1f96d0fec8a89c4d08f523f7216305a12595c -0x0ae16c476cbe80572a4e07e3391ff6ac193d0b30ce26da454aabe6a5214db402 -0xef997a1b581226ce0bcd4335aa9e8d23b75625d85c2b5e3a52ea0ca9191d59b5 -0x58eb6ab9636707a771b3ec6e4f7828ecef8349ec84ac19522a8896fa6bfb6635 -0x1991f5eca3dbcf89d6046582944d8e34f194fbd066a9b83ae62234cbc89b4686 -0x49190b775e947baa907038b50a8e25ccd2a30cb5efb331604d3b55ad9111107c -0xa775a5130275dd6995a4565fecdb40b83d6c25fa9480a98e86365984de66e5e1 -0x55c664c37a2594dcc65b2b9f2406a6ceef57d2b6019070d1fe9fe7f5220e7286 -0x3d87d0408033ead78fb5f4ca8d931564ac9135bf1e78cf14b4b6348a0a2bfda3 -0x43263b22c5dd7123e0390c1f7d584d169709a24153d575376196117fc102f812 -0x889088e506d0dd34437d869ce6e777775ffffb68de430839869dc7057f642c18 -0x6f0dc838192ace2fc17f03ad8f5e71717031098aff50f730a86d0e228a26a016 -0x3af5a9448a11f570bb99d5457aadcaae9c4f4c24bd9886428e3ea16890ae4e78 -0xfe355fe2b78fd2402acd2b58a333af97b207703b85c585266196793c31fbe66a -0x50ce9a2cc415917ad58d34f2b54511010eb5ddf5bb492a3e2784cc1fed453bf5 -0xe26a4096faf2ab886d0b35d8e842f32086353d1caa52dde6cdb9596941ce358a -0xf5389b6b056d0792144340038aa5a731405f5edf2cec48ced49d094a33d8a2bd -0xe2a9579748f34fe7d5ae06bf6e78dc0af1a36776d2fdf23d0d1e34ad5ba70c75 -0xf02ab235f2278b21f2e505b3d58ecde9a41d5ff57ffc8ee2e1628c7e53802b59 -0xe86b408548c72a0106339204004add6a4c9fca5a9186473a3526f6f9e6d45d47 -0x2f669ac762464cce8f030dec483c840cf686eacd31215ad092ab923dc3465883 -0xa8c8bdf183ac9287ddd096440f14f10b4dd1b8f9590c8ba03742c288fa1e991a -0xf1d2ac0d4b8fcb8d014cde6f700cf3952344810f597e9fbb0324c114435a86ec -0x369387f0b5f9be370e041b12f0994439a367b2bc8dc31605407d38cc49657eba -0x05e98e88d7a8f120762ff4bc6d1df95f57fba4e177cb93ffc242d041e57bad02 -0x3cb1ce6099794a57814fece02691877929733e94d68a852d79a473d5fe06bfee -0xd36fd5332e533d4f7847ca87b6d835d757ddb5b457e5067657d9e9578c8ac793 -0x38583a789f6d38429f6c9ac009fa35366d6c379354692751226f5258d8ce2e52 -0xe2d660e646c4e7fcade1249ca12d553ce63ef485604c78d2010f4a2b0834dec0 -0x363f03a31dc6ef599ef43a48aeb48971194ade85d8c592aaf5b1242fda8f53db -0xaf3e122f1607db58daaf1d827c6456fbcd3121388f1ca28e01e8b570c4844256 -0x1555390a5f4def1cd6704d7be4a26653bb432d5adc508e1f672125f0174ad07e -0x66b19d72477644e78aac40513042f41f3f8b7bf1fa5552a5f402d458ebaab1a3 -0x867910ddc885673422d59c3509d745bbb466fde0152732f6034acb8e0ac7cfc7 -0x391d05638e32c261fd3feeab85c0ac1bd41912cfe95200b58032bd72416e889f -0xb4efec631fc86a54449ada8203888bf4fc9ecfb8d94bcc4175d0d9beef486bd7 -0x26f46bb7b7828e72c9935f9d9f91fdb47d992792ff389aac76a9965b5beed05f -0x2d89a650d1cae08d5e872e854ade1e1e770ad0e01913f3136d8d6f71df040db7 -0xdd8937de627e6e16fced01110f7e60c762bc4527bbaa153f5227b7a2cf25e71e -0x82e995757296efd24a5291f57b593e75cc205af57b7249aec3a1f03571e89198 -0xbf368e6645133c318a4f1860a1a98285766b15ae9b0e09a059d61271a05c1e43 -0xf5f301f2d9563296850fd252152c46df92e288142a3c520010e9f2bce6044864 -0xc798b5b0c7fbe933064795184065a4b7784f35cd3bfdeb0a4ce8aa23e2f67fe4 -0xde0168addd9dbaafa842c2e3f5f625ba90c4e3b94c1dac9e7a06de7322be0093 -0xeb468ca0a66d8a75e43dda2a287b4ace6a793d6d07734490cf0ecb0e088ea916 -0xef50d115886bfc6b5f20e3c1d79d6fc62816ce3552a23f87141b370f36d15162 -0x5b5773bb9b460d766c2efd568c47dcca6641d9e69964fcead5e3c7baed4e718b -0xe80f0c2e0cba22cb185ed0a234e3852ae1b20a19b310f99385f51f3caced33ff -0x73a5297a5f0c4fbd2193b23bab461fa5188de5eafca6a684c7df483b13c792a6 -0x9f595e9c6d523fee268983097c05b96f49c0f813d1afe1c7b35f859f2999be8b -0xe6b31bcbb59161e19f844633a9fceebff1bb4d56e1a43809aa2441c7725c4fd6 -0x9ff1a5ce04880c0afb2b7219915f859c6eae58501c34d1f51be90b372597cad7 -0x1795efe22cda9091ff551843316b27bb29402b17e7cd39a0ad55b3bcfa1203ac -0x2cb07f9b9af13ced5e90dc296f6cce67b47f272168b76d72cd89e56cdfc98a33 -0xcb841d354fe8b150d0a8da9b1b490c547e44932551e752fc9c97d2ca3615cb0b -0x37db1ba9c4e0df532ddc7c7901bd6087d2c6497f50c12fbc9850dcf2991b1387 -0x0e9694def11bf403b99faab4df294390e0d48d9fd08c6f793bb92ebb5602c509 -0x4fb75b1075bc08436b7243f40f2e75827012a5cfb92563eeab580dab109fada2 -0x3699adc1409ef910a9496231903f51561d6fa8d5f8827d74a2656ca0c2b46667 -0x7e2e35c25d2a00eaf6327d7557685aea4a2dda0a421995d029763eeb3bb2c13f -0x283b8bb8bc5fff5ac97939d3d5bb000d89ff913b8f39190bb5f719e3844b35c2 -0x5543acd2844f8a0049099d823cd3e2bbf13bc18f7eeeb1a96eccfc7988e68a0f -0x81958364bf0c8c855945d8e838992cf0ecf4be756381e646e97a4f1e13fb67a2 -0xeabe3f51d0e6cf7e773ac2122c11d8c1990cca8529edac484b7d75113e01688d -0xba9c7709c348df3c95d4ede981b0a910a5795c317cfc229f10b262a82b876547 -0xfd97eeb1ff4280fd8348f91f7c5e37dedbc2ba18fbc08bba6b77f137f8edc49c -0x17b5448fad52bd450b889bf27934cafef7233ca9c417f3001529650a81a83aa2 -0xef71642660f70af8637529762acfb39ca6b87a6261a09c7acfbd1e81510f193d -0xa8ae9e0fe5aa71faaeaf2c5deb12ec5f672bf9bb638c2b1df31a382ffe21c003 -0x153c2047334cc4cad877a5130f67a723635a956440de9d12ee92bcc1351dc06f -0x1b27cfff374326461fbd76dad08db75876ce9db9ac0b8684e29040e74e91e7ab -0xb45c244afaf477bbf6fdceef2a48ded39f8aa18f705c681b94a04acbbc437706 -0xffd2b2a74c24081228c1c07fe8f9fa8ec4a03c98bb8cb52f3d38fe9a96b3cfad -0x7a1bddc936966302b2d17bbed107c27da2fc309199a350119d508278d7bb4502 -0x5fb59a77bf33d04f012e4d85770bff5dceb7a44492573315c8be0fcdee208d01 -0x7933680ecdf1950e4d01098cec7e6cf0a9f615e2eb80d29a6dddd8e5ead835a8 -0x35b654dce86a79913eca1771abee03627460793d42d9c14522224c3f02d50a72 -0x935825717ab9911abb7e6b768b20a56d53d0f29bd9250e9bec4e09a0f7cafe6b -0xe22d1eab94d250725c6e16ca074a989358266989f6fc7fd32b41bf6e690e022b -0xdf243f31de9028277ca54cbf505e6169a04bf1502b12d7a247d811129096dab0 -0x707987d4a36720c0499bcf5f146596042eb2f9898259f837584dd7d08249a8c0 -0x9336cb837cac46c6072068219ff09504407ff6afbd5600bc5ef3038c8a94e397 -0x2e2ffa9ebfced3f84c681595a13c3a5ae75aba6529992976f940cb1b810f619e -0x31c98627335dfbfa136e696a10d490176d646dca2a885f0f46fddea88ce157f7 -0xa19596a4f103b775c15b4afbd5fcad958587c8fcb1df5aa29cc939898d0a9a2b -0x91bd5ae888f078e711dd492b03980a849e6a78e8dd20e13f759d3615f0146649 -0x497f1a0908ef2c91f29e6b26a110db65b24f2c2e9fcd35805ec87adb6c651357 -0xbc409c8b3de209612cc453c9fa855fac1f7856d0e259addbe512fb4c681e7929 -0x742c273c1a59298f5de85fe507b9b387aabdf95ab0388e879e6ee51dddbd3359 -0x79748ff0c538eb29570d783b5ea9c4a0ac8d2598342c185c82a4085f60af0efa -0x7055817faec939097346eae8441266ca6cdc034bd3e21074d97dcb3562cf0488 -0xeae60fb37ee16b70304575dcb542ab2c0b760c0570dd79511d6757b89004690f -0xd5f9005b8ce8665f6f1f145a9373a35b382c0fff7c8ffa08b3c6db7d4f538f8f -0xd30be919d76851b7b257e601f6a7b1a321ce5ac9165e5439b4cdf5ee06996794 -0x72cb1ae8fff4e3ece223c811eb08eca233a440e2d308e989bb49f814c8a29aac -0xba080c694d6a788c7d6c3d7d73a8377fa533579ec53e14dc7aedaa0b5dc1a9e8 -0x5142697518cebcd16f85fa62c672f704f928860eb26fccc1317adc3ede2abb7b -0x6826e3a0787d200792875bd470ef3bf8fbc6f9cfa844db2ef932365a40c75a66 -0x0a8edb8d63ddd8cb582af64b33e24eaa6ae6d7de5db728e4bf33220bc7e454c1 -0x50f223a3ce195ee4cfb51851acc16c63bd6669190890ce7729bd4e4ef578273b -0xff603e89989fa66e76e5df1316426e16d9ee2fd5a0f7cce4f83d424345db878c -0xe5bd5dfeff9d7c4413cab126d95e62a9c670c1ec4667583e6d03e4c4b8039424 -0x4244c7bb3c5e264efe3ce49f1d03f9cc0451b3dfebc90b75183dbc7aadc96f7d -0xaa4142c3097e5523caccf98011a428b760e9a11b079767e5d5c8691c5b299202 -0x575942ad4d863dcda6ebe53d53265c31f11b7bc5a6f662b0e31b54acd5a17252 -0x30e667f272f241d4be3983ae90f1c7fdcf6c4c89c8905f1d043102c0335edcf3 -0x2ceb5fa57ffe7078ce3260faef041c8d62e20606b4d5b3e2b21eaf0f3e0e0287 -0xc5fb63e6a24821e063ee2e83350805d5d782d7e88761e37e2aec8078eedecef2 \ No newline at end of file diff --git a/contracts/tic-tac-toe/gstd/assets/accounts_pr_keys.txt b/contracts/tic-tac-toe/gstd/assets/accounts_pr_keys.txt deleted file mode 100644 index be34ba6f7..000000000 --- a/contracts/tic-tac-toe/gstd/assets/accounts_pr_keys.txt +++ /dev/null @@ -1,50000 +0,0 @@ -0x2b06e1c02aae15f3842e36eab8d02a64dbc251a11bb8267fc4e105f3df2d245c -0xd01dd7bed4e906e73867987cbd0ac2403bc437461a0f3ce05082ab10f8f797c7 -0x2207612a88bdd79b1c0152a458e02c68c1a31689463ebdd7e00979cb7525c4c5 -0xf0d694ad6be2bcba205cce17594250f3652e61857daed9e60fdd9244c89e2472 -0x96140a3329b675e8c165a6367e7419e30b7cbf7ec292f23e3d5029e3ea07708c -0x8283067b46e223b8ba348be8799cadb4b427ff764376163cd2e47f8eaf67f4f7 -0x7c5b243f5ee9e2e03382587156b29847baf45d74086d89da029a2df472a6b62f -0xdd13633493889367f9bc6cbe09c62f0a427754195ebb851ccad2784568b1ee9e -0x610b7748611e28e2f6f09b7e0d14bf7607cd278b4c98221d34a2174978adc865 -0x10f4b77dfcf66fe93916b66a034746131ad1c4fcbadb64641f7515a34d1f352c -0xb79a42c5a85f87b592b91724d3c7fb2ed07552f6a75eef9ac21b9d7a7fa2f729 -0x9bf0c6a6306fcbccead3ed5e4ae3356c8b7b2770906486f0d73b3902722d7b7d -0x143483b2c0c4a1e12f5613eefdfe9ff3c5ea2c962643a31bcf962396c9e1e09d -0xe9f104be4605182518579f6b627f94ae0bfb2bcad30745ab208ebdee0128e6fe -0x692f6611bac34835e16716fff487a753b01668c3a6bfba982780f91e42db582d -0x432e02582978cd4d9484663d6c245ac40fc61dcc1e991825673bdcd0900c559a -0xffb9b73485ee2edf09c5e7aa98929e467979d3301492ca9c13fb1f11e0519ae1 -0x32b9f47075f6dac896b0ad7431f8b6110de862e834cd44bc9f4c1aa5f95d92fe -0xc6438ead507a7d8c3087de885cd116c496402a6b6543f0eb6164c82db30e8aa6 -0xe6b0161a8b7efe9b9fd47ae3847fe7a814f6de406d8dc106c170ca0751a6e3c1 -0x436fa2fca06fbbb9607579ffca137d6aff0b6c8715e81b85b346a81167679bb4 -0x1760e1630c02103ef48aa762ca0f13b6ad166c2fae28fef99f4186ba8c5dd903 -0x868b49cb92131f047739ef58732c03e54100da303220bce120d6a5cee51dcb1d -0x35a69715bf6ce0f79a4cb66ee51fc35e769b9f9ea34b0819912beb8c580feee5 -0x88d7716db3a1c2e95701a6d52b3a8d0fb6372ca9084bee9e1134546d71fd1453 -0xc7aabb403d0b31cb50adc7a7b3a1b73b50893e6929cf9f05c3581a7c9abe71fe -0x612ebb274a2773a619ad500d777f9b09e247edaf131920fa18f2bd26a1afd6d7 -0x7c86be45c80cc9618e812976ddd6849146e0fbf38ae3eabc446adb8efe72cd77 -0x1485314b1bb7b1848970afe26a57299c041cedaef7b287c374984320609269f2 -0x405db6cf3a1347411333a8936940964d2eee5c9771fddc3fa426cc24cfa86e5b -0x11ae00a81f1d9b0b409435375c1f4992cc434eeb5f55869623a866f02ad7b753 -0xe5dcc5c5699dfc3ce591eef745a14483c435b85d2377ab5303d2c89b6a929e22 -0x93eba60c335da1efd1de82f2bdbb99478ade599ff83cac21c7bd6cb59d25d1e8 -0xd0e4492d49e017e7aaf6b436e7f9ab2012281032ea856b410e2667ca3e7a8163 -0xfc259e75dcde9aa9f5949a760fb062e54049971d48d963a1ef25a34ab000d7d6 -0x0c20f6f2155e977b9910991af8c229ba479a4cb1291eff5a1075664d3974a9b2 -0x2993ea37bb0ca3ac1fc8a972a9ad68fcc354dd72b604219113b235895e7ad74e -0x8d9bb81e4581eb7798b64fabd3329485063cf7fb384af72a70343f706ce34926 -0xae39b99ab6a24c4f0e24f1fae0b9e804ac407d980b27e3c54ee4330e3a58512f -0x47d94191ffe1eaa947a7fcac72ae091d4ba12c57369271ad60ff8d4fec9ca987 -0xb2c25a76fed348bfff81f0fca6b2847d8eda7fbb5fdbfb5443976751a4b36837 -0x32baa4067cb0f31b29c8ce6faf6faa7f443b44fc9cfbd54d6de2f488f6f962c8 -0x3185529850dec2e964e7832ff335bae51a75cd03c701a1a4ad728e1aa6cfbe02 -0x9c16d64155142ece9c9de9e7ecc6b2c283dcc8d9eb57044f2ae816473abbb700 -0x9c92c649c48ead364551c3a108d7a8334dc99bc679d3cc87d80e2d6813478c68 -0x8eb63dae1c0eccf19ef4be5c2f1431378762ecf9bd7f7233c04b010494eb5f57 -0xb36b158cd7906e87c7fe2d0c545c19cb4dde6d2b033844a1effb5d1a90b96fd3 -0x48faea8775c3fa5c769809088c8b977b4e36eef328d5c797c17452f4fc709073 -0x84b1898b52f7f6b184bce8572c03d40e5f7add7c0cbf0e1fd6385eaa9d0d4c1b -0x4beb9e45b640d5e51175ef3c01a9fcf33e4a2c497832dc05bc59776a86c634ab -0x09945eae2bda6477c576193fe7368186301e6f20040fc6804d266ea6e3b9fea7 -0x6430d4380e166e4b039709e7f4c7853097bb068d670f0c27fd012f778bff06be -0x48b89309c059ea78f69b95e02b58da82e311de4560c0092c573b9efcf0be561e -0x025ffe9ec41f30d1661004367998ad0914ac139cdf20cc48d98fbfb937d84825 -0x2ca7f33384d328d080d2afe2c2801067a5b77f318238104532532649bc1d28b4 -0xebcd158bb1b73f1faa56bfc606a92020dd7ccf49a67d2e5f9d7dd84e9b517319 -0xa2466928ad397c8732b4eb0308680e564c515605609a13534fb7e3629993d5ed -0x371c4e9f99e35357bc538c331d2e4a2057844f18f229ea37741ef9cbb0339c20 -0xe7fd386daaa76a7617b3748e65739ec5ef448a2ed64ffb5ca133e29dd7a6f9fc -0xab0f5950420c912e8629c6b20853a753c68efc4c4f12a410c7a9eae12e2604aa -0x99a5232f49a993d37e792d2e27a26471a039097fa3c9d40d933c6d5d2323c595 -0x64cbe5669409c7bf72c8917675e2927ccc1aedfdd20c2f9cccee2ba9e7e335b0 -0xa50ea81cb0b492a2cc8767764b3eaf4ce24276c598f8ca724a97f85384d57334 -0xd4fce455a509766abc226f54b0da9a4636805d2f866d02ebd0b342d869f240b8 -0x688c76be932486cf9c131c70efb17dc6c08100ffdcfc9d9598f9d37dfdfa1bee -0x1d45666f92b34e5ca18a83137f909908dced5c56c604d410acde8f8678b1465a -0x2102239c1b7d263c1b180657fe361c6fb7e727af9189573b4b7bb9a89c2ff8d9 -0x805b8ae2d206230421887b590f3748cc91369e485d745096f4324d40f377a472 -0x40a02163865d520cb1a508b866e85a94bf80875bd5a80634f6bb4bc2ff64f367 -0xe8c5e8014ea28adcda994bbb7394a18fd34cf87538b55e30ac7cccc0926d8e1b -0xfc32583b5805c92ceb33b8866260b803c7a7c69d012765ae86a52a9121605569 -0x0184e65d9377d570485dac905d8f4685a2d8e62ec3729b65a52b9a7b29e7a327 -0xd402161ccb0d7df96b5a532490423d8903e213287458ff2a4994362f35484687 -0xae889a12216d956f63646bcf77248a280ee28632ca112e8aa7cb0e2718d8a75f -0xc220a61c02969926478ca06f5dd5de5e6a924f4198931cb530a2ca2b72cbde93 -0x2d17ba72a0841b963e79ab98c55bfb3a1e2f412d8d2b1f49406f66067192c175 -0x7d2b9c698fef936e802b43d212066c030db4374f72591896a6aff766e968bf65 -0x8395d8c8cb8e163e6026307a1f4cef6948f5b12e02b2795347c81bb6d48eab8c -0x738c448bdc19c171f18772305867a2db2f67e005f3f6bfd89d08a0c7c80a6e5d -0xab4162b4d249df31a95c58f307264c8d8305a9570ad21c8ca744de2a02b359a4 -0xcd2dbb8776c048ab91cbb373ac4e9345cbd58b1d9971ed8fc89cba97d86c2fd6 -0x4d0f308722f60fd4f24ab90135c4d246bdcc32b17b8ebca4eb3e83b228d11134 -0xfbd8dc8136995e8d91eab46d1becc364f86d5a53df180e7c7c0706cffc2909cb -0x783f6896aa3936c0573d1fd90a28af866735271c03d8a44a2d41fe0b85aea679 -0x6162a20279842bbc5dac80a2a22d7114421edf0efa45db572ebb294a9924ce3c -0x32c820f1fb08364d09a7f1c0fa2ddde9aa1ba30c480abc06fe636a795386116e -0x4d545934d5d2809d31459430d546f11e7122cecdbe53f0d825f171bc12f2154c -0xf277a55228ac0ce0520292f4e2c6045de398b3086d84d96fa0f40c04d51bcb13 -0x841ec26b67df26da5152dce2e955ca6dc8355f62792788eb37480005f9e3ffbd -0xf9f9791a87cd000c637c03bfcb165152a3a99e919cadb3a72700de55c5d2f253 -0x07e265c62e391f5b42de8792f2356bb551ac97607b26d3e1f65cfdba015ff042 -0x22af9ef44f1eca9d5c8b78fe6a125fe03450e5e90489f60122b08131270de436 -0x662a417eb229220ace652585be4f62b204c95a67ee3f6687d6ce13936f1e9fde -0x8229fd9a589b56bfefcb6312dff23cd7c7c77f7388c40d373752156087013d5a -0x52a4a24004b76475dcf4ec8798e981e7515c2ed088824a57f798015fa59b2d46 -0x2f8d72bc81a1acb2c41a07425d74fbb07db7dc78691f0601e7dba8a451a75414 -0x326ad5701185f2c5fc14fef77820e5a198d037ca0e727e57ba3e4927c2fcfd4d -0xc119867255b1ba6bce2e558231fd24c7e86211f4d2f392a9785f467f697601a5 -0x86141b40fe1c0882816386f7e4b332dab01465d019e0ceab04ba25ed6ed7ff57 -0x5938fa4f93e2f2ac066bd27045768d88855cdd69840a0a8603c28808d5d2521d -0x9b4805b1b2060178421a37da89ddf0ac9de23059f95ba2a11d8c222f442c672e -0xb9b54d5513c4b29d8db02ace2c15994271498f878d1a5fc3cd64bacc0c44189b -0xcd8d0e2468651e03d01bb80987a193bcb6e1599dccc00e2c016cc026c6873fa8 -0x57fb2eae46cd45d4c3e4ced9c9a37d84feaf47fb92f38beff29dbd9b0961b729 -0x7e54a0975801de46edd828f9067691a8379ab87044fae2704816b4feed56210b -0xfb7d618822fb3aa958e582955e2bbd11eeb59384a067e96d87f2149c40daa2d8 -0x86c09167e62415d7e77a0e8e2ea7932b8892b115a7bdb7004d982d18e7ea4e39 -0x3a05f835193d122db6599831fa87aa4f64f078ca115ce85cca34f4aecf7e4a18 -0xf961906a3deb49fd9a97e646c23c5c4bbba89227fab1c063598baaa9b72c2635 -0x5630f85ea0ef899e08afb62bbd21b88b3bcb82c2b0c316ac08d8aed0462660df -0xe18cd34549ee65b90491c3270a9cb4249424ebf830769908cc339676e7064d34 -0x1d4c3f3b2feb25f75aad949dc4dd813791dab71345cb7a00fb1e254bdbeb1641 -0x6a147ea9c35aabbddec379a6e3fa19e854578ad59190d6059cb4c122603ca899 -0x624663f12738ff1efb4b42eb35c52bbfa704a8e806235b92631df66590c0d469 -0xf758af1b65fdb5bfd4c1744f2ab0bab0579fef52a40c9e653c81f866e2143fdd -0x145e1912db13f643a017c12f94744f6b960bf45d01ebb9a572411ffa978b887d -0x69ed38cd43379e0816a7c3e0edfc7320a8118daeffb2875f43be7d92dff3ede9 -0xfa2f15c39b77ca7a1cf5bdb2e1e203f91cc478b698647123d06f661312013e21 -0xd09fb48457c7c73482069f8349aa11d291be20aa913e89f05ab47631cc48fdf5 -0x98e42ae082934557e20493d499793eee2862d40ce95bc29ccfb7d5eecf813c76 -0x48c4765393e6b53d735d81b8bffed2fa56a3248ccfeb44b1db88179f0cc60658 -0xd6c63b824e57c08341efd66af02816497fe579456caffb87fda8e237a96b7a10 -0xf632cdeb6a5b5dee6bc90a2c6941a142950f6e09c4207bb9f99d2da8f5b37c72 -0x232c88604eea6016df73177b3935a94a32e5acfd30a4aa7e44da2eee4ce57b95 -0x98f39820ae1284aca53d65c60062d623d05e03b01ba013f89310783949ee24c2 -0x4774bded28c8c58779e0097f4f09ab5e73c6fb28c9ba17f9a6e1554d42dfec75 -0x21a879c463b4915b95ab0cf333647d34b592e051955e56fe9785c10ab90103b0 -0x3155c21632f00a92ebdace18cba2d1d6633525d46bd031e1ac406ade7ca83910 -0x18354ba6e5539d00f3144319e87135ebb9bff95d0a98ab8ec3c2b8c4f53db565 -0x3b478441d99a43085385d9a7b8925bc43bdcdccac6d7423aeea7239e561f3cd9 -0x88f64cd90312812acde0f07bbad0b8aca0ff326bd5f7f2b7a9d2671977eae9b0 -0x5869494855912a4f040e07870581f47c641bfc532c997cd1ac9c8c8b867fdd86 -0xffd390d16985a0fea15ac5f2a2e75655ce8291b48ec0750be7940b0a31126b40 -0x5eb526b75982053e651bb65246b67ef862edde23fb8e0851e40f2922e658f417 -0x4e3e05deee1d2e064180940c228c1b8e5c1adaab1546b6aad6dc08e2be41053a -0x32ec8e1b556c1d9d4639f0473c15d485bfba627d0013c01aba6da4d63584cc79 -0xbda0e379c5aba68642dd58b9ffb61d47bcd678465d4d8896c2e10eb2b51e520d -0xc3de77276a6892edc0c6b0a564e1e1a35ffe66d69802d1fbb2bc609100a4cb67 -0xa670c964688e8b7dd19e296f3afa544f9c5f617ac0717b42dc041fdf2f2530c3 -0x8bdfce9af295afff928c6ac286ac40a84367fe9c30769611b56734789375d49f -0xbdeb30c44f75122ca397716495bbd7e8172c0f26212d3c867691df0ddd5f72e4 -0xc91e6381b2084e97c9dd9ad434d663d8cd416d79ec82d581db30939ceb7c7a31 -0x24d85bfd8880d4e8f1125ed89329abaf802f8a56414f924061ece3c950173752 -0x2a40629db3ef794e7c0281857fcd7451f5ea49929c6b3bffe2a1cf18d3b41865 -0xa031c4f5050f6dc39fecad6359be21458d2efe504941eab682f6d3f7dc4968db -0xd5586412f883a757f156125b91d4ea8c76a494f69217d141e8e11ed3e82aa464 -0xf23f181119d2d9e206ec2011385e0d7f735e1c23624854c6551d7281d1e1eef9 -0xca983143ae0714cb63f27026f3843ef977b66f50bd6a2b47576abbc6fc86575e -0x03392b3d0313f390cc83f0bfde888782871e0583c2b424869f35e294f43c0eaa -0x27c11b4d45e84ed235e39ce5f7111f90b77b08af03b0ad92ca6e3d1b8849bd29 -0x7039c5fe513cec58c3872c9f277f8e829d49a609549d56ac7df37fa73c9853d0 -0xeb7a621230a80662551c15e14142a5a212b1adb22ccfe1630ecedd3744e7562e -0xb7624ec0aaf7d409dc0613b6fd515d5871564b0a87aab06f1b0e9f4ae45e3e8c -0x418588d03d75bcf1c181ad135ba0a84ba58177f4deaee90b9b2bbcc9144681c2 -0x885ecb221bd63455404bea5573824f32d73e9f407393ed26e4943215b02e5748 -0x2241dd78d95ec71c9e9bb1e5484c316128d4b6310500b116137d9ee8c44edfb5 -0x76d0e0428f116d6f1845969713c253d254466da6052be65cca4d3b959fe61865 -0xc6943408a0a031d7a89da2c10b69cfa96bc4620d6b9fcc3906b5d5a12f888340 -0xaf5c8c599c4d1410cf07374fd00831fd8f94379b8bdc2052e3591d2adffe7d4f -0xa56f32962816aff6f99e7a65d96e12e8dbc3dbbc68fa8cdb7faecdc888ee6db6 -0x5a33b7b266058fc7b5e7fffb91600d864e41133b1e6006980bbdb8c7d41bef4b -0xd263ec188500d98d224e46c059f526827c10d8915caf68714c69c1c7a013348b -0x59682adae63c008d327046255c23ff708683c8390da64cff3b26fbe2e476083c -0xf3d98e450f5310cb8db1d22e4573af4e91308da0ea22c5b976ff3289e8232f86 -0x685117c2f15b0836e4e6694eef5a9ea810338b472eaee4c37b21758c490e25f3 -0x3b1b4721e6bbf7fe878df55e0f508d732498d9ab687638f88e1976964e80be44 -0x22e196982ab81449f7fc1375ce8c988cf3d4b16973bc7215a1dffe496023cd7a -0xd8720f5fad5ab28fd9937c4f502c466a03964bf4698a7cff443bc71ed14c344d -0x508968a0962f8e653402ccb8032e53b2c9b19c681bf5f616a8829a1d2e9fcc7c -0xd3bc1b67491014c10d46ec45ad432aa7e2fb9d60952ec56717cbe8c6c53bbc02 -0x0127de99da6779a267904a38c325fb6ba61a7df0a7fcc1c2b47f67fd920f09b6 -0xdcd25671939cc0432bcb29383bb8717be6ea9517c24061fe546ed80844eb69ac -0x8bd4cf2f926a437f5ca96adfcdd4d292b2d540ed074cae3ac5a5e03f94573b5f -0xbfe0f04c966f36d476d123ed9c7a674f467148072219d0dfbf59f9772543d179 -0x68ba7b3618f5fba65c414b71d2f7b0aea3598901cf606c948b61266a6a8da416 -0x3e3505ae4e7978a94fe0b66d23eab560cb18d5d8f326809b3d1728e284b8ba1d -0x06d06f713ac9064b7395b8062fcf534c95205daccf5f8f33625d620786394d43 -0xa9453c5a50ac1f04ca679f647660d1af21e6414f6810f8ba44dc5ef7aaaabc18 -0x4866173cc3194563a5f739b627829b5bc6078b76c5afee99f49b425d0c06f2cd -0x0854299ed2023613e836f26d44a17f44398af1b4c80d7dc99d705dc6afe4d4c2 -0x1640cb4bde541be32195d1c1523f55a9c149a6d17a475863a672b249b3206730 -0x8c451324fb9925365cd31697ee682cf7bb899df86993e3091df596d757fafeee -0xdb6db74f213f92d15145162a905682d62002c75b639d0d15ecae3f983decf07a -0xf7bb080c8243a416b5ff001edfa9829d7c4e2dc43769a22bd943db3deafa38d3 -0xc9330c2583718a13f0162fed64baa7565ff00d60837346af4c14dcee8faf41ab -0xe9ec3081ef9a7ecb5a856cf6242c01b230cbcd25929157975118bc13eece102c -0xf9857557da24166496c11537e2ebc75cacc1edea38c3f775ec356c6c0fee3f9a -0xbbab32d22f6878f917a1a8a09e1f8f9e486adf6faf5faae6ac5870b2bec053c3 -0x40d51b14c1629467d0e3adbc2344805bba7d1b565ce41b0dbbeb66f105208a49 -0x7ddc29985d2777672cd7d44113294855f33985802038db297b0bd37b23ce36c1 -0x782f9792fa253f33f08718658912d561e91460d12f40d94c617737d08e48838c -0xb2479ec2d2cf24c62145664519f67cf5aae460047b94ba07e98edff447ff5cbb -0x05c50a64184dd49a454106d9fb260607be1f7e938f0e68af20f56fb94e54b777 -0xe7792d91bb56a217b364c20f960ef2d00c2b0d2e8d2d05e06f83881bc3695206 -0x16edf94fa5695d8b86b460ffba0dfe4069f9a22c99bc7acfa1eac740c32015a7 -0x1883b4f9ff9955589015266c5c15a1e9d41f1c838d55a8b4a1a354e93e0f2122 -0xf56b2779120cc8aa69dc59821c8e78d1bea077881b49a400746c327eb6377827 -0xfa8b613cfca7e8168c0f9caf87772176b2a4c2faf86b5af4359201fae3760377 -0x0aa0333a297006c2938afe20721ed7c355944170d5d38f50636fa32974c53d6a -0xf6fc64090531d77ea21b275419d209ea352902fb05620eab9b9dcc735c727a8d -0x58893181a4452f904ff6e609dd14809f4ff2962de84f8ccb5f1700dd08812d5f -0x8f1fd5c163a75101e13972cc77fdd9673eb05bff1e9b8d6fd0b84c3c787318a7 -0x60ce91cd370dfa75106d78325e7c7487605ab0946f10e3600c76dd3f8ce8cf74 -0x8d3480724c3419d209bc134a9da6353c291f1a426081e9d6d8af174c6053e35f -0xdf04eee3e1c88904e733cc195422661c510c22fa0292ff64a1bc898c39a74fb7 -0x7ef2a65fbb36711efec8538de814c8e37575a38aed8eacc2e599d373f11f9d85 -0xefa6bc771b1d0fd920a98f76794c375457e5889fa02def3c9cabc76e869ef657 -0x22491100f1c9f9dd750f5d6e8b600762fee1e5ac7be042ed9bc3bc1cf12b6133 -0xb72742b419e48715dbccd922b5674eca6b4005b384f07b789867f7c6a889fc2d -0xfc63211f1f1c7ff150b019a8df0fad7bad3a8afbdc5a6b428c6d9ada9ddb15d7 -0x5627f40ff99fe2397bc3d145238883c785174a15edd42bd7da22ef724691faf5 -0x73a47d759bd1b0e63d6252bdac7c35855d9534bc793ad0c3099926b016fb01b0 -0x1cf54cae57fd5f43f1006b3a0f8d758729de9ada3881216647aeac8154ad455c -0x3a01e055688191e8264c2d88c7e4249b861c14bc991f65d0394676b994a30e40 -0x650266ed7a5a679ddd5c6b827aae88a8de6110381c415bdb9fa984040e7d7f98 -0x6b2a48e3f36dc2df37c666e98aeef2bdd270ee34e072abd1f5f378615b91329d -0x9d94d294e109756c0dc3022ce71cacb18258506968f06ba923da552bbcc5824e -0xeb6bdb11227e6722e6f265c692678ac4f1a0aa6d4cdcf96100c7320b014b7628 -0xfde4a5a2b83b56e940e1561770c1439ad93d0d72f136abe556e0b9bc53f0aeab -0x948fa9f5a8023149729eb939628057c4756497b17d98aed462c6439b890f40d5 -0x8f27c23bea4eaa7b941dfa118e5162066c9b550ed6c9d5990cf82a66e99996db -0x8281fbece7dd34b77e6f620b56245e4cb7c4e0605228e8a405e03212c0e64e6a -0xf30d0ba48803f7b9a6568578f8c8d6f01ced1cb11af59e4b9f5ebb885472cad4 -0xa086ac5fca35146441294db3721e7b89a66dbbca70febaed8bdecbe5be3fefad -0x3593241554ecba7b1d9eeb1557ed2e8cd8ffcce4fbf6141373f64e5734ae9d6e -0x14bb469caae3f450e67c4038eb9e532639ffddfc9f9c2320ca8565ddf74ece92 -0x8478fcaa50e81b25c6eb499d7635d96032e4cbc08d7e8aed31ea31feeafc0f56 -0x3049c4c190da149ba8524b2897b8a592982e0816830c3a95cc5d0c51cb1b9fc8 -0xa08fe7419b8603728eff4426a07660d5f1f5873cdaf47df0c1358b5033c73212 -0x002513edaff7c778870655f4712aad485f99e36393f696cd0163fb8700a77db3 -0x3af8a4dd697bbf2390930af942b81e41c85f89ebf432decac56c150255fbf1ec -0xda4f554734509ddfc582f38596e740e2ea48ebfca964f57da8f8345a904db28d -0x7806e45e585105489f03e447f72f399458142771df275377d0fed198ac52b84b -0x7c6b904847fb7f7c55b9277d648883c8787ad361f2b0039781b4b2a6542c2519 -0x7f7c060be11e15aa46da87fb1a6c5754e7eb3eee5c8ffd445d9da6a1adff1e3a -0xfcbf1dd14fd7daa74e8ad7c531d919277aef942fe63edabce1cb06a36fc09158 -0xa9472004a477852c0462b25d96666ce67d9c7d6efc667964dc185f410c9fee56 -0xe0cc180b4626e2818b99805e6e0edb7703496a5e170ac71ba718e5f336f43eb1 -0x1c14e2e85d24bf94cd3de4aceb9c90d735ff72d3d421a42b2a2ff21c06e3894c -0x3220f6479c68ca1a2cd97141c490e86f686845876990da09c1844b8a3526d80c -0x68e3565c745f8fe19eec3e3abd34a682370cddc0045c26b6838e0c01e1db2f76 -0xac470314548c060eaad66b9d5b58224941386f548fa104be7c4e8770b4a95d59 -0x57ad3e3ccb35f416080f86df15b3e584a365b608e5763797ec63560675450ad8 -0xf13a1ef5ac49f9a3e61e5443c2dc5a895162c1d99662d74e57fee753bd7fa28c -0xd6fa16ea9e49c07765af2efd6d2e1e5c23da1f9555e2f63122293950ec876a34 -0x0b899cc941f66701adbf2f059acce566edc82262b9032e2747e75ac3540fea40 -0x8d9fd6b62a2ec90269e30a72506f0132d392fce586f811b654d79ffdad1735a8 -0x7846f82a1584ec57bf9f0d3d26d170f95dc8db1a8a1f3e482c91216990adbba7 -0xf07e5165ab003bf484a47cd442e7e504b2b95ac73707e3ce38e6a1d2ca4da216 -0xf5dc025eb3f277ef52ad38158637817e7e0eb14bc10f337ccd1ada1984c84435 -0x5ea32ce5f6bf934496c72bb74ca1be317a8e66dd19161593069ab8067150d78d -0x242819633ef7eeb9a7f5b4fffc4cee401df7def671fe6a266886ecb593376146 -0x76e931250a857cad357c3d0fb8476d9bd1d3c0dda47e4cc7806c65f2f144fe9f -0x88c1dcf18fbd3b2755fe535e7d3767ae3cb3dd81c3e71b3b258839a051f6c421 -0xd5288f32f390f6ea781644d2626c33d1171506b723d1ae3827c051df4fcb6158 -0xc05fa9c2d4a36efc51137ae5c8a1b2b77525b6d72e2bf6ed017610aaf23bdce1 -0x8dfe30fc1422b284bcc1151191beda4c2bb7992f8defc5af5f375513728a1323 -0xa66a86c5a6745505a1dcb88f04e17e51037d0b08ceb2129f09c308677462195f -0xc97db514f9524bf55a486c4750dc5d367b0b0e085d8aec8d79438363f4682ffe -0x0bb1deea9e6a7476138f9ec13cbf413209052f1a687cbd108d82865afa4d9219 -0xa8dda275bd570c95c604bed09344e125129ddf3a7dbf9b1369cfdb70e4de269b -0x25a8811116c433cb74fdcc19e5c4794ae4e227772e2bb85063aa1b6f20e5919a -0xd9d2a7c6700b28d924a7adea2a5a23fbb7fdbcb50a9bc9bfdaff1d129adb7f40 -0xf1e0c9373256849421c1f7bba826f2209e4473025b21b439502743ac755da034 -0xd72fc984c333b79f04fc8049b3a5062c54662055a4b5fed5c818b16f4e8d273f -0x180d9f61c2ac8622035976ece08890a7e8621e0401fa1b1b7e2dbe5da4a2cf14 -0xbe29926fc67b616bb1d2977a2285f34b9b131799551bf97c558f014b813185d4 -0x5d87849026d2a56c5028fc85dcf52b0879a5c450009e4240d600aa7cf0b87436 -0x21c172f814b1b428537c0f23a02f0617836953766cd504ec5bf3adfccc1f418f -0x82eb33afbcac37687f6ec3c5d8c47de0817544bf7c89e5fc4bd69420cb1e09f8 -0x7eacb6fac29f4d2341408f6fa9e8aa656e42b1f6966ae171d83f4088a9238a42 -0xc9f0b04cb40c71c7474701273e4f940a9a194963b3cc6477cc37498d1e5c0c12 -0x82ecfb0a659836b71b7df4a1f21e02ad788df15c92c843e56591a2af674327c0 -0x20d9f76aca1d4430a2a0312d8978c6da7b9b347538a9966dfd851530e8c3bca8 -0x577904aecd14cec4e8930cebb91462bf83c52f2e8e7f8dc60803b7185c4885ab -0xeacef9f760bceeed22370b48401d6d7e59ff96b37d19e96392d3bd3fc977ce38 -0xe56c9f511d834bcd58426602f0b1732821722ca0d52582c360b6cee85ab3b160 -0xf8e9bccb00062b812c1922f67a80cd1d6c4233b3b9062811c23332de38d69b11 -0x4967a92f89f05ec0d8769fe231f6b3a5cc7a9859432d444e670289568cbb9432 -0xbb08d70766a30cfa6ca323854782c1acb4236265e2644d74591a7a0c618021f9 -0x63517f20290754ddd901e66475d556581a71be21715bb33fb3e356fed88b9e25 -0xcfef53c1894dc1e2f2e9f7ba5a881c5771cae4e7deb0eaec28f0d869de574e2d -0x6b5475db6c2a67a830095c1cc17264739ff158e9e67741f3e2a6b8d0dd30b9f3 -0xba47ba0ccfb3c8ef767516e78a40b34ebbc66e9d6ab533966f19048def98af81 -0xb3b19bafaf53c423d1622705f13c3a842983ef2352e7fbc04bdcbfb23876a81f -0x3b898ec02dbf51b55e949a280562d2cb8699b7aeb9cde5fc8983b93f6cc6d3b0 -0x1986d91087a7076bce5ec1a763cc6460ef9190f63e1ecce3ed4b271cdd38ec07 -0xfca848845b1f02b9dc4c334cdc520ef5592627a6badd83bbdbe81e239f5ddfeb -0x9c4f53761149cba3b9d581345657b668d0d1a027f5bb0a006068fee1ecdf5c78 -0x081bd8e75a08b59a45d2e5466bdd2a06a253ad56cbfc1bf9552eaa6777612629 -0x56626b95b4a764204e50c638df242ad6c27dafebb6b3432803e6bf0d974f678c -0x77618049c6042081be84c91f2c6d7a215e10e3b0e46839b44d2c106bd26353f5 -0x316456bc66aba9da04322996ebf88045b7940a6637b71065d42b1df4b8ff7892 -0x05e3b015f2feff65cc6f9bd7ebb3cd770fe55dce9b9f4da75e76e55e78eaf78d -0x0beb96cfdf1abd2ddf77deceedffdf4f1d466bf47173e40fabf0254ea12d2a83 -0x1d4506cf244496d3bebd2bd4d81d0ed74eaaaf97f55426ae3a70d39b99725e3c -0x51bca24c09a5ecda34604ffd12181b201c6389fc46256410f0e3c12e2d93106e -0x153b34748cbefd7c6c710a1a345ff765120493e737d659dd0542c0e43215e7fb -0x97d9b4f546d352e276fc7a89df27cf02af9591c807bc699b75db62640d22969d -0x804cc5a99e6ecdaec107bc27c82f4bd6b96a900c5800896a79b3164ac7adf7d2 -0x07b1679352890a30ab52a2ff979c915790a9983776eacce3e328de650652014d -0xf4f1352d7dcdee6049a20a746ab9b9678cb3525de6d381b35af5849e3c7b28e9 -0xd513a52175aad188e05c2f5c7035bec181923dc0b8db6dbf698ffc869d174b93 -0xd3497a7a521826586381e60c30c9728ee38f2b381a4dcb688ce8abbefa9b719f -0x5e05857102259775eac96031a849e44e3a93656eaa2262698714f147ddb8bcdd -0xb609c2af787ade89461dcf0c837a72bed6653dc124e8842e5f7529344d5ae0a3 -0xe0d2fcacfa64c90149fe7262178ca731fb4728a3e657810717509e3334a3a285 -0x63b7e755c4458d01390f93a37c84ecb8137257c486af3a9e11f9f9c445d8b6d4 -0x120fa122d4838d3f237f244c9b509d117cb8064ec70e06b79c5b08df74aea5f3 -0x15ecc921a162bef097b26fe73d58a05bebce47496f40377e363d74665bd13061 -0x4f1bdf6b6abfb027337ae65d04785289c4e05fc9d761b8776fd5133c32c5ddc0 -0x60e80057783aab00fdf25632a0535316257c6ca5720b464396bb9ffecfcefa16 -0xba6e795c1ead334572ba77d7830deaf87b12c5bf7c52c8fbdcadc13b2ced5921 -0x95f40c67a8212f9086e208fb6756738050bfb5723755aec5266bc4774ae9b524 -0x812ce0b9e1f52d4e507b2a99b38dc9219fc400838b8bf3748d45a48bd03d79b7 -0xa250f48d71d42645c229c6a324ab33835cd2502b602a9b1165689ce40bce6f43 -0x30b0405326b1de82cd9be281d3ec98c30cc9ffd0963c9cc1cbc8414f6c9f15dc -0xe9075257f3b7b1c374ef3954b6c9257ee4773804ec55e462fe8798cb7230c0e5 -0xa37e7f31fa536b88657a34b21da639cafe7aaf495f448796c4dfb0ba40e7f288 -0x9780b8db0d88bfdffe4730b6b667f3c6a39dc431de7d211ad4e1c623d31d7138 -0xac3fafe579d3b70c162633f4f0e587bd03cdbacf35368136b5891e53f5754242 -0x2cbaf6fea88b1ccedb61781fa30f0e1fd74fd5a60aaf1fe50c55473a41caa16f -0x52df74476524485bf3a8b0f70d2e91be8cc2b10a68e47d48af2a24af02bed437 -0x4ce8ba6f0d90108d5ff967446862aa4c45cc01ebbd474e8899397c6dd8c86d07 -0x42033d5318f35f9c5fbc62d7ebbb0580cf6e0fabf11d876076535e3c22bc06e0 -0xcf496aee196a317a5989a191423be59d745b43d05a37a322eadce6e04d3a90f7 -0x570c1d4e295f5ba0dc36cf930b3ab60bd06f9a8a5ac6aa8fc5f17c5ecbac4010 -0x399e18d301fbc745f5962b9e5e5c5f6a714fa56cfd1bbcf25ee225796018a2ad -0x9c00ecae775fb93398028fe0f55d85abe3bcc78d287cf3612b15d9a43f2fc319 -0x0db1a633ee90641b47b6e227935decda2a2b693ba6890883a226a1aad53bf462 -0x18b71bbe731dbc7de0b30eca0d991fdcb163d63139b896a45dd9287abc8e3d4e -0x02bff66610cfabaa6dfe91ef9c439ba25e21412332f35d41c33274952aa42803 -0xdff7f34843b6df8f505840a72582a97edb0d42ddb93709cf9879ab63ce58d44c -0xe44f9fb1c66a8ba23f5a8743832d3cc5ab34cec2df1569c32b28c9b3371fc205 -0x6ad3a5032eb89bd4b9f558e094f598d0ea2693a25cf11c582dde6ea92db3e4bb -0x0233a38eba429fc196adc048da13ef5005b6e0eb7221afc36e5eacb9c6877bdd -0x84dea1ee23e24651a17cfce3d0b4160d1ef3e6cb35ee21aa4b6883a02e422ed3 -0x52f359c27e18e155fe1167ae617237ca5f9b0830693be1da25b8f30751a3a82e -0xf8eca5390113359de577b796c3e6f831d94cd8462e0537809bca18aa1c6be007 -0xdf1d9dd45b09c4b04e694043b3dfa2f68d48798baff0749a455a5f04725a3263 -0x9ac37a78a4c2b2f486eeacd0365fafbafb01a51cfca6af25fb7f5e072bbfe2cc -0xb7c434a2a9315e1e0cf99cf3e700e36a8954151b5e4f1c6bc249962b199edd46 -0xf0d7405d673ae06799e83c5dd485d28c039fab8cede7b39bb099e0572fa83dae -0xf784160142496b2114732de842904e6608149351eb367f53646e0c2e2eded8bc -0x18ced5e1306e7170e3634261f5ce27d4411d923a4e5ba6b6161632c5684ec871 -0x455be94bd3beea1d3030462ad97e4332857d130627025498bb892df86fab5312 -0x0c656a345e1ae766a58bddc370de116f4a62a1fa084cc7945a15f6468ba10c51 -0x59d2e09b52bf5370522694dfe51cddfe18eb41566f66e0b4835708a2096e95a2 -0x38f401e1eaf46ab1fc24bc5c7a954bf3106df200e9131cc607ea976808d8ba0a -0xdc86ab5e9ddac04b8c595c1d7d8a765d6c72eeaea505d53ea416110aff2d9be7 -0xd7e923750c3c57abbda83e271016a44ce9ca84e46cc20eab8decbae6f97f7f5d -0x80153080bddd47be74c9857c01d1e921076dd739ef88c34290470d26f1973b72 -0xe93ab07d3e9a645e616efb57d041c3504d1120b3d77f0718576c55d339b8a53d -0xd97562c6c6180c962e1b0ba8a1a3af4fe36ed01d30ed3d0ccc58d6ff884d358b -0x8544de44fd50de62515f5f0a1ce5eb1f980e498a95b7a57490c20e23360c73ec -0xe4d10f99ffac5870c449891fcdfe2f16e535df495e0b10c4cda743b8d9b5a6e1 -0x08c5ab6c9320c928ab0d9e4b24e927e51b00552784b30336d19fe0317b0c14fd -0x3bfe690f9307c63aeeb9d9ee2347afb706d1f6976353217818b8104dec6d05ce -0xb84eea52b3bfb9a72e4e93ff0198215ddf208284b151a1f3b2a3b0b1bd0b7020 -0x02c267d8e66421b779fa654b057b14e1b61c59e39c8ad452aca674f531439275 -0x426cd14aade1431e5fba4bcd26e98134f3abfdefbca9575792d88244e2539253 -0x62b40a1e63ef9fe0a41d71cb54aa7b7f90709f3d83744764962fadde6c1fcc3a -0xf6d0a6a8d62277086fbe2b0c15e7b909a4da1e90fda4848c870dfaa2dfbab946 -0x9f479e9fb1d69128d43a15b55b39c25b7179ba2e6aafc6c8ca25b40b8f83cc24 -0xddeccb4cf05a377585bf3ea4c66ec7bffab5b9759b708192d79a6b56a184a591 -0x3ebd7aba1de90602af06e94bc2cd5c7f8297ce456206ea96dd6bbd33776c7a85 -0xb5221ad5f0de1d6b756b7f72c0c19b2fc208c81c3e2033564c15c0a7be61c4a0 -0x98aab53293bf088a05529742faece13a21fd604f72cea483721c2f366da46cc8 -0xb8e4e3852cb13d2a3bf772e827dce4e1ea7b46554e1ddc1344ea21d5ba1ffabb -0xa2f8a0b5566cc2d97f8308ad375ad534d959b74e315ec911750b89fd6890e81f -0xe57aab235a2c264b1ee10c4d395f581ea2fed12ff04e8627073f5d6f7e67ae8e -0xa7cf03459012152d5a0ee644326bac3606b418869493f184ad06c5295fe1fe77 -0x58cee9ab8e7982b46e85ec33c166e68df18d61414c0bfd3b3461841c371e4cc5 -0xe9c38103cdd172e9d48f2d0fd8063b774d5eaa55f520c53eeb598c1b4ecba706 -0x3d5db6b40538ff7b27a45bff13008db8634e4856b5c2058f07e38e7bfd9aa66b -0x03358900f70626a8956449a534c99209bd22cf7c29cebe50265999ef2a7ea70d -0xc09757d2cb261a3b463d0720c4424b959e696794e0abbfff478efe5fd4b76aca -0x919c43bedd96c1c549610e46483d9ab105bf5f60ced8612b39d9b115ffc8d094 -0xcdc6786ce407fd7fbcc3f98711168317b894c6cd63b2b9cb63523676ed66874f -0x588c61cda45f4163a302b2b2cf83d3a871644f1bb05935991d993d3fa8e8f4c6 -0x5df13e61e58c4230196227946bb7cc1f4cfb63e9cf88b7b1d0d3a0a11415b7b9 -0x547e67ec1a3ca125937ef23881af5784a88ecc58ff5d350918554cf129212b9e -0x907e5b0df69c578278308d1c71585cb23bc8048199697c75cd23f26274148a24 -0x02c768c93ec84d5a06cc2ce3052c66b331b840aa71ec6e961cdc7a78cdede463 -0x1643e4a4b82b7d383eade8e687fa9a0c1b74f7f06b54a031b8c3d96603c476fa -0xb469d89ab197a298978bde435250dcec50b055a566a4a59cd216cce3f16026b7 -0xbdd7d077e423ad7198d21ac3d6aa2680e63861a49eb3162abe1d87cdca970948 -0x048ff6a46b2237109221d34a2bfccaa6ad61242b838340483bfb2aee627ed919 -0x680a93cfb775c2743134a7e15e7ded46ee2bc60d4e9cd04db7ce6d8cd123842e -0x7f82404673270d5ed3c4b864f07adcc13c716ac9c240a960c8819e673bc1f32a -0x95a7194148a6e0459e722f43a3ed157e094740f56869df2ad6856cc64e52036c -0xe535b2bfae0b2cb8879c15ed8d98499deefb13fb028a3b0dcef8dea7bb042b80 -0xde19bf9b9c96544103f75df80b30034ddf5013dea3126cfcfc4a6637e5daceb3 -0xe195c6e5fe243cc10ac0ac3cefdffbbb0522aff488f1a556e9deb10784357f19 -0x85d3104dfdc3c9e5134270a22e50637f5e1a661335ee92f2ea1e3a90a4b7b28a -0x0abd44097e78994ae58cbfd71ffe72eecb1d24b2cc5b857561d1f02623b47db5 -0x79e8748dd14b0404a48e35d4ba44bf1cdfb7777af0ee345cb2685e829b7af4a1 -0xc328c7aa157f486ea118945b6dab588a52b5f33c0e84caac470f48cfd093cd01 -0x664997168fe37170aa1d5f2b3e925b6e963d3c9ce15d9c06571159f82cdd4d71 -0x1f9c1d18257d9e2b505f2bb4acc96409a45115c4c6a3ec8a74a41668c0bb0a1e -0x0bc78a102f22bc7b9187be58a0f399b3aed95b75649950ceb0b3cfbc11c3694c -0x3f70da52c0eccb53501d6a9f173fce9777cc8e1feb23b3841de0ebe98fecbed6 -0x43a628d2289be90974dc58d5f93d7f2948fc0578656e63ee0819b7cf0d75d134 -0xd7198d27fd5c67bf45d9037e3a62b16d149ca6f28d545ae28510c2b5672dc6c6 -0xb54d5cf9ff75f5085cc5a247853cf9ecd20adb0d2b4b7f019e5077fb8066d053 -0xfa2f7d12d3df2224dfd6398f54747e27fcb39317d9ccbef4d0021037b18392a0 -0x2d46a8726dbe50cd5f3401d1ef1f1c75d78481b14e57fa4347e0fd695883b06a -0xe396e2c070562b0113beec3019dc4fef3be76c3d1453c09931632d47efd24cf3 -0x60b2eb8e759aba7d22c445c009f1c06f09f5e24c9ae6afaa31d0984e124d20e3 -0xd429353416716ae99aab4f55e6a5136680aaa1d327ad63aa615ded8bc4decd39 -0x81c3fe6e20be0753a2892d9b2d16fc6bb4864e5cde460fdcde9f3b6cc80598e1 -0x2a5c5b1137c0f214c00412db8c45b2a4d0971c9be421258fe420548b255af8ba -0x292f7b37df6fd3bbe080b53c37bd3dc86aa369c192d4a044b53aeca8a60a238a -0x2e04ee7d2f92a3c74b91afabfdce8d7717777d0e64bec10a0261bab94e8ff3eb -0xcc30bffc371f8ed81e21e45ca52aa0dceeb6c8c4db74374990077cc27ef0f23e -0x69461b050b86add246e4d8ed4b32fd758e2548ce6277cde076e59ffc637c4416 -0xc6ab80092c9aff7ecf75020ebd6953be8a49626b3f9117680d481a2b7bc35e79 -0x4f3962cd1ecd1e0fdc4f5cc113615f587c98bff8fe64ea66d17f7fb6de934137 -0xcdccdf7e97df91212ecd027cc4fad87e95428d07bc91d21878e8edb98a902751 -0x8297bc11e5e376f6009ff5ca9e3fbba3e7f4b0a81633ed7fca1a31e8200ab98b -0xadd80ea37ae29739d697d433bf875bd9545c28aa3feeecdf29292da0113719f2 -0xae34d4853609a812dcaa9d56f10edd3e89efcef4d45c1b58d6bf15825070af8e -0xdbc9334be68bd86d0cc6d7c98d307d4ebe2d3bfb1251aa654d85162aab653f75 -0xe554cbd2c3d72601c000a5b3bd9d1be49d680bdddb99d79691d73a59e5952bc5 -0xc9fd26747f23c5a30414732b989ef594763e1c0826ec5b7f3d2a3c6abae2bba3 -0x100bac6e0ce4ddc7b854b7d45e19501d9e4869e0a419b93a1d954f921298d595 -0x0b494a38e8a37c8868b6c3f40b4eaf9350a9c8f7c57a1771b9108e5c8e4e2201 -0x29b8656c34b49fee57137e9c18eeb1e8e7b3f08e7184bf67f0cd444c6149df39 -0x3750f7404e04e4973f680fe3990b53371244210e0c8e0ab7d8fcd29ee82de1b6 -0x4fe432d2ba72ff79e9d9b1ba9ef132e0506e2a4ef4c6153da49e4f837fffdf44 -0x5e663e7df16ef98e476349b03da84005ebeb6b04c65d3c5fd0521163591b2554 -0xcb7d5f083209653ad517bbc715349f1a25893ae211f9d84e578bfd7845ab9e2f -0x449daf09f979352b16b57fb95af4ecd59afdfbd3fcc72e38cac1ffcad806dab5 -0x9223cfe1def610ce575fb43d8228517039e569377f00e4d77b45e379e5aa8667 -0x7e57539327091c73a2c3eab217ac6e29d093558770d0c8dd010eec00297c6859 -0x1d8ac20b605551b9b454292ded4cb8ba8caae3627e3cb314d41ff4a5f799b2c1 -0xb386c8548440bfc7022867c51c9df8bdfa4aa45e65e0ff67dbd0be55285d2876 -0xcad6778e22eecf590b442df78e24a2c4053001dabb0d8908274000825585cf88 -0x5d572802d513b6afa39cbeb9c498b7bf3d85340ef14458d5c87f28815288e34b -0x82a524ec439329c7ebe9b232c11b846eed70177e7158fdca68ffd939c89bdc0f -0x3b6236a82fd8cc010cff9b884938c46ba7cf6ae91ad6cbf804472d61e84271be -0xa13c462ca477ef9bfb0456d8342720f7eb23ad0f7ca8de29ba1099125dadef83 -0xa7e90903820b51c889762b646d492259101bcda4bdc3c3be309c93e3aac80915 -0x635ca476b2c4a474f7977181757f04887e8de0eb17eb15b90a80c9fad1c3cae9 -0xbea86ead2ab0c3dcf7fe48af359beca17c385a48c47354930adb9571221ddf23 -0xe26ed77ad4c5b2854c414a192dc562e15dc6b23b4436331643a36e130f81db1f -0xe2cfe6cfa910dbea18ba232777389ece3bac528322f54a1e111cf1d68e17a819 -0xa4cde9a6da4d40b8ac5cf9c8bf8ffc0a4c9e1f30be4b53094f89e4bc37026524 -0xf7b98fcb749c193707e0696ac525f4dd306f21f6478d8a4531f2580964a9bc96 -0xdb413678a33b1f9a5fae396ad54109fc3960dbaae6ec8153d953c29cebf6e79d -0xb9e7a8fa751051359f4f6ac3aff04e3748192af408710508e1ec936942b1e47b -0xb1d2f2b0c93e4b7c26121e701d4993ce55bfde303c216137a1839bc5fdfdea39 -0xaa6a4893c03d452fc54726d40c722dc699c72ba92a4b821521e4779350d47105 -0x4e1b11957d232a3abf64f490ad6f87da401ddf4486cf396e0ef51faeb8a970b2 -0x569ea04f65ca4cc22e9df03386d1cfe5b844b19fc06116585e51cb3725c7b040 -0x73ddb890ab39fda124f41c9e35e0fbeea59ae5fbadd63c0f4564b2b27ccc338a -0x9fd15915eec6a1f1a6bb64d390a7fdbce68f766bee50cd3b6704be3e9599c2cf -0x20cddb52454d957319c4376dec380d0dc768c6f7f913d8a512cb4c4bfbf17a71 -0x8d16cc2c23c4013d0dc1f07ea3ced53807cf05831688bea55af85601dc4adaa3 -0x04d80f24476c070ecbd74d378e1820b1ad4b4ab322139fee511568f79e244020 -0x8e436c9eb0cba21a9b403794126fe98614413251cfb43e1e94b2ff63da0ab880 -0xa2cf4b2bb23589dee44764e937e639e9df59632e424417f34501bd87cb4a3e24 -0x312158bdf78b352ae638ea206fa98d7163568de4ed8879c31cf06857141b3245 -0x43b92e86d3ae67ee23951de622aa3ddd743050d6f4d5b89f923a2b7e1d4766ea -0xa2842889f98b0fda11ebfdd2c9c4f55171e858a5f0e28983ace0c7413dbe7908 -0x747b8ce63dd691abd79f9efcd5369e036912e6c8333a0b7537db3d7702a15706 -0x38fd7eeccbc03c82a9d68e9af12d296e50c12472df77f1344e6c9d5dc8bbc7fc -0xa1707facd27132a45abbb1232c8211ec1b6b6b1356f4c3a5682303b528b2b0a5 -0x6868f678df6d8fddc1e13191afb88f63e6512f65dac29f5633f47904a0c5241b -0xea14f2587dd88a1917248f13295dbbcdb7e74c575cb8790fb8305271e8fc7cc0 -0xa19b52f9fcaf82dd8622fbda8ba5437fccb7734159763dc5b7969dc85256f57b -0x41d12c94b5e1a4eb93d32b34405a4bb0299e13fc7235066cda35ffe63f3211bd -0x40af120e121c8964c8c6f5cc42414cab1893e80548534347f8848a56e87358bf -0x3320a937fb9fe0d7b36066e28c557658e795e3c3a7921bfa3704d90d0046d0b3 -0x28296805f2cca80fdfa01004f62ac39a2ea34177c7f9db97fba87da8cd2d1b64 -0x083662b6f806dcd073a8e1641033457012c61c425957fc261ba6c0b62383b4a7 -0x763c021767d68a38512301e272cb7cec5a54a4062d0093312d5242dfe4a6ee84 -0xa2a2a261eb4acaebbaf43c388230ccd446899fb01c078b66431d4c3bc0b17a52 -0x97a8991c433f7d5942872252b4cfc9e2dc7d1b858bf6cc27da079d268db80b78 -0xef69ad28bbad5f9f5a7abafe10dafa47e7aecf29cb49f1faa45b2c8473c6d94e -0x62404c35e3257887a2f9c5c1cf8d2e1d470090a3b1c8784936480e9c1d811835 -0x539367eef8204627b999999467d06eaed366b7f589034c333a60461651d04b23 -0xca0e7ce420b6be6b2c3d11a0017e99f3f45b3559844ee83fbdc30a60a35633f9 -0xc895caa9dd5c8b05ac5087a73be9763b808b0c7ba5fa76d23d7785bf5a70e0d1 -0xef51531fe8138199112e5e3aa8f184d6d6e92583538d1b2cb6e9bb5a6008acb1 -0xb2f43b9de94a6896f0389688d4a73e428604ec1dc91ba0cb785f150ea45037a1 -0x9bb2c9119e203d20bc92044934e8fd04cd24d1afb4a819501e92e236369ecf80 -0x8b1c0e92aefaae983d7d187f57aa09356dd598ef5868450961311c4882ed43aa -0x648cdeafb9b64c5be7e2f07420a134ae75221538187ed8445dce9ffaca63b4f4 -0x8db9dbc46692eca245c2436eb611df067257c55780dff687b5983f882afbacd3 -0x4f3caec43db6b13445e182800afeb07291e417d38562a0e0c031a476af943796 -0xa12890ba54665f3fb29f7da8ac55c4f337f34546e48b9b4a5d518d89a784bf72 -0x5a554a6f416f14751285a7bed70e7264c31a66af8e5fefd3c495b75f32bf025e -0x743f2afcd360bb62f513f0f8cc6cd400d12262fe3fbb7e6e792753ff0ce5d4d7 -0x996b20b9db69c164d279e89df530c42d33d8ef0f8af200977bd25a7d5cc1cf4c -0xf7a73eaab5f1eb0db7be349e7db3cbf13e96a895a0ac39aac2ee1a0012725156 -0xbff1fdf708906fda6be75380afa11c2885d1b39ac07811184cb7081fe9480fd9 -0xdcfc2d590fb85c4a923e1de8fc32fe7664f0943d37e8b201f30afd1d735271e4 -0xa45e5979e194b02830294b126752760b934a182dcb34071e78378923b8a23b0a -0xc4d43295d3531bf2e7e9ad7926c629460b55eb003c82c12ae8f894e3df670575 -0x05a2ded1c588b65b4c2f3831011fda8eeae9b3c46f3e2a5b58acec859ce827ac -0x93817793c39254568b549b828897d310f97e6b8f0e1b5902f2cb0b930990e25a -0xda5af2a3e85cd9962d9089d1b3681479c355cb63efef9482960a739ba08a73ab -0x7def7aa559c86970e99aab2de5f9fd8101deb5c4405bf4927e935b3a95504c9e -0xbf4236b3d0b269ab5a6183cbea59a7d33ea6f566143de10a81663de689c76d45 -0x26efa1e97aaa98dc396e0d4b5a4bcda0ee059b0842298612aa9ab70bf69442ea -0xca12c5aba6a65106d63dda4c1e2066bb841484f0e654f348282b66b69bff6f3e -0x1052e6a2b33d71c9c4e035942006ea8dfc9b4cd70d0ce68ead3e3a078b34a33d -0x99aed415b6ec8a0c5af068bce1509192e0284a3da95c452f5213f36956e7b542 -0x6cb45d565aac2090d1df3dcb878a331e892db4578e84ce4af9f73fd2d6bd5d10 -0x9615d8f96de4b2f911d00291d17d27eb45b255f68c0a33bbc6d886dbd5c43e66 -0xbfbc047459567f14678a2b02eed0b547db063fa456b97664850c92488889ef11 -0x93b18fc8441a359b2790dd782a7e370b88186a8e3d6fe7bed69fec697a8c4150 -0xd4bd74cfa738176a6263db292930e2c558b92d38543cd9211aff059ef23cc0dc -0x506b682346e3010cdb5826248d3af2b449d847024c86a0a51b2968e02e8fb71e -0x72115280d3e933d31829647d489b7b0b9eac84696b3a723832250e94a49ac0d1 -0x85da8ff9a85697521edf3e9991396f80a9d3b8583df5a3a2a470debe449dac1c -0xf081c131fc43835254ebe7f03018cc6c699624feede98e73499b22947c839439 -0x9bb2ee0fdeed43acbc91da46db32df5f7d1907cdb9ed5e493ba68dadf52f2086 -0xb6ab474efefd6febb260736c2c6a7327546a9efdfc131cb4decf0b3a802055fa -0xbe3f62d12a9f00cf9d2b81919e51557e0eabe5180bec0438f3161784805dc3de -0xa7e11dde9b22320d31a019b17647fb6154cd0bd17babc59777fc4c26bd5eb9ae -0x364fc89543763c7ad611c8a3553ba3c5394ce1df0b392eee5501a1028b610381 -0xd188eaf130bf3213699b949572e5472ef6218817512c1b1dc9c3b52ff7d17a05 -0xa6844eaf800b3cc54f5ac0797033228cdcc1007069ca9a09c3a0a78340286d8a -0xf522bbd33218608bf10607bc82533e87f36ad95266839f8e4be095cd70bffc9d -0x126b70bf888364186f6a43558f7a956ea5a2b19289b96dfb3d3d165d4b5e9a13 -0xa333bfbe7a094dc8828d7d3e204670b25cc195fd1636856e34bb19da0ac473c2 -0x5161f3918ca34272693b28bd608118fa4903355e32299b77b3fdea0201b871d8 -0x8b2b1b7439ea04d68094a8e209495f6ca8c6bd891260702eaaa15c6f231a0244 -0x7d1d6c99df4c24a5740fe105fd329ec8d1d5d334e8400f4c705882cff16ded82 -0x11d37e14b440b56ef4b94c3b51934e3f3b6d9a52325eb3cc4d08bd569568667e -0x253676732e9b7bc8514af504c72b0401fad067fd1a7a73081f7bdade2f80c4e9 -0xe72abe21f52435d16d27d667dc9dda8253b1a38f159396eb78c64dd58cd7ea3b -0x55150e383932093103f475e8bd00ce91e2e933cd147fa193a5338590eb85087d -0x69406dcb96c7553f3824c7a6ee452b02a26b76cfb9474d46cafad72a49d330ac -0xd6a2f61d9356a2c451a123c24d931ae32c1b9273ff96dd33ddbca13852f957fe -0x0714d7a45433a892f834b2bedf291952b698dfcadae2a07170cece91bd848e31 -0xb90389dca7e9b6c73fa468322db769ff791df793ea7219e6a1e917a5b5665918 -0xa756910704f67c5073e859a952c5ef24c6aa0f1f43f164de52164adbb06a97ee -0xeca2541e2610bed1d48ee45b1bdd530fa27b3fbd49a8cbad47997aa6bd37e7eb -0xc0624ce55c1a2230f504323fe44055b35354f6a7bbd72918bceed0ede639b384 -0xc5fc3842478bcf475683923f0058787e5ca82db7f082d2b59d411a800de3a95d -0x2e13fef077b4ea57d845723e3ff94dc7e7f61df847ea3741224695ddcdfe03b2 -0xfd41556ea82a46ed232eb7a74479905ad97ad0e0f92bb2450cfa492c2237559c -0xbbe8f9b391ae96a9d2057852af70f4b3061df93e5b5fc229d39b9476f90e1c3e -0xc39ab969015a3af1e462bc958667f0bf3e7ae593bca148ce727593f00e82f388 -0x89e19fde1e1a4396d46158e17b84ec33b9374e5ade8b3def5d8fa018c5589700 -0x22fe9408d42f73daa933d0b8ac7ea902343816610603b1b717c931a469c33b00 -0x13930781de7f3b3aa28435edf2a69b18c129db6664cb94c6506ef729ad25483e -0x436581be5f8208a6eddf566d6ff76974d8806d73a27ccc6c81c5cdbf3331f7d2 -0x6c82c30b1f405b78cd584489b334d4c83c80a466c26e7593ffd638bc6010f58a -0x9994091ee6b284b3f4a7b1aabcd5419eac2e2a69753fa4a89a0ff420a44fbd3e -0x322ddeda4cc9d7b5ed0dd8d52683f10bbd974030dd37759852253750ddebdea8 -0xb7fac597e973f4f01a7c9ab7dee231ce2fbe11b34f64084a9b7462cf5dfc9a8c -0xb790e7f638f09c88af8f757effb577f712d3d44f323b5f30cdd4c13e15545990 -0x7a816f090991e4fe774306d71bd9dfd95107af02af49ebb6ad759a823d4ac0f5 -0xdabfbb2a210f71348aa48de2c5eb3f2f4a5e7b990442dab417b66bb2ff9a4783 -0x3af910d31ba69e3b67cc1867e3036e0a935e2e1b721c75774a30c485f849ff70 -0x5c72956fdde53969131af351821169017b435ebe7c3befb95ffff55443818331 -0xb4c3412e7c144de9d7f717274e46f08e39083ceddd841f847eeed287970346a2 -0x0af7a9e3c97bab0568b03015a782fcd9186b4d80f3edb38faa49987e8cecfcb4 -0x00a3be4b7b201fd84f18f01e17cb2e35cbd871ed6482efbbd4e4eb2ede331777 -0xb239572cdad5aa8b9eaab6f44bf969a391172525aadc15332ed7e60f32240aa1 -0x54b4b080c76b99b00527f894c0ca28f5f1f6c10662b71b517d3886acf887eaf9 -0xb8c76e08465041dc5b499fc63c08f0a76c2ad2b556b74f135fefdfb46ffa3c8e -0x896aea14428f7e80a6c424c4aae19fe363128a5217e67acd7071e09a974b59cb -0x0fe45946eab8006dadc2203b4757e78ae1e97541decfacbee74788edcb6193e5 -0x4cfbc9edfed383b40d3e9b2a71170845ee960f59d657e04cb40d189704b66f51 -0x110a27d74883dafb34e1175726eaff31743fcc15eee5ae914fae90a865ca5883 -0x419676e53cfaf15694d5060683f2c3ea73f4f90339f0341a4b1f4b1c33906bf0 -0xc5621e8c236224f220b60fdd00b1a0b67bea14f51f3ad27f4a486fe2ae6b500e -0xd1840d47f51298cb7774311ea83262bd61f2c927b8a857ef03865406263ed731 -0x0a0f86ecaed45f227806e6144acccbc917f71b2c8823310fae15812480f2b043 -0x8900a573fc47e4b37f6d5e94d2b96760eb7fcc536405518912b2a824c17eb6da -0x7e089fd9334290ad952233b347367c3e61fab6028109dfeee12eb808541ddb67 -0x126ade0d9663f82cede7f5b5040c6718d585162e9c190b43215890d424dd407c -0x219b45f8e2a433530a9ce6e6974cb6f12447b369e8b9bd838a0ffaef6ca1486e -0xfccb23eb658b6ae15338a80984943ba471d72ba8f108ac99b8b7fc2ece5fc2fb -0x2ec5533380f4d61d3fdd64681799a24f869e171f06a83ebf009d6b3d168375f8 -0xf6a1407da290cd50319482f0868bf018db75d5dfcb24604d9c6f9f62fe9aec08 -0xf4a68de5c8626fe5c692fc96e193fcc2c273e0b35744947f1cbbd47ec5ede9ef -0x5bb28a27072653f29ac55f12875d5112842c3efe784f68a7072f3f00f5f2af72 -0x82a66f0f6ad79824c95a4558962afe388c3d16e992e365754c06b39d5d1d6d76 -0xe866332f92122fd7383da3abdeb882472b7028ae245e6e6e0c085db5f06a6780 -0x2ecb219854a37dc8526b834f3ce931d378756818a3104ec6178f449194eede0b -0x5b6eb4f8d48056d73975ad4b7103aad114f55b5602cc96fd5633e3734edea63c -0x67ec399d584793fcefd7aaff588fc7c4d70a7113453bfe78789563ef71c9da56 -0xf194229e4014c6d19effd4b26bc7fd940e1a7de5a679e5a4616fc1bba249dab3 -0x8ed630affc56145de2d0e93cc8d0f8b4d2794036f35dda0c6208e8ada50b8236 -0xf1c3c1a157c4fe4e7eca64f9fc30cd8b1b2a814d9ef7d16162686a5b72b74da7 -0x22bf7897151fbb56fe01da42a68ec7a5ec9c5a6332e83460ffaff4091c2d56c8 -0xeeec313e0b642ed6d9ec50f0272716a0bd55b3327cb559874d60cd54793a3d15 -0x5eabd80f8db6e79c4b0e2840220fa083fde8f12da0c38010709a1b8558cad9d9 -0xb6ec885d7ff2c7b8ab011ba758f3058b292f1baafb7daea4b8b4489c9fd5f1c2 -0xab27d9000520372083c89fb020c0814511fabe2e8a695aa6f8cb75c943f437fb -0xa2d696109ee7df92fee4168755ffdcea42ed1ba73a22c728fdd2528c12a5b272 -0xe217773afd4be868b935e0de34b03df7d573bedc7dabfc6001182ec74c2857da -0x32e5f7a4d3437fd0dcdce39e74d71138ec3a9d7f1f12df79cfc14075cc2e4dd9 -0x4d2782a40ae1bdb9d9b148970185d48958f1662369ad128de2d30be5bd1bedd3 -0xa7c9c40e5c8712ff0b544a3c9adb6cd629471d4f3aaf7a01cdbe391043e53f65 -0x1768f519747ccd4515defbd01807f0721263943e87e4da9f710769e5e57e73c2 -0x90cb4c9560e97c84ed382b82d292098879bb801ce1f7ee26552dfbe942e447c4 -0x248a451727c163a06fea61dde3e23bc40a057f98041cccea1b590c80b820f306 -0xb955b4cc98d400adca3dcf882fefba350ab4276ae60f1832f07af2232bb832ca -0x7d28c7f9ea34d1d40219df0d5998b7c0682828a43b35af847b9782a3df20aa11 -0x027883a0d61898d0870ba7f22101424a6f3d57020893e23848caeb280e1175bb -0x82d574f9e809e0c8e024c9d02056ec9ad461cdadadaa5d0be41dab1894fd5fd7 -0x7be716fa01fff42abc131e9b00bc724b6db081edc1de49c0a88cef16b41a7dc1 -0x49eda0c0b584f162127fe3146854ae1dc6a28ad0ab45825623805aa4efcb0bbb -0x060e9bf279d7e7c57df93bb33387e1d45f0b3e8319ec81c402eb8dbe9879828e -0x5ee5407c718af51d54f445c8842a72c97dd1f1b807547440187ba72e25fbdac0 -0x4720e560cec72e8bd82a0d046e7c2d0ed34e2a04a1c86f4a5b44f846d99bffd2 -0xa4a0b5f9f85500765303dbda1ddc054d7e9a50968feefaed75c8920def875754 -0x16d29964c304a87282b41e947aa02439f39cd86cabb1e2f1d81e2fd3b5288ebc -0x464307bf62e1b9b0e226ad0776e78841ad6e8f102b32c3f058a7598edab0a7a5 -0xa3d7fdef5a561328d1e709385c6d3b91d8d4f00e62a9d68e0db37f918753c9ca -0x8eec5bfc13aa0a7e54df7d05ecf77ca11e6798618b083efa8b141974600641e5 -0x5c1021df00f5ec739a0dcc05c917bbc480d17157a5cc19011233bb02bacb4651 -0x4f3525ba757551a0f94db6b7c21332215c0acbf7d3c7c060b578fa2009c8ab8b -0x46b64df1fb63e77300f254363bd378ef6d399488bf9ae92c8d22cbc93b2a6b50 -0x6293865e511501712270915c9563c2d691b2a36f398f4e8fe71112d180b9b2a1 -0x2afb9e406d5c01fccae168dbe538454b855d06d24d796ad833487ba0594d7b32 -0x50ec744906b227e9e93656bef7ce02fba04b8f4f6c6734e43008fa50621dc6d7 -0x11402a9efa6ab32dbf9b4af060c5a18e3ae600692ca2c4160522d625a9685baf -0xdffb3bd97109340b88a586d4ce0f0fde30b30d57a6a29b2b399d916192093690 -0xc15bce5faa3f1e0475b21a30874881efe92c273f67e087b3aca06d241ee234ce -0x94ea03b09a644d4b9a52ab5de49adabacac296d623ef682d5596fb81f37839fb -0xf80cabba1ce8582c636618c5e2eca38665918c8677ede4d0734b85340ce47396 -0xc30e17d9e498380db42e8a2335f854b4f409c50fc85bcdf8499641edebff3fb5 -0x87027a424a450305f2be7e1d51a6c5b85a9e61ffd258993ac233b306571e1bdc -0xeae2cc41fd7dd43ad39ca8dde776bd2ee3182ca351f73a61a15d0c7af551cd14 -0x24b768df2e2eedcbc614b1153b2f8e1fd3a0696775efd3dafd5ffc539af3abf7 -0xbab7467bc37d27fedc9a014c1af72961de745c560ccdf949049d20dae9e68125 -0xc6c42c69377e23e65f457a0317987e14eed5bb22797a4283bcb4c35a8b6729df -0x43799c0f250d50cfb21b1d909d923096fcb2a1b2fe74edf59fec55a6c31ad530 -0xfbb12db5e8356a7d129ac711eeabadc24c8ee407f5f168f2208176422a848a84 -0x9e1c7061d2f9fb67c0323cb2dbcb7539276e7b8a031aa6300c1af481fdf7fb78 -0x6954d348eb94ee44f77116eb39d9df5689ef265c00c50c6e50faceccde7ccab9 -0x738e87d49e763c034584949c0ff5788a628c85287bc87e60acb458b8ff4af935 -0xcd82ed2d7470071f16662beea49bd27492f415d71cd2abf5b49a40e5ebaf64a6 -0xc81ed430f6307c8b80745e1dc349728c568ca573015eda24a1cd7d512e0ec3bc -0xf18dbc16dd37399c5aa08fcff90883f3031906853aa38a703ec410227fb1a5bc -0x6530e445e07f3852ca23d511f23163822ea9c0597cf43ec6cd36830850569f8e -0x026802269589151f5f827bd1671c725aa6a425bdeaf85015a2596bf74552962b -0x7214e1e4076baba3f4553405d48f504b559149a3372ff4b30279ea80b1f9e800 -0x712e22fe9415761107fce4e42fe86379d87b77f9f84d2d489db20e302912aad5 -0x5082a60d408803b9dd6162273282932685c610459eb078d9326fe9069347cbd6 -0x4d4d36de933c46b04a4a838000f94057300dac9caf8e26cf5a744a228796fb06 -0x19433b092f347012416fbb7963488a545bd9ecfd61ad98378e1f312ad22c678a -0xf3ccb8471bd041f1c5d89e13fb7d4b4e301236c2a8f9a0137ca09f2c4499a82b -0x1f2878764cc716be17bda216a7c4c37be0c699f4aafb137a61ee633a8669efd4 -0x01142be3b8b147c7b4d3eec8a42ad6b823ad1f6829c90c0e917a69a145e3587b -0x36b953e006656067c1f702119fc1188a78805600bfd26c36a44b9536e70461e0 -0x47512eecca69d0d2a4113920842ea98dcf3fa7bfab8246f853de4872717146e4 -0x865d0e9f1dc45e71add7db707f67486b1a6d7cef1a781b2cad2da8be57bcef56 -0x7082055f96f10baf7906159b772a7c454de579f78a781fa6e7d4625909bced53 -0xe54be45d54ca83ba2e9b20d81f21f7fb51dce0e541885e66de8f5277f91ccb30 -0x8ee121d15c299ec63a49739323b8fba72c0b459bd9271666c026a5f2e71e5c11 -0x39360143abb950dfbaff7befabc0696d781733ec8430475a128d02fb946cfbbd -0xd78b51832cd41526391db63f096aa2d178c3f0a55353eee8a8c97e33e422c972 -0xe28beb7d7c70c4aeff656afcd7ca13b67bc4ddeed50c4a1316a900d7b0a09439 -0x8ac6a2efffee9473230344405ee98347e0dca2acb2d1ba2f7e683db61d89814d -0x45b49a90c7417164cf5b390799a042796b46e5ddacc42c092b990f0cc5a00629 -0xb7ef00a64b0babd1d2e82e93208a90da22351af53c2ab330bce525dd1eab4342 -0x61dc27b713e990967294c724a1b45707530b9289424ce91e792d54941e2668d8 -0xadc4dbb4804c425631345a08c0acd8448068de5cb1fb06ae0334ac143b471fea -0x2cbe7c636b8e5560e206f73882ba8c9a76216d7c6be51a7596ee24b480b9a354 -0x59b67f936208fbf6ab3f904e5f7bfc0481109dc627550a1f5aa2d42d625d8e15 -0x8b4ceec758a72b922e5eb7b21f87faa22eae2a8d73f97db99466784045cd9d78 -0xdc552831680dc7a77ca65318042b867e5f7cbbf8c9a70131d80a0089edec54ad -0x38fe7965adad50f14dcca2b5073286d797cd22589703b2d2e3d84d300e8fe39a -0xb0258c106ef12ec75b7daba2384b6d6f925a0f1ecdc8a9656b8b54e8400a4c11 -0xc00f2ab6c94b6bd100246f72d6fc84e88b1a674047eef0a5e4dd48f3b63f419e -0x862959d1c286b384a2c28b953bd2c6d3d73d1d21d75cee8b62a6e853e4387bc3 -0x116cd1294fa9666ea14335275766fa7087a4ac94d2309169bd45fd2b5a64bb54 -0x227da6b9b2f808ff5a7bc1fc2b4ddb99258673c0e671c0fa5c1f87090c93ca78 -0xf38d3395606e8ffadc858919f9b674b8b944bbd67098d2283c6e1060a6d53221 -0x0b00ff2842781c965331318f3001b080358e068f38754d61782b2fb21cd1f5d3 -0x6b12c3422f6be5d189c641d6a52073cd2fb3aed53e9c55b3df1575d72dd41f5c -0x9d5b41997929f97273755beae26fc9de5756e4d8f8fc742ecdb4b6a502ef2ceb -0x0d8e588b79c09a8f4a8d9dbc6a888deaa54f4356b2014b7db72c9b0e37083c5d -0x3ea08543bc0868709f04c09dae0c14e3444460c7b1a675f3baca50e4c2ada0e9 -0x206d6a497005aad4da11f9bf05901d300fc9ce4f8c76d7609215029e756696da -0x203d1744e21ef24a55013d060dae07f265e960edac3158e59b8a3c996f9edf05 -0xc9effc27ece3d4951e7ce8f3a0bec75af02e1a4d6d816ed8fca5dd6bf505c69f -0x3ba7096c4a682d6c51be844a10073cb9be74ad1b8fe547da1d60ab207acbf6bd -0x8f4fbc5d4a25847d4b9360557df4d83c14746f0411a6796dc5e743e9d2af28a8 -0xc38cbb0180a445305409fbacc990372800109217aa3e466c6b10fa76c181ac99 -0x23f48b9c923fb8ec09908799fccf5d523aeae819763ab5f21c111a45300ad77a -0xe76de6c6cb61579b099f52cba412e1c7e29f70d670e5f150dbfaaca77727e636 -0xd8f5b0505ddcf71f439f4f7663a22d4916cdd04da030fce17e0946c7ee72949d -0x6ceff1f87041eb4b4d7eed4bd0fff6081f9717b8c063e8478d1c9cd0e1dcc736 -0x328a028b9f1f13cc06d46aff779273253c0d378f172edb7da2a7f403816580af -0x91fedc63eff46129505ca8c509e09f54bc6c866efcaf7553209136595cc2c309 -0x238cbece68e4d4fd3623921d23ebcb98899c139cca05c5311466254c69944d7d -0x54c1fad115480cf37d3e3b756df46e90dd0f6180d2386d00c0a63726f86702f9 -0xbc169668fbf856ddc048bb1b1cc63d383a159d37e0d8fcc39807b0a474eb7da7 -0x4dbd1979b44046e28dcb3aaf2d0368ea0939db4fb3da31604dd3257690f69a88 -0xcab152f24431d0ffca670832c5b68290d778054ed8927a9ad4009e3d7ab5061d -0xea3d07c19a7698166cca4078f9090719fb4a4a73c0e23130343421c2071a422c -0x0c9ef0f1763848c5b91e2e7f01a7060e36683c297f4aa8bed1f5c464b0a71e8e -0x3cdab65eb345f28a539a1e95a431251a525364a92728c871149b82f436cba7d1 -0x8c860d1d43706b2dc2860ed66e499c0d4bf80a9ebc401195a4560af797208162 -0x2862c7f51801118cce1112c2a8f75de153ecaf5c4df1110feb6b00d2a6faf602 -0x7b180e6a6702591b417ad6601d6f48dc973ed99c5757da95f2e798bef9bb3d4e -0x290c9213a4d1d65bed40ea4d61311de213c6ab39f99c55cc0f86891bf5fa20f0 -0x7e7da34c0bb7af44339d0632c176bd32fb91747da85ed115375a50395fa9c4bb -0x9ba05c1175e81579b7cf40b839b1aeddf7068c6ea9d543782220c43a7e8fa136 -0x4ce5ebf0c618ecb2e0d47a558f8635ace204b5516bb11692cde8efcb5d1a9b05 -0x525f1d5b9f0f45fdfbf795e579fcf7bf5a82115d79b04f1415be196112854cd6 -0xd8905d6ffcb430670faa4eb60a3e7c0d7402d2d05338518ac3c70488b29ae77e -0x6de4a3311980322cf66c2c703018bcb9510b11a5fe96443aa62dc67d2e1d4b50 -0x0dcf08b3ad820318cbb5f85c1077087c36638f6d2e3acd22074a2a7634cd07bc -0xba9f1bbb403a4e33f1ad816cc72fad6ee4586c1f8f47ebd680d46f619306bf09 -0x1fcebfc95db31ba01a148355cad33449f3e78cf7cb87546fcbddad37ad7ac267 -0x511e5820698da6e97cc25b6fa4197b70561a8b8d3731c58b7312b57ff0da884f -0x50331153da54314172b076d2c23c4de5ea34d1519458d226bdc43d09cb3a28df -0xac6f1651bc37525485c07eadb5f9576a21e6b3e33da2f40c5cc5cf299180dbc5 -0x7aed83e6d84e99a5cf3f0bab6beeb5b7f6e3f1375b59638e4c147ddb9909bf2f -0x0d51ea6914fca3cfb69051f64a70e0ab800ce17c303e9f85753ad2f781100003 -0xedda337fbc1272c729419b32bfbbf71b2623d2f692c4d180676851de84cd5b81 -0xcfeda2e75b535c0594580f8a55e1635abf230cd85256ffb6c0ca437d2d27892a -0x516cd707821e02ddfde66be6442194ba7a786b86fd9ee5e0f5c46b7d685d8d0d -0x4306e874e4a27ffea00f7c4003a733dcf167fb626d614e59992b0211615d0972 -0x48b6790d86e2c8ca8323fe23b511e2571abada029bdc9578ae37b69ae3625d38 -0x2281379668dba1cbf72af03b18f1aaffe90126e9e5ca2f46a41dcca154a6197e -0x60bb0c377b228c47d880aaae14f08514e544ea4a746aec4a17bc343aa75b440e -0x620d2b194cde27cb0dd44509e1b0b58b42af9bd67fc24d7a6057fd977e0fafd3 -0x5f8bba997abeee830bc9dbcd79df0a5702d6cc57220bcbaccd954f66a7e0f407 -0x0f570fd1058f639853fe280b69e37086bf0997852dce01964f96a8a9487f14c1 -0xcef3038e9c23aedd018388d4556bd75166306f53814fcf0f3d858737a1d1f399 -0xf6867dd75f886a8575a67261463ad7f22725f008bec99a1627380b3a33e7e666 -0xf7f747d62a59578a19f7843294c7897461643b6e0f18f1697886d8a2df4773a0 -0xb5559c0735e0665faf40d5dc177794497561c688f26710d1eaccf20f96f55566 -0x756e54e494b944be950c565e8ef4967b8c954ddc6aa96ba74e2f8619e5d95b5c -0xfb40fb1c216c9348e094a2ce988b195f4fcf45334099cf46dfa3ad30d47cee2c -0x01095ab17b30c43197c4c1e7f442f3c91d94aacf5bc50813aa592677f5420500 -0x0fe2c20e6b06199230dc5a49e31010c9a07adcbcce728f586f7881bdd28c7d6f -0xe5d8f6d732d3ef2db5034522c12d9688c8be57e7881e7f40fd8be52e08833821 -0x6a0fc549dfa6548b1d7b32dc1bd8958dfc2dd20830bf38903e5b871d8409756c -0x820bb9594e83fa76401355713d866195b7f9e8b2d828608e6fe5d14a67983c55 -0x9f89d62e2a1df170219b634da6398240803e2063bff73cac3abf03be9bd7f55e -0x1752336f04c4230df5dc20572018332f278eebe4f3bed0b7244bbd8a949a84fc -0x46ba6665af877bc9750ff45118dd6f7ec7702e6d61f0009002c2d230dba7823c -0xd306196d2f41057ec462f2b09ccdace4fb40e9979f0cb1f4388b69dbe66dfd86 -0xd5ceef361809c4b3986291fd8e4552cf26a6343fc95065b9eba4206840bc9b33 -0x7c7fe33f47ee3d734ee376fecd65e5c27e2226164e91488b14ce0fbdf9984217 -0xa7de712b98ecad4b4160fde72b80c5dc5546d15b819bb5b8db202484f17b58bc -0xc4f56056aa8a55cc6ca928b50195887a0f6b7258ffe6a4dfd4b4d28ccda6a9e2 -0x8714125cd5e31f7d7ffcb89d1b5a284bedd51979c701ef2255e7561eb7900195 -0x6b76782d0bda6503936d7dd7780f6819da556fe09ca756e62623b7721631f20a -0x1eafac250a8c63a99a2e6425cfac9224bfe310c90cf67bc9ef2e95fc2d43c00e -0x4eb2be53e0af417b2f6a7dfa558d447126a83d5941dc8f2f2d55e2204ab60fc9 -0xf808e94c4b6c85e29b025f78af1944adfeee38e09735ba974ea3b43a345cc058 -0xd4dc1876bcdd63c64305931df67794270c9391625e919ff0709272190fc5817a -0x31a28c63324e51c56684ea0781d3a5807d59b59e8f3198f821456d5f10b55146 -0xc6d1ae7be939c9eee01c432a33795fa1498b24419878985bb84ab070c7ed948f -0xd686baa480a3846c0d1d5cb349c9c2ef94f51fbce058f5e0351bf988cd99175a -0x9530c3822c337db73b93828325a4becdae8de6823836491d9d1c25bafa1e2a9f -0x7350efbd92578b9dcad04b99d6d0d655437e2b88799ec41e787e8216b5ec6b2b -0xfb8edab221569943f8eb039d256896e0e5380691e00832710722773004264a03 -0x72b9cf80455aba6f19432cbefe2661b14f5b8a83276d987d7626f8ea43576b93 -0x3fcb42113771680626c535381d26f9950007d9e3b10d6396bdb55979e902491e -0x79ce198ffb37970ce792471d21ea3d679ce881cd225f8defd8753090aab93db4 -0xfd197c4a3eb172b64f30f6349720d2f13c8b7ef68ef1ccb0d1ce7845af40eeed -0x497f2c6fb5e7534fc20c2c96770054645ea13746d6ef6c26b2ce4c4cfc87cf3a -0xc79558173b55495b818a1c136bd5e3226582823d3fb43306843e42573140510f -0x6035ed07973633ad5fc16d44cdacce679b654c0cee30117aa807f373e13d4554 -0xe235731403cf4da47eca15b78d47e5b95dc119de6d1f6868ce875778cd1fbf9f -0xd31575b70fb1b22c5562c82240a02cb894505a3d678cff484693e3ef24a47bb2 -0xbedb5a1be5c7936b43a893e449d4f16afd9736110787350d99d1ec397f292c10 -0x631536e20cc7212841db38b3595a3d338b6b9fe0989468ad6b25c60877a2d2ee -0xbbc3fae21290b46a3fa4cc34a5259e53e460e683ebd0bf720a43a77faf149841 -0xf54b075d5428fbd91d28745be7f2e9abf27834ddf59110884a6721dbd879f790 -0xf2e16f40a5735000375401cdea5bb932c0b084ac6b99e4fdd22ec14749f03d2d -0xaa2846b956e4136b5641500622392500692671f5ac6038c7cabe6acfa2493689 -0xb9088b006e39192df7c2921a7698bae5da8baf3e17732c5f071b3e1cbff77ca9 -0xcb38c209d09e534b0778c3a2ede78489f5e765595a43bbbe1c62b3e8de5a4d95 -0x0a9b11860342083d1f3dbe4fbbd18b392cfca5497d4936eea05a66b6be7da6b7 -0x77338bf4bf4392215b0e53904b5712e55e3e75e1832d74fdcec55be25f80dcb8 -0x5afdc89ea0037d2cbee83fecb9c40a880d3198dbddde371fd23fae1bf0f080ec -0x2347fc039a07cf925db501fd7763e30dd1bed6805862ba24cbd6639a26bea505 -0xd669794dcb2869fcaccbe1ee8dce513f2ff26c9fc4d3f4c65248cc3952faab82 -0x26cc38cd8a32c63a80dc11944ab19d587d174a0075d3f1e36503a8b36e1cf9f8 -0x08d30e0151d05d42d1329016d0147c909c17a5270ca295ef81bcc2ef699773e6 -0x0fb056434ff4eb7e9112714b7d22b23ecb1487e6e420f62372de01edf3c0dbe1 -0xdeb161e7b2591a9d290c8b5f83d683ded5b7ef736c28aea3b7d093f296ae69fe -0xf66125566d2aed6d09d8cdfaa4c49fac0b7f50afc2f46749331b948b069e415b -0x8025db9535ba6ace5e44926288b29c498ce1180210c0daad8f74b3b46a91524d -0xe16e8b73e7ffa0e7b1ebbebb0d4e81019228a6a4d15e510eeb881f4ab17b154f -0xe0fa23d270207440a346a1ad2b00c7b715ad830827bf096a2a42c8ab0c3ead76 -0x51221d504f8d45605f7e54348567f863f18463d40392479a8aab52fcd28baa99 -0x367440b63e93bbd5c3e598f0bd6d98cb57b5d348bc7139a71ad211e8ca800ef0 -0x1bfb610bb64dfe436ed8e41e4432f02df8ca1b1859d8b647f74da204c9028ef0 -0x84de5a019333c2ed70ddbc2a9e0a0156e276fa704e4cb681ca296ed67a3660f5 -0x4c75f098a798e31e3c96f8b94edbe1e396f21435012c13111e87cf8bb10c3e36 -0xb5da841d7b74e8725a614ff47e1d51a6c6f3d417f4922a0ae00b039f94683e77 -0x8eba48fd4827bd705614c0bd4525db5477ccc3288d68d8505b4ebc362ad3636e -0xfaf04c8be39b77dd04bd653cb7980d70c1a00f41b8d11444615ea44bfcb76254 -0xdfa509873a6c728bcc342f0e1c3482e06c5398b4b6882f3c1b412901a542f156 -0xe34de7fd395a9694e86e39083480e0ebec924946aa36450004716d84410f04a1 -0x0c8083d451fbd92e30795cc47753f82adef493623923108ccb0cd2631daf641f -0x06df8a52e3d6b799b615e9c61699c5d2292ec27e20ca1948eed6e3a980eca836 -0xda2dcbe6fd76dd8fcbb08831103e096e81b2b52cbe5f9835b2478c011f60c959 -0xa472dd8f5b358627729d2cc0ad3282594517262c82da6da858fdec9e4864fb06 -0xe0eb23c8e7e85750f34aa4e6a410c170fea91926315ce916c93bec590c2d09a5 -0xfe4e5865b3e9308b6dfdbb37d0a0ef4d22a0517c3aa5917bb452b5b25b356f3f -0x55e81d4334e85930d0fc92dd6373349b95bcfd8e10de3da7ff32763d2ebd2fd4 -0x1a38b7a569afc6fda39a37771991f60db359dc36a26f67a981a41abfa9b640b4 -0x80a6132d5454f8d2c611a3212d84da97da4fccf29399219460a11c468db842df -0xddbaebbbf2bbe602c77aaec4611793d91211675b23a8db55c89f309763f8454c -0xab2cab9174cafa818a08a5ac084f1d88fdfe2b038223d2642d29cbb22e9b310b -0xfeb4bbf485001c4d4d96f69f54c606b3a084cf2b6cc3f7d6e1ed7c0625f72365 -0x83372628ee85646cf92801113bfd01078e3807b8a9a4dcd91cb500b54c9b25b9 -0x3949cede8fc87b63ac7166d3649539a3dd3dbfa0615f977d10f908c2a02adeca -0xd2451db3176b8dc289c80ac8a3e46c958a6dfa219c9ba6c026d10f1c6a8f28b7 -0xd333d053f389c471de600b6a983b9c1c90bd86400694b2b9e4c8b4c1337cb452 -0x35528842ddd464ec4fbf32c3cf430f410767696f257c340bac66d2903c9d6b08 -0x2a2d6f52be32e1108740d19f05e88af8d14f7fb91990913243b700f35a54f418 -0xc5ba8d13bd1b53c1ff04c951163192945eb9ca09aaeac24275db34950dfcb6a6 -0xb1acb79664dd459b526ae4b1b515d96354e0da484c18275122d6888ff88d9d10 -0xb42786970765f54478ebab487c9babc4cf8ea6f4f5ae6f5cfde0e3d90fb068a2 -0x7d1786f2a111a44790b447f4ad4b48314593a0eee0820076481af7a63bda7ef4 -0xc7ac9dd28602a743ea6b03ebadc453115c34d7adc1cfa2f4bcdad549b181e18f -0xaca24721d603fdc5d7a872b2145bcf043cf4f3c84ed813f5c9e62d4be84e1868 -0xc3421c50e46635cf4d1cdc5e0e4c79a11059612ac8dce788749fc163b5aac725 -0xc14dd757ca9bef2b6009f4cf653771c2c257f12bf493d1cca4d491ea7551636f -0x014177dcc33e50e62eb9a23e58ecd5d2a3813b369d19a5313bff0ad52a1bb1a9 -0xe5838ad607e214a60722d33bae8d51e85a2ad27995f243d3c5ccefede62c2f86 -0xe415f89705fdb6738e7d3349716d59658185147625d2f7aadcbfdc2f5b1e9da6 -0xeba80fd28264af2239435afea94fb02aa800ab2d48f07d26e087e69a48f460b5 -0x87d24e6a7cd8301da87527c1289594560c1bd696c72a1243f1a954534026aea7 -0x23e0f4ec33b748dbda30505950d8045de94332e317d73eeeb9f903fed140f913 -0xf0f7cc5369964f55fd17aba6aac4f8e1f0ce9269ef90eb3db83f80c6d585d312 -0x8fc30cdc9c9b752a6b2385badaeb283c9b5cabd97682211740859d23aebc9f0a -0xe000b70b2789a2261851cc0f370d6ffed93ad829a21ceb7949372f70da8c3146 -0x208e83a6a5469aeebc4c2159614220195939c6bf2d8604bc5757971622588e37 -0x874203a05fee137b707f835e755b75564dce596a2ed4b6575bba3a809c28edbb -0x79f3bde8d1f9ad9d7e70c48ffe7531ab807bc276dbb0431b3a31871cd335afe1 -0xdf14aee8890683eae8e637e64cef01271847cf09288234a706bd22f2ca77d18c -0x6cdd666ac9aac69a30f3b5ca3aec09a166dfc5bd168a8d41ce89624326a185eb -0xcc9120f04e16e5abb2130b8c2167cda9868d5f12eb241dc4a7b4afd81d662517 -0x809b5931cee0ecbfcfd51e32c5cde1ec76bbf5b1f98e5d250fa15d5f0ef1cb06 -0x6cfb86942a005c1bd5253fb806813c92adb718cffe400e258059c409c6c73feb -0x6b317bdc9c95daa93cbcc3478b302bb53a2a42ad58440210a4f74b93ded8e15e -0x17dcf9b78ecd04b447c97370d5cf13c7d6ac98d8ffeaebe111ffbe6d9b235e7b -0xeaceb1f7b4c2b10c9c8d3904d52a0cf1bd2c95740b7ec88402afbde90a61ddcc -0x6ede14474a8fb225082d087877fc46f9647065e673d67048c59e83ae2a8f7bbd -0x655e2e6b73146087f648541dcee5f3f6e262646cb5742d91139ca199a687447c -0x9c9ff8ab3019e5e6953b36cdf431f84fd24cb6c4206a2366a1422faad7015144 -0x0d5f622ae138c909ab25fea72a7ae6ff27b068bd76902a8a1b4897173b9268ea -0xf563db9273d5171273a663e74c416a6f96f70229942c2911c0a97fcd7d898a25 -0x0dfac7d76ea0fddd8eb71d3bd760552d7d6faf043fce5824253e38a3df263abc -0x2141fb6740616e7675b0a3a3bfa34857b67922ad999b333088556cab27bd5216 -0xdc21751880cbc7eb4441ed4d2688c46048c0c2a1b2b000b242c91ccca4b1c38a -0x2a17939c1a7210130ca48d96817571833aed1c837c344ae1f2b21a91dd3545c2 -0x6464040ea24861d8f00c056b1928a01b12d0de8d7cf4c3794d0ac34c9375dca1 -0x510b3d0a328237bbb0207bce2e8ccc6ca3b8cfa9082f13d007ad56a72c095196 -0x797696360a4467b274eb22dd0e981932b95b5221968a0c3ec1d8676740a40e88 -0xe35d0ba3ef5de6713c9d30a3bd977dea99bfb29426a87f589cd48338664e833d -0x1a1a55f7768d43ebedcc5b2b846a4f7afacf10b92d794de84d3a06d3e2f619d4 -0xbb694001488282ab1604fbe75a79fe47964eacfb2447d0be80a4c6287e86cd27 -0x906b9f0473dd6c56fe456b01ad1da11472e427dad79f535a48b12debf8d68675 -0xd066b26d7a2ff0e800dea6993aebdce06d3bae62a9e96787c48d03bd622542fd -0x31d6c3f7afd096b5944f113aac77ed65313de2e05799ed95de0902439d9c0c2d -0x7729c95b9b0e055aae9a6751a08df449468a9dfa7af371808c4557ed725fc995 -0x5bbc6e6ad852df0f555f8df7aa0ba9bb2c0a15fdbc5e37941ac03663b338d9f7 -0xa5acf1826ea2308e622c03a4b16b08d72f29bfd5f12e88948093b440a6f1aa98 -0xf139c6e8464ca90d66daa6b80708eba3ac7ab289f45df0f70db940a10a429256 -0x6c48b2e50173baed756f67cf45052bac84130b4855ffa92bd3b1f76bce1d395c -0xa8052fb8b24211aa6fa47755b1280531ddd9238bb573c8e70cc853377df5d44f -0xe8405d667a35b534c4925be255ec7743ce80144e45678b9af5ac839936f9d13b -0x051a37b21cfd1b0b4e25aea81a29bc148427ea6eefc3960b2229544c015ca810 -0x9873ef75e19a802dc37a0af6182ae2560e8f5c7fb060c8aaaa181201bf9b24e7 -0x477c7d9568b1be78134785eeae81c4a08e62f1777e69ce52332922e248413d4d -0xd73e1efad257a6c2795eb5fb3c9fe5c85c19d566f8ebf65dc728ed3ce8392719 -0x5412ca27e2794c544e9891a1a9e8493f3c7508780fc26b8e34be63597ffde8e3 -0x0be997b17f6f13fb141497c9b388ae41cce96316c42e67c19f2b5874e14102a1 -0xeb8689aa4ee27ade4b630f0a96c47782d9e0f328a8a798d7f877aa0e6da1e2e9 -0xa29d2d88d20d95a3d8446bc9cc4a1cee9d1f5a25fac64f75e091271c590ab45a -0xbdbd58c027b9d0616d2c1819b0a6a68c9719bc43196036413d7ae8c5dd87bc90 -0xe38553b5094c369daa2fa8e261346d4232b909f1f32da62d20a908854ea38715 -0x1c5bb7ec973c3aef24f086849d97344bc56d42275be0fffe501551681bc34819 -0x212866d3e3a1cb504253543909d210c5187cd8042c1fba34271a1f90f48933f9 -0xeba7c3ec5f3ac34a556cb665ff6540d6e26a09935e27d332f7f4bacff51ff619 -0xb3c702bafc0e4291c0335e8e810e78a2a8ab0c2d1ae91f904bcec1b045f1d50a -0xb8c3cae0e43262e56bc28ee539ff5b68d2cb49079cca8c2de4cf54e2e9660f18 -0x8d404471e2053993a5998e1927b0620e87fb855da7cc052b2c823f9d1e6ae86f -0x729a637489cb99c3a1e8190c5ad4b3379cef9f5620aebb4ecc64e0001e998de4 -0x71a02ee17db5bf665172a49ed1de48af2bc8ed71471b7febbfe800ead58519f3 -0x4e2f2378cd6d9f4cd5a799f114bf050152414a72db9ed9d7f6ba2a49dfab9bae -0x9b837f88f0789ffae0199e3240782cfd2f2fbb95e0dc08a9505b511f61ab9f0e -0x31c10c5bbe72bbc23c7e7c9e6ddcfa6435893d185aeb70d25e73edfa3199c709 -0x57ec1ada1c1b02e7b4488148a170c1e96dfe14ac7579d1d8d5b3bd4198b55f15 -0xb334a9616f4913262cc446fe70e986dd5368c10ce193f6b13f013fbac3b1266d -0x292a8951dfc6e1c6d043bebaaafc0f248e685cb9e3363679785dad7583ae7136 -0xc6f17ce9df4b133450f4c09de03931d5c3b51e1e991e6b4a115b4252b60cef15 -0x0c15d1654c850bc99e38ee3894045644ef5c9b300f8b1a9fcddf77a72d187aad -0x4ebeef800d2a01a9c50e3cadb742cfe2d50f2f86b32c4cd622a363abf9aa750c -0xdf277a963ba894220602e37129969929f3341978738844be239c5842b6bd236b -0x1ce45929c5e3b1a199b57cf64c3d376e7b9982cade0027f0c202486b7fc6361c -0x3a61e3b9d655d5c507e6362b16bf7f6d4e34b85282cd2ed945411d34b042275f -0x2007b408cc45c85bd1d3cfe7555b4365d01337aa163071762b316205750bec9a -0x911fa6878c41b77dd121e1e0b37c4d9f14481d0d9facc32893f96d9e36f97d93 -0x5c051a7d69f2b7972927cbf26407c9742b62f01a690c8994887175fff4dcc45a -0x1c243c9ae0d92f9d0b05b98086c97ccd0d7940d53068be7572df2d9311e9548c -0x0756a2c12284d8449678661aa1868076304188dcba5e99b35c51a38b2cdfffd3 -0xe12e429dee5b30f132da124da09daa87382eab790943875772cbe2859d917cb5 -0x7abea14f79d37a42500b19854b9e0db2641547eb94d6c6d7da099b7f09aa6efa -0x74054c4d8a5d7e4223251ed0e4e74745c68ae3dc2517e15669f8f5dae78dc2d7 -0xf17750795c0256d66669c4d6e703d3bc78c2834cc671da70249187ca4822920d -0x2dc2d38b12573115f21281a37e8a9001deecfd709c4092435d82bf940b034b09 -0xe9afce23a71b3fb22f22cd5a7f5e7d0f8a98fa411efd2803d627df6045d7ff46 -0xb6c08fcad37683a886682b6cc7a8b2c89b4e70d236457d97e6c831b3edf9bd4a -0x177aaa682cd8f0bc421ae62e1942c43531696ff76d31b047a6e3b25cb558edba -0x28f1a33709214046b4cf1273885ee4a8ba59b20eeaf9ec205008dd618919cdbb -0x98c3d881921a2d167d319f5a9725fe6c981fc3ce2a42a82d4be71ee2f40915f4 -0xf8d9058df8c78eaaedc310a99a7d460f1d3234bbbe77a1272f9c3e0cc6809ff9 -0x41260719539c29b78588e0d92c05312d487d48b408ce71104f4b164fdd694ff5 -0x92545a0169a7a448f70df616bdacd651d8ec67b2a2c5e390fd7ff68749f8681f -0xafe2234e50f92b214d9e500aeb204911c0b4af78c67072e069f91aebb4edd512 -0xd01ee1f5229627be3a23a7f355375d2707c141924e3174db394352ced39a8474 -0x9021e2a2fc0c30b95e2064b0bcda55e0d7951c2fc29d9056a9a2d546383a02b0 -0x4d5195a26442a7d13333d44cf2955746366f7498ba7518b9ec68c1195c7b108c -0x36f6a5c6b8fef4457b17873012ecabc168f6847cb4cd39e13b7da86f8fc62192 -0x2b5990cb43d41d431302f8de47d9b705e4e5231af947993eac44e1b108105b6f -0x444d6c1f9a3b7b0fc6d8b96ee8e7a80a42314f65e1647656101a2dbbdde06078 -0x95a4ece3624fc8930528641a26fb38a2a46346847e29e4a287dd0f9bcb974309 -0x4d4348477d81d6265540493b45a79bee8b6a5bca297fe1a16444bb02500e2af9 -0x7837c0eef7d36dc41b06c5b706cc675376726dd6480b5b8ef91596ffd9c4903e -0x2544b4ee00758d1ae7412ddee3f4487fe6d75ccfb1281be1c31164c5fce6623a -0xdd6252fc73ce1c2d6fd38d976b0e0396c160edf870be799205186b40ba71d273 -0xdaaa0d14a37a8e0c357a25d616e44624cc8f19743f20af6a546a0975d1ca6080 -0x509ed48bcfa43aac8fe2004d30d7dd86c0817e8ce7bdb0b217822f2ff49b486a -0x3287c7ba7dca0fa2f1b5b1f56c5f345bc8120e4046f5dcb5884e7f370c7b8e57 -0x749f117084566634ae1435fcdc0dccfe1871d95a3598bea47c751c591e0a06f3 -0x261f361b88afa3e3adba24d41dc0f43c378db14946ca5f50b4e6faf85c331aed -0x95553b9c3638a1010677a576541b489aac2cef8d0a7f7cd3a85c12679e93ec2d -0xa96060cee7fa76c25e1fbb5bffb6c4b91eebafe99a7c76f6ce4b3178a8228a1a -0xda6470a58ad0d27a9aec0cf02680d49a942008645e4a8700521685660c555935 -0x889e8f2baf066d951c2e4f75e300e89a127060a76a7ce5e00004fdf75bbc475a -0x71fdb7d9c169442ae686c0b36ef5e11afb2a629049adec332cf79dce9166e86d -0xb29b35605fb0482159dfd5305575cc73f4adb9387971fc212262fc9c398b0409 -0xa4a335b61802d2e8accf28193b71ef20e2101eee20d1151f298d59b53cdbc4b6 -0x42d5a37b9efce5b41bc20c97c59bd2f8135e1ab4f7ecfa05b7e9ac312ff198ca -0xc5e3abfe42c6f1db4563ee96781dd3202e26a4611af91f53fe4812d0dff00ea8 -0x52281d6fa942261fca515c9f854c8d8e29964c4f541f79f0c2f49731636f1dbb -0xcbd170c2b19170ba8295b48557f799d3405ea2131f831044e4368fdf4a6e8225 -0xaade2db5d5d447b1e1aee6a2c9e105280c2d22f056d801af5328c24f759bb98a -0x26ddd462136c6947ef9d2b88ba2f763b1ccf5bca19b900e58a3a4171ba4ef365 -0xea46103edd19d3e1cd01e0e198c3bc24ecb881ff5238817ab7f6fe7a173a941b -0x3834ab9e2c658aeb5579411eec510b49bfe969c220466ca434e47af1c265697f -0x020b8bbc095060eb24afaf4ef0ea2f74fa203cff78887f6f9ec23b61a65f618b -0xec304982d7cb7f324e0c810ede357e276aa2e9fb95b1a7c4d3802386882837b0 -0x57459ec24cae281bda40234f21fa205eb404c5686907f36ba45f4a9f72dc4a84 -0x18e6cfff7931dfb7f185124c9729a61d541b2022f45f043619cf68bbddecf494 -0xae5d87c311e80df6254dbb375abb3679e069b42653f9635d92781e5472b0b8b9 -0x36aa37971d774d63b5bf89ba38b26cad4674c044fdaa60977240a7cb66deefaf -0x2ecccf30a7d74e676684e4d12f1bab4c3c6ac85ea9682592fb210677e317204a -0xcd5aad3a533703eb02a35a9407d0d3fd5ae6de5ed3bbdd1749f3f96d775a8371 -0xd32e52f1bb192f832b6f349062a5736a5a7522ecb99e8c7de4b0339ed0147b0d -0x27156be3908d62dfa787d924a4cce535e472234332f7d52fce66888cb007a8b2 -0xa028dc90841a60f5363688e2e5960e9f5304b1ee83e496b3dd90261f5f1f83bc -0xeb652399c72263be8afc2632eba14d4a545a8bf44b5aefb7e22db245ebd95ef5 -0x327d689c9d4c8af4a0a25084d00bfcf47e079ff37103cdf80b4730e5428890e1 -0x09dec1333bd64fd41e03cb6a2ed5a4da30d312a66ada4650e5146a0c279e93cd -0xb6973dd2b7329651ec3098de54137195712fa8eba682bc27903b05ffdf07654b -0x569daeb84330ebb8e777bff47ef63de7d9d4b9f015a790d998efeb574fabb621 -0x104863ab992015fbaab447f8529476910c939eb7e24be715ffffc63b25667f62 -0x670ab52e847fa4e690f69d41001da204dbe7559b44530a50c61fdf77955222ae -0xdd69af8e7ef172c4b7ed5d6e4dcf7c28610a79f7176de02149286fa5f9b4ef1a -0xd3e0db946e86a5fbad3ea387412c61749d05bcc3f17cc81f193fdb693f842f74 -0xd302667ddc96d4ce025d91530a1d588d1d738d902151d29908224aeb389dd44d -0x5fd31c818120dc23fcc000707fa21c6d00246abc862d2dae4d936e59a28c4187 -0xf99fda4e7b5201c041645bf43e7b8edee1529110cdc9c9f6b85933a3cc0996aa -0x3b9313529c828c0520d8e63a3280160a419088780bca7bde8ab99bba496731cf -0xf9f4490af31e06a98a2d7db01e2fc421e1fa9c9722a2d736007e46fb470f20ec -0xf825b412872bddf2d35a687cd72ec9f2a62de61cb969b6473d508beff7ab3e70 -0x5b46637dac6ff51c285970e57e429f6fa0c045313792bdae1af73ef80dafcccd -0xa529ccfec5336a526b433b77e3e89224ce61ed9c1b4e8c8d01e71de95efdf8bc -0xccba48b768ccc4c7cce485e37ba55ac1761e9252c141af52692a4e8931fdd21b -0x78d7477a08b865912afab417735d2520c383e6e73cef1b2bbc1ae6c265dc2e25 -0x5d6ea8571608e55f4a9c968c557c386a203ab09c5791fa6c61702d52edaffbc4 -0x625e1bca1457a139f8733164b053d5952c480b06582e7f259dfab1cc82676949 -0x1f3a9285f94f9eb2bc88fcc1af5072797f9a5576e993f752d2b495d6a336e91d -0x92a9a698ce2500a14035b5830c06cb7249354f40ac951d98fe6e4bb01306119a -0x89cd88de5f28b9e5b0d4ba187b2589ada04949b7621019ad8d0fd7af5879df8b -0xb76d2e8bfab8cbe6a6ad231f91e50c1ba7a20af3227575bd8a734e8a91d3c4b6 -0x32211ed275b259fcb78f5f13e6847bd21b254dd093193bc76a97628e854b7a0f -0x2c38caac473cf88b7dbbad85faf6fe8e2e6550f6c4d93a949dfc2789b1baa632 -0x7b4fb12cc299babca8f12137bc36074c4b29aff982601cdeac5e7095653234fa -0x31c9ca3e77afd67e543dd11d650de7cb6e06fa8868a5ae76ccc7001527d723a3 -0x247b3fab8b14fcc758c642bc4012db0bf293cad254cc0a7c3cc0e711c1268a5b -0x82052fc105fe5f94d06dbf4d7fd4a0cc8b39b0bd846d0d73ca9f18260e42c2de -0xd6b7afb2ac2cc9f5b4cf931ec165623d73b252c281d21767b3f51e8da6973f2a -0x6ad05cadf863e3ceb82921190e71f72c94a59afd4e7692e8d5bd8215d680bd5c -0x827a6214e17067baef2d359e120c6c5d3d5d7169fff1ab073e6501f51cff73ce -0xed8817b14d36ebef4162027b0c3c1d341eedbf12176f41ab2cca370400659393 -0x4ca46446b6285ed82208b25c6c84130284c030f4ca5076bb7ae910717ab478cd -0x9204de19a8dfa1b23ba9be29e4b31f64bc403d0e980dce82bdc39cafda67e82d -0x1320861da221e5b77c269000af8e8cd920fe5559a2628b31cfd4d5cfafbaf49d -0xaf3cd0677b669246031252d5c94d025b37d0f233bdf8693e21d7c0c9f80ee366 -0x363a366da58509194f0d04664a1e4ccec45f288bd7dea2bc7f2d8daad60ace5c -0x9c44a8d8977142a25441bad7c82c726ed2670d4f837b736efb1b2ba12acb68e7 -0x867c7ae49caf243482b16632f0ab4ef58f74516d1c0e6a1c9400c14cb054fe92 -0x775d2311e71852ef34d72ca0a8d951f70965418e12209890f2e8fd04bfe12dda -0xa7b3e9136df4d37823ff5bea63ecb239cb9d14be282b18077cbbdaadf6587073 -0x5306d9b5fb06929cb7364c2da9a4d7d363bb0d526397f260b6b2ba710e07172f -0x169d54767f26464bc34afe899cfb49b0347c91f14bf2ed6e770a7c806340c859 -0x57a639cccf6c96e2006b737048c696a17dc739f4b9efb218cafab9153fa5d9c4 -0xd8d74d516d35dd63da274fec4aa145aef32f2f6454e8d22c2148bb60c6b3fb34 -0x4c1c333f4ebaa216aa412f47d8740672678cba3772b353ed5ad88fe5360afce6 -0xb934b37da6e169e5dd83d2bd95b2d7de537a83c9438ac656dcd3be66890c58b0 -0xa5159f41291d8f8030914f1183c26c7a043985397abd48eed831db0efaecda3a -0x470996648e004204b1c52d29ff75a25524ba2b8a5c98bf2273527a66e93ca8e7 -0xe06a2ae75f62cc1afbfdb199d93bd8ff1ee3c82e4632553b08a118d108ec5b6a -0x3a47213ae311b14c154c71d043a2f1881b6f033eca9c39a55207e95c3ebad002 -0xa0fa346964749dea50b9801d86f338e466f822cb72db2a66ef48bbe1df1054fa -0xff041cfd33257a2e07edb9efc485334514053405aa2b3d151f2b218eb5de8e2c -0x004c77a55dd31d6d3fb0daac52aadfdda3ad60bb784aae14a6c85bd633baba95 -0xe8fa64381b41a89d4d51ae06370b84d929ea7e916029376a1828a99f1f6cc4ec -0x1e96dcc1eade11f55673bb2e9ef71ff9a76f4516311e98fe7e65aac4a165d90b -0x426300ed608701c544e7c19cd9a3756f985606850848ac30c969eaeac5c14548 -0x6e746e7d7e87531b891e8aa1f31b7f50cfaaaf02b1d6041d11a4aee36550ba37 -0x9e0115db1fb143b9739b0489a32b177c63406b0310afd22577e01004e0e14b11 -0x5ea4c16945d7d4f7822fed5168f3a288bd61c67db9cae06889c3b29527900613 -0x2c8772cb64123ff4e5a33ce567149b89f1b19a890a43811fa27692690e641027 -0x0a18423ee28fc282b99a2d472dd8f0d1275035c7400bdfbcd5554faed4e06e0d -0x9c999d3c0513516b17dcc280a95ee30ebd236be75c690fb66a5770c78ddcb28d -0x2308fc6f6fb4b7c786a8d2004a0bd254eb928649fda3e422d28d95097541d807 -0x7a803b36f8d1bde8ddd53a439c51c42ffffc93cb56bb13ef8809011844df16dd -0x3572993054c597dc5340ac117e4f58698b08d380c6a7e76bb59ee6191c2c4f3b -0x03731423825c0cac99ebd807edaa54d5a63075127aca7c6e64aac6cfca8939ca -0xb9ead386bf98f9de961feff0e9bea3c7a6ceb3daac6084b821178b0c812712c0 -0x6ceaed72350eeac26738fec5e8a490fa12042fe71c53f491c5562ccb84283a02 -0x66f750d270750d14b5c8680328a7695a26751843ff962aa4833aff8ec0eb53f5 -0x1263c28810ddd2e1feb8c68324726708920ff2e9ef169139c5fa559d1bfbe41d -0xc6f8e678d5807064c7ef3453e85eb4a4642d6144258a262ab2f2ebe936de26f4 -0xb093066146fe99b1fbf037b87bec87955238a9ac467b8365370fb24b9e3a4a54 -0x418194563b7e9065cff2c96eb5ca2468402e2dfb6188922078e26b07705552bb -0xbcd772cfd5a6e0f37771cb5d2b09f7e84f85bb41e7e1921651ca10beebb534a6 -0x06a982c4670fcee51c2bfa6f48ec42d9b903c43c7807ac5052e574cab07918fe -0x696e5c1378522245319188eac82d88b5ec6797489288c666212255518ff9b6ed -0x8891682684874a4a8bb8455110322ac10d1f430893df3a40101c0bc1113db2ae -0x4e2c4a5891cd30118ec1c95e55119219270ceb223294174cea18b23b8f686a52 -0x4c48768030f548a522f25f12e1598cd0841351f81562f40e624dc65c7b58c117 -0x69b8b6598cfc75d850b800947691c992759fd6c4a87a6b7b14710450e095dbb8 -0x12610feceb3d178cbc5aa6a9447e29cedb2d824ab0b35eb530893c00f62e0548 -0xfe2c171bd344b4274858fa9e9c0e51877217b60dd7faaa489aefe4e36b3170bc -0xcb4cafb81200d740ecfecb1e5b2e1245f782b446599b570d99261eb8da604713 -0xf903b629c5766c0a6c8a22db6a3fdbb891bd89d63c2464cd422e2a869a177b69 -0xd204a52f6177c3ab5e307ece9d4a8488f6e21645ddf903d57ce67ff021310e8b -0x34b5c877db172602f8f012612490ad8aa3491f2edce812c49dae07a6220b162b -0xab07906f89b10f9041903aea8543083a95a78681f9ffa82e0dfc4ca39d3fde36 -0x7a779340675997af81fa1cf07c5f5e7c9a9d9e914e624e31a1eb6b03e352ed29 -0xdce2612230bd76e1c748fbc9593c059bd7261306ab1b201972502109913e4323 -0x3943772055bb84dcdfac39bc20bf5b2d389fc3638bb758c83d7bb19fd00a8610 -0x4a1d83dfe49f1adf3be5d8e9aa1b092557873efc299fb616ec3ec9c306b3544d -0x1b94c36e261bded9e80359f5d8481712b277a15e8966c069a411a894b75b39af -0xb06dccf13865d7856961b8e16a6685746dce20f6f9dd3950e170bb9e3547e843 -0x1e679291d219de563dd325811c0a00290b8ef0c01d74110191c1ecd5658857f4 -0x762c227a94b48cc5b60b73538d8b25e21317ea3ab005cb542306635d4087f3f9 -0xa0b43096eefe6aa42082cdb4a8994d262a64dcb9b4b0aac3985712c9617cbb94 -0xda0bb93acfc2530b72e65382771c380e35f076c46346a3fbb180dfbd840c41dc -0xd948f7ee9218c773d040d1344bafd5d8db53ba9fde7746550a84bc7004628f9e -0x931e6adf147af3dad2e202d369a34c3730945d82e34999d2d9602801ef2df7c0 -0x0b16fcfa1d3a57797ebf39658bc4a506f22a73f939991a3e1cb159c9ae85f313 -0x477aca1e40fcfa2e8603e831a3856d2be389006109ff5bc5a9f7b870d5f61190 -0xa6a908ca7120acb6021813035720ec9801c5c7a3ea7ce461419313309dae4e01 -0x6c68a574d9a9c297d7b92bdaa353437668bd5dca5a8fa44251a1f1664aadbc7a -0x89e2e00c10d7f4816130ff5010ded4488e477a5e017cce8dd99a60a0a6cea74c -0x6492fd81e6b7e71b6966259edac053e45f0c672fa20e50b28790655b24ce1d21 -0x7e059feeb4209154d9ef18f3a8ceda10176c97421685c7b3e2faecf49e80f23d -0x176125bebdccfade0d761bf90d5606955e8d8ea16557ac5f12041df9e1ddff61 -0x337ac10eb580301ce3ec29209ed35d2c20c626a8d7e7d4bd2257cb43e112cc32 -0x0e647b5706187ff7e33709ec7bb2f893552bdf5d633987d4336666ce33175d43 -0x591a86e4ccb28fe0cdeb5b042fba9f310c189d64f4a02a9ffe5c6c8d8c0f8284 -0x2f92381432520f3f93c82ab00516d0b7a73dfb4bb64102a6fed5c585a1c161ed -0x14bf12668ed4ec31f0d568ca9bca191fae17b662a537555f842c0dcb4ca52a3b -0xe455885d8397987e78f258fff556761210e7c3b452dede5842606dd5305b57f7 -0x314fc21f906eb0d978cf2efc395e7b3ca6fccd4ef3e6eeb26b3290fd455b1261 -0xfc30483b3ec41038d71a98f72fc42a36383e87f0a5cd5f67c874a10b4b807971 -0xe2eb6423bb393f9c50c79247bfa921445216eec8566988f6dcc5624d8209a620 -0xb86b27b7cdfb8d2a2d3702259bbba6f9651bb9a4ee086fd2f83228d8acb4736b -0xf538bb03e942a34de826706b58b47a526dfe0fba1adb53a395df57f5d01b974e -0xd3d36be28cb5d0d220e7f90e62a01bf7c2ad7ae5f2d94234d8d30f54ae47c810 -0xf20a041971d9c8773af16084447a78fbccd1a375bb899890f2e2db60a0e15b37 -0xedf93d0039d77860fd988a8ba34b5bd5aad6735d4b8171ad98be264ba4789431 -0x18c880a93c088facd6f56333d934b1b8af8969cdf0e8b77c999f15cb8a325787 -0x7b833d4bc9591985dd750a700a8e929c023897b95ae86492dc1643d0388cd2f9 -0x62d2cd68031d90bad284980069ee0d15345dd14665f2967f210534683c0230ea -0xe4cafc86cacb3d9f84394d9cdca9d3ac07eb6e5260b8596aee0a14022c7ed817 -0xff05b4811bd37f030308116082a3484a52aa05107e80b2976963d344f644eced -0x1d3fc31970d1838bb4d0f7163562333a29ba2d4b50b4cd8335e75dcc27e4ec51 -0x8f80f915ec709a50a6f89c506a0bef99bc0c37678333fd968f158e026a6eb59c -0x52cdd225686833b253bb2466c033057e245f9a3e93b6cbaee29b062fb7fe2f2c -0xb87be1056163d97d3d4f09032c227debf2655c260cae08b621b79e6adf8d06d2 -0x3ebc2fa34ef38cdec95d02e69c40ac58c2d5aabf1f0748a78ef1736d70e32b56 -0x3ea31ca964edc1fc331b768faebb79ddcf6491a21df77f279704f501ce596cd7 -0x8fcd1f272b7b5539a0ce84910d382d3b29ad93b232409182200b3df7a0963066 -0x2744ded4e384005a8b808498356ca4b1a465b9977770f5307a5b9743c176b2f2 -0x5225171aa688a2c5cbdc43deef8dcf3d7a2ca761e5b4184efb3b34af56dd9e1a -0x3f6b6aec5a154fea88682fbbc9561e7bf24db84aed168f8ff573d0f10de50ddd -0xeeb6cd059c3f18d1ab4a80dbe81f3c7b2195f034f99abe28768a9c5327f9b98f -0x8339fa420ab9850d2153abbaf738cf24f29971996c25f5f7e428db313faf1796 -0xd1c87858d339ab57f32a3df7d48033f8d91a451f0d67820ba30cb49173105e76 -0x566e62efbaeadd32411b54b6926a96f75aff845164582a74736b994552b04cd2 -0x38136f831e9a025ca9bd851c8b72edc895342bd6294a48090a5afc92060af254 -0x4d0af63c6466fc8617d7b48de41f11c5a316e3e49816da240ea244698c53cb6e -0x704835eae4db3c9943fe4806114ef8e5524d9b8c981700d9ee244a8b35a8e1c1 -0x82275d6767290ecb707d2f71af1c62d8484191fe8b896d2d63a46a6e4294b435 -0x55a85ce4df8025473de099981ba526756ebb02b15231311e8653940ca3ae54dc -0xb87916e1e14f09b920cd748499a71e6ff2f8dbae143e609b5a0dbecb520ed69e -0x87029555b4fb3e671ef8230c442bff4eb22e3511f9a9a36463498894da9a1a22 -0x296b14a430453f6d10c3b9a966a6628adcfe7f0052bc57b3a01e44811015e3aa -0x81e30f73a8f5f5cd8fcb0aa19cf592a59c98d1d18dd4ad3ba501a1398bf58a94 -0x8c67907c8565e053a79796f938e13d4d7cd13f4f90d787acdbe972658593e84d -0xb4d8c2a8e36e3ba47d1c81b7e3bc1365aa0a12d6ede023d19b864361c4b4afe4 -0x22a799245f71cdafbfb48e66ca541c5b2c0e74ce21f8e10ef3a57fc2a29b8324 -0x00e0c75b69dc068832aabf85bedc8403a660f5985687142f8b3e02cea9edd3f9 -0x00e3bbc90c79b9d8ccc2f1d5aba4fd2832006a8b00f5fe296c04b585b684fbbe -0xce2f67b9b39d9907178a878915c4c2dff4870d1e95b390a13b34b648f74f8075 -0x5c3a107a116a4758454d9de9af9610fbac7c95ae3955d0f2ea314afcf81fed4e -0x27edf26a1517cd8017f6e7566085e89363390b795d16627f7317afc916aea75d -0xc64e16a6d268f5fcea54019ef093a2537b26381d605c1e925b4601525fb0373b -0x40a43f4ed4d8306d38373bbe263cf865db97dda04c7c87700f25eef2382758b8 -0xcb6ade95f2b0d59477c2f8778b904dc220acb062d1423c0f303e4d24076a0d2c -0x663bab5ee8f84f41874a2468689bd3ffcc594ef6f0a59cff4a1731def812ac00 -0x67516e4e45e226677382db313b71ce65e5a4b2dc22d040a537fc61c7a748c778 -0x6d4a7d7b36ab77b20dab44f7e8089ec4d3fb986d41a43b37243afec80f7ff8d4 -0xf08682e7197dc8f34111d541c9dca65024b14792437941d6fa284d33112cb37e -0x577aaa57a071b081a6e841400165610f5052c93a14c0c09e754916df2929dfed -0xfa6573121fada8d6db47a845d8cf137686085a7f5dc72334474598c8bcdaacab -0x769a55f5de7d9ccaf52343ed3b875edcc45acebc3b6768e388c057e36d2fba6a -0xb9e3d1ac1c29570c15d0dcfdb28313052a6ae9a951dcdbff1bc75a74ea144837 -0x3f604a1e4f25b4d209344a53511948a2dcfa03d6b729603e20a42c316e664acd -0xf108e48656683a8d9e898ea0a7b1815f68e210b4e1ad5a0e13fba29573aa936e -0xec253c5b47c212084f80e68c740884a445129e8778a0d827a854c62deec13a65 -0x9f1c85bb35a68cbda976854db9ba6a82a7de11dba10f9df829891435e08c2e23 -0xd01c12fe931a67b6e46d9ad5020e55e49810ff8e20058dbcdccfcbb3ca502c73 -0x4e6db8f8d9c68efa837807b92059616dea96d2cb0b1c616cc82f9721e56cc3dd -0x1794e2e01b83a36ccc6587450f1bc4e14d31129b9f272306547b5411d2a838b0 -0x7b736f7b697d0a6fc994427dacce1c5eaea7f927c609a9f0770797469cb62e9c -0x83c995efa59329e14e804eeb83ce036724b4e811b752936791c3366002bf34bc -0xf0c68096c7de2f0e9a4346f4c67f494e132fe17bbe3ad1ef2aa8cdb366822b3c -0x14999e73c49d8121148cf62ea25cf3debcca8d227a12b73d7c769f950df3d54c -0xbb56a20cc48f5f7e421891a9ad27fb76f6518ff1f1a192e635ac128f190ec230 -0x9dc2bb76aef188b4b5a45e95e7576a9997efac73133d7d36f76d12e4cc495aac -0xc49d19a50856534dd3e7b0e1b7f40685d5fdc619b2c539492de9b23c49b143fb -0xdc6cceabe9b142d0c23499dcb978c7f67e21c9ceb355cc9c442e318307aef62d -0x0ca44fd96b71234e48190baa1f62ed1ed5612217148c1a23c2b1353b029d1fe6 -0xfac1a5a787fb88e7ecb8074e816f1ff6ff2df9053df25e53b3d6f1f39cd7e52f -0xe0da7bf095c3551e0d9d555545be2dcbf43caae2488bf076c0f3bc72b45000c6 -0x22bdec901d6649645314f1fd16453dc652681c1d46d31f78991cc3da28aa0f8c -0xeab3909f5630a60bb6710240341a193aa63e3da9bfdd366c7e3f202c4231baec -0xbd8a3bdbedb4608dc8dc70162dec40fa96b26afc3db0768f8562f671530cd036 -0x52e93f0cd9243aa6e3e49705d76f4be98beb775e49fbd7866db607aeeddf7d4d -0xcf757b2361c9a91ab03a0fe26a52a326a982e925305ec4b21ea7cb9f75adc1ae -0x6c77adca1367cde09ef4b2fccbfb596a1da7f698d1b820036c96770209d7ae4b -0xf83c7ffc5a5de6352b523c6a8cfb1bea7209d4b4fda61fc409ff31d565ec2746 -0x05ccdd5659de59eea70bd654ee707965b89d231ac8961297a78df83877b05fef -0xbe1543a2856563e85080d188e08c07bbfd84bbd961a29299b4338ec3e77474c0 -0xcfdea63ede88afeaf76e529b8fb6a45707c79aeb7b502a75b00078017ae92b3f -0xbf8b4ad19270b5b863fa2bbb641a0dfce469c5a1086f9d43965771cbe4e40873 -0x6adce9f96e1f3255c994bc806f204267fcacf38790b5d444399398c661414468 -0xefaed166221ba997c289579c75144f4f497dc4ffafc8cd03fdb559760e1d8d1d -0x2a16c100bcb3eed56126b63767a7b66294bad0c37d541bc63dae65e684ae5f01 -0x2e00a524e1e7602a6e0301fc4b87995b5ea74016613eb0462fdecdbcbbf299ce -0x46b0ae6fac32823a96cad6a922a10e36b66d0338314de0726637b3cdaa651a2c -0xf6c2176c944f3a7d7a9998b98e7ba9a333306db7672723e4da7533adf1aae438 -0x3e41151229514418ead5ec3ad69def8600b0fc83371c7aa64e8db713c8a8ce90 -0x11e812b83de39d7b3d6ca81d41cbc3b4d76c54ab0da95b3ca55bf144d7e69862 -0x26df48771f53b17c2af6f34ebf49fd7c8235f248b911ee6cab2eae5203ee1273 -0x1a2acb88dcd07ca0e4b82ea1c7c0ce4d96f8d546b7e3cfae45aeca5838a15788 -0xa3051f7dfb2b2ce61ee5945ad5bbd88d4c2cf25bfb203d2ea5c28a9cdac60a39 -0x55c8a1e1acdd24c3db05019bb0313c90035d3ee25b53e5867b526392df60adc8 -0x048391a262188254e8cfc1200cf03d64352e15bee856037f3c39d11e2df63f64 -0xe63ee19327499197a80f0810be16d22011f65ddbe92defa4ab2fc59eea3c7ff2 -0xa61b383e69e15d90e5c51711c991e350336117728be4c69da23ee3eafec9bce4 -0x08b9fc0d5d82468b01c78ad3bdc0d1d9f56b40e274be9546c5c2cd6558a8a5f0 -0xfb668e406f3667d7b0ca98decebcb8eae60dd204199dc9075914c9518328a8b8 -0xd4a296f1c712554d63cf9f07bc7433b505a048e1caa929e5687454a08180632d -0xc08605052e3ad814e8b5e0b442bffa20941d094d497437bfb31e2af9e959dd90 -0xb34b464bf132133a5268a1cb082630ceb105e4dc4a10365bdbb686cde1ad7f08 -0x1e081ab6e52d0a7318dd5b4cf9bdf5815774b053f8565a26166a47512cbb32b3 -0x0e8ab0bf141b86661fdc11ac217783ed0f97ab51ba82c7238aad64e1b872d50a -0xddc36942c667b07c4bf32ed8d0153999135a0fee3e568a42c058a230a498d3ca -0xb066ecefd429e23adb46a7f4fc5a06550f78855d867c57b3291f818ac6c32a11 -0xf2be1340069f83d63f6d0863d8ad9deb4f4a06ff881c480ff35b0493b55df141 -0x76aca01bec294ad04a8905bc3e44e4e73666771d3bad70fc606d231349628df4 -0xb240f60a9b7378d2bc35ef536ea4c82d998e80483147d389819474818e36a2a7 -0xb889494c7a6382648a54ba7cbcef9b222c107cb71f46daccddde9aa9c1c40b60 -0x74ab35f95f60a23bf619c89e213135ea69731db621becf52d1549d3d9749673e -0x1618df141446e58b2d7f0639191ebb401ae71bd1afe77375a20e6d80614e8b61 -0xa5f096c819c6a27700b6fd2fd61f8ab4c395a8077c0bc4fa681bed0cf5e9fd29 -0x677d6b1f4e69dfd7e4d7e8a4e423f160a22baffc8cb5afc0aca67e3b557eb846 -0xa65a9c33168cf33113d3c6852a704e4253b8a3bf7785433bf72508a8c921a647 -0xa2cf2cd09aa4f2383f31f2900584aca8a2c3bbfde9b07be627f58a23009c72fb -0x693f371ad49e018063a605fe44a581ce3c72b2d78e614a0461ab187ef14c3884 -0x71bfd3fb78486295cd0f17509e395c82d46836366cad334b4d4d83227a9da625 -0x19295245c81c25299e06b4186912a2bc0b11e7ef8ad6dff1b3afd48a8601b1af -0xdd8a05909c3ec0d065da766a6d9d75ee2518c2d9702c1536d5bda0b098eef64e -0x038a2d132cfb63d2b7289290c38bcb59898453069ca21367fef544ea5e583e28 -0x76b740915a3f31514a23f2357b5d32e66f2fee12767bba1fb8a8a5e24fb5d7dc -0xaaf4d83d946a186e9d1e754605a034c70421ad7e77f398f33b1994a4daa5eed7 -0x01ffdbe16128cb5d374b785c5f80bc57cf6ff4fe06f907ab44e1720a2f992326 -0x4a4e4e7fda4db778d1d543064e7dc78d908c3d3e139773b0c3e62b8384f71fd9 -0xee6d509f6ef2a8575aaed06141cd36ebc3750539922d0bbfc46b27202dd31223 -0xfd5578e0b44a4fe64f5a6b977b995c5c61e4852c032aaa8a8a12efe0d713e959 -0xf311a869141a1fc6a2ef451d52ca0251a4238d0f87a19572984c72b1e8508af0 -0x49acefb13d739ea4e15c2501b1517d1aadacfc5208631875381d4abdc213fb96 -0xccec0049766c59f57a5b41abaf10effd18576521c2c93cae98ea4dc7e1b099c9 -0x8a65cc2ca87f8120c11f7c99a3a8440ce6f15325c5a958191bd438bf3e867266 -0xeccc8bbadfe35012cf348cf5c56d98f1e887db04e1df3bd5e2b79123bd26a804 -0x63c991344421b8a552705906732fc09a54d34a4779027afc08922a08a603e172 -0x504580a8b939a13c6a237a4d5c0023ef088e1ac93343141ae8d6a4c48e3665bd -0x44aba78ce5285d0dba19d8b8e8ce58d130c925eb86d5d08ef4a034b586f1f235 -0x7db0778e264c3294a3b88a57f7607566c7533823390a612364bcb74009d3d2d7 -0x323fa062e1bbe6248248ea4c55d410fc2524c31de0df4da639f13ea76ddbf998 -0x6ef20f01c41ccf57eebf2da9c030e958183aa7a210663d99a5a2a4f22ada7802 -0x670daee50cf0f351b35c243ae11e78dcec658b8bbfe7ab2ef5148dfa093ea0cc -0x6d6cc68752544118c91580409bef81381e81d1ef6c337e852276e623dbb44f7d -0x8ec39433e7b2ad6dc8c3dcb20b73d081c0b005f5b2fb5dfaf2c188966ec4e495 -0xec35c679cc56b6fe5749b4a07530c22578169a8a2adcc09cff78e820fc5dbc93 -0xd9f25a90919be61ef21c264c11a4bab151f476e222f15342331add025982c8d4 -0xa3bb4014856f38159f3dc036790c32f631a9429053e684ee57b17ba86954ac1a -0x1893dcb6009978525b439b47367d6f5ff9f6ab675b82b781fa9a31cf9b17b60b -0xd245bf2a2c979a6c924060398f9670995246fb619b01d24bbab38fe57d31f9fb -0xd14c1c4e583dc10b69e1aa98871dc532bc8267714f15c43530d0f1648ae347bb -0x4a85cf8393ee2dbd23df1da5109b7dd14591d686748b97b3898e20ccc67bd5db -0xbb42556f083b767dadeba4329df62dfe6bf78620f38705a0b64c46caee9859d1 -0xec756ee86ecc4de76242b216d73d05dbe48782d11c671f4a921e730d8d87035f -0xa98cbcda899ed0bbe0d1a9c58b8b394764b00006d9a089c9a0447e271f4a8f33 -0xf21b2fc56698f9c5d569dd5279dc20f0350274be3d3bd165c2e7809f62c38ed4 -0x61ce4ec23dd1276771a17a9bc6014f92cbc08a4e455bf495288992d88339fa9f -0x89a63fa72da4f4b16a1bd0e19b5dcc5880726736c7997f3469853041afdab722 -0x6bae9ea71a78e3c9bcfe8b037866b1af9cc8f0c175ffdd93e95afcdb94bfdefb -0x87fcc03e20894425efccc19e0affd7234b7e70c8561c52dc29b921fb1d61196e -0xb91a4b8f6200f0540c35f0d233932d9b32e24c5baf4d810492a98f60a64a62b1 -0xabd75dfef10b8c0dff9fc950c0ec2187e67caffcae951637674b78e74aee9ec9 -0x7833b77a8de957c4f39e8604f57b607658e0d2f0d21c7b57dc9614ba0eaeb98c -0x664c01ec0e3abcc4d2cefd57573e9be807f54bd166d1dfaec3cd011d45bf2ec0 -0x7e4915756207de245653bdf66c58ea058773814e497a639457f6b68f949d43e7 -0x6443c1f57b04bb823eeebb513774551f049a9cc35c7c831f17924da68f34dad3 -0x9faaad226cae9f640544b46eee7a83918c176c65b48e01b8d59da96d2e1c579d -0xd8093b29eca7660727b662b8c72fabb9e21bae7bec1fc112e95fb55f8694c831 -0x460256884c43408684f5c30e5a33c3ef88c13ec7e27da48cd625dddf40c8cfbd -0x65edd0d6b35557911c42194d2b47aeb737cd4477392c6b384fe07a21bbe3d12d -0xb0174da4909659df4ba8e285df01ac627d3020996dd50a8ee9c05b7fa67a76f8 -0x622de424a5567f755689848d2ed02ad7600c25fa5feda5a874d888463c9a617e -0x6787a8d8872bc8c8f80ac98294bfe492ea5598beb338b9503864d6cca146a66c -0xc4c3e7578fd7b6fa0f48f02108226d010da9135cd65a5c9a3086623ca618a49c -0x58dbddd93a1013fe8b7f68a99c99c07f57ad287cd2686a9186742951a09ab489 -0x791b9181e687e7749cdd1dc3c8750f7e52ff90aa557d7936dd733574fd0d9296 -0x4ab1ca7bf6eeb22b4d92ffd512b632911b7b9c445d803198a1cecb6f4399cf74 -0x6b65d07e4970866fc4be32b4543d11414bc87c4feb9893e82956cfe1d7c6183e -0x15054b639dc59442aad19359f0e29d1ff27154da8e7742bd6e66a83a719a47a3 -0x3f2a2add9fb8cc946bd4c24061fbac904ea9f16376f7ffff56f155cd4bad8468 -0xf8bf7a465e676c1ff2e8be38f8df040421898e207e082da1e5a296d021245aad -0x17885aa48afc67925d977acf0a71ef409a278540766fc8659284be0444f6338f -0xd4e4bfde51a71a3dd5aad923e2d9b635a3d0aaa9d7d6712e1514f9a7463f3425 -0x39edd6bb9cb9f8ad591b31f4ee32f83a91db973907cec7a17398e5f35e05cefb -0xff71df1f1a802ad82c54341b444387a2bd90317c09868cd3e48ece21958ede29 -0xbfbdb6dcf341219fa1926d6bbfbf9c64cbf99e481991e87065356198399ad2e8 -0x6a076ec52a6318867c903a5c8640041b3371782c1eca4a6887fc49e3229be575 -0x948b3c3bd971e15dd250a9ea89037ff8813cbb930e54ee03f641544a98eff3a4 -0x522545df03790cde623ddc02fd5579439346409509ba671e54687b4f05028b97 -0x1cf43960929b6999f9cd35c5dd56eac04ed8ffed24422c2a000b8d5ab4947af7 -0xbd0d56ba88a2e8f9adfc42f24f659c7269cfb0979ab6019260477951fcd5bc11 -0xe66e75c07b79abe040b60a016884701799708a064ac15561e70de61dc914e00d -0xaa49c634d19165a08ddfb6fdf8fbaa5d34b58e6c9743fb68e3eb3615e5a473fe -0x432381255c1d96e96e8bf5d13edc5a8f641b4a17010355a31656b7a5e3d4091c -0xac61a97be263422fc9eccb2a0b784e3e6b93141c637be0891fe9bfb8def0b420 -0x7b5fc8b59e397dc14c26bfc958b37dc748f908ace93c24b5951fc96e62dbeffe -0x6d1c3e0fa9c8594c727bf90a6e34192776e84749f6995e7dd458bebc50273c4f -0xa64e558da68b6effec471f999064b8edbaa91849962ac9ddbb002bac25d2ab00 -0x9bcdd312284af2b0d0349072cba3b6a4e9b095c028dd3e2b25429542a4ff1a3a -0x26547569f7a6491bc794f634bad64bff85e0d0831a5fcc958a68f17c99b404d2 -0x78b53384a0b129848687cd917de604319cdbc90930aabef0fd7755f0a8b46e9f -0xac6d0e6b5ff033c038ebd9a791678be68a4eaecf569d1d323e0cc99d8b66c700 -0x0e34a7a617f45ada37940ca5213329a089e60481e217ffc341f26921f0c602e6 -0x835100506ef16065dd41f0f86fb65be37c3b061b227ebd287dca2b764ec425c0 -0x6857e5d58ab4cf8b758bb4a84c028c07d3a4487013f57b0c057932a7448b34e6 -0x3343fced6fff35340a03b5920f7ab7ebe9b2680d823092ffb5143a1c66ebecb7 -0x3aaff9490faf50d1d5c949cc0d971f8b8926a3b39e73208a9f5ab8878e2bbe60 -0xf246732e1195471083ab3c0b361d97fcffa9f2d15bd05b18b2a6fcabc5992a34 -0x4a7261f4cd7a10bacfe2fcd771780853f44ab1533765d961b96d41f1407ac837 -0xb676cc5573f89e65a9a15ebf0be17ac5bde3d04991f75e770c64f43c0fca153b -0x0b70b7fb3728050fc3de70b5efd856339736cf5b8f4bbd85ee039e779ade75aa -0xdeb33a5396df79b27d2ef001da2f8025bed4b768e5b4f87d34859ebd252e8880 -0xcf452391ca9048c54d7684b9ff13d14928831101fec58c1a1d756e97ef737afc -0xa6d6db8ddd61b8822aba0d10f044bad3376bdb8ff8adc343d9d5d8528eb33040 -0x6c3668cb6a776c6d660d44fad1228fdb981c20fb3f40f6c510c108a348b09d2c -0xc1e05a0803c3608317b666760fb389c0649cd46709ee12e11b14971eee5e0a79 -0x8e91a04dde43544a15433eb1ffcd068eebeaac2517904aa49d25d977daaa5c7a -0x8a4e594c92ef0f70f7a62751163fd6abbaa1c24045be37ac90ac9f1cb7a81dab -0xe23fbc851596aec0d35d19a06e2ebbcc38ef90baad5e03725388d0feb1f3f19d -0x1ecc1c20b9a470f141ef9ccab487d0d05eea0581e7fc94f6b4060d728d7e33e1 -0x229d695b9ad939e605d5743281aead067cc9bd89a4ac1467113b68c6a1423ad9 -0xb404445533a8cb363113ca64700c4e6a8c6d91aab4a09c9c769d7f0d0964b1b7 -0x095f41bec69c30414aecd3164c5f54de9438e27d66e62b3d8b6fc959f21d328d -0x707a9ed680dd367b8e8c689e22d5ee2af5b6120a6947a5bb1d46473a7a67fd81 -0x6a509a167745a0e12fcba4a2eee61acbfea783f0e133bdfe6c5b451026a8c1e7 -0xb2d168e4ff9783fedaf9bdc4b06a543cbcb455164219f38583f6d2f84eba91e2 -0xa4e4e3a8d347e46af99872ca457b2a42574bccb5c14459233e1e19045f114a64 -0x2ffda6cdf0edf2987feede1382ec679099ac994d835b068a8d3fe5f18fbecd2d -0xfae45e1130f285fdae65f7618f238dfc5a9477490a83948082f6b700857f08e7 -0x2e882955768ebd9f4ec152217369b741f86461d75f1fd4002c361dcef19352f5 -0x6f13f6b2de8f9c9b0f7ad4d57accba72aeb1f5fac9bc1a216434a7560188c1a7 -0xd0470b03c5772c049a1943808cdb5b689b9c664e5b40591639e32f9ac8046665 -0x635a21b7adca0b572d642ffd3158db544d4678cb235f2c996c2a4bc3f764e6a4 -0xbefb6491e82562f146e926c7f125a134c348072bcafdbf7181b25eaf90d1e8f5 -0x52b10a3ffd55371f0fc9c930363cc4bf5c1fea1a137e1d009622dfa538b36302 -0xa6ad5c18b646a783eecb4eb0a0315f7b39861a68be8bce465c133f1c6ef17672 -0xf4b4048d128069479d88adfc8a766ce9b776fe81c891065deebb32e5153ccff5 -0x4a5f950bab3299eb6ace8ee3f392587f20f6084e12d2e6ea1b19d6969b69d0ff -0x1cfc126fb0bc569a3aa37aad9642f37a3dea72966e08fa3e17af4879378a35b4 -0x564c11b458db1612947c1725e696f4a26e7918a508ae048975edffc79065459d -0x95860426444993b58161c2883bae07bdb2261752fee2d2622af6b13740613d14 -0x89fe81bbf45eeaf27bae889685012be4eb8eeea8e077a7278694a2a1c5aeb866 -0xe5349045c1cccff028a604ae05e0843d7cbc5db8db785485ad0d729247291f07 -0x22f206cb8bb85dbf875453fb6a2d9b4ff2cf05a484811ac7fc745ffd733f2769 -0x66ff503a8e304ff0ef3647de5c8503f0ff5607ce845571aafff002579222559b -0xc9a20b068f658fa8e2c678e8d199d9d928b0b89b4df66e4f44a687ec8f36064e -0x00c7cb69f981da0d42a921b5f9012fdc01e970ffbf1c9d60e51891e254806061 -0xa652e0aa1d53c64f3cb3515b0b9aa1fd8eff08bca95058f5e1d846ca2ac04fe7 -0x04aa37e48126879bbc0027f048fb092461cbb482ef593ad3d259d691aa221132 -0xdd073e8343a3038095ee4e074a5afcb1623dd752261688007af935680bde3369 -0x6fe5e06526a812d0d8948600ef897bcd07e818ba62987c8676cd9c4846fadb89 -0x5754616b5cd0bcfdc5a692edffe01d2c082498b8414789877f4d839430dcbb30 -0x271d68d4fc67637bcd4362ff65dde3ef7ec15892587ad634f70603afd6e185d3 -0xda2077d9ea06ccedbc2ad59abbc00d3c5324d573dda391af48abcd237f66338c -0x516caf64bf0998f5e608f09c93dcaf44a8ef15a09fa59ba93d69e79bf049b8f3 -0x4f8c22a1fc0c0d957a1fe60a25c98adcf6350ab9c1830cbdb38372bad83ba219 -0x21e8c017bdbffa1034134b49cfe4b83af18cd9e987c55eaaf7bf63511e33f41c -0xe1d8b429cb22142c501d1bf479bf283e0e8c7f11d96407efbb23dcdaeeef4819 -0xbacc4bafcb37367b24bb5df154f9a84fe8c696eff915371abfcd9cf3e98a6d9c -0x0ca5838fcc684a8b31d82028d5237e46b9bbc01b1799d1f8934dfb259bb8a898 -0x2595503e2a381ab45b1fe7372941316ff00ced68f3c2464a499e636d19c1abe8 -0x740f5cd72fa393b3fb2d7a77c066f24b7d26f34d6e63f0c18450399782bc6240 -0x5bb57dde5f0e2a4178c84b7c44b6528514c8ed0945de09a2f23591135ffc71be -0xac37cc960e31933c814d8a67cf23771e55bb78747eae13e27b32c81473f853b5 -0x9029420b21dd1c85a153ca76b3e05e0d81b42dbfa9bad561cb7f4e64a1642c0f -0xb0a40da9e9c03942f77c5540a63dc1e41c7de733227a61118848caa5b9f384e3 -0xf0b271f279bbc582b6c7307967e3d299161ae6420ea79b09ab8b090a1967af1d -0x8d8a46deb0798525975b82b84c093a779a4411d04cea823bfac9ec353a240cec -0x550b8d766ef2ce0180c1673a2fc85eba5e533ef56985ee6f93681ed118ab62dc -0xdd732d789de27f1ee210676db1ea7df8ee75ae7b55a46d324f70492a91880204 -0xcc45f7a6e3f7cc5083767fec1b9162b42ab14c48b9ee786ce6102f57a02e1dc0 -0xb5124d36b8c7823273a13db15fc6622dad350685ea023db3f5fd8172e8865f22 -0xfa647a013a948cb48e1568d4c5f1317f1109aa390c7c75b32ed8d1451aaedccd -0x49ae9ed00cf3d3835c80add7b536ed74479f5b34110d9db7cccf784815a9c0d7 -0x3aa5f6d5f9c4d6842848eecc7266ffabb5e239dca93d5ce175031d24f14477a3 -0xb041b5bcdd1cc1c1bde9f7d5eee529d695d1ad4c5d7423be0542780302a51451 -0x6c6149cf2e894c939567b151420b400c31109cc3b91237df87c2e2192df8c9f8 -0xe2b26af0845b7ec5ad929b3d0035df09e7ea2e94a816ff8f4b5939e72de0f922 -0xa30864d8a6a3f5d14a0374ff348b0001ff5b2336cb1df99986d3fe781db9fb55 -0x179f82fdd72a00906931197433b15b9402b338b2aa2d1588c29293cac465a606 -0xd0a24f8f29b39e6749ca76051c663a9fd6794d96ae244d4ca438d62c1eb36a84 -0xa43458d7202e8ac0b67997c57424570fe8bd1b62f15d05bfe69a6c02c65ba0e3 -0x8b50e6017853a98fbb21c09a6bb730af7274a1fd87140facaac498a4176a5880 -0x5ca7c0b8133a102144bc4994f424f14099b0293fd8e9135c67bf505fe179e71e -0xf44bbe95fd821e1974f7af74a7695f614e135d13da34582f65057c7dd2d1e679 -0xf65441c9dd8ea1b5ad41e71b33d975b817fa4f45e94330f7eb492d2bf35bfb99 -0x5678d23bff2fe2fd33a324eed90bd9ed119279d0da20091d5589614910be0d12 -0x79ea6fcb787791a249a09aa465c3a1a85c4096615dfd530d433bacdc12a5b75e -0x47aaacd3779d4b3a5cfa5f1e0c1da2b74ca2a7a50e026915cabb77666c760f13 -0x2ee965561f2bfc479e309206f4381069deb04164e47c33971bcd9460cde33e7c -0x136df88dc944cbe46396ff7dcf83cbaa9df95ff83befcceebadf36961133103c -0x673051ec829526248e8175169943cdea75ee32ed02d0c760df302a8a015943b1 -0x43c81046762f4235bb01da36c00fee842776e6ed4e8d4487a6ab3ece385efc23 -0xf9cce788fef63f45f146596812db4e75b7870d6d7e7be394b95bdf67654a9e0f -0xdd1a74e7139473b32ccb3b24eefc8cb059feafbb6decb109634c8f8f914b9c67 -0x367591a8cc94e7266737f6993624f438e4c0d009fa344474c79239a005c86087 -0xe88f9e9495fd99b7e34f637d8652de9e971a43e540d0f72b89599e62ab82e3af -0x8fdb954ad4cd9d0cd18dbe64164a89e8cb5d7e2d32ef9e1056bc2f07600bd7b2 -0x1269fdcc80137a74d77e3b7258e5a05f453ef267f2f90e97ca2b4d138788d55e -0x8d68b5eecf6abb3489b0ab95904189001c4c054276e1a2ee4d4b3bc495a23dd0 -0x5ae00eb53331272e82d29da66815816c7a26060d5a32076e4f83bea2021df1ea -0xd525a5e21b6fe5bd348ea506a3e0723bdd6bfa9ed7f1a61c6c0eb5d7f249774c -0xc8ab1a8646a3c9f2ab2ada90bcd05b90e91a1d027077741bdc855b7519d42fc8 -0xb44043f811de16cc0114f68bd33a0ee6ece0681a5b983fed1a0763b93fe3070e -0xa6235b94bdf5d5631c4186e908d1bfe6c88581bfb2d3b8162dc3ef61d92aaf63 -0x3b562478440e7cdc922ad69fdde57940760ab0755c91f89c0022003447e6e8a3 -0xcfbe61949f098f027ac8112b7778a1af396f20057a8cd433dde97a7e0b85fd8e -0x5252cc91b49d7b955624b15fa39749bc1647d1263507dd6c8f8f952679a3d246 -0x185fd163a1355c5e32a55674c7875b9deafc40f4aa448556ff5f2f384503c518 -0x9db5dfa918c4947d277645fe270d9e0f16051781c659bcf033db3285b22ff93e -0x06bb3ab9e798c80e7a2ccac566e3ccf353930a0ee2ae84494284cf0712b5fd11 -0xe7de06c482fe978122600035d59202eec102af42d05bebbfe756f5b91588c682 -0x1d95be93ef69911823ec74bb9e39369399d605b641fd3563b7d830ba7129fca2 -0x53bf84706fe96ef5510905548fdb1fcf98cc611dd7e4b5e2bc2f0741c571df4d -0xcf27b2969e5377a53dcf696cea010fabc430ccc37de0d061da2f9bb274b8874e -0x4f0786f24979dc5236b4e81c9ea755b5e104dcdead0825b2df950f1a1c373f07 -0x0a1ac7c068acd0e7b72038fe06dd853ad8bdef2fd6cf81891b2971eaf59156c3 -0x386a3f9b9b18f5e1b6dcd918aa8782c9a1a391ac50a5e33a604662ed598edc74 -0x69f8316376698534352767d740096b0ffce72904b720f88e7f51ecf94c837a3a -0xb8568bd6a3dbfcae81a3cd664559f9fec4aa1eb0a7282c91bc11c07d7f74b0f5 -0x8829c8188f929e21b623187460c16f9530d4ddaabdc3339f893d8009aa117d67 -0x05d3922352a6df34cff1b29f0927d6c7a2adb7127a5a933f5932bd3dabd11f83 -0x4330711dbdd09fdc034e5e7dca58f506cf1f5e1d740aa4a15bcaa3395e4b91be -0xcf6afbcaef009e3820a134543c86f07041bf108a96b9c322f5fcd5b2220a9c01 -0xd68ebf0ed32781455ced115fd9347631c46089d27606f87e1c80018e90a4e0e9 -0x31f621fdad80d575af75b3f6c5610bf5b89507c5e96e0c6727229b8701a40709 -0x214ac321994ad287180d961c62abb125954236e95809562ae2b4b818e1f30d4d -0x58a13a4e18cce4c84ee2b3fa489eadd49c295c6080f68f1cdb3afd4fd2164627 -0xde7a9ce458b4bc577d13a070e9428b42db84889e324e931efe0debf21527f38f -0xb63e077b5e23c62c12d0d11155b928198d4ab46b63d23379b1830b4b20e5c879 -0xd6d5f43db2a5b9c00782336a4373afc2ade2d2eecab955c97373e6868e6f340e -0xa5d005320a63c8e1ec239d15cf283938cc0cafc0d3c6f5c15744e587875cddb5 -0xb1215be06bf30fe2b04a3f57db11f4829fa7a46a6d03ca0be5bb87bf19499b40 -0xe7e10ff4c6ba16b1ecb4c32b3d240016d1eb23f0138f63d4ff64eb3e34e96f20 -0x4e3464586e84347f26202f8a7a5be59e976fea6ae4512f8fb1782564ff1ee639 -0x73dd081602593c737a275e93363d69c78c56e1ff54c687fd4fccb95a07be470f -0xff0851e2cda1baf57ed2851c65d59c493125c049c30567ab5f2ac80830214791 -0x0fa53c7493e0d6a939cfc8a12d3d931cb16b635147cc6bf9566bb0e2fd2d7623 -0x62fe97d220e00a79665d2ad8df934a661b3bcc9259c5c6ae773ef0854b7a7c70 -0x001d0b167697889796a67248420b02cd1a2a893cdc10524bf654f565c79e9690 -0x4b3dbf33d38953b57961c5e6e9d6ffbc46802758096606d8fe08de9e6dc09476 -0x4dcc2f22531a4fd5cbb2abace51bcfd5330ca0353275efdb2d7111a3cd099dd9 -0xd142b30de1aab91313fb50869246f95a14e6df308caa18f46ef9b0f08f986132 -0x843b572686b016704df7ef2c4f998f9f7388a94bb74be385c40d5412fe18a7c1 -0x9c590dd13a5ce7307c0d91c83a3157d44602078d4c4a8fdaade6abe6999dd005 -0x4461351a946b76840a6fbf42748dbfbc96b6d98f9ac0f2d7ef8bdd2ca393c4ac -0x1a00760d9420456e46e734667939841df1b1bcb41e99db3c475855d50de93e44 -0xcfec79cf9dcf68d4bf56b64645e57ad0a644c14f08a19046b2a8520ef8bc0640 -0xa965c956575ff26ac15186fef38d5a8a19cd7de0081f6e7de20d7e7b978fa273 -0x187096e69d34dc9345540417da3f16840fb7d171e7c44d1e4b2226193b380d28 -0xc03ece1f567ccdc34a0d146efea6984e42483bf71616d35336bb6b8eaf30a92e -0xd37ee36afa0e5e93f7af5e0ea5383710a5c934cc29169d2ba307889a9ef56233 -0xd1a47dbbbe19c416016144f407111671e2ce4c7f17026a9d8a6d2846dbd33615 -0x30ccd4a50bad37d3c8bf476b94a1e36c33ceebc30396bd38d12409d9865af842 -0x02afc426500210433058638eaf17a6509595aba1f25a1b09113622ace02c72b5 -0x8aac621514f490f6c009c88f171effb922bcb7431d9a7a7de7b78faa81d233c2 -0xdd67e66d515a715ba7ece43a4e9239460e75d81885a210d65e3b408c10cc4d06 -0xc3544d0df6d79f29a6414d89d36bca5f2101d7c4e0ea22fbb87580ce7a9ecd85 -0xadba95b082b3842e949918fe32fe6909ca984ca97aa5468e66a70831fbfefd19 -0x4b87ada78364387b5a9212916193445ed73c7d08cef9cba81e421c0e6fc0c1b1 -0x317f8c5bfeb29053ab4827f917b7bfd92a52a2f4aa9621d46f9db04e8dedfd9b -0xf1ed010d6c60cdfba3091d01305fa7401994ae771c1481e4da5f25f380fb2122 -0xc367f194cbcb357c3d5632023857807413dbffc90561a06e2f75e0d68eafdab5 -0xe10ac4fdd5f6f7525316d58268636d577d2a32fe882be1e37fb2a8c58103ab05 -0x4b1902bb1dd3681086083f8f3eb6c728bd71a698f52360e45d0b917e70ad49a3 -0x470e6976e1d113a2675ec8b3bb8f48f96dbfebe028a7f2ef09cecc7af84f7249 -0xaf9ae2d47d56d2558f948e301535c062c561df549ec37d2cd5072ebe6906d6ed -0xd9aefea97684bcec29e45ebe9ca368eaf71a753199381d47e9a9c9a8a85c1e00 -0x5706da4bb0996c7c933a5185fe3a230fcba677fcb4f5d48e03f2147c32096594 -0xb276f460d06c74a403f90d7c030b97ae7c8eefda77f7590a55d0dec349675395 -0x3db98fe9586eb2ad25b5d7d901ae308a6ac23b722407cfba985b6db030161d20 -0x7e1c01d3c8828c7bdb4f8774d096c27d54e6760fd717f01727718dfdfa878e61 -0xd453ed815c9d19d0a12fef21a9062d7545f7d21688cb30f78ebd3dfd4715cd97 -0x510a4dfb34badad147f6ffa460a02d465d7980e7275d79a9defadd8f5472a3cf -0xb63c9180aadc4f83c661f7301846d790520fe7052f006c8c444bc8c8f7ebe666 -0x3bdd58128a7b6e58c922cab2271bc2939e351d1ff6c7f35533f57e13740f9857 -0xb9a352273cef388a3f65b0e3273f5607b57b8ae97731970b3c544ab2a1f6e1dd -0x19eb1af9c2a8f3e916bf30124825ecc68f95c9bb0fd2073e30827ac219d4042d -0x367a63fa250fc590ee872b4547c58d0b2f3972c15c7286fb7ecbc5957cf42b70 -0x964e6c9e871f93707cd21b271420322ce71128f42216371e1af5f38601a6fc6d -0x735513931ccd768b9f7a9cf2e91b27022d290fcd73e4244cb22266acebef0ff7 -0x6d2fbc1c09bd9d1de26e7e5b4e1943b278cb9a5e83d49411acd360aefa581352 -0x09c6536aa7c9d1c30c5eb9d52c9f7343cfe5a28cc954b066dd3683c328b69111 -0x54c59715ea42f6d7b5724759fc5993faa0f3a0f75d8595bd510cdf8f1ccfac46 -0x48d6967bf036943f912014f3df309d485515b309ddc6dd785c14493be6d83a5c -0xc5d3a7259e94f972b1a06b1f83426ed759f7fe3bddd209c9260f43ac4fd8c1a5 -0x004c7a749ce0901f8c03a1ec5f9b0db7d1b4195081cdd0a3f1284eadcee40a2a -0xe169c165c55a115aabff67567dfab2441db4897e7a8036ca44b4efd2974690d1 -0x76bb8cc96abaf5067f4ef2c8d94a34e26f72074a3f1599e3c0b8decd90c6cb04 -0xb05286dfc419b99a5db50f920bfda26c473935fcaeda8486922047ea400d74bd -0xcef130bf750407e641ef408e7dca72589501524e536de7710e3e436026579921 -0x9ab9fdb87e110f415c1b10a71eaaec9fd220a2d3ea4d9979414d389cc738b118 -0x828e434ef077612d85ad8c30a60d1170962c4201927a119ce0a97c0f08eed718 -0x2689191650585bbd9d7c07b1af6d3237eded28f8b6880c5c301249812afb933a -0xa663607abbaea0c596db8e8eb6b39005c0b2484b65e2f60b391f23d422202cad -0x71a5a7e0f549c3211d721a2826e40e2f65b445308ba4d1e08ad93d1577811a87 -0x8b3170bd732e383236f96b729ba74cb9620cb629300bc70e9d4f88a17212e7df -0xd3008acf2b6a597bba8f66c23e5dea00150b2420d103f67029ef7cb056c20d40 -0x26403ef77642c1c53caf090d81b824899cc7e28f99fa4367ad3490ab161900d6 -0x9fd0288f6c704b324e71568978722cb986f95a99fcb5c550bd65a36e3b2903fa -0x7c51aee8575f5b28a6e663deae7850758be957af71dfa177880061da88187452 -0x08a474b7414ef8a253b766c61c72c111f58cde8118400748484b4ada286461d3 -0x571216c38a32d8fefe6e3f85f6b9d4725ccfece95c5ec7383cb9fa75e84eab2d -0xc548bf58d40c0b3537769f7738daec02511555bbef715614a8b773074ad3e398 -0x07ff9c3afcddd02d85bf64d4a76256a35035baa0618539a88cf74ea6446ae8c6 -0x1f5ef9f1fab5381ba564c86177eae3930794bfe88752c82d43327eb673731700 -0x58602c19769daa6507cc2f04374c804384702a1b18efb316f943cba03d2a0c3b -0x13faffcbc1fe99a8d502e5c21165ef7c80ad7704763072605907dbb956a9f576 -0x8ae128df942f1dba14f7599e7ea1468f3331c88e8a68c7ab43e48879565fd0b1 -0x4abbdd55e20086744dacc2f68b6af7321184a56dab13207067148e7f5f05891e -0x64433c90b4d1940fe485eb9e807a638e6191aeaae24f6c4839de2bcc99aff07d -0x1bb4369167b9b5f2260a7545146fab04cb4540cb7529864bf6a733961545c563 -0x0421bbf129f475721821b623f3623a88a56cf89e35af6323943e004c3ca09c13 -0x2105a5aa260c92ddf378df77c93e85c43f045e97d9a12fc340e69c2030588b5c -0x948397298f67ab5734a2896926cda1232fc32967c59d99f43d824dfedc17e13a -0x83c20a686e75356f845bb15d6fb8446b883b2de8df76ae37a430002148caab26 -0x693097184793f3913900ecd97e0abca694edc3820b6313bc84d28b7cccb551f4 -0xd9cae63905738778b0262f8877c4dcfd1ea623f281925b229208c616329fb56d -0x65be3ab5cf8faa82e615057b166c096bde38f356673029a6a3eb4f6dc8c3d609 -0x5389bbbe18f4dbd756b4a0ba7b9d52a0d3ffea3bdfbb4e8531c9a3128ca3e11b -0xd6cc6ca03ba01910d4908bb347ba0d220752110340727ccf6c48e97446bdbd5e -0x53ce6f2a95db0a33e3fbe6416d8191f502529e325963936ca1166f7c06c4403d -0xd265117379f98d531c6b787d1a6c8d112c541cc873f3248fd2f67edfd8a00aaa -0x2b6186f61fc1e3c9d175aed9abdc27a7fe9fb20ff4924d3117160055689ab721 -0x80b76bf4a48c790631832f3a115770f0fe3a8724bd3aa2036bb0262d1e01d0a2 -0x6ff2a8a2cece00d35d739642bd954ca43ca020b7ee56017b0899e6bcd87f101d -0x7485115136716dab0478423c3f8a9b63b1aec93cec2cf25bb396b708debaade4 -0x6fa64a8892861fc2f5e1de0c6cd908ee47ffcf1827f99f18d87bb10cd1f9e5e7 -0xae14c98b62c2fb1b67d71feac908266982c5044090000836f141d8546f97a67b -0x4e6ac22438c8d6c80edd38673f1effcb8bbe717be1d49e468d03247de57e2032 -0x1fa4cf8bd395c6b5bf3af40cb34af13266af421ddf1c662df69e614fadfdd672 -0x428d7c79f8c44b192c4d5a14d3ae086d60bf1d179e218a3669ba558eb8bcae2d -0xda415b940624668a443e7c1225d5f96551ac5c97439c6c377e99ee6ba6c9b7a9 -0x6401ae2a3d61ea1d6f49bd82709c90b6b6010999d29fae4b0595ea6fe895e6af -0x2daf32e28959d3430c3e9cce8c85d6253c50483706cc3c84ad89f99ae26d5e29 -0xffdd72a0fdcdc6d243df572b5cc713a14b20de303e2b3ebb8cbca7cd622e7eb1 -0x60e3334d08688717af16b9ab0e9e40a4167d2a2e53c67ac2bdf1a49e9bee0185 -0x769c877dc3289ad2a419265f5c837bf72719116358ebf8f7b513cb1e87431068 -0xad7dc550414cf12adb43474aa73b5010b8b7d2d97beea047205edf0f8e2c820c -0x0034ecda50d57977918cee165cc30b482e56c259cc58798640326b388e2dab7b -0xfa1c9288b77ea61df3e437b5b06d31164e4681a6585cab38c649ce71c1fbbc76 -0x9fd9869558c38540da7ed0f807281073e62bd27baf95f7269d9a0307324ee0f8 -0x29da28a89adc1c1ebcedaffc71ad3a4784755f3f8cfd7eb679e6269910e3fb35 -0x0a868d04c98bcb35113113ade997b79409996d328e300ddf7c957d6e5129aede -0xb2c5327d9351911ff5fbc983757a2c483d1eeba3a2d1e346a0a2df70ab6e2f28 -0x5fc0326a2a70200b9886b70e9ce88139c1f9e0992e3568a1e10acde8bc210334 -0x93c1ba35fa62633bb18823f9ed3d7379cba4a6b1ba93242562f741aa49633fa2 -0xd6f35c3923dea4c876d062cd2d7f19a1a5d3daf649ce3dcdc0ebd467f7219162 -0x8381a8c05014cdef1870af14f17197207b965bc2344656a42d6b336a47ac9642 -0x847f1cad118cdb6aed337e92283f5efefa07127c9dd7f5c1f6166863ae032acd -0xfdc009cdf926f2cea3a4441bc874094991ddb1171a220af7165b9cb022410dc4 -0xd9c72ab94cdbfa96e666208837c335abb0e8af467acf0fae30097d37ae009b09 -0x09442ade96e93f278ec4fe8b76030446cb5705386c1ee41105bdc5d6752076d6 -0x652850ec515ff092df901e20b64d7c38b45e233d0ebf40c89ee3ab4b308b64b6 -0x8b6e8afbc375c18f4adb594a834f3267c171f59935ae4d374fb5b579879518e6 -0x073cdb33917e4ea9aa9a7a578b1214235275b5a632c074f8a925a9c417eedbcb -0xf7fc51dbe3cd687747ad91c8f26d78ed7ffe6ed5eb75e830472d15af12e287c9 -0x8632cae43655f074273e6e04cb1c76978dc6ec834c79c3fa703b255b2b0d01b4 -0x172846ce25ef2e7b980f999c323e93a410629249f485270a86df1d70276098a5 -0x09843b6a6bbf2b50b13d8dcc32ba88440ff951c91145904415cc53cc54cac4b1 -0x450ec9e915f9f6b5d80b509ecc83df01b7e8e9406b5300b4ed9358e2d2d76a07 -0xec82eb1b7277ec3d9cbb528a5fc99708e68d9f257d2614e22a8a32f0316f5531 -0x43581045807608242782fb4b1dd9419b85fd0f3dc117c2a1646449caaf6bc5de -0x95c591202fa1b736e8202f68ed31f97a207a8c86ef6a40d43868774302082855 -0xd1ed68b9948e0646a57daba8de63034f1558a6dee15629cd64b002f47590d456 -0xebe9ababf43d540cedbaa3b972580ddb30430c346f13be5ba854d56459ea0119 -0x03eba648daca9ea3150b4a9abc76118763ad65ab2943993d5fcb276fdd717071 -0xd4243a36540a8007baf7adbe603440e3e5830ba14d390838f7fb938ec4bc94ee -0x0de70c5e2523ace9c11b7fd254118c7bd389a7e3ecf5a6bd115446bf1784b514 -0x8c95bc9bf585cf9e0a6abdd114c72af53923f91b39fd3ed7283fd7430c43529a -0x0dd71faf3081abc8af2dc922308bcfd0cbb825cfa838082a5ba744148b12ccbb -0xf3915cfc5f3af3dc5e5d8dd9cd9c90c4e5c59601029312dd5f11e2d71e452430 -0xf86e1d98579997118612393eef697f93a6f0e451085dcecea8ccb519b4055ce5 -0x54cbe90caa21a6640ffc3066d7e463f0e4ba688de941eb2531bde59aabd96410 -0x6ed5d06f5e4fe248d019072ac6a516811a3b7bc2971981e3005b84ac07a32ba8 -0x2b0c9fbc1de480e83fa3665d397a0c1e9aa1f285ea9df99f382288c87b195a61 -0xe6a6af370b51f9224ddcac41d7fcd3048d3355c5857356be53568fc34ad11d7b -0xe9fd2c1485ce9ca59841083f754c1257be5970acee4041ca3551b4058bfacaac -0xb5a01e7e9ef7a64345ce993e0060cbc2d38ec64f29d3e423d5eec9079fa9af37 -0x31bbb01637a2e5fe6abad401d6872c1e3f30e723a15cb9d555d1dc107c77c6f7 -0xd233eea7d9454d531cd599d43d931f550abd82c3732dd22df0cd866b157be685 -0x6ae816296be344532a073732ee412d613fcd161727915794c0944b572fb79d5b -0xc455e1a4f4a7227c9996def5f2abf2bb7c56b00fe8c7fb0d6e1064c6d4e3bb0f -0xbe6afad10cc79fbd61a4445e35449ce433b37a9ba8802c6e3834087daeb758fd -0x1da72e7f28e67bd22142d958fbc738afd2b4ea1c83dd3e348d19c205ae6cc01e -0x771745a06b101b8ee113d500ea8e8157ffd61dadcd92f400e23cfb0ad886e439 -0x991eb1843560c02bd9fcc1f45993120db1f02837bdbf4ba871ff9ef22456d319 -0x0aaa1f10e8cd78fdf20b41e7fc4c9257e857157e897c7c9440a54e1cdd1b287c -0xfa15c75a32352f5d591dbe35810bfc3183f7ace8cd508804da13a510e8ffcef9 -0xbfa485a6504188f2e9e65ca932ad07fb0922195053981aa5adcc629c84ef40dd -0xe2d602d7a36d3f96e7ace6795122c4f6a9bdaafa43e8c53ea27e3ad8b8a2f06d -0x49ad7643b82391a42556e597029d2802bae91c01fd43410dbb45540a808752aa -0x40f073ea980c824dc2b5bbe5ebb69bfbc8ee38e9c2ca434065f4950c69467814 -0x236d618999bf8cc8ce36eb7150af84ce6470a457275f0bc57daac01100edeb5b -0x732260767bd7269cd2c3e9c5939ccf5e8517d0410f762a23e7e2337e6640df83 -0x4d27ad56908bad8ba05ccb4bdc26936f78b313f38783f57b00e21df9ef3256af -0x3e45f90651938b9b8bf3daae69f329e51346abaa047e84ca2eb7888e12cbde8d -0xc4f3c0219b18e9a2bd40d3cf4746fe4dca7588dbdc6624c004cedb6ec6d9a31f -0x506c708c0cf40f3c14f0a9e2b2cf6c0a7e3f6f903a87dc90f4b91c0a7caf72cd -0x3defd049082ee04478319e054d46ad27a20e841572b93cf0d2f0faed20ca9434 -0xa9bee72a12e7b1efed9b2dc738c4f50bff0289e9a58cb84c4cc91f9f8286668a -0xde95c860f29e6299f8eee68fcbcf920356fdbd495fbd349c59123fab90071d2f -0xd87a5319586c422ee7fde00a76ab798c3e12776f5cd557009229d4852db9a041 -0x42e8754e1977587153d6b7bc515abaa7b56a22461e45d2c3d78de881e4a2a790 -0xe0f28f263ca9fc63c62a65b66e2d692da1107f6e28986066f27b9c438e551422 -0x67c706ac8c481afda616a34b5790762f666b4b322a07a0d1afba8c03bb5b5b47 -0x3c2d3f84bd26ed9d9684ad8e87155da08a0af3da509ac05fe0ed30cba610783e -0xc4d53ced37f4790148d9a12cdf8d82c2b65a0df299cb6b3a391af4c18693254c -0x3e6879b283ec7d1402034fa21d692e26d0d7c61a4ce894339963ad95baf479d1 -0xc82dfb321b8cec538633d2ab3d2bb78cd3fd07ab55beae4c46207604adc2db28 -0x5c0e0d0334a338e1aa9510810ab8be376738fa7eecf2ed576029df3a99502200 -0x0417177302d05bb9556c77a1c8f81ed3d2002f561fb840e1af488717252458e2 -0x643212899645a208e0f101bc50c7f121da9eadce2b37f4d6b61bc7029e00f1cd -0x08fd3b0d7e46d2f6e1e4fdaac6755989e41df5be285109f34c9430c1277d2f9e -0x5dabae036220f0aa1a439803cd9e9b1d4562cfd7eebbbee98161f82385837973 -0x03bc82fc732723beffc76b1ee5a6e6a9205beba63a4ee009d612620370f4cef6 -0xac96ebadf488c8d84d98938665d20c041e8f6826b8dc95199557047cdc890491 -0x3cade1e0ff0a3177f45c7da9c04685b8ccf38d0e7b27bf2ef555d205b15dd14a -0xa390a0c527e51ae82bc18f105d681902f279714c4c0f4d87da5bc915496259f4 -0x0b4d4201ddba0d399a2b23e12303331116ec4ca340017ff8940ca5e85f363034 -0x0929f47c8c31002e201435c305d0c65c1ebddc32dc5fdb646e17a4b1d3261345 -0x59bcb5acd853c9977be63a5a74d42d9dc0aae86bd73da3bf1e7426c8d12f3a43 -0x47803c4f5e35c81c55912bf89729cd16c9cf7d67e8854cdd4a9dca0678593806 -0x2cc61f53206c0c5106e0257e1dd41af7871dd2f9900f43f9f473d7bdbb487748 -0xb2b706f90a6a9ea2d2b8acf641c1be7929cbde79f1c00ba87ac208287a819067 -0xc9951d05e837cde7d84b1742c01240708ab75d5e3bef2ab19d7f8ef60ea0b1e6 -0x399526607d569ad4b5a4ac01f50630a218e148e8a692e3d51f756d27ade4f4bd -0x2184da5d05abd1e69f25e6d458d03e901b175af18d33824f99d8b16b7a5ee7d0 -0xc480ddbb26f4fa2bf9f1baeb80ba553ff8221e44e3396769da5705ab5012ef9f -0x1f7258e022719702096c2e67ed0ba3c247d51e18afdd9082ffc3b64e71496a75 -0x73c75cf57824198bf1754a0ca0cd348fe8b414bccc2fc8c30aa89e073228f212 -0xd1dba534c994d9e0d773f9f07f35ba588b176e5c03aa42545cce3dbc9424a318 -0x82ba7f299f353d608a4d7e9f5dc7baf6bc7d7d71ab03e6b24b69b45bcb1569df -0x76f0292f7689db8e22801e8ad32e54977c7ff65ccc72d24db9b59b1ace81d008 -0x6991b92343205accc8aee451d8626b12f0d3761cd9aac5d264828e2b7c1b9b5d -0x133d47acd304a9c6ee346b45a4ef63c85b4a7052b9b9393c7366926e915fdbbc -0x7f1534d497eb08d123198202af69500305517d0cf3370256669ab58a0e419425 -0x5d979622280bf055a8b8d5e8d6ba94d872c2227e6b8f68e3f0cd3d0384f8bc81 -0xd3d66ccb3690fb9654a2a81f1cd997fce6240031edfd4190b52f91e92633e6a5 -0xedc9b0d81b96f58a7b6cc91361863fb2083a4a03d6f39c0fd2498d7698fd9fb9 -0x4daf8b7a51616adbb66b7e1d36955d55d6909ed2d2fb05b26355812f0e644eed -0xe90a6cb225e3d100b1c2b6cb0df34c72dccb98272ec8d44c37f8995ee737ef4e -0xfbc57d9b5f2bf55227300888b2e7f56a0a64c68053162b0e22f9fa24f4d96ca9 -0x274a8bab41a99d05e5a4073a6e97332d325066fb388c7948805a486deeeeefbb -0x0755f43465cd7db4cb838d93721593fd2a22a77e10258e9023dabe504ae34264 -0x45d9fa6b8ef94aa72bbbee7a513549d69b17b69c3154f6258f11920e68973bf5 -0x829afd81b99efe9c0a66f5ea44e49cbeb44025e9d089bb9f29ee17801bfeab53 -0x70c9947155e9de879b38ff4896444b4552adbb2fdcb1bc10279d6014681019de -0x3603b1be1926f366892400323709c8f4f27d45abab4124f35adc500f09c6a3e2 -0x1b2d1795bc288df0f10f0b6b311333bb3e30c04f097fbceebdf302535a21ed77 -0x4f07f46eee9f30d5473b7291c33edcd55cd7566d62a1a6587f19edd3a5417259 -0x686506cc750de94242a01b48370bd220ce0c05f866913cba631d2155224f6b56 -0x19284035c0158f8c0680df6c557991b662f6d0f17246a045111710615625b393 -0x2b5db5fc7f97bee8a1343a00fff67cd0e50b78713ee3e4984f6813e767ae6b6d -0x2e7dd96f48bdd8b9ca3375561f4a7ef1d5cd6804ba4b44ceb4baefb4504357f8 -0x7226561178304f812511db3140c0c72736c5d7dfd34b135bfc1e54f6812bcc95 -0xd812232d606b89d4d015e99872ebb070ef4d6fa1a41bc3aedeaac3a4b10bbda5 -0x14a801fab60e205410e3dfbde1418f763b4f894ef777e79107fd4baa607534cc -0xc05edc2b7d4ae86a73ecc5ad161474ac0a5fed55473255a1a3da9de9af6d8a4f -0x63f58b6aeac2aa791413e0416e1f5f5b91eb05df6d10e9540857a39b717eaf36 -0xd400a29e04f00ef65ac8b9f21a34dd64213170bf40370de3eebf06fcbde036fb -0x84c7f90ee6f2cb0184546035ccf8b41581f8c79a6c656b6248d2309b8d795396 -0x231d589acc2a1b8bf0710b51f14401e2f26715acf8b69d64578d58c9fdb2c327 -0x2051369b68f146334f7bf50a9d84c1567a507f1887010c7e0cb941e2ac3e45a1 -0x573a1c65be7c6bbb020ee5ddbb3506385ff4da8ec6b1d4b6b67383fa841653f0 -0x11760782da40a5554c8ddfdec0c23f236f72094a0b12d0be651718ec7892b5c3 -0xe15729467f543ac3a6a1e5217e3c2410c1cc8eae77092cecf56593a35516dfbc -0x999525189b7f4692978d1df7295e16d2489d433e148372524f8b593d7731644e -0x84d8bad4091edcd6b502954590c100f3343e16a9b2157fe3c9f99f3c2f88f293 -0x74fcec681378376deb24fd64e40eea25ac700b362b07b81777e8386ec34ff169 -0xf1c40d1c10eb2b11fb28c8a9c2a80b69144c96a19f8b9becea98d1084a02948a -0x794a646834b239fcb8bcc5747b20a2dc553a4774bd9a49372b252e83d63d2f6e -0x9e8cf62bcbb25acd7ec51bb28c2026366e6595e02f05967db304a161085a743d -0x02203a2804872f580323cc053c4f73cf2462eeeb02d5efc2ae10ea65d4f95adf -0x454efba509cb7bb8ee4b536a5103bc6932d067d60e8de6e86090fd570bac0a33 -0x3e672275a8773ca8c36014eebf9fb2c6bee4265bc623e3ca83540a003f604ccd -0x720d7bc8b8edcc877b06ef8fd67d741636781aa2b71876a576be557defd8599d -0xeb8830af7f07f0c884705af0d208ce458eb14ecf0fc66e3c116e4faf2e15150b -0x1de9bb8ccae9875702bc9bee9635c00fe092f33e72404e6259d5ea7f0584dd98 -0x653bbd3a1e0e5e962222c27ef7d7758e537834c2255f52c13175edb379dd9777 -0xba0075699a44e2624efc17427d898b4656578dfa7af043b1e88f67dd7891c04b -0x70e586f793f69a1bae3f52c547fa22e7c8104812a137ab44fb256fe54960ed66 -0xdb571dc6f1456a72b3502899ee19df80cae0225bd8e77d5961238e04376c545d -0x8751e2eaf01ae5e6570fabdec49dd1a6b05cbac636a1712ffbe6c4c4204dcafc -0xb9cbf9b3794948bdd94989d506dd97734d6ad517c8a43de13996e40ef8f837f7 -0xecaeab74b47086c8624861fb2e6759b1a4574661f2d695daa120b90b1a38bb5e -0x95b2dc7daaf22303eb62fdf469085fb160c35c7daa949812d0f18da50bf8cb41 -0x2e544d26dc44a4ab664b58e8cea9c93953d3f99bcabbc0a726ea99699fa098a9 -0xe50579bcbb64e610a98d0ca76f87876356684353ea4920dbb5cc3e5f197e0e6c -0xd6b94d46a236898d1f50975f53eab3d92012c10b989b44c547dd7483e412ee0e -0x7788005e9f14078bbb4d28cee396091fd0c3cd7737132cf6ae36d55e648f3eec -0xb96714277e3d78749ef4c52273a666ebd3fd7a360be91363a72eddc72401c9bd -0xddbb2fa1b5ad3a49ef88687b1550be2d69e29b1dac416c6249ae54b518e2a500 -0x6546cdd049de69d151a8bfb42cc98ecb0aa3038052b086a10a7e18f6cfba2230 -0x10acc4586bf5b5fdbafa8c525a8233c97defefe5ec16950d169d5e413c4b4a8a -0x513e481d9b86bb24341aa4606d47c32ba91b9d0f75088c70c0da10d2ec17eb25 -0xf53811112f1196b05663ea68f012ad888f3047bbaba508b3d14b083dbad851c3 -0xbc2aa39c6d07314c6b97a20cb9937798b99fb8975f2c60ff740ce64960a0de36 -0x9b1d21411ac2357dbf1da958b6d802e9b91f3a33a57efbdfa30a59f5bbf4b765 -0xad1d16293b4dd0fc687a21fe753d79e705eec50d34625c67e6dfc399762e9f26 -0x1052a3d20b4e9cf7ad4c8d5345ef67bdc74ea6e999362904021179e94d271826 -0x73dc5712944be9c15d4f255dfa2fcb91d9207fe6a1069b398a719c173c216ca4 -0x488d65733b0e0006356068a7c6401616d9e311f20f60f145b99a5f7f513db9b2 -0xcb7e7bf90b9251f66d63ea0b4faa51a63a7896ef1f8944f633f73035850af0b8 -0xeff60bf365ccf573cd73f19604feb179301e3fedbbb52dbe01a40b1f5f256930 -0x42bbd180bd389a60c65fc5e887c5af4f23c384d80f06782bb2984f897a4dac8f -0xdcd7d4939a88a15b9c6ef19ff5e43c87534dd4cfc83b9e727b0468559872738e -0xa98629d770d76449704233c9c521786de6a96cfd9ffc59918063357c2a253fca -0x53fe4b098bcf1455ff0645d905e0803767c3662388332df7fad12890bca96847 -0x7d1bf9e797f973d1c5111aba8b9f58bde5ab639511191ee0abf4fa8e12b3b0c5 -0x880b3d6b6bf60974af9de888f4aa306b6b4e9b07e2727dd5f2d8809b5f93ca18 -0x86cbb327c2c0cc0edbe94524a6756f27f36b12e20ed8bfa290b0f35c2ce5035c -0xb874ee8b3df0747ae06a5ab01a41258111a3d3c1e63741ddb8cccdbc33534a8c -0x7a844c5d4d8b231e58f7c17601351b6bddf1487e701d4e69e3aa9e4a63294f28 -0x2887d9de227edeb7142ec860dc6f6ec33d21cef8a0e5f00a004bd0e00d61e269 -0x6b9ef02d8c483a44a8c2cbd24aef5e29137ca70c190875cf92f7fc13edc68460 -0xcd128efb3805a87effb1ba9b07c8105b79b28a448cf3f48d971323263741fac7 -0x6746417e8c107aecba67f0b36441e09105da29edacad33e543390450c59d6280 -0xb92e550a64602dfc98bbcd207778c0650971b15f589c3214a4bb9cf379125487 -0x6a59c90cb319a17dfef538654ed9784ff68db2786d39d4a24a4b0307f195e51c -0xfa9cf9c08da58db36161305ee544e9da0a3e4cc9c7c7befa1019cba0cd159396 -0x8d6a3a61cb2fc7fea6300518fbea2e7da4fe66625c7c5f93353c001ba170541b -0x54f58b552d5fe873969e3dca83ceecac08dc895be8e0db6b8acd731b480e6202 -0x4c5f3e2183b94903ebe9fe4fc49e8858de190d5dd3029b0f65593c014c6ad4ec -0x898a3a9c2cd6623c3258037a5d167a94e52561d2d58141117135a725d319f1e5 -0xb543b8cf87f9f3c1134f1914b2d60be01d99dfaca84ea6209e2e1c6de6b04a77 -0x2d0aabd75bc25b88b6e9cfc8bb7f17df1973eaae2350fdfaa658596c3800c947 -0x6e12f23a9b1fe7dad89cb141ad0891376a8f2b887cb809bc9fb5ffac262056e9 -0x93c1a414cccc24e6fe0fc3d8f38b1e5dc02d97e9cb312466f12b7ea08f09e25b -0x186cb0994a61cbb209a5901c02e5c0e3037e262792a86bf636fc29e5380e1971 -0xcecb6de34f141d8d780888bfb362194157c7ae8ae33fc3380ea6ac7fcfe3c5fc -0x4c0b11a78e4642c66f141439293a93b2210ad8db5dff6cfeaf29ebd0a227a841 -0x4d9b2d61bc1163a7353ea5168cbab6048a950653094742f58bf4bee9626e1058 -0x58cf5f32d44729dc003a41e4bcf924321b7ce751a5e2ecf0639ef55353c01997 -0x28f212a17f581233b42fea906b611515c8f2e3ec415545a26999ba5bb123a817 -0x32410375425c5ca31389ba22ef3fc5ed916ee151a8e460ec486546329c6a1f0f -0x4a93355e85f7f0ba2d7a7ec108c6e1703ec3a9a6dee069c4572d12f85fc0aed1 -0xff66884c0758a9a722e927406df15d1086b4c3d06fd939269fe4f8d13d348283 -0xb2058c6923834c39805eeda5caadf6790f3e600e60e75c39693f9c5ecc9d045a -0xc50934c6069fac0137baba5f482d11f2b4e22021f82109baaaa633092ee1cdff -0x991a41cc12ada3e19920ac01863eb88ab7b1abfe71485282c779e50397661c03 -0xe09a21a1885ce35df00e7e3230dd11489afafef3f3bcd74817a027033ee08942 -0x24b8f58349a6308f77c8cbeecf84145b08b08d7fac64fa2bc49688388a989bcf -0xcabd3e8fbf88bb9edbf65a779b227f5f96cb7379eed07a4e7dac9e14755bb5bc -0x17b0f939519601780d37e1669fda26b53f34d39146feb17c772f4d7716bf7f8f -0xd144971ace8d447a8daef6218092197d2944522d3663296b54f5caeec8af61be -0x7b0a6e95e5c228fd01bab0acb6489a0a1ff24ea083f2f130e25fa9966dc4477b -0x04a147f4c9c1ca1c46eb36e52b42f2d837f56794f387eec8ba0169268120ed1d -0x82381c761157c9b67903321122011bae0f78ed4641cfaf348727ee83473ef3f7 -0x6fb071620c0c14aa6f81f7d8c19377c015eecfa78222d5bfe22a154e4a29184a -0xf6fc8ebc1428e84fb8833b5626ddba0ac9c9820611ce2d33920a5f1fdf07ef20 -0x632f9081b42eda414f942b6c6c15c1eb70116c6c61ce05cdc4f9e7b71246aef4 -0x6c1a88de3c9338c944c86b7ecc9cdd551020b367da3b4f433b243751eab65a19 -0x67c1fdb5083e9dde505d7a29582f8a7426c334b2780a97c6c19a7b73aebe43d0 -0x7e509fa650a927c771e2365c65d38609760d66a69dd6b1a8fbc908017a055a4a -0x997f3d809234a9d3cd1791f5ab10b7ffec8197fa3c7b46f059cacd75f5f108e7 -0xae21743ce0cbfb91825112c177b4f87ce537ea73dee60f755da9fd9c739a4246 -0x5d0830681dca8dd3035a7bdd8398dfc8c7e3f4513ca19fb414430f70b124e611 -0x810f8949a798d595c727bce44cbf773ee77ba601cb956154651a0bc1ea95b3c1 -0x9da5b51b249fc5a38a666500824a6648403228930916909991b8fae96cd3fced -0x6a844c8805edda8647274ca68819c1adfa320529db1aa507ce0511683b09a18d -0x2772873c225dd7a7531b12dde03c237889a8ec420893c2656293648f2052b9b9 -0x5be6379b7a139aa49bf9df11b128fc2d8a9dc6f296599d0fe803166f27e98463 -0xb61b770ab2287d060808681c8a1d181e45d1d4e7dca7fbabbcbe73bf87157924 -0x51eddb084cbcdfa38cced71cdca1b8b65f5340151eabf46cd0babefbbf5bf62f -0xe610ffc8337f9e93a1e6724bd398b263040f319f65d92f6e9fd35477284d54f3 -0x9281e6a44360de2fb75f3dbe03ea831b1ede3d9802f62d12e61996999c1e450e -0x027ee4a7bcce26a47366d55493bb54908d5508907c691eeadae2e41058f70319 -0x5ec3679f50cff5e8e3f65fb62d3ea473eca6843b04b982a41e7bc1a8577c7adc -0x5dd2da2b186390680ecf9536f5d8134f407b2a9a7d299d17df222103c0904be8 -0x4f452aa0aebf837cac10f3bb77bd824cc53360f82047533afac2a3e52f3687ee -0xd177250728c32ecb6ac7f248133657640098b99202bb312decc660fe1ec3e60a -0xed7fdc6ba00b4102159ba9127f014b51ee682b9d54293493b0b635df7357a246 -0x6c7e56c0406b96be7eeb44880ec5c25af16ceba8db449151a00809d17376477c -0x5db1f21da72bfc18804016852c6c82c87297b4cf29a901cd455dbd6cde2496e6 -0xd6c3238d31152331f1f00e7080e7c0ae5b964e4a2e1c8bb215d728e46c52b031 -0x16d6f0c94fcfb49097204d7c1bd012685bcadbb7caf360d523875a1b3ebba42a -0xa3205b28c3751f8a0f4a3e4b93046a856c85eeaff9f60ade84efd869ea4bcb4e -0xd3f938f7b6c29774c584e63480167ecff6df6a5a96fd98b8d86e674b1a952f67 -0x3e87c436c6c838416640db327c7c39b1890155461ae9defeb0cefff3d831cda4 -0x6413bc545dfe6281dd5682959a26ae649fff987b278dd6c496a6e9afe6a5599d -0xd1e0c4f2e0f31a70e66ea8797074f901eaab3b45a3c1b482fb2ca19204b20406 -0x42f736ad94528cb03f633c17dd9a13731d7fa41477528da351f4ca6ee2e0b39f -0x71cb0f0e3c6f387ec401e3ae0f876251d6083a1a3c9ae5c37eea644b5595ec3d -0x6081abb27e7cb4bb24d6fef8d4ad6cb8a808964d03796888bf61c8dadafa3d1a -0x7c66d5338614de3fec2ab0d161c0787721ee5008cdef2951f01a92c4cadd8a1a -0xf22e6b4e49295952987d5462bf9d5350c873bec3612ddf2c4c65df4ec02d5f6a -0xb26d20179ea73865581b93e53d1476fb5d039f8d278b5146913906952003c471 -0x948a96b19e39c30ea1ca00d1ee405bcb10b049398234c9b14f9afcdde30c7f77 -0x3adb8356df8e5384ae259814c423941a0fce152016bbbbcb1d29c67de10aee61 -0x6be93c80d1a612f6950b5a26be5b150f455fe1c653f4ab567be4113083bef159 -0xe5d399c269d55fb9b50a7fe7bb1bbc04ec0df273794b969c01997df61f0b2158 -0x1360e7270aa2503d025988feaacbcd748da6203bd599113cc4772a6dc5e20df2 -0xb7cf47cccb4a37d4dbab98473dea23fda591e22118b4ae791f97b3f6a3e76b40 -0x05959c6bf3409f8a537399907e167957b37f25c0d8025e5832487622f88fd4de -0x0ea5364ac841d8a966112a4fb1a225e42e67947f09724371c1fd97ab6f1ccafe -0xf9751cefdc320c87ece7151227fb187fbdde52e8641222d97a51fa59e857e4cb -0x69c35d2b4a5b0fac7bb4bb2d15f14d7d35e4b689bbb7f3dbaf64af1afe5328b4 -0x3171f209d872f19e6116a1f2befa9ede15c6dc05e56eeb86b40a523ac114f25a -0x6006cc01265ff9d7670d96cb31e83cccc814a4918c1673b2029f3d4e50ed85d3 -0xd93c70e051b68b430f7f92e88884a11aa58b90d2f0c3e61bddd05f5bed50040f -0x9680a13fb1f44a9717d10fefed927dbd9d560921fbff89aa0e324e1a0373aa7b -0xeb019c8c97735a82183083386ae6787502e025a08f2d97f9610907c24057ae5b -0x24e78b028aba7919edd1eab51e74e35e421d2a05770f44c361e2f99cbd899542 -0x55e65b552ed252bda70a2e6171aba0c68965fdc4afeb3c3576f43cd5572bd019 -0xacd561ee0f446c4c4d13332a1566fc68841ecfec7726cdd237d70e637a7b6b54 -0xb98adc29fddf8f0b2a6bd315182ec0f9c14be060251c5a7f15bb1de14f1ce3ae -0x30a8f020db4ffcc0c4df181950ff29a12f120f93ec40ed641b6ae6bcb2e6abeb -0xa82e981bc3ff75678c02e1be3bbcf48aed5159ef881f9fb314b0723d7bf94f38 -0xcd04885d66de27d93cf9c475cccd3aa43448d2cde0563b06a62927b4f0c0655d -0x36f258db10e2214ffd4ce7c1791777594eb5f23d5c559ab214f6a24006e59109 -0x5185df682c99306ad1fe986460aee72f588d543b5f8d5fda17fdf36f20eb5320 -0x91a289b8764f98503b48dfcb6092600d45eeaa14b989dadd49f0a43b74ad449f -0x2c9de75456933cdd8aca1409323ce08114dfb06a194ecedbd1df2f02a39dcd45 -0xa6f55e9f8a19b1cb9f4d5bb59af6f49c7899b92f3597f4be52014f7eee7c4fe5 -0xf6cf5e02dd5efc710891918c734274f55855cda77e93e219c30787a15b1cdbcd -0x28956e43f7f545ddfa24a30dd4fc8cf93b71b44ffc972c7026149cc17722b532 -0x606922fda76fc8d4171de4eb67803094b26ca90ee92e3f52bd8cf74c5cb476e2 -0x81c0ead66d250063752a614e1fa2737820804d5b56781f27840a96d74496e969 -0x4765b18e11865259b67bc2b0182a5d41b51938ca87e1a0e96a155a7d6057098e -0x14189825080a12f59644f2b1103c3d8cec56272b7b99f8d99dd86ddcedbc47e2 -0x48272a98bad8dc8182ec92b6045df57dc859ee456725042d2383fa40b475da35 -0xf5dad118cafeeff72f3bb7962cae28df0af2e3f1ce6428ea7f6b6c83d9727ab6 -0x89c2ef7a52af62fc444e373e7d28d8244317f24a315377def1efc53c81aa4dd8 -0x180e5a1718ddee92420f2e1ef3bb3e89e01cd23207dfae21d9419385f5225574 -0x09935d509fb1d00ea980cd462963ca277c4004c324771ca8e0d42ca556de71e8 -0x08a6f5665d74093cb96c48dcf73ccc2dee54610ede46393f777375834d5ed330 -0x6aece91cdc35217f36cbb78241a7962488842c2dc38f4072d78c050fe5135a75 -0x1822148642b80ec0667fe24f6d7cfbe2852ff6ee5b913f5931ff4d5e6857d42b -0x0f71dd6e7882587fbf9a6bb573082d3d844815442efd2afb3e19cf000c4f6ecb -0xe9e013ab2ab30901877d18f045186c39ed897e058405f71cb2d3ebfa75869b73 -0xcf86f3bff33ce898fe1c6ecd11625de292d9249085129ace9e5889e15cb54222 -0x89d8b7b7d53ad02e4cb853acbc485117b32dcd1a17512defc82f4c6243b1f893 -0x0eb2ce66bc14175a6e7f2878818c1499d530b1761a3158267e34d5dea8b4a5a8 -0xc0a5f4cce6fe016a89f0f5953f3dd4b067eb61f01e90b0f541c0d9f4a406a384 -0xafc48add234b64a1c6ebefc3836002fb7036e7ad5a97ce3793a013533739e9c8 -0x8fb7ac90de86b57ebb9e8270f021ffaae8cd06b216868bfee37405faf8e3f3e4 -0x06e60d3af2291669e81efc6001c592b722a926b1b658e03f9713913643be62ab -0xdaa2461651864aa4c34df89b430c1ff2dee247b3625000872ea624f94d0c6bc2 -0xf05aa3967b2216f74d6978edff5c2e04806bc20d6fd273d338d128dd66734634 -0x62a497cf3cc7d9e0b4889e84b7cb1fd10a14f5c491b923638d83985a9915e9ec -0x3ef72f00e2fae2cb38acb677bb06fc8af4227b1a32e0dadb5d679ee16d5944df -0x8e3b98f2d9d907a5c08f2965905c37c196ce1390a44d4c0420401e630fbcf9ac -0x76d93473ac08360fae9ff261bf7e8c2ffdf780e41734fc9a6d2c610cf9e94cf1 -0xe2a596620dbd3bb3580c4925326568e4d799cf6ee2d0a8f2a3683900496fdac6 -0x67704256baafebcb17333225bd4732012ed8337f9e50c3ede8ec9b54f961ca8d -0x3df8a5614b5f51cfdea2ea5b1fb2c2999f96e2ae3163c432d6ed3f66fe6172d0 -0xe4881d09d2e8d794dd550f3c109ce9c8424b265eef1e632a86e8e2fe0f1a6917 -0x2b6af13679550a4f89204f58d6cc7f36a34845002c24361260f3c643f1edbaf9 -0xfbd5da343cd69ded3720db92502ab6e43c2be5955506bcfc9401d258bf67e629 -0xd27b898a5ceaceceadb258fe869470bf2a06d57506621e6fb508c31a0c5c1860 -0x0f7ef354e231d63dc1cb4608e668ccf6b754978d972479292b5bc047892205de -0xa7847f6f6dc30bf2124c86893f4f91354b7e651ca170275495345b2f4d9a7689 -0x0d2dcd3bdbee6eb903a20dc3bb14ec51e78344a3cd728bf1e45a09231a822292 -0x72ea62a39642e2d3218883bf358d67bb05050b0b66727eb8dbd3d26fb665bb8f -0x627a56cbfbdf9cb80cc5b0923e189ef4f39846b7968ea7a7c162b970c85c4401 -0x319c59c298f87cf18101807efbe7f394bfb9967bd0afc13a53018f3f41438b51 -0xdbffd7dc6b805be9790a7ea90e9de25486870a8f9179e0a51e1589a234b41657 -0x0f4b00a6502c4e9d4e586232bc348776bec8bf585320848735443dca07f164ff -0x7eea7756e57e92ec5199537bfb8d86b95b2781c4326649fbceafe933562e213d -0x57082ccb2a34f417d16f0bad938734a626a470439d14aecb5544a4c7bb89cc67 -0xc2ae6f66899a2023b514ac654d67427e47986be949f65866b8c4b86ddb26750c -0x2e7e298397dd06a844869eea267c51f4845cb7a1f6bee252a438e255bc52b00e -0x4ed3186ce0860f9d062749ef0f254d66dec179d7425e0889c341fd65a494b666 -0xa2797740cf66772a7ab5db654a639bff52f25f2d3c1f51c0833acb7a9b42548d -0x147c6eece4ef9fa7c57679e4ca80948b62d07fba91b00822fed74b2538bb0220 -0x078d99a2387517d8bf6ab2fed3dece122f0891a81438c79d179c02a8ef24d7c8 -0xf72906d4dc57f3305f639838f7a85f86f18328541aca5615807d6385cabf1d55 -0x25fa50b9edc6fabf3b3a2428e2008a2ba67f8b62dc9e8d0ae83c9551da2586f8 -0x765ab1aa0546a0d09b11625a58031a7663cdb80d0d80eb8384959407b65097df -0xa928278053fcef23078894242ef32ead4175e0b8e5034a9bf61438930a8928f1 -0x5a7e2022171e2e66b1c70cbf0dbbd9cc8b94e754cc233febd038d468c2c8bdae -0xe8268d6adc5c4cb273c2cde74022c6fc98c79ceeced858e1d3c5e3f4efb2e1bb -0x07272f5022a78187c98b16ab585091f79782d542c5fc9463317d6c22912936ea -0x51a7294bfe2d9ef47930895c77a2741ad10e8ba912fd1e423a3d6bd9f52797c7 -0x021f0bcaf4898dfa3a813b51caca219bcf71c4ccf061051a01b14e24c8d213bf -0x030e373df9fa086f6268c003ec411fa8d74e25e64918289409057e595bc2f0c9 -0xfc61d4a7d44f84b7f2046b057512a396ccde43fa54a7dc2a2104cbddcfc754b4 -0xbb3d42722f6229df860e8a5aa071d4d8aa8bb55bc66ab8183875b72bff9a040b -0x53d965ff2ec51d4793466225a0d5279cfd7336d5835c11e082a4ce0c70552414 -0x3dc5b8c78e30c8726e796ef07e3e278bf36653ef7e48d7b627539e3dd6cbb7af -0x29d10de50dd3debf4040d202fdc23d72c8b9db07b0566d94c9be9373a822aa90 -0x5ede4bc16455641053a35ee7fc0b548477ebd93fe211329e138b1ee093484508 -0x8eddc351528ffad140c34225b46c7d57700f37a8df62025e8983f7e86739c6ac -0xb859b63a7b29a977987023bebe7016c30868345b0fa03b2c1d0533b1fd57fc30 -0x320e60aeffc06f40bf10ebc11776d7c19f6abc6b32c63c76b5beb3da05f40be5 -0xcecfd981e055874bff61b1831a361071fe9182ed41442d5a0de183f4c7540f79 -0xf6a112595f962a3bf806fb21e5106e81f46ad9d6baa92a9ea9157b0ae55eb2a9 -0x092942208ad46834580aba19f3026630c00dfa076e1f4da37e3037b5cc1c8c24 -0x4aa3e6ed842425c5ed7b97d22b8a0a07ba75556f7568ffa8f90e7b1782fa3beb -0x231d7f806c8abc68680ce8c1d4fd65cfbe6ff02a95e9f39af82cad24862efc90 -0x29a67f74d24ecbe05814dc1de098f241041a0345c180e5060783cf31bab32cb1 -0x6e939bf6a58f8dc5c008c7227801ae4149c87e54ec0a9b93ee9cde9f38e86b10 -0xd0c497857114198e0c32b0f8cd426f307821a3b9dc9c86b5441796a392c53e38 -0x976d1e10d0d2b9d5f4d7596fe609461f19adbc7de8bf776f908153bc195f0620 -0xfb909560d7722dded7e6bfe42008a2a9d53c5f7b99e225c4d38f1acd6373f28b -0x5031b819b63c0c7e50b9f6b40c7b1dc5388805268e6801924ead7b319e159821 -0x478373c533b23fbae0a76b9e2780c553352fb9f6e9cb2162cfafd6e7cd9b95e8 -0xf1d01301b4433a1dd618a64ef3a57e0daa7dcf13d52b7ebc5d2872ed7e119d4d -0xc919cb2c7c25f30141146f22e8e72bc26a73fcc0d150502c3ca8e876c2228c96 -0x2e1b346788ae18c1e8656c1ffa0974f9aad006fad249accf35f58abeaa63e16e -0x8323fcb96a188df4e3f51f57f6c4faaa5bff96fb7fb28681fa47101c0bc27620 -0xdb3ef4a0adc04f8926b7505d8658c52279833412bd7a50a30e33ae79636f4d9e -0xc59c9da8bf3a07d32bf2f19da7f874feb56032a1b13dba9a8750683ac3228843 -0x1ca8d94574637d0431deea9ec606b8ab5195700ef1f8f06832cb61f3dd4a0542 -0x2bd6ceceac888b3b4947b5f8a8bb40ac894c2519ca415ada1ff95f08321a0d9b -0x7f51b988783f96a3a7ce77354bb629239958fc85b56c650c2acccfa4cc73ee3c -0xae27c75a5b62eb4592f1a9fd1931026fbbf831877d771a1825f36e0f6f3170b9 -0x78281b7c023af669e9b5c53b52dd0dee3077d4eb0b169fe327c0469a8ff62b80 -0x6c507b0c468469f8868de8deb7cd26ae1d908066f37dd772184a70b5007e9171 -0x58c632e1846bf86d09f584522d9fd2a2420228eacbc19627c80b6c41626a6ed0 -0xa08fa9a3928bebc1b19261867726eb204539ce163d91c7fb3921c1de4977cb7a -0x5261eebeff70454da2403798291f027533a29c033c1e15c5c336730adef64a22 -0x8c590f2ca94219af4d58bb86cce77f60d83765ccf50e1b2133006130391e7a31 -0x762fee61309a253df50a6519ead95772b1f5dd529b6cd17fac467b256a34bac7 -0xd74bf8294232815ed17697035fc49c9d4a1a229c56dac353a8d7b676333e94ca -0xd7cb7300c413e448bd78f5196eafcb6668eb2aba925742aca97ad12702231338 -0x31fe446b4da9e10533badc686b05b2b7076c9114188e3c969fac0b62f633d518 -0xbb964a562eca693c60bc598d1baf39970e69de4c53b52de653089f0d7641b894 -0xcd29878744b3a590bfebbc2efe56fc99f4d4c2e113d04950b11f1a631b431873 -0x92efc7c412baea68533362ed178bc012acf31f243ff797a9763cca99ecdbf08b -0x4467c939cdce929365b6075b40d3771ae2e59239ef6fb59167480ab5098ff170 -0x5cc0f01689d7628484928abb3599aba339c1a0d934ce841d98cd0df6ddc9866a -0xee8e95e3ac03afacf35ab85d8db6dbbed9f213e986c57722c63ebc4a6592c297 -0xa3ac166097765e52f49733439e90c4b40c269d849fb1531328a0b85fc50e3981 -0x938d25d9189ba1d51d9f892667b161a34bb92a30cf7d55c60f24c78f80a654d5 -0x90b1825427998d84c519c58467cb6e794f9535d11136f328544b175df2f9d015 -0xebb7d2f74aa293d515e132cbea910680d14a280d909c58a847dd529ed118e8d6 -0x5f318d52fbbe6f9a30a86d5127021f759a077b8f22895b1d967d2db7a91c378a -0x96d12bf9d7cd76e1b5ba5cdb81b15f50462dbadb4f6d83a50adf78ef650193df -0x0d8f5da87903451391b5921aaccbe5c0502ea02b1d29885d9a76c37536aac616 -0x81d01e7e76fe08a1faf5b227a93c8226faf774ef8c4c3de2c66873f3c7a69a8f -0x0c9913ac637da2d8e4fee8af35432f0ece73b98be0abc8625ead1838e73f6bf2 -0x2f22a200050043b28410d8bbbb4cc16bd8d1588b24c352538a9f38b349dc268b -0x72b6549d528b5e85b953282b4e76a81a5cb55f3a16abe0113b607ed5052100e6 -0xc1e578a7c747d4baaec0e249292db43a9b3e37b987b798496bb8dd746cfee060 -0xed033e7c268ceae2ef881a8fb8e302b96d795b1801928e56da19d99c88577161 -0x6a3153dd358cd3433ba9e05909d113de138e89d1dfcb49ba26688fe6886cd08d -0xd84a1594c8471322fcfa30d6eddba847762fbcb07a11ecca961af9d9fa3342f1 -0x3c3d72bd81ee304c58217d980b6576f9a78fd3f03ff4ee21883c3c84b182b050 -0x22327f1b675df6bcb2b6276204d3cb0fb4ace841bf6058292003b6e308326dad -0xc57a16ce2a0ca577aa0e783892e111b262796286d02dfa0ddd21165e40b1c169 -0xab14f2918d207f3df1e9be1694a85e94fd83e8906477a42ff5960be99a8460de -0x0e797d7f10a3c91b80d439ff2317ec33647c24728fc9019a91508247d7fd1dfc -0x82f5f33d0a1b8e3ecedbef0b10fc5e8318cbd151f5e53846038d1681daab0856 -0x48c60a0dd0c8e5fff568b3a8ab9f0570cbb5497818a6ae414478b3dea2800502 -0xfdf5f6423501cc621f884db17ad0181d6f5b8af3c836e8f0848603a9c8be8fa7 -0x3ba6a91f49da3d43d0b2599d6b25508ea68a2b030af29840c960cca53a26cdc7 -0x5ac73b066f065148cae8e23f90e6521f6daf09a72daff937b73d236d2f9e4f0f -0x570fd0e02cf01cd75b7baa19d3669f94cbc19a2f0fec80c651024e6d7d48e61a -0x591b977c94435cd54d9e1d89b7f465b75e2f1aba35a38f66bef21a845d70c862 -0x7d42752c10c55adac3acaa01653f57cca4e53998916896c4072f5c2eecdd8c63 -0x37aa17e81ea0d7c4cf478796b5d769e63651c0be4fe9300b7893fa6bab527154 -0xf87436f8c5b4da8934c67a05aed9f4cc94f02ebf527b396d33fcda358493dc04 -0xb882125d105d141199cf84b5405c51ee0fd87f7c32fb29a0ce075f0243bf69c3 -0xbec409e398574fd3e642aa52a74eb9668c23a43a05c5cb6a4481e226ca5e285c -0xc9e2ca38983167c3f724c4cf0cecf95a879dfbf47bab31f5a252b98364caf57c -0xcada8bc778bb50406244e693f6d65d93951c5148800ada940c29cff838616bb8 -0xb981f3d218afc605706a304ac2c3257604136f53cb5bc890b46777f6bca54ab8 -0x7c5495a952539a0261871e6ebe904cac402d664f491d9c1a99a118049181dd13 -0xf39d693717a74d7ea3c3b091a98f9ec8c724ce51ec0e0fb4fb329b6287727592 -0xf06d85e00773989467ad8f3dc956ddbdd016f93b0f30fe02ad8ccbc7102935d5 -0x557e882092c241421bc36bce7266a38641f4f96f4e29118f64aab1d15f4c3624 -0xc7eaf79813cd6148166ba14a602d04a2d32b21f1a55198fccd762dccc2db960a -0xffbdb601aa16ce7c4c071119d6d50e6edbfde0ac0f2f59fcb8ac427c9a97b539 -0x6b54bc114b4619d383d2f33c026d8f6ef3eb49f4c93acdfe6b93bb310d666385 -0xe7fedc65e75c391f5d5a7405ae109d39c9ac2256b6ab65c8bf98e9a8ad4241b6 -0x4d1265f5bf6310e1dd187f2060ce667d8dc08c58591660f91a337b570dad6ad6 -0xbe573cdb8680b922dc15e274cfa14bc306c64fc7416d5bcc6e03432e69a48ec7 -0x399517e4bfe35db5441d574a7e71ee542398fd422783264fde3a9703421c1249 -0x36d4e96fe5933ba561f47dc41e747e6a6d2c4b2912163d133f4d3e94affd6adc -0x151840533ce326a61bb2f014c126f98ed8c30ae2c5536d87664c5fc95dff3793 -0xb1c33f04c5ec3b0cb1b814c553db80c35cec695d4d8e602cea3efc01ebc2873c -0x647a45d8c321f566013160f3ea3f0798e327b4ec506c087d76c04ddb2f284b64 -0xaa0111387dbff10fba044480bd22efe3c047f3c2d32268480c277b9c6c4e83f5 -0x8980eea5c2ec31d19fb144a694d545ec90fcf8817106292b601dcfae7853d2fd -0x8308b5f89cdbc536e4eed7db945b355c2c54b43ae869ae997682dad58b420540 -0x3524fce58b8b037b36d03ae473e3ab2ab2211c3b916a4cc09bd3b7fd7b0bbfb3 -0xb61b0ea385d3e912fa22e065a73395a55a3cd2680c7066cafeecb5d4ac6289d1 -0xee0b2a5b20b69e200f33bcdad06ae22b793fa4c9a2195cc6483dd4c874b6e604 -0x51c1f3c837cf816cdcd257f4b61865c2a11f68cbc7beb8c7013f6b1e3b74076d -0x1fa26b8db2359e88bc0f2d0b3e87d6e41fdda8e059ef35dd9768772679fb82b6 -0x3f4d2f1df63ccd0a2aaead1ffe596f58d17d8fa4bf3defa681753ba00cc94f55 -0x304af1c5a3b3b34c919f5d69ce74915731b08659fecd6d432f2f54fd520dad0e -0x52a52a437012b875aadca330efcf8ddb3ade3086dd04301c2d9df44fcd4e10b9 -0x0dccc14b46f24f9e390e81dfa94bbef792a7cada39d686279e1cb458d9a60c5e -0xe468f2b643b7a8b7fa0782ef15bf6ced2ce6f39caf939a2c82f2ac365310611a -0x616234d442e3dc4a191643c00bf14fea02cf17bbe3dfe89e2c899e1ac977474b -0x88e3df0c68763b75606f4727325e6f7fd6c09a50167c3fc06ae978a103d6f9b3 -0x23518baee2f74e2f2e87e72234f252a37ba71a3e123db55b394d8ba18c73b57a -0x3ed5643a586e63f54902a550dfd89855ea52039a63c3479833723b338ab4faec -0x0be9bf38bde52fda754e1a6aba69e38b84b474786c517fe2c730759d4ed17395 -0xcefa8a19e2b6c191b06fc16a1e9b83acae30096f17817c14b51b01d5163c9c92 -0xc7c9d7447665269708fbb6f5be98d9182f04a5d52f1e801bdce7fad140801460 -0x01f1491e5f46ffb90665c6c72b2a06818319dbb281f910cfd66f3889b561872f -0x3e581c4da1a3761cb8918b84134df41fe2df47a5361c4bb66785043decf1f97f -0x9c29929953a7ed083cce61a2aa55df87554e866b4b37ced3d5a52abffb3cac97 -0x596ad0020cc49dfa761d0e17e2ba65ae9db9cfc210f2939a8fd7ccf97a00c579 -0x971071a27185bdca0cf7695e4193538fe2fa3a6208bde6f44af0d8d13d2b91e9 -0x88ad2f91e8b51c1b949c66ea0bab3245d30c9149be96f16f368732d0a25a02ef -0x0f1688321473dafd0cf82b8b23dc394c49b1814bc9fd39dc8fafdf8225b99985 -0x4c082129f3da8056465f8a29277fe2cf82028b7d666ef0f09efe8a3329c6ab5e -0xe664a083b735b3502a3cf0b65dfeab7584de74c74bfbcadb7be84681615c6628 -0x8ef404c66d74c83aeb8e97a59ce6ab8caee52462d066dd4840d8fd399f5d9773 -0x9235b99f3dbd393925d87dd0c4623966ee6f28e3df3b4c0e59d78cdb5805ac2f -0xd658596bcaa921aa314f60ded64a25b2ae76a552e3edba8372d31a14653c3cc7 -0x4b4ebcea340d5a5fe2114ab4edcd946b175c73fb648987e0868097cf668e13fa -0x8f417c002bc05af9aa07270c76b46e3d4ef3c143d1ed1430a479816ba75bd4cb -0xe90ea85e0f178ad4b8c276dc31ed037ae2b13881e062d73b9ac5e2a8dd1e0db6 -0xda8564c87179de86a905dc83b3b92949910c006b1fb12e0b07f416c3bff6a31b -0x1eb03d1bf47d000483afc679e5560034027d35d054a9803c65e0ad84fe6a6d68 -0xa6cb4995ed62bc43dbb3d46462663bb9747c79b6daa92295cbaecedfa097aa43 -0xebe48330993b6ec7361b46bba8a6c00977eb8c3393977cad07ac7ac95f6676f9 -0xae4c90e2add9fcc8327341a85032804571768906d8562a61236dce6fd7f4e541 -0x88e62c205c771a956693c1841e6ca9b255739fb7f3a976bd294f06a9c0e95b0c -0x390f84d30fc480b5b4a4129a2b89829557a9ec51636bf8a2a423eb8beb776d41 -0x849425f7b160bf41cceebfb3f79ab9671ad0e30c7b4f1da0f8dc630eaf0e5775 -0x3c6aa08e127e02bff11f57e00a64f491f9d84e55b90f5a6e6109457bcde0d7ab -0x38543302517f4d6a61355b03cbc8f592a07e9bd967ffbd1906fa8aee27c36f6d -0xafb645b4bf723cc4340034e8bb350ec6b40e3532741a58ce5ad424c1efc6fbe6 -0x069299cd884b516a3cfc5163c6884d39eac626fb05877ee6a42d300bea50eee7 -0xe35c1897e81f5e6092d074db240a64357446ccf55c86e5167e5bf9a2460b955b -0x139d350fbcaf37b37fe675c4e04a2a9ae23c5d0901f53fcd63c621833ba248dc -0xc81a57062a74573822b56a89e02bbb867d1dbd49613d40c88ccb87837a1d68cd -0x73125d6e9ea201df090f03f618bd7fb9bdb04d69a11e9cc585f1bf4438994cc1 -0x45a256ba390f312541dd1c6492c031302f90cb2b90533559c76a6385b49e5bf7 -0x5bfc9b5355c8ebde388cdad34202c4fabb331edf1f73c3d43894bbb368d5a80b -0xb17000e331bdf37b885677a302239631da476627fec38f9cbbdb5c2a89ccdddc -0xc1e04ebf258c8c35b351e819d2e1b3f8bc6c42e3eacecf5a3b761e9a63aeedd1 -0xf1486e11f9bca21cb9c8fee20a7f7c5fc5168bda09e185fb68e81e68c528b59d -0x5f3ec0c0cbfd59b9ddf4eecbffa6798cdbe825a4b32db626525b8fc3d6242594 -0x0dc802aab13b084e624276bb6053992c8e7e8e368d2f0c2999f465d238b797f5 -0x8f2a7f344e273d88fd1925baa88a805fce1e1c5c955fd93396d7db0b48f5f90e -0x10c1d3e303c46405d11a7853bd08e247d3a862b3debce32b289ac86405e21e1e -0x1352acf4497b0827c2c2915ee8300785295ed391a8a54d5279ee069c3b55efad -0x32e5d2dd35711264bbdbf5d4f06503e1a21af5335daf44e48d63690eaed8d977 -0x804f6e7ab734427bd35ccf0ebca1c95a9576096e81767774bd16eebf10f6bb53 -0xa573a4c31ea574423f82536a0cca6bf3898f466023e51cbbde0188c6046a0cfd -0xb13ebe162b67dd48293267cc1677002d6cafc06efeb9486384e1bd9c6af0b2e6 -0x516ad8b6522fa6e9caf6d743e56e61a163b3b995665a42b0472ea35f1afa038b -0x6a5f3d520b9213aa374f1541f10668cf1f3ea054e17d52afa6aa0c3fd60f18fd -0x625090e8e0ed31881a384fb694bf65f4e4f5b55701b346de4078d07b0c3b3fe7 -0x2ec3c4168ab7001ce849e3f431d407b3057d3161bf8c0c92c024742a4689808b -0x5a6dc3fae6f1ddbd2f8afe4796c32d767bef7de3067be24fda1fd7ad0a5cb9b2 -0x2f7e0a58ff64c734e71da8dd05788bd37941d5a123f7c7d7975f39a1fe350396 -0x654ae1cd7bbfb2167c325b3d87569522dcbaf868043f0d0b69f3d74fb601a070 -0xc3d1d8c9210d394f7fec4c564cc9eb4ff1b8cb232866914fd8b6bbaf136e8c4e -0xbcfd130e4cbf21b1878b2a5b986705cdb8b90a89cc70671084a5c3ea0c439f95 -0x08846693c82b7ee85ff0833071427f730ba20928f3399e82ac7292fc28e4997a -0x12d1ccb554116e1bdf6d04dfb925cfec3972b73171a73a2ff0a0f99244276697 -0xb3a5a8febaf43637451f4f69c7cb534288f738a1629fbe55857b933efb5728b0 -0x933b89fe076ee766c96a80c82333c148452219b2f07d65611ca0a254c4cae357 -0xc31a09b636ad7ededc7f92c124949d6cef7d031804ea385f8ee49c37e823722b -0x5dc8cd7e7ffe5b6f35fbde598fb1c5937da04d5cc837f71327e6272d0886bd86 -0x778d68871ea84276aefd910189552f2c79b17e38c7ca75392449d5d7b90aa2f5 -0x194d5c979959d36c377fe70aa4b027dcf2ab91e366bff69b47dc80ca541ea83f -0x60d665a09895591226334a63780b7a4da66f081c7edeadff1417a9ee229642bf -0xd5c4aafa4b36d12e2daa5c652cc6c5f2f0ecb75f04195ec9fd3b1f8a8affa87b -0x7219acba4b32cbdf6ad78ad1300a6e09c0a9c8f7876edd8d82def3cf95efe236 -0xbcc86e36765732d82f05a84addf329cf906f91b72c561d76c1be8d8ac48273e4 -0xf4f422ea329ee0fe9156cf7469d704196b283d872961b7ec1eea48f96341d6fa -0xf4c29197e7ebac2ecf3ce5bbba7e2f52f20836845deed1b6a705f74905fda6e0 -0xe31f773f2750a9b0c24debe3c0291aa09454a60645de709c63df5dba346a044e -0x0890ccbdab6836d833e39c7724ba1e4104d1fb012b5338d97f071107340ad7fb -0x9a424eea529076eb540e79e070b9d7ec9ee306c5af5501f8a81f757ee36352f0 -0x4134911a1a1b91530e76ad50603835fd851f50d86548ee9efa7e11db92e2bea4 -0xd2bd89484cfb6b23f84dfe7ce2060a3b431c187ed63d5734c62e8b9ff35570d7 -0x70a88d4799cfaec117be66b00a6a0db0918af2ab5527bb8d7392ce19a762abbe -0xbaf778dc7ff12e54a1065ab81ad6582577187a857448c89741292be0f36be98e -0x40b9c6e95afda6f938beda39d5832a038fef59cae0bdd52180d60c5f67a33d93 -0x58f0b7e5268f60960875e633693f2f7dd6c4435731174f564206c17f8169688e -0x9acd87082888793a31284823584268df5dbe23a219e6fc865f67f11ba3e8db8f -0x9274b07053019e6593b98d478e7cf1480b6694838bebbe3a53ad09e9ff3608c2 -0x5d4fac827ac9b7aabcb446ee4a1db364b81e37b24e412ef9a58261dd103f5f17 -0xc3226ec68df2f312738f40b0169bcaff6b2280253cfdd7d74d58f6ba79538901 -0xce96d2cbff069bd0a097c4c642b436c9071ac38c7420afa6e188cd536b0fdfc8 -0x178b38c1c8ebe61ea9832d3f77084cd5f75c2ad57067f4c6c811be3e2e5f37b2 -0xe73a207d8f24e1b9c732a716bf5c1b210b14190b92d7be3e0fdfbe3a311764ab -0x76b0d6ac6d8a6c4fd21411d7d8aec9f7443c0e396886f035de4b0a0ea4bccbba -0x0d331196ee7a36b5dc9edae12da484ffc3abc2654509e8736b099c19d3b04670 -0x84f68d58e4324b9f77584486074f53c47dd0c7e688b670e0e2b41cc3263b4547 -0xcad9427eafd12bcd6bbdfd4e37a134ca5b7f5f84b89e59be897df26bef8b577d -0xc31e53e7928efc46ea4c51c50cc406a61bdb3cdcda00a98ff831e3b4b567315a -0x26941de4891654417898e9589997337e9eab2520d5336a206585b323c9677f5e -0x6de943bab467934c789ae8375e665d343748e720ad6f28a5fd136f6805119adf -0xdbd3ca764b096c6613cab2426eb587b36b7092a1daa7bb7c64bd5044573cb229 -0x3e02296b29e9ff1f6195d7330fb7058904a7e69b5ec9d4744508794f67862bae -0x3301110f33cc122d156ede24d11a1081585ba2016aca3c1390b3cb39ddb3079b -0x64885be8bac6b54f0bd6d4e378adc1e41babaeb43e951f88d7d89df484197795 -0x9d4e9a92dd1e6fcfbd43435d87144989a728a94ed77d71960a54c0afd1f4c282 -0x58d991f05fdea936924e7315403eaa0d8bb3801eadd515ba4221b1d521214a99 -0x9fac6b131e3c8969e96f2f3a69b920b7c0fffb21bddbdb47b9ce6eee7fc781ab -0x6d12d56f307bf8c68fb5f5b8e13e414783adce5a74eeb121fb99da506da375cf -0x9df05b8f8bced990c1c2e97bf1cdc1ce0bfa0bfa5fd0824760a483d9632950f7 -0xd93b003b5624d5ba96751ce3ef6200e08b9c252a786518bf1da9b5f68282ec5e -0x07f016f3abe2ba73a7c3021e8c93786e006f019a5ac6c393433e3a2687226603 -0x533fc721b51d0a1c47edf156c7c00db9823ef92461f8ca6bbea03cb1ad1babe4 -0x4df37c4a84bf37880fc655be44c22b645bf2ffbb6aa2111b4875a2d1cb45685c -0xdcebf9ef0884dcad74167a81323e562dcf8914919311ef0096b44a3459a5acd4 -0xa57797f4ddd2aec52dc28533d951c7a7b95f43c2f5ae06c5aa2429cadd379c78 -0x4ea596d39c18385a9c0c2b44649070cbf884106b37afb50dde99c8677e9c441f -0x070d05048d9f011ffa4a1cdaa57dae40851c5e7479b5e3b505bf9e5eab4c4ea0 -0x0f80bae19436674c948e067a0992300a5a2377ef00fb692bc7ec6ba9918a4fd2 -0x4c9d2e39f7e6995a070b26fad3602876f283d1c201e48009fec649e2b5c873d1 -0x2cfbf650a408406c4115f8f72e77945f9b0b2386af28bcd0764fe39dc6973e64 -0x5b032c8b80dc859c7370ee3e07fc66f8a7325c3705d907f3021b52f4ad2d10e0 -0xcd68f7a84421ac7bca542811e963eaeca13c106136f4cd49bd90903d6760e3c9 -0xe29363e5f5d6eb7410b670bccfd6627f77cf34903a0e902b5e6184d82047abd0 -0xca56b61b87c8b9f7fc92428fd67f15b7bc8b62fdbe53cd4a2fa520fb5edc6f13 -0x3010b952577036c57c7078825bd74898ecc2a3261dc863bf7d8becc476cae90e -0xb6777182eb55403f5dcfb007e8b2c03f10db91740ab158980dd6211a92f7adbd -0x234c235818b8b764a3a761a2c49943c151d54f0ad2e940fd081d09f07e8abdc7 -0xf335af803fa25f5d94ce0488f1bd28b19e1bff7822c7212c317f59971a9387a1 -0x87a3354e9c8c68ff6784b1704a128e654547dcae4068da9fe5e97daf14f79918 -0x11ca638356b8a68f5926cab25fc239bef9dc7b8ced36e88d1300e2219dce8ba5 -0xfcd72e81c44d2eb14f1010fbbd2d9a70e184f5f392378b2c15d0ad8e741ebb2e -0x5a133d836692e37b10dc146b919d871559f0183688c965440010db04459a0468 -0x49b01bf2abd29896c28fff3829309b9ab33b870dd42de31f888bad0e12d1ff93 -0xfaa58ca07108264923731d4f32139541fd14c0022ec12db281b00cd36478985f -0xbed99436215ee9e603fa34201676b0d705ae414bab96d7086fce50315066f914 -0x6ab5924e5d8afdef8d23460e7893aaa3ffe0d6f65fd76989c8e24692cb283704 -0x425066f6e3f85d28b8fc55796dba6cbe6b4e3df532d689428259935c3fddd807 -0x9952925d790f7fa1084d6665d3b79185aa48efb2dc323790775d78474e9f78cd -0x4ab94a9f442daa616157766ab6d06650d11e88ddcc1b02bad388e5e49df13eb2 -0xd86531cc036855972dc3028dd6e20d423f60dfe579a46b9c62ebec384ed3d894 -0x447d2670e8879b85bc1942bf8410f466b9de0049301d9853957efb47af7588f5 -0x55f037ad7ccb9d7961a0c58ec39e984317c0e7c7ecd06458589e3f43afb7cd8d -0x6f51039acc58214ff9c0a6fd728fd65cac049e6d5377e5a12bceb76387fd8fc8 -0xc8e6d6f784000ff660222a4b3e75b3a10da186a4e3ff4e8d701d193427e937c7 -0x56e95f420b91c2bc42f60a35e8d1e8566533ac8747df7fe2d8973cd64baf50cc -0xf326af74c22e43904d75283b3e492037345fea511a90f3c9c56e5b0fc41bc946 -0xb1b99f4075560f398b84daeda39e7b8d72574b597a2a4958d16525592339e98f -0xce6425b0fb402bb11e35d6ad3fcceef90906aa99686d93e43ba0b5a8b8c60d7f -0xce580a6b3e5a4159a23d4f3c7d4de2d24d79bfbaf9ba97852b90f9bd53189bd5 -0xd2fd67ba15340b6d72590a2b5ca4875c19be66e000d43d14b5632f60c6686149 -0x0b57268c55ae30c57d8b0bec690cd30592bb8ab36a9b4a20e9ee4d3a8d7012bc -0x9715e5a59e898fc8f0454ea0a45a007171457a80a2c1c7e523fa69e8ee2bc777 -0x15d8f974eece35b897165f4370961e657cac15f906fb8fef981723fe79409166 -0xcbd06e5051efd7d7f6af9421f28f430d769c0cee5ee63ab8f46ff99cc7878e2f -0x16798777991485965cd80f98a707bad4a8adcbbd71504b4b0c79cc8bf44427a6 -0xb4fce4e782f500418d5d8f1dac558a954cb4bede2aba7e1a03d2d173e445d863 -0x4913227503bd47a52fc613e68a96961456b366db1443170409e0569308c7efb7 -0x3c3b8aadd3b3e92b5cfd9f946f4ace6c81425f52c121f528a567d71ad2ec5f09 -0x638cd835fea3697fb1b13cb240f7606dd4e9fa37b0b7c3d8e2484846f89dac08 -0xf7ae8b19761076d845fb6001a012c3ad9a1cf3b2fd62b367772a2b53385ede0e -0x822f0e166d4f66a68b90828effa3dcd7180a7d1841640e63e49e7cd02b216000 -0x32f6a76e6c1c25fb6941f4e4fe3b03dcd2cc3c573d521ecca044f82d1c807935 -0xe06ed297c7bb2c6bc1efca9f74d1da93ee7f158078648b7b56bd45347e3df9f3 -0x84d980c754be4f2ceb8959cfb308cc4ef6da67447be38cbf09c3c23f7b1e3b5a -0x3caf463c0bfcb631da6864bd47bb19352509e9e2d567842068fd0564f176f8be -0x0072d09a4354796dfe845a8760d3dcdcb40c0a32affa4c0e29f601a0cb80ce5f -0xc016f303bb3dc26f0d3d54d13e184ef460784b48c2d49d46e7a6e195b0e3de05 -0x30095de1beea95cb6e9ea5358b168592f3c8739bed84179731598a77306a21a7 -0x26cb41d7647c7e0871a0d8c2cbe62cc4242ce710ff93ccf88094864529095955 -0x9edeeb78efce80ae616ea9c70d2c0156af603e56d8bc8b10661439e1ed917ae9 -0xbf7515849f9092a7bec64b9ee774687eaa4fb8c1ae4c6133b567a09e87466226 -0xd449fc68756beef78aeee8c8954fe34d99100e55c32377cc72894d3fb3a3c6e2 -0xb3035723b530ab6ac33eb601dafa1bb0802c76a1c1cdc5401cebc6c12053bb9b -0xf3012c7578cd86cdac3d2bf01f85cdabe2b97ab5a548af2e4819d1f69cc637e2 -0xeddda675c73e5420badde20058e78bfa28ce10f4c3066a8f668e2df62fef9e0d -0x8d3da6d912078c56524cf93d041095719e64ff5a07393cff25a8184c090f1969 -0x5ec7cf4788bca7016d4b1ebae8a46488bdc088c7eda64566e17f1c103d31a5e4 -0xb6c87ab14c03c382319b1e22097c3dfb69a95d1405c0bd6cdb7f334f4e9e9399 -0xb15ce6028a1fd35b252b94392b08d16c0f54197afc254e2c1f2c7f755b772a2f -0xce4b44232530a58ad1aa4c9231dcb8a32ad5df6798ad80cc447fe9d7a38b59ae -0x32aaacb7c60a71fc822e822d973584ade853cf0df462b3198f8fccbe4a7bbe32 -0x7b8d05c690d815df625ac489b4b717e796df76512511517482cbd4f16a6c6560 -0xa1d5d0a9da47d265d24c8cc1347f2f80dfb5c42dc904465c0d2f9c7821f26b5d -0x2642d675c2b5c828ba446b5eabe96af6af326827d567ee8b7893db55e4e5b989 -0xd124ccbaeaf57ab04c9f5cba66a4bc92c821c44f0ca319ea49565611f69f7cfa -0xfe42b124fcda504a47acf58bb38d2d05a5409be20745e4f851e829754d571732 -0x0a4953498d7f4e002ab941ab7078069f185cf96fa019b3aa063c77fb6d97e8ec -0x0651b342dfa86a10a8b2f144bcb82bbbf390b7b7d38d159c6697454c0c5aaad2 -0x284f1597b818f58ea1dae0e960c8134a9063cc07568ba26c2ba56532b632f23c -0x5dccf3c4b727d59de2209fc34a242fc089b3ed24df8f4950dfc761f667ede9e4 -0x5ee47343815771f152d2c8b0fc63bf8663cbb52d0b5d0432bc6892f591817bf5 -0x6c3516e336f79b646b07eb42cba9e06ad6220e55ba0f7a7f4116f5dd677bbadf -0x309a7a160426d774275a8b24288efd08eb0f1c2c4a0a50c2828c11d9f10f921a -0xf15b7dc63dcd93db8e4248b97c2933310e270e9cb34cbb4f785fea0493141b38 -0x4324dbd49352597cd16962aa8ff5c0d750ec3a6ff283ecc15b1efea493febad1 -0x26a91b57e4939cb867a2a62b804b7a782ea6914bc1c1c4bacdb8233bf0684aa9 -0x7f53c88e9073355d3cf4d88b50fdabad05220b85ecad732d63b18ac1a2e6a0a3 -0x40dfae9bfec143b8c77e0d08e7cf47c5ff76e75af0f771c0592832e8386e5785 -0xa88c21ef95fa25100c6825360046b4ac7b8f47fab62a4ef4a82551a21a8377ea -0xab6925cd9a671bd5129c820372f60dd6e6358392daefee1a08b6ae9eddff24b6 -0x687586f6cd44617cbb7f49acd2a08e015c84bf6ea0d4f53ac246e7e9a142f01d -0x216ed1fd604d0d3b603278e09485ba733227e6495d2491ebe416ee2a19832f59 -0xcb7ae45d4f1cb140e8e4a1e6bc668b7c4a7cc36472c9030b0833d65fd0597d9a -0xb98bf2aaf419aaf2570a22d2475550509672d0496b727d8258fea3ae76668a1d -0xdfae76b2f0f7b4cad6c4c24249330203c5bac8eb38d2f2520e5d1e8ac555f2ab -0xfded25a751e4d9231add8b5b6cd9d9e70aab5c073c77f25692aa2425d7629297 -0x5330705e39441c219508ede4b64a851d636e5aead98029e729768dc70f3e92fd -0x338b1ef23c235753022e1db97148c11e90d494d8555d76a9e29410977d9a52ba -0xa1b4e1123a9f3c1f445754fdd905b49d224a1763348b8c113fe30d1902bbacbb -0x529c8c1e2d187b09a4df16c10dc27aa699ce9c5f8be82b1dfe07384b0adbfc9a -0x25222ea3a851c840c701e9b294b223f37911452455b29dedea8f4f2f5e656926 -0x1435a54fc92811d20f439916c360d1f5d4f22617135d33dc0968ac9ec05e4143 -0x1446da47307a52599ee8a43aa9a6e519f930f881a3d8ac318e2420b7bbb8e6e1 -0xa4d11d0699da7101673540475a4b2b292eed80bf5181bfd540eaac2698da3e0b -0xc2ef988242b4324655041ed0404248c5e6a63118c33a73db294bf02461f0bddc -0xc610064c8e23b58f6119e15e71d8e2b118263b5982b209bb70309e6522b7f23e -0x2558eb9b62f6a928fc95c39867ed03ece070ff047170977f87b15b46f7b1a7dc -0xd97ff7635a88be37a9fe39356764edefd8708732fb32281e96681dc64027b88a -0xbc3484fb66ae8ba360847c1d5eca60e022c2b95caafe9250dff45d84055b6123 -0xef2ffcb77fd93c2f3541dd37d06368a7cfe14c4bc26469fde9afb92f720a1f90 -0x87b675474105f99747ed0ca8b621ce4e491a894b60eb905fc2899100531dab25 -0xf5d5e7418ea5ddef285d6f7ccc4ff433b6ff2f174cd5143381c66834160b70f5 -0xe84fb73c7ca37a2732cdbf196c712e19f2ab4768f57c320432cc16e881fd6107 -0xc7ca24f2858eabe4b95240ff628b42ca4b7a682fe9ea45779f6d1cbb99e09f18 -0xa2f66c5096126fba0a1223a4ee9c5bc298f8313cff4a222ec9fe73aba2bda217 -0x3910257b849b37d50222780517f4ef3b8d1fd301c9aa80f5a1a7f9b42ca038d1 -0x3f35e235787381b096421ccc50ced55e23940b7d2768a78b4acbd2119255e2a9 -0xd526beeb13a11a22004a6333d48b678325f419ad556c46e0baff4aa46457cb50 -0x7c378e52918bf087a021d32791fa2350dbb664fccec4538dfcaeed7f50346853 -0x6644f91e529334c78769fba4e8484684ca4b3837d167639ceee0bab04ef85949 -0x4c58dd6ffd62fe23dc4fe2be0753eb6e659d7332a007836d19c217bafa4d2505 -0x06d8bf2aacc23a193c6f01e44fb0db27884d57b409890ccf2f6e51f2813cd6f8 -0xb98a6458283e70825afe411d1b149c07feb1e35417b57bdd4d097558ca8bb852 -0xc9da9efdcb7210cd83e172095857c73f61e915e98880e5a73514dacb8cec94fb -0x24af907e4153aadd4b03c7a6269099553a396f9ba5c99771c591bbf4d29a1758 -0xcd2b2b733a242cb377b95eaff73e4beb3d32ee21ed7af2f2c5af5ee79e4e7ec4 -0xd691f7c54d3992962119a2a3b514e33b73ed731897bbe6312b304e583787c018 -0xa017e734c2aec1a264f5ad05f614796f8307e7f5481eb96edcb71de7659caccd -0xbaea51dd7655c2235422773878c0a350e2bc73d3d2da2521c47940eb89388d2c -0xd6fccdce57c991ce8b3c78a28a5cdd28e06ca7694290f09b393e6df3c4bc2535 -0x27be796ddfd8145ee1117b4916de9a7d5b9f182a4bbf7bc7f0c98ef5fefb3b2b -0x6467cac44b4044b549c6dc1f279003de6bf0280f851ee21c5c1c672de9af88cf -0x89bc24a533d79a4025ee3c4a7b42d4dcc8ebbda472f8be1933f620e7e3b3c4aa -0xeea5bc8d7a90e98fbb7782d70be829ec19bec68d878479e81b4d0095f473a768 -0x27064173862ef69b981cc303d6b5802379deebe93f3cdcd2e9d57ed2b0a6af2f -0x4d45c09b035bf4a54747b50eb43de360cbaa766b185949e9049e922db273d3c5 -0x206cf7c91811f85d494f4673b799bb844af0f19b1416770cfafce813e1d1095b -0xdd4dffb7651701b72db319ba59f0f648567fd8a4f1b94c71967bff84f5b673ac -0x97cd1b2f1e9e4cbab2287d729d4218c17c507c0250d99db7c58e27312da4c030 -0xac8ec8502155e2e3594965af150eaf9544be751d372426f8e8f26a1860ef4aab -0x871ca65b8d07fef5d02352ec36ed47b952f47220398a1a83b53eb7b7807459a9 -0xc09d8eff3c1dc8827e246f162e0e483b760a8f81480cf1bf88acf86c57ba71ec -0xc7ddec9a5fa3c74d2c6fac07b99f9716555baf4ec21e5e40d4ee63b656583866 -0x198300c561f8d95fe53039e7bd11bc06a2c368507892109e21a6aaf24c7e602f -0x45a7e769dcc05e8caea261ca71561ac2cb760a859f91c09384d4a4917a3576eb -0x9055da8f6663bff8d3be4bf4213e3ebd3ae39c04d375813255b1fd598ea4e954 -0x38830de94fb2491953a9af444cedcac51e8fec0084758f15e6f0467c4afac4dd -0x1de8585c4b63a24508198a88a969680d331b90ffcfe95239f56a335e33345fc9 -0x99945bca541e0ac0580e6ab4e34f293548cff7af665d190d17f564fc1905bec3 -0x73897eea8991aefbbcb2709169e0971a1331ef354ac1d145d7d9da81c1309be8 -0x3b2d772e4c30c462533aa6ce9d958988647ce6a3452d4fe82143dda1f49c5a05 -0x4e9dcb7b3f38f8c5cc1cb9739974f8660788985820f7d4f305411aed27cab250 -0x0be10a0763d4f43afad5f87c25c5ae12cf3805df2bcf5f6cf00329675ff5e005 -0x28291376861c5d0e7143dac6d13f7d1ba8ed4b096289a09d6764692a25eae4a6 -0x99cd1b3b57714ec24142bac6a7611160ce0c140b49a8e8d517cb7bc4721da237 -0xb29d298d9d1022b3bb9a74a6e6e4826b277d5c6f5c48dfeb6495a00da876c146 -0x4315e8beb753c027fedd43a7cf3e587178598058ebf56b99d361ca2393ec42bf -0xe28a5bdc56d31d5b8357ab31cb34e0c30babe0226f0f2589738d7fec794b0d55 -0x0ba05f540aace1b0229f54818998732844e602d85fe73178b23c8cf1e1e14691 -0x38fdddf243a396ac14dd81276a79aeed3f88c964ea71f70afd77279df1a7925a -0x57b5117ea020146243bca748ab3ce6005b33f97bc98fcb7c9b651b74591a2917 -0x2a6beb2e17e8ca5f5ff13a581ea777af519037fed3cd971ead91166c998d8019 -0x24c537832fcea2a0748284ac8b2e1a36c8c508c082e081c7acfd1f4c2eaaceed -0x231f3ec2a04adc0c0e821263168a26f3cf2b3af6cdbf50fcafd5b9f571077ad5 -0xbf61f41fa1df2e1efbb72398a1cbde166baad5926264faa0199beb38e3956478 -0x7f55a445a79c00bcfafd15ef992dbb688182043343d1e7b06bdc5d6f2b30a4db -0xfbe28c8bec3cb8beff9bc4a21fb8aff5ce34106503f031ccf378d66b1f1aa8b5 -0xcecbcc38ef6b9508b1a8d4a75ed0b5d352297ae4a2ad8c2eac71c119dd4d6b84 -0xdba8dbbb17bd45d310cb30a9e906a277326c3d78878a447c50aea2462e6b1255 -0x705750a1d4cb3dc4f3700519f24a89bde1aea5e30bc8c711860af872e3e0da1b -0xa75d990b728a2edbe02e5a8d46a9d109657f3246ebdedeb45bd8d12d294810ac -0x2a54538e7d311f1768865850cfc72434d61bf5964fe0a50e2bf00e96f036c23b -0x0739cbc88f5df7574be87d45401ac93d7264abdfe28d0cce29687b3c8a121a45 -0x0612c4c7ddf1ffbc45608748fcbf3fc2eaf9356672c784f95bb457255fbdad61 -0x9e065e5b003205d11ff29fdeddb79604291a8abd24de99c246f4162bc58d78ba -0xbbb7f02c74b80dc678f25ddadcfb91f6ed804b906904cdc6f1f4724d8e9653d4 -0xb5535d8951ada2f5c0655c94572260eb9072b6c92427994bed355e2241acfb7e -0x341a6444b2e945145da76bc7969143cafefcec8f168c425154f135611fe95458 -0x9fb93a20cdeb45d41d04cc22f4c2d9942d80b19f2d79748946d2e25904e7199b -0xadfce85334328745022138b824e96a07f9c005efde1200427c39d906ca34fdaf -0x8275867758008538f2dbfe044c5706ca30bd80088a669967049e9167a36b9759 -0x880b01c5110795ca238f5068afd7fb4a282221f9778038b2e13df80f3ef2c4e5 -0x57ef57849c150ca02591ebe74849a459420f9a67a37d512e0fd7e51a315da710 -0xe304e7dc4eaf2d950c39db52e5da7d21bc5fa6a7f9237894104c8a13e464d241 -0xc6a4815aa2edf5709961dbcbc87f47948a15570f3d17be2f8c94fee557325838 -0x8e55d24ce1c62c6de99fbd4ffeefd17bd9665ee2424cfbb4a4c6b2fd5a45c8c9 -0x9f4bd1b70920b27a3e55d9b7106166af03836afb696604bdd004dba3faae46e0 -0x3f4ccbc612e3811e8c51dc3b0a4cb53d3a49bc824bd3d5a4e68e6f4ee54f1810 -0xc37e48f422e633b9ad57d19a268b58aff09293379458717ee36de41371a6469c -0x7eab33d4fbeca836c7c80d60072051d05277781283d46147f3c3376a2ed746df -0xa6906df082d6abbd15e1846f238975694be118d1430ed58da68e201a3470c837 -0x10822272168820a0a09bc892519d92e7f2fc6b39cd67d9845d36923d02323013 -0x67250eae457daaa5c00847b74f61153aeefbe2c6b95edea63368d29b721cdade -0x710a22821a3d5eec1dc82bc86d2b3265d238c3f01d87ea54818df64a0312fa27 -0x1515e6a0d1b4a6caad1db97777c838168640e7e1a5cb44d077ae890800c55c1c -0xfd01235819234f20bb4ccef8c352d34d0fef712f56cce49be637188de6ea7ce4 -0x0e28fafeae68bf51ac24c29807fc835c63a001819404016ee7bc2bda2fd6c068 -0x4929c3ea8aacfa380769ba80f0daf2128e7ddfeecf4e815b4f49510afdfc0366 -0xe3d02e2cb0ac8d78d39cacbb08e60c3c7f3a4e0d374d12aa527bbb1afe5953a5 -0x53703bb0af621644ab5a7ae12c91f43843cd8439583c0414adf3f7d24f4b7c6f -0xb5491c80aea2b6b4307ad19638f5a34a9a65c3769fe506ee6aa9a52664af3201 -0xe64805d05e8185e3d3e19a82ef29e377cd6ba88bbcd9a6eb599c3485b1907566 -0x305222b58368f6b00ab0a75a778d89319948450c477c6abae96a1155877f8ef7 -0x65e7c7f11ff599493a6acea69231f94ec8e7799f0e8cf52220ea4a620bed908e -0x432b616ccc973c5e44c805815c1b883518bc07f3e3e68d575766134fa652f273 -0xe7ec24feed2dbc52336336d4e07aba410ff69ebaee7511224d3f771ec34a1748 -0xeccfee23686fc24a8a91ca1b4a87c271b68024d606def000c822bae4b1859820 -0x8f01c004f934bfab1ae35ad88f84c98ff8b0f4e0a8fd999f5b634d1fa0729e85 -0x039415da72a1af9e2f4c9dcc0f1833b3183c4b482304086d66a7904fe9b4c726 -0xe1498c49d05a0d6c2095f957400e4e5428dec7b3ef79ff77f50322c901eea4f6 -0x1ae800d1b9a1903912b7e4b27e1857da5ebf98589096d02e4e80e2a8ed36f4e6 -0xc6b4ddbbb4dad48108f2742325c6c44c9cfcfc13cd707ffde12a494d8425c2c5 -0x708e8b20549ffc9d628bdfc4df38ef0cb65b5837d9d534c15dc169ab44085533 -0x8824796872a188fbbea02c9b21b15b9dd3928fa6ef1959a076a5d7225261f811 -0x90c27b3463a89eed92690dfde2c40adf65f31c47cf042ab9ca73b980864fac7b -0x2165386ee2517675d101be1bf2b7553d4f38a93cc3685ab622359e734b050740 -0x68f916b812fd5d8979855b5f19a67f0249358049b2bd4ebacb570f8921256d7d -0x4ccfd04a931d759f991c9c8975d8a2b2bdb21f77801fbdf3759f78a0c35fc9d9 -0x1675eacb097a38ed13c44c19e82a0d10fddcad0c84bc1223f95b4039b471a173 -0x470d72af3cbc314b65e23c617990ac5b5847bac577fcbe7e19ef81ad7af14c5e -0xcc7ff206be5e632a4d2603d21539eebb578c743bdca1d586ba05d477a0af310e -0x9fa4450ed2cb3377821d69cd6649590b1b2646091a7be909b47ce66684c74f6e -0x8a5532c3d518415f2dd2b690593a26153cbbf030879378cf16041d40a0eddcdb -0x15146bea87659ab64087c8850108db1fe42153dd849f2f33fe3e248919cefa16 -0x74d15489ab5d0a95bf02eed7d2e305619cd062d34dd8f52c2ed1dd08e8cb8d65 -0xee631b1ce3205c1fe762959e3f753a034338bb7817fd29f90261c037b08c71c6 -0xc335f9c641b7430db98e385a46f5efe92cb15d9130f52d94ec8f636d35e7b47f -0x6338a14abefb674715d6e0761a7f384a1d96befb9a70165253ff93ef18f518f6 -0x4d16a98b15595587534883c866ef7a0583f1d8952152517fc9888f0a1aea1d42 -0x9135fab5257758384411e581e98a0f511b2716e577010ebe3f8e713cb2f01a34 -0x2185170a229829c4824f9cb4587ee78be4ad63d5d8a10b279e93c5142ff74904 -0xdfced48d841916aefb89cef42d3821fdabb9e544234ca0aa68fd29eda896af3e -0x3b905bcd3ec04f7ddb8ee7d823c2cfb797f7838a83797cac95f8a3a8cc98179d -0x1eef623590e20e9263fb66c5322ed78f53b9ac56412cd86dc249803a74efb9e1 -0x8ad0e4c8242b5b7a5501af929e8c17a76a1a0d056c69392311d96e5baa534445 -0xeb99a1a3637347a3eaa5b1d219fa22413b442dcae8eead728acd13048d88412f -0xeac9222badcce4865ac9557aec55f5fa9291b476a99fa052c55f1f5587fe2d7b -0x44e464486425340689cc5782a04453c47ccfa91b2df9ce917a601ae7f3b5cb03 -0xf4e868d0755246a63bfef5a8ba651428f8cec652e99e6379adf245b0993ed91e -0xbd60f2644fd1eb901aa49b09f7437d66a3f81c32d202f350a9873d965368dbe9 -0xb9d4909998f3626cdf563514883e493ef5c8847a5d0dddc772e688241895b75c -0x91bb4c128fad26073db09393dc2fe6383c6229f13b00f5ef05fcade2a78985be -0x22fe2f48aa1ac9e186eeee917f3cecf6c4d2d0220d1bf4b8b3318c00a0a90a16 -0x9a8d8c9c889d415ee315374b98a22843fa0159442df2341f00c712140c502d5a -0x5658e2d30f5d7301ec15f3b3d38f399b9964f5f3387a0552116f79d20ae7989d -0x1a3df8c3684f8172f97067451128b6adbb883337fdf523d07eda3fb2b7787df0 -0xc176071b8d99f24dc2baa21b461164fea1b0768f8cc3497e0a083bdf9f3c3834 -0x17de392ff27f17a81cb7e17f1862b600656bbd2cf3dfb2af98522475c108865b -0x5427ae7dadbcde5cbe01e8dc10a7ac26ec6a8dcdf204daf238649d74fcd3712a -0x0aea7f63024249c83a96ac2940fc2977f1fad0f68c44c7ebab064d3a0cf2354f -0x834aa925563c9d9c70009d746aff7b8c4e4881ae8092b5403ae53836eb8ca9b1 -0xf5143965f2521ae20919e2f12c0d03e2a69e7b4af103e8942572d865ef343b89 -0x33b062249f562158580bcce36711259b05ed6ffe4c3824af8f6ffacb958fe8b1 -0x627bb413e918c6ead1fbc859019eea8efb989815a438bfa1d8658286d3dfab44 -0xf8c40132bd105249d6590aaea8ef7dc74cdc7bc176b261fa98561c29a29d2e16 -0xc65181b4e832a59fa5da3a4fce947b1652bdbb445237d7e191951a2c0a23108f -0xe6f96ede2e7cd8f26ea6f1c65575aeff986b1330354c092038f5c62af3ce41fb -0xc67b42acf4432e2fbca28e00db93a87df7468b03454a2ce5bf2659d7d03b942c -0x699debcf91389319aaf1c1d38ae0f343c935e9900435c6e4aafdfcadaad04dc7 -0x69e70d8e05cbbeac5960bcbe691dcc2abe213bff5567d79dfa8f93caf20a2988 -0x3ae63e3278c14652d3a008e29e2c543f4e70c7110634ba1f2330c33b22659812 -0x1cd02f350d1b32a30e9fb7e6e46af00ec950324e4179286ecfca9f854b8a9ec9 -0x95d220de594c7b33615050125b7e10226f8b34f67bc932a3511e2904efd881d3 -0xd9291defad801b51dfc11379e8f0271397b2277a89de3d11bd3e4036ad21c150 -0x8aa6559137133a544d42e25ff83c6e60a71380430b59a23857d6b7e8438a9575 -0xbf15f4685a678e3f16e2add87851d6d2a5683084b6f57f6447fa02f201997ae9 -0x20f2222081cefa43b92685146cc2902d4423dc56fa636dd2c9ed92f12e7f0a00 -0xac39e1180aac3dd0f963d00f7b6f9d47b2446aa63ae71216a81ed6b01c9078cf -0x0c4ffc7da5592ad52c1a581fdae1af151fdbb83c3a439700eaacef9c87172364 -0x6170eeadb5af1cc61706a31164ec14518a8ba85e7024fd0cbb91b0831cae3389 -0x84a9bb746a705ee2456b1722a4e6e7df77ac8bd6eadd5fa10a4a911c1e4541f0 -0x029078d78c38aa8fcf32cc0828eb324dccaf078ac77ca756f5a5cdc6c42948ba -0x1ed34ec97632dd24cf557d0c5ac890845f7d0673f0c1f0afb6d29a2802d5f110 -0xdd6009d9ce6c94ea0f93abf72d06262f9f26fdb08b313868026533cf7d85656d -0x8e6a2747db5f64f5b06c2d97dfc8aa9f950d48c52bb2399a4c304b44c881324c -0x65a637daa74f1d56d9b406e0cfa66109aaced5a647cb043afd205e56dee1a6e3 -0xc5bcbd4614d76d0eb19427d5936a429686ce8ee962fc688844673d9e2f3dd3c9 -0x77bfed4414a4cbaba509e2bc856ac8d27c371f516f3914ba932cbd13970aa18c -0x1fb98364ced40e0f80b8b5ea66a2f9466bb0688ecd68652eb2e78beebe766c33 -0xe51ad020d269d16dae4f6d89fff3f936de3c43cccaf49cc9701f195de80af78f -0xf5d555b23c3a755b3cb83f6b2d90eeb7175dc13535e0fa6db4c60d54aa9d4d12 -0xf821f1a6cf5b612db02a97c5e624c14b95ec1394b27643b212b21e4ecf475228 -0xf09d6df9d0f1853df6e4ba3b69b5b897f5036306aca1cb01b85de1156186d22c -0x1c3fdb1e5de3e224642800737b1c98a72b9004b3399a7dea03803e7133723b7b -0x3e3b8ae94310c2706f0815683fca6153de6b4651b49aacb9685e92d4f1ff52ca -0x662d00e2aaf0222e16e7cb3c0602aa91745b2c51f43e97e487a3360f4c66e636 -0x4621becded61c55079db51956faf76770c42d599e83e1fcc3eb497dbc497cf39 -0x438fabcc78c8a7069469b4e05b4cd56a01f2014b6b5130b738ffde7688892396 -0xa07e31d68725f0c3ac2d431d9f8708089c100073048b425133abe508327c247a -0x3e814cb32811e2d495af7f39d1cba05da2c8f7fce7b2a299c0dc37882a34da3b -0x0e3f83b9e2a4708bfda80a5574a5571551de2e4474b53da9947da8791daecc3d -0x600b90dc01dc1803200664cc53d0b4ddd5affca05dd9b05dff4c1dbc51bfeddb -0x0694bd4a1e8a6388793be68cef72faa1da76522ab75769dfbcafa5c51ae0abb0 -0x78d939c6a3e5b5a0fb58cc8be99d2665550c3b26c7c4184afca1974f05401bbf -0x83cf50c3ed9e19cb3829f4720e94e776dc655516cac38e9514da8994cb381b15 -0x2f49927669f1aae725f97888acd0dff13da494d6a346e0bba53c7f30dd2b0a9d -0x98136790e7e0b598c71fa37e6c8754ce65403574538c3bcc5602ef83f57ac6d3 -0x61436f57569625be2efd6649d93e5e5adc98f1b07b48fea96ad32fa5de05f4b1 -0x14c16947cb531c8f6dc0ca39fc3c9787d62199cce6f76c11536654ce44ced68f -0x5553bd8f119572481dc4c89fc89ea4b20d43ad2480db25d3c65e66e4bc1651da -0x69b55fb49faf873a4c599ec138ea1c4573d9e6d9bc1284ff550e1669f08d0633 -0x10355b13a06699c56c4aafb411db8b7a725d09660d39ae4c42c29c96643e6129 -0x58f4b16d5c0e3f250fbf6cbf628018ca3199d89c67f2af41398ee1e5a2f12cfa -0x3a4e121479d5f93997c86bc911b39a57c277d1789c445076fb487a7f7d88b264 -0xc4e8e79f88b76384ced0e43d7b28456fc2ca4458c0724399c276bde4509cb289 -0x9a54cacf9f131c515b1055678ab03398208aa46f85b8b08fb402707c4960e2fa -0x6e6dc053c9cd006fc1e99144cc5bbf47bc10718bdcfe44459eb98f876296f013 -0x1e954d51644bb4749049dc53a4f026c2d71ad9a2a19e58bfa10e24f9d5723c61 -0xf57326db4da03ad5a93966130ad0dd0c2d5f29e4d9136a0e5958fd79743f66b7 -0x5009544a1296b17b30f5e1f61cc8ed5349d197ca1c53cc1f76e9212bd829b9d8 -0xb388b6c5ddae633a8d394e9ae29ebbc0259dbd9e45076825196619b781919a74 -0x1b01f9b3623afe82b42ffc5703d904abd4f34f49be0bd6229cac41370a2fd3b2 -0x6ba81d96f10cc3de804b20202d67cd1d508adc93217147e769b794dc38e1541f -0x5b46975e06f4ef7fb48b3b9c67789e06718a2f15c01f75ef8f8bc4c653ccbdb5 -0x75152934968846295e97981dbc1bc29398190845cbc1ace75db22efe32955611 -0x630852f97fbd616af14ea679494726fb0ed86a6221169e4400125d0a4b8a6318 -0xf8c6c900152c87d4a975343312d76454ca082881e6f1319de20ac62f03b83ad3 -0x775d42d45670e1b4a3e25b1ea7e44255fac717133fc4a8cdd18a87fe49c1720f -0xa88946dc725cab7ce6c75e87d9e30c0024edb897f50afe819289067cecff566e -0xe0b53d859fe5e495b64dc8c0abb6b5938c78f39ff1ccf326a44fb3b39630612e -0xe95c42a3f63b0a6d30ab8f3f0850fd1be5c1fd2e6521558a1b8c9e34b61f61f5 -0xd7df9cb394dfaf48be201c5e18285d669045f17a9322f52c29862fcdbd246284 -0x23f5a4a7d11533f46cdae08eb2afd80eb44174e0d96bbe3eb3be5aa27413b23f -0x5c9de386c8c929e6893f2cbd772e4e4bf7001781270f873104786bb1711a3baa -0x3f3aca35d89d50a73ae71ea6b669eb06a660d5d8cf88e96e91d4f8dff5aa395c -0xf06fdc127fc8b3a2c617229879187bcdb7a7c8c1e09c581f028e6208995c6775 -0x6cb9ba9fad50b7372d83b808412286e9247e6e7e77d50a6b588a2637e6243e3d -0xf3c09be81070a5bf2ec2472a94210df2f81e8f7d18623faf296150569f15caec -0x30d5307548471a88c2c81fccb15490dce56a6f892e3fb9b4218c7ffc080461f7 -0x0f12b99f91b91bc92f5341451f7608eac3ca11bd84c3e483b540d689116dae7b -0x7a89d59406421a80434d31825a21ea742b296f91f1aca03616545a6e95b66e95 -0x3a97aee82e780c073302264335a3d36a7b1492439656c3503e3728cb61478fdc -0xf058ac2698eeda1c52d0c86f23005ac43aab3933ee48e58bd0bc8e1a4b7a2576 -0x6cfdaa814791403d460414be65664d24b887ac997e7fe05785899df1ef22926e -0xeab8c326921355270128178fdf62c9c45a84712a59ba589db8b458f09a2b9571 -0xf66ca4028e0bcd5a8a538a733a642cc2f098f2a93ebf76167c472206526aaec0 -0xe4a64350578e1819f4240631408b32b53dcaa1c0d946a2e2ad58feb71e63a548 -0x5385706a726cecf5355222d3a18bc34b85b810e9f4bd45cd1a80f573465c1845 -0xdfd1904ad4666f85a4c11b68030825c0674513b87c3021721a963c1e59d02567 -0x81350454b13d537ae50c7be4da150e79b04d0072217975b61a2700e74f631291 -0xaf4e37b02b2dd209dacfedc443de33140ec51f4f9ba7bcf6dd82499df16ee731 -0x7f054d96fc0ab3d3a5d89e6fd5a91775b9a9460e44794a9da1b9ea890337874e -0x7cd1bf8ae8e24d450370090496b69b4edd8f125be23606a902caf6846dacac52 -0x37a0d92142ca095d49cfcb506fde1447bb18dcd80704821a1c7301e964d84b00 -0xdf1993cc5c5c0461e856def3c32d52507fe272bf2de81a9bbf2efdd7b5ebeb19 -0x2ed8e4aeb467bbe0166876efad65fb755f49806fe4b06d93f5215c41931e6377 -0x5dfd075a9045f30606d4e43d89b5af55257d19df7475e5feef50ea3292259446 -0xc3430b144d7b15c3d523c16ed3da8a4f78e0221c8e1b8992259153cadf12b7e9 -0x2fe16a6170e0ac7f2c2842b7edcf66921f703247aa63ddb3a15f13f544abdd9a -0xa1c8e82b91212a0d37a755eb508563c512a82a9623df8cfdbced54427ac4bece -0xcdf2db5ec0d062e15185f972b87e1799cbdea16099b881fb16c6760456052865 -0xeb0a85b72aae295c5ef068ad4c7e6cc1f10039bda08887afa67b7ebaa55dade8 -0x3d01e38ea6d7cdba192342e6bba7f7425bc7f25cbee046a4b431928147b187f2 -0xb18be0ee31a76da39cd86bd757d326eecdccdfa6b4f7f7615ef81f67b0e11f9e -0xebe96f5a89f7a5ab367f1313830bf8c8227b0843e760725c90a3f86906ba14a9 -0x57b960118e8e0f9501fef3f3f1ccffcc427687cb6506194e6201d11bdc0cb61e -0x05b7b800fc5da1c871d74dec4a8c375f86b6ed95574bf19dfed2e945aba69720 -0x92234f3a4e4b7c407511ff7c0efa958d2b2f32b35ac06abf669c9ba1e3ea2d2f -0x0e15b1c3cc6450b23a8342812d7e65af377582eecc25d4e7976d0b83ff049c9f -0x4aeb752c64ec73b9e03db48630150e56a54fea19c518b78945728a75b2d05c6c -0x3faa018ce6d20d72ddc17ea642c7833c8e6f9d8014bb1308815ff8c90af614e2 -0x268613302e0ee8d22959b9734ac9eeefeb369c7cbc3c79a52e55ef57221d9593 -0xd1135a0790d601c5b504e799a091622eb58e8e65534ca1a0bd5f7da63663ac95 -0x74ad07f38235448dd513ea38140a6ca381db7a2c5343e2705e2aca43e83d9d72 -0xcad406d8dc329ff33b96a5506a8f369f2e0e8cd7101db8987ceb83c287592447 -0x2aed583bfb435cb14b73f32d6fc6da7ec6c404daec23496ebfcb0188fb3bfae9 -0x68e1a4ab8cd0f6afe570dfa1b6b4339e4b236638a91a8699ce16f21a476487d2 -0x3b7b405b5802b95179244a4fe3c43325fa4bb25b6c8215bb22afffee7ef2925f -0x9f7cb8b7270604517899c1d63ec1234356d22b71243f271e27810ad8c6e7f6ac -0xac468bebea5de6adff54acfcde03a2b2b22afe83a699243977de9bb83e6a4080 -0x59cf359acca978ba928a552aa4658efc8a6b121252c008aec442d4a52cfb1d98 -0x8f55176911fe2cf1c76f8e605408bd7d897a3c5017bcb18addfd529edd1b281a -0x4df2fdb89d126b3438568f72da151729e78d31a5e3357feaa42d9c123c62f99f -0x1a4f1327943438a927ad327353424b67f6270d8df0b9eb916bd3e3b6f92f83ca -0x762f38e2d7b22a4c65354a91309967c42b087ee9967b9ef1b92b9b27ef058399 -0x31820e8eef8ed671f07f8a2a311e7c01526da811306decf46bd0011d2df803b7 -0x8acb07a56993f6b3d34b54df257c6f9bd4c70f25ec1d69e1b0ed623f67e0316a -0x88eef84d00f4b850b96480a6dc15d7a5ffdaecad58fbccaa4796f06531484ae0 -0x261b09a867d944ecfa5eef8cc72524e107ce0960a6259cf3dcd037c210129b8d -0x7c2c775b372e7d024a80652fcba5dfa2ce7ecb00633d1a9d339e38fcdf04d55f -0x43d87cc2beedcf11f75773b41378b5ec3c06386373c4e64f507e5c18bea97486 -0xc8c6a4f21158256cebb25186a017d72ed38bd550253c39c5b81ed1938c144924 -0x8c074130fa5c5b9eeb8bcf64fd999a2a3c9d7267ce5b14d02291eadc71678a69 -0x5349787c330fbbebab2aa10ace4d53363819bcebc19adea1563ddbffec052a60 -0x57d27a3f8c925b85907a8686a3889e0055d1d75ae48a683f14e5ccf97979410a -0x48adb78002dfd77f1d5ca368d7237dfe0e50cd52d76c238f49a4fa170c8bba46 -0x15dd83648050df97a4eb5c6f507051df0e5d88878a12f20666bcc5309a4e7129 -0x2f26dc82675837bf5d3684a5f3975969ab9db0caf269635f39211133ab68d587 -0xc583bcaf36ab82fc65f585e902ebb4c1d7b95857c3fe7b0deee9809e98f3807e -0x8be796d3b92ec4c7eeab13e586ca2a15db927c3d62ff22816a97a74237b77256 -0xaeb3ecfed0ddb4a72e0b27e57537853fc3de8df325d1e41cde39ee14103f8ce0 -0x50aa49926495dc7d2a11b5d4f7d976c6919bc17d9f7fffbb8aa7662e94500a68 -0xa920678a708cf5de1a80a7d629f353ffd9eb634efa106861caefdf655a6fd57f -0xe456b9891e1be2302177744d119e7d542ae3a5daa8e341a8e6d027f4abbe0952 -0xbdb91aca640460812afe9aee2ff52eee031656fa09a0b0e24f8fc2cfe61fb924 -0xfa97484fd23aff30b0f36b160725cb6e0b75dbb0641e97dde0329298e04055c8 -0x42dbd3fa0b43619b0dbb867ef035721b00eaa42cb3b4096a1656e29bf3f4000c -0x16f26a6a3f0f9ce4c19fd0d6bd71988a603d8aa3f577444dec289e6d3c5d377e -0x6d22f19cf194873e916d2fd2ebadd37fbfee376bbacb0471506054328725434c -0x22965cdda636b2a90534ddabed1dfe2fba61b5885f373ac2d3a1540ef9cc86c0 -0x14894bec1cdd85412b92383d15fd816b3eeaf19a53ca4a8cea4f2934ab46680e -0x3157e13d6d16a971dd7935fbfadbded4b8015f88fef4f7e74acab48e943c70a4 -0x7aff70db84be960812f58829501a8e41bc554fab874ae8169378211b8dcc47e1 -0xa1a13ea8078a776afc627ea883a8623d6b87048143d4a850ab76d9193245e828 -0xd302acbaef3b7da7b77fc1f2337eeca965ed3e92d1cb7d011ac6ccfcfed00ac3 -0x0af1205b137842191404ed573e3279e4e4573db51949e384e48f936511de339f -0xc0ab178b67baee145ce617260d22e40039eafc6a5162e17e4c5cac7f6c0e17a7 -0xd99dcb64d2f315d36878e2086640d8c5a7c5c3fc52a889dcbceda527fe487f73 -0x54aeb38466a436025bdecbcbe6c6e1e8da45231b0645859109e2e69c44ae8b2d -0x74b496cd7a23e43b5343ff1595789235e4a5d0372bf126b461930387ad9be714 -0x6b01a249c1921045315b935e80fddbbbd118ba01433125557d8889a2d9da8da5 -0xc72a450321489435833730d113c30c04b8e10f564c9f832808c4e68b2b08e34a -0x2a63171b5a7da8ae249c15cf29ed9149a9e526e75d2c463b9fdc9fb77c9ad329 -0x4c00b31603e758a245c845025128f6da43d20e8fb6ccb282e0d8d9f41b4cf09d -0x88b11000c0f193db081b9b19a6aa74f8ee203d397f37fd64cb8dda208cf06d5e -0x0d53f7f994473515acc2aa14b183f75819966a5b4cf86ab53687c4606e85d2f2 -0x9c615c48879ee422c7a5fd022449486698dc016e31df71d29dc35a266139246a -0xcb241e910404a72c0cd06fea5c4cb49ffbcdc79eabd0d4cfd9e258bdd4dfa6ec -0x1d1af1c19422282219c6980d2e3fc7a6117d6c2d39b39892a8c194b725fc39c0 -0x79224755ededf7bc9773404f7d512954675253f75f86e314c282e8c96b4f8d15 -0x5d9781954ccac5af503fd818c7c6f59eb35a76b8d0b963362e13a2b77eb0def8 -0x1e90d7d4ec6399bb83b0b32810dc385cc72c3fe2fc6efc8dba9c89d95ab8e62d -0xb071ba4e5267aa659d4f28c2891e093bd07e41fb64e2a9f5fe137f4f9daa873f -0x1c4e20878eeb0150e70abcf9f54ee189f37bfc2c7c421327862074c905303449 -0xb7c52e4136ae8667c194b7b4bc961f2e913ffa14702dc31d2ac3f81dc9bbe995 -0x438178c6460970dd862c6b9e7ca82bcc0d3d1d7439d8b52a8fc3b8f3ac268b6f -0xcd57b9bdbf0247dd727c815c9248585afb6d235aa9688c61502c8c98eea34a73 -0xfcf4bceeead588fc385b88f4cdce0418f19e28c8c91ad403fe2f0e45c2fc2f48 -0xf84bdf48603c06031bd102392321652a069d63ae43602230a1b9b974826f40a1 -0xacebbef9dcb36387618f9adf81c06c500a793279489f2f76d7da195a40e124af -0xc0c81c27a6b64cbfe26363bbd4e0ed24710a7b19a9955402a4c3a0960472e142 -0x2ba2a6b5768115348d2da1af66381bbe2a2362d4891685ac9d3250dc76b801d0 -0x40c07b8c513334ba90b93b939677a22ca4d1dbd848f18538d740c706361a31d4 -0xdeb8db4f22eb9dd7895408e96dad121b4625959a4c6ef5af46466f095857600b -0x0b8e87883474747f6e581f95a8375b2d52805455b7e56292344adc31a07cfb21 -0x134b4dde07fa94844e690f1de1f7efbfc227ee236febbc431cd139f00c0a61ba -0x8afed7358a41cbd13849dada1da3c370e04c48864d1e7d645e2bcf92ec5efe37 -0x34eaabdc0d7da15b3b7f775df557d01523a0a1c46facca013c5a5922c11496d6 -0x91b9f12c47a04bd4754e886c42d7cfbbb072d1da5650c3c3681fbcb5f66f088a -0xd80f9fdd3730ca96f718c8a06a057a89df70cd427264a90d26b026a0c9f8e1b0 -0xf8690470aaca4c56806987281dbe106a2089a370a3f88528372aa5193938f3b9 -0x314944e11788027a26d92447cee84c26d11fcea7227ef2cbf2a2a4ab52fa4569 -0x2659c044c759f0269fe69e8656293d8093111de6fcba70142adf8849214bd507 -0x800915ffeac75addab6b713039db555c379817f486e16465c90cbc2a9153053f -0xa8271beee3ee7164f496e94d6813cb56ce3fdc3b6384fb1c09dd70f9301cdd43 -0x9db09179a5beec5d9c212d24ab58d64e361198c3746c57fd4a1ae2fbde038366 -0x891fb5c02b52afad2d712ec5e9ddc602193ae404b66b97440bf0e0fb3243835c -0xa4e0424d40e5bd819e247beb450ab6ef575ea2633d575961eaa20d70e4b4b376 -0xce80cef88fa13c092d2f29bf91516a2eb86f1ff34b07e8bc76f3d8d50b911619 -0x5a4774579d6e14d413536bfeb73ef6f2e89324cb497d06bd73cb5359c229f088 -0x6eb7ab02012591651731999d3a86bf21062f5c9a426057e17e4b8ec6274f2885 -0x7db9c8e417eb5e9fddc6119a10e361ad45a4dd2040fd2ebe1d51fd8ca390a1e3 -0x5cb69894c56e04b6e2b41cb5b5f9530970874ea0461f32694f0be6af912f2a54 -0xa736bdba9a85b831c8751ac1615ab0e55b0b97a89eeb663803d2014c930b2c6b -0x3031189eee740d60b681a0688a977050154f123bf54a6e52471ec820e11cb5a2 -0xb1f34c9c678baf2a9906373e80e2f443e59d0fe5c16f293b2c5a60b8b25cbba5 -0xe99213af78d28b177bc9586f2da01bd53773014f28bcc59f6ae8b9f98e501169 -0x2a82d3ecc15efb9381fc5c0d013821a963d32021aa37252a12db4b6d4a5e2965 -0x64808a7f6846112b5ca8a395ceb12137bd40ff0efb04bd02c85ac5b7fc4b7f38 -0x8aac9a551a59e4398d63d926b89154ce59b53f56a6175927cf29c1b3dfe17330 -0xfcc42ee4ed9b264bfb248b3ca73bf87f9a08c7f024f3f564b2260af523cfb6c4 -0x1fc96800a2722f0bcdea5d016e7223a45fff5df6b74f06af94d688dfd260d9eb -0x0b6738af912988d14c5873f69b8ed86d2b1c9268a19ebf7d610ae1d5d331938c -0xb64e635daadb738cebaf4845e2571dc974a21d726a6335d63c7e302f6671be61 -0x80a965d7cee7835aafbfe6aa06e9f37c872ee17a286086f2744841d717a55b95 -0xfca853a6571deed56f92ebf61c58b7a6da9698aed3c881c824fac6446e245f78 -0x78bf7578632943176f1b2b295fb2205340397d94b62718be6ac1260d3b65dfc5 -0xe2f3f01d523e7f517806fd2050b73c9d6236f38e860e648bd315981f54685e4f -0xd282782f4052aaad3131a3a2196afb3ac0282fab627eeca25fb229be1d0e28a2 -0xd51738e4d1f6986a0ad79c8b9c7a3f21064e006a444d0d17e1ea6ac92f15d94f -0xc3a464e299288d0a0f7d7f522350d8d8074606edc7e200b997b5959000bb6c5e -0x4a13b8cdc131465b36ab6cba751d5fbdb6da7bb5ea77afe116a2bbfcbef32bb9 -0x542e5b10aca69017baff78977ee912f02936902afe30f1d7618c68d36a462563 -0x8db686a9ef8965bb3b0cc4378c29acebb7cf3b4ea2eb38605b35b2d4e0f4d2b8 -0x5c48221d5e6facb035789359a278d028ac0276022eda6dbb1b6138d319c96e96 -0x7d980300956598a0103305c47e6e30040b5c96e6a1ce5d469188a8374589f1e1 -0xa5aa0e6c58419b43e490d8d51fdcac13c45c0e3b5b1c554369552a0877bbebe8 -0xa230dc2809e34191a1d15451ac3ce46f7085cd22e88baef072b3717bd6c3dea1 -0x0556903c89025df6ec56ae58e09b94480c19f34928b3485c4e05af811a68a4e1 -0x6fa1ecdc7300587d154f2c041cfec89afa14b9259171b877e4d47c115d48f79c -0xbe6771285a2ab7c63c26dc54e815635d2f078423c62cfa2a246f93d0353670ae -0x987ab6c1ed3ddf757f3f2287de9d3deb7d292661414f0a40db56d33ca6319b58 -0xef63cb03f53d2f4a2f8572a39d4bfceb1d7c07d7f6f6889f345fb17af54cccb9 -0xf6f724ad0ea813e745ee137794c20251339096d0a89e4cd77b51977981b4695b -0x1db0a9851f5c2261e25e115cc60ce858fc98b8e2a5dbaffe66af3b5098bbd76a -0xdb73b185a7d66771752e7a0a5126d0892579b40a3fad5eac9d72086007eab433 -0x186927ddb7b6f23fcd722b316bed5dedff707383ff8e2c6321c24c158d176e1c -0x3b84e949db1c81a11bd381e466ff3dff0fd5cad3fee11f4382b006c7c5c1c808 -0x5801bfdfe2fc9b75052e1727126d3b0218ba84146b3c1dd7b98ef199eae1c1a2 -0x6077bc10f34825cab6ca4d30b5225a5298ebf1c449d4b9fc66d461ae6ad54342 -0x16c852c471cdb3bfc4cfefa2bd54437ee3eab2c956a576b42b32e001b3539811 -0x8646dd61be0e14e785f1fe9e14755675d1e1e6ab71e12fcc5e90378f68e3d944 -0x27931a180e10db617a57e7a378718763edfb6d987c9142dd6c1538c937c6bc8c -0x64f7de4e7a97b0a76eb97809dd3b89bc3dcb2f9ae3c5f3926ba0221d918ea23e -0xd6c1d3e4d2c54c7b024fe8b5f586a40d879391f250618a2bde3512d24d33c20d -0xb159471b7912814f1bc7268b0db5a7bf4b0b21003ac460f89517133b2bb2989f -0x7fbdd8bdb7b627983c86d73976a7b75b4e8955513f829242b797e0e3b8f6503f -0x7c4d3e6ce95d49514668e24dec23be222f92f671bc8c784335495aa75650901a -0x8bff58294269c76d763f10c834c5cdc475e331903c0b9bbfec58cfa1be8bd48f -0xf812fd626ecd94fad2a427f75309b4d8519c6e1f54f4aafd97b31bd82a2b7cea -0x7fe9bf11ef715ba9b2986d66cec48d6be353c1ebb6c53502ec3359b03e814194 -0x47eff13c692a25f2f280683d01898a8a69d6b5454c71a4e4449fa48cb751bf0f -0x636d0de17c308bb181481df85009243d50a172da002b35612970edd787721334 -0xeb3f0b745454e74971fc657f5d111e15213a03be0dd6ade29468b35ca9bad138 -0x0766c61f2498b331e8cbee29630ec93f481948056c02a256fb33d9f320e6f844 -0x95ee31dad55c9fb31300b5fae9e5ad26f85252fd13151f11f710a1b5da08bd51 -0x3c402ae716571ef9100a38b332b1955de05938088f0380f557eec905456c5a98 -0xfc6bb933c1ae97a8a62364df22a5308fe4dfcdf7b50cd4f0a885689d3753b7a2 -0x4828e4c2eb7c4c3507cd92f62cb3e6d40b252ddd6178a5f0ead4bf51aa6e5aeb -0x80a14b6431cdd2e76b04648b5772983779f29f66c0af4362503ff6ee567cfc5d -0x6217f9aba4a336f55e920d693ea974ee47705bbd53a9834c93465623588d4b9c -0x07ee7bb5885b5e436e74d6efcfeab7480ad58f66f155e4225fddfc93d8f7cf55 -0x9f6ab39bbc097f00f683bbfa80463063a5a703224bfe9f548e28071193049247 -0xd8096127e6c3b6b4d64dd4e48f9abf5ff22a1eb3b87d5fd0ea98bb0655ce89d7 -0xad3f213755d2e48e62d7aa9325ee730c06ec42a718a7133ca43fa59fe4932747 -0xe82a8fbb6e9f1938de30395d229043851cc6aa9e9939daf163397a3baad2fc65 -0x6b0a37db27bc6c2ef6281a9a4ef9cce6428247c7eea805f9033136e8bc20bfdb -0xa8bd90fe2c1a069cdf02571fe44165450e277479b956c1f689e1b79fbc04e294 -0x3e1cc5de0f56c075ba0f518ca8445389bc09dced71efeed94b1503f2f7a67046 -0xea1ff07adf1f11e62e7027a4fd636f4b53b80ef9ff65ccd6bf288bcae1753eb3 -0x4aa5da2fb9c4deac9c9ad21fc99f27a48457f46871b18c86c60e76e0d21d4619 -0x83ea5b325831646698ec885e5784293e0659e6b3b901e2b74b314f5868e10c6c -0x576cce5badbb43922fdcb0582b2831a88d352c45bccae6e72b4cad90d527b9a5 -0xa9973704e37496d79dc36635e4ecdc107aa497e75f54c83f6fe5a03c7885fc1e -0x4f36b9e2c03fde0f713bb4bd90d81a26ee12f508cba4b18446cf5102b6225b8a -0xa426c132d393731cb8845545d01ade4f34b6e90c21de461e8ee0b5008883d771 -0x0f306e2af157208f588c6640468eb87b22090d290d5fb9135325eeb2ad386bcb -0x9aaf7c5cee07061ec7988fc811658e3f8edb55f30a9f4a9cc0163eef97b0453c -0xdcbe0127143f9c6b42c0bba670ba4e098476bc372a5d1bb66ef6f15645cee74b -0x0a9e5398f0e9f9fb2d8e59c4fbd8d0a8bcdf4deb109f68bb3b13c901c323404c -0x90b19836203c69b412d928698852876d4af1d7be206e5d08e19f75f748cdcbe6 -0xf01feff24f16660027e40fc785575c91bdd8aa1014502fa8c44519c2bd59fb09 -0x051293692977961232c822e781228cdfcc757f3ceeb046d57d843bd438ef1caa -0x63e5d1a81ea7e949eaecfa7488727c430dbee7d41ab2c81bba73504766d877ee -0xb114d85baa195591185bba1de160a562558d884615b5661079ad568ebbcdc6a8 -0x51592b27d95f3b052332936c9cc6f72903de21bffa661ac66d8cd4047f31ad5e -0xb1f081b7c5e44dedb94d19da8398507cda7ed133fcdba06f6970cce7e073ba92 -0x0edb6d7c8ca866fdea164c75d920ab66e227a2a1db3b2faf93d20a71c513a326 -0x037b6b1ee8eabc9e8be29e69d27936ef6ecc7d00bde3780cc3d4d97ca5caecca -0x97df3245959707139b3bb81579765531b2fc866641cd468b50b15aae5e8b2f36 -0xe6b158ff1f5429d6e2b1f9c5378e04c7cf2febdb9a65872f754bb9288b458408 -0xad1280fbc41e1ef2b2c69818129f87ae80e2bad1d13acf217a4c9a2d62ee05c4 -0xdb68a6d4b788648b96a24858efcdf5aea16b01969a5c86911345d9ec316ec246 -0x37072acca2ec14b97a31106f3c19e904ae1a8b35151f86d898f50e94bfa53b60 -0x56b208139281db7da942ce3e461b103ac69c92bc5a5427768a3c9ff96705a38b -0x5b74a359f9ac7bcde1dddec201537564786697c4cb1d4830fe0ecaf6f2479228 -0xe7b931734aefdb240a7cd0565bce301e86d0037bcabfb87ad2335a38a6c7bc4c -0xff983fd19d358453b5e603513c29d287aa09419d8be2ae6c6a7b3fef69d0f7a6 -0x53e12356cbd61720bf7ea9fdd486b85e3cf8994d3926f9a12667fcc9c38adf55 -0xdde946192145f7121c7830c2370f170c35ad08ef92a2a76aa16eee727ebceade -0x4adbac9568c6f4cacf8785c90852e4c58cdfbf89a4bb8636875415f32e41c239 -0x3b0ef8dbb53cc38c4b3b312e9f36795fbca3a7fa6d7c91f2b35e91f04ebac097 -0x0400997a11cd1079968d54690d8bd266d1f23cdbbcc4245ebdafae96f237ce6c -0x15c074359bb57c1c292c456c3ef09e200f1a4d6e7744544a089049df0c5affe5 -0xa739dcf7eaeef2130bbf2a07bd11ef11c45997f1e1a8b289cf1c3aba63371615 -0xaca249dc9a83040d656878f45aad63b32a3c657ca51156096e81259784d44826 -0x60926c8bf9718143411fc8de6d3303f506fa09e2c84b19a92543afa5a55a2cf6 -0x4ea32fbf1cf2a9f6f380f2070e211bb7a9909f42987323624ca435e379adec4c -0x65929f838e4b8ee355a0f5d4fa2afdb38bc280a03f9285d62e6f5dbe7fa60994 -0x1ab76b55443db3a32c884ebd9d6c8173ba2b15d69677227c4b33a41f7d2aa253 -0x8f07b5c22510670e019a3518b7516de4f11648a320088067683dc8d2faceaec9 -0xfbe8ed4bf17849c27942c46afde0d44ce311439da6f19719150d3300340fb92f -0xaaaaee471b21d88b9d34a2800cfa9c7c25d1c612c7db73d87d020d707eca81ac -0x524e108d87389e2b4eb2fb7bdc78cf9b47d548592b1da9865979070d34a84480 -0x8182996d30c3140d90ed5733d24f6434446ae1f884aa9ab8f0a21493543fac20 -0x7e6dcc8062af16dd9112d0b3edeed4a9e448ad6dd73a8759845708e950d3a5ef -0x4d49a9d703fd6e6da57ba2ef991e86d6cac2556bc932c9a260bc45daf123334f -0x3124b7c7e5a2ace07991b6091430d5e2564929f2537545357edea0838c405ab1 -0x9e8165b3a47ed6d42e2a9c8bb239a33ccff66a5c58c3da12dfddbac92ccbeac6 -0xd6b7c799de2fd2933693bb812256ddf1cee408e79b5d892e32561b712cc69d3e -0x113f601af578856678aeead91ae1783418e088974db9704b8f2a88b8ce9935bf -0xbd6dda28fb36d69c72f974765e69aa0b3f3af2843fed679ef9d899f44cada59f -0x728223fdf1450fdc02dbe0aff99687bbcc738cfbe7cbb811bb7f64e6a9e2e310 -0xb68666278b4d7855dfc7eeb25535a3c7393e4e005aceff6d6468fecc6a43a050 -0x060215aa799d0c8fb9409938cb6e18ce2ddec695c8a07807ed0cf571346867fb -0x6cbe375468ee1be8028d0ad2c3e375dc73993f6eb0bdb126761cf50a9b48b8b6 -0x6f7ff36a576d7b4c1952f67cfa488836e5ed5457e03eb094e326be46453a1e6b -0x1335c5d8019b788eda4664c3000065c371aa9bbdb0a57db9796ec1c88845aa8c -0xe271c0adc29e80968e8973dd9299d1770233e2cc13662be65a172bca27ddc842 -0xa2af550100f8773c7153d9481bc02773e196c3a751628cbad683e986bf76ffc2 -0x6180ce31b0c43d8e9241517c8f7e13383d9bbf4770f59787cb5bdfa3d072a76d -0x91d31ae5d08dfa8b10dde38a33fbfecb3a7629fb9ad65f83a32ec372c0375b8e -0xd9247ae1d0457b03cd7bc653a425acc3ca95b7da5347e1d3f131da3cfeb64162 -0x6206adcc22756bd1f56f319172cff0fcc9d57676cc515030c1cf9c425b2f6fb7 -0xc8d8969aac985e305113431fb3abd1f5800905aa1ced28596a6eb9f2c0eff025 -0xf6f4cc08b3e9f86385d3664aafee99b748852b91aac8883ec73e49ff623d1dba -0x556281fe34fff77af24288b410d448da9befa12f0b98c21d713288c392729eab -0xdf9a7fce129e81bd391b005a137cfb1d7fe12183c4de459418b73945e0a26213 -0xe25f6cd3bc46a335dca44a77fe17e2f1bb8bb568c955db935450d8ccc1cde640 -0xa792e790cbce7d7665ece87d109c824b5ff03b3e1a972bc1abca567335a18326 -0xfe3e795e60dbfe47c2397c19e9e510e4f965c0f99745af0101babb21f59361e8 -0xbef933d1c815ab543e9aecf763fbe5d653f84b658510679971169b08d156e3a8 -0xde0a49ca1bd42635481fce8ea948de2594dc68e8744eb3367f0a454685c0791d -0x748fbfb28796561991068a063f36b644efe0b4391b061f5d8cf639d44f4cbe67 -0x0ec62117b0a790d634bf0026185f8d066dd22a958d5d1a3f67ebaaf485ba7d93 -0x0bd3d90089e4c425595cbd306ba507d45d543591e2d3308a14f5efa9452801bb -0x1e7144b00ecaf7043b21fd7addc909964b7c511eab88b12362fc4b3fbe280120 -0x84f388b344accff8b8dc7c71f10494264b347a131e02b11d056649402bf55091 -0xbdd6fdf5503e0d8512d360e8cb1327d466fed010eaa17509ad1aebea368a452f -0x24c373cdd96ac9133f2c4680123d1f8a09425b968b00b87eb3a601c173d90576 -0x295d6b7770323e46600caa126355a403ff671de95680972bd0e8f16124cacd0c -0x8b7004a85d7efde83c1ffacd96711fa5c746bf346ea3caa6c42f4eb9f5c9b984 -0x3e34c66ede29c39b5084efc798003618dd1e402ba27f2d041c34f18ac216f626 -0xab9d7bedad5f5a179b910d8168c8f076abd7bd3d425c25331756b64e766672c5 -0x525b0dd8c42558fbddff89f4e1bbef98f7ac8c82325588cc825de524cd110ab8 -0x9ffb150d6aededee2c52189453a4a6b159812e147429f22e8187e39465bfa14c -0xe8487e2801c23dca7e28faa538036f8eda697a0a5d231c101ee28714a1150bbb -0xec7521d2d989164f24141986602806dbddca4fa1b8c66e40c6328778e7684da2 -0x1f1a28c048253eec875746001942eb1278b6afeef5ae68b3c0ff64e534d385b2 -0xc8b0ded0ad8c62cbfb24c7b218b716a09efce373394f59eb08326cfecff4eebc -0xcd2809af2fc97c231ce88dbbe9590c4a567118ecc0fab11206f1f70adf2bfbb7 -0x5a25ae9c16851f45bee087c1fb64872cd4b216ed8cb9108342f47cfbc3ec89d5 -0xe59354c12f5c28161e2920262a07eeb515affe00fd0c29fb1a4cbb334ec3850b -0x4e75b2aa6c62d4827c9715fb533713cdf2d8f6232bacda6e03b9c532dc21ed43 -0x7481c90ac42f32b8457962f345e38b160dbfafee523f73694d89f7d7167c683d -0x9908836da19fe960860d832065585581776fa9011b6f8f04e616c15bde53a39b -0xd43336a915ff12e38e878a55e6bab202c8fbc2971c360abcbe15206add379770 -0x63844101ff0195b840c240fded7b5f76912edd8ef67430f9ff18267a40be2d82 -0x9a5d34555b9a8c531e5c312f62950d2737172dd5be834acdfedc7df7545c1fd6 -0x24292458fd71e2a781324e82e5f838d9cf3e994f0f25d396aecaf0644657d20c -0x02ed039b0bc6cf291b76a0cf23d5adb5fe3180dc333035534ed680cae1362c96 -0x7d5993e5362386a11b134c48d3b531f0b717d3a23aa046c8e91fb0acd7152841 -0xd5b3b6b5b084380dc2d287e1c5c7afa4ad07174e72527e6318d9d410809d2f5a -0xc1fce48b600208707debee9b56c4eb4edbb37d221699bec8354fc8a6c1b736c3 -0xfeedfc858ef50e85e566f2fb7f171822cb021179f4ab018c4721c0e11a4b35c4 -0xcf4563bc9ee10718c4e157e3e4b2501b45bd6be8b59b6c9e4349aa58c33a6746 -0xbe3908ce5bbbfb41189ef87896ef71eca33228fe92a9bbb9292cef00d5373f45 -0xf46ef442d6d16e2c8efa405729e21379c8b2641a07e4ac9ec6613994cc0be288 -0x695551f21bb5ffaa0fa092f4e1ebfc7f0143b559728bfb105caaea536ac4407b -0x6914ebe8fa6320ee5102d9e279d9cd8be76e6a65c3e8e317a7c25a58f50bac09 -0x3ecb4800ddf72b43e904b4b2cacdc59c83b6fdefca09d44568cc1463445526fc -0x6d67f38f32c0df3f148d30b15742e9c2912d02ad6c4dee0ff18a8acc04ed4a06 -0xd89ffbb80d70b45a3ed1f1d9e2a82851b1397f6f5419652b98dc9c209b6111f8 -0x9a0119cec6ad5629247c2f36483c52bd0fd3944785d0a8337b23b4a07380b834 -0x3dfb5fdad9990e6097ca1d7a5f1611b8fac19b3ba21897f9ad3de35847fb4b7e -0xfd794e14dbb43763e28d031c1170d6e8887c289244bb816ccc5a89680857838f -0x197e8661ba5c14749382dbe338c0939be9b2c9cf4202f2d5b414b52ec58ef525 -0xb55b4a29b31af3a526f18fb5ee0da9d7b9c8d89aa81e7d4f0a70f1e87ddc7189 -0xb46a43ff8d6ea77345b2db3e474a689a0c6a0247ab2b2e018632406241622ce6 -0x672fb3d9861c60e8fb2789658cbb176ffd8ef1acfbf36a79a2f9d2e7485fbfa6 -0x29f93abd4c4186b9ec7264c58c5646c42614ea1dde8fdb110fa5864a41f8a5e1 -0xb237e57f1e756ba99fd9ddaaf9652e43b8e36beabd9c69ef211f319ecf0ac59f -0x345700fee61d9edc932dda62fa4f9100b977f79117c4c706d50aa5d9bb98b8e8 -0x87a02200c627be15f469403955dbece3f6506c198eef592e50de62d584d4f13d -0xba1bbe5664ad23cf96e8e83b3cb93bb2ccbaa12787898195053bb16a8f9684cf -0x2b292de5dec32cea6a588db99ada41758843ce3188860e8fa852328ac34cbff2 -0xa700111c5ec0d8bc47e2cdafafefe61ea58f62a70f3f89c8a018274090152663 -0x8dc81af0ab285cae9b12d5712bf19bc2d91de56336eb6e94ac857575078ce73b -0x6999082249ef9b598a78e8e759f6fbc3d90a91b289cf4e48956faa58f16eb129 -0xb13fc347ba02d4fe25aa6f6d7d46a7d2cc31d117361e08931b61738617fb4e42 -0xc3c5d00ff9f7a3ffb36297c162b23d1b27c1a763de84eb5118ff960ef9fb72b2 -0x5e43ac21093c86c64f6dff1825e88e1fec2a27d97a8fab9ed7f5efbd3bd287de -0xa2f20564ffce463f4109c088e705b536b53f1756a71ad0a9572bedecd77cc91c -0x12ac576a5f2b8e8f7f7498f64e7d7b10e5cda9fababb221a270f8e4ee8b37ae8 -0x9ae4b728d40aa3cf844005b8936d1f2d34af85193a990e22e15bb8b7f706c9fe -0x9c7a896c6a48a87118c219e762c341eecdfbd11dc0f0f43e14c3262a50f43ba7 -0xe3d1b5499c580b1d23766cd4ecc8451ee91434319ab4c4273a1cb1993eccda8e -0x91628c088c84f2d021d175e1909b3c5fb3145ab4500b634b753d8a78bf84f9b0 -0x1c3e1474a1653c066006fee531ff8bdce49c77a8b7872dae0a78bbfb9d41c0ff -0xa9470cd47fc546f21acff7cec2a3d692df36174c8693706149d612f910e4216f -0x380a035f56c6fdcfbc3df1889c78ed625c14a8702ff6d50c5a46a353525a6437 -0x6fe4c28b6c86c1c3c145f3b9045a7d3c9b8c96f744e40e4419c0051ef1c37f0e -0x723f64656aff165adb7ca130b1b5c1c919cb7c0ba6815318a7b35e9466d1960f -0x1bfdeaadb265aa1f10f3412609ad4bd7c3ea7ccf16552e0b5a3eee4a9ffd1422 -0x7483f145d2b8d4a43341d4907da631c6fa846cb550fc64fc90d84d2e45ec5afd -0xbe9b5afd9e724729d01aa144c021667cb7183f66d5b927bec2c2685db437bcf2 -0x2896e080ec62dc250fd4111c31403665067d5ef3839a4a134190e5989e41a915 -0xf73d1f85f18c2974100db1333a8aa96365cc8d45e227956326eee21fe36b32cb -0x1718c743af64c9d1a2c6518a5f62ef618342a592be375bf9c95a1aa28dfeb31f -0x536ebfb856330fb6cfeee0f7b1ff9b5f4101ac918a6f56e6be255cec15ffc0cb -0x18fbcc5f55be595d196ccf72fce4958a8510462b95de4846b6345a1f482e448d -0x98437cf52197455886ebeef54a691e63a11ade4f558621e7c41090d012ecf1e2 -0x17c842df30146106beb021464134a0b5091f6fc5bcc93178c7f848899eac1e67 -0x87394ba95c873743248becca092fa9314058ba4bdfe2b1df0064c0d9f9e7eeaa -0xce9fbf909434b298f678d223c27d52f08194773933c943fcc79e5390e07c3ae6 -0x670f2cb17816a9b96a9ed97fecbc22f74e5fd9d171db02d983c05fdd2dea5429 -0xa05115e74f2b919f599f5ec6250d8c3a2d59ff8e1cdc390de3ed28bd2df381f6 -0x34edb4e928c435f48db746336da57b92492ae51651e9078b1ebc68de7e3083c8 -0xdf81fab5de25cdd6720a3967444317502cf4ca3ee27d4ab51342b1ae3c7fda28 -0xca0f89c65fd16d02b20a6b026ab2d1340a5f716a200307a4ea45379dc30f04e0 -0x02ea1a114112d159ea941f2d2aba405328baecbf04cfbbf9772af2d2907c68a4 -0x759c9a2d25cbc9dfa7ba93f25fb42734548599418e053bbebb6d87344d0814e1 -0x302c7b764ac0a2fb7665747799474e16710356694835e4cc2095e5c581b23d09 -0xcaeab273b9ed638fb5dd8fa16190dd5b8344f71d39cbf8631bf2757b4be0be5b -0x40672012b22302d8a610112586e0f3f42a113dcd2a22b07609cce78accda16ee -0x62da6364f4be95dbfa28975d93274e63a13639922f2ffc99a5380e31f4de8f25 -0x56d0c6579db5712cb2181b67595e3d23bf58f6efc55906019f1f8cda31a5c275 -0x0748d2bef19e3c39c8ff2da2c6cc7aef304c20e1921fb2faa2a3940e8eb5e906 -0xab9fc99cf0ceba5a0499b2e2957b62b53ffa6af517aea6976f18344d6baef40c -0xaa7250416d65bdf5e0c5fa4f63810ef1637b1b102ce33e3834b61fb652edc0ef -0xc7cb148413ad4e8e4d6a0f4bcaf038d1b5c0f1e4532ce803e3d2f117f3cd4990 -0x847d078859704643c2b8f7fd903a308dbd0ca48bc3ca8e7a63a46b1d7ca5d320 -0x76702e8b2392d666702566a68cc8ac2a4ec59a73091a2e35e15cbe64b2903426 -0xabcfc5ef75e05933e53eebd238821decee713e0f09913fe4c05a964b46b31aa0 -0xfb656f15a3a908b186bfa98ab9c373da0e095caeb6fbe2ea725ea313c633c818 -0xdd37d1ba7daab8bcf01a1f15f5e2c4eb5f2e405f552001e6c581f7984920d2db -0xff0273af44ab40d96958c788fe4f845f1ef79136cd7e2c9e163c22add2672064 -0x4ad01b6d77b1d0a391a30c9bcd265a330250c210776e276f7f4ff7335c0ea4d4 -0x83897411ea11afa65746d523d78abc3f9b50cf7cce99f44d0a4e002f9d1e8aed -0x70849f3122b17377c5de4bfd1b01ba1ecd2c015ef2f20d7fe00aedde8e75251a -0x6602c5c7224a282ff6cc5402d1a1829b8cfe1f89d40846384c1c4b2fdaa45405 -0xcb47c432368389045b5049c4fdd36b192148971bf6acd443c975dd3d0cf66011 -0x3568c340e3a684c93b37954e3941bb76f480425ccc5eabbec93535e67e9d51e8 -0x2d295298869e76d766215daa8e777028021be7b58f0ce6b10fa04f027a421427 -0xb9ab2144f2d4a09a28339516ff634f2eeb538b7ac69c7ffc3e556e4592bd2297 -0x74561a2b210e2207c20047565c4d068393aa2556df21ce91abeb6a165b33c5c3 -0xfcf528084fa1d6bdc7323c173382cb31c9de211d8ea5b1dc4ef5a658360a8523 -0x605ac7b3fc21a9306153c80dcab9920ffd69c1712bbc7af281d886ec441f0626 -0xe93f15562889040f111deb93d0ecf25cedc8715389095ad8a8fc3d8f18a573d0 -0xa729147e0a6d180b3b6ba01305867f278920dbcf76a05903f8807b327c369fab -0xdaab7f57ea54ea8a1074aa0b7f262cd0210e846c5b132a88a05e8d858505dc1d -0xefddddf7e113f5f5676615403427c23296e98d7d9f739ce34fc5177ab18ab57f -0xdc2288657533d8b523c1b4ffa08fc1138575186c64d9937251635bc1bc7bb2bd -0x6f5818385f148dfccce54029df711af4cedb9c512cf0e2ad179fb15f65e80d2d -0x49d385c9ae1011d6a1cc80e29dd2dcf73f14293aa09833dae88cadbd124b3030 -0xc6e21635e58dc389f82b875d6775483c5e2c369b2522abcd37d725ef6a1783e8 -0x58cc6cb921a03e10c5c75b2ad6e1b5e8a0615e678b55b0ee2b5ea464a207a78d -0x10e30f8d4dff97a09e6f24501a4703785f36a0a73fb633bbc4a4572f7152a238 -0xef5fcbad05441e6fddb527938bf0ad2b62ff2145e7c6ae2a23fff5467f08dc93 -0xa6fa4243e38ac3a34f38b9c048981bfd920a739ea9b724747421218904d51b51 -0xf1f0bf27ac8db31bbcf33bc5b8fbb534d4e486bd17e966f87fef31712728f4d2 -0x5579da0b4bdbb89e83dcc26e437146cdd62dbaa69ce9f06e97db618c39f79a68 -0xdfd83bd93c2aff7d4562a3e7c2cf5fdb502472518c7c99638f152e345413bce1 -0xe651519a13abbd162573889b0ba92e71af62f1ca2d86d8f583b6ce4e88e0a552 -0xaf7ecdab09cbab94956b13b8a8202420a2f75abedf3f09ab3859fbe4da239683 -0x5c9a5f5a8fe816136b7681619e0500d5a27323f0a0d57aefe88444d362cc8cb2 -0x58f60bb9594181a5baaeeb52b11bf4e5789a393e4942ae7ba3ed2136bedc9851 -0x087cbf8cd95572e7d80eeb633651d16efdbc14269a61eda322abdd130756299d -0x9e9aab8a497b38d5632f6ecfdb158645062c23f3497a85226bca0fb3c1e9d90f -0xb0819bc9385b07e5ad91a763af4084be146782770a4ee6fc33135649f93f25eb -0x11900a48145bd0a24b0657b8c1842742f4d3997be62ce3a46897e24fd08bad22 -0x178aabe2aa98b7d8c564b3be57206590978242c0b966f56273829aa5825d02b9 -0xb21579893f2fd33d294d3ff30993843ec577dcbd1b95be3ba0e079ef2c77c642 -0xcd6151b35a3b3856fa5ea7b9421a51474a8a36e24b9312015abf4c9e85f8cb25 -0xac731dfe74dafffe4ae9ecaf44291e0087cd878481c69659ff589cbd133ed8b9 -0x9f42ec31b015ec7c33cf09dc012a5e2200efbcbb200a29dd99e98faa2d21232f -0x37ce82d71f08d877741f53f5649d649efb2d303b9fc8a1c563641a38d383f2b1 -0xa8c5ae889c94f75f53584daf70f693b43cb3fecd52186fe34f13341457e5fc9d -0x3c6ec42044bc767f2b8ad3d998bdb8d9505eb788ff1090b8558cc3c1cfee75fa -0x6c72ddfbb254de59e7fdab6cb421d93507cc2d2ca4213f2403cd2f0c48c2dbc9 -0x02a1a76163f15878ea2dd37e71292de0109c84d8f3c51559da21f7cf9f60c777 -0x03b33a3cb24c9ca5969b03d49845a59d8b516b6d6a4f68e32fea47438e6adefb -0x63ba8b7698412987a4e6a6e3eb7b463f38918a37f7347f21f657ffeb7725b5d1 -0x5ebb17734da4a1dc44dda9323277e4c2d64f9c27a5a5b8782c596ac53bf92e68 -0x9a2b7542aae76fcd04622af249eb337ccf143baabb73ce6e99bfd477fb3afa7b -0x0e3236a4ad0fc987367d3ebfdbf544ca4938f67c4cf71706e58c738e77019fb3 -0x5e15a4fe2c64ffb88b9b268ff914f120a3c39a642d4c023c5dbf70f7be46887a -0x0831fb08bf11a56f4990433475ddea837bc0235d3ef2eebd0b943a732e83424f -0x3c6763679ba51f836d197eb46903226e03f20e1957ec3117b82bffdf3c6b63bb -0xbda66b9bfbac8957a4d3e3f837ec33a62c98dcc4af9faa1695e4a00ca240b829 -0x944d8986951b2eaafe83340452d95f63be1704a9a427fc2f3c719733f2ec809b -0x1519245c0d5f11b23928a5389807937b7cfda2927e429e34f5e6061457618cb4 -0x0e9f097685065f2adb20b669dfc63bf0b40a8f0137f3b6c5e3d4db54fff3fc38 -0x8cafee984c76fa354dc88ebe6e97db42011e8d8dd5e9bee9bfac39fb5f029ccc -0x0393aa94b4c2a6cd46c0c810e7806cf87e5bc9c321e233777ced76536c31b508 -0x0d2a3b8d293ec2d7801c18969ff4083a0dfd52fd5fbdc8d651a3fb60e345e8f0 -0x9ac862eb02709a5d3caa72a5bf5eea82ad2a26ab36699c8a0488cdd34190105d -0x78580e30a4fa7a7efeb12616482246bd402afdbb45a02a5500577d93e03cdc97 -0x28b189b7a83da6838eec60a340268f0823e125e54daed58ab86d67aaedb6cb26 -0x2c1ec6fe5d340c177e1abfd87de1cf477807be40bb6c27845a56034534b30221 -0x96bec689194d54c63d357106c362a9fee11d82df731a78f4fb74a9d8afd3efbe -0x68ccb10a40d37199e8fddec309059b372eb28f9fc731f1e5355d4147ad346c1a -0x83852faab234d944a02e3fd2ee7f06520d16c1f7117b44f6636cd62d0f509bf9 -0x32dc72699e41d6b9c7ab8209bce227345be5d350909bab7558fb4f3c5099bb22 -0x2302e773a6dfed6ea61a57308d9a242e2355a3e6b4322bf3890218f2d2ba8c12 -0xd91642d6916caf5f6d7131a0c08ac361ee93e1339e4aad28124f30d55aec9013 -0x6d76a478968f53363fdce6b8e03efa1c4b089f3db710c54836f521fa10e578fa -0x80780f3a4f29714c0c819ef327bc3a48ca08797f7e08fa0c107593a1d23336b5 -0x19af9c680fad07abb71bbe4f95843723b591b32a66c964fc5b747d7a0893be34 -0x639088452e291042b68245eb0ef50571acef145daca552d78d57695ed9e3173c -0x5d11df627e71d612e339c1d4d615f61619736829efa8cb36105ab613fcfb0d75 -0x2388c434312926cb60ed505ae2b0624a9df868dc298ac055c45f86c740e4f7da -0x9f5b98699f2fbc4c7822780731a0e8e3d46ebc44cf2d4620c8cac292c36f8639 -0x7ff1b6a8542f7ce2f06e194addd2624f579654381dcff64db4315abc7c84d589 -0x774436a0ddcba7a56c24bed420362e04ab57eebda4c01cc93dc33844839fc735 -0x3ead5d6987731a0635b6ae3083037b0e0dc4fc43c366d721132049044b9c5bbd -0x4c0e6acd421f9254060746018e5a60b8f858231ce646cd0add4a45e0d7562fd2 -0x56605f104f72c96db1231136ab44ed585468edd54dd32cbe8fac386a76894fd9 -0x4a0e9b716e00224eac22b539546e68db1829219f0a4c483a1b74b6c2cc2cf8c9 -0x25fd384e941f8cc4eb24de6477f145c5c574145390a11c96516908af732e38c2 -0x91b7ba444dd3960807aa0582d6f02f0b761193df2b0a14d2f67172f93695a251 -0xb85013115b8ab7f777cf3e8f31cabfd56ae453940653d3eb835acdb1f8fdfa29 -0x4bdd85fa67960d265e95460404728772dc15ff543f9e91a5b6fa3c8d7a462ec0 -0xbc99108b8b6039a8bc420306d583ec8459786a54a717bd6fce7e58fe12da8385 -0xb1e8ab1671f9dab060e05b3b32f7e9686e30156c9ecb892e407edec9fde19cf2 -0xe466806f3342280d2f2b77bf38c1f30ced615652a6cc2525d6c15755310b36ab -0xaee08b96d42de5112abbb5876a24e72a43acc4a4a51b01571008b038ca351d64 -0x1cc8f4b90ddccf3a684ca196572007001e98ccddfa469eb9dcff24182d918b09 -0x3e315ca4e047c3b09c826711e09cbe078a5c3b34fd3d4c58590560203b79cfab -0x16fa49037d929935f6c455acdff485b1a99f8ebe9bdb6391fb7472b161f6fab3 -0xefa0550aa922d278245d0aec6b1837d0e2ca6a90a48a9e7ef415fee665817793 -0xbbf8fd2698b94107fccb558a097f4022ab4e5fb41814ff6f0681bb38dfddd4b5 -0x83aaf8f3de1e1674f8b72783fd2c9fa6a2d6465b0bf54ac2ae0caf0095489c08 -0x1585a4b65a426f16820b75192c043899766353388d9ec9afad0125147b31f1b2 -0x1e6e216c0725bbf025b15e20853941630b9162027c850c01e8b345783cae4d78 -0x3e76ee683e753c03e9ec571019072c8beb6b681ca3210c7daa421905f95088de -0x15a16b82789f48e118f079a1f2538855187fe084a02bd6d9968568d5da6a8ccf -0x78a1b7b84e92ddeea3e99e1524a4da218b4658e4074881faec91395dda78fc15 -0xba9af1966637c7c3e4193e5f8da51994166dbcd056af2cd772c79fc4acfc3455 -0x2ed416f94be7aacfbf6933f8295ffca0c610449c99356e8b4ed66b02e0e48581 -0x5e7b2c3d2bb44914184b315049157054a9dfd0117447fe3532d634854a65792e -0x311464feba24fdb4a3bfa79080d2bfe2d91f183b52659e3103c40e01481555fa -0x4dad3f27beaec59467bcb5fbcd3142fb347533949efaa2c757465f28d1fec8f4 -0xdb92df10bf9194cd4ecccb9c834b57ffe065e83d3697922399ef168ffa78833a -0x6b8f4494c8e7a5027726a96519be7e7fbffc16fdd8290ca29056f3e0a675dd29 -0x6a2df81ff3ac06251ac349cfceaf2c5c76750ac994cd6a17602a6d6910b5888a -0xb1e32e7d7e3a89dcb57a4f0137087f581425c65bf0900a099f42ba27ed043920 -0x062375b00a1226cdd0d1c5dac0f78e21361d8fc5e05e9438127b07a45b6514db -0x513e10dffebf4f437ddec792eda549f40c21ff880e6c781fd0fc4ee405cbaf37 -0x813f274500ba245d3b077e8c94dce177cf1d95d0ca8157358d10db23265719ea -0x50df76511135ada60ae2a2854ac4274944756bab5017c28c799ba2830b5c144a -0x97d6f662bf48b8721d65c76890227edb88d67daf8448e6a47f3c4bf8df9a4b77 -0xdb408b95f08de5d5681c0ccec45b7fa8aaf2f87c6f64e2813cc3f76f73e10c68 -0xb126abc8928a126604f7bdf1756699e5ec6606f02e2b1bc452869ae81e96856e -0x3acbed916ecc4d94cac4165233c17b90a6b9b953172b64194401806c1a462c14 -0x5b3f79aeea46084975116dde09ada9270c3fd05aa8cce608eefd6fbd8ef68885 -0x2d10906764075c0933ce21997c4059d35bee43b9830d74ca5d73e47a750c1a58 -0xef69e452b0915f5cb03f9297497a47e07e4a16351e85b5a4b45199b9630752e1 -0xb47c9dd71d348e6c431b9fbf2b9583fe47c906e646411577b75ddbdf6065eb0d -0x7fad1cee98194966fd9a81c19703dcf566407eaeeabc0f4bbd288aa92e925459 -0x4281f21f9e589b25a6819859b6c15df26560474fe119280650e535c397d3016a -0x109fbbf8c792bcfc6041e367a14c770fbd551435fa43f4c0f2059dc1a2fb4f92 -0x18fe125e8ea41e26cc855f5a001daf4b808d47043f81f8c2dca0c24f72b3c7e9 -0x6fe1ee8af5ee40f142deb17599f46457ee49fde00826c84bb4af6edfbb4a25f7 -0xd2ff5cf41e6f5f5a4e53aa777bd5d7b150e584c660ac2accffa8f4e8ce2c8ff9 -0x65b6d0b0d1066fe5059eba4e265ca92b43cb9d100018203455c90503b6e8cd01 -0x7157be390e2b27435fc837280bea6882434d995d993b0223b8c3ad0b1b70119c -0x92df521f4555e6676af81e2d43110c0255aaf505138085d38403c175d31f5bba -0xa3a48648caf128a50eafec780e2ca6196a198652950426a6ac3a8ce812698b87 -0x66a738fcb4f5a62d37949f731ffde35dc99f6e9468a8d1e7997f69b61d71d70e -0x1553f19777f922cb4846c625c21843c8d0f795cf22d23caae8e8f232e7813b97 -0xb778b400bdbd60011de684168e88023b71b2840b4c804378776670c2919d8ded -0xcdb50986539ae3f62687a0128652f7d1ab50b68e7b4a3cfc1e2ccb96885193d2 -0xed86debaf0b7203f3eafcbfff50cb9704f95c3cae1e041cd4a6b54de1e7fb6f0 -0x21a50ac7d926cdde055a1eb81a5e257b913147c6622453c502d44fd00f17fc7e -0xc6e5f73a0480330b7187aafac9fa0d5e23ff0edbef8057e1f11ce458c474cb81 -0xcb961fce361788d1913f65edda13253c37a78c8ccd7c780f5cacb6301e53a287 -0x21280e07746d30ed6a167005714b8bf7c3f8f41541eb167aa1f64e2262882f59 -0xe9ff3f351a9d51dd31a1268e39f7158ccaaeaa3667f70d424553b34a3b6efca8 -0x7b128be75e04204e84f2e2d1ae0e6217af56253a85ad21cf8cfb5eaf9ddd399f -0x61fd2c35ecc91d74df1d63466b08ae38d4bbb82d2d1609053d553c14ab0cd784 -0xda30b6196be5b212b2ff7a2b90408818ce491251ef19aa1d9a183e1ab23c12e0 -0xde41c71633e0e42c5f9774c93ee6ca55e7427eb536acdc7dda3633cab167d0d5 -0x84c79c508cf5de41dada916bb0fd4ceeb480599789a69314bfba19bdc25ce8c0 -0x6b3524521ad56f0182e7705320fd5f63c90b9a0bc248d0e09b0e178ce8ad5703 -0xf8110d823ea8ba397682448d7f3133994a88da2a6fabdfe4721aa9d18ab4eba4 -0x77fbf6d99ee5f0c4094f95fe4c3b478483dd463e401a2567e2a4e1a805556bf0 -0x6592f28345b3e7fb1728808d73f06c673b600c4d3ed342cbf232539b64b14431 -0x77af77b42150ae2978e662800b29cee8363adc46ad44b0a3c18f1f290fcb488c -0x9bfef8b6167c1ee3429add228a92a4da81203ec005778818bdcaddb46cfed908 -0xfe30b0fa68406f7fde7d4b48e4fce8a65a99e391ddf125c003f8beee4f4a98bf -0x367594c47c168c306d1d444753960c4aea92f2a5c0cfe73cb8b6a53abf76e48d -0xa9a42bf36ded96304a8ca0d8ac70aa7f1e6e2125741548a568703e064242bd88 -0x3093b630b6b9243c08c4ef6083571fa3131d87ade94b3a3ce0dc2509852f2e59 -0x2b68388687dad347d24c550cd5e85e2d645fef1b9f6d33518f589bcc454c9277 -0x22fbf6d39c67470925b76a45363e0ca045f14f5bde83ebf38b254216e9051c21 -0x66cdc113ec0ad1985cf6e663415d4e1705ea4fa1b71d0ff344adbccfe04d84f1 -0x59f42881cff2c94d32fece9244ed6c65003362c675ab66994f624a9293900e85 -0x27815056b2e3a94fa895735a3cd834d6e0012f310b387c6056d657ec77ae67fa -0x365ab8f9b2f5a200ba5fac5ba0fb0b37307e70dbef22bffdede64c7f9b2f2a0c -0x42ba16c52e177a828ef6a9b3fc9e52fbde783ccb479cf5ebf5a7d7968d2b6e51 -0xcf9d184192b0d26475b9a26679085dd0aec9fc757eb728bb5258f494bea1288d -0x6ca105d96a5b5302d93b05a322f62e7c60aec55cdb7816a9179905b4e52c18e6 -0x3a07ecbd31178c20d58fc72672adee74635bf85dfd0c8cc9a0a9a3b3d9fda5a8 -0xacc913be2382e17c995d6fe79a66884fc65655e7cc405aa11f09f061b8c4b7bc -0xe381aa7b8b69cda39a8f04c6b6d03bb5fb0c988ebabbc386645a0d98fd55bbef -0xc94de6ad9a2ac7696a5a7bd60862d19509d395cc3e1537fcdf7480a0a502d466 -0x379d4da606bc87b80c84f82e7a1452f80a0ae4aa2a9386648dfd4a1e07b1cd9a -0xdb010765043dfeb5236a8681341c6bb691a75684b1e404174aa4256e2278711d -0xb312935203a2e9558cd27dbe1f04890b3a071bdad44515cb57e7887b42a93d6a -0xdae822d4a50b560cd5ca6f5833acbaf7c1bdbb31d87fe991481a665f5d03298c -0x84bcb00ed1145d1eedb766c1ef65c40e730616b6c3a56a330bfcec18a2c2c3f1 -0xccb030faead4399e86c2b30739f5022abd8c63b7f01db3860d53f1a4c0250d76 -0xa05cd5a1ddd4d3f0e57992e0c8fba6fe0e86f5e70ff94c083ca8458ad430a530 -0xca4e84416e57d3698549bd20b0211b6937fb746ef431cebd5c4e3c575d83032d -0xc0209aab834d4e4a4f5e9627f00b80cfe4ddb0546213f1d6844a57eb3d2380ec -0x84956fb32cdf9c1bcf76cd9e0008fe4ced6877d8da7fe9e50e99cca72a4818c5 -0xaaed7c3bc6cfefc1f6e78722818b569a35b090ed24335ee67d78aadc94cfccc6 -0xa2c060821bd71ff18b03020c6d887c09e096b2ad3a5363352d7fccd4c7205a7f -0x003361e038186aa125abbe2c82274fa5ef37e5e87a8e9dfe0500f84b4384bda4 -0xf6360e342d11766139e824c66463277c5eeb3270ee74e670f51632927ece4aed -0x6660cc009c442966005adb63dbbddc94622326a7fd84abd4630c1f88ead3541e -0xd7febbcab55e23a5188d5daadb38cf43c2139da05c9aeb82caf2ec9313e9b02c -0xb3d551660164a19e53c345de66aa29f909ed1abe39d2430d6867912c9f38f30a -0x7022307eefef3d2a72b13c285dd0d8e26abc4a77b9676ac840b23902aee3c16d -0xf22d67d78362e390df990b686740a63f0fe31f2f5496e4891a1e6a4f7e36e83b -0xfe1a79a710f8093e107f0837230df37f62a77594a25ed1e094353c05143bb4c7 -0x6db83eee6f4fab6cc3f30c02e45736827d9fb04dc8bf713bd131d60dfb9849e6 -0xb87954fb1ba8b438109a7231758d678e0123234d20e43d21f074bb5e113756ef -0x7df1ad505578e6bdeafcac2209879d16e01a2865a89687fd3085e76c6d40915c -0xd17dae8fc68463e3be3ab0b2df9c74614644d7230f434de7070bcc9dcec2f3d4 -0xa78e565e41d2ea16dd6c45472f34e49dd72f0b30f7ef0b3dc3849f9efd9b5a92 -0x9756c074335e165ab917b7b95d20da9b81c63298889a32e56187a5e4065bff74 -0xbad480bb90e0a2dd65ede6254a5862c0ca04f0c44c86330ab269af9534a12997 -0x2eb3474b2630a5771018c24e1545a2e192760ef7a9608deb33958c1a3a9e4c21 -0xc39a4e0219422d6185d61f1b06c89e9fa4000176fd99a4ddd72977c31e239406 -0x6c2b8914ebf26c2fb7fdc4b8c1f5600267df88a815c4c3fff49d070c201954e4 -0x94260fd4760b4420a638520aecbd6a40dc4d592774879bda3de28c00b275772c -0x72f0d202001b73696edc6c61a500696cd99e04a2cfda9a829acc3e7ba029b755 -0x24d29da2ee6a3f4f494e6d0024a6ce0fcbe56fe1a4125b5ce255a4e5fdb742d7 -0x878ca0c678658be7071174bcbdffc062d3a46aecd83a02d222174bc9408c2082 -0x3c4293a118e00a16a514fa424382d7877b306ea292086dfa9759d339909b4429 -0xcbfe06bdff431150ce1d6d1b658771105d0a85d52430924d105120ebbaf339e8 -0x2431dd0b36aee83506df874c7c4cace2931861eca93e9412808b1637f0b0d83b -0x72b0568b376c111d9f8ec9e083359d4bed8367af1aa6388b0f2bad8390e47d87 -0x2e328fbde171895b6c5d9a78d2aef403c0d243ce78246c7ae1e536e8ac09bfe1 -0xb90c5b6ead1af69002c93302fcb592ce704d39f29d0a1a0afdc2fd2766c45a7d -0x7e43c94469b30d1f8eadb845018ad18474fcfb64b25b6bbeb39499b89ece8db3 -0xf50f67ce5466f353b54e5016c6f3bc697f04313b50a11f0334aa6c2096f6bfb4 -0x532214b5c5c3fd0d6b6b2d5ce798747c2bc449dc29b04adabc96af7b5a72ef3c -0x9ce90a644749b49dfdc5ba74973a5e91ba34f5c1b1e1705b05e84bff010cb47f -0x433e4c00c3988207db0511e295e5e02e064e2b8063f38e01ba44bad0edd6c92f -0x02f6e3c41ad99bc18f88f63ce05d5174f8d4e1ffadb1fbca6252eec474b9c7c8 -0x61f7d83e4bf943f04b375c2375dec6ce8feae425b848384735c8304c76326af3 -0x8e2099d5a2f96df4d4f174810189a7286654303eae5d1c24e521f38fc45d2065 -0x96a40d4ad202f80674235e8eb326d7d6e7aa35c77f3eaefa429e03216d0585c3 -0xa572183c28fa00981f1c46e7031e786ab704bd0a0021534ec6f02dcf191cfb90 -0x6b8ffadf72aaf8cc13c61f74d2fb4c3fd2c7b345917f22c76b6b003584937fc9 -0x50b36426ded746432d3b14a9fce69602a594638168fbbc3236ee92cf5ad176b1 -0x5668783351d73a8ae756b437d3be6fcade55bc3b2b7d772e883e65e1beb181f6 -0x22be410a993296940a0349161ec2548796a8b9427ea584343af1f7ab312b87d4 -0x0872b9dc2046002692774146b9bb30a513923b954306683a3b60f2b67eecdbf9 -0xb2d12d6c92eab13c2f8fd5d634cbfe3c0ad3adf91b45b084147848906d6514d3 -0xef0d5524be6109593e6b6ef0fa980366d64c681aa03bda1c1159579c448a7886 -0xa1e3c44a2fa3fa225f7f38c8703c9a0191152568621bf7c9ff6f179aa7d687fb -0xb277923c3d60425ff07ead3ff65d0a606c991abee499b08630c83e51f6a93a87 -0xb5af8cf334b8f6ae163e986b670356c676ef510a7a0eb381d642f9cc26e1a688 -0x877a3f56d4872a05af1c5d6f9d68b2f67dbb74ab418636ae0e150ed55b2f27eb -0xa88bd11913045d67fda6844b3f6c8edf9870b0136041da4805d4d4931d05b82f -0xb76516b0d9bb0178895523f16ae1545445028444b52c3094b2296b4a943f4aca -0x5e57af935537e876cc6bc55683fbc53367b8054c1eecd085e2cc77318c7dc859 -0xc51e0f88c72de4cfffca3b7eabd957c929898f60b167f8d3b0ec94d918a261c2 -0x355e5b01c11239df229c996f2944e15b9ebd6c12fd5f77f9798f4d3fe27d8b95 -0x6e710451819e458fa845186eca0b13e205a886e496ec0a2c3e20c7270dbcedc9 -0xc4dbbfba5e06384b1ad97f3f2399175756c6f9a9569154d6c5fc93fc37429a79 -0x1918198c6ae2fbdacb1935f3c325c1a6b9ebccebbb5163488905c022cd22d1b0 -0x6ec925fc58e24eb74a4b7a148d18247e78c0137f3f489960f5a7d8eb5927dd12 -0x18950ea0eca07a80358de7ddd06be6703b5456d00de8408affee4538daed8172 -0xbe78399f12f8b098e84e0bbb7384fe73c443fa9a222306d5e6f3a2826e52a6f3 -0x9bf0fea6d959f7c8442e40b5a80ef4b473758d73582573c020d58369bcdfb94b -0x337bb78d8ef5c796ddf64fa869f31ad756a544c4be8dc5e48da9412fe9fa35d0 -0xbd70c07e4c40dcb3652ee616eb6dc0652c99cbed8158e9bbd224e931dba96b9c -0xbe9de990a7cd023145ab3b5eb57a9c1dd70c0bd70e30249a989611f7e2a1f635 -0xfdfc28e3fefd66dec39a082f57c68a8ef85fe2cd116794cda4ed9758c8618b4f -0x677e0806140040d0880e3ad4f61cb282708f02cdd7dec2408cc0d2b23a5abdd4 -0xd8fd55f3577293fd0eb93c9f56acb21b6b6bdb115f7c2a12d16b836d57de2136 -0x39a3fdc3cfebece34272c076d5b3afce4803d305c857680db2aab7f475be741a -0x4b4be23326d51e603549ab86c681af5d6a7fe6a279ed385019d33cb98027fdfb -0x56949d6970336430f287eeb3b3141806b04f8b95e80f142db062b69cd725eb43 -0x2bb1b50e35bf50451918b43fb634b4fc4f2cb7307a711b7336633b2cc85e60d1 -0xfedaaa467df28e524d71fbd352d8cb5ba6b08a3b8f4b1b742e88a7e2fde382fe -0x2cc6ccaab644bcf412c8cf467c6538c558b24f7decc16d1a5974d63b1cdf1834 -0x0f61861bbb20fd743815ee61ae55bda0586a3cc007ffc6ed2571dfc9e4cc5937 -0xb2b03d12cc05e2b6de9f19696743f5f84c7f3daef63520817ffcf95099e96854 -0x62d59c8ea5b1e335a341fa83edbf23c9d6332993fe36c7facee90bc74d917fd0 -0x4c81d71980a64a3bbdb55c0375e088451c2dc473b8ef825b333e80abfe06fa1b -0x0d6fdbb0f9d9943b9f2a20068331b2945521013e04ac1d623040957784511c96 -0x1a1473e743566307e754c0ecfbf0dbbe8f2e4e9661eddc775b861202d6aa466c -0x6fce6f8bf1a496d1baff7ea5c7c74ae48186fe1c3c9153281f661940d22195c9 -0xfaac4bbcf835153b18a89a300c643d3892626d18c5195d2413f663e6ac12880c -0xe37bb54f7f941b0ffb49045d522c66661f6c9d4a2b5088206e19f2e0f69ddf20 -0x1c54a804c8fe9c46105ad040699767afb865af1c543ab2d23bb336cac5268ead -0xb18bbe52d740309d2992b90e1b1dae5c711533e2bf77e67607085aa2be2be2d2 -0x96f1e4b18d12aa2ceadd5c3ca6c9814b42edf85e2052950f95f9cd40590590f1 -0xb11c80e58242d956f164b51021e8aff54aa8d467f92b51bd4a97e95dc9924a23 -0xa3564165de08d67db85e4321edbabc172d90fe3c1807a4e048c23fcd37cf9d8b -0xd45f93fe235b8b2c822258a20fdea572da648f4fbf7b289b9bec66af9974246b -0x2a97819d413d4c59d52b68724f2feccce40b9b744ea62429e7372a1a06c01d4e -0xe56a10fa1cb86e40f58ead2f202773112d4371a48d2764649b43bebd596c5881 -0x3b2f7357adb7156e6941eea5d7cecdedd5a6f82ec7a272c539d65bdf9befd60b -0x315c904554e388540cbf43da00f4717baf46918f3d89ad432912b1d0739887bd -0xed28efd19b1fa28e96106f5e8560a086b661eedaeb9ecb2097edf8728db03c92 -0x2dc60b8c6b1c250316c18d9d316669d20063006bd00e8c1d9eb3e0cc0b6df721 -0x094799f33752f7ddff50035f23697e2f3dfacbb43ebe384e3ffc38e54049eec3 -0xf9286c8f6fc5b2718c8fb2b216eeda2357868835d9e01fca1fe62082fa7331d5 -0xf8565453d4ec53c28c6338e6f7054f723b520451890615e88adcb5f82c5ab12d -0x69249a4d767e1e0b507ef97e02c9d4a22446909042fdd9f8b06ed49e06287a81 -0x882cf0502e1e9b6e045234ccb9832157d1aba0480f09ef0fb2c4e265bb19b7ec -0x95fb4026d8fefb95ba5f866c94110d0cb755b330c83633f33d03252b534a182b -0x72d0cd153c22c9ba206c6e298f4142589daff06a16b01de6b94d5dc86d7feff0 -0x7b65d46070ac99c85dd253148b0c845ae075a5f8ef5d0e99de2e7ed503386b0c -0x672206f04c300fb44d47397a2a3d38298e5c2d5d6c5ddefbba39c5779b975026 -0xc0e615b9dc2d12975426842b0977e07beb22cc8e1e27f667f45a2616da003a50 -0xf26be143e42a0026647e7b93ec70140acb5432b6f0bbd808cfeaaa63f1c4bc26 -0x026622e86926129355bf237905c17dd4a22aca340444a4326956b561dcb08299 -0xd6d728ebd73dccad1ef70f4638e0f0e456b9d4c08364964172f20070e114f384 -0xbae73ae0b5f2866e2264dc15d5898e8b6049ba35f74eee1f1e92abafccfd55fe -0x1ea4bf14ccea13676064048650404642d57929561c3a6cfd271b70ef7c100fa9 -0x61b9ce24bf2293c9f78152753cd2cd6f7ad82711cb0b5853eb6c946486804db9 -0x61073af76ff5195fc83e10b9768760909420257e11004e28ea84f2e56d035798 -0x5b3bac9e5f8c6cb068a39d070d6f624c6d15becf125e1f0fad599a3e2ff7a350 -0x5f4ed82e9c542f0a108c25e6364c6049e367fdb4e1df222d27c3e691a33ae6b7 -0x3ca76e37abe6e08c933044bd89f1dd2574b9289dee060076cf91476aa604ceb8 -0xedd4992b16b670b83101966c082a55f4e1403aee9f5ce5f2447b6414ca4bd5be -0x30e54ebdc40760c19684dd3dda4b682fa62ce3f90d449e04ff470d8d19218dd8 -0x18275152af72c2dfad5122bd0c4f21eaf980c137509b3b6633f8a57908d6c491 -0x9496b2d093698cc9e5ee02a27104d83838b212d098de2b70d620d3ae8392d558 -0x79493a72e721a15279af3cf3e26fca9105b78b8f13cb307d402eaa994620cd3c -0x96ffbd87483ec3e71c5ea8fc3bd0031e18dc735e2481bbf932a671e65b27b464 -0xe73b265fdb1667bc0a86180a75bcfb6765d80e666593bd99053a584fc0ebf49f -0x3152815ea31f0e9a60c975e7a87776ccee6cd39a9cff3ffee6345c3467496816 -0xceb21960efca0386e9ce52db012f8540a3986e022bc13f5f4a3664712bf5ce1c -0x7f0bb0f30dd17e6094dce61d380f63ff8470750cd58b833f6fdab8c0662fab79 -0xbc131e38dfd345fc6f6729e3dcebe12d74a144b162bc528c6e0b0e00128fdc30 -0xd47275663b67384401f36bdeb509234d719c57a2e9ca95d18a27cae995b619ac -0x71af03eebd6bacacd90882d9fda3030c454335ace852954a5fab94b7ec12d1de -0xa7ca4a483fd0a4d5cd8d208c01d733783e226aafd66bd6e7e6732f5e5563da66 -0x16db750468cfd54d1580965e21261414a29355b456c69aeacdd597fe15778cb3 -0xcb8ebe0cfad49863193851f5c9219cc9d2df344110d1252ad7c9b1be3f52a995 -0x645f87a3f193188726132a29620958c95fd2bade4b71639ff7946b72c02fb093 -0xe8c12d1d93fcf54e8efd1e335419fcf300b005a0e59ca8ca5e2391cfbbf97b9b -0x8dea084a5513a0d63b24570488f44959df8e9c7e20efe9829737fa3705ae1729 -0x04a6cc534dad68b775d23f23c412e0ced16a640c9635a09a4121cca160262b4f -0xe01cd5d68ab39664677a55b715f6d32b0a7644d2776694113d39005f8d44a978 -0xe7a6711d25c40580ab793e1f6faeb6fc8a4a61a601507b5b016ce9033d005c0a -0xfae64ed15ebf114b74124df11bd7ff21c3e3019caad31e7eda40d3552d9f72e7 -0x25bf541e5d199266b98a90e5985affccc9674eb707c115e79792e25ae84d6a8d -0xec73f6cdbd31cadd56cf8569efda85e2331bd15136c5f5e5b4bea2bf71f3a257 -0xdccd78787584129aaa70a797b441332e5e2444b2dada95e2dab10c173ab2da1e -0x8833448c67bd06408532a7a51551b1d9442a2a2792e8d896f61eab9512b3e824 -0xb5123ca49c6c79e39fc3156d6f15b32ee373c63fd8901ecf851c4a23f9c97950 -0x61201816ff48ed3acf751eca483e1e414c4bd88e1cc4023dcf03a460354d8327 -0x4b71a96d4894a46db3852f37a699404e698a5b5946d72e4be04421fe80b013d1 -0x3d0296ed95113ddfdcf7192d813bbe55dd386d7081f8c0257945fdce144da6c9 -0xe38d04d284a0fbc1033406fd6cc9409c9759e0700726f35a120c11d5df4a19af -0x4057590e1ca432b7c46e6f0ed34928d5fc147f6816534a03c92b1714e03f3ca5 -0x87e57833c066919c95b2529097f3d822d770903e74a4de65e4d935e67d4e4b59 -0x6e09c7648f36677fac12400d26030c616359df0bd20f51f42a805fd03685121d -0xf16c5fecaeadb73d3e8c2503b8f02a6b1e7b2a210b34f54eff888040d742b1ba -0xf2c31404479cae7cd753a1f46b89d1f6910fc0f3f4230657dd0723249acec1bb -0x414d9a53856e0ad076f3ce42c7e5a1eb975ff38538be5fe14488b442a2eb21d6 -0x6fb8c48b61977d5a2485f44a8a637e2107f73ae8813467de2469ac811eb40517 -0xdca87415dbac87a6885e45faf107784b043cf45e0addc7772a10735f38e5b9e0 -0x60929a32bc21c9f6dc2f2361d28ca1823eb30cfc63713a3d4cb2ff10e6d890bb -0x212b8ab46c9901d9a544a7ea1afe2c588e7c3d4a75852d27cb132636febf2956 -0xbc13e8d3b955c298ae8351a2b399aa908910f9e8369b5efc88c4140824a9ceac -0x88387a85adb577bcaff96616f0d85ff993ab91567ccb2725749a67df3a545e28 -0xa2416a18e2ab94d776e38f483b6eafb6570670e345b39bb30c31404d252f12cb -0x0ae7d86242fb1fbdb79877af22561a91709131b03e1bb2ff706edbbcc2059f35 -0x055fe9494a166e540ede3aeafd00b677a63604c1508e9976fed86446fa654961 -0x59c0846ae516be2dbc4243daba7ccee7a36ef1062ec6a957774f495e802da210 -0xe9b576c51da40247e441036f7e5463299fdf8609810c47b3af03e06ec2d14585 -0xa968b0f1e204baa79a8be5f2c2b7f8023fb1725745af1843954ceb9244d8875a -0x34797788c8b4a486c853ed694ba750dedb6ec7f19446af612e259cd85609ee6e -0x8babd79b4ead1a000ad887c77abd21a2ef50c86e0af3b6823c28500e91d6379d -0x7eefd8ea15cd2f82be90e24721d752e07771379826cef0225c980a5bef5fd722 -0xd43819d8099bfda736638b5112702b1cce20118bf8464e5a3696f677b2d508d8 -0xef117d526645471806eaba84739ca4cf6263afaefd714e65b09fbb96a43cf7b7 -0xddd1b0961b5e3c87e689d568613a85573342d5c485cee7c751f913fc10ca26c9 -0xf14950d3172c44aa06b79c1b55ae2c3b9960e8ea91e67193cb3b0775972a9e1f -0x8a21df1e8ea2660b1c63e24a7f2e031d8706cec3b43a6c16f946ebc7d6fef148 -0x0d009373abce3ff681de8c6dda4c1245cf274d84654ed1db1b4f313e3143e5d8 -0xaa51d5476eee3aeca915b8be5c8f2b068698cc5b73da9ffcc973a18387795460 -0x08cc715085a79a12d668d9ade103e61ff9a58effa6b729b54ff7cd3e2ea70535 -0x3fd3f2a87cfee3e316ce5368891c6106b6a7e72bacc839eae7291b61dfebbd6a -0x952ace8eefa9116878e4f2cab6f74406af636889be393e0e61f87995de192f06 -0xcc81954aec88549b2914ca2723dc8e86ccb77c8d594ce417df522d6a4ffaf5e3 -0xeb4ffd82cea543d340e53e935943ab8e7e7a951054f57a8173d49c359c34a6ae -0xccaa66dc534b53f5dc1f6f901d263fd9d4c8634b3f93fbc7b7511aef28d2e631 -0xbe0b09688835b3a105a0d244d92fef4ed91b4c75905900485c42ef159ca338ef -0x908e5f8a8154f03b4544ceb68e0ae2cb302eb1a9b0ccdd73f1ec2224756209e5 -0xe556dbee313a29dc1f072babe425fac04fa9afedcbec4ab848e157324bb328b5 -0x2da5c00d54026ddfb42e3a886a4d05c565dca33470a2414ecbc79750f563416c -0xacd4a76265b3dd5bce68781910f85c1fcc1efb90f6e5e8bb7796afb2c5973b39 -0x92118641937e2401f91902c06f89f77c01f16f63214e7f689acd03f7bcd10de5 -0xb78123b305ecf463ccfcd68b87dad99fc7f5a960cbbc5a47b02e436eb0fcda35 -0x78666d8a94049797eb4af3f5adf17adf8d367162992a9d03bc7927a355b94176 -0x46ef2987fb47db790534127f938bc0be3231aa162e3c8eed468be20020a5ccf3 -0x400835a00e61ef100f1f4b8a82a32bc2e79180b15ce311f3f12734034ee219e4 -0x280c5132261c13b7211c3e2efe8fbe1882417562b90fbdda0b65b5d909220131 -0x89af8f8663613eb5c0e21a8b8a84162a5b8261c2151b3bba10d6ed20cd5d6012 -0xbfeaac91de0df4ced14ec5765622f6d398da95623aeac2a0e68f4c51f344cb51 -0x8bb758aafffe0679b02715c1bf4ece06e2e087d8b0982164c8cc7d31fa31933f -0x3a4cc8f19353caae6f2b1643bd0178315d9ac85631c6d31f00990732709ecd84 -0x9ded24a6d17f09d1470cc576fddb4d4a758b0ba5bea3d3a6fdfb5982d051fd2d -0x3dd4344c9b1228b03c149e931747580548d13128f51b90c67fb2aa21c218b65e -0xb32ae6d699f69ccd35f330349968e5ae72dd640fa0a443e8a63cf3930da57737 -0x77b7874ef63d10e13b3b8b5f15c3f6505fdb64f54aefb9785b318d16b3989484 -0x956dc3235bb89ad34a7521e1cc3660825750ae952fce7ae9f4ce4aaf8cc1338c -0xf9387eec657a5a1252c729de3fc7edff6c47a614bc50b2a8cc8f416b41099f76 -0xfc9417e44ea9c5fbdf8d91c09855c840c2e58c31cafbd6010fdccf0fd196147a -0xf1c834a29c7394a8d399ad0cd2714d363b10f8fe8dbb7c2a10f86a0f679680f1 -0x8b1d4d4ceda758ec07397f6da78d0c14a7fba9ec70e5d2a54d6d586fdb1da72a -0x2b26b7404e90e3fcb89ed157141ee7f792359311e4052a444142ac23068d3ae0 -0xbd36463ce33305881d5e10c9cd8a1debb254dd74ec83be163638497116b67051 -0xbf43878d20957827cb29cb8c643a73efe1b04e66e207ba9716720c3cb58789bb -0x0588bfdcf9e5c32f873ac5089ade261ff01eade94765cca783d7e283469f40a3 -0x656def785aa3b30498c9c45740cd3a88561d9f586d45703c69fbe5e8f031fffb -0xd935fc30a814bb85f765f0f0fb34bd198ebb9577698db8b636fdbc34917c8b8b -0x5bd325b996d26ad1d1149ff98b93eb5e0d6013292e4035cefb949db0ad06f07a -0x17249fe435f274080eb9d03a3acdc1de93d59679341d052b787862c830ec34a1 -0x2b2b051326fcf00de3be4b20b32e68dfcb55176854652b27cf6bb93ce999629e -0x240a4803d815ae94b86b783890f39a5bf55a910a406f3ec392e0b88250e6b1c7 -0x5e21c2d2ac821c18d94e82ffd04c85d0a03e1a4a8c24d07ca5530907818fd1fb -0x644c164faf6a83ac1022e68d9c696b5a55d6f255a235d3af77d8ede2889420d9 -0x833c8e3a109f4f9887442e10a16a5ada599c722d94a3ad77991e377dbbaa0912 -0x4f6c5e6e1b2114425dbb07d11a37e1d86ba62d5f544840c4b7c281e2df859922 -0xcd00ac7f96e6cebbcf8e12f2b37ddfbf43db493f85519eae412f08e632e83314 -0x0ce5c94fcc3c211958e64c05635fa8160fab59f3c429ce8fa05e184f46da2763 -0x772cb24f4b109f0aff5da791c95ced9290ae51eeea69f8d24ac48f7063465a2d -0x3677818d1c45f7c8bc6ac5d226602258d40c93fb6dfb44d3f6bf377b5c9e91f4 -0x31ee376f0fe59911ce0bf0d02858eab8aa7ec0128fb8d10fc219fd60b10737a4 -0x2dde72e15d3ff769a27c7a003dd6e870e2ff4d62eb63a22046700ae2f474b9fa -0xc4421d5e54fa3a4da46cf48f75cf670923b017b234c662f9c751beaafabc5301 -0xca9f70a62ef23a053dddc8e134edb0ad7565fd7879544545e0cc50f70acd8794 -0x8cda89907229798d89fa9386cd15561fab00cbd7f7ae990dcfdbd5e545f3995e -0x207c4b888f25b2160ba1f4d6c4368afc07b165b8de455c1600f61b7efcec138b -0x5b26bac386ce7c9ee080a2a9c739eb903983e9c16903e0cc1ee56613beda37bc -0xbbbace4377dd4e7f0640979ec55848765780403ebb59a3251835f48b10776d9d -0x51c8109f5e244b56c17908e1dcc443aa8be266c8c9a191f46bf2b2ac0e8d2f84 -0x9d4a70cbbb20d516131df86978c434c06186e2f6e24d01976e6d92fb85a079ae -0x7ed8f8f2ce7d5bc1b8798090f17b384988035a9be2cf1546c3d146abd9404433 -0x957c4a133df66abcfbc725f0a4d4f473c808b16ac5c32ea63f3b9421be807636 -0xd2c564a20e7143896a49e6f73d6c7f2740bb61025191534a0eb6e3e7683f064f -0x070e625309fe49d6937b7557adf5e21c65e1a62a4a34894cfdc91bc2237b8d0d -0xab7fa632701ab208c553db11b26fa36d99a49af5f21d3af530c5c4dddf40e476 -0x10846152cb682657b2a32dd82b891878faa4f7581c7616a3e22f746e3a917964 -0x3a8031017a93a2e8a895b374ebd23be8f77e7efe36ab2c1931436760274f626a -0x6cddc7390488ee8f62aa0f8266c8571155361064818405ace62a455084e66bd9 -0xf01b4ffd11f9b839c10a27e11378c32e835924fcf7e7d2a071161864de85f142 -0xfc6209de33a4ddf25bbfa8cacae1fd2d9da03f06cddb58d225ce5e12f4c56e73 -0x75f9b945ea934701340f95872af01f56caecd94468de72d76ece0c095c360822 -0xf33dceeb2919886ff17c220138ee0c694b433d1a0c41df83462270669b2ecbac -0xb17d32079db417fa50952bc389feef6e94384765821d0a959967e74c4a519a7b -0x651c1f8cb2671fb95beb432a63e3601f06748bece1f742e225d0d5c3641ace4e -0x9e867941a73a8b2bfcd99eeafac4cc53a8f82c13d1be6661421f963cf1f03aaa -0x1bddc6d19317278e30ea105a237a1c11831529f10261c1eb12baaa2cd1a945c9 -0x4b2a21a77daf275a7a83c2aa4076914efa7e0ee24be04fc9d48f0bea2a76ffc1 -0xe60da2cf892d1ec4995c4cb5bd8b7a0284737b80a205bb5b1649b019a9571c50 -0x8a937b8466e865711c762aac151fbda9bcd5ddb80d21e7bcd423ee170d49f131 -0x1ac3f9ea3cae2ab60aba77fdf44aeb745f651c6d00b15d6dc6c33876b358d59e -0xfd3f72206de0ae6b9ce0f74a480e37809bb076b14707d1b1fefbc79e221d540c -0x3ea885c7825b8ef169e21fdd16f326feb0485f040a494ad6943993e8d17b345c -0x2689ed57d5655659abd1a0f252693a481ca056199b5133e4e9db85570d8b5d3c -0xe2bc2ac36d2553842003d0ee5568f62d8fd2094c4eaa342bfc77f2a07d8f4f97 -0x1d292fbd8f06a80c453fa0d14a97fb18b1400eaa0ec5b144b309dd71c6eab177 -0x1b50e383c04883d08fea13063aefcc55b3ff0f2a453ad1c5dd8fdc8759a5e747 -0xda08e94327def0eadeb8470d6948a88919e1e3add447f552d1850bf1277f35c2 -0x360095cfd8193c5259558331ea06fd1ff82922f660dc0f7cd5be74a469c6714a -0xa7de5dd68fa1e2b8625f37c623664cf3abcc852065f6db02f925558db711b456 -0x5e7eabf398c8e4b0346b4fe22cb43b1df7452198bc755de6e34330e455364e71 -0xec06b027005acdcc4ef2675d86d821dc7b9100fa8ec5848cacb34e62b942762e -0x924799b5fd6fd68cd15ff10eb88f529fe3bfdec089a168b94a7e26f4c29e68a6 -0x1c7e8f718521d75de65c6cc43702fbe9617723e4fc90b620db8864f9d57c613c -0x7f5e6d891c121e54772a9577eb1839364dcad40cfe777d30c97cad154318764f -0x95700ae24c174b6ca6404b9d236c80ba1ab06bbf05455bdd5a3af4cfca82e8ed -0x57279a3544befe36ff60facce29d656d7314b0ea6d72f1da0bc80a2965631cba -0x8ed922bf0d4384b9a4239ecf5c887d1ca33789a5cb3208cf116c146cf020faf8 -0x007798706d40db7461f6a2561e7f04ac6f9e76c6bf7329422a368d93821cb972 -0x1f9f882c49f3757d4441b4c1d9495cd423b85ecfacd2e9ee37b58155ffd2b977 -0xa08381b725c8c2ba6f8de44be2c14559e8eace7268b2cc1a8de429809f0997c1 -0x9028b32fa4ea319e1ac58c1e210eb8481697253e90fff1d8f339a162ea333ca0 -0xc5f964abe8ec052cab7e81b30d56c51407a56536892fd387cc77234095e01907 -0x4005986d40e42256fea8129646b617bfbca8db4d3b499681485c5e6415371f15 -0x3ead635f0d2e27432d5b9b35aa56432f8a564c3d8bc06e42002548e8f5c606ef -0x3c24c12c9cd98316941e725cd14e034775ce79b411f0d518fe48c1420f06b027 -0x5e99bc176b7932ff9a37a3133e7e62f5ea0938bbef2be0379df4ee2f272ddd7b -0xaf4aec75872ccc5695e94e668ea9203d8e9fea1dd531418e38ea4340df6e8ac6 -0x1f9716e852a01f045d124579d7c9a3f8914187f0f0bb591cd44c8ad741a06698 -0x0b26bd482168d5fef31e7a71d6f8bb55b719219fbf395853ea350a1602981d6c -0xc5401cd8edcbdc8ee566baa7602fb9848fa19c1a04e75a2e17b8b146d656ba3c -0x2357f0559607d970c0606e7eb34e152aeed2c856f9906e6850708301ccd8b6c7 -0x0e9cd2dc937a9a8d99812c9220fad45a5fc0f34132fdd38f18570ccd315dbb1a -0x077b1923787733edb85d486093957dcf43dd370a3bff339e27b436aff053dac6 -0x38cd5fe45d3fcf1a5cff00556337254bb923f3605798139bef82a14ccf223bc6 -0xd04852ebd32ca3655b126f159b3744a126c02d8652f83affea4d1e49967625f2 -0x9556d86a0e00c498183362d9954f520d5d2d3f1c91880726c6f2ab9ecfa93a7f -0xf826e56b93641692e60296b7dbb89eec36d416fec22af44eb34cabfc4d5af59d -0x69d3b731492dc58305dd98254e33ff151cbbb72d410da8cfd840164cc1f718f5 -0xc265782eaae4844aa75b239bb17416a6fcc306e551527c1bebca098b14d81167 -0x102c9d861775876c74a96d434d4bd007ca401ef7bb5c950a368b879bed8e4874 -0x2f3ba5e9350163dc29e85867aeaeefb28a935245acda72d02fedc9743e99069c -0xfeb1b2e14f71607f6e5ff8178c3bee52d8b1e6ff610f80b6b0c2aaab667afdde -0x8e718e39bf3bfb8ebffe09248dffe50a1c3440e64572519c8be648ac4bd7a68e -0xc95d206e60f392a31d958e5bcfb8c2867090e2a86a3d86681f484c8856821023 -0xae7de0fca02965586856e765ee688210529aa24ab0c52a584c46bb4e4c50b249 -0x1a42cbcaa90f19e085227a316ed55ff94a6ef3f2db0318b50e27a14c098f8347 -0x2d1dcaa2349d82ece5ed382580acb7bbbf22377c7713feb15e8afea306356b83 -0xd2868d6bd940a990c3c231923d725f16e4747d676aa3d7508f1b5fd7cf5224d8 -0xd2a0ae7424419e0cc32555880ba71821078f1da91f879d0e05063918507b723e -0x965b44bf30f6763671e10661ef5546af25dc0c5aa2eefc1196db21e454aeb7c3 -0xf9b9e6ee06a6e407ffda8392c6c9e67c6617f579a41461552ac3fd75f1294e7d -0x7d27c6b61ad7e5317c92206da7124f39c95057b608d13a6d4e48201972890706 -0x8bccd0d56a867e9c35e371131bd600031d07856aed7d2e5eb4e12e4afd87b42d -0xf421d05e856fc46e9aef6dfc94d5b1810498e6d25f1f0c832c0b14795c4913fb -0xfefbfff78f876cb531c8155bd7923317323d4966eb013492e3d9b39e22833726 -0x9af2d67f04a68a19d14e224650f103e93b1dc6a4822f92dc979b72af3c05f7c2 -0x19bb0e3bfec75a2c63658f4ce236accb9355c1c2088281236f0e3417fbc9311f -0x0308865d9509c7433b4c044cc2ea398dbe58febec1b2318ab3104e5412c71f68 -0xb66adfc03622a8383aed6d75afd3f5339cd0aaf9f1298cf617015c9d97638ab0 -0xe6f01d42e3fc278196942df852b57ccaa19d9398faa7c4bf494b234f429795f6 -0x91ba8841fd9fbd33f35254df16fd62464f3f2fe993186f243b85bcc7d8d21fdd -0x9d20296b4d927bc4024b1a817e6a276a7b210194b04ef79615863a5f0ea90ea0 -0xe554d5e2deb97707d037e4ae54a091e1c5a86833e19bea9afeb60f03807087e6 -0x7ee26ae51d36d936bb2b9059b6803d967f1d1b78fb4b361d9a57452f40c100c2 -0x2ddf9824c2be3f8e782b7e3ab13fc7349beb223f7b49e9d4ba375c4eaa5a7cef -0x40d093ba9689ece68af0f00e57659b5f7c761d81fb345d13f03f88a2a0ddff8e -0xe3853eab2f53f3a648042fac57d9446da0f66a115dca5827389f74a9f481affc -0x2dba464e4a6777ba33d6d916e126a314ccfb50be70800c28227c213f20170915 -0xb0b3ddb3afb56ce160f85b57d2ce8ff3b44efe4001112009107944e487e36022 -0x54fa35e0199d29f4a4f67ee0620c2131928041047fb87a08b946b11303b73c1c -0xfa7fbab09a507b8b6fd4ca8830a2e54046c1b825274656d063b85860b020b9dc -0x29b3a2caccf71877369791d86b89e30fe8a040a73415b031dee4681acc3cfce2 -0xa2c37bed8f8f6b7975b261d4170fba8f82ce5eb7d72de136803bce81322fce56 -0x4ebafb58a7e3e509f036df5e5238aa04c4ae11c866c75b8d69def9090013b5a2 -0xd236730f12345a7c6ff46e832c15e001597b2fc569e27cdc44b5e1c21181de90 -0x40faddab6fb83243f566de26bd4c5c10964325a9bc3d320fb2788f43f7984088 -0x601fcc69e3bae69c4bdd1ef51a389b9cc2f92c1ea037908067305ac14f92e944 -0x0fad729c1c4a7fbe380772d06764d6a389f4b3a1966c61c6551939b8504d65cf -0xd1467066513581ebeaebd7308263955aa26cf729da70e403e82baad09d11ee1b -0xa7ba863ee604c771ba87f18dc29eeb5b1b7e92e3fa0a030f8d6088147407eaab -0xba713e09b53426f8b8d605c55117eb970d83598f54319033f1a604952016b430 -0x39d4501c1fa9c3aed6392b17a03fa4c09d9a6b941abb1a7125a8bf7687d0ca1f -0xcc1b654d03cfd92b0e7690a9933fbbcbcf175a8b67eed66ae40265d0a04c9c93 -0x87f8f803940b942f8af98b6c8348720e5b10c23dce13e81f4765ce4f5bb63d6d -0x894b6d00c12f141a32c8c4e560344d671acd5f808e30e365255ea7c66a2b3295 -0xd602eb6db1082ea7b2de6a6328f0638651402798584aaaf3a027e9bf2af82423 -0x141f2fbafeb255ea40de726d34c777953f238234665a9e23334f7c06695ad729 -0xe896bfe2668755ad628612c01db505fc79468a28604ec7037cec482f0f8223f6 -0xa9bead9ec972379b9e095a0bba02d87595789374ea5079c120abbd9d272cbd41 -0xaa816984c17347ec7ac150190162b5e9af14dae5692187404e5c54703de72231 -0x36bdd2200c4d3e545a6610de4a9895c2eb3fd3cba4fb9ebd40db704343aecd53 -0x531ce08066421f4ea8cfcff300e8e5323b32541d94946fbbe8087527708d02a0 -0xd2d5fcf81cddf2933e9c17db241022e482431bcadc1fe5fa09c45adafd7ab3b4 -0x481e1cd1df7609b25c5a3deaf84be4533f203857c8a93c044815d2d531222509 -0x3076f741d692ae49a29bf26816cae2cb850a39497b65c17c38d99262ab7aa79f -0xedd8f7e389533ce9ffc2ee26170e73924923c49efe4eb74a6d97e35eddc5bb9f -0xabed204fe6e6fddd6c363e311148b9d42017a1d19dcdad47cd88db8de1ed6ff9 -0x5271ad95fcf435c5c3a13011262578b9a27574adb755f6fc2746fd94592e55b5 -0xc596345b4c8c44ea8243779aebf7cfef37d67c96f3c7787a99d5be0cc044864f -0x19591649fafd1843f89970bfb696af6243f96a68a86dcedb28298a91b26e38ae -0x0dc4ba1ab7ab57136e1948cf031267be2106458ce23acb6e7af9f8a572ad2dee -0xfda4e8b49952101d3df90477bb032a5980c469d4179b77cfca6a71a00782867f -0xe8e23b3071132b6a39c575f40afafa8f135f674badf2c12241d52fff29413038 -0x2698065ad143264f92e66efb1b1efa2d4f936552d77c283643939367271f262f -0x9d43e867b052faf43f43db855e241e21a65fdc3785929109cfeac72885264bba -0xca0de4bb59e589727ab3db057b404a5abd6622a51598e7f74f4574a1a6c61282 -0xdeacd6c2175214e7bee5a065dbdf7195c5b6a3936348d075c8508b6eddb891f5 -0x2ce2adb3ad4828abc09a470df944dbd51c364cc3b184eda72323d73192630976 -0x44cb13633e1ac6317ecba6af18948ac5ee1f1e2ef7e0e5265f461ca8c909fe49 -0x39da04bc78321a1c4f72f93d2b6db5c85ba3e51d30bfc852a222270a804a1057 -0x6e21f531a7ea4e8a07f6f8aa2f81d3404166729c16aa5c13be8099951cd6feae -0x72df332075871c44b799be0273f4464261ca2937f8718a093b0b8a94eba624c1 -0x7840d3de939704b906c35609ba4858e494927b113993c77fec0031f55c21dfbb -0x0f5329647e78a49e12281d7b08312e6332d31a3c5f264e3e64638a031982f8c3 -0x38153ae972c2e946382c636c562026a55a4f5913ccbd31782298108fc70da3d3 -0x656f35840b360c27aa38fdf1c0bec16d2e1e0d42d504d323b64240673aec4fba -0x29969cf7fc83381a874a3585d8b0db6bf52ed042af6d44b71ea5ef7e63016697 -0x0a0f84ca4f7ba7070e3cc830286cd55cb186bc698aee66a181be2e6091eeccf1 -0xf07b184626c38acde7ac833232b434e49ebdbe121ce2ef40fa66b0e32c8649c7 -0x0d2da18a1c54a7c411852c71e09576d07b47c23f45c0770c044109a7795b45a9 -0xb8ff396f04589699e59cdd533db8dcd7218e42460e2387a22b3e37371497160c -0x677a72a3817c1bd5b2bff58ce3890f3fcac00a7d0dbd551026599d17318a18ed -0x49ecc93dbcbd8ae72cd68a67934d39ca7ddd6d1d5c4e0f4e87dd820e076498b7 -0x960c26dcc7965ac2115008fe0b8bb5bd8033c1b9f6002cce673f582fc87e7a4c -0x18d638e18f92754490f9f0384ee13d6a6cae2a4b79213b3528c978930f7e9798 -0x051483fa52b9b3ea8695cf01d56576394263deaa349e03d418806bfd779236b0 -0x2ff3227426762d269e1e3eb947cbcb907f3bead0fccf3f2ba113702401a78d78 -0x75511699d390030cbf49a8b6a3580079852831de769522418a4cc98c95e7d843 -0x08d66c5c1a596232b4ef92d7b707f6fceef49a64499b9494007ae969fd2f6132 -0xfa8ed5d4e21a5bc51086dab3d4e06ac343eb62afa90bf4eb226b5b15bb139657 -0x4730a3c4588fa001859884b79f2cefed9f45b6bc58a4430b2d06ae2c84a6b1ef -0x8646f07e0ba91216faf5bedcda6f26acd30cb6b2c4263fb4d51ae664d1268643 -0xf62f6e6d04b94df7a912a5b00fd3d5b62a0ae7c6a6022ae6b0fac90d532d3624 -0xab75a82c9d0ecbbd4acfaba676d34bb6283137c92fcb2a0d224d3b55eb369333 -0x1357eaa0cf517eab8124a9198fccad1807447f37c6bf13db1655f3dbd7f9bc69 -0x0d2ed005f0a5220fa1910e3c7abd8e8d80997f55e3e5f33fbb0bf9872fd457cd -0x921b9b409b627604bf9680ff4218c7d2423f06f8f6c0707a85ffcf82277ae8ef -0xfcedb21c66492c9c18012678c4d8c18570e7a1e659152fad637287235b1f415e -0xaa57e2467f3fc218b41e2212532af51916d50dda25f142f398419b3763520583 -0xceb9a9a0bac4d8f0d2c542e674251336bf8f9dba74d4633d5f72190a8ecb7933 -0x1fe7ceaa9f76df6505ce9e3c732c3fec1e231a1cf1295d6ad4b050a3ead1ca14 -0x6f496e46be61d48a1425e45df3647555e63a8eceacd1235290688f0906ef57b1 -0xdebd7d09dfabe57ef684f58928e8d717ab38ddcc850460f8897cebe306ac1924 -0xdf984068ff8675fb0473dbbf2d7fba2850d764ece82ff164d3eff86617fb4148 -0xa2b77ac57d2840dce6508cf904e3c3dbee3289ff0012a1511e121267654d57a5 -0x34fb82ad0caa95a1acee058040812e2cd46477e3a869b93cc95751f9c205d357 -0x9a7462c3788d43c06c284957c712e9e7f9eb0c24d13bdd086ce888e3b796a249 -0x2a719db80b84c779ce5484d40c88e253e2c1ff41b7c091b9a90455d867d69f72 -0x8db43780851acff64663714f44d42e2c86278edaa02e0dbb4f3bcc6d5b1d0ad2 -0x3a99eb731695496bb5be5e31b9c7f775dcda81237f41d22a9f6dfac79aa86e38 -0xa02cbd718853c3f75205748df37cbe7a4657cea66a8368abaf36ea6127d7fe4d -0xcfbad9943d5ff5a48c6f6a0e3d7835c50e909be6d429bda437787c3eb4ed133b -0x69224c65ffd26f7e5c786f791967675866dac49fa5d16e39e648fe081f44a745 -0xeb4a9d3c027d14b33fe2868e6ce176e4ce03e496a59a226e521bed22b2d292dd -0xb003f771b967f54a319951ecae5bc067b81ee7f6f6a7539c58e46f124afdc5d6 -0x40542f73d81ee9b4e9d11ebdc81f48a83d60fd3d2e2e004ec79c4ead91d55a07 -0xa67fd7d7821759f9ecb799d9925e8fbd93fa37ed71a294724568ce1db1ae46dd -0x9f1b84b1c1a95a3770bc75e6a4319e273c6d46bb941f2661fd846513b054de42 -0x0a950aa5a25ae382bffda6706f04eb564426c31c2f22e3d1bcf3ae46556ec6aa -0x0397ad86c39087a7c295d8fb06e1a8c20d2ca8d92e7b1b9fbc4e4770e34ecc92 -0x0dba2deeacbec8ef257102b110bbdc1b59ccda456e3f1b985cd5f7bce7317dba -0xc836b07114d946779486842ff31473bc7fffa28948066e3cf2a0570ddfb5b812 -0x371d6dcd3f6f8d59b35252f75026f84b4997a651dc86bc685e49049478c459c7 -0x444d53ce933986afc271fc3740c57c50947b7254f617838104a32a4bc5d362ee -0x11a8456a7bde554f92b137741c0451241ffeee4a5ef4adcd18336e9a0cdca67e -0xe705e409302b410300336c98c1def3ab6a1661a03b796c000b13d60ed383c0bb -0x8f12140a9c943395a01730a6e16dfdb2b561338961c6219145b731dad6fea575 -0x7b4704d3882d3419437be284e11555a63cb8b8efc99110a92493bf6011b24f2f -0x6550dde0fb16e9d1e28804ebc6b7b04c0e140ca0c595b03062daaaa71159445b -0x29689348170eba2748b9be525110d4ff74f58a486ca308867df270ea042ce49e -0x8611dc78f2f60a981497197bb0508c207915a7dd6456bf64b7c64ebd46e403b6 -0x1547b3d550be667ca55bbf846378bd978f9e8840f4ca20736651b79f962a6e79 -0x64a6b335623214c01ae07ea0dbc520859c85bd6ff73f0e52adca9f86a827541c -0x7302e441343af9e76e75ba012c44dc91763881c3356e839dc495d67b052d2cd3 -0x5e076d7b0dd1d2a56e6013eff8330f3eabf1eaf4461217710fb958ec22e429b1 -0x6c7f13f8982079daddb6c4efcaf7e82a22ed0662613a7dc3f9d80abf137bd3d2 -0x3a2c395773f30dd01845824a6e2c90ca7b44c98d9223a46e19cb47778eb1ac2c -0x079ab4e7046cab0f93d609abeb4127dbafbc67f77a27deb2e1343ad476d606d3 -0x27e17a1c5e9801037809b6b8c2e8879b8e85372e2757b8e7993c4dab3066ac83 -0xcb37493bcb722d977daed89fd643b721986a804356370d7e90aba3f6dcfc9f08 -0x0a1f2de2aa414b2079bc091c14eb36300a63eb81899d9e22b68f2d818349da11 -0x9973cf95910037319458d56d5de58bd78099ef29ac22ec104d47fca03d4210cc -0x124696662f7c31e4cfc5b0ade9170c02c36aa67744f3678d22f6658a88106ed0 -0x93fd40a90874908ecf8bf4e72559572f86ec23bdb54c091d04b31508a18d2ed8 -0x2037e5b06ebbf6aa3e9981c8e922b0d3f71aed7411ef50f3856c584a76b3e6af -0x83afdab8833ecf91754720cd831367297c94cea4e492ef29695c75c01cc0dd6a -0x575a26076565135ae095b52a221578bca21d5bba2137e9c024d02055eb94a3e3 -0x8a76587bb2a5ce6e5aedafc34b7f7db2dc678e7ae68abe8626fd5f4452e1e8b0 -0x4df5c85d3daef0348c82856c4bd7e98876d923164778c1fd4ff764017fe03929 -0x9dc4fed2908ce4b61b198f37dc2ab6ba2b05684fff38c122cc3d888bd8ae6401 -0xe3140e6cdc78543220d6c60fec9f5974f91ab83458cfcfe867bea65741d086e1 -0x37922ad4290827aa51030be54b4f043389afdc8475a8aeb25c7ae6b251c3f0ca -0x633f6592e7405a96bdb185a4dfa0ef538ef085d5ba343c3b2536357bd91b7e77 -0xfc6b6ae06685e48084a98827e06ae71143d01e21456585ec62291172b95ea111 -0xa6e6c3243a757b3ebd20035a402212d43cda9086a8d376ab13cea9ed2cdc4e00 -0x98f65ad242368e2b93270fe913fce1e3eb33e5ca003a94618233c68aaac095f5 -0x2d70fe8851316c344069a34a7be52c1cae7e7c9eed4466178b8c778a91faf871 -0xce44a54515719a06a99e6021758066d36968ccfec240f3e65dc158fcf579e904 -0x4e28c709c4e48cab31405fddf31a736302c62b3730d8a880580fd9c8d8965d29 -0xb1419e7f02db1c92c6b8a419a02d077e28e9d12f98d1d748efc0fc6f6380a819 -0xd0140563fc17a022806a311b89c3fac6a6af35e9decf428f07caa447980572fd -0xd205fef10551acdd46d154bff98316a163270419c38210814cf9877e40a44194 -0x3f4ddccef0c1f026b478bd58102b723fd53d9893829316426cf7154c5e889209 -0x666148bd76f5a2f8b7ce17310ef9511be84beb54d8c1f59b926e38ba89008824 -0xfd46a270bdc347ec8c7f04b4d3bd42d3721a28c8a8fd16b504e47a375a510aad -0xa0853c4211d490f418ce06ae10756a8cc681319e08233b44c61b1943a08b4197 -0x7ae0cb2c445b95d61858ad3863ce14abcfcac24fee788b715cc4756755034cb5 -0x7dac5e14f12f80c0a0cfd48a012083535536594e570822eaaa4444d48fde128b -0xb57003dea996eb4a2c2f0c25e5a16077716eb604e62ed0bf35ace511240ad1e4 -0xad811f17c9aeb86483ad519da3bd977f23f78fe10fe0bdd1a0dcc55bb806188c -0x151b6fe3dc3916cbd4a48b2ad88a40c4a316eb9a32056b5251b8e897a6f7bd63 -0xd8a40bcfdb690058492444c096f82aa72f1d0faed608cf652a7109ac0ece609d -0x279b2f9c3b192076d0348a6e1ebc37b02b57b6a38e95567367db83f00a9ae52c -0x0c3744d1cd4af7ca4cddbc3d5df548a5b3b4422a53876c8f63d888b5d4d3eee6 -0x0fabeff00d1bc9c5eb8d6d75b2eb2c98924315d80384978a757949621a5d66ca -0x84da4c6f914de6a14848572812da4c6eaadc8acb49ccde717e1be937a625cef3 -0x16eb3f5c5406dae24263bafa0abdec4cf0379ae2ce545f140c1d02181fe45b73 -0x4ee65b869307933081b76284a177e967db25d91947dc1f3af2d4a56994fe003d -0x5dd9ea260bbe0650046bed29a9e5a7abac45554624fddbaa61413aa3726935fc -0x3a4fe024170b078797f92ac13ee320f164597d2d713700411fbd912a6c05ddf8 -0xf97ee3e94680c69946f0e82ad4a8b421c07a029fe20901dfe5e3646a450cf912 -0x700f4aadb7950b1965d3be99d6c4016be65fc8b21652739c19f4d8a9e20e7b15 -0x3215c045d2a2e3bf1f2afc62ab0bf977967988878f24f5869a53eb40afa2b229 -0xe4eb732cf0663914010623db71f28f429618819e8f2102e61abce56a843aeef4 -0xd54e616a3384a5b680ed845819ec431355106a653b0cbdd9a6b2fa2a1d915051 -0x98b5d8a565d70e9eec0bb3232108eab1f2717ec9ac0b3e9c7369421649f82805 -0xe76cba5b28a40b54395b2265b8a049562b012e938cd651607074a4a3b491055e -0x06499b8a3d9f9dc2612eacca8b152ad3067c0bb471eda44731abe96c22d331ac -0x87a1c0a507a51207d330a816380188c0c392faf321bf6e630431739a8b870f21 -0xf4d14beeebdaa172f9f9e1fdc55731689578a0dff89bee3ee6bdfc1b5019d20a -0x9330e8b5e89cef8c28685e3d08c00d965188b97fb98e8635eadb36f93b626bec -0x49751b8831ad841ad169dcb9acaa585f175093f83eaceac8b8913a593807349d -0x58cc0a70f2816194d807bbdb2c5ba312c8af9e09d70bbeb369cd4782527065a1 -0x726ffdd3bf1018e3eb7e1b8b7209fb55bb2d7fe2c818e3817e182b44331c06ef -0xbf90529cbcb53f9531717d174d76b92d4015f80fd4db8fb1db6160ac5ae728e5 -0x60583d1addc8de9e0e84c0358e520339f1f92101037a772b6e5c84fd45e9c74a -0x15bcb52c29fe7453ffd306b2fc32fe5a19b9dfb561989fe456dcc468d793490e -0x6d34a86f84cc19e7a7a72d251a0661cf8d08d193dd8b6231f9e35a58c615fab0 -0xdf0d05eebf742f5ac07a7142cb18c6903e041098f4b9362c3c804268e567970e -0xa9d56131bb05f0d765179475459aeeaedd8125e7fa4df29a87b505f29f33236b -0x8595738c71652a265d9ca8c3800441584e6dfa5b56005dc69a1a810cd1e3e2ae -0x85867542663accfb1dbe99be5ef16517cdf7a72f207f104d3c7ad70b52a8e8ef -0x53b66c25dbb9d7e1e2f29b0a34e482eb452d4350cb37a58046568563aabfff94 -0x883e0c052634ace5abd93455ff9673843e79587fb21ab8ce5edf44c099ce0351 -0x2b33914605587fecafe8452c44b27c70e7c8d4018e31ff854c0ba531b1b0bf16 -0x03cd3969f3fe0df46c33e2bdc52db05e008a46c5e675bc8063ddac393e2975d1 -0xa2407d198911c385d00a1ca42148c84dca60a058ac3fbf96d0a5e1e40c8ef5b7 -0x9deae608a9effe50358301a3bde5dcd2c085ea2c6fcd7836f2394adeec3e95a3 -0xb2e8f295f7625492e6ba4e78e28655b6e9fec54f0a85446aa0812477fba50a53 -0xcccbdc6956ad312c68c1f80cf73bff95afbb4b8542633f484e4325462ba1c0da -0x5e56125fd19bfaa4a9018e062fd09a52b0c84083bfdac92dbc313b7545f78b4c -0x680fcbb2180fb3ca1aa9329bb7b142a6464fa322fb4d2194a5c3b3b37275dbf7 -0x1aef1f945452e57c4688bcdcae69d64e826b851ee8769b2c7c971f7894245664 -0x923c133351ca3e07715a29d94112a6cc86e771a0843ca94e6fc03ccd28148e48 -0x54cb8dba7cd0918a34b2909e8b0affc9b31c09a640ac482998a815357ea7d825 -0x248a88c9a14ecdd2937cfb288915d8366e98744a230cfb2ec3d2fb8a76486484 -0x7d5122d2f3a04c9c0749bf40f981e771147cd047337194d030a694620d2a6c6f -0x16f7018950b6e73cc31f3a33a6bcf6fdab683d280ccb4d6041cfd4589f8cd119 -0x238aef9f4d138357d41bbd01f25279ad41eb981ac49d37b602770bc973cbdf78 -0x8622d91e0ed85edd644bac917f5cd5a5562cb4676ae77c28e1c706a5efa43896 -0x54eaebf52f2f96982186baaff466198d7ab9d29373ad1781a21c984446dffb42 -0xe94a817f9d7a6a6faa6e384caffe4cfc5f1fc2e68052ddf0a707d3663e018a20 -0x796f70d773ea9b2fca45309aa4fc363cd9ef4ae61d22582c4804fa6ed0b9447e -0xb9ec18fa57fd954359766a47cdee52c56ab9116a44406d11187f107fdab9ef83 -0x794299ba16948357969dda941b2ac905716ef5858db007b655f88213820af68f -0xe6f6c0fa8010d6ae5f02c467dd7c808edd374824e3674075443ac436cb10c713 -0xb72ecce6a1385c778fcc25c922861f98bc8f0ae51f51b6e7cc06d87e5c331d69 -0xc80db1ee48460d2d2114388ef7da8aa5faa69b2465d7a9978da0e672bef0caeb -0x6ec39b22262d6817f338826d67331c11c97a275c04308fea3ec49c8539d2087e -0x8f1b2f253cc916aeb30d00a7a9506adae241bae5a66270baaafb3c5cd2840c4c -0xd03778247b8907caa326318fdd0bf7e792d09ef3272eb2abf2966c798a16df52 -0x6dc60a0131568af0f13c2e48faaae1a802e02e173f496059387daaba7188a502 -0xa8ab5a69f33a7c856d9ae5ce45456214c9f37fe9aa19e90989d31e9ca1f6e975 -0xba86e3baeed5af6051a672a53a9c08ef1d2a5e952e02177b739307df62a1cb7c -0x6e108f82524b213bce59aa76cab702e948ef6d44565f27007a6170b51af06d41 -0x77882c0ab76cb524441c26993c8bcbae0eff9e54fe26ed11cd2f0fa68eefba9f -0x73f1a577c58f2d341be47b22913a7697901cc304b21e641d22942d9bfd0cfbba -0x768897d3d8d5dab9db2162d0b6508605515bc92712af85cfecee6223bb9db0ea -0x1987da5c0ea6048058e3ccadfb777e613fa121998db9fff7d6dfaf679c49c825 -0x9ceea7246970a43a0f760c208d6776d9e945622df7473dc473e064ac3f3823cc -0xa5e617197e49f7654392042cb3802434af1599954316d4d603e70d7c186205a6 -0x1ddcdd540fba9bbc5aae5f1cc2d43a629ac520955df5d732e8c0bebdd9b5d5c2 -0xa5836e1d82bc5d8d396366b542bb128b294f67a227ead258a718c1174a66f814 -0x69b809cbfc932a3ecff418c626ea0ee2d3b0cd1b6a5450974c4266506bb74ede -0x1b7df405588a1f75a258b6806d6e1bea76002071a6d48f424feae5123f0bb9b3 -0xb39f11d53b6df31d38aa67fec103e2b466b76e56edfc0dac94a4926098f4f154 -0xd38bdf5770d779ed83ce1f7acab3c663efba26de2001a319ab9141b0c89b8a36 -0x381a428cacfea9e87474a07e78d8de09bba1d916f87eb1a432eb2c8fba65942c -0x97877b6f9af9a1ee840acd31ad428d07481acc32a9bb1ea6e9dd69126cf155cc -0xe85766f66741fea65e8993996c32a40d271c02cc46fd167046eb2318d02309e4 -0xc4563bfc9119fed09a7bb5378d6442bf7199dfa20b80898d0470088baf270f81 -0x48d2df809d99542e62304b940e7a7182714ccfd6590895a1faec40cca8282150 -0x2e022c5b3807e180707e7fef81de8097d6f21342b8144b25133ae33bc4332c7e -0x9a83ea4e6ce4cd071f8a3a47d34ce893d65eb0003bf79bf22a4e5285bde6c855 -0xb4e7ff0b1ebee2c6852b6385641a014f351deb1a096f125426df09e0e5b697b9 -0xfeae6fced071252ed80c3dbf9bae0dbedcbf17b44c3049fdbba047efd05c8a74 -0xed3d442edb340d91398655e67094d205d326197d27055bb2b2b4a77e1874fe12 -0x12ee12e97ad7d736e3bd16e69b776fdcc886fbe84d36fba0a0775e1485dc3dbe -0xaeafd3035f0f76260d8ce98e4d972554b99ab5f2b7e67aa97e114535be25327f -0x04d234ffc8e970d57dd2cf8ece1b36d1b2abfb464ec826dc088df2673d5047f3 -0x27ab5f3aa467d7dde35c91849cc783f18b25f6eab44232c70629eeaab5b41ac2 -0xce57fe2b6d2cfa125247e0318b70013180319a69cf1e1a75f70d08ab90ca9a3e -0xe14635dfd3d8b4c61d7ad622a192be38eff45adf0825ea776c7776c63e1cef7b -0xa10da833e91f99042b0e4564a3155a7bd669e6ee0c6a79c6b6349d946001738a -0x3241480d8ae4a917d238e24d5e460db736a712f1faa4053c8d1ab340371f7740 -0xfacd9a4a18c2cd7be421f7f91a049013200fddd9b84ccc5e234d48ecee2abff6 -0x3e6c4a09a8556d267987213336d3410580b096ce68f945a46be80e8d8e90fc2d -0x0e8abe6dadfbb1449e8396c1cbce34af8a64d88356541d9cda6e3fbfdd928c17 -0x93e4ea5b5d72c58e6055a1239210f3d71042d313ebf6a4c3b271da4245b10be8 -0x158f13597cc9c5b705c4e6aa2a12a5d0dec89409c0d99151f910cfa9de761f5d -0x166e8f717f91b3f6608d7fb7c01bfaf9a6cfcdbfb1e31961ff15850ba1350dc8 -0x30853f5fb43c27bed2b1450f97f7f86b7e869f7b64b6fb532f45d86b96e42a7a -0xa1c7b46205f201b70a8fe2c6a5659c579f199cbeedc467ee8440b42d37aa50f5 -0xaa3b730552314090b35e8931717ba477849da823ab751b214ec0371bd6821a27 -0x55cdfa6fa22caab75a13a99bbd291e93147833ef8ed5639a0e4e3651160d141a -0x600f847f5fda43283df439842d5b5bcd23fa5c443fdc88e6bf3180b1b30bfce0 -0x3ee4f22c19cd5678d481ccc5a53a5f3a43299d5a79c7d73084c598430579ff37 -0xb2118bba4693ea15c167ed46470c521bae78f488795fb3cc5fad3a1001820210 -0x2a082a6b2f82346c9a188ab3eca7dd32094b405d6b779a0af67b3e19f51aa165 -0xb74a18747ab9d09db07cd5c43d700c4fcfb4323d33aaad8c869bd59c97e7f391 -0x96e48552b77b71059ded8c9966a488ab263871fe1687343cbb43a9c2309244a3 -0xd790dc5b095c9574f7e952dcbb77f39f820658fa177b972b585f50b36e4ac135 -0xe8cadc0d58a1a10d165ed576c7d1fdbedc80f5e60dfac201151187abfe75d1f1 -0x6811d9e60fedc95a0490c8f0e2574046c3551e54d7b9b7cd3e9072f83b328c2e -0x7f6e254a312a3f986f1cecff2728cb8c1bf011f9d55c7e9a91d3cf1e833b8648 -0x538c2e45a1eb7f88e4685d4453582ff69e79fe7bd4e3fd1450e1117560781332 -0x844c82bd2e584b7ae7de388419da9bb1fc931301f04559e1bb67d88fdcf362d9 -0x921924c9d258ee87c8b432d0ea1013e8d3dc5ba3b71562306ec9cf0de1d64ab6 -0x0091f13b2ffb1b2371eaf16857bbd23660ce08efed8c4f08344ae36f7730113e -0x0fb2e10c1ba3423bc117638542ba580c986b382ee627ce3f3e74256c39598b90 -0xc812336b007d31fbf0b2253495bdae04dea805cf55fa0c1a0735377c29f926df -0x04bbc77486fdf3a27052c5079d5c83743ec3661bc504b71950b75857b2b55ae0 -0x9c356f5a60871ad018fb47c85bcfbaa0917037bb13916b09778d2a26787c1d07 -0x517e1145896a34238fde388d0088e3137e826a641b55a7083b10b79153d4fba3 -0xae276f285f8ff9d29031fa0efac8fdc536712d1cabe3bd6017b4ace3dc43980b -0x51f40c32e7614ee3bc485d35b4da2953edd02684bca61c642334a1b53970c140 -0x4b91c5b7706a87ab19bc31809ea2898a4957bfc06b5ae0fb013c1c53e4725316 -0x78d9c8160077317327fda81a24b054e41df083b53bb5b713c7e6599ab5c6483f -0xde55cb73ffeeb845134706a5e19c3f91f91992beb63f56ad58f17873caff2489 -0x8b1b932ddb1df023db28c268c52bcfc560c7a506f0ea37878f4f56e27633073a -0xbac23fd49a9da40428339a2fdc8143872a628c0af1b861a7aa57431706b83a22 -0x9146dbe7c112d0424f7d05a605c1c1221021694023829e4276c19f42d4d7615a -0x6a5bbdf918510c69eadb05c50b46ee6f2825988d83d2592053f85fe8be654ebf -0x8e6911104ef83f57efb02fde6c814136ea17397e2e2a1df8a2f2e6ba603e0f2c -0xff7543b2448a9b0d8508e827796bf2185c269901eb58aae8b0284b956a160406 -0xaf541491a2c8b669b6c82314baf1fc55309f69a2b73a1439403454865b650797 -0x4608c500e7b407f5dc8616f424c7cc89fbb9a12be4fa6b691e1629d1bcfbd32e -0x922240c2a3e6aa5e93a0b15305155d557ad738db04ea4ec5a6c653a99814e714 -0xa26b043d50928cb57d0e97382941f24fbbe6b8dbab7b04d939cfe94c2862f862 -0xbeee13e684ea3aa5934e6f9e8ddff61d31941acd91202fdc146509ceb2df0b3a -0xdcf57e6e0b5bbae1f02d51a0546bba0dcd2a7d81f3e72f91e7497b0ca0e546ed -0xdee03ad715f9965abd85714534e7d7b56711d43e096ac644cd1cb77c640d460d -0x58f072a870990d42ec2a4438b184ce89327f4d5ad02b1919fc79842f1fcba1ca -0xcd439a51195fe9024e8981d41c500d18b78cf1d05e9915ded3c5dc4ad96adedd -0x45909fdba3d2bfa1e124b45dc8b6fe9bb1ae48118d58aae42e1cb65cc0fec07e -0x75841b4f3eb3f3e171946bbf43ce0ad9e1607a28cf0ab4cd9e7f816033d1d81d -0x945a622df0dbf1524bc88da86377e80ed07764e5ba30c3192320c898f67768b5 -0x83bab54859c323edc88ef39f082fa9c3849614d492e7f502a0dcde5ddb2b8f59 -0xc53c388edc7c984a12af517a5c76881e76abb3db90ae10c5930f6a1a7ce17e3f -0x5aea78833fbdbedaa216396f1ab44144c6f4f5f260d26a252af95119fb96aa09 -0x8e8dc17a9944ade409dbe5c79eb71673d438bb76573fca4b3bc576440632bcc4 -0x62d47229551019dcf8005acbe74c78b9920a688eeb1abe16febedcbfe7b3e8c0 -0xc18d4e559bc0650c77ce3c622ff1c7714c5ab080ec66f20577e1b5ab5e37b16c -0xf94e87fbb8c2e2e63888cc4a7587eb4e3bdd18b3cf11a029f7e71cd30503560c -0xf1290942991be1ff1ef89d97a8ea7464a2573555adf7ae4eb59045d1045e1bd3 -0x008a4f323dbedaeaefa227c5125f763e6a5ff64ec5ef1a84862ee15296478d30 -0x579d2364ef605ebfda01c04d2f6cd66d60a5fd5b25062586f1e7f7b1fc4e7dc5 -0x8be80291e9b83b14892ebe2e21ca7554b8a5ff2cd400985099253946ad0a0d23 -0xb26662a8370c8a35fce60b117cbcb5a21d4287a0c79711524b1c436217aa9268 -0x154ab527b69972f71fef1cd76385405bf7850458af0d8fc355fc9effeead2d62 -0xb3790e482273e51dc04b07a82b22f9bc134551dc6846272a2e11c733f31df34d -0x11208e0f5343ee523e60b6bdd9265fa81df3b26b0e421c9c3b6c7a4b502fd273 -0xd8331634eceda0a98fc680f6980f94174c13e70835bdd023270f489dd11a6605 -0xd5138aa06a59a1b5aed64e85724b2a0afba40d5fc8c5ed614a456298153d9abe -0xd45c4bb976bcfc3ff0a64b0f6718ece47492f4c9fb2c0bd554c74927c1d63411 -0x27ffa6d5518d51eb955eba823b6b95c13848d93c4ae399ec899020cc389a3fcc -0x0182b0615bed950d9b95f1234adaa6c33985335ff9973949bea1cbbb198dfe4d -0x5e7b6741a52c20199abd3e404c8494e32d93e5fd8f74472d20ce6877886375f4 -0x38c4835a07680580e4e6746e4d10a4272298842cab296561879431a0b99d5cf4 -0x059b3c4a576c75e6624546e4559dfba84edc795034cb36d56bdac2da3ef720bc -0xf03e9940a75d67f9b8409f59bbf5bad05d46850a8e32c61c1e4f932cb6d40d86 -0xf68aa3f4c4ca4f3ffde96635c72b2e802e9590efb65812c857e0a7766de99adf -0xd1b7f693c5da5419fadc5cad81cfd07c0871f3cb2756a38dfa4dd5ea884451ae -0x79be604aa3a0b696733a78acdad346815aa03f8440279d8f617020459874528a -0xd64ce6eefbaca8fd54165cf6fc0d6deb664c40f77a3771c3f55e5cec3747ecfa -0xafc2d8add4e497221938fda82efe5471cbdcb7f032692257477ec087236176bb -0xa9f372060a981b78275b5d91690f97e144a90e6202213f10cdfb7450c7154612 -0x48819e892e9f60adaab8e6373443765ca5117c13a9caec251e0cbad74ba33a09 -0x8629ad2b5c7565b19a81d30fe8e168880d1203f13f07f4435511e420a3107058 -0xc97b31bb199b5268b09f76f6034ff24a4798983e52471e10b3b953fd9ac353bc -0x00a170f968287675d5dfef46c0cfb35e3fb8449042714308f4001fc90280ee5e -0x96b2beae3ea7213781e9ed99e5f622f52869387416e7c405a731dc9350d31aab -0xb24d1fa8082fec6c2bb9c76f1c94ae67d6452b0b1faf8da937b4f88d1c67351a -0x3cade18dbdd63cc94458fd8fe8ee088533b58b64e71f083fb6a794a73f544db9 -0x5bc3040ee1ea0a5b97a6a244db512efdf5152f1ea63715ba63baab6966875311 -0xb27191d0203d3bf22ca5273ff019075f99f3f366be077977d1ec8cee64a805a7 -0xc59477a9a61fe033bff8a41738a8213b63a34cf86e24e25f3de4be6d7122db65 -0x2302787cb956c7a96c1adfe0a6519f68b26fd6b6b98ecbfae0d23eb7e29b9e06 -0x03cc85a9def9f761b1b9f59aa196427b62028b89f63e34e55725ce600f1a0648 -0x05240c9f99e655b22b85641fdd07e4168f6f974227d3ed7081c068fb9105c9d9 -0xd0b5d4c2b5350ad0f8b220960f045c4d11fa192c6905a805b5ea4dd55b8e9108 -0x2c902a49074112ccaf698932570dad79bd35e325f80e57fff1fcc832eecd0490 -0x4cf5e1283abad30d4b33d844f4cacbc4f121e79292066ea589baedd8b75080a5 -0x7f6408b8077276daf8d10444d0ea6d277a6cd6112badaba161eedf400bd52e9d -0x5c3905dce06d9f5a65aa026d3fb9c90f4dbc3f101fae4014de88cc154fc12fd3 -0x780d1fc905006fe5697c694d64d9e90d6702b3ce52f9be2a823c8709b26354e6 -0x9b7090d47b23e892f5b6b8624b0d43c02802108231883f4ab33499b9e1b2625e -0xa5c90c0c5df1cf55602ec1d95ef5724a54d6ab1a1beeb6cf71d0a21ad03d36ca -0x2bf7a0e2ddbd9fe0923bf15f6d57ff040367788510c1432bd93f822a5c0aa38b -0x74e09451c6c28bda5894d706e7ae237ca90f95683002fb34685df8b642fcdcbb -0xb40a65ab1ec13b20f577a9de80ae7e7df840b9ecad665a0ccf09fee70eea39a9 -0xce4ed0d284a1ea88061787e6bf2562b91bc01ab5a5bbfc9c495c428d8dc788c2 -0x102f46af19ceb76e3124573a9cf642639dce55a38971fc8f81dc5688fa5003ab -0x3af6acbc50b8a3d3ad2eda25e7a5cbf6ed2361b090183b5334533d66a5a1c888 -0x657674a6c5ca84d84b8906ba5a220250dee150851886597bff9efdd4aede0f91 -0x50ae06cc0dab05760d9aa36587ccea5ca6d0fb337b765129faf77f26352ef306 -0x9e69c4897ce5a96e9feb87a1224c9f925dc243b4b3f176f65048285a11418ec5 -0xe3c6aa805d514a099ee3a89818117cd8bcc46b5bb5b90a0494f91c3c248c42cf -0x82b17ac137e88cc06790821e49146b415c3e48b751fffd439bf252308bfc05ee -0xfa67cb50b9996af977db07055b05b87281c49fde771981c6f24ef5e421d16edb -0xa3495257dfaae3c419df1983b030001c661a17c76c0fc0d0b95b0b22a275dfea -0xcd2a0d623793536409d8138cd0994c030cb282fc35848b376eea9c8dd84a38fc -0x79d45f262ffdafa49c17304b4bdb01c98ec44746385d8df631ad8c8ad68d36ff -0x9957a2a3bddca7213d0fb392e004b0b058a3fe238a0eb0d6a846d8b1861cd7b7 -0x75925bbae78bd56b26ec4925f2110f833dc75626038f2a54bffdbb95da01e412 -0xfcb0b34c95d4135246a14da23f32fdf635c729d9eb9ab71383f01ffcfd798d76 -0xe26b0a4a04bd6207fdf6b8763d975788a976a933c7815f7efa261e052175a61f -0x1cfb211edce73f0c4c45d5614bcb44a80608b5fd3330262b8a282696908c6626 -0xbef6867c220efce123fc1a5cb5953e0e8aaed078fa0f1b8dcc4a54a4b7a7a68d -0x71b8fe1f1be080b6aaf80a5ce4ddc734d1150e0e0741efe800fbb472f146b4a3 -0x2a29175b0d319674c4d3aa83e6171ed201a0487c7478bf6bc5f40c7cc85529f6 -0xb67db4d8b418051133e18de2d4c7697c46ca8a9b4fc348ad611058c96cdcb75a -0xf42a5dcd6263ae2f8fb8e3b30518f4be042a0c922edfb7557881fa7178d3f90f -0x7baf7fc5f7dc812324cbcb16238016c2453b048d3155073a22d39d8355c5ee52 -0x2c6017728119b17d720f6700e2771602877280afd3708cccfc37afc976dd98cf -0x3a0cf0cf9ba1272d89193c99010427299af2d7bcd2e4ccf2ec118df42d3d61ca -0x53d9f3eb259318255481ff76f0cd5b13ca9617b2afd603e8e8e63f457c3bcfd9 -0x5395e7c7782ff3ff3d64c4a8c49732120b95033b849700e02a7d5011c045b202 -0xa31518fdb71e363646818d8ffa37652800fdb78ca1de244d342e014775f748b2 -0x343da6611785bb74498cc82b47520e5cd0b7a68bd5856cdb31d68625c739bea3 -0x46f75ebbd2716b449efdaf1dbc4f24287229935da0013edbb8d2157f3c15227d -0x937394666c96f7efab389075e7d098de109fdb1287c0759e8a13051e69367f7f -0x55ce00c5905ecbd4230c894892cf3b492a17fb1a1fda7ef6d6ce742720024db0 -0x9615724f53118377334f2920235eb119c9b48bb2a31327992e3575859772227b -0x39973d2ccc78e406babbae9f6788f52808240d3fab882d7aa0f8990850224b1f -0x696040b8f0560efe98e6e2c751e052ab7fd0bc8eeac2296c40caf5c90a5700fb -0x509e853a786160fc23ac0a73b8a4fe3f7d6ca76f7eb0fc17e770219ef0111136 -0x23379a92ebaa665a78987771b5c7e28ed81297384201ca61be4be74d56f65340 -0xfe354c5e91c537ed29eea517f8ab150cd059e4273ae010078c1adf39774623ca -0x3331c8f19cfd68f0bd94c17138e5dedbe885a41488bcfa68d49de7353d957684 -0x399dc3be87b17a1c5e421690075218c857f9f1c16c48301f08c63f4a44e17170 -0x0f908ae0c61091c0b31b646b30e2b106100e55dede4368c0e1519b4e9b95dfba -0x61db9afc7e6325ccce097719c706290e4b5d0f798eb68810aa3581ab83a679ee -0xdf5ff90c3bf5100e56992c78626a8a8847ba5387fd97278e528d56a2ce88c182 -0xcc522583953ebfd9f4d76c852ebd840efeb39173bbff4be77e36d6c0167112bd -0x08533de4d026edf0809c8780f0114534a4138196b10b41a9e6a51b70d92b7394 -0x73d86a696d0be8f99bc81c5a4735b7a294dd8f89d1c3088ec5d30e4fdfe24500 -0x14b0603067c258ce44d0e57180f2f95fc2f79b996f6909640f3b0ab60593c67f -0x4110793f3f5ad30380df5a812d5edf6937e6b9f679cf2985fffa975289f75226 -0x42872ebfffadc5d7480eda8ef5b46e58c5bde7a847b683524cd49a36d2ba1466 -0xaa97f8fc7eb1f7a839830d1fc2567ffda5a31f42ee879ece59d9ed68790bf494 -0x7b136a8b599bfac8942088a026010e99f710b42aed5f71379733f1717dc0f907 -0x8ec5419dad084e69155b9903e6f33857437fe2881951a0ef6c3ca3b410de66aa -0x381a76bea2f2f65555da2c9d5b6a338d6eddef5dcc17b884a3386f59640d76e9 -0xbccc3b9d01df16bac40dda0b270f8490db4ab70982fd7f4d244890bc73ac81fc -0xc6a7723d17783e01ee4f0b63bdb576341627ca41252d1ffbf13b90db2d8c45ab -0x77b1aaa4974af370b0a5bd2c859b916048738ea053588ebaa9d745fc857607b3 -0xc39220e7e1887387c0de8d036ef02bbc434f27681199db21ccd6035565d28d26 -0xa575038f0e0819b1c9f5449d6ffa9f26dd660f2fbbd0af0173f08f0584e08783 -0x1619e18019038657c2090f864872092f3088ecb893e71fec9b44b45cdf683d79 -0x7f3a5920350281db3864042f8de3fb891dfa92e4aef50b497f2610e561088167 -0xfa38ca9771443fb4951404e896f40fca0e541b436515b8c3959fdd5e857ee786 -0x43290cabdb0ba92ce7381264e2f47a3aed5a997a705247e7281ad86055c9d2a0 -0xc77118c6169735d91721d551e87a1487633027df0f4fd696853caad2529e33c7 -0xdab5350369e55938d165ad7b17e0c014e16b2d3f08fc38ae9400f1c52f126b9f -0x74e723c710583b99bf3e5e147ec6cd30848c5b815059a75fc645030230acd366 -0x0c2c48ceb80e3db775affdb2354d2fe7957b7b57fa4eefa1e9c53393aece6ba5 -0x9e080fb08d442eab557ecaa8dfe94581e586da5dc86d4ca551e811fa825ca0b2 -0xebb9620ba7fd712ab50e57159ad41adb857352ddb6979b6c3cd11e5476f3efa1 -0xfc625a8568307e4bb3d87d5b07258daec8fe55d2279b4fc6b8657776b08e351f -0x7983dc5395879f70560f0c1d62fdf046186906c67462ca2ba7f7dbbc74fc61e4 -0xd1de2d7d081e3407c94d5bddb48ff07409c48f5afe68ed130c8ed798b761046b -0x4a674de8dcecc6cf402807fc30f5ea0f6a6bc8b44f075e967a8653c9492bbb49 -0x6fe6568cdca5be1ba58e2103b4ca7bb3c04f151a288c6b4b91d46871f2313596 -0x068e7fb5ff5a82e7b36a9bbc18dc783963196f98e41da7a57741d8ac4d990de3 -0xb9421c09b60e28a423bd575340f7be0ed6cc44be408ec5cfae0a63e146bc128f -0xff6e735f52c3fd1566d52e5617d73c984c33e0155820f553cf55228fb901cd94 -0x6066392490702b76aefca51e2dd8ee9ede514e78ca3e0d2af4c03fb3d51738d8 -0x5746c2d343e11663bddcd026e4515a815f22399b6e47b113339b31a6ce41c290 -0x7213d3cf9621044968c5f963749e6dc184e861d6b5db7e5e2aa5e7e5531e1b2c -0xb1611d40fe87c9128212e2dedd0580c04c6ae01911c32994877423e95e0b2ee1 -0x76d77bd9acb2b81c7688480b07e80e256d90449b7bf7cd16241205e5d23a1e30 -0xbb8abb913f1570be19bedc0d187af7530a9ed5665e52edad0512142b95a3b609 -0xc7cc731d3cbc77110eac23010e4d533ae1505d4b184f0beaf607445dd05dd194 -0x6215e6f59b0d0425788b217beb5a594e9c1bfff7ee670b5a1496dbe446b41d25 -0x27d33b0db165c24c6bdfa055cf26ca0641c117b4514e03420a7a3eb74b72d0b6 -0xbf1522069adceea2c8a1d4291dcdfe15f3e8f3da9ae275784190b5b2467bcafa -0xfe87288157924e0ff8f4dcc02fdab16be2f151286a39ca5b6d2586529a7bc5ad -0xf52b98ec9995d4655416d3cc3c01032b6c498bda18cacd60d9823fd6312bcd84 -0x935c914ced6a48293607577c8514c755f2859b80d5c20b8219986177e168b0b7 -0x60bcf241bda2d0cc44e15c2b9dba9124eaa2a618de719427469f0b3d78f21b91 -0xad2e5b4f516d9a7d6b814507c56033e9f3a5228a5baea04f7781e60b8d206db8 -0x3ba9689ecf73596f23c97e32cf4418ee7a772313efb7b3f89d3f62517c9af7ea -0x4873151577d6d6c026e93d06a70026e2fddea908da1c07f81d4ed1cd08935923 -0x9f8dffbb7711e28492e1031ae02290d86108068e0053e31f80ef8bb3a9ae3857 -0x5a0ce259095a937dd40f3da073d57c90c1c2c2b9007a6daf7ccc7e7d46ba49d3 -0x7d70ffec7a70dafd66380446c02ad4d78d515773985d7b46afd93edafcc4782c -0x46b9d86ae46413625e5a82e85624da7e134e27d7a90358b0d5f38e994b0f8f50 -0xc25c3590bdce6b4c4600dc36a888ff66556eb1bd0d3076319db747c6c37a27dd -0xd1e48114f17edcfb5bc9e9072ebbe2ba89bdd5a5002c3e4840af40f2879e31aa -0xaff20f19d009b6365c00ce384af7cae610981cd5b9b95c3ca1897cdf2b1fe314 -0x79167c8b2052806d3086ec3d22cc6b0173bd72dbdc6d6e56791a413f2b436f42 -0x98dbb8cbc340d49f1be10656c3d84fe30ff0bb5eba168c950c51a94c3cbbbfe2 -0xb584f7e28a1ff585ea22e82639ed7a5e25da0b1dcaa04a95d44c7cd705ce171f -0x3f82fac95a7a8714590f12578829ddcf3aec9a2c9a34711bfbc13b47939e5142 -0x8d26022bb38194ba5d7d4500b7f6e2f3a18cf7c5f41f981ee4ce1cc81a2064e6 -0xf3d576428b58653ce6b417d8952cd3ee2f26012f75a40eba3adb4170bbc0d9e4 -0x47ce9d3ec1913ee464bf27b76bc7c9e822fade1cb21ce895cc0b04c0d116c515 -0x892930be23a1eb499b93e87e6e2c5ef32717fc59e763d525628e2a3ba91c1c8a -0xd8885162b897a8d06da3f587cc8be88b50ad3d3d5a06cc8567cc55785296e3ed -0xfb3b1b19dd1057212c0493cf0579234fea0d2a9ff9699bc61537db3a2d7ad445 -0xabcd64b49f95a222c2d910af02b44fe9997db736badca62575a5a3752ed45963 -0x4d5cfe4a5aeeb1eee8b8be67d3ee929323c36ca4dc971203c1e31c88884770c7 -0x8b2a9acfdf191901befd61128a7d202980787b739376881a86429ffecd4ea649 -0x14881e2b7f326196f84203f27efafcdaa3d6497cefd22a3f11b17165e19e45b0 -0xbab1909d17d5c4f984a13f69950d8f4336c6d59ee4aefb7f581e353eb6787492 -0x870d8eeb3f89c6cbb97a1ce2a946b4f4e927c3c7a0dfe9018fa3b6cea7a2a66f -0xbf45864adea20d59d4053bb66f8c5215968b62dc742b7e97fb066b58719641d7 -0xfcccc72a4f470f7e2710911d1a6ee43e05e79bbd2b6d829d9d091a485c65f1f9 -0x6eeda8cc68a273f7388c04d68f5f682b3a759df9fd5a6f4e6c0cf35e58416656 -0x08f18a8b3b9ac51dc9bfd726bd52d1ae18acc0cdcf5d5e6fb796404ea36e2720 -0xb14818ae598be96559d80ba0dae5c6939f88c145d43c38c7247ba90207a93829 -0xdb7ac952b55b2c5fd6c29ebee20c6e9b791141a9b9751e32145183353addd331 -0xfc00584ff10edf368c8da8c628e32b12178638426739b6b9083207872f37e327 -0x8f2c2a06f0ea3acb99314885d877a016cd060c552c7e93a102441a5891a1fd6c -0x865ca818eaa726ca994f0cebd3d3008ac19ab6e58de2187d8ef2f191746b4836 -0xd4e2d9176f4d4c4470924f7e5b18e3797601659ce8a083c1d156f370c0c15278 -0xd2680243d81a436cd5fde8d57dc530c2659f757d8a402be728807abf904ce75c -0x7e05b2a9b2898913dd765dd1c336779b9bd1ed8e2288cb23815378a334216271 -0x8f1d72439f9d08d0a09f16c231017d95d8b7453a11b18868c1c946d93ecbf996 -0x2f87c0db9a35339198bda637db9fad8a2ab3ed5171401f5facf9d697f5fba9cb -0x7ccc10add67333a77ea0479d1a1a8783793e7b9d928d482d6b42249f9c580605 -0x04adf44e37776a96cefafded6e48b5480b566ddb54634d7077057deadf2eabfc -0xd9a4757b43f481fc7680242f3d83c3f009e5bb115a24ddf9d6f97f3fa3616785 -0x30643f6bf09882ea015aee039401c383f2e19bbd47c3c8f11de7416d1f1eda24 -0x8e563ceab3f5406179a31742d9e9151a246ed6113348cfaf40c977c8b051c176 -0x8e8d0f2e0c8b8a611f82ec73d8802530567162d62f80fee4e13da36ec9d45791 -0x8f94ed9bf6ab01e6e1e615b6b9cb303384412e382fbcb307e074a7c43c7e9202 -0x9ba61514fdcba2caff8e5560f7db3ee49efa8f25b881622f197538225f15fa51 -0xfaae5e6570e80014f0f594cbda1165c87b9b577ad4ed4121ecb607a780f2694b -0x7ea75feaacd2a253e8f1172595c15d40ce65041495bc6aeb690f7dc826d75296 -0x888873f385accb70fa7e7831f61d7f4a0364e806fea7f640302a009770a0e95b -0xb3f89dfe34d5fec89fd69867057446e9641d5f60a7a471853cf4ca2e705da2a2 -0xb46ddcacc9bc2479eca5b64e5083dcba49959228301bf4b9dff0feef6712f3f1 -0x680c46ac05f624d3f143caff9eafcd3c6655d4363d2207fb8e4a24aa58b3292a -0x8fbf594b8271ae2de55c3b0367cd68eab19f4cde9a5b5d2b396f209893575ac8 -0xa44d326f65d024c52312ee2d457af7ae96e1dd9459162774db07f93e05790cc3 -0x6597382cf45d34837b6579db623bfc3b54074f229d47fd36b831a7b2bc70db09 -0x8f4c8c970d048bcbf08abbd47eb75ad13f9353ab17481793dabe84c7db584406 -0xbb3f5104c8717ee0c123e6ce1dbd7808711510126e086af19468289f533d9072 -0xcad3305b53a226938264c6e0033c7e60b1685a1dfbc65423c2d3d8e935061943 -0xeb86da325b09f8c49fc6c7dfd4fdedbad94f63d89cfcc61a068e145f3ccc4d29 -0x618b92de6065edd65052aa58b6f1d6d0024d93076fe39a0227bcf6ef5d4b8651 -0x5088d7998cf65f10dd153860c9276aad66545955adedd33917ef212139ec1cc5 -0x9da55477fbea6b3ddac192ddcd67d20aacb8798fa24de6796b097d30b89b6384 -0x32ec39e73fd2e676e5deea94b310b86136a191bf09670996a9c14b1632923d4f -0x9100b50e4e0efccc8b3c1a2dd4ebe29a09798203828ff00281efcd5d5bdfe050 -0xa54b740714fd76eba7ec5ce07d08ffb8eca8a73768b02d7cd9d4c86f4f2a5f62 -0xa0a53b6e61dcb68273402a5345530ed8e25c155a5427feb74eaf8cc6af1b24e8 -0xef2c7d53e100281afe76f22a035b9a2340063b8c0ae57eae6ce5e4d9a32e3d8f -0x082234e09af8bfc9ad6bac6d9998bff967f4c746ba506a304b742c7e979bb614 -0x1514094dc8221c4a30611ebd432fe430c474b22bf862163928faa7d758c907fb -0x00ce654ac2b047bac177d2ded9ed890fd27bb852502a3c0b371094d071420d51 -0xd1078cf35362e4e9264b97228ec9b0030af7a1a028072d1372f65b7c665c70ca -0xec731f55c3052bc716837f55a2d0de1e664a89c35c252f3b797d38b1ec822aa4 -0xea68dee96cab29987c31e7bc976c6e51e87f85ce4edd632c30f22868ad5216cf -0x03464e422a78d12924e66000bd091b3944b9eb9c567d1082895f67b1124dd5b2 -0x9f7dc8426241a5c55e449c745a98fe40737045883ba24ebabffe15fa01e62190 -0x2739107d49b41099f90c98d0cf06b158b6e4b7dfeee8d8246def9e2dedf8b25b -0x61c9d1357e4acf3eb804e400fb4fac9ee9cb4444115b3cc9da1327bac96ffd21 -0x0d11e60a2d9483b2921421e6225ae0b6f7603987c48ca17572f03ff15e2f2c02 -0x5dd169f3785e9411e07383ed3fa3f7b200e543b5160a5e83398cef958fdad414 -0xc5fec632a30d58729008e37acdf806378072d8dd446aca1c0f051425e0bedec9 -0x2036c08bb48bfdc1fce688500f0a29d9c901a975dc48d51d9a5cf82cf49d033f -0x69d5829f3fefcf26b8ba35bee1e1be53853c5f7e2c89208c56381f36e5c726b7 -0xd2ca3210c10d84c45ccc0aa8a1549907b6a183b7709d27e2f64973649382bf23 -0x14dbc51934712f07bcbf4d95e20db7163d149fca1643f4d7fac7ce23311150a6 -0xf4322910fd1e8a30960822380731fbc6443340c1eea28a39a5169432f4f50039 -0x369664f0dff0ae558a8ff857695846235c543ae5f3d565db96d1eca71080aa85 -0xb8cafd8725d735448eaa9a33e1ed6cef8a5cf7ff7eb261872c5fefb320483a1b -0x58c55db38452679398eb8dd0b95a8768c14aab704d0477fe8e17ec4a9c813d09 -0xe08310d2e54b4d5cfa149528bc7ae66009d4e9f6d5f98b4ec1e5acd88cb30ad4 -0xdf29c60d55820bf277b3c2d6419c4979caf4f128ca6423bde8b963703dd61c0f -0xafd26c0704b6eec0ce0ade066c9bb5ffbc49c4cb5fce756f434c3dd6c0be2859 -0x65ba7e4425a7bd3c7d06371f5d0935a51f1476d81c02adfc46b6692a960b703b -0xd4d8193320895b85fa159ad9d5d6831d4ea10f7da315d8709cbd09d2316d57bc -0xb0ef5f818eaf08e0694dbfa10f0cfdb0c750b05de86641c6b7cb832ee4f0378f -0xb359d8f5ac94d382ba8826f79e9baf7f1fc780545aac9120557a6301cef560ee -0xceb11149b1786704820b451809a9b106a60075fa1bfbdaf2e2e53c930a05e340 -0x784e2424f1b73071173170ee163dfb5567723b6a6a012a07b743d98c74046e16 -0xf795a002631f5076b8cd7b1c2051c98a785fa51bcfa674d34aaa5aa79e7892c6 -0x78958bd83a242892a4dc861c74c06839cd615bec31f5b47522f002ec7d588856 -0x55aacd0e728620abca4e52cfc01c04041c105eb3050a70de2e6b0c005b3c5867 -0x0c03d9c69066ab42d1108594c52558b0e4bd254f5f618bf697f69504aeac4bd8 -0xa08928053a7ca802cc79c2cff345bde715f2d624bda6e8945a0f608e501fff80 -0xa5a81ecbd1bdc34b5f18ea6e1716ddb204f92e487b12a8db6d58ee2919891d38 -0x7a3102369d1e99abc909383320c3b6d2e8074abe4858119b9365135d87b88da5 -0x01c22f5d7a3617e6c83c0ff3c17d71a47b1ec9494214c46e4f8fdb3797f87c4b -0x965fa504eea09812a60d5da6aa606699a62c49859ebb3bc9db56dae4cd94d587 -0xc68c0334cd2e2a834f8585deeef9573a8eeafcbad6125163f55dab0f3d3f5d1f -0xd58bc1727b926f528e83c9f9e80f26eb7752411852648a4c5d783629d998654e -0x8deef5d4a599dc0ab8d49c335176de6682feae61a3034cf998f440a9fa67120f -0x938bfcb773523126cd35f052de445eda44ec42ecbd6a541ddd8c35632e329a38 -0x0f92ee86f73459302d04716d43188aad7d2f337d0f219298952ec9774ff53fc5 -0xfc2ed2899340b5032632f33105bc72e1de28123e268a08ee8b205ca91e3e951e -0xa8963f57c751d6f7ab04c84d6c3b94aa0e1535640186758ccaf762277b106de7 -0x8e167c8d3602716d2eb8bdd587092c8978648a74d3fcec85bab8d2e13ed0261e -0xa3de36633ed38b5a07459e21728f9a93d97ee3355ffa56e2e7f5e3748619e2b9 -0xf2dc007314ec76e92a5bffdf4c6d3c71153a5de9a0e7ea2dddd0ad75294242f0 -0x3c790a95972880c0167c7f0a5ab8e5f37bf26f6e1def2703a2be219fa6790a6e -0xd50c6e9a7a898d6500c04ac2d7facd835aaaadc3409057300ab346caab2a4acd -0xa8be884cf8989d92a2c46b8558ccb6931af67c1dd64415d878a6544d5738f4f9 -0xeabcf2ba9426d287e9f559c922e31a3ab332e7e0c06a457e23d7b402f0ce9b80 -0xe642145bf10075685e231f391c8fa9b61f85853b14c76ac3eeff120982e02fc2 -0xdbbe8a1533eaa616ec95dedb58c552704d3bb9e3fe832dcdc73b9ba60c48d693 -0x4c0bbaac198d061ffe4871c5fe1da2f19faf2555565de6ca2265d670d3127197 -0x10930e07d8428f1fa6d882a80d445cd5bfd928d7054cc77adcd0d7e19e33437d -0xd737dcd37837dcc533e6be3f3f30ec58fb4bdacb1cf2f8d8c76a88fa3de152e5 -0xbd21b20aff31b3f601418dc0fd9649ed482e7a4480c3b1a762f0d12dd6759257 -0x988b95a8faea94253b30b6385fe3a7eb0406109cdf1d0be675f2e8449ffab8a1 -0x2749c3eb71bfbb8ece328e027b0a53a242298e166d2d767fb0ef8a55d403224b -0x225ece8cd7e0bd738c42d64419818d7f7937ec7833983cadbe1b0145a2cd2ea2 -0xc7dbd2c1504ac8d28585b9f5cd47900ba66386c3d6349d6a04a93833272d5c16 -0x7551a79f5300596fa6e4292a43c6a5fb3a67c3ea96e3d44215770adefdb5acf6 -0x0f36f349a739cefddaa73258d754a89f994f1b10326a91734aaab336883163f5 -0x827791e0cb186c09e252cfbe9d25cf0049c90733b0f8a4d7c146dc20c2ce374a -0x43cb925a95fe8264616cb17614f0578967f6cfe9aae730dc90017adf9674e734 -0x26094b1eee8c7190c4f8fd4ef4cfe32eb30bc7c9bd9b80af06572be408a66863 -0xa8493ae118a9f167f5451b1940748f53bf40259403da7f26b7c222a75ce5f78e -0xb55844dd152376739de3a5e9152884dbc05c4317c1464a5186bd8359488f6bce -0xdf3d2bb7dfdb3cc31fa950c5edb8012618eddbfa4c7e92a5c9c44bd6b74f5b42 -0xed32217ef8cb3832f49917aa7fd76351d48aac773c87a5b6bd24661be1aa5262 -0x8515fee9f82484cc884b7bf15dcaae69633a5ccab3f6a865a9d48657c92b9cb8 -0xb4a37193c40404983515871e1f1c12671393068fb7e11f1be8718bb8684d4ca4 -0x76deba24dfee068526ecb57b6c7494b3b90891cb0c7a7832eb87514cdde31433 -0xecbcb69a6649b1fdd36b7616dce3e84d20d6be44775254eb37426a2fd130d1ab -0x697806ac7f41584b5a002afe5557e9de83d3f4b79a3769286a4bf7003f4b7749 -0x31eca88293440faed99d834d300f9c5b9bb6916b622bb92d69b8d6203c8e74da -0x54a7ba9bf9308c3c6e6d32860d4abe1aec703b2924e0147614392f7bd672494e -0xe688e915c70eed2581e80a212bf656e968e605bd4fa742c3450f1e36dbdf9a5e -0x00b58cff90a1776f862138968746891383a1a4aac84bdfc0bf94c2db890b54ba -0x6fa336642823f20b89bc9c11aedeb29681a02ffd69ad8e3777c7dbd637950b1e -0x9a8649f55e79bd90493a12921add8d4772a3c1f23d75a5a2dd4de45ca26f6f39 -0xfa29f409070e9aacb9d3ba715cc19da8cb58c1ec39ccb720747bf56af96cb06f -0x6a48f086d1ca332427b399102c4a6a0eb1ccd4966dd3f002e479579b14f1c9c9 -0xdc0e3cda0dde76956328125ec9e8227a67743ec4e36feaa8b15d7889b2496cb3 -0x8bbe044d6c4da8936bfc7bb69bdbfbecde70a636962e56b20432550edd10dad6 -0x42cc880f527a96248c7d2b2a8fe2f5aeadbd9b49e2b845c4f237410dc693e351 -0xb849f15d61acab84aa557517954d3fed6bc8d1e5d61a18c301d2519bb48166b3 -0x7b1204e37c6b68585caeb7f452681716e1d99ca1181243f74552be5a701679c2 -0x2330c4b491c2174ea3c9c1956dd22e2b00842cfc9547238143c8290df1dff73c -0x8ebb3e12e903bc38aff247fe7991673362177a2a750a99d351e2fbd38e701393 -0x7fe2ba1cfda9402f21e53cfcf477a4b717fa283270e94c279d40b0e08d951014 -0xec55747e401d166e396feb4bced72b561f762dd6f42ed46ec1593e9c2da40517 -0x90a5cf3ff7d5e380eb3eca7c5974b7028f9a215b7fcf6ca7936c2ed1f9f16728 -0xb5320dd0b0eab4366d7ad4cb2468a1eb8319fdf6692fbb13608ca6582ef59f1c -0xb310c9dbc4b9ce2507b865d2bbcc476188e951ad193d788695e07c538a717577 -0x2297ab12f5df23a517b55ba90766df903532d73686cfd684e8d27550895eb8f9 -0x2aed00b44c920fa39fbb10c71f47c46151eb1602732ee2ab17c376857877a146 -0x2d6c9d2723c8ea9a5eb7fe16e132a3a949689f30e61f0382d41b96c119ce94e5 -0x4fc171f5a47dcee145a0201d3bf2a05c760b6a7f4d0abf6e398ace37e49795c6 -0x90ca2af114ab8ec9c97c2ad28c54194ae75e33341a555ef307a85e5f6eba44ca -0x81388aa96edaf41bd2c4059598b4063d5fa34828f54c205ad1d28970109b6ba3 -0x0edfe5b620082ce82e5e036a4ef3c3463db25ad84d82d35a2be5631b81d49a99 -0xe51bac711c7792649fe531b25e4e2d24c027520ba3cbec350287b35e2912b152 -0x791dabe6166f1d674c68d89f9168e56def22f2f48f7281f86f05afa6f4afba8a -0xb25761a65bc039e97e7d5e04803a6b7a2f746ade93d51b5f33014f8b59d6b3ec -0x6258ab6088c5fcc3ac44634ab5ed1aed8e4c6fd0f156c8f57b3862d58296b336 -0x96bf326f8378af4a212e8847403325e14514b740c12c7880031f7e767158d816 -0x8f57219fc1d4f8dbdfbeb15ff479689ce7248540c84fd50397f5cc64fbe13c0b -0xf40bfd7515b38e393180ae0f7bbb2de47330006c62c4923e58b25f2a2d321c5a -0xcc7d3b61ef0ddf581dc12cd3743910c3008e28444f3bf8c0735409ab3a25f783 -0x15e5a2561e2ae82c56f802feed16c79ccfa47b817cce9eeb4cf23cfaa9c0db38 -0xf67005ffa14ac860dbecfbe82411c55ad1a221bbbfb3d17b2317abd2ec9d7864 -0xfc4c0440a89e06b0ca60d61abd9979057abdb203d6f53908d5d69b1f7be68b43 -0x3974e1f1cd74b864fdb92040322aafdb2eb298cca90eb7b0902123d59a990496 -0x6e535628eeaad3c63483c5917dd736899b43f6da58d40e63ae66ac8bcd17c554 -0xeea04ad78bdf7876fe87a9a0e9053423b2bb71a1251fa70a71c42b2e658b77bc -0x9c57cc8952600ea934716627a0f4328a55fbb3861c4bf0def07849fd26fe2203 -0x65d186875d716dada9ad3155fe886afe0b2b0aef02b5fe42a4e6f951ff1dc8d8 -0x8d501a42df88f59e4d45048ba16d748de7600cad6ee24d19d164fadf68e9b534 -0xc61ab9ea5df76eb0e87e495258f27568fc4ab435253e0fcc4a6aa3c5f5ffb6f8 -0x1efdf30318f8d68e2a47648abf5a56ffad1c3b7342d5ec22eead57d350be8dfc -0x63ebc75823ffb71800159f94e3fec3d57e4af2c085760b86966a68a4cc02cfe5 -0x09f00b279bbf411315352bda2258ba616b83f8ebcead632adc88d52eabbd7271 -0x5727867d2b47922f212ce364a67b7a9d489745d6012ed4e3ab2313e61ddfb4e4 -0x55a7528fb828cf02ca3238dde5d486d449c5241c7da9842018a8cbe07d05ab3b -0xe7465ee7d8bd6962d2385c67bbd2ed7c59ebaa309b0cb0e6651fec34a0d56ff4 -0x3ba5ebb0682a96103af8e33d3c3aa208378ec0f44e02aa7adad80f57daf1a65f -0xdd41a5dfce19cac982d3cd3953cd711732475eb0876b87b37336d3e51eb3b2f0 -0x813666cd87e29c1fdc949e118847a1a93e2b4fcd3e01e06f9150f40c9ba7edd4 -0x43602dc11a5cca6b5046e5a4258baa5b2fde18f2f54878220e661a2e21098094 -0x8b8bdfce44a5a2868141a046f1f429d6e96224b193032e35a5684a06b7fdb281 -0x5d929c511032c41fe579cd31d68327cfff394b05a245a9524de5c4737e38f99e -0x058cc1d01f5b774162e25de78439c471cc3e0ea1cc6551590bac408be3aea6a5 -0x36adbdd8e84d00ab9eb85220a5887aabebddd86f75dab9ce142c29bb029f437a -0xccfe15a652fb6c7c56aa96a349c106d3b61785a08fa008ec996c5c549e57c530 -0x3bd9daaa7b4062f8cc17eee34bfc328be63cea3dccc7ab6d18cc1c527764e283 -0x2a9e2e14fe55ab3d0968d28c3e4479b8711ec0f8bd3822a157671277b6bb9519 -0x924264e81a378ed3358233ecad505100e22527f58f8f9bb6b26bc39cf10dfe70 -0xe861599e21e3fa3a4c4c3820c44f980dacf636b33d8473ab0095615ac4bf0fa2 -0xe27edba42eb0ad70ee423c6335e91ed101ae8db33f7dca67682eb9ba8563334e -0xba2e6e43dab24a72a8787233ce1f09fe9f0e960d68e334d8fdaa5fb0ccdc72fa -0xce70a2db99708c1c8ebf38e7e088dfa4e2c668ea80704705d5395e0620e7ec10 -0x0b13ad5a911cec44b039f6f5b1b6acd9eb3b3fff9c6d9378f9109d09f20ccbb3 -0x34a410fb0c1dc8f2d2237d6b4999a710ed9cbbfd9ab82ba461696e42c548f1b6 -0x8579ca47cc639691d7cfa6e54e18365c0b5cfaa33726be7ff1313fe1386184f1 -0x53155e311b9b8c55e83ddc45b1b159fa80123bab90adf9b8dd2bea0d12dbe012 -0x597e76eb3a055a97baaa2c97177ec80b4d079ec0b18cd1c4ff648ab5507a2b6d -0x659917470097758d1fd226dd90f2c16224bc6c25156e0790931a8c16c374fdd2 -0x4acdabcccf0668c5d0c8580786665981aeca945294fbe8b23cffbd6775e2b465 -0x484e11b7a3e4fba0b39e7d8692795972bb65b19f0b296c8320949b6dbf1f44e6 -0x42ad861f22da3d9870ea3e6cb846a1a47e62ba6754d3e052f5e21373dd62e643 -0x5d108987a6f95a656c1b90999ce7122930977918cbe2feec03a9b394603d5c1f -0x1350f7942e96d46351c2441b55490ada6172d489f70f34f87728ddde3d436650 -0x64f280db5e6ec947c3c565cd760c360df4f160fb9cd9f181c51c231570b43741 -0x92e5268a2dbb03066ada3c0a25874d71023cdabbe251536fdc6d5a5335a23000 -0xdc1e3e849d1159c1206cea14fa4d61bf78e3855e4959be9ae11ccbb01adb611f -0x8fa9e7f7fae225cff7d12c0a2d505e271833249c20505902efc5a315ff684b52 -0xda3b7bfb59d8b835c80c9ece5cda46681383c814b122d777f0437258a9a5ea32 -0x53a4e95e7dd668ec68f119f8721669eb5141c91f82a82c6a67cdee6a947d3dbe -0x721bca76afa73ab2f5ef1efa6ab8a3f58d933edb92c983d957e4e5fe611ceb10 -0xf3ea8034d347e426866f2b2a6831659fcbeeae14d0d324fa6fc5f3d58e65cc2a -0x49e3f44176f028f21f7614afcb43844ca180a6eca01f502c3906e48665aacc75 -0xcdc723222433db513002e4c07529f11a7e02c940db6fd8969ee3292c14a5ffc9 -0x46f00d91b7f6380034e4421ab730baeaeec708d9deb50c4388228a060cf78287 -0xf19f8de36bfa63b920bf598b1ada144d989eb9fe2cf7d0a23dd9e83348b9cc22 -0x482236d7b755a6f8be94b348932b2b7e1ddd459023075d6c3db95d5faed0b5c9 -0x72dbfeec84942f11340c29e246193dcac246f8d3a4438a5d57d29784730163ab -0x60b8a887333436180d188aba4aac053fd6004587bb657e17d7d7668eff7671e2 -0x8d2444071f05bfa1f5ce8d282bf5a39f2c3c96e69d5a39e85d5630ab6eb1d00f -0xe9b95725f85a958903722c67b3168f1a2ce3a119a37ec760a7dd7107c72cdedb -0x1b0969e44358126ac1d9e9da144802b9aa4b4711c6861a247dca6a1e2b6558ae -0x1b12955f60690fc953ef421c99b2cbed613937c7e724a0b67730bfcc013a1637 -0x796f22373f0afbe16ae3f55221e891f5da6978e989a9623a5a98e88d71726a68 -0xc45359a9ecce925ee50bc68da1529bb22fdcc0e2f89e0e730b57416b94cc5789 -0xe64b4a344424d50c5142a8c701b909f702e505b01762ab55e367b16ecedb9eb4 -0xd933d38ae5337f8964d6c0495e60237a11cfba75b90badbe5439ea53823324d3 -0x7d75b5b76ffc7ddb5f62c7796bae0026211aa469e1f749d1d1a3cda5483472ee -0x33a840989bb82861b97c052b679771c6f4a1c5b4ea9f12f3616c3b4ed33451d8 -0xe1abaadd848a9524f06a096e599a7fcb5985adc66f4ba3d07bebdba60cc6d2c0 -0x6b051e41a06c38e850e0ec599f6a934413f48b04881bcfdc81e4f490c7f56865 -0xaeafa018b26fbbc49a8e80325a4378df8ccb24a81fa9d9873892fa12dafcc6cf -0x32b5f5105141d9edb7d6514499ac2a0ab2de5b3b9349a424cf5b64a8732b1d43 -0x7f5989234c58d043dc0cb3eb678682870a18af8d0f469cdf2c18086b2395d97a -0x9393013481ca5061e8b8575a49ef2b93ea6fc32c6f80a907fcfe8f9e32073d9a -0xde15b255cb49b0a5535347dedc2d889a3c9f97f63b0ddf848ee1da2e648cf0ca -0x1c5bfc6fa1d8670c1bc5f3674da178b86f6886bf1aeea5210f9cf7bd022b850a -0xd9413f9e050ea8220bc80b3e90cd682bd62ff9e5055837bdbe47082c1be8e1a7 -0xc9822a836e4ce36fe4f42cf5eacdeebb0fbe4cf4f1b1abc2208d48f4cd61ba4e -0x898e289dcacecb5530b30c468a4e2629e41e72a831ef716f5c4fbc670037147a -0x64e767eb151a70d3145181aedc92024575416498141cf3aa1125155e5a6fb004 -0x3efad455761ca766ec56df6b2df8889d2d5f3986aec6eef0c16f769f7809f367 -0x37fe7172e78027fae26ff17380e75326f81fa6d67e269f8df68aced15d410fd9 -0x26c85a54796573260af42423bdd3502aae6db6ef1bf5ac72d3400bbcbd72f586 -0xda8478b391da0ca1bb043e0db60347a803c3fbd282656fe86093bfa7541b1799 -0x8fab3215ad31f3e8b2b7c3b43e1ed3afd13d671fb746fd7497192d6374140e6e -0x4966367afcd7312b7e33f84e6b2674eb458b5699e7a694542e3c4406eb9d67e2 -0xfdd3cf46366254bbffcc40d7ee2f1a5dad6f22695ea6b57e0c331f4b7c895ccb -0xf6e9857b1a67523d5a6b27414d6d707c898dc063f5f143226e6149f5e59f8dad -0x4c8980b0ba456cea2bbf9a75476e984554a76aff986268395d6a24d30ce1b62a -0xe3922ccdca8c5eb48d501ca91a7a33103ce60eb2070c10b246ab61d0af158b24 -0xd49a0853d2686acb1d3cf58e38ecd6312912812eee2efdb8d04f06196cc310ce -0x324e3145c0556f6ed8515eb4bfe0937f8b849cda2894327c6fb011ddbd39abe6 -0xa105f2a6cc2cce4b300ca798cd698dc97dbbb494ed204771faa4b8964a0883b0 -0x5b84664b0006e38c4844fed6ea5ebaabfa4cc661467969fb4b68f996e8aefd42 -0x1ee4380ed66da42f50f61b7e32ae639ed350e13e150605c250e5e4d3d02eda96 -0xdf82d978d2a983c67464fea584c09d9099d98aa39854a3e9ad68c6948c16bb91 -0x87d498cc480e0c93f3ac1c1c39210db24adc5c7f46ef7a0f40df077fe79cef80 -0x2f22d9448a5d727c114e9c9fd295212eab9521a2f9cf3d010252831c9c461b5b -0x916857b93b10e69b53ad469779e4979c121bd7ff83f3d698854a2fc1c388630c -0xaf8659b960b399ae61a034c3cfd3f895fa2c4a9a3eb76f8a74c98b9ff388ef59 -0x5fac8a7e18108db0285b25533b81ae379f8b39b7a12481afcd2cb03842051a94 -0x053deedf281ba0c8d3a662604b1992a303ee15dbc0e9cbf3c51a0c1461ed42bc -0xe2cf2fd2cbf0b174f847363215c734edb1c2f7c5ba6f4b0933d20f0ebda06037 -0x4d320298959899157ae750ab0b045cd769989b7cd3b740464251eddf20fbf0d8 -0x2b1f22c5b0aae575c9cac8112ef4f019586da3dbabfe9824bce90b1c9a208ecc -0xd18890d5fff4bf23264b617e973bab5b80bf0cf7eb54a37f5a2a0a574c1e3f39 -0xac00b01ce788c84440221aa54bfda408a257ac40f013d1cff4bec923e7571428 -0xe54cb1bf12e9915f49f13d347e07d515ae397fcbe373f0d1597efabeca5221d4 -0xf9e786e16239ae24414c4b7e7dc30f3be57e5e7adc8abc3922a2cd92200bb052 -0xf04bd417354f8a01c94a0663ac93a31071dd0ae645e39ab40f3b9e100e8bac78 -0x78e0c10ce13bae9a40b36d59ec7d59088cace810add4c83e3bef1ac0ebab27ca -0xc7e900030e2b78f1a73056a9d4e427276bf32e05b36922b5cc6e345de723b869 -0x12b3439d30c1ce04e16dd847f6fc1ccbbb1b0969de7f875b774cdfc11654c3e8 -0x01063609c41249e31d19573f557dc99f711a2b003bf49a72253f47a64930cbe7 -0xba3518367d9b43d3eff37bd7c885303714701e8fb664f43740f61fbf39361b44 -0x85b3ba519a16db43b7ea184b0e4958878a11f383c17aaeaac80d8d0653fbbf3f -0x1370a319904ace2b82ff164bba0706920544efa4f9cacf75531403fb84d0b3b1 -0xc5b08c65d2ea505fab4bc33c748b1f41a762602267c3663b4fef3dc702c1c6f2 -0x5c022c4ad24f48db83f98f918052ff5815cd6580a9706532ffb7d12fd02e126d -0xa75174c3e0fadf4d87b5010a82131ab02215fcbeffd3b14e0ebb9567d56b2f38 -0x0906a398cdbb99aa69ea16d8cafa141ef054a652adddc3d3cb874ea0fe576ea1 -0x96eadd41b093c5053ca939aa5001becdb2b1febb8ba5be93b12c1857f362fdfa -0xdb5583040f24e3114eceed24fe03f6af31a6eba1723fdb5fd26dfc3fe30e026d -0x270fc1bc74eecedb54298b113e2c5e79aa5fa2bb993362c13f0e69bfd228f6cc -0x0a01bf9c10ff2022bae54cc5490a86390466f8b2fe320efc3c2e5b92a5e814af -0x0fbc7b73a0974b870e5710cc22ed5717b80ddc4becebd339f99260a24f439fe9 -0x2b591b4f408bfb81dc665080070d1aa86249dea8c045f6458ce4de39a5f3485d -0x9721f6268bdc76e76bd1ed0a1f283b7b876d669202899cd76f3e020b55ec5d20 -0x0c50b0bd670944cb5ef30e3f2942b013e1a32eaaa01b7a82114b8af41ea7958c -0x528f519bdaa67f07131480462dabc80f1e3026369cc54da2f69e64dc473b5458 -0xd1fa5d09a8334805e02d26179ef416f0a1b0055ed4863b86c76d94dfe295bff8 -0xef1ffb3c5b66a83b2302c8fbc34f9b5d4d25dc4348f3d4d1876488ccc7617fed -0x71cb11b33bc28a2d68eb695569e93aa49f76d7d14465db7117edffbb23b63c52 -0xb93754dfcca3bd8852271094556eabeb948a59afbe9c4d74ffad9952ba966006 -0x4b64b6c907f486a7fec08aced80fcb784e8ef17ad13bbca027305c06e486ea5f -0x1bb54ba8ccec8e14a83935db520d45f9bb0140e811d3267ab54d52c5b546bb19 -0x34b8eaecb4c2101d6f543eaf2075b48bbe067d02e2b0b0870232a129ad905b32 -0x5337bde3ce97bd1632ce55deae8d83e6d20fe5d2c9a1abc8efd9b65b819b0e8f -0x60c404d6937630d7a73b456b585a9802679f6ec27f4dae492b8f4a9857cee944 -0x9813ff96ea1840126872f2581f2b2b470d7b22859e5611a248f0aab643530765 -0xf59efa7d50223f30d499868cbd4314e27311ef839110827621dad6c1561cc3cf -0x9806c89ef724e300368d0d666f760bf6f86efba85000de4af00f532a4d870018 -0x5458a91340c54ca7cfb294c19137d7e69a69d751b338a92aac7137ef10551ff3 -0x56b7fa87f1163d0953b5a95365e2609f6d51d1fbf39fb8d3c7875cdb7e985fd3 -0x8625c538c407bd718babc655225400d3862a829c4d2e909d1efaf2e4956997ca -0x9f56ef29ef6bf2a706484b11b14db274489fb3d13e7a508ad87d248dfa28c7ca -0x689d56793f7f375c6e51db71b59ef89418e6b09ae43b9b482e18ddc2c581794c -0x63cc12760eb5be73e2b1d825c19f76e9a775e70dec7f6985d13b370f5a10b199 -0x046512bc9f7e27aa8cc06bd48316a3b605ca79119787030ff440f499e9b3cfc1 -0x18cadbc34c320a36d4c86d86453e8ad798df65365644fad90a2313c670c82424 -0xa98081fdd0c9b1f1c02c895167b86b9452cff545e0d454e2c8ab43d86a2218f2 -0x281a08eeb04d806e65dd44a6d6439d3f76ea87837a33b440d754a24e8ee88b48 -0xd94ec367ca5a939a0b743eff114446ad8a5d5301330b7d8fb320ed2c526ac9a3 -0x133f4e15883d33d01b9471f04faffa9251917f003319d25818f647e1d7a386a8 -0x087db7e129701f876c582b81f5dbbecfae978440772704ad6d819be02648c9a0 -0xeff1fb9312235548fd84a8acc4c58f71212c6a2e7a17a3525bcf433061567604 -0xf4723f52659d6bc9315617567bda3cb804b3ddafbcbddeaeb80ea42267ef2433 -0x41a5df0204c6bdf9196c36701c4209fad1f11acb49052d42bbb09168c22d3803 -0x30430e13b32d24e06fdaca17b45193bd67531bacf1cb64967cc13420f3232a06 -0xa64c216f5f76d3ac5b7a5f5d4afbe3aeedc452f9f835f3c4e8f3047d2a901621 -0x6f0237965651c582cdb963b45c75aa21c78b9beb0d3eecf6da5a118d799afe4d -0xd123974d6ea84c7c6c6f6dabf4af31b50e03dbf0d7d3cbb62fea95551a90fb1f -0x59ede7de8a49ada94e79db515f09a0ca96f814f31b5a38c67f4d5ed23c5ff93a -0xb01147a6387dcb918813c79fde2387f1c553d383e8e78fc77a188859a9a68db6 -0xf1696658b8d089e64678ae8630b2fe66691fb6a6f6f001f66000ce34b00c223a -0xcd6dcc5008768099827acbf9bdaa79ec9456bcd610f3c39201d2b11bbdeb8507 -0x2976afc998e4b5811cd9df3131591856726cad24680828d6c604af69cbfd450c -0xc99e7b42c1deda2cd19c8422f85ca8942866bea83150fe4d284dc8c7e8960f8f -0x610b8be156cfffa7ae19b9d3762352d48dd412539d506cf3d128d1b7d962c42c -0x6cbf838ab99f64953aa9d9c68a3a883ed56d1d29707aaf1f86d8d8e32aa40c0e -0x253435b25f03200104165444d871ef92497b44b6bfe386dab1670e46e7fb4111 -0xa165032d45f2f38f54b586b0db997a2f4d207269f0bf95afb62f1b0fde393bc2 -0x26bda9470c6c203cf72e5f55f399b694f7cba8a77691d12db744100af819e225 -0x48bee597aacdf4a0fbe299353e5f48d60cc419e4d1637d139bcce2410a8c99d4 -0x5d339fbeeeb8f3a75c7f755ae389544347f3ca5375a7e2710f29255c709159d5 -0x4d2a227e360b85c59009097a80e5dd9945b6058a9c39ea51b20f06a2150b4014 -0xdacc62316bbf883a59afd4aec1539c3b484f5ed8a9f673ed966402ab9de21ed1 -0xd5928523578747d1671cf94e4ee2b9210ae2ef376d33a814fa2d8fa89d0b694b -0xae1d34317fa3d0153f3e4a55803ab56a525340de49ff4bf71f77a98417c0e225 -0x7f1106b3e7fd6e467ccbd4ada0e1c6c9ea539e6fe81baa1902cc6c44e9e6a6f6 -0x3009a04b4939bc54e0f70fdc2f9fc4cb7da55f135ff0831473655cee7af17f39 -0xc687faeb46cbbbf7fcba4742122be01b338919e7a90fb0c17d120aabd3a4c1a2 -0xe303f44de050f4f50a920a67f82b633962f2665b407c3eb2b850130e1d48e442 -0x116bae88c919bddc98bd798b25df79873756be3ebbdca3e99e7a742cd079025c -0x1aede673755599f0de4f311561a49a10618874391e4081cf2417d6fe60c47d9e -0xf8d039765806a97ae1554af14a07d67cdc66773abc284e400b9f779accd39be9 -0xf2a14853af8e4041450afc2569a7174d9bf3ef5b147ace7d3d536a9811be40b5 -0x18cfd3d63e53cd5672c58416d9022dc09fc7dcf85e31b17b3d5b6903e57568bf -0x6fa1fc86ca7f432defe06ddc028f41b1c31717708e614209170b3982c5f699ea -0x18e2effdc3148a137bdf693aae023d5530a00a39ef540b2ccf481dd65e0d3ef3 -0xcbbfc91d34e6e4b8190d4d16a029d505fd93a87383de05302c17f1488fa421c7 -0x471b4a5abfeac751a412dbf4823102278422dfa4d7f562ca2d13ab9a31bd4f31 -0xc31ddeb4fd3596366a1d9fc9980f67394525a7be8eb998c181aac34e1c655b20 -0x7064fcd8d98a315d739e53be606a85df81c11e0921c6abc23e75fc1b8fe54b98 -0x50e1732c579cb8598d5250a066550e0636d9cca4138fc6552974e95668b4368f -0x1b081e695dc5cee3a8f68d381be6d15995a1dcc3c04ee87a72151ce1d14e0699 -0xdae69d071b9614683f3394b394c213d8518f33e8ccd61ebdfd06549cd82d169b -0xd4e0f596ef2eb8f15a2c2d0ffb45c115a44f9f78c255a4b5976a47a26efe81f6 -0x34201fc39fd694051c8658df64be0227bc0cd18d7b59635541e76f93ada131b0 -0x6a5b2ddb7a83f723210cbdbb1ea18cd4456a6390b30c8dfc9cb377a3db428a63 -0xbe85a4e621eb1d7ea14d734c725bc910ed5aa7422b6afefa17cb2e00d10b1982 -0xe5532a0e8c5cea1d8cae3cd9be799c82a5e06f2a9b592294c31c8289889d7c79 -0x6ebf7e087f8d634549718f167666a911f6c04801f80e6dfea3334d1e026877b7 -0x19fea41be201467a1b271c8981d992f5abfd6014a3d1126105853529de8a7daf -0xc21289294e2c0b3d737fa0aa10bffd2ff1d452be13968e994a84d03421e52631 -0xe9c57bb4e3c411bbc8ad5525e1d8d75b9864af9f38e4db1a66cfb3168ba04a27 -0x4da04c4407106ac89629d8530cc988793a976d56a9b553e8953dcb028a981d4a -0x253ad5c4d2892955379bc5b56afc418b17b7131bfbf336134baf769430fec2c5 -0xbad94642f5d4b3289404c350df52fd3248812bc69b8dcaffdf0e1fcbd8f706c3 -0x4f18993a556328f3729ee349e73c03c49b9fa368a9aabf1e291c731bd05cd88c -0x45575b25bac768a65a1d8cbe19c60ff4a72d125d0a5ac3d2608eff4e43781ec0 -0xbfa50a7b931b67041e9a585db1a54b2d1ee3f593a852f69e6b8607256b17b189 -0xe1ff3a532562fe03a12bb47368836cb1ce0dedaee5f69e617bdc866a56c0ffc1 -0x59b26daff6f9608394decbccaf60fbfa2a92ae15d332dea0ed5cd988afb70dbf -0x83cbf2028fbb23e8ae6d02afbe50a4bedb9469236dd509f1764e66b82e47da38 -0x6e361eea974627fa6d98a99ff5d1d5ffca1e2ea3b663c5d1b33dcce952442164 -0x9a833acc74f3c26370607ba8f5a6f012c382fc877dc4d8f478eb9f7eba41a4c7 -0x941e8c1fbfd0242467a13e047c31f5036f8d0220a9a7e6a3d01ee6cef698d00c -0x8191d16a1309d45fb8bb080c44c875d63af151b82b0780512a1faf5b89bc7f15 -0x4c80fc73a6ccbd804715ed445c6e966b64566f8b5b1b63d3d2c4bdb54d18b313 -0xc2c18bd8c590731030c77d81c8cccaf9f062dace1174044575876fbd8b646f3a -0x0cf07af718a47bf0e58ed7104577fe9802af143b36254fcb48b04fa7fc40c96e -0x4923e7227dc3a6f582b0414ca9d786a1427af81d171397ee0aff2850c9397b26 -0x71f41240c971201087d6463b95b7d1a92a504585aa9e57c5665031a483c2acb5 -0x3ef12b80d377a83b58316bfdcbfc4b101f404e7b89d6f68ac20237f39dfbcdb8 -0x216b2238acf0055962a732813e71865c78c945c991f846f74741f05ecfc560a3 -0xc4e68b1fb466bbd13b12e44e5d1911f52b152ff6d05c1b9faa5f574c6b1c6346 -0x327b202257fe6471e3d695e9c78db63178cdd1f8dfb1bd15b51c2cffd2002af6 -0x235531b421d690c2005eadc7cc4b5a7e1e5a359cd538106aa2c7e00ddd7d8d99 -0xe58f67afdd8487ae30d1ef9d37311383a83b68eb2c383013c351b6d8cf6b4c10 -0x8e2e5eccb6cd4c5399cc8cf74d68fca5157623f647eee3d10395bfbee62f7a60 -0x01b705c4c1e11a88afa76fd189a46b65048713848dc4a6bc0721e367dcce733d -0xf6f66a12feb5e3c2535d2276b5092e8d859d188ab4b83457737aca58c3359078 -0x028a728de084581759083c4fd6f5090e38aebb68b4a42738cb75f8db783e1538 -0xa1bb057cb7e21b7fa04b2a3133b4434cd8613e561884b782402f8df0b4d6a1b1 -0x87ddf79bb1bc4915c2a67b0e72c04a469ef676a20f3d2520857c096c463ada81 -0x72773b2f23a68bf38a2d13ed0cf99d6c8e17d028bc8d77ea9fe1ceb322fde37b -0x4bc612f2a9fb0bb66480dee422251ed2e7488eaef8e820c0cef57e53ba6eabb4 -0x4f27bdc77d225cfb151792cb6202e4e9717d544228d7ae70c806c651e1275318 -0xf713893947676b3760e72965861193b24abf003980e65a3332d524bcd89a6a43 -0x4908e8cd43f80047648e7f5f39eb4c7885986b55e9837426e6118c32cbb0e175 -0xdd7f480a2faa54d8d91ef961500058360d1bfa638e1fc9f31325d8acd95bda7a -0x9d842798161e1b9a2329af52507c0c0402637c08f2fb05ac1e3bc48e77f7c0d2 -0x28be319dd81e7904b5dc9d67333cc23329dd6a48f9dac105e285e1876d17a97b -0xbf9c0213152d1654ec342244c4febaab3f725820fe7b2f689df17460e5a22425 -0xbc932997fd3288871111266e33c7828d579f827e3d6d8e8bcbfa4d668e3e674e -0x213b3b54ca68a91252bf4ae8920b83ba7172a2681a4dc93b53f77c6891e01bb3 -0xba32a457fecf274582641db16ba4c52cedfca83848bfdd6869e8c1902ac5152b -0xe164ba13c241eac552f795812ed559a2320d7c6fe1dd8f5c1174fc8031ffbdf4 -0xab37853077f763cb06787d23c8355166ba75c792ee65054e649090d727450252 -0xa96fd4d586f27a7014f2cdce23b98856383ed746991806e4dc395225ea335e72 -0x805527faa0f7f55901c7da30a918e2babde61f16293d8ac0ee9ecdba5a8c3df9 -0xe80e9a5c6c201a10ce2cacc385e6d6f865668abf038bcaa211141524225a2e98 -0xd48bcad9a1340ce751b712930a373f646ab92e0c7942c3f8defb3d50986909c1 -0xc008158f60e76974155ae64faabc203d2c25f4a230fe2f7b44f4e097406c4ea6 -0x4ed7ce0f4f2a93c777a33cd7560c5bd8a9ff5b1da92dead8b7c78c4cb4d75c4f -0x59e8d28d70c9c575e436d6ad97afcd91f4de01baf22ad61e4ae5afca2204f165 -0x4d120aeef0e93203b8e02554e234efa8e24daf87172d7c597ce8369408c53be5 -0x58b720bcca0cd49360441c06d85b4fa671930cea360a9651c139ba0b7869dc42 -0xb46764eeeff7552d1a1e1d6b165cbc23227d67620abcfadfaf6df8ebf354f07a -0xf0473ba2fea680c8e128a4e874f95da91eb3a8eab2b35dfb616a5cdcc1fb789f -0x93a5d9c08a0ea144c809681d919fb06c673456bd6be0b8a31c7ca68dff5e4c5f -0xc3736830601d32cc6e078d4fb044cea1e4783472cd943fdc4c6e633ff3db175d -0x4beb009fd102fdd4274f3934e1cef44bd12620d14f77e8c1e9dc923042cf34ff -0xdfe1faf7ce9843d93c827685112c2a5ab017a83b2042611e650e1c64b1018011 -0xd0d4153edc598e0f2c6511919ef4da92db232af5453f6fa23517edaef4eb1614 -0x0cbcf8d3b60dab8172573a2ad8e261b19feae92bdb4303058ed5df8c12207a55 -0x9fb012eee546ad40e098ac770c8f565169b182a8354808b04f97225c842e296c -0xa12ba8e29c944e0a9fdb3eba06c4806cfc2aec112911c19ffa0f52548380563d -0x06c37ab12d4898765480c3012237fb0adedaed846def5f8e6a60936400f16ee1 -0x58cf7acaaec6c66333046cecb6570768d7abe3d01e6b89d4729d5726367cf0f5 -0x227b4e52c2cead54b3e4ca8ed94584a43f0078282b50ac6b6272500614b981b8 -0xc0e4b21c9543510b8ad82d83fbe25df140662cf5029192431aab36491a87f458 -0x2350c7ed86f46838adf2312769dfa11c776f2d23574c3dee384d7f41aa7a436b -0xafd84a32b811e3c4dabfc3eed04d660baf53e5275e45215e594cefb36e55400d -0xd4a501bcfe5bf50a24484a23753335ee2891d946c7c0ab67654c2c942ef17826 -0x7fcbd6ec991440d3a15da9ef6ee5d28d8c453e6268ee0a6dc030c1346371d96f -0x39deef92f007d35c40317169b5cf75ddb561b61076db9b0b57cec2e1bdf43eaa -0xcf9cd73faef481884ac94e4fb0f32ac6d93d53f2aa80ad1ee0ae74eae89b7164 -0xec229d3b58684e4098b19923286771aa791d0faec5e198c6f3e9effbe4cfaaed -0xc76f22c62db1fe3c4d3d851cbfdce42968239a593574b558ef2db9e64bcd64c6 -0x14fcc2c02815535bba692323f0c35e5f30f28a82940f286e6ee9a272d31497a4 -0xe76f44eb1afb618d67ca58317fdfbeb6a1429c3cece371ca2e1d3c239485d751 -0xdadd431c247b5e5b084d2a967063042bb3a93058befc449432e1c88988cb487c -0x151ff303e33bc92bb9c713326c626b67e2ba259eaf3603ef703c9b9573d38676 -0x8cc543fad9847473978906fd72bd49dd49321f9e84e437a70819771849c3c687 -0xbdac88e0a6fe9514914fe0b48032584c81dbcdfdf32e0ce2a12fd68c317ffb0e -0x537be463967115f3a7bc28f133b5d84aeccfd885f1adf403e1776ed62980fe16 -0x98e851888e2692b0ed3ed2022d57f0ea52d63db94d306f2523aaa22364a86829 -0x37854ca9b2ca64c8f3d636238690ec014a4e1d4ac124cb23fe8cd66e27817b40 -0xb5fd369c84257c9d89a6ac5ba9890a46897cbb98c44033b971f3e1fdbf38dceb -0x42008bbd0f7bf8efd554f5212e2a81acc6a175d1984d31cfdaf40a55b2c97af7 -0x549a77bdb62ed3480946916c7b3326d1985964a4fed83c61c21d477eedfbb516 -0xa03d9d91014a0a6077d5730d3aca690215a7e1eb1785e8b88610cb9d95f95c2a -0xd3e61f4318740808ec51903ac1424608bde4d8c33f3674f2de01d413c0442195 -0x4447cef6a53502f952060e54cae14e6a2c637c147b5a4f76220f9597e59a170d -0x52e052173ec2718f4db9fbd951cfeeae677301c4de1230118b30e44c1a0a90af -0x65f034b7dcc04a662a50e09bcb7e669a35937cdf9d4f797537d42493bde9456a -0x2caf5209fe0ad73af514cec3104eaccc954cc7f325996b690f094a5c95936487 -0x91b85c08baf668d0688ee0146b4de462601c0bd1743b075aa8d23310fe2b7014 -0x0063db26c4b62937fde8771007d3cc17240c5115fad87c382ffd4fddf15fd4a7 -0x7e326e72173ecc298bd9d9ccdd9c272003c11f3032e2db92139b16557a6795cc -0xc883d3cca6040dc160a0410c0c801626372cf6ca762bf5d62261447fe9eadcdf -0x19453418839e75bdcd09ec10397309a8671c02a9088071e4223727f9caa647b3 -0x01d3be755c5b7c44b0df64a39289dd22573fc662880b42e4b7ee70db086ad9d4 -0x91b8f300c174f2a31e03d914cd50addf07e103e602f5e3e37dc5cdf8263a594b -0x4bb39b482549c6eb7e06081a1265bb72dc08cd442764dbb542d8e956d186e5ab -0xe5a85c085f9231220c41a2571157ae6f4076f45abc84c75a79694998347a8d53 -0xec98e0124ddaf069f6ed00acd50d258385db06e7d4982def45cd83be9f5ad7a3 -0xc3df42f1cee47acc271409fa1234d628af32ec3a37ff9d165404a651bac6822a -0x2cd675ca82da41cb62a9ff9adda1ff54f91262ff12c89b0a252d5d51c2ddc563 -0x4731f988dd82fdc33814f07b918e1c364cdf6d370d690d8cb8b59ab6ba3f9660 -0xe10601aaa7ddfd9ae39445938f0a0efe698f50f9faee014969360259a559d9dd -0xb4114af073b71b7cd31d073e9bf8d579a1d282611fa19666b0fe74cbf24a2560 -0xe99a57f9e40fd68730288874c8af94f60a22fad3105b42c9c728c52b666629b7 -0xf610ea56e1147ad7095d12c3b15f84e22ece49fa07dca349bad5a1fab2e14afe -0xcfdf0660d5f2cfb25591883fdd2c0d5d8bf28bc358e813dbec242fd473cfedd6 -0xad31e5c1fbd73d64ac050301fc08b8e8cef132be61d671b6c6a347461d0e39cc -0x029f6ae713522cc694f3838e737cbd41f617fdfec52718ada4a88525a56cd3d6 -0x20e7f40ffe5a3ae74b762d84fe1f2515a8ffbd547aef5e49a61b0fd68fa8a476 -0xc1322e4097d6a0174a4409e941eceff961c915b809b47e31a7dcc1854056a216 -0xc9dbc9260e2cf9377fbb27bc0bb475ed5e3cae07c6d2ace52695819bdca5c58b -0xe82fb49c0caabb52f23b548be7c09ebde018dc526b6102e58175a08e716244e7 -0x7dd05122de125a8a86f335e2c9922a3540484f3e6706ffa34c0697894648f0ba -0x34b4e117230c89a7d163250505e9eac892d93c3b250247b8aec9dad15e115cd0 -0xf574b30bb74dbfc11236a90cf74b94450b55d4529b13bda479bef9f252c90606 -0x3acb801413f8286b1d9c8aa622af8b1d083d86b7e085686a8c08cc399a03929a -0x319d2cba95cd0397c1913505b8ae20afa1c470066ada60ab872b5acd2d77732c -0x8dbc3203a6c215cce4889c460ad13cdda00e03f61b82548e893a442590407cb5 -0xbcfe0e1800be821b6a16b83cac81a26d9bcaef78004fa289bc33a2a611b3aafb -0x848292b498995117e4aad0097cfcc0339a80166170807d88bc9c37fec7c0768e -0x33b8eaceb7aac9c9bc63cf8c1522c1003524f6bcf1a0b6a84f8171feaf7c22d0 -0x2d5ca0072cb58d2b343ddde7839f9e7589b12c8ed9e13de5725e6fa69991d734 -0xe102cf40d0477cee275702eb47f6323b4148eda11821d0615a1c1e0957e0abb4 -0xa5d978142e4a648035a133ae2284f68a36119651b9c646bf20b5368cc31c27b6 -0x1e584dca4a98809faf463bdaaf361d22d78b74f029c39bb11e67ca151838f045 -0xcdc09dc074baa989306478fead25c5fa4f2d786eb39a98c57485c49f743f9016 -0x15339660d0d60359b33e97048ac3d8235d5b55cf7e4cc5244a25a7a22a54b518 -0x771021b58b8d6a91e48ebbdd2b1a1f3ada6f90d49d751626b82192f6f6c115c8 -0xa68c21e0835c4f323bae8003f07fd0d62ae3aa07fe2061527c2f5ed314d686e1 -0xd31a9358adcfb92ee52a6b4ccf96cbf597be4abdf9c4806ecc0072613cc80cd4 -0xf15b527f14ff0e0f3e469f28a1c5edae187b45ddcb82d19e4ea9fea32908dbd2 -0x43ec14e95d43b685b8371c4dc1456350fa9c8b6e09c56f2aed3cf8c4aacd3b18 -0xc4b7bc3b033b15b966c894634924feb9f3c2e142b45dcf495de07864464d37a5 -0x84d328de32088c66e8300872c33795eafb9110cbb4253747a39b18205c90fe05 -0x73f66708a9b5fff4770b6b86745f8b8946dd1bf67182ff2c8a9b89878b50c68d -0x763d1deb1e5bc7c4b5c3cfb05469bd529aaf6705ce99ef386d4f426bd0f82725 -0x9fb49713e66fa67289750fb10c32dd5ed28e837fff1864ae9c9f45b293e99157 -0xdb42e5c9dce4dd747f2336d49aa3291a835a6e5ce8fdfb149a4eaf912097b63e -0x2077c5ad37e83c02008423be4f105ae3161a72f0a5455ab90280bb76a7469812 -0x2f82f5883b5f3027f81bab8d54acdb392094750d2bed04aa4accb99c5520c635 -0xec84e30d3e1dd076db4c9f49e6db5ebda4d6b5b624e617f8be60a9f008a5b842 -0x72b0a91c4d8be5cd23b8ec648ea3ac21f1fe38f4a6af086d7e41d7bed1fe5366 -0xe115c2207f519a407cc346ed065c6d8358295205cbd28a1217291c2ec810d7e4 -0xf635cbe8648f81dcdb670ca24f5c7ebb6c1fe6aa5b0e9f5f17a162bb70f87db8 -0x2c3036fb8fde2e35dac95c256d472d3b82b050a031147c9e557ea44d909853ee -0x6920756995102f74d4818f90c9ba5ff3935ddbdf3e0c78e359c9c90da6748b0a -0x19316f9020ba5f640b4b0b909aadcad9cc8fbc8a366c30b70792f0b90a0675af -0x3d8cb8285907aa165be379cfc95eabb3cdd2898462a88b476d42d6aedb2f1293 -0x8009774e28d53e8ffbc46dc9a7d3074e539c5c506653a7123f0b4995134c816b -0x0dd8bb2f35fad9c0f44371aa12f1a2857a15e863e26a99c7cd0c22b2c1d02276 -0x5d5e8a9acd1f11fd71602f6075210f2a992de854d31d3e593ba92832535e4c3b -0xee003afa33d802ae1e4efccf62066736c548849631b83aa35ed55f651de9041f -0x6973ecf20b4571008a015e75024c559ea6d1a215e4a3ae70aac62b1eb15d8359 -0xc7207459cf0f02b1f331e1fe855ddec55420f2e74a2a387a74bd9afba3f76c47 -0x034c51255550b76da679b9d58f2ede27fbacb7ee8454a73d822a2392a56478db -0x339d6082054b3d24a26a83f0f342c5dc3714a7d75cbd48fdd02ac0a61a0bc32b -0x45b82fb7fb7fc01aff3b9866763335e4bb5ac6974fc8936e39032ce34aa01b8a -0x241860342786afd8dd2efdcb607e0c947812a32255a80f923f791c5cee2a0aab -0xfda445a2932db467a667d3653d0c106fc37de3b97d704abf8ff8c796b333b1ca -0xf0c82d58ab2df03c5758d8ef9f95c73b0177c9b4572ed0b6830fcb3d56b11e84 -0x16352a5b570a957dc165b3676cf898fbd8bf339bc739e5e651964c93e8d29f96 -0xedd5afe81c7b4606d09a1da7cfa9ea69865ced2f4d49b9fd8766a691a20549e7 -0x68d7b280d848cab8344f8982971ad0633c00c3dbf23160efef25f1e8d31d34a9 -0x6d2ed55d5d0208a5c2972eee8003dff118af2c587acd8ef3b9a13a2e97ff24f0 -0x670129e3bc978af3e83885c6d0852e40768c0af6ffa6f8a448948ce92edd59f6 -0x0d8717b56a60395de6295c43487734dc1e1a0d058ebe4ad3f81f8a0c6840758f -0x6f779a73e13b7aa5612567735394cae31645fb20a289164f3ebe55689a1cb37f -0x63c3d956729c13f7d91aca7efa5713cd1f17fef17aac117f2bc938356438f82a -0x2737c02e9650d09e971871125bd79100c240e94bccc760a638fab7f6cef1112f -0x39a492fe46e4a1f9b3d6f46cabdfe568ffb83c87a09163c833ec0559c9a532c0 -0x3ceab4b3f2be216d0143df4cfb0c6488036cef6df5ed5eb444d06fc968a0c9c7 -0xe48731126b9b4405b35d6d4e098765b619d52f638e5a16e82d794856e02f6c55 -0xe65d85f7d81c5606bfc3e221183b67d99872cc288c800aacbcb28a7341b01860 -0x7dd6d636b12dcd11f262a520620a9af1f4b9e783df10388a88061dc6f78e7db6 -0xbb6180907d17ce9e74a24d94d86e7da2638a11c0362c0f163534aaea537ec50e -0x5f5e18a79cf40830e2c94f6894c7b46a30533aa94bd88adf992cb2efd30fd5c4 -0x03abe1124103a95f1b10b873cbae0aae4bca54b647408dbb95067449dbfdbe8d -0xfdbd169438314e9304ab3ce089d8443743e37fc3052dd3c58c716fd6e43e6503 -0x2b039619da45ee4460c23c4daa172291a220deebead5edfe6dea5c976a9f484c -0x98fdaf356d3fd9368a06fe028df23345b0b9a304fec411f6f4f0cebf27bca0a7 -0x73e47ae29205e8a70466950a76be811b7f64d49b66f4b3e2f7479c260b5c3af2 -0x5cb6cdb82572bd04e6a666b3ed3affa3f8805ef9e0c88e560293a406ae94350c -0xac5e5faf0b0459337a52e2f7aab00a5732d8e8f5515c329922d8b6aaad9966a0 -0xeb3c5b92a0e07362d1762410e9a96e992175f11e1b87d6c3595e155d982ff1d2 -0xb2aff79595aa216725bb8a39df60d7b83a39507d46113a58c2d91312d9d4e599 -0x0e35db2a67061bc1f632c8a24d6f41f5ed5cdde71cbf6135fd6126d3ca145a63 -0x7962acccd3590f65caceaf6bcce68c49d41dc8fa7e5e50cace8c53773198bb9b -0x418b93dd3277332eeae3d2254bd1c61d776ab80bd7da2c4f068749788dae3253 -0x7baed8fd734db59e2141381e2608daca2c470fc871ce7a1ceba1c59b93999e30 -0x24065c475bbc106a8d21a07cceb5a33b727576b603d597c1e39b83b406cc418c -0xcf62646da11e295c123d17f3871d487652be2c4026eb94ddf5b7c1f829c3406e -0x32956b989cf060bdc1d9377202aa0c42ccc012cf2c48015786f42ef33b50ced1 -0xa956132502ded489a20cfc20ae607f642a5c3193c9cb0fda1b5f3e720c364a77 -0x02c511577bce9b2ebe919faee1d801fb2a166dc70d26bb9e34b46e0f4412628a -0x58d01902dd821c40bf733c504cc9c4bb9aee24983bf9a74732e7d979cf762b98 -0x0f3585506aa532e5938ded43f86625b085f12de41472b8ddfb36059e3e120e53 -0x04d7bff67036ee040673234f6f46eec866e9cffe457d76e02d926f7647ff29bb -0xb0b0ca541d7b12cb677d01fe078496a37f9dec9fe314a8ba947e4c1a67a775c8 -0x0b377fe18ffbc99df28b5197e49354ee8c7e40f9511e1a50fa75e94832f7f2d0 -0xf7f4ad17f6cb48dc9def2f2ae4b11f8f9503f1fe7c6b2230c1f89ac4873807bf -0x215f9971de3f14a963164bb8e8d0e3d8104f276c687a167ba79cde1963a7320a -0xc7a346ab2a8ad8d57297a9431d099d559d863a5bf098436fc7b81f88c2e81910 -0xdb1bb4f0aa1b8dec809fb7afea76099e11bf9c7dc8a725f59c7f1c93a3021b75 -0xcf4b9de61434bef06d30fcd92e1d781458b7db915edb6a37876fc7a4782b0d28 -0xc702aedd0b2da9862b3020bbc8e494499490b8f265914d4e1012dffe1772b62c -0xb41f12cefee843f34e81d04ccc4c279b630ee39c950e983ad94ce8f27e760d1d -0x4b083cd1ffb9d962bf50ab7a05a8912e1650c3b93031cf76ebc6e75433665dea -0xf37d8ddfee98c59f2d05bc3493be0d0df4f94fd904add5c4153c3052d49b9a84 -0xce428e7f55cea44beccc5e7f776f8b630ac92ad6eab079f2113ef9483e857801 -0x61e72aa335b0d56c679bccde5fd7b446074185bbe4ecd5a405f6c7e70f2943a6 -0xdaaf02c20078bc33da6b184a66eb432fd57c63bd7656cf029e7e3e6d6dbe1634 -0xa11d22ba535ec42a6427916545f59f916ff1a62e7efd64c09f002a42fe5296c0 -0xf9171a83bea306faa4cb57b8f6120cfe7f9f4ffb2b17721cc7c43d6df9a48192 -0x2721e69e86188805b83c9730e80c977c5ecb1d03e615fa2abd75bfe4021d068a -0xe0551c51f1f505cee2e395780c4fc957818a9cab1c1345cf1f6229936aec0877 -0x2272759c6f5c05565d9ea92f04f684fea661da7bfdc2b70ed719de15c8e7683e -0xe8bbe3166361cdc8cd45dd28ebfc32dd1b7347c71a8bd50ccb350e594440d213 -0x86615040485f6954cad605d0eb9347eafcc53ea8913e686fdf15acbc8b508db2 -0x8a83632fcb5e8e58f39827e9a6183a21fc11c029929129419e57e5982bb01d01 -0xd5e66f3425698fc7e0ddab9c4f8577067af90f68b7a313911cddade20121d378 -0x1607c8d240e6308bdb3ef8fd9976013e0d07c63628a103f2b5200ba426fe1da4 -0x6c3cb53a908743b8d1125bd952967f109dc0ec6853651ba9c859cb1c9c454555 -0xc7d6191d4ae3c45c2f5c39ebc01c235018f8af5648736ca45446114048035a9d -0x738e283697d1bb6fdecdd8cfd0810b7df2902c2694197bd7623700d7635a7cca -0x43a1ee41a9d81870a009d9fa3e064da4c4f087e0754d6d56600c103068c39cf3 -0x8324363f2ef80e45a0ab237dd7df26b23b932bd86583391b97f239533248b636 -0x7397b07fadc403d2a558812e897a964546ccb46b0190b15023454c1b83c84efb -0xfd3753f764a6b546b118f5fdc788d884c916ba0045b79c94420beba24a5c62a1 -0xce472b82c94a3b7b4f523d92cfccf1df4a3d872926fba5e316c7163e3d728f8c -0x20f4f429f3cdc80ed216427dfb37e6cb7f30ff5b9ad1c7879abc936c5c45b6f6 -0xc7c58a07c4fd993eea3faf702648564462c8fcfd76a28ddb3a72bb47d9df7d75 -0x9eabd044a012a71da52cead5c3888485624b564858d8723081f0b0fa663826c7 -0x36208121804afafa524a7d3717917c112427ec6e3666a7b6bb729f27a528a23d -0x8517bcb944dcb4b95f9cae7d0672026a8788595a7e2f07915bc86ed542801e6a -0x9cfa19aab00ff83cf20786b6c1d50bcc07fb29bfbfc5d0e92822fa7c9fcabd74 -0x7faa79d196f881b477845e4921d7dcadd7e75cd4d3e1df8fd4e256c86cbc3a0f -0xe41b016fe3e7b7b0b365980e0ab3ea54660283d6676f33958c07d68506760c92 -0x72e1b424402dc28d8ab8c7668bd3240bf58eb8e51bdaa75d4395f9f60a596d59 -0xdc0728329017cf6cd40af0922139bb784bc0447117156b059728fbfa1b39c458 -0xb5fd29a4995ff64892d3c6fb5010d3b78697a41c39b467a799f6a59fc68b0f9e -0x64e06f01e87f88163164abce20b8a0f22855c327fe76f00a4b565709ff65f0b1 -0x997b59d2ca644a1daeffdee3fd1faa3b28def044a6531cdca81f0e41259adef0 -0xf99e3a2c613ec1caa0af59456b1c1920f4649da86c43681f0d4d85e187581192 -0xe85c0b2a434b605b60136afd6d988061db006760e7e5c75196447fd3b5573fb9 -0xf4e9b4bb16c076e1f232b111bd67895e7b4e1efe4481a63c47399017756c4388 -0x3a3d2c80f558582fbe9d57b19c06fd494d41646a9ab36574c244a2e8250edc37 -0xc3a199eb6b6a199cc5d1b82a78e10b54b75133a4150bf7ca9d1648be0d10bab0 -0x7f10a736f9d2ce498f92d99a79967ccfdafa1e8a0fa35d1a6d73c142fba685dd -0x1f6d5ebf03c1e0ff66d90a9bb95142fdb67cf628d4bb763c1d31a3d45ea52fd7 -0xa3a0903c21925ea5484d57b502e87b9b986fabdd57d7be641e85807c3a51acc9 -0xd77c8028ecb3f09a808a3f76db8358ad67469849f3e601eba6040e59d7063ab0 -0x71c7bd0b35e788e39b4af1abcb4cf468c2b6e186159ea4aa3a062b8d63461ed0 -0xcb4924138bade22e16a08f0e1a7ff809b84567ca5a33e2ecc2148cd1d85c158d -0xc9b6d3ac9a6fcf500746747ac3ed022c2ac8aa6188f64b2daaa5c534afa464dc -0xf1b3bfcf8b9fd83fced41f1f25f98000d6fb29e46c46746994907db16930b265 -0x7f88c7da8af5994bb78cab4ba33a417fb1f87ad941fce6a2ffa7e2f9c8c0f528 -0xefc113cf990c551d9ab1a4158e51879cf96074a2e91baa7e5b8a0bef9bad7ac9 -0x8d462d69a3bb28a76d2a34971a55f812c1f910cdcceae885835a7f19e0815884 -0x05b5c4afcc895a084b3d481e0d13a260d646285fdaf78e2dd2f6f1a1fb8696eb -0xaf541212691af518e79e97070f0df1a1393f22b189bacf6ad9eba2e562347935 -0xaece154c724ee873206b7ef44addb890d35b86cb421eded5762e6242bb2be170 -0xa34cbf1bc88a855c55197c56e6c1cffd03c48e9c2696e80ad4cc0738232ee1b1 -0x8d0a915288a2390afdc56e7460d213aba2bead6799cd9a8f759dabb4201a432b -0x0fe418479e8d8bdc45a484e2d5dd791b8bc0f52e04d271daf6450c565b5757ff -0x36c88333387c24fceaa499b09e1f548496f997ad82216b9000e6be29351e25af -0x50a3cf59e5b54279baf11e3cb749d82b17e90af1ad81083c0d0d1ceb2c665c79 -0x36b88d99fa321b4ab1c56771410c88772d7567001a99ad166da0d6d50a7326d4 -0x6492858fd80f687f1900c265efd49c8db82b1e448f6accae36623fa01f0ce10d -0xf8646b15507fb99d963a3a16e3e7f707d0cb99e6926006d7bc3baeac7cc529f2 -0xac11948d97ef3aa537ae663380162a80fc9543808da3af6cd8905284d3487a5d -0x2aac0e9ac6d0340ce6c4e362d299e78e2f700514db97fcaaadeb08f4e27b8ba0 -0xfb564803f4acff1406ec09667c5e16e841ac344474f1b998c057d1630219dd5b -0xf576538261ff257cd73f140594cf669c20a7721a162ce4ed64284e9589f9a9a6 -0xf7489daaf5618c69f6d91a44b25dc26d3d335008a36b9d8ec9b74f29a8787637 -0x561df24bd4e20d0f3813a537f7ad304cc55503e8c1768a4172be26870e8aab28 -0x58997eae0034ba23266bd1ede9a31ee8dc1882bf716f60f7daacb84e0642b842 -0x8b073e86bfe73e100253a1fb62ba9d4852681b3cf0595f730f662f0dafaa31c1 -0x8fcfd22f3bd5219234ef99dfd3a170ff5d4633c6b9d68852dd002b7504d3ca88 -0x933a89d7f53b4d2ddaa40791b5446390bdf7934c300f80b3d8618a264e43e590 -0x6e69aeedfe02084a605005c303c641d64a2ae4868876422b340c20b09355ce5d -0xaa7afa9f3ab0ba914f776a3eb5c9385c0be2468b5432487cbf93b6ee09200134 -0x712c7ef09376aba5dc5365e9d601de1655a0723939ad288cf890677ae31f2e68 -0xf5ab1b8a063d1c9cacccff233c837645d47a8d26f51295d155960b3c5167a373 -0x063006109850399fdbae5f14b2bde1815fe6f71a985df080f62b089790a3f5d7 -0x18c825b75fcb03d4504c326c4edaf97a27ebb1a5e185ff9bd3cb489b278856e2 -0xe802377658f094c676a9dc3be88f1e189091e210f15e7becdcc567220bcfcfda -0xc02d5bd55cce22ad6b60f66205d8a43eb650d4ff729d43aec5adc4f12cdfeb77 -0x73acd3c69c4a053d9cc3bd1d5a5c95f280a5cfa55296acd227a93c3bd67c3aed -0xe23c93fc2d8074a249e50e7c17c1de12413bcfe78a7369bf84ecac0ac5f236e6 -0x268225c3d6da8b2e5d0c71c73e0fc548298ca0aec4368926c5c20eaf71238dd9 -0xcabad280abf57df21df052c06cdb93c0db0f54a28691c66d91ca3c0f220330c3 -0xec0db6c542f1f30ad647964cd59b70c4b6496b2eb78434fa0178dc0500f84a3e -0xe885c073ec84de458fef1a68748f21c0c5a6bb7f672132b28ad3a9755842baf1 -0xee8e60faae82d9c597c708679385e16a31fc5cc96925b1317efae8bf1ef49838 -0x539ac69cbbd8f2b451bd09ab81ef5a095a36ba5dae13cb9ade1912bb5bdcd7f0 -0x4b58395f2278d4f7f407d91d4f1e50f3ce23aec2236224c694a940fe8748a0a2 -0x156c70e77679a5cd2e9ae282ce0c37f10416fae774209ff63c443466f2e58ceb -0xf24a99fa0640210d11d7b1074955a37530debeca7fa2d833102846ba4a0840d1 -0x3932f9bb1da683870b2a5cf18eac1d2734c060bbff50454f0830343720a8c0a1 -0x1c709900de6287e5cc2b4e5ff303633da5561f0f53f7e18f18d1abebec182c99 -0x6a5a3babb2708df829c4d689fd036e1f696d6543d484caf1c8c316e86275bb3e -0x027cb2f21d41843c2cd9723e73adb8236350fe807fc3c116731500159eae0b47 -0xbf1d5fffa63672e4aff4f3880bdc2855bdeb0316be6ea3c699690d8c5f169dc0 -0xf612f6b813a01519f0f3f8fe43f5d8d1bd7c693d65508ec1adb0aaa47deb9b14 -0x83c53e0004d1cd1376b7cf30006a7997b958b7a157d84345845eb8963d5a81b7 -0x606ca95b7f6def8e21eb82ecfa26d1a1b2b205e2dacf1631dbe3cb228ab3d1bd -0xb9256fecf786eb7889f0363203270ff6f0703fc23253f2b43ff022a4a08987ea -0xabb7fcbdffa49c7a95e69f3a22812dbebc89627b7ba14cc48a7f34d69433fc73 -0x0bbf028300ca56376b6f8db706901a6f7a0e7551d7e34844ace814032b91de00 -0xd05b2b26e7ecb5440c0f3b3253b0ae9f71469f680eb53aaed6a3b7753caa25ae -0x090a941c73faea48cb6a9bdc9557154881092366d3f481fcdc344411cf763296 -0x54053bb9ca95eeafc4eb16493d6841dc081a01df105e06a8f76864d9d15906e6 -0x8428e2180a4398ff1fd79e9fc4d74dcd745e7467d696d20794bcc9b0804f5a6c -0x2ddb9f89cfe3f5d5a57e048e1311bbc825d321e973174dd9660ab67aa4c27904 -0x209e788ed43010d257a9fe4808121751b050bd3840a741f5f9bb5ab681cc31be -0x3add14f6bd6a3b2a43726e03bf59a43acdd385275f932d2a9f335992c8708855 -0xb6d7c769ddaa269f623e369e534de211996c8567034b0748fae5751008c99996 -0xcd363eeec3f94e6d733bb749e07635203a3119ad7505700f937970108ec163ca -0x74786ea5dbd6ed10953690cb13487cf9cb11aa5d0b124d3e0d827d507df81070 -0x2cbfec49948b092e09b77aed83261ba1498413ada358978485ca48fd891a9dfb -0x4797296018da350acffdc7f49ee669ad74d3f1b9384ac56c94eaf735f74a5df0 -0x7c41e1099d4ee7f657786ec6adac54df63cb87550361c94f6eba79b88e38b1a7 -0xe19ff3d53c8cbf1c9e7ff2ac99fec6223abcd136d158957f3fa4263f8c3d6b3d -0xec9d8d0a99cf4a70ab89dea1745b79e4ca586871d6c86d8e2b062932d0555a2b -0x0469dc62421e843e8637d156133b6d5144e65f03e5effab1ffe95fceb219f871 -0xb4e78812b6a5e7dc960cace77267288f1d5c0e783dcd845ec343540a8ff52d15 -0xa27018239fc527b35d36a4a9bcd888c0fd7481e842379038679cf33991ff69f3 -0x221953e5c132b527b2596cedd8097d07f16940f378f06a89ac85dbbedb65e060 -0x08487e708f4f6a1415b87ce5c62da9e214c3a5b198ee504fa25aed24d03ec559 -0x7eccc39a872ee899ea3058273e8c34fcc7da5aa276a72b734afa594509c50628 -0x8abb74c08abbbcc1e95765648c0d18a909632da74871f09d01f17791d1b5cb20 -0x0c20426cfe32a9e45a63705a5327e0f7252e235e69aa7c91ac7a022d1802ea37 -0x668ca3fa82c2a2186677121896818d250d3ae967fb395006d4f11c2c1928e005 -0x8bdd4737b85150319ac3f79ffd80408911d641fd720c787217d4c4bf73ea827e -0x80ffd54bbba269e09692cfd66a0391d31a6bc5620c1c27b2830963ccccfe73d7 -0x8c4b8084cf68ba11a95520f2867765ce0fa18226def97f301625ae1f5a50b52b -0x190b10bbebe89b77ba021eb8fcb5d74e5d3c98e8e39929126873fc36918d561b -0x1f84424d715b3d8bc14bd5cc0a667e1ae021566ff4867562516c782ccc748312 -0x77bbc5c1c9d133f2df57b0774b29f75e76dc7cb1a0d3e0917076dbaf47b4b08e -0xa8854cd7f43bead48a2c4f193e14bb0af64aa3a3b1d3deb1fc44e9c50dbfcf03 -0x331dc175f8673f5fc2b99eb3811214b7bd703098f95f0133ee2b3ae91254fed0 -0xf6b6f3c50bfa1ba7a2c5d24cbcb79544d1ea22c0ef18a15080ea43a5bfebaa55 -0x869cd0f19104b7fb31f0e16ee7132ad83704b6cb9604de2f1737aaf61c7a3710 -0xce04062f45c171c95003d6b992c3072ae3aed8dd1fbf723834e0fd45dc8f7842 -0xf8fba8a44334249744ac15db2822631a3e92217499debf8f13ab49263a31437d -0x485f9c3cfc92294e8e1125b947d45d4e7e39ab6961ef10f2ba4e0769b9c38535 -0x58e503470e908af6170f7b0c58bfae0f2b241385277769bfa548769a3d0cba42 -0x0a2303d62d6d856902965d28f02e2d86c286395bdc2705922d3cc0f0f8e28fd0 -0x8395052174d965eb86416569a1bdc340e329e5281de17586ec7a25bf3e1d6114 -0x3bfbf111aa55e0cdb920efc759e822e469451eeb534dfcf3c7e389cf45b54dca -0x22b337dc324df3f0b4c07e3007c8d2eea47f754fedde07893f7baeb61b5c739c -0x9d2371ccb27c53678e4e0a67f9615af91ad57ee416148a2f33a7bdcaafa25bac -0xc8a12e657cc5125019e7777389bf8d45456d59d3ef79481b1339df34097cf26a -0xb2337fe918ce46587243479db5b4d5baefdf282fbf5a3a5747bd8dba2c2cec70 -0x7cb6ad1c6d00e072d85bd9924ac6f870f254271e5eb408ada8594b9e2069b91e -0x207e23fc4291dc33be63e09d4a10c1a3bb49250213eabfeca87ae15e29de0abb -0xd14837d73e038595668b392a185640a42d14b9c89224b5ef5c51af30a8a8a6e7 -0x16af27bb27b83eaa977a2919e79d29f82fec9929724b960cc5cf08d0b42620f7 -0x2042f4ea65a86fc993f40e93c6b65272c098e480e89128c46739ddd7d7dfb43f -0x82b5ceffdcdd6feba7f9204c75da021f5518912a42c014111c5f5ee5d4a5796d -0x236f8dba1b98a95eb1c108bba2d4818d2d8ded03aa49de50af8bede589dd042c -0xf4aef5eb521108930cc0e808247d1579485d49ff7d7f029cf253a672a8cbb4a7 -0xd280345e465b656bcfffe3e259494cd811da5c1d4ca0c8138155af0ea521aec3 -0x741df38135f0308bf85d3fb456af86768ca12db6f65f2f9fe9e2dced3aa05a5a -0x95a9b73b413da7c7dde3259f4ef1051c07719fed462179415a272c73e90c9835 -0x5991091f2033505ec14433c48cfad8a68ea1f80d8355972c8c77dbb30f2d8233 -0x0052194877269fc7a575475e4a4220ab3c92a7ca9dbc05cd287f913947124002 -0x1d97b20974c248109170e758727bf2316de4cee7e11299bfae1556da42c1b513 -0xb2f58ac2939cec8c5132419ea0b44e0ef591e5324a7a821a9130f3d25042fcc7 -0x1af9caaeccc700d711f167c984cfdb7b1a8cc52dab89254b8f2002db616e5053 -0xb93e1ff95589b4d18aed0b2c9873da7b56860a2648b6657fc6efd8d6f6617b24 -0x5a2ffdb9cec4b15cc5566004e573f9b05581871e4b925e65a86ff2a54dddaf22 -0xf3d3b88a204397d9463e310bde2b0dd279032edfdb69f6acb6c0e4009ff40290 -0x3a4bc7e438537ce0aa58334bc893855634be9d26eda65b2871c6dc11f0d9986f -0x3105382e030c3af6fef8a97b3969b2aa67872de0d7b959cfbfdd61985a3ec1a1 -0x5322d6fe44defcd7dcdf316d3447beeb386ff97b9cf5e0b7e214e3b3d26fcc8e -0x78ff7455e735629f124d2ba4bb6b538b063ebc643e21f7b720349dcfc7cb42f7 -0x37ba2efe0a571c7bad85f5f45e685123eb9b8e402c0d43cd084512c8423a1f59 -0x4bf4fe5a81ee8b977d2582bd568ed38dd0a958bccfd4f427ba362299f337e115 -0xe88db36ffb94982371a1ecf7e76b6da70ff3c0bbb3f7817d0bac200d52f408b9 -0x5f6b6ba7e3e7435b7d207e416cfe0b9c781846b7d98e3568d53abc9c18d43bfe -0xb0bba8f4a00901de0d8312ebbd65340a4d8bac450e5977c627e0961c5cda61b7 -0xe5f1a0e342c25c76792d05be435ff9e287b1f975f9b21eaaffb565c53ff6b380 -0x173d5612066a5ba49a527fa0f9d7fdc78e75ea6eb6cb6917cbcee77356347f4c -0x4efa6d129e2063552527558031e1aa86ef4231ffd74aa301d0596b0ad462fa4b -0x866b478f4bd1f528ad16c81dffc393b2ab7b2ce1606770d6a9ffb682d3a5087e -0x2e328cb6c61c90ca7e43b54d2a7ecb6f456b22890e452ad547d3ec799e9fa14f -0x64badbd572c9337b1d5af6c5c1af006b3fcb46843bded58aa216a12e64b571bd -0xe3af76e6c8a81d7afa20f67ddb9bc57d2cd249aa9db4487a6625d18224e0f4ca -0xd95be6e9db48b03749d58f59ae023b0b0542792a950445e9e87f0e892247e6f7 -0x150e91825e23000ce65ec5cf950afd2d844c51ce0e7fe3b219e0e2742588f300 -0xbde9f338c71e28fb82e882bdf7cd2fc7762807a49e7c4981e8d940f66b5c1ecd -0x2431254ba1568d987aaf492c404efd39087d8c29ceac04ea0b6cfa372a7102df -0x44cad2e29912336d686e2c275753d5fb24f2fc27ddf8bb44c61a7b2dac1eb508 -0x1ce28dc1a6b4ea994771533b1cb6e76d13678d996c246ac4778828e31fe80d98 -0xd3f49abd89113672f61ab41e108f732d7dab35400830cc626e3be12731efde13 -0xeb6feed96a6057e7b0a2bfa1fa0f8ac1d90a5a12b928f035a640bd467cc3bf7f -0x4972afc0ac74a23d20c7fd37475918c73ca3c9e782870031fb3dce8e72f0f432 -0x7b89f4f28bfe7fa53bacb5084cd1a149352da0f7e625405061bf9fcb85aec830 -0x24916fdd691c92d8ab1b8b781278e73822552e9613c75b4da3003a5e66738532 -0x588d2857b83d3bbbef425a3dd61a314332bc72812d166641511c67f3c5102612 -0xde790a85815e073e19bed5aee1df5d0d98428d40d001ec46475e3789bb048e0e -0x13112b3917435d2c03c4d21a1acaf3f41b3b122686741632061e813bcbb865b6 -0x8116fed39fdf6d529962352b79ea66e4bffc1204ad98374c220a2a1a3a45f87f -0x13600c22e3bd584584023c8ddd00033f4f189013a5b367ac0ec908ac59439d20 -0x48b5826d5e4b1483be94641dfad9e901e867b432a2a5f0495d81ebb152ccce6f -0xc82ba955dce744615760e56ed21b7e278eaa01be681dc0af7aef98fb9d9299c4 -0x3307c392d166a83ec0a4801965e3f0dcfb7d7421045956c882c131a4e2c09cbe -0xd7f7d18c065cfc4225fe878a391c8235d0ed06c9e802364feb43642526bb2164 -0xa43a931b48e0d832c4366f465d8a8d94777a24159b2356b2e6577cf6fc5ac2d8 -0x44a2debfe8addb9cc9a6afb470a552e36f021bc71eb692430d5d05917b05eda5 -0x80da77dc1f8934861bead41c8c788faa4c24a663ec4586bc6d62cca41979b359 -0x99e8f263114c51219a79b0e96150bf18de73908ba68601b31735d4a24691c645 -0x45a3e05d99dfc5c888c67a567cfa73eec065cec31d01ff2035c5bfa4bc9fa736 -0xe8f958e1a1095480d3934f90be8a6f106acb35d5f7c7db484542a60a051ece7d -0xd0e3e6f036862ecc4c9eb8c4143e01425df530fe7c72b69f966f510adc827510 -0xaf5b54bbb942afa0581fa035129885af2c7a1db1b4da0b6f97c9fd1975910ec9 -0xb9ceffeec3413df146d9f9865d9016aab3976a0be76705050ff42879b40ab5c9 -0x23f26a66f478202ca9639121560883ae832a164ec5246ed106c3bf07e50857d0 -0xa210183fa05ff08773457bd8693a676daaeae13a3a1bae680aa148212caaa280 -0x10ed115a954e7d32932f470f457f93889966b33ddd6c4c0bffc3873649e72f36 -0xd36ac1a212f445b283996c8282406a878ce27ca122e1080295ab2cb9afc6294d -0xe976bdeaae61db40d0cacd9e8e3c8e8275a60f0c006c37ca102518cca1d31013 -0xab5d9ec78bc2b4b4aed3d7dc216a57735d170132d7dc9d20c7c3b687b206b45e -0x03c66816ccbfdd20c8b968041941e4c3dc50e7cf505c509c4e04564e9809d231 -0xbc59d829e6b010ce3749faec03f065cb5aa6f4fc4304ac858e06d56263009198 -0xc999bb8808591c370d9608d679524b223bf14b6b4437e067cb10cb1bfca9dfc0 -0x31f27b31a193b356b43af80f14dca25226b0b1046ec75a00b6603f9dbba0913c -0x31051c2db4eadd886fcce4486b8c27fd28dd8df4cdb8b9abf11e7853999e5977 -0x4a6c67e9b722cc1f18bac1144a62f94280819d30f9bf75c191d4f6fde50bac0d -0x41abcd747c6aef662479c62f6f8ccb9bb6f4ba767eea506d0d6d4f1aae575a82 -0x5190e10031d290f07e7fb6caa7a8f25a4098062676b931f42c572e590ca5d657 -0x90e388622a304f7249ba62c7f0d2ec270628f1fee20ba25ecbcb1dfed27688b8 -0x25d4668e9d24a0d4518266038a73f47db0ed3e44f2b8de9054ac448fa8ad000d -0x4bc73931dced4cf91d8c22fdd63cfca9cbfed324436f544e903b0c129bcc2e2f -0x2d4058edc9d54f94c983d4da7093e54f3c24fe98c34cb7b75d5426953fbbdc03 -0xeb2874f40c155b40ed24ac326d1893450e5c1e1341c6eaea4fb9854047d6a08e -0xade08112ce1d93c553d39bd3703bcd277ddd56eb5cc4773be1702a965afe23f8 -0x66284c0507758ba3355e6cc84855055679d234da2c507285b7cccf400db208f9 -0xcdf7d67b3e76d2e8c582011f8fb751820d9376f5273e0ee5d8bb1dbcb86cf3b1 -0x806c67b14b24d3926511030e1d1a091a05b6ef7d88ce8eed53107769ce321692 -0x7579d478122961fb42835e669e0e19a4cca5bdadd2912f1f60524786b3cdac46 -0x87d7ddc3456f4149c7154d1a5dbdc024743e2b0fa93ffe0aa3cfb2ff9dd94e48 -0xd86b7c7fd600f88c8cb4b6534c64465c95295613a67f87f0aeb58f33f786ea9a -0x5ba901ab29efbb9d5784731de2a9bec88450f60dd27224c90eaa5be5f2712501 -0x88dd6fcc70ca904a20e1617164e7e85af41d68ae20638b4f10e82a210215fd34 -0x5c5739e7830a108289424f74a8103d279c7ea167c4626ce4cce42c410733ded6 -0x9a5453b66067b12362bf6cc93106e9a6674dcfae11529bf4ca3e13a3223ad6d9 -0x2246d2a7f49b8c8b051fa42cea25c513235a41157abbd8f8bf4c27c73ad2fc65 -0x30f98a57f31080305e9ec9bc0f3f3770def7332e63902958a25b51ad928dc6df -0xed9d994fef387211daa7115ad26ae0713263b4ce1249a5cc758a41a6a7bb34c5 -0xed04efd84bb1c4ee1a874db40d86f3e53b61e92b4907da1b79bd522c9d97c27f -0xdfdca8569a5f74f99dfc6b8d43f3776d0b00f8c0399f3a05f9982584c70a8008 -0x1318ee4280ef484d94b8d0ef1d66790bed15fb88d85ef72d9170c679619f3f91 -0x8ff0fa7de9cd93591152dd3e6b1f47dbbb03885daebf7b2a0ea439470bbd2065 -0xa63ae4567841d0dc527bf0fe4715180e10af203e0877e190124638bdec63dfc1 -0x31785bc206c7b849210c3abe9cbbd90535b53581745183407aac01a7545e1d72 -0x8f3b7f2808bbc743471ab74008666f445734d80ff3feda3d461c0072608ce61f -0x3c19abf785a6aabd6494644c83723d1e1679b037a99db2a1324b43b5d63c1ea9 -0xf5b37100ba7dd0c6c5ecac748385ab3a6ae0eda8eeb3c5fae5a220bfc22d65fa -0xd28799d5f554b9c52730a54254dadaa6f7a150971537f40334295c861a118170 -0xa607dc796c98e0196beeea6de6930ba57bf2cbaab73c6964aecec48aa1e84c81 -0x12aef95baa12056ba8c33b45b0181faf13fa1782b659c86eb826aca7344b2ecf -0x41fd621d9026c4ff75e9250ad3107160846d90b17ab36dae37fdc85366c63783 -0x74fa2f671d9bae48119ee2fe574dc663fb44c4427dc2e47a526db8c9c6449634 -0x7caeac334ed954e1760545a05d6e66736a79cbfbb80f5a7ae340569bbf1977b5 -0x5ccd0296b7a3da761fbf20d2153f6282c447228711f9ab2e9a1436876cc8382a -0xd88bbace03dac05cb02057ef20bf0fa59b6af5b3631f381c85c3cd444f9a39f7 -0x019e567467f005a5fb7c137bb0204a9f075bbd7f51cca34b1ca24d51ad9196e4 -0x1009c748074b9d64fa2a48f6dda2d602ce902ccf6cef23fc3f49406579b8978b -0x97e1b0ea93a39628a700bc96339c63d6005ab08867c9635dca77cc4bb133931b -0xb151a98ff1e88b5338587730c402a67d5b36ddba259e023dce5707f6890616f6 -0xc71f72c7715e40e35babb8230452936dd9cc0ffa73cae9c9cdbdbeee4a318e71 -0x2b90e6fa182552cebea59cce7995e8f20fc5aee686c17771a611c151b940f472 -0x1004e663a46e2ef040cc5a0b5473bc1f8781f91a00e617fa5da74a29d0ab9e80 -0x0eef925dad830df97c3be2a2064f2ed84bb0445d53039aeafadf0994cf65346d -0x3b7aa89e1390b087b882c2ffbfb67f9aae18c663afecd17406ee2537f3d30371 -0x872a8a9b1080575b5c4f8bae9a4bb5797198d1909d51fca67d6a4686d381d3ae -0xe2b818afcd9048b1063fa585a3a314c6dcd53a4c1348ba845c1a73fded542953 -0xbf733cebfac766f777b1817c80bc65bb9643805286fad17b69b9de0b53ec4bc2 -0xb2295d77392dba7e8b58feb77cd57d661a48b8e442307ed431573f65327a019f -0x6dc50c5a3792d07f28d7f311aa7a2c91e0e4758a077b349c71d6840afe29fa6b -0xe963c64f62240b6a1e53ba434f21609aa122c81ebedcc2bd27fd690806db5f18 -0x45e493fcc478f65a8c04ec295de8e4a3f971ced12f03ec7a85c0c7a43cdc6c98 -0x7a6732825403aca895bb06204a29f5be0b918afd4b648441ec6adcb26d65e279 -0xb7da57066502b06e18e82371b8b68318334a55a49d93b3bcdb8976ae896b1f22 -0x5ccc180aa3e30a603f3d46f5912e01bc475ffad77d6a511b6631d27b9e58984d -0xb499a3adea66c207299a94016c847314d768abccdd185b8631d4369552f36604 -0x26749df6daeb7fac8f97a96415cd9532da6a814a07fdf5bd90b8d284ef15fcbe -0xcdbbe6fea80fe221c8941ca13bb1cc4a4babcb24bfff7a396d6748b7ceaca5cb -0xfc3db842570e69fc0112279f0468d6af7ee9b084e425236ccb3a773057224ff3 -0x3319ea345dff8824fb5dd70fa757b090255500176ffd2703757b21addda1b2f6 -0x11f62e55a7396d937c195bd1b774829d1c33925dd10b48384e86e17fdeb82ace -0xe944f57f56e772156eb9e2597810d6091d308b5576221df428ac73c52613fc46 -0x933e1f014c603dd2eb9a72115f5929a10f1573131d6a30aba4ae4a9b7c206cbd -0xe824b0f286663b25505737593e19e8a88d220f8479da63ab08fb88973e31754d -0x94370fd9fdb3179b19889053a334e15f3087dbc846e59782aa493126c2506205 -0xf743a59658cb2805dc9c88027cd69e2826325b8689777ce675f58d141e6fa073 -0xbd233f4c532509b70b4929550921a18bc862df6b134c9eb17b55e87cb9348fe0 -0x07249bbbff947aea00b74a617abf5479c3d9f076d662f7cf8a7ecee965081524 -0x69229022550ef526dc16c0f1390e15e8061e188514d70c40cf267882db2ccee7 -0xfc64571ed695eaa4f0012bb02f4bdd8f8ea7e387b9c6c98d47d03504ef88d86f -0xec7361089e9031c61f547547cd76d15ebf95b2bfcfc856b21339eaaebea46e4a -0x7236068cc5063ed1fec34f5e21cff50b9838b3b8c81b553432f0c940ed1fba6c -0x76209cdcee800903e88c1a95e149e29d0a8e52b63c2a057d14a4ff12ecf9a0f9 -0x9bae77c38c1ee9bbbebfa4a0e97b4b63ecb9291e08078f1421b21aed80c58142 -0xc2f9024ac94050939eabad280fc453bfd715d83026a7fefa27f8a0a6168d2b7f -0x90d4c8c83efacc758f9809ee48df2d0c76111a309703d758f80d741a08d344f0 -0x86da3cc69485e321d39b6d747effb9831718692e5600cfd135593abe7a0965c4 -0x2ed4ab8caf081a066bb4172c2aa1549787a203861ade1d083375421c182d0247 -0x93bdd153b072ca25121ed2881cb6d27c53e9f7a524e326d652f0c44604c737cb -0x9cf4b7c601d57db0fe0f17f322ae383d3be8f940d4f0ffaafda9770a27d5e051 -0xce9d8c93dad4193213da28d7092b29e7b8411fcb1033ca6b1edfcee148e39af6 -0xe4ff7e60e752baebf1cae421dfa49b3b64b0a788aa5383a96e97ce4a1c9dcdff -0x70b3ced3c2c69120d6a0df618f42c41667b881cea8eb5051aeec137ab47785c9 -0x9424e06a4ef3427fe5db53a8702423b757db82aaf19a43ab61f5cab33485f232 -0xc314d1a47f030b3dcc87776e5d72407862c1d77c0725266a532dd93292703193 -0xff616c55f08aae5ad85ab6270ad8ecbd9316c708426eb7218b25ecc2def1ff06 -0x2782cd8eb09586dbaff956208e00cb324df5120c5eb8826e1ed18304cf4833b9 -0xd8d2b17d20a532426f8639cdd4b358710e14fe6c440653e9973d814d19b9a607 -0xf32f19e36741e43a9fac99e6c042ba20749e76670a798d8d3706aaa2b7bf1463 -0xcb5f824ced0970d2776995caf4c89600e65261bb8a4b3c1efa3d1d0065fe53c1 -0x1e3998be69e9099e4ef913bb6340ac1971177b25ec034d787a7f30743fbb8424 -0xb0abec82b3af81d39673cce19a9ac199d34f9e268a0810a8da40f02d29b018b8 -0xd5b29f7e811b529c6fd9649b1500cbec517b588a06c3a0aa5cb669dcd3c8b364 -0xcb61824e6894906bd40916aee9716d8f7bc337ad24b7005c3100bae35f962757 -0xaefd9d118512b60eb03c5bed6b4e912646597d98df286587ee11637d3d584d50 -0xbb279f6415507d6e46847c4d0d607a8c36942c235f45fc3dd285d0f5a6712edc -0xa02a10e85ff4541930eac1de1922973d1eec430f2d7023c9ee10f7d1448303de -0x1316d282db4d372b223581a61511a70ab6ca397d4f6e38587dff70f444d1abe2 -0xb1ed456cbc5021dc7283c1b42358352d465864be10bd4492cf007925d6bd4cf7 -0x47f40d20f38277ab0280433b9c0119de5127c66f8811853ca7c55db7048d029a -0xab5da942483efbc3cb71df532367d6e9a729c07f6b8d03f2c0294e63da051ddc -0xac318ca7f310621f9308b2cfe86778dbba24cffd6825d7b8472156cfd7aa3beb -0x8df5d458186466c943d9b56444d1354e58344a37944cd8f1c0eafd1795e3108b -0x972d1ab1f955941170daa92008d212499ad67142e7b7ccda610b089dcd104625 -0x5bb1e362d02b79389940be30b767aa44c272bad61fab83927e7d1caf390bfbcf -0xf07efd2f3a36f5eb9a7a67db1339bbe837518b99cee7c6ec4d3256462a2e5628 -0xbfcd07eb3c54a4c4d2bbd18f70b29c44eac1b54ea6c6e8bf5ff1387a3bbc8306 -0xb4a4a50faeb6df3272751b6572c266f3320856dfbdf24cc916572164da1e275d -0x053546a60e58102be112462390b63175b95570031ad8bb875ded47c02fba9c56 -0xf324b29ac43ef93aa684f2191a0b644fcecbeffea2e59ab773ccc6f33685e4cf -0x4fbf2e39a2eeb39d8fe3fc11e47e6fdb46ec77170c77af553f4e76da35e9861a -0x2a15cab9a3c4096058973db84b253659090608ad216322f165e5002e05e8e629 -0x2398243639def635b0cf4ae9ae84842411502ddf8e3407db31b02785a33cfa88 -0x15a5ea581105b4358bb2e5600a92ad264a363f69edc5f42e4d02177540e9af78 -0xd39543d625e069cedb25278e09d15100e428d7e4cb75498260b960b765be2316 -0xa2db53ba58799275c976d0330a225687e623b9c23524fdbcb66a8d12df37b0f9 -0x808e60b6564d3e6d229a3417ef83edc4fc26b09e9cda99a3f816b5a26f3c9f60 -0xa1a12159c3ad9769a8712422efd7fa88d611f5732a13082e98677c2e973e8978 -0x58e8b143ad71a7185ddfbe4dae39af4ffb38a8ebca5247bd92c824ec2eb94221 -0x99c76d668f14fd56bbaf585721f26696ec9c38d7d7fb625326cdfcfa752c4e4b -0x71c28123e6033ce6f8c7ec74ed5156f7b2f3d0ec8021033f057746efea74f44a -0xa3867882cb98fe081a0b4c8c68dd2b888c4e2c9c346cb0130d2fee786738a970 -0x85cb6cc9de8afe16de3f1c144e248fbc9963dd50c4f55dfaf747afc2ffe82124 -0x0012a7d7d3291efd31e15071cae344c4f822ee15aafe1dabba7b9cb37b6f1da6 -0xdfb681bc74201ea475ef711b30b6f455c9660cf44f48ef0571b4b0a385550190 -0x39608b8b45e20b933b00b2f8979a7bb921bcea9dfd17eb07dd7ef9f5c2b1cd1b -0xa6eb4baceff183cfbc540b0a4a025b8144f4938dcae86f9a689cc000d12fd8a1 -0x2d7ea62a8a1f3f55f7208e547238c859317749240ebffa9cebb46a4bc12ff280 -0xa69585daac0c0b63287d82830590794b72a52b8cb1a9ce017d08f31f5e19b13e -0xaf1561b089b78a27078dae340b44b129fd71faba6fef56d5855a87b0b667f902 -0x5ea7494fb191c0725ac393844dbc69b9bc910394f9df9759f3654710d6377e5f -0x1932c2a44e509ad70c30e8d1335a857facd05d58337b4885384de3e2d093e94f -0x331fd5d53a64832a2107f773307c32742055b1fcfbd98ee9800b55c7837a8443 -0xc0feb0c6769a3046a62c94cfea16f5eaf20ba7c7087ac8fb4bc6b543f01aba5b -0x540d534fc3b168e256f452989916922522fff3b1906e59a48ca7bb675265ba8f -0x1fb039ba5ff6ffed68f65c6f620a94505d4167c207dc03f7ab428f500cb01f81 -0x1341f651149eb6bf293116e1a15951a0dbaa6402a452378a8e718d638c90226c -0x1e3edc300c14b89216a72823ffc8011e5ffdc3ba649d307293364a5b612eb065 -0xc8b4dcc5eb55490bad5a22ca959587080875764691d44f7b5bb854f52ef06a41 -0x51a598d33510de094da543f70a3012f8ec00d78ea822626e9288de56b9d913c6 -0x704372c4b2cc0d658896ccebace5149760628a47ef15aa7b4240d4b5a5e96d37 -0x639252478defa2972cb5089f04bf59512d4277a0831ed726bca9a91697beacda -0x46c789ddaf521076849142f5525380aa67c74688c94c0eba2ec71aaaaba899c4 -0x7a589dfbd260d9f529b5a8a70093ac422ccb69d597dd0545db83cf45124c8027 -0x21fb0096880c8af95787689c93e1f19c9accdea6f5e0026e64e72e709894fd18 -0x50001236028c66a5b73ffbeaac85c81aeb303534604a3d4d36b0d39bffac850c -0x2375bba43866b21c18d1972914511c6e0c2cd90732547e80b74570c09790a83a -0xde09557b5c4f353b1aa8089c5b4ac7c847de4b7fdd5a8e3f4e17f4d5f428f1e0 -0x2e19319043e07a015d7b932b71b2e79ad9cbbe62c3e7cce860a6704bb8186afa -0xb58c16f6990a0baa8ef2f97c2e02060ae2cbbe822fb510e6f115808bd2c23e2f -0x7a307801da30c7d9008bb6de919ee21f837c35d3ff43e63e310821f269cc7fb5 -0xcd1476788d2a3dd26e13a1b46d13ddadcc916ffab184d712d7f38ae9d0b3af94 -0x2c493dfa0619dd74fe64c754d4da5f81f47e836879df6573250e1a9ec0f116eb -0x9e60bb7585293f122a0ba9c23588bbcad13ebdefb82f1a10f9f588c81e6b2701 -0x3f7b2be5d2e8d371f575b2bdf359bde7b000feaeb1fd9c98ba0e3857ff2b54ff -0x64ecc6e1e73d2300d0df720830dd4c8eaa61cdbd1e3762b26cec8b1fbc42dc25 -0x1cd20ef8741f5dfb20d52e8c0721c653e1443d87842fd57748360a0b78a47c19 -0x17ad4747918dc245a163334f6b4fc5f610316d15efd3dddd032509ebf7b6470f -0x1ab6b4315a4fd9605df7a704489f1aed61d49f7c4cc936f5fa9f374928e56d14 -0xa2b3c2228ef357b9cee92e567d31b9451003565cb8c04d676de74f564a171e75 -0xde9725f4c6a653c5b74d1ca5dc236e7512c0af1ad260d2bfe8882ec931831986 -0xfbae8c0d4f02c57e1bdabe5c2e051bccda3d08458defa1f54becda4b67417484 -0x1d288ed048ee91a215014e9ca3b65a012de560f048ef355bec306dc958cfef14 -0xa8ac535c0f235c32bb4cb72f951043f21c57cdb94a11454ba78f37258eb010fa -0x8898a5983b6b2bf1bd70b8ba6db04bceab62ae148217718158c73de46d5be33e -0x64385fbc74e1719063ae9174a029d44a24b58b4e760a4cfeaa9cab99628b6cf4 -0xc632c625211bf42535e85d6dceb3cfe01f80df39593122bd7d9d4ddf9eafff68 -0x01f4c481faea8ae38d9bd231c4a8df845118a542d1e74f4eef5d708766cdf81c -0x567cba903454d534e53200ec19ebb740157537e47f669080d159c6951caa4243 -0xcef7d9e2bb3ddad70fda70c58d2c1f9ab54a70d3d328a8cfc78c490c6b7699e6 -0x8178f9bee24313a9576042c5f5b71b12e60ce40fd3174a3d35f5395d821c0a70 -0x1206d46112f8428691b1964b3530aaefb405a01a72c42a17fac8f0d0d0ab752e -0x2a98b0b5add4798e85dfb1e8926047b0114fca93b7125a82bbf0cd6aad4552d1 -0x6529ccfa3b8ff4ff7a240bbe2971f375572de98171a72e95b68e39c9976617c6 -0xfddc833376560f80031cb344b3597683f6ff07ce4631dd54472724500ad165d0 -0x088172552088282063c64d4698bcdddd20b8120be82ff99c0cfd6f10b6bbe479 -0x7ae727ed2234de5d9a72e4a39ebdba8d40ecf31ec6fe8b584183a94842b07307 -0x0266a85b0045661b449a16043f200c85011443c510bdac83e460e302b91b853e -0xd1a1dd275f0251f365c8c55807bf4abb84cec4f03397ce58838a52fc794bd2d1 -0x8fc04dc632a51d0d7aae97ac4358630a5c4e287cca5ac5c129df23a5b5a69510 -0xe34de965d6bbf40e54fcf854436663032900a77d8c93579ab012fc2f31a1f44c -0xc2452ce08f68855c85570719c096a4ac904c528dad90fb26eadcc32f12914eb0 -0xa4e8575a69a6a3e23cfad423370dc714883f83b24fe89adaca674c95f300aa15 -0x2f824d112c718f67fc30f9e42280a59cccc2de85a0ed210c3a736d3fa28fbbb3 -0xdad391f770656ce23f5ad002f73a6901bac1714be4311332baefa935d21f15cf -0x4e929cc3aba738d1b4a553046f5e73802e56ac0d33d0aec12a2fe3996118f7e7 -0xfe5fd9730a6d77b83f7eda68661ce302c8914130a3a6091c688972dfbad5c294 -0x8723ceccb526011712d12604f133f19faf4f967e4a8815ea42bbf32d63e895d3 -0xddca230d50300b2e95ecd429a5fe3a7defd787082b3a8022c928ac22218b4455 -0x326b987f6d2c7389a7a84d596b5de3804dccbf493477414131ec15c66ba37194 -0xe7f013f4041058b634db5e45b1740cb923dfb236afa36619ec8c4dd5f0a40f06 -0x0d8866795085e0a98854a7c7b883bb08ffcb0839fe8f84fa69d868ae4e87ce73 -0x0e956074f7c784122abf58dd28450be169aa4a3fc36ecd11ac3ed274a7aa6b9a -0xd085bf60a37e221d807c5013c6682705588fddedfd7c5295fd084cb7b85cfcbf -0x38ef941fc2d7d751f5edcef363ac565501e20fac71c068c289ef6c70a91cc439 -0xf02aedf4575e3f74b1fa77fe1d7a361fa1382f74c2be143ac8a3630a2acb4484 -0xea34d427d70743b8aa62d3b70e99527dea1a35c0d42da99e6dc6d60a0f9178e9 -0x3d47b7a15e60dcc3145cae9ff5d21e63a5e8690689b62a544c6564659c1d0fa0 -0x9ae00094b20d69c04b2d3c7aed9aa66dc58cd0e42bb052bb6f4be68caeac821e -0x204db4c5e43c32130ea46bb1cfe2f807193baff2551a87835eda3e95674486d2 -0x80b374609b5600a955e57a221d63c437f2d67931812be85d6387f9332421bd6d -0xe914c973ad53785f3979b0b07bd3eb7a7d52d31cb6d819541e8b8de48ed4ac92 -0xe78adb59b006c6f985f039c4704e909fd5a691867c74faf33e602b6bcf146876 -0xea7eb8b864b4c36061cbba63653be8e14d054937ed048cdb1e1810ff0a3950f6 -0x35d509d05eb1fc021d394f413d44efc4c942af8f614a60e36641c759ae274591 -0xbafbd64f0e75b93f3a846238ca2080818c611dc5bda5169a84248e5eb94dad0a -0x65f3462a98fcf13ae8b380e99d243360eb8b538b09141e90a3da5ae2d422d6d0 -0x60bb028cfc9f354ad991bdc0c6db4157e872ce5110d4211ccca749b11f5611e8 -0x11353c38b472bf8ff848174d537b6c34eb12f056f6b3f67005ca97cd155f3214 -0x9694e4459245fc0bebb07c93ff66c564018f24d74f4d0a1862475019274f764e -0xdcafa72de86cb16334f2e26006d1fbc4c2ed67fa25bebfa194a309c521883481 -0x8118bce1241b2be24fb472c2227f0d19bfbf0e4706eb21539c4bcd0e2ba7a784 -0x44e7f93698cdd0ec2a91736ddeeb1336fa61ea945b3f942f46ccfb4639f486ea -0x448940cea25ae0c638dba84154f2c721d811c773f273d00636cfef1f3a6b3f1c -0x7e4756f2b87a5988a19873d54ac4eccf8e24ec335e91b677d86ab47a37132dae -0x1fab49bfd92bf99b7705b541fdbad63d8425ecbdeb17e7b4ed988dc518fb1a1e -0xeabd0c370a881a0ab2e189bded7bfe9ffee58e4fa82959359e10b5a5f779d6a2 -0x01ca79d9d8a468fc0e41a9ea5ebce48d011f1e08bd7c43a1c72b62a24e8d95f1 -0x99d73a61472a78041a668111c834afef99f7fa4b6a21547a59e5796954b8a2a0 -0x554672db229a5a0ed4c0b03a72a4214a26442466c1cd048a21d97a40d1750752 -0xfe3a60d443d87e5e1cae8e4df85df9f6a0bfde3496b141d971bd3b7e3d5bc5fc -0x6e2669a0d4dc51c2514ef10a2ceb687efeca4111baf8f96ec780c4819d49d471 -0xce8513af75bd5e773f70303fb5791f75559107cdc94c8074ff2ed6af22836ec0 -0x6eac87da66454f4431828f3867e0158d4f9aee78a255b906cad33b421ef27aaa -0xcfe2ce7c115d96b443ffc0ef7746a9c01055b3b62b88bcb163ba5a2584949614 -0x5ed72541065c505d21e9a7ced2a6a563bbc6038f54f3ddce152a212a012ac532 -0xd776fbc2a3aec42be2dfaa94f7067749b5183bfe5cf62ed0c29f6aa4a09dfc21 -0x018d10d952af18143ae80395970081631744a5fa9340a94b80d4f06b8c25a0bd -0xc57c5dd2173d34a16a5fdbd1ad8cd30868a95b1abae22acb17ab65d2a617a202 -0xdaa83cc2632a3efed92103bf27ba247a2ab4e5f7684e5c2bb909bb982e9d7a7c -0x403aec3846d787be1a4dfa21b8eee0e3acbb5f45408e508c66c52b763a555a3e -0x173c2630116c636d7f04d24ecc74db2c8c3c28db70c58b3aa4fd4805daa5624c -0x58b096647959573b2ae326d8c64b8d6249fa604387d331a16c20ce05582adfa8 -0x0254700aa4a79cd57034d557358f468d3e281f986d7bdbf5003440573b2e9e47 -0xf00189477931bf56563ac4023585e86defcf1def03473202b1409b9487a768dc -0x40e4f366f21aa1ac74f30cf2e47ba15d67a72fa61e6e2037352fc3ba8707b035 -0x28209f270b766b5e682426b8a90ee4c7a0894b1044a88655f0738f4e9ba738d6 -0x97a91b33bf5eda38b4c9a018b3b0f68d2235296e3024e852c80f5c421213f547 -0xd4c3be048139ad6b8959c8e2314493f75a7c8cb4127dbf9e58219561e86ffacf -0xbeec73202f09c38a1d0a9af55ec22a3d45eaf6c17442da0ab71bb840475fda31 -0xe59a71f4a3dd2ae3792c83c3365e3dcd6a201ffc847d332e87dbab609c102951 -0x24cf6701f7d8eaa0972fd68ac886d36f8ec1b29f5b79b9eb8f1b7a1341f0e29f -0xdbda9ea3d9af1c61d6e75fdb973ef76acf8d32bbe0e562090c95d84a7d79bd78 -0xb3426c4acf9307b23707e283d6a3ed91b968f6dd224c327674b89e3a5d2ea059 -0x74aa8c43eba50cf7cd811b17eee016274a545262be7eecaedf4302604a96be8e -0x879c620eb9e6a1bfb613895db36b522810ac1e2ab819cab966b0a963159938d1 -0xa647511484f069ebd6b5c98cf6ea20a66fd240bca65d42c23684a83a680963b0 -0x17cae20be492aa9844a1313a487d00f1f16e2aa6d368a15256293eac1244ad0b -0xda6c07335e49ea9229b75da80249fd7dfe94e6d410fbef65f08fa92777f0de86 -0x1a37ee59e1b585b865b1ebbf902b43803b50b9a47dfa00b8f527b3f58beb1cd5 -0x338c6eddd9093d9cb679539f9bf731b0f69db2c8a1b46cb0722a891be7c45b70 -0x8b458ebe0244b35746659985dbbc4dc65d5d27026d918e6d15dcdb3bfb70a1be -0xd1bae27fe47abf3d738da0041b2813a994dbbddad071a2a595545dbbc1d8cbec -0x56c57146f2c5125402948428a992303483506745f48fbbd52efed32b8771a475 -0x33266368c049f2cc7685e1c14bb1d80f5fd88f26d911666730069ffaa204d6be -0x5c7d630c8d02c22ccce1c96e219214c25fd155ec2027f2d6b08975b0308be3fd -0x2d5c434df9f3bf3a6b68c30f79b57926fd436f74557a2ed708ec556b44079442 -0x3d05a436b6d07d86efaa3e84e8ec76c12840ae7267f69c4dca0132db29ceda6f -0x635e25c0c6c5f32199cde9495ad4de34e6cbb1850155811579c3444385d3e11a -0x40a41156ef3b2afb155034a53d7032adf23c959b29588d90a10be38a328c4049 -0x11cec81365153270b98e6e6eca7576b62ecdcc2e4de57fadd82bcdc6c5552858 -0x8087e172b135f42d90e08155247cb64eae9264a89eed2f78fcd8997c1a3777ad -0x19c3695c9c591263112d6232c813c89c7b967b1728938006fe348fa7362bb444 -0x73ca15fd8013e74ecd92bc15431f3944c225818a2e6850cb3af78baa76ef72ec -0x82ae5f72f465ce3cb3ce99e0464115d07675a11e9a59e6ae7b263739384a7101 -0x355d55e558f890a8ad20b467a4523e3298d5b9ed3c44847509d1f462ebf2dd4c -0x28ba866993ed7ef45e59c134383881fb92df6886f2a0ee21dc72c4fa96703912 -0xfb6a389ceabb382d814560b518c6c174ba8b51eacae3cbac9017dc374cf0c605 -0xa26bc7b514bd96c34f0781f86777f90f085373ad4748ef8c0c6467c3e01e47d7 -0x189aa97d51b20d8746476b0972b8f7d9869c031a48b9a6f27b1f1628cc45b3b9 -0x4ece3d9994d8d6289dea8b4791b41d9eebd564f160b6056a2228d6bae3bdf86c -0x2281d49158ac245666ca08ba9b9969bf6cf28ffb701007bcfe10bf2fe52c6b9d -0xe431e8fb452669344d420834e86addc24c37e07190f7b996156f3456650048be -0xe8d3eb4a68215384f7425c98f698c8c5843e96a20dba69f7c62fd3aa0c37793a -0x2353a8514d74e69c66812980c223dd5dfabceaf67f7b3fe16667497d20f880b0 -0x4c39fe3d1bb64a486581506b716ebd5036b12286e7cf62c7d04b8dbd5bd78066 -0x982f3e32818cb92c3c06f3829093687a453b772102866a6365676ac5e6618ba4 -0xefbf3cb6bbd7cca1e4be7a6462abe325a66a3c4036f3e84ef5e1c52d8a40b7f3 -0x497c1a45d09e59593329c46f48d23f521f81ece39bf54628bbd1d1811d090c69 -0xb7b26be96b4913151fab95829f540b15175991861d1908eb7439e2e7de664900 -0xb187faf8460987021c879340c7ba36bb64fa6461fd676a1dc1abacc20bc39638 -0x015fa4a6549a87c00c1eda2c4202fec7f4c840230b1292913af56eba99a6bf22 -0x786100b7c6fe7e5a8c00caf37dbebb9f57713ecaa809f76a0d9068e68f786b66 -0x92e043ccf4db6a2f3e3a93a108904ed59a87557eb74c71e410705c79ecef2f0c -0x1514f849614f8edc23e2f840a580880f3550eaf2bb5a9bf26f9f6b173495eacb -0xf10c902730d3cb0601a2eda039583be80e25325258abd5fde40259be2dc55e11 -0xb88c4222644e916becda46c7a0ce2f9091c45c37aaef30ac89c28daea8218b03 -0x76131add8527a0ec3a97324d3d9452c114f71e3074bbb79070c527119bc8124f -0xedb032dd6b2219b68aa1911b8663ca6958ae94b664d2a183864d05c21758f9a3 -0xb6574fbe224918833c52f381e2c48fd71b2b75824883137569938d4b0eba05e7 -0xa2a014f75fb5966d1bb4482a8c104aaebba9b84205f5d1ef3667b360728367e8 -0xc364926dc5cdfdd03b99f621a07cfbdf4651dd6308ee615456e225dda1c558f9 -0x43742e45bc90272eda9945b0991b8f69a7884a91f011e80e6ec8b46b39f87e20 -0x944a464b3bb81e18f745be8b466246ca89b886d693ab790f1f2f9fc4cdc54623 -0xa08a32e117b6b89b1294c7cb3d48c09a2f6d7e63a46d3ef41f9a29cca80b6b2f -0x69f1b04d182f2a22cd68d25432d798608331db234ca5f5dddfd9fdfe32db62aa -0x82f77d62239733b636e002d434663fae04452c6c80bbf768635c4505d82c48f0 -0xc0d13b6f39feffa75d7f150eb83ba952fa77d76d0e8462dbec951bd652f896b0 -0xf8e8195f4dce0c6f1d741dadd41b3b9223a3a94fa07d9789eecd5a55750de8a9 -0xf8126912a7b51d49dd4ac0133e9a34914b85497125cf31c8265d9daf3c43b36c -0xc62b3dd4bc429ed1d9b0c9417094de65b846a799574337b13f0d77795a611f78 -0x03d46911d4165e2cfec2cfd24a106f83f136ce5ea231a07638530e32ba731718 -0x662b21da17125e1aa2496889c411b32de0477e7677138a1906625de24c8a0d07 -0x79c83430c7fb7732b5039f89d222c84529350e241b0c7d2174fc7708be3d003b -0xd779464d38a6d81a53a542cb225b0211b42a80466c540fe51dc9c78004aa5e19 -0x4f894a9ae13b9c503611bed5b7cd85509fcb518df064f2c64572d195794b118e -0xff81723badbea3d8e8c6dcbf3f5bc0246ff3d60fcc1946ef22abd6f33de1d155 -0x4e0d9865406fcb25d82baaf4af32831f99bc560477cb8ef9ae4636ef395dcfc4 -0xdd58a89d284c97c09bcb551b867f42c664223a98edb1c4f22fcdf398a2ef3305 -0x8ca4c06fa8851b0aef27c06d5c48d45730db8c285240e077e8cc68cedc6e32b5 -0xa96f823353eb07ca0fab1e9f69a53ba383e6725f1aef7c7cd1469984ba48a8f1 -0x4936593b5b336b59e7693efd21722caa3bc2789970dfde276844a6287bbe67a3 -0x738dffe9a2419973d45cdb676e5a85f126b4b28887c7bc2aa4c046a0393cad04 -0xa6a4b1f96bc46ddbaf8342a9737393556e7c6a6f4d31e00edef2d924aa76bf1f -0x0b8df43fa2f6403e5308f06a686e7b4b0ad2cb3ae5d55986ec21d3096ea9d21c -0x1bcf3d6f4decf974d28b38489943f2e8e52738fa2a910cc55324ff5a495a326f -0x0c02638795da7f8f3ca1550fe21b9015c968a1ff42097d4c713404ac0e4361d7 -0x0e368487f15a0fa0fafdbd33137f57691b5eb368eb082bbc7d39a7a68fe7d618 -0x9fcbbfc967d2dbfc1245a1c33073318306c3fa787fbcbb56a53a5a9cfcd1dc10 -0xa702747a4540061249ab4582a8c87caed0f5503c8a92b7c780adaac7938cb1c6 -0x671b610b0d4dcd12eb8d8b1f0458a3ff1f89a7b2d3d5c4f305d66be53118bc70 -0xe2a9c0828c895631f1a6e75e13416facc7ad6b22fbec28520168ab26d1d7241f -0xd1db355cf5e73b6e417ca1fd7a379943e30e147634e969a5aad4f229ef428426 -0xf3cba6e9b16a5e18712ff0c9eb63ec91632fa4972f55f48882f58a63acd8bf49 -0x4f6abe1624a3fc58d4fd4b09b8d699fc52e44ef104547f301720c4e2feb46cf9 -0x89ce4caded662ee14e5aa438ddf55e1edbcad9b7512941a6c14a1b59dd59665a -0x56d0f58c1b47907bc9f2992826fcc24a78d632953fbf6fd68fa08d312d00d370 -0x26a10fe3e385d9ccfd9d8f32adf578b630b5d7466dc01af2be92501bc38648e1 -0x8d7f07b9b691934db31b0d8707509d6872e8f7f1301792141f8e1be5ebf9046b -0x40860efe01592a235cb654ad98ca55c760db7fdf7fe36e9b849cde2f7869659d -0xdf16f815535fe5ac52c2c13c16d67c14ed9181e6286e4d4e68e4fa2bbab67a39 -0x03a262ecadeaee0bd4c5bbb4799704096f96afbfa446a195547414d668ace9df -0xee59b45ad4750e53bec655e7012e74b6c7f7c825015a893c0a0ee7d0c0c0aa53 -0x8a980c4b7e69e27ea6d76a466a1ec9c9a2ebc8f84ad88f9e029b21a696e0e682 -0x8a271acd8fccad7144db1fe6b5707f2c48d5507bdeb136ec5805a2c2bf70b9c5 -0x8710d84b9d2ceb012a814912021dfc7d1458fba929f0450bc68325ef6f0dedfd -0x025ace40dc2b60f5c0e7d7c235f53bfa558308d474e333ce00851c634d93397a -0x62544f9f41751bef089b96e007854d2dd4b5e98350d160b8c932ec4639b81b46 -0x1c8856600507ccf9244bf833eb8b2de3bd8fd2129c35c766acde61b79e78ea50 -0x50a25c8c3efc263e3131809995cd2acc9c034039ba8ea3152ea0d6d351927c6c -0x974c73ec72c85511639c5a524f55fe7d30775b16fda7fc6373b5350d050434d3 -0x1a0519c2d072051d95816fdbd7d0dc458f1e46ec88848c58fd49dd8bfc55e492 -0x58eee4830a54603c410f1c13a7d14b0c081d622df780ec460292c5c7d7fe5976 -0xf786bd57b9ef1e26a7aa9e357010b922786c667d225fdb94344bb0ad3c17d693 -0x10404c1216a76e9bd558dc03b4377398cfcca8b78faa077d0d0089c22f0de33d -0xd67944e98e5d8a6ba58568c1b4490ab06b0d792588a6058d89d2be400f4c7e90 -0xe0c8125a891b0068ff38346fb65e1112fdc827eaef04aeb151814649da89fd00 -0xa398e9b4a75ed0655b520dbf5d70807faafcf572c9faaf0acd4522a684a4ad76 -0x78e3c93222de72c738a4d5a980f47b5b46526e05bad5550038aebc7b9cc54935 -0x8267649b55c4f5f3a3c2295e4be6042e24d50c170632b86f82eddbe2764c879a -0x39ca730d932166e36b777438f76a11aa19f4ef4f60966abd0157c6dae10e2689 -0xa02714058a6008e99267b3a96ee58b6f3f896652f603eb7a94f402f74c7cb4f3 -0xd8b86bfc468b085a484d81ac47127e1658a7d43621aa55fed5111aea733b92fd -0x6a347975c41072f5d32fc981bbc37916fb01b1ffbbaeaf205e20596ed2288dda -0x3184ac7e4337b5283e720cfe885cf0994917aefb96e9c03e00f974780097fcf0 -0x6eb743aecf241d2a83c8108a9304ae6cac4382019f962c69fff5b1cb6f185d08 -0xcfbab4e238703fda86c5a3f04f717289b25e300df77e3c6a3ee7cf0385b0ce00 -0xdfd6c5e8442027e9ba98c20e33341e316c085249f178b1de95290dd0c79b9802 -0x13ca4cd4f95f62f737ca47fe56160e4f6afe703e73054fb535da73011f5af401 -0xf92c5b430b5b6595390729242c1b08f0a7223b4a954527134c5a7a313eed9409 -0x473d2c9ad8b12d93d41cdd522a38b8e6e07ba44a86acd10b91d83b069dec555b -0xb1521e7d9aec8877883c91437ec4e8f7257c78324447da30f8bf61030fd31e0b -0x74aaa12652b5571fdf5862a2b99d94cf95f0131155249609eda7b2fd22277a0f -0xdefbb1384cd1563676c337d2b2e43a2cba4d093b5c34c56b627c9d5b83ee0e00 -0x8d38bf96c0169b90ed76cb0fb611c064ca69a2c1b30e56f1aa22249a0a6d44c9 -0x16e391d1d69c21d0e1a19ae322f70a2a3bdec3a7ff5651727005530ab444db21 -0x25bef1e8ec455b8d2fc6df66b18cd409bf50c763d51ad058c3f5381fac2dd25a -0x7ef984681a8af899879010d159ac0064b15408911fd894f4fd91657a63b4a437 -0x12a564b94e46f0721f4ca1b8fd99873b691791780ca3ba747835d35b0401abac -0x33223eec4d2ca661f78a5b1bc0db720209393ad0a9ea2eac49f5e45fef628ea6 -0x98a8d713e5a89f2a57233297c5b8532ff07769940c30e835e369135225338f40 -0xec3bca2dfeca8b680d3bdcdc656c0ba6a2bcf5219b0825a3c7a63245df563e7e -0x7f86eb42e345a1ea336d3e9c4850e22a331648772ef5f6f2420cee551debc9d9 -0xa50d7b691e62aafe0f23e64bd77ce615a03234cefb29806df2810c58d4b3506d -0xccde4d3feb750a528700a1f909b34f4007faf9c567316d0a9e2e685de2c850a0 -0xe0ab1a95eec034be1e3534696051b991a066ec8c2623d738536d30e15fc19e36 -0xbcc742d12eb263946125117fcb149736990752232a148a9f33f29a6b5366a33f -0x273d07a3b1a16670912302c574537b603e85f551e3d77a9c12128da641f38166 -0xdeb7ff65aec20f3b5901962ff5f13d4cdb70907ccb7aed197ae651d6d32c9577 -0xebdb2f135952008eb44c920f0e7b9026403e070b5a62724ab73a090bcfa2d411 -0x2e76d86356f6f264478a8d67b43f0d805ea67e7d3a250ae25b049b4560e6b54e -0xd7e54a7169c405dafe30db6f8e23d125bb564610902eaefd1aae4d34a808a65a -0xee78af61a5f45cb9806567114681daa02a9f2ef83c7b714ba92acf6a35deb564 -0xd9916fe2b103675c27950dc648e95e74a1bf47cbeb8b4ab45f3bd5574a8928fd -0x394f85329bd59e527c3d41cf3754bc1dfc2a93b0b7885d4a8421912f1d820c91 -0x5da249e721265efbff83bca103b5e23f09e56d03b12036361bf128773459dec6 -0x508fce2c55b076e7c44bc88a24a1ea159f53f99926a579119a5601578252fffa -0x7c5ba470d910a86fb4923d348c1279f04a098031cc09d944c44648a0d305ef5a -0x0df768019f075f1eb9e055d3cb78955aa90e7544c2cef92f87e95c18f5073a45 -0x2f752af74093deb6a6275fab013a28605b801e8c039612d7571fa64d3ee4be89 -0x61f8ddffe48960d776b65c19948dc94b19b2726cb39457c76970c54469413e1d -0xe9f32e57e2aa4f011afcc3537c04d023693bdaa42cfa18464db93cdddcf465ae -0xdd0b9fef8d84aa037622d00e26b9d9a4d55f18a71b2eb28b042b152688325dbc -0xece810f52658fce28c08ce69e9f8d33976ca12f000c4b33c31cd97101aa2a50a -0x7a9c2bcb48242c93f3b1724a68b3c258eb9f753e95a7dc5fe92aeddcf92d3bbe -0x8294b835edbf9e6b7906e0c120089ea2e55997a3cd362fd7c0fa2fed7fba229b -0x7eb9093160f686facf807b14919afa6db154f2b542cb3529a739f411f37f0fc5 -0x48a0d58996254699d8d932c9b3bfb0951be5cab6f800ef0da3c49208be891065 -0x0c2eb3c9e2191c0eecb097015b0c10a9a6fd8fe160d0bb2211e58bb8e0a4e6b3 -0xc57a2c15c014f0356ef64eb74a2fdb38f82a2762cd718c018691590847ee578e -0xa5539a64ae5b472cd3d1293d37b406983c398e4cc77a98568dd4e071edaee731 -0xc350a89cf7995719051929898a4bfae40672321b094426c31c35753df6d96ada -0xdb2ffda4b111b7f840dc540adc4b75c67358f0ec5d0465dc528dc3cff2de43a8 -0xec6972ea3d8503ff7766736d23d4c123060b008695e653affce87b26bd92461b -0xa74aaa779c6f81d816c1c15ae74e94aa521580680dbd343d7bfb477cd2be826d -0x3ffa172734b3831f177f51d59b4bd15df13841913c4c5e6a87066d2f65d6894f -0x0e8f538ded9c6bbe837fe5f1b1846df7187ff0a7ec193655719fb1e9919e7a3c -0x184bd69d360e66f98384c2bcc98fea3510c9465487e5396d68737ecc791c6e98 -0xfebdcfdf499c17e75c0b43f033dcb0c14b1b19ec32a5b5ca37aa9ac349f77397 -0xb2bf9a91f4104e8c1b877e4273396c017548e1bf4c649de722311347397ab92c -0xd6dc1ebb5657c6134c25b09fc9e103fb04d1393dc53d183ad179632469cb3675 -0x30cc04d19c6b506991a5657558663bf1fe46755bbb86e284c8048b6ecf312556 -0x157fcd55dc93f5f9d7afacf6e0df59913d017f29b69c74b04a93bd8a1f86ae24 -0xfd9b225874e7572a3958a9b5f0155faeccc95c34d84d70df106769fb044e3f76 -0x1f8be1686697bb924a165ceb7a86a29a79a070e2e59fca6b225cbab8beeef6d6 -0x0b19619242cfc60772bc8a263b12011f004e4fa24d949e8b4d2f29621199f7b7 -0xc56912d8459d6bd2ac0f9b9ee43dc6d2911a101ae1c8dccb27a03c348e7ba5c7 -0xd283573639957ec36374206d036982a49de00930fa3dcb7bca54ea2853af5fac -0x2b6c4083e84e4f369ca6bd077070b8f23cad339ad6f8e9c9f37fab70c6d1f3a4 -0x5c61105de873ef97fa7ff520c2751a511496963e7ab39bd6e201ea61e2429338 -0x7fec77c93d11980c6d5fb5fe98b04af0b97c842f3e81994edf28b52e8dae49d0 -0x8f8ccca58be5369985f85b7453c9502eb2ebee0916c5b72025eac29f3cad5911 -0xf3af96f26e9ff157d85c1bfaac4b81ec51f44f351e805a014757f9b516d6fd66 -0xe677a2f6c97a2986dce408de573ac101f812d90f0d793ba45f8d53a19b923eb9 -0x52d555f537784943d3242097ac67ea425ec372a1130c076d6115ed4762032d7b -0x6d6a878647193ccc8e8ddadadf271c4a53bca17d7f356382e7ae0033ea1a2c03 -0x9c7f76c10688f9a20b7d2860cd350613130a15c877eff0d851d242565c618fd2 -0x0cb89d9a4ac08a26ebc16cc13bce3d9bc96627f2fb2ce190f175da652a337412 -0xdb04782cc6d2076cd81f664e5c714e2481793773509759bf2389c63dbe15f25a -0xf8acb34256d1c5efe9d8e2035930b9fb87a3445943cba038c4ba9d40f6cadb76 -0xe9c751797643a573373c8fda3899c3f7e75b8f2afa8762913d9c2ac9294d8b69 -0x5ce47b2491a4f494b1a6d5b7d3b8689100a29de7355355c05f14f2019e29c727 -0x0d08ec69b0c1f415463eb62fab5b0e91e455069a2dc71b8735b4171a1833916c -0x53b58ed34a77fd9a4ea72fd3f0e80fc83e42ccfd26613d8f8096188563fca812 -0x80757c9bb1a5077bf9c093fbfb821bc05cf17f51c9272e22264b1286dc8564c6 -0x3371c0fe38f0a7bef6434b9765af555e1592092817f4850a106c1ad77977aba2 -0x4d7d5a1ba7138f6d9e8eb220efb68061081e976c9a047d3fe53447a63b27f844 -0x3eccf410bcff96b965e47c027ffe896ef25435cd7fd001007e6ef26a1764f697 -0x109822e7ca7a2fa48b81cb538c40cb2456d3f929c1e312fd01a0802c3b7f6c72 -0x78008ba9117018c8cf74101dc993d4e008a83e53d3602434a18b4f010f1ba716 -0x1f2d60dacbbfac3e8fd07e7dd122cf7abd510654d1eedf6ea02a8e6366991de8 -0xb00797f403568cc5684a7c1eeddb481e31e66879cfd028286402db72f98da182 -0xf381b75cf4c234de4555a6e44592f807932be8a77fd406f0389da99a1b248069 -0x335b735afaa1bcfd3830786cf50b6518147c3e76b0869a30cc5a9ed1dbed57e3 -0xf9638ebcf8a503361efdd0c73c9edd05bdcdf075a6664735fc322f436e45917e -0x70e6a9e50f6e105828fccb98988425e3ee33239cfa4b56a3d0bfbd938a0bc090 -0xd12146b1762b1a90eaf1fb2faedad7a521bb4cfd152dadb032415fcf30988b39 -0xfe32933f5a75d0362e32cbae266a4171174aad53bf1d5f9f22e23736cf3f7bfe -0x231d0fd9ed31a17506c40e03bc665c9bcdb652d883e1507b68e372f12b2759fb -0x28978e69f2ce06816a902dab544cc85fa5ffcdadd10238036eb05dcc2534dadc -0xdd05527063808ca4f10cfe4a2933734a05c1e205220400bee518807e45a97abe -0xc6a12e09d8b1c9fbfd405aec45dc2d953a090627bad40e8e08ae7d47f90b778a -0xcc50f9603c74de6610092c70c658b3c54436f4aa0d38cf049e6386c8efe61253 -0xab0aa23c47ce59787bcffb57fa8e9d33cbd7cbe050320887872c9c51b945f3ce -0xe2f6d64fcc89fb4f24cfad0d5c6822e84bd2a24adab7b44673ee86ceda3ff24c -0x9c2033207e4f8607a5224cdd506bc596536502c96b9fbdf160c7ca79467bfe0c -0x986af337127d0da1d99e3580f686ef25eb0bd36fa026c7e0a6588ede054359e0 -0x79aa552de190a370efa11efb33d0f919eb3f698c1e4c53d3f925adbbbbb28544 -0xb7744f586ef94abda56526cd1241f199fd86e4a4c661cca8182086cd30695cd3 -0x5f853af19bbb65c9604ed308f6e93ef224166a6076138a6b8f333649e027626a -0x9898f88413384da756bb24db4254167a3bc6d15142cfa978f068d0e6b611f421 -0x473aeca226f245dd1136f7df5893d9f0788d7baec3eada3de23307069c27cc69 -0x6128b2062cb6acda26cc91cba898cb390ce500efcdd5c911111a5d8609e388d3 -0x754136dcbdd2ecb765a87dbec0e10752e3ecaa9bce09d4ad1518fc1896d20aa0 -0x2659c29444821c4ef7f64abd508d87dd2ff4ef7052843494c566d053f9bb76ec -0xe2fac59592bc33b5b61def4b51120ec4dfedd8a4f74413ee294b00934e3a3ae4 -0x07ff4634234a02cb6d98a623064b56b44835cd78e874f0da94e089ccfd23ea62 -0x9e51046d4a0eead5c6e439711d6a767626a78ccaa7b45fe31bc1759c4253b7f7 -0x59e79e0e8073438a4c21b47e5a389c4a762ac07794a912ac6e98795740135597 -0xfae15061945a76911a7fef06cdde9bf6aa8cba9316ca67a153bcebb367ea834f -0xd695d0cdc5f6756910fff5d6b004ed990113ef10ff9338669d32939ddaec087b -0xe671d663551529530e67a7e7e403dc9c0896c1a67e3e6053666da6c1032e21f9 -0x8af27b1823e57729d2da32f6b5236832b95c0ba4f4994aa908c71f48be375ea7 -0x00a052df803e03688d51227cbe48a6bd8b7e883c5fd7b69c60451ca7906ad01c -0x8237ac33adba4ec75dfc843d2ac47347d6a9016368598abd8c5749af25c2afc1 -0x2e21a93e1a05268d81fd6d16a0ab92d18c4f319baf03f8d425e484d1aa022cc7 -0x5e266f0fffea3907287b46f4be8f5e2c54246b4fbf04243a91d6a9a7af1b50b4 -0x14e12c96c20ad45a336e089af2d92a26a0d6303fd50359219866f10e9bd8b0e5 -0x2ce25b35be5facbb9d75db063be45f94d0cf65a905a82fcbe2a5501db4934ec7 -0xc8c7f38686360294f5d756d6214e84dd45059b42f68b73d48ad1f78ce6ddaf13 -0xa37035cadce50ea9a9593f6522fae64015b9f951b92415995a796bfbbc5e68c7 -0x497fe91327b51a37b7edcdd6fe9651b8af135f128782304b1bebc36e8b91dd0e -0xe042bebf5e5fbbfa7d5a1666c17547b6fe022a5fd3882af663dd60bd9950976e -0x4361af7dc2b09e72d0c5fa3998da8214a1ff3fad70a7725e6d0ae248189a2ad6 -0x3e2c93229159867639015bada12db04f698f0024cf39783d85f06b26f6c788a0 -0x95334169ee75a2564a3c30a92b25650146245d1ea902264129ea64988fe26ffa -0xf385f0c03aaeafb4b4c9ada15fbca986d1d1f519172e4f3c651b3a859e2dcb89 -0xfe2961527e37b4c8033ef74eb81037bf1062b188dfb04ac3c283ac8f49e7236b -0xb109f3ad7150fe28a0e2c28f38dcade94a46366514fe09024ea206022d22a678 -0x561c1da9dc464db84dfc6e7f6d13c898ab0a0edfc108986d9d649950962462f6 -0x4f490afff3a412a25c129e700873be9b558e92f8480bdda31f974852c0ba1e3f -0xb500e1d32f744fcc3108d2c1c6f530906350561ee47b3d9ed7bd92d75f115eda -0xbdedf50526899fb9e070b52b796fdbb5e6ecf658b7deaeb33118882ee4f9b257 -0x0d03c78f90b8c622797f0806897a1cfdc2169a7870ed21d251319d88ca311b32 -0x4a3cf94420da7b7da259ac02c9f085c5a8fa9ea989d83630b7ca240c633cf15a -0x3f6e7ddb73e37028536eb7e68d1b0fc7564ae90a2458ba747add573b1fe90af0 -0x496d282055d3ba414be884b896894a5c9d88500e9c2ad623348c8378114b28cf -0xe58833366623b03539a028699bb4a2e41d69c13fa89a63299a1a9041ce692f8b -0x8e24d8255c3a0bef21dfffddad17b27eec441af2a7894b7f0dbf9c258b98007c -0xa4e9acc177370105740f5a40958818f0df645a0928f6eeee014f3e53f2a72dc6 -0xbd3ff8967cb0fd3490cc4b5a54ee188dcf40fbb0ec7791eecef055477d117727 -0xa01c8e3e6ef17ddbe8eee2515a6564fed5c5ee6c99d1509407168b4edce54955 -0x65a443ee23a7e52d95c465cd3c71c2776bc4965cc04f767fd3313e999568987e -0xb8fdd6ba926110ee8e79436d4311ebf414a9092ba495a56de1a3c753dc309aee -0x96f5e99899c3e049a5d722ebda38743d4f6e002d5309c0af96ff17d900d213b3 -0x4629cf7333a664efb01626395f18731f50b25aa88f6d1143d57efe8de594f191 -0x0d1bd625e8bf24227bdcbc4afaefb7d7dbf24015eeecbcb472f2ce12478d4bf5 -0xf34c8032937952703b635fdde5c468f13b39eba1e67ddfbd35dc2222ab138c43 -0x6b558e8062ea9ba138f299a132e7f6e1814f3cf56de98e7f3d9ceda02574617a -0x81a0768caa64620a48d7aca38eebf21b9cd769ee7f8d5d47c9d4f127b49d4689 -0x633f5b2605e1749c73e2cf05f72953d291f63da1e36502d7e2070dd211a06234 -0x250724aacf583e774206f8c89d828bf15ed448d7b03e1e046af92289e316eabb -0x693d83a1068d57ea6c40fb41f57f32061e9a672e2db77220b1935950dbb93715 -0x2d170fbbc8b46b198fa77e5f3760121ca6757c26ee31bc438ad24c0c8895b947 -0x592ee13b7f1c619871835794ce6505d3e6ab80975702b8af10563e00e1071d99 -0x9c98e871ff8701b753bdff1f204ef2d807fb09c6a0683ebf91edb569e87bbdbe -0xd35f96745c18b7e537fcf2dec5f6ef6d7d65c04016a84a530c4d13c9c96ff0c7 -0x9c875bcfa9a9752e158f57b001290f3318816af62ebe6d1007441e2c03e8ba46 -0x5cf346449963cee2c59a53545298a0d24ae44251d1ef000359b0173503feb705 -0xb612074a277865ab772d9baccd2dc3dbbfffbeb1a77df13a87b31e3371bb78f2 -0x2692784455ce0b5be9fccf62359b24dfea278cf211fe8a499fa8a69cb55df760 -0xe71b5de7beafa37f08b7e19137d3a10386cbdf5ba424a34ef663310efa284c38 -0xd47df0348e35d62738293dde9d47f93eaddd8f2d110b47e3221112c716a77f70 -0x1bdb0902ba8332b0120d1e152d69356071f83f831f961e1c2cacdfbd276d2f5c -0x74a6bd03ef1c1fdfcaae4700a5d0bed27d1fe08c9fe9c872fc8804f92c410755 -0x20a6c71621a09348bacedcf4b222a820b736298c20e1eddcdcf146aed6a59052 -0xcd8f38006799ea75a1235ecc50ff88e3c16023de7fab00024749d6961ed5cee9 -0x12d7d346ebc2bd993c15797e55556190b5b6c435c30ece4fd34aa6eecb6d9106 -0x0405c245fcd482372d122488d8c4f433b1c720f9f1733d26200d1b508f430f4e -0xa555b9ddd44829e32dac4cad5e89bb1202bfc5a7c91498796899d7353a89ed54 -0xcfd3f0cdba1ec380157e2812134ab19a473d0dc0c6f51b933dc851be0d193336 -0xedf4ec7dbbc0bb2137ebcb7d6c5cfb295c4068a3d29598fee693ecd5b0b9fe9a -0x45606d965dafa77393c429116b298726e5e10f997168cf865019123ff65ec714 -0xe5e7993017875c09de2290238d7abd2f6ec0c50cc0ca573e1f21c5820dd1eae5 -0x6f8ebdc1fa64a5b08e5d43873c9880d80d42bd45b2704db32a8c4404cdf4e6a3 -0xbd423892869956e9bc5d1a0848bbbe2a41e342f1d098b03959d7dfd07b014b98 -0x03ae04586a448af20da88c09bd9bc70635113564b9aac148069fa218746a2ca5 -0xdbe361f088ad2f995d64420f6c72e2babfcafa7232b0454b9d35ef68c56a820d -0xb87c1a2eb40b7fbc178ae4c94979ddda6ff8aa906c132e0ccb64ca50016b9a41 -0xbf4f1b133accbee67891e151727fb4f100e3101e1494fd927196ad1d2afb7482 -0xcc65e8e5c008b1cd34516d1ff0c71af1b60fbbbc2bd0aac8f7b7a28fe3e7915e -0xfb30239fa1b04a28d27737421987566d39dd024e0817b5e2d48176d93d9af4a6 -0x41841ef9b925808fa0893839b191aee3461ef3a2c81153fe6aee7887836c7c10 -0x741816d7c79c08b336083cc00c7276efdb9ce5be50423dbfc9f1f111ace86c9c -0xb51947273bf152ab82f2703439fba913c1dd44c1a3d4e897cd59c41bbd32f14c -0xa4207957d71db9d1b1dde9073f27979de7de15740d6a9cf05f238cb0f7d853f0 -0x9c43585991b17f0b4e0548f8308a6bf6406f0ed03f7d719d3238f6630a672453 -0x869111d1d974ef6680c737efdb323435ca875d2c48b4a1d293db629f5f50b3b3 -0x236b389f560b535307d86485e63c1742970073e428125b49dbe48f6c15566649 -0x745f9ecbe5dfd1f0cdf313f8a2378f574aec3e18f8019d4667d7750ed63616c7 -0x9f27f9354546dccc8e8409ddada27bca1a89af62342ed1683874293527deb1ff -0xea460ddac5d96a005ba53dab473367a9336c2ae03bda183e58f7519cb47492cc -0xc4778cf2a78ad1b755413084ec47374a73fd4b97bf921fbaa05115934a3e7d57 -0x6cfaf0effb3d1ef7587c8c14df0d2e0036867a78c69778dd741d27b3b7c477af -0xa29d20b96f97df1e45a8ed28a9d9ed15fd5e06d61a8fc35610f0d4e07d9abcaf -0x39c8c89cd1b136485c79cd89c8dcccc53602a65235734c955bda8f8cd4c5d18b -0x9b541dfcea108e917f04fc2987c5541f18ab70ace8009a62a3ed4e1d5f516ae1 -0x7635741fd8807f11da3feae934bc318c515d16536d750d5b00d209170c805dc4 -0xaa45b52584c81313d8f7af47f437b946e1cde7dc473a7afb842dddf3e6c6f3ef -0xe5bc37bae7d1d3efe9f7c08e920f5809a8512d20fc398313f39e5b0722fec2d1 -0xc9cb8cd01543bb09a295c8fd5283749353ff56962a62a54cd7ee750b206e14b1 -0xfaacbbddf4e163b3c92f747870703a129f032d412819fd577af984635bae51ef -0x23ed1d105d6709b5e3e01fe543163fe131139c31c15d0c7b7581ce5d85601f65 -0x6d15f6c1813c98be76f8275d5d1c63399588194acfc6daf65a09196ac8dfa15d -0x9c8c65040d15904a677b0da2f5b3283213114c26cc2b1fa7bff48861f6fe86b3 -0xed1a34cd4b518e8314b10f3619a8c2834d5ada7a5a477655e94a3d5e57c01f01 -0x603707d0d6f66a1bae110633da258fec2d51b27cc9b4024e131d6cfff0750362 -0xf574a9c4d1f56c96f2e15a1985e04b131eba4581903c8f75bbe0f64f93858024 -0xf0ee34b9c1601ec214e71cf887454eb2213513875d17eb1c1162f888551bfc14 -0xdf21c14971d37e7e5a087e91240772885f763e720995cf9d179088ff2b1ed753 -0x70b876a74d9d355eafbb4ece0f0bbf3132f3f2d16ca0e685a8d00092d251ca0c -0x272dced686b70ea8861a4e7a24d72f00600d7262f2d11fe3146bb5fc29d27898 -0x9b0d0e9ac7ff48a534cb4c4ecc4d48b4f6c579c9e0767de002378728e3c0277c -0x7617e890a364e25b28f1c1635f31c51fe147945254114e96a9dc296ad64ab067 -0x6e53906002f8ac640e9af120d60a8314f11e87d9e5e3ba5a1c442e933b237360 -0x82e3a0f1bc3a13165b6c3448c47c1c717e5fddcbcd3fb8373b64ccffefddfc0a -0x01f2ad72b562ffe769ab4eb4863afa801df9237f1aba219e435dd30338c6d751 -0xbce8f65e03843147807bc52b07e01a6cb162224e0dcc4f1a4834c4ac50865f37 -0xbce82b78f710092552a9b3d013215788b5d9c10c6eec53407de7545b94948692 -0x4c3a84fdcf7b1d40729ad5f722100d3e387061efc6c636bf3cdff77ea8b81fbe -0x72d2f7dcab43a4778ed9ca2088f6719d9f23d52ef508ca45e09f887eb55542cf -0xaa7fca0a8fb1372863d52b944e72cfdd1eb2d590d6fe80f76545d65be819bfbe -0xff11c687a6072a9ce9855e6f316f1cdc166b1a7efb38606cc7a6bf31b74cf915 -0x166f78879832903eed5ffa853dc78237fae6c3e6ce8502c790b8987e12f17bb6 -0x58d8e47dd437421ed0fe76f7b3a167944ded37a424ac31ac5a2d2fa539a83aa0 -0x394b6b7bbc09884b23beb928f39f8bde3f67cf58c69f580f81b44f34f85f3588 -0xabc1a6f7edfb4e855c3b76519f61817aaa381d58e78bcfdfc777517dce9afa1b -0x504a21f4f2e1731604d92a3178468c62b41604b49d98e1adac216b1349773576 -0xb70745c192a46deb6be5cb0bef64aeae7e47c32e04deaaa053295f1b233b1853 -0xa186954a8489a9a3453c9b015e8ef6f8658536b7346d4685e54571e1742d4aa6 -0x9863bd511a222c97cc7cbf4ec5b97390217843561af51f47c2796cd1c66de1b3 -0xdc8717aa43d90cc861f99be263a2a929077dac959465d8b1780ea0dc6ffbefd4 -0x5d03059d7d56dc8f56160bff56e9589e40c89c44080dc33aa5bfa769a00cbb9d -0x046d3c8195ddbeb2d67bb227b3f6b606f340576c143b2fd1671cc4aaec7d3d82 -0xc3efd459dff2f4e52f4674b2f1ca2b6e014123f36e505bb5d64ecea31a1bb76c -0x4d63c2e69b251e5e2010859f4f47ba71c892caa10c1946b3d49925b04b79b0ff -0x55aed15c0ca7bc70c30a28a3a9450796fdb44e8de8f21ae062d8c1f2f8f4f308 -0xb4c280254d7ffc1b753f5e4a4c69e82a3262fc6e3d86c23c760f91b51a338545 -0x2d7ad5be4e63d0badbacb0ded9a0ec9c329b26f12df6d28184ef129bad8f91f8 -0x427144cea632a57fa4bb57278612eda5ed0f8420cc2cd794e067725fc99a186f -0xd48d025e0a3433100ff11813df8a949aa7fd0cda8c344528491be9dab5c5439d -0x125e9f2940c3495a1acbf582d7204c48a83b57029b73a1ede431e219127fd950 -0x80a6a1cf8d3cc9e8c1a60dd8ac7bd19a13f908ef3ae76fe126c5736ed2fe7465 -0xfecf9f69818609bb122beeabe1501d9944aeaf1b9291b47573ece7e91002e691 -0x2a94591f3f96763606bf32755eec8e50d909eebf0f6b80d8450ca997fd5f5590 -0x3a6ce325054a9ebe09a7bd949e6f6d856a9b88b605e8a541fe36f03d2131e6b9 -0x5a85bb6a09333af11bf98889fb79ba7d2769199e801f9c0d6eb5a0daf32e823a -0xc4cecdd6d249acc036d555d9eac73ec8cb103c5e97156695759d72f21dcc2b54 -0x71a5e0ce119c4f1ee39a47dac16a72452bdbb51eff47e44a6cc6be19e6875721 -0xaab6c2eed224b6fbec46fbb29a908d84fe689f751e15f2e168eaf7b9f390d91f -0xedab78da0d47abb428529c163fbdfcb7e7bf1b36a5d59489b24c3f8a65521b40 -0xb31bd92d84d09b7b41355261cd244e475534bf8fc0d60d04cbb178bf3a7576da -0xf6b535009ec2d4b2caf3fd8cc101b8d8bb14a90c1bb90967e063cafeb4c60374 -0x82615a31ef0a4ffdf760f79f50ebc4e7e7bd894acc35581ed110ff2c221f456a -0xd93a17b25f47475e37304276eed371ff295a9d2200b839fac696b7786dc26c3a -0x8445934bc935b5aebf9ee77609d0b4dcc6f1608c48d5435c57adbc12d8c978c0 -0x049a6710a2015fda3febb87d3c9d6619d15f5bda8070f1c066f19e4e1d32e4b5 -0x18e949dcbd432c6422110a36238bc8dadde880f70276335346e8acb9218b6208 -0xf81dcc525da8981ba12465a6781f815d4231d0beb32de5b35c7a40beba9b1d73 -0xaf6898cf4ee27914cf2189e980b3df13a54ee105263dd3099afce18a3bcdbacd -0xdb348a293246b2924ad53992b37486f1d5d6369a69182898766d162b57c83025 -0x201f995dc340f998265b82684ce0219190a00a6a216462377bb2a5376d6d9113 -0x3427e3b2141da0be6c1f864216a0496be6ab0bf205ac6c2f2dbf5594242645ba -0x26654841f52a01cca23bd2b4e2fb6fae7ac3fbd6d849d3af650cebc0f4b3822d -0x5fa64b244d37a01aa580006c66055a127addfd2e3a9a1380b07bbdcb3deb4528 -0x37d992f3f0d87019003a66d2410cd4ee38a6887da646d9d69dba61427cd66560 -0x6b8f52957ba33ebb3cf17437d9ade19c0bd7aa839bb5e185ece8125b03346a10 -0xecfbd0930fd1246beb438d79c12f7f7ccce099d1353ef896ef066d744b3c7e88 -0x894f040935fad3f201a9426ae39b32af7bd04ae8c21250f9d500bee5533b4bc3 -0x0c0b7659a99ddd53e4a8df15df2d23cad34b294e118646dd4eced7ec74357d69 -0xccaf4e001273cae427035c0e70deeb136f9f18a7be4364c0941057faf5118a69 -0x3ecb87ad4fc23b3e1b1d1b0998e5052c406b5e94d584184cdefaf581d8c0fbd3 -0x4b767e0e9bd5a09e7383792c9c35c4133f04da4ff8790c305422011b1e92a30a -0x71f77190ef9dd2a603b15bfc2b9de4c561a6fa2724ca76c1c2aa9f3d1ae5ea0e -0xdbcc23e315a8d356e0be47b6cbb0760bd2d18860e8d3b82f4b5cb74cc4733074 -0xdb8d8f30215398207da9a184a84f4c7212257f5b6a6b14e9359ac0a0a00c42b7 -0xe54f9f1c988667a49c02f0642d265a7b287e34c810ab5ea084fef00827900a9f -0xf1812964b0c4808556e999d7afc093500ad6c96787e50b932d0f94b3f7759f06 -0x017e57f87fd7ad34443c2860671f865aabde51e275130db23233d3cc62fd8a47 -0x0c0bea8e67e1d35b6f6a12bcba88e282610f53c1b2de419fc75756f571d2eff9 -0x355e71dd7a202bcbde2fbc811195595248a24f9a092ef13eeb9cffdfe11ec229 -0x800fb6258b7d241864c93b9d8e310bce160607b3e558e1b66f457aebedba44f4 -0xe60c7fbfee2c4c1618ae0a0e757390e26a81bc25626848b681de18a7b6a3b2da -0x6eed15fbdd0aee7da1f27a90fec750939c0e609817a3d06bd7a550c8c234f512 -0xe1e014d2fa394605d9f8ac4f0bbc3f5f9092808c7bd307f8063a2126107df057 -0x9e9ad69472b863d6ed1fe5b7cb6f8867d7583bd8897d8cd666b8594509c00f78 -0x0dd8b43cad72b13638e8995cd8af62234ef1d0d3fe590e95093a97963aa9cd13 -0xfd17d10e9d27409b24894068b33bc1d677adb1068ccbf559c7645b387c765197 -0x4c71c2d44f455278bbd0146ab5fad1e3abad26eb7ae91438b45f87a15d7ad427 -0x3fa6833ffb65953287755238a46a6d2a8dc1087fe23c342a755773b6d3dbff46 -0x9cf7a384f9c67c508aa455b7496d08cd199da3d79384ee9984aa875dc5f01259 -0xdd90373f03fbacd28508ace7e1806ddd443033ae2e56be33981b7087e68a0ce4 -0xdb3e619affab5848a625e685e9ef6fdc8786adec201f0b1abd1046219fb430e8 -0x2cd0bdafa57cf0cda4bb3beb62fd72fc4e2e12e97541e2dc87fcbbad023d89a0 -0x0a3b2b60bc0df418df9638dfe4f53aff62653d8daab4a2de1c347f42b4e13a9b -0xf89a427e21a501f6d709e48adc21418048abe280720e49b3a46cf55a541f9759 -0xf0ca3975ff09a8d8b3fef5d85bc8c94e2cd8c8ce56c4f81a1be396e14efc1532 -0x6709e0c36f4635a19fc42244155096762f10801439fb3ab235e4736b765f2d72 -0x181fcda4492b96cb500bf8dd4c36c2db16b0bbc5495535e2a93cfe89dae59a03 -0x14d0b4d9a5eb000d71031f91942db6a45ec7d774e280adf525cd6b0cdfa211a2 -0xe11fad6a2be1d21adc9f6cdf8ef4b0f85df0bdda6705eefea8f733f87736634f -0xcf774a3a2f24f58cc3e7c66b91e30b9073bff5338dfe961de710e72308deb558 -0x414e9851b6161d1081f706c32752c23a3709363e1b17130727493a141d2bf90e -0xebab5338d2619cbac0de443e6b627cf9fbae203929a18a6f0eef557692a44677 -0xe3a27ed1615d2b025a2330dca2b112a606992dc3680a808532f4348d0d72b88b -0x62336ca05bf93fc24d83dab01ff7aa314a940fc827918dec06309a822e7d2ad4 -0x0a12d737b548d1ef3e80c25ca0f23755f6c4ba7b254143802c04fd4431c9d78a -0xc962e4921555af0f062ce940f12782182f040bff658b7deecad871f77333dec3 -0xa4fc09953fc2c440bc99f66ab3658a7faced6cb8c41f0c717166049659ade7a5 -0xd396f31578ceb10a6ae90d4868bc68360502ce572c45a2f828507a56a5d06ea0 -0xda22d6d769b2b454bf50bf86ba05b8204d4390a267b8838ab1e9b1fe658d17cb -0x03479cd6fe416469f4df10bd2cd369cb0933cd616f6be8ae442673484d7822dc -0x4eee8dc4d98335999b6baa83792ad5fa364d117a305ef6cfb91f5413a08ad13e -0xdc42b62607a109788b81d54fb456b8fba355c5aec46778fc4c152ef3ee01a020 -0x8aae21c9f63e34e869b528270673a760760fc245a3d39726c6eaaf54cc9a199a -0x450fd04c7be3f7b5f2978849fd5dbfbe53a8162a432097523bfcb35fb15ca0dc -0x497d35981eb44875766611c0092abfb4cf4648ca47eb3c0f0461a10c49153b41 -0x9e6f03301affc78656c5c59f2a38ee39bd4ac9d0a1ec7db54aa0e9d4129f8a7d -0xd20741e59495b40938fc699fca2f255a7b1f13b8a0bf001a520ee7aa4e925a13 -0xbeda3702c5764e5987d2754b4101f3642c20f9d16c348eaf3f4fa6451a254a11 -0x80ffdc05b0a628c50092640822ad12ed3aa81757656d804dc7e27df8229dde78 -0x157232e2ec246a8b64573f9e73964b6f56118a7c8f29ad25597a0c36fa52507a -0xfea3c70a8f5c67ee33d827a465e8c3f8ba2b1686afcc3cb773e0daa848670c9a -0x745a6b48ae49873b6ac29bc7b4b5838c0c4ca2ba83573b2c4350a55bac054cb2 -0xbad8555efca77e5cee37f5f8c98455e9993fd22abfcaa961922b5dce1d3470ca -0x9750e8d9445c4581be255a2123ac03f81f89c4d594547acab40033348d95ef05 -0x3951a97a8b62c452824e6362919d324f27b638c05c89ff0ec3d7f9580ae94e37 -0xcd45f103c18298c94a2097ea7ab5d32a329eb73744a524afcfe4c634248e3986 -0x8029928b36fa2d08fc69b3e64e6671a02d75c365a63dde91b435f485a570e03f -0xb495f21f975e1a7a7b4b7753a845f260938e5e2d41a8bfda9e913593f35ad1e7 -0xd99cf82f3638af1119c6501b126c0e2a34ddec36ff4c4b348495590d1b958530 -0x56db1427e108fa7046d24a97ab5dd37e627b0ebe41bb3688364e1dd9a7a5a990 -0x320ef038a98cfbfc1bc6206e2dbb055ec7b78ab6b8c6156b1e2459c32d0cf0e4 -0x4ee493c70e721df922f8580b930fd43b3b627b7bbdf7cd26089792333f6dbda1 -0x0d69c3bdedbc27150b81c3991a24af11e959e0a8fc1d2a1fb35e52db84f0195e -0x1b322684dc398d2b8f536eb0aec7ce3ac2596cafa54518f581258c0f17cbc94d -0x3d1881f226230d3209724f7d97c7479c686fcd6aba1524af79e1f8450f7c2aac -0xf63ca91e3d5663ff42f2e2449889159fbcdb312a4f700b35387a832ff60ce4ab -0xfb3bb31a9372edfde164439d694053a32765a2f866ffbb7a9f7066715d4379dd -0x27115886f0626730663a2183ea8c629041245f254ad325178be719368779e267 -0x21574d4308cb931e6cfa02995abbc1a5dca16a0ee2299ae213c4dacc84ade16d -0x19579c6ef175fc618d447d2a938dd8733d5752c14a719ce8e280b92258240ec8 -0x7c1ff5340fcc9b7f3fff21705fa9369849ab291f63fa25a69ce4e83412823836 -0x0854c227041de77d01aba9bcf2e9c2fcb512016f7da95e3dc4608e310d0cd414 -0xfa4c0cb3de87cb7e32649cb6d81e6e0007829afced8d1daa5f3593323bb96223 -0x99b772d3956565ab2c02155f7f8b8bac0af6f5688c7af89f1de1fbef6c5f488b -0x45bf0f3e6d4ee2970895e8cd47d399adb3e7d9a694f1d43314e12fde9d056db6 -0xcc1440b16d94a040e000d7d860b8d9e36b666b5fcd429df4a3541bf445cb6418 -0x66c114222ace695369bc9fa6a98986c9f02590d29c9a7b92f477830d54cd4c1b -0x27fcb26b5847bd170752503e057038e4d3edcb261665e083c0529e6b8092a617 -0x24e22d963d54366afa4721cc3cc055817b443359396aaabaac3ec8678f98d61c -0x1b416eb2d6bd12da5cf38deea66dd846c6db8a02af76945211314a5754f3308d -0x9119fcf7a59b34ce2542dfb84d37a3482f0c6c4fa8487c5238cc7a23d1b2e867 -0x8c2b5de7cb08c59170b592845574612885b5be088998e6a3e0f2fb5244186985 -0x3ac54313d384dfa1672cde2c381c7c949bd13de216187d9ea43592945cbc7423 -0x916b7b7f613392ec7ef5f8c9446807ae1ec17cace2b9b0de1377850e625404e7 -0x02c51d593879da5ab51f7546223b391d2728b4ba0b0aa8c29c70280d284641fa -0x709b821d93834d55ee2fe55202040bf3348fa9a6072f4ee2f87401989f1d93d6 -0x8fd21b9a283a1302e951d3f1e3366c27b56565b2eebadf6894bc6318db3a6539 -0x54d132a4b9c91d6053dad01f771f866b59689c7601da73de494410a6799a6df2 -0x78c5e36f192857d1f1e1e268fabc5be8d4e22d4200de1587506ffac71fbd3e4c -0x9717649c908eabbb8cbb805174120fb135c2d0de45e54fd40cc1557561608245 -0x9ee75818433b4898a61a850e1a21d313d0ff80dcbae521150e23c13435123769 -0x7a783aa8cac52af9a4a324770ba08aab0ec2cc35ac252ae8eeb377b17c5316ff -0x54705a96bbdf300a26f47b04ac5d9b3065da5b94f1ac4bf92f02bf834b3e6cc4 -0xe68174e294e6fa0f954474853c34d78a9655424038e27ad18d4d2de915030a9e -0x3aac54fdbc255a73b58417e5299e336ed074fa7694cd0e1564fa7e973a1555eb -0xbafaf115b717445fead02a88201dac2f79eb2f290282af0278248b1837e00893 -0xb4022882b1ce12cda0ffe243c994530ce5d49018011a006f0afed3b6b9b9fca9 -0x472e9750ac8de560ea4b1a351502b1df647563b4102772a8830fbefd7b424608 -0xceb73d74663c4c96b25ddd81fe30f0317973b8df4c924cf550629a117b5afb64 -0x3ea107b36bbc62af3093ff570562cf6493a71e9ec99f965708ab70e7ac5c6991 -0x5c97f55ce1b361e8f68407ba3854cbf63dfd4b9c7e29af1a7309dc6869b8735b -0x7073a21c21e6e0dbd00f9f714a461add5a153fba30e3cd4ca3febf13f1b03f1d -0xbd9e61656e9a3a87a870e845e016d105e2808d5bfaae1284fde85e18833567dd -0xeb362a9841208acf0800b8d53a19903a224dc60206f232c7d4dc9de4f0d016d6 -0x006afccbb27a66b934c5b203d382340bea3bac81a684ffb8e8c6a7f3e6fc7ef4 -0x4b2a3448abb77671ed701f0ed102a6ec10e246c8e9d81b770c66d9236d06024f -0x7905f08ba7fdf7d426726408dd1c852e3d26a4b27df5096ffe38d8f83b543312 -0x12601e3e2ee69b3ea294ebf13a93121ca01c3d678dd39bb73e705070791a1f3a -0x256a88f52e4e04e5e0e4d68956d8ae3502e2bb3c1af4c6ea053bbc6081db32a8 -0xa17f32b7093ad07ff9da027429d6dc0b06f553d20ecf052dbe9f52ee59552dca -0x5d9bf7dac3346ba63153b473890c743cdfdbe549748f7ee236dacc391f40a53b -0x7a8b21867f3df3b4c8517167f8702a36f22eec2a72cc3acc5f60a913c06a6e8b -0x48fe47cd2518f34ef15917ed5bc427e9e708a757c06dda65b315c3616b2614c5 -0xef322b6ab928d63509d023240bb48314abd6891908a06a647fd7697e53400be9 -0xb590a9194400bf65f37c53245a917c2f7cb580da005cd122af66fc4834d5116a -0xfa00e7486a6d30155fa5e34791ec97530d7befdbe212fe4e59fdb120b53bd55c -0x8a87ec747b6dde803aaffa8983939b3d61429f15bf15482e6c7f0caaf231e1ef -0x269090a9ca01cbde6200ccbe3c7ff7486fe7c0ff1030aaffd459c5af6dfdbac2 -0xe761e0fa9a8c6456f9541befd33525456943088bcda78a210a05a4452f2b7d9f -0x63427e324702d0322b3c6c1624863eaeab3548bfaa998bea60d821966a1eb215 -0x55d3dcd0d6d8867db0db0bde3fa7927ff7a78da81d085de353b8d4f705dd3761 -0x9eee6207d4e842c7de932195d33d561208de0d2c617e43892453496d2d35b2e4 -0x976cf5809a6589caaa46e25430f1816d2af30dad22aae83936fedae820893e2e -0x072d1d6bdcf15f992f8ced65e61953d86e81e3a6ab1a5e4665ab69ae2721522e -0x275d3d91e730ee89765df06af20a8f448602af9826fd82a90ecbeb262b6c9264 -0x7b74c7a1534c5292b1494624ceebab8faa204308654672b7f5350eb3d114636c -0xa1af2c23233875871433634dcb7e6139099a36c0323a34d8de1ee14c46e8f870 -0xe591bd3e3bc6d201a504f8db27b178b40b5a8a7d6e399bcc26d678fb8634ef3b -0x6b3cba5d3d9e01cbc8e7cd32ce891139cde232b3b902d3ec6608ebaf0bf3df3e -0xcf633753e52422df7672b461666836e5374e56ae9b676bc65d407e483202d57c -0xe022b932bdd4633d5323f085749fa6b92512ccd44caf9d635ddb670950f59da3 -0xc57fc9dbffd6b4fd3ec8f41834817e7a260690221c71168e07d065cd13cfc1ce -0xc1dff20d579fb54c173e0e8f24cdffef4ce0ed64e11c5048097955f0edca053f -0xf2045aaab12751353a8f1e6232959106bff39156dcc7f20d1aefaa64b66d9d6d -0x4b375990cbbfe9d5fd87c5b4460f814c470b6aad14daa85f871774c44386a901 -0xdb716617c77073715cd2b65a3d00a5d94f4adf51bdc7693e89f8e3554f2f876f -0x3fb3f3b18cda089d39e96802b2a47e2930b280feefbc10e1df90c974c4650449 -0x25334eb0a96342841d1638e7b9efb1aefa861655c575a5295a3db288308554c3 -0x6650ebca05b4f48aee15b37b7db2e910e8f5474e7ad05ba30bda75cce97273b1 -0x11347f54982f9eb08a2d24fc1d5e5f457d1675c84dc0033d90b8d5ac11519237 -0x0b978c061637af72ca12e98814647f8b3e0637abd7a217b5d6a300a9fed23269 -0xcd0adf266a91aef59d26afcc0907b79910f539a745ff6db86c7b59c01e4f466f -0x8637fd9a25ca0ce49d11b9172ca6acc430b2dbc498b6a2961bbd0a68ad801cfc -0xbb6ad05db5a23fcd8678df727371388bd74b202b1d8cfc92b431f0c97ef010c3 -0xdb26b323b371350e6a167851e367216ebed512de27cb261a0fb522796e7a871a -0x2e55c25acea3dc3b663143b7396443d46c25eee00162b5eb5f1f88dca7fb2f8b -0x3bdf16221d625d3cfc58d2675aa387896fcbfc21c5f5291c1acfc9afc2ffa701 -0x70c0b01c0553f66871f4d1608f3638115dbb73cd01aee4433ad85792c51a0200 -0x169704abf5244e94465ea1d8a40b8b32f75a58b47dc59693d2e9c7a75dcc4485 -0xf17c57c1bb947d7969c6b81cbcb1ab542493efc5b19906732751d7a3a0c83a49 -0xa6b33aead98f43bcbc47b63a5f787dcdd2740419584e353603d5b422a33b93cf -0xdc0f3011513080998cfef3dc1e794d06286a6164f05d6ea4e2b094afca707109 -0xc9f8983c4e713e248bd326bc75e27b4b690acc8147b980c2fbe22e9e3893ee95 -0xde32dbdd36a6bef07128346ea06e354769ca47e28e698a403b32ce0b010eb204 -0x738fb4418da378dde5e5e42ee7fedeb84383625601b7aa0f2a996087af72d76a -0x1a63048f1664f6ffee3211ab911e8e169507bf6bf41c1c85c4ef7ce871133425 -0x780d2d4c40bb48873691db130b42425378d3bd9135d187d69bcdb3b74bf65ac9 -0x3166217455fe5b7ad7eff90d97a198d3b6d16f8a1f7ccbac4d6f8612e99dd391 -0x598c91ddc64df3a999100cb8a5741150aa41955ac251112612aa2a089fdb56ea -0x4804a3daa67614edbe20d4f74fa1899c6e539f19f709b3f0bbcedc605c7c0be3 -0x013fb7d5b0b741ae6af451e143142d9ef83e596038661470bc20fc3da7cd1ca3 -0x2ca86a6b4096afab0f06b15f78f2e711569f7e7d85c0edcf1dd29cf1f554e5a3 -0x83c1933ef04527518d2f90e1a61da04bba4ea3b484fdec02a8865719786d567b -0x0a158f7943635330dae77bf21a9cee908c2a3c018ae32ef3d923f7cef5bee77a -0xdb111a42722a96daa3b324d50db556d648aa6e6b6e75b33c673359c7be7fe9f6 -0xf6f159acc53429c6ed7d0f70dbc3409af0146d9b7bcfadbde8ee83341f3de432 -0xdbfd6ec6c8c3386a0c2f8188f0acce7b73d46401348d35b13609c479b381e1ba -0x8386094d32ffdd30d57c7593aee172f13787edf90577e7de0d005371cd45176e -0x52fc70aa5511216cdee7b733572c6f1667ae53623fb4857712f2610459460009 -0x1015b07fb48728fdc2d919eb21fdb12c482f0e1156f40fd70bec7b8681d132bd -0x0e5ca8f136fcfb847137b01ca4379d4c66f804f221cb69dcdf61e56413cfa2ce -0xed08f80035c1aff06e7c319ed0c7db6e5adda9a0049829a5f8291e8b5557a299 -0x1193a70a10c918e6ded52831242868e4e303e60af5d6580d2d382d1fac141e34 -0x2d7e406fe2d63f63a81b1c4802b197348ea81946021c6aa3e149c4a7a84f3b1c -0xd4ab8d15ae970406a6567ca85efa0625ee88f9696ead0cbac10b888b1950d073 -0xdd52e49fd134532cdd3f1ba58d06f2e44fb8cf3070735f48c045b620a725d575 -0xf1e2a6d23c64dbf950dda401869bfff732202529d78ef59da7e3674cedcba686 -0x9f71b0be03fa9827a33bc89688e31e8c260cad1f7e1b8b8a0b835fa0b207519d -0xf76fddbd335ee406eb0fc628150d3a48e52d8cba4da8f3dfa623154c5ac267db -0x00c2e41f29c3dd2a7180b928f16c217f136e7ba86b76f81dea8a01122072901f -0x6ada66da9e14757af43fd6abdaca0b4e6ef344e188775a2a08aff78e4fc1fb5a -0x181a7837836f4bca24886d1bbcb70d0eb28120039b2fa61556a47000ca233b81 -0x7fd639e19308a45ac4d0256c4f235f1dc5645765e8ffe6bf8e2a0b93337a9ab2 -0xd7c9f33b66c0c4595f2537dd568101f352a628857e1db876ed4e5016ff5c840b -0xa500582ee8e1b488d0776b2d3293a46d2a91d6e92c242e65564789181f7d5b4d -0x88c71742afc978cec2f95120dd530beb714f29dbc5c3e1dd7c839ee8f3ae1392 -0x9868d90bd21d23911228d676a4add23b9768fac8997215b4c16934b95f43b6e9 -0x189a327dc0251767ebce035a0f53c00c85cb12dff03a5938e72c0973ec47d03e -0x081df0515c9587d0a73fbf7cd45addd26fe8c163155324b16e68426f31c7fc38 -0xd955e0ac6774e08842159053a7fd94e8cd2458bf1993f095928fceec53d864c1 -0x6179e980e9bbf57f4d4158c3f2171a9e0ba6e5080f58f7608bba70ce4edcdc29 -0xe6f51da1cbe63a77a28b96083e12d7339b39cd74eda48eab0cfd063aa301fe1e -0xf56154349390d3c27e9477a26cb12c4de7a8910ee9f4c7f3a4294a948e9ca3ba -0xf329009774aef65601b26023b83f095560eef03109d5ae851b3f93ac63b7e360 -0xc6cb4316c1e2178af1b1818f5b2180c926176f2ddfb0fb6297d6b627bcbe39a7 -0xb82177388dee0678abf46a922bafbcf339ed0b26dc4e93ca30e48a208f50ec86 -0xb78b0660effb61add51417094993820696d1b08008d6efeed93ae23cfc875b63 -0xef47ecdb8f613354d33d3c690adecebb5d6af614e8680c5308215b8769f33861 -0xb6da8b9ba36df0a086a3fd504b628da790c293d3580a1421ba05b40ab50a6a49 -0x22f7d85791c7669ce8902c081555b84e7561ca3105eadbb3eadbf37f37306d4f -0x0bb84c934d5776cd828a20401481a648676586e9a0b51b03e7c041a99296f454 -0x8d64d08c25165a4aa85e36bf57232dd6af8fdf35bc3dcba0a0f089bff0248faa -0x5990114d2e79b87a42e6833b14e54872400185285f8555bc238c5cf3acc982be -0x6a33be87c839e4300051444b6ce10337bb4c711ff4f527e3e96b242a9882becd -0x8e1c060bb27c935c560087bdb1a5e9335c5deb30b24baaa5ea325739090646b6 -0x04346c0207ec6c8d730975ad93b981aa621461c90c60b4353c761917551b7987 -0xf4f3a149b1d40de3603b29a3bf93998b61469c7f69555c03f68e434ea73f6b1c -0x8d3b74f00528cfb1f19a776216b9d7ca659bbc68edf441a0638c86919741db7e -0x7ee508ef650f6c60ff9c2dfea811f049ad4e626ab631e016c38ae227bdd0527a -0xf717ad726e713ca5a63f5762585d72520391a5fafd5077b8bca55e4f0d3a44fd -0x30b9c13f11734f06b2050f585b03af47a85b89d69a1c4f7fc4c9eaf8cbc0bb6a -0xb95f6c253dfeccc054f226a74283c53e1e408ef05612ee9001ba0fb1bdfcb580 -0x074fa8e4f910a79615fc2d7e8728b5d5fb577359aafaf0cfc875dd3fca365c19 -0x938f5cf60c986d97194859be6db520f4c45bb3532fc7aab33acad99eb40d80cb -0xd17c35435b9910e2770789ede2989dd1b3bde7e862a8815ad69f8176b49174ed -0x89afa84a39f75d5a9dd118cc03f2df289976774090db86d39bbdaf0ab6ea27d3 -0xca7be2014bcd4c239f5e3c261940cc786d646af7acd434f54ef1f9253f319eba -0x2e2514f26af347eaa4d320f127c40a7be9f09119d14c39985301b83bf4577080 -0x4c03232d00e4cfa54a7fd611e55f5d566ea8e7710e6c21d644b85fd69df91df3 -0x994eecce2954ddb7c368284a7b15ea3a9553a4e04ca10c7977888bbb71938af0 -0xe5344529b9742fd90b182dc66f252cb54e289814e09689155dbfba0e97fd3ed6 -0xce7cd2076e93ec0f14ed208f6bfd792d8ea0220ae1bafc27dcaca1b7fa49c49b -0x7fd46f969976887f73d1605d2df9e6b57d855abba5ca5d2d08379b608fd465bf -0xd4d816a0509d5dadba3f24d74ff0b2e3d97d6e89f1dc0d2b47da3ab03fe4e950 -0x5342f7fb916ed906efe712fd4d70ec8df244238a276ca3f118f05b1568d37b6c -0x539018af47728452cdefce8d4fe70a7b3192e8d3799c71219be523cd7f249534 -0x47dddd5e58200c73ea18ed38b6e00f69b47f705a1165c8b561b40687216bd650 -0x099741ce5ebf542478d9cf989222a70ec9a84721c674f207486fe76f7d1d1c48 -0x9559a2106cfacdf29a090f67d6103deeb14867bf530900a10ada985890b6dd75 -0xe8908dde5528d62ccbe61806b9b1459d39e8691403d8bca0917188cf36826b57 -0xb8b993461ea8d9aea7a839dc5c887c7147618ed4ce0064db77393f25c1126fab -0x159b51ce0461e7453d1ce8a909a3e5b3085fa12aaa5d1b4e7841d0b5065d02c2 -0xd75ca7f0bd79485de2cfc7f6e229d6aae5ab22199e6e5b297fb7db9e1534e212 -0xf3d272d3c7c49ed1172a9004de1070f7de3020b86c13469cfb29cf175713b92e -0xbc706d3978de6c3d67315248d16057422cf392ddc9b5583e93a551922463858d -0x882445ed70de85445b8ccbf75cf41e306ba7a2c2e90c8c03ca0245f40c02c1e7 -0xe662c56005957afc527e8c62a5b50807555610461e03ca4242b3443dc73a940e -0xa976f494f4b779593a2d8410ebade3aa51c8e402e6a462418adbc2565c956b0a -0x82331b2341541c31d72a84cd3f91328d783e000c56aa9653bc1ebb80fb263687 -0xed85d2e0e9ab1042994415944b2b5505b79b4f93f8e75ec20bc8ce25479b5049 -0x093fea1e8aac904203091141c96f40d380df9d2be1a7f3d8a4c6b324e1df1a88 -0xce673129917f90e243a58cbf581002df91cea31279c3effd32216ab984fc5f57 -0x22a5fecf1b29c2e37b2d768fe2f08d61e3487a14136df301f52d4a2fa0c1fd05 -0xdb293825026ec351ef3766c08806f007059d78fb1398eccbf3ef07ac042e0fdf -0x01f3c01f6a2aae1b299f4934918f6872b3b51c6b015e6389232cf5b34964788a -0xd8e1420efd453154437248ad985ebc383acb30d2bf186bd866ecb1b08df05f55 -0x2d23ece4f6dff5fc032f5acae15655018c3f296f830461727ca20e78f25959ff -0xb13eb8ee95714e76a151003528d3678c77f76b718936632fd3a1a6d2897a10ac -0x9419d835145db1a40ba17aea9e008825ccb4b749df3aaaf3fa8372583966f628 -0x29179ad17d2f3f55e35f7bc9cbc8abad7adb484ec7822cc7e33cb60c42d5bbc6 -0x34d9c1c3d7c0062a92bb334c699264ee9507db09832c077120579d48c7d1a8a2 -0x7cc16e3b38a0a3065ecb473891a3d51a8bce840aa6f380d629a9c8b6d84060cc -0xf233114fd7990669bba84c1c57a450e7aafa349a62be2cd9c8d72bc595cff0d2 -0x29b3c0a16bc5c549d1ab0f0d2ca156fc4d42a220bb5868c1053073f5d7b40026 -0xbadb5d0fa728980c3f12a0cce56538ee8e2310adb9837f05ce5bbfe177d40b76 -0xf5ada508d55c0fbae9980e40aee7fd57f594e0c010691bc23433cfe90912c4e9 -0x32fa33ea0cc5ee4cb04a240a09922c32d665b0e2ef84770565ed329aef9649f3 -0x46525eaa8b03ef4cf29ef806bcd03763b86d9db9793757526d2337dee0041242 -0xdf17d84a7b44a2c17ec646400697e78c191fcf49bd0c517325eae8fd33acb8d0 -0x2028337d720680569871931bbf2adb63437f33947ff85e9593323aa51e7a45a8 -0x52112d7de2998cb0e8a2e62c2542f1389d052b4e58a4185ff954c8bb54c69a4e -0x0d684d700599dcfd4a805df2ec4544f961078807b113a3cc38de5bd5f5d56b60 -0x84fe5bd5986a70b78dcb8b321a81179bc771d2defb739c4a864c3e8ce348e8e4 -0x7eae6ff23a97139292c9e87e9828c218a53ea8369db0baf687de1e10ccb6875c -0x4c7f23a43dd8699a04963be85bee368564221fb286b5b39f5ac6706843a681b8 -0xc870191d88f53586b69a457283f27230c5ed335c12c74a892739e1833d189200 -0x3e9d88c5d103e959f67a9ec0a7074974e3611be02a37ce19580642579d1e4ecc -0xccd6c0648419f818323eb75a0a5a6ea63c14273710e2cf734522ce6a8be85e50 -0xdb282ccaeb04b9b92402117da7a5a118b735aede625d03757c5dbc71e4989836 -0xb5a6c076d7d8e6bba99b6bd942a627123f469e76bec95874b7cd2f32ec2a4a67 -0x6461e90feb794dc8deb5a774a08b3bc289363ce63d7c2f21687f868a6a289d2d -0x952935cbc3d926350faf8846c2d1415f6c0f9e12f13400e34cabefd622bb7b75 -0xb24794afd33147c86f2575a7d108771b9ad51bf43f0602d9b4cbeca92a596942 -0x939faa2df04824ec835286f601c7d6a11d52cc9c2c427bf1743693f6dfa64324 -0x1c1b20885a7a1829c148d639da219e0e6873d834010ce31f476c124631157dee -0x7fbe3c4ffea9a5e05be0504be87906f6a322b2a58dd5fbb40ce4fd8cda0dfd38 -0x532e6866328545f6fde4b65683a0780ab8ddf86457ad8ff0930baebe2bbeeadc -0x57fec9d5d7aff6f8ce41d13951b1bb36d89f77cafe991d23f7a5b30bcbac72c0 -0xcd970022b082c8d99e6b0d3a609f74847b06841fa1840656b33ce00e040f4e98 -0xbd051a12c8b21b5228a7870ad6c1a5455904d8b636f683584a173c26634c4f39 -0xa365a71ba694ea109e5b2cf570209fd366752120a368370e4f7f02a90ab58941 -0x6698d9cdcf2ce6d4203a94571ca6ff9936fdc9e3bde3c8947c5b42a79a9e0f3c -0x937a594cd63ef43964d5f92c75cf52ce8f692a3bf19ae0a4b6511b611c8721ea -0x356bdcbd57ab784a90e5803586d3cb269dfbf2da8de31f2a1dfea1805afc96f0 -0x9583737a7cc6686659cebf284dbdbdac10a0e8dc252676eeec440c8ccaec54c6 -0x9ed8045e4ec38fe6e3032097c608d1b091285511a2c1c20c14080ab049ef58fa -0xc9681de94098b5b29fc353a17e15cd8101695971ea52bc438454ca2debb39177 -0x4497d8cd5525486c74a0d0a32cb0450b533869b8259a6f9e6e94739afde28ea2 -0x5e9409a98bcd835ec837dc2ed3d7edcff1157b15042c2c45fe5c8842a45066dc -0x353c521b31a4bc7a35b7f49d9b130ee1dd05ae59d293cc51c9af494220c5d51a -0x0673a08fa953c1cc032ae8dfcfe8fb825154aaa1e9d4faf6de5c472dd80396ed -0x9bcfc8da429fb5d674c6bc402baed3ca60161c43e2b27dd3793049f032e58d98 -0xf4ddf8c755b3c23a9222d617f3cedea1175baebc2f9782e94ee3aeff6cc76c92 -0x5e465e3d6b71e4f0e3fa9f3b252424fbfe231208da6891b1fd42865dca267c93 -0x29ceb696f00423f35f4f38e210dc1ce92ae439a35e2460e2d674d2b6e141bee0 -0x064b8c8324fb90d023254e84f62396701660e1365e5c0b63c51d0951f978302f -0xfc563bb97b84ce5576baefa772bb2a5f4097c2e881768a60da0efeb4648e0ba4 -0x1c2ec3e7d1a62dcd86c305698e767b317defdf0cda0c2cd37258b312f342a8a7 -0xaf3b9874bd14a873710fef9dbbe9c1fd23658f325a220cc38d08e27d8a64f942 -0x77512740a3a7de926ff214109998e799b3a51bc08a6c1501eed26ee3e2bc48c0 -0xde1c5f5b4e3bd4b54634d4bf9a23101d5f0731a098c1ee814d87004c5f6607ae -0x88b90e2a1a4d0f3eb0f99985902c44318746a262173382b4f5ee5b281f62fcfe -0x66582061c80d31ff92b356a678a5f6ea731b198d6be53ded3031e3e279c39cb4 -0xab9691f5dcbbec733418a32f7a4bb9b44e0b439d938f607d42e0e548f04746c4 -0x9ed276a49e39fd5ea035f0f20181cc7177a9534ce4032ce39384823501204c5e -0x7d9279d97532954c57e2533370cb0a98fc177ab34b0acf7f27ff11bf6ea9cdaa -0x55d1a53bff970ee854f03aa96fba4ba90960e4ef9a8e252f9e1c0a8488edb5ca -0xca7bef76888c8d263a48c57ad9504c16bdbc878feac9dd45c499c0f038089e55 -0x7154695329baace522afad64f98ccc227980cc9adbd76293301c38b4201f3677 -0x75550e0b32efe7cbe5c47a8d2ea7c06df9c30ba9e8fbd49c9bdb36d77a552f37 -0xe8787f8208b57c1408c450c88718849c2380f5c4d6f4da74f6ca5ac2ac8f9c47 -0x9b6480928b8ace24c3129e5a47e3bf207e0d41b74e3aed263cd40a64f7702cbe -0x62a9a5b940cd5b71fc7555a9c3893a5591069aae2486b48da5bc396840fb1b18 -0x0f4cf1066bff69a6e5ae77b907f6a7c74d888912bfe7d65c9a42c7618267e7c4 -0x54d359c9576e84a0a663dd0a10533c5cf4b52d3c30934e940f04692ea219a95f -0xb22df2fb6d28687590f39c65c2e8e3fb7d78e881e5e58ce72ec235a1d0c2f1f4 -0xda5cd527e928f54ab1dd55d772d22259a2991d4e66680f0ef4759dd7405149ed -0x9fd55aa20198f1001260149c0fe21a661c7282cdd19576f4cca1868776e0587f -0x4d67d5f127f506da4d9afc7cec384c3585a040eca5ba9eb187df50fb74391ee2 -0x108bb9d59c02a1b5627635c9a95a490055f206efe7071a1e62c2299d79c70a5a -0x9cb78b104701baa5f295ff2a625869bd5205d8579bbac677695d54ba01d47b3e -0xe942bcc32d0f000d6bc3d11536c25be022da14ada5c0a20f27c596ae9ccbd3b4 -0xd350c5b76a419aed1e8f20dcc4236a1157ad94205d68054cce6dc3334a5d2c21 -0x84b890cf2f53e1f3c6a522e39a934603504c9246f114aa0adf60b1326fd90d51 -0x8dd722b989626e56bf97e62d3542d5b50fc6616acfa9d08a5d04acbe96ffa085 -0xe4d3306613e765bbd8a96c128ed85b7c353c0eadc80b83065cba056395cac2d9 -0xa7ad68fa2eac2c8bccf09d39edf0798dc7badc0688ad41c0ac1367d8ac32755c -0x1f94000a4299200c08e36bd79ac5f193f72bdfe3abda6307aa1a096420574d5b -0xd4c7f170b17800b6fc6e355d0efbdcd11195d06f17227eaa9434c11487bed466 -0xc6979d2026be9c846a2e0068fd2ea7721cd660f0a0a599141abffdfbb9fa3d8e -0x9cb1cc121c3a51c9779ae4f4ac15b7d31a3fc9e108324cb17ac64cd9aca65632 -0x4505384e2c32812008cc2ecaedc9d93c3fb7b38123eea4b778f5a57ccf372b73 -0x8790beaaee4665ed2456187c9b0097421f035ea73e73b02506e22d7604a25557 -0x900cd161289efb6a469b4a0f415c4e499e6c01af830db366ac73e41f8479760b -0xa24feb40c0f29daaa4c9e6ff5e8b6cbc1bdb7483cdd9b7f2a9ac7c7fd47b0d30 -0xe23da811b1e82522a75976bb3d265d1b9838d5e95225b11f81cfaa90810f0b56 -0x27595dde2c88c2cf1af16de1d4c36a05ef5b9e57f4d1d742bb610fadb2325689 -0xc977e2e0adedcf893ac7c25ce4935a7b9535755d19bd785bd258ceed970e247d -0x75661dffd93f3969a56016f53a280ddf52162f4f22da5822f44453b70e59bb4d -0x6b4ca5baee7ead0964416da0617b9f7cfecf441d0d55e1cb50c028cfb71af5e5 -0xeb2425190c8692099c5136cda17f37f6401f27686c96125f4593ce7eb38f16b2 -0xae8967964660a679cd370efd38bdd8981093093c6976903a9039aada7a7a6f29 -0x88d078f75fd120a7f694360b0c18ec272324a1b8687db1e6491aa0997c91208d -0x2c6b08cc4b081d6aaabec375382d54b2260dd7fa00e3d02513b4832a9008d60f -0xf2c7c96998fa2126b03b7219b8bd88204f26de4586d679aabf2206bd247f6147 -0xb22f366f261904ebca61ac86e13cd61e0d6c61be4771a6e54e217750f6b8b227 -0xcc6acc0305fb01f8a67ad0f607013d6400dccb189dba92d3330f7f8b3a47de2d -0x7d9f2484d879d0367529c76c6058c0353ac327d38b9ecfa41cb09701ea4ccd38 -0xcb9b335fdaf2e1ca5e36bcb26159a372fdd06fd7b3e1b6a3205fc2b14ddced78 -0xefbe75c2833492e9ca996bf363d028688a647f35aa628a513a82cdf26b9d44a2 -0x9622e3f7cc164dc974ca30ffa9774a4bc2d122351c6ce9f7e5620d6236a5f173 -0x15280da9c5d86748991be32374b19c8774db90dfc10d6698ef1276aed7692914 -0x96da70c76d0f6c07ecde75f289773af110570d1318a38d6de882fbd3f294bb32 -0xb45b77df47c6a9a2fc25b15d380cc254932909b9d611c7cedde2b79aaffda957 -0x6587d1df009b7008c3407acbcb9ab6754ffcc629e480e8d24aa7791ab646215f -0xed767bd292ff11046ca32c10527e5335ee288a3edf3ff1a51feee7f6344475dd -0x3d216fa2fad391322015b1c22f6038925ece93cc0e12247d69b075edf85e3a66 -0xc6ab98b059db5765811761f723976b721c3eb6e90a97f5ef7d4f4a4808d35ed5 -0x0b39e5a83a368352bfda5738d173b7be521d84e6af8880a8b745d176137574c8 -0x3f612764311b7297ef02f4e2a512241119d19631e2a7bef40c045ac10b54bffa -0x6e96d6d06debe9b6f076000d4aac12771e63a6b273de1c5b50dabbfbe889d524 -0x06e15dfbbedc22f46c99760717429f9eb48bc6913de79ed7ee893f6e5771ef44 -0x8a3d9e03200bedbb62d068c18366061796640f4476813e9d97a97b6856cd9d36 -0xc46dc077a5b3d887fb6faa6113c6aff0ce40d0f7f25d4008bd211bd5624f154a -0x03d4628bd54269044405a9598ae38d4aa8b8603ce877861937b0f289155a0952 -0xbd728b815636ceb67197edaa34757e896e58bcc9bc9ee96790bae9007822752b -0x0fe849444c2dde99b891f4a9d29972b918f53535aa34a798021ecd0153d79edf -0xaba9aa820b6660f68b77ade4021fac823f9041c156b7fd2ebe57a77ac41ca45f -0x28c6323a4960e47e005d55d189df5f7eb812a7ee2e630098811df7c0a5851336 -0xd359d2c029b8ca7b8888de75c0f23f4ea3ec84975f422fa6f4edd4853da2a3ef -0x25f2a92b0c689875a270a51e1cf6c822da966eb5b29799eaef9a809de9472d7b -0xdc56664133fbdd504a85f798b3affde123890227cb673825124c6c541021b864 -0x619a9caa3828bc20c7ad8e4633718e73a85a597db65cddf075cfbec511ac106a -0x3d80416d6ff40e864476737d1675ac4a604a569772c9670d68b5b7d35013515b -0xbe548c2d532f4c8c883e40f2bed0c561d1fd54499e36d7526326bf8f60d598ab -0xc4bed23d24ccb4bab6c72138635dcc9f8072bc6fe9a68ca59db3349a0c49ffa7 -0xbfd56f96f6d4c3f70ca759ddb8c869d32da322270c4bd94975518ca9c58dc607 -0x88d3b0f3ef93a3703fa98a1ef58ad1c62fb7b4b068eaa2bca44212690776f565 -0xf04a1ca14cf49d352abf690c480c4d946c9faf5758a3018a9fb722acc6a2c97e -0x58f871e20b73b90a3ef0d24997ff5a6ca3431c349945ef5a7bb9894a0c4294e1 -0x8843c53201887b94a90bbc4760539d73e4331a2a701fe47ff5be3a94649d6831 -0x61d965d36b5f2c40b5c01e9b72dc6d91b78ec92a497243aa9773d381680a4585 -0xfef9cca79510d7aae51dcdf564a34ac3adb169be4d2f459a3d37dedab49db13a -0x5e2a710060bb95d7228520c1aa670b5d580c7c0cfa3bee113a0a2143db69eec7 -0x0d0b60e5d4a30dbe77b8286b6aeb1d03cc9d2d8756537543ce7b372227d36a60 -0x59c034ede584628ca34205c6346a922da4c8a72ab5289ec0b2e0e8d989a67056 -0xcd1f3918d37ca057a00e29c8898319678ff51e334e2d0ac6e2e4f297eb1a5629 -0x73607b8042977617ea23cb1b595acf0918de46266272331284219db4bde3d8f6 -0xf85a190696219b347600fd2757b1576552a36990a2ca0a429b9d2dd04bb4f7b6 -0xf7ef0f148f46ea660ffa7677927c8e3725248ede78f0d8ec4fd5e4309b07a713 -0x410cf348e764c0dbf23d2c6f4b6006a7d244849b428e72d096726072f38c3439 -0x5c4f6b3abadd193a64dc54b5850e086ab3bc2e818d3724c9fc054e093f18a5f1 -0xc0b3c986234457a7962610b0c4df86bc7eb0ce9707d285869177aa67323594d2 -0x4fc584fc6aaa2bd447bfb0f34612b10e12fe1e37768d5b24651a7e1317ae1bc1 -0x47a2d218628ec64a422c7fb659e654e1e99a73f91cc1d36c6834efa9cac7a6f5 -0x5e9583403aa7e4877576dba7e2765ee052f3ad5718e9bb4c740f7bc99bc0b50a -0x1d4a7fa60995827778c499b59ac07f4b59f8f350f0d775bc3630482adc426ff2 -0x164e2807a635aa52ecf04fe2d6c4814651022e548409c7fc6965899ab6a8d3eb -0x04ebf583c13008bdfddeb8bf1321526a8961bf1adaf0e678428be2bcd78eaf3a -0xd7abf102876effbd0ad3a0f3c58da03ba473e235f838c43ea2537f834c483296 -0xaa19e117a2d9e7e7420bfef186947738d686b8d32b350966f9e2d3239d7aa4c0 -0xa9b8837ab3b0c65d37a5368f68130dc8decdb79e16fe6127e32eb17d94cb3373 -0xc98fb88b117c00a97eee16c9ce7d0a003399d39518480c347de68274791c1de0 -0xb1fc35cfe2057f4881934c45035bfdf5b032393b87bb1e77d00534f621a59a78 -0xfb3038003a30eb48a15ab6ed1349ba5c7acd269b0acd8e9f68a9c3de47edf5bb -0x92038967956eb5e0061c78b5647307291fd1611b7f2ebd6104c6069964419679 -0x5982a84257b462e6b264dcad9cfaa24cd13c220a460ea3434cfb043c194ae945 -0x241f19c6531c371c91c33ab23a8f51bf3f94487220368ea4a295c6a8ce4633c1 -0xb3ebfc2462fd47e3b91801a5bcd14f4b0c72d32a95ae766eb5f52aefdbbabf70 -0xda3159895e042d88aebea82e3aff2a0c7683266d9e77e2531d8e8a5837070c80 -0x3b528269d160ddf549e8fff53cc8991746c34444b26f4e0d847f9857edc8216b -0x7639c5a611da9e40897f5d1eb04690af089e1b9ce40cc5d4867fe172a3e947ed -0xde28c7f6390423f0b94b27ee01bda22a1b529727ccee23610d872e5800f9f987 -0x3a4cfaa1fe098acd9000e7b19191d99db58ac75d8b123d76ce9489f9c0ab9f24 -0xe0a51af56f91b740ee6e8694cd0b755ee3ae3e4837d388602b71005f60d5c233 -0x0379244820740f59b3360bc5e5c1e4fa4d1cd90f2557a2f56cabc6430e4019f4 -0x6d9eef05e5aca04fe1a80a26f1fd1563b2e010d321e51aef2444d4e7f47aefa4 -0x4529fd09563c0dc06009e3b9703541df391cfeb7f14d0d034e1a1d790befe433 -0x8c0fd217f6f1612a5d5a96627c62a27bf16947d83c948955c91f0a5834b4eea8 -0x5350a7ba8cd8a0a80a6fdaf9c272033c4b579f9ccd79cc75c108712b22a9cdd0 -0xbaa387d06833ecb4db7cf3554afe6b796537c4b0d5b590f5a3f540da96e45f97 -0xb8a9e7f72c4b1f69c2f100479674fda8e2f7f80c9f4151ceb3644bb5064250af -0x9946980df80fcb1ae8d0c108a42bdbed8d2766c3f3a7da6178dd4c5bfa0599d4 -0x768d60383174650c527b675d9d59af22663f722292e953550469376f8fe3e638 -0x9718444d3f3992c19a1f2cb38a1058e35d19508d263f0ef6712b49b4945176d5 -0x61567d3149aaffd0a3fc3d260786fea7365f7db34acadfdeab00ea69e1ea11dc -0x262b539e2308874a06b7cc3255a4d8494321ea6c905d734f4cb10759629b19e1 -0xb24da3a54d7ad9d28c57b060852f02f6fab220ceb8fa511f04affd7de3dce276 -0xb9186abaa85e5f61e3214f954a9013631f407a1a87f4149d35681ce6e61ae9d5 -0x3fe081c5a778c0553d8174ec74d16c8d5e67cb1ba26ed94eabb1571f1241ddd4 -0xfa57f83eca11259e4d0c70ae1d66939d0c945da8658acdf7a7c5b677e7bd84bb -0x618fed1d351f16feb204178ea9e4e79c6a1ede9bfc299f86ec5c3dc7c40b4788 -0x44056431e323379b6431e2c984148dd828c53ccc101559b321bd4eddea0784a7 -0xd9530bbfeb4146d12b39eb4bd6d6d3f83e3168a6e7073f5636a162a119c6d4ec -0xe6f3496cdd2a8f62f4e61511487a6e7ee667a571777c70de0190989c87ac5369 -0x946bb739f73e29383d50e49a94048418202cdf8d8fcf7d37bfea5ed6dd7e9f24 -0xe6817fb08de85e6908d90b6df858db306692b2886f9d46e5769de76d3746c995 -0x4b9bff75e2aae1014eb02095612fa3efbd847b505bb2a6d462dda96a9c256d96 -0xbc0997ee37d8b8d632e2c98703cffcf0f2769dd2938e6c8b050ddc0bd63a217a -0x99f34cdce6bbbb799839bed2a988d2c0b1a8d38696ff4696f2dfe402b9b01188 -0x7a4d7c4b31fd181eb6ab74ef7120942c3dd818952db84b8be12a072202601010 -0xbb8748a9451c52c553dae377a121be8b46acc190e945ad2e47155c9e2de2dee2 -0x20d515469f34c787aa47681fae3f56cd838bc85d0b6567142459978ec546d7c5 -0xe34d665091e2d964184374adabeffea309555cc8f4741c2a8700b542f3c1ce07 -0xfd3b1f6a7fe29f5357382711c421016967fbb9c2d4fa70ef2db4749634a80220 -0xe441d178e5b210e6de410436717ada6abbdab5392d15a48cd90facfae5e88fe1 -0xca379872813616545bcc165fff3e38062a049f6d9b1af10130f1cb6171242e9e -0x24100a689746165574ef77335d6e5e5c5c9ba8f3f7138d99c03ccede02855927 -0x888ff2df7c4bd9118b0b9052c4515afd9574abde62b7a359b2f1fef8e9206246 -0xdd43407455e1151564706388d225bc2ddc8f2197066f61214fa2e6fca205c9bb -0x0218b3abac55d7654276857af02c054d588405e8bfdee6ffa8cbd07b81a3ddc1 -0xf8a35eac01fd2a0f8175e95b08d5093467678cf0cb18a7c1c1afecd12eb1ca44 -0x01cde19420c0b9a6c6819c8362256d14468c4dee28b2e2ea628ba5036319d0f6 -0x20e19453fb623c986169f89309b73f8e197ab51af98f8ae371cfe8d7529d68ba -0x21419128de6418fb97faeb6a3c2e78d139d91a3aa148ae0abb399e3703229e33 -0x0801d52d7172a778973d0df9a8900167a0f86681242d1e7ce7c9f9535ebbadec -0x624c96a96a040e473f8f379a551e1e1da7277463125c8835e90aef24a9f8546f -0x9eea6e7fb762f81c1558dcf2632c86fe026dec0121ec74b63f9efdc92c10f5ca -0xa400c62235ed14aab9af9683175298565adf9c17e3094559ac0f25d4fb5a9b05 -0x7032eebe73fef088c65d2cd7816f7fe22c1dcdb1bee9dfa4ca46b160cd3c6c34 -0xd26dcbc6599815e6de34eeae98af6306b942816e63d6ed6ab46499f2189cfd72 -0x66be7fe29a027e1297cad606886e9b9c9e9b1f938697cdc2be7ac13d68977dec -0xb383d6883fe8085ecaeea621e58c14ea063b00fbf8f3e5a79723a2b86459cbe2 -0xff69e49d20ebccf2d770ea43f710db81324ba045d474a13e21f3c69bd840b6ab -0x75fb7bcd55c14a111723499210434d7ef54393464e9d9ef5e19438ae098f0823 -0x37e5a9176ce46a8a0050537e01a60722e7a523a606600fe2dd8306fa64350f7d -0x0024d3f9c4e9040641f99052e26b31a43b92b5569f2077c6376d9197ae215521 -0xef7889e230be01bf6e4a84f3e7f8da5dd24e1b20b577f8c5ed1545714281c104 -0xcbae3b826596eca82187ed21006934f7fc2171a17df0af1b728a27f7ca93c43e -0xaa05ad0fa8ec4f1b3d217e4ab33802437bc2bd0c130dc31dfa603e3dde16706b -0x484c38597c3a46bab0e85d23b3a6cbe3a08d8713a086e7d05d3ddda3d37cd7c9 -0x702f60c0da85f0bc96726fa39a9e8b1ecf782d6155c1b808761aafd9c0b71be9 -0x5809e17161277c24a3b431cbd1294817d868efd76a8667de6a397980958a3541 -0x0845c2e92811654cba92a0a1b50938bfcc56b85f6539bda3ab5aaa8662ddce78 -0xfd0368db53ae6422f5bb814b42b7660a8bd26a510a463994318151101aba5604 -0xa6a6912f8740df5c5646d60c48e9dad06fec26597b478e6e4747500ed88a305d -0x94cd40d62a5b5bfbfc0a5725ca3cd597286d0cf958e9faaf80b0707f9b02f99d -0x5aa7e735337a187c472055d4bd541b10b06bf5239ccd3451a89876291734cc70 -0x8635978a89ce5f36fa09b3417b7614f753d129ebb6e7329566913feead8e2043 -0x205ce617b3d7f026d394477bb3e43ba8e3fa90f05e8fe91995194cb76b0cea08 -0x2604f14d965fd31972a5eec518a69f4329f210e745b4174d3375b07f71c59d8d -0x7e726e080b9479c564fbb77044fdcb17512bd50878786ebfa9e8e5f3f07ebc07 -0xccf81fd6268a32665d01fdb0e2b5584744485ffd878e4346d7edfc8a76042309 -0xcd8e561474e9b4f274ec4d386a2fec5e83ee9985d061e32ebbd290c18d355be6 -0x4622c6360ccbfd564ab528091da4db1d3103500cc1a7aff99aafcdf3430a8f61 -0xd0b0b4a8f5eb8b0ed2d8b105f456cae33c9b7f6247b551183f0464043edcb100 -0xa0f90752d970036bf0d7c31e59b306b6ef5ee24f3f5095e92847478bc6ac2e86 -0xf3f384f5ab131cf105ff688d32427ec4791a9f9c3b7a61f170d54c5893937dc0 -0x6510b1bcb862c66461d700b89f75a148761e6f9cef195d4e1a7e09f474ccc0f5 -0x6b89ea4cf09d6c0b0b53befd69a1401dc4d5d68a798568d03ea3af838e00a533 -0xa07fdf816b072d42c3a96c2374e9982be13e1cbe5caff8df9a17f0116dbe0ee2 -0x05b467474f129ca7201b661f4bdc790688ab4e097100b67242a8b10db298e28e -0xee6fc898375b2e3fba4a30ed1bb713dbba2fb09ec04b8b2d9caa63e773a1d05e -0xa8da53091a6b3b6e95c585afbdac9bcfb6ebb8362c409b113aede886e34e5a43 -0x8a9615ebdd74ba6c68e11fed56a1f4e294b1d769f62c2273d23d5d74ee600503 -0xcce91b4eab18d39a11dd80a554c3f05a462ea8e47a507c32b6d258ed2253ba54 -0xb7891cfe4a88babfbf74615c51c5d9bdcf1380b33679d511786aac0dc1fe8e18 -0x2dbb79723bf82cc6c5c6cc3f77f7444b133d50c5b73d9fa78e1b5857875b7170 -0x0ba6b1f25c887946f9e3dbcb7555ba6b44112293463a17ee90034058cd554bd5 -0x9537647d27fc051db5a26f5e1037378003253ca516a7c8e698b908540a1cdf56 -0xe441e8aef2334e1091b21ede9250141e58e23f01d14c31b083a73011e3519e88 -0x66673ac80abb674ef7b6edc41687fb95f123403151db62f00c4870649a835e2b -0x742289c8f6e59f950bf6b98f0f5fe2c734254070e33fe4997d3c6ad81c0f259e -0x8e43842960e876e4b41833fa544944646b772b4fc62ee5c3389f35a192ef64bb -0xb77b2b5071d6eb0dadff64862bb985044ecc840da9e2ab68c7341f0b79ed8d4f -0x59f9b40ff8fd6b2736be1fc5aa0929b8a8110d36dd2a2f6a5a5ad50c7cb84d55 -0x110870fdb3c2829d5ad565dae1e64aec4bdac10218d11a919f588f7c9477324c -0xb8b3ab18e2af5fcc83c56bba8a099958ef88f51ed48957c3b2319401db31af59 -0xfb6fcc1409a5978c2ed11e158a4a2f1a1b001d2a6d5c57d8b10393ce18ddaa14 -0x7e3cb4cd0e9f2563951368e37036758954c0d36f7e14beebacefb04300a50aee -0x85806a4caac221fa87a00af5a433dc026fcc7499bfa89e2f3edb94c301e386a0 -0xbbbf148f5e3a983d1cb27e1c81f80c67973514741deaa1262aeea936ff5ef37a -0xccac9e38734148b9f02fccadcea6cd2a7e10ee3a921bc2fcfad66c9409da440f -0xab13f7d0e4e4ce003121f72357cd271f8e99f4f71d5f8b5c18bae5c4b866a8bc -0x0c6af9864fb60e629fa06557d9f501e27d901d762880cdbdf9d5bd665f9b052a -0x2f3610fbdb2a1e742e92ea65dbd7de01e4400c683611f70536514a2523cfc26b -0x8e090662aa0714aca5a25e799d5f1a4e571b0e6b9cb8fb0f3e8463ba5c7d2018 -0x0f6dbc8ed1eac830bb53d275a412c5aa641817f3448f6716799f8387694fc0e7 -0x0208d296652b1ef927730bb8ca1ce631e04dfa6f3e646d1519a2fd3f0606bbb3 -0x16d0a790e80152d93a4126fc3410c1d88ac4c905ff4a2dbb00ac85510f171777 -0xe4dd8f4692fe9f3726ec4c5265280ca2261bf2b3b7d180daf9b6717e01b077a5 -0xec63d1dd65ea7b72657ca07582708b403b55846a1cf152417399da1fc153c2cd -0xfa8bc6b15b76958c607a1bf06b00481d9cfcdd36544e84f57e4fb02f44c0468f -0x27a32a6949871ab57afe69f63b968fe60f87012ff928fdf4cd0f4223a10251df -0x7981f961d849b1d1b025172961fb97151c5d3245482677ddb7d77504b662d926 -0xf826635a22ab6024ded08444884c460e389f336f7a96c3f6eb24623893147c36 -0x7d7f319a76b9157f90657f9cf7fee1533415d733bcd709521866dbcc7f448330 -0x65ed4d636c84ad856322bad4ee31b0ea93adf4f6e3973a431678d5feebc41558 -0x0a3875f9db7b3f607ee327ef6ef7aaf65944b0fd91ab52ea8e71da6de5234638 -0xec7ec20bfbc9301a1536bc56d9dbbcea2c4b5bcd71231443f2a26361c73ebaeb -0x0fac6c43012052cccebe6d8890a16a89c499438127068104c1b14cb9b11cbab3 -0xf915f592b1ffa23647918d776bb030ce7dd4c869cf796b7a0758c71b1dafc806 -0x3f0a0c87c2faef995da2ab632a638011eeaf747c0cd655a48de712486baa5e51 -0x047061c0fc609a8909148238563761bbf38838c8951a026e27cdc9c47fbab60b -0x1a59dda049e9a555fc8c2dbb4e136262ed0637d98bbe9b2353c6202c2946f906 -0x54748126101f071c95cec5bcbda4388e48ee235697133390f17546431014b8cd -0x1e8b26eb61de796ef9d14f08d3a1ed40c01b7ade1da14aeda9a4c184a450c8cf -0xba073f4c3e97993075f59dc42aff7f6a35b6c7dc15fd47da7fc92e79066a4baf -0xcfabaa20ee9cd860def8321efd651f7c37dc4c8b93d562c95590ec100c731f8c -0x7517b320de1d24300da35dfdbf7b3dcc03fde88740846371b52a41c4be250427 -0x6660d64e76bb9ba9c794c894129ab55c4f5e0dcf5eab3b81674443fc537d0c9f -0x3d474f84aef01b6362643527eccc3ae9e95319864b2c389c72a8dee9356d099e -0x957637609d369657933b57c60e9ae49c73aa21a8f990c3a3afab60906f0cbf53 -0x27904bf297a1a81d3c187a8ef291c99be0106f8eda9f2a655189ebeaf0d0b19c -0x58d365c40659d7b2e2e142e0a278f723d650f6e961759408f2a8d5688203c9da -0x33739824ce51564f1914ebf9b0e30ee9b40a8ec34df1a117df1543c81744a05a -0xfed508f3d37fa48218c8da920c3e614de6cef961c43587515fd52d509f743e68 -0xaeb850c69a56669d6090e5296ef52c0ed1080cf7968fde5a86022ef25feed142 -0xeda54a83bcb4346e07829264e2d8e22dcfe3b535b50287b01827093eb600dd0a -0x810a6c970ba2e59ed5d55b2d7b109e096a131910365935d72354d55e8fc46be9 -0x3e416799404a869dead8fd2ae9dac5d7019a787021fca528b659d9512e153394 -0x906730ef40df222ed8e9dc67324dbfc7244b72e0a5e8d1bc75a62a590bf86632 -0x8a3676fb261f74c63704a87cd5c33b380710362499f1d6b81a997134754a9875 -0x6163156ef8c7355e802ce9f8e5012434478b5da79e247d624fed46dca1734c53 -0xbd7cd7be480c01b2f7eb4f102fb50df2e554712718cf94c2aee579ff969ea703 -0x8f5c3252bb1c3c9c44f10bca447a3033f67d663eaedbc0523b480d6332b2a671 -0xc250416f367a94623ea552cf7e46093fdfdbd2f77baa2bac961bf72744bbe50a -0x7a1c6f7f2d72f095758f82d55ec63f98cac7f288132d4bd5c9c7f17c4743a97f -0x6fa0501ea756a761077ca2f49621d54bca55b3f577caab2c89cfce93ea3eeafb -0xead8ada04497f95b2e7565d72870af896fa5795f35d3b55d5ac2a9b00200e58f -0xce3b82c2f97a4bbf3b975946074ccb78f5905a3abdde2f8a6604334869ad281a -0xca6b1416d4a3690d0a4b938556fdcb0c444e160ef7b3b52e3d3ececd993fe86f -0x18501d61b4cc9ecf157e72ba67b9db855ea22ecf193ba5feff692038b6ad4a46 -0x26152bb2047613fbee37240786c441c4c932371ec68aff1a43edb4ba03b15c9f -0xbd3b188e43396c13c60219cf9f9117e6b3f65d962bbed930ff1538ce8ea2d521 -0x6e9ed64c2e2e0461fc788b9fe871ae44dce6a2954d19a0c1ce7e35eadeb1ffbd -0x6ec0a60331e8abd04d01907b5b22278a5a92ad93abe4786f0ec8e93277cdc3e4 -0x0d9b5daa2f44d18a6cf1cd58b3f91e41f5258a221df46b14a5c3d29ed9999586 -0xb0bb26b20845ac7533c89bf77cab7d51904800293a408b36694d821cfd59ef34 -0xb23c42037204292398db58214c766927f195994bfb41f92da9d027a868f84f49 -0x97ccf19e65d2f48f7e6d6e391c2093df38469d0caec17777403344b239c24dc8 -0xc2936196c08287dbd7071cf3958466d0f45c34e6e8e2186815a109ab6d328305 -0x4dd397260ccdb50ee971257cdb5ffc4b4b3290261db5e9b8a7d9d9ae2cc3366b -0xad6cd6c51c9c561c8c6cbc2b97e14025d9d3b3a5a9b1e6932ab4cc6efa8d28ae -0x3969e33a44db51dcd8c12e48ddaea536325b76a638dda68722df908902cef2f5 -0x37f312e0384772aef8c4fe3582216f9572538d74448630c6278aa8ee2ffe22bf -0x48943a9e60bca0ff4cd290ee0917da26d05f59256c10c9c4a9680b76f331d5a1 -0x481113a526c1ea8c49ae5a88a9889dbc929f1adb76866876a6da19bc583e6832 -0x19d16cb4f7671c768602bd3637305f5e6666c00f154ac2d93a22aa18301dcfb2 -0xd63e9647e61a51a00c6ed124b2ef1d258f17a733f3b9f39a0a4e4263be74cfa0 -0x25c53500a30ba41baf42c1c3c0ea178bd0743be6b5ea7e935f854f82555a76d6 -0xd345a9d41b7ad375228f68658c0a85e7a8129f46c3c1d911b8601d14da2aee22 -0xbc58bda09db351ff4cd6575732f48d46cc91e429d99c48cda49ee06ce1b40709 -0x7a013de547c495a46ed9f9aec2632c00a1b3c8b3b5de704edf4fa1b32716dc9f -0x012bcf096e6184973f25d388372fabfdff01279f4c9ca4afe6d09aa4c874f7bc -0xbe827f6cf7aace383dc06fd7604a97c476854611c508a60b0c44a09ed5c2e4d4 -0xd11390a1ef2a4fcae2e3a59d94d48c60b44f8e795ef2051677ebc30f0d0758ca -0x549239a0808e1cb0bbf40966bab1fa5eca6063704f0e059e2281530a111a90d8 -0xaeedf01adae05937e2b7fe1ac0ae1a8b6ff5223b1690b6936d707a86a4d9c558 -0x083fdaaae0daeb03b5f004becb6cd6c86f7362dd13873c6fe69ef4052211368f -0x369ae2e5847b8e043d059ad61ef66f4afbf82cafcaf027cacb81efde1c9e403d -0xa616d6158ed66cbb93518402bd75823cf49cb24bf8e839e21f02b4adedad0902 -0xb2dec0fb2ab48c05cec163c2464c65fbe01092bef531758398d669a342f0fe72 -0x7082c66b3412a8b334598278683346e31b36286f452492a1f06100eb51ba7477 -0xb4f6b0f4e8d614e32c82d973dd4f2965e1edaa4f629cadadf54126a0616bac68 -0xabe49bafdd16b3440635b4290439edca5ff5024d926596d45c85df28cbf18f8d -0xdeb395f72a9d9ba4e1841423d4340ac516a9b1ec79a651bd27da5a0e09a53a77 -0x9a8334d15bf432edb761a5578742f5e2e2abd621911f7f753a55ac47d2908225 -0xc0625a6becc7ebb1dd155a1df5c1a544f56b2161cf61da9f6eec571b8531bb7c -0xf99761eaddb8f22e17f05558217568d8b658eee8ae9123cb09b2e9397d5ec63e -0xabd957fe65a5a8ff8e7261ba2711512743957919b9a2286b811839e145b0aa35 -0x34ef6c3a0321aacb727f4b31f541ab5f32d23a5e1ca104c69c9491cf873212bf -0xcfa0976eb077cb3214d73c955d07e00a04c6f553b8efd850f95ca7f588914f89 -0x5b952b8a05d434948cfff711ec4a83895895f3987fe73b95ee8e3452be85cf88 -0x5fce457e656a4dd4ead4843b78f95566eb372015fe4edf35fd8787dc15c64089 -0x1c48664e5b5ef971070bd4e23e638bc087de77516a20d01a4010b84a2a10da5a -0x4400f45607fedbfb78d5a31d9c5fc2daef0805459d1922b9ea76c5c5df75e09c -0x0bef8da5bb8841dde5806d4b859d9265c5d87d1c8aff405f179cd86e142cd639 -0x461039a45629e7fb21ceb7cd3edbd87e997c67eeadd3a090680c0f3b55948b4a -0xc7d442f6d5a2a49a8806a1bcc4ce01e8ab3ae69f7510a6d51031fbdbb69a726b -0xe4c12276c0f0c9c545abb5607d782d3d2d553d135c03e057cc1f329ee475d0aa -0xc78188654c670ac35db1ecb7ae7345e23b22a19954d7b9107c9c2ad85e4ff731 -0xb6742dc844f375dbaed1db791a36ed980be52326ddddd44983210a7492dc3403 -0x6073dc882853074dac4205884f3a67aa9cb938f16b7afba4f0e50d1dc1ab1833 -0x99e637a87f3bb17b20ee19ce92f6a1514286e32f5e3b6d12bf756b4e70937ee5 -0x4255908442602d7c4f37b762f33c43a4bf1f2305188cb0bf0eb900df5fa7b01f -0x7a78042069281280035daf532793fa62d1e2a062f384cb3f813a8458a3ebdd6d -0xe5923c222ace1145bb5cb4a920bdcacfef6c438d76aef6ad0edb93b402a574af -0xc4fd94a7a1978a39234bc997adb9e850f065a1bbb1e1aa039001a58cffed9ba4 -0xa49a8e2cb695db8a716871f02e1bcbb05aefcb07cd7095b067c839f076f283a4 -0x45aaf7133a7936b3a8c39ad11c417dcf9d03ba3afa3bca573b8c6f5195380f64 -0x18fffc00f8b523ce12034245c7c2ca75a2b196ecc8f4bf44d15d66ec7269d8a0 -0xf326ff37ed066caba5af714fef33501a6ec4b0b302f334504616a6504da25d9e -0xee9904a595ab99b461044bb4fa99fec74b50575f9b12eff0dad5370ca1755598 -0x729c3a1d3e0580d265ca6dab9cb954c3a0ee1577029dd7c495b46e179f1f6d48 -0x598baeca69ce90f1a55c5f9db21063a31f769e23c15bd3b663e9b84befb37023 -0x7a8ea9de8ecd6b7f53f4a64a972c9136c7c5ab1ccc7f7b3bd852548fb6bd21a1 -0x4cd7d2a621f9fb332abced92686c96047479d119d2dafea227548f5a7e87e761 -0xa068c57513f1602d1f1abc407e6225e12b21a909f78f859c2351284ee143ede1 -0x6cf8736c365aea189e84eeb8988a9e9356a097f6edccbaa91a17bad7b37f714d -0xe6c848db6f6b7e728371671ec4cd1ad4acf19df2abaa2edfd366c52113afe41e -0xfc659ebfc00783a6aeed9ed328ad15aa687780633dc14741589aab6c07817aba -0xe8eca86de51e1930280e78a749ca4e554887d533bc9c3e58836b7410384a21cc -0x5aeeef9c8564cda73af80ccf922f3da62f2b422039632a0e7745771a9bc23921 -0x744272b234295ee1a31f11b3af5870282c92cfb05b6991201a87660ffab9802c -0x6cfc46f4fa11283aa7f9f0d4322d2e4c634b4ea376e22bc318f65e905c005c63 -0xd740554aa333a3beff3c86f6c769d16ab93ca50dff6a7abafd597045227fa8c5 -0x7dadde188eb2f6ac8562168a3cab17f28ae84d4024ee8624e15e69a6d988ed58 -0x1c3b82eb4878f8feecc701120a4ee21f65d5ec5b421300b1c0fb9a33451bde34 -0x1a3c73130d7e33ee6579601acf5b9cccb9ea6a59f22b0c389a6604b9b01cf84b -0xb071f7d27e577693398e80881baed91a8c79435ca035df3da3f71616ac0acc76 -0x2222f964555328847519719c3798012cf46746a8f554454d3f053e724d864087 -0x1ca6909112e6a4af21021a096023ce49feb84f784194854dbd3fd1b6f2ffbaa5 -0x99d641729bb664fc907e45c30705c58ce4a678889e328313a2b418f7fc887046 -0x61c8bf7b0d5ea8e573e120ed8443b304ea9418e83051c542edf9636192d47a23 -0xa265be6a0aca2d3630bca69e4b40f5cdab4cc5db00278911e4a2d505a99cf67b -0xa1d1881920989771a26f291e7ffebc6e581aee21634088c638b7cda1d15a9cb6 -0x468b62cd1055a3d29b887b1c3355ead83f068fe75b76f15772d1abe9b2c3f231 -0x2c69be139b8f5c3d1e8490046fa555fca38422ef25aadb1a51f650de3f10a584 -0x7e51d4d878418285fab67c4e8e448122ffa7ed4de8242a37e941a7a641a85b2b -0xffdca0a0adc7ac715fcdfced65175fa8fe2036c027810af821e6cd5e3c8961f4 -0x9229611e594e808d2fcdf62049699971ac0584625afa368ce13fa69fa547d2ce -0x9f2442ff4b48605ffe2829f461242379d84be33174849f003b33af55f35c8473 -0x9cfc967b5c5268458229a2ea4246ac1637043b49dd691837aaef49b9e2ea24b5 -0xc626173f2ca587b59134983244ed1c0fe23a1bbeab5fd82437aaca0b89f67115 -0xed2955492b46caf2a33fd41f503b8150a7ee7afe6b4d719ee3cb790f63f0cbd4 -0xd1296a4802ac624be092c06d9d7ff32f7d616cce8675b052e11f9a99c881eac9 -0xebf30b243e472772e15fff6022bcbb4dd77d6bf36aa235493da4ca37ed1a27be -0x9720ddcdc5afb909cee287eb1e87891169186f06bf0f3fbfdc898cf172f42120 -0x65248ec0f6c51e7ff169f5aed6dea1ad260c04f4315fee007c789a53a119a3c8 -0x589afbb5a53b5b6fc73f588af1c1e318b60ee8539c073ada4bdafd3ed31bad04 -0x10c69450ae5064de49585d9fbc507fe7f4167abeb267f6b024e9bcec631eea45 -0xeee7d3ef1e2fa3ef3b030199c0b5520ca8b86cc391ce8cefffde8e9c9879603b -0x9cff9ddf25396b1307bb03c3f80833ada73a308c6ce4b24bb4b0cca85c7fc185 -0x2eaa312fadf802d73ad3ee97d3e88c8219a3fee933a1500f54b9bb32305886e8 -0xa56e3f791a576b7228ec879b379e76ee7ef1747ac77d5cf8c6f074b349ecd801 -0x81a7a0b35b08596eb342e43bd34281b9264151b5505adc6fafbc667c371ebe26 -0x392b840bf3ece837139690298a266771c07e6a14b8308249e8dcfdafde41a8cb -0x1ac5c6027d93682fea678b97d3be0194747fb87914b273f50c535bc8508ea4ea -0xc2327693b6c22a70c0d71ced1c38b87aab5f28e3721c90462aeec0c54a72aea2 -0xee47259f6e366f675d3a02e6562afc272f9ffe7f690872d551da8da38390f656 -0x04b0bbe8fc16d394f7c22cca86bb007bc40571848690b97cdec8d897a7f965c8 -0xb8e80e3320dc4fa812e34d346dc702b554740f2bf2f64785a31a4a52a39bac8e -0xf89af1bafc06e2ff1abfb5ca47ce24c704e47d777af7a4719b23f3b60a7e2849 -0x890c27d2bdb4d6135f160f946ec1094aaa39b7fe27ae3195579453306347fd99 -0xeb59ac16bfc309d29bef3b8e856ff001a2c952a9bf13d068a652681680d1a1bf -0x40ff32242804137dee250d147b698f442af7f76cb26fc0c2390ba31156aab691 -0x69e2e607e1605c35390fca906390939a168961532be6766202471a7188f42ae8 -0x34163660bbe1ecac3eb8f6f739a707a1cdae8c5f39f6243ee49720b28bcf3c3d -0xf88bddfe09d9c33f39816a7fffaed5ca4d869fc61561d9a2f946acb99c32dd37 -0x804838d1e1442e2590a25c076adf1db9f05c34053813f9b41fd40e61b8f8a53c -0xe6206604fea7fe5406acebffb6e45ae3e463930add17deee2ffd21c23941e8ae -0x2d358a81e1644ad6ac79a3e5541c4fbe77d29f2011063c1b3e0879ebdc9119d8 -0x18e36a27976eeee35b3bfc4fd75a9c5a2b7c215408f3e28ccbdc1493a1dedc51 -0x507af225485bea801564cc0007a427b07d2937a27b1f70a16ae4b9b575b214f5 -0xef16901a3808ea72467cec48b4fed93db8b07a5f7cb94c8c2a7143efea1970e0 -0x4781135b94a9958b26c6070cabd88fa198aa2c814a638766c02ea3ff549ccb12 -0x7d6c690a7a2f1790edac2a758920aa645246422e8c6027c9347789857d3b4ec8 -0x0d32513e8977e546b94b9249fb50af02db0944c1635804ad905f6d30cb2ae907 -0xdad079c4f27e7decd74fce865af6f8cc49b39218fdf00c381f53b1c4ca7a8b0b -0xbc8739a14e15d0820f309bb34b7e876f6293ea18ac8a8b5820e6b90f6a727f58 -0xb05318c8f45dd25a2a788f2a5f1901a3fb278743333d59c6f4a414a02c1d5268 -0x90a374b5e1cd0efeb7ceb4d689292199ed7b347b6e555f44d1d2230621e1ef27 -0x3c72ad32f86804d0036d8a3fd497664840713c4d9e68d22c363a726e40bd3b5d -0xa376936ea41a2a8837acf75d597f4a3ada50228663e1464c53bca19a11b6e7c9 -0x44f4488d912e939f9c8caa0d14202955d2cb44e06616bcab6b0d0ba4d02ab3da -0xd8ada2792d855d101e2d6b5e4e7d611cc9f21bf585c71e1591df9b246511b6f4 -0xe2d296426b4ee4b2304521c15dfc5f1f2af92ea6569aaf34f38e235e6a029ff3 -0xbf1f2a14b7ff558f43208240b7aedab27c17c04b34665ce179201d172a2386b3 -0xac974feee97e0bcb629bfcd630efc99ada095043325e7a76054e2aa618643c31 -0xf5730cda27ce2428328d28b4485795725dd452d866ca66f3db587ed3fd02c45f -0x69313186ad5ea25cbeb121a9a039784eb766f3c65876e097bdbb37fce7a46eab -0xf874eb7f9aa72a20d5fdcd89b2bd889c2d9c54d1dee1360221e6cf950bb87401 -0x25569320af2b343f72932d8734988294f2f10faa864fd71310a24841ed20761f -0x5b1e4bf55782ac0579586c5b57b788ae983fc4f05ce0e6d20b4dd0393515b3f1 -0xa9a0411e71cc0652f2f7f56d6b7e262d66aa7993414b7af3eb0d28230ceb6256 -0x374b0a2ca8cafd027924b47e3f1db2e3fcab93e260076b7f3be257fb69882895 -0xaa7a59288077750d0ddc37ada42281638a93195eb553f7d64f94221254430375 -0x5145587ef9e1574b4cb8ccd29090acbcb4d774650cf95204d36bf9e140b60f61 -0xbdba2b8b875d06513e547c3170db1202877cb9e09f94a17ffd645fe9b27353f8 -0x3ed7879a6e1c19ff08037fcd5e6ccdca443fb6012a8d4a8e20b0aa63bee30258 -0xcb0dcd41e1ae21201f6c1302ad23e53d40964db058340857941a428f6182d4c1 -0xc9bc299a294151acba8dd572e9d8344096922c9d43aa6e099caf742f09743b02 -0x4943f8a90a3bae5699d90b50a78105b3e9987b505d75960fa92424d57180272b -0x7c22bcef2e69b08d864dd95f358803c8d1ebab888e8cdfe6b6eebce8b9b3dc28 -0x8d1faf86fe8ce13f2064a6e06161bff8f2de70c064cd37af23a30008aee0a93c -0xc952837a2f5f2080e1d97e47e695f6cdf205530bd68100754120c1d5021ed40f -0x4b1188521a57e6dbc189784a9feb2ffa0c37064612f76758a9457dcede06657a -0xbaea33d966804bfe9881e28d25717d3415844e9cd03a5a89f13dedd0acba7b94 -0xb9bae3dae4bed7ca3fcdaab494cd0fd34c21ded694495d9e3d7c760e48a900da -0xd8e5ed1fb71ea15e74bc997a880becbe63d5e43e4a53ae81bab1d12de71ffb05 -0xf54d0641f42ce3cdc4987f8c595cc3a18b71731f3d44c91a00327909409e2a26 -0x023cd245cc342d424a7825cba785f502e2c9d76e3bdf5cb5778122c189ea1c8e -0x89aee736a01e8bd4cb1735302c64f2aed09a375b16cf00488922bdf2a14af9d7 -0x27fea7b67dbc927216b83997c380f7664e922a813acc1e43074df628406b307b -0x218c643b1f61b15f75ea4fdc2d5431aa9a60e37d6996ab75e06c94fb9972b917 -0xc7f0aa85530485bb3ad85c4b2eef15808915554c0172c5736ed0a6bba3ed8a94 -0x8026ca04434d4840650d43311c59cdb60ae43a88078b7dcf2d44702f4dde6fe6 -0x57f3dd72fc887df1b9edadc6d933c3bd2db48f6005b29754c6460acaebf2123d -0x3bf2a6154df287ca61d2dd5d47c18d3771b54506f34f4a38951bd386c08c055c -0x991bde6ead8a3727e5cf492ba3d66a18f7fd09646bc39d46f730b5a53471e23d -0x793f4999bd568aa2fd092363775b04d7d55947360cb0300c44805de1310e4bcb -0xdd5f5fbc5ec7fbca24c77278cc1f29a69ffc8883758a5cfae1520704e048e5c7 -0x3a0b964de7531f5edb5db038dc0b639b0e8c01fbdf69062dae9436d76ad5d769 -0x331bfaa32379c2de7e7ddbbfa211396f2cc0754afdfedb7d14e197ca6947f7b8 -0x9d34017f0af6c870bf6fd20653cf4900759b4ff380f49c25cdcee151974ba120 -0xb6175e5f6dd9e5f7e316418bb8f09a83516e447ec988070b4166e01ec9872bd1 -0xb19ba2af9606c4eda322282a2406dfb70c1ca2faaf7feabd318435ad3d336b8a -0x6277f2993d1504317b64afbdde73badf3ab9a424adf99177e50a666151e36816 -0xc378e38ae25851fe0480e9f1a016cd39638a31e495b4922492d2bf39d900751b -0xd9990a50f85035517ace88b7b13a84d03c55322dcb543a44285c7fed76a848f1 -0x3763593b2aa2e7a8d56b2b105dfa9f96dd3361c4b6d50bd6dec913d2b8e11497 -0xa1f716cc514acbb264fc1a251e191e1f3eb55654476c52eef3c7c1e71b5a4acb -0x044793b14f84291a3f290b75718a3c39cec8ea5541bd5c6d63eeffc79ef99994 -0xfdee3f287cf2e81e05131a9bfffda563ce7c3cfeb5f374569cf5263d4c2670bb -0x75a102e54f6d7e6c39af3056d9f86af75ad33185f7c46440e6e9fca1a8d0820b -0xeb3720aa876477ff321956a34126410ffbb78a083427f56afaef3e51a0863c60 -0x183cb28ab05de24d3bfacba69257c025a14752d8bdcf90c2026bd658913aefa3 -0x8109c48b959254a947d7e0bbb23a6f81beff61a1f21bca4b00ae28f8540a7248 -0x24d1a1c1604fe2fc69a3ae9df4cbc4ef616ee6b0e74942429dc7a77572d02fba -0xe6240ca191d54ce2fb6e5496fc9c2a5d818edcfd33b348b4a046df52391d28bd -0xdcac93faae053313a4d87254142e7e16972192a3b32cc77cd248130bebe1ab60 -0x175927f96bc0d32723e0bf3f8936ce3fe18b8546d81d97637fe1848cc8c8e230 -0x2bd71de988f1bc69a4af460ee3db24940b848267b9cb2b565514ac478acbdf4e -0x8c922cc6541e2f257237856453687611f37c828ba4ffc348652888faaef1519e -0x22480d29963ac35f71aea07c5cfc30711618dd36fb538bd5cc1dfc37b7e0706a -0xc6e78654cd8e03a8bc330e8d1aa7aef3c3a5da6a6bee3e4487a9acf62475589f -0x7b2ae58f2f27786d996557378a81f057d387d473fd7e6e5aace88cbec6b525c0 -0x947f4ca1b0fad2df9b1b740a2aba4a5ff6642a9ac61b76cfafba00060b0af4ce -0x234f76be3b1f93ebb021e642a38f7dabc631bc317f54513fcfda8bedd249b257 -0x0d355190a5015e2c1bad7b504eaaacb7859874ddf55bf04c9a88b785e22cd396 -0xef602cb8e46de1cbbf5ba8aa5709a681f9890e18229de315c601de992f1a411f -0x53ba3e630326832b625148273938693f42bd59d3605913620e3886745e2c7c57 -0x5e9c70369bb0969508204e1dfcf12c7f488cd09b57846ae88dacb35a42c6385a -0x226a8ad485b56feeaf673f2e097f98358d45b3ba24afb1615576504b47e04226 -0xf1ec8503ee216e86376b5eee6ca9ed100af013c55bd733073d2ca51407032cfe -0x4dbc03869fb69dab4b236a35097892dfac2c80c2f91519042cbb94bdf3637cf5 -0x751e177ec868b16af943bc8cd183abeb2d9d8bc768d21b252e7a5f64c9f52129 -0xfe7a1751f1460a5f13b3d33dcd97d296eb671b91d18e8bd6f3ae9e621369b615 -0xfd6ae9b0295920b139a30c6fc62f7018032e88c6a2de1cf49f34102a67de9ad2 -0x5b143fc5b648a0417ccc8f3fcd508f32550491daec488777441d5f35eb79d55b -0xa2273e6e338afb21f3955a0cd123440e1bd6091f4835e2737958205e50b0571d -0xac3c87ad53ded59e0493e3e768919b16e1d0cae247ed3371c0093e9db3ed8fb2 -0x4c7ed9aab611f27ecf3993c966fb5449f854ef65cd4b9e477d81400b56ee49d7 -0x754c4b09bef88dca4c81b59d0d37c3ba1a11b0c4f40fa3d95e20fa0c0d4772c7 -0x6f845c97abe0412439777a59d4346b256e02b86c6eeb60b177f74c671dfce5c0 -0x1669d00b2292e5dfab97d79b4b783cb7c97c7981a064558e7c5ce93d4e68c5e0 -0x8b446f236f05853f2a1cdd300051d4952e764bc9a1751d3fb58769fd71406a41 -0x37818673d018b074f88b3fb2ae35b5f565b86ce2f2b7e16b2cee94a93d90e0b8 -0x190dae77b19c07429f14f37f6b9c3f8d98495961b9b73e85f5b17307c70d1621 -0xc7b37b5ddba45618efe9a71b47d4f3efe94c6cb6eeac22ffdaaa0f87a14a7421 -0x893844cebdffc46d88afe0ee7f6c74fdff24507b5a4010e4673c4af0f517cd45 -0xc0e00b1ac4f70ae091a11e64112ce2c62c3a76e5f96e264406a548b756b685b7 -0x705cad19552267fc25ccf773804b7f2a71e364cede49b549eb1bb2ca147b99fb -0x49dc4ee4027999fd665624ef1aab76cf9d701a0467d72ae87c01a4539990dca8 -0xccfd0f8460220ad61ba9c13dbe49872061b52dbbe5d0580b04e9c090930a6284 -0xea0b8db868b6f4e040e96926dab0eaff64036c0fb05032722b37e632b8a72619 -0xb4698867590637ab1eeba42d4386a3ae834dbf74130770298c2323b1aa17e747 -0x36d7a3b224ed87bae212ab73e0879697dd820d952cd0d3c6dc84782a9b75bb6d -0x8f44e92d69c7768012ff5623a52fbaab17a2a0050e7d8a03c1f94adb60f54ab4 -0xf3b1d2ef1e1e504b9d92db232cb1c1495520ace625de75ee07ef5ca31bfcf8eb -0xc9953915629ff2739ebfae3abe0a75514e231e4f2938250caf1760fc2a4125eb -0xc213cf036101715fc157fdf318eecd7fb8fae1960b1423ad9ce94edb81d76312 -0xfe1f3a7da5b87bac2735a4bc15ea4b9ab9c569ebd5cbeaad86352c80ddf5a674 -0x911746e7de57ec14b8a8190b76764f644aa027029644bb6034bb8eb3989c01bc -0x17e7af5e5e83f86d264a9d571d29a4bd3171bd59a7a9a9e55650fa55ab90951c -0x4073fbe7d227eaa1b13accfe22d1ce5341c3c6108c9a9e4bbdba14deb0b9bb32 -0x29ccf542b27e45cd96979290761d27f00c60ef07a0caf208b63410cc5be28f02 -0xb6fa3a2dfafde2def4f27bc7d370f5ad34e412fd4f8ec61d01c6ce93936fcb68 -0xbe7c8d2694b28497965e36d07b96b5f8e12db50dea3d46a4cc591ca08c202018 -0xbdfd5eab5a575fbbfe974332c0651a27c1cbb3a7953e5487134e2afbe8222af0 -0x5a2a84e33c12dc9ed5387bb304cc840606c4ed56628e26209678377649050048 -0x8b179b9b3d558a9a0fc02a96e52cd6bbd9ebc311e3b77d8ec0d5cb09940047e7 -0x86b245f1e5005774ad9628c4e92e15e37896a674d3a2c53e3314a5e5ffb58e53 -0xf1689b62f98d12bba1015df1eacc73370d1cae0d696ff811077da8abe7f878a7 -0xee2a23b4c6c08ff0583de4237dae3ae15a23309df3e57d39f87e968446ab1702 -0x11610dad858ef51cae3176b6d622980a6e5569ccb2cb0c08f071d747fe2c9639 -0xb076214feb89614fa84f03a200b101ce697d9dedf2125a113d0dbc826dddbd2f -0x7c3c2dbb091725447bd42f3926361245095bc09b57bddea3cd1a11698688aeb7 -0x73f524d348421f5285832842f5a158133cea5a63af02ede687c52c67449d8cc3 -0xdd513edd2c1dc0e4765cf2db551209feb5567242dc54333474d29b49312b8450 -0xc4f2009d4996809998ff5e4af03d0b87e15ed7192a38baa297b48c0d6ea082f6 -0xc4ad8b5c6cb738f07e83331c585dc89852b93897b01417f6f3bb1738d65f2a04 -0xb9f7df15c67145294c5b14d522560f9d827b06f5174203ff1663db9411886200 -0x0fa6b237d00dc39920f56ee1262841b1f7b395fd181b8be37e1e84b4691607fa -0x83926454c35b1faff4e0f21b2e79df0ba5b01f5e6e8f1f72f6853a33a2122114 -0x9dd18a22204f73111b979ee61863f10cdd28c4524a0dd1ea7d00a433704e1d0b -0x24edcb44818b8e4759d09a8b2030978b7833c8ebedb08be6b5e9753a4de01860 -0x46fad21ad40893cff563c62ddecb695289aab7d7572baae49153cb360e24d7b1 -0x6982aadf2eb4ca6e147ffc150611ec2c48f1ad7d03c50961a47162d709e36883 -0x12397a98343cd7f39e57e479e59f935b19b395d701b56da0de1962a0cc28f753 -0xc16e948436edc491407751264a703e1a64318f9eecc4b57484d81d2e6d09e028 -0x41020f2668dbd95a7889c2711bab21c066fb389d7933b8997020583cff36927d -0xba2ecbdbbaeb9a3527acd0ded4ea3c85d21fa2356a81deaa2e1cc634b46989de -0xb7fe2b5599f21714dc928e2915408ab181bdbc16bc2cd8b015876eb85ebe076b -0x7132bed7b0b5951647a3b7ecd0edf8a20be2597a18eb901f2a1a95942e5b8672 -0x3968732005980eceb0d220e02beaae08d2a937d605d553aaa49f3f87c8525431 -0x1aea2afe0f1d4d0bbdc38dee90ee3cc9d7e455e0d349dda278030bdbd3847e57 -0xe125881a62836382090e9108b718a705a350a81bedb7cc8fd29f6fef4c0396da -0xf2365a4af3933c78b5cfede69e41c72b0960e15ae7c6a352bbc28839a60ed029 -0x4c9a9a0b5a38df577426dbf83d95d8d593e1c728d3c37a45a785887139d21462 -0xe87fde08cbd92bddd8227162746b9d7be0f5a8d4670ff83f07a973032ba2c33a -0xdecf90e58889d5497dcebefed84340613136017b6f89063d6ce4f82eeb895f08 -0x5f83537611d94abfafe6db7518400f7e6f54aabf8258829c28207231cd779dd6 -0x899620fc00e952b04d6b5fd42780676a6e1a7716e303e769dd4d0589350ec3d8 -0xb2e0c11ee339ca070c2bf47f23e0379910aa2823e90ab43f3ab2b66094b44ead -0xaa068a0096c470e025de8a899dded303b1515fbfccc18b3b1494140ef0e51ec5 -0x5dd291be57404fa3911a43d28cacd4d8547c8f26d17a1ebfe9faa2caa1fb2425 -0x66b85e8b2b0adad3263e20cdd5ca76f5e34ff9c529e3de938f0b6f7af3bef648 -0x76d402eb661cb995f8311f06349aaf82bf1a02744568a6568bdf52363aaccc1f -0xaaa5bf41a863da16f361c62f283c5129a4b730100a45c6963caa15b88e74acbb -0x28de890e8932a683203239efab740f5e4ae2a4af1677b1f4bd6ca619b03fb888 -0x7c63e865802065d5f914677d03dfd7ecc0ce1496cff6634dd745968cf7bb0963 -0x99f67e4d3bd0a90d6efc08c5e6b17b17089ec8416a2cd016686b686a022622d6 -0x4b148f94ed04ab917e72b1acc0224219de3d24a51edbb576d67cda2f37ae60ef -0x86c3319b466c04fdc81c187b93350084404d000072146f07c3e05a9980e75cbf -0x393d4f1bdf2067ba2b07e18d6394ea92033c9b76adecee681724268f7e1f6c6d -0xc000da755618ad953a035ec0457f4e307d53f4fa8ab71a4493ea0e2d7061ff80 -0xa48a1472f65c3270814690a2692c772472264d81b46f2a9b639e66c8014e8bd4 -0xfd446630795198f875b9d697bded0ddcc95e02f1c32de838075481e1727ef4f9 -0xa12f671aef2fd3f6221e19410a6b1bef69c28eb1271375f3764c7659bc9a58de -0x372ede5f7334b876bdea1cc241f3b032159d1165c1834b062848d2def0d95b46 -0xa445806b95d4175699cba6f15343b19b5f5bbc59eae39bdcaa95bd3492bf9aa9 -0xd706e2074bea0897118522765debebaa6a044eb9486b1be07e9222426f9c6658 -0x364c5507c0d63fa2c0f39707b46c9c3a8b66bb835f2ae1170060159aefbaaf33 -0x5ba3ab1b29cf9b42d0076ffa4cfa3c5b688f687fc833d0ed0b0578013b541d32 -0x8d05b1ba384057e2d12bda4e9d9002a5fa186b2591e5f91bccfae18120c1a082 -0x17fe103fd437fd138fd1bddd26d37b08584fcf69b154cf6f37252eb1999f70fd -0xdf38578bb41862cf46caf220691281ed7c16816675fbd3b81f47abd06010d3bd -0xb1abe684c7c26e8bd35b71da7e60424f59b762449be89e5ec1e1a2100a960866 -0x5a7dc1f1250dd773511b733c47a33fe616e37b16194e5abfad8f19284e71e032 -0x47b8a01e935c0c5004c3dd4153b12d379aaa7dfbec4430bb4b64a1d8aff95110 -0xf444b1ab4044abdbcd760b4ca9d4ce3dae5c301dc40c960f917d3c60a99f7af5 -0x10e7f9cb85f680777ca54cc3d7dda762b12fd17b7a27617bc0655f828b16faee -0x25b5a34ef04e68ebd102416a19eb379820c272dcd33ae46add3fcd5a1c4b8bd8 -0xf4e8414108a63db7b25e06028f5ae0492c86179df0a6b62986389b888defb1f1 -0xb705a3a187877292e933ee37dbe6aae2d7e0630b21200f68c91067b9185f4ccc -0x491920be7f54e7becefbbcd501bf899bda17b9c94919e0d962e0a052b5f138c9 -0x138c3f841554d70de60ed449591e2f1fdb06b341867c23889ac13c8a6d80c948 -0xf810268d63d0e5cbd6199029daa6bfcb3c80d0199587f3b945ba7f956896ad45 -0x838e3fd8a6d54ed3fdf94d7e6021be8e62769a988e2f65e4a57fbc6bc068f9df -0xdac0825199be5c28d9ea44a4bfeb835a35ead56d4bca09a3b0aa0b39b81f877d -0xac713d14596fd69051c158c11073ed3ff7b1369ab965483ccfb9731b560b4cf5 -0xe39d6804da8152c206ff56a6840cc7d6a7bef7f0b286c0b3ed6171f9c3b64ce7 -0x16fcb7a5dbfde684aeb16911f4bfc75a4922bad47d508393ef0c0acb29f09edf -0x6672d21f77798e33616f95d0af94b6ff380ea74e2d6c82c65ceada3419477342 -0xbbdabcc4634434dbb1e27eb0cf703ea0df472fe4908ee8916ab9f42ed25704e4 -0x4b08e1577ff3f5adb74ee9ee8b4f9cad18b8fb10eef8d6f4f3698535ffb45f37 -0x3dbb98d88f54f4bd5a426608c2c49d2344824f85b0319278c9d9ebeb3025a91e -0x8064d3ee6566b205b2c2f3d6f2525d64bacaedfc5fcd3a0fb1c1fde57119e968 -0xb6f1d6cc0b8cb8ae4720956bd10b5b38cbadda03e694190912e68991de2f47fc -0x6b1f693291a563e0c006dcd2adadda2277fe053d004c0fcd9057ae4926c948e0 -0x669f142046e1f55c4c936472729c57a8dfd43ddf3bc50b6182078de3ffa79936 -0xb103dff6c4e0cc9b04578dc17259a00d09708320664618d3cfa04cfcfb078198 -0x09de187d82dee6ada1149da94e9e4d7e3e51f6df95d330405acdc7467219e05a -0xb45d70315ec07c5e29029be991040977f1c356e327ba368b9507123b53100318 -0xc1526b89d730404f7d651de8fb9100a88aeca1a16d2d2898a26a4aadfb121543 -0x7f62fbc68f9801d4c2628fc0447a2ae334bb36a82ff760a2c024183128b44263 -0xb8d5063b8f3766ce5717e64ec8544c5a8f60b05b4beffdbaaf93f9d23a897f38 -0x100699619df8893ccf6361414c7a00a5ca93dd877636cdd1a4001509dea23404 -0xe4f9235d11ce612fa14fc56f085dee8b6853b0322614cb09e36a172d15f4d25c -0xf7ba03655f938d767c3ba73f8ed7868a29f887e97a9c11f4ecc61e37f538de69 -0x430ee6e3a0fdcff8626bdd71af4f7d6a6cb4ed0377d6c8584440c2e112987bec -0x079ea26c36fd1e6ec416920483d273e6fd1fd8d356820fa738df8cdafc030483 -0x954e9b1f41fcb2aaedbcc1980d35eb35957f6aa5a00978b6bb44083e63464c75 -0x34740e47f2bff1259185585d9d87907de489b3e28c64e9a15d405a8b587913a5 -0xbf62894456468e8ff6d1654a9adaadfef2ba0ce678e8e84b0542df21e242ce47 -0x90d3764ebabc93f970cf766c36f60a93b07e2d5eb60b11e6013a8278903e84be -0xe818996f64dbc66c2b60b8e2f9d82ca3c696a71e45058d8997dcb9a432af9552 -0x58b8cd32f87dea117a7caa07eb7035c2a9a248edb7489d0521845e2c387aba76 -0x13d06d7e812ab2ef9f50d9044af5ed29cd078e5af897eb676263a54a4af6b86a -0x77bbe9235f4c2d0fcd67cdd3c0fe50ad8c177024916234dca8ceb540f302edd7 -0xc782eb2763f0b4cd19399b518206c9eeb6bc55a9fad3ce84f83ede85c84adb3b -0xd36286085b0592b5f69ea79e97c2cd5687a0320fe1a47ba2a433c67065793c90 -0x70d8965f1399d5296805221265aa3c5f9e4753de9800c504f0578d7cf3c48756 -0x0749aed835b39bd34af2055411dd3ee1d8218694d2f69b2d61f041ff33afec02 -0x15780e970a622fcb695f7da33c02a103fb54675b978d9b407870a4a4815077f8 -0x39cde7df364fe8dbd1fc475a84bf28c9827749571607c4fb84a729120c2a675b -0xcf1e6e8275fc977bbdab870ce831c9525230e3ff4cb0cdffcb556abc1f3fc774 -0xff8b3b81e50c3e78cb66e154601fabc16f701c21888088cd52d13088a9b2cde4 -0x9983d06eaa186674dbeec6b492afc6e5ad4168696370a6584018524a1cdfbbea -0x813dfbbfde0dfbf81fe6ea5e68a973507020445966c7c71a654a8c22a4ca15f9 -0x13db6f7806b0341aeb755d6270a66c984c4d794790a9c8522fd4fc06e0646b8d -0xd900c79775ca0cf113c2d2bdb109d13b4a921da25a66c7998b1db96c80a34c8a -0xeedacc7873f796735171ba2cdeeba6f9693be42e81c85e98cc06463154ed1c7e -0xdeded5f7a3b8b9a43e6546b89eafe4020475e3c9245a04b3fcba25a4649d91ce -0x421b2b89d74c755cda603d8e2568dd2eb7703ad874b7215fb597b9849a79e44a -0xa8c1e480eef4018df1d2f33dfee822d4acaa1c9864047f3c249e7eba8d636469 -0x787b07115af6a01e6f79925e053c548ee1e1e65727d772cc4b96bcb75a313e1a -0x3f3e404ddc26dd1b088ad8bd21c860f4f78898127b851676949552615b99021e -0xee121b9e502dce8d0cb36af4801ffe6037a64d5d792fe456ccc487a8d677b7ff -0xfb9f56545421159078816db1275a84d6ed87d4877a6dacabd91a817a5ae37cf2 -0x66b9bfb7b69cc5bb515115fa2e7cd1b095d8cf7a197d9422ffb387bd5ab4df41 -0x08e851107ae502597f6288aba293c9e074abc9c666cd7d4c55d3a6cd92523d0e -0x6160dcc662f3014d3fdd122dc2509f90e9f9dbb866ad327794b28914a39df8d9 -0x13f972cea050b618b64440c16b91b6eae2b38c8b8c5a263d88891b626d4757d1 -0xbb0698412fb054608843febe0e4fe8aae24de93dbe9ca3e906f08542506eb6b7 -0xc0da8126fe386833f3baadf1e66fc5e01294b56d36370d15c58f6f5d3fd5e422 -0x847b0c40b02eb11bb3031d88a2707e37c10e75b7de817a8508606995a904f5b5 -0xe0674375b11b090071fada54313eb27b7992ab1aaf0ab0b11fbf28f3122eba5d -0xe5ba9bb40dea27c3e44ddd695ee6e537064d753f43ec3cad5a3ed5a64374ae29 -0x36069dde51fe458ce83b1a7c3bca2f1ae841b488a56a8e5866a171b8bbba56a3 -0xf1b31c22e71e819b5e6f178c3822174074215c516f2518d0a28afa19d72e3de9 -0x8afdbf21bda13bd75a3be292015ae5a16a33adf265350a6767068ab04bede7a3 -0xded6680c8a0c8e15b8e25145d8822e4cdb4a166d7e13ff380dc6cd7035a29973 -0xa34fd6e6eb67fd0bfd228f92b6fa9affe8a78eb7fe46489850cc6ebf455e1ce3 -0x6995d52169fd97f79aaebfd607ca72c78b2f646362b91cdb1a972a1a2723aa08 -0x207600ba714e3926dccb92258674d239407cc4d980468f58b7276ee5543ba746 -0x5360d472072496d3e8627713af691103a00d19e098901d8523ed293c20cdaa66 -0x205c553ca8601d05f5b72d9cf80c72f34f7d2e8cdcf21a4c96d3efd7f01f565b -0xe95d7c20449f6f95835141dba96041ebb7469567e8f331da663870285bcfc53b -0x8aece942301648413cd9dae3db21ab0a6b9da784f6a4bed349ee4bc46975bfab -0x741319c88b0a7ec9d4e327691e21500910f69b8ceaf4c031c98e325b22700c76 -0x736ba28ff63d3110374621ab8c4ddcd3c69eb35ad75d2ee6aa4fea4a1b86c9ec -0x1c8b8380b0b84a78336bdda2de8bd25351dce27ce3ea4f947c3476fb5d9fcb15 -0x1eccd0c8453d0e729b25c0a4df82ab39e4c02acdccfa82c3c77283f915b365f0 -0x69bc6640e960ed71b613710f81a94d2684eabe51d2d9c9ff2618d2cf9b8a13e9 -0xe4eb75728e6792373198b8d16eef5195df350e387c8b5aed9e2017bf1b383abc -0xfb81d445c0124ff9126a1c557e66e98e3a27017367ed25037ebbba2a2b8930dc -0xc7c6788f6411af5b958efa46a550f3979661cac927877f489abb5d4852a3b846 -0x47b8c3edb05c1bd8da84e59ca8f4f7175acb95ae4f205eacac6b6eb3df16dd1f -0x9ac12aa144eeec14b965dadb6af95d737e659d1574a234c28b4c4d3d5a9785ec -0x7941f051017f0dc8e15fb35b8f3dd3374cfa1a8ac134e6d098815665f3ede590 -0xc7b3bb4b73b81e6812cbc7061904eab8f26cfd42c24192a30136d6cb70526716 -0x55300ad9b4f775fc53edf5ee30ebaeb862b7c659acd896f373a82a6c33a9e8e5 -0xcba1ef52e8f25975aaaf3de69597d75eb9b290c42ce21008ce4a004c701c5a9b -0x01fcbfa9e9fd4a3cab3c657da804d3cdc83d0215a003bdb39390c8b23d15e93a -0x24a59caae0a974bab8dbbe6bc0428f2893d92cda4673f90aeba79b179fcca595 -0xa3a340739f2870e82719a8fd63b59a7da0e1b126171c865c407cd867e992c378 -0x16b0929617fdbc1f202c6221b6c0502236234982700dfc57d84579e1e5ceefb6 -0x02a9f92f9457a8ad7ff55a1b86ee528563f0dd60ae7ba306cb75fe2110ae63b1 -0xc69415d3982bbc06942941d385a689602ad812b64bd14e036717eddc97af0bef -0xd7655b34453ee47551d9845d4f3a930f021e5a0e495adc9f3202a759c9ee9673 -0x0d80e2bd46653c1f6b8dfb1d5c936a5880e937a596f70296755379ebcd6dc88d -0x8b1812e8eb26311f39fb53cb9530bcdc263b7979de96e146abfa677884254c65 -0xd06d37af7e988b092ee6c250d2b7e01bcb0482694f99ba1f79261081a31b7578 -0x27524dc3d07069006633178b1f9b1afae65695d50e8e05b22b76801fb8c6cda4 -0x75aa42153691510b0ff0e2f704281c57fc4c913b0c6b05fea7ca3842e4659bb5 -0xe0ffff98f8bc3462fe857781dc5307c9e06d166d678051a26ac159410a624cc5 -0x155189d41dcd764ed07aa961784391d9ce4c0bced9d4c187d5f9d5696d9c149c -0x0c4f8715b6ed6d9dfdf8e9647ec44944b50b57b2aabd99343670d29c6bf93c80 -0x349abfd60ba4667d57f26c9d602682d1357dea0f652e09f926c94604136020d3 -0x91942b3dc9908ed05b6058b58139c1667d0c42289d2e149cf3b78d771a9975b1 -0x96f435bb57fda1ca3f5e335ae145998921280b0a3d879e1147cdf1c409e5507b -0x439f2a72783793aa81126f1a2317cd7bd7a7d4a16da1674beca2e7919c423d0c -0xf9ac93ef300f6efaed8dc3802f16ffed9e1a3fbb44cdf0189b5aec68aa29a5ec -0x8a997d8587c1b76c43bb5c71c7c0580fc692ab73c0c83914866a3c2bc8fe4d0e -0xd5817afb8ab3cf1f870267a59860c6a4321a3952433e9022f8cb850a443b2970 -0xb127090a1e053cec9acb209f8e7f0461601eb124b7cc6ad17a7937e81d1862a0 -0x08ce891ed5862f1344104717a952ad57b85945cee73fc23f92510fdaf97928de -0x2d0171e4d81e5e273cfd427bae33b5a37a2f73c72211e88365cb9ed721ba2437 -0x8d7cbe48dbab13a104efc52500cab69a3c53305b8c7302de07ae56aa53a38f92 -0x9aac75bbf8a41bac3634ee9ef725754730a2fb686543e05926142b47fdb3f7c6 -0x61a994951535886a098eba8361470f22c02d48ecbe0fd94fd24b379caadc1a14 -0x36f517dc9a1e5538fdf7cbaa88cc5afedc26286398cb427605a07eaeecaeef83 -0x9d1b210df39fabc44a577d07173fb4391105976b9b7c0e5d2d0c3283a9d1051f -0x85ec7a72d521c59d7cf7d74add066b0fd5eb56709a545aadc58fa8ded9c6d577 -0xaae6f62ba9762a0e3c4f3bdf1ae8f3913a4d93803d9cf96e7eece99d67c14005 -0x30aa3b0ae9d172c86aa5366fe9d219854f1ca602874a96fc0810e448d1ecf775 -0xceaad87f2d67b656f3f3775d82f3c9b1e47905cccfb360d935c86726961452f7 -0x66b61dbdb3f46407aa4356ee56fa56a192db14cd6028e082350cc9854cb1b787 -0x1fa87068f9d96f0efc578364ff6d0782a9c44332db934d3c9990b3d3f5612b53 -0x310af037de9f95456d48c236a815bc33516676fed13c097dab7c00ff6f907f38 -0x3c9dd18866efaa46a342957550c8c3f86142e2f427b3d762de107de1d9313d1e -0xd6087177e706f43c794991c04077de23168a6c884d28ca9aee2efbeaa392293c -0xa5bbe494ed20239915abc50aee12d32d1a2f0f0c28a9ab9856a332afaf3026ed -0xda529c6631150d17ccd75ebf38864d8b1908d8963b12cf6cb08a28cfd62d60a2 -0xf6889728976e2adcdafea9939e934d48acb5197439eddb8dbbb3ffef7a23d846 -0x986a837d4cf40499484633cd08c53b5b639b80e5f7394951b1aec8fa229494e4 -0xe652083600a5e6e5d4cda7c7496ecc928059de5c73a4bceb1ae3b13fa794bad4 -0x3d9df868e6d9af91fa1d850e6134351ee491b5ba6a4d81f36c6dd5cc2aabc5d7 -0xbcd4b3291e12c77f1f7361bcfef0433d13f89c69ff33996a3030b2c845a646c5 -0xdcfc9962f79b5c04d3f16b94a229cd955dabc47fc1c772ef171f6c5646115434 -0x4b234e60677a8901f38678b8a67aeb61a8aca056a3559646e4054142a9b55072 -0x1f197166bb62fa5136bc250d67b2d5f947c381a4cd95fadcf4361349634ca505 -0x503dbf900e53c65ca63a73589c5200c2bb7e35f78e78f197ebc879a3a288cd40 -0xd1034757dd039e004ff73aae69aacca77638a232cb91bf0d904660b9f59a666f -0xa5dd9016c13828d458c163666dd5db57b0fb0307a08f896022ce5ce3d0d51ffd -0x89c0d72f1e5a2de1a641bcb8f0d37623ec5b61b37e15e0486f54f3ab646e4c4a -0x4050a0b75e398cc9e94b624bfd89974a9547741a850257e1da78e4317b6ec3f3 -0x8d9fbf9f242b0c765f6802aa6d9d9c1cb5403e5de2194221ac62c6ff0e41a3b9 -0xf856afdc4a735bdf2fe01ae6c8e614733ff3bf20266918ee986f372e4e27dc14 -0x28af0abefd957f7091c363821e36605ea2642f2b87b257a9f3037be702666cff -0x031386e7298078a238f2b1ad15d6fd992ddaa855bbc76636f7fc7c4adbab78cc -0xa1da149edf405084d3faf26286a4bb5a4ad400c1fddb7b6f8de4621f605c07f4 -0x10ecb58f64b19f3a1ad24799acbcf3d0e6956cf16aa198116ff202fc716eda50 -0x983fc17e22eb6a1d0febaa64613447a0d84606186a139bd7a62af0dc5abc6a3a -0x36908204b004503336ccc55f550f0d64219f15c9ab74534658600f4eed17325b -0x218e8c013808d81daef067b71bf79704977cb3548b3b0725b4d08888cb369d89 -0x9527430cbae1a27dab62449631c2d0925750e33b5f6e5604ea399c6e7ef10e87 -0x56ae632fbf89ff3b16c2ad1920c175de6282ce2029a9cdbf920057f07198ce66 -0x23769eb486c8098fe850ce2b8807d0c2abf78cbb81505b878225d82233153137 -0xa64acbb206b26e20a5852b9f2296728647b8e3657998ea3ca9719851336702a2 -0xa6c0096ffcdb12922220cb5ff6dc8e601befb7cf3b4aa88a7a4581e00cd0470d -0xaab35422dfaf6a2efb88dbd9917cdd37099d6b0055cb3dc73010923a7ecbaf96 -0xcf5c138b3d1f7a8d20c8c801bae8ff90caca5ecde5424ac6f2561109a8b348ff -0xbd5b54696c5126a234f1f11c0bb9511cee267e0045aaccc8f9385ce23338a876 -0x0746011d07f098b1cf21c93cc2fca33680b76d4e6b26601b59c0fa450fe72e59 -0x77bb4ad74fb037ab95d27aa59ffbf46247d9ad5486b2dfad4213b7c72d399c1c -0xce9a21f82b1fa8014b23a5a49cab55fbb360a13aae23edd1b84c1c255cc28a4a -0x84b64880d9f84fc890c41489da80669034c13b4211958b5c4bfc4ae06389532c -0xd801e6591953afeca3aa8677ab270212185fdade0ac2e9bce70e428ede8d0005 -0xc97b9f23dfcb7753fe5ab64f03e7c95307085888f38a492bec45874eaf4e24ad -0xf67b19b94a7fa9c924a4ddf2b882def77713c6b9be899ebc8d5ba6efd7ee1a35 -0x19d59a3500e2044e5ce97c0e7a80fb3a42992de2a2b0e6609f711c6e13dbe51f -0x8c06491b7add438e894f32818ce6b89d45b291d4ab3184bba2bcc31f113691a3 -0x9cea72c371597be48f23dccf5d5ca3646593777ac993f818f981217f71f0fdf7 -0xc7a5c22ab839444abedd13b4a364032373301610ebda0a196b5618422921a87e -0xb2b45ab2e1a80a73a0eeb0c21fcacabeaa9ecbf44b0fb9b9a87a171d0c53bae4 -0x142a8b6cbe744754d5d5110b92ca0850670ec836fae8eec3e22d141f789b23ba -0x0450aafa50a4fb78eb0951c81e87385c83b811f0c90cb205154b005a43301ba9 -0x63388cee36a5cbb707b6f6de1888c8bd32d112b8b3c9e9eca470b6d4967e22e3 -0x9add30c25740ae807b667a8cc9ee1583aa973005d7af5f18f04aa9b115fadb40 -0x823c4454ff9fe3397f24270b66ca6227237e0c1241134b7889a32beeed8d94ed -0x5dacd269b9484caeefb2e6454d2cdbbf59028f86cbfd9c2cec11050d16d0e097 -0x9c86973f8c51b09647494a3949c8e22860def37a0f2ba1fd38e398b713646c69 -0x8932b2e020ec2cd07b567f7328f73eb71187ec3f2c6afb74de8180d2be3c22e9 -0x7b956e94672cd8c6de503a9173ce2cb2cb2d88cb18bfa247c314e0ddd14ea682 -0xd3e67cd134afec5907b5bc18a98eb5e2eaa277708f92a459fa31690326ab7ac0 -0xc9534ec890f150512f66fcf4aac18a01e796c82a233951314a9a65a01314cb51 -0xa588d6ecc7771cf7c4bfdfdbddf7199bd09cd8e813915d90a211ad987188c77f -0x24fa3a89e4df72623efaa0427b36fd292befb8eddad955aa5469283403252bdc -0xc7903f7ea7809569958692fa80f61e7604729c9af0aacd409d164ac67143d1db -0x202f2343c1384e80eea613947b109231e856371ddc719f892e0d1d202de27972 -0x6fbb6787e32cd1497b9c3840b613e865160db74c507249165d1980953e451311 -0x204b819018962abcb348697fad80aa75f8cea5177f0f0fc9e4ba2b8f3acfdb53 -0xf967336235cfe3c33add77137800bf264b17b1bad0bef093d38e24fd078f551b -0x6f4a619e5fae53937f874742cbba873d1ba1b75c230f7614d4fb30f5c65c36ca -0xd1507791bb887b43ccc31d59ff86093eeafb538e942a6d5454a17fde234b6f89 -0x9209fb53de9edac69e4468db248ef9a5e7e1d9ea69fc544078a6210388256fdb -0x6afe24116dc4a4101116e0567276e493d0805c3ca33bc928a311725af76c97b6 -0x95a3aa4e443541d99355662e816ca0377aab208db6bf5a878261eb72b4fca121 -0x3e9d07a936de4f0a5604b5def56a0b63d15ab89797b0c5fb3be23a300e479056 -0xded48f8a72a23dbb2c824cb65617d64d0e2856bed7e32370543f6a60255f9c2c -0x81406204129bec5cd6a6890d5ac19c3af6f2439783bf1a74b69f0c881d95a935 -0x2df3f31c674c50a7b5c59c42e1efece0994f3b9625d7b91477641547fdb1c6a6 -0xc3e6cd26c4f6f1d6df3e3c241b9789ba5d14c8f2bf3354d4bd40e9e83360c294 -0x90a64807772a26e03f6ff97a839f34354f6e2a7252f5d54a15a68852461cc72f -0x33432e8d59dbcfa658f2b6c3b305f43d753e792c0b3ab9f4fff73d249326a611 -0x9c5d8c3731955e7676276e60281fe15f7f12c98957a4db87e1afaf0ec227f823 -0xfd30392d4d6c329a1ec66a1907bec591b61c9d09b0a5d6e950a07419fb40f1e3 -0xbb4dd141d9fcc8bf528658d5bb58511072827ffd22fad50c2d2967a90eb78a5b -0x47cef0aab45334b62a0f889144df5ce5717c30ecb6990b9f5b1c7c9058c228b3 -0x17c9ef50ea436b636c3d3e6dc8c744aa2de5010ee02daef65df937468f25fe78 -0xc935913f955d21b390c132797836eb62520d25f46b33863074684b12cb0c3b59 -0xab6bf8bf81946ae3ebe6da399982ea496e8101a4d258265e7b0fa6d72c3b0f2d -0xe05c801d0c03759eb51b647268d175d0be31e7822c09d3b66809250e074192b1 -0x068b66854e1ce30f5587cc672606cdd8197d60236d3b92edd18d74f3ec34c6c8 -0x01098652a79dffcc1994aa0dc7737fb0f15393b1d834af9197e12aa9908b2774 -0x677135a71e3b2d5c218fe3e3da797196cc68ef77babac26fbaeb7e4a9cc6ce03 -0x9e5e1498d129069e901db565a06bcc6c3522f412960638061eb95aa0e2a1f979 -0x6d3d7b8518f3a1924d7dac221052dfbffa226a4fa0fba851c6d1dc8339e6b1b2 -0xfb419d927740d5390ba6c1eb771fc864841bf46ce9d40e350bfcfc6d42e0765a -0x23fa0cd5da1e871953d310ed4504ab524098a5aafd1fe0699e1ecd1e633f919a -0x26dc3f5fad9a33b16e736cd81734718fd35c4b37c882b59d62e0f10359b1cd8a -0x93a5bbd688ba46b209a8c892ec6d392e52b7d8b86c741a95db9b5d633ffa1b85 -0xebda3b1e5c8b183a0b17c4e176c751dc3085f8c01f9e1f5b3960bbb64a74205d -0x225797929373c78445a787ce695d7e3e611d02a33b61a5e6f7aa0def76d45b05 -0xbaaaf2110d754ec91e31067cc2f445ff350cf0a8115119097369a8c57001abaa -0x394a730995c2ffe232b2fd7d4fea0ff611fa0e2fd49bdb3fcfe30a10c5a88157 -0x07ce47a7ab4072cb258e6e79541bdf82aa43fff597100977a4374696dcfb1cf6 -0xb2fd3a5fc8ab54c95dd17a96499526427fca349f1906b363193d42d41df62a8a -0x4b6efb8743ff654ab99dd39b196c1812fcc6f74a7dadd82b62a614d246066f6f -0xc5a56f6310db349fc9d983f4d5b10400d283b202f2ff8b4e549af989abb284fe -0xecb822de69335385883b53ddfcf4a6f1067bceb4004d53ff46a70dbc0f39ecb7 -0x513b3fec84410cd137093a3fdb7e30f1723700b89683202110e4efddafd4dd80 -0x70f755af667e93224165adc3f07b7d2c9d23b86ca76a669ef4e41e076e271208 -0x4ef5fdd7b6a84a7587b1400d250ed930a9c2020f8d6e9c140231883fc40c5b26 -0xb3c4c8dc2bda87943f769bdcd763f18bf43dd8830b22a9ec8a7be3a368e8893c -0x7ff9cc55e7059852ef2bb0b95001201f280a48a37247eab7cfbd6568dc191f26 -0x8c996b81d9c0e01240302bfd0fdeb2a4a9f2c6c13b52b90521dfb0cfd63f242b -0x8538fdcb8a6f3aaa62f741e612e22335f908675c2ef8c77b9f122502375f409f -0x49bc96adfe6562f350f99a4095c686e7b8bf5338f79733339e9d168d9b55c1da -0xda9fd6cd03458ffb9208e877b92c797988d0ad91c364959c6674591f07e9efa7 -0x208a06cae32bfe1bf364b5f8fc18e8fdc2093bd73b66c2c6ebf7b30c5710c427 -0xf9b797ac39ff8b8596019ed63ba9a7e9c93963b0b7bab0538b9366b2da105bd8 -0x045635b28a453aa340f919c06e44bdc9316ded64e0341d99692ff2ad65a83711 -0x2a609a5fd2d98add950d34c87bddc0c58692fe491208a06dda00e1454efcdd0d -0xb79f21775dad96010bd9715d9e9f66f4914266b31a5ecac5e1d8540d164cef3a -0x80f41a295aaf33204805950948d14d83f3f530d70ad773f88d7d713e8a380d35 -0x8179aefb3ca8d8859f9d2d7f081a72950c910346c4e87b28e7d4c0ecbead8f0f -0xb0bcf01ca3e86749c917b5a243e5fa6ee0b935faa7840ed2b47a62dc0befe389 -0x5ff7fdc938430baeb2fd231803ade5042cb8415460e81a4f9d83ae4a32678d93 -0x27f6a0db9e43b0a19d0b1941e2d9ccdcce789f8602200504a9d0e0fe48fd0315 -0x4aa2ebd356f70359ec039bea70d8fd7944d1818497d2940d2339734febad9139 -0xcd9ab789360c3588750605bc482e81ba8db5505a96a128007daa0fe128b49256 -0x48905246766e09c7de47b31d049bcfa4cc42f894f2cd19f7f5d14fe4977b1d3e -0x0deb4e84d3478c6b3749b932b648825a7c55c7c279ee9a517b0a61f2f705e8b9 -0x48c048556abbb0fbc16182e78a613127bec6cbdfd21768dd752ec5aebae93580 -0x4ff4b53892e05c9a9057d878d392037fcccb3504a688e0045a12c005f4226ff6 -0xb9be78858d4ed7dcda560f44303d0010c18da148559107daebdedf828df48d69 -0x7f7a9c6d690ac828effd3113df1216d6b774fbd3635d75df118104fbfe441aa8 -0xa4d927333bd7ff49c060c37c166f08dccb08162e2cc35fe6647478f2670b386c -0x996d5d1097fa2a2408eafe34eb163fc5d1f84c279fc423594ab9410db263c047 -0x948c1c77f7e5a6e1c72fa91ab1a07b8fbaaf61ef1c3342dc0aa385cb717c207a -0xbc7185eb771285500dfb5a494004cae1d001f75d85f3a786e091f5a5a11e5c01 -0x81922b703ec3e011686fdeee7cf0232b96f2c0718c4f74f6069f76b890c9c766 -0xca8ab8dc611b1f0447633f4b079ab688ca0699804acf01e5ad362c42190217ca -0xda859e2b6973f3717994e1398b2cc1a6180eab5322ed6420862ad928e5cc2006 -0x4ce9a7fdc7042b3ea27e8fd353ce06dfef6bd73fd36a85bfa21377d1f2bc4b62 -0xa58276dc87b40d080c75f207575ad6cddd3af788acd514324d8616f834d93556 -0x223e55c21d60d2005586c50467807b4bdc76c0dca5119836e69bdaeca67326b9 -0xbbe677dd1f24ce34c146fa277955231115f88180039f2ceec8954dc9ccbb60a0 -0xadfdd044f41214a8878a5839de0ffd1a799b7473d7dd5d879c9f7cbb109a1347 -0x4cfee974db9737e1ccd4880beedc39c65724b2a7c9b0cdc30e9cc81f7b65c3e7 -0x4ec9d43f64aa940185a7ef9df98a81c148cc87e7392a74a7c445bc85340632f3 -0x50293b662fe25234127b953687ea7fcaba714eb278ec9f8286170faa44be4f0e -0xf5d07e3fe3b33830fadabeaacbfbe6ecf548c2907de04e9ed2b23a4231b9ea82 -0x8fd8f437d3cf266537a825f8a2bb6bd1851b1a1e54789a4552fc01e4a24d30ba -0xafbdccfa391b4f7da6061bd3d0fe50faf16252afb4c677d4ff498867505fbedc -0x45e2413b365a7af58507005324f46f32c4ecfb65aefc285f5c8d2251df33eeb0 -0xddb3bce26749dd0da1d4e566cee800bcd4c12b2d5ae610b617906fbdb9995df8 -0x5cd06957633de8372e8ef9ae7dea0c6d11f085bbd565059a24b265c1252910be -0x07faefb58eab3251f790eb7cb4170549d34dd1b8bee41181d225fd15f281b1d1 -0xf9f0751abd446aa6c52d8519ab5441f759246dc5291b1aa3ae7ea6d9664d645a -0x736b13a6f0533973c7648b015646dadfffeb65a24a85c78955b075df20a6859f -0x6f398c9176f45c86d65dfda492030083853aedd7a5e1dfd3626c67343c23ba18 -0x12e983807fd41952b555d1eecb4583d1b985585efe58a06ee8243a9a248b5bc3 -0xe3a7ac7f0a6e0fe8a7a17142d415d3fb58c0fb7ebd93fdefb18794f36e5fb093 -0xb716b92edf29cfe88cc715871eb22dca1a884bfeec18c57d0b20ad5a9b9ccf3e -0x805f7e72d8b76ba269bd9cc564254c1b4f53d3fd9e517555578ab647f4033049 -0xff41b04aeaace94e9cb9de8bec75c15488fbbd64bc6e6a5f5eb46f2d4e0000c4 -0x47eb5189a6d4580e8b162db4a6ddc776f6f3015af53580013021ce7e3a1a458d -0x314eb785c7d4edb1e5c02f064a34e946f0271578a65def71deedcaede46f811b -0xeb9e845e9a4e573098feb2e167da593571bdda858628a902c36884f8402bec5d -0xdde9d54044b345fb564c5fdad20249faf5777f728c64afaa99ce454a1047d6c4 -0x2eb39f5977e36954960826be5fd6a92e18bb8e4b9fb994f9813eef2f587299a9 -0xb3fda76daab083e60b6ac589bad7d0734427620cf60a76f39e5e55b885e88331 -0x01052556f052cb574743f347a933fe4a302a1c82180115822d8883eb6ecd773c -0x74c0218aeadee77e2ec8fb359c837f64475888eaf2037ade64b92226d2323cec -0xad62e4fdb92e0242e025caf4200f83917a4cc784eeb712afb8930a8343f1cede -0xf78577dfa7f1d1bca75bba1a0fee5cddb4b9ade1af38da5691ee25dc6b90f9b6 -0x676961a4b3623c7981cd526049f92c961adf10527ee1f08a305314f0fd9de08f -0xefae2fe541393592ccf82eeb5e08f26c9fa627f713089c95702abd8bc89bc827 -0xecc582f23161eb203f3165e433e83bd5003baaefc271aa5ccdcdc8f9df60ee27 -0x12734ef3f354ed54877aec424f104d17069d1dc712a3302fb46bc43bd7f6ee6f -0xb895559b603e36a27f41d5bd9e87f11e2dcc20709c3e1215a50067325554a7b4 -0x3b451d28d98a7f2430e924dbd41bed659746b8e6f28b85ed731782d646490519 -0x6f3a060101611a30861b0d356302c665d5587ffeaff39b2fe4eb44b014615ec5 -0x72dc6aea89d4a50bb1c9fec7e8d9411618ad371bcd1ca4ca0b4192566ae66943 -0xb4020d1461f52dfc47e790cb49fa7eaa9cba6e363735b60d641c97c232bfc933 -0x035b1fb0be594ca331dd0d531951d73228e35a1f419b0a80f6fcc1978484b975 -0x78d4607962e5216512b814423bda3a2c5cf956abb05345c9861ba2cdb5f143d6 -0xa63aa95923d7943b1ff8cdb327c3983cd40e0b574da290f8b559c2c8d15d2c09 -0xb785f06d2477ad4d8f27ce11a00c65d8e5eed8d4cbec40b36edc71ab2fc4fa8b -0x6f7ee5ce7e9329ad39b7216f5b6e8fb600aaa2662b70c6b34069cfc89bea9000 -0x5c0213b9d2e0722b578b92cb294d8d53820ecc73d833a4683163a5664224281e -0xee3ad5102bd42294ba69501388c87438c532e27a0f436ff553e419d42499e246 -0x434b55c61dbff62b7ca6ce6746d74eb6af4334979d430af8acd1a35ba46b9aeb -0x361d693d8de424510d03951a0eab0ccf5e19fac05f7b4e5dc71d7914fb117022 -0x6a4ec911c6bec3590be33a2ddb393d124008d29f818000ee1173c86680c1de13 -0x6a4f338a7cbed696aed6be855183479901b3ce53ed54e8745b39709ef7fe744d -0x5aa7f0dd34b43b68b19aaf7270f96f447e59f53ce87412ebb945b05a54ca6309 -0x462995ae826893613f639997d95ecd7ba746afff34a23a9bc19bb2f422c582c6 -0x5e863c9ba561db036d16bdc6f9bcb3d16e1c857392a2575694a17cde1bc4f66c -0x536c0d7496755e9ae4b3762a52e3945b1f63911be1e99c88c8b3ab9d674745f1 -0x3a5d4b297ea7d0b7d6697be7442f3a6cbf1cb2633f8f9e4dfcc0ee56b653dfe3 -0x44225eb44a18dec0759b05fe5819fb81eb268123358470e48db082ba7209cea7 -0x9b6b909eca6975dbd2abf2fd214772794f943d04b7719fd8f7819ba178edbff1 -0x090da34c984401adcae1fb0c209aec7cfa199de70118454ac914aff1634c3b1f -0x8155b32cd3f01889d62b2c0511f56787231b5b08beb9d9d8dca5e363347f05c9 -0x2b0225619c70d6d1b8de0e895739fc76fc269f277d0159578398ed1681e4b536 -0x212374f26d24abd28d8cf219a49cb59f59a84b91f0b82c93b780595e47362957 -0x19d5c5958e62ba53e2f210aef20c549b9029db183982927553a1115a96f473a8 -0x3050d2047cf79ff2f0e290e5a6830947754e0d79cdf3f7fd54b9c833adefb074 -0xc2bc0435a58e144097278ba6fd5ad30e5a1db94082d4c3898510fd46a6d0dc79 -0xd02d6ecbdfe2800ec620ba756523968c8fb36667018b426658a134c2756d6e61 -0xe4220a396a211608304a0f6bc3e6997c06335aba1189f5c999071c1bce72c0cc -0xd32f95f0bc1b77d46b1723cf4fe0fd257a6cebe7810682cdb6d46ef02e8adb9d -0x4319319aa60c08ce24bfac61fdb43caa7cc7bf5ea3b328e11bb74be0b088683f -0xb1085e68dd2419a2e0bfeb56480fe16bdb9c13e3cf213775497773b35e42443f -0x69abf77244cb7378425ae8f860a95d4ceceada94734a7f7fd9aa8fff7bdac1de -0x472a89ddd1499a1cae22bb3bf7a68da36fdc13a37d6589cb7d8b2f1dfd7c4d2d -0x680106dfcd467145e0f637cf762d1aeffad8b0c5c73d79248442cec667a40ca0 -0xb63c460d6819ed5383b0c26024f9bf101ec89002b031e55fcc3cc2afb6b69552 -0x3d80889c1beeb88615e21c8f195d668e8559a772fbb9fe95b189d095f0bf8035 -0xe3b95f38007fa891f5fb63f21ce1f2673ba8aea2e7ed60c8e48f1392d8a0cbea -0x8c099bb89d639662d027794686eca5e44c6bc4c0c033141a4d462c4e73c114fc -0x52ba7b6093cf68c557ec2fa54a427bc3413ec77decf0fee8e986e93ea34ff87f -0xf4590dd1ec7b2809326bd85dadbaf42a2920a7bf6dc2f288acc899ee389aa7aa -0xd59978918b4f189513a0f2a49e0ed888828eefef1cdae4451b7d1ed193fd466a -0x8504bf1b8e3755ced492e5a6cba2a1ea7660df0656e6264555fc53afa1bcf0f8 -0xa12311b1e64efdef79714d5247e1ca68da8c341bd90fbb2cb137f9433c62595f -0x76c529a04cfe7ef52470e5f7ae65e4a10f0cc19bd6540f26860c2c7c8aa18f45 -0xfba2b1001831fce351d076da099a0c8d1955336729afeb05a81f24c07b54baac -0xf79f845766b061d1077a7bc62a99d7ff4f53d696aa019169f1005a0a2b737832 -0xbf15a493efde59d3c083684e58afdf5c118327ad3125afcc1fd80c1a058f66e6 -0xc1ffdaab00808582cf4e13b98a68d41e8749bac1be0207257d350e715ff54613 -0x7e61ae946c226417ae5a4d5c6aa8c78953fd4b43374b426c5829b753c564b217 -0x6e4f8ae6611dad06386e0471f0eed43357249e733243faf6ccd20052b5f31c05 -0x68c45888fa7de96a0cc6659f1910276438427384288ce653b5b4691a9e8366e1 -0x923bc1982b4b82c4c50507cc68c7b5a7e602527d6a8b74bb78359b488d3277b3 -0x981a16214ae78bafbf1810336526dc836abe0c33fe312fa5c9db5b6314d60ba2 -0x372d97932919d4ab37954484509a934dfd4eb5406fd6efa9c1a5f6052443d592 -0x41ae35a6e95c2851fe798c1435c10b1bc57412cb7981066c784f48ffcd5909b2 -0x0c23d4c9114d8e4f38bb555c9e73d725e9f7e5305793a1f8679da3c1fba7fb99 -0x2c91bc56064f3045bf9b929888283452ad36c6cab284124b918346a2d7031cba -0x9f5d1ca7aec74a6f3bac2731716a4a36b02f5910859778a941a40a16f35a73cb -0x3c02786d62ec613d4cbaadc22500379e777a1bb700858761c9cbc13f47983a9e -0xf3f1c24284507058d7028585a5b4d5b00eb56c40fa7027d666ef580b64cbefac -0x821d60ed2b193b75ed3395e0885fc13ffe9cd3f35c0e8ba5d8b05ee1a35ebf1f -0x85cae091cc5c6b03d83da2633ade7474c1593c85221cdf87d38d1e14c83ea86b -0x82ab0103ea8a7cc41651db935a2e73a3bca282bebef05204b40efa0a23248412 -0x5a734f5ff1d0253c8212a32b65065ea29970d34e80885db0a497d2bb672ba1de -0x836ecfcd5932fcf24626e105b573932771827e952cd3f9acf23a823838711415 -0x64c81ceda3718dc81005bf703fc0d71337a7aa82840fe073a634831a42e27969 -0x10d63f98924689173accd919eda07a6012b2420572aa4fa3649beef867dc8989 -0x8a3c77aa76afb36a23bbf244c0e3c25c176d5fa54c133c0a01b515e6d16a5f90 -0x1bd70f25a99c86dd84b2617c44d062ec23c968cec7738e3242d484d69f689c35 -0x862f1d6f3dd5ea9db5485eaa607f2db589f02a913e8d755cd3473b4b73e9ef7a -0x939bc8df81498061c566f2931cd03cb19f272ece1e720b7561249537537ec01a -0x8ea68ced84123ef3bfea42f24bf2c57a91ebf931779e6376ef92613c22769525 -0x175700753f8156f528c8211bd062d4c4ef87b726bddf535feeb726a181396d97 -0xbe2b9fbff493a6ecefe3e87b9ae789ddba4a7dd1e4969f9422fde2564f6e8b3a -0xd026df2c8267fb85da73973e1926bea9d94302f530fd077698ef277e888d565b -0x80d48570c837a48e8895626e163afb6d1ecc58503fc406d22a3b28bd12ef762f -0xbebcd4504fe6065dd002c6ea683cf1498897237912a074718450a33e1fee03cd -0x200d57a725e639fb67e7584c73b49d2150df73ccf3e65bd0962f943579972007 -0x4de52cb18338fc33167ab70c442241f269d124ef7f0cb465a9ef9f21ca219156 -0xdb0eef63d2c65cc76657b4158019760329fe81325c6c27b775285c93dcb4bf46 -0xfbf67331ef3489ee59299ccd00c487a1c4f44b49bcad4669f8500e00de2ace82 -0x69e9b177d596d2aece13bd75d4c90633d9903ea479a45b6c6cca50038c97bee9 -0x6b9a69d67b2c7ffc4fb9ec3b77fc1c51edf8d6eb5211df9f95f2d68dd9858e91 -0x0c76fe69640ea5b1984056284c90b95a459ea31e0b1f285de41c515c9b5a0856 -0x45d1b157171b833a0148466b50d909a70af57e8178c637478a2e90f6c622b8f5 -0x17208861c74492a94deaaa74f12ec8fb646781ab6a565707681dfd56fa13349d -0x694406893fb472165269e8b5a0bf32d239742341140a01355b2cb237047bdb4a -0xd8ff3558d7da7cdb8aa22a6239f93d0eec2a5622f0dd372faf619ec2f0f7f172 -0x1deebb1ac629aba9a097eb5eb4b3dd0bd7e69a0951f8a5b0d6ddcd8736bc9d73 -0xd756b43e9dbfa53a1e0a78a6e262a2efa353f727244aceb71e6377dc14eaa8c2 -0xab8e5fb3e5afa54485dfaf0ad3f5261b9224559e13fc37caf69563e1cb15d1bd -0x98feb9f09de971264e5034db6f3484cdc3f814c20b3bf079212220a2ac6e8c4b -0x34db9922b8ba63e3db1ae2e9c14cedda81b14ba38a6d3807c927beceef0d8918 -0xcd8884051eb6971558c05215cc82b0574a506dac54908e73246c839fd230dcc9 -0xacbb8a84598f789a98ce214ea340dfc2ce79109644625645a3493db9241c1c63 -0xd4a6eab08074e1eeff53166955324d2256aefa2fc29d551e46e2abea6b0f64ba -0x44550f3c06f934f090ce1bd6cef76e6325d0119dad74ec6f938a09fc0cbff6ea -0xb7975c54492aa15975f18653344655d4cdd8bf186329d581212e7d8e2fa9ea64 -0x79a97f0c5765bc67aa3eff554b56ac3b03ab7816434bfa35e19a6b6ffcc98d50 -0x7a92519ece85e12641c0988c75bb0f5d1ef3117ccd6598fc59698df6bf294ced -0x40836187f2a0342fe245b222ad2cea01110e4f1344608fc865320018cd05b31e -0xde2dc1e24f8123b4a3e3a56470e6fc754c630aff904d0c2e85840940d3a296a4 -0x5d6f8f252df1e4ecf1ddc8fd0af69c012bc9def7d0e86596cc4253d24b12aaab -0x782aaf7fa29de90aae7ce02215e306fed60f6fec116ef9fe1df2dc7b64430bb5 -0x68cbfea47bb81e331de0406eae6b3d127eea4e41b6e6836fb702a6932b38439d -0xfd577bd3c8ceccff024630f00d3d8f767ba93c2648aefebb19338afcdb7c1886 -0x57f52e1d427b33786c7382e0b73e6fa7359944b17cc7824811c6ef1bc8c7cfe1 -0x8b624de116456f4d0e10932fc7d5afc9bb8c51085b062621ceb19dc545d1129f -0xee870a8e2ae322b8d65087a645ecfc8b4c6b0ca00ec06ae2c487a8cfc8372d34 -0x965b3e630e60426ac0ec9b6e671d61a6866ac475ac440ba68648e1c8db7a7153 -0x0bd78a34da6acc4ec2f76ef388b17936830850530e4f9c6446a96ed2e2186b06 -0xd3ad876a32c73091a39fbd661470fddd2ace7d55713321751025867a6d246fe8 -0xe03154a15a104e62000b82db1bea07fd329feaf54a2c10dfd8d5fc1c7983a357 -0x8b2e511ae2b5cedfa25cf53c4a7a11e21d0efa1ed338ca4ebf235bec0677027d -0xd05f9e517cab909fa8d78db2079d60d0ce4d9cd00e9e5b9974d51f1d60f8c61c -0x90f3fa4297d7ab73dcc4bc6306a1c56d8d73e1f185ad4169a314e42cf5092eef -0x0396590aaa0cf7da6e1665696be88c0a93d8df20a45b3c94bd9de2a9163f6067 -0x5b66a51b69bbd9c8d47c26ea0d656cbce45131352a1d8b2ef6594d908b890b58 -0xec543491ee50be7185c359ddc29cc927b8d5e8adf8285a3ab16064a9c46dbbfd -0x53a51e902e9969359c6c15f84efa180e02e1e965314c178dd9c8e18cb398f52d -0xf6a0374be3ee07bf5d5e95ec536ab57fd5b8970c87f66267d40f07899b6fb2c0 -0x87a9e84c9cca46c3a020aec853ced82be74bc53b52d9c0fd5a2f74e6ddf0053d -0x09ce42e85f38c51d17a869d9ac0b86d8ec8f83cff3fa86f8ced112968caad834 -0xc1d859319d4b5e3669ec844030ac3ac62ed7084e440c94e32f04b51fae2bc727 -0x65746fdb17c63a3511128a79c40827bfd2cb5e367c9a9e77fe8edd6606d7ebe9 -0xf44a9b7eca8584ef8c30849d76e9530fef353aef060eda372c7c52dde8ce6a9a -0x75a11ca8c4fe7d813bb7b42598ecbb253fc616727c566b42a86bc6042bb3c039 -0x8c449f5566cb5de41006e00ca242d5d43c26189995d03d0c8fca1a0392b1707d -0xdb0110286a22a2e4af98d4b4a319e91d93207e6c301f229bb793e7217912015a -0xdb7523273360e5f9bc24a5c413ab98febf7e9585ff204cf6f04270ec1ff41b25 -0xb202b5e5b58cc2f0a9b3380d950c6aa2092b7f1246981c1aa28140eb8c9a4be2 -0xfc6c105a1f304c4ea1c7ea3257dafc45231ac4000e513828125ce83c8f0e0d8e -0x1b8ac7511bcc91897e61d723d441579a4520e0db53a1fa94cd006bd98d86dbdb -0x0b3e3cd76545303c5a161079bf749830ca7bd4d34f376c611642419255085297 -0x57fedf6ac2c9ed82eb11d99b13c4950fac95a05ba9d4082328cd0604f5f6b105 -0xd8980d99f9770c8dadd8f2017e2b465b2f8ca3c734457973607fc28f9051a221 -0x13da01da20dc9994cb6648866a7ba55e186a97c6771749a408d361d58a63fc0a -0x0bbac2f1b8646b4f0a679a0e5e6c73f9c1690a14353215f698de35d6a5767150 -0xb1a91c47de3ccef628759f9c5cd79db3bda4e649755cf33046ea1318c4fe4641 -0x3f3ea50af600d56afbcec30babd9a93c5d1216ebc776fad6afdcd81093167ab0 -0x3a0bd53f41f97a8919f35f6327713cb288271162c35c6d16dbe16a1c282fa220 -0xbd777afe120a26a47902b41360e2c6f0a5c258cbe53f1468157d5b65e5211aa4 -0x602c4d8f5e650745a3ecf46393c604641cc9f03f5e9c343091d010b520ce69e1 -0x5790bd9188559ece63613e881729914b179efb6f135ba620c9c939d1dcd9b2ee -0xda94e39bf5016f20aaa8adb1fa0ba6bb1f7b4afcd2d9bc86e8ac7edb69c42722 -0x49b3268ddeaf41ee6e5a10e15a96f113035a544738abcd36aa521ada860cc609 -0xad38d87e7a708dd12815672cce24cb6045a78d14dd96a180c35dffe55a746e31 -0xaad96b1f2bfb5c71d62be6a92701201eebcf72c28eb03b7fa6f6d2e9f795adf1 -0x0ea142a5ac70ab29c9183c517e3325f766be42963154d16937631a06b3f19ed9 -0x34dd99829feecefc30b9e4cf7f533e1cff5c54ff77833b260e2e784e4e2ab670 -0x769a987d51168c8869b577374d4dcd714eee981f8e3302ca0ec5a0b006e778cf -0xead5cc0afa0adde88d63a3624affa125dff9ba09952a218f8938053421112ca0 -0x8743d611a6bf9a2a35670899ea78af4a79dde7a71a1250784522298dbdfbdc32 -0xf8f2ae4f82b673eb3a1623c2a055470ca547d8d12983a8fd177c681da8290542 -0x12aecf6b2c8d377fcaf63a1cf55540e177219a4025b04a4dc7f3c43885afbfc4 -0x1a4f5bb6e3c9118e67a4f73f4529c94ab8a776c2bfe7fd5ab7e5dc9b772f19a5 -0xcc000a14b64a1f25776906d5396f4a24d5e3d0f9e6cd5d4e430a44e32004fe75 -0x087d0f1a3482d7a0219e0c1061180619784231796ba9a8dfe37324c3772287fa -0xb36a4396fae12a96b705969e1b9cae65790e24d3588fa5d7f64dba4ca2582605 -0x627d064a4fe5b87611abb2a902b2f6ea7f25545f4bdfc577734a9aaab7a93ab7 -0xcdff6c6e551e3059ce1698ba50ef02529006afc199bc0e9a52c70f6042a78877 -0x2ca9b53ae5b9121513fd1549c6ad7ee23c2f8d0e4c4de3203d1f2b454f9c77c3 -0x09567b73480c398d2049825480c14787bdb6a1314b885b0d9d56c6230794aab2 -0xff09b27c2ce03314fe3bbbaad4f0f983dd1d4f90f1969ea7dedb5417e2593435 -0x3c962f6c6f019a861a7e4ca019a6519d46bcd2001f1ab9e7d6a550122e10d51d -0x77da2d64a9de5c823a1b85a3c95cb5c600dcb7b28ff55db515a20967619fc3e5 -0xd1ecad2e3554a6c6e0745216a69e4aa64f342c8ebc21eb31078cffdac6b8484e -0x2e718a40d6e2421c39b7b6dad5d408b35c3354f353865b73b3762f8cff006d09 -0xfbb7b43a713e4dc488388f8fe3f487737330e1707bac7e04a69fbf6b85e5bfd8 -0x06fbd1791cbf819e24397ea45f0274396e5cd5af1f7cdd01243c868e4b432001 -0x2fd896e638a662515aefda5f4e6d96d5248b74cea93ec17d2dfe8fc9bf9969bc -0x60bdd3ce188d75f295e7dde4c7f88fa828f2520adda4304e2102d81a0bf7356e -0xeace7e0e0c845151cebe09f0723d43089e7c9ac445bf88f67b092e8c7db92af5 -0x9d078946872f0c153fe4b6445b0768c2b5f8383486ed0b3cd385fba364cae319 -0x7d7ed258ebb7f220e789335404c11163ab9c8d49c6ac7ae6e3e79dfaf90cad97 -0x47576f2df9601996f4fae6d7490b7778c5e1177b0831b9062d8a8b769a6096d5 -0x2a723a4958dd3dd28e80005c015cb44785bb92a042b2711595c44eb913aad348 -0x27937b9ca896dd688b14c9703aaf60227768bb4de8ed1bcac44b111baeaeaa21 -0x7142e81e5450b4bcdd859f9a646db7f6dcbb7102194d42d3a43a474377308b4f -0x72931c60edc802d399c180cde776b35db51429309bfdcdccf928569c31802d80 -0x05dff8f52095981e3cb324bfcdbd69261c316ee4169652e4e94c4758b1fafaa3 -0xfaf376dc88b3b7b2b56523356bbd6c3e1a10517c4abfb617583af58fabe91d34 -0x12c58b6c6a6a4b8c236d4963ab53690a900285c7ebc66e70a80bf8bd696b29ce -0xf56b558c52475772c02c59ccf16d5423a1cc3216fb25164f7ecb7990aaca9b3e -0xf19ebeea4744f4bcfd56e25e19f06150dfd731bdb4f697c2286a9ddb4fc95a31 -0x25e1a2e56b2cc0ea596395c5cee24d4aa9e452f419fc3aa1fd24d85454f60d25 -0x483ed7e25f215ecf9dd1d5606aa47d3dcaa6aaf66047d14db6be6a3b440f441c -0xe87bc305d65b98d7872244ae7a1ac033318847987cf54d994c181a11b9f3f85f -0x1ac8c574d554fa81bcf5e8b172c268fb2b6458eada64803983935b1525e614bf -0x7be764a98c6149050c070b2b86ab7d5279185fe7086dc5e6d2340794e1823f47 -0xe70c0197509fbf88c6f17aa5fc6c3acdeab5fffeaf21c8d3825a2e3acaa55fe5 -0x1324f700c5033050831015353e685d3b1d62b99828062b377c197d4ec50efd1e -0xb7e9e1c533d759fa36dbbd18215ee380d1ccfc04a8226f28436ba589c9b47ac1 -0xd66e5d298fe584994c7fea3c139673a32b3e23d2c1114709ec31006513ffd54e -0x5715281853447cf205488e49fd3c04b1a7a30342a5e019035db5c10b7145198b -0x56939229270e66189d7918d9cb704b5577f0dd3322765b5a2adbfbac219223ef -0x0b42fd83bc54a73bfbed0655998db446700fb69db71a0cd1480fef02a0e81a3f -0x47edf583f3e7f176e0e414363d7bbeea40cb2842033d09394076e25ab76a3570 -0x64f2f786b4212985aef7dc02191ec9ca8ce3da4c8668a243b2bdbc35f112b519 -0x57108b1b92841a45384137537cc6a8d9f2d561e7b8a4836cb67d7699943dcd48 -0x472dce3d40b92e0260f71dca99244447b382234c6f5c11f33f72502fb68689fd -0xe7ad8cd4a8e41a125fcce3bc52433cca360e77d0546bf8436365cb46cfa2b643 -0x487c4adfa04dd81e410a2f18965a58f696902ae78cfde0d9806e2ca63360a255 -0x30c0883c1deebb07e6ce6b09df53c62d4826753e45ea59f8f066ed2c164e65fc -0x07f3c83c137b8ec19f054cadb429076c0296faaaa2b4920ce717bebbad6e3fd9 -0x5f29817dffcd657622b2ef2fba6fd6870a1ce538a31e2f71346e8a0c379afcc1 -0xdd09144352ae30486d85cd086da16d9f1471f5a738f37174dd81afdd07c7991f -0x0748674af95c52166df05ed2442f0e2ba23ac697ab4b5a1af6dd6ade9220a450 -0xc39fe82c8fd5663d5e73015493587c539f5cf89184e89f02d00b3376aadcbc6a -0x2e0fa221e65d958868602752a1533f2be1afaddb523b08b3b5513a63ecb7da33 -0xeb6bb9f25176f7042e6119c939dbd8562fd35f4e150fd25cb6133b471eabb2cc -0x34b0a7ef208c2ac6c5e0ffda0e623292612d4964c286ad1d818c324caa6cff6b -0x512430386228f1c1ac8d69df443fdcfa109386d6109cbeb0715e7919be4c8189 -0x0385edeb4bd8c4e33654f0af3c6a7feb7ee868de00b437904166fa96304bbaac -0xb9a870555daebb203ac84069139e2870a2eac24137a625e390250cb23a3740b5 -0xe5dd68869e852c38c8313ff59d1a772280d73f684e0e9cfd2db29c1993a94e07 -0x7c8cfcbcd2fde957ee87cbd48256712fe3e3174648bff235690cca7c3cb350c8 -0x118be6d527adc194533f0d6a9072a21633dc5ddca531523fd88c0e78f125b6b0 -0x6124ba7cdb9ac1730689f4ae62f1363408d6a6bc96251eccf4f3816da2f83b72 -0x876cb0380d20b83e68fdf66f2bdfb93874aea2f403e3fdc908814d279aee51ac -0xd818efd4422954a0641d08e09a41b724758df9ac3ae86e37d374b38d5ddbdbee -0x409459d09075b32511866789a6035208ecdbc4724de857895cc40d488e0d235d -0x9a22b6e5e04a938bc710ee1c563b15204e3ab35d00ee10832ee42c5ad2446d93 -0x18d96096ee3d9bca96b03fc23bb911f1dd9eab65c5d8acf8f896213e3755da23 -0xaaa8c2c351ed2dfd2db98370bcc70387490e9fe8959e61ed54403419909e2688 -0x214b35dc469d7afd6e64ed8a1e0d2db32608bb334f9b7d2b9565b5895dfb73db -0x6b146b1709946acce6c5ae6fa7829fb8cad12d2c9e3ee3049e8b29f4f2c8c248 -0x8c022f5c987302226121d91017c0b84bb77d250a6242ee781fca5ded3a6db40e -0xe96a280ee8e3041757f297a263d71dbe1c24d29b3d22820e05f055b727ba1cd6 -0x481ac735a08408abfc00712ea6d1e843467dbd965c4764bc8076ed0d0fdc1717 -0xa7584bc4b56e80d661c71fddd5cc98e8a47ef551f2a1fe4f0c90cc5658c897c0 -0xd2ce6dbe85686ac271f8e16aed7345759e089eb040ecd589f2380bfd45699bc7 -0x6b8e9971852287c999c3458685b233fc430438e3489534537d9ab53aaf265730 -0x0e5869b56359c7c0523e99819130e4cca40a7ce83c1c51685e5a3b07e9d0ab3b -0x6e93477aae801fafa1be83111f5e59d829ba61faa89633645fe5de8ddb607af7 -0x82155e69d8024586fe36d182069c08c51eaedb7bf55e79a34de8943a60e32552 -0x7a5e1d20c27ce8cb2ba87d786874e7fd4bab677c97aabf457c043aeb35f8b15e -0xc84a4428b3fff33ac7c798b0e29ac97c43ed63fe21597315e847fc27960c425d -0xb7d40410921f7e85508114bdf3bda4c2ea5ca2724c6be403f48709bcd23975e9 -0xc6dc15a0cdf256a20b3523bb05100e2effaa673857e986cec4f8d62c643e3f20 -0x12eb94b83984d17982fe5e5af68b490a9241d8116cea92b898c372e3dfbab065 -0x2b004605b9129ab17f08da834b79660ebc228038c1dcb4413601e01c614e50ef -0x60e9e44cddb3831f654939cc26ad447159e8b03a9b5744755698b0e95bfdaaa9 -0xf60c0d7ad2730feb78b734b646fc6bc11cb8534d4f9e338f7f36b7e7eeb00ce2 -0xe527283a79fe7bdf4e6ed3aea9d64025a3c44413eefb79f46dc30efdddd1bcb7 -0x137cd227daa3d90dc8d016c50c74ccbeae18142841817cdda14af461307a8d42 -0x25d772bcaac40c4b814cb78ed8b2338ba0b332cb7790600a87f44a92563d9be9 -0x8a2c4fdcb75bfbba5328e118bc77bf2bf81b2bd8017122dee0bb5e3dd65c9f89 -0x12517a19e4a596d19d4ee4a02aca315d9d08f700d96be8a1c905a272e2c8f5da -0x1e1a79d14ede48b4abcb9e5831cc18621a465a736dc5fa260a8fbc3769e28b53 -0x0bc51c8af6065dfcc9b5e19b44982521f9d2b645f6382cb20b8a0c392f2d4119 -0x1975510fa6897dcdb9d2d60faa8e20911aa1e381236dff311149def8748ae25a -0x1366bf2daed521afd5c7c21b318da3137cf9ec914d5393607e4d0e65f74cca6a -0x54506fabb73d67f4e9022bc8486367686f29f50e96aa9bb3309bb658d0b29be3 -0x13a4a073a5f027fe89e1ce7e07efe1b2bd8898d25de975f6dc1ff6232303f17f -0xff0f080969f62770930bc76ab2d4b62b5c8871a262202f7bcd163e323a2bab07 -0x66778abb6d57e1a82ad336a1ed83d511e437ed1384c6a4e303d80557fd82d187 -0xb34f9c007a39bce8be2a58dd86524db1f94167e80606e4588e9bde603d2b8a7e -0x0a8889a7adf1f89b56da00431734607cc4cf0fc2352866cb63169175a1dae0cc -0x57368ec43a37a55be9f81290a56b249d1c164a2ae7b42a140a6c605bd7641a95 -0x19ff29228118ba62c66ce630b9223f0361676516d90b759629d911636235b84e -0x9d5c3da683ee9a8cc1cf018562e681a08af2e47408efe47058b16c7f73b72d44 -0xa9e9404aa3e36b62561f3b3125e41b8bc6943b2c9c3039a0cd61ff5e0cd3f229 -0xdcaab19ac7b15add8f94049c6a299e65a348801de3e91861f728f9934c875cd4 -0x4899647f4e64be1df5d1236ade1ceb1cbe71af8d97db40ae65ac8be3a7caf2a7 -0x6f387dec55e6f0843897869ff5d417f1faad874ef2f5650f43ceeceb40e24dcb -0x78ebe7fdad595ad407be6d66f65b03f0c62e24a052cbef3f4c3cf1a2c856b14f -0xbbae041a706af4bf1c93f2cdffefde529abba9718ab2b0844ab153acda55416c -0x4698ae40edb98b4fb6ae4edfaf884cece86c6c282c0e691fd26fd97aed66c792 -0x9265d53198b448df667420a35464cdb5ebec494786b2e54d551e4090c4b8b852 -0x530e4637907cd892aabee14e5663406d08b02ca63bebfb510eadab2c43de90b0 -0x815be76d040d8feee5ab25a4cc70afa5c7757e1a1116c13f06c6dbc5373d6798 -0x46b5c4fcbc2dc4f3d73aba95d2009985d7c0554bd0c0e07c1f487dff92a15796 -0x4a62596fcef9453b93dfd6cf6383a67b5de3cb8072bb964e08cc92e5d43aef0d -0x86801418051093408ce6eb6d1edd67ffbd97b686a8eff73a39dc2af12f1b58c7 -0xb2014fb56f1caa92c8651331dbc7cce4e6fc864689cab110f43c10e86fa0ea9a -0xac9cce38a51d56f1b2febc8c86aefeb98070fcc7dbea008175f5eb3c99e219ba -0xfa8749fe58dc89850b461a64bbb0236cb5383fa76f508efb10b969c0cf640289 -0xbf7643cd1d101b847025973693f4b7d9358534afc19bf26abc02b2564b2b2b90 -0xc7feea3260ee82df0fb2be24e2a24bbd5c0487e1d1a92b2feb965c01b18052df -0xa7ef90d54646c09baa6eac0ad3fceb4bb7ed58bbb77575d58bdb9c27b720774a -0xa58e6487f3e19aff5020461c625d33c4ef8d557096b132594629312c6c5272d8 -0x6fbf896cc508460367c83eba7416e2427ba3ddaf15df9fa5d2b0d176ab080afb -0x6b3c8dbbb5e4f0b0365adc9f49eb83851173cf36d9ee1d7d9d2853d657319e44 -0x43c1ea789f116752996f22242c5a4179be569368efa7ab454d2d9487ec7c79a7 -0x0fbd8ced21062ef09d3264e02d192b369ebf0c147b8e47fa29c4ffd95e6eb66a -0xbfab081e88aa7c6aed2cf1d24f4613f172817e88808a597f17f6e64400681523 -0x77df3d83708ddd89d1353d5b80441640412ba776c547018845b5e727172e038d -0x2e9efb86bf14c344005d22abc75b53ee4c99e2fd4dbee75a779350bc25cf0d3e -0x51cebe579a9118b1fca5b738b7c90a7c0467f5336c98ebfa5a5892af172cdd02 -0xf9b792a6cac22da8f03652674c561b86e4187ddc1fd69ddedd05974d6a03db2e -0x3eec6164825f5c0f456c79ac31ac07cc91f0ee2258ed2d362d98ec460019fc52 -0xe9250e044c510e86b49da4eebba9fe77c0ae87d3bb836d2940f5e679ecb87fb5 -0xb1ff36940a42ce7e5d4dbdbe23ad70a420e23872becc1dbca9f37f1db2373c6b -0x8920c9287adbc74689fb2582ff2ff65d5792c3b3c9fee0bafcc6be7a1d173fdc -0x352803f7525d543a8dcc64ae38b937c22998d857cc50b75c26b85c554e5c1ad4 -0xb8551597dedb8a71f8943592d5b3c7a75a24553ee709b25fa78c7c76c636b451 -0xbbf77bdc120db07916fc63e376903d1eb0e360412818b6626aff505252fab866 -0x220aa3a8cdb49eae99111df83f4baa73e13e65a7473ce4334a38ecfd9f56565e -0xbf2e21934b1795d06bb671c287e8d51fddfdf242f3c404d24635dbaefaed38b8 -0xd6c23372eaa7a14d904cec6fea36729cd6a8d8aa2271a3d21bc9087ab14db827 -0xe8f15998f4973a191a989ea47853a3d20671fa3b1b0257139a4edcf3c42a5878 -0x047faeeae9ec5dcb6c167713fffba41080c1f4469f36a1c300e03f5ebeacb879 -0x5e2d0679f1a14367f223a0747a58391330ebaa97d8eb83c388383bd4eaa84add -0xd1ed7772412fc81c4f6cf2b2c361d1d6990df0185f69680f2256bf49f38eeed1 -0x8698c54f9fffbc9fcad13d504eadb9aa6d1b5751ff347e2a7b18098a4b6c5d68 -0x20d09037dab815d2aca9496122e715821fb43775650385c3bd0de606691a357b -0xf6f201282a0ea6e9043bcf93bf866cc1547946dcc3c432ead24a8a6f17f53393 -0x381d51dedfccf723c34d7827d920dd6cf8e3613dad2991bb746e55b0b1eb7846 -0x14b1c1a788698d90447732ac8f795606568495f7db8607353530ef4f5bc753e9 -0x687611ee6a1b8920d9b1d66cabe81b4515634e7ff937ccddeec15d13c9131187 -0xfc15f8ba28d670294f3caad36d8dd3431741cf02c605bc8c113b3b35cdb43f30 -0x75a5cbac1358e8ae60a4717621eb6d8e1cc8339adff7d87553eda710aec01c83 -0xfb70f1238a6d23900d55ac90de85f1b151c54079a706d91c2b0b556700ded2f7 -0xc6414c59bb75b7112538dc81be8a065ab565e41ab6882cf7190338e797015a88 -0x61124a19b81bc0ed98022b296662547c0c342c6404f25c796e8219379aa1e8ef -0xfc99de2b156bc8667301968b1da10e16d299d8c64e843dba69ce4bf102ac10c6 -0x50496ff9a8f6eb93f1f9390dcee111d673c23842ee288d9bed64723463c384e2 -0xe6e6f016eb7167a9805dff9e21ab1b7a6343cbfb1bdd3ce6f766ea054e7249ad -0x41ae6dad8bc1febf1935214255d333b8bf8e308cf67a97ff3286c9d7f547721b -0x6ebe3583edb5a7c38bb40c55e72126431c972e8b12617bfb3259a1f8c058d0d0 -0xb1e3c5404dcc2ae552146dadbe594d89a4127ed13100d8fa378c00453a6008d5 -0x6495d90700756d2e7c40865749d27881d541429e08f452b660282017646beddb -0x8cd4b58796bd4fa48c50af96e3b832568e6d2593e99a5921f16a16c457fe27f3 -0x1fdee8a6b1a198ee215dbd46993abe335d5239ca3218a7392aa1e5aeadcec408 -0x04043fb88700c6cd931b8501c5a279812cb0d098324463b976b1896cd2f1ec34 -0x4abbc2b9114f8ef7a34662d478e0418f632dd733a5f483f303fa0243213f3a58 -0x06491b0c4962a1473cb93f64d5efe79a57c72c1f9236d861ad56456fdfaa83f4 -0x9ef16073d0761efbd577afeb860f99d9d4fbb137774af9f517463cc7672e0020 -0x3fb9f0e70733da4c40e4c0aace22ffe9464827cd6e98835497642360cd0e1931 -0xf2ad3e2fcc9023c612433a2e917a8636a9019b844e4536e4a24caa1f3272e62c -0x236bd79c3aee3ad105342b4cef9f0edb4995e9307923d1ba54db610545fd983f -0xee7cf8d081f36b80821e506d78af0c3b7fc0ba539d26fb1cce0610db522186e0 -0x8e60b4758c505958f4a3cab5324533a78dd440334c25579cd11643e26f0d899c -0x2c13695e68222a3e0831c34b9d5f9ea71320634fd15730c8eb0b114732d2b659 -0x86fa0e503121816bee86a601958193ec88faaa83c16e67a2b7efb739de59fe47 -0x1ba6cac3b9a1e7370d2d4ea782a03fa5112f369acbb47d59c5fa1fe344da2213 -0xe0f414493f2afb543a9cfe8f9e4809516784610e64ae6f17a8f9b31e7832156c -0xab9ea73f25277b31042155a52b79e1d9df03b6053952962f1e7c34896f671af6 -0xe089d15a5081684c1101878d947f5bff67b0aa2efa595d2b4e0b7a290215fc63 -0x6466f56b15a6dbc3a4334d631f4839b82564cca75375fe4ac5a5679d81962cfc -0xc0d6a73adddd123788b281976747fa3d7397a5b6cd1f23eb11cbf6d6969fbae8 -0xd12c93189f7485a752e7fc98b1a711220291d9bda16e87752d6bfb475d038399 -0x623f5a6853c067e4dd11fd2aec8628aa3ae6819367928377dff1b128c4adb5d7 -0x6570ab3eabafd8eddf096e379a28b3a84422c1cc7d44dd2d1e0bf2df71a5b36f -0x238712d200b969202b210d58ff135bd34dfd80928f0c37e23b13a8f6a7a01391 -0xb2ab1cd0441254176f55e690e0d514987cb176ec1161525ed142ae2f96236083 -0x04d41314d91105135270e72f53a3c524702dabef89a3ed389a8dc683e85814a1 -0xc911812789996a55a46e4d3b3118748befa42a938a0891ab7d31307acc10d228 -0xaaa7efe7e2f0fee654c22fe214153618a392cd60ae8dcf8fd2e4b251ce9d2213 -0x928e265485e8d5ac6ad6896196d9f614151cb6d66e7c4cebf2a027a9f9ef7897 -0x8fe6aa1e2177aad6d6bf814e9353feb05ba44cae8f0f87d5f9f7be4c27e9fbfe -0xf7577e3eae5d63bb677784f17105e03cff31b2655b019db4a3f94a54994f4532 -0x472c3f251025d3ffa1a3556c560a85ae195c8b1b203022c2367912a1a75d4729 -0x9b0ac87288be1f4969de00f3caedafa8bf950f18e01b47de7eba11800a50af7a -0xdaea5480658aa278d729ab2a3323e5b121a1bbbdb71b33406f741bcd416e2bf8 -0x4cadf0c1ce9cd48dbc89b3b73206751808ebd643833f8aa0334a2891d30857e2 -0xc4f83a021a6a5adb87577f544e5da54e6ff5d20ae5618968036a8024ff83bf65 -0xfc53b351e59b7297816e26aa96340b7981e7401c3f780d97b66bdf39965a9544 -0x5660df6e537fc8023830b996c43dcccc6831abfd24a2bdc4dca4e1351d189cfe -0xefc8b272c24f9d3a6dcfb65c0a2ec41149d0a4e8d5563102e4b9d1c1c725189f -0x4c0e6241ea4244d853792344370910f2195172001ab26baa4316fc8331dd7a27 -0x6c59327796a63292865aa773e9ba52d5a2c2a733ef3f8f5d58ab8554d1416d28 -0x803400013e378f7eb49045084d8e184a5e99b359df4dd909e14e9820bcf87369 -0x1b7496a1ecd7014e3343bf419e8b64d870e1dd399f1009685756ccde573247c5 -0xb6d45ab218472dab3cf8ffd3fb05f5b4611b5d25a6aa5d6728b9efad44752d36 -0xde328d44ae14e2fcf1491858a93b547bcb99c8518aedaf572f15f2d172e028e9 -0xa95af6c732214315893f4f0f905377f1af194935313fbffae8be125390b4d3cf -0xe53b4cf604f67dbdd1a2bffcdbd8114b96fef5e6247d4b0ae975793e18a1d7cf -0xbf61ec5a034cef25ad98be629fe4e1cf71897ffe0e7c79377dcd3dabfaaa0c92 -0x6697fa7c93f20829d0d16f5d746c77db8c012acd82cf16710dcc03ce7c6d43ce -0x714596b59f76e8d3b8cb7f3038dd192af9adffe6610ef73e3d0bb8ba2c5898eb -0xc61ad144db363cb13d7bb1c5a95f322b2527b90ba07b8880ba5ed64c4022a574 -0x7158af7ed66168e29d0a7448c98b44b98b1e8fc7e2987308a5864d08aed3a531 -0x47d8c2b7dee071ff73da0d95facf4dc3e5b4b158174bf6c3d2568f11c48115c1 -0x1259c73fa38be2915251dd9c5dd6a5a26bd0c2e6a41a8a77c35d433972229d41 -0x093cb5390d4092c14ea500551538df9011b969320bc3cdb5a1b425d5b7083418 -0xec68ad686c7c9435e32c31e5fba7da70f72cd7fafe2e81a1706e0eea03046b06 -0xf6aa7dc6e96900c279f97d64e249c6e7fbfe7aa201635ef77db744bf83b94b38 -0x3266ada3b943a49f83fc08ff91e5931ac6ae13658223591d9d190f596b7fcea2 -0xa7efc53a07b339e6ee79a2e14d12e679bef7a1a60da4f6c7bedab5f6faf0eb22 -0x564cdff5b243d150cf54ab3c38408d561c62939672130fd75dacc282c22f52e8 -0x38ed2145fd2894dcaea6facdc2f30f5a87c434997661cdbca981378361a940c3 -0x3472ef3f50401ad85c01d9f2dc8d62a9d6007fd39a1915d249f3c8b8c3e068e3 -0xbafe836fd0f29cb6ac4c9a059a9b4b2a811175417ffb2642f700ef4379e0d4ac -0x36d8b6595ba70db1479ca466245bff6a94b2d2d5f0a5e8db781f92a3efd792d5 -0xa89b6f22a56526afd173f2f1598f7194fe6bc78caee765fcefd2444b208f6bf9 -0xebb2cf1a2ffd4919bad20fafb3634bddb52ab4bc5be54d73f41b29dbf52c90b1 -0xca040878edd9284a70b0e2a3a3d051456c31315a490c028bec7a296ac8e08dff -0x66541e74dd41f0b9a0e9af8613c1f949f751ab320ca49a90c6aa5f9668fbc3bc -0x7095c63a611159829cb4545ba86d9f761e69d42b50a1a7c6fcdd84ca9da65c63 -0x495a81279bffce3c476a15468bb82dcff6adc9b3628a0f877ffddbd72b8b1d56 -0xa040554a09aaec9a38825be871565332db0fdda31948576ed31ae850a13c136e -0x59fb588764ca5ad74b56bb4b58684f100a4f780a1f9648b15db096714a5731ce -0x49bf792e873cdd14217ba18e08d835b649953a4337119aa321bafcf8e6c23fc2 -0x0e8a97d64b2aff01a1b2071c1052fca8435171e9bdb4eb35e8e92e84b83ea437 -0x061d0527a9bd6e09b2497ef5a2bf5d2fba2d3fd046fd0ec30b47cd00e90e56e3 -0x869d744c74cada46933e6b994b5da244e7d676238870e4688356d80c01f902d5 -0xbc5ad909dd36c75dbd87e217e269fda439fb01de82b7a9598df286d74d3a9e27 -0x45be910527e834767024dee2f6189c65b68b2f0916d6584d7b4dc52b4a95f1fd -0xa4413cbd0c155513931a96cbeb8dd600a69a0f384e788f6e5927b8587775eecf -0xc38bc3cdfef461fbb7bbe73bf020ea51c577aed3c9e748bb3f1890eb1d26052a -0x38e0101445e9f98d96c307fcd35566345963b27fc1d84abf651a4eb47187ee7e -0x6905e423b0826b849aec3506f399ccada435384accf13065fd3023fee4f6ffd5 -0xda546b9b9b7afeab91523e246f3adf8f4718295b8fcf4045f05f9c58b9293754 -0x5ede2978c980effb42057647aca881ff960cd82896c783355fd8b7b5b366fd87 -0x52803e6e6c861aa8cf90f2c518dc3e7ec65423e97a7e0129f5c4d3c9b93578af -0x155775527eb866039c35bd41b5ef6b48a9c65a4b7a0ba8d2ff41b66ff1f1277d -0x61d3b6798205bc6139171f547900a9045e8a9ebfc9e40cd3f3670579cdcc72a7 -0x31a310cb13c109a4047391837db20d675aa62484433268fcedc12d9fa964061c -0x213866095c59deff5378e8dc6446f6c02eac8fed3e00edfd1b082b7f55cfebe7 -0x9ad21319fd1e8242e984774676ec2cecb24247b9ee5b1be1eabb96d2e1c9c666 -0x5e6fc9ddfdb8595bd763de67e66cf6704309d9a8610d63b73b1988b02b765bcb -0x869c04b940005a0a9fbe40adda8283e3a75438a597a102cd26503df19593e01c -0xeeb032b008e1ab781a9194d0d14286eb3d0966138b050ac1f444dfa4b5878029 -0x309e2fff69e995bb6a863a6a89c8710d704934b46d2c32baec4071f1354d12a5 -0x25bbbbb42150e2f89db9b7c2f0f636b940e6213c25e9345e1dc1f0c1338735b8 -0x6b6b5018bcd9837bb8d4f5e9079b001b7fd38e344a2e8210e73fef6bb6696905 -0x690358000e31210f962ec43d2f064f3925c24ed0ff8ee174ae08648020b15e75 -0xe32768d488a0e5b245689fd3c1d5ec1867a5dd458b16adb264a126b9f302f114 -0xc8da8c2e1d006fe96ddf94b4817be295335909efd8a599f3ea49c3eec4a66d94 -0x9818c845b768ae391b8af607044f5cd7a434698ea83db5402713d4af05394fc5 -0x3340074ff25bddee677973aa362611e49d8a33fac5a4098391c92aadf6771c4d -0x73a9b0d2d18ef607ad0f831788ac30debf53b2e578d5525bf4b7fad00ed1dd58 -0x32d61784dcda3327212cf2155a23f18254f91ea344d8b2b72a68be0a8abfeb6d -0xee142e780f2513c70b0f3706b6382a987138c320ccd7d12b0cc1ab2d2df602f3 -0x67f2658316142212de8256d7cb952ef3690b82f59c3b901fd859d87fff57855b -0xa6240559ae46bddfad207d3735c456f6f419424e89dee360c98ccdc2abd8bcef -0x6542bdb12205d38e0938b42bf36ddd3c0cab112b996638f719a375523323425f -0x591376599419c2037b256c7bef41cca4bb010e7cc51042092645c704cb95e376 -0xb691c67569b9036754a35864bdeec882a677fdb29a1278d4e44cfbdda639a59b -0x54f4e8d3289b97b73e73dab079944575c53f447f2a8aa5d60979e7bf5aa1c9e7 -0x2c7f40c6e583f4f8843d75476138417584a42dd3d18ac79ddfb01d0d12e5e5ef -0xcc14ac21ac4308970b223efdc204ad3e19a89a459fd799e77e1cff50a9255e1b -0x671c7e73020ea68eeea6642591d83af09778f7cbc670fdc7d03344d635fb0f11 -0xfd7abf0b222551e60a884fc146fe558480bb62bfdffbafb0449a8302b19ec83d -0x8b840dd15f4a1d8f5569f40a57361d636490a3999165051a70b800e6510cc814 -0x5ee7611d16d6228ee5899670b6805b16e3da9e517cd6245856547cad38b931f2 -0x7f80a49b8e8b4dba28cbdc894578f1e67fbbc27514629cfba13fa9117ffa4de9 -0x5487fd3c4e9037ddbb96891a1a7ed4a63d08524b492635189e0e7a61bc8813b0 -0x748202c259dfbf31949bb2e24a6777652f2a4a51c06b7678dee12f6687dffcc1 -0x34eeb844e12e52dd842cccaf07588b09be3f4ba775d78c1e629f77b55bf66ca2 -0xa94b13f9c8f8ca86b8927ab54962d1361a17b5f01f67570fa598ef529dea3bda -0xd9b441125e8adcd9802e0ad0794e9d28fe4feb7c141e171911e14d8c2cebeba3 -0x6bada757b8a8a16ab9d849e5aac7c391ba7ccef7b9d27d30d9f69dd55cd9fe11 -0x02072854f9c8ba75aedfba2de51ccc023fa87e8dfdf6cc2d26e3b5706d9c1693 -0xaf6b47fcaa29921ac13c4dc4d4b1fda0da47420c81f1d8d26678d3cf01826368 -0xf7b4f2c462027e1306ffef652cd0544c6c7ccd39bf97b009aa9904f563987949 -0x4e63670ebeff82355644cab1bfd5a5ae0d32b7ff9b4f69efe4ae0b833e3b1b96 -0xb62c033979a1e10a16865afecd672605dcc1b59729fc203db43fe4b9a5c95a12 -0x11273f3e6ed447fb968c05e4cc0d3096221ee084bd9648b8325ceb705282c3f9 -0x4269734109b38a96d4ce7190d42e018ff282b9202b91e79a744effca311bb30c -0xc3a258af65efe7950fe78809c41bc9def33edd60472bfe8ad56fee9ccfe0bdab -0x0e9bc2e512c5c6da997c4876c1a7d56a1ca5bd2cda007b84db6d1c1dfe3643f3 -0x7f61485658268dd63debc5ee3db739bb601f8225be03186f8ae74493a0ebadd5 -0x01cb8badaea2f887a0d930ad260604e9b2d469075cc9c21269a519cbf759b55c -0x4b9a2a21b5b8ddbec8d65dae6dc18827f1f0bcef44b93c1a847f96cd50d209f6 -0xaec940f819b480d81a5885f2736fd4738ff97d609e37293eb9f6d182face3eea -0x67d02aa2368e49de7b316ed22a744931ec03224313f31119eb1c3b7364de27e0 -0x85647b8aef1250c15fa68cb4ce95405f7a7ee9e32b637f18a2c66d946fbc81f6 -0x6c956f579085ad5b6558f55b13d4e2f667412eefd24b543c42f5476590592ec1 -0x009b89db3353411b14da377a638b0a0701581a435c7a6d0660db2ef4471c80b0 -0x27f43269bd2325324768ae23ac12ad74f405e7d3f932bf538995294c6d5be18e -0xcdec31b7bc169a4dfa38093e0ce0ac3fe02b0616732c014fb094e33d888daeda -0x96acb1649d01d6ed2735b9b3e2eddaa4dc6f243cc1611dbfdff02c60fe297671 -0xcdfa16c8c768d5fb98bf1ac861695280024aeb273a4d69ebef96007f1ef43402 -0x07235063beb6b4197fc9b5ef5cc48a34a5138d031e32e3acd32512982ad48042 -0x397b823c72bc8225c19d774a7150928effcf3af56e86432e45bf2dbc0e91b59c -0xb489e6d66de84dccfedf4ee99f10db90585de632829c0153aff684f64ef3bae7 -0x8633edff4ec9cb343d6e7f3053469d9c733badeaa4db7eb12d0b11acaf13c773 -0x9ebbe28d633e96b8781b1a952d9bc883b33e7ce4d6cdbcc3d6fbf646b1b706e1 -0x759751d1017be8361feb677faf466656cf4f4952bcf3cc0b25822484dd6564d1 -0x979ec41558ddbdc9db9a1af4ff4cade7350b08d41b13ba6bccef078c4bdd080c -0xfebe48b92cffa73fcdd03629b58019783a5e881ea0d867ecc1528e6f5cf293be -0x5dc7b44f80e2c5fd14f6755c21e18c4f4fa66aabde8207f31002c41cc8d29990 -0x8ba2791e4143629d60e17a6eaffeff5684725ba98ddea42fc33a4bcc3714e562 -0x0b56220a30a3c91659fd85bc5e7b7e5a8c3370dc50710ace2ca52649e8e71787 -0x0b3053acf769612f7ff21059edd7c4f4622e9acf844ddc8bc02de6a1016e11fc -0x1f1f512cea09ff0ebb7fe9c9d90ef0d3ba4e45d6d7dc245dfcfc2b28a01bb777 -0xc16566dc8bb4206c9a21e83bfe36839a57a0a78be7a34fca35e17f3653e43bf7 -0x13d1eab78dc19455fa8a5617b1f8b2dd7e6ea41e75f54baf2fd333e38b06b316 -0x9062ce6cf2bd974ab77ca874f02bc2f41f7955e52846407d3e5e22f966344f58 -0x0cf876784d87ec03726f5fa8dc45402617ba8c0b0ee8149485f928d08e64a5a1 -0x0457f8679d6ba9d1e8725fe7a2bf3558a2e87192510d63756d5dd97020fe95a1 -0x0b80e30d7529e0627bb9a48e41261d42ee672e174b959efd355b9ce6df1d8a46 -0x3c2c69c9745885ec450819ce41ed7141a6888068268ae6454cbd7b156f07664c -0x4bb00522a25ad6eef0b43b4b956080fbea395ed2640df1b6723a5f8c5548b9e5 -0xb4ec68d4db8498bd7e2112690476de9ee829f056532143bd4fbcdbaac34321e2 -0xdc8c79e316f28551f8671d1336a9445974ed031c565767d1625b8ddce778282e -0x07dfab85086d8bbcdeac4ff7cd430056b3c86771a8eb6d7a1cfb0b1e36850b8f -0x38106a6eb4a9d62091e5246c55051296c6bd14a2ae0bf31711c35c8b0a869949 -0xf7aa6efef9422538e0b286b694c0d9ea5a69ccde6c008566d6a92a4cbe255fec -0x783a74aad3350e7bec3becd785fd66222c8d71ee07f95a9399dff4f780047a91 -0xf72da836787ed8a0e9798e22e9d05910980fe27683f454ab87c02fb9aaae076f -0x739a335cd18284379871a8b1bcee0565c30ae25a5f905deefaf49c7adb77512c -0x9489b8b8fcd37a5d67aa8387083de82ee668661d777a82b35625edb2be7301ec -0x36b68e323622eeba767fe6c9c5298f537a905b192750380e29deef06ee1c2b1a -0x7a39576d2348017016846c4bec5bb7193917a069a5cc76ea33e1427e4ce036e2 -0xb253eacc54b0a8e29030cb88f1968b39bcbd392592b16c03e91a0c8bbc80e600 -0x575cd729e27a66a6ad66070075a29f99b96994d0ea29b2af319caf074cffb8ec -0x4665c277c7233071776598ea9e8c57d9db6724745641be436f3975faac0a0c44 -0xfa00c3aa888d0fe778ce60810eb50734d22e0d23bb689c635c317be25f78a535 -0x56794e5e1679fbaa0aba4afbb523df57dd7d872f678d7c60bf8ce3cc615a30a3 -0xb411a43f2a2724f94881b16358cabd20d6e51c680532c9ccd26c428f32b52263 -0xc9c102afa1e8c76662f10134fe04d8ab2dc610c968d49c6bd2787e1868302366 -0xf52c71a8c360988bcf205ac0b6d00a5e023781aaa75905038f86b691c3753c8c -0xbdd9080616e6525e1a5bd37a044a4bb9249a2662e7f4af359613941b1fdd6593 -0xf470b106a506d66ddccf65404133b6d7f55a2f7f4af7124ef4ac545dfaa19fab -0x3ea9d336de4892c966f7a631402a704671db13ebda9f0da11c8affa57967e267 -0x0d2218322c86efd34f2b6472c424aa676bcfb63ab08582af6c9331c338270ab1 -0x6b6607dee08036b9c0dc1e616395a941b00bf0a95799940db0565be98f8f97c0 -0x18a3c36f1de56c0e0fb230c07d4a743ce8af5743160f4f7a8c1222458943a6a5 -0xfb33a0e1819796d82dc3dc44d24c855d0124a20f10e76dfce344cbf5ed0c44ff -0x01d36afce3691819b21d33688470b548bccfc063f7f7ebae1cc6ee0b1d8ad43c -0x9e2a77c9e45ab743d524f10de0c4202f7048bf50f06f08933829004955166414 -0xe8ec2940c3c9cbf37c02a4d08393ea013089fb16e79071303d9f0ca8b9a62e99 -0x6cb22113491e8057edea8a4f36c0f8571730f9ccc8c95d256bb3eb353ce7b999 -0x71e9f35efb443ba6ba00712d0b77596593a349344976a2a9c5077f92eef48b1c -0xe902e01fcddcb6cea07baa311aefe6d74d2fd78d2b6d51f530cb1a91570ea4ba -0xf243ac1f6ec0754692c9e335b57bf050005a85f34e9c8f1d66abb409ccf13117 -0xcae1d73a6c03f88b19c693a4921fb53898a3744cf1d7874b18b52974a9af4607 -0x3d9e9e6aa6feca3f2b01ea3a1da68acc2dff2eacb42c050d5aac58cda2710018 -0x1318e197b3a926f2840ed8a2c2481cb56d14d8e511aecec945d9d38805d8dcba -0x73b28de2ef4594c99cfdfbff11b6440c5b318e2a89e5fc5c5a578783c0f92b5a -0xc87ba32806ae314cffc1efca6c1c68c8c0621ff9aae7b5a0a6f4cd7e5773f876 -0x9d8bbdc92fbf717cea41c109685876618ba5156b55d2d091893ac17c095c4062 -0x7d45f4cd896f836cf7f36ed5fe59bb73c0b60d5d3c43f1279b00ce68b50006c5 -0xa95746c24a6fe5529def13ed2a7608dfb4a77cfde766eadd00831c2a35e15e8e -0x93a8075259551631e7069c7632ba25bea5f23bb9ebd2b1e35bce99ee0193b696 -0x20cf28cb5178eee0665498c4668f77466530c8b731bbf28acff52c0346c4eb3e -0x34f69458371eb6016c3d310e69366465044a4db59737809a22a5fdd6cf5d110e -0x11427c601b609e6c43a543c7906af72281d59206abd6b397bece50be072893a0 -0x0868bf15b96b9bfdecfdff16f4fee959e702fe4d9d1ac0d1a4b8320d78bd6a63 -0x4bbd4982317e4cdedcd5b72bb66106e4dde36a3e00333a7de27e4eeec134aea3 -0x91b2abb0f45d3311d88d98bffafad9c64f36321604ee654ee27c8b9f881ac7e1 -0x1cec6997537dae9721972b860d141950c7881805a722d5fcbe3c3393af03b766 -0xd4dbdd9ed932f759fe43da983b9cb906989a0a0bdc84166de2e4e02ecf40b898 -0x84106929a7f0a9bbf361c38cdfed390b4182ea38a2b23c98087218f5fe8232ee -0x3d385e397678c4664ca283d0ed5825128e3751d535b43c3936e5611dafdce6fc -0xd901a402c814ee68a3aa3c83436ccde959f885c301b0518bc83923d5b2d08b65 -0x5e4a0da3d17fa2b2ed8e516c5ababd0700d4445649d981fb88cb41cecc889046 -0xf07179b5c82568aa82199c741c7ca73dc1664cd985421e2d2716657ff2f0b67a -0x8721279bfd312407bc573f99a1ad9eb4f9201b1f0cd902414bc17b11e174bd66 -0x1f65f22660ed3c875450d02953113cecd0c8dc3faaed4f298c03e07df92f42a1 -0x890258774c2c26be9702c16342708b6512c2c9ddfddc1e87be60e2bf8c409b4d -0xb393438ce1f3cd152f1ff5b2258558cf3742702712bf628cd7e9db04ce89937e -0x42e06ba78269b32cea3dd019405b18935d9d343172ff76d9aa01ec936d059cb1 -0xbf12b5373f9d8815f9b2d0dba2461fdfeaebddc0c6db6bfd374418c60e3c63b2 -0x9f32fc679777ee0d5be44214566309140ea392e42eddb69df52fe7f549f7e466 -0x247056ab00768ea4b64cdef1aafaf305f7aff8cb145a03cc9f10f037b944adcd -0xf5f8f2828cd686ca42ac1742cccfe9b79a2e36f0a06fd3ad93019477b83aed88 -0x1dff98a5cd55044851b8663945d5f8f4b0d0857b1ff830f227959ead6582c96e -0x94625b285c339d4004822f64a2cc1ea15221d1ddf3d92e08d6374136efd174d3 -0x6c5b59046e904375953d7c3ed83dfb1d6ffde9cdea0528d1fdcf8ca0c921f74d -0x8ad34b97626df9a7bdafd7a6f25f63b5dbf29b3575687e914e1b41aa41f5cdf2 -0x6697d290cfeb7d6321022147aa41f522f1685a3f7d7ac82a30073219d9083833 -0x7c3ddf3faefcf9d68493e05ded2243b93519a91fb2be6e4f2850b14354955670 -0x2e910bb9572967533aeda17223cc2efcb5d521af12192037fab74b5325bd18ef -0xfd75f52b177d8a7e0dea4da75ef56cd3010f66160a01ace8c35da7204f33545b -0x97c180def2e5d687f73969f6cd4aa5e907f8f26e72476f821661f99214211bfb -0x74ead276b6817c39c6b7532bf3ed09f048c5e4ffb5764aaa1513e5c7b31fcdeb -0x7c9c50ef8a4de8fe66ea9c5e02d3d4a2da33f15d0444932e97af3bebfc48e24a -0x1d67ed72b174a6b802856599643d85fbfd30be5dac15998848ac5ba18aa036c1 -0xfb1d349a71ebb83066b86399d31e229695f8a0d719ac45aeb8ade63e1c8e6f38 -0xd3e5ebb6048d09b68f1dc4e5e1a54e4381ed8213bc71c9aeb5f16abe27aad2f0 -0x62624ac14d4889d037f217df6240395e30b6a72a12fa307ed30105aaabbdb1c8 -0x62b79ff7bb8d06d73951233d100153d33a28af1a0383e62a8db59492db58e115 -0x26eff3071809ef367f31925be46f29c2a0edc8ad34bcb2f9e72ec43f7a13d06d -0x8e18e1ca100be74a0a31d0e9f55007be7ebb5dcaa0abe51eded0dd7e22b3ddff -0x70f96d9d15fe55ec726bdea8162fe2f89faec20c38bd6fd48f1f12e294f4c3c3 -0x41f479022ea768bdd992c8f24bbeada0b2d1d83af7e010ba7b77f262c36b0b2a -0x1d3ca68f39e6c4700842cc0e6fda03c47f6fc26f3940ddaf1747100501d4ca7b -0x473b864ac6e1b7805a91a4595e5758d1ad8a9c55e0c9afe4f16bc0010e48ccb2 -0x66ab86ac14b3c46d08c29bcc7d27975deb1cccef617a72039478872344dcad5a -0xbb28915136e228ca501fa5552c21844b647a3a777a05749f29006528a85c7ad0 -0x89035186273b7b8d30756278080d51fe186a96dcdc18d3266fd77f9fd8993850 -0xea68c7c6d6836a02c0373379a7de2b4f006cc7be8a317eeaa1da1bc942241493 -0x7e119ca461e35ebff1d5bd374f943fbbc2bf5ca5d6d434bb80226c2ca8db8d39 -0x9c70c0b6c567f6696a6d2424f5c6b23181c0f4bca1fcb2a0b5419a276540bb2e -0x13ae1c15d849df4bd1d145e50b600f32abb11a4783c65c8e7153a9937cd258e3 -0xc4aa3bf58135e0bb0f96e697afc20accd08f340d0ca5f7ca5c093b862f550527 -0x618b177c6ff7d07219cd1a23355002b8397a00c39ff194c8d8abf0893db0ec47 -0x177018547ca62c46e02fe7003243e5e2d912066c6d4fc2659c2191d33867ccf3 -0x60e244d0f556b6f37bfb6db4e7d823b35a0f23f0b6264ee75173ba6c444e4844 -0xb46ed68ef70e05f2620a64dc5d5139e40fd3ac542163677ca1368b78a0edda26 -0xf90ef2a1de38b0fafd650ed90a29f2d282371748549b87143189ae57b9a25132 -0xe1d1abd63260eb813693ceadc35fbdc9cbf9f5cd97acb97e7d76711c4a9c6a8c -0x85bcb3f6284c670d2576e354715d1e1048770b3c2de318244e5aadbe66ddf177 -0x7119db6b1ef78fa32e99759cc04540348eaea4f01f313ff790393b65bc70daeb -0x0548ca46252696a4d2b1603019b73bbc0f6e8bd5c8b56770a466f0e51eba5f4b -0x0a24ffac1d1466d34de9ca647b7874a90c70a0132b85f1194621f7f089c06b1b -0xdbb7469030c104dbb6ae09077b8a8c7cc364e02d2a341181ab557bda76308f15 -0xc28ef37dbc41ca3a82d7a6a033014c2c73c35915a8ac683d261eb46d01151722 -0xc217c0e178439965451870db7eb6ab0e189f956cb20a61fcff45c1772631bb5c -0x618149b1b2fe721ced26f520a796b82c7e4a71faa770b4f48d9b9894a95836f1 -0x4f37d99038700947c99a65d58d478033d5c314ed2ff220c4e7b115565a9737fa -0x1d31e51ee2d0dbbd12626f9d03981a2dc1c859f304a628e56cabfe564c96acf8 -0x9555a051713ad0f8f614e94bbc8a5941b2a88e0ea34a7700385b86f9e09dc0c9 -0xe9e41aab0117c32ebbd12fe37b5c0e6fa9e44da0ac5c8e99c0ee8f7c0ca698b7 -0x682fab794a090e98efc547cb87573c237f2772b8d6c97444a84ab79fefd1c6e8 -0x8e9ab0dcd5692e8779fcf5b6f77bb56d97f48a66824904eeb6cada414a7b4a73 -0x712f9be9244dc2017b4adf7136f6739038e7b0cd07141ad43663643636902e34 -0x5afd34f64b5f20cbca156ade6543d27293152e6b2ccd29805c2b6ef96673f83b -0xf17608918cd0cfd31c9ae916a70fa35de0f41e5bf21be3d311cac57dd823ed52 -0x8e4d22fe34ed53e25eb067cae365a01debe0a6ce781f0dce12a684bf22261da7 -0xbd625f02d8490daf3e59158abe155df364a9dba8789f79144959df321052f3a5 -0x97710792d51a657bc259c6d4192d2d5e7c4a400355d871c4880a9bd871afc4aa -0x2de050125abfc1b31bffe4d3770a4ff03777a4c23c56bba8ef5963d8afb286aa -0xba00802a15c715acbb3d13955abe67240f0a31d4a86b2b6e5f226478774cd41b -0x7546c77e0fa51dcab28b6a009fe3d5920ad6fa15681c50f96a1bcf302ac05e3b -0xa2f0d2369e92e2b6b27f1e23393a130b87f8bd69d3b3dff0f57f89fd02548484 -0x80e8a7393d592037959c1e77eb71d94d9fa6251a205490f0e80dde31eacb4ae7 -0x4bd8b10466ee987b28d03e8ce658946f80301733f269fb71fdc2715d8d333454 -0x70c63f48bbae4dc4dc3cec6aab9d673267e89162a9c832aadf6bb16f690b0a3d -0x43541cbce80fba07d0113bd1cf4b348ba651eafc7c3b5b16968c17fd631f0656 -0x41baf2a8dcb16ec3b71b2a3cd17917fc762929b2450ff67b687df2a12fb3502c -0xd8963f53c2f7a7a6fac77919afdfd061d54903efce09a88219dc9fd434d156e5 -0x941149f7dd8b933bb9daef837db3619eae73e9cec24b4b2b8f1f764b98860d9d -0x4eb9c78d1977cf2518c02c99279fd750fbe96be5a784aeee7249c99333bf743d -0x3ca778722973b8c55dcaafcc54c91c6734304d15f1fefc3ee2784bc20702bdae -0x631c98993f42dcdc1106ed5c77f99c59f310d31c461e451ab964098837a96f78 -0xe833c4315295d6b6026c08e745fe646deaa37f3617ccc0ade07d50c89a3c0e2a -0xa02f375903210647a9f22d11a7f512525a0cf7aaa64b8c677e90077f5f9c7508 -0xa6db052be11f5488670e74c87cff2f3490b2fb2f49202b05e13fd1c21e3a815d -0xb077165d0bd40bd7b240bcd6ff6ae808333b604ef942d548993a707ceb9509af -0xe83023310c8aacb8235b9a11fa9d206eb18d54fb8e977e25fbc87127dea565d8 -0x608a225d31de80be6dd85f1187a7693c0775bee9693a3e99ab05aa477111868b -0xdc1594cf6c819a4fda9cc152cb0b6f3df84c66c615ecc75682076b05b54f3335 -0x4768736a38b25eb59385ee9bdcfd2847f87102ed400a323a834ee4a3f0390d4b -0xc96710a6fc3dabda361265d9df10c53e3f239f0674db21da21399951f5c5f143 -0xfa850f5220bcb9021f331d65a81c8d7414493ce6bba4ad78a7b7d910f0bd290c -0x7c77e9f0c1110a90a79f91bcd8ab04982b966b25c3aab0d104368010d2b69d2e -0x77bc31f12aeb7b81d849f689455a3db713247d916a81bd7311e8ca16e4702f34 -0xce69e4da112653fd975a9ade840a8792657bb494295e384d0d14ca632e1b59db -0x8a6db5b0bd316e79913813704577cce944a63c67f5fdc5226aef2ca9286d3b7a -0x2753748bd7414f16e1bcecc3f4e1ec36713f0118a78cf6bd803c6591cd01811e -0x837acf9cbebada5c02dc8d523fce5a0e2a84da9ec81d9d048d063b82011acb63 -0x9cfd928206a3f208fbc809d79dec2394c2e650dee6de0231bf0949e66269bccb -0x47ae8015d96ee08417df7f851da744f0364d6dc87d2fc994204bd482ca87de64 -0x365a1f2591590612b6acb4d982a58eeec1aa647c471a318a6ec0ce3cbc99f399 -0x0c148337840a52855d46c5a141455200b33f79e2314a14532fa4336b5f68f919 -0x325a3f0a2d641458bbdaca84ef76b78fc6f68a824d735e74ff7aea8d889be6a3 -0x39dcdb9d840d6b470e51d8f2457019e34962a29e0e6d1d611c163898239ea194 -0x5dbece4e251fae7771818db6a152072eb2229503e6daa12f9fdefa923d2f6ff9 -0xd2b886977f2c6351bcd058bc49916702be9601abf12fb4187e08a18a814e52d5 -0xc6d628d8239acede0fbc009d76259a913ce8a134d38c252c907333b676d47427 -0x0a45dac13d4da0a41faaf697b174bd8bfe37a71c4c78de8adb3ed012aa7832b6 -0x4d5269630d7a222c76ff3dab0d003005cb4a373103108198daaf8b437d5965ff -0x07f9bfdd64f449daac18ec176b0385e32f70c465cb1f656b3ea792d81bc6d31d -0xbff232038d38c35973a3ad3636b0c91e35eaaeb16c49b320bf5104b22abf0320 -0x1e8fc6b2ea6299c5fe07accdb0c31523f5b2d5cb9485a16725908750074f5f69 -0x47346bd2182b6e849e07b52346014a0688ac41f9848ba31b956e6c7ec28638e2 -0x0b174cca1b0c1ef03d599f2a4c0c3217f041dece31772af4068938a50bfc9db0 -0xe955219e4a35330a72b5298fcd0d33e664085b8d506a945214e4485b847b3646 -0xd0dfb5a7e53da12b1f5dfdfee151c43343d715625e42a60f6dc6e88dc530e67c -0x3d65b213c63d07ab9fa744a3282094558fbf6e4fd24e633700885de6284dce2a -0xea2c5ab7a7fd0b44756e6cee7a5233ddd2f541c7987af70929960365506e19b1 -0x042fe0cb1d3fe7919c5db8f58c5425ac6916b55d89bbf413bcfc77a41fab30b4 -0xe6268426fef7bd3c5b0b7d823570243c08215478248c38ba8925ff5a30125d46 -0x5bce7b0e4d873200abe70f9d02544d0e3e52f545fbe06d61065af8133f3c155b -0x70089cc6d7e7f654882fe231d8a068fc5ba581b898ce14e9f2b8b6454496ea42 -0xe994fa5b9f4da5bf71ac8eedd455e6b81923cab01bbac1d5c87d308484624a66 -0x8472626437e81336e19d8477b66182bbe1dc39eba4689afd85ee5ba6b3b7f29f -0xead3ce64815ba558ba2deffb3f587d4da4e29b3bf19685159188691874295a69 -0x887db6a9fe437d38a3d57f7c01337b50720e98ec7bf8f60131b86c73ded18bcc -0xbb8aabc71ad1a7efd3d92f3f93e738bd1c398e9fae00b9b4bde4a397bc65bdd8 -0xfc3f5a21b0ad51e7c7a4ee4b203ac929908882069283943ac54e2b0086f770a8 -0xb36b883becdd3ab7717fd1a29090a6606cb0f4d620dbacc7c6578705875a2913 -0x3277fb68de15cb29c0aee5630e4e1de75a5c75501bb37aaf1e1233232db862e2 -0x48522d544087c77bf447db5080d1db141416458e31863dc856e481bde994d0d7 -0xd595ceb316bfc1f6e8ccae3858471d17561dc8812a0f32dc69ff32d91d962583 -0x3580efbd7bdcd8184749f7525420988da96ae63eaa8974dc267173d56392c2db -0xcba14098b43a66b25b023fe0fff330c6563ad1266cfb8f87667c10b30de0e467 -0x7b5f2ee6cb727ea6b02f069a2f2a1d2eb54aaa7c17518c9004a475b3bb644c32 -0x524a5f565fac4ea280fe6671fc1e108c282b4e34bab08b7ea9316a2b632cc1c5 -0x0de959d57318c7070280b79a0282ca385d64f45f1f0ea64d5ccf18a1819dadc3 -0x871d4f9760eea7fac8b68ba73cb3da3628a1ee338259082bd889643d58eb95ef -0xe1ee26720dec7b688f2a6526e5321ab210521a5f53b941a3f0d182d68d856ee3 -0x5f964b383e7706b7ca2db9453d38e4aa8c6bcd56df97a049887a9709048ad081 -0x7852df7a65e7257b26b25000ea96f1d176006b6b59c74c737ffe92eccf3c458c -0x3ab874f88b5f67ca3ccb8759b5655d8e5f58adc87ba2915fa811d28b709ead81 -0x0e9a65ae782b48ddb9f9943adc5a24b533572cc19d79746168be84cfb9038ef6 -0xfcb68a88a9a56635592e5b6c4d0bfd71090050aefb2a4dc451080c5dda5512ed -0xc1b1a35dbca374a3781c94d8d20021bd33b175e5111c541b74d14572aa2ed127 -0x5e2e56b914098a70eab685d22845e091d92053c8fe2f5c39b8313b384def3eb8 -0xe0b56a6611f258eecf776311404c27700680c3a4ed13d89de3fbedefcab85588 -0x58de26d2c13790ea9c953e444db780f77a3f81935fe011dd9dfe39622aa26878 -0xc87188b9dc9c3a5e83235f8522e70fac8069bc338b20c53ad6e6eb6e595e3ba4 -0x82cd8692bec956c7e71040470ae6ab44088c6ab9446335b0b5fbd4a0d76f3197 -0xca438425f4d2546a79c81c500af7728f761a6a11f51af483baa93da37c91b8c8 -0x32e65bf1fbe41c8561bb520b7bb91e4eb38c00feb9b1aa4af93e308da7c71a89 -0x1b48459f27f2d98ceeff5facdc88393053fea95751bdd0dabb520070054aad8a -0x5b82df8e4d279d358e951228034bdc7f159141ddc46ece12819ccf1aee622c23 -0xfea47bd09c3cc015178c52e06d82ca6bf2810f397b054234d5b77c0d753be2a6 -0xc2b2f67bdca40796f87679c9a0e5fe2343b09aa1ba60859d5298cb5d08f7c08b -0x88ba47646d81bc69644cee66a94503f425c8dc42c21b005e51c42560d70dc1f0 -0x82b1e71da0768bbe370948f5849456e481d5e5e92d7db392028e24e820d016b6 -0x60ee7f7897ab526ce063f543b2fb36ff98a8933024b017b6c95720a78f0e1e37 -0xb4078caa547a1a868f7aed1935fb093ae6b9b716a6ff77c4e562070785d676cb -0xe540ca752afc63e430486e3c08a736e96f8efe40b1495f2612b1597604ad9820 -0x301061560e5e020b63e406c83c9f086bf7b91a58ac96f3b7f7700aed3e6ef2f5 -0x3cd95e5652f959f16fc83f412fa7c1c4162ebdf0621d424cd8216dc454b4423f -0xd55ea662e34db1b65a1708d71a4238dc55ce5105f45882600cd63b342afcc8bf -0xa11087ab1bf06ccde2ba57e38b972a81f14337eec5983774e6949040599dd86b -0xd0d54a4f89afc75e1b498d208a7a58167594a2b17c587a2ea75cb321d5246812 -0x01a8bc84d55a4a983a7c0ba0003edfb8b565e1d2dfdc688616c12dfd924a2059 -0x39f571fca00c7bc066f5d3bc6783a0a434494f2e4b8286a5dabfc26f5b39484c -0xbf6b7515612ec61f6b4ff9433d37cbeb64d99078848f78b07c4300d382a8f60f -0x28a96b60b1a70762703061fdb46a3f52c92cf02bb203b9c0029a4174557aab85 -0x7031d2d544beac192abe96aaab624a48813af26a0c5084e06d6a29182a2c9652 -0xce86ca8b3c116ccf14632e52e1777d8c5e75fd23dcc506ba5858014cf00ca3be -0xa3cce87524d1a48e36648e4e2b6789a7dc96e49664bd16bb376016050949de66 -0xa105d62dd4f22452028af05482afe9ea16a20302f05a3917a6d824842f0fd2cb -0x05638dc0ef9aeb88f5eda9362ea3f5165021dc7d56803a86bb16222d9ddbe6f2 -0x8666a5008a22df6d679aea07b76556097a8bd6a03f4810e6b07e07ff8cf2462f -0xc1cc237b4005f7a743b6409af1462e90a53d3d0d7e1a0c1cba63ce3ab926f73e -0xdd9d03aee36907a5b2b371c6583d842ecc6c078bdb238badc977b39f82926261 -0xcaa63039e570c7bf83b4dad56c75383d4a7fcb8aaf7cc086d7132e1ac5042884 -0x3cc6939206e4a5eb2f415d943444f0af1b74f344323e0c32ae878eff16d05ffe -0x52f55388741053fd4872b84f6850795b6bad20febd8b1047eddb696a751b2d72 -0xfc8ff3fc71cf6e088d5f74a9c387387848e96ff6d44326b06b863562f72151d9 -0xc59e83fd0335c4119fea88b105cb7f44c31545af69d5207af31926c225d05ace -0x9196c2dc03c6eccbd0acead240aff40908b57485e4cb62315f8f0011c40089a8 -0x2990246ab43e32de1b3c057d8790345e5a7c93c408f6e2dd373c95cf4c21d665 -0xe4dcd78ed4e6c1b07e7fb4d3f96c6826f96d6fad5a412775560753e5dc654bcd -0x5af3dc941b4a7f3b6f69942f9a847596404d9310c7601af19c6a828cae81327b -0xc5970e28912b4c55fe71c3cd5886ef97c9195c719988143437635e86d3bad54f -0x47e04e3e4cb22cc7af8eb430d94c1235d3770a5bad6697ed1207c56ec8d5dea9 -0x4f643aabf13d490e8cc1fed95712aab6043454fffe5e2e9cd4a35189df02d287 -0xdf81ca5b62a4b3ddd40c0373b092d550f140d6b320b76f14853967b594f67a8d -0xe39d210dcfe8b6c5676c6dd07041c7aba75015d2a64e6bcc5fd93d7e486f5fd6 -0xcefeec32b3c54ac7ad012b00ecdb4bb0b1e9c7aa1eac346e2f18c6e89b872435 -0xbf0d7ce183f7225aaf2ce1c1e863e129be089fec7bf61230e8bcc653f40a33a4 -0xda4d4847e540f2d3ea934034ce505989bda2b312ca92e825da70e766055bb28f -0x516caa3384a20d6084a76ff7925a4d60c39a6b701c711b617bba3a06163f3ac8 -0x4fb8dcc324654e076be74e36acb8fb5812ba9befa6b238bdc1480a908e5fdd09 -0x3c8df8fba79e9a6c66648aac9beff1a368ca203b096db5938a20367ff91cdc31 -0x7d97315378a89543a50e4def58c7eb85b2b14336ef7da78225cc903e0c25aa95 -0x4005a224e588b131d14b8296ebb28110ab5950d034155b619c66f3f13d5aac46 -0x2c38e2d616f53645708e8031c7d438d9b5bbdc0805934b7097cf5bb704bc259c -0x08838b5e4bd452f2eb5f3d75c4b90025441d80d41ad1bb176181cbd4e3ad6198 -0xd2c0c8817f22d144f7789a2cf0695247d1b623d74dd66c69c90f3b9de0cb0a8f -0x58ffa59f7eb150b3c7062374e0f1f7282bd10e2ba53e618d03700808174a9bb2 -0xbe38012d6e456c37bbbae3b12d0c7d478dc9c8da8b88b82f84a9cd3308ae9ec8 -0x5365cfc9ed8a0e316db81aece9b2d225f7d290b3388a3285c74ffc534244ff9a -0x9b202744207bef82d3a3641cc98ca29ada6da117bca0a3dd705c86cb647b9e5d -0xcecf9184bf36763a500e8cf0b838f3898527752602e9f44beee0cfe309b2e95a -0xdef6cd8d0742474f9b1e1602052b8626d7f1e7edb6d9cc4150ed6442afb53f4c -0x83d7f5091053de9c4f7b8c583288a91c24c0d805bcb9827c0e667d1a20dcf78f -0x4511beb38264044c5986caff3613dbd28fc7b8b3eceec413a7b0090bbec2d936 -0x9197f2cc574e601062e3b2af1218336061d6889f06fce320ad753ec016d2d919 -0x0d60f16da9ef379cfef91ee968757d243553c2a6113e141d29cd74ae3c75d0a5 -0x41da67c6f8476ae547528939b25717fc3d86384d1ca87060f4cbca57cf3cc799 -0x7c77ce405248b99f70ff5485a0d83654dca0147274276e077bea95767b7e6efc -0x27b343f60e9573240bd970b8c3fb31377a72d40953d6160f1194ca66630dcedc -0xef23de3631c67a51b5290177fc0207d79f513cdf9d15f57cf50c2bc6b3efb810 -0x81ca9e740d4e703842b16d6cc9d184b0d5e1fb64d84d58b59be478dcf4f37d1f -0x45955d28c5067f447fb8272b5083ec3e7196256e53cbdb08cfcb0765b033f64e -0x2e6611e17c1507258c32e06d9ab5d87044b70dd6ecb8b804a61ea2d57ac80c36 -0x7e80e78e64705cb1264f96fe74a7fe327ffd5f9ff4228d20d94edfd0c685a3bc -0xac66527a24e04df1e2dc20ed8f1efdfe89bfecb16c0ce805c4f2227060fb31d2 -0xfddf2ebf86b2f694d0fd504a60bd70506b66f1fcb26874a0db29499197fe201d -0xa0630b8d993a4403bb139cc9693801431acae6fa58ce0a8fc3a1542346498278 -0x70369a334bef330c2eef8f1c055cff041d1ff9c49e924e3fe00fa44cfee52b94 -0xa58d89b4aa7e5c1434a98a5038ada195a538b1a2dd225473b50db94f81e1d149 -0x3fb4d6fb9ef6c8ebc853b5f49a0aed7c31477d22054a19a13f8910f03ce7955d -0x19b237f2f2cefbbdfdf9f805648da0e1730837080ef224e759bf1c0a33a5ce9f -0x77b40e9a54ab82c9f3f05dda49709a7dab47413f0e8e2da48f833128a8f5e0ad -0x6000d63a8e0f5882bd7e2fc4dccb687bb7a40d3caf5339021b14afe6effb4f47 -0xb05e09b9e563cf5b2dfcfa6375fa03b037a8d6b202d09eb90e1a1f9b4ec41a1a -0x4e67143efc998cfc911f61b511c885e4babc8acac572233ec6b01dc793facf76 -0xf53364bde91f1c389f76699dd924752787b69b09a662982e178343800ab7dc79 -0x3ac055528bbee18b1d5dab233721af2befb0386b339954ce086e30e3c8fa2128 -0xf7d0e6471ac623fe19e3638207fb4a247b48f441faf6fa2587ca8bbda55d2d0c -0x52794c6ca8d3a0343e9bebeba89c0a786aaab07deeeda36d5bccfdaa2b6b77e5 -0x7c4e0cc952830d8fa66dd90478d9444c3ec4a9c5958e07cfa390152dd116ab8f -0xb1f344e72f973da6772a1e861208507c7d0d38c11d165565b1c04931a7bbc884 -0x66a778bd1fe20fb19cca652c3848ea4293b40d2f73eca1ed8f7251c6cf7843c8 -0xf94e2a1cb91d7137f5040fc7d94c5592475ec03694997b076fe0b032ff905d9c -0x5c2c19e1cb3c1da57d2fd3eccd155586b15b5d3c01f2b5f030104bd111817cae -0x7d2ac433437715f6d7a1504db2621c485141f9c99bd74e1ae5704bfeaa0b50e9 -0xc2e7a87293db8747498c08c984c32b45ce068acd094d732e6b2cf4c83fe86f83 -0x947d22f2ce82ddb81b098d073ec4c99bd973f33364d647e4f7cd5ec681c0bd79 -0xfe21cef846a21ec46b874b76f9858c28c3dedf919cfa4ee5399aa760c8720e58 -0x53595c0df7c2ae17edd86ebff463913ff5f3868512bd6448c5cb288cce93bfde -0x1a6c4a7ad4f32c828404410ebb12030452f60135a1638d1295ce7dc14f2ca6c1 -0x6982cfd236ff4038e64deceea8d8fbb5fbb0f5d719f16e984bd262dd5624d2d6 -0x5e43cc0200bc2fa60379afbda4d202ec05bf18992d49fe7fb78209e0e34123f5 -0x05b6d4f93e5b0a0a0591390be940811199946f2aa42d4572ad9138c20261e5a1 -0xcf1821c23393378eeb95c3f86b2b66fbf6cd07d667c18bd11593e8cd4ac1489e -0xb334ba30eecbded5a4fe4cc67fd9d24fc39de1f293d1c405ed5cf30f8b155980 -0x403151a6de9ceee69b44edd777dcf2a503967a7962a93cd78943e4417560f02d -0xa63fbdae20858fd262fc2ed49eaafe76317c19a900b3b2bca7bcf57f7dbefd4f -0x4f4b182a338fbacc70c61e8d5032c85806424fb77e16397e5025d6d12e28e2fd -0xb998e91fbe17f5c11f8b60743eb9afe3ff43142c7e5f608e7543473b582d5254 -0x67763765bfef7f9f59a41674e2a623d10ed4e55839ba15faca07a386460eea4a -0x8747b37cc53379398dbf9d8c0cc5655a334d57d27a2e3bea5c15eb2dc51867b1 -0x5dbd2da945471a1916e4e094ef8898e04d956898864532c7e7d179c6aa0eba04 -0x71d1d23770e8e027a20db9ec765087e95e0c7680a5a8ce00d022a7903c2c9934 -0xcf85e691469470280f0d3e0c65bf44d498eb6228738df0facd441ca712d35173 -0x2f717c237caa5858075a99652b704a06555a86b4d0928a7437674424fc7e4391 -0xc3bcde3bd137d282ffcaa7e72661f373c1a7caebde7467bd6a6d32336fe21395 -0xee147e4abe40148019b86f3e372ff41a7861a2099845a7b7128c57533222009f -0xe4fb7672e1f989ec9d8a383a436eadd6c6e4256fecd86e07d6acd8a7904dac8d -0x778265f89745fa052c9ad6496008eaea9870257fe5dad6379839775054bb6af5 -0xb4bf876c2df43924040c5b7284b3cb6ff5b66e69e76827b43b9bfd563ddfef6a -0x0a5e69c6623b5f54ce322926bf48465df0fd53d93f39f92d66075ddc4fd791b3 -0x99424d4c831bc20c83e4af5ed495dafbdada9d4f3aae5372029381c4d7bb1105 -0x025c3ab07721b7b9b83fa740669e102125ca066b0635780476cefc209a8204e0 -0xffc82e7e36cee97051a0c08d08afe1a5cc91278327a20e0941918e2ed3001a20 -0x621726b80a02018a70369f6e0fcb9359b108c17ac2d659011c2ddbbe704945d0 -0x9c14f30b2f71efb3cedbb7272ad636ccb950af664b370441ec388b39ab8c1107 -0x0b4b8e703a85a2dc47ea3312ea2d9d943e8bdc328b142798975ccd934e7ad8d5 -0x2fbfd8bf43fc9c5bb94ecde891cffb06c9e5346d700c72766823907d2e3594e8 -0xf911d07d08b333b79f03bad1ed6c93fbf69d9eff50178685ce6e8c63740fe7e0 -0xb2e6fb40e753fc6cc8f5358638e549146fd1e88a9aac6d997bbd755dca6ae880 -0xb121448e6f4690f246fa3c17904cd3991d8c440e07fb11d9bf9324f9b061d934 -0x2e90f3eae02cb091768a53764ee15108e84a41a1f9240550588cffd11d2999d0 -0x6411003e36dc6a0802446704172904f0b2172383c070217a84cbe20c1edac140 -0xef65882cacaf3b648146826218b51f7410eed8f33846f34286e7ccc0c024ed5d -0x69ba358a8715925485ed8a0d0af404bdaf074600d4c4e1d27287c75f5331f844 -0x38249816f7b0fff736206809d9456b736bba30f57f6737e77e003ff0f64936f9 -0x03ee6a78b8a32dc0950f9d6e5a228492e720f5c09aa78b8f849ddedf28a3b97e -0x1d5881adf1355f3413ee1568454b25924c305c9f784bf93ed7fb85bdd8ba63c1 -0xa4eace03ba92b23a0d7ced38ef56f7eee3ab8931b2b565134ac4728814984160 -0x332325a2981a059a406f3ac6e5724601fcb76b324987eb8476a0619a15be7a54 -0x62ee3eaae3fb42feb6212cc7bddd9b04dac12ed0f3da6c1f0bf9eb1d519b9de8 -0x30e2ee0f9108a4244ca1f91abfcc04208793400cf832517d5a71e9015ca4461d -0x4aed73856cc909331f98b2042bebeee50948b5126ac10486d2fd633bc1a7f5ad -0xdf005e41e58d29ccabd48b5b7b8dc206b61bb4130b3a15462a5dc46b75bea755 -0x10f58f4d82f5a1e8ede766663fc8a37c7a49a512dd2ef432d1150226049bc09d -0x0f58c6bcfa5cf85eb533e163f31040c509241e953ef9ce0e47be75effb81d4f3 -0xd49a436c67e227eee4c7543ca33599c6669dd9df7ee115bd20e39343d0533025 -0x6b9cbad9566a5e3719718d831350d78f7333181ca26c299fa0a9a202b25739cf -0xa7c8e0cc3257dc85e8988e17fc090f34d7222ce2e0658f918e10d5b570898bc3 -0xd17f006e132d108a09d263a29dcf86cb97a0bdc82571e3bc885d3ff160093ca1 -0x7685708fb5c2073adb9480da43b4ff9ba217136073f60870ef059a2ce4e2d503 -0xd0e2007c49ef752e6050d7d49338b0b2f08f4ff1cc85a551810508afa2bd9e29 -0x72a7c049ffa7a1a686fc84c92a9ea64de9516cef1b8a73058b7fd019747dc766 -0x9556e24e611aa7cddab3a60d81bdc1284273f8e53e25c6db9a036022aeecf629 -0xbc8951cb0f56ec3f56522700a4a542b133d440b8ee2cd9c30c890cf6e386480d -0x04f84fcb4910eef2095f3f4d2f123423496695cfb43afb678a1467a589ec0ab9 -0x24d0ee2c63b3c208b718fa73b4d2ef72c96027d3055307915681280b651a3aff -0xad03bf44f2ed41c7e2f9b65a0aeabc928d663d6a7854373857511c2a4172baed -0xdad6cbe6b8c9b2b64835883aa48522af8a30064bfe0a8178900d7fb364d046bb -0x207eafdbb08e54adb219bf9e8236759aafa2bafcb83b0b00c431c5f6addbcc38 -0xfd3c6416424bf39de76da43440b97612a163e72dd4f3c947da4693d40c67dda5 -0x99d6e6cff93f1ee1fb11c97ac6e665e74eb5a1f961d3ce22320d863717270931 -0xeefe5e9295cc43bed4a76fd30a52b1f1d33c07a0de5ff673ec50ea4a36a97088 -0x7061f647660e3413cf2047a9df60286234a9b3001445edbd826cc057b3ef8e9c -0x6be2418f233b10418d719b4b1c7807eeb87f2eb71a9e99a9547bd8c64befafb7 -0x4c7b4b8501c8e3c829a255d223433950ef2602b1d50546b31a70376d11cebc0d -0x7c5d2361b2b246f5692b5a4223067b19cb24bf22383b75ecdc285cc6b6a19518 -0x4a4076d3c4f2fda693fd28afaba64ac2ca195a8d58557e1b724129cf74ba4d58 -0xcfd3483e7df022f5190f7bc627164b7ab8c2cca22a47b69f148f39512ffa6f54 -0xe51757bdf8324c28ab2fee6367ee9dd0cef94f15a5ee6d02eda74920950a3828 -0x016fb7c6ea721708efa905f121e200929be0457f25f709e8cb93f9758ee6761f -0x7cbfe7633e258352f7d8d8e8134825a96599e61d7f625236decbaeb3c48c5d17 -0x3e6d6c97c1b156e412c459375842f6dd1c9a89afc1a9f8fe2e2e7b217e6db1bc -0x4597d26b0b9b82c54bea5e95b84096b05110584183b9b77d8369c1abc72034d6 -0x55ff959479b4def6b7c21825be71639bdf2d48eefb2c76847c2d31e19c09b6b6 -0x91845c5b39b15b7ad56fe75ecbee27824313e3e61dc747c266d30eb1e91f696e -0xbfa6cb2b711ad61251b25273e9e7b5d663422b909bb26fef6fb2745fcc4e5afe -0x3d5196aa7c4d9ad0a7fbbbcbe92539d38d3aabfac5eecbbae097773cb113ded4 -0xa842edcef0d4af1d0a419772a26ec79cb45a9c0fdd6fedde8db68e7025ec67c8 -0xf25a9873562a58eb9f525a02c8687d85e18f0261427688380297e002fe3f82ef -0x5d8132292e1119d74c6a56ed373e6a2bf76a69d0aad2966e9919408b9d393139 -0x8dfb34e393d74b5de9c7c9709f5bb1d22d8d671a4a5ad5919e2d5733684e5cee -0x72ae47b6c9f99cedc42fa183eccb76b0386a3b75baa705754d9ee1b10da8730c -0xc0f0ec2e03c764c1a672c87bd554bed9deca89203dc7d1fa3243d2ce9442543a -0x3db60f26dd3a0ddb53aeaf79ac5d8c6869a525701b4a37a444f1a9912c4468c4 -0x2d488012d5a48a4c8aedde53036335f9da3a68faedc3e4d163a3fd1b5f3ff628 -0x02b0cad264444c7f93c2b9094c9021a2f069357d0f0d4edb8fe19bd52796c3b4 -0xca9732abb16095f62de0d4a745d27e979cc5edd4cf3ad705de896cf007dd54f7 -0x94897afdf8d8ca6e2a971f9c09256f54c2dfa458894a1818ab8a08f178334fe6 -0x20665c9cdf5752f6e0973a59246937d2f341c5b9dbc8dba0463015264adfd73f -0xe6d4b36c4b04e134fce7cb4a339d70ac5f5f1b35e0a3d515c32bd72b11d18a8f -0x284c43dc7e1cc71cd41c64b5f7e30498410541a21ca167cbbfde561b9e741be4 -0xaa77e2819501a4eef34c786c8babbc0f056de593e4fa7cd9b56c89978ff513d0 -0xf13389a07cd22f85146cf7405134f38705a7599a80b7005d5e93c6e915b8214d -0x24f9cff138fae351c052fa41b7546be936acaa0c58f80eec3ad9b99a69261f2b -0xfefb376c26b9ad33f3b7a41d7c1a575385fcbec215cd4a3c18c60de3e00718f9 -0x03d3231568eb65fa823927a14b721054355a5aece8927d12cffed92540abbe12 -0xab24a2282722dacac82fd4bb06eb03ca74107da5c7010bf72438f42d8e596106 -0x1f052f8e906ea44a0bd0bfd99cc5d730145c4b185e335a95e6d5ad3520f12bc6 -0xaeeb3cc0aa5b09f7957cbf81c3c587b70c14af0698a0611463440036088df31e -0x235dfdfcecd3fc71e66b1d759af235563174d40b023e7f3a6840506368f091ac -0xa848164fd8ab205745663fed4380cb0708063e27f8bbed26250186cdb3fb3e8a -0x72823a6dccf711ceaa3c5b666b2603b7b76b0b8afbe8fd1096a58ea710d42bbf -0x78332fe01428a18605f2c6c08542f07a5ee7cf33b50f3987905f9cefc33c7981 -0x2daeeb5c770e81c2f5853641eafa5fe9e802dd784aaf17c43b26244e0a1e4d8f -0xa76015f8245adf998324ab07e51470a035120ceb405519c5f690ddeb9f096b28 -0x4cad7d3e690a1a32f1ec7af3d148a06524e07aaa72e0358e5f471b3410c35087 -0xb70e810d8ea94f91fd97530f3e1e1906f21323284f088971a62e3b32149c953f -0x0db96e98d205a9f0559fcb29345068f6c937330ff827e22bdf01e7ec8fcecb9d -0x27de3e3cfb23572dff21f3ca417f00fc01b699d7ee3a657d826086f397ed85cc -0x70debb7bb2f11e704928ee0ab062943ca0ee2fcc050a68bc55cc44cf250f362d -0x0202f1433f3e1b9b43bf9d2e15e3006d379ebc0303a71caff6c97b4f6d876614 -0xe767b78bd8a2b61beda61f31e0d43dfddab79c24bf91272c8acf96eced53a312 -0x9f8a0c35bbfbba38f587aa8fecf14b915ad1d61acf4c9a842fa3305959cd5922 -0xa548e1adbc24a9866846158fca8863c9d13a7fbc63d1777b8a11afd39f4b0571 -0x33b77754490c59baea95b3f6f87025fceca4ed4b5b0a020ffcfcd42dedb69d0e -0x6a5b45a9b51193c20b6b89b10ed06cf85ff5639ea97e32e116dac4d7bccf0a5c -0xca1c54006ab0de565258927afadf3ee4b1039c9fee27050baa84ddfc837980c7 -0xe9a5e2341a7b30d908a755dde9d2d0fc5ce951dbc782f2e9718cca211bc20e53 -0x5f388b80ae3117b06db39b51643a1ead97a6d61870744a11523bf77ebff40db0 -0x1b7286e81189cf596086bed66bc95509e31a60ff1fe8fed8ebc269308148133b -0x6851f818dbcf84c62383dc62626b07ad47fb9ddc1833ec0a6dc35d863f505f75 -0x39933d67671135f037c25d84807041d2c43321d78680ae8ce4b53f11a8107aaf -0x0093556a570213021e77800cbe81da8f4889548307104f610035356aece92288 -0x4cfc3678ed5df498d2d2922e44a42faec5f70bb7b3dfb4d11a17d1ab0d650e81 -0xafb3d23e1c45ada4a0b2ac619fe050035fb2b8e71c1197e523c8bd88069e45e3 -0x35bcdba77dc21c201458de5c93529de13cb0e5b8783d4915f472b608b39089ec -0x9bde8922ba553daf142635df6357dbcfc1f9e32bfc8c277724dfe085e3567eea -0x02d8dd2659ad52f32d5eadccbf0944284efc985e340dd4abe6594090b19f55b4 -0xa52cb5e11371e6ad428b08a331d7faf0abc1830e8ff0ae855cea7c76762e8394 -0x161bc4b6be08395a986f760ca951f5af02ca2d095ec642a90e6d4d2a9654e41f -0x482e3080b4c1e944f4b7908bc34d8218a18b92b1b91b477abf25af15607de8d9 -0xaad771d56a51ff7423e4b1b5fb6b9618cb952df8423afcfa85a22060c09fc96d -0xec34826a00e0b0d45385d522c8113de18ecc0b5b420f6849f07dea3c482d7b89 -0x73a1ed8b644e66b27e134e76384d5e2ff0818d3713701afa390c92a8fbd7808d -0xfa9c784050dc1a78e3a80c6beaf788c9acc6a91061c6f7f48caad9c54d5efc45 -0xd3a3aa491ac8dc42c2deb53faa7824771f99eb33301e515e61564bcf3dad8184 -0xc87ea3fdb1f97fdb14a1b4451ca90c99f858614a45a6d993a1327f100a0b4a4b -0x6502cf20c729972ff2cce26e329f8782ceef4797e0a77d9f68b5b8e21e3bd26b -0x20fbeafaa477451fa43961b3ff17b540f29b6f3f6102f390969109b618e410e7 -0xb5bd951d132a74c235c66b4e6ae8963fd9de054c9f28701265e71dca2bd89956 -0x2390f2882b47babf39d220e58335221203f8c4d3e1fa405020e7e8ce684a370b -0x33c495675e159dedffa9d27e16c9025e569a1a20e9c72d71d95d38dd003956b3 -0x65df6074148554e7916306d9c3d7a29c6e3297616974d62e24aef53503154f4c -0x8b1a3a61634094195e8ab09201bc0ac9487f1a24f9eda291f2a952ac70ac6995 -0x2393058f7801ccd8c65d36bd0781cc5db0fd9e197f3f9ea00ef6227c0ad08f2d -0x3bf7c97ba79515ec319a8b2935e8e3d6b33fbd1534948a2fef90163bfd36ab62 -0x86bd63fe0c480585f60b5b9e9ef561a4887b166ac0de6ad5fb0aa67e364989bd -0xa812846f212a7796fb2270f2c77aca241c4f6533efc500f82c0a60e121139f04 -0xb7f7c78c7a1fb3db46474ae8e008f8da61f87c5e4554906cd4100e506893e330 -0x561b3c2c46e8ca93aa46e541e6707966489c2ffe9ecb89379be01c48b1aea1be -0x1f7a22f24d36f62d4dd45db4ebf4db324e473241cc6c50af7995ded3398dca92 -0x0ec744da0416d1416da45541691d529381908ad32ff1ebee1074212e33b03efa -0xd2affc590ead3ae9236e77b595b65963a4597ac35124bc855c18ba183ce553e2 -0xd42d2f504e8c92745b9b4347cc813f951775dfbb59f783c7d64232f33aa9a40c -0xc7f6f551af243ff66ef502f80b525f2da80854d9887a165e19dcdd843530e918 -0x13d45992e3fbb5229b707797c60b379e69b3b000d1bc0594257392afea89f19c -0xa3618671c89e85781cb3a84e52683625e9064639925bfcfaef079af99628d2a9 -0x619b034dd40b3b07f339c5a4c10da3f79ac002d2a5908d7f82d9e3665a9baee5 -0x23da964725af221855fb7bc40ea13e03c2ba0908e0337dbfae976446e7257c96 -0xd5c486ff6b8ac77f6d71fbb8e49093a55b6a14df27a78d2a8808c3565a945b71 -0x5c21eddae90b13405a0b0dddf471cc5a266578166b808ce43b614bba4aa2bc1f -0xd80e594a95690d28e05f272258ee22c2bb72166feaf2746c553aebf8f1bfc7f4 -0xae2a3feaee0263c7e015ff553f3559033a700c7f2f48e34f2d1b1f5e61d60d8d -0xcb07379f19196b37df438a25c4dd8600df7aba2beb93251ce8b5bd6a062dcf4e -0xc7e8d85605241431ec9af18345979ded6940b3d38a586111f0c531b749773aae -0xd1a2ae6b3264c90f9f0e8923449435ff004cf7c74dac3d8cb1fb7b5803efcc46 -0x6c8d2436a5b002a00fc1e0edbc9e8e0b224dcf8afaa8c554fca9fe41eda6215b -0xb4c3f30faf08a254cc0e74acec4d551cd737a87f3d3c5049975b55f6856b73cc -0xae15b478c01172c2a96e8c9664bb6f9f55cbf3ecf10c42d8b6ce193f6ddd3705 -0x71810d5d3c9aa15f485ac43d0da91aa8645c50884af2dbbc24fd35d6ef5afe2e -0x7109ba013412a70c7f2db22b625f7a908ee37ffcac2d8a7ba666d4a6fec40e7a -0x1d58e0f6c58f9d4d66c885dae1d14e7f684e04812c19f756c0126cd47ffce33e -0xc991cfe0628594c09702c50aa8dbe8eb1616e36a2bb1686f4ec92941f705d577 -0x3c599377f3f651d7f1c84f86a6437b582213601f10e29b74f6a52166a9c03427 -0xe75f9c4553c2f96b8aa5d46ce647e622bee5c9450f40439f207446a52b13bc19 -0x0eedeb77f9ea3373ffc00886137691bc20d071ebac97e140a447fafbc53407b8 -0x4ef729f2e6b8df57cfb5fd4a8ab5ee935b2a64275524285aeca877981cdf127a -0xd3d12c9b26cf7e4651dd76e8f8fd446d5cf586b1c1d9c620cdd82af5335d696d -0x6c69f942cab4a0cf37508efbaf68150d129ccc176f7d8618d2667b001abe1006 -0x559c8c832bdb7f382f894bd41a4673e258a1366ffe8aaa4300cfb5325d7d56b4 -0xcf41084134166de797565ad9d08eb058c8157aebb8541264b244a222f56daaf4 -0x129039ce1785319ed68b41a9709fadb47e2947aaca029819ab456bf9588b6299 -0x7bc2bd86467648758be33bc521897a1834d2ce2dacebb935c2b7a9616afa88b5 -0xd404a4a53da537f2900435d6a5458b7043cbc8f83e33a00ce731effe56aaaef7 -0x556a34831d5ecf46c478f638edceaf6600017004e32d472595d1270640d7a8ab -0xc8888697382720e7abf17d21ba41c865141fc67aaed7dbf29eb279a5c038a0b2 -0x82e5875cc0f6b0f6c4f690bdd5b8fc690d6f41430ae97c669f4fead7ad9cc9d4 -0xdb9f789e9e955ec896ee1b22d717fe4ae6345912c7f65c0c85e2a599aa2eee03 -0x0afaf1506ca3b5bfafa1d09bdaeda017986f61282e6367733fdf9e92cff9cd22 -0x12e40e4c40f9137835d92d18c259e369ecbb4980189154b4d01690f77dfcb055 -0xc2775f84a741e5b9ce60cf0f52a7ae1b84c2aae38a1154373833c572d7924778 -0x6d698566b7787412c729fadf94a12b3625169912f7dee436c9eabd90b26941b5 -0x3eb219a8121d5c157e69f89d94cb5135e5f1636a97311422ce38ac5d93504969 -0xb7a5b4165259808e39601fbc7b024c3c45df095c8baf4eea5ee0eaf95621eba5 -0xeae1ffe26d28206ebd560b3631876ae43f9c2243b704ad5726adbe3883c64459 -0xd35228272905a71bb0c89b8f9575908136dd68041087070cb16b8f190f8e9230 -0xf874408e94cf5789d0f801ac3a6f91759c0a36a4da4aa646d7325a259083d0dd -0xa8f853f6816455bd5ab3110907db4baee9ea8b96283d02dd7b7b63ee113b8b9c -0xb412a51ee54283c4253b9359b97ec2091513b9a505282e7658900bfd606f9e6a -0x8089daf7831969ce55c8eb2bcf49f78758d7585f76b35769af720e322eb2e1b9 -0xc1faa835e1947dd8ec41f3621206150b575d65e072e84ee6b953d660ff4e3ece -0xd08ef73e326170518dc8e5c32c9cd221c82096f0e51a7f523241808517f3fc78 -0x8b98b9d0606191892aa773eb7ae91e60443a4e1f6718c2de7489f2635d25fb08 -0xfae57e62dac7caf6d76e4972808e9d942375241ac74aa5abc563580eacf7e0e6 -0x712c2d652457fc99b2cb2ec352bd20b14e421d2a4d63bb118b52190897745fc9 -0x676b1bf435213cf98e60a6168e772dc9d9a5666373ea8852387794487d45d797 -0x81373c721c972baf61f6b3035d7fc5b6bee53a26c2397fff6f60204053c9def1 -0x56552f43d35478611d320c376b13f06e70161c4d3f43dc6c1b9fe2abc6a92f84 -0xccbd3a1cc0313af3224e989fa5937fee83a0f5f4f30103a90a8cb2ad8f1f564b -0x4de08b8da5370bcd85e52363bc7fcae0a54a360e4452b560f7fb30dfa0af8f87 -0xa36e6ba3f48963f3528bcd8eebfbcbcbefeb9dea3c40dae8d79e2b6d32061978 -0x80606914c7b3235ccc1e93c71bc2dc1aa11c109b5314c5dd7fca171ec7c0e92a -0xd27791d4e6c9d88d156ab86119ec85e486e0ccb2ab85d2be9e39fe2b02d05a20 -0xb3887c671a4c8c2fa78a4266e8f0000ecf59819395a7c4b6110f04d71a960dfe -0x7cf2a07bda2760f5bd656525794a97a6fb87ccb27fbc9eb3e69932eca93ad072 -0x3006c094e0f72384d471cfd0a5ab0d6ceb67f5217e397464a09b6cf6e0fc5717 -0xdd2965f9a3bd6fbbf7273dede383e823a5ecbf67ca93f30942fdde5c3af82566 -0x11c8c10454038636ee4bd927f2eef56d606379369dfdc57f37fd532429f30827 -0x398dcf00ae725f70952f348d7465e5e40a0a7d1c4dd976a1088ff738a0f4a89b -0x1dbd38801bba5803d531733046668a36bf722c4fa245d378e5aba8474e3a9666 -0x116bb3b6d981ecc0b7bfa9dbb10cf720b1594c4589dcfe1cd8249554e5ed3e56 -0x9a42a33c841e04cb2391577bb25edb093b64fef0c1823222a3d531cd7114d4d7 -0xd5593492e4cd725eddd7666345c103389c1974286d610297b370d31b7573c3d8 -0x764c4a51f8be619963593c7354ad9e80727a37fb0ae8952fbabb4de1d2938536 -0x6f9bb6d364cf6a9b60f76c49e2a55a43943e1e592e769e9f0ebd99ddb8f0d9a7 -0x53b2997ed6d7abc46b5dbf0c30146b1469f8f722b66a22273dfbe8693a59ba94 -0xe0ecc04e46a5149082e252500e63331871ef3a1c2d3aac6f91d353b25e3c6976 -0xdd6380e485e6674086dca677f6ed0486fc656597b467b15775a1ce239149a21d -0x4266c0f318d3e045d282004aee69d438cc07b304256f82eb759cc3cb09538491 -0xa27f8306e4889ea62f63c6dbf153b3acc1090d1bf2bc187d6f3942a87a8b447d -0x0901f8e0ac6e727caa26418b213b95c7ef20ab96b653222468420096456522f4 -0x51253514048d3854581bbb5942c5f503b849f6dcaee88859a8626a11a5607fe2 -0x017c5bc21b18a69ec265619a7dedf5b55cb7590df1659d966203ae7961ff6446 -0xc3137fa27cc1bf1b15ca58acd86f7d50fac3ff4a188c010598bdb55632b875e3 -0x046fb1996c2f1b53090657ea4738cd8a17ade5c55f8d35b3e118d17ec8c26820 -0xca847e7b309cea38a58a6ea62c7f193258019c2fd30973d801e760df0bbbdb07 -0x083f747e6e82ecd964d6c7dc786384a3595867e4f8a187342d3e627472ee3668 -0xbefaef8ab0e58313b675bbcf4b85162aefea801deaaaeb3f32534a2cd02b7b76 -0x54fc3d456404d596afc91f8c96ab2ba071da8eb609bad1c2c5dcdf3d810d79db -0x7eb1e07cc38a9b7ace4ab41f11cd2174916d2cad7fba4d6d89175370a11c1816 -0x8306a75dd2290ebbb53d643430c17f5a4f371df4efb69f6670bdf2c027a95478 -0x6f9e6164ced3551e7724a8ec762a87f92393b13c5122b86a0ffb443c40d99e0e -0xd6f8f3f6429304809040f674bfce4b5a0719eaa0fa5fee1071c782e7a0b93217 -0xc62f11a751fc400cc90469d7ea21b748b46c3303cd78d5bb29f88e55d8740499 -0x90d0aebf9ace543ab242d02b26cba3283aad37e8ac831303ac06df43c1a97490 -0xddcf413538bfa563d7157d9a8961313b7888fc0c0061b9d927971c880f84cd26 -0x2d9e04db393941cd0e064797f1cdc933a2df393c6c4147046bf0289d862b506c -0x7f1267f4d0710b8803739f0c9f6fe9dee8e929095aaf9003d91e652b6cdeed2a -0x11e447479188b8aaee45be54e518b3ec8be6ebeac396ba20f52f6fdf686272c8 -0x0c6be102692cb0a2c58cd2abd5da4b0bc24a6eeaf815f2bafd7addddbec26efd -0x38829e662b40678f169bd71cdb2e52f1e058c87fefad027191cd023043a67e3c -0x183e8b0df9e7301255d4ec5d7c2d228cc67ff11cdbceed74d30a4523136a0b2f -0xfe172540216021aad305086ba19970866f46f4619f8d2a11d4beccdca07d653b -0x2562aff1147f011cba12945655f7950c959661407092191ec07edf686a69667f -0x7512454d93111435434f034e61d1129334a50c857dc1aa02b7046cd59f0ee738 -0x91e0716e37a6e4541116393721a0081e1aabc2feff573a9fd8cbe084ab27f8b5 -0x468bdb618b42a4de999c951a9505ca07df5f0440ad057117b13e5b7ded7d54c8 -0x69f35e213b0f07325d37e688b1b02c5cbf43d5c4d987e1f69445fe33384320b7 -0x1a80b6cc78c0a583cacd7e1b6c17f2856771d83a3bfe5e4e11bb7bf9fab07c90 -0xb9dbfc43d40ed36c695f720212b144bd72976e8999be0c6b60ec1a6e2c3e90ba -0x86c870f557bfd4feb71353cd31b2a15d3b5dffb68277edf9453a3156bb8833e7 -0xab0db592a258c350e47dc89cb1f531594c581b7130c53b52c23a6e1e108624c4 -0x3ab596e365294c33037fa200d3d0cbb91285c833994de45c4b239744e9ebf110 -0x9a02a291aa19c732de5d5733a1d8a65c6f3f1c3c6688d5cd5c1da90e36b68e3a -0x2a762a1d01515940106c06f3660ab26aead7de2d54c65e015dd9e047a2119000 -0xa1031ae74d68017dce0f0e9a6b6aac0b42fe7ba928d7115854c6395b986350f6 -0x1cea559c99f784017452eda4666fbd08578020aa20a5206d53ed9931856f43b2 -0xfa2256b3db75da3efc9886491291139510cc383cf09b6835118c9f0892eaa3e1 -0x60b637031faf6f71c3cd36b78736a0cc54a8ecd306aaa599d256cae19cecda3f -0xe6edfa652340a54118617a6598240e5858dc994ae4e9af5389c88f209fcd82f3 -0xc1d6693dfc014f130e9e19c3abe0253fe842abd9b1a9c5ff408df5e188a5ce9e -0xd1691a13b17d6bb02f762b5657c53ac3597422287ef6425ad11808070332e42c -0x899b693b6c93385de118e5bf0f7807f6ea1b36c562ba43a9b418395de4cb78df -0x65aae44062676b7b572c582b24c44c91a86dac7aff620c866717edeaba6993ad -0x1aa12aeb2697b1fb5fc488910d650d49fa73667f21b8edcc17cf64b30cea1a88 -0x0673123eaf4325e4a4b3f0fdfd9cc5f0cde531b0df71a763d622e25df1314570 -0x7ffd87c3eb2ea4f35c52aa136cb314d32bfa110411623ce74a5619d2512e7e45 -0x1998ba3cc28f2bf03a9cb7311b963e5a97cb838b78f3ddc843d6088bf1da72ad -0xfdd1612847bd4487cbb75163c49de9a1ed90f1ba9d43c21d2fda9edb14f2e9f3 -0x418d233e2772913b497dcc24eea79221ebae9cb5d999ac41c559a293c6204c29 -0x4283664dc71a5a57ab3c02a2f2d9e66d1ca5e00900a02544dfb64c87a5bea4df -0xdaf3aeb5c2c82b1e4d1ded2488df5471c83064c1c904add95004f60c11472d4b -0x00ee257795a8b09f44bf6eca4e2a5a8abaf3322eb3bd5b74f9e57bbfafe7c6bc -0x5edc3ff11f8f188f8fad6fdf7046171541929dd00cc697a56c5580841c370127 -0x0a122a81996a21c7b4b71c727b191f4bc224a93a6a9ac69c3a1f8bd6130119d7 -0xb0ad1db9b74895af491690983187a1f81497946e4cf71155a540751e2d1d8229 -0x4b8a2a537d5f425bc4fbc9aa62ca7ba7f2cd7a8a7cbeea3b03c2000881714517 -0x4cfd1910ec8015a15068398e3b96c9a8262f0e18b7c677d3861b8417f9506621 -0x9c2708f0ea10a07a085591eeaff6a8bda766f80b410f8286ae81961922131dfb -0xe422c90e26bd30489b91462517617adc5527fced63b6ae8f0d1e5e9cfd321c88 -0x4f1492c8beb16645e4359e76eddabbdce328aa9c3ca24368cc5629c7ecc5a7f1 -0x428b0a426971d83f39a2aca47f0211807ae1044abbdbd80f2788c5d15e953a06 -0x3a4524ec16890de9470c8e8cf09e1583f01c4f3d312db95bad28a03a5f5b6554 -0xdceaa50d7afa055cdd21d4e799460103baf1ec8158df1b450d3f4795d7025930 -0x4d0af207d6e5c30632e44a3633f7d28d7f443abb00facc1acbba7757050fd7b6 -0xa9ff0bba26c425ce2e3b6c80eea2bb034a0400665188a9c845ba89eb68b29c90 -0xf5cecca035be232921ef907ad6ee137edddba637dc990ca4e892482762d4b7f1 -0x02dca44832147e64196a4a69e7d33f86d13404878a23f3e07a17eab9c319f90a -0x391f0c535d4f2b83dd739c1cb8613be7c7d19d499fbcebe75d7951f02acd264f -0xc62d69c6be9784897c34778bb01506fc8128c76ca9e4695d4d0a8cbbcbdadfbd -0x86c0e846895514812b3102a9d274a433763ee796624abd0575da32bdeddfb570 -0x4e5ddf905551b2be96d6935151c99d80ec61ca1e08e332f4a257ac1157f157ab -0x84c4ff8b7621e6fa75f9fd5a84b22bbfe6e03c3334f0e7be2efa611004454eb1 -0xc9e0ee7acf2dcd69cc0ae12bbff729729007beac6c7c69a9efa90ab5e01d24a1 -0x00d065eb9913bd6cb4f0ebc0c31211db8f17044080fdfe9017fe9b7b6463a53e -0x9e06529d79b3e0d76692d79aa0401b8278a62792cbf2e43b848b9a79e6d8855a -0xebfb59018970518fc60eda3c9f911d2ab8f07c0b67a6bfee681cbf4e33236394 -0xa6ce2f919cd17f7c191abbde12d289d0422fd1e408a50396e4445d8af1289665 -0x28fb1942b3c05def94026f3b9c29ebdb2159f0d966b53f20f2c7cdbdd3d8b9d6 -0x78cbbe3dd3a8ee86485da37832ca707d86050b41f9ce32830804c23d52407768 -0xff5ad9644d662579bd45e690cea2be8801bbaf5367c299f578065c6bbebb2186 -0x7d1b9f5e930ec27a46871199d29031fb58c6139d748c70cd1f9ea3705f4685f3 -0xdf05b361ebbaae3408d8ffadc7aee7d9a60a29000c44deba6d33993f83757f23 -0x6da221dd92725adaf529f95597c537ceea0392ebe1f8673112646c47bc7cf11c -0x60d0a0d0f7ebb5eff47f609e5fff392740bb489898de31cc8844c9633cbc1d06 -0x1a4238ac251197d918e84a513950cf49d43e326b140b6672f0505213aa065251 -0x5ca879bf5befdad032b19fadbebe71c32b2b68760bd42738636e0d36a40a8618 -0xfa86ef4f26a628533c6683791d7cda0729169ca614b482a53e46ee1e13c30719 -0x3ed414dece0cd66d14a5b4bbeb3829c04f838abc9e34328ebb43ee04fef54459 -0x0ad0614f07d874e5e71d121c891a8cebdce8333d427531f3fa45bab07e5972b0 -0x858657065ccf640ef694152417baa5853f86736f3d10b6cc716c4299f392763f -0x120c1e7ae4d8d4481c3ba4a4739258f8bc116eed1d970934962b2d0613bce16c -0x526333af513e364f1b86b2662a0e730b06a423407ed385cd759eaf8f42cecaa0 -0x7847b3213b5dd0d39c46446d56c806a1eb10bfb464a688d878ea7eddf1c93c33 -0x5d44dbc27a13741205c45930c399340b92ae837af48317e1894fdd055fe77240 -0x115f1dbcb1ee2142f798f46e673c175ae4210f33eb7f6952b17790b3372f347c -0xc8149bed3bacd6abf8c4f309be8a1ac9673090fd3171f7106195decf9a62a65b -0x8c93f01d9486b8a9dd98d574d46626b0b5bba7a7a9ed3653ef9cc04fbe0f981f -0xf1be94ff09fa0090d2705266e219dd96f5ba047a360203e228c846cac881f621 -0xadf78a570b4cd9b9f7b6171705e36d770a5ee60cef650ecc516e01d242d28e0a -0x656c81459aeede106eae0247fe2f091e60ab5f3896486f4eaaf68a30c2933a13 -0xc8fb69e3bc5e90556eb9a44ecd1b677306c75ca38614f9e02e811f4657f72e04 -0x26985c17a71ea6963c343968941c4e49a63a76811e707a1f2c57ea43aef0af73 -0xb90916969cd05cc3b219e8e4b21d48a1c7093aa98cef0dada1a3f663fd3db9dc -0x7301e568876b19d24d0140dd2d965001dd4d4b6f115e2fd0c12dd36353acb20a -0x7d4ef30e952089c3f5d2230db2f1726bc934ba566a5d23963bb65215d4d320d5 -0x57e6406f71020c2945353c971a10f8cd4f447fa416dbb35cb60260089dcd757d -0x61aa31f924ba8d08fae29d8de8fd69aeee33bcf3ca3b0fad3055f7d32841d5c8 -0x54e2feda8e8712b54fd8412d7aa58d00f5ca588827e6c66df61533c3204f3f0a -0x0e5a6464a80e555d2cb86eebf9c8f45049b0d01b7c1885fbb38c7735e0d80736 -0xa9b3e423658f0444ea33b3e3b015efd083f7c0708f7b5cb7f34f46e0fbfbbaf2 -0x94ffb64857f72c22805b1309d544d2297aa1fc1b32b63d757c29def317a61393 -0x827fad7425a9f0ac8690b573381f6ccd0f790f35304b24ab4f792a69ec2f624e -0x2cb7d2366213d816f0310b32ba6ed65b9b3d4b8017c3c3008548cdc7c2431d69 -0x738d3686d4a64b604f22bca2f4d50bdd86f4b414355e046f3c17f24953da7bdd -0x7b92e52be453d2d3483283214323649f9a3ff8091a6de157c93cfcd29da0575a -0x56659099a0e6cb64a01aeedb835148495228f1e351799866a1024f9d5b0ab42a -0x1b526d1150e6f0c402a4d1c096587532b7bd3b65d8a0e35bc5c29889f31db10c -0x2905ead50dde8885bea15d0912178117d86a3e3d94b22f321d3de6a7df31f6d8 -0xf091860a1ca8d5726dfcf497376b30007564902b40c280b29c0c28169c1688fc -0x31367af57c906351d6d3c7b23769b9bf75f5919ff26ab2fcd41734a7aaad0abc -0x5129dce1d0a147ca1b83a2f1994925bb6a04bce1ab826db0d646fcf33b9a6f1c -0x9b419936d9f5f03bcf0158239623e5440e72db0e00b5134b7401c4bfa02edfc1 -0xb23f2b748d1a18b4fd177686eae0b9a38714ac4378ec50601bda5b1e376be1db -0x0cf12474c27f4027328e35e1b3b64054253837cf7396df3bb495896d0fbf0d44 -0x4b7eb1f6ca973e17edc720a74cc879b0be97719dd41cc8a89b052f5839b75852 -0xc10d3b066a9c1ce2110ccdb8be70fc112cb27d402a89743f85d33a91200a5568 -0x4e9a2d25f73fc6d4b8ff698cb1598b19994bfa7f6c8782b81bfe6f7906c899d9 -0xc1177076f687480d4a224c28b09541b1f9a07f0cbadea39415a2ca1fef88cf73 -0xbfbd4c9e39112372c2dfb27833425ac1605403848bb90ea9821d87a7e562c236 -0x073a2b55e1deb80cf63b25381527fadedfc9ec0e95661b681cb6a64bdb1cf5cd -0xfd1fef9c8450bcefd7af030d3ccb4801b363f57f5dbd32099f5c1b6390e75efc -0x3508939192c0a3f90bb17de033dbc484871ffdb1347306c7a20614de22379677 -0x8f208e59d585619f2c6b36cc9272a1c09134a77e86cc77b19eb7cfd4c65e7e04 -0xc08ae6895db7ec30ab7a13bd6891a8a7d63091227cd1907f597ea8217914ba76 -0x00819a30e488f7c67b95bc679c4f1a86748ad7a4f62d4027e5098e46b69607ce -0x233039521cbcf157d6fb214dd1d2c9e607c99f4e380c0aa3819b7e3c159ccc2f -0x89c5d52b659d3c9e07956c9a383480a12ecdf6b4af2b1c8ff9209db880faea92 -0x1876616ce2729a3e7e682ce6a3e54af662af005d29819b8d1b8a7ccd6e2ce35b -0xf302d048b4ce55f941f53ab3c45a274744c177bbc55cb812bdf148856381cc9d -0x02d888a222c2d1c12ec7cf1919b2a542267d407717cb2f481d5b7e27a956fe5e -0x4207b3ad15d6ca3444e20cb0e7f8917d0171e18f7da961b14185a1439a0cea0d -0x10c83a9f6b0c5fc04c522b13f7327f61ff97e16635cc276bc871e4ac4f29653d -0xce5834c438479cf31ad8d786502e2bdb19db23ef77fa4e6b47833fa3323b5b10 -0x22c82bad4b1547369163a053ac0165fd23addcdf256ab3c188863c5ff7174219 -0x2ddcb683195f51f53ef105bc0dbb35a1deb9071a289fb8d7c9fe76b73677a457 -0xcd388c88c24bf93423cfdbfc5ce2ffb4ea6d746cda783ff4713bd2abc6dcd035 -0xdab9ae7b1d0b498592bb66d6470526f25426b0e308494a9fda52be5365e8b6ad -0x4679081d1414950bd6956986cc25888d784d518b03d096baaf0dfccca3181042 -0x073f66adc51fd8f110a93f9b04bbde57430e78088b5b0ef2236e4ca5f35589a2 -0xc6c9f2813bfdf0ebaeb9d05c1ecb40085b17ef62c1fb96b051701cb6c75b0ac2 -0xed8893b580408d2d9d7560534744e2c97d5de441ddaa00728f5c73a53f715c20 -0x93b7fb72c78e9d8e91cf65b4c7e09c0fc1c1e6113aa9462a3b3c25e69794f5d4 -0x65b162770ccfbf054aa0377228e45726892c4fc03b214d5d56fad3de07cf1ee1 -0x12cf7ebfc4166fac9ac69f7f3433b7497082ff996910fde571fb1d3de6af42ca -0xe6e4fb290e7c05d68ea749ec9adbdc16b6dede2f1190fe550830f0a77321a8a0 -0x4cd10a017bdab700ba6cb2683ff55f6aa9afc65420888f37a695baabd3f236c9 -0x3a132c4b2036da3ab16fd8f16457436dbb25002fc23071040e4e642421f51063 -0x80c7c5dcbbcbd5c31f7e9375f693997484f9559736161e9b43a0cfda52812d94 -0x9b7d3be8edfa9d95cb804f18282f3d1666f8c40bf6b315d93b3d57b8c32d349e -0x0e0bc7527dc937a62fb962293634da135ab558fc3a1f35fc72250652e0281682 -0x72f3d22164344bae9b733581676c95ba2664b64e7c7b50ac5c6655c1ec9ce324 -0xe61758c08e5de93f91aca45117341ea24484724445ff15bfcb9619df0fcca9c8 -0xa84b3d78039ceb18011f054de4b5e1d9f4c24f08a12b0cab72d51b2c5e14c25b -0x40b8643d59766215c3997232652d0eb5b0b7927e474052aee711ee8da4c78fef -0x3820f2caa021f3b0991615d3b9d3ee9a7aa30998bbd9653966bd49f6543ca48d -0x3d926016189ae5c92fd13af8d19e840b653acd959c8041e9df1755619f5a014d -0x772c00033bd9283388aafa978b7d35d122e88c19ac35c681ea1c1b45b045f170 -0xa81e971b08628348b0b65b9061ba70b63bb787d937eae49fec35232c1d46d220 -0x736820bcdbfeac3d2f40d4bd39c69724a5db8cea7962f09139c103d4bf2bcaf7 -0x2f8fa241e55cccdb7765935c51fbddbd57f4e0a410365258953fb50204c10976 -0x7ada4ca012db5147e2e90bb556b2586c8fef0c38e29c739d5d4e67277e48a872 -0xdc526fd5f325bb6261267a0068f4b6736cd9de1e40e3b965b4e811796ee2d0db -0x4cb37608491938fdccc9f19b203779c44334c264671be2e6d70a4e5ef4d7e449 -0x98d26a9225c646c0ae3c47234a0c158b8c03a3a38c2803a689c8ae4d1c32bcf6 -0xcab9e360d6c2e34eaac20cfe0101d91cfecace1944f9ce357959001de0421447 -0x6f56d44d2d04a1e0e2736442da04fe578574eea2d3e5c961bb49f3edc166205d -0xc7319c10a595e240bd1a4a6beeeec4f62f8a527745b273008c9a40fc1a1c9d1b -0xdf0782ac639babcb4d8fd184072fb17d1c12e3e7255821b8231764d4f53c2e0d -0x31c6e5640cd9cd2b136c7a11ede0850768514e8c368584679efbf3911a468dbd -0x5604a118b04b75648ee365f1ed6a7d5a6bbb496b03ecf9a88125b6a31c439b93 -0x68ce8fc3ba26584392524227e9aa517c8a7ad14b467b9a5387e269a8f0c5c5b5 -0xb565f6b9d27e8d12949af8bc87a58d3d98b337f32644abeddabae6c8c6589f17 -0x3346ad119378634fa377819e821a3d44d68455366797d6a08b51f1d405bd41b6 -0xfe3dca47afb984146c31c626ffc9087d818d0a34b3fe83441d5bc7b191f6ebff -0xe7a0e6c81f86e4f9e4d8f4e081cd1a585ee5feb6554f671619119dfecaa5195a -0xd2d5bf5e84755669ea319dd141fd3c57a0a4512d3d65f2cb35fda0a79cd92b40 -0xead649e66507225730270e7bb031eb4d0c4291997ef03efbdef6715e39a091b5 -0x50f11bbf3e66890fc6307da4e1199a2dc3f33e4588563814018eee7fa06e2f33 -0x4fbd16e646596bb993b98b69555a76aaac287b2b7ca3776d24d353ba3eaf82e5 -0xabe28402ae026a8fb7f3f152194e0f69f1472fa8e07e49054bdcf3d1e2fc3ca4 -0x88324e649c2f9e49ae0b938b265d61557e33566927466753599e420a004f0258 -0x5f22922d79d88af590dce85ca05348e02b09097c5eca3909d5eb4876d7f2a2b8 -0x3fb9275a358e89914059923dd23ade03792704c454a9a8bff30e21987ebb7270 -0xe9248978f46382b26c09110de9149bfba4ec6b093ad77b8dfa135eba7f02aae1 -0xa154625debad62630fb96c65cd16c2f75de6b91d9dac47ffeec97f2e77c920ac -0xb2ed37a8d52f048b646b97691307d7d6d246b90b907e61da6e23eb3b7779cbb8 -0x514c49281b585a2bdddd4f3a3044e2d3b4ec27c74aed300c4c9c6c9cb9583ba0 -0xb289a54825c9c88b9bf72dba52d923b2c5727894968242ba1f3c61ad8a339930 -0x8fa700900ec4df01d613f6279572cf1cb2680600cdd7cff7082d193d1f201876 -0x50eb619448745b1f6ce2f45ed0793e100a35bfab0c81cf609b590479d4541352 -0xb773a41759e992256a291ccc2192f7e18fe8e13bd7f1b92dcd03091a0e4657f8 -0xf86affb1b6f1fb746fd2dcbcef6865ca047273cf0d1e06ac4de22c9c1c50d522 -0x017e0a66e4c59da7ffcb41261712a726b54444469727cdac4f33840679e60ba1 -0xf4fbd9e7f69c8245dabc6e979a7e97609b989af1262485d567df1bfcb574fa70 -0xc1077399668e5fdbd3ced76b2c0f08d6a9f25ec5a1261708802614bd33cc4b32 -0x8c80d37457cb513c3bf07e30fe6100b40ef82c47103cf64291e0059305c2ddf4 -0x5b6298a868bf0f747799a6441fabd62c6f95f40a7304ce70e56c815d9a71698d -0x696453b97e6ecfdaab1323c644ea9dd5091ae76c85a87b9cbf0aab0f9a060bc5 -0x67f3ddc33d53e1dc4d93a883a5c33d678963c9b50828bc6bc6529da0082b3231 -0xdd01906388ac42a689bc5a84fa0296b7b1f3c0dfff6381c832c7894986db33fe -0xade67fc8bad28074fac5bf2c57f64b6286d6c8c6c3f1aba8b4ac52e80a460325 -0x5b78219e456e07555a18f9cb05cbc1c9e8e123cdc4c6e0b6b570af94ee7ff6d5 -0x4d2272effc86b022597e9b34c4028286a76c3ce0f9dd48c2aa46f26cd8082a0f -0xf72cac961076a441c44b1f4efd0ff2db8cae0ec6d51409c0f05262bdf531e16a -0xd76888344ce5226dd56cb682423b6f4e9b657c6eb1e195c72821212336e15b84 -0xbe1b189e24072c612ce7e4dbd7fbb54239941e9e3835a173647e9ae3a8c34eae -0xa78764d595d56ce91e8b8600343c414582ef1085167689475807a8934279bb54 -0xdfc688774c3eb84eb6bcc14fc11a65c19855957190aa698b58081d62a6e9c7ac -0xa549dd8cb485c9f41a0eacf09b353c972b0e073cfaa3a5a9bad740b544f35c39 -0xcf8678302e5f8d427431b84e3ec50a60c7627bd5b778bb71bf500b9bc5863513 -0xe0c60827b31b8c2e1d1f8dec0c198b104f23eb39b04958633b44d6f4f36da562 -0x660d35d106df1bbc243f1f2a77a6dfc55566cb7524b5a09e3d756471fd47ed2d -0xef9fcf906d7793eba5fac4d1bb829aa30755358033c296432cdc68ec85aed48a -0xf4ff67e5772f7c478b26e555cccdd10b12420bdb8d57c5cd1c71af94835d8b3f -0x523a09748aaaa2038163e3b40ed5e049b12b36cf21297dd2328e6240f9662ca9 -0xfb12591b92f1b444802595abad5faab3b21bd683d41ff8c6cb5ebc9eb937c281 -0x79ca821ed3adc10c78bdc8594afe079d21e74f1535659ba9fb64c2af82be5b0c -0xdb0d0f40953827167c2490b8806468f9644f3e9ddfd266cb80786ec1c2b248b5 -0x4a6714fd273088bb1e8f6948477fac64746d35b0f8a42b1f94b88072d9c09d93 -0x7164822d76e83367c9bf3166b0d6b624a1199f4d59988aea2a7a202249a9c1c8 -0x3a026f978afdf30a7a1de46aeca56a28223fcbc74fe96280d907c3710f5bfcff -0x1201bfa190fa5af0b45c49916934a4231bfc7c82b67e315ff5c442169275d9ff -0x5de6b33cc1fa1dbc5cd5d4733eb7503c47f9946e901541778cf817b1345e36cd -0xccc63e4b533e56b5d0280a0ff39f7a55833c16aa4cce06d86320631baa5a7419 -0x93c6b49d126fcdbbf4795abe7f3610b4318c076ea409c7b55485db323fc26507 -0x2e3dd101491f72f2ec301c6f276254491addb80882b643578aa4d8ac968c4be9 -0x2c3d46454fb74ae668f6ce9b0c55bac1065470716d4c0c62c07f1aec02efbf13 -0xca9c2e86cf66108be642e921b429cd7c8f4051abaa8c945bb5be74968d391dee -0x8a41cea1362bee22626da8dc1e440f2dffb5ab8526771f1823840c7be4fb7627 -0x34a84587b8e96d98d307ee96da63d5e00ff6cd573e21ce7b9bf9bbafca32ec39 -0x133fb69d0f614c99450d3e7243ca8f1ab37f51c5c2edfb64dd1f98b532f94bec -0xaa5f4579f5ac98a8fba189ea9b02a6d968ff42eac6e325860e2f3e290c831f68 -0xe2963c919259b96386803082d280d48a575aefa3e5407568946e0068fb16f31f -0x93adad0f379220c834af74ab53487e8a079ba40b8c1068ab694c4ab3c26bd923 -0xd0e500327b3e1ff5c89f86ed8b58e64c5094b7d599962eab05ade3d55971d48c -0x77299a87de58cd170df36edb75a289e0e96da39defbb414cfdee5a3add13432f -0xdbbb6d30d5efef65d3a27e7475f20449b78b44758e70c6d2f47bf4b95fefc51c -0x7cc506d0945829beb45c2acb50220b6890fc78c9d69df72b0086f333871c1091 -0xaf5bfd9092c0cb5978b2c8df82c2e5ec84d039f09dfcb95740eb6f525d26b878 -0x32fc743ce6b121c11bdc1762e0a4426757451d57fbf79afb26d2292d5ffbb464 -0xb97a240ab73b902b80e2edbf36778ae4a1ad8c39bfcaf5347a6dbe610150609b -0xf5c8c0ee53996605726f3ff53678b3af97ed9e4c5ea395ba316051744947432b -0xbf7776c3e0e02e225b9fa6a742d31d5d120ec4a77987d7482abe81b17c5ddca1 -0x6f9ee56891c6464f2d40de96b72a18502c342b70a162fe52718957ddbee4aa3c -0x093b6f5623103979d7ae998b232cbb63e241c5dd7aef58725a2fb04063c5fc6a -0x618bd479c39d0c31eb59f9447f86c9b0febcb1fffe4ad1d576ef959126b84f18 -0xe94c7d0b611f3abd3595cc039deb800400748a6d2849ee931a13d04cb1df882d -0xfe32f3f0804b47ff76e03d1ac45624c2f00de8a6289aa97dfda3df28cd651b40 -0x2d4aa23773750d0303b6bbe6d3ce6758c18c17a934649aaa59415d7c0f37512f -0xd4ceeb8abefb8e21a9251c44e940f343d81d371ba351b19d7398ebde011240cf -0x26f2e7ed4631cd77e450be054938adb6879b13caebdc10d76ccb9680d9694bec -0x57fe15d88b56222720ad21e183dc8d98b2a24a6dd27a22912b74fb78aacdc7d8 -0x50987048c73682517a4e1f194f48278916918d279e0766ae2f746ece5f860039 -0x39b718b54105ca253806c8e8692f6c474bd91c8b8b9c61537cbe67e0733c3a63 -0xbec578440f8de6cbc49512a56a7e30c1fa1d41b56382c06e54d7d11a69d205c0 -0x86c1647a4ab765e83779cf674e2a35db18c5485023d6010f94f017acdc292519 -0xc733fd3e7e99ca9e9b8ead269bd416cf0df6499246ebf5a03ae51cea36a1651a -0xae6335ffb1d71ab48218faf264d93343ad171839da9ca92a248a2c0a8dc57751 -0x3d8c9fedbc3fd588cd9fbfa274b0df263a9dea852dc013de43f7018f13718890 -0x1f6453062623b0e02a3be928e4bf92fcdaa074ac6c399ff34fd64d5c1e61f880 -0x4b38ed2b0a1457f981f4e3f89851a8a92966bfb3eae55e1c0fd694a9b2edd876 -0x36b057dfad6ace4501c6625d724c3bf1944238859e7a7e90ed8ae47fe05235fa -0xa168234308d8f8fcdbcd7d7eb4abcb2a610e5249b819754c1e88a244ca0f86ee -0x420f920ca632a89dd2cd1094b82517a6d23f656e813125b89ddc4dbc33337c57 -0x3fab2d5b28a1cf60e345d25eb6e0ce66d65c68925e16ed44bb6ceb8c4ab22dec -0xd37d80a6bfca5c515721d507148ccaf54425298ab7f95af236b74c55235366da -0xe373b358ef0bd2da53da8996f184cc28e8f286e4630c8170ff7dff4ea5b2cbf7 -0x615bbadcbd7e7049d8ad97831d23ce8dbb6cc312382344c5ad129b5ca36d790b -0x37bc96ba77716a117bb743bc70c34781669e76c6e975087935383574d9eb38e3 -0xbf3c9876ec0de6f27faea1330dd113ab8439c8eacbf3baea3914745238aacea4 -0x0c29ef8802abb34d25020d87013159b0a94e000e54c869d723c51a4e23ab62b3 -0x5266194df318ca12f3779e13c6e5aa4b0932e2164be24ab6c3b2cddeedde5d07 -0xfc05ca9b7630d5dc639c178cfa54b5dbd30f5a9ac98f4abdffa55dc84a879d8e -0xb5587846d44d0b2584a136c34a8a7418b22c0ac0bf60e5088b336ae41ff71c8c -0xca9af8a3bce0fe0bc3b4e638cc0d87138dbac466cde7ccdaa143830c4c8aaad5 -0x0fd4922b2b335f70c4eb0aeeae770033c7dae29038bf69221a0e40f4525784c5 -0x026b98d08fcff5a5aed91c9ef0b85cfe4990cde3c096ed7ebcc557c84f19d581 -0x7f0c01965ad40acdee974ef010c489972734895b76badca96d67ab81cf804dfa -0xccc699f8f949bf1c04282ab5a1383eecfd15498ab1f1b33194cfddc33b2646a0 -0x1485c7a4bb05cea234e45af246ff4b907595e29bb228d2c7eb5f961725e90f51 -0x2559cff80b38079ce3da17b2955b2b86dccb2528b40996e7fcbb0bf14cb6f1b8 -0x724b7660f85f6577ea6e6eae42d1d07b2d910e667a13e3675a34836a86f7598e -0x4c8414a9777b8522aff62188f2c1d4cbed1fbe2fc2214ba8945e4e1cdf61dc98 -0xec1b27ff8927c8b8fcccc1fa94f8fc90ba0924614f383bcd0ae11bd5907bedf6 -0x928eb500821dd60ae909690a78e4d35bd8b49ea11ef5a40cdb0d61d5f622403d -0x6095b163da09ecaaaab57ab5e7ba9e258ae148067bef45dbf8094f6a9793d1c6 -0xaabab3c07937b7a2a513489de612a1e1c8284269f4aaa29036724f674b5c28d3 -0xd9061d4a1c27857551d59ee7394f5ff9813c89b3364d0d9dd4abf401ebd85b58 -0xd2ce650395f4a8753d1aab81b79901ab8ab1c684e6ee5ccff4588ca85154fba6 -0xb2bb9f826d8de68edee7bb1e58718e1230eaf5e554066cc634dfe3f10ca4f13e -0x66630673a76738c313c6d5ac6523bd59f78e08f5ad6b39fd9c2a60702e153bd7 -0x48b13ada5256d46ed4526e8c4f2fa91f1020d7a8abf76ebdb4dda1a8987adb1b -0xc5ae72c5ffde170cf248d476360e6223cced70714f3e3ef3565bbb8c60e8e048 -0xaacc55633eba7d977720370fdeb8e76a1489b4604b5987cf5913dc2557398209 -0xd4301cf956fcb1708dca8684db11fa2c638f530d947710fdc4ba985557dd8d83 -0x59625e291a1660999d094423457bb4bd2b2a8631c5c68cb0ac1ff5f04594cd4e -0x2390bba3c0470400bffece648076f4e75138c0217d013ebdadee2cf37d872c5a -0x5ebbca21a7699a987288a14df6367c2a7a27d888319860df1810e16ce165c1bc -0x3503549f235b85137ea040f7ee29a6a55cefbb758b3abdad1990ab267e429c4b -0xdf83f916b549745adca67866c286805e3a8fea55d3351ebc69327962d8dec8e6 -0x045aaacbfc1a3b53eb794fda5fd0286ea05b1c4400b1e7afa1df07a1cb1a4f80 -0x719bb7ed1520326ed6f6664ca4e00c5f848b938714f5162620a52b339e1579d0 -0x9daf16afbb5bbacc5472fe928534a1b785443375d81b34defc8f1b185fabd89c -0x06a520e290730530b9bdc15a00a0b342a972e9225b462e6437763fb3b5d1d984 -0xb690d14f1f42f942fe7e6ef1402c0c634779d54f12234c515e3089c0cdb59c5d -0xa2a7d5cacf9506a9f556414b19b7b795585a01340a2c4dc0f5aa05995ed011ec -0xe11b6d17441d1742914a7a9d3ee6484e254e2e5611ef369e041aa5f337b8b554 -0xdb82e36beed2346b254b79253d06cfd8627d7ba38c956a3a5945b1b40bdbad76 -0xdbf5959774c2d137383d6dbc8644ec5cc00c28a4c28fc8a567fca266ddd4d351 -0x658d9f965c7eef248a402dd161d2e0f6edaadc234fc21848c4a697ab6b8f84cf -0xd9fbf423e6a08a24af12f6dea506b7d2e998759ba136d29537107e5e68eb8386 -0x01685d6291b0104325b70a14e77c6430fc59f2078f1416d374364976db919e32 -0xce3f52abf93b29b0b14686bc95932c2f7673ce70688d176cf016a6d0659027fc -0xe84666f6123652adb029ff015246ccd3a6cb1c0e9914883073be2d6f3b14be00 -0x9c24d8b59a2b62d95e9215538f33a2822fd0b84069b7e908a214ab900b439b8a -0x8c9ada2bcaa1830d10baea1a50a2d47b177bf92fb2ac9788972ab515398091e7 -0x2d0507d36575d2a3ded80eeb556d215369408ece8e1608063683cbaa456f92b3 -0xd9ab7a3f52a7d35cf8df6284ccb1281bbac13791527a81a2536c2567ff99741c -0x9a205552a8ef6ce8be3306ade42a72096d2eeef23d8ec6856fe83afabf6fcc29 -0xe3ecceaff34fdd073ed4403811e8332c42e8b72ccd7b587695cfe57cdffae035 -0x2dfe4c11572236812ce24aa6ec10dc550b9f1d73b4ac720715927d06fd504e13 -0x29e753fd5450203d3944dd0b8393b219e4177b5cebd7c8625d5d3583a6099e54 -0x53ab8e4c59e5ca871f02845d25e6fee6c18793287dfee466c1eb012fa17d464c -0x1e9ee500754b6a925184b64494312d34462e97cb5225ce4c854ae00f2a61b8d4 -0x1bc839157d8594e59f6f79900c4ee9cb8acd1ac6340efcea4205bbc00cf98170 -0x67cfcd96f860318bb7ea3788ecd90e46d17fe4ac12b5f9a62174c41a8e820318 -0x61fc7eeac1be8f27ca849756e2a9db3112add26a882f5a8c54553a4a8a6d2948 -0xfe22535fe41cdedfdd0115951f9ac92083ccdde5b902f81dc84b71199ac61f9d -0xa68efe652ebf1ccb7ea5dfbcc01a07660f4d25edf1551af536914a73e6c21040 -0xfad77ca6afa982fc5c9a52b0f2be3f0be89a811885bcf4bdfa42d4e7952a750a -0x98b3ddde8a4cce0f985653ab5fac601b4319c8d464f1c0e58ca9690f47ac905b -0xa7abb3253ce32a8b749ed951eec3cb09d57323311d667ece535634fa9dc43e5f -0xefa199457b604a29bc1eb40c0f3edb9898e634eba931a4b440463143f5e5cb19 -0x9b549682485805a48024e465154c25686f62704a4b7022a64aeb0ac2c0b089ba -0x2e1d18b0520982422e151b15b5661bc3a65a7feb9c0f8721aaf816569b5764ea -0x23ce765800185f435b9162d4f70eb05cd5572d73705cf0fc5b2d493024800b08 -0x4462a41d2006f66513006f0a36fda4a69c3480f65155d4a5eff268ee44a79770 -0x5ecb7be9679d4a534c51152c4cd3a4ceda1d3a7009106e90aef2f407a8f4a155 -0xe959f8923525569580070821a1bc921626faab3997fb26128edb8fa8b7d9bf43 -0xbfb876cd0d72005c58ecaf69a671aee4cca46b6ee7f08a8bc09b35c489749b0b -0x56fba507634f5613f957cc15a12ad52b81467f0d315e4d477bb33e8a4d75e561 -0xbf88d7f5bad3e31f5162299e24cd9bba7efd1da2295ac1d1a8a5d890b2fb626e -0x5cfbebee3dd1e096f8ce15ca2b5f6378c3256a24107295a30e22620eb0c256de -0x629df289b7705ef924916a24d3df39491c47aa843e1f2c6a2159302f9049d218 -0xd22c16e54d665d96c264d1512c8d8f6312aec8b63359869a6520630ade9885f8 -0x18bff5604a6edd9f4e941ef8c5b37330dfe4859eac6e65bcf778cface4419ffe -0x3176ae00c092d7f5270429628c1e7719919d1dd66583f8d7fedb2fd0e756ed96 -0x021026e6711765dd54b26ec8b118c6e9743a90b6128468031ae60c4f229b925c -0x77baad2f41015cb7bc82d1fbd3f8a6b2b80a7435e4634ab08eec932ba1f84166 -0x2eb866f8d7f6b9da84f5d47f9d8646650f1811018348452336ce383285eea713 -0x28dd21c3befe901af0359c9ebf949f1afd360aa797877efac0e8ac9040217da9 -0x5b4ffcaf5f86e4c282b672cedd1bfab7564b4a2972103b52588bbeeca9165020 -0x8632d82bdb1a160c21ad05e4f3a158f9e51925888ca77a8e4e9e179e816e3cee -0x5990ee7960d29b9ed9c7fa1b5e7ea1e4e344052cc6905c7f333961ddf2db56a4 -0x2102e4bfa8ad542a232e464b57d9bbfbf6e50a892c75300893469f9da73aebf2 -0xb9bd3805865b5f0336f38f9dfeb21147d86f19453857cf71e918ddb54f7ee1f1 -0x58abaadc1b1575a928722b6e608194593107ed0d4ca34fccfba55b73b18f5c13 -0xa1842ff882af92835a9ec5c5d479bd3532e442869adba5fe45072ed31de21dae -0x80d0ab100688cca189099a5a801f989303a725a8bde625d42742583a125d2e73 -0x87b8aaff25e50b735fe2f69f9be09d3e691cff98d009bee36b089b6339cfd6a6 -0x3b3323488f8168a636e855f79f8aa3aa7d877523f7a1faf6c0d21783a2478eff -0x92ad12ff1f22b682e99d35f9f4eb0f32e994ce103ae61e656fb37d5c248f2d6f -0x4cd3cc582329d50e4b4473180973cd4c7678dad54138b406d9e1e4cc0bda22aa -0xbd327b76cc38093d7a453068f1dc26eaccb6f78ef076aec980f4d57f438a91c7 -0x3feade8e62caf9914cdce98311b7ce63577cf75cb51f90401fa59a90979feb05 -0x046cb25819b1f0b474bfa9d76050f3bf9251fe3af859857d1bc2067a1598995d -0xa7e97b621ec140ba88d62e7b995b06ccf21bfff6c3f73389bc8ed11a2f17c8c9 -0x0e93c363dbb06cd8ad6307066cb3b08c669358f9e0fab095e73ea903e130f34b -0xd2088def4c365c7abadc293e01cabf40a3a551af792263b2027b2b67c6f2ba4a -0x56a479b2b74b71adcbf27cdde0c99baf13407f7066242d1b767bd8305d38d49c -0xac4761b90dbb5cc41191e27a7d512cf9b2d1f3afd84000b0aaaefcffa1611ce1 -0xf7ee214fd58c6aba064ac0a6c6fa9fdebf169972c85a57b909a5f87ee8dd01eb -0x93d597621b4431a8c0e2dac2fb286fd4fb2d6110040162ebef6cf0411393da58 -0xd28efedb51cad1b196e4bac1eb95b0425a82de6cc6ba687e6903bc0cc405836e -0x63236fba87e629c261f9d3128a0010e5c0f799b83b1104c10f168c0b2a75695e -0xba9dfc5cc3f7efc24f0a5637ec3ed83e9aef5b4339b4e517ba04c612eaa7d89b -0xd16bc6102b1dbd24233c1266dc069762b5fea3616b2328e0c82d79d28bedb630 -0x33529f4f1e2e51ca9210b05cfa522b60218671f9d7063d622f72bb8bb8fedf53 -0x4de0e55daab567a5e359220790f8b72f4f76c696016170c2b4f0fe2ae9a8899d -0xfebf3636f79718678650d9c977eb6e1646bd822551236e9c6c5afa04d35cba8c -0x5d0bfa8295a66a9a78441565da8e7c268ad68205683652b915ca5aada841d0d2 -0x5a5e81f87cf22d6e1952be325df6646bcd196c2e1393de0b5a68053e7ed1d37c -0x6a0cb400a4dc38c6985c2b141f85bbdf7c138f11435127070a798331a35ae9bf -0x8f7228f79336452da0b5da2ca888d6de6c81d62bf9ce797a8e24be714d23928b -0x57c2f944f88ba44aca025f0b67e7245e5b13ded7c65dd5642ef6bcff9bea28a7 -0x7eef23fdd93145297647d5349a1ff62b7d136d6c3d8ac2b7f79fb676b0daebaf -0x1c4d9f8624e0fe4109d0d01c37e0de6a4c78140693475d280683fcbbf05f2678 -0x9af2facd90ded1d29fef0bb623ecb08d9238e89d495e41fca9bd1fb2250474e1 -0x93faf039f8e7bba06b4627142564024bee110f816bc6a83a2d80ddf822474c72 -0xda85a3f7c977030be83ab0b4287db5ff250ac3abf934ba1d15aa4bd24dfbd229 -0x71bf0f5eff2a97bc2308988b0a89de9889a27c64d65aa3e486a70ac05e69cf3d -0x6f5bbbb6c2ad77f80b92bd1560a167eb322ec1cd6faaf79b3376a13774e8a70e -0x09f4fe7f6c69b6ec3dbb74615f125c7853da92d2cd7eb752b082f446223f9d19 -0x2f82e437405c96118ee15aca94e0e78c0598f8dabf214ff28551ffb0ca0d3b34 -0x05f50eaa24f9dab87b5420bf73a6e072791fba52a70e81230fc6b08005cf0b8d -0xeafd49ed81b817de7291f4c184168bec99f911553486cb0842bb8fee287b0510 -0x879fc40ee2a8b24358a17fef57231245c47a555846bcfca8732c383f5edc554a -0x7475ee0cf97bf7fa69da71ff5f171fb13be713c77e425d85b25ddc7ce4b3ee08 -0x9f4d936303e2f579bbda885211b22f1206c9607fe48ea4be8480f44e29d965e7 -0xc70ea3e0f01bca7cec15e3263e1e82cb758aaf56ba675cad555d98becb3cbac5 -0x73e736b926e75e64256b6cde0f06718be1d722e22934db220969289e9e5dd89e -0x23b88aa9526cd2b4661a16e14631eb8a9abe0f85f4b53cdfbdaa4056e66b7a37 -0x6fc7e1ef5bca56bee788fe8665e67612f347dd7873f3c92685a761a3b975cfdc -0x1fec266048ba6eabd994e9c197bde2b5c6a8349c9f53cbd0274275e066f68cd5 -0x5827f6e053f22e84650e9705877a39fe5b010347fd877a2b65890312f8ca69e4 -0x478e3e10a4117057e07600dd85a3259f53b8d1da09b9291dafea845d0b694b13 -0x5eeb4673e373eb8bc4d50ae6daae9a43a361b625e1aec59c21c6548b69d7a16a -0xdc1fd33e85633a80507e81a18574e9772ee00bdd23ddef71a8794b5f8d7bfda8 -0x6178649db2eec8fa7129abc17bf0ef8cc8ab890998c452813c16d7b8545ea5da -0x67d13b7b4f05a1632b3fad72d7658eda1b8417e1e6f711e3d69d799e022c3156 -0x08e9a301d4e3103e9190177ce12f7566c24f3e7a8ff915e5f95b8274a6f8a4f1 -0xc233fc5af7dad32af1b7256669c7bf1716ed120a1a2f12971b3dce042cb8e98c -0xe9652fe576f96e7b9d3258890c2876a5bef41a24c2d113927f3d4316c247da53 -0x40e8e1108c55ed276b1c0f7b0248de437fd561af802b8f924401e9c4cee6a11e -0x175adc69b0ab7b5eb11e2ac3cf087bfe6bdca4f1c71db78c6fa01e4cb5a98a28 -0x02d031c9663c45f0c64e0b925e9f94bdc63e6ebb2a24cdd6e48634104fc49b7b -0x2c1be9079f48137cfe7540d5a4fab1266c6f15130dd4f8920525135c3eea5835 -0xe505e443276db7b7e7dd77f35baee08796e08995a4147c929242b7d8383d61db -0x888cd9ae2c960117a8d2c82bbc12c57003f6a106acc0b92186ebb6d003ff8b7d -0xea197f980a3fc3c75b005c32db86b9ce73a9ee4a4cc809d368d9c68bc505ef8e -0x0346c05b2f6509d54b9d08a077e76c0d7d24178127390c3249f7d549384de4c9 -0xa90614c18fd444259b5d44a6a172e44c727a55031abbda33da51b81bebe31dff -0x653f9cacf4f4d65e07b320d8a60ba2399d25a48de16b353f0d65290ac9ee9ebc -0x6e291e5eb0fee2fbc70b735f2d3aa0117fb89ac51d508950abc35e2e83c85e85 -0xa8eb2501b538adb373a727dd965ff04d2111ba11852ffa6ca00a51c3405e0dd5 -0x6f6c44c9bb115fd5f3bb0520ba2418eb6dd127c8da3f0a2de2a4159a9c6dc006 -0x0f9059230daba33f2e2f466688c2cea1945ab15dd93202dc5bc7fe68326f5180 -0x9f5e27442a29b292b9b69c79ce1ced4f1e07ddad19b9945298c78d743313ec0e -0x1b5e04865fea5b840b82a6e567359f4bb2cff1faab291c62c0784c2f44c53542 -0x16946fc10db17e435a1909ffe601727d92840875874d3e858d9d2681d0c9f554 -0x23beddbaf8cea9142631e5e75fd6a41b241af2cf8656a221f94c9819974024f5 -0xda2e569f30171d12d8553660e30d4459184d26a13b97aefca585f47dcd0bebd8 -0xa3a4cb1f6604b57f72c1df0eb2a33d14fadfae1bc93be297b6d17a2cb9602e55 -0x8c244a044beec15709bf7f61e0c479838abcd8303308b585fa2f9f0c753b647f -0x6b3b9f4b4191d9c6ac654eb1178108a4e36a44843a8449f225ccfec52d5a28f5 -0xa650f13af4fd150cb62039bdbc4f3b37581271ee00799e3fccbc266f2dde2a1e -0x6962453a242d706dddefb2331561497036a8718aa9168d7ddc13e506d6c34278 -0xca60ea9927c2d43b4b90d7b08876f3218e1a4c30a17eed4f62a20724ad30cf42 -0x9126e43f790b7e7cfb7681df148aa8d1dcc04a32e54515906d8882aa26892f93 -0xdb043923c5dda0274eff4781d44249a03756a9d2f237f3424809e260d430101f -0xcd03ffbe6d46c57423290569bd5d2385f20c5e7ac0a56cd4b90ff44548f398c0 -0x198a133b267969ce4321d1cd7ba0da43a19581e51dc5f5e689e904529fc37105 -0xe5fde14d34e24a37e467fb714685b7d52848c4b6107deed32ce242d75be17a11 -0xbee553134a44f6f620aa2bd801f9915dcfc2a97e98c2b18be6d34635c3f8d25e -0xab83259e17e4b8d13635329d924a2b4993e89201606cde5a185420a9f80a5bef -0x3f88da58ce559be044821a7d053c74fafd6818fe8e865b74b5bd6b70e45c351a -0x19f9753ad263c9582460509a32a9a4c979853e163d3666dd3dd0a5296139d4f0 -0x4cf1c37f3a23116d2cdb2f99a4f7ec06dcc4fbe9bf706f6b18dd861670692b7e -0xcd3f6cc912ee97a17594d5f31e9265bec9311efa0d171d6151ce5605ee7fa5e8 -0x2dbb4603c2b6f56851304e3bcfe58eab422c9d5b50d068ba4d4be9edbae6326d -0x1363b0f6922e59aebaf806f75655b6c4b0bbd78b985bc83ef875499a3a33271b -0xef0be2bbab10afd218ddf566316fae65f92f28ea322c54aca04e9201fd29a84a -0x8332696598af5fad6911f60167662d016885a0f404d0e8cb9e4f84b05a52d0be -0xe7b8262b789df15e3410cf4c7f46c01032de6d196e4253c24242d70173c51328 -0xf96d39d6201e0f55166d6cf34b0561b6c8b6dce50b50c780936021894cc361ae -0x1f650bfb2bce6984402ddbd0fef94d8d23dd3ebd259b0efad0f176aa340c0464 -0x03ac4b91ae0215731de9748c64f1db487a9c3d67fe2f4498d180ba91bccff1ce -0x860ea9c160f8340f4dfd4c81a4a9719f977a68738ca2e72a2f3e0f07b53eb6a2 -0x6255a89cadd7e5f4b70727084340b8acf6b2e65d0e99dc13f048c396d44736e0 -0x4f0805f89dac430588c3ad73e678689f7858e7ee92f570d1bbdd1e399216c29d -0xfe87019c931b834a7a5d79bcad5052c529f21801c09442c1881112de5a80d767 -0xd90bcea949c5a08b97380c730da0a3e7ef41612e898c06b409594409ad0300fd -0x67877d7df1a154401db28059de5c700003e3ea04df20c10265161d2df0314e8b -0x5dad889046e61f7bea2420af9b546e6b51b6b90e581296728ea0e7fc39a98e33 -0xebadf1aee0cee8e4dc8cb419399deca20f93cb9be1202a5a959736a518beb7b8 -0x0f02f4f6d9dee26f4c803029a08ac8f399ad127c5dc6e781f48bfae718953916 -0x1e68927821f57b04cfc2a1b6d6a3c7ecc3531b86a6bf150bff2e2b57109283ce -0x63042aa3c38131909aaf46a9621617aaca3bb45b666da946d08acdb8c6333f77 -0x1e773d0e3322fef1f7c8cf0d711aab86f7f194eaa6639587879051b6dac40af5 -0xfcda5b75079e702bd67bd01565d58b708986c28140a1fcac437fbd38be237dcc -0xbbe82343f403363fe73f27776e58fe257029202101af76ae486eeb43c54c561a -0xe1631546bcf4446904334a3a48d709d7e3a7f41c3c224872dcbe68f1fa50dea1 -0x0e34fff1f1d6bec8416340c845e2e56d17c148dd8e262e434cb8ca537e069c58 -0xe9ecc19063bddad182b5601341de0b588d7ea5485a725cf13efac4b320cbebd1 -0x089dba0eceb73fd121978a829b2679bce02b64fcfaed3c21170e9bcc4d14617c -0xac9d6aee1975d3ad5d316e905cb01a29b06a8b5bf4e714dd023d59b1c70a6175 -0xcff9c3caff69572cf8f4517978ee7014785d2c53cb1eb09c36471cb71a71ec1a -0x122cf372f86dd8bd6595532904eac7fc2e9a16551d50a4eb3a1f9dff4bded68e -0x60ee5451d5f95f17bef5f16ee8c8430471501d155749e95b17bd8306bf276c39 -0xd0aaf29a2e5eacf5b653637c56f24b141e60c77600dc6dc309ce3adb3ecd4d62 -0x3dfceee26f38985f0fa9f1e3578da12fdedf8489bdb5a3ce8d3bd50b18481cb2 -0x007ff2a0140db876982521ea16b2e04452f8bd747b7be046bf899b6fe0098823 -0xd726226b9f480354fee9bedccaca4a900e208bbd869030ad69f2404b32807114 -0xc83f6d13cd9d7778ff516fe0fdd2f1800bf8ae3acefd33e7103b4e431a194a00 -0xcd5ddf9cc3ffd049b8a8d3b5604b5a1501fc16abdab7ba12088dd8e7e5e63922 -0xc299ecce8301a8618e9e7507b77a00c4f8b9d86caff2f9b1ec8072ae67443328 -0x899770a12aab81397bfacbf0fba45bbd2a058f6983f69678f756a0ba2baa644b -0x88186392bf1d001bf6f7a8def4c982dd466e9f68160d530ead9a8da38f96b80b -0x27d0ddea9c0c36f28a8b70d90573ed8fef50bf928232c2decf6b28dbb3177792 -0xe307a856f65746b62c33f90ee2311476457a3db1c9ffab81ef79a9ec7726ef8d -0x9328f5cec073a6dc2b4e2ab3110a406781e70ef78c5b71bac4b5b890f546bc37 -0x7bf9463d5199b9240b3d4e4d4ee3ab0b08a35a888908ba5f634cb9cf2bb2460d -0x2301ac388fa38f1b8627a825ab422e9f00c3af87a25ab099e0b799427730299b -0x5e1698e1116e987795a4628dbffd570c71a00f66544fee2514837f960f34d006 -0x1c506a4629e542a572eb52cd9bb815bd9cb99619c28aae70299932d20eb36cc8 -0x1ad5fd8f457ca922ab35dd911d719977d10a79c5a6cb0ad91fc1b59f825379ba -0x01ec28283c8f2c32cccfc3a91c1c4aad887db7394942819fac434c954809aabb -0x355e326dfa54d27b55a3f8bea7c691648138b1979ab729874d464eaf41eaaba2 -0x9bf83b8f5c709fddac9ac80ef7eeddc6f51a85a5146d200be8f61c7c57c75fb1 -0x8cce948860850909f56e9e8f74a4f055ef7cdd6d26d1a7c8513a002984dfc0b2 -0xc35a3c3fa7682a9440f5955625c30740d78f8487f64e74644b0dbb8fb4b27033 -0xfc93c392e1c303dd8e96509709a9a1c305f77ec60895fdd3ecc75fbac80ae059 -0xefacd4c52b8aa8701455fa00a389377308a00bf23857f01667d6ada98f8ed71a -0xec37d1d725d81fb7f65bb8d98a14d35b1b99a2a93899aa33c65444fcb9ab1220 -0x47c592fc6ec23034693163ebd32509e0991094a36e41778e388df5edc4477509 -0xb0b167c8ae83bd7d2836adba4b8294ddb8f524f34110ddfb01f1511e6cbef5ca -0x281d6e85aa87418d0bda136a9ee84df16fe85f76bf6cd15e5d3e3076f5b0829a -0x6f4ab24e58f13f42c6bb081025b34526440abdd737960893ded9dbb6519475ce -0x3b27e8413ed3c1c20e8f030691e00c03a114d2ea5b5390e48e4e6ad6bcb80691 -0xdcb774503cbcb645cf0a0d9265739966ab8a9ca5edc398f47536d1cedb0dbe31 -0x556a37735f7b5434aa51e63912adb8be3bee59f68c12b497e784fcb49bfa49fb -0xc2fed3d05e134beffa9aedb150221cc762d8464588fd32c59288be68b2b74351 -0x99640596142b1f2a4e412161e4d9a8b32e6ad9b80581057b21e1d7fa79e42065 -0xe80e440e4c8bba1ba1972910dc9d003b88e722c649cb0f570d299b8cace44bdc -0xfafa4099c18a5d7586db47eb1024dd6e672402e98bbdfeb9987231ee6b56d907 -0x0d31437f763c85ca82da9caf08f12350b7e397a01889ddb8de9e4c7e7a62ffbe -0xda420297a2cc06056c9aae4aef1b14ee382e4f6562507ad91e4836c16487c6c0 -0x4e9fa3b21b3d03de026d755bd79ab8ae1bb57347a45acee63595bfa941be816c -0x3192b82d9f3e4ec45fc3aed726de6f8948165eba6eec9a3390df028bf78abd3c -0x4359c5949c2a2c636a85b9ed34fef1322e8ef08072a97543628a3208f5cd7358 -0x5c5791ffb530c72c26fa3c9d5617de4117fbda251002ac719e73f8c58aa70f60 -0xec56ba1cf9c11e004f551f86c6684924fa70060196bbea528484f8591b9b9d59 -0xc5606a0683d2aaca56813b1b8e3fbdfaaff023a666f138e769c7de1ff126ab44 -0x8b005cb1bcc507c1d678b951de14f930891c312d7fc37919af9b7c2f5ed2706e -0x68dbdbec06b7360e40b7afea13b77b41b4465c927cb21b1ef6cc14fee61f7bff -0x836f655f07a6a06af8f51a29df5902d54223158d5c52fc6fc22aedcf6b140365 -0xb19fd79224406b764816c946f3220865ee46a65491aa64e9d0416dfb092193c9 -0x137497c25f9676df60e0ef384536777a2f7517db06e170b2efc31cabc4ce7e85 -0x8cc588feb9d1a47eb5fbc5b0d167ae4277fb87f4c6ead78b2f700008da99946d -0x5211729577991e3d036214a2dbe7641143a02cc61d65574a72cbc8cf1cab345e -0xda9493f1b49f07ab918bd0ea72090f408713038df6ec8b1c1e22c2e883ffc0f7 -0x04a11b5b36a52e4e34b4a5c284df70a5cb1d966265c95eda00f15bc179975633 -0x69bf9d8f9e20381f38fa05e3682c9f1aee0f362832069d1c98acf327b4f0ecdd -0xf62915f2268ed4a178af12b9f361325fd377f68011be65a7231ce0864b5d4e24 -0x37ec3c72bdc4c08edeb2d3de5eafe3a73dd51cd2c5b0afded8e442ff6dd42f71 -0x7af780278d9455a7ae88604b542068608e82b0c5bad80070b837c8b1cedc03e2 -0xae389eeabe0a7a762cbc82ec03275e4ff53c9a2b20517357f38eced91b11c7f4 -0x4b0180e8d63c0cb3097e37d164bd76d5e26f86bc5517bd08bbf1814930f59e06 -0x4db198156d22f5d885dd65ede9db537bd7f5533d344da9e26c5a076cfdc27a8f -0x73535a5680f98c4a828f5373a14f899096b445eeaf7ee415e0290c4c16e30ab6 -0x39bfbc3caa32ff3d29425c836d56bccae91b1e1bae6029444af277dead69df42 -0x6566df6dd4b84ea2f6c404b99ed5c29682c2b48e677f61630886f86103c5b718 -0xef560a4ac78fe708869613e10146acea8e077aca17cedff6919bc2777fb1cbaf -0x1a660e6dd42db8a2468b0f93d5f1b04624fb0007cddba99cbaeb09f50d84515e -0xf5527b12d89548aff6269082186b3c928fd37854947b7cac909c1ea45ffbdaf7 -0xdcfd10cd65cee326a4f7729bb913c98ab4e5c1296570f3864b088d36832244eb -0x68b3d0a51187e60852cd5c5fea56cd0075e01c14de856c79121b01a3c1217beb -0x4429196eae67ef725daef1c724d208caf22420b28387b3a521ee1bef5a053b5a -0x3aa66f22e4a69771586012e3870752530825c8624bccf9dc25021f56075e5022 -0xde1e88da2d1ac691d931b561a21ed239739be77b489de76c16d10f1cec8f352b -0xa177ad998f502c47d62ba058b65b102ba61a44bf1d4ee22dab3eb990c4b8a319 -0x7b3039a884468f8c09dc0524ca392cf4e58d7059b01ab654f3bbfe0a9b8dc852 -0xbad1fe776c1060f3efe58eef1ce8734912e9a932f667041e5c60ef8be9125a05 -0xe4f6486708071152f5ac9184e6f557530d5d065fc51ce0c70ed07e247f40373a -0xb54d63b8ec5cfaa4a1b3193af813c07936f823d8b91550ede3dccdacfb686d39 -0xf5a688b3f1a04946aa518d0291a2570919d5583d7276dbd022416baf53227bda -0xd6b062841c3319bf4ce36f00ce8f58162d49e7e85a49ca8001c515ace59df2ec -0x7a07e085b3c86f94ec4afb37192665b6dd99753aff92ebcc9c74e5cb0585b8ba -0x97d256c277b7e1b44ea4fd3c5f652c27bf96bc283923e3059116779f9223642f -0x0792687e67040080c13ec0b06538c07d0812b4d0aea936ef9d707f6244987227 -0x3eceeac246d2b663b6cdee50d312e6f45d803f98e342b02b2b72fd666bf3f8f2 -0x2e581bd16047080ec66ef5440542672c833e39deb2863eefd9e03d511610a48a -0x3b3c5af213771198f2851fe8a272f71f22524f83edc59530e52fbb78979b2fab -0x5d4b9adccd9c01cd59586a407e124a9d74545a5e8733f72ed8a53e154854070e -0xc8e48aa5847f127aa0dad3be7333f002369fa8fa1a926cd49b3b1dc1d5bdc15e -0x467cf753d0eadd76b116eb445244e2f0c0eeb040e32666cb09611574f40fcf12 -0xc36dc682fdd1e376ca39c83585ff39898acefe9496b8fc46b75b9ac2f32e4693 -0xee72f9974c7d6f3dba7b3dc88cad922f682f911b520185ae01358002e6ea8cb6 -0xa5829cd4dfb8900f84a1f7c3681a964cf4f0dfe4b4e23cd2bb3817cde0aa4636 -0x6924ea13e19f6cdea6d1e5154dbf19c304a643495ce2c000f26aceb1ed8c6ded -0xbec2f6819cad6bb1f734653d1226afc60b4f7abdbef6f9d835f3492cb9a2f875 -0x86911eb1988fa3d819c63cca9d19c99f5b5eec2904047a1641526228c6a7d473 -0x959035563729390f496711203744d6ccda43cdee8df9edf8840ac9ba97aa5088 -0x7384b337ffed8e6718f78adec9b047adaafec98ff13528b1a9e276a6eaead74f -0xa28a2b5b089ac1fae494c90847adb3fd82bbd9f6ca1c4f4e54908d6aaf66d9ee -0x2032f9ae1b6e6e49bf514743c5cc515c889b7fd1a9de4990f9348b9f42f23c41 -0x04d66bc8c8088567756ad16a7d165c21a4a7d6ddc9a68b1d77da03a6f08c1c1c -0xe67e74b46ce74901933c3d2b0312a4885232e2a497fc2072c189392633dab3ba -0xc72786ca31da4b0c0314e5d5f72e950e749134ee1dcfaa9bacecde78a048e45a -0x2315d93a4a9bb083bd3677131650760d5ddb2f98b357c5c2b81160ffddb25377 -0x2ba79d3d6c4be0bc3b403e8d63973d9faa44d1b8ab17f531376e96b50d0dcd05 -0x3268d0c45ac4e94bd9ac41cf6b6c3c256175b4057a4de0a7acd71d09eb04d13d -0xb0241167e1942a91425cae2d7a462ec204eeb005c7c8d13ecbd97da53c9329e2 -0x3cf780f78fcb0f06fcc8075f8942b8821e36a7baa66402372d0e2d5e480c079f -0xd040c2fd1ae31735bf0a573e37be8885862cebdbea7c642aa0a56d81cd118b59 -0xd2a9aabb4437cb01f58485deedf7ad375dd45c8c01d5a56edf7cbe00a7d2687a -0xfe5aa15662abdc8ef3f9e11b9b2c0dcbe9b8cb4a9faa8ead70247964252f29b3 -0x819aba54ebeee824ffc3249747bc93adbf8c9b15a2b5d9b98ed4b18762983487 -0xa1acb50d217c2f78dfa1db279e8179c42700dbc868a8c9bc29dc019b5b13343c -0xde036b9e803d2bae3bcfed82bb5965a4cc7a28bbc5924fd74980e51287c373cf -0x5e5907c4968480f8087182849e603eafad42bab0ac40918ee271535037fe457a -0xaf951bbbc3320838f0df96468085c27e43b4b9532650c3ae367a5297db2e47cf -0x0ac80491219aa4abe41b85aacfb7d5c787008b43c55cbc94f8cc41a4f7db0233 -0xf9ba20918c20db333439997ba0083ad0c0b40d4c4dfa421e7c3cb04611852f95 -0xf492ccd809cabe24fa64c5070908fceb23fea5eb93ecf64a455b25608ffe3981 -0xdaa6ff951224a9401f4ba0081af865187c9fd2b40aa1bfe45e34cd4223737723 -0xce206406dbd3db1db4a0892d38dd893193f33f4b7f5a71baf345b02682651dea -0x59332fe000861917c1b4f34703b1af15d59026180dc70764e576c6a66ec87c23 -0x54f9e5f7b8613ba3dbec500dddda806814be2123f386b2178af8125362f58044 -0x193b2b2b4316c150f877d49d8e1e8ee8dd2270e31b3ce74aab276f859de93aed -0x3326a2c77b61c93f1d058d7a516303a0291b54e9c99b098bfdb0d4706e07f927 -0xa5010b15d7bbdcabb4a0fc02ee709a8924c19510f1e9f6cedbd1aa2282d4882c -0xae55e9a9739ebc5906350742741451c7e93a4ae001f3ea7e01121cf4c9c4d229 -0xdcaa5a1fd55bbbb940c76746e80198f08eb433ee400bad0026fedd4e397b9977 -0x8320b47f5ddda0f54d9ddf504968b68c532cffafa818fe902dcd940bf59a4748 -0x01d764f3c1c2884144d4a0ed1847ebc7358e3aa8681cfcea29d53e976e1be08c -0x9325f4d0dcff87ae81eb463f224dfe71107f020ea0eec6a939dbd162821b477e -0x32589a2ef2cad72c6b5b75f23c8f74d82f3abaf386de8f339e02abe26b1ef89d -0x3d7251bf64cda230ac0e1ddcb117e6c991da23c4ba79c67e98f196b8e544c535 -0xabafae17e67a60ee6cdb1a725ff092be8312a7d82513fc5a054dca9b446f2816 -0xbb6cdff8c5a366223f649185e357808b93efa4d9fe5df529f2b21154cbcbb0cd -0x51b69ae3ace4f44d1eedb0004036b9ed598b6f987960beddb19753ecafb2aaba -0x7c53566146066b7f9e8467f74fe8492bf1efe5f96edf7d7f8d8e9803e6b486fd -0x1ba790026c59efe170e8e3117ff82b84adefeafcc352048df124735897a14966 -0x0c2c128beda98c28c158a6e7ddde11ec0d029c3010cb8693395919ebb6d917a1 -0x58568228966effd7020414947565b6a24b5c77631a63503911e7bac8d40f2e23 -0x1c0e70dc2fdc37c3e3f2de298a93c4536656d3125716ff3e86fd5487aca99a92 -0x90bcf007eaacc2dd0d9666933d191a4f0cbe323da559cf61e2358ff5ff426f1b -0x4ebeedeb729a7a97bdae43a2eba9ad4ad8a43daec3660e9e248f247ee7081ddf -0xee6452b26dda691053d2d80570e6b84af97c9c4b7e8a3010a6802d446ac3606d -0x5fb2bccde3fc2a5f91c5ca0ba89f27f4f9aac9e6f2b61b4226922438c3b8b8a7 -0x9e8e2ff7d279ef7c0d651565888c4ec09a8230f2fabe1dd0b11ef8450ac6516b -0x458639782c11fde12c58ca86f57764d859f38a84ee5917c701bbbcc54f33cde9 -0xc56f04cad04a54fa6428a9601aa0abacbde3348b2cf8c8a5f8bef242a8c29910 -0xa78f7e70b58b78559299de70dbf1566cd5cd500338750aa3c04bf0a2b86abbb0 -0xdca30badee6eee9fd32879e233bf61ded0c410e87e50c53e162fc58f716e3bf5 -0x4cd3c8990f8dc141e7a92505ae600cf442668beae53359da6739c22ffee8f4e9 -0x1dee611c878ed1ef952dfe61e0cadb69cff03761ca8ff0832601ce6c2a1ee674 -0x4a7781a1952f506ff648ba4113cc0daf2fe1e70a9c7591abea85fe9f820dd8d3 -0x4ff5a9eabc6632c1a2031d391697bf5240444eda5a3c986f0ac90f67c4bf7c9c -0x6d4e1566bd44c886abd84edd687f4311cea34fe2c3b7c8240d13f5a1314a7d0b -0x1fbf65868260c26894489988dc1bc0f49e6b1fb27e8693c50adbdb4f4468c394 -0x67561154e06978f2db0cd2fa7b4374c961f79ab2ab61923c49cf21278b032677 -0x7c39f01de0f6b09cf94fe33e770800a8e6be8194de2ffe045b9b84f09ffb0032 -0xf59fe270d1c0d9b74028be81abc920b6f85b072c7ad638c8e263febb9c2f7f8b -0x19c92d5c6c52d0495097dd1cb85373b798005016d45af401113e113da9da3238 -0x3b0041b6f7f38fb272c83c9071d3f06e42839b122b4b1e02cb075112c2feffe0 -0x8ccd66ee466e1478529334e480f484a11f22aa15da6e9c560d3bb8e77db80e56 -0x1efe8ced8c244586576e72c4ff257f76c5983842a5046ef518df39b8c91293f9 -0x223f07c625d5d0ec014054a34d4b49a5f7021d7c5ebd0e8bbf22bbe063a61f80 -0x061f68d86f8b0ec190887ddb33856761c723423c5cbcf0e7b62ae56953f4e1a2 -0x8873ab88e206dd0b9ed264b6399b0ca04104e38a31f5a3aa3bc3488b48ee9c2f -0xd857e812fa838431ea0dcce3a4222f689e030e601cd8a92fb1c38a37307aec7d -0x219318ea2f7cd40236e48743b1b660d84bf28b87caab66bb4893e94ba6187889 -0x4a4167d7235613adc69e4b95e95661dd60f572459db6b87cb9bbccb453c14abd -0x57c1710c0e31be359ca45159c07c1eb9b962cf0556b01f8d6b380cd6e0164c94 -0xcff7e54a86293fd2f510282c20d879c47aec9007a976decbc3e94e752d0705ea -0x2089f626b7416a1757a1091a2d958be18318cc67a21795f3c1a5dbf8dabfacfc -0xc5a37f06bc7d7f24ef9e0b373591ddabc9cc6663929d631b6b82acdd18b3133f -0xeb3ca54d4ff3497080f0b139dc2c9829228bee130071ac8b75328072760aecf9 -0xb1761fca017153775f0df8afd62e6a36272e62e8402403fcc93398d436587dca -0x1696e7d4ae2f73c649ad7f4c367a61d4b376c3c4f2b73436a67dbf336bc2357c -0x6ecd5342532a6571511251611d558dbbd7f3da095cf31579547aaaa8026d171f -0x10d7195aa71b8f5235394e39e66bfe009f99e6e03866acee43742fd255da2884 -0xc725dc0511f595e0273ad4540ed7ffaf597a9061f5387dbc25278b0786347f85 -0xafbd0df3c330bc3a30fcb5a749f759677bb10c31245b7d74feb4c80131c00393 -0x433dc5383395a6138ba95c5e0acdf0b1d58f9086ba55bffc8543bc8d3c07cdb7 -0x65c0c75ef4e8fe62b060f2a59d137553a5f440e2b9b5c12128c769d8a1c6439a -0xef2a00538d901798ccc4ac90b24f4619f60b67cbcb8807dac399443dfca21b5e -0x3b061cea9dbae8d6f81ab5a8205c2e3f3c581a701db6bf0d952f715014e60e74 -0x7a0949746190442496a5d9fbc294099708f01c4f382a94b1103933bc80e295ee -0xfc8e856f62cadd4e1824ddc0449934323beabddbe5c2bb56d351a4b867a9e3d0 -0xa1d440f89ad57fc9d0498a31e9df811cc5fc1ccd3ef522c0f42fff71952f869d -0x4fd5aab238bd2a3a8e81acaa93fd795f4688a54e5e3353bd2016fcfb30e67c9e -0x5a979277aef83bb4621d341c2bcbbac3ed8d1a8b3ccebaad880704092ef93cf3 -0xfbd25b4f5bf94a8a44a689640db9dfc21527acfa7cbacefe46a1eac4f3921803 -0x6c597ccb195aa59ecd9ba658429c3f51873a2f3f27003c8ec2da695fcedfbb3c -0x5ec78f3a00b849aba9cb2990da87e5f842860523cfa2d2199faab5612d9b4458 -0x25cca2b8b8ac8ca67dc6f45a4f8e6c18e21c66a5dcce69c2928ce9b3a180e4c2 -0x6441f5c761d3d8ba4e2cbcb9ecf13653ae5c0df4da80b44e8ea99d8fd2778457 -0x68a2d0a9638ee8c3fafdd23bd0e259690325457a0d75a6bcec3730a7d2fd7ed3 -0x2d63833ab4e908ad6b8e3224a676513a6dffe79101152eee40d702c36e43eeea -0xe77642001e65020c3348b6d91d7c4cbfbb2d30da35aead4c7d76b851c0bbf7e4 -0x82ff32c2df259ae427c4af9f477f4a5bdc7ca1c592cfadf31b69e75f4da306f9 -0x8672a7b5e209056dcd0c94d9f0147c225a56f4f067645d87c027d167baf5d707 -0x4793c8596426d1869aeda0b80c6dc3b8091d812204ba9e53868c36cce1bd47f6 -0xd2cd2bc9dba4bebf5100aab022b387467c882487482310565144db731513f50b -0x24dc15692f6728e47e7f2dd7ccc9f1ff20698b6cd34415f7325b49670c00f2d5 -0xa17554ae97b8f6144a513d89cde4f813ea8518539e81fbcb1264ca5db7e8599c -0xd6a48f4c8f48bb023c071562b3e07aa471a660aa68feab44139684fd62d3f284 -0xc251d0b7acb23c8bfaef29a7335d6c9461e4686fc7f09d37f7e4cca184b44358 -0x5427a739791bad34b523a5aa032e0be68b57b8bff72920f6fbeb8ecd783e224f -0xda90dee57aa7c7644fd56719acd79de0b8336eb1081d5ddcbd8ba6cace7fdee2 -0x31937eaaf7c2a242f2a9bcf6985383111c1c19e2a199310919e718695ceff2be -0x25eefa62bae75e6e2a403b6c2b23c80db33c60d98cc7c290c31a85b028557c4e -0x672e73a745e20763c1518388121766fbdbc0fecf8f7d2e1cf8a8705efb649aa7 -0xdbaa12a19a431bd0be2ec999f829c9a5ca1c136a30e11d3b798061857410b965 -0x8dcbe693d2f26ab7900f4f0257915f30b324384c49c4c893e8a3ba76492a175e -0xd078e59b0c474facbc3898a0e6de81ac8c5bf89a30145c1e820806d671b582e1 -0xb66a00a2d5d054f291ce7fb6536933cc48fc767c5d059a9014f100840145e871 -0x0c5873c5cb2d8f8f69b60e85973f65f7acacbe787043b7d5f969dac21f3cad9e -0x246676b4a1d601323b56509316510c54afe3b316aa9aeca438119a718bb1b3d7 -0xa966713bb75ce4441fd5ee454d8937bb70a036013e2ec4649df38eea386cc8fc -0x961c79194d0b29437be1a3d68a0a0e7b9d6811113ff4d13837628497e06bcdc3 -0x155fce252ab1d5126f2943a4d66548def7cc877a57b2adb18eff8cce41a2114c -0xeaf3e9b446c512311bcc55b9ca659ae6ad6801f5dd6dc994108b00967a4b751c -0x72143e27999e7109b7c4e653096689657b5757b2d9776ded87091c9049122ab7 -0x4b1ee3d2d4e6a524de16d5f8959a6137fbb1539d3472f5fd01d370515bf6c91e -0x4033e44bc830004794d1ffe54304a0d7d1a2f635225c67b2b7fb882db2596385 -0x01c13f18c8eaed0c1b76a008c58a15262074f81a6397fe9754964e7645552050 -0x2bf886cf71744135e6654da0672a21c9d435f64bd8ffd1d46af91619541d5bdd -0x4998da284739f6197762b6b1fd1b058d5d48d40ac1a2d7a33a5aa1a482e7b9ac -0x90b2b271b8eb32153f1f3e4760fa154a3e4e0def38744c99e2ed5269b6d1e25d -0x0dd93e920c048e9aa7ed778b04a0933bb7563aae237c5577281a7a0c583edffd -0xe58f6839349fed4345ec36d67e98e8870b84f35c5e53335d1e2ca3e23baab729 -0x09cedde52b0baf09543eaa5824ca70b98c3a84e3d47dbc71e60c7ca77749b496 -0x0cff0f38773adc0013bb6fca98f7289615696e4eaa1286357bb9c150dac91d76 -0x0e5d1322167524e3a7c88244425bd12d3529379402d2faf25d511ae7e25daf0d -0x105878cc0482beff213dbc962632322a498c91d8a732e470d53826b296acc6a0 -0xbd80757657ddd298088c54fc4eb3fea054b75dfa7079d3fa684934daf1cfa8de -0x22fc141f27f004e83b62402455e1a90d4e3e0b71a0253308d200a05a7f04f304 -0x21eb810fe609132fc954d00e4bbc1f803677217c340ae5afdc48496f82763878 -0xfcfefdedb12600c662f8bdfdc650174b24d6e102c857b1b5151b90e75bb8ec83 -0x13286973b66703df54b20b82f4419e4ae5e166c0e7996806b735bc62ab0434bb -0xeb36542648f90755d33bc14481fba00a3bd1dc8aad4a37e0b974924186192550 -0x4ac52132b8c7552868bd5409e30abf4b893ae268afbb7617182689bc02294b48 -0xffbcd6c91bd0b3a2b99f5f9f4a1dc74ae8f9b0c9fbb9485596811547727e44df -0xf3367da47361f8335f15576cb78dd929d7b8e5b6862426e73ac3522620cdddc2 -0x615346c5f914c35b8659709d1df3aa1364af1952aa615da38c7fe4717d4a5220 -0xce825d40e9c001f36b1795290c45f60a1021346ed6f7a852461925d20e8b7b4f -0x05247376070b475ee14fe95516b7e89c5765bfb7895ce03e1bc8b2edeeaec103 -0xf2a3e78fbf00d343c0c0c74d19bc0c70a1170dded5995e7c201e27342fe65322 -0x05b437bd57fcf96b6f173f902244fafcdc977a2125522fb07c57186c3f57cc7c -0xa8e3f22e2c13f522e1b1e3e37c9ac5f32a14a505b51a5bb554824f3b8e7baa54 -0xd301a8eebe7d3ca0eabfda4ef63e118525d03be5518e1481d081af464d5f2582 -0xd549f0fdc5674e4ae8438a50c120810ff1951a28b3e2df5ae78424101dccf240 -0x3817042823d271f179fee1ff0d1db0b82aa05abc26a2289774639da895700513 -0xf9a78a523e3d0c8c5255ebd0748c6a137b5121e8dc95b2cfa7bdf7d326369141 -0x98794ff78016871e22557a9bf8dbec014a5ad1fa6f44afdd314283d35cddccdb -0xac11bdb3884a67da7d6f5d49957841acbd5ca85ccb046d28642983d33be73292 -0x593a150196c169da3e96bc21b1f81a0a922516928adf66edc0ceec5f34b4a648 -0x2e971c08d99fd81f672f1c5e46795185ab4991cd4c70c41568ea65657b169666 -0xb5d610f883b24a0bf7b6166cbd02a251bcb0ffdf4c1b8d45acd415b77e877081 -0xa5618de2df43e2675e84dcc547dad7903903fc908677483599d78187a1e51355 -0x0e3cbdc9361df3cfe7cad2b253541086fb227c47b530d0f797af475aa760b8d6 -0x0560d2d21de422f5690dbabd922c4eb6fdd9f4e2d5d3783cc171048bb7ed41b4 -0xb2659aa62f2cc565e9adf237c0220b5120dfafb5ac246b1196f87def733fb1d2 -0x32cd033ba15a67ef6e3902771edba0d99c85810e26e3626aa67dc1917074bcbd -0xbe876133b2e98078f4ab00321a59e356094ed478937b2f99e69a1cfbee56654d -0x34905d681f16b85235cd0815c1559c69278fe4eac9fe1bbd5a64306872fe4b5e -0xdc18c968413af890a3ac7c479e67a2b2f5e79425914db3ae6855d66e4ad433ce -0x99941befe47e1bfd39dc9e85bfde80765e6a2623591b72c55ebd1a4fe1ccd90c -0x0fd276b4da4cfc64a2bba86ccc448f14f0782815772dc11bcf8bd6fbd833849c -0x3f814252eed735e5a5ec4c23776dea3fff70adf8ae6e2d2c7ca168669d3edac4 -0x8a30a4c831217b846bc808d3f0e50b93392551f23bdf82309ee026f8793168c5 -0xd229f2202fe70176afedd35c804286640c6a3be1d4e3a152842550aff4c89f5d -0xe2d2f98e214f91787e80a8b2d6e1ef800c3854b50f2dbcd147418f6859342ecf -0xac716039b2ac9abe5c982cb724615e49424f34918825b26091e22d402460a74b -0x328a4cb885a2c24b506d9eecefc227853fadd00dd8ab4fa6901b1bdb407ae55a -0xe855b5a8b09efb59341dcf4d4b709ab7629b3b76395291890fdd3a23f282ee6e -0x91503aeb277b01fad3e1b22f974a453ff0b23bd06f7c4eb945f89a6dc0b75838 -0xb18dee8d8e4198ab0470debc8edc8232af659abcffe5e024d36d7feec0eaceb2 -0x5c878c9e8dc809d53c8d1ff3a8a789f95073fae7b51da7ae1a1bdbbdc2beefcd -0xab94091fd08ac0e85ccf2f64f70065c2f814f76026a2b4d7237256a2c5235c9f -0x4584163112df91816c6ae17135aade6e146319c97c2fce311ad0d9d47f3ce04b -0x3d58d72ae660ccf0c8df5015b4b2aedf3584ad4b42a85578c1153a31cd9a3fb2 -0x2caa39c6009360d0d00d206c9cd4c1958fd20139c7f2919651514097e241b69e -0xb044039e741c7334d6e8754f6201f620273bc0b4be063fd1bfd72795178c1f7d -0x6a46f4e42f0fbc5e3c33ae0043c0ef3e292a7796a06e37e60452e9a881e4a522 -0xd92a33892562e419ad9d0534d108e693e42cf517d45cf48e571bce34ca4aef06 -0x7de4dfe230df135bcf8d6fa6b394828f7c130661b34e9fe23d385e89becec577 -0x597cbad88cc3f42a5edf8a5eb4cb7860fd25bb11332f7e85c63e026deb759bd3 -0xc7ca9073d304ce8b4fb1cf39dd8f8e6e8edd63fefec7aa4c081190f5d8207888 -0x7a834c7c60a8cddaa1a436b0f74435accbfd71f1f2334bd2cc87fd2588a155e0 -0xd5949a2dd31615f4640c9bd6bcab3a720e8f8ec6514bfe799b0172916f6a968d -0x08a0197991b3122cc22f103789bd634f3d227f023fedfdbe02a1a1426bb63fc4 -0xd89b9120bd662d69f83079e909d32592380a9832ae0f25bc352eb1d497abe8c2 -0x70b1ead3f30663ea5db91f8c03cd1ecf8280f532e2c5d8662b67a59bdcd42481 -0x446e32fe67495baf854e7a06c211221b27719b62954c2252bc21f5e0fab0b838 -0xbdf2539087599d71e078087196b75eb1b1904899086a226b8b8d66a45cbe1f26 -0xa1b463cbe40e93fdda0ffb62c38ffeb874422568b23836f81aba87884612c743 -0x545907e8d1a76e10fbf4f9f57ff5399ff63e3e79f9f5bbea8378ae927baddc89 -0xaba28895fa47ac3a1340ddb58513cc2306676a450274dc03ece68fe85445ae41 -0xab061e0291c9758ab72fcc4dce3a35f005189a1af80e1a2a1ab646519e38b589 -0x97a6a03fd301b6ecbcc5815d6a1a0c3f25680dba6d7da2690a9973b83d41de4d -0x720be8eab468b84d74217c9ce428cecffd5aaa4bc5063da88db6bfdf2ec1716a -0x0f594cf716edc8bbb786ced5cacf401dfbca50fd2751289d3c2c27e795ead752 -0x71db67ff4b80a2a7673151d2e08c8639c65f6f7ed0572c37e0b30e47b7de7e3a -0xf67160a737b900305282ebc69a54d389ad1cbd97b9edfceec803fef4becc368f -0x01f228f3b5fe383187caea9d59b3c90de0e13ca33dde157dcf34fc2f503b520c -0x2fcb025069058359674b9dd1210aa71264ad90f78e94f4775cd434a8d4c551f2 -0x157fd47c6111ccc676a186ebbfed9600f3862a7843e095e8e66c987f4eac0c3b -0x9e008a534a6a59148078be3d27133c24ac5257f0ada4b7d05fab85943f291f3a -0xc3411f3fef910b7b4120361ea6ba8f778b5e3f368888449f074d3b66ca649228 -0x769110b97c143ecf157bd0a95d9cea60f069574ff073efb85a45e148e1b482dc -0x2827cc2f5a23f2fbe910c779e94cf0571d81758069fc2185be0e20e01d205f8e -0xf7341f917b29e98d8abd6d1088935f0f912ac16ec7ecf6f6c8d42d30e9f28593 -0x9eb998c0b39cf7d1dc45cd7423f06a29d4e1bc4abec20ad31b6338b9ef18ec6d -0x65c8cc0430f35576dea698295a7f2b5d9ad197987a73a3d71c526b98415876f2 -0x0f61ad99550ec4601fd0385970f675720522e7bf6e81e86ed834f000fc6171b0 -0x5a1bb5039b19f508520d68b0d2977cd094ad2c8136f195e269182599c7c8f8b0 -0x1a00c874db4c6493beeaa56fb7ecc9b4b64a9eeb46ec3f0f1423d6f2468f9e00 -0xe432eee1adae2cb06161bca91952e2f383b1654a478ee4f87b4560f873400ec9 -0x177002948239e1932ac69512483d7a1df04835cbf8f1ba5759da04d8d1fe80f2 -0x26e6d06b31184955da09f11adbf62edd680c9bc4fbfcf872e644734303e53b53 -0xa1857e2a998894650183ae0335821720d79abb004b61e56bf374e82e750743a6 -0x3fa9b81738b013e71f9b090696dbdb01af19e9370fc3e657c9f031045635c370 -0x121fa166c57b46389e22aa4f7883d6a2880e2cd163889438268e352beaedba5a -0xfa3875ef256085e0ee573f33a327f9d45c8ed4edf5acb5dfd62955c43ac37de1 -0x5a11bb39654d9382c798c0ff6296edadebdd52a79f61148aad95a4a718483046 -0x439f2064fdc4c506effc4d5b1709fb75cb4c49e9279e09bf4ca01310f36885fe -0x72db6db89176a84a42e7731ee3f6be3420f5d91da32287a14b55ff18b1d09bdb -0x73939da022a2a50cdd904c1b2bb7af60c0986f75e5ff1cd04cb5c560352afdc2 -0x5ae589405ab0b5d614bf0019d1405a637ceadf6f3aab9a188272cfbd4c22104c -0x9bb10dad1c6edec56dbf3573d9f4b1b4ab425d594c385cabba5955cd72e9468e -0xa5813a3daba736946142394279bfee108a192c67e880b9b0df136cadd461b751 -0x1f4862e25c23a86fc2097bbbc0df426570eead807ba1cddd70488a14263f4fab -0x7b6e433849ceb158207fb6426148c425e6456765c0a69273a60572c9f44998b3 -0xf11bfe79f5cc6da2622f9ccbc1d6a5ac297500df3150df52b60600fbc7fa9826 -0x62588b9056fa596bb739bfaba2cae84f4d5391f4784b80ce7ea2e304bf7442c1 -0x7059990985541b69a936c58577e31b265ef5eb0be210b356ed7f93fa458a363d -0xd872593ed9c0a4c2e70facdec4b0865a7a3b94d9336a17ce191a9f9dbf9fe790 -0xa9f7b10dbac59c4278a7dd526ef852b74f2e53bc3c4642a76783161a86c4c07d -0xe08d6a6c53e785fe4cfc7aa2088472c1f308478eee9b1a92b4f2adf6783642ac -0xe38e3f05194034aae18e66287fcd7867258d12b2c6144353b74a6f5df6264791 -0xd70e59b9370362fc8b74f4ec67511eddea27e6319a0e8cb50df808c92a1e8007 -0xbccf6ac2f892bc13fb28d188e151e7591c6030d43b450bf9cb3204f8f4687eed -0x6024320f6003e113a8fc8f2088d877ef7b41d0be2244e469594fc8246f8657c3 -0x93cd985b1252acd10509f58cbbbb2b1466f9d71d86d1b25d0835cb21218ef858 -0xecc14afa86f4b658009d1e93aa624459793d2c48ebcecabb67514f45688da1c9 -0x59dfd5cd9f88d9894d9ef6daf0e7049d13df465400689ded352be5e481674d60 -0xa168ada5654c18843e8ac5efa3f93081afdedbabe42cc9609023d6a7d863ab68 -0x1ce013526f38bf039d493fe76c744439faabebd98ba7b7e1508010b48077928f -0x30a304d059603b2b014bad73382a54636a7e7e1c16527841fea65a8875f08d50 -0xd47ef7ba3026afc1d7a6ec9ff2292895e0d23133f1137dc961febb9f81c981f5 -0xf1ba4700f317df433ed8f3d1df3e91d79ea18ec39687adc91ea0de33eaf89dd5 -0xa24de5765aee12d78c088b0225c290dff0372f8aaf14ef4beda5df5e7d4cf427 -0x5e08361af29299ea8b53940f50eba63dfc34508782e531211fd516aaadaffd15 -0xee9d18a2b4962c7be7075aaf908319699c535fa82aecdc5fa400ceb1fc9a3a3d -0x01e5e3523c8b517c7a6028961efec79f885eb6afbee3e36627451a57d78517a5 -0x324e25054390db5f675ee803d8b7ea88df1f3b40279d12995c6246b7425dcd74 -0x0604ef3c5ba5a650df309bb618ef959c1f20e31ba31bf54ad676d33459b5a3c2 -0xfcef97b10b1ae25d4d49dd7b9b59f3927b171377cca7e420f20878e471283c06 -0x8255f8b851da440cd14ec6374ea094bb3d15c8d1532b5b841a4ef87f5b87449b -0xfc2930ea735a7d7ef17af3e938ff3e8f6e15d4ae85c08e770ec9c7cbc6b8fa0f -0x9748dbf301256f8f2ae433f29a7706e745b8c8dc5b556f3f55155a91150c2412 -0x680872faa6703dfb080e7beb0b29b3a5b65eac7bfc7e200a8781b86ea1314f2b -0x216e19115cd82dc8d8234b92dd3af9ef354e67bdbf4bf511d54f21e8dc2030d5 -0x4923a945403e9af9b90030826633327d36d4e00c30789d9cbc9d9df0f4210481 -0x03e4a055fc7610ce32a4efa627d8564c52c9f48bf6dc8b4a107f689ff6691e21 -0x184a4ee62e3ed9e034738a2fd5120a1a9e7669d9332d1bb9527ff4b51d58b4b5 -0xf4e572b9f49616090177ff42cd90c6f1e0252fc0b1ac2232c75373da466f0050 -0x254067a23178c078cdea2242bc8ea848d4a69e4575c03ac837531ec07d7897ce -0x0e6532bb431dbd1497567efba20e52165cd1b8771b3ec4017210bb902f3e3811 -0x7570c58eb19f2039dc6fd544973e0af5a8288c07f5aa392428d43a8ced356062 -0x64ca5e0ae609cc208231339a942be3735afd3a646b27270e4d0641282408d0fd -0x0b94adeae37d59a0735d057ed1aea19baf746ff7e55b5032e807d877f29d6218 -0xe3536e69eb2bc30c26b02063da3ca8041da24d6a109557a0ea3a60f48a85f0da -0x308e55b502c899979ca9818883febb0dfe7d99041c544c78e842a65c304431a5 -0x107ab5369ce3b2748897a9404fb85d715eb8528725c3205595ec4092bb6c7478 -0x73659de5e2d861bbae18375f654ea2c328a6808a1115175f297cff7d5c58a894 -0xe7a360ed14a60a7e5605ee651cd4331ee02a57a3000856bb7b867666ee320adf -0x121f18b7348df2c72e13ef6b105d13f55c1ded2a4ea392fd2fd446f4ee39b096 -0x497c887a63ef2602973647971369a38761a9d6201c0e91051ea74c33f26a5580 -0x4739d87fe5c5750c89cd281a93f9b5b290025bf8f9269169b19999e0f81e9a67 -0x96148888c4d2ffc04f2e50ee75bacb7c1abb41b02998e018a94a5c5e88a71e0d -0x1af4b7dcf10863ef27436f567a25f34cc3cb088f7fac63a329f19489338bb0d6 -0xe0c911afa8cf8d3d8a5118fc262d3cb9b55af6ad68316d3db5c76ac04838a9d7 -0x6bbe670b1903ef3adfc48125e11e2cab0d337c95812415f2fe6180cf3f1b1e9d -0xd3857637132248025145e837da79b5f94dd217797fd5baf9761f61cd7e8e21f7 -0x72d7b8271f965519060d2f168ab401a2a357d99cc3f5002911a8481c46781d05 -0x311d98ee631463c47d845c87e9f41779e0cba0542aecb737c87b4a3a5a73f291 -0x667dc08756cd98967e62b4e15763f8426d85e84f4e76ec1db2f7f604070a513f -0x4465d756e8b4a1e5defc0500500242f0d9a3a385f69f9486f4862286e5d1e91f -0xb3c8508c622909e3f52d509312d2aa0b9c032f4b04cab036d46d2ff8f9901490 -0xbe3f5ae8932c2c38946bd8f5ae06d5763541e73aa3e993f8103b36f7d3d2d733 -0xdbcf645bf7dddacdf357c36806d9c490e016043573bf339e7ff0cc5df5b682ca -0x304d94b5670082aa584561aa7d5882b8b1b66a142c2dad593adca28391abb085 -0x984f70d0723f89c2ef6b3ee8ec56f56cc56e17f457c92e01aea3ef2a11462594 -0x2a4a5b017c3ad72f655d3013a0c38c2ded6b8a66c821b857b0c8bd21a1627917 -0x3c0736f3eda7093652f3e8f823eda7fb84ce32430a818b3e3ee2db4bcb598ad7 -0xf049173ebf76e9fefe92df57fe3ec604e7dc812d6d19256d92eb00d4e09762c3 -0xac816ff11b8b1e3619e5a52e6048b69e4f4d72f8ec3b48f8ce9a830cfd14c813 -0x97e96cc50b167215fa930609e1cb17060409b186ada7694050a3f30ea0889266 -0x553ec988ed18d61e068e836b09c6da79d55d6e78322175ed70872f1057d30b1f -0xe0e4a4503216564df95b3ba85353b8c53fa8ef05c23e9eab6b487020c734a37d -0x17c540455af60e97d89145c6a7d2b976d712dc7128b0d6644820b12bea88abb8 -0x58aa4ec3e7f04b8a43a2064fa3bdc20addf2b991ce39455d46f32b9e1afd10ed -0x1e9a8288bc868b1ed93a7bfc38c25b2a9b14daf2264bc06bea0b18ef9a17d374 -0xe0cd622cc444d945664a69afbcb7374f257f6cf8448c96948e2723b6fa1bb4af -0x13fd7a297015ec147753eb334ed4d79c8afe102409e1c06ba111abe8a0774c57 -0xbd33c17bfb0817fdc23fdf1a07a22acc35df440dc1642a116453ce25f0711936 -0x60b732cce4ee56de5bfebe79094546b222ef5f370c1fb757e8d9b3fdf23f74ed -0xaa74f4d97c7db0c1ca3f805a22e198c3f871dcfdcd1c4f3ae28cbc66e128a9a1 -0xbb521ff62e7c2515bfd94c2e9b514a56c5c6f8648ab2313ee64657b2c83ea677 -0xd5f331f93e1157365cf83bc0a6b442cd882ecc0b346ff928b8ccab28b895eee7 -0x4028f864da21cbaca25c36fa70b745c8461051a35690ff750e3451237b490883 -0x5c3d202e709ed44afda77e5a1a462468497e47d173837d871e40235b2deb94b0 -0x5840ca6fe61407268cd5913151d0ec49bd15b2275d1d569a4315df9cca6a54cd -0xd882669f7d13593a45d5bb452c2b04341309f90732a9bd3dc0329b2fe32a1b5a -0xa50e93eacbf60bb548aa5982dd66c392cba5b285ed03cd6cd5150b6aff18c27c -0xe127f199b75cf004a2a7994594077e2266b04f37f2d8baa0ff762963532f3b90 -0xd6d8a28d91391a4f499723c7ef2d06b4e21c96e5730034ad889d1c4ee4f94841 -0x2ea5bf193de5dc7cc05cd935eb122bfd0943b48a32380242f78a6b684da79a37 -0x32f629905b8700b80a862cd6abbd16b53dbf46d3a6b39eef19905a5ae7e83807 -0x7293d89bb4095de231e838602f2f033549cab50d9fd8399f4dca2eb10e030ce2 -0x062a0986cdc6214955e8d4bb5bada2cffb77616df5389c067be7cf71cac8caa7 -0xa6a46c96714e323c4634fcbb9fa2e03969ec929dafa25a3afc7db2c93cdb8c22 -0xb63db72648c74b0da28b75ea567481e9f4e4e99c92cd5f01abb8a43cedbb0034 -0x5e7aeefc8bd7b634b5d13b1214a828a11107a118d53f76456bdfcf3ffcbe201e -0x44bf0bb6130afe7d8dc9c68eb87efbc0dcae8f402a37152a35f56c94fde59edd -0x14a90f0af1fe1a796bf5d5c4c684a54d26697c03b760deefe28835fb5f77446d -0xd8a334b86e18c2f876397c64a99872792e134c76cc34bd674c26141c3110e656 -0x1cb8e7d1a879a3bc521cad6b49424e66d3b6faa2cc21cce99df52f79855e9796 -0x1652310890b09bec5f1a174d7b0e37cd0aae2766d4e35ef201bc275bba70338a -0x3e95132f0301a06eb1999b8fc19e988220bed058968f01b785db1b6f7f30a0a0 -0x56ba6ae7ce7a4062539645f43b385bb18e72cf7c8e7884db9305d4922dc7dc56 -0xa6a0fa4d378775683370cd9d0092d06da1378bb72ca3bde99ad6f2393a6cc810 -0x9df987a7791a2feefb35a0b6235169b9c9604ed1884d63da6ead39a32b4c304b -0xd39a6d670400742976f45be7001225ff1ec198a971e0c5b1d903f3d06136a238 -0xd34748eb97b9373a79e5656639c984ad12a75ed62d44bd3e9872fc4ab6e1158a -0x8a9fa9cda7602a4ca96d11699f8f36493456d315e029b60009b660b17498697b -0x0bb2da6cdc3448d61178c63251c009c3d79b86d71291de54154ddad54b8ba737 -0x0ffcac6f3a1e95bdc54f8a09d365f71d986d5e923c57006380cfed3450ed4d89 -0xcd043841db86f0ac03db9ea7cb9ce26613733c1da1578a1334d4979ed5811742 -0x2b921083cc0235eb175a26d9a1354543d3a5070a866fc50b1e7fdea8deebc0d0 -0xa3e02bfafb68021a20ce137926531a937a88b2e44d44dcd1eb6f0a640a7dc244 -0x81eb414b574f89b78c8344b792e47e7bee993106d846f9936b35ab8309c5e805 -0x5de6d47f6a06191d564c99c203f46f11e64f0106ae90d194c945576428790d4d -0x2a34ec42202768563916e42cebd3fa511972cd61b1b086bff78ba6b06cd998db -0x21ac25f707bea94ef0166f47dd62494469fd23db222d311e4106c9b5e7e8dfa0 -0x2af197c4b9dcf92d923e64f9584e9c91d75d9063d9e4a8fee8ab15ea0c013e27 -0x42e8022593189cb78474d05d0c3c7a3be9db4a2bbece2c7ac60b835edeaf0a68 -0x79c078c0169090751cca4b69a05736465a42532050eaa9fcde4806402b717092 -0x5c8ab77f3595b1a4ec2045459068f7afd640972e9cab06c9622c016a1f4eed3a -0x2b31c9f387191bd908317d62bd0079ffb540f5d6e89d3ab6827668c2cce62074 -0xcb3536373a34caf236d47c7afdecb5e078bb13a40d2c4e65b30513dc4f9eda78 -0x7ac629fb5793bc049a688149a1826d797b42b421d60a042b1a4fbddfd8e2189f -0x3a1233c23ff8bfae10386ce4823e051a28d6c55d45512ded82aa16830062a817 -0x3246bbbebd42390fedcc4a724fe32a81926464e29be4632798e703a5a2b8e0df -0xd0d96a7dbd4d5ec30cfcdac4a185e23c7a2cbb27b8544a023f7d1c945a27fae5 -0x0a358c2265e463153c6a2fa4f33209fc606bc6bb2d0d789baeee537d864affb2 -0x65b67cabf4160e3bbf45b51006c0c9a40cfe5508f657637de68733322d6fe4a0 -0x4590feeab267bde9cfdcc7cb51cf483277cc103a51701f6f045b53c431166c41 -0xaa0ce4f818a03757ec65f5ceefa7123e1b0d5dd0605ee31d703cca430fa70298 -0x07f9c845420bb5cf6aef069348d4307f264e64d2feab7ae9911a508a3333c594 -0x2bb33d0a2eae8197d4568e051a8529faae60effaaa078146c4ba41cbd94fcbc7 -0x32729e574a14e8370c77943078b6be9ddaba066be7133ca7604b77215eacb573 -0x22e872c9cf753950de284aed275019d3159d94036f36b43fd59987dcf314dc7a -0x8ab2d2870dc303f3435fb82f865b5911af4303ed98c87f5afff27326dca58d04 -0xe04c75fb18656bcad22ee8cb89197bc13a4bcbb91ee6e930b5043588767a6cc8 -0x7d642d613a939eb33cbc6405bd81a206b32dbe9785a3fc4494570ac555ca21cd -0xaf8e36000f56bb7eda7e0c38866235a57bd4bf93f83df0cf97063ffae12e9e97 -0x4c7e477445b009976cd4b147f229193e3ca82a5ac183bfebca64ace5cde7fda8 -0xd5909c5cf2c5ad2f1ad41ea324c680dfea957b8050f612dd5c7e9c02e388542f -0x0248835a22ab1c1d4c0b340631ec6084c609232c9dfc4e6160ea604516af33ec -0xa14103f5e0fd951ed8310edc8a502f2d8b16d91dbe6e51efd8ac4e645be27431 -0xbd46f138110b6d256fe9b5b5ed1cff90d74681b4392ea5eed58c9a72d913646b -0x0efafdd71c7de79e5e6253d7a533b4550d1e2de190e69a2535ce6c2382e4552e -0x4a4f82a8e728a9e8b7d23e6f581571666eaf7cf31fd281826e77be2cf9957a98 -0x5f48feea3dfc47a52dfd1b751a8f7d40dc73f70c0d1215c0e7cbf9e81b086e00 -0x2e922ac302fc4e109d8162c00d4f14dd3381f5de2bd0f2213589f5bc9359576f -0xf7545b9a8a2359010231c39ab905fe792f4f68ca33369aef2ad6030c959d2a20 -0x3bc2096e85925e08619a8ff4b193bafac2372db20bc842cd0119e89bee9033a3 -0xa16da69c571b865cb9c037679b0d14c98a590dee70a2f4a57b4bc5429a22c017 -0x21e988884f0d823f71cd5e7d81fdfb1420ba8a285d643590dd3baa694104b263 -0x10cd7c90eb46cc22ea1e96f918ecbc41522ce6a1010bff1f64ada1d4dc901f7f -0x6719eac8dac7f712be046398fcec64ef8ebe4bbeb3d5d3e0b3547fbdd0e9efb9 -0xff352efbcd0b1cb9dd5f16b96d62790791bff48bf05e3bf73fca98d7ca4baa8e -0xf47088bb9df2b005938a34678e8471d2de3fbd94c79f7b9cd24457c5971d9906 -0xff6adc390c8dec441d93d9981128babeccf8a8786f53b0d8333e9e946aa8e992 -0xe2435c9f6d8d07c627262865be1f3d88c55639bd9273025820fb72790e5ecd9a -0x5ac8a42ff89fe7b1194c14f55fb1b19eaace3ecfb5a4eecb1fc96f3ea0fc234e -0x1fea6ebe4f32fac194df9983fa5caa0fdc9d34a3105cc77fb058c6067e832049 -0xb3a4122543d630377d1b4bd4f6858028ce136741715209e35df23a5aab9cc134 -0x0fb5aac8abe997fe3e7d5c2a9f286b1511dc3c9bf82603138cfdc439d3f9058e -0x6bcfbd47a58cfa02720f3966291147b4bc5a99920e493527539fe203553906c1 -0x37a91ed9893829550e0388a7f5d3d0f0bb8c056bdc0a25634274f164ca460ff0 -0xd8ce2f456ffcccb2fdddbd60919b7e7482271d61d34cd64dcf2dd38db16c2a8b -0xd0cffaa4dfdfb58ac0f39ad4bb080f1c28d8447a1ef3171ef9d1df346d4045db -0x0692e2d76905c9176be844c43817bd2b998053cf0a8a9fe06ff2f8d52c6e105e -0x31e469f5dc790f1e23cc4c017581c636e8c5bc84dd31f96c57893d1666e7b2f7 -0x79dbc949095967ccb06b723282104bfb7e7338e0b473392c4cbe9ba4476f3846 -0xf2e2023d3342888521707610cbb26c46572de5f137506208b4fa478e65fc2525 -0xae3401037d56d901312335be725898c4298ba80d0aecbf52a737d9994c12b480 -0x0a9e0efcb0ef48fd1ddcc612776daf5718e63db6b837ead8b05aade463c14d39 -0x3d80e8d441fbd084481c6059b731d9b03303f969f280653f7b58bf1c6c4c3d90 -0x53afc539409237b50022905857106191064821292c2f72fac18b63fdb9646519 -0x71df10ee20298fb99ca891d2ff957536591f560e6bf5bda00bcdf9c30b3188db -0x72cf451550377190b7dcbb4cbe4df897a6203bea0343a268624bc1bd9f7e9c80 -0x0fbffed25b156acee105064c9d837686e29d42daf7b636afdc7370b94424b6ab -0xca6e87be7714a5c4d2adbd562d668610d6c7136afe26ee21e66c472aa33aec54 -0xa2d0bf5073f5d7af2aa3087e92ff501e5b43809cd205023cb0bd576e5f2adee4 -0x0d0b644111ee5ce1e0384e3ed6ed6c425e775dd265234edf5a059a71ee6e72f1 -0xf14c9fd3d6e9a22c2f02cdf3514427d75e3dc98d5700eb2dd252c58b6aa7ae7a -0xdf9ba169866440b9f1b395309a67efdd198bc18e6b6ff213135f96348e95d02c -0x0e7d82eef270442da5bae442586904bd93ab856a6aac45abd3d4eae2d1821172 -0x11560fbba8c874f700d529a16871688cabb1b2b65892204aeeb12a69334e8eb3 -0xc14e378fa7d59a6f4bd73fd68847a334f06ae825498e636f1e6102493db228cd -0x750a0657d9c26de5eede845a7fcb1bbac1cdade1e54423d8a3f85ff8521ac200 -0x37de8bb0bd3e4ccbc6fb54bea38de3bb93bec038f018864d9ad7c0d49643945c -0xfab18665e9af54da21abf9626f195c67d06572a9e84bf7b1b218c1cdc793358b -0x1da708143a2f77d70b378faaa19bdc6f7214bf39a041a830f52c968e9c05a43b -0x1fd851cc9e3f2616936fd908d79ac269b1bb6635fe6f4bfb989a56d73ebef313 -0xe89280b1aa840c37b8e217eb4d57a65841fc5f742edc79ea1bebb7873e4edb3e -0x772233442b28c2cb4542d0efec4ec092a384c5a20e3d6e392e55cd38183ddc74 -0x4630c87316b019c405e2d00663a6ddcd3e5e798eb927f1815f4da2eee6a9b5fd -0x721aa8e65e4d90337385774947c81dcd97cff1676fe9b66412929a4e02708fd3 -0xaf2ac334a6e6d7f7d04c791df9ac940c31dcfc23c8f0e12931f0ced889686fdb -0x4c937a2252d2e19bfa488bec5d6c013915f90e8e951c504369fb42429d22a89f -0x75bc938f8c8eb55e5e16ae63fb26f973811759e91dcf340d71d893958e4cd3ec -0xe0caa327d537825a4e2e0084e1fc378166f2515e9894a3be71aa0a0cbbce6cf3 -0x0b8bb8b79e0b01fd72869cad7a8c63359fdd1d8cfdda47fa8b4d0372a169f8e1 -0x68501a5323dc9419db342f3a490fc518b74f982b3f4b7a7cde88d7841307913c -0x04752e9abd2981cda2379afd25236c99d00076ed7cf7beaba389398ba616a8ca -0x6c0452c00526ee23853d90d899ade4c81e1a2aae91916bf11f57826648d3c664 -0xd6700bce3546f8aabfebdb0db834aba075f604d83102766182fc3c0c94ea4121 -0xc055e7c91cc304fb9a5b18907299db2d68014607dc425a7106d8a41e17d4a020 -0x4dfddb632fd76dd9e419af3b972e80e4f9d760421512b80c1a4a4f26fa4584c5 -0x668cf25d25ebfb24b00df870903d259e7a4dfa6e1ae378a65cb7c23db815c207 -0x37cf76f43d06f6df2f831b120c6b5979ae8fe627058f95aa153a1ddaa68439ed -0x7c6f0d1acfc37fb0d09029c99230362664d58b49da8b299b25cee4a38409c79a -0x3264d11c5d616e2b238323e7aa83cc9f6a2bc4c9457d86529ce1d229ad04fc8a -0x7c0021d738ea6ef8edde5948a6fd3a3c3f5333ccc82f1c8774d86667c62f3046 -0x594ce6fb571088f33c00829fb297fd96a9c110322061ed32c58d56031ddfdd8b -0xc5478b7b5953394afd4aa2fbe4d574f5e0723883a1de78368301e4f67fe73f95 -0x3557a9077ce60f9256e722ccb7ad9bd3cccc78eeb77ae20abc1b6a87187f3f43 -0x92aef059fa4ce16678ff5733d2d26ac9318f39529103821ac6cd5b8ae22aee56 -0xccf21692e8e0a263a56de307c083cd289a8047f8e5c9c7b7de2f21498f3ae501 -0xbf3ce8dbb2dd08f0a16b5cc69decee921eafdf569fde1083559a607cdde872e5 -0x6b6f495113070a85144962b443d088bf276862097caf51fcd4a740ac53f174cf -0x1d919025245ad5697cc3f3f0e956559276d79a6f2ce107b457573bcb3de3f8b2 -0x2f4ee10c20b56f6a79f25501bfbfbb6c009e741a3749079193d9b6024a7517ac -0xd68a03a4d387e9dee2ef90b0819e9b791001c30470e8b0fb0fe5f43125f0f603 -0xd832472e9404e5dd0c55a096c6d1b5b3e7b6d20f65e95c5fbb0c1ab946cede6c -0xd2bb645eb50c15fc9b0a859a6a30e94856281f8b559739ff23d0735c119278c2 -0xc7cb406cfb17e9c8a4774213d7584fcc2eaa2e61003d3e7e66689f162ea40c58 -0xa4ccf8677794ed23b1893c06d7401f416b5522ef2f9652479770768401783a55 -0x4499aa674222536c8f6503e16c5af4bfd98d2f4785051eb08b16bf2fe7572db0 -0xfe45c3261d013dd65c8686a657a710ecbd71851af4b4f40d25c3ca18aba801c4 -0xd4f3f1767837b9bbb2a01f4e373a0d7e750382c3909338713469d747104f03af -0x1b8081ef2a3a7edd35bed811d7899dece041fb4a72d4cfd824ae5dcde72a9d18 -0xda7e592736fc976f06f3a497e939626ba69fd83630a1ffa416d420ba3f0ba634 -0x6a37502606b8b3be080696acbd1273e4f7b156b25ce0d615e4096594d515cdbb -0xec48df0d028481bc516f4703c0b2d817600996a87883de37cc1c3bc97782b0b3 -0x683095de9f45b9723dc7bdd83b16c682738c5955ad73baa23146bb68143afa37 -0x3e9356a3adbe09d8698344fb862eadad2a8344036a1cef622c9a8496db7203f2 -0xb099284afadcce83618755c263ef22b016963fa769c4de40ace98a060282ed13 -0x6478384a18efef6ef7b5496ec329c89262ecbe86ef0503b01ebb27fb76f7605d -0x5b712e383e39e71f2d29bac1b3e8758f3ffcd5a09fe82b05696dcb2d5d1cc6a7 -0x57208c47dd97d159637ad4e1804d25ea54c2abe1128051cd8de20e73b9f070ab -0x384ec2d82a5f584b88b652ae2c4f66974d513242b28287db8f6d25b0a7adf48e -0x987db4ab1706c850cf1d510a9a2f7b8f658595a4248c1ab4e12f9eacacbfb52b -0xbb988f7656b0907d5f732f326a5491060dc2b50660561cc9a8639120413d2552 -0x3a042270b1f72ec4836ba067d7d37a7c5001666a11550750c07b53e594e17bae -0x14497b2c0ac7b2e7253fd1562e8e92569b67b992e770222221e4c1893b772696 -0x69a32cbab71e8a9200fe7d3dcd93bb40d89e1c89ac152760c26bfdc1ca0e8893 -0x46b5fbac134267b71558d8d774cc15511c9c77670a93acc3675b030c1d09267f -0xf06fb395ff76f8eb4c8def9e3d88c09ff28194ffd4dde116308d8235c9c07442 -0xefd6793e01d36962978e4b1616b51fbe4f13baa38519bd008611e34a4ccfc84a -0x0dbfc0b8c8b213c83f7f2a41114ddd68420ab22362a07528b60bd81dfb3994ef -0x30e484e7cad8196c955314d299c4ca94af260cdf58371c9c14f2620ea004382a -0xa277b825c5fc5d788980600f574fe73a39e47388c7ef2dededb8a96df3abeaa2 -0x0b3274637529d95ce2fa3c65d702a6cc96aec4fd1c76f33739b75d8c6e4df1ce -0x4bc2af7c7d46eb27f689d54f94642490ba966ee0e89f8e56378bc41824676ffe -0x4ba8d34146e5855e4a8baebb2d0cf5e5d89efd151b1f972c7af3a88890a73537 -0xa3f7413413e61a616abb05bfb5fb72606e5bb4867dd6f00b807adb8deb3a49d2 -0x7319cb904a0f32c6f977d325f36484d5db1ecae53cb63c05e0c5995ac0109233 -0xc32d5eff7d0ac89e6a5bcce5ee8d6227523d69cfcdb8ce636ac08054e51b3787 -0x0756f989ae5a4325fa3d116a8230081c07efe0eab44e24d4bcb39cb913fe91c2 -0x0591bd403a79f007c323d441054023487ae751847f73ec6beaaa955df8b3d497 -0x6fe98a79d61e6f99b36b2b3fa73f3dd036cddf05824ebcb4b9113d92cba4388f -0xe17fb42ad270b0db6c3c0331f29f0c008608c0f3ec41bf08194580af97713616 -0xbd2fc68bc237769fe97dd845d15913483a23e4e85b515dcaf3c01969c68760a3 -0x906620bc8355b19092ffc5551556418ba5389db48c7f7d10ab1141b34d9b53e5 -0xd7c42b777684d237781959adf874cd2111a15ba87ca67a7210f45625c9189605 -0x75418d83bbb5b4743fa80305b49a1c0b859ffd3c29d71a6841b2a83aa78bc44d -0x07881c9b8df90648825fdc9f835fc343f7d23e244a8136e84c173853c52282eb -0x2e74159957198424ec5bc8b0747c65b274d2a1ae83d6a09e1efdbf622ff70dce -0xf704bdd3816261d34dfa581a1aadacec119c6e7c1df81cd1416d204d46675b17 -0x0ca12898f28b8d09152adbfd21d184fb876d03b80d83f625fb54a77430cf2379 -0xe0a10638dbb543a8833674319445634d28f282866170a804148b0c627050a70e -0x860ea747d7829cfb53bde93234dc49b944daf2b3670cfaa98f4df274abce679b -0xf45a3d20e9adb84aa6ac2b1747e780ab8bf441fa12676a630f7b8f225a23cf87 -0x502b88ae83f7305481a64e33f0d1ce2206892081befe4c9ad696698b9360c262 -0xe829f9fad05846526736d0ecb0fff8587522d265f6ea25f717556331d2fe7c8a -0x4a54a7c78396064702a8afc0e8a6cdbf99a2c1c949d40a9c02e390e776c84516 -0xa5a4656d7d5034425acf071ff1aa2aee31f07dd8a49a9c10f880837574ca1bc0 -0x2f694382df7a3f4c2f239907fe8542bd015ff197d0d4ce2bcd28856d281a08da -0x7f922ba664dd4b3b96f75d2a3fad0d50232fce9ce4e183c8949d2aedde4b626f -0x1b8d7a957d390061738bc1c466b8a8f8e464e7480a04ffa47ae2f9c0a06e682c -0x8d7f994a830450bd8a64456ce3ce2afacd05692fdd6455c4a22b5515be4dfdce -0x75fd6bd6def9739a880e076ee4aedfbac165ae7eab913bab03b75752218a69c7 -0xe5d4b6196de1e7751e8a2dc0b17944bb9d417c84851f4ee4f7ee9a126761f425 -0xfabd4a36ac51fba2c6d5687395f286dff3352eefe7c3c278b5c1abb66890183d -0xfcfc2a3b567bec76c4bef936a3e780a162dc862019ef05c6bffa168ec3826661 -0xbb06e0db048c7a9c106d3f7924ad83c82083137831141afe528d8850a5aea9eb -0x686ead10090c15219f2613c1ddb04c01932e69171d9ed4172ba80e44e7739a2a -0xc52a3db7fe826799326759be5f0b0f8e3063bf3fe6c5a1f3129a6a208d631a0f -0x00e5168114c90b0bab2450cb0ddbb80b40f569046106d01d231cf4a62cd58e1e -0x7731b6274227bcc83c144287859187ef44dbaa51dc53158b60887aa026899f4c -0x8a2b14ceadd0c8d53fdbb10f062b5f75b57717c89dcf17c54c2436edf2e5474d -0xbf6d6cac13cd3891bf350cdeb6252b7e86b5f155f63d3501451bf2500c9ed3fa -0xc188f66efa378083ade9146e4538d41253c6b3b522b94fa0ba53b09c22b0037c -0xae941f5865a41d59207ac2ad4f54323904a28c86ae8480970f9b5e878a578bd8 -0x5ab93ff5602422ef647a0974f7318d255ee82fa44ce422df5f47b8ba5afc781d -0xf36f6b24316cb55f840d6fd857385a19ee2d4161b01f5f9dd9439bbbc38a4fe0 -0x1e8f04a753eee93b02e94d40d8cc01f8491af5dd41321164df6ebb76a84a4bc4 -0x24305c5bddcbed932df96cb19fe0bfe704015605f503f6e093fb2a1f935f1165 -0xd82c738b138118deea88807046283e90fbdde1c8df91f1d84de5009a2e2a684c -0xbb0ba7c444d2fcc82aa5e64152d4e303399a81861d3889ef6fb0dd2c7cf4058f -0x97e92c8dde6bfc09e4e5e1e28c466f65c551c16fe997aa0e03ab88efe2f3abca -0x9f751cb9f82aaddeb425354c3e04cd1dff3d445f3e8e4d948adb56c8ede205bd -0x861a50666b52341e9776950a27da407a96213cb82fde6118dce55c35825e6d1a -0xb3eaf8592d818843fb43f5e88615ecb1dd6ef55f197fcb70b79cb35223293c1a -0x23f291ddf69691f82fde6a274d68de37f3d0770dcb9bfc271ab59b3d9e92c7f6 -0x7019070287955f992a28ab5678ea12976a79f715ef5d6770103011d1c6ddefe0 -0xb0ba7eff0179eb2d748f7b0bba00c39e3fad9342d46942fe3ae2b4ff03de10d3 -0x9a55ce9da30d5570e21a7e2bff70239c6badd5a21c49b46ef65202010e52a170 -0x9b1fffd8abebae03eb0b7fb9b873c34e86e8ac267b5b045577ce69c7a56e644a -0x0dece9f0b0e4f277899023d1e126243ac2091743444f75c2e466c56d41f62fda -0x302384cbb06a44bedc562ea300cccd808b49595fbdf8dcaed2993c8756abc17f -0x70bbf48fbad77d9fc038e2ec3d3c5aff1120308370340d861bbcb86519d931fe -0x20fc3e6eb19dec504c455a10051576e9882ad0d9bdcd3a571c59784b22027de5 -0x3f85ec14972e735950547cd93f4cf383de3658d1ddf597607f8aba8990d7752a -0x574d6186a66a6f6877d3a3377365adfd39cda0dd8f2d21abf6f7c1d7dcfe45db -0x9f29372ba92bea577cdeed60dec5339228fa8567601aabfbf952995b2e88eab3 -0x6b1c22a550cdc7a38d1aea1a8b8472784bd61279d0a3b1c95da2103b7ba49a9e -0x65a275cf408715c63061b41f50788c6a345d7832e9dd0947e63228bebe74e8f7 -0x2596cbe854cb9936b7017808d6d9a15a241e23a987dc9c667070308e3b2560ed -0x1da87562445ecb6472afbe1d1b498e5ee149a798c17f300cf2efdddd2efd7ac0 -0x84e7037fc5658e9e17ff7b1050e08dd1fd376ce3a1e268110e7eb8bbea0c5238 -0xafe81e5694a11002d8b1ef9aedae56bb50e011b01c92260b38a0e37ca6d8cae4 -0x98cf0dbddc708391494a446b349dce9eb87829088b4c1fbdd56b44593bd9161b -0x43b0ffd24b28f278c92178f39f99c753f97c3c785c2a3fbdf5a4706dc086f856 -0x9ec0961f44a04c64608a9629e0635ce8edc386be8297ccfc8ad8eb61311a7f11 -0xa36013b39dc0436a70f1b1fe9e3160455906077aec4869586723a815443270c4 -0x0509469602336714944635d9e06b819baadf8e63a98d3efd489f8e8e73ee17e1 -0xd8908ff4b6096b3153a63363a82908fc2d934c770f397dc2a35b0970665e4533 -0x6f5ab0c83083e76f3bbb44e1243f7315817052624b606ca71bfae4e6955ca867 -0x4bbdf49a984a69c7df434dc2232f4eef73e638dfcb8bc3dd83c7a03e32da4aa9 -0xd166e06f094d88cfa6a2fba7ac8f6d919b7fa3d48966a48116d70ae6fdb104f1 -0x271404e0b2a163de73379488663caa8c7842187e0604caefa337a8b6faaacc00 -0x0fb07cd8ea893c31918504a5f7b8d27391e2e2fb823c89038190433cc57fb868 -0x1528bf63cbcbfa2c3f3b5acabe7a69304302e4cd8ed5979198f7f5f4e147e68f -0xd0ac478cfd48bfa4bd9e331f78f998aa0af570464289ecc6a028a3b461727f8b -0x635e6d9a904a517c21c46b5924857660fe68cc4c6c7b86ee79fd2397fbde6fb2 -0x1f55d9d6ac1c9a5e2835bed6a21b9ebae9e05a256868166da487c8d934daf07e -0x9397768bcd63ba8f8ae9d15e6146e61581e0e55fdae012e357ae8a2059fe7ea6 -0x7f606005a40fbb6deb445f79164308d65c4d119dc8a1292c515476fde8967011 -0x7c9dbf00d9487176c7c38de2012f2d7d845f3ecc03daccd142b0a66d3192bfba -0x0fc775b64f80dd383a0d914f3885539450c9674680bd782aac353ff03f856134 -0xc81f7aebb7e963323a57beb374bd4a648e46aff224d754b03ac68863a8c92544 -0x247cd91d6de0586a2f7958bb6a5d6c6bb878e92d9931f554d12bf3ad6615e7bb -0x40b6dab56fdee0d6d6eed5c533ccb170b6b05d1f6845f87ed3592c42d50a8777 -0xe14225d4448276dce85377b070c556cd12a5bf9edc29a9f4a3e68b1943d915ae -0xc2efb9e5493100620d65322e49b332ba5b88f342b6a94cee4b4aaeedd64d1a8c -0x44a2b7f44570a7d250a4edcf9a97ae3b7f3051493f4d50b35859e99e19449071 -0xdbadc25ca85f3594fa79e8d01bb5a9a6dd31a25920603570f615ab03330cbb90 -0xadc04d2b298a3ecede1ef3abdc0aba276acf635255c337be2074a3ca181f9584 -0xb65e68560aa5aa7c785230f9dd09003afb5ac5fa59bd124334c39debfb74a003 -0x3c9a6285c033aef3c99d1609e09cd058ab97a209c255347b097cf88a4bce104e -0xeeb1250060beb657570a42a9497211eb61f019d888bf41b93d266500e6b59e7e -0x7fe6092d9c094b68d7c1e81b70232638d3c1e3058e5dcf891c3fc38351c4f8bb -0xf74c62161b2970e8343299281e2f5ad9c01979cc88c7b98de5e86a40380e23cb -0x00be57f48202a74b80826c154596b268e99621e91ae23876e4539e026bd7a4a1 -0xdd5b3eeb528b5177e0bd524655173f62a869c40aae2ff639dcff8c3abb2b015c -0x8a0e26dbb5b2e7e790077d6093a38a73185a34779bed9b87b52f6f8216cade15 -0x872812fc07e64f51b4357d01033803dfa64a273b41fab963263f20bbb4d79202 -0xf5bba98b518e4181ed2aae106ce8d97b2e78a6ec03edbc2fed652342adde70fb -0x26c08ff419485de9307fce26c5c5dd82856dbf7aee18ec9de77fef24b64112d0 -0xe12546e950088cfc35baa17c3ae8987311374808cb062c3ef49e9c841f14b2a1 -0xe336c2ec88adfc5df8c9552c1cec426050eabb7c8e3809ea866d117a23a3374c -0xd1ee5e6a27f72dd072466d1b52d4685d47e1f41c9bcb58e4d19eb87defb106eb -0x7f48ef460d5d9a21d53190522f48fe0f9f2fd9da5c8b40116835c4d84797e08e -0x4c1dc7c8ca94241a173fdc31a9febcdd70499e0cb7ad6ad43d593b72b71e026a -0xaabce3879ef1705de6f4edc9534cf1155cef00599708f656b31fea42528e4d96 -0x8449eca4c9e2fcaeaae8d17a95ce0daaf34145594f8add281e82e851c9025d3f -0x34a6e0dd51de58e1811a8be7e87f339d0b6330f489cf0265cea3057fa7a4c351 -0x5c692befd27ed7a89bf98e602da56c93bb5e3480408c93363d6e8a51d295c2ae -0x95c385eb660d93c21a54c48bc7b218ac26a23f49e3b4e9b7382e1ec8453a6070 -0xafa58a3cd106809b90a4e19e84e04f32b0a66297824bbbe87a324f5dd768434a -0x74365f7af3d353ab2856b458300b7b6bcd11c7c402af817f9d10535d49db03f5 -0xf8a4b9f8b7cdbb6aacd8818af4a09671a832bd320185830c0573b5f39f0de206 -0x1eb14e9c41fae7f48d87aeac28340f781a0aad7f4341dcbf32707fc310cb895b -0x4e6bc17cae411ec6b459a2456f25fe1ead5ef3985a0e1cf26f945106768fffc6 -0x3f9da378e77954631f745c78c1fe843309e5c8821025739a0c2808b1d7b049b4 -0x67a18304b0f08a8a52d14fde3ac42583ca6ed1d1b80236a4b11c0ab5f724b5c6 -0xc63d823c850ce030fa9c7879ae7ae2760aa2ac1daa7265e1af8d6dfbf91fc2fa -0x332e8a3184c8990f2b3ae7ae478b587f918365d78e729bc26c06ec390b757ad2 -0xdb199d20a57563cd138fea6ecd7b90f3eee4f2eb6a374e2d84011e986673351f -0x94b93b484c04e12133071b362cde9d92ee0718449d80ae707c08b2aa98093e4e -0xeef1a8759b8b07df78f0ee5db6ebc040dac01eabbf5c30812c1b82e97c048db0 -0x802b6872b9fd495ea5a68e90f771fb3fda1dbc823180816e27ec590d66cecfc6 -0xc9d65092171af70001f3de33217e7edf7c856675d6d336f0c9d4e8ee82a92760 -0x7f087357677c94ce62f673341f6651a2bbf51be2b7a218db21ec74cd6965305b -0xbaf21daa8c36b0fcc410844ff18a48a377234c7d8787bb47e21f7e6fd22ecfbc -0xdff3408e4ef23772b7d5cbb85cf2df8fdc94d5b3bfca09aec798aa2536247f1c -0x3ee88a26335255680316eb6853528e5d6c716f9eabeb78bebd9a0f3176a14ed7 -0x417c341f5e9d1a91364ad4e38fa079eb1447f189d780b8795e3b2bcd300cc8c6 -0xfa8efcc5d27db9ecd0f272af0cafb3cfd2347496a09076a0a0889e93d90b78c7 -0x3c377e19424bee36fa0e3958f31c10ecebae27d1b570eaa0121cdd6eadc51299 -0xba6e9a5e8a7c91b4d48b1fdc3da1318b9d92f85495d7fdce7b15d57209b88e5a -0x0aea45f8ecaf5ac286ea828277aaeefcad1eded359d52fd657e81ac4857b70cc -0x64b3b8b8d6c67fa7fd9b22724f2bb2a605762cc4353268fd2051d8a3243e4a5e -0xc8667ab4ac59b51f31dc0a540997453077f85d76310f212e686a5519af8dc024 -0x2faa3e146a173e4f61c214e2b9408da9d4a3cc80fdeb5016f5c68fc222c4604e -0xd36fb0f8aa5b4fb3b6b1fef328803af822ea96e2cb28880566df1556edc2d4fb -0x1a9beaec8857094878d2acca087d09f6f28543a095909978cba8280fcba7232d -0x7c263d03b349148f52e3e30b91bf3403558d41854d87b2d47145d1dac7ad15c8 -0x76c1cbb6c3513e6b833463f9b00e457dff0cc9a48bc707695ff7ac2c1e575f24 -0xdd221adaef40e1e569529823b824705fd2444e11eb7c5f56ca1c6926022a3b81 -0xd6b7e12fbb49b1cc2b60fc3790dc94d5c849a148419d6bd31eb20747810fdacf -0xdc21e73cffab79a3aae738f02377e686c2b027322d85f12325147bacfbe99a38 -0xf3fcbd1d583f3f4b60006a7d916a63d6e9356b14ea3ae93acdcdd41ff5997418 -0xebd2d701bead4133ecd6c53b1a39e472e5f7dfdf0fd1210c37ea3bb36949350e -0x71435eb6867587a18ea83a7f49505670d25421ea953fc21444fae3077bc1c3c8 -0x8cbf1d6e45e6b69e6d0ea8f76309b0a53dcf494a4cb96c8067e56801392562cd -0x47630d493d096bc95b611d93844eb1b70791bc63aa24a05e0fd356d29fa564e2 -0x31c3b6b4b2b6662e63fd9ecd0e58201eba66ef3fef104de532e3413e56aff83b -0x73473e781a5acbb4d2a78bbd376c4d4aba1b17ef8871476af51837b0e5c0bfc9 -0x180d8ca20a05310c9309b5540d28d0e0abfe4fa898456150d1cb3d9fa8c30ece -0x606673b40dd0a0675dfd3ad3de1bbd72eff235fde73146b54bf3dd85959836a0 -0x34de4a911b5f5b3e3561248d550a168cfa07387b70a226ab254d2c0519a2181a -0x00a24acfe6087b61c6642262f80fd1caee857e9f7cb5dc5144f4b72d6f281fd2 -0x7ffbf77f08130cd2b62fc78ff3977e001e9a0356bac5d93772c61e1ba285e6c9 -0x60a40f75986145f1a1acba3cdd3b567db547d9eea240b8e5d7a4e178fd313c04 -0x9a7f2e0b6f744fe9becb9ad82d74ecedc52af63c6f339f5e435ade09e7e6e8ca -0x916231070cdf1378c296ed2db6e96da483058eeed063a157d4bd501a6306b4fc -0x4be7d469ee65e049e3dc48e72e8ea5a888517d133e1ffb9829b648072abe53b5 -0x781f4e58afdd64678576ef5a56efc90e8f446a4eab0cbdde678d000801f02082 -0x08b5b079a43904ba593d28cb024d2e965ca0b01599d3711935833effa5f93283 -0xb546008d90c712a9d0a6273624c08cdfd3b3565ab974d0ee3b51849985c69805 -0x911b8d1b59483105910e090cad0b929cebafbe8c46c6f2eb4926d8c72e3c73d5 -0x6d71faec158808d9e1f4c1ee7ff0b675d7d54b54d8c8c98659a011363f81e929 -0x8e797de9aa64934573371cf9733e9a332f7da528f92fae80f732b155fcac238b -0x19c6b3a513bfa772c5252618fd7f8fba0c50f8532559acee8c5dfd6bc8d84283 -0x461850979bdd5e4ebb672ff20c223a92c96a39a831db60671a437b88ad94da03 -0x837ffb5452609221856dc5a604341c48d7a8b98492137839317ce02a5d5b9527 -0xdd060cf14cd6f15eee8604efe974acd8a71507c9d1fe944a8fc76edc7d5c7572 -0xf74c966a42177101c9f3fec017b591a8e931c452cba53e0e02b47bfedfb99a1a -0x748859d83f604a61bf9d297e4ea1f46f48c1117256ff7f504b8407b753bc3606 -0xae75bc1069fa91a365a83f0b88d48633d5e1873c7703e0905c26dcfdbd84e9f1 -0xa7a5c48968b6dd5ea1f9c31e3c29888fbaf951bd3d1435e4cba521c5315bcd53 -0x385c458aed843210c6d101e2523d4bd86ec5b45a3a46b147fb87ea5fa15721a1 -0xc89576b5a95d6d6b0f51dc51e5e5eef65f5a7f42ac53345e5e5bf337141f816e -0x807b1c57d89462cb5106fe03d69782264a6b5189a3a05e9a33930985e6b1f776 -0x1910a9bd1f616aa4042d46baf781af55b69a92f03e23d7dc1f41c41f0c8ed8a3 -0xcd9cc241f0b0dcbf230945abf51cfecefa65592ac5f725ce44b367c33b93a054 -0xc088cdadc0e2dc5da0680e8acb7d742d4843fbb78e14814c6629ad2bf36e17fc -0x310eb36a0898dc45adb84a61d8b4801101fb53c7427ea11ee5ed8be06e1bdec7 -0xe0024f7765d3afa7bfc4d1ad4904b29c22faba6e6562ae699da8ff34ee7aeab9 -0xbcd27ad5a9d57e0c4c59bdc7f327a7a0dbbd213d4a43eb4d987ddb7e886839ce -0x9957e0c1aaa1d453b70aa99922b0c274d1f3a8029e8e372543412d1ddef077c4 -0x38acc3892bbb8a0bf1371c12d136ba7a63113aa8074dbf5c69824fc49c2ee52d -0xe9ddc4bdee289157c699abd9af8e38ef5cc859da86f158d840f10c285b1aafb6 -0x792fdaf9a5ca1eea2d09a70b0cfe1660c73aeb56f20d9c7b89b6b332b6a77025 -0x27e0633234157fb4b0d77ab94e1e7fa4fdfd6e94609e91d25d0d514693e0368a -0x81734f2e7e0575fc6a7de2c57e1570091d925bb5311eab996a675a349236e112 -0xc91497d41d415883c876e701abc895f1861ecf34e8bb0f231711b95138e85484 -0x924d61ea6d57853c15fa79ea685b20fc87d0f29f67251684793cb0d3388eaa15 -0x0170837d1ea32b3719362f2815e1194fc7aa7c6f2818ef32c440ae0fa41ab854 -0x09259f966d6eda7b6888eef078577398a48f189f2474b04a1ad68e69201b6449 -0x7a692d04b9f87e0debfef6cbbc3e949c19d2d0ec8ba9fb5d093d8470a46fc0f6 -0xa4621fc80cc8c7b01561d6f716e2250c5c68371bb9ef454c00e2698cfc712398 -0xdbbb161780ebca8a982c8c6b6b53bd0ff296c6a1ade8f0b7aa656f1765be0775 -0xb627dbd7b185bc4c05dce3e71e66e5c162e43f24d8fd27c722508c633bb10967 -0xe3b526eff3438f689119faf453e0dea9087ce26d6c0e6f0ef722eb4e59803a03 -0x67c74f8835123e3f4c2821c2939c91d999afc68e335d73405555035a972d5381 -0x90065e0149be0831402b087afad3b7c8d107c2a3731db5d306656a7b596861d2 -0x865a145601049da170bc7cd24cd6410a2989a0bbc16cf6f1ed1aa410cf75cce6 -0x00baf827021351f7cbf3a56cf9e8c8696b3e0212380d4bf409e61ac808513937 -0x1db4c7bc37f52dab029b75ff6745dd550bd3eb7b8740931705183be1be794795 -0xddfad54f76a220473a5ae310c78ac24efb65812683e8165650cbe1390dcabe2f -0xa93ab84881946951f70405ac59961fbf461e39595d8ddcc952e5f41d21bbfada -0x71fb6711d9edd400799e7aac1b296c8a0bf1685d942e3ee44dd59de0e1c4da38 -0xd971e3deca1ac782d7f60978d151d7291938a90af8bde34f256089b7c9b0151d -0xcb40c2b0e2d9085cfa7cfea37f889c7c1a54eaee7c7fd5978cd222deeeb39ec9 -0xe2e2db981f26511ecac95e7f29923c199312d529a6445e8def6df8f8dc61ea29 -0xad94668c77719509d175b0c8dfac724374b7a02cf44d304136044dc3be1aea69 -0x9094497db65be90f06cbb99ed6a4a174a1807d333c000c147020b6ec97fed314 -0x1a0a763ea4444ad1688e8a6516b570f58a6c54e106155d2e404579df60938493 -0xfe738fe2fab571311c2f032a09477ef2c2f6dfb456a5d903087cac5a25cf6155 -0xc4e455fc8407cac82a24f3116d0c8db0df883188315d713b06c23778c3039f44 -0x86afa1ac42c219b6c8e0029c7a8e5b7121fca634275995520d18dfc0a4834ed2 -0x42bde40294e9c97feb207d63c56fd4b7a6db237ae969fa39a6ece962efde01d8 -0xd2bd4e9b8e843ed8ca1370957ad52c6b86620c2e4fb42e8f74b9686cd1015436 -0x4c897fff009373b98ec077cef953ab5b3132277b1ba577a8496d7904833a1333 -0x8e13724589c6b85cc1d57ba6e35c062779e2a4bbe5cf2b255ccd8a934eaa56ee -0xca637e057f27c30291d0626162cb2b1a9b0c16713c6345d82dccc33550ab514f -0x1d8edffeca7f17ac25f3e67875ff27741b3b1679375f40e59996167be893d9dd -0xbee20a00cf7247d3fdd3a4e70be77aa774eb67093eac7148989f3336e703705f -0xe10c5a3d6c6e8d228d4ef3934cf903af42f182d7012ed9b7997f23f1dc237692 -0x4b1cec0ccea9a07b60e77083fa1c6cc63383a3fb7537b52aee268b1d9f13561a -0xa452d8c4bef205a7be0b3d7ab3febbcc5bd0c76781a45ae2f96157c6cf2b598b -0xfa58bd65ca3d6bb181c2f1fd9e1ec8b9167270699bb61a3f17ede90cf4656ff2 -0x45b5eb6fa860f8bba4a52abd4f891c427a82256904a5bb1f8fdded280a82e1d5 -0x6c9c982078b6b7eb8102baf3959b8595acc86d1b99efe4c547584e4385c283b1 -0x1dcc2a5f4b341aa12c490f88eefd82e7168c9589f93e602478966aea7fb8b843 -0x058f684950b962a428f77d48a51c0417e233b69494d1ceccaa1369b44a4e6411 -0xb8eff3df2fae494d3ff6253cba7979dc66344056415cf220669792c59f2b8057 -0xa4d5543047d6f91c8e0f4bd77a88be85f7984c0193b8ae9b372aad533aad9466 -0xd54a3fd1360db6bc78d99851fbd83041a496f63361f0edaeed2d7c5fcddc275e -0x5fc30371f292caf93a3f2efe52aa0d11ae8c579af62d60803e055ba088fabefc -0x5150fab89945ed4f187527cf6dc568bac5273401d3fc7cb8a6c6b5eaa6309c1b -0x1990f0e84dd5aa1bf886d14c1242c27363b354b9d03af68880ac702b6980bdda -0xc9750136cbf4b77ae8f8bc35378d764a1bf892803d0c27009e21c8c768bd1597 -0x72f223429df83e9a511dccad2994ed4be8b9b2ce0e342b9388630bf8c80e651a -0x41c25c1ce35f6d98c57aa9a16f51d659c72f4f24976bb2a2cc8af1de466f3115 -0xd730713281ea3da2c9ae1e5d35189095be299dc9abb0fe3e49b45fcda33cff87 -0xab423918b0ab0cf0851d6543a4e7596f3eea54ea559c95ec8ba0b8c7dcca3488 -0xaf2c188d7661d83213b1624646a2d51408ce3446b83995b55390d8594ee4903b -0x518c665c7b02bafe1bfa3b795de7be6e6971fa80d24d730bc5958afc2264c306 -0x740c6f2e0066ef628771a5a62b561ba0b95c0f9cf6cae8a37ee476d164422979 -0x277211f505b34180c20b5650e825305a93c7bd352132e15bf28555d46f402a78 -0xb5a24a94cfd0494efb1751d4b0d92b53e8858fc23d175d3372f27aafe2098c01 -0x65ed8a6c1411cd6c86068afca8e997521d52c355409b4880f92ae3178ec75d63 -0x4df0b21ba5cb44c8df75060d166932dbb066238b04bfb57037cc3c5dd70a0807 -0x6d1817bc22ec0ceb29b4aa423f938afe3dd6df43e1deca254d731f8c61b14fcc -0xeac962901a1f15943cae15c113bbbdc31932ddfb90659a192bd9e8861bd06917 -0xb1081269d57a2637d2a1a82356a1e1a8309555baa7f64ad5a35bd84034e42bac -0x6e929559469c22530ec7dfbdaba85b6704c71871a500d7d90c1f938bd95061e1 -0x8b8b97f28fec2538a8eb0eb0154a3acb4ec582d0eaeb95fa0f8c4b3536bb8a5b -0xdab700ee61772c01c871840a6469041d7474590cc518a4fb218c846712e7cf04 -0xc8904f689f27d491b51ebb8a5ac072a58aabec261c9d8584c2a4fd421af0039b -0xbfa4e518a01c141b4662891f0dab9fdbfa0735615689291ed5f8536a2953b231 -0xc83e03b0af2192579efa4ba72cda89fedabfb782e7754400e1c4a899497e643a -0x6ddcc6f9c01f747ec6a7ca423ebff6771079203c41d285b04385accca862b492 -0xc0cee05c1c42a7739558c99d56e88d537596e63c145d7a36942894d2ce1a5710 -0x44fb872ed0f4d0f8e104d038c80f8a9fbc1ab6f6d1d375e713b6ec3ee5324ff1 -0x0d1b7d1de0596618989d437928a416c7fa1786e171e6428f748be9fee88933ec -0xc1417ac697e28036b45219ebe2fb9ef6547a17f98d165e4db09bfff911395db1 -0x29fc688018976207022e46f3484125b67cce7e2171a1adcfc88b37889d3be0eb -0x78f079f9ba7eb4f15457678aeb3147e3b43320e12a8f03a16e4b5ea7774ec4d2 -0x498fdf5307f1ba25ccd01a17e922c31dbb25bab85d74df0f22988d717261757f -0x6a6e1fcc299602e0af309991eabdab76a0f84a922096068f03354781726c155f -0x991021cf05e1c7ef2a61cbd03edbb8fe8aebcd5b186ac9c4936cf310780d6067 -0x339e23baded0808d2d2ef370d8be4cc3fe2466758a7bae15212a0571dfe5bb97 -0x37cf3d410455d4f2d761b64e51a24c4d9c0b1bd9ca40719d6bb9ba6a64b31e00 -0x8966cb16f57127510d4134f1cc0474074120e19c7d21dbe3b3b6f755071be416 -0x937a2d76fbe9625c1eeac031ae084352be2667a1217b08e5ec73fffb7a46f7f2 -0xeca3a5528bf368b5a8ff4f69891851e76d61d009593871450653aaf82484d5ba -0x20ca0a131f1d515dc1a044de8cc751b2cb7e02df1210cad3a3a9106d24480260 -0x1bb5f6a22195615a222ea416125781887456ed81f142d758ce103cc9155d7a56 -0xc224b9c623c98ac0f579b356b0c46ae20443b82a70d77872dbfca5e480c7ce94 -0x7e184ac346e134f8acadc733f999da8994b6e61297dec51ee7bad20e5de0da8b -0xaadb087f61350159a0efce49fa66cd6cf43da8739314fd7fea3845c406bb44a2 -0x0de30f7f68a32f598867baeaa3f0cc4c213a2b909c49d6f3bd25fe9a8717a8e9 -0xbc8254f85ef8d157f5fb6b839aafe7ac31aae225c35c3d5b996b39ac6b6672b2 -0x238ba01fe6dcb1c690fa9b8d1b80be0f8a7a787f5d322a606c01043693a37462 -0xe34a75fdb484e5dae10bef09d8ff4795dabc19b9495ee44f6dd77cac9f8eda94 -0xe2e12ad2f0896b721e08fc95766e0f27c4750527dda8624f3baf18979fed842a -0x99c635b783cb258fc1963ad2f91b557d2467465e32598b21c1852d8319350493 -0xb233a801c121312dd97adb942446cdcee7f833ee17e62ad031bc0fc54777e40f -0x7946eab893fc4f511c80763d435fdf94a6bd82e5fe19f36fd65feb6bc30ef0d8 -0x09fd2e2cb1c272dd57a3b46ba725440eb1b188dda6fd0de654643b29b878f1b9 -0x91714ae348904f225ea551604e31899689587a3f79950cf513c6eee3dc755f8f -0xfc15c9b70a4044aac0158ab5481af4623dbc14637a9664b027fa0245f73bda67 -0xa80107d88f47b04f2e7ba43f02f746239e234f1f633c742622a22abf3b4dde10 -0x58dc8a361daff18b92ae2abfbb57e00ab56bd910a04a35d9541055e7405f60c0 -0xf7e45ea1ea1a0fec07e323fdcaf3d7cad2ee217602210bdbc5facf64ba9e95dc -0xe432b4de3b2e820254319137225bb03e8ad12272834cb933bbda30d277434455 -0x5ac8d3a63879c8839f876161d6e2768842f421af05df2fdcaa00fcd21964494d -0xe777cc4d5dac2b9d897eff6e73464e9006cd4a2672ef06eaec12035a3858f6e6 -0x45c954f034e7809b996c030a8f55222d252f17c8aaa5d97c68da3b8704cf92bd -0x92e96ddca440f747bd70395b520bea1de7c9b9eeeba7e38671b6de28516956e0 -0x65a31aaba7d121462dfa0ec1873b3595f78f47246898154980da588a17f0439e -0x1c75ebf683d28ba3960dca71feec75ea02e28cb1b25f7a833eca493d5793c26f -0x97c5cefb1920c22d5e453f64e58d1f8fca52f41d63fc74c60bd8876b97ba2be6 -0xa4a01fbed8ccbf62615ddcfdac2bf52bee5080326345a535f1315cc236c202d5 -0x5c6a1c4e9f48cbeb20940e8bd0d41d8bdc0ca539ee1c2aaa13521d35406ed5cf -0xf12e63e932a88edc26f6fb23b6aba4066a94efe1a724e9a24ff2de352e6408b3 -0x841315b4c05fe82cb8381173b36a4dbbe4d9394528aa8149c67325caf0d0f27d -0xd92b3dda4b1b577dcc557753810eaff96389eb6b332dcb95e39130f5c612f4df -0xe017fd56a89d2bc32dcb9ecde67d9b23d8502fb817dbc6d43392e86896606e22 -0x1b21680e54a75ad03dac68716bd9588b244ccc7260f9703af0a49b1a85f58240 -0x30f868e731b02f28b0e8a682be6b415716db25e77d3f0b7a62dcb729c2e941e8 -0xaef77d9ec6c63a3dfe3c204b7db33180318007cbd8ce3a98f5c72647709b0b61 -0x0f28c3010a96ca7471872666f44a9c41b9aeb42ebf6161564e6032d9b1d77aca -0x7e64fc596c62389aaef596db4bc6dcb20a6fca207ed247e2179e6eb29a5cc219 -0xcb5951a5b6fcf632f137d00fc21d3186b6ca9dd6f31da3b9e467ccfe21af49e8 -0xb460fa4c618c79415c100f5c2cbfb52af3e545a997ac16dad10ed22b1dc5b35c -0x91822087c6d9a423d9cf2501b46e0b256fd7ca9f76515aeb238dca77b516bdf4 -0xd6b9526e6d01e2cfc7f21dae5ff0a06ef53446c115991434abfa62b6b035ae65 -0x2a3ab4b6a84ccb53fb284602978b8908e7c7cb7876cd054a3dd906e5072ed0a2 -0x1bb9735b9b8851b5787fc9244e39dabc43481493fa5ca912b2e2b4f698228510 -0x997076ff10a86a57045e517756283115f844c8a523b085ed409268da67a3e034 -0xcac3662766ef829e76752602b7cf12f6ef3606b23622abad572d3eb9c6ccf0fe -0xd3f69abb94461ecfd1d8664b7373310246cd754817107f7671f7a877ec0a084b -0xd2c25f7e7d2f28397114dfc6bbcd48d58268f85daf8c84701b060437cd41ce06 -0x333266588ce23b64adc8b770246d1c1b5075ab005e639699746222e509060f07 -0x70d6685d0716441c62b2be2cdbc999fe6aaae6faddfa53981d38de05a536f2ba -0x31cbd24217c455d16b37e65ef3cd0f6948f9192c447d225f8459ba6927b23867 -0xbad65440f334362510606f1731435a815323b69449e8c9ef97bc058cae6ec28e -0xa0615c4e17d4c6faff2538f6ace550cb31dfa61f48d7452ab773fe1692631e77 -0x83f8da99cce6a747858e1b2b14bdc63e3c2a38a5ed12fcb56d4dd49f3feaed57 -0x4a208628c6975b49ed4fcb26a48891b5efc182e5c48e14caf3d5dc620527a52d -0x73b7a9e32336a3c33834948a92d6d76c2f65b08529a3f9d472768155a29c1a98 -0x03d3fafd8ab6100dc53fb1dd441741b32f99a238f1c5fc9288ea23c70e3843e8 -0xe65df0be6c1ffce9cf1b1888f4f86f94223d4271bef322bfb712b59567cbc741 -0x3792b33c0fe52469d3bfb99a5da4c39a42013f9f3dbf15aa34e64252094f79dd -0x558f46b0c257e18e7dfa9d9f3979ca4478c2665312d9bc9f573e572df51e4702 -0x7cf9ed0b3edaecf0e935f92247c49f3c67e90c1af9082b8143b5a70dde7e6a0a -0x768d7f7941e1c4707cd289af2b36faff8e559283d89343c535c1142d929251ed -0x4bb1db81bc69255068d99234988fbc219396207fe124cf25666ed3abb1a90a31 -0xf4b2ba169a17158299998e969a9999cea610533502ccb55c553ad8d970e4a0f9 -0x1cb5640f97d1f281ef94bd43d9407efdf961a09c3cf84fd35b38ae41d285719d -0xfbb9578f88556129623b87990633e6713ce6c04b28a08c1ab48e977fd6c7833d -0x3fad8352290e36cf7defa6b64b4d9744b0bec29bb97962c0b1c118b36d3ccdf0 -0xcc843809143fe756b5af45895380e90de675ad41374f8b2ddff7a9a682cc300d -0x83dc5e62a9e06fde3a292eafd49913367383d7e213d89e55d1f5d6f8f1743cdd -0xb982af8e370af233c357a499a47087b4caab0e6d6770ac84ed77e50395a22667 -0x103cda298dede81057f21a3dabbfa94cc9510e2620843028f64805563f8617e2 -0x98cebf85943c75175a0b59de158ebe13872f0a40827c01983ba9502c6c79c35d -0x32fe7890a49b5524db15beaf6eaf087017b679ba0bf94ab1a954542dc0b9b40e -0x6138259b7328821848ce2a2584728670aaede94080551d8566ba26965a022d96 -0x82161007b36d30efe215292fe473b17be25cfec2ba357271d1f976dfb0338910 -0x2c8e23c9de091d59393c5c082ae9e7dd6213020c6ba2ee0f666d6bf8a4fe90d8 -0x7db0414a196fca8f81ae2de7884578a7bb30ca52d23f2450b394bc053fcf8121 -0x778dc8b2bd9261e889cef7808f78c50ed915a2e87619d9b72fcfb3a89323a33e -0x2ae7a7e49d28c38abc7175640edfbf9a218c96937b7d469e2d07d9b17f7009db -0x3321b9e0042461397ee18651122479265dc910e0c4171bcb85f81a4c910315ff -0x6115c56211ca8c17ff8d3fa8f926b19e860099e30faa58e3f60a8e1db13e08a7 -0xb72c524b042c09b69a0f7f21aae7a38fe76453b6dc0c2e70f9edcc2c8ffb6af7 -0x334fbc736366ff7885ba56dcc6d1cc74f6a2cf7c87d61e0c2d870a7934ffa7e5 -0x11c590d665447cb2deabb2894a2540d815e3e533787d49821d5dfa03d626fbc5 -0x34eca8e17b8c54c762a14d9f6b508cbffc82fa0517aaeaa92ac11aab2a09f36c -0x1ad78231c28fc8c92f62125a73d7c4653df1125e47903b0ff50ac6f46b86c494 -0x4748b714848207b489cda76526e382d79a613e5bb209e5761b8abaf726675e21 -0x56ad5ee1c2ea9239bfad7306ee23ef076c59318c9f073a32a61b56ebca2c2cb1 -0x2dc032ec1d9aeeb0a0ef92c591c590f9e5511f39572bd5d8cdbc8947672d8f07 -0x9edb10e1c77f3ab7ebaf3cd0af306354b20f6759ac6da1f15ad7a3f865af8979 -0xb6ef34d0a8572f0c1aca0849cfb37ab3f92894ce1fbfabcc586c8ad08342e5db -0x481f820160e80337693fffc65ca28dd054b390316eb7ac7ff0bbe57e02935826 -0xb4f607e5395b32257c99bb1a6743fae387227323d25fa5bddb536ba5a3adb7da -0xf436518e8bbb3fc02b0e8d9313f1613deaa5de5a4a08955b5c3986cbb66b3d50 -0x8977ab7786cdbeb2a7629a00d1fc84f39681cc6b9e3a4978bc8bb6e54f5a1a8b -0xb3b993ed89ed36d3cc7b40a4e7eccbbb4f638779213b8bc6b803a3e5c906b7a0 -0xe05f88d5734f132ee8212e239d2a0ed7e4a5a74f2bcccdc186a66c12dfb84537 -0x6b3ec0509a40aef1dee5ab3954b3d8b2c08730f68bfa3fe141ad6da7e55c9dd5 -0xa7998e381a7ad732862cdffba9fe210beebf6351a67ba617b6580824c69512cd -0xb0dc23931164fdb174adbf120bfec87b251e0462f4e5b4fc4784a02d802612f5 -0x8f78451ca1e7b8953f3f537e124111fa22ad5ef58cb30a58df988c1d8e1474ea -0xa37c4206d580060ac0f36c4574592676bc38993df08a910877570e9827138bd4 -0x874dcf02cc13ced293f84d78bcf3d0ec700a7dc3a767f63ed623334dd6af9067 -0xd3f0ddfc2b1a68e1dbad8419fc02e9136633eb194ba6bea7882303a7ae12d4d6 -0x44bf4fde6837fa67164692e1f2efc355cde2adea4c736d0f7cfbfccfd564d7d3 -0x1f22b721ee13ea9e568fdf0397babaf084950674e9d2c62b189c98979d39ea70 -0x5ddd1dd7b39341c1996e71ecfcb60ec5cbe8a0281b07716f804fa47771faf921 -0xf13781dce85151873f72533d8a2347be45f15cb377981fe779ee1a9cb98976f2 -0x403fd54ad5c491d55dfba321a5e03ff4ef73ef6a67888829ea7c51e4e8befcc0 -0x7da1b76a6790ed5e60fbe79cc2e6289279742b4a8b8827ae9bd2d9133706083f -0x18931528a7e03a6d8fcc305e06289283d179b8db7abcb1b34bb39c7c248a21d2 -0x149a7e34265903b8b729c42be2eaabda46b43f1a654901ac8cdb1ee7cc9665e9 -0x0f618c66705fcac80c0f2235701f6806afcb25d4910a114afef99c6d22004d49 -0x5e849d2509b4eaf7dc85f4657681634c359442c83467f73c83ba0a691cd7037f -0xe2bb7b4be8c207b8370791795ba9bbda76c29c0d1e494838362d8e9379c8a13e -0xd5de33dc714ce2d005ca77619c182f53e4e8fa2b259720407a4a1afa189cda40 -0xbe5538e41b99ff9a5206c5489e3eb855d4cec33b718e186fb21e2f3c59dba906 -0x6239995947b0d4f36e3cf7506d70c97e8ce6dde82a17c8abc9f1c9a34ae0181f -0xdff54935c299c6e81dee537ff04e16a83fbb04fc8e9c491d681bc453d6a82d68 -0x8fe4fad64f7ba9d053d7856fa9247e91c219ed8dc7ef041319ffd030e3dbf1f3 -0xe8b1b1f326c9b9655c8b5ca81f760d744d689bc78502e405e266860df12c41b1 -0x1dd5e58503426a72f6ae87c1ff6c0d9aa3fdf36ec05a35aadded9e6643013d6d -0x4d0d4cc4bd8b14b402804b1321e40f1f7009b3c2b882515322550ce0739ff82d -0x0c54f9b591ae728c9c4eda5a770fecd5b2f321b55c4af27673280d819358d54c -0x99456346f94a3c1f1028873a691578a493ebe44660a48714466c6f3efbb9be1a -0x895831da3a7bd5b73162c86ba4f447179d216c65a893894cc7cec7ce76c54164 -0xd005e1f11038d27e6d2814b6c9d3504e0ec2eef6d3f82ef68a0dd3b37f2e15d7 -0x9bd72e07022a75a4208c340030df205c982e5cc5f84f4cfcb9b970d69aed772e -0x7588ba429b71271a0ef7e1c1dfe583c509f67f375ba61dd7fe22f384aa99101c -0x55c24f02ae0bcac0e21d1d8d54a5e4169886a2e022a057705c98e5eb36efd47f -0x7b2521308c41bf45c2bc863971d0694b275017dc709d213ca3a44c6cc466da27 -0x3ae9f576f17047914a75c4a63542c35d74e84cd085f8ed8b48927ab441a53a7d -0xb801f865b49655a84cf159e382b943042730d2228cb2b99c51d40ce98293234b -0xf7f9aa8e0794565d78e8539a45742143796bf7104bb0d50973f7ec279b1982b8 -0xce1e76727af48d1f88ea7a3c1a13942a70816061efa473e5ec3b933ca4fe9594 -0x700cb69d79261c71c036de0856d77f43d8b72b5f24cd7c1155911ff3e5d8b477 -0xaa87e9fac8ef828fe4f83ece31911252d879dc3ce7bd361f7ce5432728a5f4d5 -0xc397a4f136306b090196dbf05f2d145537017f5b7e908c92116f2d5276a55775 -0x6b951ada40d5182affb7cf4f229da3b8e50bc2a56b663da0ef6da603e712390f -0xcb9a880706fec82e2aecd051aab223e095c0d31df447d3ca6a46e7798b3d41e1 -0x1c12aaf15173549b037eeb05107b52d779d1d554c160b39d6ee0bfa4761dba82 -0xf6f55f821432952a6640c9b90c28defef08da17846e63a4df8e1216e8f79fe1f -0xe65415c7593152962a55c017a4f1f4ac622bedb7d24832c1a206b00b94bdac01 -0x66651b393eb44d4de125f0e14510481482c621a6c1d47c7fba7a33ab41def418 -0x563e3ebe218210aafeab66af93a71e0cb9f6923c157a0dafd7cc73d13c0f7748 -0xce04336a26211ffdf03f38ac152f0d6c8f5e23beac4a168085a9f31f0a261678 -0xd85912ef2033a2d76a93b54fa6b7eb0a62af57d3036a5b02d13ed95d62218af1 -0x37ff3cb0b89fc9e9424c1464e17d61c6eee3a6da6702deb6f70452fdb5b7fe75 -0x1e812d5311f0f62ee972084f135aaf8c858a706c0ee2205e649916704c385c84 -0x5197e2ae95f370789f4b477215ff855674842490f2960492aafa249707db3c59 -0x1e119f7a84f5f34affe0c1bd186fcaaddbd3a9a6824f83db0f0bc4e08a704c63 -0x9536ef35a280b864890a47a42551af695bb4edf1cb5361f8a8d462f69a4cffe7 -0x902b627b2e8f3a453bf068f5f4e881fd7c5857a5711a3646b6b457c715eda4b9 -0x8e9cee7cc25aab8d91b1dc27e205dcf301f19f8586c28dd81f0ff6d8d4276940 -0xfa6b0ce08189e0aa6190ab33b16ccea1c6e22c5738db9be8084d496b8a7ebc17 -0xa8e2833b9a48d0dee3d92becc90f839ab03e34409314bb9d318957364bc4347e -0x2e810120ce2b65e9f7f24a8a393752d3458f3ac31527f48251eefc06892720cc -0x5407c658ea89d7c442631da8578a242b326ed4f813ac36fe4c641bce8e2791bc -0x4ca7890f70550db278dc9691c573cc8d9dd9d5066de6d7234956b97e7e32d031 -0x3ee5315bd9dbf5e67fd1e0f9fad2ecfe9ad882537ffaf16e2f72faf0378ae6a1 -0x01a0690e3b6165faa47a8abc52d02625928f34d80e84f4302ce411b472616928 -0xf0ddc1a20eb8207a07f8d93e99ca2c8252df351b06f1d3e8e9ca48f71c9f82e1 -0xca952731520dae42b68939b27824239907572364a961ce9c1e3b3541a3a90d2f -0x99c0dbfbb7acbea03d411da08722085c905ff04ac2c408514849bdf7034aaacc -0xa298d32477b1e5d04dd65ebd9b0abac9614aff7380e0ae9a5c45170350ffe1c7 -0x4719320b1bcc90f8edd1796074ed09dbba5a9b761a62d0b5a1d71b23a1a20a1c -0x6187cff9ad9b8b4a12942320e84ed7d158ea73c6099d597aa7f192dc11f68e7d -0x947f28cf4a359b52dae30a9d291a622c9fc7101a73c8e27bd5cd6667c1958f76 -0x5f03a2a9e18216f622e70f21c5e8cd0b493508456eca68292bb813eab7c0305d -0xc7155fa84fce6d020d27469c8c3c67d710ef4e2162b1f205f59289d6ec934d70 -0x9928be1600272e3ea2d1c0e3d9df69ef24c50410f0624eec876d10cb247f0676 -0x6e877cc60432f36ff69a662af275415c9d95359caff203ae5b1e01b51438050d -0x540f4c2b28a91ccead9601b79587494aa7c9f8eaf7ee2fecb0925375d3e9e24e -0xca0f03784aca17d204fa4816498ecb8a2da74a4512e572fac470cec6ca62a311 -0x7a1c6c6cc7553021260bda306e27800f49a185fda2e778f2081413edfb1d2b25 -0x3a280cb996aef6da78c8e557d3c9f1497a2d43bd79ca8b9d8377076f94c3acaf -0xae8d6e0338189e82bcf6118928cf169d549db47ee6b9b279df768833738cc9dc -0x9f8ffa0c42c2ca77ed6ea28b4a9e29e4c2fd6dbea4e3c8cc655b08bebf7cfa70 -0x89d68a656f029d5e8746bf70d0476a12c078ba06de9bc0eb5143f2f07fe6f72a -0xa0742b0a665d8a296d1d2a9e31a8d9e49e2156441c4fa923a0f2c527312c0193 -0xc693c8953c146d5a64b5387bef5fad35b7c133e4f7105205a157fdfe17cbd1c7 -0xcbc329462228911e88f86468e373ee3999e6073a72949bc019fd294031daebe2 -0x659c321eb487d18117c26789faf3933b01b983214ef38406788263e6b658081b -0x889e5b19731d479f83fd15d17c996fd3c5ca22814996fd647ff7521335b01ceb -0x4442c44cf126a370eea640d8693014bf2f7087990195601a500a24a16f5667ff -0x3878b5b4c15c7b0f785d1f954ed550b7c46192156dcc4307352467b6b6cf081d -0x9bf35542a76df6152520fe373ba285b920db2e149621a2c5feb2e5f9fa24c61d -0xb8e28034831839b06f9b537a12f1a467d23f41703c8261aa511ded3db2cb4a04 -0x03d77b2bbafde7f3a8f365a2dcf200e9ed60b59e58501d23dcd71b022a2f528c -0x1a0452856266a84ada8a7435b0c04fb57e03c3a25c4f4edb7e9b385ca49ea9f1 -0xfdd37e5ad7912425799ef37778405faf6df23f78b9c473c444b195fb016c0d6e -0x57be40d8fa9670c644567c335be1ff6704013548ace34e9a95eb01ba93d72ea2 -0xf671930cc65323e86b319a4405f0a6f15051d4e2217b4949f3b045801858f614 -0xcf19727067d8bdb43d50b4a23c04f5e97ec8e3b943821312ea3288b07c654ba7 -0xf1d84e46c302ff76a60984f3af477cb1df24c31ab0ffe2389bcddaefc6ed1e9f -0xccf3bda76f0cc1328d24ca0c12ec713188b1659d9e5a371c7b02b9629a70ea31 -0x4d2bae9731eea9aef94f34f7662054fc264243a2a2e40c665f9bd191aac47a42 -0x4c4b32fb8d5f92b46e2bac26d8259ad87a6b4648348580b77c0eb8b1b530314d -0x0811b76206728db49f75bd3964a18039203d69221393262ef05a56db811cf319 -0xd928274cbac9dd8ac209e06f845665eb8c18a8b6caff7028f2a7511665c0f23a -0xae0de1a6b47a164ea187bd010f23ed90d1c92d89029c1ad112184a16b0cb13c3 -0x07682509cf5ee8ee7359070dbefd8ae248bf7fde3247920cfb1d0a46ffefe58d -0x8a09b10e585f1eed98f31ec4f60087884478e2d27228a363f70b8f1ad9cfd9b6 -0x3228aa5fdf71cc562cdec62c0596110b66a4cfacf4d0af1a343f243a062abe7a -0x2c56f20413b556276468833b7fae5a83868017e70c10ee7dc93237e19c742c12 -0x511b369069d550b0f821b984aa847ab2f0c4e37b843a5410ad8fc881cdd45477 -0xa74ee972a16eace25d92f12867d5c2311b09a6884c9b17c42d73d5233141a099 -0xcb7f300fc3742cd0b6ed572db79fa37e65fe6b296f13527b8870db38d4a115e5 -0x9f3f96823c41a4c10fcaf67e5f42c3963097b1882d9e94d41193a3e6c46500f4 -0x43e2bb5f4a9f4b7d0f9b4aa646479497143e7b873e79ac9efe5df3ec4ed39ee9 -0x09f3d21f1bf299ee850946144d826a039bdf116af332ca3c213a2fd78f1bb3bc -0x3c89e5da017cb3792f356831a458f3199eec3ccc0db694183401eb16c1606004 -0xa4f1d2d1d3eee81adec64fa5fd4aad0d611203926ca08e32403684807936f80f -0x2f108b7661bcfa3eee228f86e67b20ca2610d51039475d3ccdec2758bb2b7cb8 -0x88c5f31f8cc533bb25dc9ffdee0ded9d34df9473a1b718af5845a87dfeb0f6c8 -0xbc13d013bc27959f766ce8bdc6f5c480102dc0120323a860f56ac6a709a39da7 -0x9b0d1a63f68de53f29b4fa787b65b3d8c05fae543e1c98096be0cfb500fff6e8 -0xf0162782290f5f36b51154def70e1e99c961ee28688653c1e8af989b06910094 -0xc472c589ba6ca225ef3e05c60e7ff11afc36b03c3e38ed77f3a86f32ce687801 -0xdbed3d46a2aba702889f2f72ed0277961c1011c8c9d9148f2be7447985562491 -0xdee26c5b0f9527ad88a953b50b4ebc569a55842e920d128fba857bdfdfdf9b96 -0x13a5256ad49a999fb91064c938de96d8ccaede268681233a3e0cb845f99adfcf -0xab3bca51c48a707e050a3f9b229bd7b00a53f710fa44efde058fc51e13c0f629 -0x66530d9fdfc597b91710f8c34ac37234dc115c2093d9e6a8a93f5bceac1b3005 -0xf3ba34dafb007240706f9de448d24e3f6111c5b1d9bebe6039cdfe80c8bae5cd -0xf11bdfa589502884a85e3a89e95e689cf8d79e24e40e6ea21bb617126f28cc80 -0x735f1ca489503b0e2989f94d60d6e25bf9fabf714c08b296a90262bc173e5b8c -0x785a1072a7c15156229a9d4d0a094b4930ff7f9085f4ad7acd9947641edff2a1 -0xb59d86ef3a5d3c33b17acfcda717fe347c84ff824d6d2131ede3412810e0d33e -0x76d32439088570173f69fe6e3c145caf73d3296b7e4617aa95435fbde9f12cf6 -0x38f6f2cfc4991db7247c676b24aba1a65b2aa1873f7403c0c5d3673a2ae05b29 -0xed6e7136b22460f5217e744f81b4386a24fb66c763735b5f97ced49dd4f6f0e5 -0x0d645c415efebb2d876429bfba17320894c6a62cafc5ff30075cb010feed87b1 -0xa0b61d658ed522518af57bff6d92de0de21cbbe9b7e343d1133a9b5cea7c4c65 -0xd1aa1ea9b616ca1ce50ad09c1fe2c09ba8d83d4493ec6633fb9515623a2648e6 -0x1cce2a6d68fcfe2756d4cc1fb696d6d30b44e67f7afdb2fedcf35c47022610d1 -0xb52d9cef19ac6ae4c7bafef727f2aad1a7b6fc29bf8a685b3181792202ec9eaf -0x24ac121238e01724c1a5e68969c42d5df5a24fbb862c96a977eefaeb3672670c -0x7be7005c8c6d80742639821828c19999a3b7b7c53bbcea9f772ff35874f7b868 -0xad3e46f715c587b2043a11a616fb7859d0ae2e5d32b4f4dfe76ab3e401388af6 -0x137c5be8ce90970151609b2cec1510c15beb452d3f256d02f437d51b7767024e -0xcfc06d81971de069a68e821c8ecd0152351525b700dc756d6eb1aa489e3abf21 -0xa70b5c8f4c79b072e5cb3aad7580188464cd684fdb8145dfc0babb1996a019c1 -0x2e4b0e748f186a41e35cf37dfe66c21334a816444c47a4413e6d58afd2c733db -0x2b73ca32e746ad646fc5178b9911d9d221a018b0208ee720707483240f1add3f -0xf8c3dd43ddd381481037124418d046c2ac4555680c4abf77683f80a044477f73 -0xa4426d0b8805b4fb15e36dc2d2a8368082713eeca931835c3df221264304cc82 -0x3e13a7f0acd1c97449b4ed273fed39dbba8187a31b1a227d589f08eca1e32067 -0xb9cb19d864750ac7db9b79bd49ef743fe749442ea2eb19f16d491c2b2692c7a1 -0x207e7fe2ee4a69f5029b891c0ea65f157c9ab607dbcf9fbbc142f92582825439 -0xd8e737593754f9703aad9e36d78ccd9a8ab47c0e8a25b2e833ff08b5b5188d02 -0x690f90c7a62828885d5baf2de809d6c009b733a6c748d55d489b215e12b06444 -0xe5a9a86e9a03c15e001817910480a769726ced49eaf306693d5ed67259036bbe -0xb76709f9e366f5ea759181be4ff554d11a37d725a52260ed8c737224ad504b08 -0x2fc37966fd4a71332f63c28842e815d219bda9fd37296ae55425b9da052cd640 -0x590985965f7df373214707aa6122d13a9a13103561b49320558e34065b48f1eb -0xb713caf98006d143b573d7070076961853e662560d1b2e1c1f5a715fdc47d8ef -0xba4a65242b900150e0fe278d8573abd3784ee40f33b2bf891f32200b87ba7f28 -0x08258ca0ddb4c18e2e8606f8cbd547b9c4037dd4c09c387fef6b5d13150e84b4 -0xdd6b08f5a08823d16c3728717ddc990a9bb284757dbc98e9810fe15e54e72ccd -0xdba58dbb1a1588b789bd7a3409b8e180ecbcca09fc06e496b379b521a2798752 -0xd253c3296fe278eaa42c1d1601b1f7422040f68fec1348b47969273598cd5c21 -0x1a4e99b0a2aa91d2478d56edfce90257ca6825c43e5895057cea07939bd8b123 -0xa580d39b09478d08602438feec62a5e2283c00d01365241f4e50e74fd141d430 -0xc2a1cd6f8352e459e9a9a413809dbc519817881b54e42854b4297aed360f68f6 -0xfbf9ade447a18b7ae1ca2dacdc096d9699538b061717784608a0259f5d9ef4cf -0x55889041cac9a419c98967397af3707dcda472077b5d0c07b1112d0ebb6dd4b1 -0xdbf566787012593568ef9042480e43035516a4b768e694079a881eab3a28c127 -0xf7af8376b4dd95f44696df54a7709d3bd811df51f4d13a1ed8520cf608f14b73 -0xbca47b1b3a9be2deb43c6bca398a814134b47590738aba9674690f1a26192261 -0x046ee6fa3e3473d1355a9e5beb945aa074d5d55e1748a7289a57ab0006ca1317 -0xd8e80edfe77387d3ba03c5420747e64df4af1c3acc33808e4c48f1984905d726 -0x8315783ab965ccb67a0b5f5ddfba4daf4657f2015c21debc8b77744c07e6b29e -0x29f372567549e8d53c3793d59ae071c112d218933d739ec2839d50534b607aa1 -0x092c1f8b79e032bcbe9405042e753f247cbc980585b62b25255015295a41d72d -0x216446cd3b0bb2fbd41167a1adbf4079c75afcf847d63ec2bcc18a03011ddc83 -0x264ce6e1f53b11ae5b4fd666884f91028d4d339e881391e753e9ba842b34a458 -0x3c65f77fe777a40ed8307976b1562b0b4ce931e72c87a7448e954d030075e071 -0x6fbb68d6d1e2ece3017795da062f1fd2c3d7bb18ef34e100c7adbd162dae0bbb -0x1ede15036081f7ac4ce1f570255d7007e9e3a8b9c32c4bc1a04440969e1de5fc -0x1ed1eff19cd3cd8d696c8b56d75426efdc81666783373e5ac36c683fbc80836a -0xb94e6f80b52465f2d441de9a3d58ae684aa3afb76d511b1617052336d15793cb -0x2e900381acb1fa8dfd512832a729c2e00088d04ab4d1aca034ddeb319233c317 -0xf3a0244b85f5c984fdee914006ffde3706640cc6e5f590fa9795b34fc9409e66 -0xf74f6ee61a3202b016ea9b98cc721c9ac7e7ffcc03df8a636a4b70373127364d -0xf727845b59e18c1dcfe21254c7fa92b26abe2610d1dd182e221d1e1501eb8bdb -0x40d2fac5f800f9d42d14b60c14940820080bdbc17047cd69d94d002b7966f171 -0x8b7e8362cf1630675604553ef5eb16366328ff5b2f0e90fca316b455837def7e -0x02ba9ba0e0c93709879eb31ce652feb7601405d3b952d1593b43076f68575002 -0x2e498483e8dc508b1969df09e7ed86571995a804bbaf7d17e900ae3f8f71d80f -0xf16f5c07a4e420de1d2103ac677cb0606ca11ef06171b366153ef9a892ef3ca0 -0xffdb0438de9418d8466413278bbf5e79b7085240a48613ab7c74584673d00a07 -0xef98e761c8d5f1142ab176b66176d932bb679a8c13c9965593c744ff5c659e42 -0x575748b913b857024f5a10dcf97d7c0aa09a77e1546f31350676727401d84b82 -0xcd83749d46bd7ce7b6ebbd8c75641dc3299a0a3806c1bf666211e67a000f0f81 -0x98ed6fda034cd06f45bd5e8780862a8fbe4f85419ea730e46ad6c6e47d83ff8d -0x9340ccf6fefb8ffce61b3115d247af260c830372efd0b0f4df85685c65bd4938 -0x8a5098127fcec5b124c43041bfa9b0e39f22d4df6e03edc03a54029c64bd5504 -0xd61d0d94968ecd27c399935ffe1e37b0004de791db21d636ca9620ca85c46328 -0x2bce7dd3f3b32b6d37c2ce3c64969d4b06fac513caf9c5755931f241324166db -0x63bf60cd239640032f77d3cf77bb7f358a341921c125f08f4feadd265643f6af -0x6966277160bbb5694d8e2fcd0bb4b2641ef70e636a9b92cbb3f53b9baf93409f -0xf569ac47094bd5646ecdcc9b3a0a2093840baff043c13c49d2b79abe125161ea -0x7f42cf0f114b3c1afc278428d6ae06cebf667aef9b31b37221bafb9782d7aea8 -0xe42cafaf572678cceefa135dfb547764a820672d4e60892c4e9b14d07f67deaf -0x82e4a7824a03b52da5f26e303b31bf480ddf68d0f1260fa37a7077e34c2243b1 -0x037e44f2dd41353227126bb6e5b96463b5f892b9b3db15d99dcb31ba92a09a13 -0xe94803b203d5c88b92d203757429981268f7dfc3c8ad031378cde72160388717 -0x333c659d80408b728363e7d07cff1dd3c5cb95781b890cb2efc3b63d7e809d44 -0xf42e2d0f476878807ac94d62adf739535be804162cf6603179f913ee2e504081 -0x24945aac5dba33568d116a23bf4a658526a487c8649456fca45bc0be8ce2ce75 -0x9c8236631edaf1371dab7f95fce478d222a61f77c88dd75acf01f01f60f4d86a -0x9fa785f0cf4088b87cd3e163624c41b719c7a3c29ad1b6b5b9c6d42c5086466a -0x57315d248de9f3a29785d2b92d4d708fe6da03573a64b24be6c67f82e9364e32 -0x4432b99948d99a64700b84126cda7ec5969c782034d242d1a78010a49dd0510c -0xb7376cae3dc796da2f5fb48513b1b68c765af442140f7ff1aec92a3cbe42b63f -0x8ff67eb51a63e36c13424c8216605262ed457f52f03719dd7d2ee3a5bf6de19d -0x9272cd4ab64e71a7e79210478b4c199f7097fe19055a278aa3191b666a39ff1c -0x33761077a8195bc9208e8863ad6c866230d644df3ba475587da0ee431b413db2 -0xb43c9a5c4dfa8b51089405b20d4d91fcaf024987075e3d970ba729a205849f59 -0x67782c4a4efa31d27043a7b70489dc77626dfa98a52edd336518849e7ce573db -0xe4883218ead60a239e7f0eb4e4d89194cf57c5186cfae059112d7deb643d03ea -0x6f9253780d804a6320dac2efab0cb082aa79472fda104233654f5e9303db9793 -0x4933c8b05dd0e288cda0ab51e9d364077de8543c8caf28036c7e14b29546b466 -0xe43b0ad8d2f9db506ef5e7d1856a18224bb49da26a55fb75525e0e3b41ef935f -0xbdb657d0e84a3122368abdf0575be9891943d85724b3d27edbc3c892a4485f6d -0xf24e0f2adc162703d3131a372abf588d6d0001e2052e8dc4e8c339701b93cbd9 -0x04a73cade222d283da918a105de6da8ef5dc76587e185165b83dbdf9c61112f8 -0xd52122ddedae0c92ba66fb470ef4a4418873a724bec85fa0271290b89c495f7c -0x4a5a65b9492c57b1c20e38a78cc7afcf5f9f32d8508e03d4775f1519d8696289 -0x22f13c0b4044965f47ecb0ef33c771103e1ecab53dcd6e14b4064060021fd6bc -0xfc9fc94b274bf4c9221cd51b2e3227bafd26584a4c6f2c154bc77ac6ed066ff4 -0xab55e108f6351715c8758200f3de34cfcfe720b421bed498c1b360a0184831e4 -0xf048018fc986340c3d41899ddc829f5f090b34fb77d61ad87577700c024c02b8 -0x689a35c30ac6e43a4fc0452695288754cc7bb790d04c5df08cbb97c89b002e5f -0x156828b360815feabae939d53653342f5f8b72919375225cd7aa2baf4cc9dd26 -0xbe1fcb2cd9e2f93999f8a3134365df485d1e0cbdb3506be4d8b3d139218c14a7 -0x4d1fe8b6a220b1ba7a5ade76d13f5b0dc009f3d7e4aa6295ce0435be6b772dba -0x6fd80721aa4965809ab02714958d5b6529e01bf5a08a2fcf5384c44b577da356 -0x84b44735b1b5cb8886787ea824b93402490ddaa28e4ec053e1930e639a3ba789 -0x3b3aae3ba73f3c1605a159acb3b95a4ae96025d4bce8489a14755e26560fd648 -0x801523887943e68a2b71339d3f892e7c120f1d47cd40bb40e2d37d335be4d4ec -0x2e1cb39434116a699300f2ae2741eed050a094f7bc472b17fbc9b17ebe73fc88 -0x7c034eba32f7229b8ca35afa466372f6254587321f83f86c5c914b76b80f1f36 -0xdc2b97d39eb905b0823b3d94555c5d502839f5053dbc4611975dda5a577790b5 -0xe5d4e1c9b0243124bd56fed6a5afc48573f0bca0f7ed6be72adbc6f6009d4bb7 -0xd23d881d5c8054dc53dbca522799a39fce7885841156acd7179f67d385292566 -0xc863ea8090eccafde4a3eed9d6a3b321ce1d3e59815ea48576078746a117b063 -0x9e2818056b2bc5391d7fc60e001427fd84397d095eac38b30ab22b9b5a6cc311 -0x96cf221a99bbe437232cd4379a08906cd656337784d4a7e4936c127a4ded1910 -0x5997aedce5afd691388aac9defdb6730557f49669af90166bb2eeffa1b26bda6 -0x06d15d5ba2f2077b6a9c3b3b4d8c109c8a165095b44559e4645fb776ad04a3d2 -0xfc1ed2493cc6826ec6ca240bc937d6fd8108b45386f6cd24a9c0e9a006c1389a -0xdcb686619b9ce01136df09dc2564a68b137ab88917c9ee86ff91f412970356d2 -0xeea40faa100a04f9d39fc3a262e7a4f2e61115529c5cedc7637ef8cee58eae80 -0x45b5b375a3fa4b27c1462c820e62af8729b7bc73b817fd0f9f490afdb572c10c -0xb0d060c82e904b3eff813323f22af5a5ebf75d6ea2e13af236ac859b1e9746a8 -0x688acdc18da36919271931579c69b5c444d2b19f7869c654129de9075b602412 -0x877fadc1b689769eb592f9ad2aae7c135e4e3e58d3bd450b19b3ad0a6252f806 -0x23d550a80d20d3e06d6630b0378a39c2cb97350ba4e221501ea82b987512fb6c -0x446c2ad04a91ec53f1f28fa5dbaeb1401da693a978abf1119b3747bffc284693 -0x8e64714357bf7ef8719aa1f92e7c85646383a1cfedb1d2549d8f8adc3857d5bb -0xb6e34e29ba3566d64b57d05d7f0cd1e7f2bc130cca201ce3f6f6c4393d5c9d46 -0x71f35a7c071d1c4402147bf0461457156b158332c11a1cbbf2f6862d3a18408d -0x9ca9075b6d517b8f6f8185e688b12d4ce9e3aae9c6fbb708c2cf46155a295420 -0x1f8d6895b601c51f775c0ef7e07c6b10fb2accba8d2e89d926d6e6e14c71bdcc -0xbb0ce1637153d10c8bfb74cba056760de59d2ddfe7b5a89ed3aba36dbaab185d -0x6a2d8a6cce4b7430bfa83807b551720e58f5521dcbca12ed3a917920edae8c3a -0x53aeeb92c52634e4560e977c0c359a76c661aad0a2e49965912c1c758201f066 -0x473691f836f715d1ef2e397349474516dacfa098733fc425a1e274b4952303f5 -0xbfcd67964099c312b7267c43907b9fbe696e6ad20db6646dac45d6034eabca1e -0x423073a3a9a68092c8ef4af6c37cd2b4420ad1087e45cfba9d0bc86798afb54a -0x5d99948cb199af9739fe5c5a34b4d042aa14bde065b31bb126101a96fa408c84 -0xc10244739c12f0ce5fd54d990022cfec2d27d196c95cceaa2aae35668210ba20 -0x6d65ef33c16b5fd963e3edab64a20c27c3302e94c06b9f828d75b8bd5c4145be -0x577e7cc104a3e747e828038ebc060e1100d19273fd31a27427314955716a3192 -0xdaba4ee455ca903fce4630f9e191c03d9125930dc2d1bb2b684008e8bddfd6a7 -0x51a5aa27b685803c65eae2f3478db09a65668982b3222449fc8ba5eaa590d827 -0x81100a86de7d9943e8fc0085a6d56afb96db543849851509efe7528bf6bc4c29 -0x36e7377ccb894628f5c4f169c48ef5da3cfaaa22ea18b7369bc6ce94c21b6680 -0xdb2231561c02eac4b6e8863388c992ad75ed2a90e2f125b5f795e619226cecf3 -0xc5edf358d26d54242da412510a603d48d13619eb348890d09e0310390dbe5f78 -0xb38f43f929b4f654998ff9e1dc21121d93f92584906f48f86609251f7bc2ceb2 -0xdf4be15c0bc2cd822cc2f8f4e99b936e7fb59c1b5e37bf1e77174d9dcf419c4c -0xb81c9174d75e21775db138c938375e8af58e1e94f98ed4f8788b9c349fb2b07d -0x6b52b9534c65abc45694b34d1c8081aacc55c45811cfdf8817cbdee875b82a41 -0x38ba030398e890e612cd290dbde8f84970fd3f029d5eb22d7bdb99f803a30d02 -0x0d4f49bd213bce09527bcf7c75c89ec8d516c30d975e3567632bd85296fbf0b9 -0x13bc6015e7d595eb7507f01bdf00c659a4cdf1fce17f077174abb70ad07de94a -0xfc5e811a9f087e1594ef20b89f6387205d5d7fec336ea1b32c015e505f35ab87 -0x0796351ef072b006f6e92b11f87296813596c22350fa8981aa16e71a009fe3d2 -0xbe492a0f8bbe0f3ea95d4cf81281b0e6fc4df4b9328af549b2b1441714df9c4a -0x0ec8becc9d3988d46585b2b2776fc736ae19a6f2e0f115e57f026e12bbb3f4fa -0x31e803c8ab567f973e4a0094df623afb2216e7742ca9a3e605bd1cf72ca0b4ea -0x4e7ac7f44347db72f9b81748547dc8692b5db3aa4eadccb42a57b1336d6d47cd -0x8db162fa697ff5cbad4f78c0cf4dae76a33c481b88a5b012e8cebc535aefa77a -0x3221e3bf8b19ca0ef0b2ce0bca7e7d9d283d2be22fddb83111003bfa8d7bcfe4 -0xcf455dd725304b5ebfc18c7a5f49bc849c2d42a3b2a9b5465da6f587d070f6fa -0x36a68acbb746cc77527d79190aa2829a179386fd80701215ef57009caead3330 -0x37112ef176852b9cff97368d676ae1cf052a0fe756ba58b7242553ecc3c55f30 -0x88282fe002fa54b55afee2dafd77d9516b4f623f27df6c2eb875d1e68ba38d8b -0x8e49ad90a95a7f05abbdb01e437d3452fabea78ce095243a3bd1fe46ce54029d -0x4ef173e72848b629d1169320262b540d68460c14408519fb3e45e696e69f64ae -0x31eade44361a0e2943a27cbae51a82d61e254be9e0602b600b1d2d6873be402d -0x457e03f106339b2cdba1d54be9edb09e049a319edeb850a2fc69c30b79167967 -0x9c39fa034fea4fd80522d0530570a3935da58e40e11c4f6060917ca9785cd0a0 -0xbaf2fd6cbecceb37219d8d3d89838fff332a9c75fd60655cc68936a6c0589fc1 -0x269f3265dbe47d93b42a1c595c84ba18f808d9de88fa4e141c324d259c370acb -0x22d7256516d066c3679828783664d827c239e5e452e4f576c2916be2bb7212cf -0x15c137136528d43f89f9060eb8221e423b1a267ab371f181f8757086ef05ddd1 -0xbdb2807d86210071b064488ec6eff7c66bffc43fd1baf2de369d3dd7551ca1e5 -0xe01ef808b42a43a85e240ca45f72b0533e994c72d5254b019914f67957be1be8 -0x117fd2015d737a47ce741132838eeb8815b05cbd9db210192d7a3a2f7bde1931 -0x9a7b58bf187e61ac8d4830d13196d2fa332a929eec9a5e4bba7dbddbcf299f34 -0x9c1a53dadb0ac5ba14db90b37b05c91cefff2b32443d1db71ad57d86580e15ba -0xb811c6e96c30213f25ee59553ba822a2987263ff0156af5860937707b7a61604 -0x8fa5dbede040ad95e6d4eefd1e5784cbcfd615a89271506f29ffbafa586c5a11 -0x70256f940f03d8c88bc52db733ae89b25fea92dc93b802012408e59bdbde531d -0x70fce10596158b6952537b32fbcd00f8dc281051ed17a402ca1becff5357bdeb -0x2456db6e82b074c61a861dc18de93c231f74819ca6fc896d509bcd5be75ae970 -0x94bbf80fce11aed650af9d7501faeb3a6d5b60b5192851759c1dcb1a6f7c4531 -0x04c7bf9da142d3781e3ee1283d79c4769413f9d9fc25c7f8f67aeeeec6a940d9 -0x49cb928aa72f789758c8b1f10e562aa3c338c601ec99949872d9901dc6999d78 -0xa881e012a717f21f693fbf64217c9a16d084a9fb5115b0055c4efd9a218cd077 -0x60c8b15cbf1f91538498e3b548539e3f468e6dab1559db85c2ce9e149a7e6057 -0x2451c8524467632ede461bf855572edcc0c30f8e3309a512fe94ad5b02cb1c6a -0x5579306b35ece370ba6c8a2b620df244b02af2f00f52455f26f20ebfa573a623 -0x2d7566d5ed2ba3600ee9634c6ecc082f13516adb5e3001baadaeb66260f01fe0 -0x8cd0b012eb33043d18206ac246be8235c2142dfa8d26dcbb7ccdeaa8e377959b -0x1e0724e2c4295bf6f2b9208c04c25feb3ddc751da4ee0ea3f1b14e2cd1635ffa -0x7543a304e83dd7f6340b80a005996fa16513e33379392fcb085878228aeb90cf -0x6f4c0b8a962183f210226f2932e224708e1181a2a423c0d6c42598c222987c8c -0x1ed8042a3b8c82d4cf4c1864252b292dd20a9676415a31e15d8652542440f916 -0x2c388c2a3c39d3d3111d56e56e6b85a15b0d4aec9c2c1a2b333a1d26f3d77772 -0x7a4b135a632d42f6ec3bfe10c56cc0a83198c19f186f9af82b9c12954aac9aaa -0x1d3ecfddded7a4a2681a5594dcfd09e31e7ec2b6abafb7641bf786b802e290c7 -0x9804f5578ceaffcbb3b93aef1cef721f1d80d13a2d4e6fd2738b5171569e8577 -0x6da47d11d3e600f4382dd7cf5f1af65bce8e20ab5b488965c4d53aa682198be5 -0x235157390be5b4c2c44a2267c8aecac93be78e7cc26f5d180a27c386430a9163 -0x1baf8238109be7a01062e27f813ee0930fac46eea35bb5f91367c296c923f52f -0x252abe4b7a3d21690bb5e6c1524f8e19552ce5dc4b3f8043b9286345921b143a -0xa80b3bdb5a5f2e5957a1d3bd3348148df5263558982923709e8455dbfdc8568c -0xf7f962583426101f6ce6da3ee4035e38b4561bc66b0bd5e84049d8e66e5ba190 -0x72b45900dc9b7dbdb16bb7fbce4904dfd07dde08a3c0cc2b84cd9d4086c87aa4 -0xde1e0e8a2b678a9e58ed5a948e0a8f361346087264598ecd744878f466dec957 -0xbcd9e3ea65d7ec43a1b491a445d55eb056a14a377f7a7c0a2502f24f0d6d9bb8 -0xc2428b416be9f8605ac901707d32461b2442fd76978e1dedf0e413972001bede -0xb8f6f7d4c25d4787a62c13a54c159bfd4a20250d2a989d9036b7da344fd90162 -0xab5153d902512db3086df39fbe55c1b353dcdeed9064e73f28b5e18d14ce5958 -0x853911c27952e855176e09b08d1f28b30827a5f928f899a99ab12197a3c4ec41 -0x3eb89fcff7321dc41c05cd828086d2d4cf9f3160efc4efc25db4cbbea7b21c6b -0x16a1a9b306172107d04c410285079fc8a384a8eef28d3c71beee61e681bdcb04 -0x9562febc52f5fb4aee8676025c791a1e3094a4948c36a116168bcf3284db267d -0x962b5c2ce4d0bbda5994ccb5ca88d8f5860985a5dd87f81b73702ad4afbdbd80 -0x5542d3e65df5eef6c9cec8f090935230dcb2fc92538b53e8b9611c4eb88936be -0x23183456d5161f704eb408bfb9982a445fd51bb6ab961c7524694a2d1dc5d106 -0xdfd50581ab06f1d3bf08eb3b2d959a7e70ff5cac299949d2ed98221f7339e13a -0x34b1faa152cbdc69fa69834011a5c9536d03be64ffeeee252f969d1a888dcce7 -0x887728c777917c3692fe4d298c26023a9bc66be82382e553cb29fbf43cb0f895 -0x7e7b3fda3d79d2ce352c495dd80f79a151a0e4928d69895771b6df7f0659ae4a -0x8489c8df31a5bcd2dfd9851c9d89ef99799da788e6dbf0a3d0f35937edd2650d -0xcab1e8640689d008cc13291298646e269aa50815ae4662b742fde7a28924835d -0xdacc65e7c54fb790ceb9ef8a45ecc4e1bd7bf376b4c440f31969933e0e405d7e -0xda568a1ca298d06e7653e220c45a7d6cade653a7857d4b59378fe8d78a4dad26 -0x43d16acfbc367636599e5964363520ffc388f9137f68f1eb33f280294277b665 -0x47c81c28f96c70c7d7f17cd7b2b0ac975e12c24133c2eaab0670d769882c22fa -0xb9990d856a9716e72f9565abe4d523a9f2159f499cb02ece8b9f8c7d2a888df7 -0x2515860a369f8007fe9ebc42d1cc4901da7256161b65e5ffdda7aba0926246d2 -0x4e0a08f95a04678bde8ed39902b23b99975ce6222e06fd526e62b6a7b1e6c1c6 -0xe20c1d061af4fa013d8f18fdc9fa06836ecb0882d92c007f20987c13b7723f2f -0xcadf1d026024da7e7d9f0c639e8935f35ec6c164dd4353d91613756354f609f8 -0x0fc9b789dceeebd3f18cd4c97f3c3478e9c0b04ef237912ae29044281f68297c -0x3d6b1609044c810fcb057ae6c87975050bffe264e4b7089e71036e7b782c0c53 -0x352394d0520721067a3b99b29f695c8074acb3aa215da6726d4417365fed8251 -0x759d4572b5917e319c23e5fca9c222b0b3adf0ad8681ce64da4970e534c8b91a -0x9d19f44d4e7efaded3c5fc834c5e6618415bebd458fd4041c25531d1657e60b9 -0xb6bb8d133597087093e3467cb708ab11deae9df406cdef7a325ca48638ca308d -0x99720637b564e94b7c04a0c53af36e87c5fc156980d91321e44aff6e77715fe5 -0x29669170ce530cc8d9be670cc600e98e6b1bd43950f0f4e48ad5d225872286da -0x00d3d8a5200e53d3a77cfe6e29ef801da442fa170cbb73df52fd4bd4e74d95cc -0x5237023a514ca86d25b69d98f8de815fda9e41e863411a5afd391adc2062d728 -0xb54062c9586641f69b5eb242bd71bedec2873d6cf3972680699a6a74d212f364 -0xd2e161f69ec6d9d58d82edf1dc20f28f79448bd92c5a32416de36b439ed7c5f1 -0xd6c6a1cf60b22f7359cdee711bdd0405007e579ab3f797fe09254a66e5ef3ad3 -0x42af13f37dc1c8b858de51d755e4f233f3c6c2ab4138db907f305eb0968b41bc -0xef7e74ff7947df887347bb8402d84b8fc00cd4cc698873704b542970cda12e01 -0x355a7b173c5ba4ad3d00949a708cc81c73f2b4bebd8074a0314d87c0c0aaae73 -0x5bca5e9fe9ebbc8ae2b6414386a83432b75411dc5ce85659183269cb9889f9e3 -0xd39edfb48ca3449c4b4daa0b8fce469e39e265361c2f9419f6b946e51700368a -0x0057a678b15fb3e09b1a4793b3377779eaf9badcb2db93dafe25179fee86aa94 -0x06ac647eb4dd063715ea33cd4f20cbf31f641b9699a4599c482f67d3d592191e -0x3c589c9af0987bc10d56a4dcc2283983659b32f807d77d9b7f3927d38560f27c -0xbc83982b64c83279189822b24eaabe4e87db12cd8ea4b5848fac9043544e3008 -0xa526f303332b70cee2316939629eff75b86b9147bc00046a54117bd4d802ef85 -0x4b956cdb2245f0005e5f8e58dd02a446e29c3f559ae8fef1feb76514d62c9e9d -0xdf5099b1f0b2486e09220e1fcfffde312ffe8ad1d4e4694adeb861b988db51d6 -0x52b7098e3895418cc965a9bfd6f30689d7ad16eb78f0f6489770bae3644f24f2 -0xdde63ed5f0744ea341de5568847b5af9291529ab42e728e7fae42d0c15dabc15 -0x71f822489c3311aa44716347fe1b8ccbfaf13c33d470477f5d855d267c6b12ce -0x4b1e482b40b5f1d879df94214d80db7761f34651aa6638d9010cc5dfecedba56 -0x826717b8f122e401fbf72232ead54ecc1c32c338353917aba66750de0a0c1182 -0x203d660cff8573dd6612d7bc0fba6c29f4d0699076868962e6b98322c1ef932b -0xf486dc300208413c183082c46f5c62c5ef99778222c764d543701a606956cf58 -0x615b9509208314d5976eecb00d7bd795487556776cd06fa1f1b005f415e77deb -0xba79991139ff4b5bf59e618d92d9e6cc0375d40442935fa5111183bf77b0fb88 -0x0fb20382525069cab749386a2cd10ad59ded35d3f683401ceed86b2a31d56321 -0x11449f40bfdcfa18780411720eee36f3d2fdb80cecbcc5479298e92a0b2e27ed -0xaa46bd1534359b3220575174bcf7e0d51ae0e73e19e2e54c053ea5689ceb43c5 -0xb06fe3162578582016f586ea5fc6f4f87b91a21ab4385eca4de6d49e88a55a3d -0x5e8434ea00c99cc06b2d8082f8e51b7f0443661a59c76e70e9369f74abf06517 -0x17c7139b5b63e106d351925a7be299851f8904cf7a9d0c770830fa69172935d3 -0xe52b51cfd6f6528ef6423c4d75410f265da717623a482970fdf11aff8422b5e5 -0x6bd82ef39778a152ba90901d7e25c3f3ab502e8816a123376ef5e4b7fb713399 -0xb7f227ff38ec572ae9a4e758991990fc6a33b8215f4e6c7385e2ae3e23bd113f -0xb0a7fab1936f2dfb7e98a259f45b67e924542b6a23712a5b4258ac44d7a9cc21 -0xf016d39a08bd999df04d1d34d7c8e467c00427a877c871038f4a500624b389d5 -0x65aeec4639d6938e2b4abdbbda24198db4a513332df8078b35b57cccac74d070 -0xa45b4bd2de75162d5edc5b58b12ceb2c49afb33738c812d46d0a9489f46cb99c -0x4637b27f1815529c4953186aee41a370a6755b443e27bc2cc77686e8dcd7bddd -0x4fc1f0b1fd5dd63f3853b32b2dc1daf81db855ae60bd7b80e6c4660bb66682eb -0xe50374e33ecd42c739ba54da07fe63a2cd76cf895a916fd8a82a6fc181c482d2 -0xda3cfe02739fd816489e8d038ef0411d291a79c899fa4fe651e1d59fa6554e5f -0x1fc9086bf6c08f12554cbfefec584d89fbfcf028d22e852fbb81621ea21dc749 -0x4b95cb4e8aa3bec7b2944f1c6e009ffe603132705cbd956fce60a3aac2cd5fd8 -0x7c22d8d3fb26bb72056c1ca43301d3a80476939f4a98518fbc10a15c9dadeeb0 -0xe2d42f39440bd96602ecd8b155544a9114d0fda1886b2dc63a30f687cc244f92 -0x861000dd638f730b55b45cfc45ca45bde47fef26e7c6672de2da074c45418380 -0x87bb0be5232e0fc3d8ed8bd181e83015e0745084c1bf67d9d7ef222e9d7c810f -0x39691e31c2cac983a06c19a4336a146e3d562888bbdb54f1b4e7021db11f9d82 -0x69a9fc2234d411e2bb357fef46201b918e26c804bf7c7e074253d8ae112dad98 -0xb71dd21c60e7291ce40bc6252774a155d5f3b73fb43cb46d114c23d03a99d61a -0x30239895b263e6ed63776c8ad9472a5a72c8c743928472c9326f941dcacc5b33 -0x5ec3884c353d5bebe72885358776ea4cadb20ab0f1b9f9d6387d6d6462cbf1f3 -0xe8c42e4d57138544d32af4c50fad33c99863462f330550333cfa74fc55b3650d -0x989df46ebaf6e1f7d26fe52589b58b2b78ddd043a47b3a00a7e4206a01093dda -0x88585560ef5652dc45b2a9f50d1b49d903576dba44aede64524e58db02f145ef -0x1b574a4672df51d217f629db2fa2682c98e9066ea2ea8e74362193fb005282d3 -0xd4cb0d0960280a620e3f383b13d2b7fe407c15bac7251aa2b0cf1fca1e915d13 -0xcee43ab2c3ccfada98bb83687d6f29fd734ad1690ed7a228e77ea3f1d5596b28 -0x1ec3cc230d4e69ecfea433a45ce51eb711178ce4483c8ac8db8a4abc48f70627 -0xa016a296f66e09230c0e238c8dc3ac94793dc6495aa59b7b1fc8ad67fda48bad -0x4f79aba94b8fc3cdc7615150ee746e9f786de2b1d71b317e3b4d34080481c196 -0x0548b59ffeb68c750fb37570aa79949f5b7d49c6a9b46b09b4ad43c3b764083c -0x376b5a79720657b15d923cb5169014c5cbf0b9609e2ca4efc4d6db8996906381 -0x88715a0702db27dc872e92656a05477348687b02ace3e8ef80d09f60d6390983 -0xd1b10e5b2d168bc0841cddb22f8352f8910c69f335bf41325c908b0df538b13c -0xe34c751c96f8e9063b47994e08ff6926acf1441697b6beef4b9bc24f8df806f9 -0x83d6a676d61698968d686d1817aecd4d62a897fe0273040a00918caef3942ef1 -0xce12bed314b8710c46404e31a295095fc8ac02b67a77155f43ca165d0fb13972 -0x17d67c2376c057967ce086e95b03f83b2443e52c2d98485f0a442f470965c776 -0x925ea175ba42bcc8c1df142662699272edad612888c7402431f063a997359e80 -0xa295c3d3a35e519fa35b0ed3d3c2583841edabb9a383c0f4409b991d34d1f8b4 -0xa94003b3ac10684b2475d994617cf60d5c6fb1f985b0a332fc9399f8adeb3252 -0x3662951ce462c8c73b2bae46c3c3fa83e8f6f083c68f73ecdfaac6add41183cb -0xd0c545ffcfa7d0b3b99bcfdbdb0c8a9fed3d4a1aaeb97b2ce1755c4b233ced3f -0x9e6be1e7b358b5169305cc1d743054d1f670291eab586216734df2a6681aca3f -0x4b79eae157c5b05b1eee67fd6cb549d2b05cd904b9bfeb9dac36046af35879bb -0x4f5852c91d277a819d6bc1437dd1afb6141baaaf4e905209d2beb9ea3b033de0 -0x3f7edf3cbad943018d4665a41dccb644800b688ddb639d0fccf536cffbe9062d -0xeee7a0360197abe5f71e302ac35736d2fc57a459fcb2926cfcb57d2b05406ed7 -0xa15c906fff642d1207459fe1df8b885df9156edc249a8c4611427087be7ba72f -0x0f1d03856ac6c89fc25a52f679c5d2c17637ae2bba346ba7ed0f326186190c11 -0xaac2d9af3ac015b7e4fb04560cf9686f707e407e1157b5935e436201706961c1 -0x2e50d49ae42079bb82dd28824d6669128ee62f24fd90814e3d5349f8fba4d1bc -0x6de85b5ba43dd63ce823035f8e310d928819ef629dd57c3e123533c31a7e2642 -0x2dfaa9b589daaa56ee6aae4a345e406b66d2782af6b75badf3f40cc1be3a8d5d -0xac40cb2142f47540d187b7f06a88f14cc9bcae36e217bf5cd2e07cc5581f7e79 -0x5f866282da5890870de179db2bbf01928420c7e4383c7d82ef381e92917648bc -0x699d1b547532336b58808d26c889fdb1115a6a0b2e3aa3d2a78d9f4b80d62530 -0x13243b6fa8312d6e88c295883223b911fb94761f9208b1079aad1d07d8dcf834 -0x833bee355d74f8a1bc3925965de3f09bde407e1b9b6a6bd6edb66a8539ad75df -0x6c3fa3defc63f531f53d05d46201df6fc42d7023461549ab7b70f9a1b52505a2 -0x0b63119a5b34079c4e8eeba2d5f6e3f022aacfeb2b3230c42eb1c435294dcf1b -0xf93e12f740b7d59f0ef1e96381188923ff3837db1ab660bdc82948c1e6b99864 -0x5a1a9b88a62508e5e6130d16803decd6053a4693e800af901347107e1bdfc90c -0x4af8ef5f0db6d62d2b93dc1c9289b18ec1e990e26e58cb4a551da917f4552957 -0xd310c6a471b6152cac96a9f83862a56b9823d0aa06d55f170fd2acc82d421d4a -0x17422faca982f9ad895712ccde1b86ad8d6e9b8da08ac4b671ed7657f563011f -0x84ad8764959fd927b6701d330b65cb76507a64996e8009d71b13c4ccbfa1345e -0x5e3eea37a1fb7cd13dcf6cb0d213d305136e6ac7bd1879255d0de445c530bc40 -0xf4d8eb00cd598ee807dbb84e84661883f64b65e4e4f9103f66a177f836cf119b -0x8f5cb98214f680b0b1354514119351ac867bec8915a4aee4c11ff2f75e5d77b5 -0x330dba286b2b44ee20d9d51d42cab0f08cd7aa9c5cd502f22abca10c466e6a67 -0x6ad7f8be5b1d3960d8721740fb164b8e0ea22a993198fd8ea9ae45801bab6137 -0xe6f6d445d82cc4e02e1e8ef546ade6ada70a06582bffd3c45da76b8259849405 -0xffe41410005b0d201f722fca58749a5d402d1debfb38eff0b7b29c26484be065 -0x11661c94c1af7984d8323288befbd639eea4629e3ffb37d0af454fcf8a2d4549 -0x6b7ddc80bb4eb732263d3fa09df836831a183eddcce68c6592c866a2ef80a246 -0x6c2d15ad90fe8bee434dae6c585dce54521b442d1f0ae967fce19d1aa2a90662 -0xda48372991561d935eafe9950aeeb6d308949ff931d563f95bdf6fd3be31c19c -0xe71cf79d12cc5fbaba53fac16d20e5bbb15781edbaa47e1d8104fd49449e4f12 -0xcdf4f7bf2f6528b498c596e0de164b231621a5c05ed2a7d98efc95d4ab8d9d59 -0x012d59b19aa0c41382b6160b475ae67082993fdae10224cac92083a9a780f16e -0xd1b180c3173c6953e1f76e2b14a1cb865520852e57825609b055e32648478ac0 -0xbc6969c48af5269bc78fac6f929c43df7a335e8f25623e47331405aabcaaee5c -0x6c6ef526e574c3d871254fb9f225cdd6e0c3b3a0c935d923f8da618efd470476 -0x731df40edeeb4f8c3207929d13e9e6177a5b51c88b1ee702f15359f901b07410 -0x989730067bc52a1316c4f9ff5a3370b42d14147f27520e26abec339fa8f6a430 -0xf1b1050a1e678e636bec8ec4b99894898793497aa0aa59062b6d889ed3b51ae1 -0xb8a1f0135a5cc2bd114e6aebcb1d63900c4ccfa414776866a55c15e8d216f3c0 -0xe3776ea9f3b048122028ddcd9c301f7c3bb0e910fd352bca6bc0baaf533b5926 -0xf7e36cdaa3a9fb6115eaab57bca320c8a0e55d5dd86bc7facaf3db9157ad7a41 -0x07c676d43ace67265f9f2047a3ff4c3c261ff14118af3aaef2626cfb2ca7e545 -0x74cd5a8ee1f1254d95b9a2cf616b55a635abdf61c66870b9fd920f72df307187 -0xc66a91dd57ab13e0e66474e8a13bed89e400279b00687889fd7a33e7643a3f2e -0x89b9aa3e04ecf87a2c382d6e9097b54d5e54c283fddd821aff205edef79413cb -0x5c47792f14d27eba15a14d58ecd9a420abf4729b190c6af10e62e402092065d3 -0x6c9fd1ce89d10bf65fb0d2ce6d875624e46100a2a573a1b3b06186ada33016ad -0xf30082fbb630f6727839275dd1a7d1c3d86d41098efc67a795a09dbd825a9808 -0x157fbfff9d0e1e7cbffa46b74e510c1efa24991e327d29198e182518d44794a7 -0xbbb847d4e36ea732e8ba46d6f4c635a40d2ead8be8b434c2abcc2569676ab236 -0x5ca67d2763e046c47021a1842620247e892f6c4f3758dac88335946d3bde1ac1 -0xefa772a8bdd2481e94075220069f6cb0f0d11123980ff900ea768a1e95181f0c -0x3d734d833753af40da4cf4cbc7eb0aa895d0be672db808a38d0e24b7d44eed3b -0xdd18c66ce42936d97d2fd8d68ab52e825e323fe99bf0e6926331f3f4527b743b -0x84bbb5675c6b75637d6c847a80b93136e103ada9296d278826efeb0575f14881 -0x8bdd9c4a1ca5cb8b66085bd5b7ee9864f594cf4cb98030e79af6a3164b842013 -0x51026a2d53b7af03fe4109b11dad2a8babb2e00cf73592d021ad68981d9803e0 -0xfb7d2cc3bd2b2e5128d227d8f5f0153710a50dde4cadb42e264f3168a41ea0f6 -0x48cd3e495261e23e033f9096344b262cb10cc6d022353ead63e526f7aa8fc6ec -0x4cce502c6785f1c8937ceecd7feef9e626e3d2b0828f335729d6e5c1782dcd60 -0xc744185e5fb14c5fdabfc4231278c76ae44a515376d243aa3c263d5e06a157df -0x7e81e4c136a3c4afb475e447faeaebd132df7a68edcc724d4a7cacf45be9865f -0x0812af28c3b2c927fe258f80bde914c00964e3981bdea9e38098b788005a211e -0xda156976092ca30a19e3055b3187fe375b1c8399c09786d5e7f61707f9fa1b46 -0xae1f4fab66b91b14394624dbd615156939426630f43fe01cc13cfe32d787884d -0x79bb80ae13f270f22b82212c9565f96d612175f6e33f2d1d8965ff00aa606aee -0x774e290a5bf6e0a0398164162afa7fd12b2c5d653dfcd69e405d7fabf3aa90c9 -0x3a45339f17b0f1668c8af39fada2fc449c0800cb13c637f0d3a6ffe0f31964d9 -0xf9fe62094b1f6b55ea3d01488f103ca80a92e7b2505332173bad873f0599cc71 -0x5514da40f29ad877d02faca81d32e4670532b9d584c85a8a204bc90af3a4c6fc -0x94b65a160804494ed5a0519880b508c992d293818c925ab58feb5f9ea40a27e9 -0x5c20fa05dab21fe13fffb620f47e33bd4e9805b3c230d8e7bf2b67fe57a812e8 -0x4204198770afae4e2faf54259e31eea92f8978c0ae33d5dfe92a3e562abe7188 -0x727643683c244150c1e768514bdbcec6465b0d0aab579afd0f1eb91ff4b0b6a5 -0xb2aff420ee6ebcd256cbb7e7a74dc83a36fe63a19e0c2fded2aad0183b8755b8 -0x2c84cf2bfc2bdf9aa4210ba50c7ebc3790b489238fe61061291b374d088301da -0xf78eb6993d6215583bdb41eb1bc79b003e5bc86dd8e94a7be410d1753500fd75 -0x68d6cddd57f8c26c7dfe039a22a9fe37f3ed652d955ccd9d48587e8477bd4225 -0x7420dd00ab8869cb05a50751dfc48c80107d689363148ac985712f5abec2e38f -0xb5f853f304f0699732df584491f3d2480831ee84d0b83c60bb7b02523fd275c1 -0x6bf42600f85c7d4b1143cb9f57f4570ea0fcb5e02a9de7e0e3c4022566ac4b93 -0x00f89257f632a745f1dc0da9924a703d230e610c9cec7b5c89a58a246760968c -0xad43f6d994db530856bc1aa1483f69e61b1576d6e7c8350939f50d35329ca55b -0x4ab75c732bb437118e24e71945884081c0216ee471d8a8f51afb753c181ef993 -0x14cbf9d7566ee415d24e2ef320c68dda81bbee3443defc74e7bc353c4f234da8 -0x48c75e97a8699574765e83d9f2008d8bfb961fb650679584997a1102ada5ff6a -0x8b8a8baeffedaf9e013d5d94dd5c900d3b90170ee6e3c0a02b6ec244911c07d0 -0xb1b45facf03ce5c12081722401fd02a378f3b2e073de2bf4e7534bb229cb00b2 -0xd6868a31ef4f45d88c59b68568b6391dcfb3ea48f1332c420a3747e6d814507e -0xf6c108e353a7649719e2a72f5e4f78cff181c6b34e5d6c347972821959cee213 -0x7e7e2e9eb98c266fe16d5c2c523d79259d9c8eaf2c0625c718ab5f4024ea1712 -0x6769584595e6ab1a883caef368c75c4a5832ed98016bfc2d767051baeb264df6 -0x0fbe343fa67da95ecc5c59f32e598dcad160304c2ec5d4c92d636d211e6d4178 -0xc44bf52be9f636325254c5c8049ab39195271bba7580d6f119ad8c4d73fe33ab -0x34ecdbb3cc1334b45fbf2a97c622ad1d1b8f0ba06d82e41a00181554cf759b5c -0xe7ae8c7831db3a5d39bf3b9f1657448791c6f1305cd6ed69e6d7ca3930d54803 -0x7c2f74701f8e13fb4f8008edbeeaea5c3731624a48c1d3d4d45fa7e3264a51a3 -0xe31cccb431f7b010eac6e9e3dd9f0e67c92f4ce67b5bf901b73356831f3e2bab -0xfc6a1e7577ba28bf81a7b7937b0667b3ef77b936aa6fef9eedbb962196ede0b8 -0x6082825fad1740cc7e03fdb06a92f5ddaece59527b521ffdd5d69f8182e15c2c -0xc6e44b2e83256b25fcee887a5876682600a58f3d76531a42cf30082f95fb0f2d -0x87c1a38a93e7fddaf1cd18dd1cb7fa42fbe5b9b6f187231545539ee117cc9823 -0x3969829f2be630bbb2c68e4505c975787bdcf8c06e11cd10ca288a0bb58b2252 -0x9e002885d50a1cf083577292482ff9f7673f44cfce9e323d096299a3f7d7c3b4 -0x34ee1939073795c9d138e24f8397d075e048629a1457f2a6b58c3063c0bbd867 -0xc92ad549951290385c65167ac6c7053501ddddab5816faef1ee03e4c8bb386be -0x68584d3a196d4569777653f16a857b871282be67bc312d2c55af2865cf8045b2 -0xbe89d757cada53f3ef5768fac5c89a8a6cf456c9963b389a43422161c4006008 -0x8a52d7a711adee88613fa67d05dba1b9855df1df3220132315cc908df0f8242b -0xd5a8bb33eebb554ce8a3eac1a9b5158f99f340e8e047e3b06d0b532d9564d8bb -0x0534f9406d067741490c49f729c1d26fc9c0872db79271f438dcf06b94ee3d1a -0x32c4bd9306241d789a4eab2f260f1e4aaedfcd309fb9c819db1ab0c3325cd21a -0xc30aab7b30e1c7d72004816d638d414cef9fe8af2e981b17367e6f88266ade35 -0x1693f4995345401e058faa61dc684c9f58cca776f67bd41cb19b03fadceae973 -0xce7395f63d9a42c0aa1ea39c63ef2f2978bf6ef4cd65021ea0b57c11b9f4531c -0xe71b0a469ecc66fcbf4613186e998f29d8fb4a3aa9fc720da00b97294b19b6a0 -0xe909a8ce302d79e7ece190d020b80e4607115c8745ab41b488f4fe920435c771 -0x46126c70110645adf8ca6c51c801d75f4c142f4ab04c4f6b7ce45a9efaef3dde -0xd285091975f67e8ef5161af4c5fb006ca9842c891d422ba83a37d2ad35456b3a -0x510810cd5acb0223debe6a70082059f2cbd3237dd83f0195645edb526599d8a8 -0x23ef7784abb0d6ff37aa076259052b75116827f67bcb60f67dc65dcf56fea9ff -0x900b2943c6ee4d669904433c29c30733a4937d298b8370bfad7cf4c20e316080 -0x05e45822d5e84bb2e1addb8120391835ab61dad7a207b4d1921e63f5268bc5b1 -0x4563d2fed9b773e055f7905c09acf8f2876e70b32c18a945dc2383389922b2b3 -0x511a6f2a030d0c4b50d616c8374a0929e67b01e8c5de9f38ff2e598d1266753f -0x35dc1dbdfc4369f21c147a794493c23138f8d4b0d18302088d3c50f21a31e6be -0x05abb368c4a2eac659b9038e1714ec23d9fac55d171b92cc8739529866100ce4 -0xdb7c12f3cc670229d1f9104234b43825aeb2c3bd9a0f324828347a49affd4d22 -0x25c9588470dc029ec34b755eeff3978bf6ee4793fea7a2b5a1ac5f2cee008e2e -0x6bfa02170eb580d8ec0157a43362a3ca1758be7a872fe606ad5102335835b450 -0x38f344579d9d12a66a49558891007686f5d7a4e8040d45e67bc586864a03c52c -0x06179c3ca09540793877f3382f9a89e6f19179c87e3e06494dde95e0ccdf7578 -0x5a0bf6f9a489f514faf7828324da222530db8499575922f82dde292f55ba440e -0xb4484f4333a5d6b49e56db2c9b6989fa3c315df9963b2ca5975f4b239c520c57 -0xd40c8997a1915c6cca7c1d35179aa172e312c0704b0d7ac6b8de544921934765 -0xc1c3cf064b484586db580afe2afad136852680b536c5fefaad57022e1782d45c -0x48b684648f45a0cfd28cbb94e369c7fa71007ade5f6264951002d8a773e72885 -0xc4f990796180d994af57d0393a408fc6e67d4e53ea2e4bc4c52d89ccb67ac8b6 -0xf6ef1245f3c3c8d34cad1bf980ce75c5b94eeedbc725bb3e74095ece6e2b9e76 -0x02e5692f096d8e91daa8649d1c3271a11216b44000734de6d1ccf5c2cfbbe563 -0x2695450dd04517ffc263b65ba7abe053c9c1ff0d22ce6fb0b76d45c84cd4af6c -0x142cd479f0ab5f57b2ceafee1af7aa356818af8b0d4dd84fcee9358533c1f020 -0x8a93f2d51aa29a8d1f2d567e6cca4609b4153e411b5eaae120172e1368229ee2 -0x6c7013f6800fd161c9ce5a730a13bb513089be78b35cfd273e83203f811ce84d -0xfd43f95800143e323365835c782024e97e5761b98f8a4cad1fd8191a35a23d6f -0x47b03ccdb2224f8d6be54496cde7dfbaa855bb108f04442157726cf29dea3706 -0xd9d54a613d7b7a0c6b8fcf40f867df3048a86330988e7ac5d3134c0a5a8b2e61 -0x780bae349225d1eef0e44a45f368faa68af5403d348dde877b1c4814076a03fc -0x090a59cc78069d4f041bb57f146e403e5cfbaf1e18721a3f953149ed362eccd0 -0x06b11cf6e824c721116cd04150c894739049c96af9c9e382654c24e9ea3b5093 -0xa3b05d50e57549d0840f7a0416eef8cedfd25af2e23b2486e6cd80207d862725 -0x79e8e2814e8962a3de0fe77213fdfbfb316874f39db426b6d3649fb32cc416de -0xe85b568e172ebfa733b40c53b2ad71a9d36b42849a74eccb841d2de5c3431501 -0x0197a34192cdbf6382601c9395109106ceb78b43aacf5c9fa2a8a97091838f11 -0xf4fac86ad4278b46a79e299463dcf9ed257a214ea41f840b4249dcceeac00979 -0x6f5c2cc5fe99bcbc7ca4c5bfa5f000720c9f2b6a13ba254ef1cc3aef44656985 -0xd6f59d4a5a5c0032d22cda2e668f2f875b01e67c06a63ca480a93fa25909928f -0xb25b234085f8783ebd788ff11df92b1fbc4aebf46d29619dc90675e06162237b -0x9edd1da8f666899e592973fa24e2d878376c070c0cd1f85ce5bad34df8c615e7 -0xc2e1ef9445dec61364061dc012d20170dfa3d91cf1c95c27bd2670bf73d64c2b -0x77336f14c157b873a8f3b51a4ea01c1cced72fab1f7a4dee5c7f6cdacd4a7c3c -0x8afa242f22f01c103bf0ad2b2258497efe4b685e20a2734cb7b71825767c71aa -0xc4ebcd9d62c2feb02b7f828e23e58269d032608f6171b7762745c9d5adaebdb9 -0x9a03ef76220d02165df52c86cd1bb75953faf515691867791aada9ceb4ad2f97 -0x2129a325e19e0f94a779eefc1dbd72008e135bc4e492508cc3560c23bb0af0b9 -0xa392ce1dd39bcb79178cc0c964c5dfcf891db23d5fac3ae67e2ca9f94d770e11 -0x4bfbb6b4b7fab745c3f0e79f49d80d442f76b7021936270035c724d2eeb57498 -0x8fbd075faf241fcc0255d7617157d102f51673be8662cbd8c189e404d962cecb -0x7ad3a6d15f6de4e9a28a627ae5392d3a2d0432faab39a1ff8790282c849ed1cc -0x537ce59d2a6d8b02b8b69a6b671d3d84f34be77a37046cffa94fc0ad6813ff48 -0x11dfa5d1aa16301a18a3c69fd2f4f32eb939ea796d25696a86fea70678017b2e -0xc7b8f871fcb097cc1d12ab48408078626d260f632bc4047d2620894c55c72cb1 -0xb392b7b3c038983d2e1b5609861b00a5e4c8ba524f64e3991c670c56e56400da -0x3492d43527ee85f8405c74820073cb4f01f44154c3060f544355d9aa515974cb -0x2d07301ab2250776e55931f603a5df2757b2fa8a037bb3cb4da7d36f6d524256 -0x50b1eeab1b1333e5d135871b431ec0632b950c8ff4da280110a7dd04e4bf4c83 -0x72b92e9708e5ce8a6edf5529047b15ee729e03d537fdbc36e8298199a70cf9d2 -0xe7219a901b68e89f1f1a09374a64135eec73d2aea8312368569c0e0051de4549 -0xaadc3838edc635c864a3fcf1cc1cbe12dc612b9ad454d62e5246d8c1c05ce7b0 -0x64c678e8ece193a174e74d3cd847792d307491aa2e71a63db938c1369d178621 -0x7ef70e4b67358f6a1d4b611f991612cebd371533e3923375cefeab7115e842cd -0x6075a293daaac7bfb4b975455922af5101f89bc2f6013dc070e14c507197b5b3 -0x06388ba82ec7f5ecf9311d8ae0a3a0d7c7b29df5ef75d060918fcf2a02980afb -0xca62583476ee8faddff00e9379837d6bc1e996f60a2c3b3ed18b18ca4925f9cc -0xec4977ac5da2235a15f210812dae99d6ef437fcd506cb61a30d4f1633901cb3d -0x6c1ed53100d2e1cb53ca6d42a281ce6c06ace1a805ee0843042e9bc0fb917482 -0xfb2697cb202d310e88c24b1aaec532d9261cf96271fdb2de132c09f97ac3b331 -0x073588f229a1051cc5ea38ef9225745a9005237ab9d804d9f802ee43f76af53c -0x5220e3459d18947c7f96c8e5cd7d3d01e650eb7d46db9ebfcdbdbc784cd25899 -0x264dd927d41dd725d9e83fa70dea89ed7a98ac3ffe0479353b667b9b699f9583 -0xdd8f9666ad625aed6f529ff478b4c6487c3112fd6c7eb6fa185fcd4bb87ab300 -0x6b12f767b186c064c6bfc2a4839754a3d11ec33b0041a3055b7e28d18766a1c1 -0x2759928681fa1e6bd367bd8b02d3278b9d02b07047092b110716dfcf748799de -0xdac3efdcf45794e54ae4bf8ad040a068a1d7d617c0eca10fa578833c8b0cfd81 -0x294f9bcfea636b81a3a765b5ee7559bdba4369a39ca31a824946117e9cd92580 -0x31ca563f7255d874a116995a6327e4744869a53eb5dbe970af4810212c8f6961 -0x35dc23f26319ea26ca909c3914b2f24c57fcfc72671340eb933028614394a8d1 -0x554ff140d237aaa6802818f1f3cc5e156cd639e3c15f70280cc5ada097674fa9 -0xbbfcc0aeb7af4695ae38420c1a348b21ad297275dcb64f07096d5796ef1d7dc9 -0x5162a18882ab5793dcc33aec245617c2e6b44f02b75dcfe85042a58ce13d2fd9 -0x291d3e4cf933c3e6dd63c1777c33d8492c9ab12cc49dfecf1ecea1ecf792c90a -0xd8b639a08bd05aac89e9b0b948a2c8874b17f86cb08f0e2d780aaee8a3d4cfd1 -0x9dde0fccd4c5aff81970c85c2c4b465cdaa28ee2782947a163c24fd88a48bd73 -0x662c62116280c63099bb7e813e1a6eced78580863734dc4243b8b0f528c02136 -0xa95206277a4247663ef15f409d8c2297509a33a917a0269af1c4320f422740ab -0x74bd66573e6de111731bcfcb59cd2f686de324475619831c90b2469c0c8300ec -0xfc220aca8cbf5adb7bb17ac20e54ddf725fdc73aa04bbee4ab1e2c4e227365c1 -0xf29d11487faac6588b3817e5af28021d94f35750801883ac4bda2834d119f7f1 -0x1d0086bb7ec64073ef97337b54a2f8ce782cfca9c4a3e88d6b6a2252b41c9789 -0xae58f202c326a516286d2f3b7235056672152aeb4c884b657df07fe48895b15e -0x70e995ea29a390da508880e19117e32109d751957ab5e68337de114de58e1d2f -0x79443d6a0430084a65aaee91cbf069547a1daf10ff1da089a8c8c26597049028 -0x47f03daf7621c0810de82438e31dc92914edba2aa329cb78cccbead5fdd33913 -0x27bb66e83832200d1abf48cc0b255823e7d98f3e4f63287ce42098b95ff9f7b3 -0x711644358b5a3b24ef66c64d057952195ed669ace120aea33d176439845d11ef -0x9951c478b25222ada41fdb0f355ddf386cdfa668dca6de653700de499d00d82f -0xe8f455e245a831601e74ad20a41d6031aa4816c0755dbacd9d50ca6f72439353 -0x41318c9a6629a53581a756c465b8e50efc71b105b822666b5e20e8ed35021159 -0xa64e29f5465af25755ce1f0e1ea6d971cd7263f67f3840501d424c3a3580b688 -0x092c82855c8e10ce5552e504d8960783b4a7b0448b97bd850012d0e5dc4c1615 -0xbabcb8c3b9e563d2a68f299e8542ed9fd5049d43251dcc0c13e3c2bccca8567b -0x718a632493d414129f159692010523cd88fceea308a2b57252f86e44f3bcfe98 -0xfd4e29bb3617149a4698211f0c38cf852c1ed947aac396d49b37bec8ebc72872 -0x3a17b5053a1e6ead419e3a04fabe8732065764062f16bf51c211cfc7a68eab05 -0x71fff843ddda537f674567a781e1b8e31fb17563b42f37e9bea86188c10ac5df -0x008d8e5123f846bfd2be18117924fe96339261291f6c0075bd3735ecb84727d8 -0xa9659e8405b8f803c505b67ce360524b84697c2fbf5512f879c4383ee06a1d47 -0x93ce59bb9d3dd45d847d10b89a3d10ccb34c78cb7049017e8ad225fc89265668 -0xc3f706c520703dd02d3699c63684239642831b1cc8fb9a7e9d0232f25b17e8b4 -0xcafee98b87c4fa24f428bf02feb111b022b1d08de8322c9bc744088e83732270 -0x332078953847066cb00b37b997906d2fb6d533806a11e3a4af8092c0974fae96 -0x4e19db1802048314530608be83e5dd0fa16cb7c7165ffd02134a91b42119ca77 -0x146bea888d0d16c173bc9a60b3826f4ed225f3f3c3efb1c07a5bccf64361b11d -0x84816505751778499bfe287a1e2ce4a30f93f3fb5a4ea2c601ec10bc36a9ed8f -0xb1c1949d4b4e19c5075044c13697cf5bc40aeaddcad346245abbd06a020c0a19 -0x1fc65875ce41a8d98b343398dec8fa631e09f25ca19ca05890487d0ba071cae7 -0xf94a9f7ac73e2eb54e7b17dd064682e1517b5f772e7448237e8adc36ebe83f60 -0x8ee36dd2b31bb52926fceb5a07a020395850c9c5ff5d0d7d7d4e11e2cbcbe898 -0x226288fec64576400561a046f0b32aa2c5930035cea59bd91cfac7d3b5cfd8bb -0xa1b5051f862f99b31d70769e35e93c89d72bc0e532181cc547524fe8b414bbce -0xeb57c71e1ba2529bb7efd5acb9398430d7393f2a600580bddd8ea155a34d4cda -0x7dd2104d65d5c5ae26c6c54700f5a333a67a52438649fe9d3adb846f6ef53579 -0x8b47514d61d6044d9f7103ce2915480d239682c24287eb89ed5f49ab6c694cb3 -0x0082792d201d5ed63162837d525de689d8304f472f5ea2ec64a016de7391e041 -0xefa8b6936d0583d2c07609aee76981f3ea536e67a21f96459b0066df18e086ae -0x65aaa34ebb20374ee039896bb39cf2fa56d87696b68ea97825c10e766f25d4c9 -0x73f93762df6dff132f620c290ad0d90cb8b85b0b189eaab1d6373878591f15d5 -0xc8d85fefb882ca79a8070ec324ca1ce5e738d9ae2e652c11121ac63dcacea992 -0xf6757739317f540dde83db44169301ddc378fc7db1db4916ac3e2f617ca45ae2 -0x8dc7645341cc27c3671945b4a8cfcf22ee38dccb0d3e3c3350565b9e62bdd59c -0xbf1964edfd3b2d2eabf34e9e324dec73c6c7e61da19908bf8b8ee832c7cd0526 -0x0b0fabeedb6eadb651c46512f0c811d215b51ff113992264a010dac75a194d57 -0x16171fd49f631ae99c9d3a048e2bec4be1561bf0ba7e511119ceeb74ba7c0951 -0xc81dbb08c032fba3d8ace59c0688f536cb915069ad67634d1a9644f8ef1a5d13 -0xc416687c9fc6b11b0ab15f73b8ecd51db965231ccc757b1cb28946d1f41f32b8 -0x27b83f9dce173a055c977a7836c87f3f694e68286ef73af1ae7032cd58cdc535 -0xf982ecaced2c6ba10964f8f1f570a4662f466ab743111744a4f59aef22072ece -0xc357efd394a39e342f19ce766e8a00d2b16160b90bce16ce8f4c03fe4057970a -0x61f43bcf037246351b87a9a4c41f8920c86ea9d4a279b4f3b33e4127504b98f9 -0x57a6b8c7bbbeb8d72d646d44d10414259ec8877a699871d69554f1ce28865422 -0x4c8c861e14d39e5ba602b73190d8121785d44252384d783d0d8d555a4f258141 -0xa5370840202d4f016ade4fb2d69b8acf86ecf3a642c8a0247b3a7bd86907b169 -0xcc15b42fe995a4462bfa530378ae31d4c60bd4e8503a4cd28e950755748eccf5 -0x5c9cc344d755513d080fc28b020855323b93898413b375afa044bc0f4f65227a -0x040f9d63ad830cd07710cdb95f1525ba7d9ac3022863d0e17ee682a40e43f72f -0xf822da1a7e24da0c6819306dad46b9e4637b3a84e3ede54f24abf24ccd81050f -0xc8043daa4b0365303247c4775874df4d77db16560530185a8b09a57d61274b64 -0x122a6f8c033e9a21c4ef788b25efcad74372e7faeb7b680842498ded6a0d1abf -0x7c8436c6bc34bbf351eb17bb4847b80acdacad0c8a81c9a40cd39d85b1fbde72 -0xf5957118b54d9d1b465294da7fe4a6f0ddd162084bd8ef68eed9cd2f2441ee7d -0xbb0041b8e9db123f7732c8c7fcb9853c1aa029a14b32e6ae663f1b54e59bb23f -0x75130899e8f1c51d65015c6f7d2c752519447232ba406816729e259dbbd22e0f -0xb2cc259231e409a3e3eb107603f04cf30ef856ba1660c2ca8fbeea84b45cd112 -0x78cf1db9aad45c80a624bf503adc4f82d91ac35668383225a35b4d34bf0b1b9d -0x0e1712d622b9dfdcdee97d3eeea0691bdcbb10013ee3871f917c8e6a7554e6a4 -0x2cb02dba9087ad2137131d5ebac3a237d75f719dd895abfaa7d8319070a91326 -0xb6ed0f0d7f13eac07ec21e902080c468f8bb9dd079d36fad76627c046aadd678 -0x78675657e63b94fde2df4fd4dcc5d9297bfbfd6ab67ec29d7a6f157fbeb744d7 -0x6c5272e8003336e24cf34166391c2421e371edfe9518e549b65d7f49e814f250 -0xe8ea50769bf2932b3efe64f7f513ab321c613619bfe6aab9eec5d75dea78df86 -0x016d01f2b4beb75267f1ea91bc23d009753f25db1f5f864f41b3b97d84e8ce45 -0xae831f7b0157aea3af4b700ddc3f6180429ccf4707d39d2bc3a13cf28486aa47 -0x63d45aafc530a56272591bba7dc8b280ed494f270443774cb257e2c9fb1af12f -0x4e99b0c2ed5f64d6984c66986111e3cea4dbe8c697c97ef4d9fe1c2cbcf5ba30 -0xafb07854c8f342ce2d063d9b350e50211d7c1fd8a832174c4bd317bac1f91d69 -0xb39d9e293377e560d3c5720c51699e8bcfc76eddb8c287bdc0e6f62d8e21cbb3 -0x652a0b685065d53cc3e423a0afaec073cfdf8d2cf87d3877a74bab9bb54800ea -0x3ef8a1edccfc3620b6c88cb5ca5521ec1a4da02f2d1cb317061c4ca3dfa46641 -0x1915279a21f8b7cca599169d2d0299d8ac0cebbfc0ac93c063f7e682e69fbfac -0xbe872c430e6710d692cd2ba4e89c42c6d9365b4fc4753aec39e52d610b1e3613 -0x76c95e75355a4a2bbf91ebd6178e84c5884fee0be94caa7ea0cc9de189d2f2df -0x8283773d7cb837eaaa7fdcea40ead46add87bb3f0b7203e1a4ce65372f9a60c3 -0x225a5b83dc8855ff126bc3a66829909f361c3743563662ae69873d1280133882 -0xc1d0c51452ccd9786dcb46f0ec695496f684e1571fabbab24d2cea4dfc2324f3 -0x1815d5613178ed57eb3220443b984060eadae0a4b353aac70cb83036a2bb8426 -0x4e9dee18fbab8d41a585f1ae354038f0eeca024b439c7df9bcc3b6205df44adb -0x1101416c8be3e42752a016dd60c369e6aee0a0c1b3e772a2e73b2d1c0364432a -0x62a9be2131518eda3a45f602a7f6e98797ce338344436cb02c23c3f2914b27f1 -0xc47e79b814d548e7546d9c92134382908acfbd99a09e07456efe85ba728614f5 -0x6d04a0cd9b8255dd5ac50e75bcbce1fdcf343e497adf86164e0b8c67d743a98f -0xec607d4e42b6bfdc0fb5fab2385667d6acb8a84f8d4afa1f058c89af87c85de9 -0x03ceb236549b4592e8ed7da8bf593c3885e90d78b0c7b52b7e41171f92a53979 -0xf29dd33bca2613909642dfb8bab4adfe1d9047d66ce9f7248cdafdc9b74d7d1a -0xddf92f3e4e1e6127fe3a976889726f7ae364f4b62f21fe3fa35b6ee6648d9c03 -0xbe5d436d354c0f6b8e67b6da821a41f352c4788280a8fdaaaa1505a2fc4b9a06 -0xaba39d5759bf7aa9e0a8dc65d154cb02002d7cfec016c4f9e090c04d22e0a3ed -0x84668e976927d92bf5e4f3b48c871daf25146939a86f88a0915d9bd04ed50d3f -0x4b9d9b18a04f816cda37b272849ab724cd7e65cd5bf02832ae098662cefadf4e -0xe942dd32694655f180ecc9351246eb6e1bf12d69d649167349668f970d8bf798 -0x22529ff27f8687e95465c9dbc2ef7fdc130058d5ac88e9640bbb044fdd1e526e -0xcf223841c9ebc9a8298239166173751eabb6e29826d979774fb96f5b7daf23a0 -0xd3cf90153a2d9208869cfc353655eb638e52b1627da4071b4f1105e5c87fc9c0 -0xfe2cdd37569d986daaff8e0745d9b793c4f7948c1d9bf33e26710d58dc45fb85 -0x1cd6abe80fbda772543b18f3b719e299e2e412b1dc383f7ec486a4323ade0553 -0x75463a7a7756af55e21699b81eab701967f8c7c78bc4e2b22de028196f231d52 -0x92d65e1ac2dffab4bc334ba0b5f903f144c3241ec365a3e10cbbd70c1c873927 -0xc743e606ea8f49bd1f0005d36b21bd4bae9ec7237d182ef1f93a8ce8bc88d461 -0xb29a42648200ac42da62b07e7400dd5f1a7a559317a2bd80c4391cc1e1347e32 -0xe41c25d479cea6194e2d2d07ec39620466442723c6f9311f5424b7cb1153af55 -0xf070dbc82a19c5f4b32c79987d117653601b4fdf7b59dbe3b19fc8048c54fde8 -0xbb0c09029d8fbee05d383e942cca4fad7c744511faafb7cff401edf13e5acc59 -0x8baa29b270ed47288a4e1e3140f07a92345e8c83fecc83883c268d0dc2c6a8b8 -0xfc25b17f418ef53b10d556847b5a0870431825b1549db394d05bdcee058d878f -0x1d69708e9fa864cbc15557bbff4a964a0d1924f1d297406e353d0091a51d58d7 -0x9317e380b4f1618beabb9a43fb0c5b851e1825c3b1764391396570dad60a60c1 -0xdadee529590f4b8fdf447bad5193b6ee696024cb4ed0cfb09e313c420b6be01d -0x9619c10626cab18e9427987317b55da27b0aba43d4d1cad01e3aa1f44ac16508 -0xc0fec4b5c9fffa3a30f4a8b119f19813cbe576bdff6d6dfa57f5e51256d7e132 -0x1c164262e27f5d39b059d53fea482337d4e24e99a3d8e439bbb6ad77f9f7639b -0xe371345365ea12ad6a168682027a831128db6202aa838296b0078fd60891b483 -0x70e852d2b54fe210a32b6ae65697d313eb4895acafef93089055ded1a9fea616 -0x692a7729df9462114e0fe47e27a5dbe4ae916c9e56eeb77f12e40943567fd280 -0xe4315c4a6e7a365ad2166becf98804e6f73f783a582832bb8ef9f552e0ce1352 -0xd8be08523ff778fa27afd3a2680051a1134bf1e6384ca82b1474b4ad71fc803d -0x4883be033ae5975733012daac2ecf74d4537b1bf992a2df2b29803b8ecec2cde -0xc021b1126fc83b8387c603b63ce6303a1df1f50f53578865acf9137bcbc19f69 -0x3a204174bb4bc25a7d0be0094be9aab12eec2fbe6e476f6084ab463d983af8de -0xb56878148a0a13c89373628c5fa88e272ffa0ae17dd1cc633dc97141c1f9719f -0x5d607b28aa1f407073c9fa1bb10aa9f9bbe7cc5f5a6d30423c8a57845903e665 -0xbfb98a36cadbb170db334d2a38d46a2933a986e9affb8e8cc9f125cea597a987 -0xcf59df4325a9ad300e5778e8fd546831521182b23ce2e82cd20914b14a7fab75 -0x3b228e955c71e6b8f55c32d9df3f03020e87fa96145248846c96384ec417bc88 -0x7a11221b7f32dccb4dfcfdb768fc487f7a9098ea76028a7e8e9b4133577fd8fc -0x2252250a1aa77a8fdb99e157300985c06f121193d058dc7cf63d1f1136e175d1 -0x61d4a28589bb5443adab9baf36cbad130be6f0c4728f3eb96e3e39a073fad5f4 -0x89795ed71f2ead350ced9f0f61551a90fec40b95b8cbefb00c11bd0fecd6b54d -0x6e9f8670bedb9f3f5df7aee7edc1f576a69580c5fd1ea0c8e33d87a6d73d7e97 -0x5b8d79026ddbdd26b23f2e689bc18be40ae682c37129b396511c860e82d6c7e0 -0x01a4f0680632fa3696f890660a602e150f5dd35c04037fd4e3cf9c1abd4276de -0xdf4ba6e8376854d1517986c335cd112acbb3c69d1010f2841b1f382a09c2448e -0xc4f1283ecfdc15c7d63f4c424dbe6ca73ec18879aeb7ae5e423f1cfbe7f045bd -0xc12b4ea00b0ba9956d0bc0e72c1bb6212b1fd246fc5885fbc4bdd15ea8aa6ec4 -0xe8903997783038f3815d8dd4862e84b4c641386d2362359a207130841f21d608 -0xdb69c69e6fcb29165d9715ac3d49ef2fd8c67cff917b4f3300ee33aa3092e209 -0xa3ba0a38405adcf9011ce51df0416f20252f165a87f031a82e0067f7dadd8bf0 -0x9d351dde1aa76c1ba7cf61b86fd105eb496dc44245e710994ebc59aeb104c2ba -0x0515bc1061b4c5f8731fe3c9141fcceca3bd71e58ae4731d59a1d60f0e86789f -0xed755360317d26f39652805050315cab1c3a239478e5ad50559cfe45e49efe36 -0xda5763abe2fe96f7c0bd442412825a687116d93248be18167c3240247be7fab0 -0xa01c4bce0a60bc87a347d0e63964a28929074159288a4e1e4609cbce9cbd2907 -0x087085f4f9dd669ce17067c4f34fe0071a0677c91efcd7a78fc75af64bcb862b -0xe1595c356a94f90603ac269f42f570c6f93498702088b4a0350ae964cd345e5c -0x7850bf091f7800ce3fb0f7c571ff44763979771df20109eede5359092e393b23 -0x6f424f769939e426269483752ba863f7fbc470822b27deaa6ce554509d2ce686 -0xbb9e7805e0b8425172193cb5c5d1ab5ad641f8516b5444581e7eea2095b7b028 -0x9c9765bba187a9dc0b65f6f69ee824530d9440e7e6202ff8db4ef869f435d6dc -0x9cb5e7e29d863e07c68434a5d8db26b70dbaefa1ad06f16f049f08922b480d8f -0xcd741cb23c0e4ecfd782a54ae7d074e452c90f7487ed461ecc6fd5c125e67938 -0x087e92162e65558e5a8681bd0ad6524896ac8baf7ca32ea1a5d4436d37665ad6 -0xa6e097d0e46aac242456be52ba528de95d43f0fab329e7d77cb41cd4d06ec6a6 -0x30874023db14cd8a6fc30b35772421c62c1dddcf47a386034af396708181b08e -0x0065b4b4d79b9cf7b7854591612b9a31f1966002fa85adc49acbcffaed7688cc -0x0412106141f24c9ffded07dcc6956213a6b2b0df704ca7743020d7023a7733e2 -0x502f997bf583f623db9dab4df566e8fae9fc8668569560f8b57c33e1ab9d3382 -0xcff9ff4446715d919f38fd0326d0e6ebde3172a6d906da27ab35e180af20cb7c -0xa8b269696e02acd01b30db7398ffb24cce3f70255562b233c80ba04cee22bb0c -0xfd4e3a81cc5655c308f61f63802aaf658b055bbae0ed6c5fce70dd551f0d3695 -0x9eb5d88b7ca11b3590865da52f50a6023f73a791c4890309fa83fdf03be1eb9a -0x069ce2b4a16d546969313a1c33657c62df9a29aa4332d4bd2356baeda67dec04 -0xa007d403f4076a00adc8dedd962fdd46f60cbd22155a5b7b3757224feb160742 -0x597c8eefd806424a925028e7d33ddfebd291df700599767a6a2f481627873d56 -0x472fb3aa44a8283e4c2f035eba0c492a2e0e94182c6d1a4bd54e212b84f7e22d -0x2be0792f6c39709f562f3ba2f1af2ba4eb45e23c9923b0d9d0899f50709f7f25 -0x3525c95069f1f89ac03cf91a0be197ffe1267f54268459f4f83e455711b30b3c -0x1a0a24d8b571f130f05c7980292c0b26eec971fc82daef60879d253bfed8e091 -0xf5b4a2f2144d4f95155b11d9bca4e54202d02eead567cf1e8f6cb4c40bd3cfc8 -0xe21060f47a49c62f048ad05b2a895a14988544c34c8f1e5fff5a7036481a684a -0x1af2a8132a63fe88278609318cb38b2990b90f61cde9d413c1d3830aeaab9321 -0xbc1cacc9cb5fa4f4f73962aab6490af614442c33969262de4301b557e04ea759 -0x19445c8b061febf7b28a533e57f2f5262e831b840ff93444e59f9deb1f963d54 -0xe869d0eb6ad4ad2d2651d707c9eee4398240784e9101709eb5618ed393eb5be9 -0xf7dc8b842f8df9a9b22ebe4c6cb9aba13985d1eb6b22c9011d8b01e1441e451f -0x9be8292b3e7efbecf1819bcd4053cdd529b633b8882937b08bf8c0be29e17210 -0x06ee1f675788a6a100f3b8d169d708825ab2cd9ae18ed2271d5253a866b9fe56 -0xc68d0f3439558dfb087f932580d6b2d80fdf050d72321f7bff654011a3900f1d -0x344120485950e59dce43bc6d0b28c9ccf0ba1e0e8f66d5f36ec12e72a4487092 -0xfd2d057971fa1dc77f58ec69ae5e44bbfa67c53230a6e7863648525806fa9a84 -0x64e0ad0e7bef7847f8f3d5c854af763dfee8ecc0e9359d3054839382307a100b -0x5559caed051a4465abc445351e35574fc14592292d8b2487b92eca6b4bd6a271 -0x0725b33741cff321e6855d34bfac60356285633c1889f748c88362e102e65faf -0x55ae66228cc79e1eb97c9c2f7d02f4ae0dd52a80f502aeb9b9a527b835e8d1bc -0x9436ccc9da542edfa620209903f9931cf75df4c1b21587a130a1c0c51354473e -0x2ed8e61a0ee5dd9d13bac8fe0e151c48d87d306e6a64eeae2c157a61c368721e -0x3abf943228aa3a7404de9d90d01fda3cde72359a726efd92ec5d0c4ac772a3c1 -0xdd792f20df1ef18585cb6723ed7dab5eb64125d978af2fdd5e767ee39160cfce -0x88c3e08af6b4b8d1fe26cf06ec3d7051ff9beeb4f3dbe631fbea280b823beeae -0xe5dba29ca9cd74a791e668c6489014b449727cffede7d2ef4bec471b5d11f68c -0xe24b207bb4db42ea68d2b854e2c76b7187e43558fd45916dac32367566b72873 -0x1f3389683a389dea5b18e99994fdc11795e3a11cf1503c0f8e43b06684d3472d -0xc6c722b744b93cfde933e227fa8588c4cf3ab72b7ae25121079348c27486752b -0x12d9dee18c0bc8d807ae4972ed370b7598de884e4b4b9e15031cc13ebafdf3b1 -0x980be079bed695da9de5e9111f4df0859eb3b509c8a0a97dc8f0e49b38c5bc7c -0x2f3741cfa2e371520539f6e8d1d137a408a57b2e6c721341a6f39e6c067f8c54 -0xa137559c6928a5edf52304b34647ad1c2abd6924dfdf1fda7fac1b0b95a407ee -0x50d68a53f62a3cce371b436364d55bd8b601324ddefc2226375d72fb51ef15d4 -0xffcd27944d04b0f92017f41d42f92b0e6ffd5e25e7e7877cdad5bfac6cde07ff -0xb3d48e1ce504ac41c47cdae5b9261f6c930d8d1ab442686bdd669feac1cb4bb5 -0xa4d8a1e12e140988cb3e7cf652cb92487bc3f7d7848f6b71ef8ba1b2995f2ff6 -0x5f14d48e34fed38692b60d92ccfef87cc3e5dc6f57c8c79fc9a82cfcb3f3f070 -0x43fda8b55ff2bf7fa9ececc9382f0349c9a99c3b1267661006ba4bd21cbe45f5 -0xed6b9c80b29a6a41f42b44f29e4bdbaa7ba33226a4ffdc0344dd64772a1372d6 -0xda76ccec150a2b1769da156cb997f77d30dbcad74bf44c25cd8b9dc17f2cfb5b -0x53fbbef7c47a7fd60d848cf002e50b63a9796f25df2166a1e6ba9d201ff06196 -0x7aac3a8ff0b7576ff6ef344fe86f8354dbc196c22d41b77a91cb460d1bbd4a9f -0x6e51f6cb16a32fbd644b6370ac2693d7aec1502051a219eead7986aa3f7ca424 -0xce98fd7101ac20c378ab2201295f7aa9590ab561497d60a3a299d869db5d8ea3 -0x7258a030a4f66ac0d35cd3bae69aa8239e12d32f0c23f62cfe9b195c15eefe05 -0x0271774417015b485ed159fb35c7034a6460950906d6cc4953356e170dc69947 -0x0376c62d7afdab8343a47c026f5ecbde353c02a6d23abb4ee502e6407f991ca2 -0xc1b55027eb63eb1119f43bad3b47940da0f1609c40ffbbfef787f246721e7f06 -0x28f79099f5cb32af861c9fc2986b3f243555179432ed6a447d3143dd62ee6f93 -0xf6f520b3895f67ef2ee946888b245de0545d72c77fff717f334faec3e4d10a01 -0x71b8da04e018ed7dbbfd4782ab50f9390f6a441b191dfbfeb1c573ec01d4ae5b -0xa90ecebe84336c2b04f7f0aa86b8682cd96058b3edf3f0393cc2db058a9ffef0 -0x11133098afee1250166f6fa0ff12e69fd64df333018a330f9bfd545029888e1e -0xe11a6c0f0a07394154d32c5995515fdb014341df099844cf04e550c67e111466 -0x3362793e566ec59ff286f46bd176b3d58dd6fffad63ea4addec794af56a8a626 -0x56dc9b26a7d4e6936cd83becd9d2a0d0ce0fea9c7692ca5925e5089392add3d5 -0xcb8d711632320c4a0e42300874ee43f70e99e47bd1e6d2d7b0b39080af422c08 -0x943ea6edb589258bc6f77ea0f74fe5fc82796935854b792edd6c66d6e62373e6 -0x5d6f16f3b0880608faee479ac19558ee7f4dd7e6bf02ac431ea0ed685e4daee2 -0xc7f616c6cbd10e9e4101ccda800c793c199b662d6d3c14b70b991855191fd0bc -0xb448b40554e118f8a32f2d58f46ac8572da51fe40eafc2e241572ca1dc479a86 -0x919123fc06ba006b7304fb6a6ce5f07540b2379537274259975a26d871d51b35 -0x6f1dbe125fe58214c3f8b9177da6be3d80947747e615a3ce58118318cc4d8039 -0x265ff1464a8a72757e6474ed4d58e47fb3c56e7fb3a30ad431f1a4562b444431 -0x44c5961cd7a09efb5b96874a18e6af7ef150b50f274995dc4924f8243b336d5b -0xe45ad523168afeb3c101b0b73f1a6b1002bd4e936358432df78c7eb361f71d4a -0xcf8628be8b6750b31a76900181e630ff9d462cc636214ad129ef0a0dc8766745 -0x3393c21a5877ba159faa780044ce589f0d3d3eabc8d7515d5215775a8401f251 -0x47342486c98043bdcf15be7e484ee74f9e56842195c6516ed1dfca41202d5adf -0x3914af4565cee4036a1726aa860e39cc4f377df7614cd4ab6e51b23dce685dca -0x890235151d863316835cca397c11fc27448adc3dae844a1bf6f67803c7a02ac9 -0x62c26999cf69d57e4af9dbd2475718ae54c3d718484399ce3324d1b267058398 -0xa6526b29bc5390f84fb5486aa4fb8d18fcd48318d28208ecf7e4d6836b6321bf -0xf5aef2bda6d9a195996284140da35dc11a6355da42297e8e0ad3e545fa1b0773 -0xe5f3ec272b762d184c8a2a5317ff0b5c915cd567cff64571534be31f0ed33203 -0x69b3881c62a423d439648ca74da4f2a660412e41bb5dda636b0b1e65944294b6 -0x4effffdbc8451fbe65e4a81487a2ad0bbd4b3de8d7c43906d5469db417f719b1 -0xc52b340c315f603f15b2f9bc5881d125757cc95d869eeb475aa0a54f80ba0001 -0x278f63f4e22a9705b9076614f6b7616d0b615df29d0445fd6900b97b5accca80 -0x235457eac7b482de6b7e5822e78d1345e002eb7837d28b53be22b46bc54489f5 -0xf767d18f5f57b9225932ba90b07b23e14f2f2f4ea1b504b86be291014a40258c -0xc8945f822d4b8c3585ddaf3bbc6e759166a98f46ad54b598d14362f0860ebb5e -0x47d3fe050962c84b7346d36293562ab85b634dd43d879abf45be68f12903e132 -0xa30bc8d9a22ffb3dad2496901c1cf814fa60db52c8736f7ca9e39564aac8edfb -0x091556914c34f0c679a501b8b680f39f3b46bcc356e8aa9a5a6d1817549ae74b -0x9d2ae2678e265ee46be15f10d9956203162909626464300bc6d8b349452e6387 -0xa0f2867971feeb0f5b0b0b51922027866b7a4b844cbb102f6d15ce8535fc8487 -0x7c3593bd627b7c448664753ae36107dfd545f3479cb05b820b87841497c2ef20 -0xbc9e1a3371bd48a167f3ae81ff43c421f72b5f44a149a6f59958ef97435d7a65 -0xf0bf40b54864d05f6b18f587b648abe1b456332213aa66ad3dbd610656e0cf6e -0x94758130cdd0c79b40cd1ec24009876875cb089e9b1b4b4d7741eda25d016a17 -0x8358c956d670d9b66af609db1acfb6728f728cfdd8ddf5f7ac21917b99885c9f -0xe601d07b66de426effff8f0461aacb90295c0f27b58225000ed303652a1a6599 -0x6b79bcd51292c4af0dcaa802ad11af18740a51186ce4078190d82d4b17634b41 -0x87f16ab1bd84fe6c43c6682338738a2d07c37d50947876056801b947a759228d -0x511f0b892681184d9b8d3655c72909724df4023a89062f6a2c0e154bb4a303ec -0x795f15311a673246cae3063085370240d9e4bf93e0a17fd2caee6566e79c7ee9 -0xfbe6857123c340194310047e7116551bf538f230516c3eb4b40d4f838dfda9f4 -0x5a4c192fdaad095ab2b75cfa4e5b53a01d866ebe0f58fcaef5da4f6657ab79a7 -0x3bf90cb1d3da1d6d47b01a91d69e3fe9e1ec95c82b46e533c206c8d42ee468c3 -0x3302f5834a5908b5509a67b746edff4f141b118a7b66d22f2bbdb8f9baee5ea8 -0x0ea878157c8fc25ab46bb9cac6a4da02701766a6f66a1525576e4e4d53b0ef74 -0xd8443dc9cfc1d9175350f10b001807f3eeb928ea316c38ef6494fdd3d6dfb417 -0x07b40b0a9a944e58c73f4409a7ff24519c94dcfba678fe262b07969d4713226a -0xbddd8ff5c3ebc4a74ca16df4c13c2b80069c5d223c07c9ce4b2979bde51b408d -0x6456fb88356c7723583aeb622c763cacbb2d777af9bdb4c4716590081c845836 -0x38a37bfdc7cfb19896efe8e663958f1f9449e217e11abd76438499bf0c619b0b -0x36d7db2f3f0dd076ca4b05c9eb11db88d21c3f4687df7ce0e82818af54fb9b86 -0x7c8ed11f9621e3b50d424020491b7ef3bed03a7bf4cd533758a23280cc24ac23 -0x9577f7a5814b8c0716dc2d7f95038d1944b6ca8ee04a8f2bb1c77f69f2b0b9f0 -0x9524c9cc96f374a457efc5cdc37d446395d2288780d43f7e9ee37bc992920716 -0x3c0eaa0dcfbba53bdd4d81774c6c4dcacc9ddab816d3a010c415d57d18dc40dd -0x860ff14784e9c2ae5ba2dae752027b536399bed58ed1ed60677a3e4dc15b8daa -0xb41d75092c93d48f7a0e0ccf68e8070020bab22431cb94861e9ae5943ba590c5 -0x0bab8ccc09481c2cc8652be8dbc6e08b98dab553ce2c9492302b14bab16a3aa8 -0x5e6446a205d2575ff194589f786bbc27d46187c59b4be3c20e0cd0d077da88e8 -0x1658c87b0bbb422fc0c4de882b14df1f9777f03a9cd20f7508364fdc0e68e12b -0x877e769c935edc60865315d50d661015f24b328efeffc3851af30ef7c80faf9d -0xc8344a494384beb35087fdf20f2450f72a1f9e195ad517330efa2ebc3c8b8294 -0x6a4f82213d2a220ded10f84c17c1e587388fdf04b7e5a57159fc97946f139cd3 -0xee91c73e5ec219f93d4842a6f3361e1b7223304e61c3fe4c5d9349b52a7eeb5d -0x7306ddb3fa81f76da8135fa3cb156ae210293e5a43bad08559f2d2d829a13610 -0x16bed7006f1ad4877d84130193d77ee0db7ae2f9837af8cee637b9306ca604e9 -0x4d4c582e18701e4367d718547ca0e529625285806211605554c3847c60d12c87 -0xa91b765282d7a802f4285dfb678d635ca36631b8e54d87a70e51670d66803bae -0x980cdb2458a0c83cc3d4ffad515e1a631608c8a2602e657402afe583202698ae -0xd88c0ae6b40381f6300fd06d86be4a320819dc1c6b041d83c66b52ce06e91fd5 -0xf9a2110eaaeef6fa4e9bf4e31106a4e99dbffb299d944d535f627c745294cbf4 -0x57335103de35723da43b66cd637bcfe436f9427630b6e12e4eff32c70d4ede6f -0x8e360f0079e15ba8ebac832947a7f3340232644721b096581204262df6fa4fc7 -0x45112b0b9fa01ba4ca1117ea2a792352aa012ce1e4249fbbb0e53b9c72106929 -0xbd71ecb66a51f6fb1b98962959e8810b791acf48e57e52d0f0fde333df85e58e -0x937696190e61272456dc295489ab00ee6ad8103a122184bc2aa636c2224b7f17 -0x4b76a3c10c89275bf5c93022f17888288e53b8921f9d30db031fae4f4dd5ee3d -0x5faeca737cc6ad80f9e7731a5e24da5684ed2c0cb82763bd211651433be74cf9 -0x3f19f48756d19aa2c15ca39b98dc625da5d3e4a9f97931f5cfd21d2f00e67e6d -0xe0c5393e0ed7150a98a1cc21a3ca092d1d0ba878aeb375ca1869086f710207f0 -0x4446946af2cecfa87c31793059a3efd777a7a1c13a9b79dc94edce6389f02336 -0xe4e813f9d3034eb003c1cd2892c1b8b18e808f9b6081014afe87f02f42944277 -0x4c3c467c3e43a7ddc34f795f55a9eec05bbfaf72295da0a66f201dbb0ddf86fc -0x80ee75982d71fdd3e2bfc5082b469b3a03144080450a9592672e9431d783cfcf -0x0833102393bd67563c6f7eb08ee95d153317eb4764bda37fc034cc9055773438 -0x99896d897fc64f0e02087cdf2aa510614ef5a0845243a958fd3d65c09d03c666 -0xbf0c075a719b0c002003ce2749d24396aba3c4d34d3c6583e27152d909868828 -0x6637ce368fd3beaf61c125173aa25e8c5e8a12fe78c750877bd7a8c34c019bb0 -0x0a340096fe5d731f6333fca06bdb4478f4c4fdb2e14498bea3111097e9195fb1 -0x9271b1c52577f6a72ab50f23b38bc19af1288c4ddf840b4bf314b7ab405d3005 -0xa4a7ce37df0b294adcd07d0ce4b308f12241b30fdbe8f3643d38f71f3c04e3ae -0x43574c6ed1d3ce5c61d8f95d4ac6654a4e113e7f0269196feae26a870fecfa62 -0xf224b9327a137015405ac04e305b7b90be8c40acb0a100626affe75f4008edd1 -0x839d88bdc3101068369621dc6d1eb72c50ceff820b02d69e7c3c7d6230232539 -0x31a9709416e94c86193357e649d966086fe9af6d1ef4cb36567e793a21826adc -0x60b68bdddc2864d1b36c0acf3bbd224b93250d84d39f26c5e3aaa32cb9a35422 -0xbb20cd599ec7c3ec63a59e22f2477eba8e133be238e65ba563fe6793bf75313d -0x4b527360adf0e692be9933a65f77a319ee8795fe8048397dc34792999cd39702 -0x0da787b3cc8e0500568c56f21ccf0cb95eaef3c9aeb94bc50598f025f1d5f83b -0x33945b84e23b3d73b6ba26cb6f90a84387b339e3f32639b6521e2127b66a9987 -0x3f0fe0f6641017ca146d7895b7bf2e7aa39812c2760de9bd90c20db5c321e1f1 -0x19f8aa979bee34507d4c62b147b1fbe5454b4cb480330059521eee87ed8c958b -0xd6fda7b42e537f7094ea2bc7dbff0c800da2ab6162857a06e054e204cc61531b -0x839180bad3af965eed82bd5240285128dbd1368066af0d38db60d0a208a3dae6 -0x3e9ccafb9deba69e4d4a41fbdf963283fc19e6a9d4ebc95720df8115c2b7efe3 -0x22b19254eb0431bb24d86b87ea680041415326a9c555747437b3463e26dc2604 -0x10b9307dfe0662ba5c0128152441d344ebbdc70e502adecbc0e230dff84177e7 -0x1374532c02383d41a043fa887c04f71d70058e004a509c5876ce1746bfef28dc -0x2507e6a1735ac0825af41fbf2238932d078df639a24eca80635dd1db306b91c1 -0xf4e8096f2b335e630e72c061d3a4481ed476267abbf28e2a4f3fbfc1115171a5 -0x8c34f2d81f93072d3c71371b77d0ac803675b08a60dfbbe4e709c14c46d163b1 -0xe525c1f82dc787f45ea0315c55b30426a5d4f8b3b6e239eaa12384c66774a9b0 -0x46336f1e5bf3485fe0d269e418d16b6fdd6628e0d6ff65fa8aeed88ebeecd327 -0x742a037a27a6d048eb76c84bcf9c57199386897cabdda718008280f30e8f360d -0xcd93d31d86f4cf9307ebc6371eff3b9107d73d0b07b4ba06e329129f27156347 -0xe16f9ffb4fb173f95a21f32c895c1249441f7ff40b0ed9aae79ff20dc9369870 -0xd1d548b953d4ae77c991db3a55c3a6135a1dccef6768b45ff768b1aae326c57c -0x13ee00d7799358b4936de20acefac63ca48d3011e87f8a479bd718aed231eeea -0x44b759c55f0efddc02592fcc5c5aa0af06fdd65c63de741732e323e365b79138 -0xf0a90e1350efce9708857669fd2cb6d794a842557b2eb9cacbdff672a8845b5c -0x92f5cc25b1066242f371a59f4e42aae05e3dc4dff4a0ee7ade29fc7c4cf30994 -0xb6e570198dd830154708bbebd509b31d52e913633b23ac07c602b0b58a4a8d6f -0xd8a6f06e972350f0ef20407b26beb325e76dd3c60cfd2a1b350b5d1951e29603 -0xe025b3d2a4e8bd8463963513fd98609701974cb3a542d2240cf9aa7640f03002 -0xf3f1d3f30b7ec47da5f242a47c786a31390186d2e3e1e17562965f3b3a83e269 -0x00b59ebc4611d1481ca61ab03f4e55efffeb49736c5bd819a5fbbd5f7c3c2971 -0xbc120a6c83bb66c04232337175ae11b6db12bcdc459e7ff3802e7eb08de76898 -0x8b0419597ccc49473507f67d057ef4239c245f23aa259650e469255e9ac0e0ee -0x543121410121f28e80ed8e35a0ddc3fd022f5ad643183ab132a8a60d3cc1cd48 -0x196a60eaa02105abd1b54ecd0f7bff4200c428f44d3193334ddbf2f7f0a95c43 -0x2d339abd07e559943f3ee884af2bc4a9703ca5d1e03fbd9d2f4f076f2b292d39 -0xad06b0bb4b7dea09cd7656bbb4798570211954a537872dd5d7d70c6d7e644370 -0x00cd8495e94475ebe4f0f6d99b9c175b2f0780835d86ad7404d1e5c5a70555b8 -0xd103f2c7efb8ac08c5101e79877d052f9a64cbb31d4b8eb364cde0b9553c1759 -0x28be04df00345c09fd849f5e53db2fd53433f79833dba4a92e0c403b54fc7fd0 -0x540eb44d5215a225307b8322db9b8810844d8f56afe5a6753ac4e43cdf596d85 -0x9795b2b00f2a6213d04e1905500daed32464aa1bff0508f464e92faa37012928 -0x8ad14ea4cf108a41b87aabe01668a70636bd0d90505be0e2533d907bf78f6757 -0xb4619590cfa69ba777635bee8758e46daf8b331491f21bb36c4673d083fe038b -0xe480d6a5d222e1ffbf92d8bc71a4e9162d99f508bd3ef5b870ea0a2b9bbb32b3 -0x7194d06cf4ede810a0262a39715c3a6dbb3b52bb9462ffe43d4f3ee56314685f -0x8f59ae456ea2c23fdce4ac16daafa119ded6e1d6b69e657f8d4beb7661866346 -0x3f6fc381047e7ab933863b795b524499eb16352859e3f205335bd8743316de08 -0xfd6cc35848a5e50a1f26ca874ef9fa0e1c04fb88b6996f02891f8e6b9e5edc57 -0x5792e5c55dbf3228182971fef867894c28abf2c49b267f3dc8279e9f3cf03425 -0xfa1525a30cfa4fc1ec7bcc8f20694f0b3bbb8b7cd51c9809a9e7fee197fdb00f -0x06147579311ae064263805b72d436e7451d868a70e949270ecb0348946ed72ed -0xa3d36cc80af72baeac9b5d7ddf92901362f08bd7e69d6c8bf4d2d0e11711d3ee -0x3d8c9bb1b77f84c606534a584fb8e6c3071995424bdec0dda0c4ab2c0ab8dbf5 -0xeefc53c88cc052b14e62369c8ace0020ab4935acdfef4f8dc35feb168588d2da -0x54a5f37ae1065e82d2063e2ab1cbae17667a26e20d36da10f16111ebb471b78b -0x7ee970b17788a39f82e97580e1ddf18a396eb0deccdcd46e26ff57b8f672be83 -0xfb25e4343a811b88f7484e0d91d9f46074a9ff937f7d377132f06f4d51af3f03 -0x61029b425910c235f87e3e0c055d5f41e04557e0ca75ec47f57c2cb2a8832ed0 -0x0ae5f387db015f3cc4895e07db7ce9d05c9bc034d01b6a021c2f43c9dfdaf82a -0x1b328a58b81cc4e6423d28cb3af8cd661787c8f3e5f4d60b2b11bd934f177b3d -0x170d75e50664b6fad449286c4a242953a549b07e45b11de28b623b76d398df34 -0x805659be3904c45b5a177fc0c3519db8f30c60116c2ec37d58ef27499d2ce452 -0x8f83a3a2955674d42bb76c0f6cf362f3a2c5a2ad325f9ca44053bcd38fa78980 -0xdd14effc3e960bcf103e8d92514c32dc8534e7296b2585a5041306b388cdc793 -0xb60353ba15a69a953af461d4668f7a2bc1d5bba39ef1e7a35b60e767ee1a54cb -0x7b32f17a63ea67c6fa7d909cf3be816c85f033374d5b556402d4382f861cc5a5 -0x254d8a115ca0895b78078382468707e92c24c662a30654f958978e3bfce23f8d -0x8745a5f77a426327bd444cd931f1abca1ba461a7e6951064f46619ccefc0751e -0x12a1dbd72ce6c5329955968fe9cf0f8acb68dec795ff30faa0e83bcaf20b1d8d -0x879eb4b2428f219ed7a9f259440a4574911fd04eee5fe0dbad45da280604e24c -0x7844f7fbb08c906178a93b382659cb9bb8e8c19cf1b8ab9e642599f1b827f010 -0xddbc8bd79dee696274bf683bbcbb4511c9fca4f29389bf173cc97dac2e349c73 -0x759ce92621a6678f1d8a0ddd5a6fba8a8bff5d69848e132a8c307f63d99b4c86 -0x1dc4cbbe6449f64ec85a5e784bfaec206fcbe45066eb87b2d86a65bc9fcf8a4b -0x7e3f7af1bbf8457baa8cf5b879856843f4be815ff8d7ff458efb8664667281dc -0x8e304f7e75f767d7956f86b18b08c7c7e61d4bfc91c0c4a4c1728ed18e74563f -0x5bf9e1139242ea9091ffaec70633c1e4c13afba3c77ab80d63a35f3688070e91 -0x5642b866a5166bf334c7f257cbe6a4d892831800d48a5ad87d4c0449689bb25d -0x10946272db899bca00474cee59dd53bf3dd3807c275acc9edb73aaa0095cdd44 -0x4450f5c3d88013a565265e45706faeb6b9ed11d8cd7078c67638482fdb4c777a -0xee99f6392442701a07b95338d585bbdf2bdd9a04134d5e7ea50b1a86e070fff1 -0x6d4fe1d4787324573e4311750f9e2e95f1df865725cbbdd92eb5fae4a80ffb84 -0x90c1bac850c509b988e37f12970cd9cebb3b6e62b00116f22de5891a0290cbaf -0x02e6466c6303619ea09671f8630821ce9cf393c8ea9c2812d7638043693b4fb2 -0xfaa2f11c520968fa0a51048919a017a2d38301ae9ff9cab592434ee26c4f2724 -0x4a63f98e941797534989ac40cf3dfcd1fb5618c74ccb2646471e55636895ec81 -0x323ca01ce312cafa09236ca0c5c9e883ab8da3a83811512658ce74d6239abfba -0x7aabd82f0efe3d933599bf38ed64f523f055a8cfb6fd30b765719725d289578b -0x74b506dd67deaf83d97df14723a2385b5955d0c299d5eb956c2fe06fdac87532 -0xc853c0ef3e2345b5404b112d92ec416a102913f8152c90404282f8b7a1a29393 -0x8b785a2484ef2ac7957644892736dea446b476eade2f2f1ffaf2fc94a7d6d133 -0x4a68e91ca628ae60666e33a0681ff5eddceb6aebdd5e8a2979d13dd885fe2ec5 -0xc62412c39c85fc4be79acad560095e6d3170e9ae27848d7d0686637944195985 -0x9bb3f97af6b1db74f86b81c32bb58f7be5e87aceabbddb60a2ed8742a73e366d -0x3e3c09be21b0541a493e007278641fea2049080a68becb098f6d09e1d21eb9d4 -0xd54a4e8a957354a3374f0c1083f45bc02362cd19f773e23a2c598d1ca754b4e8 -0x90beceea4c7099c9d21dac5695be0bd97e33af30e5ea345747ae5485faed314c -0xb27dc64afaef4b46b5526bc3a92cd8718846f0c48799de493b8c3493e3e3393c -0xbfcef034437e559052db108900c98b8357d63646403413cb2723d3f5a85fbd9e -0xa66282ec5ffc77f78762c80ffee57255ef38a232a755060ef3260fa611025739 -0x7ca77118b3f4230b9c49d3089ae51cf359788c747477ef3238f2dc89f6c3ad47 -0x4011ab5e93e1fad958b6370153c0089012fe36baa1a211e6a83f037b4ab5419f -0x721f3298f73b545e9996a1ee55dc1a1ca212855a03415aefa047414b207eb4f2 -0xe53566b11ab1d08749d6fdd3de4bbf3b0f86d605e3638aca248ca320aa9be0e8 -0x82f0d30508e226b0c39f44da19a1f96d0fec8a89c4d08f523f7216305a12595c -0x0ae16c476cbe80572a4e07e3391ff6ac193d0b30ce26da454aabe6a5214db402 -0xef997a1b581226ce0bcd4335aa9e8d23b75625d85c2b5e3a52ea0ca9191d59b5 -0x58eb6ab9636707a771b3ec6e4f7828ecef8349ec84ac19522a8896fa6bfb6635 -0x1991f5eca3dbcf89d6046582944d8e34f194fbd066a9b83ae62234cbc89b4686 -0x49190b775e947baa907038b50a8e25ccd2a30cb5efb331604d3b55ad9111107c -0xa775a5130275dd6995a4565fecdb40b83d6c25fa9480a98e86365984de66e5e1 -0x55c664c37a2594dcc65b2b9f2406a6ceef57d2b6019070d1fe9fe7f5220e7286 -0x3d87d0408033ead78fb5f4ca8d931564ac9135bf1e78cf14b4b6348a0a2bfda3 -0x43263b22c5dd7123e0390c1f7d584d169709a24153d575376196117fc102f812 -0x889088e506d0dd34437d869ce6e777775ffffb68de430839869dc7057f642c18 -0x6f0dc838192ace2fc17f03ad8f5e71717031098aff50f730a86d0e228a26a016 -0x3af5a9448a11f570bb99d5457aadcaae9c4f4c24bd9886428e3ea16890ae4e78 -0xfe355fe2b78fd2402acd2b58a333af97b207703b85c585266196793c31fbe66a -0x50ce9a2cc415917ad58d34f2b54511010eb5ddf5bb492a3e2784cc1fed453bf5 -0xe26a4096faf2ab886d0b35d8e842f32086353d1caa52dde6cdb9596941ce358a -0xf5389b6b056d0792144340038aa5a731405f5edf2cec48ced49d094a33d8a2bd -0xe2a9579748f34fe7d5ae06bf6e78dc0af1a36776d2fdf23d0d1e34ad5ba70c75 -0xf02ab235f2278b21f2e505b3d58ecde9a41d5ff57ffc8ee2e1628c7e53802b59 -0xe86b408548c72a0106339204004add6a4c9fca5a9186473a3526f6f9e6d45d47 -0x2f669ac762464cce8f030dec483c840cf686eacd31215ad092ab923dc3465883 -0xa8c8bdf183ac9287ddd096440f14f10b4dd1b8f9590c8ba03742c288fa1e991a -0xf1d2ac0d4b8fcb8d014cde6f700cf3952344810f597e9fbb0324c114435a86ec -0x369387f0b5f9be370e041b12f0994439a367b2bc8dc31605407d38cc49657eba -0x05e98e88d7a8f120762ff4bc6d1df95f57fba4e177cb93ffc242d041e57bad02 -0x3cb1ce6099794a57814fece02691877929733e94d68a852d79a473d5fe06bfee -0xd36fd5332e533d4f7847ca87b6d835d757ddb5b457e5067657d9e9578c8ac793 -0x38583a789f6d38429f6c9ac009fa35366d6c379354692751226f5258d8ce2e52 -0xe2d660e646c4e7fcade1249ca12d553ce63ef485604c78d2010f4a2b0834dec0 -0x363f03a31dc6ef599ef43a48aeb48971194ade85d8c592aaf5b1242fda8f53db -0xaf3e122f1607db58daaf1d827c6456fbcd3121388f1ca28e01e8b570c4844256 -0x1555390a5f4def1cd6704d7be4a26653bb432d5adc508e1f672125f0174ad07e -0x66b19d72477644e78aac40513042f41f3f8b7bf1fa5552a5f402d458ebaab1a3 -0x867910ddc885673422d59c3509d745bbb466fde0152732f6034acb8e0ac7cfc7 -0x391d05638e32c261fd3feeab85c0ac1bd41912cfe95200b58032bd72416e889f -0xb4efec631fc86a54449ada8203888bf4fc9ecfb8d94bcc4175d0d9beef486bd7 -0x26f46bb7b7828e72c9935f9d9f91fdb47d992792ff389aac76a9965b5beed05f -0x2d89a650d1cae08d5e872e854ade1e1e770ad0e01913f3136d8d6f71df040db7 -0xdd8937de627e6e16fced01110f7e60c762bc4527bbaa153f5227b7a2cf25e71e -0x82e995757296efd24a5291f57b593e75cc205af57b7249aec3a1f03571e89198 -0xbf368e6645133c318a4f1860a1a98285766b15ae9b0e09a059d61271a05c1e43 -0xf5f301f2d9563296850fd252152c46df92e288142a3c520010e9f2bce6044864 -0xc798b5b0c7fbe933064795184065a4b7784f35cd3bfdeb0a4ce8aa23e2f67fe4 -0xde0168addd9dbaafa842c2e3f5f625ba90c4e3b94c1dac9e7a06de7322be0093 -0xeb468ca0a66d8a75e43dda2a287b4ace6a793d6d07734490cf0ecb0e088ea916 -0xef50d115886bfc6b5f20e3c1d79d6fc62816ce3552a23f87141b370f36d15162 -0x5b5773bb9b460d766c2efd568c47dcca6641d9e69964fcead5e3c7baed4e718b -0xe80f0c2e0cba22cb185ed0a234e3852ae1b20a19b310f99385f51f3caced33ff -0x73a5297a5f0c4fbd2193b23bab461fa5188de5eafca6a684c7df483b13c792a6 -0x9f595e9c6d523fee268983097c05b96f49c0f813d1afe1c7b35f859f2999be8b -0xe6b31bcbb59161e19f844633a9fceebff1bb4d56e1a43809aa2441c7725c4fd6 -0x9ff1a5ce04880c0afb2b7219915f859c6eae58501c34d1f51be90b372597cad7 -0x1795efe22cda9091ff551843316b27bb29402b17e7cd39a0ad55b3bcfa1203ac -0x2cb07f9b9af13ced5e90dc296f6cce67b47f272168b76d72cd89e56cdfc98a33 -0xcb841d354fe8b150d0a8da9b1b490c547e44932551e752fc9c97d2ca3615cb0b -0x37db1ba9c4e0df532ddc7c7901bd6087d2c6497f50c12fbc9850dcf2991b1387 -0x0e9694def11bf403b99faab4df294390e0d48d9fd08c6f793bb92ebb5602c509 -0x4fb75b1075bc08436b7243f40f2e75827012a5cfb92563eeab580dab109fada2 -0x3699adc1409ef910a9496231903f51561d6fa8d5f8827d74a2656ca0c2b46667 -0x7e2e35c25d2a00eaf6327d7557685aea4a2dda0a421995d029763eeb3bb2c13f -0x283b8bb8bc5fff5ac97939d3d5bb000d89ff913b8f39190bb5f719e3844b35c2 -0x5543acd2844f8a0049099d823cd3e2bbf13bc18f7eeeb1a96eccfc7988e68a0f -0x81958364bf0c8c855945d8e838992cf0ecf4be756381e646e97a4f1e13fb67a2 -0xeabe3f51d0e6cf7e773ac2122c11d8c1990cca8529edac484b7d75113e01688d -0xba9c7709c348df3c95d4ede981b0a910a5795c317cfc229f10b262a82b876547 -0xfd97eeb1ff4280fd8348f91f7c5e37dedbc2ba18fbc08bba6b77f137f8edc49c -0x17b5448fad52bd450b889bf27934cafef7233ca9c417f3001529650a81a83aa2 -0xef71642660f70af8637529762acfb39ca6b87a6261a09c7acfbd1e81510f193d -0xa8ae9e0fe5aa71faaeaf2c5deb12ec5f672bf9bb638c2b1df31a382ffe21c003 -0x153c2047334cc4cad877a5130f67a723635a956440de9d12ee92bcc1351dc06f -0x1b27cfff374326461fbd76dad08db75876ce9db9ac0b8684e29040e74e91e7ab -0xb45c244afaf477bbf6fdceef2a48ded39f8aa18f705c681b94a04acbbc437706 -0xffd2b2a74c24081228c1c07fe8f9fa8ec4a03c98bb8cb52f3d38fe9a96b3cfad -0x7a1bddc936966302b2d17bbed107c27da2fc309199a350119d508278d7bb4502 -0x5fb59a77bf33d04f012e4d85770bff5dceb7a44492573315c8be0fcdee208d01 -0x7933680ecdf1950e4d01098cec7e6cf0a9f615e2eb80d29a6dddd8e5ead835a8 -0x35b654dce86a79913eca1771abee03627460793d42d9c14522224c3f02d50a72 -0x935825717ab9911abb7e6b768b20a56d53d0f29bd9250e9bec4e09a0f7cafe6b -0xe22d1eab94d250725c6e16ca074a989358266989f6fc7fd32b41bf6e690e022b -0xdf243f31de9028277ca54cbf505e6169a04bf1502b12d7a247d811129096dab0 -0x707987d4a36720c0499bcf5f146596042eb2f9898259f837584dd7d08249a8c0 -0x9336cb837cac46c6072068219ff09504407ff6afbd5600bc5ef3038c8a94e397 -0x2e2ffa9ebfced3f84c681595a13c3a5ae75aba6529992976f940cb1b810f619e -0x31c98627335dfbfa136e696a10d490176d646dca2a885f0f46fddea88ce157f7 -0xa19596a4f103b775c15b4afbd5fcad958587c8fcb1df5aa29cc939898d0a9a2b -0x91bd5ae888f078e711dd492b03980a849e6a78e8dd20e13f759d3615f0146649 -0x497f1a0908ef2c91f29e6b26a110db65b24f2c2e9fcd35805ec87adb6c651357 -0xbc409c8b3de209612cc453c9fa855fac1f7856d0e259addbe512fb4c681e7929 -0x742c273c1a59298f5de85fe507b9b387aabdf95ab0388e879e6ee51dddbd3359 -0x79748ff0c538eb29570d783b5ea9c4a0ac8d2598342c185c82a4085f60af0efa -0x7055817faec939097346eae8441266ca6cdc034bd3e21074d97dcb3562cf0488 -0xeae60fb37ee16b70304575dcb542ab2c0b760c0570dd79511d6757b89004690f -0xd5f9005b8ce8665f6f1f145a9373a35b382c0fff7c8ffa08b3c6db7d4f538f8f -0xd30be919d76851b7b257e601f6a7b1a321ce5ac9165e5439b4cdf5ee06996794 -0x72cb1ae8fff4e3ece223c811eb08eca233a440e2d308e989bb49f814c8a29aac -0xba080c694d6a788c7d6c3d7d73a8377fa533579ec53e14dc7aedaa0b5dc1a9e8 -0x5142697518cebcd16f85fa62c672f704f928860eb26fccc1317adc3ede2abb7b -0x6826e3a0787d200792875bd470ef3bf8fbc6f9cfa844db2ef932365a40c75a66 -0x0a8edb8d63ddd8cb582af64b33e24eaa6ae6d7de5db728e4bf33220bc7e454c1 -0x50f223a3ce195ee4cfb51851acc16c63bd6669190890ce7729bd4e4ef578273b -0xff603e89989fa66e76e5df1316426e16d9ee2fd5a0f7cce4f83d424345db878c -0xe5bd5dfeff9d7c4413cab126d95e62a9c670c1ec4667583e6d03e4c4b8039424 -0x4244c7bb3c5e264efe3ce49f1d03f9cc0451b3dfebc90b75183dbc7aadc96f7d -0xaa4142c3097e5523caccf98011a428b760e9a11b079767e5d5c8691c5b299202 -0x575942ad4d863dcda6ebe53d53265c31f11b7bc5a6f662b0e31b54acd5a17252 -0x30e667f272f241d4be3983ae90f1c7fdcf6c4c89c8905f1d043102c0335edcf3 -0x2ceb5fa57ffe7078ce3260faef041c8d62e20606b4d5b3e2b21eaf0f3e0e0287 -0xc5fb63e6a24821e063ee2e83350805d5d782d7e88761e37e2aec8078eedecef2 -0x0e9d9c760e910697455ffdb5a91a19071ac3569988c8a467dff07d5d4f6b7911 -0x78fb49b3ee73893d30a1044afc735b124fcc76e7928b9ced871887838fc34a00 -0x9e3f30517ec0806d0fb4ad66f7c9f234282b54ac012d87e1180f600d2ef321fc -0x543afadef6ea3c9bda61c7c53a21e4b350176143045db56842e855f0c0f56620 -0x6549226f214d63206020996381ebec83d736aad96b4a0bdb0687adddb99b82e7 -0x64cc22ad3d075b7e0c96f2c31cb11cbe5dee3b36b1ed810ed7bfb5db66449548 -0x09161cd59e71d587a64b2bdec12f6bb38887faaf9a00e0c1ca7d10e3b43772cc -0x3817207ee858d919eadc631a7d147242543e390a12fce13b6673d7e6097368e8 -0xa90214af431d22db55b621e6c1f1dfc131fd3a8a074a4ae4f8f33efde7701865 -0x29461e338d93849664f37dd604341736168409630d14fbb625874f7280d1b60b -0xff83bb3a562b22f36c416b9f790b505d199ad9d3de41459847570efc9df4ea54 -0xddb14fd4d8ce0839ff72c070ed5f98a2934492a36957687779e39ce62f22a555 -0xb5e1608e15e610c080b47c417e033d043d1a33cd350be2bf786a5b8f47bdde38 -0x7eb0b67208b172b50d274045c53fed3350b2ded77a97de4704a56cb5d4b28bcd -0x569ca81560f4c1c04d1610fe574c8585658c89c4d0720f0b5fab8dfa36ba26e1 -0x1287e75cea8c4bf6a471b9cf84399e22e9c2ab6b4461d0434e15dadafc9ffd1f -0xfc4f6b708ed5c4230e4b81b381fad4ca81e06f1225d42687484b80e66cc07bd4 -0x7f399e26cced231aa31865520d72d04a15ca251e06a4b9a0021d4ad9251f58f0 -0x05bac25e529ecd43d92480c45facd9081b26957141d9b4bdd5ea43d19528352c -0x74714a25dd583ba08715e9920caba5de4b3d7059f45db5be6457cbba9da23fbf -0xc2df2f7cac30a4eb1593bc8182e507b338a2aa6355a13f6f61a7edd16090a7ca -0x971afa43617be60b7b0654994c8aba71349d20c6095cb6bead76726b97f74649 -0x68a18d2ecdb84067664a2a9e3ad49ca2191af99c92a3c8265250d55d7ba07787 -0xb9452729646d19dd76ad8e39f1f2d0f561cc99767ecaef1f300ba4c81ff3ccd9 -0x4e1292c83ddad374bf4513644bf572810eb3f0d065deff3dd583f5469518d391 -0xd098f6fd6f13fe014d35c936f7da25c7dcd7c11512f483c589cd1ea5f4184b8d -0xc0a0ec0b68bb6d7465d32cd9b4269380f1c2f21dcbafe7ed931314729fdd673d -0xa1dd8ad7bdc5ebeebd30585f51464abe90b7bce6bbc592480c5e6f19f36c6be3 -0x002a64fe4aba3694a6060365bd8cbaf1aa8d2055927e37188e0c52bd2c7b138d -0x94818fb9a1fa7f201b2b9c7d0fa5f4c120da5aa02bda0eac5269b74f11737745 -0xd7113bdb5deb1685be9d4430565d03a10cbe97e85e140b50c4d67313b2d8b7bc -0x31062b21eadeff9f160e2854bcc178ebaa22bda21712ab1667ee1869a7decc5a -0x6b66cfe7b351d89a4dfc32efbcac93e25989bb4b420736ef5857a75324f787ae -0x0f97a1dd518748ae9a13bc12ebb73c6685adfc27b2734f0f1dc0855cef94bf80 -0x77e7ca0871339d9d9a9e7f421ff57475dbe0bcb6cd3cfd12267fbc5c689ea352 -0x4edceb9d92527d74f3db1e1ba8ae3b5e9b6d8a7458f076ba061ce822e98443f5 -0x27ef5d7bd2ca2df1590f5f9ad5cd0298308f28d5d5606665d751efbdc0ea606f -0x2b31adf06fd2bf770a382985466bf8034f0c92776808c24838d1914630af6b92 -0x41bf0924ec12cfd6f4a6ab3436df0a1387b8d8399c17c75de98bb13c1d30d88c -0xfc88b01d1b8fafa33a7e3c05a60a586c8e67f5aa95eab03c6811b400674b6b9b -0x17b1d92b5dac1d4179c999ce104a64da4fc3ea1bb96ca9b0bfb56bc71cd54951 -0x291898374c98646f25625662f4b0e273b15aec2ca8fa427e3e81caa72939cc0d -0x509b352b487bc96509522d6f528ce102bf92321afc768df9f819820179a1f737 -0x91ab1db1f33ba2277bc7ee4a9bcb300855cb2c907a1b0b4c96d3c9cb472bbe95 -0xb913280b67c260d26a7dd58b5adb32067ae06e2583159751d13480c5898f624b -0xc571059d94674ba6f82baed7b54b912975de9f854f8c254523350f33b0e702eb -0xfca9e8aa681959f7d2722554aa6db9f4921256897ba86606a8589f0c6ee7e529 -0x81df2888581fb0495b4583b310767b83259636f6324801a970376c5555d6e8b6 -0xdbdcae216905f5c3fd7dd1041b5fa262cf01b945f9301f73c939221091acd422 -0x4bce822e9f954f7a81f29d6ef3594f134ab8d66e88331c60a1f42de20f39395b -0xa052b41a616841443ab0e9d07e014aa605e72ce58c26ca00f6af01f19dd2c9d9 -0x06f4bf0a5c4968a67dde56195b18e59afbb992f54fbfaef27bfd4dca6fe95273 -0x10c39fbb0938f4fb7ca01f3f16a13496c3359d12420f43cddd7dc8ef8c06e18b -0x50ecdbffbfecdd0cbba2f92575dd6d997bc4c0a67e7854875cc56a6028a7a6f8 -0xadf2344778c8feab603ec8f8e078be429c86db1caddef12d8f78dd3c4e8c5d81 -0x6e60e8266ffbee1af57d51e31a2e038e77546beff0368f4c2cce1b4127e0741f -0x1387977eea792b5192408124d9d3b6c150e19b3eafdf5b7c413c010166d4c7cf -0x4b4724221968dfd8780101ff05b1cfe9738ea0816ecbf907ed3f4fe9189ac3c5 -0x96880f06540f3506bb2f97abab719f388304d3ffa97cdb58c3826af26a38b927 -0x278653ca71dcc840309d48858f26eb4e3b02c63eac328c7d8e52049bd196f3b8 -0xa763759adb40cd80474f17bcca97273b3fba4767a15a337a0a398b1cdeedadae -0x4e75e63730dba7a65da7284ad80fe92bcb649ffaf8c40a5b8e32ac5f8d6da54d -0x05151df6ebc29cf28992be9c79359f7faa176d75a039747190aed12aac3954ed -0x36103626b69de0d0552b58d54286fb46c24f75880651c27fb1478eee5e167aeb -0xe2d1db03de88b0b558143c295a0488892b89bde948386905cac0391100d66250 -0xe8dbbb069fe28967dd921ecfcdc76fb11ad8cc8a23c6055dfcd1eb4c11932397 -0xdadc7681d65b1faf868e0595ef1431be2cb6a48a43cf9b105809ca36b00e9c3f -0xcc87d4c47f0b41a93283a1967ede43c7b67ba3496b10c173919e3ba7486a1045 -0xb6d5df1298a0c17d9036d1f4729294ade7061e297adc60f1db75ca5221677921 -0x12699e2e59ea1bfacaa1d4c9d611991c98806c15a0f446b2696f34351f3ab228 -0xe96af0b6e2a5bc1b629f2296c192cc30daf310e7ec0c9685e95f02a48482e221 -0xaedf192ea759855bdfc8686a95473315a47c53c0dfde2328839b86f00fab86f8 -0x1b909b5f80a9181f37962a764c56d78919e40f61a8815c6ac26fbf5c885712f1 -0x2e6965208f719cffc23a3199bf40f00df0304b4be110cac8179e09cfd6c5ffe9 -0x9f5d0d3e39000b1268befd38ffc79258855cd6ac2fa4a7a16ef05e5dd7c748a0 -0xb41b3a313afe80aabb38b6e7bbb5c6db320bbb5874046cf05c2835e599208f1d -0x03e1d5d431eac57438f77bc9bc12f6c86064cb1bbbcabfe229c4c6a3c0d9b3e0 -0xf6ce077103a071732f72efc2e105352b72c65f4d3d997010b588d8afa57069aa -0x99fd5102be342b9ade860fb17fcce3eb99eaa411b56c2e67d4f0fa9bdd1df434 -0x737828885b8171a223853b1c877597426803e9748a02b171938a6ee869b39c7f -0xb2db3a00e20ff10091d4dc85cc9e588f229d9e6976cfee337d2feeb3cfd6a5fe -0x0192c545ca9ba724a49f8a02b1a3c8d7be9bb96116bf4f8b9174dca7d05ffa40 -0xae23892e9792068e4303730be31ca7fce2e48e56308521018cb2761b79f97162 -0x98b3661a0fa35cd71d731afc6bea05ed890fc82e687f0e3ba87991f5f1a9121e -0x959ac482dc09bb0d4f4e4040c610a4fe8fca3c7d0827cda7e157f042f5565f84 -0xc303f9aceb2a9311353f8274ef08b9ca436abfc4ae90b3b23331e1ec5158a5d1 -0x513625dbbae218aeaef32ce1ac7d45c94ddb5ba2d7a061555a57239d808d2709 -0x984714db847a23cf6b0bdbec4cb8b0079ba0a78f4aa942b6ddd7d7ae87d7d7f0 -0x344915d8225a5fdd815438bbba2e52461f8c5d99477874f94e2d6d9c97779044 -0x07f091e92e628a915370cf79bec26f961f07d84a4780d87b22fcd78652e1fd95 -0xecf1bb28ae98af679b138771970721b3cbb693db5f608ce25fe6766172546dcc -0x8a838d1bc0a0ecb565c8f0c1a1866941c9bc06c97c4c507d00cf7213f8f180f3 -0x108f67cf17ee57f5dbdbc14c6fd418f2091f73370f98c2e719931b6c4be22e57 -0x8983c861ece0469450370cc5e3f508611fff41584f55b66cb051881422e43397 -0x1566dca1db6946d312cb61b3d68ca21699a684e8253c37b535c5532d950c9f82 -0x60832c6f7d3a3fcee40ea38c6910e994673ca87914a039a289b8c45f3385b3b0 -0x80e01c50e832e5021d8aebe8bf6664748dc20b497cc00487d7c89438fc3842df -0x93b9c41c1ed8ceeec01f61a9ef1e69ee81b22e2474907e2eb107fb051e1fe9fa -0x04ad272907179448337a51f7b4e09642f222df1023eaa41d210115826eb7f969 -0xcf030c00ee7e341e1aaef8c7b2d1d1f8d6e72bf91a508ad14b8aef0503728e2d -0x83201afb86f3f0e5a6dc1e271fb36a8d2f5de3cf5fb0fb7e7bb5487a271437f8 -0x5091f2d782c0c0dd19a6ff931438d23b72a02e3cac11a202092d3c3318845783 -0x9c47502bd57ff5a6629f6a3d506af9c312479f29738f761c3098e08516b775f7 -0x5fcfad03162880564de240ea87628f142ff83c50682fa074f1b58b708c26e6a1 -0x11ed96b57e2a49747e439887a45663a1c6091d4b964bd0afd1bf793735155b51 -0x3f8f3c80db77efa2da49f97d364e11f2a54153246df9a84f10c7f4cfc4d70328 -0x51fbc392a922814e66a72ef6cf8f11d39e6dd1b53716172367cc67f004ee3ab7 -0x6935e8fc116d3d5be9127439255ba3957fea59c594e3c6d73fabce6deea5ebbf -0x2c83af35ee7aed09548c81ae71cc259df4fcd7f8ff75eb9258c2d88a4ba6af73 -0xb2a33b9fa063e3aa50f2f15237dfa56afcd33bea7a6cd452ac269127bd54a4e1 -0xa4bfff06fd54adc6dff92d1883fcf74cfd06575a447a00be1dd70e1667013552 -0x0c91fb6d3b9529db11541fbb61edb8c28a1d9f956aa9f9d4ff2a8d1da5c130af -0xab165632430c32e3a8b9a7b2d7781b52c5d385b022d0b5f2fd6cbb1d95ce37a9 -0x23cf6ba914699d8b16c32883a19323575e805b7b86a6442b6696e8fee6b2e483 -0x488096d40ac71a7c6a24367a6e94814235c7da460cf42f39be9792957697c98b -0xaf305c99a1bcbc74e1b217f43e17046ada9437696595c60f5e43a2d9ef95597a -0x629e526a89e9e590763eccb9a68d660dcaf4c0267bce7242612ffc08d7c31431 -0x24aa7549a3346b73a9055059f02a5c32b57c0d120140acfc7d783d5b039f6db9 -0xf6bbce7a600fc0f7429c8a3fbe30d8bb5aa59efa1adcc06af2b9f1a2b8417605 -0x004017c9597ed855523958851fdd7a44ff7c463af755b2c0aa4d611bdeb1a6d0 -0x0b6f5d01e7691d91160e76c84d658c57e77aefa2f4c97810d3ae985cff2c465f -0xa177d455fa2f86ce62f62fb39b8ff69c480b2f55dd48b7a1bf21bbe7ec751f81 -0xf481f2952890b6c7d70ce0efcac44db7f1d6226ccd8b59d4cf05cd1c32d978a9 -0xb9353d46f25c1eb72767520bd83f65f6caa5458cd70b902bda90d7326f10049a -0x58050c9cc2564ecf08e8758850775e788a2157ad00c2d5c867d27e76d8b0bac2 -0x039c871ff6967e39c49820eb5ba96ad9787a77f7ee8ad6c610dcfd316403baab -0xff25c1cd7acc57902ac5c453098a40d87740b68eb42c96fafe65699622df04c0 -0x4e6940f95d73fdce1b68e06ff83dd36213b2e270e4101a86d60e3ec28db72513 -0xfabbdf9fcc9e8f646bb5cd2c515dd6e7b26531fda7d3e69943c449032a4140b2 -0x69e360316c93c1a59f4c60c64f388df4e131e65299e297ac18b5f2e1710c6864 -0xed22e62d2a0c93b636370bc40076f5fcbf3e69a9e90ebdd7fb950e2683905ace -0x0a6bc49098aa12b87bd4acffbc2251733c8c346b2fb3d4f0cff1d9bb4163296c -0x5742102f1b59e982e54e5cac65509fcc07d169f84e2a8e6f4ca6b70652b27077 -0x978ee59b1a5c6fd83829121e0fdd22447d6544df3f49708a14d29b69dc60adcb -0xf8dbcce013d6ad3a47f65d517bbd8a83707847289d86c7bb33ab3f234109e540 -0x48c0e2383345df2c9d4cc1eba627c29868094b242820531202c1e33610047c01 -0xa557f460c7108a7ce5a6ce392e1a852f9650aeca551875f0740399431cefd6fc -0x091488651c4d9bbdd268068f3beec88e236c9c3a24b1322d318de9af4e7bf56c -0x690755b1653c0d2cdd3c5339d2a33c34027122f3f973c2d7f8caca4cb2279c79 -0xee10dc873f348cca40fb1313508ed9662def765bcd8531f57e25fdf0a60d7509 -0x0d07b0269efc233a95ad24d5401b23de422a71cc058880b191a47ed8096a3397 -0x8db062c75472d3c73c088e871e62e125095aded144317b691b84cd2f8255949e -0xccdfa9ee43a43acedf146dafda6418d2ca7e6d4b1222e335772c0bfb8d4806f0 -0xb3fa4d45a757e0b71c2f451e437b0e9a5b71cebda44b17ee8a14fb9fe4df88db -0x667708c4811b48af3dc5dd6c3591638ef6ece73b4d7738b0067a9554c79a2cea -0xbe865b23298bb041d1a8a4f2f009b9c47e36442e5313a768d387f23d803ac70b -0x525770bd8b3497e04354c16659a4dcf988faf91b1cf0ac89e6218d8faf7bd8d4 -0xce8415658f2bac019127e91032eec43e3443602025f47590f951144b51229a41 -0xb7b7fd3e67a301d6f7bccb7a6ebe9b520751027dca2cfcae17f84472ba0c18c6 -0xd7dc011bce653edd24a6ea90ff7bb2af30c419831007d4d068bc4faa0a27b0a6 -0x23989bd2ab8eab0d420a8efe4ea4ebbb154390dde5f94c9b010ce7a8e5c2fae3 -0x6feefd4ea35d0dcd94c02df2c9463a525c9f8b63e0ae439d2cb95f9a665f5b93 -0x85532aee80e8642c3fc063b14337bc558f650a04d813784e8f12bcc293484c38 -0x3b9a9aeb26d167d6a2338da530e7e15f973ccb1fb0954300bcd573c747788c23 -0x07e93215fd46ecc18d209571aac083b5154300cf60e7a2500434570f9928cbeb -0x3d976090d61c030edc0c0439795ac289f108c0fe890b53072fc1bedfc5fb141a -0x49976e84c97a5b36ba3397f5e652e079bd0c55b532b64584b1c389e293ba64c5 -0x0ff13530ba8291e91c3bd254094c995f30d333d2b36478d31c139a53fc2c22f0 -0x3e62834187203445a308f9cf7274deda72e3e9c79d37f8c11f6ee166d2648ae7 -0x305f95d020fe818ffe0707a467ebb41fd301b4edb5d7502df0fa608178b19408 -0x5b421c43a4885295532d7a68b7328877df7226920295ffec3ed41c2c0795076e -0x261bf5ebe7dc4292dc7b8e9647041221a66c6f3669fe983d1d2daa0207104040 -0x586a98cca45363310999ed89f1db15c03ea99bbd59311a558a1260bfde9451f3 -0xa3bc1c7dc492ba726aa24d544470d2ba59325c70349e00da163e2970c6f75010 -0x51511f7f9d0449f87baef2d05711f0a8876d46525308b0584c76a32d361cd86d -0xef5cb5160e14e93f6752e26d22889dd99fe2ab5ed5cf106790a63ae36be84713 -0x23344e840fdebda1697767868e667f4acc3821998e010a6c44777d9a521ee379 -0xda676dfcc2371d8ebed0bec6e332c79d745b64fb5ec55f9f6aa0a22ebe15d9bf -0x8ec6377e15252c9a0a9e75e23a60a0ea50bc9cffd5e85b78354da3a337d6b1d7 -0x9d2ac9b973aac109e19050837f8f2d1fd46bac0969829e5d4274f8c0aa57cb1e -0xd462917509e87c86e36e9049ec2b91bb3e43a45525603dcbc23492a4454a1317 -0x8936331e25d24caf6c9d209ca1b76e19ea0c4bc3389a364744c8966669104679 -0x395574a7a6e321d15dae98a94dfbf7087215bbf899df3121c4e5996bdf9a3473 -0x710b179896d6d20b70e90fc2872d36596df06555f7cc4590bdcebb08598dcfcb -0x4311ed45fe53788307541fc2a6185ee72f2d685636fa8be929b916f00cb34391 -0x53ce0e00b7058fb439a625aae8a39931b35b1235f8f2cf10b6d64b2b6ab91c58 -0x1837d5252d28d04cc4b427efd0b7bc3ea96a93c4b1e5f9d7f6efc8c6a1f8d6e5 -0xef9ddaccb2a77bc8ef1e876e4e0dba2ef6c9366241559a1c53023157faa0afc8 -0x1af55092e451b93b045c0a0ed680693eb878f5029388420a2db166accf29c52c -0xaab0a43abc9be85bf75ae771d8141a0f76843466d98b5c686306cdbf3dce00ce -0x4a49c91f9dd62dea0b6d064504487038e6a68b728810b3f0b6d07e4c90647afb -0x4ddd823ded54d6fa49e98521d4fe3f73558affa96a7c1e5883d36d4b3c18792c -0x9794ab2d461c1bb378d0934cc897207e79997bdc048713960433660447f88db4 -0x2ee426965a423094d5ce8ed40c9b2baa6c9794a10f174e0bc2ca468f4e810a39 -0x2d1040fcb65693c67b4e985b26802351b88f53dd0464f39b051fc218b25f286a -0xa2af94991a1d628ccdafa0d6b65ce30f038b0691b5b15ed800f53b3f46dfa268 -0xe97dfcc95b3c1f2e24b8feeef0326854a9345d4458ad296ad3883d6295fe7fdd -0x28644ba7a208df76160f58ab4b617320550612a69754a918dd06ab05c99ca06c -0xf5e6e96a25589783483ef6fd6901246200cb2e7245849054039abe447c329292 -0x337e5bfb9d836e7b3425e40bdda3dfff8ecbabae79cf5af98d6d18e465d68599 -0xca99a57e591e3cf8ea2aaa03adfa7562f3d5b33044c41e71f041b0c7d57a9dde -0xc7baf42824875f2dad7f646350f0e05e88b38c6b92ac76e83e19979e3242527f -0xe0ac91d9d922a6a3d14954db58b834c08ef5a4db1d41ee0917f91547d808c4dd -0x8f128b914caf8dfd740f19f93e433642c2e159a27099501cf9f97c12209bafd3 -0xf71f1c9b5e6602d594964c552c5134d3c8364d1f1114a94feb00f8f74863dfa3 -0x58b1c5987ad3d37ab4ba986321f7ce7c882e3c275733c249f5c452356176153b -0xe0f864de2d14d9b60eb7d16eac923388aff57dad54ebd6d7e8bbfc174f452a83 -0x19fdd51db019ed3168048bf0f6d021adbe944cbd6e0334a5924b8b794347c285 -0x6ad688184b66d1c1a8a262d4cb06c7781698363b8ae27bbbfb57a20afdbc6577 -0x84e6b829b2e9534370a02be903c218e0e87252cdf7b899ce9937aacd63e81320 -0xae3979a59f29a7bccd08eac6e056763976be6a7a1c4eef56557972030c2a4026 -0x94caa459d452a91994f5c573ebcd5bfef95909a432efc7530c53026ff63a3f0d -0x9f7933b7e75897b4843b2a9fe632b11126dea7c6bb485fa4e098846433ca1e4d -0x4128bc2674f9c38835ea975f245047a7f1219167e928a62640df437cb1afac2e -0xb3b6321ccb9ff6c79f8f97f665ce60f49bc05774cb3b6f3a8284171c4d672c39 -0x5f067ab8a1d89b655f2fefa39a68678841338851028c2f29c336d9e1fb71b1e3 -0x4029696bdd2868072e88ccfa67102dfedfc9d78471fb59a523f667abdd6a4cd8 -0xdeb0df7c92fbf504e9f74234431fa8ca76d28baa3f72408af5a42b83613d2894 -0x00a358a092dfe92e58a9bff1694963296f901c12acdffea42a45f4510184dd5b -0x48a5b6285cfb00b38dd94217c88f991592c3e120b6b15a811687af62e5fd9fee -0x4530d8b2ac64e8ea48cc13aeb5bcf148fa333d43928cbb23eb1928832b087b0f -0x2cc5f7fdde93dddca83af0a024a06229ae0380d969020142e9410976a0940374 -0x36853743bcf20468f4953adbf877c0c6f722dcaae7aeb46951f117320ad3e571 -0xd8b40e11cc32393a5144cc2f6672c77ae5c74599fd980248f7d2fa5bc1cb4a37 -0x4b37cc72ceb6e396d750da9a227f300c14eb4aa7145e0f505daa61d973706741 -0x004d86ff9514b00f0b90dd388d93864f745489e27006cc0b467980a25a3eb3d7 -0x1a5a4912a667b838388e812baf4915c889117d6e4afc68171aed7be7851f1cec -0xf405a664072e76d04a0da7861948e9654d4e7abaead6676009e6d051aad2220d -0x5e91049ad29be59d0a0e7587dc6455ab4e6e6d06b9afc2668849912540664841 -0x92e7a2a99ffffaa2ff984f364cd0a8c8e27b4becaae84f2c30fe6536e37c3e4f -0x81f83dd7f94b904250b9b814b5c1b011d7722636fe7b16fe087a59a99d4dd94d -0x8f5ed1590cb3e6afe5c62fb37aa4d7abbefad3a6a078497424de8c159b93f810 -0xaebaad85db3b71f909cb1d8b3a091186fa1b4c6d1dc2ea041af09a528d5ffbd7 -0x86e3c11b63eb2fc196b17727352ab5b0d1429e68d18fec33922d1f81b6a45267 -0x4698c02e263f3384c7c7c0dfe708b71b08d1e93557e465a3dd4ab62bdf0dc434 -0x6045e917632ad2de7483121307dea501bbffda13b147e42490db9e27223c7f27 -0x581573abb8fe4f6c1715cac92ccc0cf83bf1a3d574c172341d496868298ecdf3 -0x6b2aa2de260dc08939debaa7d3206003abe3971cfc0867e353fae6b7975f6d54 -0xa716328ba39f04e88bcf0e32e6e8a83e7d876160c60ccf82e5f1f256e7d77f58 -0x574f9b79c0e40decebaaf8143c6909cc697ac6fe92afdfe00b4f42de11972daf -0xf578733e9481b09934cddaa07a0240db0f7716fb28b7020dfae7e76a1d301165 -0x39f599c14b5d2935cfc63bf6837b9f6a8bbdde4f90cba9f116f099ac0c8cf4a9 -0xa64780ed667f8c37e686bcfa10395539c17e88b30601666b7f4bc0daedea588b -0x180f5aa65107dec7d9097db8d44802d14b9e4bfe316751172a4734e8c29f3e0a -0x3cc233d5e6f9f98e6904d1df112f71b132d54307e704a9723e8fb96d17165134 -0x77eb39bf8c5f988ef78df1a3222bcd5117c88df19efa80ac4ce21fc904873748 -0x38dd4bf8db7f55596fb14b7ca52dbc9e854605e9a3d996293a27e8de86b894f2 -0x7d6f78293b47ce12ca9f59f071130a35c97bf339f65adb2020c2363112f05d41 -0x162be3dd8d37e8741f2802f5b2bb4197ce6ed727dd3be54e7ef76db4602340dd -0x3f6ccbe39e0309d24253eacf7931221a140dd48b88297f3e656c5ba8919eafef -0x59e66b5e23bb0f5862965d3b2b8bc2f99d0c320ced4384b53be0a8e4826edbaf -0xf4c3e263152267dcc33965c6ecb0d123f4f0046e76ceee97f62630ef64da1bc9 -0xfa12d29d56f2890664bec582fd6f31f927d35867dd63f93be065e298a7d01001 -0xd905a3b13908cca24f69b37ed5f3198e93a8610440a740b46fd958aaa55466cc -0xd92e00a74b063e20786aa71b4738d0e74b0c73349d7cc62c8c25776a6bbc8d8f -0xc2a7b17c2e2afe7e86b3c74a03dd083a78556a5b198fa0a4f42f45f6aa373a0e -0x8dee7ee4a83fec3921ee5e79d4362730c57e9148f723d28b42525c283d9eaa37 -0xe5532ada6f8af84cf94a134b2569581abeace54d4893246417beb41393ce07c4 -0xb4e9e5eff1a54be70c1c0983d23ff9a860696394149ab7ad947e7ad772add92b -0x43585ff07133d5accd6b2cd1238826067bee70481b73afd74bb2a6d3e68698f8 -0x811bd4c722d07f72d0687645606a022771660a3471c5b5111b1805a2d79f1de8 -0xa218e7918bdb050e72c31b31f509d7d5fafce0a1a287d2db455ce36fd6968e5c -0x9990801d17eaa143eb90f6b515afd043a4e1c4e29291fb9723a16a249e3a11b3 -0xc9c140beaf75dfa1eb4d0d7f64852bb63fc82192e03d9db0dfe85cab1196eb1f -0xd67fec8e72bd670b7031984ae04f8a38685f6abda2c9b46f4b93d18070b6bec4 -0x36e85222ee9fd71ebfd41c118e72e3a29b069aea0bd8176cbfe64e20a62bcec4 -0x1d6517cdb2193b1809a8d6fab56692341207c851487a1c40baa6750ed7770308 -0xe4f0f07d42f5911c380dd4e0e2837e749fc4aea4d634b25e7d296ad9d4d502c2 -0x436d99a2c073e2bad500f2d8f90d4430c7f0713b6115dde4d721a679d236fd23 -0x461c95c9a4f0e993e2ee2c5250231f088a8d0e400939ffdef372b698d34b7503 -0x98c2eb9398009e068907707aaa3fb7b54d7f62579d440c24ac67f6163b2e8df1 -0x9102643d5061dea93fd251a260f8d50629ba038492e1034f6896507b37abf159 -0x97b60bb8ce58b1d585472e7dc7e1c6f744d6c33c3acda1f5c5160390413ba797 -0x0a87dafd77a1db3c76e56590ac970f513268c58f37014f40e236db5288cf56ae -0x73c798370f186b1ba5394cb38d441214377454ea16da11289bb8fa37f28bfa8a -0x98681416e068100c538b25189e4d904d72a7ef78c1952aa190e0aa749ea670aa -0x91f143018e3a32682e9b4cace496b07d48fc5a435eb946398f433bda4b97b8d8 -0xcd86fb62a7c131202b669ede0f0c30a1436ac043716796261918b4a8f92d5181 -0x3dc284a5d97e908ee57973d596ee58cb72a425355c6c50ff3f42c9516be41e14 -0x1217e1b6fe1e4af4be0bea64415c3c077a1652ac7ae26a46d2473d7fd70442af -0xa25785ed8923c4b05d1467d1fa9929eac8eeb4ae7890bd8d1d1c33f4ceba3000 -0x81c33f7c0bffaecfa8aeb297f97a8a91bf3b5bafb34040a0621e11327269b8fb -0x690d28ef6a006d888a81abe7ea156cb8f448726f8f7d322964dbab98b24a3f0d -0xd97a00a75c00042b6c2c30381ffb6c6b3fb0e0afa84050c134d4e5dea820c9ed -0xa4c124742d421238541f248c785dce4b7cdeaaa0b42d541bea0e7c645d154a78 -0x35363fd3fc6c03f6a165d5c36a0e57c2e40254800e7242514a372f16860dd417 -0x521d64ee677fab037672851a054c6a7f658c2834037bd34c9117dd1789ec9e74 -0xac0f6872fb9dc25e17c04b8693e11e11831c21932440116d20ab085c5b03e33c -0x3bf05bf03c9b2655782f2c1368b08d51e6f8400fd593edf08295afa4e1a11193 -0xbf2c62e354244d393a78ffbf639795a45cb3b18cfbe11bc17c9de8fe468cf2e0 -0x42cf08d502bc7ddf6488c728fd1c8da5c19ca1ac261509fc828663e1b26a3569 -0x4cee3a2171b5c0171db83b1bb5bf75e4958c813f8549a53288648a6321df5a6c -0x0c2b1087b8bb48b0d2efdc3c8fa28b93ae04d1fd031a5419c282e27a15aae45c -0xa35dbcf7daabb46d6b618a1b32bbccda9064271c7109a50eb127a183f854d3b3 -0xc415a6ad20cdfb2c49db9319ce462d0709bfa0df46d036e6f0a0d309353b1956 -0x3b29b9174a91e886b63ee6a5159b0ef9de94c4646ee30e331538b21072cbd742 -0x90358c94ad34c62588bd9ac50d8053fa78c30ac497690c32abc73072bd8e1894 -0xbdcb57ccb09861d699b62978e1b9ed70c1bfec6d14f00523a62042fb70e59001 -0x6e497e24374f154a84fefa0cca1fac406f171d8b168acb7ba09ccd9f5114fce1 -0x7bca4eaefc65405c70372f98c9f16cf49b9c1a2a9fbe8cbaefc6e33c7ddc6c17 -0x8e547034bd481064ffd0006e6bd68c2657989101011677691b374be981ef2073 -0x43d6466eaca75719e8a085f9aba2811517d59316cb3365200ae647cbc8ca36e7 -0xd3cbc1b1bed6ef902769f7e48a536a84d0f40d977d982bfad3c804de99015017 -0xb8c1beb42b8277fdc5f04e1d6cc4604b916926585229c73f24fe50a282d32b4f -0x9ab4b5ea535d676efc9fa4d610a3821a0066f32a309973b27c0f73d1fd4a9892 -0xc632778f1858b4c045c284b18c2d08143195f827419c17d8ea859bde030c759e -0x018757d1c92f94401c68e1095281f686c812bffb5e60555bf92f47165f729fd2 -0xcce6f1d2bee33ce4d501bc8d47dc26c37d7f18cafeda77c3e25d1a76a364c884 -0xd72dbb428cacd75d8f90cd89d63e5b09e0021dddc9726215ed17e7d758cec574 -0xb2da21ba153678ab08ea790c2d3837941dab17b161e7db1e0ea9c2fc6aaaab5c -0x254393465a27a8ee1400b39dbaaa25a6c513786b7897fc9325ca522d45a37d1a -0x3b243c739fccbf2e3fb429a80255388a36e3c0d5f1a607b938ddaad63871bffd -0x97f008b732aff68a877e9274e2e62cb8fd1ca6cd53cdfd4a99cf2517c97a0a85 -0x1070da36b1f773dfb736fb817c0d0c3c97002fae4ada0240e2fdc756c0985bb0 -0xe2a2e22e647ee601bc058b83ba8b5dae6997fa39ca265b9115e40ef0897b6c4f -0xa9a811fd72fc4f4b5d24f8817e4a636a8d6c0ea9d8bfd39f803653b829b04a99 -0x4aed7bcd16f6ba642e1296d4e3b8a2a27d5b5701ac04d3a5dd544ef8da0ff766 -0x51aca4561dbd25dfdeaa08e301d102b5d329aa363339c9603df58e043181fa59 -0x1053aab131e1fd117c84907df09490aa8f162ef822728fd262fb7cfed26bf26f -0xe9d91bd8ffe6e00569b623feb25b798524d429790ea15808f7f56b6ae2702a33 -0x1c5abb964bd9d3fa2418dcd94ad1c2f1c908889a160d74c3dc9038e8185ee230 -0x00617d801cc9d00130273983ef11dcb2f55837f84694836fc99c7c6a899caa97 -0x57b5e2732af0f7cd7d53c91bb60e979a05f9d0927d59986e13e13ab7ce132bfa -0xd03366d871d3330a10ba66236f5466e42d224107c9c2cb752ca6230869317112 -0x48b9dfe7601ece0e6d1956b3c06ef1f26baf599795c000fa90e0e6ab9e21f9fe -0x4945f92808cfe136f6b23796030309e1b52db0df4309272141fafb29e7d67756 -0x3010042b38f6d7d14a6a2a8e7c62cd619342f2554b43c7b6ab991af3c08a545d -0x10f46730ca6fc730094207f2ed4a9c751adad94731e7985ef83fe29c8c362f8e -0x5c88e56295c89d6b2efcc35c1230cf19a6dcc5945ad4588bc7808019ea55c7ef -0x12b233f0b9ed071c3ec099fec7eadf6570351707d8195367e7a0f8ca1be7fbde -0x2b3d9bd8506462afbe01e68e198d03c71f5f07b7d1fabdeffbf966cde91b9d67 -0x64b4fe290456616dcae3c721946791a559ea659f16a185cfaef1293626f27900 -0x4f995c251b4c392d2daef966445721356c58afa0aee243942924906f401801c2 -0x197d753c36a2e5f55ae5d48846a71f4de318165bda7f0d45021b773bc8da5ede -0x42a66633f9ddda1a5543553f7d05660e3dde13d7aebdabff26253b2a76998c67 -0x25ca6bb3d1a1f120a7a4489a36fab10bd6835b7596406f5d8a727b8e703c2698 -0xfecbd74f91e130164eab35c272f845ad68d346042a6fd7584f1ab8cd4c21ec33 -0x8ed141341ce462062863fd7182d96704230f6a3611a6e7568a62703c1b5001b0 -0xa38118a1a3827434a1bd4ec0768293e7aa9dcb0b3516a02c549896b501f7d394 -0x0ed0aea65d55ee9791578f8981110f6d1f5521529c7d9e21b6aee8b4ff367774 -0x2b40502faee0c3f7131e08d224bf6eb35a5963be0387fb720d345a94ea750577 -0x7b974465516f25ce090f55c777cadc67495af40d238f164aff22035e893a37d8 -0xf7106b2485ed1bd3f5f0f9570f03ca4871aab6a6fddcae99c076159bd6966ebe -0xaf850a67e9d73677f7dbcf4302d9574de47d3e2a7fe3004bec199e5cc17d553c -0x15d9a834e546083a50af620d58d45762ab3627d1174ebe5e8f3f0dd5125a87ae -0xed6b92e1d9a723d2ea0903622ec6982d014eb9a1b20da73ec70d40bab54cdee4 -0xf8166402211983d6f0b741a10f2f7fc23588d1e9a511cd00156cd1fdfc2cb4e8 -0xb693ad61b201c9b214ab82cddcb57d4c23adfa3ad1a5d0cc0e5df13f45e5169d -0xd09e8ce4c87760711f1cb3e9af7086fef6cd827ff170652ed752e011df17c512 -0x8b983c025e96dee4fc1f7bd36a08d3a7027e4486643d9632abf520e23f2e5bd5 -0x7e15bd551720dc8f27f31f90853e8748e86c0345bb8e3fcd75928d1f154ef6ff -0x8f6b7afaea989b5b9dd41bd9882d54be0aac65cc402a2f8c457d16c728b19f97 -0x78a935b077888089d8f2fd6116b19b1cf30e0a2fd3fe03557b6bbd3797507ebe -0xebc6d0a827a3a1a69d867bd030bd3d8b6ae7119e23e989f2ec4c52adab612f64 -0xc4f56a4f340b3f14d94d9af54efb2d11b454f36d6f60ed7025ba2cf802c1b526 -0xe60adc21c8d69a373d67dad3091a3fa83c1690e20f1ac9dc0e029c97b9e1550d -0xcf37c074301f290fb7dc153371d12564b76bf77bb3358d4489c423e5320ad858 -0x0c0575e80ad2654c98a4a3775b008e7c3327e02269dbeca9d33c217dba352c26 -0xa34f196a483148420a2d6201c8fd839a482f49789b7349b756ba18bb7223f1ca -0x00af2c5053aec3c55e558e539542b368e722976df03226fb19719c6061663e8c -0xb6d216f0f90cd043b0dea13a0d9f0ad4dacf587df5ea7222c2ad5b7caf2b895c -0xb1b2f7f0ae61d0d8cb9349333e21ea36bc727469fc8588e2a716a01799c4ad5d -0x70ca6e77e9830341e92c0c73025c987bf64d34f60fb3241a4902e676eaa3adbe -0x0427c29a0e60a2e775376a4ff3c9f97922cb57eacc35baf6b765d655474ada0c -0xb49592568928f4c21e8cf227e12b53a5666d0e8774f067b321ec0e52788b0448 -0x7b6e8698f02d0abfe343d1e934c9b92e0f02f52a2a87c88dad3fa14256423fbc -0x46f678c46003c678789357293256387c7214f4174908c086958d303ecb3ea8dd -0x69be7ffe64e04bb8bba6955bf727914464ff43c45acfe2387143e6552d4668f9 -0xdc8ff1caf0b9798a9a7a93f64977a9b5a4880afd26a74cda3ebcbfc0da11eeeb -0xd012f4b4f3fe3a41a9c50a6d9997667e41ac567bb7ecdbbbb14409287cf62fb9 -0xc0e40004fbaa47e4195982ec53e0ca2c276fd087eea5875c2b1e00c9661062db -0xa346c811c3417ed0d4429b973b13e9522faf2d59bd020a7c10b7bf429a4d7159 -0x13d376080c96a28f6d408bb271cf183c7db17df341b9da49d83659d01ab2c1fb -0xf9c92a9436d2d0821e8ecac72e33876446228303d6b7fdfdffc293eadaf2d129 -0xbde08c327cd1c3380ee5b2ecc1cbe1941aed62274a2c008e606b3fbbe44c5c81 -0x3add38c89e68c67bc735b06efb545ea409b08e993ecebc66cfcf1f6541b7b1ed -0x1ee7cfe9a6b8ac16fbc677a46703ee8dfe1b9496ecd58aa3d75719566312ebfc -0x820aac987bbda7a6f6b3bb357e9431c3dd0cb641dd3f6d5f9f78c59614445ca8 -0x633d40b20863875b7264d1d81835e754a476f7938993f3e13fbbe70bed5cc305 -0x20250939cec2e6b0a7cb72bb4848d97068ac2b2b76dc0089adb95171ab77d355 -0x7557d443d1eac9f6a95ea4e1ed299c8b72895da177316709c56a5224132aac37 -0xce342bc3da33b4021f9a974146b5b78fa8a234e77425821977de1648411b2dc9 -0xbdeff139906600ab210779b9dfe0216d62d312b8c14f43572613263ff2b5d440 -0x36102388b26d8126294d427eb31b70cc8442c82abbc7d9bfceb99616c23266ba -0x64156e724783587c93e23422824fa72f8342d7e02b5c1abcd5cf0f156391bbd2 -0x622b4a59ea5b51d6927792810f1fcca19acbf638f9d45088f6581e006b614cce -0xb84205d4c02030ccc5e8af1c1ebf4c9d625f3d07865f62f7984d376c9ae893fe -0x5950205a046f46a18423cfc8134b2e423dcd51573a1ffa612302d22737e5eb6e -0xd16cdade72cc71edb010954b5e866269be4973e61b9f6404b45460e00aebb54b -0x7c1a706a882f510b1a551e399af0076eb594e4dc2e64764d8a2ff6c45f02ea30 -0x5e9af0f892c4cb8a1d4845b7692b1514e9ca07572a32764a8a58e0b3814040d7 -0x986d4518d93ff38f87f8e3d648f80908a0611f3ae0a9a64b4149b0c56ef21c71 -0x68a4669c568efa1a350273cf9ae07e2f5e171bbcd010e041eaa6b8de0f48dc92 -0x92ae4cbac350470ca8a6b63b1873e6b4cbf8383dd6ffa538942a67467312a78d -0x71f277cb2ef363aad7c2b4469ad71559d4e1b35061c1f121c1b9b7bda49698be -0xaeb8394debc051ab0441a6fb1828cf708824e1abe01895d8e781845565680bcf -0x1d945f31ca1e1bb70446187418e5f38fa567641e404b74141059f4dd7397fb1a -0x09d7ff52850607c67fb393a1495fbef38ef36c15c59cc00c551dad772e3bd64c -0x861b06cf24cf109561d5ff3ec7e86116354cc24db28e4a0fb22b79194e9e6254 -0xeaf6aec60d1dab3e3a14ad373e070685cbf14b9bc0dcbfe6851d2c30f632f319 -0xd0dc45aee739071144ac242a6c299481393ad3cc8d2a7211ee0170dc076b5281 -0xed9466d6b11bbc9f4e980c7b943dd46420c33f9bd87a3823e3015e70289e11c6 -0x08fcdd89ddbc57bac67c2fb0c8696820709eb26a37a3b6717bab00225f95b296 -0xf6749ed2b6cca3a87ba86e4989a7ef493caff2c980a4b1454ceb1cb5e7648307 -0x130e47121bf87c5db35de6f8f93fa5aa6f1ea66f31131160caa9812b83093479 -0xfead80d68b81ffeac38c07e0bd5ecc6513595f57b05c0e0724c3995d75dd78ab -0x04acabb9131660a3e67e3b151bd0b3c3b64848e8eeaf0d61d06cf60286900e00 -0xcda81fbd0a5d1f506cbc55767c07a11abbe6eb557d054f1e5b5e53f75385006e -0x1c0ff1c541723777502a4b2520240f9bdce5b681fbe21f52593a7fdb53e71e1a -0x222786fc0bd758d99ddb81c28c973621920f348f69babfe66b7549e593123a57 -0x6aca645b639f042e63a5d70f30c328f2d922d9d0f19a41e3f1b19e8795417335 -0xbc31060082376b919c65f46ff82029dbff047bcec7e00492ffb2cc0b41c12a71 -0xa1d9637858b3dccb72ba04588be74d576f96b3a5994a8e26177d36b8c86d7bc6 -0x81e0988240cc05671927141d1756730631f671d1aa4e02b3f839ad098bdcf657 -0x3b608d767f17a0b2cda861ae7a44e87d2dfb3c5692e61480fe778272fe6584d7 -0x591d3b1bdcffe61344dc951461a4149407550fcc47bc6566c5097110c43062a1 -0x91479c34cfdad434ceee64f1a3eaee8852c8197271c4d074d30e1306bf55d34e -0xd8c5faebd86c452ab05d380736ffd56e6fe848a005bca8253b0245d96b339a23 -0xc4eb6c6f9402427d6ccb6b10264f1c92ce01351b49ece1fc9a5439f594dfe80f -0xfa170cad9d8f671b8185b59a999e5aecb3e4500df1a4a843a0bfd94584233c75 -0x1f72c0240f590d57efcfb0b82bd94ad306e7f514afa359349b5614527a4f794c -0x850c1a43158d4ebc9db8210d752c75e7bf90a05fd66de77455e5af90f1bd277a -0x5be57fab0982c69f22a621297eaea6e27c617459b0edc82932f39579079cfce4 -0x700f57e8b4fed23e89acb89a4d05be598a7bdbba48884b3ef2f3328b55ba5e8c -0x0fd380dfce6c4c02de4db532e4e03c268483fb094351f9fd6e46d7e8d8967a1c -0xd98206cc77f077606cc1f40f8daa207a04553afb650e88720feb647a3ade4c57 -0xd4cadfa38f61a97b6caeb3cfd6f4724f7b3b54a9897ffe59eba8081b8ad4d9b9 -0xff307157c6dae71b8b4f003300d7dd795abcc6e99a3aa12a28c24072a8b9f0b8 -0xc9ace5323998413772c64f3c5ec83b5efd35cdbbf6c00d78b666035680182872 -0x17bcaa92d72fc1b7ef6e1c1d8f269ac1ecc80531a31251a195d1f88e68f74b54 -0x7a0ce7e20f6da64289f7ea8567ae5bb6a9a8cae8ee8825cca4a38d305d0c3fe4 -0x672c61ff6faeeb0af0bbf8e697c1ebc2d578734a986177596c78df7760a52519 -0x88a044052c01b2d716ebb8bab6c5558e1a280175cd31916e1b2232826be3796d -0xb2836a55d1ddcf4d800a2b13fcd8e09ba6710f74e61f695e2eb8a81c22de19bc -0xda27d8ef58fd569714aef2181395ad5cfefa3ecb985478197e65d46182ee6f88 -0x3730b347a3d077071a349a96617183c6e30dbcbdea72efead177415a4135524b -0x1a82e8f5f33682f20095dcd89a759e023f55921d7e989fd838c4508cfbaa4d5d -0x49a4db77e8718f829d3202fbf90a006272f6aa680f9a997c6935d04623687023 -0xb988485bcf52821bef4affeb534de05a2580b3212f8307e4103f3d760cc37bfe -0xb0035b870d7f6d1704db16190d68cb807a111ad9bdeb59e8eb8a0b0a106e3049 -0x4f118c7801ae46d94b324e8c1f6bad4a4fd79e294dbb82a4b2f1fd75e1edbe7b -0x1aa0e8a50738df268d42e73e356f6aaba1bfaeba08b51bb38e8be3f8ef7f5a2c -0x1e286b2ebee75fcbb6b49d30bbb5156376dae96f7e79bff0c4cbb9b5ee63f4e5 -0xbc4dc888ce150a10f9f61b5c098b1c5cfbf96eb6c8cc5bf2de12b67181131695 -0xfb9add7c67d04555867a11dcc7c65572f58d538b5ccbf4293059fd4974be3300 -0x3283ae26e1a33c986677312260a69ff8923060e507be1f869095ecb76e4eacce -0xe8972c1242ce16aae1d8744542c538796c31370571c82401ae6ff63ff5f11751 -0xb461d226a9f960dd4ff6f3188d02602adfde640cb79d9bff664c6b30a91ef03c -0x41b6c39e65e431afe4dc972490584b5ab833d586cadbcf1c7c8c5a74e3fd84d3 -0xc2597b16189b07aa7fe52947cad93835003353b9d929a8b554ce24304de85f68 -0x18e7f0b87403065acd51bdd40c99aa0b3ada09c678d7c1d94cb7670075b19d4a -0x1a30dc855954030d88c80f0f35aa97652bf906fbb5f49756c8bb1a404a1bde93 -0x5792945367acb71ce3409c6a98c4188669b2a39aa4d17cfe173ff2b744f4f370 -0x39518c573e85460b5794d9310fe24f2725753b5faa09d7b308f9ba1c7332c4d5 -0xea9de456cd8a1bcc59540418282e4a9a3ac30fe69ef155f8cff86a91b3493c40 -0x3423fdab032641efac0f040e22cb1e6405946b6c78acf94ba69dbe9feb1674a1 -0xf752c7787b76c9624e9fcf910a4b8498babcfa9bd9f95a3a28c299f00d93b364 -0x0c830c4385b3969444263ccd03f8dd6149b0e0a664217d708b8897104edba1f2 -0xafffbb254075eface5aee1a3e34a320e673b4119719aaaf98162bb6320b72b03 -0x479e1ebb81b7a99a1df440aa896ca4934f2156465019462aebffd5b03390dc5a -0xdd27264c28bf7ed9436be4e7d7f2a6d5ed53df9fd7878d58404ff556a4c99f3d -0x5d97cdfe49acbb7ff9c5863a0de1278e952dd62c08dd713626eef808e309a2aa -0x3b4e00f2337198984ec3263bdd6581c0e57797aa3b22381e9be37bac4ae030c4 -0xa907c4adce7fcf2d386a9e7bef677d7ccbbb229fe31a82e95b3496e773a4fb9b -0xf773d77336b28c4c750efd18ad6a77bf1fcd4562497e613d69978bd527bdb9d2 -0x930aba7e57a559fcd55a9f1995e846c01f175c3e12dd052a5d421c6c289d776c -0xe8a7fa24d7c32afc427a5254a772af1526579885feb8bb33e1da05d6393423c1 -0x3fdae91a7ae5ee8848c8f2274f2cbabf9ba0eca89478adb8342a7e0f6ab3c1f3 -0x85e67f644f761930e69890f1bee45bc90fc66b6e8dd50fce42ee80dd10a38aa6 -0x08b6d2d4f727c94fbc0c317fa5c6e1d5af7e870025d26e1e97dcd889281d5ffd -0x7b86c97553be38934cfc586f406add1b61a14de52e4399f7eedf64f9ac36d1a5 -0xc83cfccf8dd228c15233fc06bba3591e4e82064e9dbfe7435f8bdb55b6201f22 -0xa91f268050b60af4c37eba5c3f3b5e3b189fed176dd4b7894836bc8090c889df -0x62a81e9b407b7acfe0d8535333b9616fd26da38f3af7a78e66c3486275d0f7f1 -0x10ee8033231950cd4f099564734c50b91ed8306a9e3525a982540b3806108e6c -0x569d0d4dd3ea4b27b4734eba87e9110996d88c01cc9d62fd75d186caf5ee901c -0x9e8cc32f81b3b9c0b9d71991baa429b656c495b1986a36ced0672ed56def20d3 -0x4f0d965eb61c1cf56eafc210a8160d6dbf3ec1edda2a7c7c8d7b309023ecdfe9 -0x0ca4893329e7a3894639c9ee1266c4a846eb88b0d062a750316ea29167a92dfe -0xdaf19433d73d66502eaffd506453548ff13a503f2c1fe2ce804630f6b9f8fdcc -0x147f6bb326026b76a6248e6f2f8b884e1a89b145ac0efa0975e7f4766d9ef3d6 -0xe8a594d8b86963760297a15884941cc2b73be909c0f6896916800551f6c214e3 -0x177d3fdc9b36c78f04a800ca8ddf5c97ba222c0f36d4ad44e73789e8df987bc9 -0xa47422c870d6d2fa9f7af92181e59dfa2465d2ae451c06af76da96007819db27 -0x68a7c8fcd7f178a486bb1c48ce5cf9c6d12c10bd299f2ea8886e63b14b620682 -0xed3d95606a7892b731e6415dc99d48a0fa117da10a2b9a89019cdde20cfa452f -0x9613ce43201ad09ade140dae9e0f93a1efe867ab9803c3bf7fa21a69c08aefd8 -0x24e3daa6fa58411c43c603e7f5ae40a6e7aea2700575919d2b076ed30e071422 -0x2e827933c05f26f3b24039fa7daec76955d763abe2057c957210e7e9d0f7c898 -0x9ae622632402085cb718a51d17fe7fe536fbcbe643ee1475f23622d770d89a4b -0xf006505bcdf03dc28afb416bdc741bcf31925976f534ea4a7fdb40e978d0d1c0 -0x895434178c0d470191894e377e3647768e36176fb387187b0d3ab77be9e217d9 -0xdf75bbe8f1f4fa933253d378cf61c964e9d01e430150a6bb08b3f161964b1d85 -0xe4987708df3525f16ed8b09a3dea5ee2126cf87fb01e3b648291ebb9167a9ada -0xeb379f2a518597728ace6e7e53d13f8ddf411e4ed997594b95fd61819560f090 -0xd2925c4964167e3049e5ed28f9ed945229d32e127eac89b97760445561a06297 -0xec9dae89be199cd005fee9e13eddb782e7c6b62affdb3cb51af728ff7056a0b6 -0x38194aa119ead39c81b46d6393a46e7af65d2ca1eaa19bd45f6532c473cea8dc -0x402f8425f7e298258a458fc66a33f29f3e258eefb0c4eb8f9d2487f358bcb590 -0x03290e9a2bae8157729dea24239b929cf4967225a6782371b46334700b0e6a7b -0xc329ed36fd3c1bd6116ed376d037c0461a586c926e686c6dc7a897f6a436c13a -0x20e2024207475a0587e7685a67a27e4c21d821ca7c6f20220138558471b8284f -0x3d36ce81c1419d32ebcc110ebcac726dff1551c34322b452a83c4cc4b01d53e3 -0x6df8410ba6f6b44d596c7935338d1c7bd4937a9532c10a3be27e2ba549ba1c06 -0xaf9cf9ee7ed5ef232d55f42bb798917a61374343d0832b3bb77039f9147ef990 -0x23cbedb07c21d2ce0acb3dde43e010a33120812ac42c21f8d0736c37ee7b6e38 -0x371b1e9e7d4ebbed186acd3dee7bcebdf0c22ed258a0b573fd1b4d61cd9825cf -0x5a946cc591c519ef845c152ac9f490c76166d0025bf55c6ada9f3690d36c206d -0xdc555a5153784a093079d3bdd55bf34a8d7f3d56793673b04b210d1291b1a698 -0xd74b3ffa4965a83a272448dcd06f21bbf2a20d6de5480e19bc7bc2b8987a4975 -0xd66fcc12294f63bf80627d29a4dceb2d4d74d1a175703ea8b7949e1ecf25674e -0x7dc8bb94db5311c79fbe99b218b764489be92f7756e5101119e84e4406eae5a2 -0x065a3da54101adf9ceef3bd9b6897875d189975b4bea3c5bd2b6059974b34dec -0x1ec81b01ce3153b9f5230fdcea5da2f2553127cacc66a8ef7231482b68d7afb0 -0x89b20a145fe682f6b9e328f525212c19a524d0265ac1cd4946eaf8814a46ad7e -0xb3317a8ceb6676d74dcc2f940451c1b18550266c1d7a95c9e4080132150a4ac4 -0xf6681980d946304bc781198fe20f24d98d9042df7677e1a9b5c1077237e42824 -0x53731bbf8b695e8bab3ad7908beafaef2048ead16db09633c347514e8214e17d -0x231d7388af3baf6cec51d93b43f6b5f78705e2ece5b30a7a9d0f4f2d69830081 -0x05fa1fda43aa0284a2a3991b6a282eb8be012f3e77e4c48c86b2b5c6b85d08b3 -0x12503d38c86f6f40a8b43f89ad4459ea5690fc3900fca1da17e3503773a07d92 -0x2a2ea5f434612f24f5f51aee740f5fef98654a5178e338f9859daaab9b39c1ec -0x888efc3a75a63a336207b99a7cbd4b304bf6d9c33ab86e19fb20fd3a31d71139 -0x681d73ba33629dfe9ecd5cb75bb64e9af6bced36f22f983921629915f7718e74 -0xf0a42970eedc48ad39eaa4549849a78a6c35a51a76a6730a216480ea5b75485b -0xc0a954db78c62f47385886e23c459259b1ec41d8e3bbf295c29006b3d43df614 -0x2fb05df2a2f6e90cd30d6e6280296c8fbeecc9d62f1a9c98f70747d172f75314 -0x884793b5e47d2a1116aaaef90d173ee0cd6255e70a01337f5f17e7934173027a -0x6e72b497fb9cda3e604e074e71320466d4a773cc3a2001a6b5787dd023305f7a -0x8c69462f13cdec6940921d6501690da1a964ffca005d3c73a3a31e3ad9c57e09 -0xdd9cb204c1c377866a000a7ea833d4390e1bd7b6b9c0d1d81047294cb704a086 -0x336a4042381b095d39a3ed85b22d2a9176a47d90a98c54992eb8aa4cf64f4201 -0xa23e86a66b229e011f810e49d8470fa932646acb76d065b5a4447fdf4f9a4b56 -0x33996f064d3c51a7ad8b03cdffa69653ac0c4b8572f63809754600d2b181bf0d -0xf0c63a447a63256cae1ea03e1946ae0032df11b8cb6933326849491e19cef761 -0x4c120b172fcdf3201495c6fe68292b7cf916ac3a658f20986bfb847b65799824 -0x7f8ee2a56c108bff2221f875d66112d3e1fd01f5bd4cfb3be89239e3e7b6fb88 -0x2f824f2262c1400de33da4d39031439b596a6c44a59f8a297960311c1418937f -0x6b1a0220bc16019aac6e7ea6d94c2c6a67428cf2dbaa68dede33de657851836a -0xea464e4bb2d4a8e4ae291792c89935610a5ee9456818f29687f95436f675494c -0xf69b99103fae4d09db171d22b9e51ec9225fb9cb311d0f562d43d54c33065258 -0x090b1ab8ab988967ccf93412a3f10b20ae5ce880b39e92a52a22ce874ae8b875 -0x9f71a0cab7af4ac6708f205fddf503520b1730a0cd9071da2a4b8f31d48faa78 -0x29693df2d33cfd48eb3127bc39a9f7cc789cc22ec6a0e3736198464231e66664 -0x5d6a604f0cf08426ec91b4f9d216f9ec59e550cc8cb98b913632ab7d865cb242 -0xfc7b003c891de3c1bbab89760998018eb6395c735ffd87cf1c25893955705230 -0x0a9f33bcd932ed7a21f7b1e67f10cc88e0798d2ccbcbcfb75ae06291b36c4149 -0xf12186fa7d9bdd882ec3bf50ede29df601dba6b048631adef9b3429669c5906b -0x3872755751b578115c3624746cab4318581b5b655b416f8373e92c286ce87c62 -0x8be05e8749b2c2ca02e0f5ef0064fae57c7f99b104ae4a218372de30ffefac91 -0xe29fed2a91e8f4297287831beb88d9adde4987a6c72d7e1adafba0292c8d58eb -0xa8ffed9b16369129c7fddbb0983a88fbe529374ddb01c98346bec6cea486dfc6 -0x92c0588024521b5eee803e914510009eab5dcbdca8184e17e4cf67dc1f554811 -0x26c1656be9a41ba980fd768ee1fa0a82fc76a348cd4018c90457611818cc3261 -0x9f2cc2696a5cca83c1b51211b02acd8879b8e5b04501bac33e853c6b52e2a27b -0x64f8f5ea68460b050f1ce11a403b1755b126004bb2e58d162ab1d1fd1fd6d90e -0x36dfa5bad5fffcce1e80626c4dfead3d5e4bbe4caed38dd7dd04aaed6e0f4fb1 -0x75a1b4752a86cb475df67d83c1b39f683061905c48001263ffd6f27c3e1318f5 -0x54801893762e7449dd9cdd63649da522c2b9c1f3798d9edf9f1e20b542c27690 -0xa3e186c698dea7bdc4d6587bccb10146054c14797cb799212b06f303df93090c -0xc13b616e1834e18badefb6cbf98f9e713e0a1a19c47e94f7be8de52f70df0338 -0x5bb0e20df1c6d61fdf42db043252ed20aca3874819539cf25d71301f3e97e4ef -0x56db284480a9440a2ba64542b57ec5d8c2b3f96392ec29545d5928ceab183578 -0x1ad5b41aaf97f102f65046f9ba2c8161e3aa58fd6b102c9371ec4965ab45d6e0 -0x01ca88d1571b32a8e2f4d69389a4665e6ff92adde854c50772e9a0c343ee433b -0x974c2b1d227d14b56300ea7ceafd8741fe5fc6c25e8316c60c761b031598e3fe -0xc46287bc8945a44bd1b175c7695997d870131bc5e28182e58dc552869a9544ff -0x4354170ab7152a17a716d5dafeb7a4e6cebbaf9bcc20f6b8f8f016f7f25459fc -0x8fd8c026c54c1fefe05b415b9385d4312e8b6262a5122d893d98317a9dac3cf4 -0xc254f018647c677d63529bb246bd391b8439148df3aa13d9be5b40382c7eafac -0x53d044eccf6e49ba65cf12fcf478074a238dcb4d9a10f0220155b47ee7e1289c -0xf09bcc3f2c7c735800f69087aefe6f3511045b981a53b57cf47c91bec74f9d53 -0x69d75a2861fc2d5f462a2628e5e5b7d92917cc9737349313e24f00b88b29ca43 -0x0482cc9a5e1c1880ab41ce9bf846e310779ec5f816a403907f5b1fdeeb1355bf -0x438c99ece8ed3666d259e76a0ef21d4d342060e8f9b3d3230a6167da63095b94 -0x691bebc19b304138410ea40d6431eb7815cb320f9efc0f8b233d652b7f81ba76 -0x672f0ce2a741a44bd7aad6db81a10b28e7a56ffc6f9b040b40d43024274d2bd6 -0xcd04be9b7e60d3d47c8e7da54519d4176c83f1b25de203bdb0dab4642661a0b0 -0x4f5dc9b06368329dd8c9e5f9d482d9304f672bafad89daae3dfd810122548174 -0x095c68808e28e4a26847bc7a204ed49a6a498082d9541ffbc3e7e42ee4919e60 -0xfba0bf30acd111865151c7f40dbd68d97fd4e2dec306ca97e49a050a8487ff11 -0x28291f6bac5507417a21e260032417a56231df5a16b6cbf775948cac24647ae2 -0x6ea3b8e28835d9e1737acab0218f43953da1a78657a8d32a57f76bce8e5114e0 -0x9a2277f32e09b3c1087d47533d9f9a5ce023d1322b7c600a58f94f4ecb6e03bb -0xdfc29db782f2ad64592f35c3f3f8fd3f2acc101f00f878aeed6aeaf0b03741c7 -0xd87420b14ced1acdeecc7406e94b116462324716915e5b0fd09fbc8712b4761a -0x3bdcfdd7b714246820404f7160cedea10fbee93288a4dae5c5180960a15bd8b1 -0xebac1734179bf3a6af868c466e60c09d41ef26c3cf58be5a5dadbdacc1b81322 -0xa777a723dae7970e08ee3abb1cb44a4e315182edef0092aed3821a62ec116669 -0xab83d3bf51168021bb8b40dd81056896fe6a497ea54b28e86a5d63e6d713c5d8 -0x9bf6355630f703cac451b54c6f37cdd778c5a1de47d736a61625c8c743169049 -0xde33622d48823d778901cb3fc97b175df8dd8ccc67122db5abfd89227329d8b1 -0x1b97f77b635d10c1db34c9020f92fa3a3ae3ad7b7cfb01f43c6f547548dbfbb9 -0x37a7d43b46d9e261001f958667b137a1b862d1ed1b255451271456dc20e9b30a -0x5f2a344892cf2e8df77f0c424172de3269337090cf44fc544f143483722447b1 -0x50aaa3d23e8ef5984a8c99e36ea6623e069b800fba54f30501771e5a16a51e16 -0x710adbb6005a4859721b69b97df89f3eea2727c3543d76fd094c1410af64f87b -0xc0ddc6eb35ee12030495623f39912b60c0de3e24b4b9ee373fd711981243a7b4 -0x4f21c18fa762072c7c074b90b88faa4471071211ae093ea9779450b7e9744f1c -0xbc53abf745e088cb507a288c50dbdb49ef4228440c12b69fa849d59eb1ca4a09 -0x4db29f6224041147211b887267d8e3a0d5ff5abde8c49799ca80e55d6fd85971 -0x4eb2bc450c3707af7210808844e76f53a202e4ccf950ed4e8f0d21fb09fe745c -0xa9709edeac4b2019e24361ef63b0973ca6af6b9ba1cc4c73b48b88d6de698d82 -0x822f022f37a673303aa96c6722301eca08b7f0a5a12aa316e100d58042be8f61 -0xd2a02a43e6a7a37fca0f8997764327ecc6a3b6b9730c0f2b89ec252083cb03e0 -0x50887903635c02e7ca2c0e0182be0f784b5850e4183a7a0a1942615131ab19d6 -0x3cff886627c2fa6f77cc1107b682de2bf28c2e50fa8af74772ff434c948f3389 -0x5eb8b0b89a00afff80f00a5c453ad08427f10f6804c3e9004305114120dc409b -0x29fa21774412fa96dc411c89a0bc6345c774753819fbb57eafdf2583cf4186ee -0x0f2f69851c5244d3dbf936b0f33eb7219ce10a7c414304102e0ca6be84e96752 -0xefe6f2d2108c762ae73cd20370d47ce7136382b5b935ca19f75abbc6281821d9 -0xdff26247a1867ec44e17801b98f48c340810aecb2ecca314ebe4ef073d65f5e7 -0x652f5a2f305b05db69be8ae0e3a6cdff8271826cea1a5fe0cf8801db32488425 -0x465bf0eb58cc5b851c3bdeb5d8edf20f9a1b83507c7f70a14aa5583ba4f4ea7b -0x8d24548925a7c9d7e42033e831d8b9bcb4e7d0fe78affb8a8009270f86770d8e -0x6704e12fcbcffc1f0ee84901ebd14f6cc87915685d43316ae235df32ce3c805b -0x38d17968aa3540c5270a68320104af1aa7642bffd1f4222ca96d1d0ff3d6ce11 -0x3f897d2915ad4cc6bb4b5fa652e1674a4b0e282d4955e3d67ce92bb3f6d250b8 -0x2b25b067b7b97a4c31d2f772d5c28e6617d7f67d4a23cc81245f678736b223d6 -0xe97ae0f80956ee8685cf3322bf19fe82b5ecaa1909ab7e694adf8d795b99a9e2 -0x49ab9e911a52b3ee62d937356ef4c9ede4746a16c745d88b3866b23829d8f5bc -0x3b12c4cbf6b9466cd139a22925b20f186efce61a8ca78f64b1df5911b29e2339 -0x5396433cb0a843a25831fa8ac7074dc2dac26950599af1ddcdd9e4e91f5bb7c4 -0x4afef109b23bc4360c2d3db278d88ba0a706997fc9cde9d021c878c8698279d0 -0x54838c055113fc7a5636360e04b45840727d356cdf41d4f5bcb537768a7ee572 -0x2b569c0bf1dcca34c99721a7762c0a759e55844ea339230a3ec3387bef4ab9ea -0x25ffbd8f111a159560629a06d43125be980cab68bac06088ef36c17351835fc9 -0xcda45e7ab3e439d9bc7731ec67012fdf9ffb0e969bc0e6e1db87f99e676f9e57 -0xad0cb02c8bd91eb7c92c2b1d49db00b060863d609dc3a034edd6dba51cea2447 -0x9c52d3eb0e74532feb1ed5e66c3656a47004944d9f95ba367f64194cbe5a9e05 -0x09275b221ab6650fce1d0fd7b981bbc9f25b285df9a028ee6e73521dd0012aad -0xee6ddc9f878450a679c6b14ddfae56758a720b04ba39fff3091e5ca5627169fe -0x231f1ed8410a8b37f88298a7f926a0fa714b6e7f369064f34885d0d2d65e8418 -0x3dc40ec0aaa551904be648e552dc673cab0c01e05156c53f5f3831922d0f9969 -0x7de771a51d991ebb2ab98ec98be0f07c46c4c2a26db15fd3282839138d3bdff7 -0x680a43e0a1ab48cdfff139c2ad7f78f14194be96e6d68b0769b79b7bb9e37a81 -0x5db75bba6daa7e5394e44cb1b18831bfbd0178c58ca8af3383e36e7b8b43f3e7 -0x2ac370d6b3a089aa66b402098a34c431be719cf817d170ee6f19b98a108b9eea -0x456a456bee7a751adf05480848c7baa12ca897c78c1d34dde0a0cf050fb7ccf5 -0x8e548e0d2c7e26d6ca88072659e3715427c7cc29f9fb93a5afc9a061af77ab3d -0x43220d8136741a47816e433adbdb3a96a0d9ad24e5689ecc0332e800fd47f10e -0x1a754d4312760ceec3577214dff82e825ec4bfb038e5569945f10f2c7e3b9cc1 -0xaa3319ba1268a435448897b011691aa109ea4901ffac3a4195e2360da9767617 -0xc49cfc2547cb085d0e207fcc91c670497d68fe81040a202c6405955c1853b4ec -0x2fd74dd03188db75112d621d81bcc46a2be58743faa390d1ebec2c1d6e7c8973 -0x16b23b653a28e84449204a0a5cada40cf1b8babae20260f70ec76a2696b364b7 -0x719d48b266ef982877447db0427f672641d0ed9be0fdcfd6387d04dec2074b52 -0xe58d9faaccc137f7f35e27d0bd53bc6ffbbe2539bae7401652e859774d6f680d -0xb918649f4f3d14fbe1e7eec9e45ea3d6cd837e1216d8f4fe724cfe9dc4799d0c -0x9cc46f2e3f14c333285c1f82f7c772e1ed57f9be1e80e98e0693bbcd32ca28f9 -0x4ded1579b1cb359c2e1d4113c3d7c96f493c9d1da6b48813d9ef3391c126889e -0x6bdc52e9fa19326c48258e38e2ac97acdd796360e2e1cf053769eb8ab710b497 -0xfcdb4ed8a7b3b9e38a1e7a756cec02ad052cc90b3c4858a15e505b42d0eecad8 -0x7977461828f04e388e2cf7a1759ad459ffdd7e06f7e3da2ef47ca66ec1f385be -0xb4f0ffb7ee1d5a3c276bdb8dee8fa8ce44576f2b8bbe048eea0804d9621c5a99 -0xba372dfbf3780008616f607c60efcd096f319f43b0c03aba1fb8a26958fe94e1 -0x7c21e19d5fdcf17908fb6845033341438c266426dc26c6ad2aa17167a0926073 -0x55172038248be78ca01b030a359ac97846b2585f11780a96ee285a7ef0ac6639 -0xb423b754cfda5afee91e6c1a82926d89a835fd967d47dcc9c91e5e68fd11bb28 -0xeabc3f3c197c481d670e391f222775f43740b2952091b0e17c23de6fbaf697de -0x870c5b7176b30d5d6376f0ed4cbe61716fe1ae1a9d15b195e291eef4959ac9b4 -0x6fd990a09b7391567e51a28da26c7ca6c77f31ae52ef5ef677a4930a585e7923 -0x3f9474e77d3c683fefced47a72ed6902f3b30f9101e92deb25dd55a9e916c0fe -0x410ba7e5a986e9f4c988b92ce00ff24db658f0e009e06673edcc6715c8f2d813 -0xbdac667a6a9221eaed4fbf01b0c19f963df8fa0e95b8be680316b46fd8f40b3c -0x8850173a2be56fe04c807bd888bef7061e5e706bcaba731f3f68b6cb4d0b5784 -0x67f411ce4dc2a46a56c94f0725aacdc219bbcda5e2b359566a1449ab2a0f58a6 -0x3b8f911062717eb8aee56b2828aac1e1c3b2e27521a6048163b5f38dd937d6b5 -0x54e0874c054cdd2a3c751b60ec159e8c94c25066aa981b4e3ed426b93346d46c -0xfce5125928f693f03e1a8efa3d8d9899000cd0d7aefbf4b8a9794d90f8d0c61a -0x7cc859364d7110044c07407762dd7d6a4d01dc82cf7a4a031638c2df232ba17e -0xc5280459587e9431a2d60f0df61d1f0c39954dd29b1d7a27b63b13ea081651d2 -0x165a65cc7b93dc64b834c431250d96570424bcf07057ef99f65627b241c5f0c1 -0xac686fbb0e14f429440272602293abfe84f5478095542b380e151827e843d50b -0xe41d0aebed4af3a862294e3438e06603685786799bd0c0501d8bd5910682a736 -0x93e6f40d7ed74c87690952f868a58ef0c669f84f7f2a5006c726cb4b03969dc3 -0xd7ccd41564d9bf0f083437cdea18b14f28cb1c4ef94841a3b4209422d5fc5ded -0xa21863174d054e9a54c06c67685e2f52714bfba4ea598456f8f959df32339e68 -0x3164bdad3a8ec22c752be01261ce41be3a5b2a9009579cc03989b6c268647c0a -0x6aa0e8b0f6667d338820d047e5227fbf282b87858b2c35184e17cd5e9a137515 -0x53774c688979064c984f379f7c3f568361656c561473ae882defb81e9ec6e003 -0x7f6fba9c4ec02e821f5e2bb796d298805193ed6f335b0d778a5931d8a96b6c4b -0x002041184a9e40a55cae35613a560032c45d6f5929f7555be2e0f0f562da951d -0xfdf646bd5811add6e1c8b84ded7e0e00f43478502a879225a52efae4980d8532 -0x2b728354b3367dcfe16b3505fa15b73092c03cac0286c2a23c1535b2484cf5e5 -0xaf265fd54849668598184007453b030d5dfd60c4ef72273cf433f68e70d9766d -0x70a17c14ed4f19fc7a297dc2f5299bd8fe628e1c207adec27f4dca8a4a2e807b -0xf0c4fea1d784960b9c7698e32cc07160bbb1c4615e8a7bb3ad2666c800dc0482 -0x6039dff27788a3862fa22b4b723fd51e4b057ed6943cffb262b98caec60d632d -0xa28146807123cdf71002cc6b0b9e4a6e21b157c1cd7d41253d66c3c1832afcd2 -0x78c61c59e66cf484938b50f73db65f7d7cf3ef47d1f8d96da9cb6ce50e3b0dda -0x7e8fa4d27a862d8f297f85297172458a4d933278afd9b6aee0e051cd73ca293a -0x86def010fa02d826c6418b754b6f41de0f1f89726de3114e9735dd1b625e59e9 -0x2129aa6f0fae3095d70c7ef417d9de90ff914694a73a1ffc3bfd367d3a51db84 -0x4772b53aaacb259c5fce2829265e4b5549ae85fc604bd53c35603f0c1df9927b -0xd4f355c9afd1b42ada97001d33d8729d78c4d8180357ca3652029ab8c7ff8571 -0x993694573a126ae10accff77c3ed302a0fd3afb638a3ccd3aef410b0795554e3 -0xe0ba5e9fc2ae4d902c2e376fad3c8148ddd2e98b5937d120178787f7e801d961 -0x80bb9fd165845bd935388ef134e25338df5764fcc3aade7685ba5a3c0a3b6436 -0x6ddc92662eeb91c7e968ac9724298e5dfd72180644ee94bf27ff1e50e4a85459 -0x99926f1875867ba69b6a6f9e218b1f3d6df5a1f7ccb06eaaffc6f6aca1bb28d8 -0xc01496739da371dce296ba56989cc3584afe102b76db74a5c4f8c75876f9e312 -0x6e2c3d3b32901367f80482428fe1688cb72b5e797671de00716c4371fd9d4a48 -0x4d8132034b605063d53a3644f3d6783d359fd78a035fac98bd0b5885fe3abafa -0x6dc80547e3d2938f4f22b442f0b22921fc4549aa0934ece5e9dc4d1089b549b9 -0x10179a8630b1cfd4ec4eb27dbc07a9558378499388f77938a38eecf236f103d2 -0xe6e189b588e46c9f5357104308260a5a7f9a78e953b2e7b5c712aefe3f9881d9 -0x610e2670526f81369a1366b5afa8f62047b224b7e884b941b9f72b9de8bfaade -0xb5a9ffdde56e151bac906d2ce1b36e2faa817dfa9913e1dff5f94e590fdf940d -0xe79e201eee2c2ddfead4eccb35185eb0b3053fa5c064d2b81aebd36cfee15090 -0x86fa800a0398f9bf903e38a5c126ab2998f9deb9675749278015506091c76222 -0x4eedba0eb43937ef5ec607651b488fd4e5a9bb829c2baec5c72758545eb14165 -0x3583479cea0b4c68b18916abbe57685635adff5a08ecf8b9b953894b670ae3f1 -0xa590b1ab854ed1f21f9f2e96cbab0e60abb8f528a6a0b8d8e6fe0cd6a856c6e5 -0x2ef188cc284e52d0eb241018782677ee0c80583398de57367db13f6faf79e409 -0x4bd1dbd995c0778ebb46fb33a84de960d2f971d5353b75f9af447d62ff5a74d2 -0xd69cce95a6a0f984196afde98eabf936f9000feec02296a074ec0c9927a6ecc1 -0x5406285490424e169088735884b0b230c25f57a86576b228ac04919a1e0452a7 -0x8f75c772195a30a62caf38629e7a911f01df21140345c2ee441358847ed1302b -0x6ceaef668a8fe007607c4240b4f075d936f0272e35f787af92658fb559dfdace -0x3a5ba6912c3da23b970ccbe14b1005c1598d24722b1aff497d951ed5990b5347 -0x74e2f788d6eab16212f5d6823e0b4f21270018b2f2b79289a15ceefb01bcbb04 -0x8cc7d8ab3e78dca84e6dc9b6004608eaa9b841c5d18f0974d96e836d4e1b6004 -0x3a4441a46e6ddbf17638644d82c6327a3ba5be55a9ad3e6c507b2c48936962a4 -0xb213bbc4b88a7c1a9a204751ccb51d56dbc7cf640dafc8050c614746ac5a5a28 -0x8f2c619e958839fbd211a6bb6fb3017491b53821878884cb127471211dc3418e -0xb9b35c6040604f2cb5e89e66c165a65114357f18f28e1f771b66003fccc58503 -0xdf79c51590d103e29ccca162b3b79d8a1ebef3afe1ec4dd815b9fc5e5f5cdaab -0xccb1fabbf1db3730b8046fb1bbf557ccce62824ef1d97d6ba9f3b2026e1c8646 -0x701d4803ef0b57cf0fee7717db2d327cb391dd3a945a34c3e1e90be393026649 -0x8c8e5741e75c4b28d88078af40817f76a91f434e90ef353e62cc858576735ba9 -0x988d3097a650b03b438ca1f2156d23fd13c8644b4aae93a0aa0c38a185accf14 -0x5629665afb194f8d54a4b5fd613e9294ec3f7f5b9384a16e5b3c16753c22e35b -0x46da6555e1c61fb4d63b29d50ab7fc25f0a2c8bc08ca7f8c977932cc9571bf2d -0x508b9234f29d47c2f09dc7e31c57fd8a72984dfc01e5fa88de8407d3db7163ae -0x7d9ccfce6d6bba80be7ff7c1d27acee8a7a8011f90c00d4ff64b5bb2950f695b -0x16bd524df7d56de7e471293faae955b245f57de4ed73d4da4e82e8612687931b -0xdb909e06e3b8faff3581bc41e88ff47502bef313d7b9ed0e2145b71ec8185eca -0xc1d7b5e90211b7604e751d5f1952057926cc370f1c343fd1071eb7feee235757 -0x3bf54c8a742ef5626db33bdfaf4cd5c73dc7ffa609dfe401827368b4f30e1e25 -0xf28b6273a4a7ffb6fd9637b446fdfd904e9dd1463cfbd7c014909f2de84a29fc -0x67630278a10846ed9723917688cc08b662fcfbf39852037d6c51ccda15abc9f4 -0x10f249984a3ae0d7dc785e30150e5af197245d1ba19d14ce1dc449bf960b3934 -0xfd20024f3c74894cf97bd0f219a19efe902b444a8be789c8fe4f50206818deb5 -0x3b44b8b91bce236f56929d3e9edbc137bb03bcdfe1ebfdb50e4c6871a2ac2805 -0xb61013fefc3fe7b65959aa981e27d458b6c79761a3e9537008a0ebdc060c27bb -0xac91e5caac0ddc348a937bc203de8177705594d4e3153a77b7a88ce4333fef44 -0xdb911d522b4b60a6141a3286b89a6c0b0a15c733107380744c62b2781507eb6a -0xd344769fd6953cd93f1e268159d30f5aa506e5f2417dfee0e6a3f638999b9d4d -0x289a57e82aaabc44cd83ea2122cb46dda10ced36401bde44d27133d4f74e7f3c -0xe525fb6bd39cfa5a69315d72c40b3ac9c6409ea840b023afee84100d72100300 -0xcb1dcfb2de1104ae29e375244ae660f74fe199a0ec4cfac85d987697713503de -0x1098e6f30b45528d039ca6bcb32c4566cdff57200340b7dba324b15a37771b7a -0x6c6c2dd4a779cf9ab1f598f9cf81f963bbc3f6700a9615d4e0e8e3fe098119d8 -0x416d8e26d3e196e14e4d5eaa9692664949e725d08333155f89399daf2a559970 -0xb050aee9667af22ef0f6a21503e8f3e5d03ff26b09c6c8c1422cba5096970e71 -0x49882a05dffac2cb148445e98e3d91edbe24495dca3e7d3566fa27bb77b1b623 -0x3fe5b44440fec3ff84fa422120ca3e8ade371ac5e38a0eaeb48f6936098142d2 -0xc869424c1a2b4fc6272b68858d33bebc9bfaa5daf7114171df8957342233f7b5 -0x34804cfdc2ad17e9189295fadcf6a103926858e53e54b33e28d555453672e8cd -0x5be124f5e5f5e7990532ac6f30e860c177206d403dc20accabed784638dd24e8 -0x5ab76703827707ca53549348e3ac8aa6ee98b6345248897e1a617ff742b7f769 -0x52d78af20c858bdf9a2d45c616bb13818e6116368aaf4905080df0d2bf8de209 -0x330439795d74d76928f8ef20d6226431fd3d85bb805bb1010fd5a279e6c1811f -0x87fc14249861eab2cdfc0c19e945fa119d43df27baac4a55acb4fbd24b2af906 -0x0d3709cc5da12f26903b55acf23542c8653b9a5ba825b98124f418b81034ae79 -0x49625c8b66408db591fc4d7696c81451c89b898092dbfea73ea4bdf28e31ba28 -0x1cace4176771fd259c3a4cb5ab6f2da4910c853e97160fd6391d9c36ddd9c1eb -0xa4316d2ffef274606cafa52b48d65c6ca8f52188d44650c69fa2a919a6574660 -0x96ddd9686d738745ac97e92c968abd65d0b5e8089fff0e03c50a2485c4a6800c -0x6ea83c54001dfbb6ad8e285e64b9bf1b3345da8d9b4e572a2f578c41a05ba752 -0x11362666a35b7dd366cb2c7e7255169034e8417e43b719646fa55e550d2be754 -0xdc4f74075d762d937b1ad908d54fda68b2a28ed811fd1b81b5b7facba56dae78 -0xdd4628eb78e4cb505179652b360cdfe5a6d2c3e8234d26d7851172fe5996f365 -0xbec0163b61800efae886bd65bce61ad28492df58655092ef6331ca01798b7b56 -0x283e15f166f7f6ed88356feba1ff716d6e85d233599ce27cbc15bbae184823ca -0xf9e5b89e093db73c792ee31a4426b9add946f21d68a11292ca61a99ec48a150d -0x9b182e666f43d9b16d1f582d6f759d76e7deddbd5de6e581cbc7197ab659e4ce -0x5732c6cba9e7e5fddbf4a380b571a1688502f4ce55d3f433d53a6554befcb84e -0x8cd28dddde78d5efe2836829069ab54af962c3e5e0a85883171ab1bc3760156b -0x8ab14b1a553c936ed6a05e3c4544c2735bf3b4670ee8e7562240d2f83c540ebf -0xe323579e7fb601e506097d90486e964da85ac0b9e722651a2f04673085874208 -0xcb34b91b74eba1f89048561bb3c11daafcdeb847a8d379fe2cec7ec8acfc9e7c -0x6bbf7fc14f52ebc8fa886b594c6085665f41a467a7d22d86c7e0e14455c7fb47 -0xee013135197661d1a2c20c0c0239bfa69e336364b40edfe47d38db79cbbf687e -0x36b516fa3c9eba1c67a2afabdc121490a9e33847c71a88b4ce3c18da68619eaf -0x0334981183037d74cf4da6286e29eb3af97565dc51b0d1524916059a0d4cb00c -0x30fb13d6450a348b159e4301fa92cdf1ae42f727c8bfec7954797227ee495768 -0xc080ad872b411bdbd9d3e459f957f31c0d37246b424b2f248f20cbc7a469a4ad -0x29807279188b808eb441e69a8626112ff3fb1a84da3158f6be18c75414e6802e -0xc3bee714a388620ca663ff05a7453e5468a3e3b1e57505eb0a7f8812c531c737 -0x184a25780f8403da7f0f69bdefa50b22eeb278fd88d3af52b12587a1246cdd93 -0x0889c358fcb367377b80b545f9568ecd13d1a1d89953cf1359659284c38181fb -0x1774ac34eb635d4aaca78ff431bb1208fc2f48f592710823d241afc73b8dc2e7 -0xdc61836d373c126cea5c0c4a3b668f8620c395d9c13b78e33af58ab3c80ae802 -0x041e550141f672f034c4ab1d9e4a5a9dd8a4a373bf6ad8668a18b76d5dff3d18 -0xaa449f09bd71c37e402226dfa5311b99a3dd2b8ff901942abeee2f988678529f -0x8e87f66cdad447d438ecdf5f16676815247ba55236b71d45042b408ceb3d5e26 -0x971594249bd7f3f201ca2ad6d5abb109052ce3f22292d5ab20efa46520e44171 -0x7d64256db224a6c45f7150950b280053aecc367f31bd30d4685b36d921688594 -0xff98b9d841532d0e5cbdc02a56d9b4a444e81406117dd99067665b07325fa193 -0xf78b6cc7ec64040dd7707e63bd07237de339ed19dadd2c45c552d961ea17eb4b -0x0adbd5181f1bbb3f91efd39150ed36675494b5d1c4c566e913568763300b19e1 -0xfd652263a69100ed00f7cb75075c58586cd3eb9e0f22cdcffad673fccf29452c -0x6cef5ba467067bd0c7c6b2d7498f159ff7ac8e4d85be6675c5dc86166bbc4d8d -0x21ac4c8d4c56ac96362e978d71aba73b03a018311f442a4bc395792797f1deac -0x858313cb3d31e4622d90812693bedb2fe47d41e99115581f9697f49684dda4d4 -0xd5f9dde1a616a05567a2f27cca9686cb1116d123f46826ec765a234af78eee5a -0x648d2a9567ceab5cff172186e430cf6b2f21b7e20e80198c7d89a0893e4eceee -0x6c99b1dfa7b7990383329a2adea29820b79672213dde38f8561f74b395de0c59 -0x7222bef96154f16b0428515028cec790b152615cbf69f56535c6bc124b362fee -0xb209ff1e78be8d512aa4928d2f8c531b080658f1752c5f19ed5702f864ff5598 -0x191a188ebdd72e371c0d761336177ad09dc3e433884f3280de3ba7731c86a639 -0xffff3837796ba4801a82bee8b01eb6dc388e2387d9935a590ffd74b6ec9d762a -0xd95134f74b77b7713f5e8133a2682f86859d702bf32df85e36ed5c60d60f2771 -0xb8fef2eab3a36c0d14e5bbc05dfcb6d281be9f28fa65ef762f39d9d5dbd8d669 -0xe0533742ad0fc1f7d3401dc735f2859a16a8ca8fa964b245f48b46ca9f26b17c -0xab9df4a32304ef78fe876ea688e6faf85ed8054afdb493e8d038a8d909f54210 -0x5850c8400db8ade6ac4dceebbb86d6333005293b92d193b241b5692a1b30ff62 -0x4ca9a536e354e7d8cbca7f45d7b94e37a98687c53e258f8bfb03a67d56280862 -0xaf41eec29be310551336ac2a4ec7a61967ad26d2d92907af246a92ea43cfdf4a -0x74c23c42edb6a558dcaa401bcbaeb887c14333a73d28a9215f75ff6a53efd06c -0x62e195adac68c7352b4a55900f34b9ef98ad12f4fcd684a0d6f1cadf454042d2 -0xbd424c27b9626eae24f7274a90efc93e8b86743e44b231ef58567690823003b8 -0x00944af4b2cf730bfdfcd238b0ab2554b308ce6592966eaaf4cc69d936ddd360 -0x854da520742b112f3a7912756fabf627897fd352507da55d66473e3ec996081d -0x4823cfc36376bf8d5b9c7efc191adc13bf319bace86a26ff32cddbf5b74c65a8 -0x00435506c364f7da2e87813df093fa12c8b8ab945255e68d2bf409024f0aa75d -0xe1227f9a3b10a57775badc1baec94ae0c8513169c568bad54f11a37de32822a6 -0x2bde1507b410715b4a1705157851e84a86ca769ab77a7ab983a1d8ed6bd187c4 -0xd13940616c74e7845ebcfe9a905da3c92f8d272b07545a4932fe96aec8dc9dc8 -0xe7d7d2ff96a01bcd02ad7477a9e8d7c1823939ffaacddc93d806a73de5260d59 -0x8a950c6ef163132159adc971d856029d7dccc2486db05f33e1c570668813a0bc -0x64f2a39164134f4e8f267726888267d12ef9761f14355fb631ee644430791109 -0xd87c11df6faec6cf1aef64f3c3db81c9e7116bd138a849352eb6cfc535a6cbca -0x3661ab58c54db8805d584ac6e95365e54844620a75a859d95cdd06dd9aaec3d2 -0xd8637d9b3c70c4c9b4724ba9bc072031c5922b15983a6d653ea2dd81aee83786 -0x2a75e9bc6c0b86a771c85a45f8a1df6f28091f93b552ec99ff03f9891fdda498 -0xdf7e368799c59011300344ae6bb99eb07ab11df65770bd3c53b7b6748abdc9b6 -0xf92b9cf35a9f3eeab877d1f3f3fe4182615296a28a343a12f69f25d743d42a67 -0x5497e68c088bcd3d8c1e19a2605aea6e3de3bb3b683cd53d3651dd4f682e0cc5 -0xa320188d18bbe4e84d9e0568a32d1fd41b595435e69b4f85dc162b8f3d081e55 -0xb5ef134124cb8f82fedaa4ac0f4680548792e6008c4b180edb0cbaa532b6b7df -0xbb27b7a2d5a8603a2a74ff92d249d40859a4c17cced96d7c9b8fb78c0d23dd59 -0x76d821c990ceaf433777639b6d1c01f31de522108164c272556d6b7a94e3faf9 -0x0605e8d05058c16f7c60582b74ffd65f339cad4446082bae0f9dbb11398cbff3 -0xcc434be4f914d8a61e66b9d085e96fce2ef68a3892b8bcfd8df2daa93e589b5d -0x2af84d16296d5bad5b2716851750d470f755ff6adaebd112219ebe51498eaece -0x09182581d6c00da223a92f89d03d8afa36dce7bfbef4d388117de6a4ce43435c -0x9b96b40000a26d856b0a53e5314b3861ed65925e25ef5e3a6e25c51dd5815b47 -0x7783608ce5b13754690b3f49f49747f0d6a10e449481f48c8ca2a93b24beed71 -0x14efa30148f425cc75875939ed8a88c44b8dbdb3dd6aea8d5174e8fcc9eeccb5 -0xc7f226e0f7bc6da48fb87992380212a934b6be38090a2e9a53a5b4b3293c5b32 -0x2c63d628a8f50408a907a33efbad81dad53f87d9b8f2a23719721f000075c307 -0xef78e15385bd8a571b6b19596245bab0a8a70c99872e966c44787066d48c9c58 -0x678586466ed76c0dba9af04316b7b82b04207b7c6f48e5a5537e25892530d7b6 -0xa4ddfe66017b82182faa48397ac9c35280984fd6c2aa8d9ecbd23420b69d5e14 -0x6532459deda5bdbb7e3a3ace7b702d4e2e2a5c71b85cb110a3feb2a7a3c41df4 -0x3cacb181ba7585010829c496621b52da6a9fdaa837538e95976a8993b52a889d -0x71ad3bc44d464631722f394f0ce3212e1ab66988caa085e9cf8d35e714a39dce -0x3e70ca7fba414afbf5dbf5c25eee046e52f8464a06879af57bbcb3d089d5107a -0x0759d59677d8a8de10c315360db00af7d59ea2cde0f13718ff7540b0000f5ff7 -0x2b14bd2bbbd521d364f6adfec6542cc513c61336c0dd5466d73075eba1f0fce1 -0x3b11ba4defbf4537929af363301f5c6ccc30f0ea8667916110601b9e105adc38 -0x2039f32afd7af6d147f0f0fce7af4c9d6038788e7383574fbec9a6d79d47ce12 -0x29edb97593f6e60d3b9550865451de2454457341d3d79c05c37c3c45f5112446 -0xbae62981145b25adbf95c671d521aa5bd3aba2c5e43e9d717f4b38580421f827 -0x122594de78051f690ee41618d4616b3d1735d219fa7a1b1d3684b34cea4df735 -0xe0e5516d0bbb273c3eabc52f7220451d0f442a9957b8ca24b9f67e8ee6c6ce55 -0x617750560c0aa4cd5f7d2276f9d2f1289e30b2f4f08eaede5eef70cd71b6d630 -0x6e73f220f96c432161a81a8e4987dfe99cf4a80778793c1d6bcd520480793e73 -0x5c7e2a15a7b89a62582092145f2581ddbfabacfd5f6dbf85cc70c249dacaad1c -0x6f0d987d78c35699ea07d556d9ebf8c04562443c39d65916713d7a20c5200d6d -0xaef0632326e8f0ec48b2473c4020d315a01c7f95874610556ed9046a7b676d43 -0x81682149b3000714a32e547a6d2ea95402e2b9f6a4935accf731d2f62dbe0535 -0x8f0340d8c5dd7f50b7245a073c5074d3065b8a1db19a48b888d3912ad5f3fdb4 -0x19695b5fc7f126189d22f396d633cd9678329ec187585c56e1a6d8c04fe4244a -0x13d1f3c470eb8df9f8d4d99a3e2aebd20394d6519ee0650dca8e9dfd2a879960 -0x909ff647a86d8c8effe999c3219ee0889e4a6df02e4d451e5e9700d075c512cb -0xf295a096bdedce4fdd1244c7033e2fe5436cfbfe6c95c1e9815f6465d3c5e6d3 -0xdb98104fab22902e2f110cc4fa2bd6d84fa8025bad461b29e1febd16b4daf7a8 -0x4fb40d5e23d401f034f7c36bd892d2161dde7ded6ac77443e8ca4220cf9251fd -0xf540ffc2988dc4f05f37a44039ca89d06a137216e7a4c5e157f47daa4a2d0082 -0x2a9d0efb0144c7b15b1b2ad6c87963846f6f69390208afd58f6ed9d3d3700faf -0x70c122251442d95413184d20b9e7ba1ec592a3a762d8c3bd6bf216f35cd7f168 -0x4b40672cb09332c84a7e85541cebdac200eb98e71e04d2af30a540ce103c3610 -0x71b07742381c3727be0f76ca62bcde0f2a21146d7764a986557030fa01ff4a11 -0xc4685e6c8b5c94551b7fd25d560ddb6ffa8d2a50a7ac33589149829b338a2005 -0xb47f8539fb2838d4172c2f024e830cc82ae08634b6b5655d9a55f3dc7a946e40 -0x997aed21df1238e35c5416a5224c7778036b9185190ba02c8606cef1657a0233 -0x6cc728ac36f995c50c26d9f4d433b03a2cc31ad028516d2b63dc2bbac49d3c64 -0x5b6fc6609f6b66430da498ba2804c233e656cdd32c155dc94dae9383eb74caef -0xc5e8d6e8716b65632d2ce03682c41220e8b96d6f7475ff0bd023f8f1bf3bca91 -0xc57e3d99b174f19f169240623c6b0913a6e59f77b8b14d545141d2cda0200460 -0x5b10bface67a7fc12926ad6f12963ca246cb417bc19203bf0c427dca5193e75b -0x306e11d72d1f1ac6348099dffdd93e82822d534a71f5c250f4a29eccc4034257 -0xf8f0a0f6f547fdd1d1b90cecf8cb8ac3b8b7f4b65219c7b082a0fe8e7d2abe3d -0x71a79a02a0e1c5ca7615627bd7e4a70f38475e1cda86fff0e370a8f4baaa6ca2 -0x97e0b54e52a6d5c121c832e555532cc5bf13dc606d9d464384dfb289b9a61ca9 -0x79158053f601869cdf6c9c4e9c356508b2285b4e2d11954ad0bbb38c02f1657e -0xe2fcc4963e1f3159648a468e1a5f0b09f65c25081dd2bb947d594227f3b15e14 -0x835b7f1f6723d48ad0cc55b9879a39a4669ad427ee18a13d82bb2936890c44ec -0x32777e5c81322c1fe7fbefca112dbcb9edce5911677e70d642f50d1563e19f10 -0x4288a0d60aef0596bd619b93333fad049058a7cb96ed004adc62aacf609f99aa -0xefd75225bd9985fed27baef3518672a9ae02e62a49dc09f473516ae9cf766cf8 -0x1769827f6c6cb9101a0b15ffc1e3dc7f2b078f3772bb61dca8edc83f05310e2f -0x34c53b3764af8c284c07e55dd6edc18bd68825aaa722ddf87469405c80e9ed45 -0x66c15ea5db29b71f994e19ff2c5650705551718bf059884d7056f56736360f02 -0x0da28c54bdb01719438a97ae6f578fc9004117d9c4de9ba7026131acc58767f8 -0x87ace430932a7a2eb6cb6d831e8495481d18ff2dd3ba26cfb54b378c959abab6 -0x8f3b8d81ceda4f80ec524fae5a30fbacf763a3be130005a41d2c44468668d8ff -0x53725b23e6bddddcf9d8b3c65ed109a8ca0928652338101c6bdfc98cb63a47b7 -0x5a8bec8d48341799e6379120919c98531eef880cdb4226ad83220a3bc314d64b -0x18e1b31327acf784d7e55f9c35530413e7c14af16de2ba2d8afef5258e3e7179 -0xb7e0d401b3b0cd76c01fbf031fe1ab334cdbecb86145853cdab42eee1f23f9b1 -0xe706ddf41c8a29c3f43b2234ab1c976d623cdf8410db86b5b2f52820e8b00922 -0x9df6b41780e17bf0068f5b014a94ecc2f36ee19b75fb773f77a16470bf2aa6b1 -0xda58d3d715873ee989358b3b9e94e85d06954ad0449a597b02124ebd0c9ab2ac -0xc26793a7b3362f1f8d43a4eba34264aeabc08585d137f1b8bb435d20e4a4ada6 -0x21c398eefb9ff0534ab72f0a32d64afe5f74a05a7735d8b17c34445caacb81a9 -0xa2cd07f50ec4c8a8ee9b57137b0867b8aa9e694810c066ca3850f423beeea04d -0x9f6c012cb97cee7b4943e0a7462f74bd0031881233b62c6e758b4cb5cdc716a7 -0x246d98057a9a4f39b947612506fb06b40d69e6e50f66619b08f2b4194021ef48 -0x6287b6162fd43ba8ba430c71f79709d0da63946c19a50d54b9b45b0e0eabe8b3 -0xda09c627f160e38f6f9303fb7f88f3edc8604555d35871e088725f00cc9bfbce -0xb5a4b801fe223e21c0148777f4972d81e82ca9b3f6cbcf77e9be8dc4d69669b1 -0xbcce71a8c0b2a4e080ee7594f13351808a7fa2ae44b908002e90f6e01dc47c3e -0xcba05aaa2bf132895f65b5e2ac7e5a6bf174d7cf576c8c335fdabc4dade34e3e -0x6411a7e3f8ae4771c3147954bd1990e1972c3efd63456247db2c76e4d4cedd4e -0xdd8dd388fdfa259dea13004294d7aea0c24b6739d7491dce906053a7b5833175 -0x231adbf68b0e47eda6ab7c7e17651e61ecd384961bcd938549124055776aad1c -0xd42e0b40b77e92dcb2281bb32a0d0cbfcce9dd610fdc2c77951bf81480e12560 -0xb2065b236c69cd46483d8a1ba304b5ebece0e93a24011ac03c771bddf2f14839 -0x165635eb69913dd9380fab4d50cd19f9bd707b20fc2cc10d906e792626bb1185 -0x61c88501675f71203ea92efbddb205d5e0b86c55bd7199a04a962a452e556637 -0x02c8160528f67abdcda6f8f411632297da51bd136fc2a00c5a86efc0744f3193 -0xf363811f6a1095c1a960afe1b0f23e640b7aab96cec8212501355bffd00c61a7 -0xdaae84f2c2270d95d9b06038eacf43e755842d5a25965a7f58b765612954e84d -0x8c2ff627e4b2be49204a1b8e66a512325db6b57e826e825fd7dff70a633627f0 -0xc75c8cbc16aed66f115eda4df5287ea5c2162f4ef29724ecac9697de15b71239 -0xf19190b44933ad373da6ac2e95d56042bf12b330ce0706a0aec40de4869523da -0xaedae9eba025f01ef448503d1781209c14a0fff940e84c0551e2095f4511e8a1 -0x29ac774bdd502bd549220a7507b5fb90394bda29b45a972ea888e955ff319cbd -0x8a8723874564ac0138f1572a57e58586773e07c28a20900ea669b489d820de59 -0x1768b23ac0605c61fac80127322958bcd3f258775d3315fb840109520e55c223 -0xc63044e01a5c5d9e5b3079a6b39c59e0ca7280be1a36c16a5f550ce23b632480 -0x34b2d951493fe07448f142bead4b4555185b692572b15d7d908d944ca09b59bd -0xa4f408d3193b494e78224377a0c93f684f2a129d5de4677f1894be2229080eb6 -0xf0c8636f9a8cbcda58c899a950b8dfe823a97e242bd764febacf62264e641451 -0xbb8580a2a0f687f663fde74115998811d95c22b80a5027acd1ab7799b1dc35ef -0x4b23d8f77c82be181f7d3b759cc4c88a2a995959e8c96f6c6c62233d9b7f95ba -0x7da52ad1b5075233d587f8b3c100510bc4feda1ad1b873184361c33c9a7962ad -0xd8e4e7452e312624ec4ceca8808390f973401b482ce4f832d8c38c3ede186621 -0xb69f03929990bcdf11e87e245f9e695519bf2013e44a7ca1a4bd7f8769b2432c -0x26b4167bb1c3a21ac14361dd5bf39c08f0e5f9bcc6c8b6b625f0c302766dd0d3 -0x6e6fb5faf41b059ea94b79427ffaef071f8b1e9e873e5152a1f61613c273e417 -0x25eb849673eeb000ea03e993d2eb688aa02eb7a66b6c128cbbbf8ca767d9676a -0xcaac54ad7a6525629207dae76be45d04b35407570f7e955732557b97c9d51749 -0x027caaabf139935a7a799deaa299f2640c4fc71d5201fe75c0f4d7738b0127fe -0x3090e2fb82ccbec9e0c1def76fc5ceae4ac0d07efb38e80b5ba2b78c5ee37a10 -0xfeabf3300d1c78663ae3f5b7f58f4108597def4a351e3f5c1e5f9767ab527d37 -0x4084bddeafb39d2ffaa8cd7850c68445af0245ec2357d356f62ca54b852d9ab7 -0x3635dae25883bd4dd29a1c948f6f80b67b8b786f43c8659673418ae3ab35dad7 -0x7f735ecdebdfab6d41c138364d7fb6065f080c67bd17363a2f3087d94a6051c3 -0xa37cbfd945cc4ef5da496d22c12df153ce613ee2097dd9a5786db46d7dfcdff1 -0x980102a813f7d496eaa73a1ef8edc898a644e68bf812905e3db046b368603f1f -0xe1c5a0ac98c80e0cb90992bc73b8035f5162f313be47ddf84af6e24a1bf246d4 -0xccba7bdb0cc1a5353f95896098775cb0a6dd2d0a6cb7eb69010c965799807260 -0x77472db3afc257a71288b9e3245cbf9d18ba1f122d48470051641f913decc1ba -0xbfc868030cfedeae807d7da5e00af917c11b0a3848e808367383bce4d6fe30c3 -0x030a34bfeb273d045f05774aa8b829644e24206794b2594fcdebc73b9560bee8 -0xa328e921767da1e89558c29dc5fb6502978022060365fd6f2c347edbe0f40e76 -0xbda75ff1409af7533ca17f77a0b972ffdac75be5d37ace80b7cbdb8e52d4c3a7 -0x9a4be4caf96445e44545303a65849891dac07af91a4de2b60aa915ebc8426bc4 -0x8b7ab3076ba6e11950a2b63b1263650ccd97e789cf40e19eefd25d5d9b19cc94 -0x5feba913f41c35c52402a8909fed9cabfb87fb48bf7faa582033ec0e4d9ea942 -0x551559161583b782521e046a6d5f11eb6e6e370a121f9fb4bfcdd391d1fb1ca4 -0x34fbf24cd879ee519a8501677180d33eebb35821e3df9e80c6a1dddfbf70d527 -0xd37c59456770550d26a12c8d2bfafe5d752d103d70a4a5b897a74f54cd2913ff -0x16c065a323caba04fedad101716637ac3f9169f3492b8f03426732365e5d2090 -0x3fe939dcd0cfc58b35d8c54b78f0c3363e30e78482aac497b09b3de3856edea0 -0x26a8b08d9011016f4917647040e4a4986718da8222ab1ac71e8c5b057653c11e -0x89be4ff297b45e24f5bd7bd2630ed38588b943c374c0edd00de099ab930e3ed7 -0x1a5832249e553c1943644f2b20bd5bb760c2cceef1aab67dccc8638771686a1a -0xa2ee0aa50b50ebf90b4587252bf33edb85205e4ee1aa37e90cb688aeb719b2a2 -0x16300feccc23858f93c3945e00e3797b94009f4314dd6b633729c9bef3c4655c -0xdea94ffc58da5ae73a7327fad237723944052e88f627e3758388aac1d3223d20 -0xcf9bf0f4df301b49f51f7c23dfde76ba682e8ce61c4aaf013e63f5aa965e01b1 -0x78231bf423158d6493f865f0c2e536a58daa7b9fff939c5b3796bbf1f9bd8bfa -0xfdb543b87c6fcf6a11ba8faf350bd12b69d83289ad497507a5081eba20e66ab3 -0xbb3c181a53e368b2304d42f68fc5d7325aa37c118db7f3c87b154e83d97232fd -0x738266eb9d7d813c455081229c7ed560b4e941aaab635d200671e83a0fe3c96b -0x5883956410e20ad52196dc14ac11df7ea782a3dfa4834beaa702091bc963456a -0x4d4d9a5aa84f54fc72770606ed60097e1bebb80b90d3f7953197daec802351e7 -0xd3ebf35b7f7eaa8e69877cda2f0bf55977c6019e1940705698cff19bc47de2f0 -0x4f19c7f98d8ed852fdf01339c7ed2dc9a9681bc1e3792ec0d2c9c85910b0e595 -0xba3679238c988f846b619337eff683cf7b3d9af4a2bc15da05c1745dda60c34f -0x33d271355f448980ebef9d40f8d0ced03ac85e042f9e1ed4f38f988175dc10da -0xc6dd7a2299d474c489695e816519e218e2c136624981bf5dfce509666bad93ee -0x26af10274fcd3457707e86f282512309acd86ddcef40216e80882fee76f265e3 -0x76f7f44f1505a8c1e70ba7d50060fda6a59e9d27568b7a72ce31c5d78740f78d -0x4eefbd8d03b14a94dbd5a9d956fcd4ea54e4f328dd00128f086e144d3033171b -0xc08ccc08dd713a8016d866a18baf65edd83cdf98ff4a7531c36b04eb261051ce -0x5ea08a39d421ad2bd90bab8c617863c803cfced61a9e65f630a1ce28660f8d83 -0x3199754c80d7ef3a427034278222791cd42139c17871c12e736913b5fd9396e2 -0x2856bccc4e9dac676516004fcd26bd1daf370553c63e1840acd0c8758153ca39 -0x7188ec4a2bb3d96d5ce861d4e43a92b520d698eeb4a1566147187e2e90609dde -0xc40ff2ab40978678099f602ec5da49ac05fbd0e0ee59e8e0f11447065614e991 -0x9742b2da168705ad58ba3beeba299a58179e33511324992eee9f48dc8f2fb4de -0x74f630d930bbde0bcc4ec63d3aaf54443f95dbac7bc1632d8f0b5475aeb9b6b7 -0xade697176ea705e0b41612aff856044546a2a55f0bea0be39d5e19fe07f31343 -0x55bac4d729fa8d3c53ddc41f0fc524f08ab3f0f7b2f7f71420c9dc45cd1b4e32 -0xc31f97a4f4cff7ece64038e1c3d7494f79100dfe3cc46c69db8b9e772b9cdb11 -0xfe25c2021290758bb8651af20522fe8906a8bd4358d456c7dcfe801c830eacb4 -0x6b74908de7446dd3343569852c0ba1ffe8ef612ab85fed6e1903c7285b83d7e4 -0x7d3cd456d8ac5be8806ee39b03413f8b8e3a76812bf130639310baebec2dcaba -0xd4562624159d442184917c71b2967a2b3f71f4f7d4f89363a296cda06afa94b5 -0x182e9811451abf2c64277d10151bab6d3fddb385eadda41f505d6d32bb5792d6 -0xf91fcb2c1fbaa79324f94cc7c18f5db4b62c85b934da071b7499a23706b03528 -0xe4608777010ff7613492836058332523c39f39960d903bd9bf1b43e6adc7b283 -0xd8a6fecd7704b81f4a6c45f6ba2ba285c9592e04122b840dee7c799c3d0821bd -0x3a3df19148facee1046288335c66439caed611e524ddc860fa22aa6b21236e55 -0x231219933b8748feccfc26877de5ef3bae476fec6ffd6a0fc4fc9ccd4767b1c8 -0xab9c7eed3bc5ebe9b425e44cda9a36da5e06e34b317b129b77900d15567a6b8d -0x776603d35ab4cbd9ac9e3fb4aa33ac7a79397d5fd7791572149ea7a15f3b8103 -0xed269c947ca9081835ed3126423ea19f04fba00b64a8e3d04288363b95a7f953 -0xad7c3f60acccac65b87c069096f0df0741d9f99d60e1a6086bb293e49c3bebd3 -0x7443605e2c9648b6fda4927716d52ed12e9e1e13c4ff62efa1d4a93dd26dd148 -0x7848d60140198fe768eea717bd95201e523ff4ebb799276cfb9c66668af4d0d7 -0x9f1e7653296ec7e5b7f5ee3c132dad1f87235fcf3f7841a871d5e8c64fa3eb93 -0x671d9af932059e96a6811374934249baf70df08cb445b793677d00f6ef90e25a -0xabb92d958aac8b90ce24c5be40d672e693408a844561ba83219fc9fb3068042a -0x2c5e937fa70a38cda6a7e97262b3b561f3e0f66acef4520b2ee2ea5657450a04 -0x9f3aa8421775af48479b667bf8bcb2a8f7d6ee5ac3220d7e1fc4b94f4a51a367 -0x4bae39843f547fb6f6b82e873deb3c0bcd6ba168921bf967a4720a7279d60ef9 -0xb28cf86a02fd922ca11d1352d88568b84bebd735ddd7a3d5058c26460f39173d -0x109b3ef3de5151bd0508c664648b403ba593b9c5ed3a9bef6a66e6e25d854497 -0xb976c3af49dfb7477f2dcc2920cd868a8aef52ebebdfdd643505fe7108c4ac46 -0xac4d4a5cbbd7afa7463a6438696230d03f32a530efe53a32d30daab503ca6a04 -0x56daa7595e6f690528405368458e1c3e6288bdeb88560df976c27aeb96a8c9e4 -0x2e0053bacccc87a7a9ed9c6e93c19ad6d870686ec08bbaa9fe01b79ebc80b1cc -0x660e5ab49b7c48dcdd6df05ec0154405ac588a0c24f918df4cb611f7c9a7e88b -0x2c2eeefc59c90a4d6d6f03a064bd34961e67efce94b9ec4cebf637e0f55e078a -0x49ae029a8bf7fd842919d0149b9559b45779298efe464cfced3e7a8e3f26a7bf -0xdbcab977888beb48a1bf149b6647d5689505c1b3d9ecc6ceb5d10e99089c6ca2 -0x8484f141bcd3e15fc0608a056dd0927ae8efa3d55e57218dc96ed407c88a182f -0xa8318c8fd9073fbeb288f81739e9b88cc2865ada3cb6ea8e0e5d41536c4ff51d -0x4336501d1ad236fb16f204a7cc5dee0b70b2cf37965e1f9a897964e99dccf5c0 -0xf372e3c8be556457db3b3d2447e917e296ee872dc878593f0ee03fdab534e4f1 -0x980b5f0be5a08647423e817d21b23444e401c113c30efc69b6eced2ba7caf1a1 -0x18737de24702402ca77e360df6bddbe8c26ce0d66c356fe61e324e3d60622157 -0x93f9ce8776cbde1772a2554f75ece7b5cd2d621ecb55ac69b18c9b4febe1bb4c -0x88147f1cb61054f5642bbd30429d3da7f985a3f9d720e14d3f5d22f67a73b4aa -0x704d46401521ad54c8ea02e91abd9d45ff0a157a9310977fe6949429dac0af03 -0xdcba8895bd76924dff2f2ef23ea013c4b51112a8aac706210cc5ad88880bc6fe -0x03fb7aabe36a1fe9a10495980e5f62afc922b274e0f66d1a45d4eb618f83d525 -0x6b2437a6f5da3ee72c6bd11b9089aaece22f78d8491139a776207f9af41b115c -0x63e93ae244f097ab84c2598e9eee7e2c53dbb5ea5f1ae83ee1d8f474cca63f7e -0xbd07987a2ada7f3594278ef885e189257ce0ac81fb0e5e1a3b37be3bf5aeda06 -0x0b999d8107fef9ca9190d66809f87113d1dc907d2554ca4d2503b1f3c0caf20d -0x936d12c1e4fccf1d9e0b9fddfe1d5a3af1dc8aa5ec1aa16b814db1b0c6b612d8 -0x61f7971ba04e0d0861fa2d149260de95c5614ec8a1df0ad0449a37c129fab09b -0x828289f25918c46b470894effddd1d145472278a06ecfa24a1947eaee115084e -0x85184ad96557adf319dbf1fb378f8f3e0d1f759febb43eebc826c71bd744266f -0x4955b5ef6d0e50fed2cf1f014426dee3d8eef9545210821fd3e76bfceaf39bee -0x9607992319da69ec86c82b26cb91311471b52f6c72fcc88297677f23d80361b4 -0xac6f09ff9f714bc9dcce737f1e57fa3425361c480af991e84eae4ac5ec49eae9 -0x54a3805b53e5c46233b1a46d5b81289779b03c536ca24728afb0ccaebcf925cb -0x894e2d31958caf13bc12a945f3c39b0f2c9b22b6d2efbe16a634f755ae4b1c48 -0x03725ba83e13d1927a4986e9334f2eaeb60da1395898e95183afae35b7e7eb23 -0x05ce6fca29fc964c0acacaa9c8eea04eb6fc4ccd26d9b4e8f68207305551dee9 -0x42ae8a0f8b66c3c845ba75dcf32deb32045892e31cf6c10c6b7d0d59d6d1cd6e -0xe99c031f191f763791051e90f8caa3c3c5ac2b2502da63ddd71f1ac65bc2576f -0x4398f4b79ef4c48c240fc8048681f043b52fc13105f63d6692619bb2fee18424 -0xc5cb2f39605d14348193bbae21ea504b029ca5fb4791c7a184d378baf2a039f4 -0x8fee06ce02f35cb40e03640b84b32dc02c001c40d83d5f2d1baeb5e3708ca704 -0xc29250fefbc8d1b17875e98587b6f2b8c8ed40b0d2889619e97320f7ee14b3ae -0x9a7523b5275f36f37c091e4506a54652660206e5ca5b66f6cfd58b8b09a7e228 -0x7c696f3012206e1b243bcea0e9c3d42aad4689353a7165ba02291dd11072444b -0xaead55c3a587ded1bfa31ce13f273245dec5175ce267527f14d4be1570c8740a -0x4404fa72aa7fd6b55bd92ecad8711fc9a9a91b3be359c7d25e7127a725ec5237 -0xa4f86d19e868ceb726e7fda87f49c81779c567a9e6fc0aaaeb344e6838ebf453 -0x21cd0b8f0025290377d7848135a3de3549bff4b70beabcbcb0fd920087415ba8 -0x09b9485a683299be7bfb65688e023297c22012185eeee9cccb9238f468394eb5 -0x848f6743a1b93525c2588dbf6e52584cad5fcdc37d5291faebc942adfd626be9 -0xeb97a73901beb7483cca6e03b76a426ccd49470d8b5367fc9f40a433c5332d38 -0x297059eb1f42cc2f67eac64cb683b82bde6ada2169229308ecdb8914b8045312 -0x47848237244d984c69bf7b4ffc83a8c58e58cd17763ea3df2100e9ca6695f4c1 -0xecfef613d12e60e2ad8151f7f1ae825e1d2ed657735b4de5cc8695c9a0a25496 -0x1af84eb31d8b2c4825fa6fe655774550fc9d82019afdfe41efa5aa2a3992ea5e -0x2a044f12923e7e1cee25e89cd7a67a21076af45c810ec3cefed1ce23601b629e -0x532ff19e4e620f2af5714508a2dea0fe37746466cfaeb1b5742ff268699d2f52 -0x45f8eec85bfb23a647ef0f9578990fe40688edde84eefc299f481258eeb636ae -0x372a784d3116008246d50c356f6c3cb50f14750853b8ca5554adfb7ada726425 -0xc1f9376c0ddf3d827deb38b52f57f6dca721d2327d25100c26b3ff999a528d7f -0xdf3beeb0a5c9db25ffdd77b616b0339db02a1c6369e3527879c814b9b95d3b72 -0xa8867ccdb9f48359c93afbbf98f8dc18e0b1c5895d5d29ea2dbe55c98c27f8c8 -0x5114fcbb43215fa3207036f506b233d9412dfb70b2a8c2b26a97f961978b53b1 -0x28525f2df6a615f3dfa63c4be1af49e596038f84a1908d6276e1b3e2c03eb1db -0xe85878d320b0b3fa6132c4bcdd0d8c78c70ebf19ddff0a42bbd373a0feef72a4 -0x8ef65d5a66d32eb68f38985d788692008a54a9a50229586be1922a33dcc62263 -0x3a0afd0e5ece6f79f6d70bea6aef9793400273463c00909fe215aeaa6a35276e -0xb4f43d1becb3afa0d5ee10b11cbb47f544a5f9a415bbcb1cd8483f014cee018c -0x23a83df2580bfb860f980d458e3b17cb40d121693058832f263b59f4cc93cdf7 -0x3ac917533a5ca77e737aa5c6acae2a715e34f3c74189d163373f5f518d9cec60 -0xec287afbb7c8cdabc426fcedef122cc9fc01ebd3b6e954ff2649fb3c62b4b7a3 -0xbc1fb7b2bc7969b633396405668f905285d09c864263a01693b938ac119ef5e3 -0x3ec5db68815484e15198795b85ebae6bff1f4ae80a5ff0fc454d63fd130f92a2 -0x6ef00c01887cc59e6a21e7980ab9df499719397571f6fb99dbc3672261243f62 -0xecc9be9d19abcd111919be4d496bcfb890bf24d6c51d4935b8f111aff01489df -0xcf984779e8f13fd5eee3e99c09584aa5dd1ba0468754e6d68e014375af170a13 -0x758f5165aae5437854b2ea53d90c574bb0d26d74ca3e34a61ab84851e6abe337 -0x4318950a53d84e28384985198311675c31e8ca1c71a122103fa8fcdbe8e6f172 -0x9ba3837ec7b248d7907bde3237f33235e452aeef7888fc2d870a0d0d0f647752 -0x7d1fdfd023a287606bfa6fbe1b07d27e8013c6b8d5694bb1fa40f264db8fe663 -0x64c30aa8fb280fe909ab5c8f06c246a94ff9b25c18ed06384f48c3ee4a125c0f -0xead7d953bb9c26c75cfa5a04abd7d29731dbcbb1eec9c1d367f4567aad82a402 -0xbf3047cb00342056dbaa1ab24476317736d7d9d9b75d03daf1df9eb00da6ddc3 -0x11816ad01d5baab2025254c48bd2d4c05b794005d1a4bfc094bfb52ae62461b0 -0x2dadb8886500467bec5904e538cb699d916016fca80560755d9566c94a919661 -0xc6b69c6783b97da7e809eea6e9bee62e662dd0745b5be13c56e17ac8869e88e4 -0xd7b755e8d1d2ab116137ffa251c7c0eebc84ff51490063fe090eb1ef23f9baa7 -0xdb7670cdeff457b08d04aa753226db011d3e9916ef3d179a6f86f75b5714f987 -0x8ea4563afdfd82e97d3573d025a863a594431f100554ee89f363084f312a496c -0xf1e4c6aa7296051fa4406dfbccb2d39d066009512ffafc0c9f19092dcbc555aa -0x5e7a58d9883c341fd1e21cd78e0e33ab26af190f4b218c3e180684add717d662 -0xc9d37bb8bb04caae6f300fc52cf5ef87979912000aa90b96b3fe8b91b9a98639 -0xd9acebe18c6af7117b9b1401c62b2d7fa18725fea905ae16b2da56fbaf095a5c -0x28ccc17a1001b5ab1764c5439a2852d55184714efa31bb775aa4fc9adae20c62 -0x48d0b1970bfc863a55837b33e6db2cf788bcd011c7b57bbb65b68c2bd98b5b12 -0x1563a9dc0cfb58cb43f7e76700b4bb2d24b2e4ae6587e43b1f848608d8144101 -0x61371ba8f50e76a81d71589d5e91d7b8c3ff5c2a72aee90796fda3b63f89180f -0x9dd94bfd8d345aa067e03b8c354170c6f966e52b69304354d30792c8038635e3 -0x0d9142c0a49d52d71b8042918c0a2ac13c2d5ad09536c674c0f15e5f809a9cb8 -0x106e4cd986ec7bceddcf04f27c252829a1fa399da0d8d4579a156e442ef80abc -0xfcd6e3a1ea1e178a6effaa4fca67e845105f37b3d309a977125f3b3355e3e35c -0xb5a27ec1be88ab63243c03db3843f788198fed031b6baa586533c693c3f3e5ae -0x4247c9bba6d8256c29db39f1b607d00e284b90429859f73ef81a1e61deb9d6a5 -0xb6d0fe5150eaea2347130bf706a1050c1b34b5ad018c8eae30f5445e18aa753a -0xa27e4ee1356d2c85f501d7b5feb9bb4df6e64c7a8b59dab9f00091909a91deb5 -0xe5fb7d71520e2c68544c5292d0be0ec1f0c277cb2e4681939c95619dd9762d43 -0xc7b3a4b076aaa05acb5cae4c252004b21503e9138e7ffadaeed4ac6dcda02e63 -0xd069671221c109540c5e6660dd4ceaa2de83eb641970e9d38ffb9204cefe2039 -0x36aee73654e9b1585b32baeed7d220cdb8ef87fad56fb53a342be0d2f1dad1cb -0x03aa83551ccff407f738160a68d0b155a1c29d9626c3c6b21769592231a4a0da -0xeeb4e994accd6359c74457d5d11704ab9c2127dc14c67d82280de1beea5700cd -0x0509e16e7620a550711551de46e831b2a75b8ce3a4381aa9928e636719aad3ef -0xdb8390ccc552e3966e0e23cb08a6b7dcc56645e9f9d1d6aa2facbca3aac5d1d4 -0x18beaa8b940ea231cbcd021ae6b6ded808f9daaa521d9afd60bd8477d1e3a474 -0xfbbb59316cd6f863087bf987e786d1fb2821f3b6ff568e84105026686c40d996 -0xcd98536db13a5b92f71ecb8af9107034a19a96016f85cfcffac0332ead1aa946 -0x65bf0a13f86b6f41926dd8d1688b98d29a49d00100ac51679385db52c6c3a1c3 -0x0351f023bac88fef64321e723c0d07251cce00ac8595c2e5cc87351d0a0a343d -0x86e919fc0aac5692e5f49a513576839a79648691efd95bfb4de2840b5c082946 -0x0741dd4748f67788ba85a9df746e6f101e9148e636ad00e1471fd6d6d197e225 -0xf2c0b69e8e187a4680fbac6b597ef491c7109e052ef3dddd8073b17af5a8e872 -0xa984251c7bf34933c36517978234ca27a1b6f508bf74bb4b5f2afcca8b9579a0 -0x4b0215e884972e709e2750eb10392841b65aca9a876be45d2b723ee8b049c695 -0x1f583111bb457e8a831bf6877637cc6b8edc108a90bf0a23b02b0c40757b92c7 -0x7e3e04c32925872cac3866de6a9e9365f13b59e2022e069c5e6f85860dcddb09 -0x40e49266f285d2dd2fead0d5bbf8de4380256fdec317231cf04da8037ffe42e9 -0x2b117d894fb71b92df021e22ccf4d673a724f60927ca378dd626a8684e3b0533 -0x3ac06264d32c43674eff23c63ff46086c53d277768161280bd4c4278291f3f29 -0x6a6e1469991233f15da4667a699d0bd549c06c995740d480e10ae30acef47cd5 -0x30dea86d1c6b470e21eec8e1ed3daa66a246e3808f3422f11e69bfadaa6d3471 -0xbba9141de28b8f400a436415ecdec926ef9f0f9660223e2da2a94dca51dcd5e2 -0x129049e3d45679e5d8fe4800041c92acc4193ad019cdd60e4c20dc4f71066e95 -0x4a458ff5c1875c88f09513d8263b3c55cfbc1bdc7b792b6d291052944d6aa763 -0xc68ecbd276dafd0254bc2d3e2c75da380c7e93abd0c5f9ea53191db3dfbda49c -0x822acf190f367df8fce09712227d9084d1583793b4212548bca16ff7a092e15e -0xe732579652882e624bb19a9275a415ce587da47deebec2d1366388cc7bf53629 -0x8ede89703ced17cc531cad55213dcfa9f8dbd0fb1a1b161d57e720c6d88901c7 -0x9b42b76c0c6b7186871a9b65e4366d9f1ebdc55f9e4f455a11cb44ccec76d2e0 -0xffd271d434ed41aa3df7a4674eb40e79ee579e7b5be46c4235a76cc0b8641b19 -0xe06296c04d911383ea7caf6184c8e06f87aa891372e2ee21dde90e894fa2a81e -0x471e2731aba98356a06cb1dd0b8baa61de381109a7441e7db590b5c4cd5819b9 -0x9a56413a5d0ce6438cb0d21004d35dc88ee8fd0fd9aae3706e532b5141e7803e -0x64258c946f233ad5a4b28b593e0ac8a68002f815f3a2dbd23b1844d84dc1821a -0x309301e19f84d831c9702c64d6c56486dcc6bcba638d7b8b3d20cc33d801e37f -0x8e74e864d23fde4d5f70d9f4678953cc83087bbe0a33ffd74f44dcefd0f61a76 -0xf81af2489bcb7d14b463dbab4652f4c33b97231034cf166efa3c0f03433a8407 -0x6ff7acb10c95c764ac46baef658b2cc4f6d621f9b4e9d1e8554dd6020cfe8f23 -0x14757e485928098aa5cbb8ac5db91558f385b55f516e6366cffaf6d1ce610dcf -0x9dbf0c61ad4df0efe9f243ecbd9db1ce7a41d9fb54307662268ef7064341c336 -0xf0f18cba3f8b514af6a656e755d9e3e5d4cf6470164483f06686ba70b7465318 -0x330a8f1063ba4d335802104a487b761d7600bd45e50f9d881175bbf036b2054e -0xb07903503c5bd906b6844a1a65068fb1650ed3587624a461291ec776cff9a94a -0x35c7643e58dc5352dafdf9a45602123be246a77779b67662f4a0034fc0ee60bf -0x14d4c049f1af8a9920f2beb2f59293559438d6a038b84ba48ae7dd3411bb8008 -0xf018eda9a1dc145c9ad0e5933f03642e4773440b916356e2a28e05e663a28a62 -0x6fe5215afc45ba9fccc5c61e8ec48b08d14d1045e299e943bb0b11fa5dd2a2c8 -0x7ab86d4ebcf0f6b6c1dd6366765c8e2cdbdaadbe1ca3a031dd59d3be9d0fa50e -0xdea0e0625773ac5c3dc1bd4e02f1acc73d059c823262780327802d6581329f7d -0xda0b1eacbfa4cc8d226174f832d16ae07295cf397f702222c3636a2cfcb820e4 -0x3553bd2543212d0e0ce49638a863859d997cd9a30da30e941cb67c108d71bf09 -0x2d07b90cee622782e64d5be13d671691470402575d138f86f783dd7aa7342fb2 -0x3b385cfb9841e22d4164c03f95f810afdae0fe3eac93a6c9bc24e07b966f2e49 -0x8b3c381152e0f3f2e67ac024e2547bf372de19abc7f2412b72e31bce4b955a36 -0xe97e0983f5a8a3ce88d20f42c78b98ef0e7b21ce0b18cc40969c0dcef1a1b6d7 -0xc2b4a23355332be59278a661909c7f28b916266d94f40a6f111f3e9242085e79 -0x1f58e54251ca4d9be369e3b5d78e8bcfa513ab0feb4ac2e25e17270938421822 -0x5776838baaf89f68d94aca91aa9eb33476f92125a35f36ffa459c86911319a0b -0xf45b19d644e68335f4bdbb3cb50b0bf7af15e1a5faeda6f275939003264b79fc -0xdc1504d425469fcf220d5c088ec6c118952b6c03613ea0aac923d674040ce57b -0x800d144ab9d09d27f581a641aab0cc6d2c000ffc364511aa840caa370c540beb -0x5c3f2027444610bdf652fc138f04b61b10a41dc65d675d599c0adab879d662c4 -0x8a9d4a4eb8cdfbdeed73ab4e442170a01f75c60dbbfd5199f3a7196ba60cb92e -0xa2e1cdd7dd520113f686174b316a452c45bc2a45c065917ff8b5c71b8cac4620 -0xc26989572e04f5cfedab4db510ff02d4b12a76354ac3c9f812eba636391a2c1e -0x1408784f4eced7f58ede8d64bd1d144fdc728d251283dc50685816cc665d1c27 -0x0cfd76241e9f72e19dd383b35dbd5628ad9247a28e552a22a425b777905a2788 -0x66dab99c566a838d8d669478fdd0d7ce06f8d20061d936b938f6a2674d6ad345 -0xc7ab3c1645f891ef594206b08732540028dcd1f74256d1d116b96744ff95a437 -0x95913eb03fab7e21a470bfc0b93ac9d9bafac94ba1accee552fb8a4cb087c8ff -0x0c77389c2e6c3b32648088fd2e15315bf3f164a38e7596e894a7c222e7a202bb -0xee1b993845bf14673b5cb69b7bed6ea89d1515923ff5f19478f1c2850694ef5c -0x077ea220224f2183b4078867f1cafa6c50c70d2a2636897ee5939bba938a6830 -0x2de980aa1034278a7996b0aaf51a3b3348ef551ac5e6ed38b20dd50299d40c85 -0xfb6e296a67743c0d880225f5e1de5c99cc51be559c58e70cd30571393c68eb22 -0xb98e107646df845cef0a8add22633ca3331705c39f2114312e362194a395e43e -0x152557adc4e29e816f16f4368d2c6c268707dd041ed1fdb93e1bd5b1364a3164 -0x9f6be4c8554ddba033cbcc2ff08068d261721667cd86554225c7b94aab9364c9 -0x353def64f88fcffd3f8717f78fcc49bac2be760673e904981d02bc1009f8ddb2 -0x1b361a1455b643897c490aad0fe311a93eb5fd9c90db873ec67bd2d5f638d888 -0xefa9b6658e5753cb9e084645a66628d6846fdaf9c39e42270dc29aa7a1ab4377 -0x3d1d236afb340db268381d65630def3b948a53466e4cc11622a72ec5ed07c1cc -0x6f4ef3770760430e321aef90cbcd3a1a473266b802b035ebb7064b349d881f11 -0xbdbb7e7359c5fa128873eeb95f58701428de875baa789b38a47550a47c83a9ef -0xcf891dc4a71e08f09aa3a5886f967410e271332cea2f0b78b189eb26d7953ac6 -0x146afd5f664a1c19944b59b6a8c4e926ec2feb98ed2ecaae78e7bab314e954b5 -0xe5666b45a8eef1d4a6370d0329ba3cfe7d592328418bb8ceb528241e8c1f544c -0x0c555cf32de539c1a0c653afab6e49028907355911806010c5f39a5713bfcb73 -0xb8a90f5b0c078c7b690f965967c37a5f122e58b5ddcc7b7a858c6e15847f38d0 -0xf0d32f0d32cf7c652a8b5c746499efaa6bfaa2cdf9072b6b33ffe24f83ffb561 -0x88a6acaaa60f72c3d288406af37fc0fa7800d80c7613da92941b2b41f8056348 -0xb4159562a88308a42246da41f2c0eccfa3802ac10d6bf438d2c3318f6d744d9f -0x60d35ac9a000057c5ab1a79a4e12c5adb8d97c7bb608cf8a9c94fd2445d248e2 -0x84f83e3a6a0f5c75feb884d25519468d2f304ec3a432534641ed4ed77ea9af6c -0xa15d384c049a1ff3b5f8a86eb61b77b65c0a728a100c68d2cd6fe82d9d1b2e73 -0x5dda60fd538bf3c752efa37e305d2c77ba69ff38526964c0632ee80b3c0937d3 -0x80faa606e1ff39fbaf342e7a9892207dc9f51c1fca10c0fafed4d5b9c3fb3b00 -0xbf461137e9d766183ef3c0d432b67db68496859aacb3620c0eb3aab4d622ec79 -0x5c3716b1b7354b78857f58c4a0657a00bf4e377d6278c90201104d9dee73d7e8 -0x473f03634df6b7e8b7fb752b86ae59fa608bc57daddfe90224ca885d1f98e573 -0x6cb7557d1c7e0a1e6603586f1190863eabad473ed879e5b1dea9360cc60785ac -0x4f37b924e8bffa538c6b405630a13f4c9945f04a6a9e59d191f76ecf7ad7bba5 -0x43c64e8c3a3698c18e5912f787ab25434701d829afba8e430fc30952f1af828e -0x3bf51807bb4e55f5318ca79b1a8d9869ba0f76aa9d3da60ebb82bd75e095fa80 -0xc09ec999e3552df99aac3cac908bcd5e84954f733d3c3e25098f696f144f1e47 -0xafa181c26cbe2aab29e57a54e92428ca7470f7b871fe27c86387328d879f5c1c -0xfc792e6852e66ad47c1135b633b6aa0487cff45fee431d705406b29baa0a4dfa -0xa04bc79bae4e2202378b27b857d2bc7fd1054c683f00f14d010d1df1c64d63c1 -0x6bd64f80f1999e90a6a78405bf4f588c1963f7204b89164aa9af3b1132d66b0e -0x3f99322a4935058f1052c0d20476ccf97e2dcd7f8efd8c6f78ee9a428d71a410 -0x6ae8c126b9e74fde037c67ae024046b886264387773f2c827bca0a471aaed474 -0x266a97ad8be958f36c2c60e7858a379347f29c04bf5212799d3cc9a2d375274f -0xda552d8d11634c43f3e3f47104f2f98981d23ca93a957a98942ff44a8de63b1f -0xd04dbab8b224eb74886ee01e40058902fcbbf75c425d42167c87f22b1b35dde9 -0x96b2c7ad072ee89a750b7fe4f4ffa3466432aa4368bdde386cb26d08c300ab14 -0x0f8d2b2e882ac4b5169a2d887deb42cc9cb0f2b6fc1c4fbec29fb3b716f9651b -0x6270a2b05c787255b97593b3bbe9cb3870cc995dd2827ecdf8a5fe19b3943921 -0xfea5ccd44fb2e6314077b144481be82d954201ff05c503276399cc4955a3b3e3 -0x434f3686e0a5b5ab564acbc71e01d8d65a6e42206895c416fd055bf72e8ad692 -0xf0ca0514c53f127bbb1cf2f8e4868ac125ab1b2dede3428527e9388e46024932 -0xe5b5b9af2ca9c72b2bce5547a8c3b26c0536f5a090639bdf0c2ce184e08ee605 -0x5fd7d88eeb0e49508e1e174148a0dfe7d56388046af93aa8cdb282983ad30454 -0x5c09d379426ab0e6395f1a8ae7d8e8a6ba500572b91b90056c863315338e27cc -0x6bb54a9e327215bd42308f57946275d40be71fa817db2a3f55aab79724797759 -0xe27a6fad1f24154d503d5b02b24ac5f6b58c449764e6eeedad50f3a653017378 -0xe61213cf5ff4afb02e8638cec46cd79401a4d6f64621f8a96bf184493912038e -0x0a578e70850756d5a9a09d8790f5491eb1e36e44893d744fc7550c738368ec38 -0x3d24ef8bc9af8068ae9c054d6e49942aaea5e58a2932216f892925ddaca6beee -0xa1dec8295a17ecd8e6a33c575861dc716c53f5f4387566e6bab96b3e62750606 -0xe1df017acfe72eb8c93d9bb8bd4d54eae8154d81925db8d3bf1abf601cf753a0 -0x8fb39c6523f1bd780f3f2804a9132051f9880d90ae99091dfb4c66d69d0d6088 -0x8019e2f5b9d743b13c95657af8f917e44860c6f49416ceb7c63552c5f0f812ce -0x64193caf758832838f8bf8bab608fd5efa5641c17b1e52cefaa8be26e9e5baac -0x61c2091976e34ecca9f3a35529648432068a96f857712b8b7c00314a6c81ae26 -0x07aa00853b8e9c3cb5e46d8e69f32f1aaae83c7af28bc0c51877d3fdc8f309a9 -0x91e529b59ca03771d0013f686bd433b091b1f083a7a12cbc2986860ea1726d4b -0x5b080cd0bec158e93c6a0e96d1f4218df2c01c7c804384c2857323a839395e5e -0x28805e01b519d9cf7b44e647eee89f1f30a836a3c9dea997eea7fec1463e9f01 -0x9ea068d4f38c3aedca35a66d6ab69c6b35e68f507e9a80698a696897541a3cfc -0x11b987c2674fb5b1b262cfc7244069b56abb4d74aff1d84c21c88d0ff787dedf -0xfc1e34874670496631a912441b03e3b763b58d6e421c7b4264d69e1416d10b2f -0x31454c65bd137012a3d8590d6a31cf99f687a995aa5293f88efc5044ee6a5646 -0x307eac3d78efebbc5b74abcd8e3e7fa353866105c112f4f4517b285ce33ae978 -0x9782292c3bf21eca8c76277cc6815b19ccbbd315f84cf56aa2dd27b67fee46f3 -0xd57758e188e46b698ac59739fb20f496004cab6b06aae6093d2ad80504c46f0e -0xd8a644410f9191c1cb8a982fdd07b4dfc13084826bab5d62afdbd3bb4b56ab21 -0x6650c67f8fdac7372f160a66e5c7572f08b7ebdeaff16728a454679daf2d6a36 -0x3cb99ebce4be19da43a40055723cce9b067bc238b93d939fbb0628054ce51852 -0xd2a335400813060ba96eba54667f15777d86e30946b83db0ece49a3a41ca9c73 -0x96ea689a97002c66a9c6984638a22d42298e41fbcf6f0f070f66c57c907b0fae -0x7fe0ecdd30a38cbbb4c327a5091a39b176e311b4531d16b726e06c473e4f6c99 -0x301ff007484b80bfbc30ab7ab4919250d9ea3e47fc8d2be7dc3e814c4d09515d -0x8ad47087a15af1b8bd763c021c08622cc3b71eb0895d4d071df0b53a267fbe79 -0xcf9004b62bcec68a8b3c24164fba2d2aaba25d04f3fa96c80d512128f89f6a92 -0x54d5926dd0507d0ca0fca913318bcbd087803f73040fe07d0eca9b6a182bf1ad -0xe9ed921bcbc7c9fa8ed027d4150a5b661602d5f605c85e45e81898dc3473d76e -0xc1e668cff07c966821c4bf3208b69fefc6b72ca4fecae8425ad5951b6069876e -0xd325caabf3f5780c43e177baad5f85bc25d4ac8cc3809b4947d0862b13d2d6c2 -0x45a4180cdaaaca8ceb8381f14abce144506e4ac357ef83059ef5e37896e1ba0b -0x214e9cd3d1dfc6c2b318ef90784263f6396f658a011443430c0b6a859c0a3f7e -0xe8f9c3645ac4f989ecced4e520a2440b2ff41caec6bb5157decefe51c2ae4160 -0xb3dccf84297e4a1c94844ab8e74f6724d07a5d579f04dbb9fb9b2d0074ccdcac -0x6dc7ef1fe4e9187200502974eb968ac4fab0b7f8ab952c376ae5047075bd16d6 -0x358b9a0625301e4f54d732a11bfe4db37b39371b5f07f49436f8cc7567d9637a -0x30ccabddaebbbea1efb29aca9a00c7c58985e5b2d4a8fa5c498fd832c1d62821 -0x7ae4531956fe53462abf31bef49e565a19a752cc935d7c4cd30517b0677574f6 -0xf1b9c5ecf0e492f2b80055ed99b18805d60212b5ff416625a9f0c78fe9d8be9b -0xf0e134cea287d61be0f44fd71fdb65843024822bce7def8c379318a03f2c1f6a -0xe63b511bfb38c5aae33822e6e6f66ef3476074087e4a5d69b30d04a9741ca63e -0x9b458d22cb1904e1c13380003101be38247a01c2d99cb0e2ec5de69383fc99ef -0xceee276939a7ca632ad7505721843d468cfa24664d11302f483c9bcbbb234173 -0x53a3631ef50c51764dd05ae52292b63144dffdd2a10f1324bac9e14972c24e4f -0x238d4f80d93e838112ad82f21fe8298e93f14f6c01800e1783921d824153418e -0x1534b8b52e967e7e9425f91c17b7bd5444d4d1d235884d19daa04f8c4782f957 -0xa4b8aaae8be1d8b516e909935bafde8b6865305ad10d1e131521eabba803f704 -0xb862cdf257d724755ef30cba2ddf8d67afdba864e342d931815103d37901e788 -0x9d02930252c651dc6ddc262bedb81e8fdcd0a10f2b54b875e7053e177be7f0e7 -0x1a46a5832f68de5367189089f09e5f3dde5f7894f5218d7997f9fedd88013154 -0xc901082ddd969f7ea756b75e9fbe1820490e5882a028a786915301e9343c9e53 -0x57a80db050c6b2b030d2ba3c8d50ea4e9ecddd94ee9481ce9a0006aee147e798 -0xd6b265369659f941e2f8f5626452433ec77d50d8ebb4e7cbd61870b7fe96c064 -0x44b7f5c83f08fdd4b66954eca4a65fae646e6509c23959c389e22992797c0498 -0x4426f37d5ae5d1ff079ebf2d561190b1dfc72840f4a32e648763db03577e4887 -0x4da9eb8e215ad0dfc68b9449024534d3ae352324e4bec0150c684a8f2f13e0a9 -0x855ed0b05690a2a5bebc43340bd093f235a4d1d39c63994086097fc8c94f8e0b -0x614b0891a3b72bfa13f275507e325e22b168b476a76afda8a076e73d00130045 -0x916da1a5949fe045a054e9601f428ed83d152c0734850fa7766546694f4b4482 -0xfda882c41633e41616586cc489fc1b689162f4acebd72d72165bc6286d5f1531 -0xe3bda7bc4ab5b6fe1226050a9831ec4b19ed228b4aa02d4c9abb63bde1cc657a -0xafa9acbc041c301eaff8845a1085d418d57c7af63d0c10d48d5231b2bed4e1f8 -0x531718e284072dc5181ceb98b6e06c3a3057561d99a418e92b03bc0557e055a4 -0xbd344ddaa3c0ab126a8d0d32aae5c5e68cd088074295ccd767461c7a4a40ff5c -0xa746bfaa2692fd9aab0f76c049a46d88f79a66636013f4fc64addc42fb17530d -0xd9ad4fe768c86bb85ee62e9f9daae02ccecdaf594eef95b167fe20a5997370f1 -0xb42c7d73539cead3c26d59fd42c6a0262733d2a36d6873ba9424ed2ef4485689 -0xb605c1636eb9ab1af77e17301993736e9ef31b10006c1199241ddacd548c45b8 -0xd61c67448637d420f1a9ae74749971df8a8d70715adda0488975eab5e15593d4 -0x81cdaf2bf192b19d6e39ae68aa36305937884a2d3d5b6fa6a96b6fd4b994e14d -0x27214965dc8ebdef79bf3d9e281c76de73eb443e876c2e2ce80611985ba69fb8 -0x04755bceed358583d1319457e4d20b44e5ea58ae409f0352d67087fe515463a7 -0xb279e26e37d60f70f58a93a0c08d437eb4ad1e9cc6ee33094a6813bab5459992 -0x11dfd5bb9aa97f0a7fddb7111d2e5a39e320a85744887ff065f52e92045d9e30 -0xb13ab388fc4161218d0a529e24ee54df0033b0abba41ed1c5313b163d08529be -0xb0b09e074c6da450efbb841540337c2727c72bc634512974fb9e228fd74e3ded -0xd047a3446928e83ec9e21e83cdd43ac53c25299a44a67068ddb17879173f2e1f -0xbc93f0c08e52881fc1e65ff2225c1c62941ad0ff8102ba4ad82fe7caf5dcfab8 -0xec8638e7ceafd180695a836d9c6b45ca89df089218a1f24ea46abbba6e52e4f0 -0x83f5b89d6db6d975b613384603a01be97e69c20c97004c0328222a2f1c15689f -0x234d9a9d93f80d68b91e0ae339f9041f3acd14e521e2b2b6894d9f9c4f6a0d77 -0x2c69a053e8819ff05b21c251b7a28c0a522ad2e91091b6283cf8483b6fca63df -0x32977cf1703379bbed1b389fc6b79d9745dad2a899346893f41a6669caad692a -0x611a839459c8f4ccbc066d0bd82bf2c9bd6d9f70fe54f7c6c19ff43f08584a77 -0x513237ca13e196e2ecc8cb44ffba72cb7472aa680cda8b269cc0b0e6e23ec491 -0x4ce4d0d48a72ec48d64d42a44fa74bee8493e39a7f0b0f8530085885453a1091 -0x682e2d8850deec1d5cb6f603b53ae28ac3c8f4a947b4334b0bbee2cdd14da1cf -0x2edc9efc4c3a6f230fbd8b647e5a28b1af3cdd74814399dc5d417c342a5938b2 -0x0c37311faaf501a5f7246f2be4cd10961cab5d7c09e7692a4fd78fb9256138b5 -0x523d502ac0ef7abfc81cbd855b6ca8f966bb792aacdad1702ec8e6049eaa20eb -0x0f2480f581e352a01206f5f15d1381707a25602e2c7c242c7c2136727bf5f780 -0x3f3cf796c6ac18426e8df1a4d23e369677d3c4e1654c59cf5c6429eaeeea29a3 -0x45c3bc4ab8802602750f501bf4960533c0aecbfd740054e573f77f9dc9ec1a0d -0x045d6c2741f0ed9dd552cd1b168cb26603e3d33a612c143a04279d5ad2b05b5d -0x6a990a84078202218eaeb61d4548eea85b076e21661ec3ef04f8c0e250b43627 -0xba09b8178a4edf1e0a7e92872b1b8f7037147f01c567584f2b152c832176a80f -0x20cb0db1220336d69d429e440a64b76c18272e6b7924dc98b267d426850dca25 -0xf2f668706ce049ce1566e4502600d3257b4f51b81723610260e12ccf7a0fafb9 -0x9d9d081da0ffafc5770ee9f308e4f846d629cd068d2d812094c973d7ced7ca0c -0x63ffa9f207837d61f91abe7a174d04e8d446e6c4cec0fb5f9724376fb483c25f -0x5ff787bd2666a88c5e65620ec4097121b83f0bbf634dd9bcf85c613371971cdd -0x2f0ad254698a865fc843752494084286a54cb7a286e4569f3e61ae05de0dc72a -0xd60bfe91edd7dba0863bcb9d0f38cb95e1e3fdbb51a61d51eaf39f7887d116b3 -0x1732e3aa19219f485e1eff35fb702793237d5c103bc6b0bac67a9b9e37b13acf -0xbb0d7ee1ca335bd777b91f71af4c3bef7b8bed123abc325e432f2d079194dd4f -0xa55fc1e94cb38e10f006ed27b8c34435443efb3cb047b3f3dfd1a0537c06d395 -0x1d88f0a4169a9930d7303de68d9a61ce82701d8f90a84f0ca48d3cea6303ce83 -0xbb8d0a1db6ee1111a0f06087eb9c92526976263af5a6e2a955b56212d37f9d90 -0xd14b7af6da31fe6cc0a6dbae67a2f92eaf3ba7f6a173f278d732e353f554813f -0xd824b5bffa2904b3237ef9e9d5c79e04d4b25c7a168d389593b97b16b9f01511 -0x41ba98cc2d2c9e56ee7fb3f2bb441f28a6ac30607bf838e2f16ca79b1d0f5f2d -0xb395ba165991a4ac7027ecbc08e1bc13983902999cfc2ae0d3a645b9cb9a71d2 -0x7581884b916cffcae28b47f1365ee502e4e737ab192c576b2f1d3e8e6f5f6fb4 -0xd280f9f69ee5ac57b128d656e57fee9b9babed4eef5790bb8e3db7c23890bb9f -0x6c7d362aca2798a80a3b364decf7ec2a39f3086d061f6e45b7f17b95808af367 -0xe82d5a7bc60a99fcac41450fdba97e9fc507194b68f0ec9c4e709a28db57680a -0xb7e1759015fba762264b2a9f16fc9738c27580eba8cec291653124a720a652f3 -0x3029f119b7b31bfdb56a952ed4bf1dd5d0e9ec97704a269ef8db58c86f295063 -0x55294dc5fe06e50f9c5c4a44e760d67750d52c50a2716c795c64242b419c02c5 -0x0155afe5f4a63351c86a002ad11a8196b131481feee96cde3ddcad7f9251b309 -0x488a8b24192ff382fe59839ca85354657b0fcf04e5ab2d8ac2e751b90ebbd1c5 -0xd9932abb03010267937d65be88ee39e803b647edf221f1d0355fdf57ac208b2d -0x0180bef6e75172eb1ecb701e7094365ef0e577dc74aab68725589e2e3029b01a -0x964294d7d894df063a862a35f7b4223f49f412e629e4b8158bdee08eb4a2adbb -0xb759aaa27c9fd9d425e5385356c895be60e24079c0c8468de2fc383e3edfc1f1 -0x8c96b8357d7de6777df2558851532650d93af1266261d90103e24651c3acc93d -0xb04baec6ea1a223a153a8fa0e0cee086de9645d003bf1deefe5102636f9d8fc1 -0x70d87acd7bffaa5ccc4fe9b934152ef789b8cabf48e04b74aab9d58dd839d114 -0xf963af0da31891f6c6f050d21f671feec2f9c94435406da8ab3ba1a3739c6fa6 -0xf3a9bb7b70eae3f6f48fc95390de91f34121b4653a77a5f12cbe90b85062e249 -0xa81143e340156d8657dfb21ad48a76d27fc6a8793ac10d586e0d0c7112545eaf -0x0904975c35a1e088adf8d868ca31f9052d38bf91fc36927f87489e4d08a3a951 -0xaa203f7802601e37b05836049f3ebf2bcfb259bc2c38ee085247e97547ad6132 -0x02a59d717bff2340727d1c4adcb9c821b109d6f3b61e0ef80e9de380dccc203a -0xb618db69eccce59b6d47d5489ea39ad32df843f25bca2881464859b59edd86be -0xe260fcd2187b8ba076fe758a31a188d578a559e85750d62fd33be6f1bf8cf5bb -0xde9c8df63bf88e8fe8c9731e420bd5c8fcfc587631ece17e4b7498316f27817a -0x907d71edfa6ad579e9a1afc2b8f08b154be18cdc56baabcacdc1708f27deace2 -0xa3931600d408b396f299999377d5910a8f1342b582a89bcc6ab96b294dd3722e -0xbff59bfc7948ae46b713ebc55ee2fa8f93b146cb1f5750a479478776925fd8b4 -0xe20ed69aeb839f69df2e8eb71844f9736136537700e40d02a170dee1e2fc3ba4 -0x1535948b477c131a2807d861f318431f2ac678ec34f8e400c160f14bd4e135ee -0xa6da99cecc1b9b33a201c37cfb02948f8f904cbe75e3358640b083239916bd73 -0xb72741332b5f56a2e34b2a9f4902daaa9755ec0ab9422d167e66666d53196d83 -0x1bd3a1fb7a259df768f531205570434286b6ba30fb01036ebefe43e34955d2ce -0x99a73e2af1890323cd8d36290fde464f2e3635e5c737c8f105cb7689e06b4c63 -0x6d882320fc47ab44eb439385bc30eb58fb778996e2ba89c6e8200a8a29b86d40 -0x95ad2fe229694e5c96004cc7cd85e2ff7800a1eb45f19b77f43ef4d80094f8a2 -0x49cd4751c571c6952c74ffbd7a5e3d06038076a264db67363230730f943e598a -0xc8f8f638d13d4fb3462704c5bee9e68ee3ece68f0b661badf3002abd4debe12a -0x6a6724535520afb7badd4314da01cd05a3052d4ca6fe579eccbc2fd564f79279 -0xc8858ada2106c26d2b0bc2f381ece0d9eb052264b0eabf9226e3fcc73e09637a -0x2a4ddcd151f2a4da9f02b701c8c010ba1d1626a9176f9f216000e7b1e3573d2d -0xc79f204583e64ab4ac0bfc559a253fcf6e7a813acb8bb80419509e495155b517 -0xf11c1791dcb331e1ce72b3f79969c47b7b4b24430fc5569edd5e94fc66827870 -0x0c35881f1095cb2df34b2d59cf555acfb6c4cfa330a8955adde2fef3ab2856fb -0x86a855bb08913f2cdca07c5abe044699e934c5d9fedd01ebc343b11fb881d2c5 -0x69c6495f9a0a67ec5980784dcfff944f8a20d7166e30790fb99b4ffdff66ebce -0x97af4ab2ec34bd7637020d26af517ba0a5ebfc0c7a2a671380d5d23186fd47fc -0x3bde004f1e29cbf0a0f12be31a245a8e8013a0c10cb951078f166f20bf34ae5b -0xb385a57a883ec31ed00ced3f22003bbbbf7ba1fca09e635f5f32a0f08a18b7fc -0x8e3ad455cf99b90d3d6418c1bd8f3ea00d767e776364eb546b95a80b9bc24c5d -0x68908d053e56a463a77272e95ccf57c97e9b9c2d0aab16075925c89031370d21 -0xa6e0cb610cfc30b15a1fced5c494533776cb4fc5e406df7775963953a9a33b8c -0x4ecc7a3e7882a4fed68da572558ab76fabfb17e39fdce068ac3e01264a809bb7 -0x54c42e548004658eba647f1f764385c1faa2d9acba75999f2c5e4fcacc794b3d -0xab86e56ca7f32ee907b517ba2c96f760e98d2cdb89e7341896e5c98dab329a45 -0xf47ec2d3261b2bc7412598ae4479f6d4ce35335aa37e8aa19009c05c6f395d81 -0x80af9b1030ec5968efff630835bb0a95615d287ce941b565f0f2591e48618720 -0x970d0700e00e32753d0c93be4038a19632a6bda5650010483aafba8b488adbd4 -0x5b94356ff77d90b130451520d3875fae4a45a861ee05a36e174ec09de51a7baf -0xe53cbfdd9e9299041bb9884241cbc00d3fd748e27009ad2a4daf01da79ab91ee -0x696214f545e818842ff8bb7124a3a13d65d5b80f1093379c9401749ebe634aa1 -0xbd55052481686d0b7577b02f51dde98941d8c44bd4eae19d3708bccdb19a4304 -0x1c72cc3bb7686213b04f22d0239cd4e2bce32fbadc78fa2938d32a20822d2883 -0x05dcd4a88a295d62200763acfe29d240aa62c50e5e484a6bf21292a7cae308bf -0xcc05f450e53d8e334f69c61b9cb53516b15518a8500285e5e3485c64b16295d2 -0x011e5b863af7f04dba4c037db7cc452d408fc663123a834489d58ef228122b3b -0xc8d314560885ce5a7bf5c360f8512e24dbe5917122c8492bc8dfcab7f9767f92 -0x6bea467e1aaef31f0e974bc5827bdcb2aaa4e71d48606d128e23fccc7c9e403c -0x0a42af8ce5f1a8a6f4d34035cb61972f47dbe3e220cc9c1e5601e747e6c6656f -0x710fe779bec8724410c87490fc36f9fd399725f3d9f2574ea514c22d18041d9e -0x9222bb63e01391568eda2fb4764902ccbed4e4f9796765749764c7a7c07dfc35 -0xdfba1d96f27e00d16bc293add5eab4f806f66d4b2f1eac9854b76bfffef98aaa -0x68c586e091422adc0829a582bbecd3f8f4da106276ed87b420f9d4b6c065f7c6 -0x42362215f4b14574d8e996b2a7f8b1f98cb4bdb69c57b7f9b116d1822015a04b -0x5948c3e0b534222855027806b2636f2d3a9836c49d7ae7a67d0ffe4ddc9b504c -0x3e413710fed3df5450af9e296e751ac9bf9b8f437beaa9e52e1660736071dc6b -0x134d00fd1c8a2acf58c053f8112e5c09528aa0767e541df0f165de1dfbc47982 -0xc4cfc0544eb20eee325b37ce14a22a5d807ee69747d1c81e1a02b90381d24dcc -0x1d01ba9137c896e15d23bb13aa7473df0bd67442bfef53ad76947d5014186ba7 -0xef1395adec9edd280f2c69d4b141db442eee4f4be82782c5a186284c830a4191 -0xde96a892956f787c76ae70cc0bb56517025cfa9b091776aa835699ee6c67a8db -0xecb58964d09d020d4c77b8cd8baafe4240cf550dc7494e2ed1687ac25289228e -0x63030a8dc22c09d8a86b49767a4934b138dbb22b11f6fea7d5725eeaa49af609 -0x084719ed894a4ee7fc16c9f677a72286ccc0dd7dd667edf049e2b5569d7d84eb -0xb2ec1729eaa7a14d1ab8df89d472421307064ef27f3c06496f8263b05a7cd4f9 -0x1033fd2613a01eaf811f86f90799f439261b253e06bf1744db780b8bb2765a99 -0x3d9a01ff75a5a8ae521e0412597b45dcbd8e5f78fea00d4da78f3a5e2e2d160c -0x8543e18798b703d8f81757e3817950246bfc3d8a7d2f7afa0b7fb17604c12997 -0x77f6f3f27cde19838ced0f454a16c232dfe8d04e8e43a4abcf28e81eeec2e2e2 -0xacdbcb0378733bde83e69278ce18ecd0965b598649135b56a61c1c822d51083c -0x6ea64e91554713b06e37fa0c1a5446c3b683fa050d0dc0cbf641f8bc349d5d3d -0x39ce67ec4efa2baa3bf27d1fbc01f9e43c179c494d37f76ecf492248974fce9d -0x9ff2b0097f7043667b6ac4f83caf7d73b2881e23b263b03a5696e977953391a3 -0x28cc4cbe1f5b7f7ce8a37454f1ca57134f8169020d852e6fc7a070db466146f3 -0xecc4f4eea5b38b6fde883bda61c7a32042f41d21052162beef493fcf0d02cc48 -0x542b900380427c0cac5f0faed567903574286c697270edd45d15a01f4068b330 -0x1902fe261481c2771525f1fec23e0d1e0879a6fcb66fba1871399637db8db295 -0x48fb138127a195032f0c0359122d75f206633f3c48c74fc906252a0dbe5d7d69 -0x533e3941d8aa456b448627a0fb0f42f0439a1ed9f08bf9ba7c810887f0d24cba -0x592391274a14162372d1211059b13a7994699d45e34bf4bfbf55257b7f128163 -0xd9ad09113648e5512e755ba4b45fcaae8ba3aa4e38be3bc661eae8bc0efb76b5 -0x1bceadb7bed03a6f6d7505d5ef1156e622bc87645fb1ec2bb855c1bad6c6c2c0 -0x3c0e59eb7c155cbaa328162f45cd29ca292dea426422fb405fdb8c443dfbd001 -0xa51fca81cbe2444ff2004c683b5936c985c9f9ef2e85756bdc5ea92bf194725a -0xa69f991fb276a391fd62d0c1bd39e65eb47d154ba5dfbcfdc707f8a3715305dc -0x1410208fa7b48401b59647689c3dd3b29818be52d3c75835c2c4b25c628bcb3e -0x859500114661c3573f6e0ef0c0b874abb880ca391795499aad6203df577e1220 -0x721adc7a010f9483e7f1331b6915d43d7d0c1d1116e9dd5315b860547e8a5d7e -0x2d44ed9f408692dd82370addf5a81c635d7f69484f9baf5cb2733e380d652f3f -0xf124f584479427566ff576fc5f79be7f39518a37824ef3b9da0e43de1f0bca67 -0x1327f50a2a803e11f52f3d99910978cff046a2f8aa136e4508daba48269a72f3 -0x2690d72b3d6171076a6e0caa67bd0d2d9b543d29ecb09ae25c16968b4cfbc26a -0x3d7d19eb723f29db882488de6ba3b79005d1e5c7e27cf92b84f23ef003590a35 -0x634a780a5aa06093a5ed2cadd92d9040350a665c66208ee1d9fadf6bb851f5d3 -0x1f76837245a3356d829e7a41a37b9449137e39d2c09b9e1fcecac50dedb6f610 -0x6cb6ef63f2f8b22131a83da41af7ed0a80f894336d8a0da599acf3dec2d0590e -0xe761f474658fc024aca0e265db7070fbe3a42ee62b0b1d974465dbccbb74c83e -0x61625a9a78c7f13f603f5c1237edc4ffd3179faef84591d515522e54e8147e40 -0x93090ed9ea8e2e74b168c3fff5dde2983514ae9013a80a5aaf8647961a42c00e -0x3701967ab14221e0a8c52e95bf1a20eeab0ead4d58d35fc59692c498763aac13 -0x1e8c262d7a8508c12be347322d49a99b650c76d7e69c0952743cb25887286bc7 -0xef38837febe8f6cb548adae571b3e890f3da0b191da4c295b4a3349e5c4d62e9 -0xe31a796ec6fba687c82439784745ce39fdcdf54c231da9fafd4d1f350e67a67e -0x067d6dee660cc1a51939cc4dee7a220c858a575f739d1e91226b33de823c1484 -0x156d101f53379ba465e5fd83056a2cc3eaba1ba69c57a14c3182971bca878d18 -0xd55bd3746e22d282ff579db9b64f17c96333df277f9cbad8b70e0c4b2e3d2934 -0x28ef70191f46b4fe3fffc1415e990ad82f241ac7ee30deb368ab0eeb5762da78 -0x6fa1501ff2384af4380df17080f6238881500ec90f624d62531e0eb386a29a25 -0xe80f21864267d15a71d91ad22a67d4e917b4b0adfde6d5e88374c4fb82e3b6fc -0xc04b0b257a3ad6a185bd6af9a80a753cfd2811281d0dfdda4591b7cea32fb23b -0xeee79f2649a2359b383153cc8e5f2304f43296f4c0d03e4bb5c358cdc52e8542 -0x9de10fde8a2a55c47f7c395387f1595562d2989c129d9e273bced03d1000f4c6 -0x5aa6356e355ca299a3934bf2f870afa1f34fe4d7cba70f86fa485dc96724de5e -0xbfc92786c0da72d656121136fed40cd2ec177207aa80cd0a3f25623b5bed97fb -0xa236b349b9f614452ca8df45a275e8f5d283cfc5f9482fbb05ef60703d7d9e78 -0x6f0dd76579319b8853155a8a6bc819c709b37564223de5bff68a97b2321150c9 -0x50aea8171d76570983c4a83e83aed39a1cb71be7eb22cdacea97be3c8ae18572 -0x43b969ce6afd60a6083666dac6684fac31de12c308539eac789a26cc3fadb3a0 -0x1f76a5438f9320f1eb44ff9a7682ed84bf41a0fa3baa7c2ba420c80a8ddbccc4 -0x9564b4a27d30d9e80e881269047d0f8dc287db23b7dedb63cb8e2f8fd585c469 -0x73bede38a7ac617db103a21c1a43cccb159cbbfaab1682732fc0b3959d071941 -0x9bdf5a39547fb62be0a13f33a9ed55632f6824214762879b405951a05c8792d5 -0x8d9c8e9539c06ab9f9a87cac1810a9f6bb23e8f7910a7ff90e6a01793b2a1d64 -0xd016b6aee91354d47774231d21f1aecf573a646ce3d5247624deb6d161e05ae2 -0x1fa9d61aa88d647c17858c8375f739fa153cd787caca12cf87d558bb085320b1 -0x998a85486baa76d73fe9a0e288d449d0bc66b86abc6f59c624791cce15cea024 -0x77b2c9f6db3eb5d09d93737355e2c3397cb2b53d96be988a878e57c9b227e832 -0x1a9415830f028259ff9fb8f3f7d4e073e7ccdb06335f8cc6f008e5d834f547f7 -0x6d68edd4d9821a93fa0245f109f8e7123a22b54151f7218a90abd6eaec0aaa65 -0xc780b3d63cd7b6d8c0981c4b66551a82e80a11382b492045e411c24dbecd06e2 -0x297e2709588ae2f799a99ff1718e88186fe848107db6642676639dd216771bc1 -0x27e2a36fe845ad3a77b7124c25be2c3ad3d90314ca5d5be3e7819f1d3cd799ca -0xecfd75c2c7a25c219ffcdd97d53cd4e4ecca5095ad465c6d21b61bba36cc8b3b -0xe38397b9a65f103b20205feae14524c380801bd7547078dd09b6d9ccdda175ba -0x3d14f5457cfae568306ec2539cb17e6ccd1b81f25e64e03d1b5fc41714a2c2ee -0xfa8e6f3a7f4367bfbe3a06773373c3a634962448fc8fb49beb4382af8221a571 -0x151523e35b9ef0c5b480c311c4d255a819b0cb2ef387bf4bfe7188bba6ef4a50 -0xf4ada134dd7d09389a3726fa0746144461b043c8f12811deaff27b50c1c47123 -0x0ff221e3265db7fc8898ba36b7dc058d4855332a6d67bc0ad7f88752f3b2daf3 -0x014b725a31578722557fe4b1704801ed42babe80c1af423be1fbb13b5aabcb6b -0x1df2235c96972be7dd0942e7c829f2e6c539cd8edf08235ca24a2442292ab5c2 -0xf08ee4b9487043427c23e136f77687cb4b851b99ae61eb0c7ce15589fc6439da -0x89d31a17cae46ae4bf3f2f9e48b6fb0f7e501291fb05edde75a4cee16c0cb64a -0x97f327d11154bc413ce9bbe81961ab940f5989914dd72935e4ddb30c51bf3e43 -0xf214c3144409c5d4c6e5f0ead49e6f87e01ca775947837bb409426ca14282e49 -0xf1ce4d75f445cf3d7a382827b33e915b089f83bbb61ded10b28676116fa7581f -0xd745d02e3f3088c168a68bb1b33f75a7b77333dbf42667830076f7da75cd35e8 -0x16815afd900c237e07cec516feb83ceb6c548f7dd393a347e15724c082fca6d8 -0x85dbc55c25992d06fb06406b5122133f27a6c9b1afdc271c9a48e569ff8f0e62 -0x54b2e3e841529deea222e9b780e35af57d8bd27ebdab0e5b50cf0085b2a5d99f -0x4a9d8124415edf288256f1f5e32f63b68102a6865abb462b234c23fb59139d6f -0xad4755d97e07d9ff84d6dd446be97fab9fd1c335a6773b3f080bc353a401d205 -0x8877ee225fbffa09b8d72b1afa7870ac73b1cd1cf7c33dfe1acc29504178fe2a -0xcf8cf9e985d3fbd61750aacfb45c0f4e0a82e464e1bad2e15baace5317a6bdce -0xb6a8a81c3f69fabdfdb1ba0a1146c996c0b86c223299067cc3027918e9ef5db6 -0xe9a106b72d9a3b7df18561fa8551557a2f8e7c1f38049c71ef4532ee54ceaeaf -0xb694791b47d9e86d68e408125e97c5802ae7fd268cf15ca578b04953104c4ee8 -0x9b0e2201fa58042b0e3227c1e9c25e2bc1cad2fa1e763096b5960cb24b38080f -0xc601b67801e5c54dbb7e6190db1ed35302a218104be78fa1fb8d7d9437f85eba -0xec9b43009f4a82794821748d7342684c8a680972cc322fc1b95406fe7cfe9228 -0x6eb4a2e9e88b56cb797cd592829797c895d21e22d1525644ddfc58c8b24e807e -0xec104e302f7e1bae9d8470748ce1306b2f336e1198c18d5463c23e9ce53397b9 -0x4332cad1836e4202132720cbd8430e273b49f3feb62debff710a6e6084961555 -0x766f6ca98fc52d20e5853c8dbdb32841022f7ba63bc477ca91db2486982dd9bd -0x33b6bd32000e223ca472884f03eb04bfb87727e332b3c6f2ee602530bf2da825 -0xb8f3743755fa39b8c3f4f01b55cd36f4eb895f9cc2c2bba55255469ee392faef -0x40990d7af52a086f5471fb32b9572d22cbc3e7144f5d574f4720e9ba2e5a98ff -0x05aaf473433aacb3edec524017bee263606f0459de7bcd1c069f758417f3abe2 -0x1adda4a837b60c336dfee20808b947802483c8d518f6c32c57114652ff25189a -0x20466d9579d521be713ace442a49d8513c0ec52dc29f29f8e3f472614bafd100 -0xda4fe69747c8f2f3a3fad93a815f364d58fbced8cab01265f0dfc4ec5e2d6a35 -0xf63c71ffa4e90ca29fb1f3a3d86209c7aee05de8b142d1668494189a1dad2f59 -0x76a9e1bf6d2b9ec7be27011fa10cc0b5b22cc01f2f153f72c60d95d8b85d9971 -0xda880f54bc4eb6728786201cc5a831650842f14222f7cb531e3a0e8f0b21d11a -0x9b6a29bb40465e298dbbcea34b9a565ca6aabae8809b6bdb3d8581ecba1a6e08 -0xc6cd98964986a54c56457821a2683134bcc8b4f0baadbefe8d6952bdf35d477b -0x5039909d704d5bf25edb96a29a2cdef2ccb1c6963a40f2e455629dc68ed13c6c -0x11c2675146fa8bc959286c535cefed5d47772cad5d6afddc8bdbf260b34d8e4b -0x7c86680d4c62f983080c641ca27c667fa05611e364845bd8c568d3aabb078761 -0x25531ea000b8915e0b0e4f8ae596cfc319354d9c661b46b109b5540d8c97e1ea -0x685d635f53421d051ce57987f34b206528c4cfafe2599ecb5a4b837f115bcdd3 -0x654a40d5b5fac90cb5e5fd67d4335c2ea3172701a302568ec973f6c0a4fb5cf5 -0x369e264b8ef2f21ae14114def108f1b8675300f1f0dab33fa121efbd5a3039a0 -0xefdef21ce6d471dda3346038b9f62b758591dbdf8c06388e007e16778105f987 -0x75725f6786e8ae44c733887656dfd486ec4640df837398dd2f0f76ac20cfe2c6 -0x2a6e20a91d7797453b3c089073daf0842099b1f553e8114affdc383f3c0b4634 -0x1f4afa2b60d775c9ef8da426cc05210b02e2ad7052cba5d1093f6492590aa999 -0x33729a4b8f8fea98988abebfe794cbcc449018f8aee6a16aa6a56616ce5f015b -0xf1866def3b53ef4c416cdb4355ef5e891cc1f19a4829a39782b022fc8a64cc46 -0x67f3b46159da3bb2a9218f1251f2ae75548ecfcc544cc0504242e67e60d6c01f -0x80412f1ab7b2703d20292c52a4d0a8c9a16e010ce9417d2064f66de2ac1086b4 -0x258adb15368c435ead6d3ffc09c1a1c54ca9a04c93be556cb3dbe9b8e18202a1 -0x5cad52b5c28f05244fc2909653e154191314cd17a8a0b4aff00d97a70d346473 -0x7cb6cf9eaaf7d0ec58877c7e31bd8680cb93e2bff8503f97ced0e2c5b66a7ab2 -0xbaff5f8f6124b90f23bd4b19f3279efb0b47868dd4904169fe8798bc307ea950 -0x70efb21250f90a1971223966d191d2a7cca83f04046ac5de24da81756d0f543c -0xcf6f4a34be92a7c477a2eca229da110a4627fe6861f3e663ce255564f2907248 -0x36d3f3fc018fa0add0be5e1b10de088efab374a777bd5e2277d0ecece06ef606 -0x93fe304dd55020fffc5d07cb4b90926c45dab2c69b887a548d822731aef39723 -0x710ef21e17ac8d842ab0bd72398f88659adeb9055ca974e33d5406265a10cc55 -0xd98e00da3ff82d6b4a17049dab57fe3f1865b5c47a3a32bbd10ee04338d86f5e -0xdc62d2f026d2f87c8897b69822fb62795cd3d4d1c28c584c9a7d190fc2e90850 -0xd39bf0b480b8695ad579caa714c75f73c9c3a00abfbdaca96291fef224ba2ddc -0xbd5bd357609f127a0da4b1e09623bc02dcd8fd9fe778b13a0095e6ca81ea3657 -0xb9773be0b7f66188979599198977f11c5afe2a3a10031d7b02a7cadc902a8995 -0x14150b1cf743b8b784dfbce119b5bbb84f093e820c6c0069a7050a4be940e3bc -0x1b8bef21daa9213cef0a9139fb7a36a998b972923f5258fe7e6f21051013085b -0x9e6c8657e316f196aac6c0e89ffd6afdd806291ae931397eb438bf49c54de045 -0xfd93c2a4f0b65dab4da0df996d37fd519fa71764caf46d7c73aaea81a1de8016 -0x103c2c7a34416a88ee16b60214ff732c8806add8d4b2b65ea639224365e8749f -0x3da533ade8712cba18f1431c747a930445dd86a9d60c5a3a4864651797ac2c62 -0x304c7637ea9e8734cc5bffcc0cdc3c6cab0e87ccdec6ba2eb6753003be23cf4e -0x5e5e59d88ada7599b6ac5510666b5d2e77049722782bb45848b789ebf9e4de80 -0x3797d0cdfdf3254252bdf73ad5e4fda83a3e0b8b05bce1f8728f89a8c66067f8 -0xf900253fb81326f722a633531dd1f667da2658d04f4ca325de37fabb46c75d2c -0xaae085ff91318db5fa6300a0553ad97ce19e87814e5951026b6197dde2cb0bc6 -0xe0b84ab336cc5cff4b81d36d7bd92e6214b775ba662fded5bcca0f85d9019fc6 -0xe6faefcde5654916a7d236b47c54d3455f46edf3ded071b1b9eb3417e91f8932 -0x5a87351cd12d3e772cad79225769ce506ad24bc214459c45b57683531ff98c6c -0xff07804bcae41ee956e2bb3d5e84a90413701236f33677f81ca6c3ead6630898 -0xe7ce311c68e3560d55fe0fdd91d9afcb0d43fb45718c5071110acdb74b0a431e -0xe94e6dfb3838b51187308da2e81ace9adbb4b539a2babef9a4e278d499832df2 -0x6ff018e5f73d81aa187a099c867d38f67d31dfe920218d8721754eeb62d3a30e -0x5c89d5a163940b74439c3a19676b91b0df9d288949dd23432d77c0d11011e89a -0x2d9e31e86f9e01b57f0df211df335c6216058ea82e4d5a87e71c59861fc29119 -0xeddde46231430b8d629816e9f0a14fccb8338198752e60538a2c8a6c0b5256f3 -0xeb71640973477f9d86f7e4c17aeadd8b282a9b706975bf1a9406d114932fa82a -0xff9f5879911433da2ff4102518462ab83c4c712ba75e38542e44c7c08e83f039 -0xdfa54f529866bf4096573ab723f0c20d83ef40b46790ffeb9625f36f5a982897 -0x022f3ecbd8877a6de141fb7ec6d6ab1f0747efdc6b6e8f9f651669ad1957ee7b -0x3df1e547c1a27301ff9ab62e2af120f17ed920de1f53a08aa89064fcb5fec039 -0x3aea62d6d230c30ff85c63a09a4c037e712ede40520a63117ae67382006fccbc -0xfdd1f9f99b649d5c7765c0b1f4a0fbdc9a796be11f2ddb450a3d247ea9cd431d -0xecb9c8716fb24fff6b4595df9dd34e18da3e732b5f3e708f69ed3266448916a3 -0xf5b529f0909b7ea9256405081f9c8049c539028e6d0ce01c0065bafa809b164e -0x5f1df3c2b7b8cf357c0933701317c733c7a217f5b96512d509875411807b7552 -0x12185cf4ad831373af29b2d2bb75187944ca3b2a366252dee03b11413a9f7abb -0x5c2f8cc6463339ff3eab4b9aac78b4fa9ad5f96a2858de3cd1ab33f19c386af5 -0x7026111d04130d0e7327cec8852332218c2e7801cbe7baf8af01048d43ce7407 -0x14204bf6d2f10f993cb839ff257d8ba9c496ba2f3b84243acfd0b3a0bcb5eb99 -0x1f2b83ff54931b981f42640f9d19c00776c9d6d4a2d46f8b3b6e0a56dc78c025 -0x24346382240266d95da25c1e3b3d4fb5ff93571c15c9d570e32245d30e206e43 -0x0e521f4f4f4342257e7ac83440d3fcb55a361b228fe1b654a57654885c7bc45c -0xca29975a407df789e19b7ab0fea8bf405063c8f12593bd9b5fdd86360cca7ed7 -0xf4f3efc69b9742e722eec1c93342d1208f977bb8030518c8bd08da780366162f -0xa5cd6b55f34422ea21da04c75cea43955b824677c53d3d2cf9bf020c526200fa -0x623bc4c9488e8361e2751f89cf3252b6ec6b45e5da480f2977e6d63cb1605a31 -0x98ec00a7a7c07a61db6044b3c5141c604c0410612595a3159a3b282bee8a5281 -0xbe1b13bf89d22b9eede60d04edc19e8bccf77da64bde0017de2a0e2d73f874d4 -0x926554dfe6affbda9c8f18a57bece9fc19836f857c0339bdc259f16244feb382 -0x49a4dbf192b1bc33046a4a3a0b1294e769946063d0bf93ed240b5cbc8a007fdd -0x95bdad15baf7c4dab8dde464c34ed7717dda40d6a548e17df65306b30f93cc85 -0xe05e48b94b40d33422c539c85499cbc4176c81ee854617a6b66f866fb6b8ac3d -0xaba7a2bb219c240f8952e92bf6c79ead6f7afc6a574bda940cb5dd7a9850711a -0x9ea40ae0c5e8f088a0428026548ab57be2411cbfc1a0ee0af292ff193395a072 -0x49728d37b1229c690f1d4434396e156b4344c9aea7a7a6e9e75d91f9fc26387d -0x39a8588175d3655e50ca520cfa92d0826bb6c36c93b63e14f50cab370e263ac5 -0x0415fefb212ce3fb455563fbf4ec3482ffec251822c24e6bfe0a09a796c3a343 -0x70ceb72c5b905217afcb235c5de6ed23e0659bbb97d468f06c0a964960f8ac9d -0x75ce1ea4e7e360dc0534abe4bf195ac3c52836a0ab09b277516e22e3226fc462 -0x28e088f85d93a00da691af944414a51e00c7cdc54eab9e50e9a63bd72da7d5f9 -0xde0c8713d3b92265d385eeb881cd545ad0b75602e4ef1acbefa474b088c82be1 -0xbc31fc2797d02d9a4480f32e9284b88e7ce281b474b19d134e520d780282703f -0xf33dd116199be3d022f14ca0a6b87b71e6092182ff2c6778b8b717800ff3cbc2 -0xa4dab80dae105db7b926d246ea65d3fc12d02c6a0f130411d43de203008db739 -0x2d406c0f02b5d8155b39607a5b036410215063337a70725d4d61e0717f233f4f -0xf2513e77f269588361fd7d3f64b7e3e986aebecb33f5a8074bf69278757604a1 -0x5476692c1e84ea8a28079bda7a332cc2ebaf3a54fcc5f9f980cd372afdb7393f -0x640dd6d7a33a26cb8c54da4652ced799c9748e24029d71ff9eef0e06ae7be3da -0x2b8a06d53f88c527de3c93378665999a1bd2e546d3dc049600a9f213fdcd34ad -0xba4d7da3c54da49d833cb7b402cf394df96abbbfbb9b044af858982613c199ec -0x3a741ea84106e590a2ec76d329892b893738bd50ebcbdd706ca346bda3ee85d5 -0xf6079b11b413d6a0f196e68981f4795ef3b0f71d06224b644d67c44439c4e088 -0x3dae24f5ca42ebea88471fb707972f641a73cfd02ea01090b54934b756e723fe -0xcf9227ba43e7628d1c9c23391241e65d2287bb04c73be0cfbe51e901e52f5fee -0x515b2713bc4fba8923479182e49cc2cbdbb49c9b971e6217bf75bebce5c070b5 -0x1b514766f15e2f4bb129ea876fb85a5c37418c24fe6d3d7cb4a3136239f99f75 -0x9f59b58af70dea31ff0e93165b88e07556e0c288b0589f67afe3a64ca9feb250 -0x6c64ae430bcae84a2ab811ca06744bfd5fc4706ee0a1e3c71fda2f0227300a4f -0xd26dac572b340677ea8b5311de51c9cd0ea95780d0b68738e4de33b2cbe148d0 -0xc0b9c1a5e7f4fd2c89eadd3ac2b2ad4d62120780153d3bbe47c4ed301c9d09c4 -0x0529a0f612e5ed042a1f8745bff569f7f3a6946dd41747601309555e59f9a59e -0x3697c0f24f4bfbdd3c006b81ec17c42664f8587eb53d47161079517c5b0e2b28 -0xf9a742ed1602c6fb72f43a181cd930c79fc39b05ac442355abca1e08b303c21f -0x5c60acffb5e6152da7b2794367f58c84cb988b26e742854b0228384a3a626e16 -0x631c92309623e222422c7cb3649d7241f1567390be05c13dacb09fa37a4789b7 -0x1514515738fe14ba817898cc2a5cfca4f04a69b3ecf51ddf00f98d73393f1550 -0xd75f6c43ba36637840cdbd356e3ea47bf49ab723eac26adcbc86396591bbd9cf -0xb77457ae677606a74e42c2c37e94faab57539160fab3fea5414e0ff676f614d6 -0x481c946afe7ec0c114b6d25172a95270b7022e62f0ca7273f7e364f6ebca33f2 -0x84947bb070f68e921d5d1f103412624d84638be0a3f783554eb83a43f3dae92d -0x0e47d90558d852af19805ce9efb4678c8a50ff469afd5aa2c017f5a6b083624b -0x13972c2072be26a29ac89e6d6b3d73cc07476681014b7ee56d3c2cd0da7a572c -0xe76aa6f39e03363bfab60e5f3e0447b738e8bbd49734bd7b45438457ae8fe989 -0x0c33116e731692edf78f3d13faad0404a68b0d17c156b3aa5bd159cef7ee65d2 -0x31b681c6a77ba2c3a71aba966b88a6301b8d431d1398e69210d6a15dd75a0e1b -0xc03a0664a01710d93bd359dd77bf51291d65052ef15e4ced233ee4375d2855c9 -0x75f0a9b4f2fa204cdd36c8ec893cdb2de8ae22731742e95d42ec1fa9fbfeb2aa -0xbf330c3847325d32296860db5e624111ea74d32fe9ead47eb21a44b7ab48e5f7 -0x6e2d7fcc1c48f442e09377e024663805bf972b9ab8807ca805eaf2f6f3c5a000 -0x7d5c442d3105dc3297fcbbee5f4caac943731f9137cb95d448210cf8fb08561e -0x4fad21324eea357e94bf36d01877d1201dad33ec00b63edd73f8c904811dbafa -0x915d98f33dd1eaa85abb2ec30cc78b30eb43d8f0c66f9664c2679efe8d25cd22 -0x4c77bb9359c8648af7dffe3ae77a5d4bc094a2d4278f54b5005c1d673fb70284 -0xa0437187aae3aedea384c5c12805fb1b48e21793e1221573c55de4563fd1bd5e -0x64f1edf8e4287e92b40595f9c1cf4a47aa73a33d9869fd066ed0cd89a391aef5 -0x29a70903d5fcbfe393980b93eef147b079d94bf2b3058de54357d40a5fa83704 -0x12f9ff372927845565cd7093eb22ac49ee425465a957e7fa9f24a420a4ab98ef -0xa3a3b81181c1cc33af579c6b32f7e4052e7ff687f34c45e0b87fb555ded8bea0 -0xcfb2a0071fbce75ac31ae51808c19df3c0583a7c8f129aaa050f62fbc4ae5259 -0x755415be4ff4d327f91c226e10da0ab388d47e94e66d48f6a85ab9afaf9213e2 -0x4a87e4c5ec0eddb077e90ef21e0c68c8bdaf18456f39c52954d6586e9bd9aacb -0xb1a42bd7130a03282d3f524f1dfc80cfcb794f286efe2f1dfd80712c05065204 -0x34a36fe0dae6e9df654b36103cc7501665d19dc31c2dbbe81b21eaed835dcbdd -0xf7470604f20977601b3ab5d1b5e4b41c0480c825a6989adeb4a5ba91eeff6ca8 -0xef8671995737ce02e00c00454180832821d0ddc765e0faabadf31ab57068cc0b -0xf6252d05ed97aa76e0dd72b0f74bfd02c44652a97ac2c771d6d4a9024fa6beeb -0xb9537341b5b78bdd5a59e5fb413f10b7ab2b01d6894316d3783900b42044d711 -0x85f09c6f2af7147564e5666a828eda9e36462e0dc6a95152a34d6a54c084220c -0xa7460234c5d2a4453ec38a5e32097e007b1af5a380ea714e2effd1009d9d1f55 -0x1cb09efa5bcf0f4ed8ed4f6c86d45bc76743af282de550d75c6382cfc4618b44 -0x179f926e47010b5307816ebb487f09efc1486c923870a3bb93383b92c0fa0195 -0x1d5a64df635b5def6c830b0a19d4c6e7544c934916f82bd4a573be7a111c6cde -0xa36b85a990496ce77c42b5ef8e84369f9b07eca6bf41a0e7cd73ff1892539412 -0x039a915c3c7b0d455fa15940109b9210b1c015f067e1f4356da9b78983d71eaa -0xf76bf60ed871c649cac3dccfaa77a3914b85ade5c97864c4186e68a8d3225a2e -0xc7dee4828ce5aafa6d1c9787d6078fd22a2debf22058c3379361391dcfb3a790 -0xd014333eb33f9362d3b9f6a775585094a09c86f4de2d95c3f2922562814ad6ad -0xeeb69b729c96e3721f488f0bf3f44ad7988a87c5082d8c76208adbe56f993aa1 -0x2c33c8791c1632f76e2f7ec8efa41ba22d3c581193b2c01b748a8357edd01524 -0x9a64f7e9ad31a0c47417aa1a28eac7ff1c9f68d6d38c40b073100ff61dbaafd0 -0x98cef27f153fdbda34a13cd6f92d90aae68b25df033f7ad7170ac9b1bbeab704 -0x4f1c03a754d4393eb7d3a8a775dcd088efc0d4dcf76e1615ebe6b3217d16a9f4 -0xf6adcd995d54c75638c0aa3c6896e4585d2c141cf6ab9bcb14c6fb950f82ecbc -0xba21abce3625e7673d0bdea68a7b666ca041bf77dc8f587d8f23134bd6b10943 -0xf1cf97d2009480b219faefdd4acc5613c75ec73750150969a3eb5df9a92ab14e -0x289f0f85f541b28d2be8ff2f5c21ed7878cc8f820d0d9ecf0e1f4aa46927e326 -0x145e9a43a14eb4911a35c8eb5d294423f27bbc34632921ed37fa85d00e46d893 -0x39ff46b1f12ef6c0c58f7731e8b891cabe6b3fd40ae658f0aa3c39c1bba28c9c -0xaac523c7bb833f4908bf098e88e547018f2c5cc1b3043d3bcd3ff77dd7950225 -0x1b8b68585bf97da49d6f0bdfbe0232ce90493eb263bf8accb0af041014cf134f -0x01fd2d7ae6483651bd2da039de2bd8f73a068b49967049c0b537bb2da9d807d2 -0xec476f3892cea956717ffb4eb05d21e33c83c29e087534d9ca50d5e5065f3910 -0x5e0398959669a3c889da26bc2291605192d1ed6e62daca7f9a3c410e786f34f6 -0x9cff178b7c57b686aa548f818ed8a92ff15f8679ca0fab8d3a895cc4896683aa -0x83766d635764f937f8fa90355106bd3929e4cfaee3252ef9a7ab3116e24ae192 -0x6d4b5100220472795ab2be53ff7762b1b6c874ea0f4fbf9dcfb8d0d8be444397 -0x6c17c8fc9c29bd86f888b310b7198cb0f26f0ea0d92f5b4dee1c3c544804d015 -0x7b6715773d8ba25e6870b36a0995615cfceb361c173b2dd82d7d909eb547e6a3 -0x319f1eff9a63d5d621b33a41a7f920dbd227ff41dcbafcaadba20725e98e3f4e -0x044aa6863c71c030dbddbe58f171516a095c2284cc33d0fb971a81736d0533f2 -0x9be33fdf31791199e025098298b1f6fe60b3aed339f195c0318844f1b3dcf35c -0x59b4808a9ebaab124b083e363cd94545391c1881a7664d744a8230b6b15bdebd -0xa05d1fd33379af74e53fdf4d1606e88ff264bc19c633a0ee635afb169d4288a9 -0xd3ba3b4d74d429a60ea63ceb2ace2937ad20356088c6e0cff89138677a686bfb -0x69dbd50a0b5e3b9937944105c23492ac7731e9f660c9d81139c90c7a153a70ee -0x29cff8b09f9ca54d19c5fb580567e73a0f5e8790a6470e1d6445ffe96e6bda94 -0x07c73bf6a4148057a1195d77506ec5b47e4362463810e6db5f78af954bdfde9b -0xdc1e0607990bbc4f33dbd74b94d78c2eeb3138c989fbbaeed1678b7e6a0e302a -0xb5dc25ef4c58437098024c1d5e127d0b85fa9d9e137b8199ac769866536fea27 -0x3470533e8fae3cdf77e1d5ab9a588a1ce63edc0f0e22a3a8826c4f44270475e4 -0x6822c56b92545a1ef2cadddde95fbf3c568307a8f64bb30fda2f9c6e0797abfd -0x2375a1f3fd9cbeb78ce4b37a5ad47a574e71f93b4ec797415e0d9d3495b2dc24 -0xa6aebceb1ed08ab2933238604e91a13fcd561c600bb9f0dc84186cc5f05adeab -0xc8f192ef06b0097dbf00b09d29f630ec4e00b3d064e96a03db80212c7774b5f4 -0x1d698379af6cdc9b1aa41d3e196f7ffc6c370a1b4bc067a25f7f39b38b82b2eb -0xd2a6b61422e3f817122fd630bd28e38ebf72991c2a18771395c30fb57d477d0b -0x91393666511756b0f462fa66089281f40b4744b57d556ea9ade8892236ffec57 -0x4b69a2c4914e112ae1fbac86e5574962f114ba26fb14fe54e0fbde32fdc7803c -0xd39048eb9514779d69a78b214b85a9f455694adea5b6fa069004a460a44d02bc -0x9432f63541e09f98bae263f57235537e069e923fec0eefd8887a0c523c384f50 -0x420dc7babc8c13e17811174443d83a5cb58b0b705a053da777812458c27089de -0x65016ccd5460c6d08b454ce5c99e6c8dbd66944cd895853567f791a2dbffa7ba -0x9cd85615b1b41ff5ba01ddd3eae39414e053a8ed177837b26b6794b616d67835 -0x37213f7b876bcaa57ba691031b822eb7e072d9f90d7f6b7436897f615efc3760 -0xe147252f379776cbe94696d0a1397b978eb0b2c3797e592c4ff3c7994386de7b -0x5279e23f138c837ee7678e515cb49a389b9f1c15241f1605580417651ecf56e8 -0x56619b07010a4488b9c330e019fbb03150bce6b4ff275be3bbb5a5b32bfe1da6 -0x0a53387d7056ddbe4f2a021e57232b4f96ef5917f76785d29e3edbb855369647 -0xcb3a792510ece3cd9abf41a997ab86610fd7f9bf95c50c9246e90aa9d152ca3c -0x50fefb47c8f46330dcf1d8d89c9e4e8125581bac667c1fd8d8189a0a922067cf -0xc3643815eda825bc19461a18b8837a8633869f7ab16d10f977b63cec15b90467 -0x2e954a3b29864f164b37502cff161dcc3d2ec84fa1bf5e3bf1dea78b31ec4154 -0x63cea088ee12c28cdb893edbf4970a95e1404e82e7852eae88d7944fd1639302 -0xedd95e9cc15fc688c3c524435e87e63e59c64feee22218a276519e74eae8d282 -0x6f1c90f13b889d81bcf1aec3374d28a47d5eb685d2aee7133ffda6c9ba7d07fa -0x3e336d30e87f69c78c475300e98c8249151c123fd7111a4ad172164011ab7841 -0xa6b9cc575b5db3a1d3607b5686660da6b0b4cd07e880974f9c19b67ab40d985a -0x768616697494ec7f4b5677bb844726211bcfc67171edd04a09cdcb52b6e58d13 -0x26497460cb7e02e975b4b440fe279ae9f3c08a9f32e3cadd0432726176f06806 -0x020839c48a236b541ff3d228a2e4c420556e7c54ca083da00a3fc498d5691611 -0xefd8f179dac089968e2e88bb4b43039a66beaf557eb9f0e4f54c10f58b04d6f5 -0xaa8ac55d46face3f70c49f6cb7563e982f8f7d1a41e4a9f6e5834508194469b8 -0x00b26557484011f0671183b87903b88275a9140a0888ae3537046dc0b2f30b6b -0xf0c6ba2cd1ed35e91f1197c6ea429e52ff3e1951083778d1939ecf8e8da84be1 -0x8e29e2e788e586c9ce6f967e62fd2d469928aa07fe7399cd3b828bc40df6df73 -0xf5d770f1eeef0785a4cfe9f2c84d6fc1f0bdcf61162bc62920ffcb99d4fc873c -0xf2d55ae5f480625a38527ad0a59fa236f89c29608f6b0912f1c3a06506758f5e -0x99cf2d50f6a20dd87642380ecf382983d6b1985521ba7a7d031ab4f25c198353 -0xe479bc7044fd61e633b62cf94229f3a076fec8a8dcb4627e16d037e1bab15f0f -0xf23c4422eeea68e675593d4ccdfe641224efaa899b8924b780db2fa3257186a7 -0xb964883d4a3c5830c5ec69b11f71123b0ddff02d7bf9cfeb4ba11b94d15dbf70 -0x28e4589865170941c05bc8ba1b06d393c1c412a202488e600782cd795838ba72 -0x1bbdd67a51cdb5a3db572f7f8ce143e74349bfbbe74234da4c2d409ebc983bdd -0x059f9d56afb62bd4c51ed024f70504536766e2a06fa9c2a998b67fbc69c04f86 -0xaef8aa4c19bae2117af388a13d2ab34ffece016ecb3ed5269712221347ac3e8b -0xe207efcd70f26a288526e68a3dcbcf19884e878fa47ba271279867294ed76d0b -0xc67314f1e27b48f3b046b15caf0c7734eb283e61290701c94eecad07b6deac3b -0x2da32607b6f232f77a5cc1b21339181a59d27c7ddb637a0adb6b7fd833483a55 -0x72d935c5dfef40ac88d68ad9786d292371f8e218646d6ac5bf21f7cb994d818f -0x291183456f4c28d1e7e8baeebf8bb9831d78adc24469383a82034802443c5658 -0x144c9707e6d16ec5e7a14f5a42b3ce40a3417b73260cc82ae2f15d37dbf90c76 -0x44ffbdf82a7672eb7855dc2eae105d48bcae9ca8e1adea3a69d9d9df4af833b5 -0x1d1915425b0bdaf202b10d96d041a007f502d4fc0ae0f9b1d299cbfc2519384c -0xf35106758a7ccece1341d33f5abae3a0e15f4daaf68997cc4e04194a1a7e616e -0xa4bd96f4baf1e5b7cf5d6f9f4cd7ff89e0d5dc4b7d328a3fb2f978f2f4ccc754 -0x6c0877a04328f99cddee85d8b0e9b18f851b3f8557143ee2d0e5d701f913a415 -0x198acb34c16ec8b81ffa4fec06bc605cf0701f6d872cae88d5d5895feb8082c0 -0x7a8a098fd2e148bcc679ca8a589eb43549c01f4b933511b77ebaa5086d169155 -0x51e7daf8bf4937724a6aa4bb8cda6e32f735ee347eb3abaa4b2fc4c5a0a977f0 -0x35bed6e07d13e42faef5bc40ee2e286219d52bc5de7e3f93666f73b028ca5309 -0xdc535284838daeb6f6d1fba0e05cf244913836d94179a0f59e3635d2ecefe01d -0xe143c3de1e6fa5575ceb93a24d71f92256a7748666fdf211bc4c0a9629cf37a5 -0x218af2fb00eb3ead854cbbcb49090a672095e45c1644a0c0eb7441aba15602d7 -0x00815f7b85df3da199cf7b8ab25ed4b2b2ec88fa3bd3dd71c444d5aea710f3e4 -0x45b9bc463b1092ab28d1999fb85a2c63031393fd304819995acc9a4da49c5c4b -0x30191c45c80e0182e470767c37ab839fbff70d41fbe4c5e5ef3d3d4ccb4457e7 -0xe21acfe8fc770e33946a60f05b82ddf8d65a5859dbb3ce591ebc63e8b2913462 -0xd464412251532e56c9fef96e962cde544c2b48220a8e1cdcbe85603b7055f427 -0x0a3da8a39426b249c70bcb0e2d2af0f3f209b0a8c5d33d2714d7c8a092314534 -0x71e763a49bb2d25e0688495dcccd13f13aeb7483d93f178223d216c1908e1994 -0xbbf111674583f79edc0653968cb73f77e9b9af685fd79afb49827cc21421b947 -0x6ccd5b0a89d41bcf84be9586abd16a3dddd4d799e239f94fc3c4a61f60894b55 -0x7afb7ec95339867bccfbd18da35612fd84794ab5f289388d09f568b2e981ca99 -0x437f042a2f12457cd0fbd0747c71746c8d14d533a4dcc767bef9835848fd4d5e -0xf9dbcda9522e6ac0c6941898594fcb68eaf9e018ce8eb64006989a34b3fa3b74 -0x34f6cc2da37561a7f41586622b8967b439e709ef159cd11d749009f7ad7288b7 -0x4bce18f7e222ea075f9eb2790381d6f2febcc8e0b876363ecbdf7ed0c11b6b65 -0xe945cce80a04e8ad29bfada0e9eb00c15df22e97b8451b1c9f06fe303db96df0 -0xb1633953dd2d5bceff9ad6d3e7c45b32c2c1fe5af7b333e4d15bd27140f75ea5 -0x3d57ff03661be1dbdc097c7569e0e992acab40a9546635f9c83a1b107c7cff16 -0x155343e9c9ff9b8af25f637782b89349815a5d1039e9468c3ef221ada21c8dc4 -0xa4e432e7d1a4daf32c56154d147e8f05ee4a3f313d85c8650d3b5b97cc3e59ae -0x0b23f4309edc3dd8c42e34e16942032c06723bebcf958aab0ebbf103e0c1be67 -0x769f3088b3a3a8af364addeacb46e86083d424db9175c3e07b33e4b7f5724b10 -0xc5f13ea12650788919e5a2e407d05d0b6720097a69992a43c9cef813cbe2eac9 -0x9b581e3fd69bbf1fb05a18ff81878202fa591f97f5a80a0e9d700a57291ed314 -0xf9d9224f1cc9792b9293af711a90abf3fc45f90abd65fc82883bfff5f002826d -0x96860e91173ae368a6064c173fe66ac1585030452f00f46f56091be4824158e7 -0xb4abf966b6b90f4a4ad40987a4ec57f7a5a19049f0c3e7da9aa794c8a90bbec0 -0x012fd8da8f47cdb6be51649926e24ad4ee9da57fcf029f4942bd7c314432848a -0x4ed4e3ce7dd25d89f784ac6b0e4302150b4091218f2615070d56f28e237637d5 -0x2f1f5b58c782e3be758a3b3071f387baa1585d6bafad5cee06f54a3a2035a17f -0xa0ea56e55925cafc703fcb478796ebf66199472d4df36332d0cde66572044c9f -0x8319860c325b5e5871c1e5c046412f5a766cee9ff69253d41205d926ea3ce2f3 -0xe756d32a55708048e98d62fa5ec54f9c7baef8acc222047a8165c30def80dc1e -0xe3206cd7db26100a5223db03bd2d0b3f50f22afb7ad7f075f3b3851a07f273cc -0xd43e4eb1d49ec2f258a82a08db5cd14e1664f3c55af11d7513ab347656f49bf6 -0x499cd263c886cc721dd4dfd1d1a0608d3f8567198b4ca9222b4e84608430aa9a -0x5856afa383f3869e6fa66542f000cf2ca03733609914d048c0b150e5f92a0ce7 -0x5eb433604ede358fb7c281329feeff4a7ce7f7d2cb364bcee73fe11b7ce1ef5d -0x1297441269b50b9b8353f1a473ec28a2619540fcc9ca9207a53fefbabd6859ce -0x712d2ec468a10a24f19ad2a99609d4384601f172c9e9b03c0f253d94c8b3ca03 -0x60abf709800c85b506725782a2f04e14dd5b4af3cb380b3c4af597de8a1b107c -0xdc53769c698b2a692bea0094ae53c22e357d51f31f31f3e29df0db2b5d86d29a -0xccfedb39dc82aa77897149ab7daa6fbcb933226e0cd57c57f5bd2355dceb4d40 -0x761c13e61b2a47178ada44fa1f878dbfd3c4a57be5fe6f901d26d3b3bb758806 -0xbb616dfba8e3db6fc508c35c67b7106e6f66f0f4fa4b9f3d1a3c47be1a726069 -0x952f6cf13d798e2fb686457ce2182a250f2b5747032b04027175ced7f76e3e7b -0x499be354da84de692a09b843103de81d1a5861821ce86997383f7d66cb505c90 -0xaf72b9bbd6fca3809e85460f525363cfe559da94dc024cbc83c58bc9660b5594 -0x9833b2942097edb50af3e07f3bc53ac908ed32e121f99c4ec8046ada8d39e437 -0xc9cece77d9e33b7dc928bdccd107cdafbbaa5e6232c13bf1b39c7bf2bd645ca6 -0xa0a41dac59b0e16c80332642904c9ec9a8f7d8b8b886078dcc1f84550cf5dc4d -0x23c2fa164b8addb2612eb72f3171348564d6579485a036f736334ae258cc38e5 -0xc690b4c4bbe95b04fc38005fc3816581774ab0fa8bd2cfb9d6b33ce20de590ee -0xfa3b1ee6bef48c2d0dffef6a557ebab66cf675e1cd2ffb59acdeb64d34dcdf62 -0x1b4d89813e32cc655b519007b213c854fe2702bfa874b3e9b702766fab25d207 -0xb6e9fed97593c33b4495df47408f67004388b2f7fbf1e2f915f788f3cb432554 -0xeeccf81379fb2c7cd662bf43512c16f14f54301f93c27321f5bfdfa981fdc451 -0x109e67d1ed78194e48e68d71ab693e44e82a19eb5b5323d7d08625151ef55b21 -0xb8df327c0a9430837000acb1c8f675fa4725385ac025b73a9ba4b79e5fae305b -0xb1236c33a56b352e6a8cf2e170812c2104848e5d026e9ee9207a500a53e0a620 -0x6e7c4cd62cf882fbb3c99f320673275d8f129c980c1f7379f80ef62619827d59 -0xed31164c968f32e4e371e55b197b14dac6998ab1493a11e2807fb2eb4de31041 -0x8fe2a0265d2b7352546846dbadd803f85e4f7ae3191d553422c156756bd63bbf -0x3b73dd1a5c3b4c1496d5d5723c300a6cb63fa5c6b64fba3c5f31599912ba5fb3 -0x99569cd40e380e77c698ac4dc146fbe638245402faf88d876a4db4df23ad5404 -0x2f02671be2c770caa278725021d60907442962e1f8b6352e56884a103e227f59 -0xc94bcb29ee4bcb915b6669cd0337d5b4b2424beedd56e4c0d4afa70edb5cbed5 -0x818b939af7490e20b12ace55aa9380f7145b3dcc1842d80f705f2ce9b7bc70e9 -0x2063b7a146b382c78c4ee801d589d746aa3b2b29df8e16747b4ef942293091fb -0xbc3c40e80e4a016b8040b4d48a53c5d49aa0bfc029a54094f6419ccb83b367af -0xefa0b64c46d8ee75b0ac9418f4426a825c1475efe682e904a19dafe12cd804b0 -0x9877b86ed438214518eb90da0a22edac1e313606e6d7b6de528f22665e8d84c4 -0x30a080f56bc5508a07a2623c82d0f9c7ce3e1b5c30a422fa56b75bef87b8a810 -0x5e4ef125158d7cf0a602030982912d567f235eb91f5f4cb4fdd87360b09201ae -0x8a37e160a7ab33c3531e5396a9f3070cc89034de7f3d85c4512ec38635c994be -0x952d6b7fa8960c928a7b1abd58e3810bf3831ce8e3ba0235e8fbe3f0ab6f10ff -0xda7dfb41024439fb218aac40ba9a27806940e0e6efdcbaf84a2dd7e66aeddfca -0x6ba067e0be2733df5d83de8f8f2255322b64116423903a36a8d9a19d1f8ce09b -0x7128f7edc3eb7d91654da49e00ded5898a8b5a3a706f617a60563c3227e9969c -0x5dae927fb14640eab081b12606e5161d78411c795e7f294561492b17bc8b9402 -0x58cc3b422e1b62b4e6f308bee1e765f169b68a8ee52ecfbf900fc15f1ec2deae -0xbe4b5c6b0c50010e3c466a41ef83f22027e0aa08cdf98d223c7d82101e142e27 -0xd3dc858691d36f5dcf6308ec99fc2305ec7d0bd15776e0e2cfbdc0fbacc69070 -0x395ff1a82f02554058ac1930533594fd5231b7f1673c97924dc4f5e5c533bdb4 -0xbe067b64589c33beebca69f03e4a462c7a52aba216ecd19700e6f81f5b17ee0c -0x15423121d5a68afd6dfb8f68773a9aa41bbfae8f7dcacbea8fa7f35836684bb5 -0x5c383e2c5213c8349529003afb975c3fbf7c689fabbfb98929875d204e8f097c -0xe8f4edec9eaca551a18edfafe4f04f827b09ba92de44ac9b9d8f04ae58c71730 -0x01b21dfa7017b00427b41b2086bd9ef4d6e6ff36bd5c9cb52048d0725bc82bd6 -0x38ece23a6dd9c5cb5847a6b051c3c1466acc8b1719eca9d3d61b859a0e014537 -0x2bcc7fa6c84c6b3a64a3c81877b79e576f43cd37a9fc758aa8bb8f4c77c833a4 -0x8d302a2d57f29fb300503b90eea659d0f7e9c7f7fb00acc275bea122381f838b -0x0e3e10936967a335d8b018b5cc5b78906f8db12017b730cdc6077c5ecb73d6d1 -0x629b972262bf8294c3cde4e172282797e05cce6248b8e495de25f341bbdd166e -0x1757a3d534e3aaaa5fce6b1b5b487405682e2069c9b162a03211003a00fd52d9 -0x98035b4ee1e6c90433877141b65743f73b321094e60200bb50f0be54a0bcf6ca -0xe93e38b7719f1d340c5267ca3c83ee9cc6b787b0c5fffdd0420e310a750a4908 -0x2431d3a45b695b2975e1b4a1666585a1d6dfd1ee70a534a582ce0f06e0cde118 -0xaaa3ba249e971c1897077b3a9dcbd8d9b0088c04dcf7cabcc5b0822573336806 -0x79a9e41895ee9e18fe0966f498361d5c17fe5a686fdc664a4befaee4bc9b48e2 -0x30891f31e4a0f5717b300923b61591f7cc75d02509cc865a10e023c2e4285b6b -0xf34d46244a0efe05c428b2791df6a3364ebab133eb97c5f0393bd4b16e179808 -0xb5fecc127b82e0c456fbb0aedb7759638246e8796763870f065671d658d30b86 -0x4330cccd4c2e2a0fdb2baf15ab7f9ed0bffac02bd54baf381ae30c92e331f930 -0x363aee6c8b2d9a752ffbab01a3e2a824370674de47590c6d2afd2ebbb09eca3e -0xd03eccf43ed94cda06159084ce10239a525db33ac4c0f800908d199fa9e9a812 -0x76eb601f16a65ff2629b43c4a242cf38934c7482db56b64f99aab81fc0091d4d -0x70207cc5a0c760c98d0cf6a130998ab7c2ac4a28f10544ac07e3c1ed969fd133 -0xb5dc6a123740d31895df5ce2da168ad8e5d25c48ef82027ebb6e5efeeb26d317 -0xd5d750732721ddc31b6c20b126ea572a20def40239a77694b38a305825504f1e -0xe638d38f32f2aef4d40482a2464c73136576fb6b0786270576d0bf9972e8833e -0x19e9a9f483c8ef215d9e6c117138e4a7b89bfce6886ffb0fe48fc18f748ec342 -0xda429b88a1b34131345f6d26884406cce84ce52f1fdaa795169ba8287dbc4f7f -0x94f579a9846a7575d6a484687376718a2b976fe1dc8f35af5d27229b2516dc42 -0x0352b04ceaf9e64d3e559545888a31b223310d4308b249d4562c2e17f1a0a04f -0xda760db97561aaa9fe5ef7da8fceac3937bafeeb5d3ecae7b402d47de6c6abb7 -0xdbe99cfdf9fa17d315ca42f5485c04efbb31ebd955a3486bca534c35df222aee -0x6fbee4473f22467839299e766392a2030e76e6d212bc917b54ccb0ffc6f1ddf8 -0xbdd93e9e8857d35c12a95c495381585702a2dccb5154bc1d39b07282b48b0bf0 -0x299a20e4620eb9db52e6230fb8c37a3669181d6650a2efdf1a0fe4a21e949d08 -0x50b5f7fb1e7999781eeeb51d060bd5301c694597b1d6eefef9258629c831c395 -0x1f037646f5ecdfac0c20873e6f842f1fe36545f2c7ea9d532784f5b76c3178d7 -0xc38d3e842ba42c031db777b661e1099bcc0c0efcc1a25d14fa8a9d852ee3ce93 -0x95758a24c6f96eb536b70f3601a78e9f9701a5e9738d535c2f2380fae42256ac -0x443c0066cb7930e1a2b8ffdbf9158a79da1b5af6e87912221659453ea21bb2ac -0x84a37742157670f30b8a9ee0e7666b2254ab77f4822538bc894403a3578bdf02 -0x6eeaa32b514df8690bc27c40225028e92c99afd1c10ced5a58803f98d42ce4ff -0x99e8962c53701ac0216c1b9e366d4dfc48abf74d7d165ed51c4f3a9101f5b233 -0xe2382df0796c3fc5d77a2cf4133a1afa1d58f02af1735221ad97bf609a241551 -0xbf0cf5847d142f1343a58818d45e2876661819615f9ebb1060be684f1f978dd8 -0xb206ae1eab5e21e04e021d882749fcc5cbc5e20a629a4d9c6ea1af129db5848d -0xcfa73c876027452611b2c0d6d1515d872ab4900e5d98a9f948c2a99c9c765221 -0xad1c79363065071857cf618f8cc4ce55d610f37f47464abd8cc0e681f89e40bd -0x42e2712d984b785b78e01d4ec99ecc6e08c9c6b4f3bbf2ce9e9981103a9f3cb0 -0xd468f04681ee66549075ed39710e5e178dafd038d8bf04df93577318ae35c9f2 -0x3a6acfaf02c3de733b0f290447141f9a61b848b74cd8c3864c40c95494a09f0e -0x967fc0b86b309c7188893e3180521350ac251b67802055ca527384d7c11882f5 -0x0f2e5009bdf72a27cc402969e3f34b8f676aa9371a68ff037ec3fc392be15d94 -0x3fc0f18b9c76f36fbc8fbdf978ab96d4b8fab3b88baafa04d51c97ba19c8ae54 -0x04c4b5fb646aa1fe13b4c57a2a3ffb10341815eacc71ed215d1e4dbf2113ce3a -0x1cc2b1bae62ef14c36eef60f9d108b5dd2fe64bfec422eb9e38f9dc5744e56cc -0xe3655c48dc31541236a61c341490be97778b9825eba5a4f4372c182945409cc6 -0x5c35cd2d812d03ad0eee6bb3998b8b65440430cabe6b86b2ca6b0038984d3070 -0xb337d044469bf78aa09e846deb820e76c3796def651b3ea6dca7b3d7135cac35 -0xc973e9b1a37f7553498d01aaf7ddb34ee4d60ac42cad365de2d44c89da53ea13 -0x405bf1637cb84cc64f287e8370c6f66aeb0f22560221d3d77af8132d48483884 -0xf58938294dd2ca1b495777ced051cd32fce85841d88755335f7bfc8a7954aa7a -0xf2d842a67665906f45216e7676a9e31603438ebec0d8e81075c8b3861f5a6f35 -0xe13dafe385aae47340523093978c57561cbc1065329f2d339f440082191b4182 -0x0be6e895908e1410d6fb5a22f9ca430a0f497299cf5be793ea75fbba32e4b2c8 -0x3bc0e768b522303b7c13fb25503c25b7160536b600d83e068f61477828d5dae8 -0xd89b717662be569fc2f3ba40bad0196f198bb80ed3ee7ef378025c7ff430c7d9 -0x03785bec3c3f66ffb970f51e66283b0a211ac0dd74b48334274e0e794e9210d5 -0xf4be0ff84a44f91836d96d31ac360d35342ad8554d493d8fb69cdc78ab421d1c -0xb2d28148ca84bea29ec60d5b6cd860ddb0599b22ec3de9ae7022469facf6125a -0x7d2a271bcc7eb8eaf3df6d022d8528c8d5848608d3beb790e2f75e873893e3da -0xb6864ea39351118ef4c97f6ba5d932d32fbeceba57cf7cd9387dcea75be88e3f -0xd04a320b12d1d26e372534bbb1772480cb51c2ba3325cd6edb3cdbdd771aa1d5 -0x7f82f792f43c9db78f441b7bb3bf493135e0df33beb8dc1418ba5ea953e115fa -0x917c68461cf0721346366d56ebe9ec1dc53df5c9a2c2e4e1412bf0b1aa90579e -0xed9eabcbb66c12b9802c6471a476c0032a529b488e8fbe51a75fd978d2305711 -0x7b076b85f8266863f4bf0093c53f962c80ab66898d4f8e8d926346cab1722e60 -0x576c99495d30d138c5e8b255e624440f95bf83c220afedff42b1ea07d0bfb480 -0x2b0c4fc48751eb5c8bc8df4edb851537fafe0f4dded395bdcdc4818a02342dbe -0x80df65798a8b4e2c4f188afd9bb8addbbc7ffeb783dbf619542a1f5dc36de4e7 -0x0000ceeba6449b63691c1a6991c5a7fcb62adf6cf933c72de80e90d0a8619b9b -0xb6fa20f6c682d708b663f819760a388e09c15aab00f9379777d069e52ea2ba47 -0x5b61ad363a1ec096320bf8c6e6b77ecc1a5f1b90d3e7112cb346921e051915ab -0x4bf25098410e77affc3fcbbba3e76117bd4237b4b92ff1a3dd32dfdb310a4716 -0x55759841beab4926b1f0f969f8e34c229e35deb3b5102dedef301f6f1e21a8f6 -0x6ed4176ab9fe301f9cc75bd7485a115e3d508190e9c21fd945ac5103303c45db -0xa8ad5b3fa311de953d100f8dcda918c258b17c1e429e751268856dd9a2f1fd13 -0x3f2d2fc5f3ae67dead9154a2fb1071acbe28c120d9670e114fc66d7bc1fe20a4 -0x8761b6f432f31e0816945527da27ef7e0e1c4a4168496adc413da197a9710da2 -0x34d3c7bd12d9d061f94491f72d7dcdd1f2c2ba247e0050daec653873421c05ba -0x75ce8170d104a002dc0e6abb0cc11f9916c1020072d4ad3fb2f45649110d899c -0xb48fd25a138efb03491e531f6d841ebce6eaa606c1d83a1a32a7bc83800790bf -0xbaa0bb76e00d1ba0d01ad19d0842254ffbd173a519d03e837b635a599d5c7fc1 -0x2a4871ea5a368048ae85c7e98c74d0a817082946ff38f4c4fb271297cefdd45d -0x747fae9bf52134b5baff2f2fad95dbe3769d5f556e4177e8a198b3acba43876f -0xdc60787a21a02da7b653c2d1e80384c5e5e5c393953ca415684b3e0b664e7923 -0x4aab789f6fd92c73de52f0d53100f7b83d2aad7c3d5db57f080d88d5304e89c0 -0x3567463468a7e3ab652f47588cc3808b1c9806babd6eec5c2d35b54a5d4037f5 -0xee8aee2ee91836e6c25b5007c2aa8aab7cfb580f2b0b1ec3e04b291eaa02283d -0x1e434d208fd532a814af66a85cf4bd09ef76132dc69e65227bae58ffa8696136 -0x9afc129b99dfe0ba9ce854a9deba2b713ebaf05ebf200737a724e16d9609a35a -0x9bb755d87b09b24dd99ef956a6745a23c896eee512ff5454b59f72506afd7ffd -0xbe2297de9121e22ecad61798b2ab8755213e7301bb82e3183a17f7188d8e1788 -0xfa61c60e56d48b3511a419527bb6577e8468f0212edeed3f8682f6f8cf0d481a -0xd8f2e3f5530e1c36578bd575c54c710b71b92ed62a35842f6cd77c4e7ace79af -0x89615ca4e99bb1364c6af159e207c123577f303495bd4e0ea1bb1d61eae16bca -0x9ec8bb8923163da1106a092b41f72a3d5e2b8c6c550b2660f48ca5fabb4f1553 -0xf415ceef71e64324ee6f90a8f7d76ea4e7d93b387c232e61b27f6d7254cf3a79 -0x8ddffe6427e088ecff1b3e3331d61ae3d9fba5cf8bd86d0992374e708a8e9ac4 -0x51856d0ab2f6de3c226968af81c4f695264025d57e99e3ac5bf62b58f65f48c1 -0x7462684dd7756a76a48340d463d7f687075f5a8916fe1323a85ddc5512885253 -0x5f887b411dcbf1ecbeba4603fcc65147614d5e9eface84b22612e76b98a56eb9 -0x76ae53607acad73d7e445bd1f5ea529c12d93bcdc90f6f12846c4888b26e0f1a -0x0168a87bf31ad7533b4092d68c275cda3489d4e25277beb5079b25069e1f2269 -0x70798bb0e85e4046fd900fb12edc0271eb51cbd7b870ac6941a93e514c7ecad5 -0xcbcc88f53487ebf1e32b35a696e8bbef5cfde7d808d06eb01f2b877c8d8da3c6 -0x3bd5c29d650e18c24e1e6913182ba5a5b51498cb5db332a0641391e73c37400d -0x722fcb304b8c70b35b68bee62059e0b10fc2e38661827e0860b8bf3f884d45a6 -0x9baaa2c32ad780d7d320d7db5deddb6082387ffae63ac283f2c4ef2f42041814 -0xb877c76e5042c2b4a8a1f625dc1cb6ca488de2b8fde18dcfae21a52726c54ab6 -0x419553baed187e85a234e2eca778aefe0d95b6cdc3b8d1bdca4801998dea17ed -0x5b239e91f65ad9f088c5d6419379a4a819bc6560a2f0927307d743b1efb31bc4 -0x4cc8082a3b313f99a992bc38df2c865514dcd5c84cf682e2751ccc6c9504c51f -0xcd3c49fade57272dac28c4577f0275f616cca511fda30417e4e3f44db810cb95 -0xc4df4e23cc20cea2f59a2408b2d3d6c5915a9b8072d1292c7b57df90e3745ceb -0xd674ce93c998d3981a32db6234f887b81a3a41a7f18bf05914a9d87d57d01799 -0x78bfd9ad7cec0a3163ac53738c18553bc64a0e9d0f936ab4b18cb2bf767752bc -0xe7f88256ba6311450f1ce1e9157ea71b3eef3965ba729003265267dbc46c7a89 -0x899fa46f134966ae29fb0d7cab3ba7bf10ff3cfb24953ef42d6eaa223f8108ea -0xed532e8364528fbed3d265aafaa13e2e76ea0f906aad2537f45335cdfe528603 -0x42cd55d14b773352e2660aa89c640a713a9154a3a71c30e8b8bcd30102cb270b -0x472dfcd73c54e36068f7b5ef80823c2098aa08aa19ec7a9c4c9dcd1912e5e154 -0x06500cdf7abd63b87e69b8c4da8770963da3da831f9c98fd48420b48b223241e -0x4e37e8aa71d62060323ac262e3dc568182d15dac45347e534c3c82344ecc6e45 -0x60f4e9176dc446ea14f1c8cf09c5d35283062431134334d0c37a291dc9afe2e7 -0x52dfd34e1d96b1c650550f4133d6971cc2447b513a807c7d0bd4be6fa02ae97b -0xc94c384b2f671b3d99c4b1c0b7ac38ac0ce5333e8b3fe0c26735f583be2ef556 -0x27b9a7c97167918960e8bfb43d71e697004f00dcec7a33936e8c89d2916e4d29 -0x92eb31236ed8b212db8f7fc7b195b09ab941ba133ef3acb636be0c4be426b720 -0xe6df60ffb6f1e42b8f3914c4067ad1e14049484a8518ff6e7ecfd293b7d238d5 -0x4c6305c6098da02e33e0ea9591c57798f0fab1b6715452d6a93ea127be19d184 -0x57a2ec4d2e0cfbb81a73bccaa0c2a4b505b4d097f2e71a4c33df246bb9c88704 -0xe14896da576d3012d5524eb969b3ea5ffe22062b108778f2d6382e6569ba5d1f -0x4287b20dd1c6764aa1a1e6b17810a538833a1c919529314fb8347e1ace86a78e -0x07bc8d8626e7e454580bc02edefbab3d6018d31cb088f231281b17cecc9d08e9 -0x6cfc652cd82cbf6521b46b34b575753a4e608dfb3392aa45386a6f5b18b45b4e -0xe97b1c00c4188c53fee92716146586be9d52ee36b781d2ad198b3e76050257a7 -0x046c30c374c024f61dbe8d9a285e19052d1bd1b83e52aabf3c24b242f095cffd -0x048866d8618b6744066974920cfda0610c97abb73e58776d87d155a392508b0d -0x0c09337823f115e970f2671be18967b81aaee6ebe99a0b4fe5cda40e04170324 -0x9d8531302779e9fc9d429d65c57813741667c6fc98c643546570077dc81b0ec5 -0xd1ecf09846f6a03f3feb7111abbda93a9328ce7d2c7136809153cdc6997a90db -0x94290f4a6308ddf1da188ea24114098fb9155078d288ac117d47f83413cd1cab -0x5324e050b59bf46a59f49507ac0c9f56ddeb994e17c7003f0ef0306b3d23bbca -0x8d964457a3bf506f1129f6c831d163185f5f02bfb4ed8776f52a5b49ca5c809f -0x54fffdc0bcc1606e0323da45322a6995678fb4008206b36e46c7fba97046d7f3 -0x48d9a0d822230ea7e62253d2d67c1fb5c038ac29e11834d6b663e310b4b857c7 -0xa1ca2d0281aabe5e722d00c0ab3ec7ce074702bff49b9f0e375b4897d1359398 -0xda1636ccd22f76fb55a327461c3d79f35fe03f4c7ae2e441d6db8ddc875d5f3d -0x98dbc10cd690e5fd14f1c836464f6d859dfd34287141035646e2d4cdf606a282 -0xb4965dea132fb1e10da9550c3bd617a8d8809aad5d030e674fbe72792eb2ea11 -0xb54e081b15fb689ca40cf99aa84cc49f5edd203c4fa96d369444eb250f3c7c6e -0x158ac489bca6e89d4b6483917809896079367ad4a2dfcde11b1a73c67d01ff18 -0xa9b6e56f12050be6b1b49db8037f7072b270f2a8067f39cba23af2f3d9fec8b4 -0xd98b52f8294ab347b591e045a315ddabd5b592e3026fcb0b0eb77981fb0475a5 -0x2c65c96a53d53e92027cb97950541b22b3fdd2c30a6464b933bd7d0e397f182f -0x0b852dbe75b5381238230c807cc17b5a2a236f20c28c71c4052c4c8411ed0d47 -0x0fc99961cd489aec3b8833b2a5d6303de9ceb07f58fbc14c80089a25f33a63fb -0xe3a5d6d5aff5e0c1c277f59cd0c664ce48ce72c017a4ca4eb3e0a24a52c0af48 -0x4e5545e550dbc18ce71c02839ca5e4eeef5ae91b23ff0bbb9ffbcb1556376f52 -0x75629770b89ac8a7470101efb4017e72dcebdbdbf87d6b2b000a7ebdc13a3bf1 -0x22683944e7afee304d66f4dbbc378dc06b746dd9ced187a2365b1d49e63ee286 -0xa8321b74b96ceb71f7817c1d52a76b46794bd7b36e13d4aaef03f785989f3e65 -0x3af198514f53a7a4a4a3e542f2ef736cbe1831c2e5e5be6d6e8375aaf73a86af -0xadb800b86a8f42530378d7b4c136356df7748e496d521e32443fdc7ef5a5a527 -0x678a7ac9a2111aa4416c3eaae18f9a8764f35371c68f37fd9ee08e3bd75b4221 -0x5b5c012f61778223af65a8b6ba82ea632946209b23d41276caf70db9377e3087 -0xafa48e06270dcceecd0180d9638bc9d538e4f4a5930a85dfc026d25ec446e043 -0xd29a588edd2086351c27f3540176769326b9e91bd53ab07485f0a8b87f47b202 -0xa10c2385cc6d6dbbf80fce688504e0601b0b694e13647fb2eadc1f71cae590a1 -0x6420b418705fda6d99e3b602555849f60b1c0fcbcb7f1f4a9c659b98b85a097f -0xa52087c6052c7303d11946fa23964cccf6bf843dd6b649d93f44d50b7ab034c8 -0x72888a9cc2508836a5ceebdc932e2793c7a734143b5567c7a3a5a9a2b6f896d6 -0x3ca1289357c170df5b5a5b1fcde9afc2182f24938a44f384fe15fc1028949302 -0xa2e1b124aaa7d899d8870021373f0794a8e71f34e0d93ecce043a814b8ff12e9 -0x339da6369d6a44a5e5ef35f31f8ca11f9839209264b091cf3a0e7f35571951f9 -0x83b67aeeb0fc75d66220e3cafb9c3ec2fdf3f15738e4b4e002cac0114faee406 -0xf1dbb061afbb4894aaf138eb50efd25ac7e47a2607c31c66d7b3e16110e62230 -0x4a0b8d2622123ad6d7615a15cfd038edf8435e21f07231fa07599f73953f5fbf -0x0aa28ff6eb1c0ddbdb75ad5357d75fab5ed4f227fe0970f493eb08802bca37bc -0xe398c3bd38eb806ecba4dcc9cbeb6f27b8922a63a226614a5ac1538867d15bbd -0x79bb0be791e2030aa387fa1620c74a2325348afaf2e020df55b40395e486b973 -0x6b061302c936a00f9cc1ac48c712973797ff95995dece3396a2fecb554c1f9b1 -0x7ca7fe1da025fe197d89b6ab4e63ee3ad1c8a390cdcd596302c37ba4f936ce76 -0x7f6c721d3867ab55edd3a9d75aebf84a1cbbadd79aa87b8f75bb741afaa9ac84 -0xcd2c17de434dbfdcabb265731dd6bad3f1cdef7114b144394ec88e8c80dddcf0 -0x4070645342b468d2ed17275c8137ec48c8f909b31de6e9c0c3a6f3d3c438fd97 -0xce165743f958e12d0f5f26ec421ac610f726e06721b3ba7e4cb2f770a555da0f -0x2105539040b106afb262721646cc2fa3de0d805a341e39cb80ebdc36e1c79b3d -0x79570a4f106db4c323d1367c0c48ade4d2ea3b929db7287ce85b1957944c9864 -0x68d10a44869e7e03d53783cd06e78b2631d33e6e03bd4d406408891648dcc894 -0x7088472edcd40984ee7b03bbd99326ac1d40307266a4fd4055bb6af0eab65fe2 -0xac0b0274accbb53d61261b4967a0d86ac44b72e2a857bcd41e69531b2228fba7 -0x4fd59c1cca179bbd0c8fdaa57613092c83f3f15cfd32c4b3c069c6a5b15241fd -0x9f27c20d28964e24a86b754020d7d2f40d338d31b11e62e605b9a25224f97ac8 -0x385b56533d912f027a945d3d68df3f6882096dde3d24fa2a9d58eb46674bbfaa -0xb0c2e2d36319ba705853a049b54428456dc4cbb874cfb7464928b75c818a1419 -0xafdd5a27e786af5634c7bbc9037b61d7042659a8ed8437779f8917918575b959 -0xdc16b24aa0c0f26ea020a3cda55b3966befee99c8f5a4b5582864f464aba0299 -0x53db80f7cf4d2f9f5b4cf1e8b13e883376600174e4e608a81be29d4824c41da0 -0x354fd6b43e53fcb319736b58ec35faf6c2baffc2903dd356eba44b078e4e2ea2 -0x58f92deb21de4dfe9b6bc4a0323315ca158178b464bc4f8d2f155868ade9c1b0 -0x66f5269f79cf7293f4b8acb3bd69c6541107a3edadbf65eb24c17bc2f12409ea -0xa6bb25c64cc8be70db945cc6389468ab84664e4d14119a289f1fb72ee438dea1 -0x4a52aeb993b889bb1223bd2362b4bf3de0bb0a3436efbba5d8992b926042d1a2 -0x6671ebbd7202047b6b0e2963221352d4acd49d947726fb5b6176fbbfc1dbf8bb -0x555f869c5fe213628e34ef684cc9404c43c82163491ff93601a18877a2fbf207 -0x95f271d1ea94d91a89e71aa9a828b231d841f35c3b32227552651c710a7e52a3 -0x6fc2dcdecfceb52dd3405a6bfd9e424e88348a7f6d30786fc2a6fb312bca6a11 -0x1ea3e916a07d422c39e5149c1d48ec81ee6dbb9e49540d1009c46cf7990b387e -0x1ad8d266ee8fccb3b2f16e8602e47ee169194a1d1c27219adeaa215e9a8239b8 -0xb62ddbce83efdcdbe1bca4a6e91bcb7ddc51742ecac98daeeda162e0cf24dcc8 -0xa68ab1f9243277749d0d2693127f98e65c95a95887be1c57cd54493de51b6d71 -0xe5e49b2b92341d45c19f7e865c98d1644ef8dc35fe0f491053eed6b726a9ce5c -0x63aa4b39f3ef75379c81b1191b20ec47add1f04c91326fa0e5116dfb531375e7 -0xee96e8e915b8a7b188a3e9e0da76da3837bf81e951a79bf785b60dd6295ef2a5 -0x7d7f4c500d877a63620b01ad0b334efd8aff917d14d097fe7a7f0ae002283741 -0x2e73e2a8b48299bc343621d1bb2f9c99ae099f70694b2c26f8c07b372bbeb2fc -0x733a0d48a39bba52075d7947941ca8e883c91a2ab68b228b7f80b2b661201ae6 -0x904d1c2ca7df19299fa5bb9429b6652f6fc24ef4ce1264a10e2eb28077c3ac6c -0x7898cdb5c7629dcaf3edb0f493e2a1b51db078badeb1dbdb7bad150af88bdcee -0x5cb16eb45c0b64d9a8a076783e9e529d4c8ed90bf57748d780a3acd016597afc -0x1f4cd0050809fea88ab982263eeaad17d80471ff5432f02f9409e0343f4076e5 -0x1c350ece3205f20d06248c626764898ebe736cb0162ed21fee4882ed72e245a8 -0xd5bdd895dfcc134a511fc07504f1095d0a1cda510215b61670535cb2355bf9c5 -0x56a92bf558881f2f8b82e21976eda2f6c9754dab0b3a8ee6e7f615b4b09f1cf8 -0xfc7541dcb539e6e1d882b3aef1463a39c83e9ce2ac697e7c064e027fe437ca0e -0x8fd6117f046420cd0e5aaf666823b5ed7ad47a6f6cf6ff5b835ecfc897125978 -0x72b6360aa0adf8aa68d3de04edc95120972fd6df0f89fb435e38bb0d7ab76f96 -0x7ecdeed03f37b4515c8f65bb66a3514fa7bfbeebfad6b63ef15732a79800b6cf -0x7e40f3ee96202ba8919c66781cda305ef96e62cbcd3f0e4c2981679ea9a34718 -0xf1b4c2e228e1b510adcd33f88c89cadadb6568312d58315ab49278d3bbfb2a80 -0xb711fe1c561bd0446c9777160afbbb2add1443f86f45f07ba5e238ab4ff85083 -0x84d0df19484c5f442d0018ff74c592aa1c0d46df6a0dfd8ddf041cb1994bc5b7 -0x90dcee0763637983746908cd72e6cf66f3b5573e12787470bb44416afa50afb9 -0x5c2e02028db23edac35051db8e036f953c56044fef8c0c93183b9974381d94ea -0x2bc659ace56dc8d519998022605410eead55ce666627457e24953965ed4af49d -0x644a7388808f57b92403c1ee3f9394f9147fb92e44172e3f003bcff95b8635fb -0x573041e869100cad385dda3029c8806d1f43345514aff8566bf3152f37417283 -0xe14cbcec08925b5ad1ec8d9ca37fe544d268894811d41aa69360f7fc75d96b41 -0xb4bdb746daca57e741b4eb5ebb33510a205c3d56481b784ae05318c8edccd6e6 -0x05b8a2e08db458b5dc5e9fa97de1b1c6bfb1601824453942395f1def8078c7cc -0x08e4475994fc46507fa90fcc5439e76c9109376a3f22b82c3a1c46f6480c4147 -0xd565e0645f6e3c779dc4508558fc0ed6cd5c99f97e0117ab1c8fdfc1bc562499 -0x3c73a42a92274d893ae86c93b4252753ac8964bb5e9345aab40c932348c75b47 -0x7a21bf56f3f3b63e53ffec37d787989cc4b14b5ebed9aee95aca799c917f14a2 -0xa46fbeb2d6c2045abcdb5473d03dc501b7b46aa117d9778606879fbd8376f865 -0x663decdd85ec27a80ca66ae25b27f6b12b9a2df9033508267ad5d2911baca850 -0x9ecf15fdb5f479455f6a7a9655d00ac6ec21756a5fc94f2fc924400a02218b4e -0xac81239861b030bc864cbc495d38bcaa2bc24d57440d1bd76875bdae70767621 -0x8873971fdc30606ceaa0b51ee5decb744f9f44a1c42343f88d720a52201c63f4 -0x8a4d38b2ea07416f26120e7d350f5b1e8e9ffccc14b39610c126759f2335419e -0x00b30ff76ba4bd8b759c5666f73f155cb4026a45e567b12befa682f99d0f702e -0x1d54cf939eaba0e38df1322643b38a1a6d7e1577cd14df0160cdaa39b6e90db5 -0x8874ff321026f9dd2c7536326ddab9ec1fe71e59a32e9fd80bc553619709bdf3 -0x21818e78a9a831facdba35a5849bbea19f8291d68800fef9328fa63ab97f7717 -0xa49768ace6f430e89d26e74040e4e396492d8e8b7f56748156bd8e740260de00 -0x9b57e359cdf0df6969816daa8b801d57b873e16315344fe3daa58d63f682c348 -0x2a0bf24ff01bd788144250f7334e4ce006f779a221406ef831f4d580499ca43b -0x63126bd3a381791ec9987473fae674d86a4a3bc0a814ec0f14dbc5dcd0c1e547 -0xa998c18c04396269fe858b14c2db6e0c431ddcf4be0719290535049c5431f02a -0xb6fe1cf6cc2442348de778e3ce2b683139ffd20c8ca7f11d8b1010d4ae93fd29 -0x0effdb0add81e407ac0d51a2487d28cc2627fd8a3c20627d0c23aa535f8bd7d2 -0x304c35c3451c4123f27d96b5e02047b279636f88ab39efc67e680fdca5c68fa5 -0x50a72c888c9a2bb05a0731bc35fac92f581bb1a87c6b0a6384fdebab85fde16c -0x8aa2625c841ef9ca09770d7c7a0cfe7a1be6f00608e58a0af5a6cfe20a258b17 -0x32108a380e8b06ec1052c7c337a317a1e074ba64965890f1fcbd52030e8f4742 -0xd3cc4d866deca01858d3a78f7047714e5ea5f185ff04cb5b32a79fb54d5b515f -0x7ce1f6cf4d18a961083c98cb9daebfc8d36c2ed9c09c3018f0cbb0f582b605bd -0x2561b5fe33addef1971d8514299185055afd7de0dc4a618f31eefa34523b8722 -0xef3c33bdf1cc226a3fe3c8e088044cf133837c812408799427288268b92ad352 -0xd6503a0d149af71abaa3b3005d0b1bf9b30bab57bb4b4d07c40ed3e1688d25b5 -0x78bae5bc11017f457fcee09cb868c04406de24d93fd713d4c34d086a9ed66d9a -0xb2fadde0d0bb4a01951ce7f52d18d63a5dd1319bb2514eeb55012a499803b681 -0x8f9387d752c287031a4c0e583f067fb77ca79536176c569574600ea85cfa198a -0x312e1edbb3116ae96a36152d4fd2a41eef983f0e0ce1ec74fe1a5e886c123fc3 -0x73957b8b5876f12e5829cddb4e4cd8bbc9b27ad1d59328c1dfa0c1afea51221f -0x2ea7e37749485afdda63de2ef7edf292faf099933ece07d2ccf835c441957b99 -0x6f74172c28b39d556030489670a6810a9a96e57e7a6bc1ac84c6ff062f3c88bd -0x33eb9247bd41dcb3cc8ca39f48c3d1f727fe5652852d21152d14c71a760025e2 -0xaacc879b2cb764ef3e3b0f59d3e89f5c05992ecf6f326a39df9da3c63c25fa0e -0x29bc039410732298b3eb6384c9a9763ebddfd2f8b6e4e514ecb434da86ba3a2d -0x4126490bd47724dcc369717ee9f8f75421781b9c51be0dd0b2d1206fd25313b4 -0xf752c0f674315867f62439493993379802c1088f76e64a7cd265963d1f85d3a0 -0x99c3f2b5a5f44dad2fe76f1e5c292d63d5f1dd22fd6f7f8cd511e3bdd66c6b96 -0x977922d788a49698df0a58758cabed121e29c108ae3f763f52918f8762734aca -0xc4f809b79423cf6f335b13fbc0314e35c3030df38d43e2c27fbdbe3280911043 -0x348b84fd2ddfceea0a4a21d06cd74c4a42227c14abe218633f85d1285c442f27 -0xa8ed6dbfc5fc2f7dc2d1f27ff9210062277b0f9f263026f861590c6819d522d5 -0xff5b70af7a470570032f247fcb61f4ec33b5e6f1d2e8bd36b671f2925d646048 -0x073ca3813503285dd8993cbd021efa6790d3f496d3990f103424ac720403f5e7 -0x3ed793f29d5fad97f564113d6be34150af7b65251149c8cea48b434b71991aaa -0x885a36ff5f8cfd154c27fb9a7ad6f23f773344894337efe73ca9793341351d2c -0xcb278596615d5efdcbb3f6d4d5728cbb89c047c65155c4ebfb18229ddc70cb12 -0xfececf6ec8844b6d26e450d4077c491c6cea92b9ecd0049ff6a6d525d23a201f -0xb2571776def3a7aaab84df4028d6354d8f4b064f64d115131e1049c35a8d3188 -0x99071c95c0bcafd64c8d8717c544ff3344afd044c28a35dc8b23629cde56254b -0xbdb0979528aa59724680dd52b2bdb37ccd238d4e622cc284ef51f94752a52852 -0x27c8de6fcd5e5594f16dc16609876c1e80c50b5047edd91e0709f25dbf4c6585 -0xaed44bcf66b2e35d9590afab0f26e407c63b8cb7e7b6d30fa3568d2db59695a8 -0x6d55e8ae48c2fe9e8947ec3ad7d71b48d5a5a1988d2d1c540916fd5ad2642b45 -0x0cba725446397a3fb250a2e3660d8629426c132f31a541bb34f672d30018c399 -0x3225a8004b81883738f111aeff77362007264a70ca7a930ff78835c3d730b567 -0x48af032f37fae47ae284f8a68dace492ac159c33438fad3cb5d6188b377e3211 -0x9de3b3e6c98f21cd606319895defaed24c605d3afe19313506d4c6e9bf1b1547 -0x194798d2be105d7554e390e5ab9f1f202f20b6298fa0f6264171e8389e10689a -0xc6d8de448dd45809fad3ffc685fbd6f46ab61af029035a9f7b0b09866618f258 -0x788d1fd17bd3b83aa7b15a7254d489358a77c5d1b32613d29714f974e8f8285d -0x792fa3d8749a7de8c1e87a9368ac8cf517afef74ce54cf52bc7838dbe77c8a44 -0x46d8401898f968b0c1dcfb22f6785086cc2a73cf18440bf7bc84211a9e642af8 -0x39c466721f72d9e3de762ad9b8af898f4ddcb178abf518840e8717d883e90322 -0x4ac9aa0bee77cb5102a88778a039e9fc5c728ef0247c93aa7ccaa7e451b22935 -0x5918ee2946734b7bbcff1f462de1923c2720b34ed5555ac87c0d2075e8c64855 -0x6352a206770debeca369779a12fb2a1c1dbc0173ac5be05728bedcba3b2c0b47 -0x10982f38b058968857dfa23a0e1e577b1158f89e52cfc2242f99a980c0c069bd -0x4145fbe3812a1cb90c96997e931f6383c0c8bc220419365f9334e10a3a04a547 -0x8b87c6fda1cc1fd0e6d74ce079d85bd9f9a840ee5c2790754e29199134d926da -0x59f7e3d910303d1829d2efb3b2844b9d2b5301f7efe4289e2a4bb7e9ad8913d5 -0x549d420c37312718c0b73b529506c4423436941c868fff24bbb8e893b6c465d1 -0x1bd32ce6a5ee90356f96c2b84413b7525c22450f30e7bcbbee1cd41bc9353ce6 -0xf0fb1bbf61d704d6826de3412cb5d40d890c712aa28570b45f157eb284bec84e -0x5b323b140a5ea66e8cb1f4c1a6d110b9bf20c79602bd674e28804798eb35c27f -0x1697ebf135dadcbb0067e44c30d3846f41c4f196931409e4cf24abfd518b0a5f -0x7083c1ad17d2e0a58daa66f641b03e870418e57d4627187212494e5cc72aab9d -0x1db1a29b2909a24986128a04af9721e817d2eb1801efb3f20da5bc64a3abfe05 -0x44459ceda269c365d0c0a391841458057934c546a6fc1e66d35cac78e57f1895 -0xf6013073068963da45bfda3043e8c1ae7f3680ed640dacf2df8cc4413c8a8d57 -0x221706fe71900eb94aa1efcd473079cb9c71dad9eedc44f8364ca6e1b41c638d -0xbfd945c160a41fa5758ef764acfddc915cd5cd069a9bec80093e9ad6a889533c -0x6f47d34f6079617f8e28227ed99845f11927737e6ae2267a12b6592ec66d244c -0xd4fb1ba84e6e87f4e8892bc549f8db829d1684fb80d88908d4ac9b67083474ea -0x0d297dc13eb5316d218f0aaf297d0ee3888a7b8f6992522527f074003065d4a9 -0x67886d35ce1f054a5d426bb63c557e2bb48d81711ec156acd27fb357c4ca675b -0x3b57a0c63f0cafed6f37b89c94e247364664cd1edfe66e8ad665c1fe54f03740 -0xbfb9bd6e64731506ea577b244b6156f5161344ac1edfd05291af5467379524e3 -0x62b370cf89ea272eb4b4bf78d0d691c3e248fd58fb6c1232c08523d29990cf37 -0xd292c3d6aad1eaa4af49be1b32a0e9caefc79c5fbd6d4c32af40a25a7d31f092 -0x022e6152f67ae78fb7b610fa8e465af5f4dd95dd89ce06f0307775e91b6c5c6d -0x4e637cfe8439550161c68795df2dce35b558a19318ae2ccda47df435957a3c67 -0x6730ee85d87a2f6f9de0a6e1ba4c166255c32a3610fef04d485e48e3068f5aeb -0xb7e16cdee84f8f4b5ab20be16a4e8dc66e0f3c85cae22f197ec70537d75a7ffb -0xa1f298cb17eab2a1df5b6f60dd2263e740ecf7eadcc06f2bed5e0e83dcf4d75e -0x40d83c94939ff60f42b9e911e73fb4d4376a35a8eac5780566589d527c15692c -0x52431cc5ef8c1412bcf7dbbce4eea01de16be3cf0df42fe3d1acb78e91bf2ca6 -0x347e9e31d6c809d337124d4ad0368d42c7438b924b1165b5da3d324b6e98506d -0x1864725b9feeaa0aea6f4d18eb8de3f52ba1b57f6002116d0c63dde4181640c6 -0xa179ed7d6586dd481cdc27446eb16a9ab66ec311fdb2e8f7e1a2425be57fcc79 -0xe722b6af5ef4f0846df0cf6ace78f95ee2b097ec7efdaa7efb1fb3937b0c7f0b -0x09325b5160ccdf47454ad3fe3006a2cdf157da93ead80ede8664e870e40e8fff -0x310543f153c68c680c888b16765c7e5f4fe268b652770518f79ad8bf2a8e482c -0x8a96ead0b15ab71ec02a8ce1f88d5158eaf22fddb083d6a4dd0fd33c7f4b77a7 -0x157af400f67c68bcba4651f385eecd26b4e98be54547e831c18b32c75f7514d6 -0xba5b034baf1d153bfc8a9c460a86ac1143dd3332bbff23abf9f23bec4fec8ebd -0xef1eaf6dcadccbeafe115976cf7dd76723da82c37ee43fd52abe8f78fd4d063b -0x6b3782ec5ae8bb6894aa0cf1d1b61ac22ccd14c325c54513fcea1ad12c85dc2f -0xc8509e1df796ac593870330ba8df08e9ec2d5ec3412aa2d9192a970fdff26c7e -0x8198ac888ff67a12f1546aad3892265b110ed4adbc0b8d09b6678668c6145e55 -0x2dacce50f47c80b4cbe5da7a9acdbfdb5dba01730b12794cc8271a5bcbca05c3 -0x5640c37e819d91644240d6f71ffa992acc6e8c02f95a830880c592fed6efb8f2 -0x4e86366a8310357ebace1eaf773c85d12dd51999adcb80741570757683f008d0 -0x0e8831ca297afcb31acb6d9322b06c81be59b2d5bc01851743c1edc7a056b4d5 -0xbb5448d1e7c7d43ce48c4717503ccb6ce99d2784bf0b84380df6fb719c8a7173 -0x6d4cf6b9d76182c2a9994d0b09904126494c376c4769cd87ead11f9f284969ee -0x220add536a785e31a665049ecdb6e422d147d72270c264d5b3bf5c32bada5d25 -0x4399f52a50c450a60b83068a3ecd6fa9815fd5645a2d390952b78c92bbd1a03b -0x196d96b640bdb7b2b4a3374eae73b0bc5ac0680f4b9f1e18684cde19502a1e26 -0xb8668185923df1e579292eb2360a3bd7f89e44880d0db4d122fc095fa16c12e2 -0x775ec34a9fc8de362ad81c1b315f93c598db8c80d409364672690402f1f00ee4 -0xaf990da5cdaabd4e9da7aabea1be69818cf27b436932c0291e5f47b96e693862 -0x953d6deafc977ed21d8179bf738276be71334ab8888f91b859ef070b0aeb7636 -0x5762cb15fc521c0b15d5b704d12d3dab17f6da599eeb7c4aa0cbeb70f5b95e52 -0x039bfca695c33c53deacb6571f73aac6cf0498a3dbdd40de4bf4f9f9ad9f729d -0xdd3ccd58786a4d8aae7cb8bc9e2a96f267f5b747635f2d87782b25adc85dc26e -0x535b8f8b16e909f0a7a1c00e6a518932c2f9f5435564d7258dc11f409c759566 -0x70722e04f6297f9ba9c1fab9ec55a71f256b983af60398c59749fcb113f76b33 -0x275c1ebc1a1620ba60bee97d76a73bc94e685b056dc108743ee61c2c05bb82ae -0x47a9b7b923d7000537a9216d37cdd9fdf46f77a57e7eb9ddba543f5df6702e15 -0xd2c65ae2657873a5f74929cab0adc96d92ce17ba3d7ad663f62983554842eae9 -0x192b96b8a765a2f3d8ab9d000570f57074565274d9585d9d9e71464c36838a45 -0xce3ca5638aa4123f20792581a844db203f8a24045a285c9c8aab021c7836d207 -0x1e5e3237b69ee05b7ca8270fcb7a840891bed9ea3c137683cfdd57259860a7ed -0xe9386a4317889a977429f5aba135ee66ab43ca4f6693855202bacd17899eb6eb -0x0d47eb3b79288fe2f88e8dd27c11d9574b446439e83d72319545022a544f50c9 -0xeecf81d0056eb5f1cffff2aeccc5d80bf8608a8c1ae42b9b57cb4dc7df508206 -0x4f317110bc694ae325983faa190b2ba2489d58e07bf0a0ac5deff990d20d5c72 -0xe854673c103bf46adb8e497227f05cfc4920d0a267ff0e3863b2230dd551540e -0x97498802b37e61735a217ec8ff1dba5cc6ed58735e18b71d63b22e8cc528f500 -0x8f1a8cea01a506e298564395fad49fc7699bea6f603bc603276e8e53d7d984b0 -0x26b6d75d3ec9847745151967a5eee039d581a6269939aa9e356ca19c7d247ceb -0x1bcc038ae30079fd0cc952f97cd2f13962c053733d3db5c4d008ca75c552893e -0x5ab81d5293eb6166757fae238793b7bc8ff6e27f5b2f940d35495df3591ae849 -0x57d5b57febb04167cd7b28408c981496c1ef6054c6e83daa94bbdd44a1f4db3f -0xa8322e1ed406e0e228f536bf7623d9dbfd4173e503ed4acc738c8d210f209270 -0xb860f181dd8d9dd0579b0b004d10512c85e28f305e113edeff5c739bc8f268ef -0xb4dcd102d9aa70d6b2241ec6c881433c4b9a773de6196d3a0ee9e3eadf2a9f17 -0x96e50d733d24a168391d4356b9c6683e9af3a345461697f94980c25a2c0e6f31 -0x59130cc96ee6029f770722a6afd2b2befe4d5c2970a1962bbe394ed7166c9839 -0xf1e2fd27c11e91d5c016cbceb2814c20af5647f849f299f8eb8b98d19fa12a85 -0xbdad695d592b76e209e9c7e5e3eb8c9b6301a5b605cf311c524365c9977adeff -0x665295b5718c3c43bacf8aacb443898b7eaeb2b7356c411311beb17271b57cd0 -0x913934da1549bcb841476d087599b6dcc5d4ddd5113c7cbbf287f2d2aef0f132 -0x2aa32ea068ebbdcc50ce9d0f2aa1b19c13ca56724310f4285fd06189a6752867 -0x17e78903d4ae77e22620d2dd0f7dcefae02afaf689059920040b2e91139fdde5 -0x646ba5fff3a074468872cd232226d02c2d968c8f1b23172eeb642a9e6052f69a -0x33e1032a3bc78c6e86076afd2cba56286329476a394005cfbfeb7b0d2d15cc29 -0x5868f741c8e1638788bc3acb24bfcaa642785632b9661488c5c508ae6001ae04 -0xc20559846242a18ee3d15e7005173e9ac6631aaa327467c30cb25eb79da3e245 -0x205bc6e60d28c38d90c0a56b78c5ee183c422a59327459e090709bc81e5a4070 -0x109caa2c4c45932ab511c7be303b1c90c8332602d875ee9842fb9287bec39b87 -0xf3403af097d3d3259e329afe852a78c99326416f28295eecc9d74660bc7a977b -0xa20e54d576e55f7971c55ed3ea69571b2e84f53bb1ae02a6cb93d64db2e392b4 -0xaba4e376e15ca563612560f9ea95445090228dbdd525e76cbc6ae870c113d4bf -0xe61b39dae06caeb40e2f3a6f9204f77807812993522b4bab720f9931ac4ea692 -0x2eaf23b427c31edfbb228531602cc5a57937a9e8db08fed44c46bc269a60e3b1 -0x8180bfffa2c60ee4067f26685425e45c3fa0d14803bf47f1bf60b348dfd43bdf -0x993fbbbffea521a228ae2c03f279a80f909cf20b6ac8304f76d82383a8c9776b -0xedaf09741c4aa940f07dd6d74ed9f5828c09fcda6ed1db2eea3485ea23a48202 -0x369a28e77580424caed4bdcf33aeeb61881f62796d57c659d7cae9520a0a9495 -0x6f1beca6a672a34a31f764d3ca3f1463deb4f2990ca755d491fa9216b20add19 -0x3054fe09fc8c74386fcc6069b0ff79834a86611a965d52e63aa23f91872fc6e5 -0xd097e3ec2b654dbf667b603cabcfdc7cf6b9091a3d4919a726d17bfc782c83d9 -0x1ecba1a0fce572ef494a197be41218ceb0cdf0fb82b81f0bcf62590f1a6063e1 -0x115019c07d048d1396dc35cc98fd62f9b7180ea93fd3147c75d5d97b7e113ce9 -0xa2c1ecf447c41ce82a5e397738089faf8622a8548e4c74459ba1d969d99374b2 -0xc2b4302a9a0364789a11499d9ba69d0936a32893ad9ff317e83824e961a2f497 -0xe3a029d10f670ddfe488125a1dc6bbc5ee0589610199305ec040f2d7c00fa9bf -0xe0d6daec8218334424c461e5665acf3f867fd7f90cbb3cc9eeb30c19d4bcb032 -0xa381e80b07022f90ac9c9448875d7246dd34b1d1856a1060c086c180c2501a3e -0x7a3516b606cf66fa52373acab8fa390de3698e2b8d8e6e35aa8d2b9a899389d7 -0x0b7d2e678267a056a3eb06102df7436dbfc90ac28f6420c1c288799bc87d699d -0xd307d94a147c6265ac6b4aa4882fe4d6a6e754d188abaf747bad6c6d74dcd48a -0xa22b9d972322c8ec89fe9c2a9c8d5c32341de84ea563da66be318b96930e6df1 -0x4e41e6537fd0290029f797c53e56766f257846a4008706dcbb110e30b5d34411 -0xf0421c9abb3f51e07d5728636496cb4f1106252c0094973b80df556eec210972 -0x8821978bfb6ad74b8dc6b041975a61009080de09db60f18682a8b7843be7fe66 -0x46a10e41db02e1f64435106ad64e49de25dff67f9d1ec1a0908beb111fb10c87 -0xd6ed85705e131313f3d580a83f029b41f1cc3b9006b1d961188377b162e8b413 -0x222b6fefd19cb12f96358af5c9467ec1dffa257d19ea0f5ee05378e5ce3c5100 -0xabe7605a5f7c458da782de2b3a4f9e660b26656e63b6add077b37e03ee1cec22 -0xe708bac373f611998c55d28e92584ad2e1e6192e07355ff3ca3cdf3ab4b0e8d8 -0xfd5f746ee13fdc8e63b3934ff51fd8f645a195757a6b4fde2794791a7fb88fbe -0x9c9cf7a66f5a9b72c12d513906a03f91c072b4f030aab64c85506e15881c4f83 -0x4221f0a9febed901e5a3f7920baefbadcb5211452b904d3aee13046f7bb33601 -0x7646a9ea42f4bf2f8823a1907c884f92416ad06b20a8167fcca81e8d9ce0c507 -0x7ed55fcd09b398853279e99854fcde0b50279b1f1e3fe14e550cb232c42e444c -0x57a3429096d4c1e9dc6b2ea9028e20f67303541e00058dfded38173f6950ba1e -0xf2e17deac7d810c3e76daa18d06f7661cd7acbc5c7c3975ff35a6d730b65cdb7 -0x8934555d40520f09e569e3809978c60f325f86f5a5564d30c455c032974df274 -0xd86dda4ac091499d770603916b66efb21819547fc84e76b6b366a6f0d7b7d315 -0xfb4f5f796c900c1b4764adb2add7d58020c5d1be1af1cb626aee81a9d1c698f6 -0x096e3a2a1e50634aa4f2fceadcfc9fc5cb9f143f979889f4a4216179a3976e7e -0x45ceb5fea9a932155053908e039b92091561ad53a2ac88ff7539a81f546b95d2 -0x53e0c59e24f6c2cf6f5162fc7a62865197695d1dd13d39670848d6ecff3bd84b -0xa0c46e1adfddaa8038227ed4244d204588c4cd94b8fb87bc0a247008aba6ef92 -0x41e4d27ecdefa7d12425794aaaa691fb7275b98ae82b0e565127d34881dfb030 -0x856c6c8d1cc01f349bf0a804caac069a7b265a95c82916774e0d32bd0343be3a -0xd99ea1c58ee78648eb7e8acbe6638919551d9e61f2502a9a06fc29873e65ccdd -0x979c740a6563b64ddbcfda40561af8305208d70b4d81e903a3f01ca63a757c77 -0x8535b3c64870fe3e01dc9220b957796f7509c2bb80ff834b4e41013f1bcf9ba8 -0x3c0594bbc9a732c82f56d4a937bf3a8fd0eaa94534490ff219c55dfe8f510924 -0xe94b56a09e32818ba0517143f1b578a1fde4b43619073abc719da7f12818540b -0x513833a67fc34733737823cf45859aa8b01d675c551468c748ca7299eb19c7df -0xd9883fb3d34894f4f67249159d09a1b3b5656d94f422ee8aaae0e1a790c825ee -0xe871c35325471955ee8a19c880b03e8266264fa281f5086e3f2d7d6766ee87ed -0x44a52e8faf255ac33d3dfa0dfeb1909bc668bb881062ea2a3344aa5e79f74cf8 -0xe3e2d3f277c89918ec55a5c9868a67a844851f8c030c08b54e3f6d505204c035 -0xebe6ed4a311d04ab77862dd0149ad6c9d437b7b86cc4a17b8a161b514b3355d4 -0x3fb4f3257954d7c0b8b9bc97386763bd4dac2cb36eed64b400ed905b89e18838 -0x958e46e6d6b9bef5737871e5aff459f5d10345034fb63236252e8b9c998d19df -0x21de8118c65759b3cc6df92daca222760aa362e15a46999ba8da9b9a38158bb3 -0x1df7e840f23d3ab55bedc7d9735aba7351d689611da4cba8bfe0f87440125dc3 -0xccd458464a1262f046950402c994747a0fdb3fe4b2c0b7965309737ffe36701e -0xbcaa4a0a1bc948c102e620588c01e86784fe78334a5d082e7d4e388ffe97e2c6 -0x4ee965c0f379f4e357d34a7842a789a2ab1e4730692dc67b403ec96bc2460998 -0xde7971b707aec59995967978b3a1a212defa2dcd03b915209a4bb748e0cc7fdf -0xc145c830f4a4f31a0f10990f1a2d7429410085ef5c6fa98b1e056c0aa23166f5 -0x76b05a3ef2559fa98f26ebb017ba9bc0991815a7054c8bffea4f2a1240004174 -0x0889d589acce75752795e6da8dc8494d47da185e1129b5ec06eb3eaf64caa909 -0x9163384c454d7ad96544eed905009299026c92825aedaccd8a5c64df5e84322d -0x2afc2e500d251bb3920976915ef23d6bcd2ccb0331ecbbc277c525074838bc86 -0x8be02564d3eba739cbbc0484679a83443ee477bce2ccb846261d372e1826d7da -0x128f5e8d708a6064f99272944a4a2f14e292858a8104ea553dbbe2f920b7edc8 -0x715a689a5d12cb4a25bda2cf0223081101071e404f4209f250da462e5b05971f -0x08deedb457a54493e8e54292df0af5b078687c923e7b87cccbe9535634d83a00 -0xf798b4f6099ff2325cd0e41d6c56db68ec568474d45231ac65fe75062eaa420a -0x037d070856be64fc9e3da656601d3dd68f51e1174dfdae744dcb75575dcb8d08 -0x2cc67365eeb99f9ceb36b75290e3795a50b0cbf745c4523dc0b089677f12a48d -0xb1e8e545b86b910ac31a2b2d555fd60d17b0a0f0311d9ea6ac5c5785ff6803b0 -0x886bc3e78ff6c604d8d3ad267ccb51dad0be60bfac68f493c885d44ecbbfe9ee -0x4397a14b07cc97d0ff3b78e335d6606d2ce816cd2aad98ffe2866e5db9df573f -0xe5f1a4444fa706e1fe7b4bbc01c25a06c2b7310f8de3cff5f80d81f9fad79116 -0xd202eb022402d3ffa6d627fcb765b7ebde6e3adf4d986df996b0e034d00c34c0 -0x1ea047776667bb80d20bb8cd253ff714c192e1e058909035e9d5c3cb7dd7a424 -0xf9a40ab07abe292d005df1a507a4b19ea4ac97382f0df051b1b2d4ae880c2d2c -0x28daf533dda733d2b34b91bddf27d83e7da542b1ff1329ba1f4bb58a24f57a48 -0x1296376e338c76e01a2f80fe7507922b5a6f6d5fef0886537309b3d623b21ccb -0x3a05d0189cfd4beeb178ec939d722ce149eec3ed8fca3446286f05c221743caf -0x95726aeeeaf4f79a9f5f8f1a4105c9a9101a2f70db7c333e6c4e39b8babcf30b -0xe2884f18d7a817b01ec95d1647d6a3cdbf88aad7cf74a9e0f99bdd5af787ba50 -0xe45d73b7c7d6ae31d5eb64379e73f3b2e216fa825121e2086c7c19f73fa08808 -0xd106f3eaab143e6543d93ce1105c1a4ed12541e8ed92a50d527a39125f0e6426 -0xb55a190e091da3b22bcc7d9b0058afdd7c2b71b9750e5f05b37aca450f86fb49 -0x16b760c2560e7ae876ee94697e26d53b701b9f615f684ab67d4ef42ee2dc20b3 -0xa8379d0b8f1b38a1368193889bd61655886dbc5c82d791ae51b313a14ca50133 -0x854a5e2e1fa8a04b4681298e1299597ac158006ffa66e6b997f8167642d3149f -0x71ec97e40c41829fd83e336aa591a18b431259a9fe78ec49e7431fc2323170a6 -0xd6a14dbda8c9645144beb37b3032da68d495183519b0c3498c547dde0521a0ce -0x4221b785ae1792e4f947b7c316cd5c95b9c7b285c07b7c1697f4bb5909236632 -0xd8a54487b1f5ae97b11875ce97fc0b8828fbb0a47cdbf9e0496dac4442ba74c4 -0xcabd9d152638c74e3c9d3ee75e210635acf51595a2229107893aaada9bb5ab33 -0xa150eab10f823c72046279f0fba170e2b6b7e0359cc1fe855581559732e245b0 -0x612cf0f9c6e42901c56dbcbded885b73bcf7ce2711bcd4a34012d08cd130de5c -0x4aba03054f99a06a85f299e98898aa2d9aa2c3b21949a1e0b34f594792c6cfca -0x81195c0944029246b97dd610c22a0f7bf46cc513989184d436d9028c655ece6b -0x9aa89068a0379ca72777d0a78457249cfbb1fe36aa35029b3ccf3963c0227bee -0x5d8675f2519bb0ee3dbe5a9700cc7411fc6b47004f924524bb55f05ff189bec0 -0x505d7ae13b7a526de6673f3b8ac1eb4216e1932407be6b24af6974dad0c15117 -0x0841d4edbd9a3452568d7fc0a40c8b979bf4c1f3bfb02587f396ed66afbc043b -0xb8084a4ea2db3ed1ce491b940a499d5c3b075dfdd6f8566291a0003a1a99c9fc -0x19320db02af75d414ae38cac79fd82ed4e16052e40d3eef9fa9d69e878bff3f2 -0x74694e677139706d0238530e9bea038d3ae7199767a296895ef31a6269d634ee -0x8248ba0de52b04f5366576d11a0f675de423d41749763c25ee1d4191be82bca6 -0x6ca6a7f01ca4e82deca2aa6f19f4ec1e6ccd5068240aa42adb24a8d21ac5223f -0xb268f2868615d9f38ac4bab218f79e7824abfa461e0fb58e064ac1d39495c7cd -0x7b396e0a428920346dc15fbe0a33e071d322d4e5462ad7e5c75348fbcec30f30 -0x7982e00acb5257ecec7427b3ff4f8d3a17ca0cfca308c52002115fabe1c4490e -0x4ed8839251de7fbe34d1b18e8944aa85f6a2a91a2ea68ad7f3bf72a8198cd39a -0x76947765f5aa86d5adb57e5216a5f7c658bd73fe7df0c55141ebb89958797332 -0x7e4e64e2d11f8daef2927cccf6a3e6b063065f24df58c0ae87c102ffc766f597 -0xaf6dbbdfb1bf048fadef65ea089c8f6e2c0b771ba08493b663a19c1d3aab7898 -0xbb3989c9c14f389aa895633c560cb56d7623d2c3269be75ccd28b1e929a8c4dc -0xb05f6a5d7fdc4e1e881d75d674882af592f77404a56e6911cecd4779c3ed499a -0xbce06a54876972877b392e3a5bc995570ccbe68a4aa1864c409920f37902d0d8 -0xc9590c5258898257ef521d18080a900d9b2a77a99d2e750a6eb54c2d4ab20bf5 -0xd5d75bba70b416f8f9a00d48622806c2e03d536165e162cd19f1c1ed06bb0b39 -0xf46f7c8d409f881cfddf5ca9dd783ba8ea56bf4a9e71451fe0a24d5d910cc506 -0xcd7278af2a504f1a0a465f295aad6726bc870b332cde272c1e86616cd7bfb4cf -0xf7cb8d0724efeb21b5e2ef18e21522bea5c74d33cb2534713299aa7e51a83c66 -0xc47a5e1197166a96b64e2135514a2e123c6c60fd987cdbf97d8949c540fe5747 -0x3e8ebe68b366b310a8001ab82bc7e97f42e47192601218e11a16fd6e7e1846d5 -0xda52219ed8c24426b3a0280703b9ad39ef187c6fe9d506b4a4f1f5f0e191838b -0x05bf5e86394d35e4b7dfb6e943bcccae2576789b8f59405ab3324cda7b44796e -0xb41c6268130d524f971dd3bcc310abd8b833d46b243d965abcbf90e966458291 -0x062abf9c5ecc974d9dd98ede4cdb6731eccdc8bb5dfa32c49b49a943b4e63f23 -0xcc356add3b8e807d2b67a895b8464cff5cc6845ca96e49e3aa5f24ec93ed322f -0x3ab8dd793369e9500df1a852d9333dd90ae9acbec145df659df9981a5823d19c -0x05c4b49a6d0057d64b901ff84df12956ba52519ce9fc4b05b8adac7f6fae2038 -0xc55ab79715515e0ac6865fc8e0ae4004b2e0cee978457508b661c2e465472c0b -0x5e18e08bd707d99d7f8910d19ed08fb1d4176c8079775ca7f574a154dcb61909 -0xfd3e14c5d4b517bcc5547341bb360166d249559d33f58f04bd69ee1748b07e65 -0x9703212a522ebb2ffea2d57ddca422ee97ac417abb7fd7188183e9a5cd5b5953 -0xfa2867c055c765eb7318a07d3b7a2ad90134e05d46b124aa2774f2d7d768004d -0x2e16a84c203fc66cb7e263d826c0e0b0437818fed1aeb910533fec0ae0cd7f64 -0x45c2c96cdd9a582582870dae93d70af4db63d06b47c482074fd336bb90c065a7 -0x995468f36e109318813e19d1ec450766228ea70a0cca4d4b3b40515d1f20b3b3 -0xad0e8cd222807053c1a8985ff4ba6d5cfbec0043531d38cfd765c707bc7f1513 -0x2108261024530739730ebc93b31d0a2dc56b5735b91fb53f48c20ec6e2a2dc3b -0x42de52d50531d5bfa64e7817d5baf1953beb38f59117dff0facccbc6510d03aa -0x9f66983e1773147a6b47dc8f0c609a53d56decd1642bf985c43e7c9d58fcdead -0x843257c9a6e49bd137c380a4a12de63a049bd984504ded4be2b3936d9772d7cd -0xd0551406f32e8f38537eac64a51737be9b7a138955c8dea754a929c9af1640fe -0xdfdcdd2eb3b99c279486872ef54ee49423261745889cde93076b67afbf286a9c -0xb79a541ac09dccb73b8634cbac31701af98552078028ba00454f67ae8121668f -0x01ce6e8f1a13a612445921f4b3d690086eeffcefcf40f1d27c566f2e34d46856 -0x682d7abb7069a0e8db3c8a97426e094ce308771b62f7404b1575889e79098239 -0xf64ff8b0bb78b690f7e01f00c9787804ef32fb6e89b38b7a9daae6fedf3054a7 -0x2022b79c90c6e71ca0b5e930d2642e90c840d639773bda1ff67c683a8957d560 -0x7f2e8d538b1ad35d9dca9d36ecdef69cfb05eb8bba76ceab58bbe41d755379be -0xe5af43b90d2969a230d5b361a2113795fb19cbf9a38ac7234211b3e8d15d5cf9 -0x41104d70665acb6add9a4b9fb2871af47e2947b3022a408f5d515f9580935c95 -0x02ecc890ea5531673ca62b9f683f1ecc1e3e53abaae21f03dbee89b2107dceaf -0x310e7a7b784dc1681a67003986d93acbbf31eec31de022ba87d2365508736da6 -0x2fd827b61228b7d7ac34ffd04785f85782b83e8d1ecdae72ea7c229da961c218 -0xa43b072c40072923f158f8e896d2214a66761b51ec2559bfee20959f4cecd2b2 -0x370d7c34c5db2deb46bbfab534ecc1b8e07d908e6c2f4bb2982f0d1e68823506 -0xc3afaae9ba49ca97637223d662f8a7267d37c922dca21e083e62cae2c99504dc -0xbfe91fc5056bf9b8d09ac7a0e38ba57df862ccdd135f04191a75110c7952b19e -0x593f7f4e9a3b070520eb846fdffb266b886752fb1393a2e08e1d26fb393e8f82 -0xf44c1c13943311ab0192f6cc0b5b22533680322d3428e012717926b8d6155c74 -0x4bf8972cba6479ca180d79215d71203ffb69138ed9798e75e20076579a1f9712 -0x4c83aaef73fad782b7dadbab594eb0e35aa69b38e44336dfaa2aa08bcc168d94 -0xeb8bf1a6534fe0142d7eb12de05436728feff0ab8ccef10f728cb289a6dad9a8 -0xc22483acc9d4232b17abfc67dae2723dc21187e1089ffc1f9b5cb821b6802c17 -0xba5baf11707851ef3206fe8ba3e74830de46cdc4f4c2289414dea35f7fc9cd9e -0x139c89c455f274e1858a3e78bb67400969f23caabd2d7a5ac88a5a47ee34d043 -0x439c51b7a2b87895a929e9a8d81ab1aa5c8da6f8d4a64694b3b2f8099505a366 -0x612cc3880ae1848d68db0ba633dd4b47b1729edebd7625636ecbf0f99d6d4f9d -0x53009832af0b9ce5c6188cb55a259dca0125251b57a2c164555b4f81f552f408 -0xf3243642208fd1856588741ab4783c6a96d8a17349ec1783f0cdff53812b667e -0xf54a466cde97edf548a92f85dcae48eb704afaf224a97dbbca6b1457131394d8 -0xec9e3e1dd42f1abb4f78b5480462c7bbcc7a7d2586858d6e3429401614c1ee43 -0x0a3dc8edcd69bb678a892b0c69650516a106517e92ed78704e84743a9087e4b2 -0x40d2bbe3a1190a32889d9839f95af80b6ef12f0c35f26eb719c0d325f3d70355 -0x958e5298216d2a944063a0bb44cf184ec07248ff676bd76cbf9c98a7abbb1b4a -0x3b459e60e1b1b15799ac27a7ea283715763a7f62a82d7b5ff0aba72412e4f843 -0xa5f0021b1bbabe4197cdefb21a8b8a7649731c3d17ad200e4dbac3723ea3a57c -0x20d989e295fe638cd1ee1b476c12181689e7d851797611cc69ec4707eb0819a5 -0xb0c82073dc97323af5169b9ab029a2eb3deea45b622b196a8d052754c459440f -0xca4e447f9311034b7a9a7fabf7bec4086125f1ef6db85d8b5b1721940e863d7a -0x24ccdea4581241d1c6efa25a2d47f37b64751a1cb5e74de54e4c2ff6d2ae5305 -0xdfcb5454b27b2dd24ec928e958b11922e389c66db36b225589359d18e456e922 -0x563156ac834818328794ed965ee2a7d36af210b232e55a44173c692fad4fe1ca -0xa96f0d958da97ba62fbb951292784569b2f2b2d63381ed8e7cd5e990b1b0b7d0 -0xb89bc1f1bdf1d2c4b85e76636c2ae950d2ac1908242c4fe61783e5302ecb4201 -0x33a8ebfee9038bff84707be7527ae6d9c523a735f02ceee4bed03961e3809a95 -0x932ab1cc56777f93cd8bffcd4870a8b5dea76943d34b877111e0232325f6dfe9 -0x2911f43363b582749637c158f479f076ba9cd84b3738fc1e027f0b8b195f910c -0x61bd8ed52ae291138fac8fdc2b5c52cabb51f8a5b4c84e5c24f7e6008162bdad -0x54e12411e47f17bc9250f4b4ee8a9e94759dce2e289d94b64326ae792bf34f18 -0x8ee2eb956e38c95210751f861cba97ccbc42aad2ce9db38434c94cf340d5faa4 -0xbf807e6fd0b6e1f1cf999bda6205d4d83547997cead19a2942947650cbe40e49 -0x89d7461c461256f63f30c6f64e2ce5e06b6b6852483413287809ab72a38ccaab -0xb64272df94dbd9e402d3485853934f667862ab657a4f2914c2b5c27133564e04 -0xb19cbf887d96ddd8a6466460d576763e3d0406de13fe77f50b6e3efd080b7db1 -0x982dbcd16ce67fa815e75964b53b0773ef132ecb0e19cb5b3535fa05ce2b2c4c -0xf0346dc18457f2b645804782982894da1c551957460e59a37a89b4e0a2c4b383 -0xb6a53fcd1f1db6aae69b6cce89038832d56a4828ca0778d2de3bd63193cf25c9 -0xd1bcde13a2cce0734b5e2f5f17534f8fb354111e1a40979d352a3fc11dfc50ca -0x78b2b246824279cfdae3900075eb684f2d3a89ad5404175123061a760dac61a8 -0xf8c4f1226414135eecfe447c577e105cda40c33616a86c5c95937fa0fb07f3f3 -0xa422134c49a83d0d4fd1980946b9cfd43b4ba8dd917d84b45c223047025b6892 -0xf53ea6e49ab474c928202d41ee924fc03892ac8654421397549d597560998ee2 -0xb26383b7ad75994a0de256c3cd92b59bb49789ddd7157f216ad853284b235420 -0x44cd558ef082ab3f687d0aee2a86d6f0e74929379b706aa0a3c868cb00f8f58c -0x24d00d207ec72798c08ffc83c9c00ccb4f39c4b7bdba4150f4f1191027e217de -0xf7cc02849c4f415be39aec1ca86fb0cf43a588778990157f5181cd6c2c5a2f34 -0x4c8d82f4302cce4e1f5f1ac04891e1878ec5927878d8751233421171eb0209b5 -0x367c32b1a578e65910296ec561a2d2e3c67cbcd92d7002f98674263462dd8aaf -0x7492535fb0dbe30ad9a85bb20466bf0d8f23a4ac130b905defa5b7c52ffeafbb -0x59ae743cdcd8345a31c48316ae437f6d0aa3a6fabc8a49fbbb55ecc4f93b729f -0xbb4334ab7ea5ca89184e8a37c5ce9b961255fc58ed900462ffd465e42a0b3f30 -0x88fcab56b2c63e2e31e5c7935574681d223f1b2a72782dac4e5fd43d2a6198b6 -0x3c07b0a2bed046575108df2aa37e227001f04089765c964ad2c883878b7b88dd -0x4635f521857750936e5d418a1afec4c6101a0270cc411cbf7415288602d45ab2 -0xcf4e02e3de67795e4e5b2ad134650ea253dee5e77d681a301d6ae2f261083426 -0x5ae108fb19ee7a04c36681d5a07ec85d9fe03bddd431bff42114327185b3b519 -0xd8a694dacd86a59cc6941035c78d192282defb9a6259c8d30cb6ea5e3f769be9 -0x144fd4b211565520f71082f19f41263d65567116cc0f95e030b5d010d13b148b -0x65b6b851ca90b64cfbb4cb42fd2d28fd5c5ae7bc5bea2c8e6da1dedb749aff82 -0xba7516cbf05dcafa1b01d898c39a2fd16a43011e496672a571460afb3ca2bb84 -0x5067d0f08746915d3d9c0b550cbf013bda3ea5cd5b2d55d23a93ee88924b604c -0x4dc239f1cfd859c9c4e3cd83739c7d340e958ca3bec0bc8a4eebccab3181ab16 -0xe60460403057d27571f05d494228afd90ed51a085c9623e3bf82d87ee5f930ba -0xb10c8cd92c91bcefb4f8b4b7f37baba45ecc59fe667064b8aa562685e64f56ed -0x987a78567b154301a6e4779206965a9f104efde6b2ede48618dc6d52f5c0d51d -0x2b23306a742f885e5544ae996e5776a4e91d251f10a5d36db85646a357b7250d -0x7f11e391a9c5164e468b94afe64443e699e566e5a0a87cacf34b15f716ce0109 -0xeb454dad17d9c9a49f82d3d25b720800e44edc51ef89d389e6e93e9e7a882bda -0x86e4f8935d4ca3c72450adc1842a8a4396449f9e085e5aab4e8ebc668258a24a -0x815290d2cf87dd3cc24b5fd8ef0b009cee5c6ec08aabcc299dbf6babe55cebbf -0xa8309678e94cd8a99e653fc6c8c502fe672142baa536db78b258208c8f7ad04b -0x92d02f8dc800428134d282745eda8fab2a7d21a1e3c97e285af661074b8c3024 -0x3cfc8e20f5513a67ea48136a0e0c7ab9de34c5c68bfb001f77e3b8187c76b235 -0xad447e50708869e7f79a16b8c60f65ad33299ce81f0e4b19ebb010e9fec28af8 -0xacfd2992ca1401c20e11312d02606032582aa250df22bfe2ab869fb4fe8016c8 -0x1ec6c8ef5ef10be2fbca97704f972f804e8e76f83c230a1dc7a5f90cb9f8e4e2 -0xe60ebfe2d5003e67653cdba825a17998c889832f99b3a2009080718f07f82e2e -0xe55b32ca97af135d049116240e34616dc4e59e9701a3e22d0daf878237c74bb0 -0x9c69e4f873c97391a76105897fd8b9f50184be722eeabf473be92072c7465f15 -0xe4fd11cf951f0537168cfdb0ce2a39f64fcfcbf9b36e8b7a50a3347f3723d82c -0xfb507566d551eb0658769c57f6f60e702fd18ffe2e2630b430a1a5e0c3d6e1df -0x8a5d19b56f7d0ba0b45f53796f2850e4615fba3c8152c041ce1e674669062b74 -0xc1689aa41574c8691153763003d60d469f6f517d2a72e3824c671eb1815f3883 -0x5c4ef0b1fc7fd7ec0197ea930760530dd0274a152c230bc9df7981d08f706706 -0xa67890611e62da56fe3e1e44a247dccc3d722613afd84c7e22022f09f27a57f4 -0x9a281693ecf26e7438e0e9d9f5dee41efaf5355c320b066f9b5aaf5750e649a6 -0xdf7a4a22ba72629fcbc3c049c9e48f71419a22275bfb67c8f3083bc1c8335dae -0x7cd9fe9a87569befda82d6982b2d99c7952fb10d79642d05d10bd07e9de746e9 -0x29f643eaf0752dbc2f8bb891267e8a50ea377253e8117a1c2a03b5c0bd9122af -0x2f1828c4b7e016669674f67c3dc80b8dc969073391aa6d7da7f09198b66871f0 -0x11185d1c5dc630d4fea4a4c06d339e3a6a2258f0dd819bacc7fa1ac2bf2e6d19 -0x71d6d0a746e615cff7748935b1c008aa75703d026949d50bad1a54b32d07d9c8 -0xe7fed126b7b27ca9aa6cba87d45c473ac7bd8877edb9edbfe813607088e3b9b7 -0x19b3730fbe85eb0dc32b3158fd6369bb51761c423ee4432199849572d58ea665 -0x6348e5689f923be0f2f5725feb72d5019e2bac886509a7efc3fd8e3fc347d39e -0xa83d1d0061b92a82044c6d2c91eadfdf7191345cf475045e2c7a06b516c21ab0 -0xb0be04d5e1029ff121136da8c6b546cefe925f6d5442abc889ea2feacd4b361d -0x000615f9ee4584032a267a6858e64b2469a8ed5f65b07ef091e5c17b44452a1e -0x044ecf4db8b8a7b10368a310823cd862a18f82c2b9e615224b2a1bae75121202 -0xde48cc5b1bc05cbd7ca102f1306c01a9f4e45d8c2d071b07985e0daa5c18298b -0x413ad4bfd80a052e214cbb1772ff741a20dbdaa130b4689d76eb666fb0abfbc9 -0x81ecc6942623656de1fe5fdc3c591cf0db893642d3b600126f0c24bed811ad3e -0xc8c1dd8ed3b4c17b01bd3e4c7a27f0d1c5c0d92dbbe45854c18ae14f2608e635 -0xbff801c66b766a3183213156465a2ef81bf204dac9fd62413a9e919c0f5db60e -0x8810aa9424e597a5409f5ad0f4219f213e7a965f4188d2681440e51935b14b1e -0x20722295b6c7dd75b445beb6cdfbfa9b6077a975ba2c99565a0e87cfaa09e092 -0x2b0a6fa6c95e6a92d0a331f5e2aca606c952f968f23f60d3784d3a0dcd022470 -0x81268a975cd0767ba4812e475a74e3fa471f9078bdbef724a644c97393c22e7a -0x59b8992ac70afdc26b6b77e04afdd2c64b330efaa11b92c1c96a913bcc92693f -0x0901bdcaf9ff43e62ba5637588c07b5287f0319d9c310943cec7308c148c13aa -0xaa3b33bec18cbc1e58b61e0cd147236b102fd595f5941470522cc7abec6f4fb0 -0xd210e19fcbc074afa6c0d39eeae41c027d3854d7cda3f0522ae7aae44c08b48b -0xfad35b36210ba0f7d7be2d10f2b54adfb8ac587d446dbda119ad73142593e4e7 -0xb33880cb1d2466d1bf5a4ab6963316a427c615ca5459d4c84cd78e665954e185 -0x5925bd4c689b310836c7967db20b606b87772d20983be682bcaf9c467e34dc05 -0x2398b6513767f877c27b827af2a0a0fa4f238c8fa4d678edd72d11a5ca612333 -0x2e395117b199176af844ce00252f625dc21945deb07daa83cadac7032496cd2f -0xb5a361d034ae88add8d792c118343c282213096fc87d1f339713f03d294772f2 -0x6c310bf2e14de4e342e39b65fcff7d805ee00c3c8652ebabfeb9eb44cd54858b -0x90c3726f2e615295ecad0cc879dac4122e8eff5896cccbb48f5d0ef846ead912 -0xcb815e8a6d64eb3770131eefdd22d103d137b86b4519576f8d0bb772d856776e -0xefd18cdb96bd1fd5f9f86c26ab3816bf50482e548b7d47176bbc6908cad10640 -0x4324971dab706676049d1e986ac884d8ed6f92472304dd8c3c5cd2d6d9de5246 -0xd0f2429baca7588ecd8c48379987ecee34ff62c84e6fb7490b75a4c55b7442fc -0x80f2a6963be2fb6967a1210d0a3a69567a5e4309ccefc655848ab2f0e17fc967 -0x1fa0f45f270b8b049d9ea36384234667c1945be1c97d751bcb99191c6f6710cd -0xbf911d5110171aef13aa5dee978452cb35b89589f2583cf1b6714a0e03f212fb -0xbf8f404d7ac147a594789c5e93157141c6aee0c08919fd23394578799ba188eb -0xa8e907d5bad88ccd40d5ca60dd710aece1581b5b297317fd06ca0993c6e0cb11 -0x417321d24237272c67fb7b83cf503221fdf54d4868fb6b1d70d51f07d03177b5 -0x8da4d5196ddbdb9edaeb8010c7cb22ef5dc173e2d1d26426153a11202609136b -0xf9eb330ab49f2da89e74da67736a0888b0b7ce5ea228d7db12d1797e4f371e6f -0xbcfa3e2e1a36a3a45163bf7c6bb313e042a6dca3d6651ed918dd5653bbe909c9 -0x0a828f4c61f9494ce62ecdd8276812c41e992013f69bab4da303eb715c6651c4 -0x4546370acb8d8cc28ad5586630157a4819369e1dc125b0e2f02c032075d05053 -0xab7f48fddd9622198052d22f34f6e235053e9810bb88f6c957f0c3c0bb1695ff -0xaac665b5932480aac3347d23fce650b8fb2395f8dfd105a6183268954e33bd0b -0x8882e44b7d7ae5bedbecd0825c4c561288418e1e20b4b16a4a4ac63c131f3e90 -0x5ebea13f8c288dd6f967f6c8371e38d719a358087c0cf9d2c607b12ca235fa69 -0x61cbfc13db0aa7f1b7742f76e8f495c6ddeaaa9da594e851f0ac9b218fd8e5f3 -0xf09d1f9ed836dc3d03a78b8854b24a77ede5bf5b6c4d9df8e6abfe4e23579c3e -0x7f9760c724375a78c3c0496255fc4630d3c930ff40470d4ce2ab5d863615c9c7 -0x6436d8d329e7ca78fc453837dfdad6a8701b0e844af0cd29ad049aaa6c71d760 -0xa244e50abdd5939d70a36242361452034958a0f06db6e1c6a1bc4a0932a48cc1 -0x17e9ca4f6f6087276f247bfd251e6f6975e13a0f92b408f962e28920a806fd5d -0x34e5ad8733318df24868b98d8282a920db76a04793d245c8a058e47a6b9334fe -0x423b928a150102015e177bb0ca2527d826ef0b7e408be0ad0812377cc9924d45 -0xa4818cc1c6876605ea4805f0f30e2dbb9756f97ca119cb6109a1236bfe842a40 -0x98fff0dafa678a73d7af60e4b06aea37ee67c2885a4f06f8248486a7013da441 -0x01602253b0529a3b68660468eea6e7555a6ca21b50544ebe67914fad03f8533a -0xfbaadf14a05c98ebeeffe251f0c8c8cfcb6a0b633a0375aae4d7c884b2d67810 -0xe8e41e7693ae965ab85180de302a3f20ffe6d6f1bfb168a3f389cf2344d08379 -0x5f2b917648e6bb8c57debcc6fb7a50a74df1abdc393c6a83d3522d3bb76a45ee -0x610632f698b717a2a8ef4cd26bbe139af14e7ee6d42029d9998ea64472a97e3a -0xd0e90dbbaa86eae4a4fe0aa5944f92dfbbfd0608d28c42d9fc4f43aa7ba650d0 -0x4e6d5052a1819205e2af265e5ec6d3dafe50360735ccbfe20c367ccbe89caac9 -0x424a36b54f8e320983a3fa7567da0bc36679a1bc5af83ecb9ef159a9d8553fa7 -0xaa54dda0517d59dcbbf57a8edcbf4e5579e1fc8c03e46dd549ae66a635b1f94b -0xb0ac220ebe87d85984653e51a11ea3f31a321a76538154231188bbfec374625b -0x400c2844aa7d640c3a515971ef8287f4fe8c55ea50d1d69708b2ce36943fcebc -0x3f2f82d5ac0fc03493bb67a385086cc412375740cc785e273b752968c3a5bd55 -0x6f787f18827a7b52ab6749a06a2a87fcc258e28d1996e5d389639126dead425f -0xde7e252548b4655849a72031bab184535e88e601120d55a66d382001b2a7688b -0x2ccf57c04f5fd5dabd66e6b83bd47a9b5a2de80973bf9ed45c3de25cb69f4cca -0x58cc47a5a70cb5c1dc870a30d3b58f3e2c3bc7b22c0f550aa0ed84ea6a368810 -0x68fc046d116f37e0fdc3f7249f5dd380e9461c45dbce4d09f40e10e2db1c5a03 -0x1b7dc3e47c8410f33566bdef773369e3bfb3b768112cd9dae3a2bdcc8a0d726f -0xae87cf25ed83ab21a9406c6eefb02ad2764fe79f18736bcb138e7addcc6e4478 -0x1a9112409cb33e1ff3f053fe77fc9932a52a570cde81e6b2b862bf2f1323b19b -0xca3463f09847defdb779813bc1ff3a9eca3330b56d8745cef2b01087b7bbead4 -0xe90d6b1d609590a264b9fb28527a827919ec64f27843587319df9d51c0ea2eed -0xbc94dc4afa645007e449825df07f8662e1159040846aedec24ab9faf5228db59 -0xc4fed924c755a8826fd3c302cad70bd2c692a1bd48c21e9584b7aeb74c69a580 -0x113f4015ba5daebdd0c3f7633e1e291dd74b1b3dbbbb97b6cae4c50a57a9afcb -0x873bd45581e4459311ba297641229581dfe115f30b8bf8b4336787c726707e04 -0x9df02e221ea194908915efaa89c36ab4529b69e75a7a7965c8131267597a54fb -0xff91c2f50735f962b8bd4b90c241adcce17c8227dea99ceb1cb2760d762645e0 -0x19aa407cfd4245ca99b91d902ef1152eaea2613f74925bd4d559b2cd36bb5a07 -0x0b31f9f33c4331f9edfb4d03cd959c0c259c8f5f8b460bd5f05adffa0807a7b5 -0x1e0e804a7930ec7baa13978400345b5304405880db4a3a7b63f3d1ff881ef609 -0x907eb8c457875ead504e3f76ba4093ace43b9bb7ee0cee532c56dc11f8f81f04 -0x0d44a7104d364d5001eb5fb0d0ab7220860cbdf355985ee1f7264fed3aa20abb -0x61173f2b8a54b3e2867cf3729a473dfb4844278eee02a7461b85197e8492233b -0x91c4df797617c4b1dafc77f18bd76657eedbb14a6e990dcc0192f8d74d305e75 -0xbeed23497f4bd3e974d696a2414c0af048de7d7f113d226bf2778754c5d3659a -0x052378e77233ed6d10fe59059c7d9b8cd8cac25918a9caca84101ab56fb54164 -0xbeba37f641c710e3c137321c9620cc2733a49889f036a341107f6c6bbc6681d9 -0x9612c4ceb189559590f5bb61b41e08b409ea0262016a8eedadbf486526c6bf3f -0xc02ed077af7b304e87161547fd0d25165bc2c7d5221c979298f58bb603a95316 -0xb62f76e621e629d1a2f40976510677675c59dc7192f1847605ece513f2dee204 -0x3ed2e23ac4ab402d9eeac9b30cc1bf3a6bc0a62ce11c9893880126caf99884c9 -0x63fdc20d68827fa26e26836f15927c06772d8da88dbb85d4d3f15f574c2e5123 -0x10d2325368ffc7ecda0438373c13ef7d29701a6a2891ea3dcd8c9ea7507268d0 -0xd2018a6116c17eb605889b91abce822a22d6e204d8b3221cc5d97269c0fd0a9d -0xe07a4fab94d7644adbe8dcfc2e2ae7b18fd4d596898c5516fb7d4c209df4783c -0x3922b26185121e94ac57bb8937af9d074d73fdf2f1cc9bced7950dba09ab8cd8 -0x188312d6ff6103347a12fdf45d2ad07bf0d8097a1d37cd36c9942a236d353e8f -0xaedd698de93d5a7f7df2ef1a090fdbab46e3afaccb12a2ee78cc6e6f36cb7fe6 -0x252ac519611f7bc75ce117585c47ff69f7fb27011711c7493c6282119baf1074 -0xf6f5bef46bd3759c3cc31b83415dbc9742d99e448424d16232ace7bcc6138392 -0x874801a0e201013dbd9af6f158694c1eda8ba254c059731b2584b41e82fe959c -0xd566109cd45a05d69b89e8929d15f3ab9f6e8a3fd01a79ecfa4905f3cec3d7d6 -0xda64a1389df1404884a15c7fd6c1c970a5a0de882c04525892af79ac67b8293c -0x7381d707403d4c81ef2d43b4b0c1e8b0518c1d275b28c73e891698c294deb63f -0x310ac27bb5673b38d8ecb5fb5bc78b7fa0a36176bbc4a3e6b1a79f3788063824 -0xe204f79025e06da1173300a99b945ddb6893a929991ee6f3d73b762a79ce3ce7 -0x57df34c948285d5e2b3f9da6fd4a54ab8229cbf5c032dc33f4a943aa5675e728 -0xa6ff33a021d6a37e6e897facd77d2c4f9aba5d086ba098bcb2ef3dd4cb1d136c -0x7f3c20f52e0953c3297d90b1598376942b4dfe568d1605c652e0020762420b5b -0xb4e30958c8e9df805c98b12d3c9e69cdf6c95d935856a656318969c18876c581 -0x55a05547e4972019ed71e04a743b903bb3d0b154687f58da418a3b627912143b -0xd3fdb0d048ef4104679cb3d7b137de9100d448a19a364c8cefdebae85365f585 -0xa1df738a8693b31860593e88f932733a73203569831bab317d31c45f98a8e8de -0xc6e7dc4ff37109f668acb10162306107c846781d7bc264c1a5d5ce65dd335576 -0x234df493916be4ea7d126d7a9b78fde6cb66102ffecfa4082d2c071175300eaf -0x9250e3abc5dcda0e9e979623e776db23f04e560d59ac4627c5439bc26e468ece -0xfc72aab81ef02270f372233dc10e9649028143f1f27a9dcd435ec01e52f8f0f3 -0x8c8230436483a60475520c60f5037653231f4c45d075403578df5082e6d35617 -0x3fedd33438177954fbacdd74da32c8efe7a003cf6c1d7f825592129a3c23ecc0 -0xf36df7aedd616d9ad86326268eee092006d37e3d659d6582b4ca092eec2c8266 -0xadbaf74c2f9857db43698f6f8d72aaf6fad492827e889e7296a7156c05c5418c -0xccc5c580a5e23130c74fbaae82f6173d2a5743ec18e2b2be5beecbc0046ce08f -0x8b40cb80493124d6f348593c3044f3fc1f6e800311c48c64caadfb0a2a4514df -0x48d6bc24bf3b9277101f78aaa107e5afce3605baa70c050146ebd9fb77a459e5 -0x00394a2fcddbbbd6ef619d30985d511222d379d0d2c2da816ce844ac2eb4be23 -0x883082ba380912fc86d0bb28f3b9e93e79e9007e7366e23aa57b8a8899ba29ae -0x4814aed3de6cc7839a26f2669e7f17b5d95244582a7ac7526fa84ad5f5008dea -0xf657ead1b266048dbd2a302fa69eee7835c35ea36e8363bf6b887a15e66d8f97 -0xbb237faea5971e22bb3be11f30af40e0fceaf2f58419f6d552abab33d86ff87c -0x25087b6a4ced60be25ebd34fbdd553c6e5d3df8d1725fcc58a8c9c18fae20240 -0xf8595bca542db0e7a4332a4ea1cd23bb304f6998cea8a09049d10384d77c76cc -0xc36fface14de9c590bf688c860c0065c3f3107a5f55fd8f870ae3818d6ff85ec -0x9c7272d34071cf14dda8e76f090fb6697554ae160873fa8c95c5123ae6da0ae3 -0xa25e40309b8b721ef1bde9e90e0f98966e5996cec411ef1cd7aec35d1ce9bc5e -0xeab6c32fc035d4f53d6552bfbf33a7de7303c756f6f8ee14a5a1952384d78757 -0xdcbb70ceb1279e0958bc67fb1440cd9f3bc1e5438d4861053cc3cbb8090c40f9 -0x44d775789848f95c853a9b309b73d1603927aaf5308b8909e62cb7be199a67af -0x52f89acaf79e65700108524677bd5f66fea2ad7a3a015f9b4d29fee8b41793f5 -0x3d0245f15cd1526b0e030eb7e8b7f03352966b8a79132e3801cfa8f00336b1d0 -0x5013311ccf4b5c51bac7ee8a72222be4a6724ce7e552ea39b07eb5c64b0df825 -0x47dff50cb3ab827481e7fd8f4b57b156085964c3a59954e7144181b357e6ba89 -0xc975478524c3478041978ca5d987ea14338e0296a3e886a308805676eada7ba9 -0xdc2042eccbd34e864969d7988a8ae0b871576182f99484484ded7ee4748043a5 -0x638212ea12e589f2ad33a84d22bde8942414712ce2c20914c4a16153bca3c9ca -0x3eda89574b6ae017a69162585965bb5d337b24c8e8ca2ccf672e87df2dffefe1 -0x91ae7c19f0cf1941a1a51084d03cc56608da4516501610d42c7447f44e4c24b3 -0xdfc2c9d22ee512d9b8e25ed6aeff1db6c6908c96fddb5688b489892e1c49a689 -0x7c94bc151337f253d9e85d080c6e7d0ba6a99c07349122da3005e98d976725c9 -0xca2e5a8cac7d6a1afaf6258e9fbcf759506ebbec2818bfbfc1e0fb5b93f5de54 -0x8cd8e79d18721833c97be0894359ec0befc3ce8be85d186b20944db982f8946d -0x097bf6ea365c0819739af5ea728482c14fa57a0f87859c374c1b1ddbdeebb97b -0x7c957b1cb4f9720ad972fbd90e124a4fdb99ab76face82ad6dd3cdfb467d5c1b -0xc3944a0d11c081adeddb8a0b8e9435badcbb53bb8da2ca4dddfee137f3738577 -0xbaad8f4ab052d89eecaac35551505fd41d054f00f6e742f2233b24bade578fc7 -0x8ceb520f7bf2d92f4f7e8bc0b113c61adb2fdd299a9e261d0fe8b97f304c4622 -0x99a981aade7424f6b2b187ae19361977049b084fd7ece960a5b6d94ea717fa0f -0x712f2b8c2d7ae7555c1e4fc1803005ff9288eddbc5854e81fa53288cbf86834b -0x97d667fa48100c0cd55beb602a26350a8f10173a4d7fa0fe1c8c30c23307fa5a -0xf3ca45d4be175967f00f46e8c4e3f2c2d1d74ecee5fd2090c0b8862f299bdeac -0x145a5534b05395592fce8cd5c87577d5031d8dd41235dcc5708caa8980dc3acd -0x5f5ac2f4e957e22838bed3f559bf9d996fccca034177492e52636b0bf059ec70 -0x85a14c32aeba7ef7cb0fad1b15783d8d11cb0ebcfeb428f5b67212ed71500e08 -0xc5fd21561b19acbfdb1139d488960697ec3bbbffe3bdf3a9f7a418d2db078b6a -0xc18e197e0f144164bd7a75883c39cd0895c4a7437587ed2fc169510166564181 -0x4ac82233c47b41ea2311ebd058bacc4a698783f7ca97f728e805d259dee930f5 -0x0a9f32410084fbb16cd7d29acbc82007601661f621d93be6eac477ec512bf9ff -0xc424aa0d3dcd45ad355b52a42a85f5b111860331f2b646b0b3373deca521a53d -0xb484d611d42aaaca4d8cc38c0b0ae74daa0d0849ff53ebc9ad4bc6c8f4389ad0 -0x55ef3e122bc2af353054cd47e98eea779c93617f3f997832bdc5bc193d3fca60 -0xde6728a46bbcbc7df439abbf6bc1abe02806c402f29caee3463e8d5a52e1be57 -0x186b2e9ecb32bd6aaefbad6054248986454fc3446a3c5869bfc018124e6ee511 -0x98366e990ecc9314bbdf0af34146644ee5e9f4b6ad2b2cd76b986a4b1b41cbd2 -0xce7ca2db8da33010539395fd8f56818825a036e72bb046e8f189715f3b2ad865 -0x1a205fe3d79104a6ec615a269d5dea250502fec6cdcd024a3604a9da229829ec -0x242a1a541a715a66b4d773cede93b4cf93ede3e32be5696a9626bd13faaf0aec -0xf68f7d07e9baf2bc283c992daec46b144a9e3b00a133c7109cf99b6219146d3f -0x48ccb2814ad4d92928c2a27403b11f722c650460496710c95867510aa5ba9f95 -0x5747bc03a4fed4985c6c37479d1900395533ca96f221ac26a27bfe50a088ad1b -0xe1316ead2f24a80e8dc31b404d878a29d253c34796b10f4e75320d941194de9a -0xb7c8d054a43545da77b812bd3efff48b81a8cc5a250cd017ece5ca8d494a7a74 -0x1cd3a9a1a48ed2905fe17155af6ad2f945f9f8429f3a1f826d50790c950523a3 -0xb33b935f0bed8176b2a1b29e870ccc750c6bd11a29d7dad1afc7022c3599b901 -0x1e8b12960cb965b083c016c248385a02e49d673c82a7c9b41b6681b49767d4bd -0x96c79c605f2990c201afbd958b26378b993fff1e284743f82d20ad5787135023 -0x39977714007829eef9f55c78aa7ee2e700c300a6983d6f70ce7bf3bb0c451719 -0x5bca6edd31ac8a68ddb1a4f4e72d7853222ba0358f3b2809fe0719ddfe36a01b -0x8312486272a50326011d681cc65754ae3c4d55f30961262722c29372f8545ac8 -0x1bce194c595fb2220ddde040156a3edb828b5d8b9d3ce444ef5e5e526d80b8a5 -0x40aab86eae560eb884777f14d61f9db6a3f28f10d0b9cfb6b1465114aa197c37 -0x8c4249b16f5baa0ae74a6ea891e295424c635501af9721828e343f9c40b4cc48 -0xa1ca37954c087f889a2aa4edea4701a36055c65dfe7347f4ec0239bc10cb7156 -0x04307d95180e3f37730714b72a4b7b22daad97f005355840cd2d11211762d09e -0x6e89a489d35aedf6583ae58fbe12f6dbec723862a7edac3ff791c28facb29cfe -0x036da6a6f69fe358aec241125d316be9b4182f202aa1617d6deadd9deb1395c1 -0x7cc9b9a0368bab3ae57b026318cb16332cafe482cf90db2962fdc13292bf1ed3 -0xea0978b3a35ed6a2a02730840a5399855a8fb2ed90b743c9fc91a7fdb890fcb8 -0x15c8c9594a10c081aea5059b11fb65fe0aeacb3ee18485f273e7475d8016d060 -0x7d07ca97da95eaec0a2714f9283eae9b8ce2a17b49c33bb99fa3dbceacfcac7f -0xe6be92a2222518c84e8e91095c754e48704f9aef0bd79f7079bab0f0304558e0 -0x8fa473e7f6269adc4ea1fce915c3341657bfb4283da98a4b04ab5552ca2f1fec -0xa59c360984c416d9cd66553f3e23e1eeed4464e7f4744ff242e013a1b86a127c -0x141997ee18d0d19f84d723eeab751742c6f2e60f769fae152e094703d77cba74 -0xe66e58fee34f9041a2d42ffea949d46ce636984ae5541c46cad0dfb0d29e21e3 -0xaca66a109d4f9db5ab12e2e505e24f4539e8c301d093be18491e49b6663e3f90 -0x9e987097d68ec68d52536dee005df7772ea88b2ed554f3b5f4a14bad08ed621c -0x60b535f73b9598ca27a9d5c0da1ee643d51b71f27947d1d43365947cabee53b9 -0xe72c647c6231b12d5b8579ffb66114d2cabbb07eea278f2e87ddb4f361f69aaa -0x2ba380476544fac796b48246bdb2bd9e0f1c85ea19ed2136d942c523c1c1a155 -0x6d1995796066429abd6c556893c247c16acd636ce73774680aa2c4f5c8d9fff6 -0xe50ae839b3e84ef3622bebb589545f0fdba1cda63448bb15c7f1aab1c493c7e2 -0x0a55ddcb1060d43c8764db6da4150fc41ff789812f1bad5ec1406570d454d6cb -0x209e3dd3bd78b9b1a2df53f78df6822e5f9e788c4ad2e63b65b799ea854c0cc3 -0x2c042b73542718ff358efe2d5f4b3645f0f00e9627134c0b2f0315161a6431df -0x710ff6ca21fadd9746eddf0df83cfa6142dd44935786399cecb7f36883bf61f1 -0xc327fd0e11046cad893f74241918b1e6034c9adeb5295a4abdf80ba62d25f9f4 -0x34780354bb324a0b785f70547ac7b3a584a501fda8fa65df7c4532db39f409ea -0xebffb2326f5b5e631fb194b89b1c576c4e41f0d88cedcd781600ec5924e5ec56 -0x2c5460976aca4b5e932ed7c62105dc07865b5782716e694000fadab11981f160 -0x0ac968d95c46936e176d5a7ab86bc126ae0f534289b5f6469d9abc322e598a57 -0x92ad5ec30ce1de093bf5741dfd19fe80fe5424468d05a8bee34986564e8592b6 -0xdca9d4a02a227f60915796a0004905bfffad88cff72f02b92d089449cf243ece -0xe6d04a68c555669f96b2c761ea3ccc9833c1093f5085b63c5a01ad7d165457df -0x6eb8d680142be133dc86df6f96ac08bd54293130466d5e899b1be0d750aa2b5d -0x072f9d505f44a8f9aa8187c2de1c4fd9d28f584c87c1304be79a521a32544330 -0x90eacd94a7644f9e27b84d1d662f2e4e54d266ccee410fc1d31de5fc25a633c2 -0x6794e7ade453ac970f3f718acbc40f9024c1dade94c993bbe121d2df1a27dafa -0x13713da92c7edf0c8b67fcee6fd2990a92de26dde2757ec594a0ce0e62d65d88 -0xd26d8145248b5a2894bc0e3849374c09fead7e49b87dc5ba798452b00d690d60 -0x5aac4694060cc177c1a5b4586f99ce1c9e71dd679f8574e72a3db9bde5a3d309 -0x793d189d08cd0dc682967069ca9026c1670fa46e5b5ca82f9059ad5a70723d28 -0x7be2805b1b5224d8b258c40af3d80597c4955bda8f3d169543ee5012ab95a793 -0xd93df587d3ebfdc0c5c540f8d11a63e923e536e525d402bb9d6220a91f02b5ee -0x409c45f44ae0b159734d9a443c104fbac5ba49a64deb07b2992c20b7cee3b85c -0x6e5d3e533fcc2943d43f7eb6c1943b19bb5c0c7aebf96c33c09b63f9a0dbc1db -0x1042d92ced9d5163332aaa741f2b0f4a77874bd28b7a0034f038c67a4a1ee7b2 -0x30b0ef8cba2bd962b6b573e977e864883fb23be880eab6f3c50fca4159f84543 -0xb9fd43a980cf2c037cc317106096f9f0b4c9cd2b8b5824d1700aa3f09da60dc9 -0xed4a5f2991a7aaef1f6f418809149e7d40017156af3ba2fcc1fce23ef72f112e -0xf64d39d0743e8facdef1d5f8a316115d916bad759810f3b6b3138e7395ba5318 -0x391ebbe9ae094cb4530f4083e0b250feb5e7492d501a5d166cb3b207562a204e -0xd0e9c0adc85a1c0efd78f6cf3f3bf9d4fcc26611ef715afb28777a0667a74674 -0x1a0037706936f3af52ea55d0c27ee57df15b38b4af8ee0c3cc59f7f54848f4a7 -0xf12fab77720df24a4906f405cb85c87345a49738ac179121d02d310d25925c0b -0x8478cddfb71c6a425ef59435689c9a50fb2531a7057633d3eb69aae7b27fedff -0x914841f542efad3d1b0cffc4bc86b49ae0d2eddad07384d7d53ab459f0ce688c -0x9af0fe238897adec12705242ed4c4c2d21a0673055ddfa6805ade7af658dc7b3 -0x2aa1c115ca45b1e70b80ac966d0f01e525924836b25b49692b8200aee60e5aa1 -0x5fa2445c01c85b6a6f790fdbfa05ddc9e268e9d289bb1a9ee63d8e331f226011 -0x88cb5d24a78998a2333464d6d1d9da659131cb0f3e4b395fc84df2149939dd97 -0xc47d8f2dd86a476461a8180aa0d1c415413eed700623b3f84b551b3e5d716f2e -0xe1ed822855c38b1f2732a2bb1ad6e6cb2613dd5a9cef6a13b3e591451920d0b6 -0x7ba39161ad964bf1edc4ba90313805db239dac880643aed51c3fe873354ddd25 -0x5545b141272383048696325b86bdc9aa7a7cecb9f91aa37e24eb6afedaa164c1 -0x5bab78d0a0b12dd1a1a25abd647fdef8625e36b8c869b05b7298594c8f805b88 -0x5bccfe598c2395031ce702baa1c51228612902a4f0cf35dd996e6cc028170b05 -0x1a28bff6887cc77270f37cc80afd20f18f4650c081329250bb88027541180c1e -0x18e02668173932f00f4bff789a23275093135d8eaa1212569c0f1090ea47dbb9 -0x85a1a2647cec6e15ca8fbaed2014d8a1489143dd37c56003b1aa65dd2bd4852c -0x0c49a9d662f619ee339451716f211cab3f5c2bdf2b33b7545221a87f5a13cb06 -0xa235f96f590586f9db44055ee20624d3925703857e07281eb1b290543f49a487 -0x7ac755033e57b7599cf878a2350a2dc0d5746a68b21ff4bbf5c43ac62e56e0f2 -0xc81deb1198a701394987255c13a37902fa5be6ebe25b88e32a1aeb1a55e7f89f -0x4cb9fd3d178ce026ae56d57ca588f57b960391fe782568b2e0c65e3c225aae04 -0x466040a6e5e5f784857fe37a2f6a245689f41976fd8937a064858d823b1bc36f -0xab521bad2458f2ba1d8866e968601871e838c7cd3579830d11886ff05131869d -0x537a08210f243c2859c7c79b1675c7abb78790a28ab8b082f3380397413ef8d5 -0xb5fcd04ae20dc48ec16165c2aa2c78f9f83815be559ccce98f6ed38c04d02213 -0xc2ff399eaffe3eb5abe4bafa46981a37bdb78bd49ed52e2f030c12d0d02dcfac -0x07d9c220d939b54186c6efd552bb40f3f2120ae15152ea06886162a10979ba11 -0x6fdca418887db980067db6a38cd3d9ebfe8c80f9a874e7353d24ed2135e87fb4 -0xfc592ebdf6aca999380a1a9af3cbd41efcf765b39d2ab0e9b9e209eb618a0cf8 -0xde937c8d56d0d6bd015202ac16dfca3c4eaba27d77d615ff0b6224fa02a6edb9 -0xd3cca2262997f8ac15cdc4a43f17b069faec0ac8785d21f0dc5671298e8742f6 -0xcc39e930a8f3c6d399de093bfa92bf6df35f026c348ed203aa8f495c3a271979 -0xe87681471c394b618450afc10ad192e41abac4ca1d0b42b49c3398ac4a00919f -0x14203b26ab810d1abeb8d7a72b14d7cf742570bc69342cf40f2f4eed39fa9ed8 -0x1c805f70d5fe8a8fe144f5016b693004f4c23df32f96e9fdd3eecd9549c5338d -0xe1396635dcbecd8ad1cb374aa21f32ee33729b18f39b820b8b1d640c09108200 -0xe1f07b3d87bbb25de083218845792c3fdefdffae598c65d1c7ba1a244ea16099 -0xcff8b4a77c9c7ca72dd46553187376fe5cf7e56cc761f6f8cceb4e8b3b55f85a -0x4491b9e0066c341528469e5594a650f8ad459cdd6c51a5f999a01d6395dfab94 -0xfca014f579e68ec34a00465a63a857334e82b99f77e006e118b1d918631f9a9a -0x976d2dc7bc1f6cf2c751a505c39ddbe80b51918cd356ec90da50152c08eb0513 -0x4bd5fec7ee5ef5fbc9afe796b3acdc88c628b8ab958a231595add402a382e0fc -0x44e23545e25f8309bf06b98e700d907154a5b68af723a0dc54acca88faa2c781 -0x2ac6fda71288f0bb67e18a3c32dc1fbe807bd24ec282df2ce86aa2b09d5b32af -0x53fc92e09893a71f5f8bd25443268e3bf8235f8094e8794ba0c470b05d988a5f -0x741487b9973d25055f28da1204cd6e319aabdbccc73b5184f82312903d18738b -0x99a8b7ef83ba8cad9e59e3ba39c1fb3a510d7fdc20e4e7c3e8b1d33c06ac97a8 -0xaa86fa5102abf39d975aecc0895a8d6543be37c415031c4b951a4e4a9415a0eb -0x4815a859ff6b78553746bed59e1db6cae83665fcfc91331ab70671e9e1ca5dc9 -0xf2065b26312b7de85cc4a19043d22d4c72c63271449ec8fa7a50caf1c3aeec78 -0x616bd2d056c05ef89a10da919e4e28a7fcb18d5796f90c1777a3d73b8d190024 -0x4cad709e3c987376c74ee85d97614ca577e73f4f381d6881c173c96130828e5d -0x24a73b88afa82fba7de29a77417a83cdf71b2e57bd3da8a322b3fee584553ca1 -0xd8fc6c23490db51b6cab065b759d32582427eb62ca5894eb86073cd803412e2b -0x5f95576e0b2f78c5fc4be3d9585ac401a221e765b00b7f7aebb3af97f651cd09 -0xb9880b94a7cc2ae3ce582a6b44b1d361363e909b31f76654ee7cda20cf852fa5 -0xdbd9f88444da59cb2bdd37253486c070a3753f4ee0ad44be27ad094563d2dfea -0x77e8322816e6ce563a4d7b6399876f380e491a5917f33f45d8a9685486035913 -0x9937f41d50ee8d35dbebc9047e30c1ea575a50ae168898097f3fbaad274bec63 -0x87631c11e3569a62f3a8d14b83a0c2e11281187b0cab31cab43ee00508e4714c -0x19735d729570a68f68479d2976b29e64e0b347c9e0f8687ae77dd0f5c40b40f7 -0x0cd7860bee4776da16b0207ca78c0ce03dd254cbdcdfc980b38eb6ffc6029da8 -0x8e1cb28c1e562829d74c1801cef98713d308310597f22ac080030302b48c1805 -0x8e9ba693c03010615836f14585c8000aa0c7195996f6bf1bf0267e69533b87c7 -0x0a287c658903bbd567e31018e93f04d3affe1b06e2a9478eaa8c3ced15a38482 -0xece5a45c1b6c5861a822986a59b6cbcab9897dbc8da2b7172607bb711cc1d384 -0x08fb1c92ef895a761fdaa2a21cb643e336383561d7dd236b46fe286eb840b61e -0xdde9d7c4dd34643780fef18e8cc127c29bf1bf5ceb993b4beb2e76b38b12ac4c -0x34973da4a3e0255210caedf026a687338440319630860735fe246fc06fbf6e48 -0x27c8f372823c57c04962a540c4f4df866c7c0cffd11c88b828e4f43da64dbdbd -0x296fbbf63cd3b99f3e3f883cf2f72987f4dd35819ca88ccaf6ab876d5a54a066 -0xdcb823e650736513c839962c0f45d05ca50420c06e970e8a52bd604682004849 -0xf07cbc8cf5b1147d1a308bc2a3ed52f740f230f22c6e8ad9ed9fdc9d6aaf209b -0xaf0a4cca6302d7dc756119905973176e56b486b3c87696b193aa9417c9572fdb -0x39071387475e62c39b312a8d870efaf8c222771c7b2f0849538dac521a7225ff -0x291108518bed07ce52eec2c09523ed82c71d3faa78cd2c1dc8fa8b58ee0aadbd -0x7221da8223ec03bd4643abb070c0c6d7e6768f3d3789d21315d3454ffdee55a6 -0x0136416d93acc2c269e432980afdfb3a312977cb78ddd2eaf63bd8b8450dd738 -0x25b88933a52b143b4627b5d4d8adc6e2877dfbf7b17eddfb76ed1ffb60f43d63 -0xc7b28a10993b3d1e5d6e02f2898371c7de1e59ad2235b1ea019efc1927459d4c -0x742c1a71dacfe2dd37542cbc4fc0d3db674c235e70704027bc6f5b040c3eb6bf -0x61cf7a535519953b73e154999c47f7f1e10f01dfcc69f0033d8507c66e0dceb4 -0xe2447a40d4d8b1a5e8bb2c5d616b754ed932d2caecd55dbbd9ac85be46bc7436 -0x2875b9570405f515ed1cfd0f7a0db776481ece027ffe6fbc1b645fab6f1480ff -0xe357c0d9fe587d88d8203426ff0741dd17d46f9c476ce02f78afae5a902a8115 -0x8c1100f3a23219447b162593b5af84e9ba612eb8b3a6367df2ce158acbadbdb3 -0x47097d25e8469fd756e346b2e2ee979731f30b68999f1e9f3be5aa737eb28f13 -0x3ed41615fbec3ac89c06128a83ecdd588ad612c3537ccba097cea073bc6706ff -0xe897dbe650c53f6b3a23070dbeb6145bb284d067f66c3c3833760211de14f0b0 -0x269b5ee8efe27b2aab60d540cdd1dca8639912b5e2205a07fa5e3682d05841e1 -0x863531709d0f6336e513dfa74c9cd209c84fa8a85bdba30bdc2845b0d9bb337b -0x01422ed85d5a8c8181492d33fa37d02a21febf67668ca5bbaea892bd3e74b78e -0x5706e03e10da3fa361c90a2d6cb2a6d73ea611ff272e43affa39492ad4949420 -0x1475cfeba389589469578070a40450bfbf3529567ec919bf425fd406b1d01aab -0x2ab66ccc0ef257d11d402424fa18f8edc6d2fc7fb98bd0eb660b43928b38c507 -0xb82101bb087985f75a4d67d4222fd87f6265558fadd22a2d4b90a8dfd3407ada -0x2823894932ad82d60fc09300bed840e9bc175eaebf30b7714b8d3b56ea99ea97 -0x01e89ec5d035a735053f380bfea5753de496faf4a3183423f8e151e78ed40cde -0x5ce2af5976d43b307f55b7cce767aab8b89f1f289b9476b97b294fe4a64586f6 -0x5cfb5055bc605db23e6214fdb2a0cfc63aee10c77651c364d7b755c4d5433836 -0xf330a74e4fca71077fbb96648b60466b81300e34a46e32c52c7cc3a7de217459 -0x18610041025bd4891d9911f4144dc173a236fb0477b233f5a35ffb5b5b0d2561 -0x82c12c9274f2eaf366b81d1b038ec4822f000265894ce005777ce96754b32fd2 -0x005c35ca6d2f336e3b3cabadbcfacc4cfde8dd4ac781a0524241aa63a544b2c5 -0x3f0793417b9c8cae99fa148b6b935697b6ee9f5cf9e27b7623258d9f0a06321e -0x29ed867b110c2069da236033089d0506a27caafcb9b6024221122f2887bcbc9a -0x43f3004dab597b5aba70a674eaf9eea075c644398af69d270ace51deb017fde7 -0xee8acb87f4ed911dd63adc644f11922e2eb79b1741ae0ec0ee112205a5144857 -0xa23d33921ee3b8ded1c9a78510ea9d90fc573fde7b3a80a7611add096380455f -0xf480969cb2c80b510e69f5f8f52ef9ae7ab0fb6362c5eecf54abaffb187d6fd5 -0x0fb330f84a7cc28d2b92f6e5b28649e0470fed30a2c6bc142aba85eb1ae75c59 -0x9ca4cb6d4ad015a9c67333157124a3c7a782dca278a206113d41aa42e49eba15 -0x320f1cf72e07d953460a125c43211abb1706dc1046db5b4d9934b8c66a6da189 -0xe2b32c7d0debc67d4f9a20d93b6f6fb791600ad87412855c7bc85347baa6d356 -0xb0fbe75a4d10ac2b3e53766a7d68d07703849b22d2280f10b4dec70e6f52a7c5 -0xcc5590cbaaa6fb60953180954909d6ec717d79e37d02c56ec2a973beff0f7667 -0xb0e3c6ee21351233c3d51085a755c125a87d1fa5c9f1a1bb6ed5bdaaa87bf63b -0xbd0319e79a95649a851c8d103f709445d6463a743353d6116abd1f25da471f91 -0xae69f5e57526b0bc74715650aba32f4070dd5bdd164d7788f3104303330c8813 -0x5fcbd043a99e7e34d83dd214e868c6f2e1980b6b66320540d9b9b67e83a2294b -0x22fd99fe0406d212fd18448e0d10f536ea28e5c3e13dd2f9dde4502a9c12bdf5 -0x3717cc1593afdeeb920e0154ed9318fc3724a657c451f6ea1bef3d519112640a -0x2f3784bfa635dcc4eea941fa3483b92f02ed4e5cc151def047744a1ce485be84 -0x35ee9b93208426b9154c39134e4fdaae54ff603fe0f73ba95d900f797c9006a3 -0x5768013cd01af43a73636b47325dd426a44a9deadd6dadabe551f308388ff6b7 -0xe980e452ff0c0f53fee08efd0063f47e8e8761ec77c07fc1172dc75d5030759a -0x946bbfcb379e8a22fe50df6a8368fbe6b88f33549e57d989b324a3e621afa156 -0x62b4f1da83ce3a738c242c8724c09a8340c7ea9f7794e102c1ca95f37c56bd41 -0xf0408466982d1fdbe6f03e06a4891619a1e24efd38c567e4d3cb3a5d61de968b -0xf8d80bb2666d7b4b5ebd85b85a5425c0950b817f08ae4ace86352fe00ee7a47d -0x949d83176f2d17f91cad4cb280ae0a89a4371caa56a4c43e56a1dde79daad7ac -0x9e1b55b09f0376b4377db1acf35b0e0097ff2620703a60d9f1427b04fd37acf8 -0xdc280273d334d426e49dc0eefa319d359b9cadd10e12e0f10ea9a1160214ee74 -0xeb9267056e5c0b4646b4aaa6acfc7ba9b064bcf2b7879be3c372a2db135af752 -0xeecfa53a26b6f1aa21323717ecd48da0ca6e6c31fcff438bfac24ec37d10d103 -0xf2bcd60e425d2f50bb02732ca031daf2d0eca7decc5cd8181aff2569f06446e6 -0x1586489871e75a2b9291fdb0b83d319cddb6e7a166799ab130a3c49142b2de8a -0x51726a2d59d5f668621bada8d48e7f5506811aea78be813ba1be340256573cf1 -0xa50c821c5b4af0851e5cc0f70c0acc27ceafb566e847ce5b8296173e47fc15ab -0x9745598624811129c1d760f66ec26392ffe1f98e5766ee414bc2b330ec81055d -0x289f15d36cb58a748cd4f0c425f1b7c0b36480c4cb15544d928263a75786c701 -0x86f79e1cb2923342bbc36a71f15b6ca3eb1a4c1ec06a064bcdfaf56b3de39995 -0xf6652a075a65036bc27b8cfdfa8b95b21a3e6be6beae9cccc5483d20713b525b -0x322661fe8000f34647ee29d8c1c621de33074e4968fe306659e38e722a14ccb0 -0x555c4c00aa3b280fc215ad639b1234851cd8129b634218936cfea65da2458e9e -0x0e7af49fa431dd143066096c137d1a3a8e172c4e59aa449c0f39045680203c13 -0x8f072744d557fbcb4b84b6dac9e69729f514fabec5ca87b5d108731acb8dd65e -0xb620498ebc4100697d919bbb06d7b601ae2ba90b1b7787b76071b59e945a0577 -0x1054575c447132d6bda5604a62892bccd2972528e7a6fdfa916f870f23c54cca -0xc0531f60c1405249659734bdadcb48d33a4adf9c078f1882fda5862ce1105bab -0x81a0f35c849905215c36ec1015bf0ef289523cb433503d7427118bbc91051358 -0x41c845ee155a9db6479ac030f800ca5f2fd39c1bd8ccaeb4d7f73f7e45abe88d -0x693d9169675f15f19bc28dc072d89e7c73c0e7b5ad1dfff25e325d04f2f58f9d -0xba0111389bc8e79b2a252d6469cb8a86331ee2b44f8bdcf402d1a6bde37d9253 -0x21af0d1bbe370e5ead3b093e88669801ac34c74ae0d0b432c850290b8a24817e -0xd240cd0d7dd2399a742a993e1891b5be40caa5211fc62b6f64b15b7387790add -0x2b0fbb8f06427e34c34dbf18af1143266d7f5bb1bad9eee3be9981541141195c -0x2e1c1effff9d499f413e3867db9b93f00acc809bb4cd3ef54f68511d687dd062 -0xe0ca6be9da1f79f3169c5db3f11992fb8c3beb072a73b00c639563b6331a51ee -0x94592c52fd0896e60251e4526f40e66e9c585ec4e21cd860546fbe42fa1076a4 -0xf3800dd464742ab10968b56deb8c3e5b083210989f21f50aa915bbd88ad0dcc5 -0xbfc8463a985c7fd736719f47fc2af928358be0ca8b3f4d4834f7df46d792cecd -0x2669bef35e531c4a999b13da361f93d8600407d59f96515ab68390029d8d9987 -0x560d7b0fd759e84a3ccb7920e63d8cbbf6a37036a12f05c6279e5b8d0bfd7f0c -0x5fa8b858a8b99aa97b25b9e9a89ce7e75e8a72668a375dbea0b5cec35fedcca0 -0x3f50d7e80369a69cae69a06483db9c18de76f37df6f39a7f656f39efb892b908 -0x0456a7f1763d64e2b46076e2bdef00168f55d2a73fcd6a59a751f6cafbef86f5 -0xa22e96a54f334702ce981e86c539e9898b5a441d90e3a40a8fca569350db8243 -0x5dd39c0a7d7184345a8076e4466822738ac9ad3feebdbecb5dd686592ea7e490 -0x3c24445a7495aeec95a5975b45d4af506d4a439ea204fc417c502d8a8f921a59 -0x88c8c9d7f34dd9e56ac811edf01992e6051a2d1980640975e6d2090b81c7e20a -0x2c890b1003e54075b8cdc35a2f3fa9fb19d87cbc1e2d6c00bd6edbb303642804 -0x713b53eacfd00cc6400a0abe95dc814c3ea11064c40d50ac0b03afa96d1facec -0xf42cb1621c491a500eb8cfa2ea784c6037c7ed2f1d875032510b6a1cb8713ade -0xb951f9b8e3bddc0a3f8fa9ac5196f1b817e1a55bf2d86c139420dc759eabd041 -0x35de52cfa6f6248fb5f38d25d6b0ecaa58bf5ec2a6ec4831aaeba3cb720d6ca7 -0x068eefcc875a0c386d810412491cf5b8f71e362e8a6b70ca4b074fd38f1f9a75 -0x9bbd27b4a67af52840a9afa43d561fa423351a61de293f083b6a8df2825999a2 -0xa74bf1bd2076a94f429a9303549c4620c6b2a5c598e506ab8fb1dfd6972a9afa -0x4845bc02d4cd49e0dd3fbae6773cd4f65769de09089d19f5e9eafba614eee550 -0xd54256a7ca2c5c1f3530a2301fff335abd5dc796f5128568b65fab7eb2b3d818 -0x4f66ca3938fba9938c212d4098590201ffb689ed56172855fc3068ceec62c361 -0x5a4361c07d06ad66c80579aa1a55b71f7b10beb1bf68766d2997b444db4e2fc5 -0x9d64c3292fadd3254ed5ba809896bb0bd6a1e5663d1aa33e7f92dd0dafe98072 -0x7ef1184ddc64ece8e9226278da9b01fd2928fc6571bb1a4ce22a91f21163b42c -0x1d9def18716f160e05449322869e8551ff52c9cc44e3435ef09d4e4e10a57da7 -0x88a34e90b6dc43cb7b309194fcea85fc7917abbc81bc1dae9ae0e74d2179ce30 -0x2a6cf36a9647ed45a119d30f108cc7fdb43a206dc8dcb0f61929f305b87af4bf -0x34d92ca09e0e369324f65f044d3d7525179a89dda144ee69a2abd260f6058887 -0x1d255e6425d4f2bf8fc9d122a4597d6865bbb0c2eaa9d085fa8d73e5a9f09c99 -0xdbcd2600995dc165f6c616f5e8898775941df3ec2b02175e57b57cfb06255b3b -0x971b6220ffe4bd9f4fa051212a9a5bf1a590aaf07d032753f612adff6b4b9ef6 -0x5a645876428411df20636f82faa5c5ccd279b71f3ef62ca4b3c9ce835ade581a -0x3619b0afb18d749d3795b5276adaec5381bae98217bebe3882ed9005b0babbdb -0xafd130425d87ffdb5966d67b945a1b27578e66113cb02edc5306d5ecc8a59b42 -0x84bd20cf2fcc3548deb8696257ed9901ee370d83d46d1512f731f80d0cba987e -0xfa45b79cec4c28897e1fe3714d4a3c1acb02ffa19f273c022247d44eaadff528 -0x98cb1c2407d65910a1c5a19148f33e964f0dbf68c95c58e62d3e41943128f041 -0xebd46b1891610f7e9626e96de0fc8b7e5a5ff7e02a288fb0a52b08ee2a3c0451 -0x2fbaccaadae885531b94caa31fe82338f8e1fe82873f82be8f9e1be79a9b2ec4 -0xaa9e683ab2470721634650ccc1fb406f3ee9e80ba936f17034f0117bbd2a1acb -0xa8bee4dc24a54ef67feee8a33f03f671da6de681eb381d9657994e6a17a4c4b8 -0x1251b3fe25ecf312b62083b7d2e41bb4e2192f43508f8e7e2b7a00a9ca0951bc -0x6f84d62ab4601e4c9e214abf64047125b33fd995ff364b80e9e77bf187d481dc -0x057add37dfe08553cad03873253e2cbac34d9055b3fb3a51298bb1c6663c2c0b -0x991c89f07bf4cd6c6e54b1507fe2e485d1eaaada71a22c57ccc5f2c4e7e13dc1 -0x02a18091a9ad6b570be1ce168eda98b14956c0d1553fe8f2aa86e42dd87a43c7 -0x033941d503dbfb1af616d57a4125cde3b4c57c9ea86bbc93e92553291083ea36 -0x6ac8dd79c048ec9975862403e828489b2174b22833a7cf7a3d6a8ca9287896a4 -0xee9458c82808660a4c655c8d634ae9d33f638155f9426dbb0c8710b5d47059f2 -0x97daada0501d171f07709edb7c7fccaae898dc19e5d426667ec245e3b89e180e -0xb858c8d22be79b29b49d6d744ffdbbafcf497a71e889d2921d45081a929f195a -0x9835072701a46d2544da6c8c9443b8d018c40b11e46ec010b3ec11f81de29263 -0xe72f3cbee3a96da918b5a45501aab0461067f0d88e95de409c65ac0cc9314ab6 -0x5cb850a22b592a99cd2ebd1f08f2c3b67269191be785bf58e74ffefd2d261ae4 -0x36346d071b10fb2f334f09aa76bd164b097a5ec32701c942f05eec1a69cd6176 -0x94a9a0c6eb3937eda5e3f5307cd149f04c37b83445454a3f4200dab125e8977b -0x5a77dcaf26ad4930b9ac9c33076593e0784639eec8191fca211bd3b9db98ecf6 -0xf6e71bc8a984166660ed5342518c0bc8f0bd2f04a4259e9e663929a3ae7172b5 -0x266b2e5942edfde8c38a8a4fc259cfa4db54865c5e960e813c34923ffcb3ef33 -0xdfd2b7e9fd5294eb2acd541423663c3e01eeaa868520962c7e371dfd44d00cb1 -0x54e68d8bd3ca74e12c8fb546bc32b53910ca6802c3833aa073d0e8ffe80116e8 -0x3abeeee7f1bd83ffae48f97c8d270b6d3149128b98f0730529e750e751329068 -0x85d8abeb615a9bc9f2d6b64eff1c0b8f786c435bf40906c0caaf293aa7f1f898 -0x893ad2768612d88972e04e195182dc7a3c1f37a577a055a04547239b8ca130f7 -0xa9c98066e2f91f6f0307a2ddb790956e58012f5108227b95e4c223fcf28200e8 -0x1ec2c6cfb347083254a3d4a6714e28092d069a42d1df6dfc36ad58edd0db8288 -0x9516dafd217722ad4b6821e962307790eadaf076c9112379ea2948b1739fd9a6 -0x807b47659fbd80b857d2f8397705618da4002eeb76c20ca32a0e69b5ea57d300 -0x1b5913c209e6d002080fd0ec866620ebe030ad0a98336316fa65e515c347f43e -0x17f6ecfc83baa86503b35cdf0967c17c85016cf8d2ed8325766465b8d7e4b592 -0xe6406fe11c150e6e4f166f53766c38234cbb627e3794e7d2eee4b7c4f95c077e -0xf72fd3fc8f82c3ea87e8a22f2cd95e20e0d8b45361519dd98c809197251f9b38 -0x91c4f642586181da9e941f2f692ba3128433a1c7ac6cc0e0cd631812d6fe8eda -0xa242edb5a55dfeaa1d091e3ea8d38e9bff575daac26384ba1ea5b17e3c73a958 -0x914ac2fd5eb7f74e124fd08f0653d4f098901db6a1b238fe3a3b853c17b6bbf5 -0x2230c836b978661ba6c5d2663f5a3931bb55e8b7bc49c8dbcd7d6792534506f6 -0x944c8b31aec9fd11c13df12f07a2ced64a668511b5fb1a916f5b8c792d2eaccc -0x59b94338541931181a43aac5eca8c1d957f094a3faa4973911513471ec45e6ff -0x09b322c44c4849eb20a4cca372e766cd929df980691ea492b5babdb76320f508 -0xf6a0dc33e6da5fb2278b8c4f3943edd960e367ea0b2447a7acb3e40c6a05df4e -0x1497e223101e826415d2fa72ae8ecd705f805edda8e359d4078b522a509ffb45 -0x78c4c94437cd53dd363ceecedfa3b812253578e6c973b02a320eb75b84bb7163 -0x285a8af60b12693609e2280ec406bb2225f79ec1e48974c9bfe7c1143483a9a2 -0x81b7e759a76eb69a7d99f5aa3854aabca469a1a0f88c96f75ec2107ceb755481 -0x79f77c19f9390907b2939370675424969cc31489b3ac674c2bb1c0439b90e0d1 -0x044a7dc2fd42ec6723c6acf39b5d941c4a86a502aa0ddd13b3c223fca13b5dc9 -0x553872af6db083b10d096beaf1713f9606977d52be8314d2255eb4c0ff3437fb -0x7d32a7bff6b3581cb79ba12912e34df15d0f067deaeef602f005eb0877e47f9b -0xa288c5a06f12a07e066c94f2f6279915f1768ef5b1f2ea6d163647b238cfbd0a -0x74f837cf3aea46bd72721e3914a796cec335a3add83cc2ca9273293bfe90dcc0 -0x51433f03f2e82fd41f2c81c161e9d37023d5c8dc3c953057fbca21f86f409c97 -0xf94f0ab373b6e5a59faa61e5760fcf2452503f8cbcc6d709a63e29cc0f1d16bf -0xc1c8bd74eda7023572a09712b1911d882a6ca0afd6dc75bb043904cb42ae71ed -0x60f420491eb568f5d367190a32c9b542eebb475e1e252bfc34a01adf145510e2 -0xbae4bb832d4c3c510da1e307ae83d733a4ef0806ba4970766355002af3b1d2da -0x1829bf633590d462f26cf361742faba6f23165e7f8f633a3c64e9a67e77b1e41 -0xc3d3566da32078043b552234d3faf4be35d01cfd17c83337dc81dc7471956bac -0x0cd3ecb65cf737c7f2df78d7132ba078a791a10bbd244637427d74ed195668f4 -0xd5cfd5f88c73a53a04854320751af34e0f41837849f4126823eb5dbdc8a20d22 -0x4542395a4e28103e503044dc9752c295e46ceb27ac95a3a8789cb3e15b8d78c5 -0x8ab7a2a39017743ff6e4c6ed01d42f04df12088659f5d594e4b35a095b1c3e69 -0x3114b4c3bdbe6d4053378ad03de46e009fca7f1188d4c8ad4934dbfa10f697de -0x18b95af3a2f191058454f27aae2515886d5c44e5af98943d0600a2cba3a2f8d4 -0x53b5feafc426dddc3f61cbafd634d9287eeced7c68b9dc13137dd06ac3520ed3 -0xc363887d77f81e91979cc9db140f2a2b79cb8b91986c99552ca3ad9c5aa93f3e -0x9a9876ff35cd449aded808491693cc30fe9c61fcfe29c191cab5f2b317881560 -0x163708397270a41a3ca8fb7b3cef75f15c478458c84d89823ee48c056014638a -0x042dac5610262da757a5991af0bec8c6fc8902ac8b81b9af785ef5bf149dc329 -0x5a71f55bb36b681acafa5991505b9e2846c2bc597a979d72f0310b97ae62df9f -0x1e52b35a4e826850fe324a4433a019619b0c678aa9a5d1e3ed39a821d6d2e30a -0x2fffe8a80cc4c1aa4eabdc39496ff26a4205d619309ae671ab0959ba991fccd7 -0x75f59fbe3f9537bc2321a52daee1683d9060b54a184e2cd6ad3e0724905d9830 -0xfaa44b32d38e86650567160e308d1ba1e877f46c7106ceaae06a6f65075680d2 -0xc7afda7c6cb5b6eb6b465e68a86b7b0c8a15aeda102120243663d0ae5ff0fb92 -0x3c5128011f83b5e8c0a3f8d1faeb44e061a20a32a9f51c49be0a3377693ceea6 -0xbf06384d75340724cd15c60a099b2a7b621b890e4406a351b574e4e17810329c -0x3e289f1f988e173e64506703ea0d8cf81efffcdbf44098329258153a5149d282 -0x7549e10d95fddb594f4f5e529363405b5e3bddf35b40642100bba419e15c6bfa -0x82252915751007a189a40f59a787c3aa5ba72840cad6e9338df8769bf76646fd -0xd5e010921e2f807aa33b34e687b9ac0fe530fcc670636209e0c6732ac3ac4a6c -0x3efdf566ab1cbb1d0504c3eafb3796b6a3f0c790e2d687c04b84e2c872e59775 -0xb22bf74ee2e947433bb2fc9e26f8838d5f778d17ca9fcf47e0c547d52be1321a -0xe3e278df5a65bea2a6a11a8cb67e7d6adaef79752d2be72f270d5b072d3a3dc9 -0xbf331573d2042711abd932ae9ebcdf8a38e99cd551e308136dda8f295e0307d1 -0x8ea193ec5f2ff140d31e68f783311dc2713b8692839708c1cad9929650ea936b -0xa816d87154041be0d55e1a83b4c690997602f25437ea7ad4b1dcc386c9cdb4d0 -0x7a6f05c183746198f005ec194f214bd62b68c7b9c04f44e3e2e4e7a24b5c4167 -0xccedb27b816c717388457ec710fd1d7b0270fd2ccdc5f3299edba72c3b250bc6 -0xd98dd6b957330dbeecfcec237c16f1aa6961a1b14a12a764c6f19552be4364b8 -0x36011cfa53b0e8f3ea18d171e6d07c81f57c79a275bacb63fc84acc56546271b -0x0fad46fe728c88e98d8ed52550cc6bef421ea5998766f69b0f2415edf17be156 -0xf198bab8ffd0252b3b4ba4b4a95a431fb415a861dba1ac05e5cb36f0612caf1e -0x27fd8b8e9cb7e2e2ca4e8c7aa33eaec77f597d86092d5cd3a4d94b625587468c -0x35a574f5a5c3744102be658162d258a2fb170a7b93ab472265e77a68138ac545 -0x9f6f702330df8f07bcfaf42959259b944e683198b8171f5eb19dadd5149498a6 -0x02dc32aa40aa1dde47d3062d062910131a51421b5a5bda88c9e52f400b931205 -0x1a34e4bc366e125b161ea1e451eb1091eb40690c82553b04c67e7188e1819f20 -0x8b27fd10f3a0298f48112fa676c2a7d5a67d76e34dbedd56d2dc00854c4b84f6 -0x01e5ac2698b5915d2e5e561d98b0cddf5c664bcbea9ef743331caef628563655 -0x883465865a3c50d643b3ba5daa41c5f5eafea9b206dcb18da2b9083c8b25ff83 -0x401d730138c755184196b94b6c066ceddbe5c2c5e14a59bbe73f7a7297ab9d08 -0x0c71cd1d31ad709ba240ae5a8c14554520304d926022c01c3cce2b4cdffbeb81 -0x047dd53a4c910db1fd944c2883f5a12806ceecf18483dd526f103ce562fe3dcc -0xfb13540168c267cc216597f61efd9bc7af0864e8162877ca91ed8bcba26c00e7 -0x77d62c428d04722098b3818eb45d863d23ceb1f6bea2399afa6f18407a19f75c -0x73f87911f3aa52b2e9edc712d9a7d5fc296deb3f7af8ba8d8c8c4c0b90a0d81d -0x62e7276a3db423152b6c527876c8b28659b22996a66ce5a068378c224629959b -0xe478293578ecd1fb0548f1ca4524b85f40c111faa7508cf5803536a18a1ffd32 -0x991051e80759130e5e6d4f0016e5ebfd617894c4107d50e35d6284fd33630d46 -0xf1e1cc812e8e2b9fca9b5d6ca124f5a29f8b95492e7c8d7c7ecfbb524594adcf -0xe15d7c6c301975917486369d80be1b8218440a8306420114bee1f77a5b9ee61b -0xb59bba447beaa7400fd55326bb8a1bfa5c5ed064f3e0d52d18e85092a80b6b5e -0x212101e1f7d01eb65424cd1a206545f1da14526ba12cde36b8a21b06c830548e -0xabdd7798ad5a00bad297f5c2b52bcf25055cdae0e412e9cff4eac4364e232d75 -0x2424e8fd05549bb71e6be4675b346b0aaf620408f642a0810508c0bff46ea26b -0x0de922503311d66b46bb6d4e5132f801c8d36fb906980a7bc59c8b81cc0d8e4d -0xdaa55af7750baede51373fe4c27cfab449b63b6c143092150f2b1b2f9db72e9f -0x5221117d5206aa157bedde4f097580a8e73e43b32a46e5bbbfb9d14f536d63b7 -0xbe909f592a8b4520599e4b12e4f599d3d70d1e93b7147616a1a95a2d8fc95d22 -0xc6b47cc033b76152e44a88896dab94b8fc61debc2a7bed752b4c74a5221b97a7 -0x03a99def0fa30dc8348c745f6bcb905a4455dcf7506f4620f4de36d8916fe8f2 -0xf063ce5e63005e4b1589bac430163f7632a8686622ac9ae1b31ad040a8dd3165 -0x18aeef6b93dbd6eb2f2fba986fbeffce557c45b3eb2d765ae4a5067126fb8086 -0xa9126e02f8c6a0203779286550212a7ea487b06c328d9bea3853224821837c47 -0x1ff6f523e4043873273d043f43e2fc07a25bdd6c1595c1f9b97bbc488c0c6b07 -0x8b9520c42514e487a4be7d97c0c54ac15a643b45f0b2b1abfaeeaf2a7f9488b6 -0x8471ef93b545fb9d12ba034ccab1db508fa1c9b5039a5754e8c083524f20834d -0x0dd1fb336015f85801a92bea2d058399f5b9ad114deaaad0e60f14a1a762c130 -0x481cc318cdd728f0b7c128639a80367d51348c1aff615192a789a63444a5d927 -0x18a3223db5e03d8d95e22caad961fc50d6c94a577d80ee00699e5d6938f50f7c -0xd1a0ca5b3dc5db62e5c69d616881a32a5d1ed65bd9b55667b688bf043585ba62 -0x90b88d146762c2519d574d7ae5fa3e4d3de3eaa234a45c93bc439ea56186e61a -0x7c6afd6ff9a3f98c68e61e85a82295260d2106b9e9e84ac051b24a2c520f8b11 -0xe7300f0402b5db69cc087cbc77d39626acb8219a1322067a0f42659c7119d07a -0xb35810139978970b07ab1a076db0653c93ff2bc11474b4c80afdaae76fa80fc6 -0x5996836ac0c15ca64eeb20e3dd4f66d9989b22bb8a7ff8fe1783234eb31ce160 -0x356f94e8422f1a706d9d157cf5b75e96503114ccb7eba7aaead4982cf1420976 -0xa872d2ba82b74dfe83e47ea2144b6f49dd73639fa020e5fe680ea15be0f6e91d -0x588218b025970db73f2ddd88aa7e865ca1fa99a487a8b22a68f79cf84caa03ee -0xa45340a18339291013d74ff76d9d24dc384ba5a3b65ab16787dfbcd3f2f431fe -0xf43b1ffb39a8ffa6218ad293e1c5d0cdc8de52acb246daebfae410bbf5e01e83 -0xe15b209345773a6676fdb07c6dc48cb7b60be0714306fd0f8e41a36726e5ca28 -0x47d5f01c8af44b95f7a9c451780bbef546b7d5ee06bb06a140c45d90e2488b19 -0xa712b92b9a7acebafcf9c6369ca039ce51dd6fd805caed2090f20bbfc6e64c5e -0xb9343565e376d0ad8216e78002b4624f1311d526a81b478d0381224e2034544a -0x052578ce677739514d37a6fba808ec523ff5213a419374514fc0a8af5dd1a684 -0x25427f7611acaf293100c6f512b601b2aefb9bd52ea4596fbe8054f5935f0d97 -0xd466604e31c8094863861b95e6ea76a699496e694111b1456d9c2b46ceadb93f -0x5c095230028e41ee0361fa5a7e233b6e0672956b016af3f58503a2461fdcf090 -0x1e42b35304ece697b7ee7d92de39b6823a2d03d573d871435e9193ac3bc08273 -0xfcf2a0860fd8ddac0aa013e9f9f0ab6c1dfd2a9d49466a6d6dbd7467f748acdf -0xc4504b1a58a2b47d8eef6c99764c14b2a3bcb350fdb1fffef0a1d9101a03f166 -0x9b6204c01edf0f1db506a35b9a2197852f62630fc9265ff7fb51fb052b6e742b -0xc7f7bab65cc75deaa43e1e60ba7ddc3e419064e31176f604c47f8bd4cb6b04e2 -0x6d80c384ee82af8091d3306766d8101a22b84cc993963abe8f7bccf8f34d503f -0xd8f0ce0811ca797841f5a098762f5f2b3eaa1f1a7a48bff17d76942d438bca46 -0x7b87b785a84e140818b1f668cc72f7167ff106a91af668bf2944ff18618be05f -0x86672995134c619dc91395a47999e271318e41814a36579f5575358955d714ae -0x04311a12d45b3df5fbbf9ded792b3f1bd12b64d952017cbd1d2578aea030c663 -0x9ecefb182877342e8160f9841c1d0feb45169dee915ac3ce6f514a32f24193ad -0x513c37a194294e48b1dad3294e00f2c24ddff7891051109e44a6a24c3cbba83d -0xb7fb4c11dc57c9440d2ca02fce864493d4858cea8e0b1966ac3ea6a0996a9fcc -0x83df7b036a164f8d55351023bfa926a9847c39b122cab89af8fc06b257557d7b -0x8eac103d37499dacee1736ac561a4dc0cd999486855dbb4e5f7bae021414cf66 -0xcee234752bb8a8bb77f909b097c5d941a762a88ec276d5c0f7217480a3c45f33 -0x9ce673cd72b5c6eb52487054d5f67318b559e10fec2b7780b0614997e7aa32e5 -0xee368ebeb888b890dbf6bc88bb9ac28696e276127246fdbdb3623484c78efa34 -0xfdf05fd7030de62ab6fffcf790fa9673aa71ea553c3df88414252ff995320ad9 -0xfa49a5698a3215d0dce04e89af888a2d300ea705798daf90651c0e06e7b23f0b -0x4c59b5c1c4f932d25b0afb6ea151a0519cdb457ca48703a85463b6a5291d5c08 -0xb54e8f291f6f3dbe54728f838e492c1ed4d9aff465c31cd75c0cba73f28a8b8f -0x41e326af7651005631a6136dec39db90ec05831f4c65bf4c1f76cda9cc19894a -0x7f65f95f01c52082ddbb97ace07fe678aa4766206cf03e617db9a2298bc8ee7f -0x004b1d3e88446ca950f79d2bd22198187397c37e09aae54a1ed0ba0afefd3f7f -0x98e1fb238771cda56e88d4758561b13e329c54a33da9f54de18edd9e73c1e967 -0x95a493b89385034bcefd4c8c0a4a1171f00d515b5b46b2286d2260bede75e014 -0x5e6160d128c1544463dfe0f1db29aae32bb9df50bed6a5f204caddb5e9e15303 -0x352ba52456e62f329b9312f4c07729eacacfe4e7dfcf34d71e1c191069fe0346 -0x2b21440b43f94f19284448cb643e36866ec152f6719ebc1f0e2da659daa69d2f -0x5cf84c89a89cc34d12acf08d8db7739167359b6e88dc00c29ac8f98fadff3e8f -0xf3c6f46662fd5554eb356dbdeb1c33d7f1139f928337191e6a9bbe23b7cf22c3 -0x506d3a50d8fad831aed44843daa898a681c723aff833a5073a84d34d3c2dadbf -0x0b76e78756b1b7abeb3c9a0f6fd6e69fcce57d2237e9ded1cb57f5c1fb3cfae4 -0xdd801d13c0be6ad5b9bde0c9696c043b0bb8fe9d757405260f8a77331e7b0fbb -0x3e04cfb3e52add4d3bb14ec58762e1f687c1551cf3630d6495bd93c9e88a06dc -0xabf096133efe4c6700823483161dbf5e42a427de8386d20bc7fdc15fb6f1faf7 -0xd7f82735fba3fc9ccbcf531e0a2669a5601c3c71d2724ad29c4d4db0fa24be9c -0x24c5ab30cd5922cb92bec69c01a9642450999f9781f7c9a7e382bad704621887 -0xd6dcbde3841d52eea150040f2cc949f87e8683e66d236fd6a7b41afa2c58c615 -0xd08586f30a8dab8d8d285f358d8382b8d5802fb9355c2b95b11f8db976bcf60f -0xc00e6931ffed06c09f70c89e72562066a6d41451d1e19b67a7d8147ffc92e50b -0xd27a8c0c9947e59cb5eb030fc8edb7deea28a280e74a90550d103c46b00fb1d6 -0xd2915a518736f10f5be365979eb0cc8d2f48916cee92aeddb188a21a8e6f3b95 -0xbecb820fe701ff60950a465668ffd19de622150512a0b4ef0f4590806f05a998 -0x17576561a4d00fe1317abb4ea6faef953793e57b199294e04c2036331cc61b4d -0x92c122711db3738957a7068d04619c7f93f0160d2b4791610d6c4d9da9e3fc7d -0x5bd116980ea2c1bd8e43bb73c8d064776c5e1465a41b37feac43566197078b4c -0xe46322921d042d333393b612d966839e6fb490dcf88875c22bfb0320a789382f -0xd42378c8c21a37a679c0e2b290fb33730495384f2d7f73bf1f3ea770850994c1 -0x8a0f5f7f75cb671ea2d6c73ed720b9bac6d64c746a391e29e509f2fccd4eebfc -0xe7be05fcce6b3a4e7b816c85dd4d21fecda73ca7316127d57c4a6469d51835ac -0xe4e88448150027fef68a5e6283424235b8ff6234a8d0d7899747a8f867f9ca70 -0xefef90d2abb89c7693c58f29258412dec1959112ececbc76ab5222e029282d51 -0xb504fb26a7a942924343d8a1e42978403c6f1db58463a3910088f616b22ea68f -0x681a6aaa7386e34f332357805aa7bf1797b0cc2127f8fab71fd82aeb1390c9c3 -0x81bb424ae61c4cae5d84f4c91612edbb14c0c1b43deea562220a05be890ef2e1 -0xba3553dd6286d7a956f57a98a21c110187a6c44ee0f4c2ad8548fdfe040bb058 -0x40df751dee9c7b5b4afd67cea80f07b6142ada689bb92b25c2908607793e2fc9 -0x1ed01ad01847185c62d3b25741b08dcbc9f73a53e5f75d43002ec6f328400dbd -0xe43913766126a40d310fba0fbfc28898ee669bc0aad017ee858787ac59d8efa5 -0x14c61d6e89fc391e44bf414249940e73b4a71d86cabcacb9e421ee50c0b5c16e -0xba25be9a766fa4643aae45125870bbe685e2ba7f04ddaa80c9c489af413aeeda -0x191c86a2c7beb323023c4a9d2b5f42c81bb80685068b4a7dfdfe2b2d24dfb87a -0x54a1b27d4ac7596d5dfba143fb5c974039f5a16c13f730a281b6da0c751e1e59 -0xb45995b39006e2765aa2749f52ccdd9956b6446d62c2526b97a7152577313c39 -0x32dd179d07991039eb1f6758b6f6415ea8f68b41c7b4cec4eb8f3ec98583fe31 -0x5e1439d333534e0cdde9f7a4fdabe091ea955ec493881a4317aafac360640834 -0x0fb5e4eabe3114b28169a419cacf8278accac4a24357cc90fbb610bbe597645c -0xd098e891f966f490da41e3978f274c3009d32281f9c5d29931bbada33d056f9c -0x7ee8e701e8777eda46ceefa60fd2805b87f8f8d36d401f8e6b89283eacbb8c29 -0x72f72f72d8a97ac9f02f6b927df5392956904dc0c936bea4e5dc85ba6e48af04 -0x060baa980c7a878c54eb0b5002152f199d6e33aeb981e4a7241bf8775fb6b912 -0x812d4d9a961a6592f5915896e88144f642630e9c83473a9afd0ff9068491e22a -0x5edb4de09dacee04818ccbf97f1fd86ba4be36a07354ce8d3d98eee1f573f12e -0xb026327794928614608f5252615ee8ae67d830be3fc819a35b7a511e20aa14b8 -0x88587afb181d68a9f45f8c3b31f1d5c98f50e2faa3377bcf5d3ab364deed1619 -0x6ca32f235040c189295dc562f5e586b39e2363ebc6012a20a759a856fbb0bbb4 -0x0c0b2c12acb9b0b4cded64882aefc7c076be76f83234f11b81b89ee2add71258 -0xa121ec6d3f7a415af36f89fc92f910f822bb766f06b305aa5bb21631341cb48d -0x79da7bb9d690c3c0d27f71bfb89721129b4997fa8332cd05e72d41470dd1577f -0x99d954b585a68f0483e491f6ca5879ba565f191284ace69fc86b6d1e909f1cf6 -0x9949c120f936dde9b10163319633acaf701754e0aef91bade5b87663c59c7410 -0xfc2aafe987e8b0c49446ca1fdcd60c8869dabe1945fa3b580b36fe37181a8390 -0x4b7dde2ecce151efaf43483502aed00fd19ccd0f1738074e27e30113cc5a96e9 -0xfdb119d83bd9b7921a72d04126dde8985374ee0845e58a5936231c93366e7b18 -0x0998e51782665bd1c16ae96f5758f0e41a42f54f39cef9edc43482dcaa7fbae3 -0x1c093ed9c340799535db040dc959ffed62ec1986abe683c54c5bec920ef990ff -0xd91f38a3d60f178d8fe941dff2146a0469b8d8f3a753bda43122e15c019e922a -0xe4d89a75296594501386859b07c6e09d9652235de36af2666aa01a17d53764e9 -0xdd0f5b31589378f4542862083316a57e232c81bce845435885a88d353105eb04 -0x876350e01fe43a5cd47006bd5e71da7b1d693917ebc2d678f96abe454eae8c4e -0x14dc1fcae3aeba768c774edb43805374f5b5a4941ffc9cfadb97656f12d7c023 -0xab3ff09cd9e6506bd66f40beff024a943359f3ff7aa876360f2f74abcb70edcf -0x2a408985cbff67eb23e28317662f520dd158642726f30572b107ab5e1c659547 -0x2b810b1543e8f3a10e10a9519363ebe24d445e1f19c8c3a2a632f1e98c8a1670 -0xe96abf988dfa0510f4a332433e83572a772270a71549aafa4ab20d2c8fca8ea3 -0x0f136e3deb9dc363efca69c1e394549e6cb96496b4754c7d5327f750971130e3 -0x8f3ef879c491c30f0a972bc4f9232d48c26ff8f1fec75dc178e03e254434a309 -0x961276aa9800ea55eadeb2f2a1468375dacb56e987f5a3f93ee6236176e68f7a -0x01008949b7d5cdea31d5556958c0752bbbf2cf7d54833f5e6c5e37640e535381 -0x56f94fdea5d3a6b2f9ca8eb1e356ff98cc55ccb5b0ff73c66a75a78e15d2f0e7 -0x1fb16279ea426a13e5b7575667cc8aa437ea4e4aa7f3e4d2815fdb858ecc180a -0xea11bb68598e75a286592273f26ea3279acafcb437bcb83d36473bb3cc2d7be9 -0x2dc4019083e1e995ad62c35ac931e66bcf427f430ca365838a84e716e2f5550e -0x3f745d1f0d21e90d5bab0f03eddd51da7d04586092f97473d62918ecc7a6403a -0xa0d6c580e61ca4c434f6f63e3fcadf4be1c1cec88b659dcab9c6b1905aab201a -0x6d380ff17a264dfc71fdad154d420359068ec167ad23d801172c23e07b5a57c4 -0x4d2b3c0d741d4050cef8029eea4c07e34f13617e7900a4d07d221b6caeaa68d8 -0x7f45731d2e49d8f4ff16853b1f27b696b4e401796cf185b2cb70e13380955277 -0x5a17172ccf75fc7278b73e8e4dacdd9c02acc5a7f9405b67af951f9e632f0d14 -0x7be9505f9fd4a110b229c30fff7365544fd985826b165757b6a3958c6b63ff13 -0x843ea101bc6df9ef04b0705560efbfb9e0e3c0e0f7abbd52115b96f0b5056ff7 -0x533f3ed34c1b0f1222971bfdc9fbcce3be5c3b6d1a9bb98c41a10509be7b63c7 -0x134ec18ae93fbab2828de4c91c8a3322b2a14f899fb7d324c9345155ee373806 -0xb964848ffa8c72cc2a28baa731661b1c827f8ceb0ba9f6d41f81a0a3a7b153aa -0x2e53e1e7fe7940334ab7c62c37ab7c484f0e03c4e0bf16feb6141e4cbf351f0a -0xab8b475af83f084a1749bd39f05ed3c0ddc1d497e006b027da95a9df03eb2a33 -0xba13f2dae76fa726c1e366d812ebaeb7a978897ad7a53c3c5f4040ae3467ec2d -0x1fbb4cc683d04bfd53a597848305e4ff5e347589ed4e324c7272f61aecd43c76 -0xda8b24e47b655c0c4879eac4c08f5c6dba52259158abb3924cf5b200e9f34339 -0x44ced781f909645f21d3f1e278c933c4d10b80f9f0901296356af062ba85d54b -0x79f5ca3ea69762a7a44f387beca43b29e6e6b3a9149898cbae8f392665f0d390 -0x619b5e3b2f6fc82ab0630f5adf942c285f9d0e4b169aa4a09b9c0704165d8fe7 -0x23b9eb4fbef5100a4ac58460e0f627a4dccb8fa7a06ffda0d7613e309f3247a4 -0xf697d14de1fa27dee5a11175cc992041a609a8c735537d0a693e9bdcdc510d12 -0xb03edbcf098660fa8e4bf29d050688f710949dcff3b5745a9f9fd4c93e21a495 -0xdc37eae95e0deecb9789d76eeee406cb2f723d1cdbf4b2a10b7bdbd20f8a9cf7 -0x263690ece3d92f5e0ee564d9de81af0962a60e9a4c8675ce7bd45c4c85f024c1 -0x8d9d72b695d7c29b172ed2f2e2e5c9fdc426305285635c966ac18df60ef0b626 -0x54c70b97f85d6743d1c09abe841521e2e8b5e0b617a3f62fdb505d1931fc49db -0x417630a577e0c3c70c033c219f1659877a7dce462923dc34423adbc62a8ef46c -0x82503533daf1deba8cf072dc202b61ddec596444f3f5f758b7a46564d444a515 -0x6c399696135dc3399d8467bf4981b085f6bcd92345f9812d8630e262841ed374 -0xc34a7f683b232c6b12c35f34a01e1c5b6e5eb8bcf1618009c77745ad94673323 -0xfc81a1f81c49833d9f02e3540f2f16a6f35c8a42ad0c77d4a10807594c07f64f -0x68dc13615d321c1ba4d7060651fd1eafb43b619bef5989fa57284b8446e2d29b -0x06e81a06541eb6cf60e9aed0c399144ef2854166185e2519d603e091366b77d1 -0x816c5cfa0ff2d2530feb9f620e2c5d27683e7221448fc1efbc3dc60cd064712f -0x11d1cc418250c3f09005ff4f36766e023273a01b1c08c2149cd998d88a851843 -0xd68d5aaa262c25abe9cbd3ed966e5a382cf1963bb3fc4bc6133067d6c9318bcf -0x3d4b8ca59c2456490795987dafacedf8d9efa50957f01ad96c5082e7baff8489 -0x59a3deb269d0b9d9b1030a0ba32ac5d005cdaa0dd589cb41c3073a346181c247 -0xafcc20ccdb8287746eaf31abd76fd2dbe0432d545995c08d3b4994e6bea8014f -0xd7bb5291d3e543db1a44cb7097dd08cce3e4611803a9e6cffdabdc09e2b4bc09 -0xa61c0275ca2287694e04eb87413a045947aeee839948fd9cd46408283cd3f3af -0x26fddd5545cfc3567cdbc31d4331a92e0791579e81dca08715d72336e37fc9e5 -0x3edd1fdacb4064312db4c789a9cef2bc05c66548abc817bc92d442f8f2c48b04 -0x085c29bb5a92224ba7e66a7b8be49b9e40e1c423bb26f8ed5b09a79684139cd4 -0x6f79d15ddc123a6712725988c63305151073362db894d6ca4282fd2f845cde0b -0x8222a6f725d947c3d11efc5f9521a0387a4fb5709a426c200ac70f769199b42f -0x3b0e6131ec90d6e5f9bbe8af84a1b28bfb20ecb0551da44de63ebdde322a10a6 -0xe3176e35f17a6463383860801f1c7371163d7020902dbf8170af0f3cbdf214b6 -0xbc51e6ad006a18f678f75ce5f1e4363e0d1f5dbf80aa32ed412f47e2d8395a87 -0x6a75a56aeb3bff1f45456d4f45db5d6095dbf9cab4556558f32018d02eedd5be -0x25bc277cfa5718c8910ec4ec9a7d7a901311b9590eda9e273b47e4d238d8465b -0x8c9a9f09c63acf16a96cfe0f066e6050ebcda94f4dc4ce1f2805c45211ec0752 -0xc58293d8ca1a94e37e618cf68bd8db8d996ba45c7e9d4261346c5a121f522d64 -0xdd4d3794eb36b44d2e9546ed8beb020f52a6414741251fe25d8992ffa2acc8bc -0x9453bc6e11cb3c52896f2e81b2dae6c0d0b5f610c55be5e78f8870ee483483bd -0x695b3c26cbb79270b38ecb11714db8c5f7308b7a89547bf77b1a7f5d581c2582 -0x84b4a7b1ab7930ce3c02e01c097e173afe16dafffc93565fdf656aaeefed2d06 -0x485d91459bb2765ecf24e92693939bad4a50582773a96c5831803a195b62d327 -0xcd5f7767584ecdfdab59148f63ba3025942db2767fc0e3e56ea375442102d315 -0xb7addf55dab38e32b50305fbe7b046cc2c6249e54022a0930c89801834955ed4 -0x19feb52ea02bcbdf9a48bda98981eac8cd464865cf06c6a72cf46c6931dec4fd -0x7ed4d02c04fd598d1723ddbaf8d4d0d93e0eca66a30c84be38c36bd8b906cc71 -0x0bcc675b35fd384f6c94f852c9fdf0c3cc156b8a48af2083554de32f3e5dbe62 -0xccab112d590cd3f4158df14ae70d2008eb368adb613ae9ea225e3804438f6ddf -0x4dd02340b08ea4c068b77a18dd925305eee67f392862bf7dcad7aa05137e8913 -0x657f779855b70239580113caa6a8141555bcbe3e4c3cfa5b120a8d222a633a1c -0x4fefa152005231aee6daa69ee18ddb8a87f1fe324164bd6d1c6618fa44a61a38 -0x4c39f48652b9ed6d02ff7669d49c5f61071d78df439d3fa56ecc5355b6fa36cf -0xe748970dcf9b57a0b473a04fabf594610efef7c60ecdcfab1af56c7ecc9a135e -0x7124400610a8af925bc164916b864765d38f9ea2747d3049def366918dddcf4d -0x393e27dbae8194bb5562ed8e1b0adeb032fd316ad8dd84072b52551fed5cf813 -0xb84d78038c2133d857271e04767d30c7f9fe23bcca96a67b7cf6f04bbdffbf21 -0x7148527ee329a022fd52584f0d28044c7f7e699942b127adeee5ed655e9c770b -0xe3234f1463cffba5f67128c0fa8001624b3c740890054989b0775cf70bf58e8f -0xc252e68377b3d153b87d8e4276cc2541233db15f8659a7251d2cbb5196dc7641 -0xd3afaf71bf1f7be78e47b90bdcf279f25c697d1483ae86451f1203f45961f662 -0x2d75f8052fdbd53fc0138321ea7886f4e9a029679251ac4f2c5b1af9a97915c2 -0x32c6a1441c220dbd74f138f180b4f190688a02b7a659e2124228520ee7a02eeb -0xde50ef886e4d346976bfa4dddde6bced4a3fd961a477478048c36422a100f7b3 -0x9c1b407c3610215afeb2ed9074f9c62641df11dc66fa7099376432e29a21d207 -0xc585d125e9bccb5125da4fbdb2021decbdca81ce4308e077dc5533030dfc7ac8 -0x475ef35307d51bfc93a1516e61ef693f19c802eab98df4a03de17d99077765f9 -0xeca42f3128130c63a7af54d3917eead3d4cf2f73afef1c3e72680409f9c81ed2 -0x44a71ebe7843025806b87be43a7ca930b753b271c8f2a27ede9bc20d22b890af -0x89ca3a36447e76b343644edfa0fd8cd8c6855e0d76f34f77ecd16a1d2eef724d -0xb6950693353647094d82f9ced89f1248e92ad075b4d9a1f7dc7addb9f6999a37 -0xf5b252b10b3db050c4120e316c95516e4a42e85b1cb5f1f44216d3249890f95c -0x67abe3a6fc561528fa1bd21bd780deeaa28f861408961c997fa62fc2491c75c4 -0x22b9940e123a926a57b1c291fd36024303eeea1ea995459b63263839346334f1 -0x2bb0617beac69ed6059426f4dc9beadbb22c0eafe818f5c81b70613d90659496 -0x795662710110ec418cb460c626834095086975dd356c53ae222c5e36a0b7e9b8 -0x3d133f85b31ebbc526363f410feabc2554361e42c9955db82b4871cd89ac3cec -0xde0421f56ba5e81e1e8143cdd33b31355eab930058478bd71c487667a6d9e9ee -0x46d832585bae00b97076b0778159a96f8727a9e509a8367ee49e13268072c850 -0xad68a658bae0e10e30aa718cf5c4c71d253d1ca5f7a1a1a937df1d1404f9a044 -0xccaa93b52ef15d5d5f37b11f12a205fe2fbae747c80790966d9bd2f4d0e3dcf3 -0x12645dad0ec373eea60f9dbc452021eed0434677b51c048a998d703944b05f6e -0x2e7734911afbe99202a2c4b91af16b465192ed5aaddf5d3e141005a9b87c2f93 -0x54672d4926ca5ee633ba50fa06d0d4a825d7c7247655f277ed215f86c8855b5a -0x3710f20bbde570207c7fd063c581162296d41002e164ff9d8c13483c5540affa -0xe6d3cf560d56c39a9672f6d7d9c2bacbfa89389005c33e9bcce8bf70fbdc3394 -0x3cb0584007cae78ce5fd24a3c30f3d5d5acaaedabd1f2a3581a8c3bc8c126b10 -0x8b6a8dc3d75b76db446b24c624f4f60a35ca840c05bc6d0d8d42bba8a2a2a61a -0x393e5e2a594d474fe4677e27f9567e58ede875dd5530ee3f574690fd9f0ba3f1 -0x7cad08750b6704664a1324d4234d90ddb4c1d91944ae3158b03fbc2ca1cadcbf -0x6895836f920fc5e67ebb1f2464e597ac3638e5d61e8950537ce63b1518cbabe9 -0x725e04ce0804e0487f83a0af292c3599e8898c72b1ff84796d1168a8803d4caf -0x7588eb5e0a7b7ad7357db7d19ae378fe533b71cfae01677925a5d483f9ae756f -0x0a0d75f60f9b8e9b49006fb2d7263280b6ec156148322d0978f3af07cbef8f67 -0x3501c21b5e7cf175a88cbec53a5eb119df5b370ff4bfe4ec86654a7ef7b0181f -0x55218a1275643079353cf84c29ad0456664178570c7ec887717ee40463215644 -0xb322fdb711840e69b9bf77f95792a52151e79f98c10e1c5524ccde409f8eca44 -0x204907f9f63994b3594ed26aab9f4e75d8caa1777e280657cb0d80b3f6113365 -0x9987d092a102e87cd936ef53bced801b8aab5f60a724d99553cffdf675d43f85 -0x6b554870763c8ae9b4923e99aa11e7721953cc6f13c3e0031d62a5bc8a0d7d75 -0x38898b33c6268d5fc8ee76cd11a5a7e8e8131ce2a4b571214aa6f8fbe8cc85cd -0x95afc1f275f9789d76b29b15013561ebefffae8dfe7396b857dca7e039774c96 -0x5171ec33d42288fcef76c8988572b534738e35a2cbbc335076da1405d85fb379 -0x8d420e79cd9073b0ff5f6951581e4e0464a87ef217c8fd583738d04a1d65bca4 -0x218e02f04470af148f59a8c6bc8a032a133648ad686fb045e27425aeb1b4ed92 -0x3c9569495feb476d5187828cb2e72a3d9704345984d2c58b47c6efc26c225b57 -0x3875ea0a93007ff4b731abab8159c948d602655c06c1faec108de2264e1120cd -0x1e8d1159cc4a2eae25b5d5f3a33706df0673712dbeb7c51e6d9b96bbaa59e428 -0x70ce9a95ca2125a590c0b13bfcc208d222d216ddc5d17f9b1116d42ccf6fa0e8 -0x5925f6f977a7041b180d67879e4f8dc20b976d87227863d761e19ac5dfc4bc24 -0x609d98dbb0a4b16adfafe84221a2c25e3cfb303bcfecb207601b279f70d9956d -0x00c0a18582fc1aa30a28fcb073c8c450f5802ce2c08c68a2bf9521f3825f99e8 -0xae188bd0a89f2d0252de82fb8d0a91542cca49f1f3e80078b7e4f33739c3e493 -0xd1798fa81aab9a5c06388a429e13097ef22954c2deb1311893b048e7a1477f04 -0x32f4ae1225c860a47a52892311730f5c861132ea43b7d4464be1936fc428148d -0x19504fbf41fcce2ab1c44e06699cecfe81771bcc4901b9e93bcdfe84fa511c95 -0x89526d02734a37289eb134016af6f5e521c231d585008cc0b8c5c9aad28c1674 -0xa56442cc25c35a543ae456bbad1c6f6b1e48876d936c6962320a373b0e755834 -0xa2d7247d234ec7ca236bde560de1399f9435df40269da823a1316cb22ad24895 -0x4ab20224106e979b946df7373be75b7898598e99168656d25c5f7900ff50a45a -0xe17aeda384ad18e57cf37e786b9bb45f3063635ca4077ebd063e1030adddf487 -0xab8a08a864e0b10be9c04b82cb2a2fcb20f94b4c6a6cfe5e06c510b81975c003 -0xdd00af3adaef8953b6fdfce3276e00e95c36e350f0803ed8667ca8b9e97e361d -0xd31f6b91f0548fd670dcdf66bd6005e811e52b653d1e8d3080c162efad4d9411 -0x5e899dccd64268347d024749a7a69f58d2194692cfe470332c370f1cf50bb02f -0xa82c3d74743df54b58bae7f1a4de5b02a39f5297f00a392d6e5f6cc4b4bb5974 -0x96351a3c8e74491576e4e110666eb2001a33b0bf804246e2d5889d3f2a6acc71 -0x284fd29eb38437d27040873c5fafb4bfd400c3348b19bc61557206581f884aec -0x8b726810c1b476c21b74616d54382b77d356039b6aa9fb952643ef160eb8d5a9 -0xc09b24992b25de392867cf9464a9237eb064cf65b9491b84a151765842bd5b1e -0x2eba4ca919f67729017b35946ae3b05516e344830f6375602c1b12060689d302 -0x42b04cd4f9fcf305f0b22b28cb46dbf8b89f426724e34aa0b09606b436e7a6c9 -0xef72031de7fb1517a690a2f5b7f81e1cd0b327f4a7c0a6fa9d52b10f7f2139bd -0x71576d8d1bea16ebb784dbc5303058aac08ba0430f4e863135cf9bf35d27dc39 -0x308439f23e13dce24c0b160fb32990f7f249ef32d5e4f0ac073f71962f3d335f -0xbfe17021014539b6944e6e459f384a60ca1789533cc7da64c59d24c229f63204 -0xf6b80d05f3d1f11e9e6eaf00ef5cf2e6489e32c231697f8c1250e1185f28a0b4 -0x9a238295021cfa53206a94be8e73b1471a3569150352241c6f97f45bfbfdaa01 -0xfaab1a136ed32f24ed1ccc0aee0a6619af0e8d00627eabd1457ba5f9ef4ac626 -0xf9e4b74de87288327de8f165e3ee72f9f0fe972901cb016eab72fee66ac38b69 -0xebd03e969d3185bb820c7c2b761c39807957ac422670161b58ed498c3c3ef3df -0x6e7e7fef9b50335e3fb19406ac41e0dfe4fc00ffd357dbf7744e70aa08b00497 -0xd6a474d5c767f1ded91d308171ed1685513b5bd9a4b6aea456a70acd5a164ea5 -0xde3a409f2398fadc57c9145fd57e9b5a4465822e79c3add0108f9151260efa66 -0x9485f368db040499495956cacd62250de32d35f4245645a694f648c9f8c0fce8 -0x0d258e4365a0ab0061cfc5c313d6faefb6c4d36a16af6edb627926c3d16c092b -0xb699f7fe84646e79e37617f1e111286ce14f15a022a736c2d22b7bc8dc7a87b0 -0x5526acd8e731284645d2d4f6111c4e16fc227cda03b87eb0ac1d642563ef18c8 -0x7e92b39082f33b346ce9118034881b4ade9b9fd13ee2b847a2f865bf32d8d201 -0xd7661bf20dd2cc8dcee8d82c9e3ee5c618afccf62aec3610612df97cfe367cf0 -0x074f1154a2730d4869f24cc4b564018573eaaec943947849ead4a1443d8a38c0 -0x125d72c7a21721f8f736f51a2ef725faef7b8d46e685c8416dd44b6bdbd58497 -0xffa352ac6ebf3edac1ba519f2b88d7c3be8a684bd34826cb0a345c630abef2d6 -0x2a7e9b6139cdc8de4a4e7f30f3748473488fbe31edc5aa0fd12d5b93638c38b5 -0xeb4f6013c6b958b6ba7807241eb158abb831f94d0a1a08e7b7becd8164665c1f -0x52649a31c67b70228cd8db8fac669bc6dc27d556d268bb0cc1a6b0092cc97c2e -0xe2f7399ed2b9c847f320395324cb99fd360e1a3cc67e082e50713506f04dd1dd -0x998c1a99a698cf28bf960d7e95c248ee6ec14e9f96a0b7430c95fd4accc0ecd6 -0xd4558de8e582de8073bb7b19038c9dc9352941941aedd3e14dcc7638320403af -0xb91999996176f198eb23ebc9bbe76f18df664b2af05c169d4c888ef52c236a5b -0x296b7b5bfd9d827af31a1a77f08e9bfa1076595b13c9384c2c0d65076a95c33a -0x68cfe955ecf4c1d3f2901fef0eb2eadb23b8cd317276c750b8cd0d201f7e9589 -0xfcc6960e548091c5e4b41310018153aca35b200a07830f5480d2c9823d313996 -0x031f31a80301a125b9e7acc52214b0e350d99d12bc9cb04929b161a8d8b5b664 -0xa26e58daf445393ffcfbff6f0a39650889be7b0a87cd3c12ecc5ee58a6956135 -0x51dcef2c18c82e2b99534ef1eb93ead6610d73c03678eca907f061a0b4df5e53 -0x826de2af910cdbf234ae8be4bd9c30c529487b9f25c1d729f6021190f31bdcc6 -0xe73831eed8853b0ea31a057e65f3c53882953fa56198bf4960893342defa9d90 -0x75a2af1a2c685122c26ae1ae62455427ca7c656c6b2263fade5954a6aa3c1576 -0x398dabfd1e32c902acaa922fdf418c388a6b0d4d3210146927ee71c0e729836c -0x5c1e26c2c8077de14a966afcd7457854c367ac3c73b182bde3e966f3f6ace92f -0x53e2a894f47416221b3c6f86f281ac009105ad1cb58bfea72496f5deb38aff1e -0x2c2be8ab4f22eee48fa9ad3640e053fbedff85ec1babf5e7bcbbd7b3be1e72d2 -0xef55e465b86d7149ce3bc2c2d44a9ad016c024d48af53852863bb413b082c3b6 -0x3c66e99903aea26497c118f7ae469229e23520655ba638accbcf122d07487ebb -0x932f6046ee499bcafd7518fbfa4fd4ea91fa1fe787209f3ccfadb1e04b747eb1 -0x40f469d391a96b4d6fb91cc8d58c4364be1ebbf1e49d528fddbfded1941bb052 -0xcc649dee05133e4e91502058e37e021ec7f84cb1e79c2d4d27e009a51ba3b64e -0x561a18810027966b950e722b25bd4f3770ab7bcb035237cd89031b3e823e3165 -0xfd5bdc75a01380f8671434282837e2a55c22b4e85c7effae631940c7ace55364 -0xa43b2fa228031656eb38e72f38a99e47564667dbf7f2147630978bc9c110d3c1 -0x15e793f4fb39cf8ae0f3820928c457af94cce7665dd0000110a1baf2deec23cb -0xe21514f423411913839d2dad92926b565104dcd69926dff28138dca7c77b8421 -0xe6094276d6de613ff7e7714bac03e2bdf10f28caf5e83a3ed936d107c0071aba -0x1b0dff7177cb91dbc9bd711539b132b3db2a3a3ad41788b3d05f315138875a28 -0xde1cfb2a3c5c223dfc13654c013280c0865c72b4989a5c2a891d4564e434473b -0xa5d148bb93e3c03e94128493eb560fb5450856ca14b16ddac632b8f19b9dcb28 -0xb032c1cc92d9d6360803058e61860fcd0a145050701501cc78faaef7599e21cb -0xe948c5522dfa48956161dc856066aec2bd19b33492a8a4da0a947353f08d0753 -0x45a04628424c3252260ae0267796ed71bf23b718e01adafe175233cbad80e804 -0xfc4dc99ac02137d1e09ce607465e862a962a710f1108bf3cbf981327b19bdd2e -0x514dba3432cb35815c35fff5dc26dff1d97d7983eba2bd8564e3247bf455ccb0 -0x715379c3404b8fda2ec20a2ff619c7642652db4522416dd83af9dbbaaee2494c -0x335b70c39034765c979aaede0898c12225ac62776dbcfedea02ef1f1b4644afa -0x9a38e485317ae64b3cfcad82a170349b1b9cd578351262d5f0aed5c9f41ed534 -0x92e21bb83da38c8a67cf7975bd984ec9fe9f85e4b46eabc1f0f2f5f5303e4a16 -0xa4123412ad2f5d958fe3d465d4af2859a8e2e79c4326cf2cd48aa4f06d9d4c11 -0xbc1f8aedb0ca9c4b6a78183cbe4132ec16a564a54fbc5d228b4318c2a52b7ee6 -0x5e14d287de017fcc08c3e88b18c3a36588fb159cdd381756f3fd7bcfdd12aa37 -0xb1165d8f5f3dad68f4936968a855813f501096c8995b508c1dcf4185f81e328f -0x28b063d816db0bae940c9cd4a73b3b10f23d98fd672d380c188bcbc762cb6281 -0x1df133c41403f86c059eecfd5096dd49639dc5a1bbe01146037eb695f24e2202 -0x9e233bfaaa75336c0c1f74edfaa1c48140fb5270ce8c35613351cbd9372606b8 -0xdb2cbd0205a011d31b832116817e853eb2f209167686724350b07600920322d4 -0x823bd9dbbcc78253bbeaefffb241daddd827644dc346a6d3d301e84765df526d -0xf0f0b30f0e62eaea8419a932466de8564fd15fc82d68543f97cc7b085b16db01 -0x1ee20bea5902dc915079dcf77dc41591a5807bd47db388630832e91e9a424d7e -0x8ca2040944d45a4099486ced36d2529cc8c5e6871f04f0201afd5c24d571bfd4 -0xca1f937469c33074b54a614aae56af7c918cc94ac83fc92bef289ed332cf7e9b -0x05fb98375403fac74ea63effef36fa7b68c0ad3750d53c8336413c489159bb73 -0x9991a0b6d0e8b6abd1df1884d4b1b47f3ac10c046e08859292a075952c6868ae -0xdff2885d7ec57f06884b36ddaac3aebf52696c1c59f66dba90846930f76cd501 -0xda3cd663160e36b725a45f4edbaed0237b43160a5bedf0f39f47f90979be3c6c -0x4614cf8e3fbf92a297e9b8700cb562ba2add69a34ad876edf44df76ec9323946 -0x76ba601c3a135f35ae1b727a10ecdf13e0e30c50ccaad596e75c80e218555e35 -0xed7f4440bdf608513adb9f234bb40744862df769b1a5f1aadc2636da76bf92a4 -0x2513ed7e43760737b7dd04651bbe69a9b86cdcef465237e47accc0745e591d10 -0x457287d6934b2be6fdc61e19940c0bba356c7942b73e33aacf99bd06a871fb85 -0xfbbe64c498fbe9d4094715d8929caf495520237ec9677b5d92ff733d155e167c -0x86514f0d9c4d7c89d0285438f59c2b813f65f936a313463792913039f613b27a -0xee7fbfbfd02f21ef37661c3b2ffed933bdc76d0be219cd4b66bf6d044379a0b0 -0xedba0afc8a589e7ab7d7c9a2e268c0f74f9bdffb6ddfa0eb357ff63e90d5938c -0x813f283a598fb4e01170e008d3ccd86e64457b8ced6c9b6de3be2799cbdd1faf -0x2ab22ec0fcff4315505746b53443cba2cc62d27f30b9e052ea7e5944cb4ee342 -0x23cada280fb397337d58f7c0e7647a3b9616abe4dbba79c99ceab667df189a16 -0xd8e69f5e79f1cab82601c8d0416f74e48493607d19519e5f6e2d1a0869d54764 -0xbe8221f34508047a9b4b1872e00a8337146596923090fbd1abe1a7dca4a5dfbf -0xeb8ff968e4ca274a103e2b98de024edfb0a863f1fb6a3192338c3314ee3d90dd -0xe30554d6ff8477a4e676e6109be6d68e8b7074cb704ad6fe6466a14763f0b7f8 -0x49d2cb9350dde8629da7bd88a77287d9b1fe43f9841a38a4ec0ce3d64e260c58 -0x529762282d430f1d7dcd46f5a314f92e615888411a18c5e32e258a9d91195307 -0x00460388e06b1bea4592569a378b20b27a19289e431231beebd70e780e31c8cd -0x1b4f143937e1fafa9269e81fb2cd5685be00aa21d0579bf9aef3675aaaa4351b -0x6f8fe193bfd5e2f7c25e4c8ed5eb850b4a14a3adbe62226aa69334f7b2cf264e -0x54048013173609cdaeb9b4d03cc246f5fe01e465910d49d25298734248f5a132 -0xc41417a60b262d7a5b5c39bc812a5b61d7bd2a2f696a1d59caf8e98ce4673c5b -0x34bc750e615218755cbab72e96b568e15eaeb62acc979378f038e23bee83a4fd -0x423a5b204b992868dceaa237f78883e852bc587b90b9528208c47dd0ebff122a -0x22e514becd6f7679399204669139025f78c198ed1c87a86186f1008b06cbade1 -0x0ba410f9d2e6c0e0b0e376aca8f8163bc26901e15069006722ca1c42558ccfac -0xb2506bd59b6a9aa2ba17a48fc0baac22c5d6a77f1db07b4ac271a2eaa2bc6c5e -0xaedc5d33ede3fe56c7141cd1d3a6fe8099dcd5e6c9330a32e03ee12f791812ea -0x23d5f5b4a7b99f888be6c2da5277c3c27e83c1f2162157162620c15b46ff18c2 -0xd23f9ccaae6fb14805fc6addc934db6fcfd61fcc866254b218287b66d5a1e23a -0x2f1a259ad0e9127df6a93c164185eb8b054cfeb2914686b3a54ccbf8bbf5caa4 -0x7951801d759a7654ea75cccd5898b6301264b4712401e236f9c0175c1eff0e4e -0x4551a484ced5173fadb6bd347630ffa601e1668d280beef94f180bcf1a0d25ae -0x0e6bc31503d6fc1ba80437cd934e3bd0ca77aa00ccac0844a3b594f25f540e2b -0x80e80ef97c85b654c62f846292a966a16ef6cd87209f7b2386c7f5bd4c0a79e1 -0xa0cea3c275c47926a858736b3b4995346eeee370456fdc1a471117d764b8415a -0x441c68616e07a2c60216f99dc682ea678963748e6b263fd295f3858863f8dab0 -0x7ad1517e167861e377659f6facd29b94fda2d55f69855a447c3bec50d93027ce -0x8b688d8bb20f2aa0783272a77dea4b0df57667d10828112728b25dea54fa80c2 -0x93fb4dad1ee6def202278d5d407f4847e4cf66d71ec3c85b5226255810455aaf -0x5097feceb19999106da6e8df4aff866eb1fd6cc48cfdfc39919437e9b04750b4 -0x03331358a63d2552cc30915a36041a1e77f895c4fbc17dcc9b733195a4ce2b7c -0x22c59170657cb13dba29850a547dccd70e1e41adc21d862cbf842f8dbd273323 -0x65d2c28684deee2257d07e477c4be415e65e7691d75b3d592c1c3daec959a999 -0xb5cb07bee03d893e391e0583ea409732885cbeaa41771866ee1cdbea1be90e9c -0x8854c939d68c2183160887072a33ed58aa7394bc9aee857cbafb73dcc2938fc3 -0xb6f7f398afb621b99137dd33335f250d83201c29c8812642d5469787d35cf89c -0x3bda38b622dc98220d8763332c2340e1ff64080ddd7c4aa99e17ecff108562cd -0xe24ef14519eba8e7e51839f65fd3be1fac6b5ce77312f91f2ac61f043d5e6a5c -0xaad1922276599f3524f3dbae297f3bd582942705348b6705ae6c9209972169c7 -0xfe24b6aeb60a813ff7fc83c2f734cadf69d56f816f19228d48fa8b3aa75c3402 -0x33cacd44355221d9af2affef84094d20b1a318fee3a501739f67ff099c6d14af -0xd4366fe5f630e22620e623cee636f839121ee6a06db4060445b4459087718329 -0x18e6cd0870b3cdba68e786c1915b2cf8e59cbff2fa10f0ecf6959cc6534373c6 -0x40254ab2d4221f8e0dd57b00c9644c8a06c2dbc6b6abe9bf63c4f39a02ef9307 -0xe3238d75508a237c06acc260c8b9ebff42ffc317ee63dd6c27bd01f14d388d8a -0x4559289accd61aaf34beaed01c1cf10c8d961d6ee9b7a0c77ae721a32ceb400f -0xf64e7a344218008a8645cebb329131d56e7c79c75b3af4493bf2d3d7378ce570 -0xee5619f5cfcbcfc783a2884f5e28557e7c05dc9f99df0d1dcfac59dc11475530 -0x3d54435f2bf9d2417f4cb3d021e90564d6173f6a24208836f02133cbfce3574d -0xf65e513c261d6022a9dfeb409b71624190931bc9d8d30100e2a0edf4590e5753 -0x9320f91c25c3ec11b3459e4764a87a90ffa55c8e10592df15205ac5719aeb784 -0x8d09bf8be935c4f225020f560247e3e95afbf16f4a51b98fb1ee1dedde81a188 -0xf576279fc727e7866cc487f07669a93f7b8077c0cef0f4594e29a280042eea5a -0x1d69d8e1879b6d9bd1e675bb6e11ae5943bbdd0489bd341cea1db95206b80578 -0xcc2185cfa0029f20092d2d7085d4c33d6ea658277a8ea852999e9c12b05b02f7 -0xe5c8dfac72dd897fb7281718c32daa415788645992ce419d3e2e28382ef88c3d -0x89577f8b3fd749d32cca06ba9560bed1072744b3058992062dc982630df35139 -0x751a3f9ebc7f92a7968e4530a1e3c06f0237e360d26c0ef175ad0f3d8e63449c -0xba941a4342ea733b7414a771fc1472cff41c2a9fb5422d1fa8559c62cc702fd7 -0x327b2d7e7f3f7e9401a8e48a481db7919f5a635af7342fd07fa23e79ecfc827f -0x4341aae4940966181125e674b09108f836dc3522ac8eb995876741ea45cae5ea -0x5f24adf02257d42fb04b99d375f68baff1981b8cb862a4edb9aca662d5b48f27 -0x3a21e2c4f7258d24164cd3b12b2cd870c06686e5d9dc2a4b140004719e7f3cc1 -0x8c7ab0447ba8b48a67649f426a4c48dfa37f84d72650f3accd429d6f4a838ad3 -0x23471df192654361332f10b6d55e17d9fd1eeff11515ab362fb48f407ddd2a1b -0xc05e63f37f1fc53b6229f98c48325e59b8970279867833acec35f4790658fd31 -0x58c8fe55b7d1a7fd6909461ca3e7ce19bddfb3739cb3bcc95006156ff47f262a -0xee24e475d909617dc2690dc697aea751bfc17d4d0f032c88ce72d04a6657499e -0xb79bf5f6538fd47db68a7d545ae0dcd42c533d80bcf809ea5ccf17143d718a47 -0x3549837a8287eee1a47be600d4364ad588108bd6a22b41ced4c3b20c9ea26cdd -0x21fbcf3de3220c9ec552a7e16178370f9c69e89a6d07d99c818194a2e06f18b4 -0x72597e3eb25f379e0a0ad7ae354dc15b7d06d514fac767ed7939839c87ab6c63 -0xadd0e3526c878657316d090dca41136aad08122fe236d0e3a8fe1ce852c82648 -0x0468a8eb91380073299bb98a9109915ed3218c140cc61ca78d4da6ba5b02d11c -0xe75026a0015c205760047546376d87972f5ccbaa4aa38c3249b7f64bcf4e5262 -0xb2b9a492ced27b8da2bb6c92e54345da466b593282be0312bc9605febd66df7b -0x261c5b06a13f6bb6362e9c86503ad4775fc1a81f4dcbfc5ad88d7de69dab78ab -0x274e04b3553ca43f2fcb77c624b7e9e6a468d7d546780a52eeedf2e59e6a4846 -0xc29d0295b2bd2246941b48d8f9c9f581431830a34d19bf833171fa4c9d8e0e25 -0x2d1d096f62ad0e6bf50252c18afa79f8a1733b90081a76d18c179813eba15cc8 -0x7f706f42474860a1d0fe323e4c603bf64d92475d1771513dbd0c20f49ae7ab29 -0xeb0be0e6f18083ac54cb593efdc7b3ac63b1bdb2530f29a602aea0269b734b49 -0xfd2dedf3bd773bc79b52acfba5c043a8e3bb0754a97eb2018385bc96fc6c3ec5 -0x76c585459ffc6e738c7fd9a8c3b7367926683898e80e2667920160d70715071f -0xb197536cf2c2e754328cfd119b4fa34d3a5f93488e4734d00702201122738f77 -0x1d1d5fe8b297a8ab1a3630c26e3ed2950d89e0fc6f5a5597033c3555757c9db6 -0xd83a5abffcf6d217fc6ce77f9091d26722e3033ef09a9b94168bc1a870d381ee -0x38ddd00134ecac683048744edbd7634decf35d957aa3860a665610e5155a51c7 -0xc9dd5796647de98c7dddeaea7654ee08e412ebd412db159d4c7f0f1fb00159a5 -0x2f8a0baf00273907c16a61a3bc3f2b896f8abae0e14a58daa3e094b9b1892232 -0x1ca0bd55a5a330f2358892beb24aafda73e532fe79e768c7a35351c144b38db4 -0x0015ac017acaf9eb5beadc39c08874a3b2efd77d8258a71bd5d06b3e6a6af1ac -0x315b052b622185a3acb953521932fe19e9797fd4055b4cfc02a85695660139d0 -0x7ebcffab6e3c753e027fd5b4f99df31fedaa6b90d108a9616bf3fe88cc7f1243 -0x8e7a4df43c41c8be983f04426c54e65c641a53cf3c0eee437ca358a6d9cbb19a -0x3ef1d41e05cb5b9cfccf0b08d6fe889aa6534f7ede7b3154899a685754cad660 -0x68278651876f78f0b26a97d5790d2fa51ae583801e3232ddba8b04b9e849f561 -0x8e785391d6fb3645da041240045fd09215608d86f426f0eb6a39484bb8dd14d0 -0x725c13d021c8a7a5225d26b59c7c1efa15ec9dd380321996ffde8205e77cfb9c -0x542095b9ec7c07bf5f1c398293f55b3fe972b9795670ba6fdfd74f5a3c5fc591 -0xdbc3fd8fb7e6104f99f5c6ef8e65cf89f192eeaa503f47696b5b1105ec3f8731 -0x9412d597f002f4ef987ad0753ad494e76632842c7ea9b8b987a30b5be32f9596 -0xd5394daa3487da94248ead4d2e4da6c811edb1c79e343161e8fce3c84764d9ec -0xf599fd94610732f01071d2fe0b2d97f5d0188e4f83562dd2d337e585e230731f -0x3663ca4ed12519f9fab0381b9d2f974d2aabd35bff866eca8835d9da481e1b2c -0xaa2c91f3c236411453f5631d2db86a479b942033561ca6c2f2abdf1b27556321 -0xa214eeb94ec2dab81b77aefec32304f3a26a2549697f4813501725540f396444 -0x459959a992e50745ba8519dac049790d23c4108cc7b5f39fae331b94585ca1c4 -0x8123731b86d591cb729f1f7655e1d1841c488d1dd6175572f77b7597ecabb47a -0x090bf6c1f4a5bf47754b5c4a08465948f4bc1aa5a0961d6e21bf2f24750bed79 -0x8ecfe4eb492c6d9c4c76febe739ae0195d615bf2d02b076a0ec331d06687609b -0x772e8b15c323b497454895974c0867edd27472c85dc1d7f54909c747812da620 -0x2ed74956e00e56dbc80c9c45ad32ff14a2e0c4dc9a8ea1d7c05bb90c7ee79e09 -0x4c137040a65ac509e4a48feb0238faf6316937b848e690902fa5cab3a88df6e9 -0xb8537303d8eb31e823a5caf7f4bd9ce5c4a147499037c1acaef13b8cfa54bfe2 -0x872ad6973f71e305534521bee096dc2dcad66adad524546087a7939d1540e030 -0x9931718202a3e6575f852d74966df01eda73549132eed9b5184aa2b594216fcd -0xd79a7dd127d9a4fef350a70aece41b92d5a98742d28c43d4cf00cd14961e28a3 -0x3410d379b0aae209f7a519a5bf89475f8a6e00e7536c1e43a6f226da6c7e62d5 -0xe2e6ba229ad057b72286b21cc70f321f7455bfa69dc729f379b3b7d55de719d8 -0xf8892e1020a26408945eb8100841470f33737b98a70bb4dd5b062a9f0c7852a1 -0xa5e5e8c405b5d52143c9ba943f17357bffdd6a3a603924a5ac2452c14e9cd050 -0x8fb26eba8529c0b906cba18212537c4412535bdff36e160d470f7495faa51885 -0xcf7d59951025eef12aa7fe965c1b82387767796526457ecd4aa33bb6de2582d3 -0x4c1479dcaf6feb228cf5bf68a19953b5b8af3fdda7dec46be4fcd664ba92e47f -0x353e80178e5f15afbf255cec734e2c9c9814d012d751e3312ab662b85309f837 -0xe4880e99540c3c28b6ddab4f447a2fae87255ea4816746d6139e1af48588ef1f -0xb34eba805757a3747241fa4f428b79f70068ba5cdaa2bfd30a48056248a1c4e0 -0x357456aa2426000ac1a7d9a4cfabb7634167a871b7beaeff6c3527b8afb70d2e -0x2cb59429f9af4366f7994dde15647faaa7729f7d6c18ef418a440da557dec21a -0xfd38682f52aad1b2030175cb3ad4b16b1d7370609e752797a61a7225f02a9a03 -0x199834652a9b17295b23152a7b2c7f75a6604cc8d78a82abc42a564ccfb4dd2d -0xcbd5b7fce5d94424a1d40e52207ee226490cc522a581f08273b8e6b716f4cb35 -0xdb652f76853540eb910d2264ed36517cbc40c6640881a028e78b7c9dc85a2ec7 -0x8757356c23ef5bc0d6e16c24dcfd4d41a356d8893edc6d70c3fe3389cb9d09ac -0x81ce54afb1e04a2035b45ff5e76672977994cb9ddd81e2c30ed33829d38329cc -0x5cca45ac64cdef9e1687158321e88d5a04d7e563ec5dd92d2a4ddfcd0cce0e64 -0x43c6dc5cfa35944fcebb4a55f506e0b58f27ed95227474f6731ed8c6a8739885 -0x2f1327b575fcdeb85cb6aa2e3761eb51658ce7b94406cf64f629ea627bc99bd2 -0x31cf3f022ea589b148d8a67e3dee6f67437075e64facfa854840ca5d7d18e743 -0xea42394b5723f501edaa5c46c740f4546d626d79b23fe551d67f51881dc859db -0x22529adb488875ff16d40ebcc27ca2bc302716acb6c2234f718004c7e4c27206 -0xa8bef83e4e52a697916ff70450c691ad67cce5649d339649d52fa3a270c710ad -0xc716d6b4dbc65921bbf836867ee104c91e0b08b6d0edef6587627f3be9d2d4cf -0x013780d703e990e808ba1d9712ebebdbc67879401f69933ae8b23713bdeba089 -0x175907add81609d04fa59a342239fffa5fe224803041ac1ff8030f0662f328a7 -0x0f9bc49918a1b03d2788235c0580dd03842450e12be3bf59311b13283c63b5c7 -0x1429d733a52cc579cdc00d9f33711c32e945405c8434f307c1c273ae22853dbc -0x7da9c7e8446c6dba3e2e613769c0ebe3fe7bb05e08d5f11fb2871fd300cbdefc -0x6aecd684b896aed1dbef46de525a241905a4993f72e4805f0ece27794fce6b70 -0x840c2572afa294adbc648b9ff956b4b7120d9e2eeda47521fe5a2b04a6d52c83 -0x1f653b70966d51f90de1b1a5d71caec19f28500f635b8537ca06cef62759b867 -0x6ca48d327e9654e49677b9ce8c9a0dd25f3066225a3476ebc90e0e20f9846e0e -0x4d658818fc9932b5e1b468a34ab0aa2bb369b6f924e80cd7eb9ca69616d328fd -0xe110aac551ace5d79123349cac984472d598c8119127f51f9a22348e914db148 -0x9c41b970a7a38d41d072429f0f91c9cf0fb561efb9454036e62c8674525d86d2 -0xaec5533b942b366af7c283a8ca74193c7075946d860b6cc9fe963928df96be96 -0x99b730a3bfa8505e687c495c57d27ebbcec2a23a53cb91947928d1fe3d6dd0a4 -0x241506a504d549434ae8db149184e687473600e9768f9cd8237b41dd637c0ffb -0x08cb5de6ae48fc5a302bb326dca5c0e690e18ac4b5a760933ef196b7e88c4953 -0x073377df5674f5045b4abdf016e234a8750c58899ab9d0a9f9c22d0a3823295a -0x1063bb6c6d3b92eed95d6450aa2effc8ef16a2ed2cdfd8801789353a3ffd30d1 -0xac57056a33d2f5409171a23c3874ca8877551429d57461aa24b142a7e409e446 -0x5454e954b9b22182a7ccbb993791307d002ab0f3a1a82735313de708c9636bb8 -0x57dfafd44389ecb4767cf3fc5b16ad7f02f63ae9d09ead8067c20c571fc7d78d -0x1543be4731dd4631835e641b4bf61ea8465e814c59527ef9f76736ffac4ca4e5 -0xe4ad489fade1eedcfef3375d8f021ad0a39c6bfe990e60bbf83aa8db04cff343 -0x27b1dcd0e5e7d75c07cda25af6832dfd03f15e2879c15fcfb10ea529e283255a -0x6722ec0f606b2dbd3799b3549c7822da16d8b6f6b6ea23a415efdf9764b9a6e7 -0x1fe46c855b5cbf4ac4056e402902a356a087e38af698b6384c1799efc0b13cc4 -0xb93c52407bd5065b575272fa633316ba2c346f5d16ad6193508567a048219423 -0xedbd9bfdf15c870ef424c6a0a57aff253e188b5fabb7f4f4c3c646ef30e17587 -0xee1ea0b33ab2c41ee884df1e35c0dfd8d3cd3cae8f1f4930bb5ce2a9f33a6ef8 -0xd9ba857c2db3ec6da1495e414eaa5568da1851c0af964c3c91882ccc7846d796 -0x67433ac5f11cbf0d6e60db2d936a4ac656ccbd6700ec0b4fbc8869df3ec91990 -0x5b9d127fbdfd857bf79b6c3540748f0d5b2a0ea8afcbdffb2db39d848ce97581 -0xea8a10c39388e369b1a2d0c9a3b9dfae985758184f01dd245f569d1765304974 -0x0496c070ec5b1ec89dd134075ebb1e4407568f5e7548d6a55b3191e146a4b385 -0xf03c01a6a98f1abd0eba8a8aa40c367c07697302245ebc856fa7ad6c6cd3cd92 -0x6331bad756ddc0dcb6e2fca5f67614cf36a75f95dfd06cc1d0064fea081adff3 -0x0f476a96ef95811ef6d56e47975917f875d6c537f747f5bf9909fe577c9fa158 -0x5dcbc0b2c6d16e56f41c29b58397490196ae34312edcadc18917ee2d392d9f03 -0xcabbba4421845a55a44dd1e26d43f87035ccca7a4a19f03a197165a2748cfd71 -0x13d7c260325b1ae4e48e3493f8b9bea294a90e045ae726a4f9e7148bd76d044b -0xe92dd099585cd9e30cb70895534049530fbd3aef8f09a2b4c17a90db295a613b -0x29f8c28a72f19409e9ac2c2d5012d430853b4e0148b9283df4e6b1f9de7f8448 -0x8021da1a6cb74d719d903e0826bde90023afaa81e15d1bf29a8c054ae5b09869 -0x3456595f7daa6dc779ec3bb0fea9e6be5492925919ea75b38a45fab2c63f69e5 -0xe7fae1b036f42f8394b31d73379f09e3b11cfc7677af76eba3c67e7f2a38af26 -0x956570727df06e25fd68d0a2992dae1ac08412b04a640b9b320d88e03506f448 -0x90994805f9cddc21226b8547d5eb6ac1d532596bc7ecd7ed5efca96f508ec799 -0x35ceeffc1b5d1579f2a0d4e4739568a43014d55e9c11ff964b11d85978939f06 -0x0aa13a99f9ad0fc58e0a9e9486327ded1da66ccd050b86e0fc9e3ac6057ac120 -0xe9e4d2bcd1b2cabcfa33d330ddad67cc4bf917142db6e308cfacc4370ce56db7 -0x1eca017d6329f3fc86c9fe57e40ad865ff85f63bd5d3afd43b26237976fc625d -0xc01b1d2cd162cd775d39c3c7d005429c5bcf76169b7aa9158ba3d9ef925a4bf7 -0x5ad8647497440e0bc1cc22ac092beef2cd584880f53cc52244cd5dd60b18cee7 -0x4df8f813c2b9daf7ed0af53ba760a576c36d1c2191d8ecadc00efac4d9fb53dc -0xd0bc0e62e3003ff6960be815f8aa468987883c89b97a6039d272fe628fbb42f2 -0xde9464213d9475857fed294ee4447cae7cf8d04caabbfa0c5601302b76f3c61a -0x89dfa32b40d344ec1e42e0f25aef106cabf10bc5387b0171589c5e8e9138d01f -0x1b6ca2caba5aacb49fdda35be32fdb24b3849b77efde02408c5c3e715c4cdb05 -0x44a7c94f3642b8a5baa254140e6e4a0722c1a9516c6d9e41ca6db75f07655856 -0x034affaca18762d53b1ea3f45b1fbbaa223bfaa418032517f3cf18c95acf51ab -0x47dfef0b1e891566d6d71fbb27acc344db1e3f967446b2838f560086331750fc -0x812a30cc0f46450aca3e11a6450a1af39dcca4a468385b6ed4283e8ae4c4725b -0xf348702b6836e1d4402a40e0ea70f1011af28cf9c329257d1206d2e2faf9870f -0xe2f93ac172ab908a25016e8c352e477c9023fb04533e95174b8e21a4e11cbfae -0xa0b3d71d679249853cf412bf9c3bdd1c15844551d6220f9f0f82a72e6a2425df -0xfcb83aad0dafe5e9cdb9e64f72f5db420de3086b153ece174545ce5624c4d649 -0xd282b0c3b6bfa64ba385e330b979abd28023f4a53c25b5fb1ddd6634da1b2c62 -0x78dbf16bfe034496ddce2534b5cd8cb57bb421b028601fc00e13726b4967dad1 -0x3fe3ae852e592bd867edbcb98eee8491ab4631d0f8934171ea8d9868de4dafaa -0xb2857979af199c41a94952c6d56c057763f86878b6efd0a1fbaae58282eac598 -0x8e423e93d5c402b196115f8f9455709db4f1b02e8a0181fdef5e98bc3ad7ae5f -0xf038de5820cf8012820f2680d6cdf1d8aa09ba6e4aeed9eadb0ce2d40aea8163 -0xf326ac972f4b9e04e5c00666b26ffb56cd2a1a9964c0bf1a23c2ca4944480a64 -0xa6a325552ca14870a47e12a068b337033c61ad37bcb3ded88dc31a5de027e480 -0xce4f666bd4a78a2d07605aaa9c207a13e2ee09cd06eb4791931070b7c79a03df -0x0216e9ed16141bb361e7259f87154b3d77d89455cb7f9b3dba1f78eff8569735 -0x9fbb5d432ac56e59220e9d7a196f6f31782ae91a1d0f3713398feb1e5ba348da -0x1f18ab016e877c3d53c4e02f5e0e2b2b42e0893f7eb1142a087dfa68be7be5f1 -0x38e24ea55872b8686936ce8f375dd8f87b277c480f4567e51b1512d9c58ca3d0 -0xb1c017d356dd8067024101cbee84158013078f5465271e82afe5d506a709b7bd -0x9ca2e67633bb3d2efed2175827768f779de2f388326ba8fe8dc1936c5d3fb419 -0x38e24a2888e496d7afad7634bc640c1ebb3f4988e353e0c021a3f536c2faf81d -0x7b1dab2aae67a5249642dc4c127b893ab876d33373a8370372cda55bfcf80ea0 -0x745a8e3e7c2ea8a51a0bbd605a93f14a7fb3ec8cfb26fa0488fd18f702e9de7e -0x34abe0ec78ce8fad98772831ab76a2d774b1fcfa8bed1119815cd5334ee87755 -0x6c7c8f596b2ad6fb32f0b7fc4733ca9ddf3a8d7626dca4372903718afc552252 -0xbbf88ce3d8cb3606c2e92c29d982bd08684e8691d7b5223f7cf80d76c0b89f13 -0xc6389d3132206c558766afcfe20958bd6c1712704899b856baa255ecde8de0ef -0xfb96a04c8ad55bdb65d0a7862d88282ee03680fe2a86399216099906e78d97eb -0xc7308d89dfe50f386f49a3a1a417fc75a1243e655fd7b458385f4a21dcf86a22 -0xd0bfdb0fec40580a0f88b189de41d3b380e6213faf7e232d392b63b45273f1cd -0xf5ad579bcb6eef5596604e768ca1dfaae7e3d6157eb09a8208df203bb6eab04e -0xe92513c5b5d28cd619c165e08c3da849f6220f6f876f273623897ecb5925d33a -0xda9042d42524244aed7dcd68c6b2b5c16f8b8a13b363c57a663e027c306d56ca -0x9d1755ac5800e043adb456888e986af651b191742af3961d2c9e7b67ded2fcea -0x39fdfe25e12859bf3eb983792e26946a85ea7ac6d840a31b1517d3d116f06f0d -0x8f7c9cd569e3bbac8ce1ab5b40ec8f8ef347d890f0a8b0a275667830894f8d26 -0xeb8616057ba2637f257b85386c3d574aa5cdaeb825c5dc4e07624248bde0f4f1 -0xa54f04885743559273a8fc57fcc239a84f2598f8379deb3837f89dac8c553898 -0x7e536540361a5fd0425962588b37023985e810a994a8b58769418961c4e84098 -0xec6764a9a1d3fccf78ecae2c565df0771c643497fd64c48662f9d3ba84d60d33 -0x58ced9a4a06860140b8d28b1caee77b7b3e8ff842020af2cd9a53af39a6d74ab -0x41568148308cf234bea20bbc197ac0de7b5e018dad740587064f05e35ee4f135 -0x69522df6cf1f1b1d312b6cd902ea9a0c470fdff02ef46fbeb384c49c4c2cc870 -0xf2a4735bd86b97e945612ff7e0f995f32c870885af5642249f7d95e2a80218d2 -0x90a7a93ed6681d6072839902a3802b3c2efd0d5af8dc294e32753ac38d868039 -0xfa17dd93e65c111db697ba34114763555acf6e5f087a07e5c18aee88be7383ae -0x6a66a8af38bc440af9e33f926c5bfe649ab9ca8e017419128e677e300a2a5026 -0x38bc64ab2173afba4329a43f5b3aca5d8973f19bed6b1265560d1e18786a8b9c -0xe8c16c2146e571568d344247e7357ea02c9855a7aeae722498333cea3783ab6b -0xee3ebad16696b23ffdc685551f87ecc6ef43b1d4b810264fe385d2b861035e5a -0x452ce3514bf18f3f279b4c4875c494a8eca5d72ca0b7d981c2cf3a7650fe8e19 -0x445b927b5cc16f3339411117360e1df201807207c701259e9c05e41e6e40a07f -0x691f8f55015945a4b13af8c540cabf111b11411f9e0befc3a7f140fffb576585 -0x04ca15a4f3f06930f7f559233a7265f79ae7de1313cb9043541af37e9c6e24d3 -0xc72a960d88c9f85edfeb190b99a377d2f9dfef93b37ca35e215a8ffcacd2b42c -0x8df24d9d578001fbef8ba72dadb8c3ad331154e72b91a1480d56b98f04b369cc -0x49e1a8c2312e65001f56f70b722e00a497a2ae21f38917955c8a172778470284 -0xbf4bbdf5d27d193fc3df7fa886d0cd7a6c693a836852125d8944ecc33fa923ef -0xd9986d44e2d8ff4ce01943adc783682008dae2582f42a31f5160ea1230869908 -0x3fe4fdc9d34b08d596fbcff511f997bf25820d45988f9fbb908c3ed42cc7243a -0x29f083043c284c0fdcabb96f08ad07588b2037f8078739286f68a568684ecd9b -0xfd1cd654125ddbe3f4168bea5bea936efe723270c38ef53d4a35665df3024069 -0xf182d4cc45b08fdc93e15529955aac913a63a0e884952006f180f330d03fcb3c -0x83ae46fa3815af70ff27cf60703e938bb4a80abcfe62af38ecadf001e74a7253 -0x63d000c7b681e41030f6701f6cb52484611300ea98b0d55834c6500454d71db0 -0x4689f1eb1fd5e2619d279fee6ac0c290890fece711e5f1180c530935d055a2ee -0x897672febe5c5a2d3c0c14784810ae31ddc44c36ec5c36550530c3d4ed8ce798 -0xc739c41757d79eaccf78afe1ff8f6cf3454b0cbecc3af1219bd60174473378b9 -0x22194953f6b9be86e6e71f30cc58f75e2498c6d97f1fcc817311a93d0da0aa7b -0xfb0d75d2f3042888cf6c4bddbfa351b133176acc74563891a61d454330c4ae5f -0x385dbfeb9a73de400ed6df35833374e204714767605e91455488612d855a170c -0x7b5368127494827e06ebdcf57fd3c75115aa79ef196db36866d6770ea97afdd8 -0xd921b70251543f45c2d1fe116ecbf2e3d9bc6b893fd7a50890be211546702494 -0xa243c433b9fd79fe0b47571397c23c53b432622fd45807067263285f1c9795af -0x3652b8ab566a1ccf7bf88ced80bd29ca6aa9aa10c89c754fa0011b294bdbde76 -0x8f46ecf284d5361920f7ce21d57174480920d10dd781aad13db4f00e467eeab4 -0x859c9358f250a21ed12b3b763798b0cb49d2f7abfa956f800378b54c3711c0c8 -0x6e78f6aabbfbdb2f43a749cb5350b97ebd00c913b0a1d5f5ee5042dce4033a4f -0x4667de56fcdcb4bb705f90ea7f9e15a5b7d01958ccfa2b98a871b6f3153d8fa5 -0xea07e697256737f94dd24d4a411fdfde97e7281c7e1288b9b90874450ced5f54 -0x679dd5c19201a12838e766fc9bdd2eef9ddb0cd77c0558cba8d277c74d930072 -0x97f569491cf5d7d6be8864369a39d197ba51128e4f656db198b48135b52c0443 -0x9acdadd550d1f89530556b57dac14becb0b231d53ddd952c06be589110a13bf9 -0x023068c467c82c070ff8d96003c85a5b9d1b34e71bff4602e93ccba286a1b3be -0x4eb59b162bfbc800fb469216cc0f8def6206143680eb195acc891d05324ddebd -0x8b62c84599d47724f344090d4d9f1f990b4cb3e3bde4caa0f39cbaa70f7bb51a -0x6d20d19702ccb9831926a33a6b00ffceda082e3f5c4d859a77cd9f61fd9d69ff -0xada702e44471f2d2ec68271fcb60a2be784ccbfbd0026ab831c2cf430251e973 -0x4e980a535ca7a8caa4f1127a6dc27c1e984d51bbdd30358f6de910c1044edc96 -0xf6d1931c5050d58616e9276762cef42cf3d3e12a5460b199e3bca2f91b258176 -0xbdac2898f8cb74ed951ccceda4f82d7719acd671d5cc7ee5ca2ac9b5ea6cae35 -0x15c353c2d651d22fdfe2c5f6506fccb915a37846a9821591ead039ab30e9abda -0x37dc3306fc85bd5f7d822e8998bd71314e6db86821291fd2c12e9da06e213604 -0x65584718112598899d2f12a951df87db4e95381ace32d8142a9a48016a4c0560 -0x89477d3fca809efaf269664eb6b92af96c47938847ecfb8323596c7ba6117c24 -0x0a82d852ba3baabe858e24b08ee4f9f8ace45f334d5323272cd5066b762b62f8 -0x78dd03c7ceeb51793fd348b90ad2c85dedacd0b09378a75c3043647dec25cc34 -0x5640242ed2face9f27b2de134d9d04edf814298f2501b32913685992733b0143 -0x742d9c0067fb8d4c652fe32c5487fa23d02bffab8c9bb72c528a78ede3093596 -0x22ca31dce261fbb2926f14c9339991f1f929ad531deda240f6dbd53f5e7f38f0 -0x59279e15cf2a56ab6b997937a63c2cd398cb8af8c9dadd80199acd7ffb5449f8 -0x1a9b0ecfb38b793e5de4e3608c19618a818daaec476201f10fecde2be4fe66c5 -0x2b4798bb953278aab012217a3f3469e9b61d14fa33d1558f75cf925063bf725f -0xdba29c0214f1c35c33c4ebcdaeb5d7629506614a527e56d128db10db32a498dd -0xa8a2708e08976a1d0f56ea2310fb3bfd533205b6e923b17136855cf5687cf604 -0xa673d6de79299cbd28b9c7d1682a50da3b8635e4f70bac1763831f08690aeb6b -0x301aa763824a657c7f0e43e0d6f019142adcb6ae3e7879b67ff8ef876732ce57 -0x968a23fc55c65d3dfa100081101050981e8c57e9ae8db71104cbe83203d3c2c7 -0x67f2e59783d0d2a958cc48c695a74e44b17bb0c59a9f8f34efe7fbeb1a7f179e -0x2e4778ade06af390fe68c439eab11556e286d05fd87cdccab4d8ca34d91fd180 -0xb3cf2542555f44a5d0cbe5beec3e321cc89e35ee45db861e2ddf893214c3fb5f -0x3db19df2962d9ad065c7758283bbe5ba9cc78ac0696d2c9902d9571dbc95cbb6 -0xdf0ff87f877863c3a57220a4ccd677a8f9bfb390fcfb2b3e13fa141d35032640 -0x8d6008ecbbe5bd513e49a1559a0427bdbdceb0e7e495f1f83540b7eb4cc11896 -0x2f3e58c59c23602ec7efa7898b7df39a57c0ef336020caa6a1b74fb288c174a9 -0xf20d89be2fb53ceaf95a95591c65e65bdfb7804d699b03b4dedf419c03c544c9 -0xb132548aa010e7d1c564a438573d81a770c4b8469b78957d8a9d544aff0cc131 -0xe6560171f49a6244fe752ca19ba40286b151cf06b32cbd1fad64be75b93dfc9b -0x565e54540e0cbe232fed1a32c9638afeb9b52e3f3c543b7c65c5af8bfdf44ce2 -0xd9daed8c2a319a318174b90dc5570844f660120cce351bae5e2c75a7a5d0129a -0x1c46d41cfaf0e825ffd4f948f6da0aef510cb7cfe7094381f407e32ece52f572 -0x34a8b8fa95e69499763dd41a07d7413883ff55d19923d166a696cf1034ff1ddd -0xd7bd329674d527f0d1a770238376895342b218c485e7de685ab5770c203feeb6 -0x92cad740fe60d5b403e477c6a6c90d74860ba44a8a227ebeb98a1c091fff48cb -0x84a87d5ee76c06fbfa4845ba2df5acf822c8825b49f3b87d8b1530d6e5c9fa38 -0x750c6a086166a6b59df180c3632b52db776acd1abed12769d4c65efc7cb60404 -0xe06372c2d8cd10d1da70c02fa5f06bb29df4d5851427f9c55559dbd5dbf7d6d1 -0xec42ab76bc86885bdd47d3d8f6d03b4021ee9af5412aa9d2c25625c21641fa1e -0x8ccc217463d82dbe916c6f459bc4ce7403e2c410436d89635f9b75cfaa0034af -0x19eb751f6561887e2423e0da07002960359ae9589d55520200ee4cae48a518f4 -0xd24e1423ac3e89d84aa60109bf595f73af45d8021db9232b890daf80912a5780 -0x63570b156a34bf83c6ff7a8039ff653557450b55db4afac1150b26e23ca522a0 -0x4439830b4dacc0e9051098e44694ad39c1e38784463131a5b91dcecdd4b0f878 -0x4a95658b8184532f7d309ed5a747ef1183ce2b27639fadec4dd7773d6f53cec5 -0x5330cf8ea5136e0e6b82ad54b610e6b854f1dab2c2f41ddd60605b89210ebb8b -0x8573513875f328284700be067baa1f91e27840963210588cf7bbad7914a11c10 -0xff9f8b58668c36de98a42fce8cb17ae38214de23d097e5ffe6fef2173bd00ead -0xcc32cea45fe591850c8ce2bcb316d7fd4452200f66c181f4d5ce9241fdcfb6f2 -0xd841778a30e053ba3304655c3b520811e8f1c830ebd146349374714e6bcfeee8 -0x1bf6acb11666bf9d2c7ba2f05a7d344821f28052465c2ae07f51ef05f7342693 -0xca0e2d1dcdf53c70ed13a7ae75d70f5c0544ab01115733b79979ea462458fc63 -0xf5633fa6b2d35fa3aff93718a4ef483dc639de31e9fbfc8f4c17459a50b3f83e -0x477180c72f62d2a8e496d50d99f072e8fc913efbab9ff2dd061483de23426ea4 -0x14ad02eb5e541aab2c430e835857fee568cc70069df92cf7911c6029e22f29f9 -0x5438276e750d0316acc665fb98ef4ff6c2c61235dd21e770b910da69df65f220 -0xd996c3db1dc08d080bc6e058ef81f1a05be6d3675c6b44fa9d4a27b906f814e3 -0x36f7beaa2d0e5501155d46644250e225a0bd3131a5d7caf48a71da72ca724c5e -0x7e6fc5a338aa7e4df3378b6a1b9d05634e8e8d863789a88a998a4f436f73f22f -0x2e0da742f719512978d9b0c7d42f87af1a9d7f6fbeb89a0dbac6897408766a03 -0xbafb20aa2fe1454cd1ddc7380a1623c85358e1fa9b440135e88962e09237055d -0xe557dcf5df4cfb9656778a46e5b2b6301ed97149d0051c109c97ba2cd484761a -0xc707eba4cfd5590653459a34e1906071c091511fa641b47e7d7b5dcbf4e8b82f -0x153a1b38d4c21e730e4e17a26ef13057ff2f990f5c76350bba6a4da4ce577eff -0x2463fabe3b9bc41d86eb9c976f2c7772b0d20548cb17dad83ad6bf5cba304d94 -0x59ae077f3222c9e40d36352ea8145348d9615c37bcd513e430611f23515c2c97 -0x8784895ce7caa668d005320db95611fc954ec0eb40abfbd1a45cfe2bd4df5b1c -0x57306d85944ffb0bc4f24c7470ab90cf4326fc95acfd27eddeb740467b633742 -0xcfe39b067e874512062e4c971aaa1cfe7d74188ae517ce618c2fff6ad2548a51 -0x013443df135fbbd24bafa062685af4ac5e21704d32b5a71b578c47c42742e02c -0x66cafa016bf78557e64534b5430572da0347e61d6e477a77be9efc19f446ad0a -0xc1e74122bce961509712cf5da9ec642f9af1b06bfbab3a514e15a23d5e0521a0 -0x6a028282cc568a3e92aead6a0ee88b7d094109b785255e884ef77d8b8c6fe208 -0xcd8a603081af31ed2e6a5ad9874a15feda5032eba3d100d6a634aeb1f71750c7 -0x48a407791c40c505947c6a08c6c3e1eb1e2e6a01417155f40feac3cdad182d25 -0xd05dbfa6740b13ce4f94cf7609be637a4284cb5608dc4a453bce7b984af1a134 -0x8acf2f4a453e3a19365abc0514cffca0275ac95e4ee41252e4933344a4a24bda -0xf244feedf96bdc4a87de1e96d0d0b10e66f1d7fb500fd37e9d4560a869ed15e4 -0xef83cdcccdbb5929b90113ef8613975c2ef9c3ecf3bdebb5e9e3ad568653c75a -0xd9a51025415b291f3343c158590f628dad12bbd7adfc749094cd2327ffa2f583 -0x8e15f2f495b7807915e7b8898fe9a7138b96daf33c717231a3b74d0c2235de72 -0xc3e606d6c052c23744954329da1de448933535be2e6b8160af8cd4b8035ce87d -0xd42c1834e57205f4d158256dcd5c459b95726a4cc288229e5fcae3e787fe3554 -0x2ec1693f45e058ec6d689e10628ea97b6b1f783e1ed94ed27dd4d015116bf8be -0x0ff6f7692a61bb09590e75037c3ece0c19b39e972f78c472e7b3b58506544688 -0xeedac938b4189741de1e4a79d9ca7bd76248d7f2a1c884edd62becc4e878d776 -0x10064769e8d0ad49f2df90b5ae53f53717572a4ab322ac292c33ed97380bbdeb -0x69c3d813e632512f704a29c21dec5fd913a41f1c89c239e5e5b97f1057e4fc59 -0x9f204c13130b5380889e23b1217cd3744dc56929575fdd24fa543f52fb7fbe6c -0x2edcf6ae135eb45101c9b38e74992e199ad1bb2f5d50b6464fc815609c8437df -0xa3e52a4249a39737b999124eed97532946ca159c023cb7bf22a5d85b9ef9ac74 -0x79e5201626d661944ff554fe7534f2fb76bf0c44b4ec6d85af695a19c0d4120e -0x84f5b1fd8a1fd0a7a73100149960be0eb4cc42acea63801ac6e0b95f0c103771 -0x2a724393c6a86131b0444121dc95ac106474c19f2bc32c7ab0f3d47b672bf85b -0x38db1c17058b8e11b7e53eff219955490af452db93528d48634ad7087458db7a -0x8d0261378422b70c3eefa00afdec6810fe7d4bc7fb578ff1826dce18629baca0 -0x9325f5c08f4184a81b5139bf6f1b7f5bef8bed962d62fe3c7e3bebb92dfd7622 -0x0e976b7266073825bc67520239afdb4975a18ddbc2c0434f27d44393a6a82697 -0x3a8538d9add1f56863a90d3c8afe3a247ebfa918adb3570f07e940a4820d8203 -0x0c0b9d6535bf87355acaf826ffbd042bebeab65bd37d9bb795b9781927d0c604 -0xbf8bd2a0350f9ff5c6e38b6b9abc36ab4c7cc3d1a7bd8aae5d0e4a49a37d6827 -0xc151d916e963872be6ee19706f385e5e856ede4acf77af40e172e5234a71df9e -0x03207e11bbd650e72b59a94c9d5531068b7f512123332d2a0a4736513a6a8d61 -0xd00fa87c85c1944c07d96b494863d8fa156e919a16802f63f40830e65ec7e9d8 -0xd26594b7815217b98a827f7548116899f8e0a6edb50990cca517e0f4b402079d -0xa300259733c0bc0110e4d0752ddc9f78c1c84373382a49070e7ced92fbe57f7d -0x6c5774b9f356f1e9199b42c134c79f328102179a1afaf2e4e947feca8fa488df -0x5d22680bbabad8225ee2f46b8edb7ec88f9ba579cefb5bd08649d990eb13074d -0xe0f1b38b4730c09f397122639d149103f548edfc15ec6114083b729a5678635c -0xb35cdc0d6f94a47c40e2e68ea24ccfb566dcc784d32a7c83af2470c2f0f1d243 -0x495fc1b3ddd175f12e335b193910c2ba3712c4dc61a44ad7eb05d40d840f59cb -0x81924e9c1a4bb9ad6c1b8c5d1d33b8917899478ca5b1055c581efa901335c1f3 -0x3bac284c843e0c879853665f4d5ce8bc8a02bf51e3ed95e624e8408470e5b351 -0xd4c311f058489b0c180ad0b426d4712e6be2e9b651de2cb5885346fd0b6cb3ad -0x3a562ebdf6af698e46990fd86be8c89b3523367edeb2ddf6f30ad099daaaa8d6 -0xf9b84387bdd61618f2e12dd958cf6063fb72375e871038ee181578f1ae483c36 -0xaa9c8713b97b966daba6b4c10c53fe976ed7493fcd77b09dd7d5770492d1b972 -0x5ef07e8ac62ea86c0f69a20e9113965162c47dfffc2c1fba1d3134614bfa8cb1 -0x1961251c374e44172c29ecc4b41538eb3c4595beb1c23bce7e40c0804a01bfa2 -0xbcbbce9bb05211fef82f5e6b2dc4650f3fa096be628fc5dfe311e5c3cab84ac4 -0x09504c200c3dc47529c0cd8782d9103318cb0f66375d10421460fe5e2dc2565a -0x5b0e2d386c1facbd3768659749f891120a3c83ba32c79d2f86f280dd7cd457d6 -0xd692b6b8f283ada635b9df4fd984d4dfa425342fedf13b85d3677b8a78454218 -0x96b615107bc0cd6300703a7b168cc5e81753071226b1e2e1b2d25804d3605cb8 -0x2e5f6323a3a61c411c771ea5f75017b38615059bbc9ab859e09c70fabbca7e6e -0x370a18db880b7b386a2d852f82f6d74f11428bcca48b873402078a25a1fe476e -0x4f35f016e060f84270bc48bf0322dd0b7936e5c405bb9871cc4abc4d5c98e27d -0x1ba693873f04d4db0f500f5baf58f446533533d3f8ab86b33ad160715f93683f -0x08e32fa75418f4920260db7fe4786dc23b97a02579cb6d69a5cb36c4731c0f54 -0x79498473eac7fc480ab8e1acb1bf9f08d4fe29b3d22570a4facd0713319307fd -0x1f4e10ffc7cbe237fad40f1807adeef4558f83f6003545a4e02dc6b6edecb43d -0x9e4d1c3e3ea7ffe7f735877b11d66aeb366a7c21b2cbf8c481c78605d05267f8 -0x724cadc1cc1ff6ef9daf99d4b3183486cecb39c93a79814e6a6dd77f3e3e9197 -0x36d4a65f5c4da98cfacfaa965bc48534448f5121c32e8abf2dfcdbe3bb4395db -0x8227c3f1e6429944c4723774a710b05e527690f7f55d194bcf4b87b00c0dc5c6 -0x62bb6d2604d56f1514586164b9449cd7fb0c1fd3602c6df128558823b4da7405 -0xd738632277927a0b8d6d137e869d6fe1b5e4de6651b8271ae3d370946ee8e181 -0x43767c2a1ca560360185d23944efd010b065f78f919b05b31f727fa3edd0197f -0xc49bf2dfdec1328cc4455bae03a9f3a76f2145079d8c610394428f3b0287f11d -0xe6fbf30eaa9a9e34e1d579f40a6170358fcb42bc70bf1db4ec671eed1299c171 -0x3d81cec9c49ca39112fb10d762b5eb537b4ffaa25b10793c0a1211358381045f -0xcc3d191d0cb777adef9891ba70b9592300673c87cd16f5be2cc4c4d406deec7a -0xa2a379804923ef91f09b3e89c2bb96223b58ff346a2ec400ac63af956e6e2564 -0x348e0802fa7b4100d1d134e03245044e13ca93e542227da1503b71322edf8cd7 -0x706eaa0f98fc95087ff9be587cab07a75814310e6e458ef90c8c70f85a4fee25 -0x75e54de118f47526b2a1a5b7f897a297fd861ed3673aae14185d73ac9c91082b -0xecdbd76c855869d3e3844edbb44c0c8bf8c46ea218e1aa012b3f5dc571f5b09d -0xcbbba8fce7f42ea98188f2ac675a5f885b201984abc1b73e7188215607051bc1 -0xc759766336f93b8883a00132c764b9ff6192ed618bdfd2cedc353c930b7434a7 -0xa8685d824b3345118daa17e8aa21d2c9207cedd293565802fd08161f5460bc2d -0xce91ebee849993409988c6d3c5de97773f3f52b37722f56450ef75569a57f4e0 -0xc8764164b5658b14e7b71f880de823a61a76c1835d6e7bf12a0b2f9743652e62 -0xf6714ff1cb2eac50a1ad2a81b02b64dc6a51e20202e148a9bf7a9127625b139f -0x5af5b53e84e59d0adfa67893b7f72250c072be39dd7948422c8ed12db3d347aa -0x98d481d4f969fd9fca8dc16564f90d4c64c3307a7d16671d0431e292a42a0be5 -0x0b1a4d4ff61b418559190817e62d6a57b0825ed1e62bb7f8fe4ffe25ed004cf5 -0xbdb9ac484863d8e3ba077b9974ad9e1b1da70f10f44a4757f0134de277e20c64 -0xdbc30d7fddc306f6406cffee0925ee083d8949ca31da1d3fe80e4d967cd2bf44 -0x0402bfefc0f725335e3b990aa2ee5c14653d01108a845adcc3f11a27a4040b1e -0xe2b08f46df29bc32161bbb1949b1db30647e9b8128a9199437802d8428d34b05 -0xb6e66e3b72cf7486f4d1cd292df8b528273da8ec5f14b292bbbb085f1e9c643c -0x5eb14a97b2d519caaee39d5dad8c5229b4eca7bff3a72e16466eb48fe0c6dd82 -0x55c2783269f47d03c5c59889e7a7a40103ca610d28924a47a22476f8434c2c7b -0x032e2962a69122bbe82570038625281a45ddce78c309d9810b1c617882e786be -0xc7325810ed9bcb53e44b8b5d314949c694af4085ecf38a8a4886cfc6511868de -0xea85dc1f29b9fb38f1f362b5d2d894e768a1d53a34e93f3cee73e26462bc6ab5 -0x95efcf9dcefdd442ab4a9da219febdd812f676183f03b0fa8cd8a907c4118cbd -0xceac8c24f2b86ca8e3fc173fd6c2191a328a31e5c79e53eef70b8fbb301fe684 -0x8b1070cea1372de9a13fec398b1a9112366eb7c8101eeb9532f5bfed74b4f3dd -0xffc79f8915525ccaef2c67ed0475e49bc9a5115552e92ae2867d3d713029f326 -0xd2b3f15b8e8fb3a02a81ddc5cb2a0e9d3e916afe8bba16690a99e216b2d126a4 -0xcaf3be69f7dfa925f7b328ff24e6b82ce26416c8bbe3e96b310ededba8c3abc0 -0x8ce4b668c3bfc4b12dea0f0f4049e2e64a69a2fc5d0d5a7b7b6e75d084ca7a3c -0x4c85abf3ab28bdbfb5c3a6a6c3a4ed1b229e926b1ad5318eba9efaa5323e0fa8 -0xb5ae492cef330433270495a013fd0151b5cd8b890faff2ce25fd0836c44decce -0xec467edcf595f0db965f2fc7b4aa47adf285277743f15b68c6029414af8dcdb6 -0x0a59e17acd57bce45a31f1d66dded5979792321c138bf14097017e640506f4cf -0xea3c78f44431af830cf9461c529479a0a3ec739d8b264a75baa7df51ada37794 -0x29b7d19ae51d508cb4f20c4737bf3ae90bb7fbf2f0248ec6c2a314c52fc76933 -0x9d3ee7621249cc49424fdb1967458d8954d68b85fe69b13a1617ced6ffce62d1 -0x267d59a40ea07072649857395a512ae9354d04543a1a18e642d4547053919b9d -0x4c01c96e4b898682d34528ef8d766fcbb5a67e4e43f666144c62bfd3a5bd3a46 -0x10397bf4a787c28882d8b360cc55bba693e6165662db8ec33b97810889f66c0b -0x1eb02e4c44f60f85ae7a2aa8b0f0a2a10e0c99c34ad5267908df269a76515ffe -0x97c09798c5f552a2a53c8b56a95add3d2002bd7678abb70815301aeff66225d9 -0x892713c730b0ba5a624919448bc7122b3dcda98997a8e05221ff884b0bef9f7a -0xded5252241329db5b9faf063e49d447f767d60027587343bb53edaafe8f4dc87 -0xd1dc9d247ccaceea24513b5bc117629839939817f73acf2f11311ac3061e0f25 -0xe003d576420688a9941c63beabec0374d58c96042b935ced90909dcdb48367d6 -0x201c2c8d49236556c946c820c5f910095517428b83e2a28b9ddfc285c5fd248b -0x22b1131cdb707534e3404abd1fc23587962a899933e528491ac40220d41cd0b5 -0xa80423b6298ed98d754a5fac41c14c1864b850f3ee04ebd5c4f1c729d506412c -0x9256633502d4e6ed95b68bb28cb6441880a6c4331c3bd8f3c3f51f0762f899a3 -0x1d36bcd5c11595ea3513a6528d504023828b57797366d3928c0a9310ccd96cb2 -0xe38e4cb3766f785921dcbc2a6852e9a3f600e198342bb6f9777524ede326bdad -0xae60187939aed76612151147f9cf4c65ce7d26da27f53c4ca7d9f9176ea32b6c -0xcd3221c850cfd69ae9cf0b106daf8cfba3d7a8c97f805a264960d5dd7d32fc7c -0x1f57a9c64d47e651eea63c7441995cdeea00d7d745034f8c548272296640045c -0x53a94ce4a59c0dd688db7c5d051606e953c8641e732c3a05bab5cbb74fbdd2c5 -0x55a1556f277d3f35a9bd9e44d2d517b908640385d4a191944357dccd180af09c -0x0ffd82eec9cbe54ec371de69e90e2bbf411ce3cd740b9c15e1a563e587cda022 -0xae67d9018985a081ba444e6edc163549e1eceaf0111aa0a151305a97557dd31c -0x206a8f469783e77a881ebff6cc06feb5add2cd9d2274ee75fae15a3b6853548c -0x4db964f147743641aac55c49131ac92f14dc030fd3d2e2563a8e227348f02917 -0x6e7646153ec04247a7bb86336b5cc8f52d78b8e093a7171e6756fd22ea9a0897 -0xef6d9d89f242f73d24bb81e551b1c3af6ca3667432d86eed73a84d3cd3993632 -0x4a6f77542984db415418964cff5e41324be8ce4390f245159342936748b1d924 -0x43b841b5e80c263273b15711230278628288276e59448f82cf62c4faa58687bb -0xd3e8523d738b351eab0afe27bfceccfd06853168643ecc15c6407cf1b8c2456e -0x140a0c68ffbed1351eb370b65af1454b8912c1aad5c1c8bd54caf2ccb16304cc -0xb49fba6cf907fc0327e9ff6de13f065f1b5423144470b0ee2900d57c858ea7ff -0x9dcaa9b16232beded08ee09e738889b9c2b58c632b0ad6b76d3faead9c8766d8 -0x1c22304906a995040eccbc05d96fb58aad579c5a5705c8ac95a9877c33688929 -0x8bdf822954a82e903d941b7ea8bfa9a8c842eb200efe02c58fc43a34e09c17a4 -0x959b741a38d4ae5be19a53c9c62404e03dfc239f81fef583519b52d7588f6cf0 -0xa22d4d4d80b9abd86ef05f0464833978e5b3c343650eb8eb3f02700de0e0b0ea -0xa8579b8ff0386175d080d7351d783900d67d5ae09b354d3711734e496540b855 -0x5cae7dbcabc670db7d20bb0db16304aa3e5af9034958dc33e376a8e5a2e2f1ee -0x05a170f6f46415b2a8befd6ed74098d96eec71ea31bd8c5c2a83347c9d383fa5 -0x15eb0973ca15c75a02f7fd48855a74c1343a1ce82037d2bc81eceb828560c3cf -0xbbc67fd108f0cde39f1831e1063d86694a533590704c9c153642f55e472d09a3 -0xbc9d1e3048af68b45ce60fb63284e5a2a9f33d9aac8c258d7e8e2577beb4192a -0x91a8c8776ab1993da7b68eab6819d38bf5376fbb4cfbb1faa9d4d1e4e23b7bc8 -0xa5af379760a7b7b9f7c01605947550105e4335043e9096e65d40226fc3d3693a -0xe4085b2256d9e22237c33323c9d40121427cc2045d65527b90b9765d9ecb74f7 -0xcaaa19f05cd0ae3a6ccce682ec999b835f652ada71d85887d8452151659faac9 -0xfbb57201bcab41adf0bee0540dd506dc8032b044ae2f91bd1157d6d9ba2fb23a -0x3156966056251a2264e58b6ddbd6c42c414009f7c66c6e58d1244e872b2abe28 -0xb6933dfb9c279855beaab2d2b784260037cf0f67804a735a3b88fb8deb34957a -0xfb254483d1c2d4f7166e639becdd1920fb234ddb92cb4a3144834c56c4144d4f -0xbb956d6a67b858327bb6fbb18ec1ebbc356a88db4c516bc1c6aff75f4d25a09d -0x952197357ae814d6f6a545604b3bf4296325bdeaaa6883cd04d474f1f584a179 -0x49f666371f4f8dd796a93cf5fc9b4a18e63785e9c5071aaa9354521a8ec25c71 -0x1cfbf04b5dee8b67ab6b5ca1e106fa2adb722291f727def33ef840ccdfc27559 -0x905a8953cc3cdd7ad3e98bba94bc8c43041bad0967a4833f7422f469c6a478df -0x56efbf809bf896da7267c893f07b167fda8f6a265558b9900a32dadc365ab4a4 -0x8b52addb3c3502ca1eaaaa294b9e7283ef0ced0f0ff2d27541aee20d50274484 -0x56eb3b329f0bcfc43fbd0373a557f03261841acef7913b4b7552b06c4eec94b1 -0x6da7b4ba3dcbb11815f082f42cd086353165649544ad25300286dbacfc9d34b9 -0xb0bf61b94726804e2261d8ba5547eb909cf5b6bddbfbdfa804be305ba7c9553f -0x3beb871b2f95bc7a897253a21e67eb7008a44065150ce42591ac502be88f6285 -0x194657291c7b77b77833269b4211fca83ad5ebe22785f1366ac247ec5b424b22 -0xd4e06668a3c3a7e9f3fc40524e3b3ccd60626a4dba5bccf05244fdd84c3dfb0e -0xb72c2aff378df60bc7e473b44784343603dd0049487fadd2c74d3d7e2dfaed09 -0x9c744be63dce0f6745b266622ee9487cc5f2d1d39d2a2929f58aee2f8a13cad0 -0x546e7756f8970c50a7a54c5ae33567f92715b7e9f2a518164820af842b5fcd75 -0xf7a1083ae1e30a685c93a15d5656be4d287c6f82df0217490de313b2fba225bd -0x162523dfc9768d5ce8419df84c6fb4c6f6c8ab7a54d3da1bb58c19a7efd5f59d -0x6068d4f0666c90e64290a47ff60b9e6b28d68dc3f2be9170693ac6eb4d00a2bf -0x02a0c3a0fccd85c3e299045ac3b8647f1df09caf69f68bea193637e2285b0ad8 -0xc0a436495c4612d0cebdadc5911a0420b62326fb317d1b802e7e4c6878fc4d7f -0x062abd482357c3ff7dcf200256913a8966d3dc8d5ef85e07157a0d1fa7604877 -0x762302f714affc58fce2f6b366c848296f65864203e9b4f76af6d64b9dba7a41 -0x0a64762fe399490aab463b0dd4fcccc9f7006b8d15bac449c43ea76bd5ba0a56 -0x7e4d7d703f2aaf9b48a430a50da94f53dcd4b336c734c28c29791c998fbce18e -0x9021730fd0cdd6becd7b99a1bdc9be2e6e95772bcee298d484bd563a9bea159a -0x67f6c8b4d87759518ff964d687d46797795a298f5879c42a40153619d09278ab -0xdfc370cf86deef1d81d8f0cc81f7bfaf2ded88355a7562dbd7aef8bf4788a319 -0xd3c014b8d9e51adbcc9263207c6fae50dbbf40014d4db149d31aa00156da1bed -0x1aa0795d387a8597a54b0fbcf01d6b6d0a9319bfa40423bb772f563dcd0880d9 -0xfd686721442e0a258955fc3e8bd348a9611342fea72b4eef0223dea052b9e648 -0x1e43895bece6ce9cda67868796678e0608c441788dcd6fa4a6ab4a18c3c8c962 -0xb6b9e6fa0e793632be96181a2ff26e1350a6c29ea6563ba413d7becd8c12d451 -0x78f060b17cf1e78e1a03c22d0e94cc6c315a341f4988aa98f423fef683e45bc4 -0x224807eee42ca61ec9c6f0b77e16391dbdef4c1bf93a36c8cafc73d0c5c7e716 -0xeab6061f6b99a9605bb8ba5e35b0562728f70a824728570e4fb9afc6c08bf50f -0x07c85e80cd7f49c7aaccbc580b72ee99fc264c325518e02a20341924ca513337 -0xe24fcf406951b0590c51e2e0ec20734f11b78df6fccb4aadc1a54fbed571d2a8 -0xffc068d415cb67de609accc760142dc3cc650c9fe6211f5a3e8d2fcf01f7cce7 -0x4074932bee2fa3ccc7763d2e8550eb73d93ef876f0aac09fe077d47de55c3efb -0x78141b95b0d69622b749cd1f1969f2112221c2444f5a7c1630deb02a5f580330 -0x888561e4e95e35ccde1141a2556dfe2914b9f14875fabebbd651c9076b01b924 -0x6bfece15d02c51181978c84e828bdbaf7c11c6c528fdd87749a22cef21203e68 -0x1da3bc2db0c3e048cbe0532800c6e592cceb603975524db1582822981b0107a7 -0x000ad7bec5c86b581cde689901f1e9563ba73d1e8975c1740e25b605afa94b26 -0xa4cb2cbe0e2a30d3717137cb357cdb7159469195ac48f5f086491896bdd4eb92 -0x229f2084966cb48a3848d2fe116c1d0308144e32e2f15e057615c3e1b6df47d4 -0x4a70c750135e5ba99204f87d128f11ae46d40fe81e9276cfe78af2f6c9fe3085 -0x111fcf80f9b7680dd01cab2a1f197b4eca1e805e7afcfca5dc1b8602be82d628 -0x81f3ad23bccf5855db4d75282d030dd99f98d7367a2d3848a0577f930168382c -0xe7a0b716b61903b9d20bad3eac4cd6b47028c4169558f877262343f2827edad0 -0xab0855201cd49b71099f4f15130f5319646a5ceeff3f52965b2f20a6d6ea1329 -0x4bb825f174a9bff7e9a2718f379476a5c509d351a5ef91e935524b6a8243d091 -0xc1995f79aa46dd981fe9e2010a7515f79147ef0baf07b462b7fa24d66f0c6d79 -0x429523db46bd32aac67b48ade514da31ef73f724711723543b43d07d69ca6231 -0x773c269148b5cbb2e25c68cc8baeb4c6d678191bc0d5a96c7bb1967c36b9663d -0x744ea1651df7b8d34966a4719fb7c4807d95326f95a76566da14f866ee708aa5 -0x7ea86061a1079da5bf33104b841c2de8caab5ebcfa76009430c8de1a39afdb39 -0xdd36b2789ccff887307e91c923cc1044433c77161bcc4635780b5425a43ac619 -0x7722719728d51fa68da1a63deeab6116f4b6f46492c27fd0ff52c7d0aa524eea -0x21f32eed05f3c843ae19881d8c03a9c94828bc2e5121ac982ccbc33b6bb74ad3 -0xd67c453143ffc6cb4e53afc11e833038de0249fa8591122df8228a148b116a4a -0xa242638eaf5dc4a621436c33e9bb295259dbd589e122eb3cd623a296dad648f6 -0x49647b0b376fa3bbc8ab29d83d99529fb07ba527545b91d3e78c1a305390e76e -0x5327ef6b2f9caffdf139446583c9e448e676c74192fee97aaf2d7d33a4f6a1d0 -0x4959c67713f55085ad08b39f2e9cd7362b51219f1d72815bb2ebc50bc0178ea3 -0x1d6f91e7041fb9bc9fdf17490655d90bb360b037c074ed8fea609381b30fcf6d -0x58e24f858138b403aad6b2891b96535108e56853500f9d989dd7b4b70c60a800 -0xeec3fcd25ae6d9880793c772508e43ebe9688f95880e680c725ee881f3733df2 -0xbdf4a8c10bae7b575ca75006bbe68f9f67f100b05b75504a34e287b6e20f1b5a -0xaa94ef8b8262c73a6fb1af4ce309a20ab0a8ff522539ee264fa064c978203c8e -0xa8acfdf307033b5d4ef532bad5cb5552c7dcbb537875fae286016533b7cda144 -0x2ab7d65965d2bfc7c45d55d370d57a0249607f252534da34e97d8612fa712918 -0x201d25222d1864187fa52eb23329371126c4d215675f1deec66e36e9decfe865 -0x8699305f200b34451b430881e19be8e93c91db05779771284f3fed251f3c2cb9 -0xd16cf36cf387bb3a46cb55004e056a009239939c31f558a85fc7ea35d0cb1d6a -0x956141799b217911a8432fbac896c32e903ad8b91543facb41e976b029398e27 -0x41ceb1fdc1fda56a11b3b1df03779507150bc50dabfb0d481cffb2468687ff66 -0xe97c563e683d348e7f01d522d1a8ca49aa46338fea48e04450dbc1f6714a1948 -0x4ed30b156b41fba06bb00c3d10ba291619b84cebbc8128d4fde330a8c89cff11 -0x2455e7485a760256a3d5ab3b38bdd99c7cc3e20ccd9628a32ff3900b6ce5bd71 -0x80fbc985efe6427892918b15aab3a5795440bff8ed9be4585e4973a932399d38 -0x6ec922b1bb8027f11da3754f7c8f676835d7e9613ca834a8cd94a528d3ba27dc -0xf6731771bcfec9ddf8715f0623eabb70d0941c0f35f2857d6aa1593303395d34 -0x844fb719638690df1eda617b1f940f4c24a13dfcc7c5c1a07743f55762aef9d3 -0x7b080670ad1438613c760fdab7dde1c199df7fd0011dde377dc3d1c33cb910da -0x6968741e9f210eb2a29e64f469e63d639c8d2bd73d244a1cba1b852c4bd7f155 -0x845b9bf748313dd4f378d3576b96bc9fa3e26007a0f7afcdc4e5bd1acb203526 -0x44bb8f3f583b48ff2595315535b5fe7ce9fcbabc19b1087ae6eed9c461c5e35c -0x1aa6b4631ea46b53496d7611e94bdc255d8a6ebef38be58f9ce5a354963895bc -0xcd72524e9ad02d985e8f1176271d9ed385873d79a48a0dff08c21304be34494b -0x3920d0cdbdd9e0f5d5fe577e9fdd17acd2ce3a1e932f98e8772cce5dc4e4e2f6 -0x3d463e1caae3a4713165e0807cb511568cfea5d9ffb23f5f3cc7c6b2990ce24a -0x9f8e840648836efb6a27ef9d2e384d572980d7ef1c04579f68b7d9e65bf036fd -0x117f41350f11d53a3368836ff475c60e366a8ec47d0cde940f0a6b43a3ada47b -0x124cf2815b0b20c56e8bea7dab0afbd6884943bc31a4f6d2898c08e6eab5d791 -0x8a452e004a3167be54b75bc001bc14b9ba0347e1e2facf9e5b653394c68b38ca -0xd679ebbd5949fa3db5a77a6ecad76834ae84c13c6228340a01879c22b27c01c4 -0x251da0254a9051ea5d6a198a13edd72b107ca293c1d9e66beacb77e84ed196bf -0xa72b484082fc9dacac242ff21470867f940190ee542deac4a8bcb75367cefa6b -0x1951ddc240299905f0c323ffc015c3247cdeb7f1fd9f0169743598d0fda0f511 -0x319971571d9b72e47a9ef7cd821fd2d22f7c3a24d158fc3dafe5cb01809e3698 -0x7012afb9e04413827180130d7d9fed84e677ab2ae8f71d59eacd8a23531ae830 -0xac0c7dbac4de87c157d7369c4a2f9583f57561c6d3bfe6d920232cba31074f26 -0x6f1e784fdb2ec851a1f1a8e06642c4c217099d0cc4fb8161a12c86d5c07ce747 -0x9797150b01ca1da28919f71a72bbb750f3e80f689a39e25a9a09f7d29c135f32 -0x623c5ab76677e9e586ca5481bc8e98ca57dde27f84670c84199bb63609ce758b -0xd38b754fa5be00fea66a601ee3f4bf5cac02b5291385ecfc9062306e069f7691 -0x53c6533b9d6489b431188d45c708eb825035319b04f927ad19eaed516e45f43e -0x215d7ea25747db003e2b20bda61767143cb0773caa6873bcaeccefeb2ad764b1 -0x233eea7f812d3ae56750ae0320dde0ff6bca96ea424af1ec67253f3f6dd49642 -0xc61d63dba7a593820ecd7be6f5e5ce044dc63344131ee7a1bcd2e12c30e7ead9 -0x0bdf3fcfe42317deb123b09edf402d07ea45ff7e86e868dce527ef266b89c3f0 -0xe1403b2863b5214f89937e504dbc086e6958147f36bf8b000b0bab336b4d2c95 -0x7ee90cfc2671e5cbc280a150c2beb29a60ff9e9028aa5565b23e91a4b947b5dd -0x7272c451d050bd4b7e1e93d2cd50ec40f88ddcfc850bbd0a1e838cb05f908cd3 -0x9d3ca5d118115b766f035f03e34a0610902b3f263a2e36d71ca433dee71e05be -0xc6a42586cc8acfb70cce4b72cd11d84159a0f3e7dd1c7f1ff4466e2a5c256204 -0xd5bc50f03b1aefba9d7005869d3f22c6a79f05d7d39a354005eb57b917538db5 -0xc8b2d9d0bab85e22698a0a9ee1c6ff117ec795f2a7fba1f72f6231db0f9f4421 -0x8de457bd3c01945e371026e7b8a0e591c713f380b1797cd537130f85c6c7ee21 -0xa17e19de49440408e0ff803cf3443565474144bebf849adaec519b75927cd58f -0x49af8c5ccc350ac6a0a2b4fde1e189ae14bf43f7711388f86ef11e8ec3f71e4f -0x716024e53ac674765ee0e8c1e40ec85c23c96b222eaefcf21423167ce359af41 -0xc4569bff00912860dc89b60cb285f111c51fb0a53cac69e0f9abaf47ed145c42 -0x243963c5bfb231d8e18e2e2e43d120a85ba15bc84c884b0009796b675db3c9e0 -0xa74850fb23d7542a59964e517f254d534d6725505a12120dc31a074f58b456ef -0xa550a0bfd901debc7e2c152e044981a20301267054079db4609e2cd4c0c675d9 -0x48a548780f5e124efa738ce67ac6f5a582101357a5c2345d77493ccb29d7ecca -0x22620463dbfbfc25cfa7c825ef2685120dcecbf00bf3c6565a2f1b00487be1bd -0xd81aed52ff7b72ae58980f1f7f11bd9d0a13573f3d00c2e0e0cd90bbfd88a47a -0x45041b59fef5280ac5f031a5c5104e098d2f8b79052dffcfe5b8b7399b8ea714 -0x9b0d6ac284e7ae8fbd5d7a94e0ed6f2efa071fbc2cf30083a694d45eb08429ac -0x421f36a974fb55198ead7c38161fc725095b60754bc0e5b93720a60a1b87aa18 -0xd075e34980990d1cf14d91e0461c6a18902be57395baf56aac8727e782e4f0ea -0xd2f35cc577af9100a58d10d8bbdd5fda0a7f008b5e7db6e7541c6716c6eaa105 -0x4e0b5fce7eef1a52c99891ca2a4974d4cc16a8478f9b0f5a45b5f37e5559aad1 -0x3df6544878f1bb8dd95f4a3a3db303717037d4ab37fad2290a90d60d49f028cb -0x124687fd9e472ea2dc274d7a21a7ce59b64d2809e52f6773cfbffee3079a1c16 -0xe1e51fb427ce0b2b8427d9dad0dda66f9fcc6ce38c2f9beeb6e4da8e59425b59 -0x590d76f5965df9f8098b9bf7ae0a03f8e334a8f1ca4de2c5c9511a18ea879527 -0x71fef249e493060378479b419ea8b2f797f3caa7e2f8ba23611a7e520f76340e -0x9f5255a0a6cb388ea6385a16ae5287e0f372e7a08995824fab0cdf651a8f8998 -0x92f8d53b191b72df141968aa0e4c482f52c2df21d4e55f56b96f588f7209a3c7 -0x1cafc26f870f41b46b33a94b23491e0ddaaf61745738f64784826617dabd7305 -0x989093a87cfe94072261e97110c4619397f2929979f8bb2d68a81a40f5f4b1e5 -0x08d38bf54e390af3488762135513e4d31c45f10448a89786b72bd1578ef88c2f -0x8e3494e73b535dd9b6fea088ddeffce455b1a281b34fc01c5bfeb48cb5e3576b -0x07c6707644e2d06de96ac78d4cd174f12242f46c7809779e1cf29030d037b2de -0xd9c832230ab002affb79f955419bf4a98410dd95139b57a65749d50854598bde -0x6ce91ef8c96725132682779651da643a98898724f4012058185d7474a15b5689 -0xeb46939754d5c2b1b7ce7c092612257f4eff960a55cfddeaa1004c4b0edf957f -0x13ad9b1858517d5debdea44b5bd98e69062ebf4a95b3b0cf4a9fe8022cff673f -0xf11f055ce9e868f9529752794a8bb4402904aebaf3e06a14c50bb2f31c793e3a -0x1de0c9986d7f5a113adb65f8b93da0f8e9b1e1c1593c437a09db2e10749de3a9 -0xe4cbeb439d201ad8345eb14c4bb313ee275538f1088bb39b91b34f3532d37fc3 -0xe318bfd6ee3cd826403c79a3a4c9433ac2b3a39a06af77b1adeccadd8ab3fdea -0x89c55358b04dcde65af294d6c587d489f3ccfb727ec9f3ff260c91598ed3ec2c -0x7286c2c6307af1d5535a71925822228dcb89288a1498c518f64b487188135c6a -0x34879eb6a212576539098268aaa9c8ca5271031964487c3bd0f37d6675ebccb3 -0xa9df4056e81bde11c2ef95441b16b244055bc04f3d46fef11f0363a3438939df -0x61ee0a24de1ce68a7ba40affa8ff3443d76593d22ba674949901d22f302ad07a -0x2058c797a9eafae0803259e4c12469f9159acf3daaf342c8ada5eba7ead63403 -0x361823ca075f6a2c8980ae69dbf8778c9837164e0b8f1a11a16fd09856a158e6 -0x94469618431e8d857de8ba1cc0b169998968b3ef83fc135bb52fcfbc0fae7f6a -0xfc5c7727da490294f2a4119a661a197c87e041ed2dbea9c2d5afb02b9fbf605d -0x3e3c89e32f70088392d73bb07c93af5ee8607bd8899964e46e33b4d0fe0d1ef4 -0x6768bd56442e11492b0672b376e9e47d0a639de3de5bbe82e2540bb429ecd9a4 -0xcbb25a0612fcc06ab9ef7eed32e50e80ad0314c4f7f8863105f3d1bd9f1bc338 -0x4e980cf2a54eee969dff98eea94f3e7e850af6da8e93c8c6c9cd3bb721e30627 -0x99057b93607a298b60a9df2a560f6188c7ddd8c841fed169f2a3f5f88273cc44 -0x43bfd118e2f8c490bf9a8199a5d52ce7b9f5cb9de3c8800c2077cc05c2526df0 -0x3b96ea3210570a87f78219e147faf4dc276912c7cf7fb4c3b77b305f986cbfef -0x9adbcd7ad866a443086c45464117e0d408845b1d71915c51d73694fcfd0a8828 -0xb864b808f55f5f85264e5187a030b99b8b706597160f64a488faf5f0db37fa1a -0x6d372b2c6cfe138df86bd9dcbd8fc202a5b00343b422b0906451b555b790c391 -0xfd6e2082f7d195b2a56c2eb8958390bfd0fdb8c9549a1104a4f30883d5e557a1 -0xaea8c09a2aae56f850bfa9ff960bfb2eb90589c5c10c25ed189040d816bb8570 -0xb7a7890af6ae5b3a037fa4d74475a96e9aec55d09b9bc962078d3b5633a5cf8c -0xd7c1551b7739cebe579cad9653206ba2823e0e73a0c46f9dad02bc410ca52937 -0x739d3f080c7353c4f1bcbd96d509157bca484a69ce8372dbb905fc6dfc728fb0 -0x0fad2951eb2d86c44c9e665dbd979f8e01cb4ffb07a6ed1f7b63e82636ff139d -0x557116625c344361b0523a78f207bcd7afed1eb8b03423d9430f93ab6549597d -0x6ffe4c31975c5f95530c27f53792d4c48ff7ce3428302af47aa65f1104e3c18a -0xb689bb55d786a032699187c6176fd3baf1838646d51410d7d057a8fe93d273a9 -0x9283b99ebd03a8f593552bc55150a68f59b29c2488d96e996857852dff556526 -0x29817ad5f053110fbf720ed10bceebd5881c8d882f2c820fc074bf55e9840f97 -0x46bcbf37c9f4e5776e350d65a476a0122f022ef98c1d3e320718aecea257bd08 -0x08f147728caa5a82ca9c64ccdcad176dc19c82b3271b86342ad0ea86fc89e33b -0x2db6a4562d129289a921d1c7f18a705d6dfa5c6b9ad185a630be316aa09f154b -0x94f16661dd6d3799a6a76983f2dcc5f842f6ed59046bb36819625a836b6d0d0a -0xa089b0c4bb36a54112af7caa1c99e6a5ee4f25026e173eae2a952976b2e28060 -0xe9bca2948519cb2e785865cfd1e8ad3d28f50828081a2ef0b6280dbc7f4812ff -0x100ff336e28ca3fafcb40655d83795bcc74d4658acfe850ea9fdda0e5dcfa025 -0xe34d7f757a7334eadd78cdd5538e216526d926f6b7d5c36c24e31ac2ef4fe5e2 -0xffc99af3cef1885dfabc231b4506d63880474a54afba5713edfbeff249b7cb07 -0x48b9e798404750eb415d1eb8a16ee4d88d6ce646d967ea7e101318b4e142df32 -0x50eeb10068a337d6d46bedb52b2d756c1c9cc980d36b34d07fae186a0ce3565a -0x87ab8e477ab4360925578986cc0b87cc7c0d379bd95d2d1d75ccb0819c7eb972 -0x016647dbf47b1621cb8633a9d4192e6ae9c7f8ba088de044cccc355db63ad7f3 -0x10da78b88988a358c411094c8aacc336bfdc736851ebd63e756c554916db2616 -0xf3985d93cf99c5756ace3eec1b7732c32aadde2bf03c5dc4ba2184b02f60c8e6 -0xe3ed45c12220abcf91ab8e76892f6c3736ee214a03236109bf2652dd7bd7feec -0xecc136a3b35c20bf1013891e1050c106ea03bc76799e2ce62b2e755580d51cc5 -0xaf05602cff5581bcdd9ccbbabfdec774ce46ea0b3be5e4d4845d61629b1dfca8 -0xac017f778f77ad89835d7eac4bc05ec0c9e7ed5bbeb213e449ac1bda5bc8ae2f -0xfc88d94376001e9d84144c58042c46cff24e1751cd042786756c23fadd57aee4 -0xbb2f34b6b8db0121c86bea0bde9084b6094475f8a0d567c8a59747f5207fb385 -0x42c051fdd93aa2044a096ad70e940a8cf49ba9045d1845738d836e837acf907f -0xf6f5816f44ee8417d38d8599f5754f833bbfda517216dcc0b745ce224e468466 -0x704606725f189cde74ddacc542f04093dc7c21bd6555b1ea8ed5c174d25594e5 -0xc335b043e1998f2c0388590a4b7cddc88758568f7d824fa68a2767cadc42d076 -0x70c64a929e376acdc9e0af26e80321c29340b714f6df5080fab34b7860acd22e -0x75fb9e960f6f8b1acfdb7623c98c1d4d22cb974515210d8aca73b5f9c2da5413 -0xe1a55565d361753ee18db5b4afc436a0421f6b27e26b241d8c6462af9cae6220 -0xc1835265fa1f50f24f1786ac930169642b3b20ea6e23b6eec99d09eb5eb3965c -0xe5cff1371d7b1bd8f5babae883aa3a3fb9990d86e9aca845694b6ec14fc142f0 -0x98b0b38c7664c6a1f829e0ebcb93971524be691645320e22fd08aaedd667fd15 -0x5c44f64a03fb05a83e152322eca25dee5253a7c4871b2ca5468e83493c9d788e -0x0559f8a668d9efad67de7f673a49d9ed4a5c52268e79f0c9d02ab33ded0d6516 -0xdd2f8545e889ae4edc010bf1ef8932809909f5745ff0b5a5b85e0177e7c01ed3 -0x1cec3bdb6491a334f28420ff3ba7aebf6a043244cd2761eb731900c605360ff0 -0x213af84c80ffc166ec3c629464567611083235ec1b666a91f1a70afeed30cd08 -0xbc73ffc05df5bec9c2892d5acb187c3e210255c2ac2113702dacbd22abdbc2a6 -0x371ddd9a507c7c5cf2f4155989b753c23f78a9fcb2c01ef4cc9bcb7ccf76684a -0x189d8e80f194e02a1f3d10e4d313ddc6cdf047d14553e981c373f7d38eb8b34e -0xea69d2c6e7d824ca94aa26e3c6c8660974f642a44d0cffe3b0ba5e3eca6ef483 -0xbfc614a8406f8c5f839bb24977244c06d027a6c98e56b8a3eb98e1acf7181d19 -0xcc15aa4a06aa315497db783a336f17984764b6bd4b7b3d75002dd60fd9d8ff3e -0xb6ab872991fa31babbe4c06a10f1681c690aa003365131025340325cfe41a8de -0xb8b14e0cbd4b26a4de703735fe7252bc7d6749a23c0a7d8ffa67c7f752277ab7 -0x36112dfe9a6ed7f195f547f0e9182350f47eff36705354f06a3b8c49eaa112b9 -0xca810065809e9f35cbdff1b71eee4db685e18a7354beb0d0dd8862f1cd22ca49 -0x8e37631195dad92d774c22261197576d3745fc0bb0a5742e6471bb3d48e8a259 -0x39eb219a097f5302098e6aad2b4a2ad95cfd77169b11ed220c6840d8d71b6d92 -0x7925477a564a10ca32b06c7490894dc9c4213d2fe552b605c0f60fcf7339ada3 -0xac438241bbf6cd92494a9a443fc6d782c5c7bf75fa7d7bcc53107c3d1cfa378c -0x2d813d688321588dd4ca796dbab38348586652c61fe9eeb4d0b1ecc54f2aaf51 -0x5f3302780c0d5425330e6fd0a733512f96019feb5928b41346fd942240d8d5ba -0x8342ece00451769f6229dd2707cf80cd9c20ac930b1fd6900c4e3acb9e3ecb88 -0x6beec23c33dda999c3eebf9df67f1fb83b996e147808f12ff8b290020c1bedf1 -0xde5d90ec1a839d7c262b8ee01f634b6dd5ed44ae2c0ec05e4c088bbd40e16d6a -0xcfd3e7b675cdcf86755a0e279b8915d784cef1c079eda6175af8143cd3410584 -0xd7bf18cca01e54a0fd2222680a2f2e03c8a2061f47fbbeb458e1dd2872717078 -0xffd51ed923999b14fa141d08dfab1ec491d88f39534c61777b0a5f903c7f48f4 -0x74f3b7851306f9860ad40276ba95f393d34c927ee3d60e54f35e40a516e5eab6 -0xf218b089f3953b4f5088313e0351b59f8b66f01cb9649a40c7e0fe752c0add88 -0x8746be7d90363ac48e3c7793cfe6ddfaa1ed3ebfd644a4c35f15f442b56d772e -0xfda0a5e10f3679329d149b0ac91583910d2642cd6aa455afdfbc952e5f37eaa5 -0x9575525d08b66205135503f0ff2e30f0da83eefe71e6f4c44db5cd8e14409ed1 -0xdb75c9ad8dd39d4bea5af89ec0b5eda5c9cd706ca66b7622d5c49ac4f527ff4a -0x5856447281f46983f9092ce968f01eb3bafc6239c8f0692cbb255ebdd3906e4d -0x1676927b27065a703da546b02a82b5b821b5de803044a426be7724a52568c18d -0xbfd7fce1260390d2db8744a3b0d10970b04bee20b7c64961a7ae2aa3e6be94e5 -0x4bc7c2041a4d19932fb25315b1961ef4a6ec38bfe453dcd65c6983abadd9b371 -0x7a3fd2d9c5f405180fb07b9fcab7575480078596969a501f2fc9a949eb9da73b -0xbd7ccef8b09096b9c64b59712776fa7f3c8a56f8774e2697d5f8cd91a456e081 -0xbef40adbed327e5ca72fc3871bfebc7e4daedfa99165e6ea4dc551723ef99d29 -0x3318bdbac9c71dfde3cbda12e796e3a8e9327556d4d4afe48356707b83f85ac9 -0xaed876a8445d724635536248ead848c42ee7af8db04a8bab32e2aa32d4192a2c -0x74b829017bdbf6173331fabe255a0927433fb73987602dde3a1e11e2122df037 -0x604dd631efd1970229020dec1983ce31f13176ed0f2fe98ccd9fc44487b5856a -0x42654793fde99cb37538071eb09661cac9385d3922d223afa5ec13ded71abed9 -0xc6635d8f4ee864f4e15ce4493a167da4a89900959f16b4bbfe9aa703222c2efe -0x4c76114bc7df0ff250c535418ff7662f5ae79c0d005396a0e5592deec2e1dd67 -0x7eb6f36775d16f6062c79461ba640793b427fbc805019fddb6540615b25efd5f -0xafe816c627d7d65478132eaeb947caf1cc028fc4aa2cefe527182769377af484 -0xa1b00fb89bce6268c204a980839c17f3bb48fa9bac8ea887035eea959a1f5af9 -0x292ce9f0a4d89d325aa3dc58173c1521cfb54ed8f2a13344f69dc567c0baa841 -0xbc2f9027d69b3ce931c5b627b30563aeb0d44271acd9806ae165274c59ea7248 -0x5ed9381a9b65c9bd9f1cac02dbd5512105c087cb503ceb9bc740b593d009234f -0xaebf61c6b419339bf66be9900b229235f647c52b9cfbc44adc2a772b295fb69a -0x2a0e23fd8e1acd73891cf2199d35ed4b27efbadb1e9d632432ca6fbc3f781c14 -0xab31a926a30ba5b1c882b632acbadc3ab6013065e669c17f12e714869c430ba8 -0xa414b87b66dc6ced90445b5a38156fb6831a23a456b7a4311d61886b071d59aa -0x68d26d390a754c40e3de3e13ca0177ddb0802422445b53cc0d0f15b1248263e8 -0xe41fcbe21996d72ed32ed9e62c0b2b83ba5caf4d87cdbf9f1680503dbe7b8325 -0x507d176375a453a2f4ed42de054274038ed39905b2c30bc8bbdf744adea86d7d -0xf55d5160e2214adeb91a9fbe7a66ec8dc391d1f10d683be5887aa588596f8c1a -0x66c75954a81a0684703eb2a6c49a8683d746866c935721313cc34ee29138ee45 -0x3cc525adf599e5260c1b5395da9044f87fc226f87600c13096b2a77089f0ab8a -0x64b6904f6fe6e88bb8e342f6bb1fdb93fb1a225a1088f5b758b50f46d8a3fcfe -0x517a27ffba4152625d29016a7e5359815f1b382e85336654b39590806abf2268 -0x60bdea29028df9d9643cca61f1e46a7539f4023fdda3ea543d90cfda81a171eb -0x22b2f656831f7bc243fcd8f83342c21666fabc0776c3c6824d45df33f0ae76f9 -0x7c13abebe62d81ba6e9a0bac95313ad621b86e088603074b5b3124fbd4dde242 -0x3d4dd00526072f6aa925c32445412843a6d4128fc3e421834c65a1825e18ff96 -0x1f0d5d56f8e7bb99cd52dbb2478d4e73ce9dfec8396a11459ff39a8f5d8272c8 -0x5b7aec13cf829537cd8ff0d7435b7ff75ec606c8be64ffef8bb5782a2f6fac09 -0x07d8287205d51e487de4816ebead4ee40348eefdbedfbeb3a30aeae896200599 -0xaf5389c839f141f74a293a503f04a52df68d1922eebc7f7bfd8ffe8fa71ebfd4 -0x0459bfa6ceb17357d22f24c167d1c4c33ec374faf42f27dcc0b0ac5ec94f48fc -0x785ad4792f3bb5a0d1f2fad93e56f7c6b4921a522b75fc9a03af6d1e87c81100 -0x566214296af15b66ef91b8acf509acda1b1ec65e80448611e767763b78b681b9 -0x9536f3207fdcafa07c59d0c40557573726ce57f6fe30b3e68c847f885bc1611f -0xd93d80ed4989195a522741a81c07a798f4aee5d03c662f0d4e65c1d6332a439d -0x44509fdf35100dde37d8095d466e6c2b75de2f6464b2efc6536ebbd9eedc1044 -0x4792413601c6de464836a287b16b611956d955c3ace226f4794ebea056c5d75c -0xe6848787227744db66f4afee0d63a57d73b83e6bd1fc7ccf0fa90a0cc42df60c -0xe148a8d8cc7b50bcc136780a054711e1f8ae86d717efeab2903e4bdbe1c08ed4 -0x0d8c9be8bea3c677112eba83fadbd76fcb98e17f77118536e3542d1972407312 -0x9e3e0e33df7f04329733b57d200efef3a759652002c273c5c562b9d493c5fe74 -0x103bca63f1dbda1683fadc391de71b15a3d4451ce9b4390e6d5fbd42873d21ac -0x565ac1a31b54c1bfb02809952c3d0b3e6a96b91b95108358bfb25948bc924c33 -0x04a2332178c2a35e58b1303b7517d0200e082f999c36a9bff3caae1cb8a6cad2 -0x6905a6f8266b687c45836d0ce9393cbf39dde1e565239aba4f277f23b6bf0360 -0xb536e83a79fc717f38260279fed29c53698f6c642860486382e595cff75c2bc4 -0x7c63985f07cf8b601a0713a6ea52cfdfa8b89525530632448f788870ee3ebbf9 -0x358bda548f0ca478b853912870918f11f616c620009b699c3ba7ce111a08a0ea -0xdb46b93449bd85266e87f6f8e6418382249eac51ca9dfabf73c7ac6d985837f4 -0x7ce3dfd0469ae24e4172ff4eecf8ba9d073378b0577b25fd5516fc25c9d8f95c -0x73f9a9501a661773186ad158781d8f1299e03b9222ce1891a6843f47bcbdc2bc -0xbfba8c1e1fd21fa6834f2f15de58b30b3c0f2c102699416c1df59c33827e8997 -0x989c4c2878b753bf6981adae6f6c95aa6d76d1788b7dd1a0d5a0674956fb8102 -0x69bfeef3170ecba768ea4233b15e0036263b73592fbd0ba5f1e392b959774330 -0x5d49df9410a4f7b720386ba7d77a7a4cbb39308a48f60a99d623671db6c68f5b -0x7fe8a49f5c0e2b0dc7f35c997f2d10454453203fd4535139707dafd7f45e9cb7 -0x08c763ac1713ba94f040767e10296087a9aff13e62f42c6bec8c5d0f63c8a8f9 -0x23d64b569054502c266e07b65b3cd97f9d3cc997d15837efee7069f970a366fb -0x89704c706819792d6efde20ceb2376b7ca218acd4a5bd9a00f9fdfcfed63f3d8 -0x2572911012615d861824b2fc80be60696081962944e45ca3f580a90f3678d66b -0xe7a28d1b284303320e48359221f3aca3cb7d2f0afe0cdbcd8b134e7a99b914a3 -0x8ee697c9125516fb13ffb4ad5833682fcecd80a5154b6dfb6c42cad2ba8c4cf4 -0x54a1cccd1ea0a3e651a138824fcf8697e673cae2f194a41a15c51e7aa22628a0 -0xdba78cedc82c661285d8298badc024500a0ba132aa3ce65b88e0b4b7d8dbf468 -0x7570daa76ab54ab4f1f4f3fb26e8e4ab48ab331c9a1d605e160071c809ad37a8 -0x10759db510543280946fcd3dc7f00903232f58f6c4543e4229befdd9830c4543 -0x2f623f1f3de42fbc07d1f93cacae1b1240fa6e9b78b76453eaed8b342d0f2501 -0x45d1b419e93b6bae4c2a511aa2db3e520dd1e3a843d68774724c9670315e86a3 -0x868ff32d7e18565993cce8e4103253081d26e0e27d7dbc09e11c414cc0badfc3 -0xbc4c842a505ed2a2901c1a8233ea3b6639e1c24d11a81614da0202aa9c01b310 -0xaf25f9ed5f90c0bda5549ad71d2ceaf5f67737f6840ec796eeefb81b3e3b97ca -0x048f1dbd82ed8b6cdeff938f291e1e8825d9a369149a41df7729d0b287a5b958 -0x10902b1cd6b24d150e054b0f755d47f0df797c0ec9437fc77211a3cc3f7881e4 -0xf87e9473d231e5b5d70fd45c19b3544e7639a464659ad5eac36d118d378fbe89 -0xe8c46f664e03e79074f4410159360fd97ada0e80e66ad13128a38611df1519f2 -0xd545a3a79db059f2f90460b8c0f5388748cd1b4bfe6597c2d4f8b5d5ba9badf4 -0xb4d558f9b791a1604e2a0b7ac27574ef5ebebba0ea2edba826c6cf29f8a67952 -0x658bea0b0e507e36315eb2de329089ab6c3b6f018b3619b8f5e2d11bed7f15bc -0xd46866a103c11830671b026994930c1021597e6400079c3d81f9b9e68c78e8d3 -0x7519fd04d82aebc34e2b67db1c45eb4f7d67ca52931c49748cb57583b9011cc7 -0xac0d6ea899c928dd149e52ef178b8fe2dedc25a207bbc4b5c2a1b3261896d188 -0xcea15207f1e051f3f073c2eb1bb19b3dcf887eefe713605eb3584bd7f669a0ad -0x49dbc8a4bbf99794c66ac0d6a627fcf54347b4fdf6414e46391e368f9cd5d202 -0xe2b79fc6814375abd909c1f56b99386b8ca4ab9ffadb4131f701ffb43950b224 -0xc6075c317dc29916cbcc943edfba553a563c51c96c1586598642f29d80699a43 -0xcc11c427a3960c52b31a99114c035e9e6e78690f354e0e4c3e48ba1ac33fa665 -0xa4d9a33a2a758d39337acc7fe3e63557547ed19511f21f4753012e78a790fb9d -0x9830b947946f864ce895b5df7ca5b3a1c8513a740d5b14052c1ff1df838fe4cb -0x456fc04687b6724bf341ac2804f54aa1ddd374c732e9f5cc1b71e7dec78d2bfc -0xb9e2ab3cc1b3974a6b3b1df72a74fd4e481222ee525d6b33dbadf36ebaaecdd9 -0x4608e693c2ccdb21d3947a78caa5e8edab43bf3b41246702059821ad22748c9c -0xb1effe41b2968aa88f18c2f76df09e05c2bf9cd370cb667a1907154c516c7bf4 -0xba251b544163aac05a3ea9ebfde8d2b3c0515afaca98d34065edfce9763ad2e1 -0x5992192d00ea2ada1d254605a23ae8ed4a42f5d621eb59e9b75c2527fc63dce7 -0xbd809dcfb6ed1f0ad67bc8693d493668fc41a703d4d2f11626a5050d29502289 -0x651ad9b316724e531ad2cffea2d417ee28e6cdef2d9db0ce7e3164ef08afa476 -0x0d53f7cb6d8bdf73c67c354df823cfd75c15e338d2938f9c8de49b327f7bea8b -0x20ea7cb016f72d204f7122a9e62896170125296032e41a7aa8aa17d5e3e7f3af -0x4e3523c31e7620ab04c15e6f61d1e6655034c0d8071716760cd22f8b6308c4be -0x1cbfae8cf09db900f593166b82924d66afcc9594256ff5272df0057b66c83ed2 -0xb54c70f3969d2e527da72f3bf66c53a6b8e852e968745a6593f04584bf0bd46b -0x7daae24c415c735e5ec79c88a42fd427b1c57eba7b1eff8ad2d27208af14c95f -0x9f19bde4e8f3fceb0efb78d8f98ca939324f7333d38021accef522f0c846e357 -0xed015295a206ece9e5678c471e247683ec59d0246c11190d3142213b52f26596 -0x7dd9af12d84ceb785ba6f467cdb390a8e87817bbb6e73666cca10482c6f8b012 -0xcea66391aecb49624c8566d4846cc2a356bf94e5e9e2c4fa41f56c297cc224a8 -0xd7cfeb90efab5b8112d550de1b78d4a4dd48163cabf0793479a60f1830c34746 -0xab86448d094d68dec947af56fd49c35b6ea9d53c4307a1e6839ddc840bca38d3 -0x9762b6b458e14564563571b1fd5f2bf53adfd4f6db778ddbb58414cb78eca434 -0x193e4b20f21282961f7456e4fa33df76dae405040bc90142bf8d9b0922129274 -0x9db783dcc67019663dc6d4261eae226cc2a156d4a6602e74e1dbd240f18e54e2 -0xd0060578aba724b1db8bae3ddc50f21b5377dcbf5e089937d095a1e509f0043f -0x63ce95a6df16ad17b6b2ddc9a3ee6059b9be3fb3af5fb56508a79ee9a76d4712 -0xb813f7376bfd01e8b6f2b9de0d2388835875814767639ee63dc4bc8afdd055a3 -0x7edefd64f6affca896aa0ae665c16e090ac75163cbb1c6f10fa12a4267b6be0a -0x1809d0013f8cf289ad07c4207013cdf03a3792ae8b740293b2851500dce3bcbf -0xa2aacfa2d39ad440524b5b7ad61c538d4e8f7337b478f20cfe48b4c8196d316f -0x9a473a292c6f5cdabb6c3195a49655641b279c4f394472fa317185d08abce8dc -0x342e5255a9b24f60c5040463a26cee56c8537498add8e10645044baee34e6371 -0x271bf061efccddd22b05ef792a6f346bc2687b0545e78db5a3348e02dad309cc -0xf70f3aae3126dc700ef6d251577c7327d34ddc1c664e9041465e81ca95d726dd -0xa99b9085cb04e89597c27eed0f7b273b31a002b015ac32363cbf656e4468073e -0x147f62a999a99d5298f759301d5afb9c0325dcc20d3dd28e893d8a2ec1d65491 -0x24ab78a3ec7cf9b0604410ede329539b9b7686f9f5d8acb3c20e327d874221fc -0x53c104525f6caab9b6eea4fb3984b88aae4d5f799fc4951d1ca7331d0f47b432 -0xa00114755cc865c748e6d84c2f9584891be3867f003d55e7224daf2b05574598 -0x8b89ccff6c7490d12b672685152f32496a3aa97ed384df045ce1236ca7ee1224 -0x054b5be36cf03282278ae41fcfb9e050b5b76c0f593955c635b6abcd3ebeb98b -0x99f15463126b3ff823956b0253d1276848e7a2812062d60cf841bc44e48bc85b -0x5b2fe310599cfd5373fb40816febb278a727c0c57b28bf2e25f8feb78e31c6c0 -0xf4dea55d00fd9ee7a187c25d9efb9abd0f010886754bceeed9a40e2dd0b42ae4 -0xbe0380c51e2f6a7fa37ebdd8d331b20abed6f1ab617040fba8d1a36b47a25e94 -0x096cf7493a3c746c9e914ae5b170d1da6b73721409ac7d8e4e617d3b19a47a35 -0xe8f1b9ae46a4213eafece818cc17afe468479ec26a11fac64060386c73348d07 -0xf93cb89d06e6e7adbceb17939db626e406290baaf6a460a7538a1af1ae169f98 -0x9aebf80b555f54e34a20e8bfabccdce26295b79f2eb07e294e8d2de4cfc43814 -0xbaff09ef588d81435730e5a809ef99a8f4b2f0ebb6c3a1f096aeb42fad803fb7 -0x602ea03799ea4261911a2eb5cae9815315156934c44479167a78cee9318fdf14 -0x217069c74ec9d6888cfcf2565562f794b44398ef5a69caf3c070d0bbe6e01436 -0xac56b789921b3c928671a7a54e85e295550d65a2a4cfa08155be3263ee598b44 -0x1e47e2b58684b41cba9e9e61e6213824bab121cd24e7595e6712af50ca75f18e -0x88470cc4426d8fb4665d29a9ae3ab9a55d61766da6f55b128ba5a2b9ce0761a3 -0x1f5ec6d1384a91aa5cbb11cbe8772c24c147735766398e4166871a9c0adc4f7d -0x92000c8d8f50bddf488b04085d987b967827c6e88afdefe7981010db8810f150 -0x410e43fca2a3dae4998aa035043029d195ff9be7b9762b48421e4553184db5cd -0xb66ce67f9cf8570898e070d70074c7e7187b567ecde4c79ec5cc4c46632be819 -0xbf4ee9c5622f0c261050dbcd7a50969fc3ba0558fd47ea1fd37bffb7335f5fe9 -0x164136d7a7be5855e1ff1e6301db24bf2afdcbeb1e3d91be65b069aefa68db9a -0x487f24c1c6a076470e8aad906b476cc36782dd759d800665e62b58a77924a053 -0xe137e3edbf73dc385b861ed4087088302fa11d647874709f4ab056deb8372cc0 -0x395a32af3430c253c68615cc4c7cc009fe83a18f82f3908b0f28d9630665ae89 -0xebf4e4e5af55fc34e84f11e27aece08cfd2107baec1b2c04f1c9c7da94bda5ee -0x15d63e5c99707c5ccad4a29273cfe24e90bbf6071aeff84d05a68b68e5c1604e -0xed208b857c49c530062310186d9da00feb1bbdd1d2fcd8d4a3e8ca40773a2f00 -0xd60326f14b5d9a4129213190dc89d4c12366bbc89df1bcc1d86ff20fdd1d2e85 -0x580c47619b94c48f49cbf5a65ecf17b6de61a3b7d166cc11125307cfc15030a7 -0x41b7cbfed73c7d9b554529b12e4ac0ed3973f54df41c409c788319466bbf0931 -0xb73973ac1cd45a17e2a648004ccd8f9d302130fec7593a1ef69348a26f884ba6 -0x436f2522c3bcdd6330d3dac0960a3e2b69ce2195bfeaff0724eb718d46ee3b08 -0x002b18f5383d578249677dcad6252ea7748aad5ecb3f831d7f445caf5abaa168 -0x430499e14ff8881e5e5ea248d0677d97c21cbc7ac43b011d4cc092b9f0445e52 -0xa37eee9855a33b2fcfa1f091ddaa387caa78b27c08b35d5b8840d9e5d1dc2cb6 -0xfdacda4244b792fc30a0c56746102800b99f861f87b9e4e12971d20f500166b7 -0x79ae772bc0828872054c378a6476caa04e09f0f56c487ed33f3818e042ba4708 -0x9d2cfdb0df3ef3ff6bd7e3ed949a45a53d9ae06367eeaf9ab32179f0461f9a6b -0x3c85e2b337666e2fcf907a8ed0dc57b6839f992841f3a51be1ee1ac3161ad7cd -0x736c66a23ed320b51843920da3e8e631803a9bff5b85a7076d0b2faf5ed4c1bc -0x7b969e43e8e5f0631cac5cdee6292f6ea045bb3e265dd30a2c75cdd1cdf10da9 -0x2aab39f06e2697619d22ff3b8f350fcb8344e7b04a1b61feb08b970c084f71c7 -0x2e4b5f6fa3e3383c5bf19dc9a2d76a280cc0fd5a57164b033bc5db602f027159 -0x09b653e538125f08b905c721b831fec08455d574b7fcb9211497ccc8c476c653 -0x8987e9e3100c1bb7e834a85fa8cb07fb4dfbe8efae7e3c353785e8e9c30dbffc -0x7aff677de70ad21402b9e5a1be2f89ef5b0de257a335d9ab2db7cf29cded1fe0 -0x9edc502cca86e95aba73ddfd92a4c722d4b5ba850e86cff84eec47d03d74f47e -0x5f495edb133a679de0c15bad40eeec0681836f90138f625a85e88143c6904079 -0x160443280dd0627a5002c4d5ed16765b712f6f2410fea8bc97048b608dfd4c6c -0x7063a361dc8a22d4a8ea806d2b4719e86ab4f0e4cbced25704a307e4d1c5b692 -0x6ad5e1d6e438b672271d433f4f56bfd0f657286aa5c4d8dbdc70e3302d109831 -0xe2476cfa61764f807671c409d5b4ae69a6224704fb941670dd2a4ac1b899cb99 -0x2de66033d254b07a04ed44321b4d19664f932666d7b35e803f52a07954e2bce1 -0xf4af8bf2208edfb170008fa74884ee2d9c1b16f238ff2a235f00bda06d18c195 -0x5e4aaabf21bae259a78de2aba5e89b15092a580b6a538e7425c55683566dbb0b -0x1a19a9327e162bff32a128a254e682d5b415cc2c8ecdf9cc45b45fbec34ab1f3 -0x74c28446872ef80bc768b1d54726a95cf90522ab29378f02b94d42c0e66681d7 -0x403f085cb25fbcd52226b7a1a0b5e3bdea843669860a4d48377adbb3a37a94ce -0xc18a1e781b161c2782bdcbbc76860c65d9bb7f89b6878e7b756a17a98538a81d -0x08f4b4d3e2766a9b0e2b03429ea34ff5f7ed377b1f9a802b475b32c01281d5ed -0x113a4786fd3c00d24c61bc46f3a5fcab79d67bd91087dba485e403b2bcb10bfc -0xaf1889540855dee6193ba5c6d558acfe8f830da405dac468504d83eec8bfd27e -0xad184d027c96f43fe3696f08a164011958c4a735bcbe64cdfe52df53bc40395b -0x0e3a8911d7471b3409da07e359d1081dfae7f77e12744754f13f480829334267 -0x95786a6ff98db6d7c7f218119fea56a15d02c44b6caf45ee2b7fd7ba7bde7386 -0x79ffe5c97b9dc27bf932d540198a15d55cac78ea8b194c26e0e253c77b41e43a -0x97dcc5258b7eff08cd802d5097da26a48c8eccb63cfcebc1f9fd6a1d9ccb4278 -0xc993ab75479b39de5589a7ff3dae97de18f12a2eb11db4c35d69040f20250fd3 -0xb163467adfd98d40ed7ec81d4b145871075abcc9f8440395d0598957a16b9e5d -0x5f5452a3ed289ed95549dc6365038a171188a9aa67c4fa01a7494ca82b07996c -0x98898b2437a089191e06d5f18f0d03617ca9f9930a31fddec06d871d218010b3 -0x4760db09d2110c10c953c753130e1e1e17453730a4c51231ab4492cebddead52 -0x755c5fc9d67b2b196f22e7a68248585220874ee10cb59fcfd385977a229b993c -0x948ed08be3e31c61b0e15e925855f96ceb852274f0362aed8bd48e04526fad63 -0x9cb1e77b9b46bd93a555e080395f2039548ae05cc91c011f9bfc5cd83993e8d3 -0x0107ad0dffc7afd693b0d76664213df322bdec1d04c878c5f551c93d88d828b5 -0x4b817bc5a653701549d97f9389e048973318a5fe6ed819629d5b6b0030b2319f -0x3d4cd2986db4df5ff5987d7aebbba54c77bdd6e9af16b3290511d1ed143a8221 -0x6b80c1609defb46a5877442372ed0194536b89fa620b240a3ef105e724e34c93 -0x9484726f4f1d5fc06f39dd1e05d533faa5652ecdd3b845d049c2d4efe26873d8 -0x6f0ef632e4f126744fd601b08669aaa37f7bb8706474077d142cd7149e2c6e53 -0xf53541bb1036dadb71b1458e4f2a339cb2700039d9ff9052e46ba2e274402b0f -0x5f279e5c5f914369975ecae3184301c73bd150d8d9935452b730f104d1d49d7d -0xbaf61af8b5181604a2aba41afbc78f6a5bc431a708dfe7f27b3a743120ccba6a -0x2f044af6e93613f773046b19bb98fcb98d93560f4a562eee89fdcb824a86a626 -0xc24a7cda6231436df9e006371c09e816bed226c0e800338f6f1cc335cdb25726 -0x0ed3b5a78b22df1e799f53869d9f893e6a4cd5e068cdabe712d99519908224f3 -0x2ab28ad2599a9b86f1840ff96358e76cd9d668b66539b7138cb1364986c4590f -0xeed5963e12e670b621dd1c64b9135e14bbe0e0dfb2984427b8b6afb04b7e00b0 -0x8a68e945893c1e9d01f43d9be8a54a6e88e6508a11825b21481395b268c49e00 -0x48fe0dda87b2e26fa9590c23b09a0ca64a7c44abccbcdd9feeeba96d82b5d630 -0x0154074473a131ecbb970938aa99b35155c74199843c96ff88da53c73c481bd7 -0x5e02b4fe4b3df748b6b1d03bbc2ef07504f11595ee64d089e30064751033f3a0 -0xe7fa4adfd5b900620d7ba99535f291b10073c4c61f74e2a7a3d27b191f6e1ebc -0x31930e0e1d53ffe2f6ef2f1f91b870bc46c530b9b04f59d1ecce1898dced7f17 -0xc0bb36b38b9c8bf459aaa4c0e04f4b3784ca9cb28413d58053893d5ea8da8c0b -0xe4135957293b9b5c1f437c4bb25b7b26de041d65671da710c9a02c5e58730b1c -0xa2373700d70ab77d3c6bbf24b59da4d1a46756629dd4676713685c9fd82f76db -0x39794c502b238ecd0f08f9fab1e59a563acacbd35334de5df2346a1594d58940 -0x64fdb815bfa3dc9549e15d71e3fb706be80169c40d681e793a3210b452406cf3 -0x95970f80387c812df7ca599979b1bb30b97fdd3911a9cc6d5684fe9f8613e7d4 -0x91ff4899e1f71dff0bb3cfc172addf3f836821f86511deff70ea9373da847da4 -0x0e84c61973e00a8b2f3df1ffc3d3f64423a9b0a955468c17ac87281e0775d6d5 -0x9441f7decf0e1731536ca006ce9108994d2fffb5772617ab9d22d112352dc121 -0x19718a3daa6b68a86e4519bd2df8b828f39e9ff4f98b508b5fc2440d8a9f233c -0x57de13ce3be2fcaca8c44a762a126e2e20f5e8f3a8274aefb12d52f786a3617d -0xf9f3bdae62f0473ac0a1e0abee61eb05ae56795e97f6556c9b6ed38f265f7bef -0xb77a58bdd8e40fb1c02c0600aed9aca1f58e9f238249d4cad839aa54462b3351 -0x189758a51429023722a22c208d7eb5d6afcd9ab46eca6ac38d9ef7a5008cd855 -0xf50bc51b4343d5576cedfb6d66cc2d147a35d620bbba4eb4e16e927f8e68dd53 -0x225c1fafd42dd78949d4bb1693389a2a0bce40a346e4ff883175e16951f48c9c -0x5ae4174256600450ee969228ed54469fa4154fb92180ae8a4419a73e8b03ddf4 -0x9b2b39d9f05dd4681c18adaf87cdf4e8f30f64738a79b4ccc50c4ac0164b6b59 -0xf58de18470de05b36332dbecff79b09449598f86d040437644735797f963b021 -0x5cb8c9a66a8d02d0cf3d3438525af647c4814b5cd1582c322c641403a48cda9f -0xd204c67ee6449a959f40d3f91acfb671a2f91f472a32ce4c91bf4278000ddd4a -0x0a36596dc803068b83eaf779e72ec257f0680ce85c019c48f8739689c9000efc -0xf13220a4a47fa7ff931856aa5dbc46ad32d6ee9add4e188402fdae33d740032c -0xa6ba7e4eb45e930457751e65ebee799c3532a607c64b5729139c3486604ad4ba -0x88407ffaad504ad4a71e3c2958e0572d98b89abcfb5fe8116a47410b692b7910 -0x5e8d7b15ef26bf25feb2a35b419c9b4ffd5154f2a78ac569e13f2ffe9c4fdcff -0x4d55a57552b386ed5e6e1012bc842edefa459a95a1d3202d1fa7c2d6451732b6 -0xcc419d9f5cdad28866dcc8395ac5d48503eb08af1331be7444098ad7f4ac2297 -0x4c2744d5d9eafccfc3222ce35fa434caed0b776462f0faed44d7273cfc585621 -0x198ded7e10030d270a41c0cf91508ac660cb86c4a8d03a4549813a69f875c443 -0x9c507a9042cf0241bc5d965726e1f65989305e4743c9928362f909aa31ce4698 -0x81fc04edbcf311151b474f0d0273614e6c80bade96ace1cac00e041e3afe0f3c -0xa3c9c6944d3a66d74779200e80cb6c0c805dc0c56b67e1fc47db22532e0ee6bd -0x35a1071507192b06a529fd286de0b55061cddbccfc80b02b0da6078d15a88d19 -0x954ccc0dadaa40bcb8e4baab67a448c3935a4d3facc1469c011f096554daf7ae -0x6e1a37fd9f70941aa1bd14b60b37ae410a12e2c829e2c40d5aec8245e6e8d104 -0x3cf72840a283046fd14cbde29721e2e5c1dedfcde018a7aebba6abda90bbe730 -0x53b213fab3db847685087b5c35a349b12773f82fc9e2bccd5a3aa8b8b2bcabf8 -0x8d2602b47fad16b8f832aae3a97c3fac9464295f5aeaa3cffc973dc564cf09bd -0x769f2a59114a7c90a80e6ce6589f32d6cac565a998e03101cd29700d596126e8 -0x96c4e1470e86c758d7ff6265fd062b47e87961752e34d1a8e52aa9629c7e5302 -0x3828632adbd8362caef37431d00d2b6c22cc7c166b394da463fbc234444d6e64 -0xcad15794841fc8f2d5a252ef2e9a62048a5fea521b25ca240d1dc4119fa945d0 -0xa3e04bbf3023a78223cff71cd2cc2cbaca32d8e9c1940b8a8b2cceac19e2efbf -0xdb230f2136e38a7c5648ee8db518692b30c774ff8aaeac0473ce5bafa0da1ae2 -0x5f84fff5e9929baecb25fa7e0efc818aadb14ab867b22db8a436039f6874afd2 -0x8df52a0cc4f3a7e09b0958c47e3e70f372571f782aef39afb290da8528d8421f -0x4e9a02045c1111f769fef93bd0444be7cbbc21f06a20319779ef32233e6d569f -0xb25eb896e663cf4e97193aa7a2960cb3993d30c9711b1b3c4234ed1a534c77a8 -0x8bcfece0098eca8ef71eb5d7d2f271b1719fe72ab0269f02c7410d8274aca195 -0x4d89e184d3f3a1ec6cf544720f7c133cd6f80ddef8fc6bffc543e1809a53353e -0xb8a9f64c9b4a377ab20f223df69505455d7c6bd3c006a1c691f21ae0e3a06e5e -0xcf72508ce5b3428d64cef304ca418965980bb6079863754dbb4c8f585ce719fe -0x84fb23870cdfd145b4952b1de9514cca19465b57550e3955a6ce8a9e03956fe7 -0xacb20366082f51af491e895b5390f41c001b49bac18effd783e5f5bc30f8e145 -0xcd5ab7df8708d8daeec99662f8898208e56a4852c2f287a727db83b4a179f539 -0x694427df2fbdeaf1a373112505f26813267273421348b698dac30a8fe0dd2aed -0x4c19aaf1e58c3eac3bd19a3e9af0a3f95f3d15e94f9020b29739fe6af802b64b -0xce72763896c93042f2bbbdfbad1f4b15cf792d15abcf1b4f737d954b584718f0 -0xf67ff34de644a21e02ee945bc6e520f3cb6770d5c01b2cea9fc4644d276be842 -0xb98c7c6d3bcf6a6e40b56eb61beac83d564a5474302acb95771d22b27ed9805c -0x2a6619d03f91afba80287218f7ae1c123209d640defb1b951b31a2693c0d5079 -0x6a2011b9cf290c7463768a11f9925b65c843cf9bb1c4da3c30df77a9034d4b31 -0xdcbcb92688a13aaa52906ed973f4ad1ce315eed6ab20d1af2389c860459b8385 -0xe6dfd60b7efb6a344ae7613af95a5771dd4773bfa205eb5de2e403c330743373 -0xcff41284a599865a2adf179acec388facb7d27a64cb85cda9af47ec8b092129b -0xfa526deb8a509428e203d8c2c7fead4f3afe9facc610295daf03f373cb6cb973 -0x0d5b03e0327b10e509a4e527df87b86713102416d51f731b520cfaff12ab0fd3 -0x107f4bf329df26b00ffd9b77c81fb3f3992eb106abe28941c79b35c17603011c -0xf3915859ffa021adad45407be67b3c73b9d14f3a908c635295b822596eaf3323 -0xf58d79ff8a5faf5041c15bd57939444f2788b93844297cecbd282b8003df99f2 -0xa28188dda517580ec5ef85993d015ac216b60f7b1390b1144faf86253e76ad4f -0x0ec4b2eaa99b13de41da4df0f62187a1c6e3104bf8f15214c69c9b454354d886 -0xec4447e5d68820c902d6cb0f113190c9114e2d3c07ad2c459c59a5cfd3af7587 -0x12041f8351dadeb2cbc0e59b9bf40c76987aa80149cae96e464c887cc038dad9 -0x9eae1eab85590018fda84db97e218931029081ad9a9312dd74e114321e6ef743 -0x18d9d5709522a191af629ea56642f49f85c17e4bfff3de0bf2c2a0874ea52ce4 -0x88fffe9e5a26212fa032fd1a48247a736e98d6180627ea88b25ad3cd3bf0b745 -0x6c876e1ab6bf2273c7e3fa9c869f04bcd0435b4612cdc46b653684dc9f12b117 -0x325d51906d5b17da66e8816cc0c08647a3948e2f60bed3a94553230f2842e671 -0xd255225b186ea7032303946657e9dd9c3158e78dd53cefd2bc6bd5e9c702ce44 -0x7c4a14ec56bce1180c300ab09115c8deddf50221c51d694837e6996927487794 -0x96fc92cca3dce4c0aa650c25af31c6e652bd6c6cd05c57de363741b8d694269d -0xb2bdabfdd63910e1c3a6801230fbf052b9cdb3b7cc0f6b74673e61c462ba7295 -0x12fa10462af8155908b7126191e58bf42db67a74141103834826f6424aedd018 -0x4d91647fa99165159d4a9e896775192722177e757660db08c5914122f3b7d3f2 -0xe4ca8665ef033cd6b00bdabecd4eb10552704857aad2ccb55748cc32b8b48ea8 -0xd89276727385a833d2a90a1648d0a067141428487b37cd3bdd0138495464a7b2 -0x578e26389bf5c8ed4c2852baa3fd6b7b21e49716019a29168739c3d98264719b -0x699ce79871f6ce27b0891449f58560a266f3640f384b599222361cddb775a7bb -0xaa005a74f6f5225084f5aca18e526c2a5a7cad3860fb7dd8af92fa93488c5a31 -0x868f8ef0fbff4aa126542d082a01d6adda4fef3cd11b2abeee168b0c75c99150 -0x2a07541da60fd94c55ae3677431d76665b69718e60752c1265967040ce9ff413 -0x44085e6e3b26a7f3468fc1a15d57c4a170b28ac0d6650d8242e7fb553e8f35a8 -0x811235f33170a2ec856a3ef2b78f0cdcce624a195d2bf7e260b049764acced2a -0x10ed5c2d7170906515593dc77164ecea33368e21154994501c9f04e5904732b6 -0x264779acbfa325285523efda813fae9e32ce24e15165aa814bbc7664c7702d5e -0xc4399634f126d6b34800588e5a79806f9493caefeb4e3284068f94adc94e9eb2 -0xd4e0264df24ddb55d4c7694f60973364c6c3c65de147452e070b1356539ec286 -0xfafbd79101bce17f6498eb6e8e7bba37d6146b67d864b22c75a5c09a7904ea0f -0xff804539b5d7fd7ff1d1b127c77f0f4c9a7587722ad80af02463e727cbad3bbb -0xa11848ee82bb44611a80dc12219ec3ba0552d4671a91a45789061d00fba6d5e5 -0xbde673396cd6764a96b3530dfa1e78a77bab9193014b54e188e8bed455f85be4 -0x4c11ce9d580966fc86fca45fb52bfebfe9597a8561bcb38bcc378faaa62a5ce6 -0x6fb8d8f83ed01c26225a85e459c823530b7b197b480816d6e7fc2c4ed2cc88e0 -0x3d12e38319c0334ee2b3d212c042fe9314e9309a20835d03e6b426d7e58a39fa -0x8238672baa8943941d17997d409052fe4ba7e287dd13a2c4e62d01a98e605447 -0xf125af2291b971130a9a1f82560a72fd30c36bc7c8a48916d757bdff1fc46ddf -0xb0a3e2b99e53892d106cf0579cc4a99f41aa7ad20db4e9249a45287f1fda5edb -0x3a6c30ee90f642b337995cf0beba09aed6f0f8e1af70801502e48ebb0c2d2194 -0x67b39d1bbe1a02be121b88f56d57f3529830d4367ca7a2e40b927c8536700f98 -0xe72c09f9399d4f315bffd0a543bbb6a584b8f8f187cb2f036d4b32afbdc4ef2b -0x9bb048eadb9767b4266302162e7cf19707fce0d3a5371f32ebe02709879865d2 -0x62feb3f13bd46dd7e539cc94152178d7219f391d7dcffbe01d8ee6191ddcf09b -0x7c60a0b51c680ad8b908d8164664d977c1f64783973769b68d744201117f9936 -0x4dbb864cd056cc321c7444b40fd4f38a3212ffad0305907cd4ca42b9905e1882 -0xd6765961e58acbf1d3fa5b1c136d2ef8724a603e4fc1dd7ec8137ba2a03237ff -0x0a3d42a0ac367c1697f875583eb808a454fdd540da4be5fb894089252b0d237f -0x9e5c7c77f540a11a712e2e17ce55e621f6509241fbf3a172a67de99450d08572 -0xb3c7ff882e8ed6c85c9609756140e626b34116cd85b0898cbec9e5e6f69b4a6d -0xafd182216004848a00512a156b263017144585201808f431dccd2b4ba9339aca -0x5365e9e12d4fdfbffd1e766e1b17375021ea59c74a7ff90d162da7f93c52017f -0x5351f4849915344544d205807a0049f4f18a0f167894b81a3a7fb013bcabcc1e -0x963ad41e94555194a836000f227bc05969bc1e041e5990cdd9137740de8a2fa1 -0x95aa30a42b36f514c7a6ba33368964e9c96d6b65d9eb8e046c71d7f80854d61f -0x06e8adb1a98194b7cbf69974ae02e9b471812092181af08af3d6ee7e1bd4d513 -0xd2f7684b3aac420a2a4d9921f8a70a07bfba1f3ca1a8273e856223c5f1c6091d -0x2213a01d88780e12aa4bf479051525193910c46bfee0461a4118e5cbe188dcb2 -0xf067e19b505eb40d2029fcf0b52321dcf900411a406d37e25a5d383e2d9071a4 -0x19faf7235ce78bfbf6a1c8e9424e95cbfd309d071f7371a4603d4a86a58cd287 -0xd2d0285a38d19108260893fc43a58bc217064932c64c8b61813aadbb59a4afe9 -0xd72b8b47955cc3a969b1d6952c1f2831f3b874bbfd6cd493a4e7b02ac760989d -0x78ea25ea81ab4125435b55767e88f2c002ed3926f8f37ac92a47ceaad27f0b24 -0x28e5f43ac213eea9078ca2532ece3dca2056651a422df813d07016d37fbde2a7 -0x9e82a6a784e75ec5a352d937dd41954950a5d571913c24a358fa86853917ee32 -0x65d24bab90dea06da4d15ff9a19d81fd7aa3ad31b6a0be1858b6efdbea37bcfc -0x9bc1dad6b8af93d65fa55661c3d5e6435c2d780e68dc435429359cd07f5aa871 -0x984450e0114f4ca26ce44ec74d535a2072e69eb8df3a52b11ff25271590123cc -0x95eb281373fed757de7262d445e56304f75679b393545638a7b84574f0c2b892 -0xd2a03345e3dba45c9d75750f3d288800ec0a2d289bdb1415632c6cea8567a809 -0x8eb82dc30018dd51a71fed562de04790e1a23dafe7f10160dbe33187dbbfc52a -0x084df407631dcddba74ea7fd37e85dd5f844dfc8566be96e4ab6faf98b68aa2d -0x317449951fdc4587974e34c3b480bf66dfffa2920bad7e94d51a70a2cd698b8a -0xcc58da25e3e347f61aa1138bf75ba262c52dc276dabe3eaf692c311e72fd2cb9 -0x3dd35715549a0f64e637e7bb7889b0f62a55b41f335639297aaf7fa1d48c5867 -0xae1c50c1fa9858a9e0b6edb8b782b9d333b051814100f4082fcf63d00a4a1c60 -0x90ca6813fe726d7426a3d5ea0ac94cf47d35dfe79a3467df4245fbe1da0dfc50 -0x95795b8a348ea1c938f9c65ccbcb20273525f5862aed812bfb35498e81b7046b -0xff9a0883fc5744c1146bf63fa05ab3cb2b52a1c9a899c8cd34409359300c7302 -0x2d2434ddb4a0befba2b0551dcbf9d1e37836b15792181bca89cfbaff4b073e09 -0x9112e67c0fc9c05259aa6a8671b0bec7e6c7e5ffe5af7f817afa945978b51647 -0x618f7418b0e8ecebefeab5447ff70f4cf3864de8b37aa1fc621ce73455de9c82 -0xfddd2b0b1390afe90dfdbfd4a1e91d34686f7d29f552f632433e3bb00e80760a -0xc71be6a25ad7db7d9890d9c6a3ce0f363e1f6d7131ffa7714b7e92b1d4fcf97a -0x79dc1ff6ecae790e6140b48eb55d1db277e96711cbd96fef1ab43af6982ac235 -0x5bbfb7be4b51213f83e63c8065697995e75edba1d47118e917d6643d64ca8d94 -0x3676a223c58d85af0a0bc0fbfd36b4ad5d7db0ff675a55238452980e0c421bb1 -0x71af8ce1ce6ecf8e7829fbb760c75d33a275bcda1a07cdd12bcb25b100af040d -0x76408843550797a2a4c291768f87d4665a6fb63003fae54506f5109159d5c0f7 -0xf80d625a7567d830c05993c3c59361e9a07286a14f3be3e57dcd583e1b5d1613 -0xe0d5b9989aed9d9190eb62648db273b9daede38860bf6a8a4816e03c892b6f1c -0x32c165d82f4626da8f5071f37bcaf5d1f3ebd40ce751c2b26986a5a8c27d8497 -0x4b75560c1dc03c2fee7b1d8637c3c0c1303594953ab1fe264f3c6de9f40e6d7a -0x57f7d8cc2e6829612e3548e537c540a42a9dd5ac639ea760aed1a9373e5d3a49 -0xa67000778688b2e92f4264f2477d11ca8793be6ee3b144838f6f6746e17cd896 -0xd816630d897288682c1515d494577a003c7168e0d3d0e0eaa5366b2faaf8194d -0x41815df8dc16037c88c920c263c8bbd12aa05f7289f65b45f22645bf87a88627 -0xfdd9d134db56da4be2d12fb037d9f6dcea8ae98a3b14277f0b5b38d8d9cd7111 -0x0a5a6b6f54ad45dfe52a560c405a46268ade792c2629dbf91d2578ba94a545f4 -0x792219e99cca1cfcae5721587bcc6e447929be560f5a6384b4162da349794ac9 -0xb1a787118418f6af5d0d7bcbe3d7fdbe3d9087a2125cfdd55d5b90b87521dac4 -0xa12ae85fcaa5a05215bbe7a0879f895f0db368373ff86389196e541bf5c591c0 -0x8810c65184f1c5ca8303e0e0738f26f6e5634639871a5748d11ffbb57db4c36d -0xae66f6e1e2f3516ea9ad5b71a94b1aaf8d7cfa55447b21ab8b2126457416ec09 -0x031a8efcec4df1b3c83ab3319647fae67e5a353b9f7b7c36ba8d9313cd12f008 -0x7654fcbf2c898bad4cac5508dba5850edbd6c01108a093dcdb9d834619847bde -0x7175a428c61a833f65c74e822903fba408aeb2d9b22015cc04ed49a0702c848c -0x44857f740a481a371f60559cc2b0c34dc23da30fb8dc4b14393c4019a1c14ca2 -0xfd814eb37b028a9e06231e623479f494468753ecae4b9dd293f14d571c3aecdd -0xee57f826f201505e0e266810cc2793c4d4cb03d46bb790c15a16083665015b2b -0xc3fc7a2e8bb48ea99e7bae3d286d58278bd1160472a3a7624f17624df2ecf4da -0x18f59aeae401b1ee2e68142d79d5c46d5a03de7d282f724de658523f20b5da16 -0x039a115ca3f02bc732b23bf4e0b9f352eace25c05d3cf7172fcd651d419834c1 -0x6683fc42b8dbf0fe7e4f272759373ddcc9e64d7a14871d14b33a6b96a25d0300 -0xd5a659609ddcd861ed8414922d1c4d661bf2a0fe824089786183e572ebc1d8ee -0x206d43392d9bfdd4427a465ec3638a480557b99fcd214b36a65852713bea1b2a -0x177f2036a0069825432abba471c3160005ffaf24bdb3e24969a6548a43717bac -0x867f234770343ded143ebe0d047826bf3fe4e2e0ac1646afc1842aee13a5651f -0x243b83969d1225382ff830aad492970709327a288285db8747703d53d3d2b70f -0x3b76a65c46a09dbe3bc0cc9ad8002d466add9eef9b93c700d4659bb9fec65bd2 -0x811745f4b21f38f0728a7bcbcb54fb46709e76fbcc873990ead5a28dcf0be47c -0xe3f6bfb503b503f59192b713b28e836040bf50e2c7ac0d1b1c69133cfc461be1 -0x251fa58a16fffbbde5d1e535591966bbb5f4d988e219fd238a5ea6e4bf223e4f -0x26e569e7891cc752107f3e6f1ddd8ae5400812241b4fa204e0b7d602250bf16f -0xa7a05b9feebcc0674a84bc0042525e1ab3852cd791cb342a241dcfcacd72ad47 -0x18e75031481be80ee5aa693625b93f94243f64d9b34043eda76a0a572e694416 -0xe99478edc7a8627c94a6aaadd5d7fd60979bb5a6599b31a79fbb756d4e0f5969 -0xc61a290f8b002c35ff37e1531d3634c0eafb1532e4ac8e2a8acb9c1c03aa1d63 -0x3bfe47f209f96ecffe7202f63d9cd5a9be43585d7214e47ef5f7f8bd105efd44 -0x3163293bdeeb24f9b13f8173a5614efb2b5af7fcbfc23b25de11e5cf3359922a -0x8b10e5f8b9c7b3ee15f7184ea33c39df209ed909772e50700f5f66f51ccf994a -0xd066dc3402e140d5869051af61344e71e39ac5f7d0525a650b4de2d9e206a5c6 -0x5a4a98f80c31a6d0826733d8747f0ce06c9d9654e40dd383e68acc3cfe3e8694 -0x52cad89921aafec336960f1c9c05e55996bf361ffabe384caafa71e385322789 -0x2c010f1d4c67329469db2f1d7b34336cb924a97d735ce03a32c1b6ca4a7e763d -0x7f9676c161d1c5eb5430760e1dfb67a0a42e31643b87a282d867c61dd12719ff -0xf082aa7819291c224cdd80f709f3be90f40e285de1392cbe3f5849cc381a56b0 -0x166d010ab4eb5d9366eefa4cb5f9043247e5481a97af1a65ecde42deaa70cd2e -0x6f23fca29133189aab92a23aa423c43c1e47d07e4beef3896667497e92392bc8 -0x355a9d582e1415fe8e5ae43442e247f7b8f948a4a3d079207a969d5d2503f795 -0x98260fad97633697e597006b4d9b4cf945350db1b1970217a0cb1372bae8936a -0x1508f2235e2326c93b33a5b0b5fa5bafb8a426fa23cd135d21032bf24112a42d -0xccbcd52425a6f186a1d3f996a24e45f78ce68a2217e2a8e00fb2c09723373135 -0xcb9575dd4fa93a5c4acb970c8326ab061cbc52c76a723d0be826e19dded33186 -0xf72adb48097ae7786a42918a6bb7cb34a599ea522fe062686e004a0d7e589b81 -0x8c35a470be8d1c45a49949d0abc9bf5a072f01e5085d25a5728b9c6d7eafbd7d -0x3286d10566aca1173847c86f6786a7963c3927f7e4fec27a6a3b52b4d9e0862c -0xb73185e26de19b9f4aba804755376afa3908bd5793f383ddf8ff0db07e000599 -0xb21aefbf85dce06050917be0326fefe25ec3bc12d2ff8c7d4cff212a86dac579 -0x5cebd1f202cddb3fee9388de459e982017fc715c4b465d2d411c507a32fe0d7a -0x9648fbeafc40ec7cff55fcd3b383b40ef74748d02efd41641fa42de71edd4a71 -0xbf86c79d6c290d56bb166b0c8bfa646a6e63310cd6f884a73b4dba2f684e3c4d -0x8ab1efb32706c578f7db3d920adf13131ee75275cbedfce4fd0f94ada1a6fab5 -0x7e0006fb20bfbcbee5bd08a7b767a2b663e7a5f3f8f1b355dae021148bf84103 -0xcef4ca9d193774fb2ce3fbd730812404ab9db2fc0421a65d9aae459639f77f4b -0x36dd707393287be91bc1c1f7d464bad4ee5c9ec89f3f1102ea9d826cf4196309 -0x23b7b22d07a40516f3ae715e491dba6a262adce0279a09eff305fd0cb82152be -0xd9c5bbeec6558ae8829807c868af0279443366ac055a7dea56347e6a0ea97993 -0x93ce35c88ab3d32c87e8d9ea35b8c2c229ae35e8f79f300b8e8c00179e9f293b -0xc84d5e872b38aa65fe6c75cef8fec8c204d4f046310325e0eccabb883de31ebe -0x7c84e631ad5375c676beacfd075fb56aa8f3a8711e83b1e83e40014138b68b6c -0x4116039ce7793c90c76681c866efc8db36827c749fde177f2c2a4551d8367bf5 -0x07fa5d92753fd42b6dab9f0e23dfdf4c756c48e3993af68842a9ac74fe1a7ed9 -0x732905430e63fbd618c23c35a4cccb00d63f1c6d64168940cced8679de275b9d -0x83de82c53466d8498502b31f1f1f70a4cadd0fd411fb3d97bcdf58bb517a1374 -0x4e32ec68c44ee273bb1a1f6fa4469810bfb5023bff46dcc56d71ca7abc9244d9 -0xd9f22506e16af33e901f6413c567a14fced7b9feecae4ce4167a87c90e472bba -0xb79dc10f15ae07a78aec8602e3041836ef052e104b94f927a4839c159d2c4f1d -0x557597f865e540133de21192cd259899420e019583bd38d418c74d7d612c5960 -0xaa89de24d4120d3f5605cb344b2d9c74136d2ef337196b8dd9cf12b57e0d4556 -0x8990a1fe64e6ab0201d65c3831dc6dcd054629a299d2c278ec22e5c9dc2c5b9c -0xb1d04a0621ab386c48fa6ba41cdf4909f0d5e0b33931d986362ebd4b57ca8bb6 -0x2007a236ce7c5ce5207d4556ef56f7a6d72c15c678d9689ad78f9b92a42a87db -0x4d609178a957f6b9e1ea8619457eaf3372b8ccdb284eb0d68f28dc535510f98a -0xfef2e2bae1b3056c87679ef5c820d6332997703a1b5c0b56515d335ed7b2942d -0xc46d9782d4e017aeb84e5b6a042744df0d1500fef04b019fa153986add508158 -0x321b5e6a8fda470414eee51a207f59b721620d71e18e15abaa55a302b1363b88 -0x018a0768a054c880091e385056ad21a685f812339c8ae767a2072da17cbefc99 -0x4507bcdf565d5330bb856ea9e01d4b4821b9d1557fb3e8b754471ed32229c9a9 -0x779dd64c97ba44136ff77025c2a7a09041f5962d5636e073ae19f28312a17910 -0x4fd5fb5c00b5fb624286e318c015ca97cb2e51bf039729a856c9f37356b532db -0x51d096a123a5517fe1dd003933bb2b7518b4170f3a08d6649a9c4f0ace188fa6 -0x9a7c2b13eef0a616feb34dc732746b6c7687d38dfc165ae1efe9f683f0c3d9dc -0x0d1d443a0d2e1f00d4200cbe41f1d4ba5b7b32829b5997efb0a49a2027f5aa00 -0xc66573c7c8f8eff1219808279e3c40d0e0719efdeb27287cda191eeec567fb87 -0x99e4f4c60a88e94fa1715ce21716a37ff4bb9a3c7a602498eeae0ffe397dee13 -0xab940665190b5c71df48eee15dcdbb721a9272eea7a3ffa4aaf886cc770b1a42 -0xd36b482e356265295ef1e0a70c7ccac91b5fcd2b1b5458f2fcd954b985bc416a -0xed5f0a47b53760028a3a9dbaf93f9b1263699ebda46832f8d169f42a31a39184 -0x507137748cf6808b2f59e49ace9c2d47010d3fba1a982c01b9a953bd8f2c9b21 -0xa7394df5f3cca0441b48ee3cc52d5655223391f2ff1917446ab914c46ead5db9 -0xf80dbe7f06004e0cbe243c6b75e3201701e2dbe83c8070512db00e83ef3af730 -0x48c3b4c495239d7b984e7044b9b8cd1e7becb75cb6a16e24ed8af476a1a7db9e -0x64c876a9908174d998364c4ed6136793ac86f03de6ad8f722c4745c73e69650d -0x62c2b5ec4e70c027d8cd413853f6df928d926277558116308375b5ea4a114c4f -0xab8530943ee91d6fed1f7142fcf5f0973774410eaccc7b8c26cb693b0addc516 -0xafc0b1acee84ee5095f2c7cd19aac7967199e4bba77a17d139282e214fb9c3af -0xa4ec4c992975b54078cd5f7d6337ff1f9bcf2710d21f32de034c46190098c8b0 -0xc603068cccdab299f971f8a1e5584e59fb339310ea3e9f0d66369d28d59d326f -0x79436123a0dfbb228418e8c6068a726b0b8d0e7e6a5821655a002a3aab9ec89e -0x8b0612bb99686a9234cb5cf4f832d29fc0c5413cc4ec5249dcd0ffc0140442c6 -0xb535791e6e917b7ffe4ebf3bf8075b871ce02a9ba8d21f361c7b4a02d17a5406 -0xb5a29e72e29e7b2dc1880ef0e8a0a9c01f4b77967be4eba47d2aa7500e3415c7 -0x6f0d6f40077d72557e13b3871e67b444bc5519bf12e32872303045332ab9caef -0xe46df8f52b624d8f919ee14d5ed8622b9bbc49d9469cb90d05b6be7427169895 -0xb7383ad496d977ebebc828d6fd95d30a122ca65358fb0382be64dd2d57103d93 -0x07e768c1d278ff6f59687dce95d71e889acc0120d0227e01a77d679152d022d3 -0xdbb544795158719381c8cd80e04934d45d7ebb804975a3d7be9a6c91a78812ac -0x30e2451724381de6af92340e23d36117232d0351bc87c8fd54e300e1ab88b235 -0x0c4a907e88a51e15440c3409ee03fc4ece336856373708a7df00f8966d905f65 -0x0ac912abc6c73ae569e51050240f3d6a1f14c887e1f2314cfeda9d919f27e0f1 -0x2e5c009faee94d5969fcffe3952b17ef57c1a935e16b4f88bf34f050a5979b00 -0x8365cd931b92eb8f3ad8b7ab7f472de19cbbe853137c79d49a481ff755832648 -0x3096ff7eb2100aef8df57d968a6e20a666e90d944075eb583ddf7f506913561c -0xa297b609d288496fe2fa9b5f92af052e657dbc179aa847568d93d79a23c3a423 -0x15147d771b58b1f22bdfacf8a0ccfe3d749d573fc0d0df6bd920ff718b472810 -0x9506476d007d0c9bde7ad98ce31cb21cf8e905c0e3551bc4fcdcf4f9d1727e65 -0x273c34772e4a1e5292f259c44e548b5129b4f064e147f666631f441c05513472 -0x10148ae359df28f71b4c62092e5d242881ba485e55e1826f08420c2f2b664b95 -0xb6809a95b671180ac13bf195b96a4ecbd0b6d692023a9367dbe3d5b8e2b85db8 -0xb5995c3f75894e7c539ff84f9d07bfd2ae23290b62fcc6fef735fe6126af0d81 -0xab1ac270d6a95db8bfc4d7bc7ec899782f6c82d536ffc36136cf0202d0863bf5 -0x6c812d936f4eb3245ee1030957a805b5aa448a25fdd0ceaebbce54628bb63e06 -0x83b0afd1c61576e2764aa0da6a511013523db863e68773792ca89a2235cd88ec -0xe191645e55f4f1fa9686d1586512a21abea1af669fca5d182bf9a8a1dbd317a3 -0xa0f3af1f7f2f1fae04ff86690eb1ce4dde6675637bd61f7e1ff005e7dae63020 -0x89e2e275683d0840a300c354a5379bec1910f66b6b881e9cf41841f5cd406471 -0x1fd30f9ca345f8017e6048acedfddb693d212c78102328b6f9d821d45244eebc -0x2ebb2c1535f086a98ad7cf07d2702fe866070baa3e4747f6b030a0231a231540 -0x4684be5c8fa18d0066018c3c80e6c29fc9657eb800f639e36625fb3b6d8defba -0xad9ca3ca2da7bbc047708be0b7baaceb8785c98e5525ab69feff6f4c7fce2b97 -0x477372c94dec3cdca9c8605f0384d5bd2b3f761c3c92789c11b52b981b4038d5 -0x4442b0297c726ac95afb323b035b8246efebcf881697578037c7b6be7b4e06ce -0x42e431d2dcf2283acadc7d0823382b656976d82155b49f8a8445fb1f042455de -0xc84071ea644d6c5d7c4eaf173fda3ea81590a8d44073360b72f78ef9e3600fb5 -0xe0088f9bf1583ade1c164e7b6cbbccc7fc3fdf81352dda89749f2e92d3f86bb5 -0x56430ab02c16e4a502f8d236849385f9a5c581ad1e53733dd14989e035b1d905 -0xfc8202dd38fc66a4bd4fd8795c629965b9d4ab12b9e0bdd675919fc2c713c051 -0x91483388237705d9afa1bfcb536c99d071e6b50d7991da10b38c07c327e45caa -0xec283cdde69c2696c0ded47aab2f3560c74a56be1935135f7753c0daef985225 -0x536e7ecce8b6f853c3ade5a53554f194861fbd60479687e608b5df6e720fd7a0 -0xfceaccda03e9c7197e388a4b3223cc9b15c45fcef5780ae72d0d40a3cbc070d9 -0x2913bf017c3ba87435a66fbeb81987b67f44fa444dbc165e606e7831046f15ca -0xbcd8599b49e545050dd1e84cabd752bc2d6b5924bfc2ac1c15f480683fe200aa -0xe9ee11f02b64fd188b0bbe476743a5a20f7648819c61f376186c3c5013a3d7d7 -0x2be2e88e7c1423c04c1d1f9c0b1c1347ac0dd1bac7b2f8811bd2a3f0f606b964 -0x29b9e37c4536329a417cdf0e9c4d97830ccb2a7847d278eae347670691247b4f -0xabff2d4e9b53f930f650c902c8e0af59d13d93a778a10751759558f342e96646 -0x8c06398d851a99aa9ddc91f133d423ec7b1c6397a3dfbe8204e026a3bc7d4fde -0x8ce457759b255a296ba3a3fbe0f3a2da844f30b50a44f72101a5195ed7d91f3a -0xdbaf64614157b6aebc0d035ac0c9f6b1e439ec8950a59a9388e981524fbd5a51 -0x0e6a0c3df8e26eeb2af30482105863cd694423cade8e4604d82ea42862404339 -0xa7e998e3e39246499cec1b95ab64f06089bb9096da050b3b77d1c8aecf84dd76 -0xdaf281e57f33e0bddc992ba293a1e32e33ce1195a593e1997a80946e597a01f3 -0x88fb4edfcf8bc2251cf346c4a90eed120aed3800d2eee41c7cb479d4064f5b42 -0x3cf3a403324b99f63b9da548ef58d0c22b4202b4178507f6de6ea87bd0426f56 -0xb4af638a90b6751b37cc6b87230cc7c6d03a0c11392d362fc79960b089579a9b -0xdc8f0213a7708223d8d3e14fb4301299ce7ce29c6421e827b102444a8af9aa4b -0x63a177bb2ad78a1a8d9f787cd66c565a0e2fd9b5ce6a92edf2215f48abc9d39d -0x03695e40e029f4f9fed796e60bde1133f0392bfafb33d28b447ee64b391c96fe -0x3507f632bbaa8b146c52451b463ec344c53c2f66621e9ef83a576e23873a1d09 -0x1b4536fc33d105287d4a21a03f3ec90576f32861a3d00f1dcd250dcd37be0494 -0xda586c6a9c717822d0c9043e781895bdd9e2e217990add6e62374074aa2d5b13 -0xd85a74015788fe9c2005f497e6034fcdfdef07d7b2876587f48d92e9b23ab034 -0x268519bccc1fcd1e19053812dd176db8aa61ba792a955ea33534088d8ede83f2 -0x46421fa80696f9a22f18c958e7b31ab6db7e5ff8c431aadeca89a3686c13b8b8 -0x70bcb5a865034ee19d47fec3ac3ce44f0ed7b24265940bca9734ad3d31280258 -0x4f1c92765fe1ebd445a0fdbb9afb3b0ad064a51c2b30aeb8e309423550377341 -0x441da9694ad5874dab157b1c723e4033e708ecaff589819ce6c1eb2313de0225 -0x8941e1d0b8df3b09d77a47738c6b04667736ee3003f50df4247aa7e35a2a88f7 -0x1919d46e3844a82e776bb88e40a12f17e21a843d0bb5660a08e65a47cc1b83e4 -0x7ce7b8eb73d64f311f81ead30f575086b5eeb8dca0b2075ea8fe96936d659384 -0x1296ff37182a679ec9cc0a6fcc0d15b4449861af0c77e6db757a7c978a4994ac -0x2ca0fefa34f14b41c56d3e4feb0b65889558362cb7b4bad86c8bd0ea995e1f5a -0x85b223278dbbd200463dccb44e03e4ed0e6dfecfc1031d1832b87ff92c6e60dc -0xf13cf31be15c710d563c32ba80271acd72209f70e04c5d3e080f49983f9fe115 -0x69eef811b02e275e665900f91580d1c8a3462da97844610aa4a419eddeaa4ab3 -0x4e84fbc496b7f5913135927189af146dadbf264e725172ce243d774008c70de6 -0xccdf83998b89303a0da3d2de8de46e5f33403638bce7cd817f90c9aa32ce93ed -0xc4ed3934b81385ab07319f6201439f055118fd4d9226f6842b720ac2b9d45af6 -0xae22a4f2a362ea0f32335a2d0d0a2e412f925a3a126d757616f8d12bdee2fd91 -0x77b77f8af07ac7445a41d7b17c7195a457df00bb619ff59336433f58ad563015 -0xa6c4be7495250a7012641a235a4cd1086005da1a29b9621912a087d3544bb1bf -0x3159e32758ca5b9a39dfab4c1c130bd3c26c0ac2256595b6fa5e730f69f7c0e3 -0xd7ff3fbe483e2e5263beffdf3c9cd783022d4cc8a826bba2d3ff390bca4925eb -0x33a2ea236db4e403d452189d28ed05942b9e4dfacb7dfaa5cbe1a0334096d396 -0x58295292f24e489ef0f6dca680fc6de70259c1b24980853988d644008655f77e -0x53fcb5a787a2ec515daa208ea695ffbb074efa5c89e9aeb039b55bbe642587a5 -0xfaf70b86cbe4a5a42cc559b0068cf4d5c257cde369ea162a774e0365fbc34475 -0x36a2030e8925108cd0a35856752029a3ec14f299367bafddbcee7e93832d9f9e -0x2628c1156efcb6aba426605477797ed7f06716ec9331943c7f1a183c24d5d236 -0x73c0dec3b5cf4bdfab3d3cbd4b6769915eedcc8060cab2d2e553a520b980bac1 -0xfa32195298a212f7986ed9ee4ae2508f35e50d20531064f2af2f87bdecc73298 -0x9a799cb57fee341a6d3aff2d13df464f0dd46ea5459ddd3b711776e0f0e78548 -0xe215c830f56340614ac578ddd1d8ed2771bd0959a910629e7501eecd8beb67de -0x59f404eb5db78fd9adacff26f423bd5b3b12467f252c3cf7bbf7d9e499beaee8 -0x5f130cb7531f7960bf8c07ef6e13ab9a54c8d59d5c3c5b3d5659cf88b258c13d -0x009a6d4ff5a791659451c7c3d808e896f907148aef3ca211fc1b69af0346f1e1 -0x3203ec73a537b21cc9960e890801ab9668eee49fc905b7088f05076b304f526b -0x7db4fd9f5fdb6439f640d4b11a65b122f00a0d5b4054318ba3f66ce7fc1e1eb3 -0x2d11a727ce1e0c83f49bad3ab237ca6b429f15f91ba7c29b84f304a7e0d446f9 -0x7ae3b6bf0aa3c935786196b59e04da27a606f239e235c8b26d06f564fca1daeb -0x5e4b01ebdf6d56059a912e686c9ef80542ddb03d7e976bbb8fb88b276b43bdfd -0x29d935dd6416aef5dab7450c2739129b896d37c36dcfb9f71a61439e31ecaaa1 -0xda4a11fee03e2672c2369bbd27f40718b1a37b770b70a6f90e88827dbf558c43 -0x4c5c73bdc1654d837b0518c40716a54f0eab2f533ef4f3d233e4887598ca3530 -0xd4335096f7a54beac16ce8a505621707969d7c2f367326ca49520b76e5aa8599 -0x1a266a81016d306af570070117fa3dab6f3b26a267a7a4ee30afd90308703ada -0xd30193038d7fafde63adc55b2f443a2634d73c7efdc412e5e7b7f629ea4f2ff9 -0xb3caf11a163802fc857ad684d71e7d4f8bea02ba191ea06e776387fec50f0247 -0xbc1f8352048839b4e46212aa87ac9cc6089d6b4aa15c2208b01a2a87f411d2c6 -0x72cf3c7d4cfce3e06d6e0955da2a893b0490fc401673814e6483add951d94360 -0xf9ea9e76cd17a672482a6f6863c8e6a7d923d65a9d3a33db6dd660c0e67f3fd5 -0x3805c8bd7c71776868d8c5f1fe1fbf278e08ee3cc9f141743182b2b3aa18331e -0xd9afdb895ca741e7a625bf2bf3e4c81fb049b54e51e2d53f5b603d5701e55cf2 -0x2fd8cdd4f7b69438be079402212e2995858570699821f1fb9c3937db622b5494 -0x59aa6e9184d54f2c7b30e14e4458bbb5defc9df87ca5ab3c47afe7b4734cbf37 -0xee10a46dc23b1be2a51a5af1df747fd43df7e95b6ba2daebe64c906f12dc07db -0x60db15425fb7089023513fe711a90fc337623a1449c0b0c88b44a27fbc41e9ad -0x5f9a3e95f5a9988c0b7dbf7276b167d36f25778a1590407fae481049bce0d648 -0x51bbfd030b11f6e99f888f45f429725036cd86256472cc00a7fed68d0506da00 -0x1a36a225f98a1d8d2e22ef5bb0cfe1769107b85fd5b3fc5b49423b5106f5a7fe -0xfe924d94e09f69fb7b416539aee6dca0a6f4e965fbbcca88064fe458d64a54de -0xc23c2be4518f963626c882d1425912f6493e8fb2001bd525ce899a90b3ec4625 -0x8dbef77f2167e1b3a99b9a26a95b2dfc9f905c2ab67226397195e7553bacf905 -0x1d01e2b9c0054159f46bf2e1a6d464570c8d3e35ab30bf64fe868d79a1500574 -0xe30c51ae207570c18837a6755eb50a4ac791db123c358590d2a7a817ebc2ccbf -0x05b5c69b40df961180164eac7009a04cf95fdb0611576b02e8c489cd35d4ac0b -0xd5ef740f45913722716cecd8874e16a1d214fac33320ea88eab54fa55fda3de4 -0x73598512ea1068770ddcb739078cab4ada1c991166f885d2904e94ffe99adf9e -0x87990ef4209fb58d592b7152db94090258e6cf8c93b6b4f72d68ab590d2a2f0c -0xd6af887e32cfb30703e5f503c0774958327bfceb498ccabf9732bc86c6277628 -0x247d1a54e574571366726f70ad124971fb97d88cc2450bb920729de330dc406d -0x6e72e6489315d3bdf389553878b897fbdd0637dca3656b7d028b7175d7680ab1 -0x24bd17945d7e66dee5ef1a027904351234024e934c6ef6980234f11ba91963ad -0x7648150f10995710ac1fa8bd5f5f7facec617be5ca6cc488c448d09b8e213385 -0xa9d75263dcd22054ee3e93cc58d41475d2df25c81ec8fe53e14f95912ba9f219 -0xe189bc5b3d61cb154309b7d482be3993a479647847a2e13180800dd959ff282e -0xbe933f38caf363e45d59fcdd82746ab50403390b76e7d6dedffdbab76f6d471d -0x350eb7bc2255a2aeb0417ca0018960a8aca84f8f8c443f854d7482938928b466 -0xd2560553776141eddaf4fee58778a2bc1e478849b166055e63df40acf416de7c -0xa22d41ee0bbf8329239a4ee9c10bc6c471294ddb0c6eaf49a1ba51a196132213 -0x4c54373cfc698149e232b1aed50ef2599958f78f685e1efe7094ab71a24b3e8b -0x88a4a203948bc1e54a44de8ee957e57de5527e2a80708ee75ad28dd80a3b3c3c -0xb3c89344c44ebbc7eb314e52f7b75e1eaffe485e07ecb509b3b0beb816b84972 -0x2d7317a4564bb5ed41aed871d79204d751ab3545fe2cd26b9430c39bd04b0c93 -0x122db6841a7ddaa9956a3bdc0419b05d6ee5851e0485a0631d6538bb83b57e47 -0x8845d88c9ad45fdb5ee89ede7df3e3d2465582bfda3fa46df7de23ec52851aab -0xc53da85d56e1609837ae90e59d34cd2188fa278a958dac6d021fb13735be59f1 -0x7a0ae7e3d2c092720fa128520e875aee10422b98a95ff0922c67308e39b40b50 -0xfcfd9b13cdf475a4514579d79b89efd1a42ab93979cc8e49b15420bece2f46c1 -0x80c99f2956b8695c9c9b7e2ae6d2f09a3624aa6bb3c85df316863f42821a4f88 -0x5079ee96bc7932e331872e314be09feb2b101f7a35cc0e00d6c992836291a085 -0xaf8f8d11b35218117ffcadd7807d8e5454fa823a7e8c5373bdea71b2fcadde87 -0xaff0d4e645194136f29e0ef32d969b251c18d76cd24017b06c3d9dabc1d00107 -0x7269f36346cf8e0d666ad1fea6bbaa5f96f7a78faf45a6cfb7cf63d8d3a1cee6 -0xc121a823d190b042bb29bc289594ec0bbe4254570bdd20be0d504a7515cc7c0a -0xf4e7b8a8b9f1a3d352eb9fcdaec76020cbf44d8d8a4bf860239901626dab5ad5 -0x639fd01fc2d7332003c8f1975f179bff9dd9b00c74d984fb57f797b359d48790 -0xbe9e8caecd456c3d987a32dfb9b5b1707c0c5a91b4e1a1836fd65c13434c73d2 -0x93210acc38c5eecd3635ca92874712dce088c3b5fe3a0e2d5ff363346a88c286 -0x416c510b809ea681c89c5d1e29052bdffdddcad0fd2f01ec537102a5aeae95d3 -0xaa31179a86d00acef3a3fd664651a6e03e476f320ab4122e51a158989b765a2a -0x4695438b65aae88471c1c7aa91f7f1b6957d82e3e2f5a57611be4a1fca834a11 -0xc1ca8803473df21f20c86c45149b08a34f82bcdc91ca6aa379f9677f3f973b49 -0xd98aac2a6aaf79991c2fe5b33e22d58fe51e7b48da3e7c953de16c6933e05134 -0x5927c3600ddeb45bbf434f4361f643c3c7415e1209991a2490422867bc72bbae -0x3afaab22fd35b7f1d9fb722eb97f09899a71b5cf181997060e18b5effdefcfdb -0x3ef95fcaf5dfc917e54533a7c3a2f64b802fcd61907b731a9827f4500245d325 -0x6a328d3073bb99a6da4a4291dfeb5d346e1b2ee269af1b3ef5b859916d322a56 -0xd294cd91bd3070d4af787a8296c80e1d2e000765bf7bf0f455ef4b6f43bc7af3 -0x29e4b3fe388dd2f1ad0ac879742bc057c34668cb4ed305933fd01f244a0fb0c1 -0x3e3320ff43af2b17bca78cac4f0d6fb0eda14f05386295c5f87d2f9895a4f2a6 -0x91e32f19c81e3084b4c0b8d88c51ffdc3a99895c235f347df9d18ca9c67cea84 -0x67d03743da11dfb14bbc15fdb68d634a07d212806d5c3edaf558a0f7f5e6950a -0x4728466a5d262685d71645d1888b070675621598b2847e8d4a3bdf1cc1e79fb4 -0x1d70a13bc3db3a6fa415fdf66a6e3584f7c6d5aafb9f5cdd364b7e50dd699d42 -0xa30cb1e6baca3b8ec548b1ae93558668dc71010353ec3e38ea0c16c495b7e1b7 -0xd52162db100953aee93d8147f980f378e4f2b211040b19dd0a9163a59eb2e139 -0x3a03ad822094bbaebeb0612158fb44aaf5986d492c12f6e1fbcb456255c7d5c8 -0xe7ff922114f3f430e1a840cc655c9ef33488a0d7ab8ca4fbba4b0838b22d7948 -0x8ae9da8a8313572c08a2bb1307676e53e7c09ba6adae73d1b3ea35f95daa5986 -0xd316e3560e96c99b10da31dce5cb333248a52820b72f747029d7329ad0d33df6 -0x18c982c4d531ae9a246a53a412baebd656c3594709732160a87a9f7f91381cf3 -0x46fa733cdd3856abfc3281b710285b703dc5ace2502e1278170b5d7216948dfb -0x3908c5980bdc2a926a6b9b39073c83d1ba64facc1abc2836413d827ac368f678 -0x2cc22d46b417f8865491a3f4930cc69b87800ac4e6a9d2bef5f3a961b2764305 -0x647b816d1aefc2275f42ad4235a2469c0f0bca69984a9c1bc890e88cb03bbfd2 -0x3b37bcb6a4679d040932948da2823bf5225c345e84cb36a24f1e7162915483aa -0x08232bf5d720820bacee4a2bb80881a5f496c59f8c2fcc4c5ab321d2f5dcb9a8 -0xbe0b5b5269dc842904f955bcce759fbc6158bcf966e954ce618c0716ce6f7ecb -0x402362af6ec01e3b41bf2f5a7da698a9af7c34e2ad061eabe747a3438ec35803 -0x66452fce85467f5b1737b7e211215c378a8b48eb9120f3a05354265bfc94c777 -0xbaf791be6e22d2b2bbd55addaa73fba3e673d1cce34eb0c2a1c12cb3ad338441 -0xe92a44dc71005e775f16748062e46c9edfad7ce91bcfddb18db0abe046e0e87f -0xa3595e5fba6b551efbf017a24f70cbe94cd554a66507a9da2c40947525c9f9d4 -0xc712fe6e7a29d87346d648aa7676a90bbd49d6de5c2b3c2b938ea14eba2cdb1e -0x5d4d6d0e0728dd988257bf54bcae65a796c7dad3aa5ea7a8aa3a5a0d861eee72 -0x2e8183687704ecc92d6cf4c21f6d422a7499074addbf7ab7014620644d6393c4 -0x4028dee99212616c6112bf15572fb90e86dc01c9bb1cffbf5e4309faabdf1e9c -0x812b467d6e9b93a4de82c576f039bba9dc3836406a2182b523c95084f723f1ed -0x73860144e2b990165c762534c128149a49aa18a4751afcefc731b0869ba408b3 -0x473e3466d2352e4fa04d30fbf931cdeed2b8e90414fd372b3916a8e557de21ff -0xe668e8c165603a2d49f0a984201de9d0b23eac74e629f65ece00600010541810 -0x92f2222e785edbfd0176c565a30cd55f1ff22276b8691b88703418749e8bc35d -0xf5874053af31c39c4cc0f0593b3019330be33db9f2ce36ccf2340234de28783b -0x0d9b9859b3f0c0095dbf0c93e71cde5d9985ca92e43ab176e7c25ae952c97907 -0x0d996896f84a6559a80242f75c74edd3b0c6b1add00aef00da69c920c8733def -0x823f2e395ea59967d2feda86b774bc958f6d34f761e401331d1bec03a44c8215 -0x8b0a632f0ff4988985f1e8a6ecc47b77dc5c6ccdc1cfdd88914e617cbcbb1523 -0x0b1be294aaab22e811b70a713fbdc8c955f43708707a09b7b739c5b94305bd24 -0x5e290262f6f82a7c3755785283e80e72ebe5a910bac32084bb8b3f6a75f293ee -0x944a983ec4ddf1e605822e572f608cd5d7d012503357d4213b564ae12ff24caa -0x71b159844825976de4a8b3d25ab11a8c744780fa13443467d24a9afe3271554f -0xc9df63f50c950314365cdd8528ff070d4df317c35bcf15f6bf36cdd06c264162 -0x162b6504c95696f9e8aab418dfd08ce7e75e995b64491b79aaaf91102f4d346c -0x2ee1fc7a2e23f3ce29748c50691aad0277beb192dd79398869a416dfa80cbdc6 -0x7616fb7a1a4e1e4beddc191881f527ce9b7c79639a154116ca459252e2e4a30d -0x20d837a5a137d5e735e9f915cecb7319f932f48d9c91bc45d4b520fb32b6c5d7 -0xb18316cb6d0419482588c1820b1aada1efdcc785293dfe6bded3e8b34dfb05fa -0x047cdbd724895d21302ce68448692a917ca3d526a850865ff38aa5ad21ba8a0c -0x19ec256c40a06d4c214f85021048134f4bbaaba3825ca349981eb05ad2cb331b -0x397f1dff6f2b14a5eb8abfcb9444f8f10e274f9a394862786f9f4394bdf2b59d -0x7e588126b8d05ff2b14fcff3510c7a0df2c7b359d395ae5b6b2a935ceee64abd -0x3d062940e4611ad94a82a0cae2aaa712e352da8351a0f5f7d79ca163e4d2a1a2 -0xd852af7f50c01bd0b3602724035940c6e78ae83e6bb25870b9ddf6f4a8bad6f7 -0xba2e0f590cce8701c40f6b43f4779d4b3c47bd16041ea93421d6b3ef55d7ce8a -0x30e4bb10e58f946680c1c3cc0175492f2e418997c059f4624c04956b92df849e -0x44af7c3d383d6044d22f1e58ad8a2a69622bd327a328cf7d1a6c2b1c76556b20 -0xb323aeec31b85b594377c13072dd52496ef1622b76d60b131b8e8beee6338f61 -0xfcad10ff1f0315b05e6a1ae2bd6e035f6318dc1613af78d46f58bb8438b6af49 -0x56404516aa9cff560de496583617fe5956b57f51cf7ed4dad73b4f9e30a57a98 -0xf32dcc7ce20eb99a9ffd6c89e21a6b96c92ab723b6283f4e9e926662925bb0cd -0x7717afbbbb8c855c6a8b561b4754d218e0d093bcac885334824a1da1b1c52b78 -0x0a4d6cbe62585fc0ce018fe016f6ac008c806ecc627877ec8ffa21a4ef22bddd -0x6b8a9bb9c20a12d677de3a349212813c7d5a22b8f8f6306af3558f5a79b1ba20 -0x60e20a8c2dec418169a300fb3eb961ed7a19862d0d29874af4d555d9917e1e76 -0xdc6c80b15160af8df371d56517ba62579161e8a928d17ab924f83da8718a6d72 -0xba88b900aeb2ac188dfd8af56d5eaf1f7c5f68ae6cd1ef12dbe2beea91572cf5 -0x15c5250f9214642149fd7dc7469700b32e8b0f69b128a62618caaee0851e0700 -0x472527b03b631d35734c653a41bf6bf939ffb6d23c8cf153c8d6da35f28d4552 -0x0584807ca5cc57f89ed743e1042024916b893a3aeb42ed42b47f388735800e69 -0xe01b3c0ba9a694c8cc9fa8ec0cb0e8a9e538dfb7d80cffc48d684c18bdc25843 -0xa79a33bb9f87b3cb3a3b21f147d5d0d78926ca570690b5e4e907c269daea4c19 -0x0a91e00fe31532f024a9e822644aab0c5d9db73917880a5cf480d5ab8a100f8e -0xe3da0413baf7ccb083fc1eee9644cedd03ca935424c3bb87c1179192089d37af -0x444268b608691ceda48e36d567e5c6e712e2052a058e2199a1202187ab6083c8 -0x492892cc6acd7790357ae6dc360aaf043c604a6a7edb619a8fd1d94aa9760e3b -0x1ccda312e453b513f12042acae619bfeca034f65106b67b75c138c35e3305114 -0x0fda8a096c1cfc5b5383f91cc28b01b024ec2635ad0daf21025729bd9e16aa5f -0x5ecc723d633cccc1da95d4b6160dd7a34dfc101f9440cc958febfa318bbbfa68 -0x9a441712471978be168dda17257f63697eece58d6b260ac10df461ac5a40884b -0x3aee25b024f1d6d5508bda930a88eb2cbf206d62ddd440f480eac9148a83730a -0x8af581433674fb6ffe784bea69420df9929b2bbba84e3d35cd0c4bc51ed5acc5 -0xf59f460e3d75205178b6ea772dcece00503195828be0feda5ca6356392b1bba4 -0xdc0e3c8fb3391738bf6740860799408cb0ecee9a50aa1d403d87848f72f13a65 -0x2878537f467247da1a98de942b5068d8f89b0f1aa9358b536a80bd1c7ba33cfa -0x00876ad74a9123de5f9331974816d0b77d28cabf075678ebe0a880b32c6abf0b -0xff790175d096b3cf9c2f7d103b43cbd3caeb2b57cb09288c978c9c6adb115840 -0xe845d46d1da4fce327f707d14ecd75986870171d185a07aee8e1e7f5368bdcb4 -0xb2c184df773f1562eafcc12ce79539b822cb8c1347151dd07ed971b3c72b5f29 -0x2db50fc70e2538628dd01c3b0fc79b392beec5f1c54ca6ea85018bcc14deee18 -0xd693d8d3ea9af530d336c5b9829a9a15897bf8803a9d43bac2fae452df6b817e -0x0738b986d0f42f0541a8f93cd9bbc67b2a48e89d5fce2ab0ab97f38255ffb61e -0xc3e998ded6403bec426d8f39e9399315c9387752bfb3811186066e45d593059a -0xea92ae84fa283ceff65f287c401d474e63155044aacf70ca6e143ad85c69f056 -0xb398d82013e457dd24e4f2ca6d93136ab5d37cfad00dae88c649afce737dd969 -0x49cc8ad464abd1768331ae21704b350881443b96d700a6d8cf6ed5f81b86b7b8 -0x3df47c475286f8a76ac45dfe5d8246934a7daf9cd7310355f8def9cc71a91e94 -0x90553d2d31d5cf918caf4dcdd865484da5bd9e459d2c959bcf403a39e4874230 -0x4936630ff545660a71b3d95e34b30d43fa5498bbe8d168c384af6931cb390ba4 -0xf7d975ac35f3b1bdfd472b31db72e89fd60f419b270143a506b4fe59e975befa -0xdddca74c8ec913464efddf9ebbbc09b9bc320e64622ffb4f842cdba62e086f86 -0x32eeef775a8c6dfe0580fadd1bb997acfd5b800265a7d53d13e8c53950da7475 -0xab612a1cabb010c984417eaa0e86521851fef47a2be12607f2b81daf4cfe9d78 -0xf43b47bb2eb4cbf67ab377051396df48fec719826eb4e38b8c9bc974dc39a2e5 -0xc71d34b6189703e89bbe708938efcbf5c3f5d5a5c02fc811a974a178ef980e91 -0x50c04379de475a743f93f5e72085440a51e3265009bd4b03b77d64ec9c9bc4e9 -0xab2a5d3a2af9f8299eadbcfdd3d4a386eec788c58fb0e1b36c9417c2e2457ecd -0x1e22d82d31c6b81ab61951c351bc22d73402127ea2e9edc134187910770aa2fc -0x53749b748783a928c0fec7309d5aa98ace8130cdd4b863a400be7462c6494494 -0x3b5146c7df95e0b69de730c869fd4b080af5d80b89c5fb93f947d5bf0710ca35 -0xde454052070664d73c8960d56f1ce615a4d822455aaf3fd90be07d5bd2ad1015 -0xd3db5be0699cc8bbe70e8abc37b0d33f2186385da0a26bc88b9c33ab1935e063 -0x917abd3534d7090f37a144e1c097f3aa3ec2351b0cfe96995081aec3929a4527 -0xcbfb54af9a589e57ac6756333567f3c872ec7ad4d5fa490e30fd68c906176edb -0x5d66b0563d9970ea2edc07cb437e73b0eaffab47aa553953eacbb8c8d95ff1a3 -0xf205d324845e2e58e8af5cc5869d88f7278672c7d77aed15ea2fbeaeebfe8c8a -0xef068a044c5047b233b83a423d3d06385bfa2c0ebcf220975914ef223d9cd9d0 -0xee7a8e419749f06dae8e83605bde541895731ffa70f2fdee4a3f8d3a9a974e64 -0x019df32f40cea92b6a7d550a7e8477e2a72831d4d164ee4b2d7a6ccce6cc0e34 -0xc56d1ce96a2d6a1da157ed5278815104fb2fae5a2e0aea650eb101cfdfcd02ed -0xd4fb01ffb891553e5bdd142592a1b44a095454ebf61e4b649b43aac5e829eb7b -0x094f971aa0868db2aa61d5afc5c645d0e4082ada797e84f060a13d36c235909f -0x1b0f2f1ac7a984670003625f6fdec9e8752d4f68057f3ab43b6bddfd1f4cff43 -0x8343f5ae2810dab0cee86ea17ad527aa2527363a530e98a7c702067ffa764420 -0x796d5a9c205f2aa64f3c3df18caaa04d6c1fc5b7722a9a9b318fe6e43b3b3b91 -0xf97cb173b8d6988e63aec0eb139f9a9d02624b4b6259eba9a106ba0902d3b8a0 -0x7f84ea2bfb8ae66b8d26b5b6f308851cd6f0e01bac994655d2fdcb11effccfc8 -0x52350d12f5b90e094d0fa76a503a11fd3a9d7380c51cdd77bdc083b13ccec6b0 -0xe3c86e24acdf6ff0a7bd5d92231280e149a81bcaae5da93cfbcb5a8bb9d363a2 -0xa2d658d9a17bc1fc2944dd241a3a357218cb145414d0b0b9816f95eefe1f4bd5 -0x81337195eb66c48f7973411426b3d710aa4c36ae8ddb2a8ce428ccd09619897b -0xb59f7627ccf0be289cf1ca167b151c53aa4fc1f38dd32c04443face396ecb721 -0xbcce4fc92dd10019adbcc8cf0ba1fa8827602a611fd70088ecc5da20e2f7bde1 -0xfc969eb1d144f75500dffcc893faa944376fd910b3d3a34684e44450d43be58c -0x83cd01eefdff5a7e6d5469bce3f4fb12044e3729be649c0d91a55f89d5d61fc5 -0x7174aefc541d3b30e1b883bff4c1fea98a4df25e374d7d1acdb1983fc653d87f -0xad37a2ef24b2b7ca164032cb6d66a8fd9a0ec217e6972642ac2857f42c9e9797 -0x1b0676b89f69017ef4ccec7852bcf3565ef1569aeed450795bc388625778de0c -0x1c144fb3de19a726aa24e6105132879c3dd7125152f6e30c83a3b9424f8bf251 -0x6938242983a75caf2d39e4c49794d7b9bddb11b81b303ff60f1470f2fa9c0569 -0xcc7f2e3950ea654735355addb0169b2b6777d49592b758749e6e9ef8d659b8f4 -0xf75a0ec178479a2152dcf29d7de956b9fe37c0dbe3851e02bcbdfa10dd3d6ada -0x48db8ebb5c21e99a20dd0b3f9e9cd63c2a7ca30c01a2287bbf3d3bd6fa1a94f0 -0xc90e0b15ad87c511049756da384773b1966795581917e9949924424ab475ff66 -0xa75e55cb5d5d659d08d57f928a832f8a81fb64e7b568769c1329ba6e7b5013b8 -0x58e9e36f7f4515c19f8ec9f36af9aa55c28e87f7a6e23490530a2e25b723327a -0xc332c447ff625c871244f95c620ca42c1a8b495efab028733b3f3b74a35ea1d8 -0xf72cee03bbfa2501aedcbfb54723b257f51a7f6aa93586ac30cf498174c4a29f -0x8810ba61bd067a99aaef2ddf5a806d8619d3079eb7c372ed0132d12a281f0400 -0x0cc0717552061f82ec40b19df3eeb0f3079260624748f9d0b6d1592bcda7c773 -0x1ecc9607906746e4e9c19cd6b3a1723ead478b8fdc652f4deed6a04782cbd681 -0x04c33082b35169e56d92408aba1c84939750b36e7d3204d57ca7cd735f4c8a71 -0x6f1e0d999375858d14b7aaa91afd00f0d8074493613e7943b92a6538e7c1a349 -0x625b10a37ff55b380662ec00981f05864262a8d36d4df2bf5ef9c5dcb867ff9e -0xe41074bf783f4fd2474c5acb9d67afa413b0ab244562cedd69823b6f084d1a4b -0x029575d8c00e706160c56069c72dee72d1b8fc79d0eaed79e7ceb940311cd532 -0x60615c426e19b048339e695cd98b421025d4c77069468f2871e835576878e977 -0x62a7c9ccae570d5129f9607673699ade35ddca8575a467fae9a4219f89902b61 -0xcbb930588d5c0da7dd203efdacdbd67ffdf1e5645729d9173ccb5fabdb108791 -0x7f5f653cbe17e98c90cad0a20c8f41e093ddd1ea5658d216a4eae39c4823fa69 -0xc816c49d54c1125491bd0b4d6ab93735e2e0bb559b05c3fa963bba1cc02524f0 -0xd7965509e187129c96e6da65b2f2ba34a99c82bc243afe15a4230df78e4b0a7f -0x0ada3b988f5f7ecdfbd2f44d4f493f35c0bae2ce99a8b5baafd802489975f88c -0xcc94e6e670f050682bb14fb76da2fdeae31b548bacd704a90cc6100639ba0df9 -0x87bd7b99b1dc34b38c9d46087a78c8a7643c536fdb1e0a41dbd44dcd0f496bd7 -0xae81a39b33c36a85839a23fe3b8dba504050615c4bd0c3ede5cd4560679507e8 -0x797ef39f66e11f35e4f989cdfbf8b56911cf635229a0f9416316efd11af2dad9 -0x7d7ee378d79c6bcc8bd313d384e9fb535400616e0bbace9f07162eac2355a750 -0xba3f41b63ae4781def309c24a1ef9b220e088244923fe1a7e5ab2cb0bb1ac888 -0xff537dfc34fca4560bd5fa4201f3da041e5c79e0b266e6f004af5a0260ee6f65 -0x1d2828675820f33ddbf06f4d6c86a560b5099c6d71d17c7eb92c184f2323c29f -0xadfe5cd8259d2634d7059750a0badfc2ce1b8bce996a12497b105bfaa20a0cd2 -0x90c03f010f8a4a2d61026c4d4c6edcd389d5e10de0ad7b992b69a335e0e7df1c -0x18962217aa54d3467a3979c0e61412ca5d16802c3752b0553da99afc086a11d9 -0x146707f6a71dccada83391b32845c2585db6fd8f92547530507e1a4956802d7f -0x03b0d164cd280b0f94a823bc32654af21c74363def9c54241f3b09cb16493907 -0xe7a4c2510dc0630fdf0caec7e3630344f750dda81a3b701aa27b668ae27cb0f7 -0x49f7bc3f3d74ae3f7c0cbd5c76e2a8e50fd03edb62b8f3262bcf0349ee314be6 -0x5b5fbdca0094bda836d43abc78020749182e1216948342c7a769464693298282 -0x41f87d1d8ea4a10af8508e57d427068205da9c462cd441cf38ba165747611c8f -0x0f22a6fd5f98b87d1d15e3c3749ae1c1620f62b0186cf0c14cf933b6d0c0fe22 -0x9ef376a7a6b50a62c7561967d4e6e51c25dd60a2b140ac5637485dfb0d37e222 -0x30a580894dd2bc9d819261b746733f70e6f9697af5fc37c06dc170e24cacf2cb -0xc6ba13b3b68dbd23fe3b8b476a679199fd7f6654a0fd6588d4ab2c5a9278aa1d -0x01529b930187a41637927ed307d76303fad85eb09f4e1a650ae32f8211d74aa3 -0x614990f83e08736cce98f8dfae4ad4c76f0a3a9f94de127b33cb51fe78759476 -0x52a0858b1fbdb439d4aa4933f120c81281a6115bd91b79874115602ce4e30a20 -0xc5f1c32a64626f8c2fd3d9650f16b42d23be24e48e824f4b5e94597d39267fdb -0x9bdd2267907de4c75d1f5ccbf9e4608d257523b1f127df74f3591a0612d874fe -0xef9e9e942e1de285b66c4976eb58a947d1713e6e47116de4e806c08e42ee1187 -0x60a4c496e4f274d485961ed050f79932a370f5ff24a67cd561442dbae83f34d9 -0x2a051c8db95453566f3353fe69e48000587709efec0fc3515f6b9a867e6f56cc -0xedd81824dd7f3a4ab4ca019008b61e02c6218d4cdadd934898fc85f88b932678 -0xb5650e484121c7e7e1f3dfe798947a48e65d7fb807e86334e317e109f4987fb3 -0x57fb521ebc8f4c93297b0eb8668d079637e7d6d57e0b0de0a171199647b786db -0xb7091ab751f7db9d6d54b224d2e963fd01e7ffaf105461d494c9da9fcd9da128 -0xe6b5ca772741abac7073b6fb8654e5132203acd9b912ee2ecc045ee162c0471f -0xf86edf0b71887ce8dc9c90550b4153bd7c55d98cf65341da99a118a0542a9bd4 -0xad54639de2bfb20072594ad9e376a9adef9e2962db9fef0fa35ba2f0b45c3ce3 -0x31dc698c99ec3555ff75d159cc9dd44b38c943e1977f4940058284831e66004d -0x8f9a08ec092149cd63a91ec9537497613ce19b8439722ce25590e93dc58a7838 -0x771e3bffd5f6e91634b8b05ea93936ebf053fe4ffab70c90fe7ace8999501255 -0xfbfc19d18ce185fd7a844d78f7947cd457c6837c4a642299727f6a7fbd85d84e -0x5652ec5abc852719075e5a621276b486b2b1eb3bba993a4b608ea754eef1fc6b -0x0c5a125df3763101a3246d8d7467e305fd574c020cdab8e4515340551b533273 -0x495c2e26e18c09c15a4f30af39420accd98a41433c48df2c7f300a39f973b1ea -0x039633c025088b81a8892f8916a467702956acb86f205d81ca8a75f94d14a46f -0x65c2b3c29bc26640ad058d15f0e7805e364e9358a38ff3df6dbc2a6190717987 -0xfe26032af2088cfd586e75be5837b9dd690e7cb9530895ab13d441a59040c5e8 -0x8b28aa39d84caac7c2dd73399b24ba50f70da9cade8f3c1d8861ccc46d481801 -0x1aabaed9959836711e8ad68da31cb360f1eb0ca2511155af76cce81db95553ee -0x5eb01d9718de232a6f5f807df61cba94dd63fa886b9f83b2be3a19f097cb03a1 -0x5eb31d9660fd87caa0ac27631df67cef866c1ce8dcf1bb50cd8d3123e3262945 -0x99a7f6c5852a71d8ebcc53e1a0e132c194a172f561826387668d93f7d8270918 -0x99b7ddb1b0ebb261cb7f59f7252719745bafb5da82ca40298d7530c6c2931d81 -0xef5c1ede57f7e28957af5a007105a1728783f7e99f791d66bf01b8dfbb79dc77 -0x2210258360c514a60544dbcf5fadd53b94bfc2b2c52acc251c96d77def607913 -0x76404d726d85eca1d9573b9d665957c5c98097796bbec5c325ee0a11733f848b -0x9bd5816f730df2d06d477689cc032e2dfc64d83274ee236b56d6607bc31d427d -0xc8affb2b9dea76f24bb95470b70171617b909ddbb69f2bfbdce308d4241676bd -0xb19003d9137a6590e2f8e1e7ee7ca0d98c8a6c15283199619ef98ff3daca368a -0x162edcb9c2d4f8b836eeb5f570d6539f4515fb7f20af4ad443bacd912cff58d7 -0x9a0728fa8b6d16354976cf66626970673dc812cf6113988731998a3f6ce94370 -0x99834252e352f6403ff3124ef3ca6f06e3494134a6d1c06e5b1b8747f623d8e8 -0x2042855d28f6cd86caa6814fcb063fe2836ed8f5d08a6d7ca176f9d3020c43c3 -0x197b856ec34fcf6bcbde532d9e5feed76f76aa771efd01f8c17f8245181d03be -0x8a50d6268c4123b5ff6b579fb0d648b585e3271030d32c8f701f6b76d9547dfc -0xd647d118ed2f74411bda121fe1c105a0cb80a002484f11330637c80a2bd6693b -0x61a9fb171eeca6ebe51bf754349680396b2e8188f8cef5bb39509fbb2a3eab02 -0x6f44e207c69063bf9571b1296a406c079c2e3194b5776ca89164772f9285fa73 -0xe1e80541b0a4e194e847493204fd79eedb773ab4a23ac9df06c89e3c2b1eccb4 -0x08bd699709afc1459b35f786f2ca8be1a2059c99e4830c0d415e6c938e16869a -0x38b46ca164964dc7729b28506e0b9e855eaa627640ab4ade15315bd11f6a5161 -0xac5ca2c02fd22e18be06217db5e8de5e6ab8c2a66a336ac2f3dd71ba4dd61927 -0x8d6ae50c79f864de2fc611325d6e6f9abf023fe23dd9e7f5bc32e7e66adadafd -0x8e27827ef338ad1de23c6031e78e3f27068bce21164c77244154a56bbfe7b7c8 -0xec67efe06b168f8c1a347d1e3a4c12b3afcd3bac5c5df2b44d204da2b451a7c9 -0x906a0133d6b725508f047db3a246bcf9cc679a5b41b9d9faacb1d78f31950f9e -0xfa514172cd3257c198a3a9681664826c28b7279d3e1c98d518ded14a8048a93e -0xc2cf7fff538564c49aceba302033514d43e6608a85e6708f751e3371a19df0d7 -0xdeaff607db8bf18bf4ccd4fc4057a077cf4a932450a8c3262c8a8bfa6de1e313 -0xa14f263e9ecbe274346d21f868990dfde6cadc0438abd62c3126dfa59924db0a -0x21fd2559e8438f568c68f77ab21cc8febd0a9c3ea700dc871a82de4646ce548c -0x4cd878064a727a24a294929c63d63e29d97f87583554703dfaf24c039125ebe9 -0x0f77065359358f7985728eccff6697ddb139481562ca98ec1c429a6d697d7428 -0xcad0bc834967aac15b31a303ef76807bfa5d3fcc90bb3b8eeeeb93c43dba85d6 -0x3bb43b4979466a62f8836dc0f379afed9d50fa4dcb6f607ad8b4b0f734d319a6 -0x9e62b23e25e9359587dd361453d574789311553411ac289d11235304abd1c1ba -0xe2aa367b6667e4b7e4feeb2f0b28975d93268ebbffadf838a337c2e9f5861034 -0x6b2f9f9bc26dbdfe37757f00b812ea8fa8f440b80f878e0dede3b63778b44e2a -0x279ef7ef27867ddb06ae976bd8e6b6976bbf107c09b17def7a7d73c29a68459b -0xe332dbc5078838a599f5a2dda84033af64a3cc75c37248ad92ea2828cbd804ab -0xadb5d5d74c018b3159e47891939a1c842a77012cbd72c5e452ecf443759720dd -0x4b4086c80d8e651816cc750698ffe9b8681daac3a67dab66167703f2054ff449 -0x7c8e3101cbcc2f49d2b911bda87a3d988f77ffc6ef20c24749fa1744c5f6ae47 -0x4d2e558d439865e33ae2340a966f2b257dfb144f4001fc975ee035ccf17a0ba8 -0x8c5c74b4493ae961e7812d88aabf4aa231dc0af090b50ee10b9551c3aa0d8695 -0xdff90237eca3d6affde80e5d17ef3e5a87d5599a0dc923d4aa31bed8dcddde41 -0x0cc5e692d1e89c56d73c27d6cf0a6a5d0f20ce49cec31e7e72ae64798bebfb5b -0x6fd0f97c7186214043f757d4021918ca2e528de4336c8c3e8b1332f5a09676e1 -0x5cb30a4397d3206dec6cfe52979f2d654517e3ca5b7f0063fe895c4d266838dd -0x9454c8234708c7e7db100bc78ac407f5f1d2032fedc99b32921c842c6e0c1c40 -0x8bd16824418e19589829ce19f13ca2d1aa8bc6bfe21e1f1b5aa4ee164bc96d12 -0xe2b18106d2602f5ea28e8fbcc2f05813683b4ddd9d7c6a716b107bb6f488f06e -0x9c1725f72030eeee587c575bb2d6a5452ae46547384bd67777d055d2a412fe4d -0xde2361527e00fe528265c07a5d3fe1ecc168f249a011bd627230d2ecd4025c29 -0x1423016cccd2315060300e343367982b4aa2b2e17fca3d52b56c061d49c47660 -0x9d53d85f424a523fcf80713813efe8ac26b0cb45b44fb644d5f44aa79f66f607 -0x44b2c90dd63a8556a3444a0c5c2f6f885630866da2674a0cbb542b8cd872aed6 -0xc23c74236882fe2397ded8d08e1511436dbb585f281b6e394693af2cf11dffcc -0xb2d6ab04610d1e9a1bf86c16b9e2b0c08fb41c27fd0afdaff67994f778726202 -0xc47908444378dabb3eb1f3997930caff6ae35a1ecb85d017d86c500a0be3287f -0x6a0622ce7860de5bc1f2e1d4b5b669577ee4fae69950688cabbc4ae10f8d22ee -0x8b1a4e81128289b6e89775ea511b96046e7705e0701a7ef108f53325e4b0dfb1 -0xd3d0c730f89308383e6fd98d4676787a02b2d7ddabd8f143a6f0792785e2b889 -0x93c144c9c3868b982437b3e2ead285f4f5bc17c4056c3252da8a70b39b7b26b9 -0x5f1fe10695df17cdaa7e4fc61f08696c7a99b180981b9d145189f45557871560 -0x5893d2b126cec223a10f0bffb8abc7fb9fd2d0b6602a165d68a7191e7ef1204c -0x2e327fb3c16c02838a3ffe55e897ada6d95220afbf9587089470e202f31a8405 -0x5c9262a4ba906792642debcc4b6a405201b1b7e7174488dbe43bc78503d8e820 -0xaa372f0f4e245046e9ae046501c19176bd054595946c658bb94e325fb85084fc -0xb02a6a32b5d4dde173de9861e366c3aeeb2057b88aaad73291f15b418398be92 -0xbfe5db33c81704b84184dc701af21d01285bcba245258f85301a5d5c86de4b0d -0x91cf12e4fab7dfb5316dd6a2498039c1cc753747c92b1849a6d3d49f08b1a742 -0x47c6c70ff072bb315f0db5e9e6c71c3f075c5eec4ba478d4ee50ef9dd912edd4 -0x541329501133269d6462d759ce8cae24ea9af6d0e9493e7ba204fe19a32e4a59 -0x84de8a9284369f3e8645415f2fd2be82086686f9dae99103e1596269fb7d9fc5 -0x4b28d5fdbd5b7453115bd3cf32f96c541c5075245af51f863a57e1e8f543c65f -0x1c4f14cf18b69276c9296b5e4aeb30e77a3788ae6c2d37368749ca9d5cec85b6 -0x312ed30f87515822adbe1394cf875ee1dba5f4ab8dde1b2ce7b23198263facba -0x77432483f00015a5a68a4615c0f8b5dded5c55f2c76eeeaadcd4218a5c5a091a -0xfe94e10919b4455e491e2f856d7c3e5ecf54f42ed255ff76d9ca2f2eca7d5f50 -0x5ae1221844cf6b8b33715ab374025e0be7fd5344f2ecaa566a207d623628783d -0xa5bc9f54b9d26199d29ac6ce31347f7bbead9b9b07dbd61d7e062a90808c0781 -0x5a5279ce5ab7a6f2ba01d37461c477cca339bc8276aeebbe2d0b930cbd77cd08 -0xcb8bf1a67989d3e8ae2506dedc544eb91611bfc25027100ad313c0a099bb826e -0x517649114864154caf205cbeb6e8061b359075c7d3afe4b6bbdd59fb7bda933c -0x079d20f30a472b76e8821483ae5da517fd1cf27077709e8689203393b860e667 -0xd94a2e19b0896226ff19bb0410de4aeab9f55f3fc63b6007f4812b1b859fbc38 -0x0a4f1872a3648b260ab2144bc16ca4b7a36176c14c4b8debf6cd259f53567bf0 -0x7f1f547430ae147e9a30e08d3c51d6ab0dc11f5b19a19abd15e7a05db135c642 -0x8757b24db93844b9c15e77223623f10bb82041c9cecb590832f70c9556f4076c -0x644cf24e583bc6de957bdb04e3ea8d3bae87b4efb3cf8f02dd9780e3e7279b27 -0x164084a8e52b5f688e4a3d09a5ddeb2769cc579a220df3295209db4daf9799d6 -0x1dee9adb291948edee86241e392039bfe16931454470754e3d2e0f606f9d647b -0x82aa2fbc07b7bd1684deb88583bd0c4b9d4da46fe2d37d39f13f8c95d028dbcd -0x5fdcd0c46de4eda3f395da95eb30d4b009ceef1dfc67084860cb70c289124b8b -0xb931e8f283503a41ace6d5e4e3b428621396cf76c53f10384632613e23a45f22 -0xedc557adbc67b488f6231ad208ddc6a9b3303955c3307a6831dcd609cbed442f -0x950f3e437e707d57732ef4e039cee28dba44cde6af9d546c4756f36c6b3520b9 -0x757f296fb0a56ea2f91e568ce7f6825265f186e55e7e7ba9a49ec013bfa067ec -0x864c0d120282daec1031d073c60fab0bbff7a6c8abcf59a0b2c4671effbd9388 -0x7fc9b3232096856cd6be98585e8456f5bdc39356e4487fc2f624e767011a818a -0x566afd011c313dae5534eb5166e4ac7c624fc684c6f5b8d3bac5bdd0fc7c1158 -0x461666d53ca3a9ce55618630b51e9be263a9507a2f9b6a86b896ac244f21bd25 -0x148487018216d67f96ab41602597ded4d2a2c094370e7fb46efb50ac270d3c90 -0x56aecd9932d43cac1d979d6d056cc21d1262d2caeefcfa412e747f763667cdab -0x8b6e31c27862255582d4e7b77da07940073b38d56e64163362735271d3563100 -0x637c02a50c65761190054250e3ad6b471779f6fed9981b00a7bcfe2cf522e478 -0x9b81e52373867d73cbcadc5625eb2847ffe233e4141c24dd568fd8e65cc7a031 -0x843e0158c92f7627feca8e46d6b984c9ac23366ded8f2d402d1be873fe9025fe -0xb1b2417108611dca99ee18bd0c14ced9a437a94525b0d9345b7c4b23addccd84 -0xa40d3702205891868fcb61a5f0c5607b451820109d24c0a2153bdd802f1e2c73 -0xbcb9dfa7cba6b5590972323de28e59cd7b1ac9655fe5969d96116e46275e41fe -0x1ba9413ef2b618de75375184c11aa7a1fc8908be5d15f0e92cd82181f1ed7ea0 -0x3895050608a5434e3ac0dfad63343475c552ac0eee731a2cad0f23d077c71509 -0x5504dde08f20aa877de29febbc1b02022b35c1fb353259c802883f047a6c5243 -0xe651f83c2b9d827b6ef1dc24c60705b9839ee0ae126701c2f71a4eb2a39992f0 -0x0c4a94e16db7aa0806d14aa70acf71e71fc849efdfdee72484cb7a711b836900 -0x9841412fd1820401361502c8fb76020593e913e27fef8db7badb76b4a8a93e97 -0xcf7eb2a7e7f741954da3aac3b4c47d5fb07f0ce50a0d89f93ce180ab5a79f96b -0x3914850e176ffcb845835b1b21adb9e16e618b703e4b13c26f33304fabbc5633 -0x1231819cd2d62854a2847f688e365456d44ed065fb7e0d2adcb544a277dcc345 -0x34b4361916a929c13439fa6ad7e5b67dc93c508e45fb1af962febb7e40318a13 -0x5e1a981b6584b34569651c913b4233da0e1feb1130f83d613911ff9f6be55269 -0x166c9646887e9118593d4f12aa913391ac7889f856cce5dc4248deb760c11088 -0xf96a5315ad21e67e5ddb680cd81169a19e0330200ec4efe33e13feac957e7284 -0x0429c87d74bc805377aaee8ebaf86e894a5ff16b5bca82e7d035dbe270025f40 -0x449aa594fe9df107b642eaca2aaccad6f78aa897db6c86727387e6043dd1ca3c -0x42526d5c36fc3fafbe46c44fa601c2e464e80b13885c337f4fe4cd95e18ce4b3 -0xb7ddd5640df9110cc05ad78633724ed49b24d04136676acba28a6c13d62df234 -0x25dfcec8a46e98982ed60adefa9016e1d8c0d320879c37d251bdb471ab2b9d21 -0x318d47502b3ac1f9c1b955557c57d01df18c19ed79107ca1e82120f72898d7d7 -0x77e63b91c9e9f853e2729d56786525d64eec0b2f34280673d09cef06e468a5be -0xe16b0275d7b66026aeac045106ace370f52de00ec979795d055b2d086e28edda -0x54ff910f4c5db23ba6f46df93ab60b54df00a29e7b16513d1fc2758dafe77e2c -0x80319003d76d019445c83b298f231e66d8a7053b8845219943574b0816efb5f6 -0x36288a00a6688fcf6a50c9b4e73c6f88fabce86aa62e6ec4b78bcd8e343bfd16 -0x7a334979d8b0116cc0012cb8fe65dea9046ea9dc9f45dae1d6906dd9d582d75b -0xc935205b913e91a1a6d898925f3e32f483590f0705780a56f72f3c41c93cc5af -0xc5961ad32313005ab5277a9d680de102358de5cba210bfbc9a1e885552e09420 -0x6974a112bbfe59e4593dfe3e98860f69293d19ed458f7b02909a15184b189656 -0xfdb5e68d159177bcb94eea9d3005503eb2158b94e6e5589d7c81275a96bf6da1 -0x4bb0bf52d3db945c57a87864d16809712519a6a8b00d67b463b6cddc62d4afd3 -0xaeb136d17c5a5077f697da90f3859e8c33999bf9bc012abf50446ac740080376 -0x3500197038f8619048c6dcd79e544b0eef7870e2d8a3c61d41a57af9abb8cce5 -0xe2cb5dd609bf1b79e424d33b2b3272d98e41dedb14c960be2cc8331bcaec8261 -0x71e556273d979c5c72fdec649b63c25f3c19fa6c7d4350d0cf294844227b9cbd -0xe54c73491de5fd550c4ae1a68490f07443766bcb2de18e088324bb7ab7843c60 -0xf52c5976b79421486955edcfe4aa76860107ba404f63ecef9cc1136fafda5147 -0x568f64bfd2077c506370643e8c3fbe8daa22d613e173d3e52327115f981f6350 -0x47f2aab25c67a135b59c7c34c3202921e86a3bef6597fe93a94eb94c47ea4601 -0x513d2692d181108a41131c8ca353ede7dcec1c84a5c912f0458cb6cf65ef7e10 -0xa8ecd193af04e00b4562da5ed1526c54a309462a1d5f0f755c33ecd479e45c34 -0xf83e965cb089bc65ea9b5cff0a0000378a7c277c089d7dbd2775d30516c7a727 -0x1c56f5b36ed38daf1f3fa1db864e65488290578408bf2b613ce96742a3d58805 -0xee280e4244b5d3d525928fd54680fc8332a441140d39e08b25dbd1e32db085e6 -0x3f07ae9671005927e5c4bbc0d8c3fcd565140ce11171e125b33bb2a2ccdb4408 -0xe3664170ed3909d73dafa50b5eb7b2b6446bb08e7103c22856918f3898ac1670 -0xe960eeb03f770ff094ae1b44b7c86da8738da1b2fc95e91dee1a6d2556c2873d -0x84c05843559654590a84cbfd40fa0e706c576f24cb339b5817169f5932a31d76 -0x90884d7a3f041539173d73634cc0635442794661d57f463950c4240a62e89430 -0xf9cde285f9fd66c1ecb4be83400cfc30e63a2ecc9a1d46300a497b5a0684f0b5 -0xd44413454910b2f53bbb8e217b55d68bc35222a079f2999698581a5e46902840 -0x602653ff46fad119a4be66fe834930e23e713a66dd62ab33ad0b303d505f23a8 -0xf3ba011225bc3702d0abfb9ff364e22060389ad0ee4a287046fb6752625ecc90 -0xc7b2bba942c4bf54b0518aa87692eb4689b59057939eb1a78131f18636459992 -0x128c969742b4d353906851db0612ff25be5078f5ead49a62ac88bb7157fc15c8 -0xfa2416e30f472dd21372a0e90fa0b01a3f1d4c4995656da22538f3a6b2d3d8e9 -0xa03794cc61b85bb2200dc0d553f5a26a7fd02c986f919929cfdcdbc54888a6d3 -0xf0b35f2e867251932600bc70b39e283d9e586e17c500f4e8027c181e5c6a1a1a -0x1ef0ef676888d0837500390277046aedd894b6bb2d318396950c818b98e4cdc3 -0x7291a1f5df47a763537da00d5db8244e7d3c5f83ea652c351cce171bb50462fc -0xa6652db82d899d67f4d96296b2acccd22b36f0dacf56a2544193c7daa090f149 -0x22505b1fc4567bea9392ad706375b196f3acd64eb6c926955c2783321275356f -0xc49bed88be4505bbbc18d2564ae742fbe2c9f3fd45172bffa1495e7623ff0a70 -0xeed7cd200a9c58eb6194c58e7292c06011e4d60c89607e452760e50fab61714b -0x2893ac51a9adff6cc9ce023428c616d7a53b1bc164614e2818d8ff74f5e4d713 -0xde9b1e7f709406c9cf7030649598edb67b2257031f4f2a7caba7bea2d4aea252 -0x4d2ddcc01e242c29a1076a459051116eda37874108cbd1b92ab28213126a079e -0xe6fb02f3a861d83971f368ff20889da70ebcf6621fc27e9def783e496babeb8f -0xfb2f3c87af501eebd9c1dc2120269527f0ec8f9a05d1f681e3b0eea02afdaf55 -0x05c00835fdd8de7faa2dc6be8e04a7f8da6640beffc009a347f995edbb3ac9fd -0xa6fea42084bf68fe701e48d10cf93c0b869f5806844e55d1a049ed030e6a99a8 -0x16a554e89a39781be5e526bfa2594eb25456b3140067176cff03b88a02ca4de9 -0x4198d7e5c1096eb3cd38d3bc316cc05a3b5ad6de728445f1b06c84f8ad6bdefe -0xd60bc094ec7bf523515d892c7918feea4be236e85fd1f9bd871f6fa080f65f3b -0x061804b11a3a7ef824cc78468e083f025c629361e1f79b3ab86913c748fcaa5e -0x56cc78997ef05a6e3ddd32a44dc64f810cc21e05dd016241492b3680529a7691 -0x212f1e360474b18bce5b992f5cd10572c72a1a0c99445030f45fea15488e669b -0x879483b68ac4f727f3aff844908efedc2bef9cabe9715e967bc3461fdf65092a -0xbb9d44ff4d4a633423214db248e09cac6f1eced999f14d8d5f8dc3c4a3e2136c -0x5b76112a3829e0e34e1df6d1580fe0dc9766ac6983999e55bdaa566e4d029f28 -0x0d33397a4325876087f9be8ebf9e298275f3af318fa3e64c6f93f49191f6fa8c -0x4ab72ff9a5641b3f66fc3bd28874b32e040ba767936f1f65283071663f8bf417 -0x1cc8903e5440dac04c50a80a77dc17564d4af69e1b603da4598408beddfcd3cf -0x2d3b69cf277190f2da4f8e72f50e907967d827e4cc6d4df465cc22c9935f183d -0xe5fd147be7af70f4e789584595993fc00215dbad99c01e297a2f937fac1e1099 -0xe574ffa954e7b2babab89dcbd40f3575b40ecea4d60c7bc76f2fb45af34ec191 -0x4e20e7202e4877f31befe383c17682bf72dccb45172325610602de0138695d02 -0xeebc2ded1e66d568eec0863c75eac3a982970fdb9c23a6974a33ef9f900160c6 -0xbe052cb7e2227d5dcb01314c5726bfcbd39e4d0132a15160e0fde5cb20a860ee -0x86c5517a8c3ae03707b385b7d5cf9c936132c51a4d1e61e6b14f44c13c766125 -0xd8fb3220ad1bbb22792650da3079ec4daebf7730c7bd1a2bbcbd299d21fc0e85 -0xe815955e417c1909a00a5c72b71bb0c61129beb884afe0af107fbb5613d8c7fd -0x5e1493a4c148c95a342bf80d43a22f6add8b0128012b7d382fa132173bc586af -0xd0d7c4aa653f767befcf79c3523b9c17ef750f2faa4328c445ddb3a44ff0dbf4 -0xb13e760ddf2e7b83defa82f6da2c61a5ba0bea07e558896a1d92fe476abc5505 -0x8a6259335b827112013f87a7a7156975486cbf84b173ba95e1722dafcfe2a6b0 -0x7d38508963378c6b3baa2d6ca07c4370002decfc08e6d1d39795eedb13e39683 -0x20677dc7a67b981925f0ea7d3bf35e3ee586cd9bf4b1cae7ae8ef4aa41527e24 -0xe41ba2d223ea3e27cbf05db30b13b3662d72a7d412c338ab05df74c3315f32fd -0xe9328b5df68634ca05a1bc239c55f16bdd5617b2650dfbcf75611ea6fefdbbaa -0x9757e954b9ab4b101b951aa301d15ec1818686db90fd43ac65e11d8734bfad7e -0xb8c871e7287367bea1d121ee5e41385599d00c109bbf583719d428fb246f56c1 -0xa8d789f9d575c1322f48b4ba40852d2be56c2a5e4d6178ff40dd1c48664fde27 -0x30f151ca82bab9ea0a927b93e88bd30adabef1322d707e5cde383a14db44c194 -0x3a3e1c7a47b8abaa4908bcb1b81a04ebde290164dc731df0910e13f05fed1375 -0x83f7fcc22168c08c5787a6678406c24259c8b78a0989b76a8930f7b398726869 -0xa5ac07a3e573114bfb8e141273795f189f38af32dff755c0ba9f24c25dc1c177 -0xbc415ed05f700c12fa2f007b3ab70e8fb9b8c3e3eaadbe5c3a25aada928842d7 -0x219b87f825f5dfba683f6d1185231a5a16633946bbbb32b8667b8896e2cd895a -0x5c55c3446fe557d80ed9b62260d44502c1bf08b533842bb6708fdf8c0118833c -0xcc2c7d0de9a0548c3a8b87d878d89fbe7140940a49c884eb0bd2e51bebc04ec9 -0x4cd0d46abdf1de3de367566954b29da7c2225f346ee9f3129f31124de66d6428 -0x688ce299173619871274e5e385c5cd3b0155adae489aa206c19a2a09a274e35f -0x9e7d458f896199d2cdfb9b5cf60f069ce703330b54c0eb47e99382e16dab6fd3 -0x53c5c0124f83e07e8bc2d466db224f34e50feb4f13451845679c6ec63d61bb14 -0xfac7c3ea5089e776c3290acfcc51be840cb96fd7a2cfa1a89850c3527876f26f -0xce66cb80fbc7336a00801e79c369b543f0ab5aa2bcf1d7cc34fbceb6b0b2678f -0xb720738b3c086a3605641574c2cf52bff401bf36be015ed7f2572aa8711c2906 -0xebb139c4381d419e84c788e86c3d485dd40b9c4c727f128c1bf871988be204f1 -0x501a8545a44374459d729dc76285a06b3e4da1e880d539a7b72ae73d57e76f1a -0x9d9e46ac96f94966723dd342cd6dbce9bab0dbd266896b9b529ae8978d58f5c2 -0x2776fbfe5d100165aff7db0f30c3bf6b639e422078c91d07fb81f8a0d471a6b3 -0x72a4ed109827902dbf2c74207ca53360f4440a409971bcd55736762eafbbb291 -0xff57f9e29bda063b7ea57ea49a7528bd5257a15dc481952008d34638e569d033 -0xacc1465d60875fef79b9506cf10acde87cd4f8ca96a8465a890e871d2e31c2ba -0xffd64cb3ccc6b4f0e5f9d3cbfce7ccdb96e3757c0f9bca7e0f41ebf473a3e34f -0xe2f9c3c9d980493ba6528e96ce85c2246c60cbedbab763c8817216af73009e8b -0xbb3fcd21b5f56d88199fbaaf3c45c20eca1f4bf0de83f560384006dd579769c7 -0x84bd69d5783c2c27def7d6c15bce02cfae301599c60b5cc95153f9a18a5dfd35 -0xf60eb304e3602ba97226025b20a7e8ba320406f4892b633ef9358dfd8533f071 -0x0833bdf350b3104d6a949049c786a005e94f7f8dd13373840c42325cb1e45024 -0x83cf16ff64aafcdd4efb4cb75d4c290ba08a588b0387f1501b8a0dd5b3ece3b0 -0xa20e74258ee775709f0d1db400d5766e0d059d049d2554175afec7ad84ad01dd -0xef0f0e9b3d64f4dd1f3a1b58ce98feb183aa64f46cb1f412a71f0ace0e30d519 -0xa5eaf7154e8498653ba81f4da1007be679f516c4d5679cd2cd6fa10e8cdf4b87 -0xe3f3bd76b83907e46e7d3783386bdc32eff615d4aefd1a4b5d61b968179926ff -0x036e5f3b744682da01a847b537effb3da49c87802358ba5a27ead285e94bbddc -0xdd022104e362aca7a0950b550509e9dafafdaf57f3847b819f9383d6dbd6ed99 -0x8086df39210e178cb403072d8ad47cb30cffd3a4ae2e050da563f5f2d47b085b -0x483e1be961d8a9371aa8fda858976c927bec0a762edf6f648b870666301389a2 -0xa4948e88f324ef99b693980c89ff380debd1878f1d66a67c9102bd128c709792 -0x34f92d76b0bb7bbdc555464b5e5dbd98bbb14cd122ad47face527631cc0cbfc2 -0x2b6a7e6547f338017413570df4eb2d4b5d27511f1e333caddd2cc3a7c3cd2b6b -0x00cbea9f3475c15b87e1056fcdc1c3f4ad3997cfcee07eeb5293b30e67f56604 -0x19ded5a75110536052c7171ae81b12cdb25db4a33aabfd8729c6eb06ea1a703f -0x49cc7ecfc5ace1a6e4363e7ad0fd7aa981329e34f6ed34461c0f264f8dbc0c79 -0x1130c36b177946b325c79a9a3ac07a0959bb88ec9550129ce9cf7c8e68e43191 -0x53b39f0950cf97a0e60a50d5a74038bc21ca94b9d0679d8f6ee65af62c8463b6 -0xbb3792d57e55ed89a98808390b676d6f57152c848a98a6bd937294ef6adec56e -0x9ce7a11456d6d0ac42278502485af51c1d18a10561ff5f86d31bd73d3bfc4a31 -0xd6b25d704ab3425a3297d01555b13f8bfd6c8aa88f7b83c3a581eb568d9e5ddb -0xdee647d0daf534b8cf46ac0055328cf738b60b22e54d45472cab4a7d1a6a5b63 -0x8f2214aa31c1ac59bf748dbb136d7635ac718182b6f229727ffbbfbe027a05d5 -0xa0e5cb423834be0cfe3b0e60373084044a288a289c57235bc90654260106ec7b -0x809ba80ed1d60bca21713fe803b5002f5bbf7e8310203c6a3b3cd6c3be7e6031 -0x44abe6f1d769f093c87f4998121e0eb023b63a5ee847337b8242e57c34e6b3a1 -0xe8960ede43aa706d06ec2a26be58d9e0bf5da49035668760e8bde9a2f0bb1bc4 -0x627a1672d5c38f78e06b9fdf03410ce0545605423eaae43ec406e64545fac234 -0x7213f94e2721b2cb401dbabe4bedaa3e31c95c0f894fd4d506d6336bea775c85 -0x9410875e897e2fa62c3ae1120c6a68c07f2676ea28051c1862820c67f49e2298 -0x442bbedf1391fac157531ec3ac00ce4389bd1564664f373b1aed193f798488c7 -0x9cc20f461170b7c672b1c3035f28a248b2d5b38b65e8b21fc1326036fd6fb4bd -0xbef9290b8315d79a4f3f581372a3fc0ecc6794d296eeb38357341f37be0b2614 -0x6d08f7c65ec27634ed06dce0b1b288e09a29b95b1809815002e042971ef71f83 -0x0a4d100c108a947da1d6772580da2ce50e74cb99d13584b94dc8ea9dae434680 -0xc86913f1e133f36113724d5df693596accb8f2e004989e9cf2c76c5c98932748 -0x39873eca2c4c75d69b32a361e0ead9311960f842e3170a704c1f5a104e3adc31 -0xc788ba7551077ca80fd1998ac5dc21f10b3ed3876bf4ee626e659130557858b3 -0x86e2f25ad6094b6b7db952c3f4f4d7b46976a897d634dcc0e39218d0659d4664 -0x44dda3c8090ab9bef8f2e2055139ccdca495b703049b50a6ddb18f51dc0c28b3 -0xe86c18e3949833a14d94ee31fd9274e01053a0546759f022c75e5ea9aa41642a -0xa651e5beba38f5be8f4e11d2e3e1f3034471984fcf4999ad70c71ad3a4fa32a6 -0x70fdd18dd3599188bd895268363008aab3d74dbd610108604109d0b5ee4e9c70 -0x60f4d44e0f58849238b03de5aa765e3512888ed760d274ab666f8570c248be37 -0xeb02dbc29066f221561f289939ce13edba995b6db2758d4fb655261033e08b30 -0x7ed44b4c9d2bf2a5bfb966d4d3758118d2f024ec6b42b4813d12cbebab371385 -0x3a948763631ee878ed53ab9f33f3404eca65cbaa43cf6de4fa0a03e552548d2a -0x83112b263b0c0f77ff3214afff6d2aad52b6f470328a3149cf442c0a097eda63 -0xfc3828c93ff9891d4d39c449417c7e85d8f34a12d5f26db96fc217ed6c211527 -0x8684701d025795abbd44bc8dc093ef169090422377842a7859aed46b31110482 -0x4c747f5764d283e4a0cd1a11206e04ac3eb238212801b019417b1369754a88b3 -0xc9af62ee542416972eb7052630761c8d0c66e68cec86d8878f270657a1bad8e3 -0x2048227a52d0dd09cb331333cc29ac9544dcc95aef04f6589b1ab5a56d4ea886 -0x6fe6f00b955c22b038b1e15fc68889928d50ddf68c0f9f592aff55dac23164f4 -0x4bc3831ecfd3f0c8e338323ceecd05abfd006587762d62afc308041f0148d7e7 -0xb55a6cd58ca05e4a02722d5051c7ad7615996b0f7f4ec8a384aeb3e1db5d7cd5 -0xf237c2e7b42f513a82b0018977a8149e1a4e47d71b1af83fba31e3a8be365b69 -0x7f4ec4031674c034a08366770314ba7f22cf9610cf6058d05d73d90b7d8ee0c0 -0x2b914cb52705e8b170d3ccfcde595529e520a2011f22b81b761ac86a2ac507c9 -0xbdbb0061938c39e10b6055609852688bdcf3df7aeca8c80861df4f156afa7e12 -0xadbf34d8ec94dbadf5d400b231f2c6a51a0e6ed1746cd61106b61c83ef336bf9 -0xdb00ec147d7ce6bb150abff13e167acacd97a027f42398c9bea335c4bde1137c -0xe43dad6948179a487f9c2f6134def43dfdb88cddf487904a296d9f74df0855d7 -0x77dd25e020aa882f6dd745e6b7f621f7544ee814cfa3812342b0b68cbb472d49 -0x6f988a9218e426ac198a19bcf9a94f5ac37d90fc13ad49c46aee912c233730e2 -0xb2b77fa43cd2cbc5cb6ead1db9572e79bb9a3c4f9885a467bfb923538dffde1c -0x93712f919fe5779648a4897109b5b2f274f2927be57cadd4f576710b8c45278c -0x90bc399857839efbb43a105e275b67bc0c9609eedd4876079521d2c2b278508d -0xb81a5b0d362a0860940a5056083d4956bcfe5e048ca7dfb0cef36132e6200b77 -0x825040c58f3531c52c2603d8165a8a61c56c5083bd15518328483811dbd000cb -0x05c9b3b5e65ed613cf70daff10f49c82713fd2fb81b64d55ff980036bd827e0c -0xef3d88695036b9da57c8d6b4f484a9cb27f4fa10436a24a70a08c5527193d2b6 -0x03a754815d1564216efed4ed5ac1c85de9462e5db0493badb921d5c3e0071f69 -0x8f749cc0fcbf8ef12d1ca4c48de349a797a5d89fd36afe71d002855aed75051f -0xaa0c0ca44c74d42b18f77329d04dc1478e2d790ad0fdc09f3d5b94275a776bb4 -0xd08a7b0235301912919db3c0efc79b23f289c7c7543f643ffc93ffc5bd93ad3b -0xf114765ff74becc0c0136e9a0900012b85298c24153561924ccec67491fd5817 -0xeae483eaf170fee6b68d88e3e98056d38da19937eb69ebcfbcd0e828d14fb73c -0xc313ae30cc721c12e9f9c3fe1aadd3e2eb162d197f74ca69fb3ebad32cf796ee -0x4d4faed40e98b63f1f5535bf9b0e2404a0636a4c37fbbd32b27aab7bda8f0c5a -0x657b81a9f99503f5bcbb341156f302935251ce39e3043caa3a1499cdcb424e4b -0x5716100aeeecd4b5575f1ee76a89955e8f69a0eb11a324e671e20a7efd717346 -0x1fff8defdc0b1384e53bcd8a092068852bf22da2d81499c512100e48d403e646 -0x47cbff05351ecfaab25aa53df3c7b53398c6512e10e2fd4c7e542dcd37daa134 -0x1fa7b098428302d9a00b3203de643e4dda71fd75886ec42040e8537ed43ce4d8 -0xd1dc75ad5542fb98d3a5bb6f83c54ab359b11260587b3405d83b0861d727475c -0xb55c09ee0bcdd0fa0b779ec8985370194dd7d75a61e0fa7afd92325926ca3755 -0xa9ee3282f6551d95a0fde31b566fb73c6376d3881abcf58e48571c2264823e3d -0xd0c037fe2f5b07c0ae3a38ab4acf8355ae300e9066a0a126595e49ebc21d0786 -0xa8151c9d9df89f5f3eead47d9451c435bdd43a320c6b95740ca59b4722ac4657 -0xc64d03270d4002748c3b65ff136b4953936e925137d9ce6bd9e935693b61b98c -0x36044febdf4938f018b7dbc4d31f015eeac7b0ccb400a327a9e5d88df1ca3d09 -0xfaf7dc0373004c416e30f71a067865c9713a42da2b11c95262bbb91d441e6dc6 -0x14bd931f367a325b0ee513d6395f8c0d910f181077ee67d61d2e7b8c40682222 -0x862caab66b3b02c75ced254982a081ddceca63c9ffaf42a5c4d1b07d9ac5e3fb -0xe9ae81d2da1afe01ce0420220c63cc7e479950baea5c65aff376d9f888dc39c4 -0x8e23f05c2d8fc228425a40fbb174302609ced9541e7a56a2b323e053b619200f -0x2fa6df7a4c22908e6408774f8df4a8c01710c2165cd7ebce45f1e1d3ffaddad8 -0x6fb1d70c9020f4c25ae4f102e8bc8af5ecc702a1b00bd1bb56fd65f50d471e50 -0xfabf6ec85b8ede189e8e797b76ff67a1ee04003be692cfd688a4077786a9163b -0x84fe6987ad13a0ebcab5ac1d87d6e4546bc729a8379475c5dc35549fb5f88c80 -0x5389d8c4b852865982d6ccad6ef8780ae149f1b7470b323f76dacdc1d5276386 -0x34633aaf946de1e986abd2c9bdbf817c514a98781d671ab96ec5a0da71240b0d -0xc2851cfd5b8a99edcde923ed6c632e2486ef9da2a72986bdf2598ba5037fc481 -0xc2bcce5831a30e98588d8ca1e8ce188120a21ccab15a822fbc1efaa99996f251 -0x275eb5762fa0868d2711da950163153d1de264f8777e07600047f64208a798bc -0x1255b2d8d7ab38972fd0fba4145dffbfff0b4a14ee8f2418bbf805283483ac2d -0xca4fdc234a809f4b4e8d49146d5258c0ef51465c6f84361d7fb1fef45d41bddc -0xf0db1c4b2f3cb8e47582fd412cdee190e44db8d690cbe65599893e8298ab64f9 -0xae07bfa3cdbc1f6fd44313b890a77bd41f442aacc19978ec539f8cd7f85569f9 -0x0f8abb54c8a6b8a052ad1667d20a567ffb4787eb4450757c563fbb7e1cc10393 -0xb02fdd9977a948f088763e363abebcec0ac2f921e823d1387d13cde26e5f4cbb -0x4094b736adee66752c82e69120841f6154b299c20926f2f38310c0bd680768d5 -0x1e97dff06391ebdef4bd06f0fd3e60ddac2184b1a8a38beb78a93df1166ff023 -0xffc6e63ec00207f3a0db2b79bdbfff0d3abb1d2661f4dd4aab71e75624081397 -0x5a0bac70b13768c04fa60fb463dc894bab339fa0043381dc37f3231e83a17e3f -0xad7ac104880fdbc95784360ace69bdd6ba2fde5175413266b769bd2b7f62c79c -0xb90bf215d5c306bcdd1e01eb8e6b3931d9e85226a5109eb052201fdfc6abbbde -0x644c85bb0427c1ca621c862b6689f3e625e859118b70392e7ac56abe5c0d3b67 -0xb3c7f61754af5e6b6e18e15a9657df85794ef1702772763ebc98790f553c9f15 -0x906ec51d2a10b964a62c3f8a40b013bcf61ba7356ec0473c3855bdc4d15475e3 -0x07a247486f3286cfe5e93f96b38ff9fdc5daa2d0753e2699bc385388bb3acd57 -0x434217587c07735c16f56f562cf874d1ba5490201b9109bfdb734f62b0b2f858 -0x018d14afa4d0e5badd1c67929872a5562a163580fb7eba40c9ec7cfe196e4e10 -0x2e96da2788033463b22dfe3e26dd9314cdc3aa49a8e34980d607b29fa1557409 -0x1e2d3e36b839f059e38efc93cc96626b4ea8966b5fe38052fd71e93ff6ac0470 -0xaa9c3d6b902d23374d27a7da62fe37e20e82e2c6aae408f4f2a7d75f48b3eedd -0xb9baa84f2a09301761b57a7a29b7a4759515887bc46838dbe468a3f1193aa348 -0xe4c795211c3a8573183f4ffde9a67897d405bdec5642175ccefc9a5aca02acf7 -0xd4b0a803138075c7713b9392426db20c30cedf63d8fa2e7d86881ba7b2917c03 -0x3743a17c0c4910f37a5747070d870a6ae07d20bda7fb4a65993780064d724784 -0x0ef072e1b06fb2d0bd847e82ef4f4e6cf6f0946c1864139aa20127196fbb116a -0x441553b11d27531bc084c81a0517fa433bbf5540c75015c21076f7093e3a243e -0x643fd964f74f0988b8841d3d89ad80383e9385e437fc676affb82183ecf01468 -0xbd8edb090b752562d33283e6ead8414d667cca249990f52b27668d58e298856c -0x7d4c6311956521eab0ab3eea8ddbc63348a445875897b3a8deda43e144f3a221 -0x7b551c128f2b9afbbe31467ad2714618a1aaabc88aaeb974cf165b3d4d5ad307 -0x20abd7301bb488ebb17236f52093f02841e25e251836be0e1d4460984e8aa7f1 -0x90cf22405cebd60a7fa8018745f8ea7ecbd4e73378b25945bab057a0e4c6eabc -0xa43e8f6c4c4e885724f97192564c375c731ca64e253f65f31a6bc7d40a4c2343 -0x3e16a7d3eb57993aa1142b5508ff4a2d0b079b68fc87b1eef83a76a7065d2929 -0xbb4a3d7b8f79af6807506b6d498f075acc2ff1b6362b19a08ded3277c5702600 -0xee78b31208ab602c45f8df69ebcb3b8965ad913557adf185dbd0bac43d6ab29e -0xe7e5bebdf49ce55d715b7e9e7eed900aabfb7e3200260e97ae5746d62d6598e2 -0x09cde2548f407d30efb2deb81cb5175769af13579c79eec0546177250a3e6c16 -0xe79f51024c8eb002c5fe895169b8de13929d6a3ac41743eca5d7627805343dbb -0xb3cc6ab07195afdd62f6a99bbafe0279948169b941249a44c23434f6986edb23 -0x1480fda438ca10a2e33a1d2f339430d0db80cce41675136416236dbaa3067128 -0x8f39c3581444aa09a42e808bdd013a2806e01ccc9971482b9418560357a3359e -0xc7f664e6daa0d45c58de25ecef8f89a52d2466780b4cd740695409cf0be9f1f0 -0x52a447677baa6c9ebefd5e35130b9b682c8c28f150b61aca51bb9aa72862cd65 -0x148b3b27a342e4a6afdc37fa269ad88099f93126ddafbb937a6188fc96682b1e -0x999f759976caa8dd158b5862a4866c86e796c77a144e58d631e5823c7a223a31 -0x045970096ad22d0b7b118b51d041b419c2a6a58bbb47dc8a7b59e9f04dfcec12 -0xaa540fb382e92e64d0324af21c6513c4167f320c212778e1b59dcf2bcf4da01d -0xb20940999130b36526fac684d33e5101a5ab4c1b4044fdc121ee178c528efe30 -0x0d45fa675513ae9d894e0535a43d99a094bc75c856a53ef14a3e0a09b8860723 -0x57ba0394fca8a51601d6d91f62a77061e6ef5f004bda324556ad028c938773f6 -0x7a4831af56a6f40c362e7168c657164d6b04cc4de9d9ad3fbeb25153ec09dc46 -0x5e16273a79f3671dc680b119092f1a97a98431be46daab51ae902cbe8db4f99f -0x441fb350e3d65b8ba052861b131e23434565746850a5d7e64d068908b0613ae1 -0x7f4355b28fd19bbca5d1fbce2147aaaa154d9033bd97e6ed486d7681658e6c67 -0x6abb3673e78c65b790fc45df205b3cafadb2f56b3cc5b84db6abd9882471c317 -0xb0490364ed552fb70a422201a540024a9ec7ff9c9052e1027f7fcab1057400ae -0xf9fa4a1aab15fa6d494a8504ad3a30c169f44d56c96fc91e57064089af986dd8 -0xbf8f615a8e68933ee2f33f26f1b33faaf16186498c4eeea5f62700287575564f -0xb31123781d84b39481ebb7b37c0408b136990cf1917702493b41f136d3a7a9f1 -0x155932eb7a1b4c808675dfcac0960396be093f12a1e175f88339b5206cd67b60 -0x05d9e0810dda94e27bbd760d5e59f096fac266133e03bf157643eac395c5f012 -0xfe708752e5a99f497df1b6d93430f248005883973cf74b6d7a7f2a44e11ca568 -0x777f022dc3e4b6f4a7d39020a28b972b9dd8a28c9b30fa1f9fb502ee2129e159 -0xdeb69b4032b483beea88271139db127a00bad412c7a353cf762e39a1734cb821 -0x3a16051fced13948706240641a15dfd230097f230c42b8dcf0190adf00ea941a -0x8261a01db272919229c25e9a2533bf51b8ebe90a7933dcf7e97ae51200499574 -0x046755d23b012884c9ba5a21074f747227aa31acf71b9d1c7749d98935122edb -0x2fc972b90966b933ed255e3f718b2665ba2568a118adced45a9fb0c2e634e574 -0x378e62a7030d8c71bbed3955a5b156cfffa51febdcfbb8d5c2d8f07fb71ac478 -0x10c11dbbeb1160ce1aea7dd1e3a87f2abc1070a9bbea812f425177978e13c872 -0x31c9e35d0e97257a8d7ceb93747a7d02eaa63438d4b6b9298ec7bd809014f1c8 -0x66022dca0d69de10c8ba2af439a1f97155cc2a0125af0330fd1a6381dac130dc -0xa0e4896740e7d75d60aa9490518e77446fa52c924453094a39f3e601b2a4b94b -0x0c9dbe398e9380df5fb2056953ce6c0d77d885fc85448c2edb899af457010e91 -0xfc1f8f51d55692d0f41d5dcc0357c64b022e4aa830d24936408dad631323e651 -0x173f829646aaaabf1ce5784aa871f06a836352a4b3d7ac67b949a8aeb4188373 -0x8d13413cd131d42bcad28ce511f2f81b5d8820f14201b72c0fc4bce652bc5a4c -0x1fd6c5cb6aaba096945ccef49cbec1afb2bf7763ba6d96e4217f8d487749eb9d -0xea85feebae3f38f3df9cde4c50fdd9b47b5eeb4747070d2910842de1bf6c9d79 -0x211ef19a900b27ad326a0161ef6657cc56036a47fe00f30c68886073d65a7d51 -0xdd0242561ed864c1b24bf376e681f49762a361eca05e02ec7716b1d7eb085f7e -0x3b8669d0c7bb82962267a9ba9edcbb766547971d6a5d808bdba0ee61f2eb43f2 -0xfb88046709fee6410c13b5ca0aeaf3e67c0d23274ff1056bd3a4cda8fa2fd5cb -0xa63dc29a9116df16372baa6b313e1ce13799e257743d11a9e648fe1a65609da9 -0x358d028fa3a94dd38de697857cb679c3a4b9eea06d03437a743b67074e6e7b38 -0x26bf7273a5541caa6c76ee0d8bd68353f1d1021b9bece85ab519e8455ce539bf -0x1234faadf542b4c7d029382024eb29530fbc43d9c5c7dbaeebe8914b36d5d0d2 -0x6619b29fc0488bfd96bd132e66151fa46b3bae3bd65292145319d7a2ee53e31e -0x4477af5c4463925da2c35140f1808df1a559ec3d3fa31d06055d68441529e6dc -0xc1167c0141f75762a7dcf1d2a6d5227c6343e8079f8234610bc30fee748840a3 -0xad45e551303e02317ba99b08e98cabb5011e2d64158196b5a77ef293e8cbfd12 -0x18349f95d6985db99e358244aef61b2dd19df6d1196b9d9987cc4f2a148c9490 -0x2dc562e54322fbbf5567c61757ab78c6fb8fb3e6e385881929e6331a575b6546 -0x769e07ef6f36b0e862dcf1fbe7525f7f6ca9315e80b17236ec5c8009cd842bc9 -0x019aa474a5c7e879dba81f7d09720fb2089a265c3e8142136a6a681b30377f48 -0x4e119b2ece4cd8f386b90b9e573bfd290a317adffa0eb4d13dcd08f277450dea -0xeb18a57cf005ceda2028954f5999c41f3d96ab07b348770d9108077f0f1c4cee -0x1a77b6d526b10a1028e3471421d7a479a110cf38069a87c82612c98710f2bce0 -0x8012280d03aef502b490faeaefb076aa212e17d7f7cd5be7b2b6f20e018a778b -0xab23fdb480231c1d19e4ffc42a50a97fe164c92186cf3d3ffc096805ec2922b6 -0xe8cb38e1212e10d85eb3aaa35e4fcb213e237413641a8baca7ecd4457176803d -0x8b47011be3ba50491af495fa066742d5fa1a711b5c0bd3ff2a7780ae2ff3441d -0x1aec970a79a3787543d4f26723d966292926a0bcdb8faa0b4c82b5dc8b043c10 -0xac1fb48c7dc608ba2638ed410d88cf25baebd856360a0947322d71b82d456c29 -0xd322d74fb2ab621c294849e71945a5ca46e19789f72e0cd43ead6b2f7b2fe8f5 -0x13c21ec56d89134039b19bb2e08c8db220a11e752ca89433b23f9b1dd32b7d7f -0xc059a6cd952f6626e2286d01b236d0ea8a331907c87e8cb157110559dd8172dd -0x041b0b1ecf66f49cb76cbc9ef4f0fb1df537d99dd704f49c6b3d40a52511db1a -0x48716ef6bc25fb2edca66397b6b75f68f9cdedda610e53b3b6a8ad40f6ce6c38 -0x3e7da1aefb5a6977a4fe006d7ad1b65f6a5f231cb4037b10871b33e382b761be -0x3684d8d01dda2ad145fa7c02eef181b25ed6d70c567095c5b8e137497d6a0815 -0x55aebfa2543b902af86c54dd69f1b8ebc44df1787eb3a306c0ed9c76023e16ad -0x1e2f5a9a550402c1ecbe4a68d75435af6715cc47e10510890bd201064005bff0 -0x6dbe1693ced122e7bbf0846c251b4b2e0e38a46158dfe403967b5798652f6213 -0x4aa62edb349163474e68ee027c4803cf1416373030665e773b85ac68e5641608 -0x3d2b0c4f9443d8d12bf6be954eee318125ecc085bc38346ed49d93e133ed2970 -0x9c953befdb2c93bd15471b56b9b214336f6c1924e4ea841471e4a9acbaed808b -0x33cbb6c8266737affc9f2b28e84771cfccf529e2445f798ca55fd7948f36b21c -0x6c783f1c78a23805f1eefd8e744d0e439939384b1f28030ec392a11f798590f2 -0x932c395594a7e0aa66f0a350d27918df83420780812298e3662cdfb95419ee94 -0x755d145f8cee9ba49a27d311c4277b7b0cf420bf9bd858987542d0a10a3491d5 -0x00f06da89117859e78db74b333e1178b9056524f7c9bd911a108335ef4758874 -0x276c6b4ba202aaf2a8bcfb2244e76ce2f940f3af511160d33440ffddcb7158e7 -0x73919c53cd094582039beca79b99d55533907d54e1568894adfc1c50ccd9f052 -0xa4f55e92592ded65a59bf1aa6ed01ff8132f06ea200931008b40c532b1229edf -0xe6c71c45f4d9b75d59134798c5f82ec230b3ba8d8690e7d2d548ca804f64e844 -0x22d24460372b7a1eb891715ff97cf8253cb3bf2ff1aadbd79b377fd2f040906e -0x381d3289fa1775b2cbc33f2050ba3095436fc3790a9d57f35207590b456af02a -0xde5089e452b484d9899e8bf886fd880a63ab287af25cd1b1f8dd8aee679420b4 -0x84be45bec6b2fbbe68e1280bd2d9eb83fb835f057b70f989a9b80ebfc4bc34ca -0x365375c69673a179c0d90f2a7af42c5565fc7b7b79cb6be2c004187892232fbc -0xfe774701753be30ca4d4c1309dd56240ffd9a52fc6f9fc571d3afc5a74dcb403 -0x7bc6627cc55ebc9a819e7d33f9cdb032c0fdf82e161b0d6024257cddfa76b1dc -0x31795aeed5f0a0052ad3af8dea1dce5c6592e35af95bc3df7efae24f6fb3c72b -0x0a0f450ae22c7c7d4d31d44cd08f096abe2085438428f38011b899cc79642255 -0x4c9129c5f429fcf4ecf946b7493431bd50522d7cf2d4e60c1b2188fb55b9f986 -0xc30dd8ae66d9d7fe344fa0fe000fe763758a27f491bbee48be202f1e1da8e9f4 -0x2463a12587e58a4af12704061f80f5f7dd0cf2035ccdfbd3930fbf853a67408a -0x470300097c2ffe47a92408deebb17bb81d8a4b6dc362cfeea7b9816669dfdf4d -0xc6ad4aaf4c908fa3c1dbffc7e33d2bdfef64c8ef4ee78a6dfd2507aa501f527b -0xad725aaf4503a01e940cd3c1206eec10f2b37e81a9e51dc2d4f6b274702f8c41 -0x17b99f28ef2fe962085f9ab00227e3059283e8b95f029b193b6d698b9d4ae154 -0x9c8d1ef9befd820302c3049bccbe825f09611c0212f66815eaead2624a9072d3 -0x9102f6802e50c2fa0a28768236f6c31f67a6549143b66006740412e2af4ea09b -0xca0186b7783fbfe71a1a417045501c57f5a6e0cb0dd5324bcd050ceda273da63 -0x4e6862608c598fa80e3236c14c80fe3737e8095b6a05586311d68c6d6a6c2b87 -0x335f46a5522ec107483a3e2752fbd2efc1eb3eef5b7f6af8ff0ebc8248721f47 -0x2bba8425a1673a7a3354923b20a1ac25f88c6983c001d9773ea25a763dee4976 -0x7b0c2f160595f68f16065f728e91fb4b9e138f99d682a7efa171fc2fa91e95ae -0x681ad83e82833419faf2d157cf2452c5c12270b4a55cd510fa0e806c158e72fe -0x5f1adefbb7ce52c45643845149e56db5e3ca495cda795a3a7484946511f32188 -0x3d54076f187583eed341c5fbcc37db469e0afa322f41ff54e44f5fec08fc3981 -0x11c82301f75cfd12080a4c0a4774d446a8b1e31ec1b08bfd5f5b99b08bdf6fe8 -0xbd88d8ff82ff0583bb2eb505e580def989609dd467122f1ba05f96e490d5e22f -0xb3fe187c5d51942e6f3927f9a12a3dd0fe80b8c535cf22540e3702880d53e764 -0xe3871336df553e64d12c6a2a65733c53faafa17732b460359098e1b9d9912e2e -0x68c75b2bb02e85db086bc6805126921b2a3c9fea381939020f886bad40ae6851 -0x53229ea3cb6789c50aac0c49dbd0d4d3f995f8538009e472ec4366d09e185573 -0xc27711a2b44e188ae5355d345e4c6663b1ef39010d067bd67eccd6b48eaf8ce9 -0x2c7caa9ed59e69bd4b88fb066b514d23f43288777d148e10e8f257ffe759f470 -0xd5814355a9d37000ae506c5d56d57950ac58e50ede7589b0430691d37d77885c -0xdc8ef948b504832eda7fed21fec127fd341654758ab17071de5e1d38dccc22d6 -0xa6a328cdfb9634f81c473a123bd5f52f74a0eb53b7494074f2b5539f4bc11601 -0xed1b728121b08c36465df2ad788908c5045ece5dc68b42423a69a8aeab14de61 -0x8d70b521d44eccc2f787b66b2a276fb287d172c6d8e04fca77c6950234833a0a -0x516faae0be9d2f7bc5be420b61824a6464da005c87694e8aa36055e077801cf4 -0x0e5dc2bdcaefa7e974184e8d7ad31d4c79ebede6f10dd5219075c3b83d4ca801 -0x2b30c787f73907470f11e4e178495be6e35ef9777a20a291fad8b82d66fca7d8 -0x4b37b719f873bc9ef0b87890f497bb4c3600894ee9903e67381ac1cca6463c4a -0x42d9580100c6f135a89e48806116c54b9f5e50550e1186d9b1d19a5d6acdeb80 -0x4b8647b00ab5e5172c2f8c066ef0a5db51f8de348097cb269a743c469ba721ba -0x506b9045d5f26982db15137f1a48a8c1218b05f260ad24d79338ccf46443bf67 -0xa3865f08820cd128e26d40919719c5197e79261dddb437d44019ab761b872f81 -0x17ab62fa3001517fe3424af27e029b65466e683ef74c1425c64b0fc2d851c1aa -0xf1d286c46124d2811315338b3e7e00104fcc9534f16a37a6e26788800574913e -0x4db1ae65e07d10b3e12eae0fd7ab779632150f53ab98019331770c9ba7e49ba5 -0x4fc033935202dbefabc0fdbaa1f508c239d123b1438833b01867fbf520e6f1c0 -0x3a95bc8f44ca1d7d020f99377150cf90aaaacd6b4ce63f465f7eab9044238a6a -0xd872f73f6c5500e3e6fb7419c4f8be09c5c292f697a4bdbb47c019be9f54752e -0xcbc1f5ff2eac6a2831fb14dfed25f7b7c7870ecf77a8973912ecc6e5c94978d8 -0xad9db91e9efa5d4d5da8fc4b9dad533e6262991c933745818fc48246b879f372 -0x88be855b55e2648b09af882c3b22c14d20f6da3d05bebdafe06aa267e3b17756 -0x61015246bad562f7191ec4ea4e56c57f5beb4d87bf8a4c091524d13c26c2739f -0xb440dff4038127cf1a1f485cd4171bbf7701c6b568fde810e76939261b3f211a -0xaa3a07f423d378bbf640f08dfbda8611e5dcbbfdff100cf8aaeb5f8be738e34d -0xd7935276e063cf5b5ae0629574a631baa7b39ca621105a4c4d380364eab2e673 -0xfd3f3ec346e7a9cd83b97a71605b5c94db0e7a404af7fd41f575bc70468e3058 -0x43032a20b64a2d820f76631f04e21a59444085a1ae2d86e7e9d580635d19702e -0xe9521c9ab6dc1e8dd0a48e1addcb761887ead6961587f568ad5436329abc2bf2 -0x4ea4a8aeaf08997e12d712b14bc531935286527605e7b8603fde854d4cf56650 -0x6f2a67c45adbcb74a755a3ed86ca6cb83ded6aeab29488ad88205ca024747910 -0xaa09943338ebf5f50e5a4efc2bb7bc716d1240a82a868aa77e393606f1a9d044 -0xfb99e1a4abe3093a1ffcf24394d04e8406b20d7efef71b0af7d7fe376111ae30 -0x110d2cab08ed2481177e812c648bad5f1e29905e1b000ddace6c453ae72d17a5 -0xe9909240b8c8e24a6df924672f93c60d41599f652ba17664339e2416d7d43447 -0xd4bb7d8d6b5b13062a2d1f749dc861c0048aa5ad9ac10d01b4fae0c3b98e0d42 -0xceab585eb04f18dcf69ce6f33a9288452e3c52868207178ce7b2d94c3ae67319 -0x65e0b8a329a0e3b854628c96f5d355104c5025f32ea0f802151e73367f7c4289 -0xa7f4e40e54a58cd139476b548c573a83797413024ca60da04d53eeda23ebf90e -0x189866ead61f6903fe56856197753522060448e482b6e78a22441f310639e741 -0x6c1485807b264db221a3e9c18c49c88394513bd75674f2ba9b48c22606e54153 -0x49578cc43e1ac541cf18963b37306236d9215cc40abe463ffad896fec027b6fe -0xa6e7271f38f09a4c584fd3c3468376cd2ec74aac00c2320d11a5274e62e8df4a -0x83d9f2eea86f2856b4feb4da11adaed2975a936fe5ffc981e2a626daef0012ce -0x5b726b68bac2295f56126578ff3b10dc5e55523826945b010d88dc53ab0293e5 -0xaf65a68cfcb82f8e93d2eff76d39c3858a8969a24e1df4632702fe65b6f15930 -0x2e4967f0704312ce318b7eae8b7d1f7dc95a44c3950a53aa6cd00a80e18cb01c -0x1ce241026616edc0c90cda1226899e53313d8c5a0075528106bb9be90d95d6bc -0x34558b5fe4abd50eb97319cb81eb58b0b10fc2e74bfb4fdacf7357cc6ead7ae3 -0xcb027e44630b526fcb53c22cf15c039dbbd4b865918dbaf2c423c2a1f83c2b5c -0xb7254684e05030055ec7181155ab73be8aa54b1ccbf7cef4a02776ca9be49845 -0xd4141bf52aaad131c0608edcaf5d1c68dd97757ae1dac7fecc469ed0167bc5e7 -0xfea3bb984a9d4ab5591407b9476cbb244ccfa3009f081b6642ebae48d3981f94 -0xff3c6c17e1a94f8dcf37597cc72d303b44a20e36454c95101e1415e8063bb8be -0x1c1bc8d743a735c990a0ef6fd1e5fbd9914972705272c860e8d00c206941594d -0x23f8cbbfdfed159cd8da6cab5172d54584cfd3f1abed32c7a2c438065fc03b7a -0x6779149d3fd91d497793c8ff39da9f52372d0669e97028edafbd801db2ea4d54 -0x96aeb9b0206ee01fae3820b7dbe2a4f900b79c50fe7747a2402bd1db7bf08dc4 -0xab7ab9b4be792ae89008db78c5ba3b7eabb24cd08933ea2fd01266972ce7f199 -0x094872840cfdabd37101c166d8722543db0b30c5e7431d93d5c5da76f7a72a8b -0xb2cf8fe43cadc9040ce4e3cac4947e8c6a88ebb8473e187b2105769a6cfce8da -0x2f94365d30acc3eb2a1a443507c8756e07922859b47a233e1bf523bed2d90f09 -0xd004cd30830f7b6a7bd755fc2a7877d980abea57b4bb37432e73d19c5a1da880 -0x249bd8f8aec5fa272bf914069842092e86693b997272e41d09352ba905af6581 -0x301293409b492b1389833071307bcd74c53d3ea6532985378dab71b289dd75c6 -0x2ef2425ca6d551a6dc504922893e478aeba9710d589e81ff6b32bc7ddb146e06 -0x57bdcc8b66250f941d1d1d7c16149e0b86678f87b01003868bb5b7c2035080ac -0x1dc058a0030dd9deb3fd294cde1afcec80d5790f60aa36e096cdc4ca17efd184 -0x409324dc915cfb52d20ca08c45ba7b467208b6ad2b093c572c8544fc2f8af4e8 -0x91c1b41f553d9f2bb74fa88c41ba3805a14916c56effbc14214923c09609889e -0x698779235637afc1581ad1e73f7c877abc2fabb0d01fa7871927bf06e2219439 -0xdeacf6c679f1232c6e19b1c091d035a7142728e142d49746bf958f24e74a4842 -0xae9f389194b8fdaa2a8e437840223b47bccb6fecfdf24cf196f08d5f0bf48567 -0xda5c2ddcb0cc58db8a831c1c2cf99eea627ab5b656dee0b56aeacadbb34b5e44 -0x2640bc5392b11462e5f5f3ab60785909568a8d07fbb282eb4228a9451392ed47 -0x818282c6f6877348a515441c5b42d3465c9883f5c7e6917042ab767c81d1f8a5 -0xa5f5ee2f08c3ed2bc9480325508ab2e6d1ec4fb7ec020b29625a11a6b4cc8445 -0x6c504f36f11fac5c992049dc2c7fc2bbe20cd99198a80478b4ec6d0603b7ed95 -0xe3f7f6bfe7bd805fd815776ff99cc848e87e1815b78e5f40e458537c7eb97318 -0xdf21aabb4268352042482648ec781429ca337fe084815f96492686b752b89137 -0xa865620becf2068e41a846d72e5b20b16636a4af9e55e0a864969217ef00d5aa -0xa7858b150b7a86c1edcb2cc4a37c30db9f47f2e12788b9da05588b40d6e6b8a4 -0x3c104abc9e39ef04ebf06a72e160fdae8d6610afec59f9d316038b319dd453f5 -0x3eb3b8cfff25e31a720e85d81aa60c4ee127d56502943587f68954a61922070a -0xa0e96f79f91f155744faa7ac99af18972d269157bf1212235c6d5b60169945a7 -0xf2619e5b575e822b97b00adee3d0ec452236d274b27332e721869f9e8836c443 -0xfaf76e385eaf24f70af06aadb607d5bd738a8cf0e1aac5dc40ddafc3db8183e5 -0xb76111570c0ff9b3a3d2b0f46b0709eed4c6055ab9d11d84d2c209a0ab2358db -0xc7802cf9a4cc71b6f99b4be39c044f583d63bd6c88b6f0429f652939bc0ad1c2 -0x8e4ffde101c505afe3a0c8ba8442766801e1f58b426fd138a2d03724aefa8102 -0x79fcef1ff629b26eb97ca315d5806297ff97ad05a039795856ca0ede1b8b828b -0xf9508e7c63754f329ff531dcd641a82bbc1693d08f397210af3673c9b3216b9f -0xfe344e11db6ac09b2adb122981a2c1d570ce26d76ee1b7985a285e8c60e3daa1 -0x78828581f5755008512b64ef3eeac6e87a9b9c912b99fe7c5d4d03917f0fb03a -0xae3fbbf7521582c06fec8026f3c67748ddcea1f492e2150155f294fd4b85cb4e -0x84ffbafcf462b620ba4014ff0982a3e80242738ab1884014eef272d78a6d534d -0xc4b8f8f6038c379dc734d562dfc6a1587eddfbd5791bd3478b73baf1a4590953 -0x176533c5a07161915835eb0f47d9faca0e1630e56bd93086820647c32a89057d -0x5e7b67c8a8412a312de2995735e55710b4f0952311ba3802fa4525b24fe01d82 -0xe947bdfca50147d7b0556d53d3180a7a03c60f4e5a6fbdee9d08542b5a63343f -0xf6f4ac4fbce472b718964665886c9cae526a52c0ff5651eafb8c7324c625fe28 -0x4a474abb4382b2543869fddd3d6d3dc6473b936357b7faf4d220a3894f32db64 -0xe861102afd9509740636f298cffb24237c4f13ee4a2c284cc52f596676b8b955 -0x4a9db6a84376f1d30b6b5471e3704072b6d3599fe98ad74e5ba8fabf11445728 -0xc3d99ee59009a13e4cb8bedad06e034bad167c1f5847fa29a0ec24620481534e -0x0484fdf6f8de3e7918164a96f7158cc1080ae70bbbcb67b9229dd4447f112839 -0x7f1f63b2dd713d89dc40faac7038db8f69c69c1ff2930feb5087f836b92258b0 -0xe04718ce0eda14c28c90d9438e9d8a469e7aac430cf5566b9209717b23f4ca74 -0xaef5bb7da69833efad2d05af505e3592384b52a613289273011fec5387a50a28 -0x742e4176d94cef721a69bcbd0241e2e7914a22dfc02c144e7b91ef1e7b9a4313 -0xfc6aa7dd75119d5101355023bee9995e37f373e53d15d56c5822aed32859428d -0x96760bfbdcf7b7852d0d64d9e0ce3a7fd73912fe351182f03cd8c3b6f9235bf4 -0x3443ab8ace4dd61c35cd169911fe077732968e514a642d802debc5005f2becff -0x1450b71d2ddc1bd27ca03aaf21f84599c2f22e0be85aafc7da11882b1f121279 -0xe2de1012f76b3bdbc0bdbe7086246a46c600113553cd4f9dcd33e6cfafcdad04 -0xac515d3ed60a278a07bbbba7319338391c34b6d7aa5c16ea32375cdf68c735dd -0x71c307e730742068b49697836ef7db7f340b19c434733bae6363281d2da4a82c -0x8fd125c565175768e1f4a0ee4dbfb9f635aa844d47d2a513a9842432ad382a82 -0x896dccaa9328e6ec620033ebbf2154b2c8430c66cfe697c35d4a37f7cd48a76a -0xa9cacefce6e13ff8dd5175fa01113b1bab9ec172bcf58b9e4d712348670ec11c -0x84a6c3f1eb819e6b13b4416c827780ce589d843767b6e133d3f7ffcdc5053e21 -0x5742146ae89abe18611ce46b49788192a42ab518affa83c6b8cb5c23aea842c5 -0xb410e580e485f6eea48bd943ff7d7bbb460e12be6455128e775a8426a973f208 -0x0b1208152220e563e3534f68a48b489974bee8980ecdf31708a45ac9f12bbf98 -0x35184b6fffea31de3352ccf8a1124344573509c917efcfb47ea303d8da5ade54 -0x819c2582ac9406427fe998474dbf4a5eff285db3ce159761f77d15b20ad5462f -0xa10210ae2c7c8ed66911b564716176b20a196e9ca437b43a3eee4bca7e7c2633 -0x3d69fcc2532b1b6241ab1ea162e59232cdb7ed5f31e6a8a5d73afe5c87b62f40 -0x06a9e3e169e423cdede193e9ef8846f98851861b543b067cbf45b6b5242f8c89 -0xb396ccfff3c1c0f8a0aabc32cb6a5d70878f495b5e20611e93a123302c719a63 -0x422d305da62a81264ed8b2e3b897c1bbd27e1013f8b269f8b7cb77bd9f99b3bc -0xf41eddd626b238c222d75c59a601bf6d5a3d07e24d67beeb43f6df31adbfdd67 -0x335d4e6e1054659db5596ea73340790ee67574ba7498e8c646129329ba43b0a2 -0x042a994b7bd3e153276e0c86f03568f68762d49d1f664f2646bf94d974bd20a0 -0xd87d6926d06cfe85bb5b4d72767edc89cfacb0e15d7c5c1e26147f340403a463 -0xf5aa44c4f89e0be475089f3d2c2d309518131446be0d3caf16e458e84372982d -0x67ad7af08cb4476161e6a948e5f18d46fa607c9864cd6360665d4a98b943085b -0xd9eaed9dfc3c213ad1f3ec29481da34a4db4bb86972383abac78a5490f112588 -0xc78f13041e707fc6cb190a584f9477aba14a325d62a52bfb5b4b85090e50eff1 -0x9104427b2087397c6d1f3cafa040dd6f10c5dcb80c7d80072ecac31338cb77bd -0xdece24a1db2a534364d972bee0ba55a16375261951772f736a6772ac4471c54c -0x7b2247d15606bff5cdc53a8078838e423f7f3f82e709dde1c07fa46e1b13365c -0xf0a9292d2a2f5d812567241d4a5b934dfc4855a3ca262f9046465e817e8e4c46 -0xc61417aab9aad8561cf1503eb557119b6269504e9b62f82a85ee7a48ca901d50 -0x4c8332298951b4653f4a69a8f3f69ffaf33d86625ceaad78a31f2e32ff61440a -0x6af8acb958defad14e328d6897509e69c562e65c2dda1f603086a7424f5c45a4 -0xbe0adc3331cd602493178ffecd989b178203a445312ab48d3741184d6e965cb0 -0xa0d53e492ffd661adc23e5055307e3e44588b51c931e36e8dcec9b484a8f6f09 -0x6e050dd43aae75dbf9acc32f9cf929b3438cc612272ccfcda4375da0c48c6165 -0x5eb8e436906817e2f2359b32cb1931b84301d66701ce9e9a09b7104a2a26af9f -0x306fc3867e19a2af1134aabdb65aaa929b02b542edc271f68494734d47a83cf3 -0xf9540b72222a15b38cfb01f2301561a3e13e14f7d90386604a3656ad56405bc7 -0x7894786ca62037577c3142c6c49608f49261deb431e6a2282cebe63fdc9557ea -0xe00b153809a6ee0d1ffaf6ead42cee4e1f2f841090e3c26ea8154f10309afe54 -0x0cd2d36f634e1ceeab1320ee1f692fdcf224799d567956a9df21de03632a6e81 -0xbaa1d7f52cf77b33f8ecab30eee90f3c269b7517f43e1905c5b612ff666d9ba9 -0x1a06956853c20531105e947c1746ac0d633ff35844d0a2035ec2d7002e60ebb0 -0x38e733f74eaea50c6e54718b587d95b5a30a74ed84d93348e51808ee84b3d71f -0xaf6dbbb57e60d22a12f5356253b29bc0a571eeb7a480ca9a46f7713e4ef30622 -0xb6fb51d1b30e273fcf5c39b87ca881113b71519a672aa698ffa2b9c26bd4ba61 -0x9a4d1e4404fae0965c3de56255a813838796484a413afdc051da3fcf1c023519 -0xa669d45d195101ab6530ed7abccc9ff6ff1c0ec9225ee617183c957263c9fcd4 -0x85ecd09283580c934e1b5aff73e98f57ae2a7112ff20142629a29f103df733be -0x4cdef9a1547a9c9d388f3d257b016f2a6fff0eb81e6e95cff48492f2a07e8b8d -0x093bf5f2298fc882380446becb4271f5bd145b52fa5b11738da332d68c0e797c -0xa01d90b30e976ec7771fc6ba02504c639951027b3dfa8f8714017c1717e0484e -0xd7c62a757edde073b783347288de3f1cd222c260dbe05f0f575d9598f6e3151f -0xeb03c4746bb73c4e3ac98fafbed3481890720f62bee032614cb31a80739d4e12 -0xc10708b2bcdc67d3b65fef4c9b49a922e6d3ae6f871004326f57f5586f4996e5 -0xa5d573475867f3db48671c3ae413faad9586f0762cd4227d7e4eb928093c56f8 -0xc780445c0634e10e3f0cf7d942274edf0043bd7d1cdd43eaba1f250cb8ae238c -0x86e1f0271e46a9e803388b169f23bd9dfa7223879abd12ca97d21817024fad58 -0x09d79b703bc2f0a77b49b29ff6268d94997c5eac9dc90c067229ddf6fdedc230 -0x8876a9521f84a3ab5924db42556d72c29fc7ca2803d2937fba5f2d3c242cb911 -0x8ea3123f5262ca3f14d775114a1546b638e333d866af00fb9c0bb0ff531e9ca8 -0x5ff72a6a3881cbb0ec7861c66a1c4039b39f5d9f8ad68e39edc2526e07ba87c2 -0xb921df9d552765f002a192a798814c330301e1c05739e211220bd596e78b7498 -0xc143dff740e867e2f5f5abd6109ad378e33bb0e7d84da8f72b8b7e71f6d08ea0 -0xc4cc12d24b7e428c1e97fe405e1258ffae9c74d161cf358986212af8669b196e -0xf30d7af8a4580baaf09f6a8acd9ae6d0eecfdc166e2a36c54fed7a385cfcb586 -0x3ed528dcacfee3bd8c8c252c9e24dc22ff9e99f319b2d81ebf990414520aa07d -0xfaf28eb7a384b8a8c89785e3d4cc5cd3138546a66d07cefd6f8e1fe8125ccff2 -0x40c4cce0ea0107205814da5339f1ab8b5b4d4eb20a6f2a39c9b8c3a0d3a8d459 -0x29525b98a9802f23647a03a573e447449eec33f14e93516b0594fd76ce12e510 -0x1b000e5b5512ee325fd2071ead50950062d30ef4292c41b10d2cd37bc0826784 -0x4240da9c75c5fc716d925c8cecffca88462b1fef56c694b27710bd2294ab5ea7 -0x48737ebd12a5d51c01ee4eed8c208094a9ca095296e08a91be490fec6ec41516 -0xb216836b4568d79dbeeae3ab966072d9853fa95f1dabe7596c3d884b0f26cca0 -0x7c8629e450cc313d4a0a75cd6e8d2e10f872cc617a4fd5c67f5faf3600b1e43a -0x57ef47b193874e403a4cbe359f4c811e2bf6298492af9f03981e3b065a1b8fa2 -0x26aab1d266e19bbcc45a5e2aa5932058f7079ef0386f87438772453aa5bd8577 -0x1d0c0e49bb584cfcc28b7ff00528f6e1a83221878906d56dcdc032a720fc8a13 -0xf5b5cec22259174e3d47b0d83e16840f011ed648c4867b66c49411362744f24a -0x9598e795c5f49cf66e2dc28a5290b6da539a78fbc1c43c6e310ebdb3d9f1d6f8 -0x5a11c8abeb3bbf08e1d5de55c8028e84518a3ded22801a15a68a3353265141a5 -0x410c7ed04340566babf3d26b58951ae8ec5e24e9353bc075dbd0835d14a4fa67 -0x3aef6fda8f1c36ad40a790bee35de6e2487608d830630134c453c1f52d4857ea -0x520f6d1a43d74a10e19d58f651b33a8eeaf6c752e52dfa7e0dd3da33598639b9 -0x37e1d699d0eed93178f449dc7c7e81f674c9631ee804979c62f5b40573f0a6cf -0xdbc4270511a5cfbf1ca087218f35c6f462ed79901c74a8c92c8f8973cfdac22e -0xf8da044b9a125c2a6764326f416832403f992f84f722deb70faefbd4501cca02 -0xa05366de5bb382e03199adcb2ffc59d67b08ef57993cc3e654f5f51263c70cb8 -0x98af5bc63dfd05d5cd690b6df0f3b197a1c38397fb0909333c2c3b6fba7ee6b8 -0xbb2307681b55bf43fc72448965b582ccc21c8c9d5b9059d27d17fe2c7a8307a5 -0x9b7277c577e7e2c11530fc12e4b8d8c272f6593e3f9f69f2639ce7a9710245db -0xdc84ea3fb3723a8feb0b2fbca52fa3cbca00da71246ed87f7be85725287928d2 -0x367ec261e293206a0dee534f1180795a09eacf3aff6a8862ac7a827447cdc581 -0x25055d4334f108c2d47f59cea9e27bfc036b80be59bccd361b554dd3e1d94bda -0x2532878ec9ac0d8c660f36db26f8219303d97583424e7058e417daf7f7e996bb -0x5fa44af56a30da7ca64505a6e5fc3e0586c2d7ff8b5a90837f0118b434963d4d -0x1b52585c06a9a18bdf4df55c415b381a2715408a088327570dc016e1a56ac77a -0xeb2dbf5b011dabeed46c648c3dd4899c0ba7be7d5e94d89c757f1c0d95663e54 -0xdc6a2be10ca73912cff734caab75e1734377517e3444be891bbe2e06217b2ca2 -0xb49ef811945ac4a9bb54c0798a3a287f2e95892200f6d208c3024051348a1712 -0x190bc9ab9e2024871895b15f4185abc6a48aa63157a2bdedc5cc5ddf4ba0aa09 -0xbbf56867458b62e6b4ac9e4d51d9f511dd98729b8f76efae759009509a399da1 -0x9257333e25f41ce047dad84ff6e8bb0c9012834dcdc77ec27f3a44bf466edd63 -0x82a6c51ca5e5517af895029ffee6aef540006b51d19b94710ceaf6f1a1b91b61 -0x9412d817cab13c90a8c7f48f70b73357aaaede117c0273e9d8033fd4fa5f599e -0xd643ea31075a3ffaf9ae4647b3a5a2087635cb5be953774410e3621587b6f568 -0x1981a0c8d84644222c4f212aac9135ce6e7b4288040ba0121f246e220317eacd -0xe277e77d05e6c5e40232953ce6403b65a68dd8b91840a4c6f02ad3a7b987aca6 -0xb3c8b2a41a851f9814c485d25b3f9dd4d14740d5d723c988456cfe51956de500 -0xd171d8663f6750962b2aee10581807292ec7fc93589bcb386c6b4fc4083faffa -0x4c07858111f6d1bb9f989604467d76dc7c634b35a697fbe4554d85ed8064044d -0x083037454f23cde3189bb3b868d6414aeb2db994ce77b996a9771025c424cb59 -0x6dafa2c1bc150d6ba69c9c0136a05f0300403f32309db367aee4ea78f57b15f6 -0x1bdb8d13e6db80e97383397e64c23d6d01925350df0fbc70a990cba1d99496f1 -0x266eaa24d9e0d049d619f227ddc766246f2783d8e192aa379b56b28536c24fbd -0xaa11f7dfb2c1f03062ee1c4d946b4f3d09484fbcd886b21b0fc3aae5a277db2f -0xedf76256c96c1903ce38d7eeb3f0b6242f0b33231e64110e37c4abf9518f760d -0xd8213112fcd11e3b923f840a738a8d0b5720dd814d95c981e1c3d3430cc198df -0x64f2332bcbc0e8fe2bb9b8a82f4028ef78743ecd4b7894ef1bbfb98c4ba3ce4e -0xbe6574cae48bfbf5081195670daa3b119ad9c8848fe73f706b17f1de4079840f -0xee17aba1a3ca5399675105a9bb40539dc666fb08b0626ac96ad54b04ae52ee53 -0xafd33eb7fff4602dc165a9db0d823d293f17f734c98614936f945e4141240b5f -0x34660a7831e2264a43944ddd04eb76140ba892ce8ab6de13f1cb38f3bab2e8f3 -0x0e9f9eaab48ae7d48b439b53fd55ee2868cd5879e10a85e14b13508c968fa366 -0x25d3e6a15da8c56d44825c05baab0e6faef62d6609718cba1d28f2e271557a82 -0xabaaafe12232da583a83d55bfa1f86ab57f697c1d569b9c900f3095bf9f3ba15 -0xb8aa22fc45f2e0e436dc28208949aa8eab2a675a3418def67a899ba2b57799a9 -0x93dbdeb67fc6fbefa652a97da1466b2f2c0ab335adecaa70b9947d6d714b0c99 -0x3afc39738f09aaf7faaca17bd8b9cc0bcee77ed6c07d6da7e7eaabdaabcf4a8b -0x6540ca050e1a93a0f327a76b43a605c13411d5838559a8e93354f70a1b14abb7 -0x9b708b21a9f0a8a21b2e67a4bfd623ac96cbdbd70316128f79655fecd951b139 -0x59d67fa5dc52cc2850048e15232e141ddb9a2368cd9ddac42487f1850445fef9 -0x293da4a1f4a02aa1fc2e7428c4d42273e7c7bb58e60288fb7bc147a2132131db -0xdcf502e55100f9a048d972859677d1e17b3baf0fb9d4ed15e0d16e98e39868e1 -0xf68ed1d124025ee2c9b8c1b02824b734ce032de8c8cacea2d62e7995b525f7ed -0x1e181885c173eca9c7df81eb4aff24b9c17ea9b41330e726cb984038f56e85ab -0xf8e6a557497cc1c835c44554e25f71c0864e5a8104c6f9609b4a1fb53a0fa8fc -0xa1292dbbd500d85105ac8bd2b3c926b9118ab0cfc671e3b4dd67006c3ca1be06 -0x0c8d3dceed1b84c44ca6d6f65660935e13de24b186896217e5093a4f7bc73616 -0x01aa718995fe911bfa42858581b9e2261a1d02a82eabe66f966b433bb8d39535 -0xeda697c152edf1e1aee2a865c124e9119274cf2fed1711847c8da9e439be4d05 -0x316f0dae45dde2ee40e1d55b1408826b3465b8d716e71c034fe57b5ab142483b -0x8f42b41d48e93dff0134d4905537b9510bb5e65e09d3259799c3d1f318951135 -0xb1b283a69e8ee4f147f2bb398368695ccda2ef111762dcc024bb6eeb7284f707 -0xba99975f4498c1c60f509f8d800d5b528b4eecc97adef22cf5dd5eb221904726 -0xb157d08ecfb5752896f88bd5b10169c80ba9f2157604f76df524537f229cdaf7 -0xf610d59c16535dbb8858dba2a7fdf565d6f39d3a4c3f180a3cc7a716280b8ff1 -0x36c509af6e1b48245154b613e18ce5fd44414d00a02152df4abc8847ff949bdb -0x898bcee4e4fcfd1e38fa419c3f4326204d1b945acaa63db97e655e2109dbe188 -0xc64e1abe5bd62077c75f045284847a27d21fcaaaf6af9505bb81647dc46018cb -0x0bbbd7951bd0dc385a809beb5f0a9a69cc125bbb356165810095ed0c0c8fcca1 -0x11ece0b9815232eb6dc0434b89935d38fdfe38d688e7ed6f0a88f34830174816 -0x37af14f1a055471ef50206ff2f37caace18c97dfb91b854f490cdb73b6727bb6 -0xff7c2f1e382e91f133f3e67dfd8c3ead1fa47af3c9d79bfc6dac10ba87e701d7 -0x0d107fbcecbf8ef8cdf484b911e3d95a8ed211122e256bf6b3ceddfc83e5d0a7 -0x985868070dc2438e37d1d0509cb95b7c79925e947cbbca1ea9a22f689b07971e -0x29c0f70d6be75c3ddcaad02146a5e6c72826c4e27fe0a56e7760f18e41391f63 -0xbd86a5fef70fc0dfd95c6806dd23d58f6aadfb90337bfb6210afc2335f4d2913 -0xf97d29981618621290c605b076cd08252e2349d4a0f696c05cc13a76f3dd6148 -0x66b1391e5780ca36ebae4b218df5c04f1bb85fa2a48497bbbb021de9e50b1136 -0x50dbcf31e2d776626c20b7b339ed51a7dddcc804f95594ab16db8234b746e568 -0x99b78af5529073b584cd8b6469cba51be94a5b2f5a8656003bd9a9fd88a583a8 -0xa40148739a99980953e23c9b7a8a285f18b377d8478923ea84d5ea4137e047e1 -0x4b1ef1e40de3656955b36f19b3cf1b23dacf108cfbc8442128bfe3f405217035 -0xb3bd00217843cd78bd85d9b25d0afb194e5c66f0e825907e4a63b0c531069327 -0x7de253ac1ab84dd9e5582de690b2c81fb079f2198bbe10fbeb261f473797d649 -0x4cad2e11c9bd7dff61206ff14a19b14229b5c0e98237ed997062ad0fd17420d0 -0x4c9080d319fe022e0cf5e99a1d1d54722e6ecda67685636d5071d7753dcc35d2 -0xe426ec773ccb962df9092cde514879663fda085494f92ca628dc6c88393453dc -0x82cde2da52e632f55fe54e4d336b740940e6a738a7c4709cd7c1e2aed6ff7e2c -0x4bade0da4e556e72a209a4f0e77f4cc18070ac40e896990d0a4e8a08a7342257 -0x5e0e38610a8ae367e144a2a5940528570a39432e3d62a25557384c042c433ef8 -0x0bf28e1a06f337181c52502da6c57558f53e869c570cd3a9a5cefd751cb2cdf6 -0x06c7a96b914ed86ff6a31d8b1bb54edfdf5f7455625600891e3bbde16bbd645d -0x2e22ed66e3a166904c0e331cbcda01a436de08ad84dee6689143d726912f7885 -0xad065b0a2ab2b11e82bb44efacd39d46a521710bd4dabf035e12a6c80ba2f07d -0x7bc6bfc983109b117194ffddeeb1fb2b32ecb596d47b80deebef61df3312867b -0xd8b6da330cc795a18e6c4af64cce1551fcf125dbb949cf801219468d46fdd3a5 -0x270ac26a51d24041b3d53ab11d7ed1127cf71180e5b3e99848f2e3e71552ee95 -0xe514a8fcc47c44c4a4fd7a5c8dc42869c129f740c1ac4300c85928e024f83cb8 -0xa326428bfea5ab3028bc31e100c8afe1a8f0257701f52a5f14bf6dcf099f11a0 -0x1bc656a57a9d7ac63442e6ddc1ba2c815dfae27125eead4827b6a8ac65bdd5ef -0x2b93d7e636feeea3e10ff60966c92e7555cb4eb40d480340297f141c9bdb8206 -0x78122579b871c85f8ef1545daa51399bb2f2cb1ba8095f29e6800eedf90a99dc -0xc643e995a54be56babdf60382441aa578d818cb79452b09ea12c5cfbfffa5e7a -0xe6b22951be7ea13f9a6228e4642f9099bf7a3ebbfc48530aca7bfb1c2c8a4d7f -0x7875318fe2e7a83c096f7a27f3dc0cea70dd7bad3029a3736990c3587a6541f2 -0xa89215adf868020e2aee1bdbc5876a20c4df50dc788d5990e4c8cf4c9a40ef8e -0xc40388085f5b42732d4fe621718047905dc047fc10dd81212f5ebffe1407da12 -0x42101a3c09058972d1e61cce4d78cabc3ed32149c16f01c8a355f44237291214 -0x77234b007174a63516a3bffb8e296a00a75fb3779c7ecaffcb3a18d393ecf492 -0xf43742d027a580612cb6dc09c34ae6be048b05612987be5be8d5a2f1edbfeb4e -0x6760c74faa5850ffd27e92d5391b2a1a1f4c0c5ae9a59a3501cf2ec602527194 -0xeb29199f462f235bde39638cac8d7c8d3c1d983407245099193b1d3967f721fe -0xaacb8af1b8330f587606f068350732eec4874d1263a66e10a58eb492406f2791 -0xf954a31793ec8540cb4fb3bb7ae652ba1f13f3de95fab866c2b1d60f12e0b7d1 -0x3aab226e548e71ab2eaa692d091d55a9d9ab0b58dfd45bdc2225302ed50941a8 -0x227f3f65788c3780867f9e963d7f94c2e3edc3c3360d4fcf4ffbcd834e5552a5 -0x277d3a11d41e414676b5c9181a213fad9329cf8a9c84b68017668f1af799778f -0xd70a2eafd94ef1e346b97b8221d08786f9e8e519d144177bf4f93234b5fb5e59 -0x41b1b38292c65f39d049a23a887b512417b1f1beff410361d30679d4b9659c38 -0x31aef6e8753afb91e9cd8df20598d9400ac7ef775441ab2c53d2ca44055eb0f8 -0x810de932cf44d08c622f308b525f6fca5c37619e0da0d8d395a16a6e7d18591c -0x9deb43c94236377dda4a9deecb1fdb603dd1f7846fed1699f10523712ced00c5 -0xbd3cf8c607a16162fa23c93d8abe9b9af4134e28f63ab22a435713b573a51e73 -0xbf10f4dfea300b74595c352d57cc8a97f15e095f4e22a817abd41a91040e351b -0x77bc83d21550e8ca2885f51e05862f17ffb1fac58dc5af0a36f3d5c7c56119c6 -0x534939f64bc339318de3d6fb42e6bd39ee3a50c4d58a65f3d4111bc9c211779d -0x57fcf904bc73ad5e6d20a3660518e912acf2e410a460f15776d5f756140679ea -0xcf6712343d69a962161d63126870f6680fbbf333b73555312b28916e08f73340 -0xd844d1bf372f71a04241b3ac5ba801d42c3700b8b58db77ce3d06d0d5ae30083 -0xc5ffce1c390500f866d8a8b9b16a1809824368a6fa56e754382ba482f6ed513b -0xb3cd04f21cee43231d0d0d5931c15a5ad1fd7de0b1be8f33e417578afc039eed -0xc4f466eeaf867875e8bd874a73f0ca40ebdf371809c75082cc719891e065c7a0 -0x7e97acad967eccca8b0569ec45cc38a7a994402f45f86f3102241c53fa6ffbbe -0xe2761e3f24b123e4ea7e3024b822e74cb1a2d46ee8890ab242a13566ebf58e11 -0x3ae8e3d44c1b8f1c56a43904cbac039b4bc1e9c43998233005858fc6181fb84a -0x8d7ffa3a41ac7510816d3202a916a081bf530561f0639745aab7258bfedbf588 -0x472d34bdeeb38698aab74a4e8f8340db0400b8a56eb643e640a12d2af641862b -0x7df4a907dd345f4fdab61ab465fa81ccc3db9c5bd6e71fc132460472fb8758af -0xc99181a3043a5329de956a776ad3a34178dab7ddbc1c8b91bcfaf43b72dc76b3 -0xecafe8430b7f9da6bb68ea39b3ed27f424d4cb78a6cf28013f3dac6ce0b9b0d4 -0xc020cba58640537e735f694393fff96bf33ef0db19d1f6790947470059833ee8 -0xdabcd40254687ae3a33b2af5c5866ad5ec1db980af761c4cbad4cacc39a9293f -0xa794827323a0f238723beea543bd94fee4afc52b511d9ef9339f0a84f71b3427 -0xeb4899c93ddcb79f299be3a987af9f64c15eabd2e55c719f8648cac09cb2caea -0xc208fa89ed29b096aa8f457c3198dfee920befcef8b69e6093377b894ade3c68 -0xd17451a10c4fc981b82d153d4124514a193af0c6b1677157c602fb2b7f382e59 -0x056c29a7f5e7fb25dfc99d0c10517a33a2fb5864fbe57b80771adeea810b9595 -0x29a4ebcc4385ea4a4a76b9346654222d2630f6ff3f2ea58614b8463cbfd9b7b0 -0xad401c6b3f806b87891743e75538a18b5c9b9639f07c10332daee08fcb6b8946 -0x2b6b9000a64cdcfdec5699e93ebab463ece03f63483fc82a8a5ba11b77a192b4 -0x5fddf4ea56673726d5803054c188e094829485d6ad64f8bd3826a3c987030250 -0x23da003e987393509ae2317b206cd06f5ba8fbaf5b395b08402136e9da9fbb02 -0x0ea9f14b21e893b4397906c56d7d22151c8df3187df09a840a5c4d5111ec051c -0x5b5c601d607a1bb53e70113988c33870eeaef8722acbfd82502127976dc035d0 -0x2b258a7eaefb811914266e60bd51f53f4620fccfeafbd84f88ab3f8e4ab037aa -0x4765b7378c6619818a63e5a47fd3ad6de92559a2132ae543a5fb0e943ef5149f -0xe9e6d7c32390c7eeef9d9960efc01fb44bfb2d842ba9b5181d4ebc4647e69127 -0xba4f5c7f996baf4111bf581a44a544562018a2f763319fea73c743fc8b4aef43 -0xcb899658f6500ab77bb18458bab9b7afd95bec5bc922013aedf875ec994227a2 -0x1e7b6149eeea517145ef1e429f901a6aef924182ee60247a579a38ad27c8526c -0xb7c0d08ad2b4607d2187c6af0d68aa8a05fa05cfff83d2deae6ae65c20aa054c -0x2d72b3ef0b64275a77f2bc0f41fa228eaa06490ff85a57307885770511808855 -0x5a279025d8a47a7845c746747efcd2396af93eba481e33178882e7dff326b55a -0xbca7da19ad47c8cc9e3072f3137b5ac3882a1fcf4ea845dddb18e1eab43fa42f -0x0ff36655b3a9a8d9ce67370085917b796b42e307addd0474eebbe13394fb5aeb -0xe7aa0bf7155e24a5ced16374afa151a4c47d302f4498a5d2aa4c47899e535ca8 -0x36dedf8e1a76381b2c913ea93f3d7d02b90ab9d869b095f8358a2b5eb5bd357c -0x15070f7726f28e96b717584e154ff51f9323566406c22d83afba952728ca2e6e -0x1f9b5617ddf047ac5e1e6637c0fb7f2c0ab706c9a1d5ad478764ada54dc79236 -0x89fd058a31019feda6983b4422437c1c84d13e20e35679543fd8a8c9f04c6bec -0x7f05915b7905caabbf061cb22c2c8c295386fa9adbfa5a08f267d7c806ded027 -0x0d28bab8a0bcea04ef2f522e718d6f217f2beb4aa5589a74e8a8cdfa7a0cb19c -0x646d8593c3f2eeb1966ed93732a9774d2e86957baf72dbaab9beb6140f2c38ec -0xf71a2be1da62f315fa40a35b695edc91c345c93df8007957bac698e6e9086caa -0xd3e17de02ecb768ce35c1b5080a7790daaf741248131586673b625c3d4113271 -0xf78f3b6884b52686ba4e09413cbb44679c119b524f5f6a0de0974fcedcc31bc5 -0xcbac07f844f173b3095efb7675d03955ffb921d6e23fd59302c5b4d44e5c8b90 -0xf55cfee0aaf91414d32134af0fedd186c04a5eac370434c29ab654429a3101f1 -0x304d1dbda8ca2fba8b0b3fd91992b8b17beffb11f95fc3aee508093153358571 -0x5dda0140475f8b020f722ba51a7547fec374ea3c9a07abaa9c7002aa7b9d8710 -0x3ddfe068456acd82a0b1518ea168fae8d1a015bd85a3f9e1642f22cd0391bc9b -0x19f5ffdc886e20629ea284a6868e8da0c586dfef1a04f9b4a8d72e6a094809e0 -0x00cf31b0cf41778bef9af57984ec0b2bf2f9896c50cb723d6dcef83257467af2 -0x1e3158e887b1628e52e45935bf13d1aa6e9a003e6f2bce2afe0c738f25c180be -0xbf52bf2707fe39716630410c9a5a44afa263cf074740d49cf732bf9d45211836 -0x9235b60b75c15f9217e932b92a2ca1a5cf84476b9249efa206a0ebe63022c1e2 -0x8af92cf6323ff4a29ad29d249f0b4cca34f8b2bf0b1d42127233d81197b46e49 -0x0490fea73d0ec1ddcbf71177627e2874507e8cf4bac554a387eeb06e5c9acb37 -0x853907bebf30d519f90c8d11e0643de0d093ca057459c1db19d753884968c4e7 -0x58b9c3fa2e3bdccdf73491ec550db4bdc5f638b93970e825363f1beaf33c6752 -0xa42e925d79a4ecbc6f8197524b6edbafc111d8fc937da3209479ff6b2a72f662 -0xe4749e364270edbdf9bde1e599de954c354deb738505a430c80b5da1c089a24a -0x659f77608ad50b214eceb911264fd49884a499ce02134f36a558c1976a6788f5 -0xc5a2731064538459ece803c953435c26efa777c046111a52368c93cbf8bf0fec -0xe63b6782df0ab6225cfe57ab69ff89fdb100348d2aea1dcc95652416f7dc310b -0xfe7a840c7bc531c17a67a97066a09e8f5f7e6a51134b07b2c45d34940e209ed7 -0x1c4269701350da738cccb2c3a730bad5b7b8e236d908cdf65f14221f47ea1457 -0x92bbd0f1af11c745604210551df4a78db8710aec0aca8044224f3879ff30f3fe -0xa719e1ebd597e464b6ad81cf9e9dc0bc49fd8d70bd00005fcbe9a2ec8825ec6a -0x6596ade4a3d37295f0e050145bf26e264a4153d407c845b5dd62b66bb120944f -0x17541b3523725763a5736b1ee06dbe59d7e88836f20800b2c71a904268331006 -0xc0a40d24cd714a4dea388825b193cf3a94c6e82d90e46e44ca989230f135d8e2 -0x852ad0773913bc159672b3d858d8f34c9a5fa8af6ddc4395f9c522b26b7233be -0x5004ca93b2726dc024b3d227d7b729852f6a9b15cfff5c1074dbc9aebe5d896c -0xd1f353e25fd243aa393ed0f890c92002da7595480e2c1377069201a1af40a940 -0x443bac12bdd28abb9fba9ec96afcab1ad27067f423ac5a7b0de5337376d6bff7 -0x8519061d468da8d950f8f7b8c5ec389a332c97a7e0127fb4aaf6407634bacc66 -0x64a80d5181db8d395c24205e518708d88edd0ee9b4077c4cff8a02625160ce78 -0x4365929ff9681832faaa523eea2dce513eaddabd8af081d15c93fbe3b533b4e4 -0xbe4f5e1709bf19613638ecf5edafa2bac1f3e43660df40a56d60e5d063bfc466 -0xbe603bb4b1327034b383b9e3828482cf5348f98856834803dec62af983bd0832 -0x9b8c8fe4e2afb03ae329c831b21d5faf9ab65dbb6bfe4f74af46d27b5ec35f1b -0x19bd42a1dbf537b1770731ede5f0ac1df7ab6048e6e4db85228f2bf499a25a93 -0xfca86722b614a690132e3449666f442dc7ac4d8dc9639ef46cd6be21f510a112 -0x72d9ed7388afc5e97f2389efa7df08a6dc08dd1844851aa93d1c94c7ce36028c -0xa3bc6b964db85867996cac6dc4637b4a7c7e07bbc0c1e519e8c2625495c5baf2 -0x51ac1dbff240aa521af14805a136fc7d56bf9276622fb90ee95988c3e1885009 -0xc9e79ee57c8dff1a368669faff3390c5759c0c335435e190e66cef038088f4c8 -0xd5e1a012ae2ffd975336ca18d45281e918c9804688c17eca142d41cb55a6b98d -0x3c0ebe9f649d4d957b6ed0f77d76ff8de52764afec2d75f65c80bec173c88400 -0x1a262e59e591a01ca554faa34d35680c75596c9080567a1350fbc40542f672e5 -0x649a07a78cb9da4e374666608bf176ccfce3291589e0fc3112cc0cc54b0c0913 -0x3562e5fb3712fedacfcad810fbf1c22fda0008d3e2fc9f2a411138432b52fdc9 -0xe25d9336675c86fb469e056907f1928bff6b0e0c87f9863e9d96a1b92ee6b368 -0x7379f0ce712be2a11cfa9951319e5bea600d8e8faf4aa6cdb55c5330d7e7fd55 -0x685dee8adabbde96476910f77089bf4355c299f75a73154a87277c21776dd412 -0xbf1c77d51752408d1628c02a15319cd37e4efd40f3ce0f3642ab609190ddbc79 -0x18f5d936b310a708c6d7f30719a3ef4ca6e49058aec2b6cd1cb13ecdf818d556 -0x18b5b505ec0cc42fdc7d6ad54a7f3f88360c820e8812e93f809b3b79488b29e8 -0x05a4a59ae41c0172da978d1c42e7696f3dd5addafcc16242f729278bbf421191 -0x9fee2fc262b0874af207f812cd54ae7bba0cfc8b22dd1bbdb3e7c00cee9cc735 -0xfbdf40f37d804071bd791df05a77beabb8e3bd89588916e41609c171db39cd4b -0x77ebd41329314064d29351a91b75ff9a664a7d676812190dea9b71e5145e7c51 -0x53eadfa328ee085245566601dba80621eb74bd21b7f95511f704dcb4faa85f19 -0x60389df96b14a43769b50620546a810afae078f45425c0ae2ea36df79915f8ec -0x59b829001337680054ca28337c41fa4d83a7b1f16d1d8c54a4b8fb23529f6f71 -0x2c192b30a1199153d1c25beb1cc2acb504f719d74ca2bf6146350c9a5aefd2cd -0xb3a2f805252fea6aaa6238d87337729635810a79779528396d486b745278a668 -0xf76156a7212068a6080c232ac396afe7335532cadadd233bec8ddc215b029dcc -0xc5813851da68e015cf03ac7f233af4a75e79a7124bc2995f5d5784caf80e308c -0x7407c82eb16e3424bc8154c321e1c3e5f8d1833f22c5958f8a9ca739e7b633db -0x496679b44522283fd965914475647eaa84603a335b02437de098a838d83f12ae -0xe3a88f2b1eccd2af5ebf9f7246970fd983e45392dbdc71606cc28fa32bc9a0d8 -0xa965a942b1c7ea81fce44689c75d02f5be2a63f47584a289d3a58b06fcf1abd7 -0x12bec867d024dc4fbaa72b5f2b2ba027fa4202dd96261aa7e6b1c833e56eac81 -0xad592ac1b84ae84a74d4fc6a5e2f5eb11d6a3fbba032a88fb90b59a57ab03717 -0x2f7cfa02c9db19324e8730fac66792561f46bae76cc5c2e9d03b3fef32c4e1ee -0xbd829104fa0160aaf586e71b0c8402f6b884ae15ccc131b17a38810482570015 -0x8fb37ab9bd765a4af722f1bb902d2bd17f177fe259e76092124dea74c525e371 -0x6857c5f2fa4d6bfefcc22cf16bcb25819db74deb4176d3b17acfb905bf83e373 -0xf127f6c92db189ca5ba71a728737876fd973aeb436562df2d0feed5002573d55 -0x481dae34a4bf4e44af8f3a1cbed851ac20beca5fc81a8fb755abebc64d7f6d8a -0xd8b7e5362475934b873a027f44139e6a619a86b98c06df8fa5ae1b370e855b9f -0x1aee6fb9f0b8566b080551abb02773962641370ca15ee87ed2d0624f8248a370 -0xb4a3c9bbebd5165ce5ddbbfc4676420b60e887a0a95aab797b90122f977c7022 -0x710fd1145f53c8ca3f700596203d6e4de9f413f881581fd22c7d6fc8937295b0 -0x0bbaae7cef3fac233fa3010c859e25f712b0a2a751f418dd7dfd3f39eb165bd3 -0xa51cb4ecd8558016ff04f53ba14dd630bbdff388c4d3dd309046e4bb180aeb7d -0x51e26a2ec79dd10e06d4945c8657760d29fd3427e3d711c3d1ba2957fa9b1bed -0x32704ee33a947f64ee2300c30135cb0a4ecb0811f2d9fe609a48419f9a71eddb -0x8cf21e172854ead3d769ba53b4bbc8da01a6e97fb651f5a7a268490e0ec02751 -0x76170dfacfd2377d42dc003f9742b1cacf9a1193da6f576ed375df0d4512ee68 -0x674a9e78e28ea05432f056180b341eea0982aee978cd6229caba064b23de7576 -0xba0f9b824d23600d1645afd6aac489eb64579b3b91d1d5cac3ecff235f2f6208 -0x36bc682d86de6612ad8587080f1ac0df62b65975372088bbfe44fb0c9d13cacc -0x529b531af423f5ff830558658d519ab5886178748083e8206d83052a447c34ed -0xc35170d9d354a5354e42b6015dbfdb0bf389606076b3ff00554b6da6b984e140 -0xb720059cb771bdf784cfc5c780db7be17c314d79536a00ecbc7608d3ee027c60 -0xd4d07fc5b80bc3551382bf5c214907a061041256e7f224b3bb2373a5f91f51ac -0xab5cad31e133e0d74344852484325be8c41cd4480fec68327304df25c8061035 -0x1dbbeafb1f1182aeb44be9bacba2bb90ff29d7883eb10a011c336cb619a039a6 -0x8228350de6f0c76074e81e884b36a1cd25e1f4354cc4ffc498280b92f1a1065f -0xff144e87c9bb69b671cb1a1d1759122cb27168ee0d16fa638bd09f27e81e31a7 -0xffd1310c0e610741740ecebe0bdb683169c7005f96f1d20aeefff5d6d91aa2e9 -0xc31db28c0ca82338f1613a0af09de0c81dfc8529b5d5ba3514cdc89ae3321400 -0x6d35fe59f6353aa6ee97e48ed1972b20f7b573c55faffa143e5e5f70a83ae9b0 -0xcad4175a74370c1f4577b97537dd72380ceac5e3a490b38fd78b9cd01ac479ab -0x909224b527da30af1fcfecd06a0604ed368734eeee1e7deb4d7543e06a83ed48 -0xd4e2efade9b9896fd78d0354ecbb0470fecc0548778a4b2f4e23085a62146c6f -0xb692ba7bb580e501235d2fbe818afbf769d840e707339798287fee8b86b19bb1 -0x5d978dfaca55663e0985029bc365f1c1c9275e5cadf0766c329b57d2b15ea02b -0xbadf2361a569c498698195d570204fa0539627acde927022d689d61dfc6a3c11 -0x4514d1722bfb8e6e1f4bfc2af3fd013fbfebfcb7f5855d7bb94f6344832280f7 -0xfe68bd3036898f0a5b8866aa5e0cd71563a4dff27dffbf49f0cd8eeabbf62729 -0xddb83540f961f6bfe5905220a13d7759d909a3153137aac14b6f352131d4d3b9 -0xd491b291b26ca2a2c49040fa13bc33adcda2abc5505be1494a36eb7d8507fd02 -0x3cb94fe0ccf21b8d892ad8be485ae492c466dfc31fb00f5735c823f5d485205c -0xd5358dbf29c294e9f6504f73984fd58be576eb041b7653a42a0693e488520cdd -0x6295ea72f2f617119935256a17354b875a8874c7ccbf8c2fd3863abf002fea00 -0x9b071a1bb9f37b4a870d41bdf77903b66c62df52ba55a7d4029f67cee034ec75 -0xe9f5a1395f3182f574865e32b2afdddc17b7f9da57720e8e5b904833db0b49bd -0xa631dc6570959b8ccdd37683fd2ddba6e0e693132f49f90ce9c3b1bf4d7184b8 -0xdac81d587aeff40a3f70c320eed8e64f5fd03636bf43bed7143edbe374d3aae7 -0x2ec2b0ef14ed103ffce27aaa14b1dcfb0e201154c6c72e41854fc16e16aa32ec -0x4715d436ecc895254f6f318a21cf08aed77be40174aa0264292b4c1e74aa8e33 -0x21aa18f370287b35673e2afbdae6db51951767b0606423cf5e5edde4c14b0595 -0x496215351c1d906ceab263d6e29540828836a9dac0489e409ea7a6e340565328 -0xfb10041bf7082f9e83066da47ad1894f94d3aedb292d5efdd7c73a1c526abab6 -0x49dd05ea80e9769b8a2f09d0cd99e9b16eebc612493c4485945d7c26694c95dc -0x84884c35c5746eec19835d8cb0c29de1020be6626dc27642ecdd6c8ca601cc7e -0xd86c38bdfcf3e7b9be45ab3dd4442002cde0aaeef3751c8fbcd2440b1aa7fe22 -0x6c0f79e6276dc896326714f614c02133f72a7a9aecf70cafea37c768d2fd3b5b -0xd6663705d15df8f0e09668361f17c581b23af8e4b36bd29b8e38caf10a1c8905 -0xdc6e04996300cf13061d6fbd67ca6af8c1dd2a0c7e764b5770451845d3e74008 -0x6deec41ec74dcdcdef93bf6481661f6c3e717c2c206550d142eebbc35ab5d93d -0x16ac5b795ed92bd92c51028875f74a5aeb16d29c8bcd779bc07de3304d973009 -0x752b3ceda8e13c87eb434e690a36655a84db92ac9197ea7f8d4abbf7a6b29037 -0xb8fda6340c71f78cd6f75f0ad1bd4d370f478ade6ae5e4179dee5996b33dffd7 -0xa6ccc7ad78ee96e8768d4fe03ca9899f9028dd52d3dd213b21e9de16a3303fc8 -0x2f48b90ed84a2048a65c1f416325f8b47b8ab9817b90a117775d904c77ee592e -0x0e17bbdeb02509c2046527b60e39001a4287dd89e66a2802b3bb211269a6671e -0x42d3464ea840d66da5dac2055bc778d601a5eff700156477948272f39976f298 -0xed56a09b620855d963a6a46d55e2cc773bcfc8bb932a87cc526a805f7e01fb11 -0xb1016ec2cfee3a379a5a3aa715c7f62a865f41e87a5318e5a1d1ee05129e4b18 -0x0049ede177e58902484c1099c1568e91e1672e125ba2b510a1ba92519a5faaf6 -0xb2a843abfbc2e22994955b9efc74aa3c0a7fd6b4f52e991aada0f1efd7b048a9 -0x53d789fce2fa3f092025803077bc323577d40c586dedaed90fa92e31054d165d -0x43fbf8e611255c91087e2071cb75eb08a08a8ac0a5c782b2fc7e3a0690951942 -0xb29b636cfe3db4000d181d0d41639b75f71959e7942d4670f05cddd5e3fc41e3 -0x7b3517c8eb2e7c4dcac23539cceb57ba9fc05a5079f61ac2f2025153546ec752 -0xa0a9777ce453cc48a5d5b299a4145e4971916290aac0c6e0d598cc6d4800a1c4 -0xc288cea2b603855792aeff38d9b7074718e422a6283839213cd439e566faeae1 -0xa65be10db850e1d8bd5038dde33065ef479a39a2b30291cc7c240993daef2802 -0xa91e557fcfd5be553edbfa3456a7e1a63286e1da6eec5989a7543682761fc1a2 -0xd9c561e35e61e90a92b7d6e3b96b735edd5b69b68ed9301bba18132ed2ee5155 -0xd8fd8d63da1e16c85058edd49af52a78991ba7bb5aae9e38813a04d73147fefb -0x2c06e3cb619b8c03e4499c8851fa558cea25d79800ee7c47b50b7c42df4259ad -0xeb623ec950510e5f19372d8864f7b709520ef67a2cd492fc53f3ec07fd409d24 -0x5b01dcd216b6d2e864e97c672f97b006ad9b7ec3e06a3645676641d915622fcf -0x62657e0f50eb2f49ac0f97248833f53ad91f3c58594c745af4013145e67e9dfd -0xd1d937b6ada3e4bad775a9b69df68c34a7a32f20ff374c4881d9c9e6641ae3da -0x8abbe1b9003ecdf0e715f055500ce47a416762f3c22197327008cce277e76aad -0x118f251f2860f1cf5a477ba144436982feb91e3d51cbca9ef77e3f8ad47828e8 -0x93b7f827c6dbc2b6178a75f90b7bca2438c3ba869d25fdc33ae55c77fdb1b8db -0x76fe37d018351be491e2fc9a46f3c4804db333db47d06ee4f90ac03c17ed15af -0x82c2adebd13d22a78023ce38ba186ddba36e091bfa8dfa4baf325069332e75cb -0x3bbe8195caabd3c5d8c72dca588f2222c5c44378269fa8ead49dc62fe682c892 -0x8bb0cafdfb157f4b3b20c7a768935d76b82a880d6bd7de2f64926b3cddc2f893 -0xd18f7c4299b2c253b4770a5ce9ce6696dfb22b99c5b8783a409a1f2e3cd43f7c -0x90dbd68a49117661f520da017225d9d5ad5ad25f5a93b161f97a8bf586067114 -0x359b055f7c6dd99074bbcc7382a727746f85fddd6cb7faa92ccb1531a05c22ee -0x2f956fc36f685d4061018bfbf8aaad27dc4813e5d3a76a0c3cd9c61896d18a65 -0xd21dfb0d647f95a8b415174e2cece5a2572e5c3c3f2d0dee5503c844e37c8c37 -0x9f973981025b6e1711932ee0f7d5a9fca6bd20238d280b1ec3b447419bfb377d -0xbcb0e4488ecd94a97703ff727758aa3eefbad1c71836ce57ba980329bdb1eff4 -0xb0bb55fb522ba92cffac78d6db523b1f285e3b13a750e79f86f8ace231b825f3 -0x37b3edd734d2afb4cb8385c77653f791d92bb4a81bef643a8f6f737f0c89b830 -0x08e98d6b002d683d920eef1720ca4c6c05c384915a7c1c80737addbf4fe9e514 -0x41c914199d2f6b5928a1f42d719cb9de7801be415a7aa40465da39a9e6841d0a -0xc021162d141fad7b9cc8daca4e78e3d0cf9b7f34a23e7f639068aa0bdecd9cac -0x48638f95af964cb6e868612c2156b9dc1e332a2664b3b761f6e580dedc109d34 -0x88caf5449af048a7b12da0534ae3fdf5b4c88172b5b7a0930419420c1e406bbd -0x1098b0d7db4c0461b52c3029742545837f7451e77fb2dc1ed73286bed4b36c53 -0xf8c0765cafec63664639c3910030ae0b4a0b27ea1cca2b31fd05cb50737bbb44 -0x5b96254ed065fc33b15dceed54d0ac501318eb9d83267e2fcad748717ecebe6d -0x3232e728697e285adeeb9d6176db27f49fdb73ac09c0ec6623c7c61f444625ba -0xf75ee40aaca916890bfe5fcd9f4f160952ddfeced44cbe1177d4ae0b9ae569a6 -0xa826ff862ef05d063eeb76994627818cbd270ec446d4be869619aa625dfa2293 -0x6e018c356985400afc5ab3f2686ba8d7315d94dc4059cb1af32e3a19cd12bbe4 -0x6d4b538d5d08d271822a8700953db83f153fc9c70e087b37c39976820a0af2fb -0x4a8ee46a4a460415764d6b24a50ba22521fde6e319260dfa3955fd5bf35d64e7 -0xc72dc3cfa2265726217b959a51ebabb5203a1176fbf2120098b5cc9a142f89f7 -0x809f4a06f4a5a531dabb6fadadd3838df8f45bcee631721754de3c47836a3eb9 -0x79723750153c2f07cb01a495187aaf054858b96f1ee33468394e6891b8583ee3 -0x38ab8e74940e2d615a1911b3caa55eb7fa5229e5f9c90c507c3569569676ba16 -0xf4cbe549cbc2b03af5bd3e72a45f2a54378b739dd025d9096197769703d65a26 -0x6b18063d274970a2d18e387acbef18094d913edf4f3fa67b7621c8c4c1d19344 -0x6054aabac59f26f94aa810df8518459f2a378ad325170afd89a745f7c55fcf8a -0x69388decdfca052cb4494d8b33b8454c379d59db64f76077ef329375a7c9ad36 -0xee48137cc59dce50f37fdc180b6735061723020ec9a318006269856bb9b1fb14 -0xee35af72d8b217ce4e4274abcbdef2426b8752916c02cbd9b663b79fa3da641f -0xd0fed7c917952fd64613bc01080c0e2d35a7e4a67eca7ef7fbf87dde6646499e -0xc707e440ab280dd4c910aa906bb3f305981bbdb9fedf7268a252f292001e6157 -0x5cfbe3741afa9da8455a0f69e058ce20d70dd23c3adbb87dc5184da07e175b04 -0xf0deec98315288aab34cbf1147db2e515ab66d630a1a03257c5efde673de4b36 -0x914326a02b3737403675072b9ab8484c34eb95bb516970950de3606ed27bb9e7 -0x59c5d1f414b18c4672fc6bfb63b2de28911df0899f28a753c2b65c0810a1321a -0x6251ba02f6488bbec26fee61abd00840d82f3cc6ec123854d14138554ce052a2 -0xbad8bab9cbf330e18b212f3715ec9a1214204ec281c48929700dd8fc86b6622b -0x92cc62a20c328a99dfdf7df1c72fc27bffefbb067980988eabf210c0c74f5f0a -0x5d6b6bd4b83749743cf466d1a98307e30fa3a3615e157ef238f053acc3cc7bef -0xf18a70a958792bc4bc848403a709efd143fcb6a7eae061a16eac18ff0d1c645b -0x42f2050b571e25b47da8127f1d511883ad9ca6adb6a73c52027ba9e353f01ccc -0x25778f47de3eb1da68207c64d4ae8fabd881fee699ac87f6c6c4b6aa3af11413 -0x5643c3643aeb2a5ceb27888e9523cb95d765b0f518e19a92bfbfae91b53a5193 -0xb98970726cb16eaf43aafac1075a9ac6a917807866219919ab183f3649abaec2 -0xddea3136b90689a85567be286bd183676084179b305ec4745d3dc11451902c2f -0xf5285622b7727277a9d4add5602bc2046185ba7b855930fa92ef7bb90b49015b -0xae1c12497556f256158956c848370e6c6b52f771c79c9d848fab769b7b56270a -0x79bf982a7564258a7748fe59c099665a82b6ec15e2865e16324421fbc9322895 -0x6b7f0408247fb2c00c462e6aa69841bb2ca33233cc14afa222f89ce7f6c7fcfe -0xc8cea59ae1d33c70701e9ab19812e806f1ee727ce8686b1601ffbce5b990efdb -0x3f37397e5f8c8d2a5ad60485ba85a5a248d64a66599c9d74f72b40b19398cc0f -0x4fa34924a97dded31a4649be3ba72e0901fbc3a55d4d884a6deb1e979d3715f2 -0x84d3221646742d329a61e840e792c04943d77b73e582c738c5fa09db97acad78 -0xa33af48d20269ab186beaea0faccd5aa5d34b03d87cad8f619b1f2e9ac859517 -0x3f7aa47ffa0e6ae77db6bbc67f21831eb640698be45d47e683f11f42b526fb84 -0x463d8991bf4b5a598f138a6b2f6e57824795d4fac81906eb88307b1a373d0e22 -0x7b348d5c2e41cda6c99b74096d3ef747279227529e3979838ea382fab28c5f81 -0x839bd1db751d3ab1fe1df77aff62aa4ed4eab1b84bd26cb79ee7840e1745cf53 -0xe8031878bfcb16e74c797a704d4953a264b5a64e19c56d63589b483343f0c557 -0x31e2701d4dd831d6e9140792bd51ec153540300e74eb2ff9dad628a4899d9da0 -0x54553efe75da06ea818494eba9d673ab5d255da3849ec212c14ea07c661aa078 -0xb443d5a0ff4bd511c1a9370b981e3b00e052541a5e74d2fadc0e40e125650bc3 -0xd56d8b464b462689466468c95eee32f140d2556ded66de7aa39c9c37999f380f -0xe5f5132ce762f410cd422338c80b4c9c4d8830b83dfb5b5d2707e50bd04c4004 -0x14611b4a83dbc31be52d1f59b515c88e73423d40b25e0f4751eb1538a721cd56 -0xbba697bf0bb664d16f0eed21c6a13f3373bbb4141f5fbe96699ef68a70da2b76 -0xfb2369cf765c468e97898f5f853828a301de6a04908e929283e4147df1fc2f79 -0xa6413e693c5aebb39a7ced6be264433e7ad96512c019d94a3c9d595cd7f13814 -0x484fa915ea9ca73927b232bb2515487b2ab7f1e8116bb4e7275ffb500cd7173f -0x3920e77e1a52f34484bf3dd3544e4caf258f62fd894c072894aaa6b443e67e28 -0x109c3b44e57147e62ab913d1194a324ec0273e20270eea7a282fd0453690317a -0x34cb3a6caac877f3372ae498c12237dea411712e0672254b467ce952ed85f7a7 -0x89583a029a4c8d4efd18d44d6a51fc20667433491628142a97ce0ee6a9b7a8b8 -0x140ab3b0ecdfcbaac07d286bc7348672868ca0074c04ef631eb0b1c902b89a0e -0x73ab13f51b57508317b6f998ea4e86f53f00a0fcbae6dcfb89ac565983764703 -0x40b27dc93a636c989f4594183158c421576bfe7196570150d48eddf3a2ce4c1b -0x58645497064d3874c4c877931abcb5dc2c5203546ac8b4dab3ee617e769412a6 -0xf72671e1e9c236c3fb56f73bde8541273290dc2a32d180191359af426ed3cf59 -0xb7714d877a1e82d596301c5595141ccc2f7fd4c908866264a8a0eaba6fc0bd80 -0x18a61172b9ac422fb85d6968fd48662e6d7b0c91302721f674a38f683ea112c4 -0x9cf9ceceb04b933082a961562a8e73e189a48a913f3b3e6b9d1ec300969c2083 -0xde948d9c70955dc1dc6109208129eb34b86b57203c9dbfd03d1a0ffc0195c0b0 -0x7918f0aa0cd77c964a5726be515f3b64d184af086e61986d461d86587b610717 -0x4e181adcb098c505e7b2ae147992706fdaa40a1249c2021136a32624b9b38846 -0x2baf97930003361c610fab5ddddb217fec9e755e2f63dbae604ac73bb0800c74 -0xe8f4d3cfc9ebadc52c19800e75ebeb77df9e15f6842e778492034411ab8e29ac -0x1a74e062694fa5bc8b7103da18e5ca4b515fe74640f2fe56584cbd7b9bd5446d -0x9699d8d12df5e40ebe7870a12edd6739ed73183c8e4fb92578326250d1c464a9 -0x8c70e482d1ca44446c18485f8923c340ba664b3aa9bba28dc4b8eb2f77ac3029 -0x71da049795093dd07f9575a0cfcb318f7314c0ff4313fef9c3d90852079b144a -0x139af278d6cfdbd63d85515ffc18d5f4525777d295f41b90181d519f71f991ed -0xf1a54e0dd35e121f49f07425ab65aee587b63c520f1f32eab040ef5b8eec3d58 -0xb2ae36a66064e0a988988fb46c30b443d0203c578534c65789c15fedd438d008 -0x86d437a64c5991082e4d309c40d87bcd8ce8aec1a6997db23368124dbbace419 -0xb94cbae55f8e7ec5dcfeb94721c78257ff995e2d31a71dfb42c61cc1ba9818fe -0x0189f86c6534e0bbf2df41007067397e1431a45f1b40ae5fe74cb4615cc4f267 -0xf8a3ec5b1292b76da9edb9e288459558451943dc8fb3f19813a0ed3db9c04248 -0xdbf48f26828e765a5659414ea701a68b5636a204a69cc6d435380e9bcd44a528 -0x2766c3b3ac56fade97fb37e79b20c296d09e34b22dbc3144aad6e36e3e1d3363 -0xcaf3ae2c012c10e64194242fdc69e6cad4ad2766a6081c23308a7988def6b1f8 -0x9eed8d7f2864536747ac7385faf22032bdd96d12550d13bd88e1d4395c348818 -0x21a729dfb02c1d09ab64f6019a94c5938a9dd7fd943e188025bfa84ed866a47e -0x0885b3f1cafe343ea99d2fa20301a2ee0b5269394386732346cb355629b800ce -0xb0f49c7b86fdfeeaca68d250d1b1117683cff94b8b305c82b5a0393421fbd68f -0xc0d3bce55a627ecbb34defbfa9d70a96c3e4f084e45337441db84891adaa2c29 -0x362d29accce0e4d9f6a46fbc4563f52436c41ac8486821c9cda5209218c1a3b3 -0xb7f631c3bbe76a73a020fdc111e81657cfd0c76069fa8b1381898c463e10438c -0x1c890dd9c37be22eb4974edccf0007f4294902d8ddac796abd3e7a810c1d17db -0x39d9317d6bb3bad154430db045eb678189695ec755faa99e583769fda31a07a9 -0x4930a7bf3d131bb767c3a50bd9dc96af489814230936f55b5b2e98634f423e60 -0x2f4fc8d07ffcc7da4286a661c0e7869623cf80d4921989326abcff87c38b853c -0x2ea98007dd707cc3d095ff91df4652b85fb456ca4b64e3b4c8fbd6b7d870de5a -0x6fd4a96135bab0725cd8b725b535a4a268bae44f7e434046e4af3090d429ecdd -0xcb895701c3302f91a60a3825a381eee428636c9d028ca332e78d992d500c4390 -0x97e27225e8da72928cb55f16d9d501b7b46b3b22694b14f97fe38a37c415a6e1 -0xde838700af8dce2fe4d07fb3f41801c301cec7cc099881dbdc97360736edcff9 -0x08ea2376cd0c497180a65c457075c1374ef862fcd3debe8137a98ef55e982d8b -0x20d819b69f1076e66f06cdb5ee72160741bccf1a55ab990cab13e7b063b10707 -0x5223fe6846fb861cbae153d32a34561a00880d1fb819e323c924dd2f9b66a1e1 -0xb77a94db92c3c72496310da2435c3424035c877a145ec5bc3c94f8936dcd248d -0x1690e7396bd51bec71fd5886263a5986e2fbfa0d03bb3c748f4852abd58be772 -0xfbb2dc51f337dbf03f63699933a29b226bf2e6cc8de876fe963c234d8344f79d -0x250a1b4f53f30630d72424a43a9fa290dcdffe57c870f24471ac92a9a3980dab -0x377f28c8e5d65daa7ae6775f1f1e52ec25fdcdd3ae853d29f8010c7ad67d159d -0x08056810d3c34bca331ae24ef02c4a300eba000acf864953772b6a7456776045 -0xab2ec2d34e339e14697d66844ed6e2911b2eb0fb9df4b8e69f4f498ebe92b04c -0x2305c7562eb88feb6f988dd286a54344ee97f86cccc1d60f0c60526289f8476e -0x3ce002c158034db654a5446dc4e219feaf68f59cb51a40540f999a6cfb01a838 -0xda77470ef3d9b8785556dbbaeaea76eee9f6a715fb2cb400bf46297a0a004bf2 -0xecb1e1e3cf23789d12d1b845430c16ceef0d5a4c2db6ffc0b0b561ec1349a8d7 -0xddd66619d5ebf255f5d49d3127a4f9b86f1ed38673623256e7e7af1183e633e3 -0xac782a249298b4fbe58b9d0824f9dcb4824acf05dfde54ad9ec1704ec92ff2f1 -0xd37ca5bc30216d67a26c449f99337b5ee520d6090b60fcfadba4eca741718918 -0x60a37dfeca7a40625a25e22d8c571c57fcc9c3f8caf81e00ba02959ae6674c60 -0x2ff3111cd00229458bdd4559f5ad9d3010f69bb9ed63621641c85cf9ae136c9b -0xdce1107a464e0cfdae24f9f5f6fded73325bbdfbc12e6d9ad45cb800c6d60fef -0x22ae2ee87fc9f5d0dcd86d2f6d9982e0ad1d3896789446dfe7e7dda48cbb7687 -0x1651d47325d9f4e3f29edcc0e5eebd6537caaf582e388723d899b0c1c38c1a60 -0x4ad649ccac15151c0d38163f585b47a011cff2fca836879eb3c9e69f44e93560 -0x126db78d34f43d3100c510f231339cc78ce1230e1c4cc2b98b2831767b7e6062 -0x129999023be3213608838ab309607477089c105ec95f70e35405019800b30d0b -0x27dfd9808e530d7c356819329766599fd33bc6c8149647cd23b5b761b6d8b810 -0x6a50856e27c6ae142926b072ef204188ceb984203ba78346f981c538a3bf5a5b -0x41562831eae59abd54625e02c71cbfa246c847b6269145e7aa0c8b0aad2b44bb -0x537a2a63dcefcbcdca185bab1d22c28467ad221b153002f29393f83fd6517e37 -0x54d8c841be787b54c35089c09705e0c210e6bd0dbfb051674d1eea93c50901d1 -0xe6d6abdee4bbe77a31132bd75018dcce508a9ab170d67bd135956f8e5e561df9 -0xc6dbd43f6638c791c78519942ac3b236f7b944f18142e01b425e56d836c5b433 -0x64cff059bf29f536bef2d3ac85eb2a48411e30db533a59664076db653148f9cf -0x40826c986a396be55ea586d42614732772ac62ce50c2e58cf0ec50618a18d2e8 -0x31a5cf79b7be39392496afb1371da572a7e60d1e8b2a7b569391ca062eef7317 -0x6902505351919f2f8f56fd72a39c214fb622f057e9dcbec21e712a67a6e1dcd9 -0x1bfcd181bbfb5f2d63f581665c06f4f4b99a5dda7c47f3a6ff714ed2f88fcd75 -0x8e86e48375c1a1a83d783312afb2c1644c42967e1c69e3bd928053ce1dd0b33b -0x8307dacc890707b0003e31ea96b8b8be003907a7f82981a2d5799bd559f101f4 -0xff9d2cd2f3f469e0c9e9b964b53aefd4d2180065bec01b4fc36a1ab182767288 -0xe7796b9865668cbfbf8c2fb03f411a4997229d6bf5e9cf45d1e01f250faddd85 -0x86188985df2c8ea726305a94570fc5063e8e128700c397e8c9b017d908553a01 -0x7b6c5733e776b04e561c59023f65422e40be3b30fe89924398d5b50b938f5fdf -0xcbd3d9264f3805ea5e5f4d46a591577e5cac2ea470a6bc9d509f50e1fac212de -0x3c87a5faa6f0e1e25d59e364098793e501ae3b15cfed1d49870903f4b8ad48f6 -0xe2d17c13c730675e4c28cbb2b1677a765aca450d02afe81da2c6df08d3ad54ac -0xbcae3e3254c3b3e384ff023b312db62a99b706f033965549cffcd51b2cf3c9ad -0x5f2d9341fbb29c27a2987a6117e1ad12b7166f295d79180061746bac15ac766c -0x279e6364ae690923c1eb7933c52b198dff61d146f306e7380fea44aa1b574313 -0xa7b33420c93b8807e04cc3b4d92744fa9e44b62f904a5279ca33e9f3f7be71a8 -0x0d99ecf38d68e6e97f60fb05d2cf7c0bd014615cb63e729f5b6375a2f9d6667b -0x277d4f39bf53faece962db0cdd77a7e680369146c42970b7e71ee57a17c3e9db -0xa62d8fe7bc96c02723644b3a3d2d012d6a8e48701a0bae2dbae564b9ca569438 -0x2026d68bcd27986677f5b5c098d8da8ac1c2229aa38f60d7b992492b0916f919 -0xcabba1b4accc8ac216ec01af0cd30e91c114e3fbae7c40095a216a64008381d3 -0x565ffc2b289ae14af21e2a7e0368b4f95f2245d7ee789c74fbbc959179d2fe24 -0x7875e6b5aab475fdb231052715ca0c7474c657c24a9322ca90016bbfa7a521f4 -0x0819a07ec39f72f5e4e796cf6be2d23eac6a04632f33d0cf6e852f20022fd76d -0xff93c3469759346debdb0293fd6d01348041b7e1352c615502d49e01c52b091b -0x93bdace871b05d4f6f433b594921b92bd60f3730439697f4b3001812b48aad0f -0x5f86b5defc4a9da3660f154bcde4367bc0d0693a8ec6ff8aea23dc50747f7357 -0xc8baaf2023173a6ebae87d19343e02ef53336d43ce634fcd329e32decd6e1923 -0x6c48ddf5a787902a812b523b3e8b68305f514caba4a8a4dbe7a9c21146724995 -0x3c94f983698b4f32e7716e2ecc9342aa76994752d6e836b246f5fc68a0c681fb -0x30c777850a794f6615b0bea5731ee07e303f8104c50a769a1785e9f7d0c583fb -0x5803d320392717e2d807035da476c96dcc3440502037616e2a825b8b438dbeee -0x9fe34ac54b97e47c752b354b1ea495dc4c93014497f50144517078f917cd512e -0xaf53e0ce436349de57c977342d31b558c41d1c52efc2540e23c201b9fc75aa5e -0x5953643c326641e72986214f63441505b0ad9b1caaa97ef865e0365955a1d520 -0xd6558309861b38be91769a1c9f181d249cf77ce7274010e98ee2e53c31822ee1 -0xb1a5995754095fda28c90628c4fed393bacc1f3fd5c4dfec39d2bc3e5a033ed2 -0xd7a585393b804bec1eda47e39b233b534a16e973bc1e851767caa81b2a674045 -0xa69ee63c47f95f562269f4b0352cbeaa97d0820752ed61eca8b473cf31b5e24a -0x92380d5d637b47a9a52da4dba0f5d7c6b866d03d3d3cebb2abaaef163e645b74 -0x8acd4f8eb2fec5ce15504768b681bed08583f2095bd4115d0e37c1847a49a843 -0xbfef1206e56305d5e7a3dca66ee1cb490baf48d1366b508e1f73c8d3b1a03e6d -0x5b158163e32de6915cc5eced7231a1430d1fc578eb9ccea74b041545334324d9 -0x71621c5259ae2647f5085717e7685dc7ca2dc43becccca73cf7fa70af0afe035 -0x1b230077a8f553dd5fe1b220ebd16836cc45895c878e2bd08e2c8ed099b3572f -0xadbdbce5580c72c6865ec9512cfff95d25c5392bb9c3a188a83067dd23d8416b -0x293fb663cec126f6597b92345b668ba147b0d292945cae8579894bc8c91a3b9c -0x4f2c718cbd11da687863e24748665e2452fe21ee63dcb8e00a131e9255890795 -0x4f765e6301d5bde819baa3140179bd7c81c4ae2079914fec97dd8301dd12cb4c -0x0fb07a70a07b1710fcbfa3d14f2187221149745e3e23952504ed7910139267f6 -0xa274ae77f454366326762475d8282370acea9f8c91c5a395b8d2262ae72c4c2a -0x4dbc39d9af760367847b319cfaa419b4c628fa52c316bdf7cb19d807781a0492 -0x96f03cb140de318b2a1ee64ccb3de63feb833daadf45e9cccc2b3253e265cb07 -0x3b0a314711097209ac02ac819d51e11a650a8e475c78b1c47d15e5e008773753 -0x3b51157be4288570d46d680b82c15ed1c9fec6876bc3a56784d962449dfcaa6e -0x64fbdae71e3481980ab853eef34c0abae1ad1a89985c8454a3eb210c9740f9bc -0xfb2044a8cc30ba3d48ebce85a4aa3be90be6e966468c99f74201c9b0e4ee30ed -0x703869a03f12e94d352f3b79303ef1d75b86945b99feb95ffe57a5b8af9fca62 -0xfcc82ff1a5d2c015b5ea3e9ef9d56006448a40bc0fba52caa1860d3e7d993f78 -0x925036e22fe13a59b162753b8c5f8b78b3bca41fdcd91e6f597f8a08d2898beb -0xc4b3dfc50d8c5d4f9cf730395e7eef88c24f9e4da2052e1621bf797768770856 -0x09859023bd4e7e1fdb392f626d2992685418970d470ea6628f0cf687863e8b0a -0x59a4cc988f1be901e26d1dc5a2adb89355a36cae4630435a05e6f0c03fe6322d -0xe76a6bc959768673d467beedb84fc450dcaad37b680af173239d2259984c5597 -0xb7e0e5d23af43e79314990756402c276e926b5df6ee2dfe8617e2120abd99642 -0x6201550d1594fd80f05125dd69abfbfb1718ff378f4c8bcce9e461b528b0176b -0xa7f67f71062c47841d98e1bb5d421a7ab6871503fa3cefe7397a920095aba977 -0xaebc2b7184e307a4113c512e4f1637ecde2ddd1318304eea9735de58fe09fa70 -0xcf1fed8d8ee75fcde0a4aefd0866fc6b5207ce75f87dc0ab1c00bc556a207dc8 -0xa4b58d7fae071fad90e1e1d84f763eb69b8e6cc7e7e83a51f74d9f96d1a771c4 -0x1680fd0440eb2eb034ee56421f193a51373dee2692cd924b7a9aba42675b577c -0x4b6bdd24c66be18fb46fd035a7a08bd9c3719f194ad76e477e94eaedc85d2f8d -0x65b7bc73d83ed2305dbbe994c141d9b601f4a0f493fbb6fa3f098d9dd8bb5fe8 -0x09d9c0255765a399cb3116934e065719e602f712c50826fe7743f2f6feda11f1 -0x8e14d6896fe379379d64b95e2bd596583b79a5a5ea12225110f52bd7e068acab -0x6947c69e5f49cf8e1366ab61e677357fd09e0f3f04de51a75ed513bcb2a052a4 -0x68375fecd9473c8863738e1ad45032f2b0f877b8b64bfa74760a7e12c751d16a -0x39236da69355735049c73b8c0b8164ea9060386ed989aa86ceb8cd814670be75 -0xcff3c3c7e30fb68dce1916b4e09fca447e5547830ba823ac28b9ae8d029e3d33 -0x0d2f93be9263eef88eb02866937035d4d4892fc8ed471a8781eecc6114ae6c50 -0xe813a8b90255e0e9f44757cbe0a3546d6b65cf8c11155f6fd116279498e970c0 -0xee46c9f74047d3de11122cd7735f9f410cb893f39dca0f875bccf2358edaa6c2 -0x7f062790b0baa7efffe15741ac27bca3e9f5b382f7312779c1bdcd24f766eeda -0xe5de6fe4ed1d11cfe4d51f8a361a3a432f0000d15c5b8eba4a9b25afa67cb6f7 -0xe16dfa0209ad9d8027ed1bdaf607f953f90db0489d074b9f4668c35e5a367f6c -0x442399918b47b052bf6ef67e67824d3cc5451735987ff949a254b0a7a489890a -0x25a352dc3d6c1334559c900f55b76c34131c6be29e1d6fe6ff2c6e2d6ef07e61 -0xbc7aacac3cd73fe6ba87a1629d9f379170e7b3bfcf1daac90c66ac203c868b10 -0xffad88657a1c9d842e9a0c12447eab9506925d032239ab59c47921069c40f101 -0x6b25e8d0bc3ff1cdc58c6932238ce241a5b421e35ff7f9bcb8119b47072a4a91 -0x15822eb3c64f2bef1339dd89c14b9395380754f2c0dfcc7695c5de5f3e1024ec -0xb29a6d21115ecfe8d40a527d06959de8d5843a41afa5b35cf82ccca40874a36d -0xd867706067967a1da3731c225dbd14966cdc37ad1c1a52e9bc89d887d216cf50 -0x2fdb63675fdc2896b89113965b32d069c9da8c845f931adbc8e6dac095aece81 -0xae205302654b4bc50066a9618f1e18ad3ed965b04e707092d4ff0137b9ab5ddf -0x188a4401c9882f817bc21566f6505ad4feb05ec86470107cdc4b57f65e0cf391 -0x71ad296f7e28d350cdf16d299bac49f4865c01f2b31f580a6d413a217590ab58 -0x90e43cac9d1d51f4fd6a2a796b64fe613b9a6e8ade1ebf1e363f9fdc1c2db460 -0x89250009c7d3726b8dbc0e4b14d2a705f56340cf8848303f9953a070810eada3 -0xde3ec4cb9c8d8993f5910dfaf15a7445140a198e0659368cdf2d84bb76bf5980 -0x412b08ae7eeea2756265babdb89a4befa7fea39351e1175474d0c348836e0897 -0x5a035bedf29d00edf92627f79ed621e5dd7414800a7146123807521db928611f -0x2d830a4490b140c065a5073c6017dc70b71c9410b890aa8c60cac73aa8a622c5 -0x83ead40b02d641c5088c8c047ad2b156aa85d80d60e23dcd32d03cfcd9ac0b92 -0x79f1c49c58714d80185d844b0a9ca04db87b5b425ca08f6aaaf05784fa91602f -0x0470919d3540336ac639a08f724463f37197de495c0dfc904c18f4fbbc994fed -0x949f62d5b6dd5637614dc5a552061937b0def38f7de225f174670ec2c0098029 -0x51f4d02cd16ce5de0a52422eb7006c3ecf5e9324251ca6aaa4a3981bc3d22df8 -0x69659359d4dacf3030d77f3e8c133d19588aa5b936a1e32c1f92d56f676c7339 -0xbc6617fd681ebf536f7fb2fb577a8e70b8ea94445d0df804d938fb358cf18417 -0x815c69c77dd07009e97c6370ea2e87f4db1a6776eca6b09463128cf87047a2ca -0x7ba279e521c20ae1fed67e5e93b4762247981bf7086f5983bf5f70e7bc9db641 -0xaac2a47868bf79e395a39140e8ce86a44f3453d9c9eda3cff9a9ba51e6c78331 -0x4492743b917fe47f9c1d70c81edda44a863f8ca37d53a251e40733327d525dc3 -0x185f6418b05960632d51893125fa0a15cfc4bbf556d7e86cfaf98695315c5ce1 -0x6efdcbdc15aa81570e13169abb55dd963e170304ca9034f014e436d4b00a0407 -0x3f057812c7cd48aab4920189443d82b8c0f1ab566e5d9b4265a807fae8e608fb -0x6a1a1469e3100afe8d1f5625479d756e1928d49d27d2c1b04b5b2694e81f966d -0xbf652b4a21210a4c69b3a2988fad0a51abf1619f1ac72d37fda8de0c98bf67a4 -0x317ad8a768acd8988fe7566cfea8a0ffa8d376c58433ef4a0637faa8268458c8 -0xbbc658ca253ad921254858e56f259f1e76a059ebf4d686bb66a2bbb02f67438f -0x85f5cccbd68cd7bb1d5c944cb9da41e12bfbb6803f7602def1a87d41142fddd5 -0x8c45272a2e776102d51e06e9fc3afcbe1d83d6a2087cb5c51ec26131bd928d04 -0xf80580035e43887f912cf0730709d508baca9a9614c8dd1854830995168a0616 -0x5788a614fcafab658058d260d5d46be5b0ee146e5ce54d590bf31b8d0d76b168 -0xaf745347297f6bc9690eaf5fb98ecd496e26a06f61f87dcffa269cd65eeebe69 -0x274ae966cac4327f136b2afad86e8d190901fbacaa00d9d2b6c326e480eb2819 -0x0589fe0f472a03443317ad52573b29beed5a95cf84aafb2acba8a92dea467f5f -0x86ed895eadfbd46766c61fff41fa91c17c491d2d6f56e58b32a5ab44f577f626 -0x5af119095e4f1bfae334ec660c1c1489309f9725749488b559486eddff48b23b -0x577ffbe539322aae8b9f8c4f20870efdd7b881bba00cb41e67dc9e8960506513 -0x0c8a6c2db104da7dd9e7f08a923567ba39a9a6e7695f3d58fc72c97ecf04a1a1 -0xe3b64441964b63fb7507557ffcda89ae39a776e2f9ab96058e214ad30dec3eaf -0x5992d67c5da1044976a9e1908e86623c02cbd8fa53d20e533eb28cde3c451f39 -0x84ca3e62811fb43b5cb7abdd314ad495833dd2a6adbc095dfe07d69e85b20169 -0xe046583e4c934bd316c89b51ef4e73bd93dcee1516d27a744cef97c4d938b76e -0x962bb87d3080692260fae7620b216c7ed44d7eb91bd11c7d03182e6d227b3c87 -0x25842dfb71c407a40fd47e9a1a60df64c6799329a5386c0c38ef17f3543a743b -0x720ec2527e333d023d33f02917fa3b16c823d4123b2ff83fd8d0d76e32cb1389 -0xc2b79528bd4167cd55f0c66868a550640a5abb11e3597709ecd1ec4131ee7300 -0x04d47fb4844bb24f1569779f558194c493cbd1b1a1b8a26fe1905b611745317a -0xd7baf9fccd025b6d39f82a6d07c2988561f3ac1bb688cd120b0ea37ae7c1b909 -0xe00b3419a72cd5dc621bc10782f814a6b89c4bce841264db5735eca48d5712cf -0xcb87b8a3dc8f8cc2ad92e690e7db4626f0114091e3162622508cd75a2ba29a08 -0x362122e200e67cf583663b8aa2b71935a8912578ebd58a8290319e8002a11594 -0x7ba3f3991b07562cf43915e73689aa918dc2adca20a104bf8cd5e34ddd14b28a -0xdb64e33a3c03c4d440484658bc996998afbf41f79f5a3254903bdbe047107ce7 -0xa7c93b09a4b18e7f71f0a6ab091635d6224b8e2b64aa23108e67455cfb294daf -0xf3dd1987e768142a0b6a02fc14a6427197d668adba4985ebc3c9389a5efe4468 -0x1c54870d8c24d97485c4b3f550a51905683aea768dda41752a6cf863d0653b5f -0x95da88afd6d366256f9369a3996230d89b424213a1f154aca14a476c14011f81 -0x3b1138f44f6a3b5c68ae2fd0a257035cd6d2b5df5668a0a94f395e93fc639999 -0xc2db847933d73ea26d3a4eda2f64559878a0c7e22e64b8f779b36f7ce02d9000 -0x1a774db0dd789a2468fefc6be9356a4edf5af5c7d8d157f7ff6e15d890944752 -0xd021e07713413b1d22bfca6947d250abb3d37ffcc66321611441567839067c11 -0xbc0f83e63cd5db46b1393c3f0953d082f2555c11d3797a5c2bd3730945abf3c5 -0x9073e364fd1fab9444d2d26c852f74a8ee88e91f11859577199eff08e493dbb1 -0xe583909cd7594d806bfc6f9be0606f910049c51cb1bb6d10b4f2f95b1537f0ac -0x0a35bf127de1441c8f13924cf4bec5d1902d120afbaf39fc64a382c087692e4e -0xa67afbbf9108ea65c5e899d632e53bce15607ae8994f5b5cf3e2619146e84981 -0xca40e6c13701998b0d853d31fe7d257f76d9a4bfb97a34e6b0f795df7fca9564 -0xed76a1fc9fd3a42ef74ea7a9fe4fcd6b820b2afabb4c71f9bfb94182c1254a09 -0xc4b9358b092e40b97053b314f754af2535efec8cf6913c9cd83f219de3ed0d67 -0xebf8863ab420da475ec78f9f1f2c0ed131cb0165debff4b6010d96d5a0966ef3 -0x3e689a7c32bd7945676f39eec1bce6dfb6bdbf65b2135bf2a5267f56491da566 -0x075938e4e181bc16a030e619654e1f4e3c65ffc7bef1db0093e3648d969cf4fe -0xd25c466c49546f1ea34bae99f2704e9fd7cc199d76ef9bd95894f4e71a118cd9 -0x20fb6ad80f1472146318c8dfe1a338d548ae3bc70b77401d36cbba23e771ae3e -0x415a1ce0c418bc353d122f38615a5f7ef172a899206443e673ff55b259401a6d -0xe1e1d5ba35aeddcb06f64e917a6e280766f5ffef5fffbb751f12f55623930d4c -0x99897072c5b0caeeddfbbbaa526e7fc6d415834d948aa361da337105aa387a74 -0xcb47da47196f41a507d96caae044abf266e63fd88e490a329c5110a6b1967fda -0x4b7581866cd1b09e1d4b7c26e3c31f94f878c2307fbb4360235bdfa186d79646 -0x35beee3012c1a4cb39ebf5ac37580332ff1d9bc8314ed86a3de60ce08f44ce73 -0x9e79a1ea872bbf4915b8a4e5332baa2ed4d474b3783022a1292f9d955fa36c02 -0xd3f57b97d25465d9ffd7f3a6eccfe95dedb68edffbd0484ff63ed033f8e90d77 -0x298620785e67e181a5e75bee6cfd68b4fb332621c43ae23da75b3f7e52fdb18b -0xf9e00e29de1f792c2f248de10766c9c13ac7067a2459f193f13364c4a8555ab5 -0xc4c12b89717c2d10b0a5c7b08a52506706d1983b7300474bbad09693d42e51ef -0xa563739e3e48db91e83bb83fc54ab7e3430c8c563f76dcecd319fca45b63dcd7 -0xc33a3a854370a5a326070d9954e7fe287aecd0a99989bfe2d464c24fb3a4b8a5 -0x05f4d26c7620966ef8727bbe26d1a5b561e2cdf565805b89927c968a98c9fa30 -0xbb8ca6ed3fa86564bc376d5cd2e0000c42b96db90b6a7b9895101a4b3fc95c6f -0xd582075e711590d83f328c33131cce804d75a1c0864e0d6705096ba18ee464c4 -0xa979b5d85ebc11afb8434a4fa1f5253945e6bf2fe234ae3241e754d934afd060 -0xf888197c02752d6fdb5ca07b334dec929669d3e39bb1472191cad1909f1c7615 -0x0d191b1bb78cd953f4c50a61d3f48c7fb684dff920094216f074ef8f3d7af315 -0x03e36a4f155123276fadd92be80bca7111fc2c1e7141199a6eaaee3aa3eb6fd1 -0x13b7d5ac8c6bcb95d851b98b416e1731d1dc7c3ff6ccc92d82c1f5bc1b7ddd44 -0xf0eabb3fc8b92e63cd49984413f3775855fadbc93da6ec1b6b448d62c5aac47d -0x39cbfbf1d07280ef08538ff44df1195a01792089ecd3a55bad9f08ba5e4f7f47 -0x170da12a6d05039b206b5176d1fcaa8a5e45bfe6c7906ba0163e7c73c69f8ce2 -0xce5cd33e6ac92b0ae31dc1e88ac82b281d7fa8abbabacc0178cddb322de6183f -0x0ae23a585017645325be1c01ec1cd3dcfde9d1e35f01ce5d31cc35be45471379 -0x82939e753835280046258e7f4e4c22df759d15ebdafd2118d081fb408738a2de -0x3b0a6bbbe1543b01aa14307b0939d38c3705eed552b6be264fa84d580b023054 -0xf779d35bb5b9798c5d08e4ca28406d84b71aed3689fe44570bdeb6a8601ce22f -0x4274811017a5f75a0f79052e2b8a54edcf9e30996c48e5ac9d703202c30ee797 -0x4d2cdc4a346a6c273f004c6cb05347774f30731b201586f80f6a7d0cf3bfe9b7 -0x5cee2c2b77b7580ce4e12e132d368a40bba57d51df79b3d5ae298d8463c44ec1 -0x85d478eaad54d38fb6ad2fb6e02a1610850d30e4851d2f8d856098d6ffbc77d7 -0x458d041795f136a577e13171083e90892cb5b4790d86341d5a62b3d0bddf9a17 -0xa0ac1544d5186b6f17bc273a6569b2d734d10a1e718f58796d792a9a70a8547b -0xdcd366b65ee4e6aeb44e3d2f9eacf8cf939e437c3ad1233b88407e3fd2502146 -0x3c2e434e2e8f5438c355d4e1ef1aa4d13b77613445d8b345fa8f21c3d4488d3f -0xb895ac088f2d0193ff88e33625ca77862ef7050bdbd2c4648d0e0c7edb6e4cdb -0x5ac70e0a1da1c4b73f9f9a761667114918bc2deabce6b1e6b1562cd133be78e8 -0xdefca7ea08a4770035cd8ce0dce8ec5c3960d28edfbf3627dbb989e23711dd20 -0x3778e89709acd4d937ac07f118ed0a8b1b7e92b00cfafe0e7249a94309e2cfa6 -0x039f285322a62362be84fd186c984345efb30887aca04b1aa61160d22073989e -0xbb4b2e954767be98032aa2f62cd532240844f1c8ca7efcd8ef598f0f97f11e81 -0xa4ae4be45940e1a8ea6d4328a8e4299bddb7cae11d0eb6b5d219a7b8a0ca58a8 -0x9a0c8013dd9895cd99d7235d9b1f94e1c16873772e9e252550435f1d615a7151 -0x01e0e0c092cb1512017721fe3ef50cfe21a61e5342898a4efd4627f94791da9c -0xe1b3d4604898dad0074bc787b1271f2a3c566f254df970816fa2c3664e6e6975 -0xe80aba241ae860b2dd9aa06c80a94399cb101869b4c1e28dfdd62de928e48a7e -0xa1beb8cdfdac51788c142d29f52fd1115ef9526d5e991cf6501f40267a48ead2 -0x2a4114c810e459877a2eedd4dea75c24ba0d3aa7a12a6fda875de07d252f3aba -0x3f17a66e36a42306d515614467012b419e982836778010e05b46d85ae6a40de8 -0x9fdd8296ccad14ee62305f9cf03c88a50de2794de462ff9c9ab00cd98d636fe9 -0x2150cc182c872beea3cc13e3e28753695f5915072eac61f5eac43fac7508a153 -0x018a26eebea651eed9dc1c96e610662663b4b701bca6c1089cc01b403cf8b435 -0x30a53debd06225a5ed299bf376f858eef2f492b6c5469db1a5d4813c289c6445 -0x35778262baa19c936b04c4f7232b2cef08be039f2295e26916f1cc942a3e3625 -0xdd753edb2e45b09c35f3d23c068930c2a76c9aa4b6ca6306bead9bec23538ec3 -0x48d7c11a682ee70f4973bc42a25e1212a355ee810e25131daf9f565cc15f16ef -0x12920d1b5a4ccf8e8549cd26b683474999b81e878db94c89a06e6cbf76de01df -0x75e3e8d5abb0f397b2cdf76eb18f73e441e3c4bd5706029a08899a79fffed6a5 -0xd7c94315bc80d28a065486b71943792ccb2dbd1c9ed051526418e0b14b0c8d6a -0xc02fd7c3d6ba85dfb2bdeab4a6e9712abb5d19b554fa578d07f7c3431aed6c7b -0x2ea792139123a978cdfbf9db065526815b16111cdd41987c6a340e9616876c12 -0x9fcdee3260fb0336f0d6a729bc44a4d0ba3ca47ccb1bb17ff90ef8fbcec0df9a -0x740da13e50a4d6466b4d5fe32aeee8b362274340629d8b9aafa8c222eb26f383 -0x641e3001162081e84b7a28a71a4a69ad3bf9c5825cb263f3573457a0d68bf8d0 -0xe83758f55135e73e00315eac6eea5a2bd8793be36eee2e5cdaadc3cd7b3f74c9 -0x855a8fe40554423e5d11b75629c9d7c06d4c94cfcb9045980a8e981184201da5 -0x7612ca6bdcc484514a9a7a4cb8e2e6af7a56d280596b01a4c65ccd99719c5684 -0xe90b0c89ea5eced117e36a82f40c525602a317132f46195ae831c61729382f05 -0x67adede62e25e4aeab513636d0dc5bdc9c9c32a27ebfef0d0752272c4299e12c -0xc381a8b4dbbf3d3e4af8df1ae163f9b0e7ae799e3aa7706f2fe351f5722e350f -0x5f1b6325bdf89d20c6d21dd232fffd250e1c142535cc9a893aabf5d24104dceb -0xbc03915b114b935cf68d386a227fad058f7e7cb542ce8a64f7657b3d82df9593 -0x7eb70ff8b69f078e21003e68b49051c6cace4b64e6554d9078164bf6be604fbc -0xec08407e3f275aca280822b87707e8dad791ea0f6e4e49a28a30da13da01de74 -0x5ab5fde58d8d3a76ddb02f9417cab17d230e10b4c050161f3ce6c410611a528f -0x54bcea049e86729f23b6605f8ffe89dbf432f34abf553ff163db35a7b709ad18 -0xc5e2e346e2843991b51cd8e972b255751c024e44177e79443f5a3a9f58328b76 -0xdccca2d6d9f7405b5075da98aeebc218ac899c081ed6bf6f13b3c5a8c7712f50 -0x12a1080f6cc5b9d4b2d67eef51c35c7074ad77ab89cffef3563d7744c79f0242 -0x82f880d8d3c7052d5a256523cd4b55ada48aa1eeba8f64373edd5d180d3299bf -0xb1f78afff4bbd980d9fdf8618939de99e6f2f92926bf6f5de60827d185a69609 -0x6cd5606b2bd960718f02097d756620ec613067b7c6123888b7ae3cd8a11f192e -0xd9adf98baf199da9fe80f504b8b10db9956eb0712170b6738300b7931b0d9a94 -0x936243a917c0b8434a8d0829df273f0a292b29dbabc7ac11f3e818091cde8468 -0x08361cb27d6ee2d8d27db4c6d33505ea7be42c8ee6ac07a50c7b349a087986d4 -0x0d04b1c046f7d294dfe4e746aa30a10da91750386c1f8ec8568f6e5c73b4b83a -0xb76bd0c1bf182d5397bea7e4665820bd0c958047cfcba417cc33d29e60c39778 -0x5797dc37e058a01cce5bb6ee2526e77384635b752f3b856abce91b6940fddb25 -0x1ad9b64b1a8c571384389631a2451b649ca712b2eb27dffc46c44a1ec825c783 -0x71ea4a42d20d8998b1ea21778795c5fa1bc23d63c6edd007189f47135e1079c5 -0xd187c1c6005d9a3da35d6c5c07e24635dfaf6429587827c78368b372000bb2e6 -0x09291244f29d05c280f2427dc34cfee3d3f18d6ee82d8a5741d2dda8b0774ff5 -0x1b9f619daa8c19a0e7457e1d33f404bbe11d4c33dd27d5f891000bbf3b24c243 -0x3cffa1e5e85fbce4614f2fb705340b4da00dae6ce3cf4bbfc5c4084cb8d55559 -0x6dc583ec448b7d180628beafd5e46ffdff1f06995a5188cfe70757b7c2188702 -0xaed83e535eb53f8da2e4702c4ea17cdcdce4b717170e23daba5a8dd0fb53bbbc -0x24a63ac449cd62b55ef46b9317b627be89aa02dcb69a9c46ac7eb3152e07f524 -0x6e1179b27004554505de75cb839a812e8c8c4a25526bd3f6032c47188eab061a -0x1772e1963d9e6382587ba720c4f12c1312c1b2174df60c3787160325b8a6e58f -0xbbda0be17573282314c2f2de5015ddb50f6b37c17b09ff5ea676579704fac3d9 -0x1056e7047ee2851d8ff489fe7e58fc5622c683cf7fa6e9c8f04637c5ef802596 -0xd5fe18eb627cf46cf7872ceec54b4996a88790392e3249004c16e388b9b47037 -0x993b7842917ac969c30ade5105ecb025705333fdd7ce7df0e9ff9d503477f988 -0x0e24ab1e9c9d211e3ea2d397fe0387015f157ea051574bb2a071f524cf3be230 -0xec793bc5cddef15e6ab533885efcd031032ed163e873abf58a633ad6e19f83bd -0xb2ceb06494c5bc822d2b6cda909d8b181dd33c646e0f1412d60904941cf2fffc -0x27d272c0add1df5e7a09186f0c8961a5ff9700fa80940f5229c9fff571ce1311 -0xcfe9415537382b176e55c584af80be2ad1ef16b34ad9d09d3ffbcdd5c43cccb7 -0xdffeffa61d7190e29fdfde2cc62d3b94b80e0975f73c47ebcadf6ceb10c519cd -0x8237b518cfe9039489334e9613acdc72afc9fb40b4a2cb3e6443ef02b7c3ccb9 -0x9a840ef00fc2e8eb8a0b5d1df2bc2997075161a17e4a176d2d17bb844823e79a -0x1bd3aba5055d2206e001c0fb036b304f4812ca14a75ae471d44fac454f259cee -0x5ca31ecfdd96ecaf815ac43f4e1b35205655b42d67410b3c61ac45fee7c29596 -0x9a81c59c8da43f874b1e9deb37a77305873b32116c492d73c339b5691e334930 -0x5267888df35b88d45a5a11b4446b0e6892bd3174a28ae25cd18fb0c457c32106 -0x66ab34001608e3037057e98dcc8adad2038eaa9f310c42b5907918360b4f22c2 -0x638e6fb631cdfd487a28dce1e1f17c6e3833e937502ddca762dcf19813bcb928 -0x7ab72d74f8590140fd6bb934cc55b476b5bd26a169f09070c9fe0140ef1bf1a6 -0xcdd306fbcc370a780ab852932f5e4da119439794f32731daa301e698f3114fe5 -0xef08bbfd8f8d62647e5701e0d546e5e55b1dc540dd1c599d781900b8b1503359 -0x75d62839ec3f41ed994ae15216f708a7bb3387e0ca2043dd7ef143b7225e049d -0xf16799940b96396b816ed76cf7cea79c5fc9fb32888511afa5d815b37ea3a34f -0x7de87b89c21715771a31bd5b76e57139583c0afe9916461431e995bb097dda47 -0xd6ce25aebe44931c20758cbbd6ccf45754147a913192b0d529162aa95f16ae3f -0xf8e5e8f635d2b7ba3dcb42fd571f7252cb1e35cb5a4d05fc948795b1d88f6d7f -0x3f7c4c643bf641a493989ff49bf9aea18ee2731f63755f945978c557c30850e9 -0x5bb72d933e550aa9c1b188ad12afcc27d585b154fa6875d22fe4d03d762bfac8 -0xb091937a2bcedd4644afa3bc309b6e6d4297c0b31d97ed325ad0f315f9aab989 -0xc4f048937184a4f93f0ca2fb4877ce58ba66023b8dc8fd51c03eb7064fa70cbd -0x39c3f6f0b15098a00a217686cb3cddc6ed7ce58547b75b5c5a1a268ffbf9c120 -0x1f0d386ed672b61597de094a877c03c71bd562d664c06c103780213efccedd9e -0x1e857efe3a9e36fbc339c630ee0cb76fbc43276e648bc9d42e5dc416761be39e -0x4f22632319577dac8edab72b4d5f27a65fa325d6b1b55ba42af2638354ea6fca -0x5642064a068b917efcefc5896810c14ff88be88627a61035ea4449430fea27db -0x57e20a8957a4099f201e0af79e10ea563924a98008ae27e30c1626bc186738be -0x917dd4279fff1d5094aa06ef39a354d499b52cada3b4c89fe8efe6674ddc9dc8 -0x3c0bb93f7e951c70e311106653f79284149096f674383fe0120e465a5909852d -0xcd2fd3ba7786c37e36ada86ef2c9544f5f5e3810e37f721e9cefd61c39e90d39 -0x130b1657535da99331e3424ed58d5363a1b5a250479fd66689e812f86c6105fc -0x945054a519a6bb48025c55723c717cb226a28ea35a5d1e4c70fbe85f536b18a0 -0xbb1ca10bfd5c46c96cec57b68991aacc09928ceb734876572a5a318cdafa2e87 -0xb105a03c759ccd9d8b15d309c4c83261a2390afee71f78833cce7f4ed067dfda -0x32f3211d49efc05b2099c7e5e244ac2fa137ef87d4a393831a89b2f4d4fbf7af -0xf16cbc0027778472ea8b321fcf830c7a794210ede603e748f5664029c55473c9 -0xcca6e2f56b4753eb8cf328157ed7e66437eadfcde9a891dca1e942e86299e0fa -0xfcc9bf38d22f4ef2eb9789b4c900387ff919362eb1df22a8835bd32e81f706c5 -0x186d838968089283a278285a1c2ac8fd31e8507c5ee6b52e0d65812c65c2e536 -0x1d31bc910965b5d4e13b46af320c77001345c69080a8e158f572329d49b27798 -0x843f519545b42698c8dfd977b25035e9d634ab7fa15d19a3b06be7d43fdebb99 -0x2ac25731c10a2adc143372831f471cb27e41b3e859d16c61cdd714e24a05b667 -0x35fcd26c9225119e3d5d02d2427a83d15b7bfd42aab3aeab9232b5aca172acb9 -0x4db03a64454350445f82a4fae7c4d958bdf2e5727e7d0cf8fd9e397f5f1a8e8d -0x104fca55999377c5d92d9e08d22bcabf1d635fd83c7f1408ae733c18b4c3584f -0xd6f1713c1ca1a8da0be8c3755619288583b28f41e25e6af2a04e0ea53b6a7f70 -0x232c8126840ee2a460196aab37201009576d66f6063099b69f79de7b76400853 -0x96890aa24449189ec5d49ec9210f708a4b686ac7adb43caf97fe362f37d12887 -0x4dafc2e0a98d1e7f36574e97c02dfaee4fb68add6d8f9a81d4ca5dce14ac8f2f -0x336552814722f80e92d41f858f42dac372e90fb2ac87b835ec84a240e9a1e6f9 -0xf0c6cdf52142c41d981214466c1810b9fc9a6c5373f6470e2c50cc2f53dfd0d5 -0x11a390b79f908b8fd96821fe31f8f094eb00a6028060e6f155a0cc922a18d81d -0x4aa1d2d7701383215d06983e0e99600533b94293a858435bc178377bffb0807a -0x1e0ed10d4016d72f8f2e6217f1fa70130fbcd42283f28191b68c16f559ae8d06 -0x2a32de301b472ba0532b8da90b4e4da4b54e67a0d288584fa53e6d6d8fb22d95 -0xea67631a0b4507be497ce9382c05ca2e658105ad1ee76951a4f238e21ff7351a -0x89ecbc7ddce9e6ab30f256cd523fc3fdec2e20c2d5d8b6793cffd0662b6570a6 -0x7fcdb5b651c583d0fdda6ca87269fefb395239ca32d73e4b0fe4825ec7a73738 -0xcc838f4352db111397ed2990212dc2957057e48bc0bee71f3e6aad3238d7d6d8 -0x0b8ccbaba92263957d1b107007719d3528b15247337a96165aa847c195f5928a -0x36cf82e278db10e3471a2d6955f496b39aae9e6e4ff07eca7ca5520ca75a868b -0x89b6ed3a561e30bb2f13df3e4a27a06efa6583e2323881c68c7816fdf66af7d2 -0x62ed0968b5e50c4686b7cbac7877007899067b5e58eea633ab5c3b819e8e4d78 -0xd550c60bb683042440891ae11e6380e20f51e096bcded72f87756b9afd9b05ec -0x2e44dedb1aff99a52723093bb232a207e30ea0ca873bea970b2e07292772882d -0xc52888134dfaccb27b9888e76c077d35f6b04578a521e5ce656f1aa428ea13cf -0xd791679f7a525b89fb5cf99311fe85395e92095a9f4a24f4ebd090c1bbcf24e6 -0x10f645f936fb3c42f9c3360a3bf5bfde71cddf2bbcff08ffad73c4d3ea982310 -0xe3bcb54cde46cf850bb559871c3025a2fb886816c97a4c4159f0b084cec5663e -0x529e22573a8c7b91a9e7f49644f05c39eb12c29fa7946e8097836233dfe08553 -0xbbaa3bdc6929fb39b6391a47055c43fccb90f5218d072bbf37077f3f616a9a91 -0x2ae5b4a0d12ec746e35bc28c5f79b842411a040f81cfc0a6210d02147b51c682 -0x7d3c752b1fb5c5fdc794e16dc86a87f4ec0c923cab0647414befead79e16f74a -0xb5d9b44dac8c5b02e9e959c249edd0fb2152cb89b5e7904b854a0d19f914ecf9 -0xb1d60a564fd4b9507817916c19e0447d1bb5c3e797857d4c9f8c62e9949e64f1 -0x1f4f2adb23a3a983fbcd700d778221d91a75cc93cf926c3e64614d3e1a78be14 -0xd861fa83396c4a5d214bc137687fe96d005e43f7ca1a95e9bb736763b79c5e58 -0x87d5ac516d30b60e7ceefdcc6a62d88778a1c858a44017f6dd41216de56e231a -0xd7adbf3f2ae5ae975066b07eef0102dbd8606c9619987b05bc1a003989794d6b -0xab9b377513a148cdb0d2d3cbc43128e5804ce81cdf257a6ea20b780cb383db6b -0xde91f2b3955e58a97d74c98b40274064a057fad77c7ea37e5eb945dc0542db9c -0x6cf612194dbe52032cf17601d81f0c112f7deb0c1c2723e2dc4f9cb95c5e1118 -0xce965def7cf8264e3db8b2241198900b3d0da294e58d157e734a08a370da602f -0xf80603f0171d4e27bfbd93441cf579a7522a63da51c3ecbf3f9b79686ef8a431 -0x4f247f79e86a25db4b697793ff8820a2054d28583ccaa711a7728b8c1e9a3b12 -0xaed69a4add7470e3f2e785a6e60a3e530f7c78e4621f65b39aa4f2ac6fac8b88 -0xf19730971a0a6ecd24a4ba66c60b471537d6836088f62860fed5dcb61957bba2 -0xb20675896031854c261c0766d9ee93c3d7178baee36d62684ed84d89091cbe69 -0xda86994858008b69c2e21a5a37d1315ca58f084b37e11621f6f117441553a348 -0xce19ef3d88dcab25530fb33d5c8a14b969338a730658d7d920312e2e74839856 -0x72418045ee0fcff930e2a8f0fb00e40ae22ede0042cc99738c027cbb40f0d4ee -0xa016acf53c1b04d05d731eaecf7e8589d0ff933e0011ba458734bff8f4fba3e9 -0x7d5b7cc3efd16835ff1f0998986c28d9e1af79abbc7b23bb9f968cc931e08ac5 -0x5b6478dec25b4693387aa580377a05c2259a03a241e02a6c70304a6bd36cf44d -0x2fd47ca6c7f30ab6a975d5dc3431d9216dbe37b92470ddfb59d38bb6071c7f50 -0x2046ec41ef42ae221aa89eca07cc69cfacc5b7dd4992f78a7bbeb7eee833b822 -0x6a7adc75176e14f8f167f8847024a8354bb7951f96a24d1e0f6813ec1c3fb801 -0x23ea26c68efe8f05d5314ee1a582b8467e27bf51aa9a5a71482337f5de5b0907 -0xf211545e9526e8db93cf6593bbca0c52d0082159e8d37489761e2e831409c95d -0x207f09f609f88759e6d2850e7c5ce59cc9590d1086edda9372dee099f6872acb -0x668c0b9f37eeb51b79edbf3710c89789b2aa355d19d16ee1e6ddab8fafd3adc1 -0x77b0fe25897df414d9343bf80704c6603bf8523ffb8fdae144ac270ead3fb9e2 -0x6f5c6d98627a9ff69d66d2c9fab23da76d8662ce7ca02b80b1336df59606b796 -0x91fc2a9eb60cacb7ca2016edf82eae20b93e7875833d458e84eda54731a45202 -0xe6bb7fa6047a72c1cb7535b62d059bb616893e33f4441571c2f84f8a42f7346f -0x786becd35827bea0314514766d0feae438de839af28a18dcc8404d64b4006aba -0x646d50cd6b58a656f1b2b9e1a9ec79050e409647a2e0ed66e67534aa23050246 -0x20169f56b297d10a127d5229275f26893a9f1984fec2278b694bf7c85e254778 -0x83414af2373f16976be6da11771a375667d770afbf218ce24c5899d794de18b9 -0x6ae8c7987a0831c773c0cf9b95ce80da5ecff3cf2eea0a22e63d38786f6f3979 -0xd09dea7037fd422fa892593143be577ffcabd77705076c116e359109a3ee337f -0x5e8fe4b36221c4d2b7ad2709685a9856271d950859b38ac388a64187b11b91b6 -0xb94175ca2cbadbe7f87344163b1479f5d76fc30bc3671560b1eb01f07152b6ae -0x65f3af0fe2fcbae02eb6a81d9e43d907f115ef0216f879a450e4e63a0eb7d807 -0x3dbb994917f6b3431413c9a78e21e9b6a1090e320c4bf6d3ddcfef4559337ab9 -0x853a14c9c2734c434553c1eb82355afb3a27ca6bec9560abda45f69b326fdc96 -0x15f62e53671f201500b94195493758e0641d6bf5212b4a8945c423cbe39c52e7 -0x4ffe166994fdc135581ad32a904960b28f3d909eb776b7b3b31e3e24ac91c005 -0xfcae1f981200ffa4997ed2414e9b25c3f254858d0b958262b2d4ce6d778ce6cd -0xfc6bc68107dc6de126544b306f8d68862770daeaecf43c8cc9317a8420a7f62d -0xb0c895b954a932cf2872b1d808cad50af1a4d47a9bddd93518c06165a0077c96 -0xcedd4fe4a7b8abe51ec2acf84ce26ac9afa4cb192880936728e42698334572ac -0xa9617298c564fe2652043b13f4a4d8dd997dfc5076b2cb5fbcfb5ec813a0db5d -0xa2e56cbfa60489bf47fdc47d2e0e4707ae9ae6fc71bfb1927a95ee43556fab28 -0xaf005a70da30665e8f63839ee59d7f53aed7d72bc72f3a1383fb3cabe5853eba -0xc60a509df069e14af8d08cd44cc4f14ffa9407822db268100e75909c67e9089a -0x9dc95578cf77fbabf0830d8d1dafe3d86b020ef779626b807240749ef3dfa066 -0x82be985ea9c0d255858c4c865b5cd995afd286bdc9ea989e40ebda33aadbc149 -0x1bbcea0975b48163b4f652d864c71164dc19f7722cbf8bcdb69dc94c162372d8 -0x1aef0e3cc2b112cec677f855b5cfe79c3da95aa05bd068ab8c4b69128abb5eef -0x9389d6ee628fc170b3deba1366c9e011735e0798420c375771b49ed550c02b35 -0x6cbddce85388e7bda2d6e7c199ec0f98e68493271cc00ba85da94d773e22da55 -0xcb30ff6fad184a4463b904007932cc34ab353707fdcdd924701688c071b7244c -0x518c6ec025409fb3ed2651ef097d40259dfde95d93b5c90b6aff0ce2fb7420a2 -0x46065c6e0c3f325a73afdab5c8d9d28b86a64c2ac2f959dad3da352bdfdd4c40 -0xdbc84a84d80e662d34bb1be9f19983b06bda5957beaf501896590a1b9d45cda9 -0x357d39074a20327f5e3a8ba70441ab64b6478a07b5e5bb3200a28811fd112f1e -0xf9b07a609ba36661120fa73a303c2a97a77f5329d8b6df5828a198d7f97fa439 -0x9d5bac4f979f2be7424b7ed6f4e25a5921cedf962fdc18855265826564866073 -0x294544e4e1f882a73ce4a1388b3745b9a699e0385fef175a93d8bcb9fd07c33e -0xbea56e7c4118d39169c8251ca5800982684604ab0acf0176c558dbe4ea0bc057 -0x46a92908ca41a52d699e600637bbf9bf2f1c1544050c64d553c0f8c46b4998a9 -0x19825ec259d4e531f4c67327a4f53df3bc0238a3deb8d055bfc31d2174871334 -0xb7c09e97f21ec6a2a3b27489652ab28b1a19a7f2d0ea033d8b6ad6658d2bb4ee -0x7d82f13815d292fab5ff204288cf2477c40a4df3510d2fa2aab24c450168d334 -0x7b0658f13ad8b816a3dcb8592665155522698907e3477644fc816c19375d818e -0x4321f24d6eca828674e8d0dbf7e9a9fdfd5b1b01fad0828f60b44894fb76f2ee -0xbb797c72378ea223a23fce7b0a9085392ac16af4b712fdf16e6e9a19e78e8623 -0x3300d04c926eadc2b7e3c44bfef5aededdea8842d5db7c4b68173cdc44b2a25e -0x3f0382ccd43c041f109ea1b8cbeb433ad0bba78af95b6f10c73c9dfe7a1646af -0x6b1cd7f01fce24c422e990e63b96e7771856d16bb7855321c19ef768e30d0dc8 -0x776b7cb1eab5ed7064a04a8cfdb0b3054d37ea680e8a39e327ae6f08cb198c9e -0x09766ad6ef715982739b2e95c4b3d5be4a7dfb166d40ba7482005d72db6d8b5f -0xafd2b251ee22b4fc9f8af857358d1c50691168082422289f0058fd3d5c852e95 -0xb9c2ed5274c88d750b72d165864f74e0b17bb3c90091f3f8a464c00be5582ae5 -0xc501e70615bbe66a88cc6e573cabed0f81b5900904c5438bd51e5a7eb0d2201a -0x18e94f69610732da9d8dd5b89eee7180365b7a7e6cd213a0864646be1540a91b -0xf14a94284c07fa1b15152c9f48e37dfd4727060cab569a2992937512656eea8e -0x5134f0d0b884b492d038fd7749c4cd900999bdb835c9e6329a24a52670d30171 -0x4c16f543072aff183a5cc92bf316d56e5c9bd82b114e9417ec3fe40c5c46f832 -0x4672efe73d5a385a46196d496b053eed71c5bb4a8fc54cf83c9d59d7d49fd888 -0x6d61b6fb85bb07197aab5cc284f7cff2fe2c69b4f49dd30cfcf6069a062356f9 -0xa68a3b61d6560e712d428590355872bc3f1dd81446bf3b0d754ff45406e12600 -0x9711c0114a545880ef1af2637d30a6621c5b6fc6d97e6090784c32155d5457e8 -0x4c56f1def6196f66865005047a0d61f2dfffdd68fc47a1528315ff165d30fc00 -0xd2535b1a380a4903c7cf2176b66d6c5744994f002396029e51b80e2c02c331b9 -0xcd1d9f281120022ee8ae70a2375fa268cc908fd9901da5dd0ddf159f084b4059 -0x849cf5d7cdb359128add69a16fe9a0010a68dd5c17f68df87400a9928fdd7ac1 -0x983b3b88da2a233d5bd0ea03e477f2632548d837ca9a74e7ed233a03a2c0f6fb -0xb19db6ba9ead7f75c3b6d4d028f8c5d0a0e52d399e56c778508992055bb46667 -0xbe577a22a38e5f9e2fa6005c36c54a50ad5032fc0634876961b312e0c99a34a9 -0x35a0680df4fb5319db833bfaef2f8c812c425b3c2f99c19d8d01c2f2cb1d6b56 -0x55fb388475009b8c7c1fe935a6823d80049697939dbb8812352af6f7613c6753 -0xa84c7d63e85fac1c93113f07ec15a3e59518c0f423cdc20d4d48bf45e22c9d72 -0x86d0484e43114682087628be28d5e3db8c3b56d4579a40f7491833c8f0a2e039 -0xf9d70f24c266bd14086a38cddf90740612f13d2d0a6f3ae6807e4b782d5fa6c1 -0x15043623642e4866b366ed7d44a846c982464a658eeebe41b218ec20e6a1e2ff -0xc596cffbb420f544bb00a6a4863ed91bfc5cbb4274c552d5fbbc2e4ffc35aa3e -0xe72af1b8efb4ca04ba2abbd8d97b472b1f78ddcdb360ed181c279f08a8dba2df -0x940f9f51beced01863304e67b0c1d0e26b4c7a305966d95a18d30147c698a94e -0x77e0d81f435d69179e388316913fff1803bfcb9215932ccca79cbe82b8c1af57 -0x606e039f7c5669a27b864f20517f77d597f696317fd1bffa3aa6755084ad6240 -0x1faa9fd9ddb8624736b9dff1e5b2cb05146e8d74405386cf4e45b38f126da85c -0x1af1f2f292f0614e0a71286ac7837c978941f7d87a06a1bc154b97383327b6c9 -0x022309cf4560bb4ea79f30d666ce35c562061030d35d4103b99593ea028b2ece -0x29682e780657dfa213dc19edcf72cb178561cbf34803f62cdc356b3a2837bb8a -0xb1849dabf74c8a03810be1108dea61fff57b4f7ba78da8e6653b0fd59b3ed071 -0xf136986ea3262d546b22ff09e48ed63be58cf3f45c04e2fe88bda5f63f82f86b -0x3c85180f324cb0e22f343e32277419490f13ae3ef2dc7eb3b0800a38d5b4d5a5 -0x09fee0ea716adbb668b44fae49a1e8915a7907fda34fe418ecffecb3c1b2bcd3 -0x879358cf3a96cbd724c92792ebd968f4f65b1e2af7a68da953fbab6ff1bcf99c -0xd2f657fc7a61ab4186c5970a803590b8c68a82352572a0d706fb68258141004d -0xb26c7b423112af4cad912ab7206676dbffd8760f00445b89c384a10e04a746e9 -0xbbcf918202fb15e1513aef2b3b791b02574cfa116401b86b2de700588f00f191 -0xc12edd0ea37f4e81e2b3ebe8aea56661ab3ffd729f3e136f58ebc307ff49ba30 -0x1bb6534010f32e7ef6cc0e8b26297250fbbdd7e2ccc566198dadbab6ce4d583a -0xc197ec38860ed78c0a171a902684f065b20afd8a78d718c49557efc82d048d04 -0xcadf7b8fc4f74a45cd1d6541a574e3fccf82e0e479d396b6f17e945123c48e46 -0x74a34b03b7bc880ab7ee059a4820a5bc6d824c0a52949c2c9a0b4f92cbf06e14 -0x3b34123a9e5f7c6452bf24016edf9a41fef72f5089a3fd6a1eb09021ec77b80a -0xd0fd9dfad9f49f7dea8c3d62fcd45ee38415444fde33c9f2134d200e6cb7b9b1 -0xe3deaea37be5531fe47d03dc7a2e31147f96294121107775ab6a7746aebf1b2e -0xf1a3317951e67980f0c87a0512d9b2b82e6718ddce51fd6d715e00438dcf955b -0x350b9ddb1dbda70a5ecbead905d6d23056ebb6d24c07170297cbccbc3e9d34d5 -0x54acbd9bfbcb4c12045df4d00461102ca6f7176d09eaf265adbc30778e913703 -0xcc1a8e9fc0ec8c0ff0fc406c99349dc63b78ae0b20e4a608277a2c35b8d85205 -0x581af8989ece2b5f75e0429f8f01af9f59c923651aa3376b6d41993f6c467e27 -0xcd08e45391e0377fb82ac28d56f157d149edfed7f3efa6fe77f7b3e3db9a82ca -0x0fd62d2270ad6f476e13d82944fb369a84b0ddbd59b19678335cbc5fbe688968 -0xe2e5632addc0ce786d8e0b18a8ff4d31f6d97ee77a70c8d9503ebf1cd9b404d7 -0xb69875c44edd601c17a01a8977f945d5620f3d074398881caebfc8eb824112c8 -0x441f5aa873b1453e010403120e442f0c8e1783319e604276efd1813f787770a4 -0x416f4163c6c21719bec47ac641976e7146208ebf4fb5b0c76faeb0e055e8d109 -0xafaec17e4ffedd1c135dd6b51a2a53aea82f9c735d1258d88bb0ec1a1950bbb2 -0xe0c4f0bf43cb2149001b2a1dc99261cfe32edd6731878354e5d2051cc8bff05b -0xebcd892721e080b13b9f70269809cce6d182042fc5fd981b321cc9c7b430dfe9 -0x8129359e2d79a05806ac4aab10a9623d39be1ad8a8ec79de4ed9d02c0ef5f107 -0x6c14348e7de3564e68f62493203e8e881e3ab2e5bf89fce1629471f7bbe3896f -0x5a7788d3907c965b21b71975c1192280608b9b1f6fe2e8f2285609d5a41627e1 -0x2c4da05c8b1540a6fab5b21b88a9a69ab1adc1aedee31f30b10226300116e501 -0x9f864fed71f5791b2f6db2e43008b2ee3b785de7af0fe9e5c6d9e9cb968d2cb9 -0x266b404d081a58ff3453bda71925bf9cb3040978380074e438b986e0a055ec09 -0x2bfd4e355b7bb9aeaab9af34851d81a399be4d43c9d003a3ac2ba9c1c2af6a1b -0x69f1df6c396a7378dd29f06d0f098f4413c3b87d93fe5b9bcb9889c31d909f33 -0xbdd8a14fea3937157984d10306767a5d95e87c7e182e47651595a4a0cd915e0f -0x6ce91814fc5a7e34345a66a405f8f0848cce26b9b1e3c1948d69f442f1265c47 -0x78ddbf5b751181205101bbb5329c35f6e160e47c901450cc45dc9049d618c6ad -0x0634f1b6c3e9a3963dd31b8fb66543ec52e77ae8d549f7307731ba98fd55c1c9 -0xdad0bda3787954c5f8699e2a0cf413f31aab91ada35ccd10a7d9d0f57c3e0de6 -0x3a18301b1ff07c1ecef217374495b021c84477568664b7139a74cdd23221263d -0x67a9866eed989759360e3d61037e9472bf1edb0a7f857fb9fd89e1eedbd25ad6 -0x2381159efbdf279af5cc7fb9d56ad030646443bc960d9524420294918f9c03ec -0x3ae230356ae05edd8dacbac74c5927e97a1b4f967c2d0932588ce4133ebf608b -0x10dbbb30c8cefd9d6cd18a22a31d2d1aa81bc2ff72cbb64370c1da4634770cf8 -0xd464d5cc02d6c4b43c2f1777c3db6f5098274f6ff11afa1818a304c0c877f5ef -0x6ffe6c9b510f3f2b2d7b7ac5c5d6d59d20783ae887089df01db8c3763a7810b6 -0x9759cc8775d7cfa96e7eee04c587277b910c7bcf86929ff60b32b5bdd08083f8 -0x157227f65312960fa19b999a69b41ee26a5e5edf60cbf358e11cef6dd14bcba7 -0x1fe7cc121f9de2e565a418749d2f8309ecb9f5e1bf4843293388733485b8a193 -0xe7777ac8d0a84dd3b9aed5de495319b034c7fde63f282c5f010781ed926e0713 -0xa82791aa63f83da7b9f9dde3511ffb8838300b6b1044149c6337598e3ba5e2b2 -0xbd9d383da15550169073e64f01b94b9386c21690f607b70a4423b636e2bf986c -0xae44631df3ae31ba7678adbe071fe7f251580c44cfcc4ae5880c22a0e3059225 -0xffbdb10d419a3d9836d781c8b5ad9abb4ea925c06f657d5bad44c23b072f27cf -0xda7d518377b391fa4d70495b69999019b0a4da801921cee7607860b0011b34c5 -0xd5e32aef67a8602e6c4f078a0af8d2908ad4299ec4123658bcfc9a43b789249d -0xc36414543f6915d7cc8aa7643a1beb52e67650dcace7775d6aefd548e51c1ece -0x9506fa475cc720d4329b296b5782475338ac094e490aec4e6fdb645d09ebb782 -0x67752973d0e288082b7254e8f64162d42a1b4bd1496746590e04795245328f03 -0xee75c26b03ab3151fbbe8ad8a43fe5f8ff2c52da8599956e1407c372f262e749 -0xe023f2ca5e3b885b54db90279bf0e5dbb000a8244526181ae4f88577127b9a62 -0xf408ca70cbbedf1dc19b2250785eb1e035dd2a76866ddf56be1afb9d0036d798 -0x9e19c21035aa5247610ed3f7a3ea071c3514fcb7102afdb5b45338729713ba4d -0x2f99a13d827e6ec5a7945eb72e249e42f9b08c5cfd1f764dc218eb1a237d651f -0xa9ed48746b33fbe01783133a766557ffc39eaff60951e61e75fdac5d5bdbce25 -0x0fa4b9746bf01b767da403ba67d7f60a67efdcf2823e13429a5805600280be9b -0xc751e1c5ed7fcba0b63d0ead781c9102ae9c2c1400832a0daca3e16ab7bdf724 -0x52f8b42b3fbdbf91fa9c40c10f14e49704eefcf0d428599f949944bc0e6eee7c -0x69c62448f9683f7f999e2984be4f258cb43b2aeaf94320b6c6720efdd4eb442a -0x750319e837d6fa1db00e75a76287a91d6356b26daf393f315661fca0f65da6db -0x36217ad5fbcc0596386d94d4129fd2ff6e10889e84b15a0717cf4974704c3554 -0xed6f5fbbe67a07d7ee87fd4a6b638f4e163cc9e07a4f7f86a180d849922ce5f1 -0x5d8746db37c9c3d162975cf85e78981b9df7d0bd88d0115720416367b15ea95a -0x69678fa6b983a1cb695c194ed70ba0087c2964aeead38f5b2356ce7c9f2252d6 -0xa5f8c9654242dfeb22e02a14368f0dafdefc17a439a14368fe84f4371bade97d -0x68a7254d3b0e9e41e231b527f1eccba00d7e03bb2b1160640132723ca51ac629 -0x5d55e0320bf704a755c0d4b45ce88d20fed59b29b1fa1b71735ca8b09b175072 -0x4fa228bde13f68deb1ca320e22cbb05adb84db706b45e3daf16a49d13a4e9162 -0x0576bd9bdb958b10bfe98c816a6220ee0d88c8af032de2db795e9b16059e2f47 -0x5b8065c6992aa275e4fd4d53bf24d192f07b63121b30ce877b44c42b03e3920c -0xffc2d45302e7eb7a35bde737ae5e7834cf32984d09240b157e9acad696c17cb5 -0xee8f46bc01d2d5ac90cd6a32f0a40b58960e579d47f871c65e32ac7c355c3739 -0x26a149c66ecdab44b5313e4fb48c2cb1c948b45414175db8c87134132eb16313 -0xbb25efba4ec41eeb53931f6d7d36f1bbe8ab7631b369479c64f405c545ac4e88 -0xc0ffe02e78b8551da5ea1d50f677a7e16f231a0e826d646daec2dbf6c8ac1e51 -0xe0ec03c24853a6beb29f9eb400577c078072891358612be76312eec21926da5c -0x269b0b6c506a04ae665de3ca503723b23072559337adb4bac33941b9c4e67fb7 -0x43521c8639c2b489e4b3a23ebd5c486fe16e75d348cd03af7813fe1813d9811c -0x0a639ced1e8f88a75447e896bab335e55d4c8ba3745a236dd70a49f973d0d67e -0xaa19c4fc68abbb918b3ab632497aa656ea0995d04058dd907075e9f17d77a906 -0xdc618c31bf4f115c13677056283d1a55f6be5734df0f6c63fd34d5d9a7d8051c -0xa2b36199c612cabac6cad2be02a4e34338b9447c23b185749530a039aef58af5 -0xfa0c95a453f18a75a86d5f5f34ff47674d50c84d35e0e39b59cc2df014d73783 -0x8f1ab249406941cc61c2d5f5078b481d02495983a846d09f9d4e17a6e473af62 -0xa1dce06c4a70d919c5ad3a532bbf5e186148ef4982398b0ee2b7fabc88e0d84d -0xce066c03e1248ae32d42de0caa688a7e6e32c5f6a7ee2fafa4401abf3e6d5b25 -0x31e2c90041d631a4e73091597dd5e16272398cc021154b5f5a2fea97115fe3c7 -0x23c6464310b47423a8b278e66c720e970d8d0940975fe045d2bd42750f9fa16a -0x0f8179e0f3d19f13655c97ff126473479cfec9e6198e9abad1eff23f02c97f4a -0xbe4da5ab9ccf48538dfa2caf7eb90afbbf948a14c0567b688a37889e152cc7c2 -0xf917b12abbbe84d775806443517328807011de74dbe47d8208344c649d27b0d7 -0xec61fb533df03a355802c29b655fe64681c732c669945109fcb9d83d2fc8ab41 -0xc954ef2149dda64e7f15612f3420bf57be24fefbcd580992612006fc157e98e4 -0xbb3492b3f60071b7588e6568fcd3d5cdfe2e5529fc7cbc79a7172f91ff0f342e -0x0ea31aca5f6876ded231249848c1c5864a6136fb8d81030ad06839944378e3a0 -0x233b9fa1fdf82c50ef16c8d9a19f9a175eda4115d27884ed5533c3ce24cbd39c -0xc82c41c8654ce368d971635c32e8052d1a83b957fbc72b44ac88330fe7e27685 -0x3c31a3b904bfa4e6ee6cb3e3ba1ac5aad6084814b9abca9b8f0c666eedef9b0e -0xcdaa638046781c100234c2d0ecfb306ce17d4ea9dfbc3398ae27d0bd38915867 -0xf9ac4da6ca219a9458256639bc96a98edc0d3d20abd5a41864b1eb31c3a6560c -0x8bcca7b0b16527699786df92a6860fa78068c775162ff76cb17b9c16781ac9f6 -0xfd00b242a0c11aad997290a187d0c9d49fd3e1d33a8b539df6ad62f51e527519 -0xa31bba70f60eb32340ee1e6e8cc71e0172bb6c2e643e332bc5254e9310bcc923 -0x78e6e40dcd4b9fd6c3f64890b964cf5758829318c4a29ef7cab2907b64895107 -0x023ed02bdf72eca45d4333349edbaed6eea48a277b9e8044c75c191eefacccca -0x1a7e4b9b96dd7cf37c00ca0b67da5b75abb05be28ba3a0320d4e963e28aef485 -0x08b059f04068e715f1841570bbb13af92e89b340d149dc14f6dde6398ea88bab -0xeb06872c71def69ae5e72f36207b5158d42da02a943af9eef859031c679bdd60 -0x38493b7639e75193f43b11c6d0ee714bce6af96aa2e2a435eb44214aa678df25 -0x5e52fae44a52e35e24059510b2b9b28b10447afc9d4b32667f6fceee3fe16395 -0x1d2796aadd02980367afd021bfae5f2e469f1d4d10f10ed67ee864a8fa7afc79 -0x5e057136eeccdb2e6e46a92f426fbf82eab454ea2327c3d4423d97832b901c1a -0x5b5f3c16acf7e9d2eb39194e83ec0cd78f239de7a4560e0638fe02fec905acf1 -0xc2326c53544bf9373505ef738143dffd5db08efe681bd91baf5415fef0c16813 -0xabce696439396fb57af26a22db393dcaeafec88f6d0d12969bf1b2d1f2f33f0e -0xa861c9b34e36ef9eee58a4e6b8d98bc5b128fbab4291d1a71a57bcb77ac767c1 -0xcba7dede0355563c5f1231499fb5f6b1f4ab254e9ef183d67dd27a5953d36b75 -0x9f3bdc87958299b28761ff22cd70082038b1cfcb85397fe28bbc875e5a465157 -0x5301c0879deb580667c2201d08b62e0120704194888c4f99470349f182d4bb95 -0xfeee34818a05e556443e7ce4a4cda9523bb839ce20684d1f16d2220ed7927ddd -0x09d149fb1781173a20523f61a84485c3ce87cae2fca3f83e095f3d965aeb0501 -0x22d38d007ce90e6c50aac45461f8ce6838c0097a14622186e4e4571462fac588 -0xd89bf3356ba88cc2a579a056c7e603ee6a174fa22cebaa7c5de277c9544fdfcc -0xf5c9acafcebe80ee8f7cfed7bc898504d7a90d672c17bc85a934a04d43f0c314 -0xabca1eb7f1baba08580cb26923e65a91d071058d384703f01ba72d8a7335fa09 -0x7f013b9e548b286a8379b1bbb12a55cb07b13481c621e35cb54f338b969ebae4 -0xe2387ffc8fa0104125ed23e5462782698f1c547747d3d123167f4d87d79406f0 -0x4bcdc8c23d2cf82370ab2638c4825375fff293ed36b33fd558205a4e52f6b0f0 -0x7d4446cf215f6a09bf25cc43116f0fab9327567c7f2baa96e59de49c81565639 -0xeb77590cac9c214b6c8de52da095419904ea4dfb8eab157781ecb5ec827a066a -0xcf007b79e85bc5059ecae7bfcc35f5ef5afa2b2c86935829dec05484428a0c07 -0x74dfa7ba8b26c1bf46980d7b8060cb1a37be5b909120e16c4e0e491beebe60bf -0x8dfd08f4d2ebaf13e0b94b3753bfb359a1febc2749a207fd8e6ddc2b0158b173 -0x8d7165fe508de54fccb20370d1db3e6846a7ccdec367a81af6453e13c7d9fe3b -0xb40ecea11e5cee698f15aa27c36ff259d922247c82a50739d211034f23c6a74f -0xbccb4ef0f4b3d2c8e1691724b4fe03d58bcc6b4f46829b38a760f09d31a312a4 -0xaeb9b89ad2bb7d876fad6d3a8622be0fc37a2fd6078163b0d583c818e39acad9 -0xd23a43fc2ffe76d5a313f09aa78c0d6b7b0348b63aa495de2229f9edb68a4c7f -0x875422cc40a0c883a763be9779f21e0a6b91c64649d1645d3fd9505a50019058 -0xbd9d5af7f4662823260cded9b3db02dc835e00ee3addd4650ba31d4f90a25d91 -0xbd74928357f9b9e0c78bcb77ad6e41fa01db6f264a6619b1925c86f053f5ca6c -0xc6b77fc7b2599fd7c262bd549b383dcf0204a3777babaa4a130287805556bacd -0x9922b4933bd158be08c402b91eed03f425f89b957f6e32cf5a5b86109251f572 -0xad09e25331d1f2b5807645e2faa0f4ef6969b9258e420cd4d6ac6433e84d4a08 -0x5fcb095966f8da20009db07590fcbcf2c6073de5564d4bc18d1581a3445dff0e -0x6c3fc624f33dfd2327fe7573e6ff7bebdd41ceb694113959f5b7894ef9342f98 -0xca957a831b3c801b9ebf2652c7e08b7744059d8d9eb84b9db10757a7bc16c737 -0x089458b3ff29646a542138aaeb031e1a36b3e7eca3081514985d44100400ebbc -0x625db8730bf8e01b7c86c69450dcef87dd0ec2c724c2c29f4feb4fa02c5b5f12 -0x63d5245cfb7fc674323ee69128a6dbf9fb2c2378f2b7c750d0f36fe30974ca3e -0x959f20e3b153693d8d264a54bb660d70637dfee3473b5c228b140af58ea0e651 -0xb0ed85b0ba76920922368b4091729bce4d1f08a0caf770fb2342e6bb6641f2d8 -0xc5a1f8055dc1461df5f6d54b2382573318a7da2891e1e7c729d5466f09c964d6 -0x86856f4b0c878658a17eb291d5738e7851eac7c3446d434c5fd651848479a836 -0xf5de1ac39099700fb91430f125a9c893db91cd81728e60710653c3c883cbfd96 -0x4c104bd78e0134d0df0a9c8e1fc37eda54da422614ccae8748bce5db98d875f3 -0x808214f6301d9ad8d9c586ad7dd6a7d05b22668c649399ff943d5c90bd185b60 -0x9a0bdcb70b4cf4575efe4896a8b9a8883bb8cc3f15014828bc078c1f59fbe4b4 -0x5e32897bf567829412aa294570e78055177ae6aa5ed8160c4049975523b75047 -0xcec72c7d35c14a12e409342047ae37e232fc4f90acc3fb56ec5ecb68f97d98f1 -0x051b11b51eb0302d2034e8283cd642474045d89b466a7224f81e195ef9ce92dc -0x925f90d4a832d0fa30b86af30e53500c9bd704024f70e22cac9cf1f6475e93d5 -0x5d0c49d964e9d1ff242c288759f0151532f930704b8e21806ce9e29a2a805698 -0xcb76cfca59c55a8d22ce59016e86230f21f94ce937d0c817da1a461b65a42e58 -0x8b222afc9edb3e5b3b469345ff4fdd72a214fb5bf676be1bc05caa5999dd3b36 -0xf4f9eb8ea7683e28cf67a2afe503b4aa2897d98ee7c38a776c51c96f211bd10f -0x10ce31cc91b87df230f0bc58d4787b03d66c49e46d26443b1c5e9e7e0efe71bb -0xa01d9b934e553b87a7ceea2c16f7addb5890ce171719f8f96c92048afe33d043 -0x3bbd028bdb5d8942584d4b9ef4b0b7ab2a1bf8daa0aad754f620eca7172ca688 -0x1d575256094b9ac7af7f5905b46959e3db1f856e631764819e620e87490ad49c -0x56cb3c47e4ead8f6bf2ee29d07559a79a6f616d259c99ac464474075d26fc41b -0x628486a27694d3b271985328a7f97dcdbc18205d55f3480734c7e1d91e38ffa9 -0xb5f897b6eeabaa13abcc93e5c6c03e61784eaa68c7f830424d840a52df22ea94 -0x195c5d186531dceb9656f508520b8d7461904ee8e68790b6adc2e1024b1795a2 -0xf7a19d543e635e1bf033606a545fb8c0861f96d2aed2a3fb255c1db85868daf0 -0x0eeaa6178eb7ffec373345664f5dc26cbc62b46249e67fb654b51df9e93e39bb -0x49ca17d44deb9ae91dfc125d5ed849a367318faadaf2f2142a8ee6a3dae9d5cc -0xa6354e6197838f4974362fb988788abd3c38bcbcbe405dee7ad793c455fa18ed -0x66d50d9a7785e54eea118e80a764514da7567233cd7ca5ceb90d792df8448a44 -0x2b27d3817e409de795fb66ab91186f04debea500e00deece6b987575fedcf120 -0x11c8c411f480a39669800d5d7ec7c9346fee476f61d9b8960bd8c073b2192e86 -0xde0c4264eee636c06255236f7e09d457484b09bd3e836350a970a7d4981b7e8c -0xe74fe3ab6be9f01b26f62d37293e220fd111b22d2c7b0a5d1c0a62867fe30c90 -0xccdec5769948d2319d9a9c1644b2bb71a05283448104233e00e59ddc0f89759f -0x96a5534ad424575e01093ecfe4c38f6f384191c7328586ad33e4c1b39fa0b7fc -0xe413f647169c5cf260504ba104a6ae09fa468d31b26c991ee842ac44124d497c -0x8d4ded2ba567c733e10b7504ec471a92b1d77d50d890144ce7ede3cf68d3deb9 -0x71fea4f2256b3586a3747f5c4023afbb327fab35a8bf639824af0373f5c620fd -0x712667a70187fbbdb1de5d90a3881a229e672b0f5c2ab16fd0c22180c6481be2 -0xc5ae872e57dc94a16a2ae9e38eb32fbd03edcf2ab5794cbd155cdb49ddd07864 -0x6b9b23f0d00a7d87bfa5aa81dd5e3601f1fcf6e1aa75cb3fd26b7811824a9991 -0xfe7794a8d6bd095c895be07ff604e31ea601821316f4a64530ee374714a118cb -0x4f3010f9b9d6cf676c79534c8230fec5c0e52935b6ba41919031767ba55bbd85 -0xca45a6e04a6213fc8f81ac940e26d1ef053c604f371031c703fca52909fe965c -0x77e13796cd76e5952a31b3664587ee46073b9ab7bc75341ea164ed0a700fc6c4 -0x91011153d9dec634c14eefeb740f03e607d0ba12f4e39522bf00cb47adc57b09 -0x6749ded346189d5d0c9739f536944bdb93ddeab223cc9af1fd04c1832ca0e939 -0x2a0801a11c8285e6a2a16aeaaba2c1783c128056d46ee684aa391c810f1cc201 -0x93a478c95e92374306c18177d2ab81f3a1297bf17b9a4fe4a26dc06f6c7ab4b2 -0xb4b6726fd0cddccf26711102ce5fa55dfe713e3b64eb1686cf537964232e4caf -0xebb1a86f13c34eac1311717287ff58a4a69e60af65e49d8e5d5d5839c37e686f -0x5bedbab4a9d3b724c536d517aff22bd13d9fab20d1b829f4895fa6e53f082410 -0x77cfbb440a462139da4b081d765524b22dcbaafa5676e0c7e0bc324330e05fcf -0x2a00fcdaa9fa22af11b401f4e58c74ba570ccd4361cf1b0874cfa7ce50af5303 -0x614af975a1146480b1c35f34ca1f17baf50d9084654f25d2dbf8d7814ad8c119 -0x8b9f428de3cf8814e3ac24883ac301c543d17f42df892719364ff0e6a0fdd39a -0xa5fd0c5f97b00f1ffc4a7f576ff15edf1a473b861f9183e4ffe14e283a93ccb6 -0x8042877788868da673af065c072b3526b73dc355f2eb8e3e6304ea3ea5db2808 -0x49ff054b182cf98fdf7365d60a3d60b8e80d00683ac00d72e378effee4a88f11 -0xbf00a732ba4727ae7ed5521bd35911e531fba7182c5679ebb532d5dea637f4db -0x66fc6aeae57a7ff087eb82900dda843072c6edc42fe64a0acc187ab2f56d19d1 -0x9fdaf3059b11557b9a60745210339d479e9605aecea035024cd4c6252d33050f -0xa879756f6cfb4ae78dfe03ff90a2a839f4157bc3acaee0a1c5898c23c573c831 -0x11c88c187e91d8076f3a2d50affac344f4c15146bc61f30f4f4699b51570daa4 -0xb5bdee5b0917b332623ed62165f612d63ff85efc4a34f8e4d402d17380c48908 -0x7760ec244c24c6e6f460d6ff718119e9e8d81475c8ec8f59c08b906640294293 -0xc7dc846616d3cbf2cd07a19bb30ad0a9a384bb7be58349988be3a2e744706ee1 -0x931a839b77e4706b509ddc103ba9d125192e20e3a75542bc925b911a54cf85e4 -0xb7ceeb593bc2575d784d99d2f7f593e6b5334210268a7146be4f183c4be3a369 -0x7886110213b7e90efea8604c92bfd4be9765c8850fce4627e18009e3b656fb78 -0x014f1a673124c91e3cfba5927fa361cf90c1d8ab2625f64b03a591d9daa3de0f -0x0d06cd7d58686adb39b71d43fca060428a948e50f03727edfb1c3049b8bfeda9 -0xa4335b5f4e2dd410124fef68e3aa4bcc08edf69b98d55843d6778da41c70fe63 -0x8dd10f44088552eba935e5a3ec86dd8e750aedaca8686fb237ca329268a8fef2 -0x0f8438abf76e89769a89929901f13698f2345eff3c966fc585ed2b53cfa4a396 -0x5df02e5257edc478caa35077832ba86e4084bba342905ca7bdeacf47d7d95870 -0xbdf962239263395620a45bedd33e24a52b34b87fdd3ca5b005d14b8f76557328 -0xdfcccec2f02bebeabe7fcd101f09780685ef341eaf97ab0e1b442c845c4bf66f -0x13c4db9d85eaac78ed37a9081a387d18a2defa194d64cac8e55c26dc62985860 -0x6d432e8643b1bc70b01b8fc228af71bb3b996dd830924d4518d7c5e71d45e830 -0x1e28384df7229b193edd108d4a7e6d1b03db727ab3d911f1fcce2435d05cb93f -0x124e52afd7053ddc07679bf4585d5285b83589bb5d0f9c6afffd9c8a75c83e4c -0x90f3bbf20a12ccbf97d71f0f42822cfec68ee14e1f3660069eac260ca58397b3 -0x056c036c1faee345b651a770acca65e9756ecb79b211a1d0b8a5520c977aabed -0xe06955ed4a8864e277bc72ff55c23af191e147a0434162796b981146c3f99e3c -0xd02f26e61bc606f70bfc8b8637b055c4c85f262a248dc5bef139390a5e2254ba -0xf0314d59b28d4e1e26b922a20bd3f056187c0a8c845967a5ca9c4c713d773156 -0xed26617804fc31a198200cdccb05b102276f3c0b87968f2ac66fe060476209c0 -0x19649789c68780b60dd11d806bcbef4ae0ded6a01fa6969c04f80b07931d462b -0xb8fdbeba8ebabb385a363fb137baea78053e088e8587d9d522e528a1baecd79f -0xcccb924f0c1d5120a58511caef98ba95f59311fd9cc19e9c2990be153b6905f8 -0x643f43521710ef94106a139892777cd07bb81dc8048daba68eb64fc8c9d33478 -0x4d5d44ca8db9b4e395939a85e3ef00c67ec9e6e25b5d35409daf7a39796ffe45 -0x69e28ab7e6a84f0304ed650ce0d904b20f76e3465a02fc5e31c2ee873ebe7e35 -0x0b1d1cdcf811d99874ccd8539f873ba8d118b62d28cd51e078e3be97dea47aa0 -0x8007533d27daf0ee806c1de8dafa3fb00b37ef3ff73cd25d7418f5a4558d673a -0xf65aa8307e10a79aa3104a9787b17cafa5b56e46e292e2cda0a913493d605c64 -0x9c0ff0e6c7353bd4a232c667a9620ae65dac403319de4139ea3b55106b41d2d2 -0x38f1f89861b598072b813d348c6bc29ff798f8b46c063537663dd5035f593d3a -0xf4d58cc3abcf7af8f62cae1bbfec2485971f908951334db556583dc0f11366c0 -0xf06a37605bafada3991d8cc3e8888d3e6fb00bf6912671d356e87f01daedcf02 -0xb47cf3e5c18dc2c1bf46d5f1590068b62f2dd12e279b76bd96c58bac12d44b65 -0xdb6e70756b19ddb2b0256568bc79aaec9097d89a623dc4d4df52188f56f214b1 -0x82227e0ca20500c96a9e90fc66a22e38fd10114a6e8e3fdb2541f8f1ead45655 -0x03c275a4d242e1afb20d8ff19bf9f1a2d18de6f36e2bdba3a3794a1fae2dfcb8 -0xbe9c1b1c1cd51ea513973444664f7dffe175ecd59b4c658f4e77ce70d0977802 -0x8596d500d9b9be70aa2cd2e6fdae7d75e00c702841cdb5486b827671abed1990 -0xef49d66b9610cb0ec9c69cd09fbcb50de565f1388aac3ee494fddaf2bb460331 -0x460e0bf2c45f61bd97fc3e1ac51d1bff3284ce75cf843c83df8d1b62c78ce084 -0x0b899f5d1a04ab8f5d48fff4990640e92fa6eeb0b77fcb9a874cce8b262b728a -0x8aa2eaaaac2eecb6ae140532abc7f0211fb0ee058a609c59a94577d5bafc1522 -0xd02c8f09d580647836c8a5cd2c43e5fa726a9a708beadd2e9b603ecbe01f9df3 -0x70fe86e8e22fc3582d28c92c17b500888f8194e183cba7658376ce2458ca0243 -0x825d756263897e37fa70c2866f3bb4b9df99b2db300a437affd6b869bd9cbb61 -0x65ab94231a34aa6e62b22105cb7c76923a0fda526ef5b766388e7a4cc12d341d -0xb3a3619ec012d2c3de1f564f567abed0b89f6d284b264a00e69c46af54796fd7 -0xafe0c0d8a79fc5f014c8728a7c990ba8ebc4edd0704a4eed30e0b483ed353667 -0x7db1b18f86db72309bbc4b349e7cf352646369050e6cafe6740ef274dd265ad9 -0xfc49fcefae75cd2f1c623b10d8b434be2fbdc2f815b7ff32b48097c4f97fa853 -0x1e23ef4ea4606ae0ae4adc8c6ed6897c34a0b3657a35a72c3bffa5a610563d00 -0x7202f78a0d2c47d44e04db74656b20ce92c868dca0c094d25627e5b19b8ef1bf -0xd54c124adffd61c39d2b8fc35c2350188a748f8ef2037fd87476e05aac3fb658 -0x2c472719d15051d5468d1d6fb114e8a21a89c2abe695019f0d110e65ad21a87b -0x1ed1a687c6d8b12f8afeaa3e269cf7e53a84a0bf4ad9dd7a4ccc09dd7490f68e -0x02ef717624582a97590f8a2bcfc127f1d79df8d8ab6b437153e214e5cb445ace -0x991f76cf6954165db7c5f562249470a799f930176915e9179ea7a47d70468af5 -0x760205734a358a1b04d0427789779036a595afb3983270d13eae5719810d0943 -0x4f7f2e85c6b7f487ae03064829f0b74f468d3ea2b835840b576a00dce98bcb25 -0x8571d7756642ec8f0bdcc289383f3aa33ccb72d56b87942798633ba3c0a4b4d7 -0x8e85f1d4fb7a425901f8987d07166e83dacf383b0cf2bd52f15f08f7cd9b1518 -0x521f22f84e977ead7f53398e62b001fd7bad2beee494518f44bd436214bff1bd -0x2b6721a2335b2ae28783384089e6d79f1400f9ba6dfcb01fb2d50cc19546eb6f -0x7418928976ac8b6cd182cacf3c4320576d036630ebdeccdbc5880e367dbe7e86 -0x6fc7933485a394c589a2c59b233beec625d15b8c80b6ba33eb76cc5d82ad6eea -0x033dd8075975a5d50727e8ff7c57317d5e5462b97e57e315e728c2737041c879 -0xa8f98b66539ce3a992ae0f431951c15c435efa796966704e1a4741df4e64aea9 -0x2911ebaf575eb668327b00b04b5606f7f102a22745c6141fdf632b01874bb70f -0x5cd1c18dbd7f0e3f073573f72ef12aedb495bfa6f80c2fb069ccb4426c4d8cd8 -0x4e3890e18a07ff8247b9e92b8af002ca0168a731280594072d2ef998a9da6ca7 -0x7b064be4dedecd21ff4565bf7033c6dda38f7dbd31ed05f7c9038ed8caeb8c45 -0xfa7547d6fd14bd968776bd25b88812edc5429c29648da4bb78c5ad7a2e5fdaf5 -0xfefc50dc87a7a3d499a9841a1feb8a5f35f9d2faa3539824657964c73f546b7c -0xb94e488a932021289622d8370961efc6966ef9f50ac11b3881e30b89898a7a47 -0xf04e7761260e62c332c8f8c15fffb07bac831ed8ee4ebaaa2303322289122c79 -0x7fec140daf463c456bfa93f6c1e9b1b1eacb864fa4cb542732a1ff5d93ed860d -0xe9db86dd10ae587c736b5be3aa48c731900fad59ce971ab10a81cf0384955cd4 -0x98905873bf195679c74e24cdfae2258333b67f236d37fea18b8eb86082527fa7 -0xac89ab94cff22bbd4edd2b962d93d24af29ed42d7a81ffdbc63f9efec8308939 -0x2081848f654645deb9207610ec4defe77e7dbe97239a476adadbbe31427a80dd -0x01b0892c2acfcdb2b82f220394f0b64783eb5505886dd2f6d048172b68ca0726 -0x8a00848b0219f176a0fe3075b8b7b07ad8dc80bf9f9ec4b95ff3b706b131206e -0x351382a758b37c7d9d569b554f71141e9859092332508a5ecd47226561605b75 -0xb76cd333abe27791b41489c3bcdf374faa5ed53736a475c7b69ea37991ebceef -0xff6b146b475bc4418c8cf3ede6ce4b087ffea94b97fe844c066555bf5246a9b6 -0x15d38e22dc93a83190caab22c2d422f569b3984169cc4e2f1bac99e3e314483f -0x45ce4c833319286beb55d77db21d3df820680db57b0cc0b3cb9b6115ab6ccc7a -0x56d423f80298c24bdcb443e92176c1f8c4bb4d187833aa02e6d25a0060e7d7f2 -0x40f6c3f1af7c079877bb6dd32c3aae5c8ae9c7b192e7920330fe0babb597be69 -0x4f79345b2841362fbc0edfe1467e7bae032aca43eb1f6a6e4b0402c009e7232c -0x84e09bb5db3ada625b16d0dda44244675fd65de6905f8d62bb9597b70e07a0cb -0x6846a4674c1d9b86812243daa35b0d1848450edf55bf53325c4d336d9671a0b1 -0xc055df039b376c7c86ecb06fbbca84d07ef3f1530ed54b179e8ec9f44638a882 -0xe9d44641b73b003f7e9ec2d941e890d4cdb3268546aa962c2d99acd28508ee9d -0x873cdfd6ccef511e0e78b7f7429ab4809495e2418dc19fc197ab967177288dfa -0x81680b4fcc0488365d4d2dcef95df4cd40840a1b6c9431f35c167f8b81b3fa4c -0x129f8a43d6165479d9c5e89effaf4f99abb683adf46cfe33bfe171dcef408de5 -0x4420939fedc8385c26fc61f8d6acdcb786c338df840514f7351df1ebcb35eb00 -0x7affbbdf1d0510b35976886723e1c86bcabbfae40ac16ebdcf24cd2e3694fd55 -0x2ac93facea41ce9f0db0502109b48adf29075148a4ac6dce68755e1a79ecd01b -0x4931c0148adec301699d696714e9b5e523ffdafdfea75a99ad641e43f1e7434f -0xf3e3973f6e41993ee49fd141f8522597e2807736d752db087a587ed0ad67b6c6 -0xe01efd68b93516e41b2522d38a24ac45576ba7a32badbc7cc9e7a9e939b79fdf -0x7446a2098ac4fd5ed6ccc06e3708f0776a75b4798c885fac605deddf33c4bb99 -0x0e34cd33fa1da3ffa377847606fba7bea35f5791c623531b453de82bd9190760 -0xfc5ed55e06112879d6382d6d412e3d005f78a744b2922eb1988ec6af9a2c0c6f -0x93728344c42b90ce8aa19c7b18e883bd127eb14050cb43d2a36ec81ef217dab9 -0x4373ba7570dc69c45f1a4daae941bfb9cad6a299e06c6339077b6ed6bbd43760 -0xa32ff16314e05b8d0a026e103fa09f4133ef27faa5efbb11be50dc4f1ea6f081 -0x25d4b76ee94ff56cd64f5f1e14070d4cbc502f10b6345370e050ca25883db906 -0x2dd4ddd5e03921f8a3801a20bb1d920f469032af38f2ce87b6e22c350c66f89d -0x86c373af755ee5ba2eca91a59f0254e9a5c27027f36e6729d2382d59c2599609 -0xa4a301e90bdd9b473495b52aea7d7e39e3d07c4a2bb8b59f7a547091b9c33c1f -0x904b491409aed11fe0bbdb9a7133de980eed26b7c3605ad6f856fae0edf614c2 -0x5adc145705cf7fb34c8b6e63343a6144c3c1064330c4723b9bc9dc19014f0450 -0xeb367b4a33ef501160d8cf43cefa6dea2724d19a7946fdd2e812670536748d06 -0x88048d929fd41128e81fbf374ab6d4a4eb8ed592787a44c7bfb0275d7fbd6aad -0x5a1dde4c9881bd59c67b693dfd76fcd7ebdcc213178573df4ca9d9e617b4c59a -0x351fcb3c0e3a853670cb1d24709b6d352d22ae4033a5f2ce5db18d159415b8dc -0x41f88158e6cc82b9af85353f54d781a8240d452250fbac47547538dfb80c5da1 -0x6d53f9ef6abc92e382816073a18397ac17b9a0e50982a0733a2d778d477daaee -0x9cb151ca5db63072c1bb5ff9a276cbbd40c33769301b8be95070dcd47472f47d -0x8fd53411b9966954288d61c8eeaa3f127d892ac48e44aab411dbe90bb4da0d62 -0x579c9d2831147c7bc0361b8c2dc1865d314e91e827eb3cc1fcb28d035439ae8d -0xd6aeebafed82c9e4bcf4580233d43be2c5b293afd36e8b093c0ab5a8caf69878 -0x41946f784081ff0ba2617142c6847cdb5e896c62cb4ccc2b095c7c6ce986a746 -0x5b81246b939a6dd53754ba88f81a859ffc8c26facf64184cf1f633dd011edb6b -0xce551e48ed38e98f3a0f3775ee406bd8b7868e5d3973e4cafb0d641ab011c75e -0x492c2c7e612fc5b6746ac366976092732ca22c4ccf50858e906ae3f9f32dfc30 -0x1aceb2c8ae1794cc6975799c9d5848f22e3b55fc17b46e8cbb71b148101a743c -0xdf498c05918df8a5ff293b9886bfff76368ff276fc62270602e36f142791b1e2 -0xa7ca95a352476aef10cc7fdf46004327c6cbee10683debfa2be5592da6c32cb7 -0xcace15fbd194e1fe250ce67bd699898bd235092fd4ab259d47de0fb48a1bdc7f -0x36dd7add4c0975225ee761568c1e6b082d5d804003e76b058079c60272e771c5 -0x1af860ccc7a65ed390d42a2dd94c256bde1cffaa1c46b2dcb5eddcdda9dceb21 -0x01297c8f18c63eaed25b403ce3209a31a09eb764214dc49dced6b6b82d5bf834 -0x8ff2762aceff41d017917a0ecd64bcfa06221e6e2644d74b39c8e75f18a3a052 -0x7e76f532eca268580cb1b7d290cee50ce4305e725f3bf638c4c7ab698ae42bed -0x46f9a3169bb3f299c69bc03762ab5cdd6a6810ab0a4a58cf1f218d3ab8508529 -0xbdadde02ae37cf67ff524648eb872f74e1b1b8e47f505ff22508a8c94da7724b -0xd6d0635f6c748ec4cb3682e167c85003bad14dca66f2acc70aa8d55d513bd7ad -0xb7fe75c01f693e36cd9dd69411848465cfa775e15ad340ad5ef059c5391ce89c -0xd80234c9881a1627590f5636ee47bcf05ea36bbfde12dc242c4139ff6543ca1c -0xf6fed8f5deac94ab61806b4f1c6dfd2fdbdbc1a846ad47ae6a8f3ec3b4b07a59 -0x3679b7f22dbe32b751f2467aa3395a284a1bfb2ab3e4e7f0d93515bdc8bed1fd -0x1a496eacbb01ef195855ceac73b80eb9bd302240baa3d6dbffa01c75f9be2495 -0xf6e833b7c6fc962ce1767c8ae0032105611bb1290cd80a00a4b80e5914889328 -0xe0d6f472906584e3add1f209f09945573e6749cb5ea78f8f7ee41459dbb3479f -0x0e85967cfca3a1a389575243a18afdee3f15e843a959c9bb6e3ffa8d7caf7221 -0xf9e935089a203d7cd0fd2e6251dffbab0073158cb027287dd0abc5f2e8690e19 -0x784eb04da590552a9f21b508efb362c6e1a7c8b470c0c5f9f7ae89bd1cc0fab7 -0x45f4fe7db1a68331851d96684acd948b7e896901b56be04dc7c2712a322b9c42 -0x3818f6bf04179802def3f1e498d0277552d48c8ca29fca6d148207061e6ee9fa -0x293dba7c600d41fa089f3552b1786708047642797ba2bc3d334c5a214e4bd09b -0x4b2604182b255f237a21bb98c77e97396112882a7030eb9a7b290abfefadd19d -0x853c3c782d44d00c76e064a6532ecdd77c52b9d8df9ffc4a884250e2981bd1f2 -0x049f6ea7646e649546b2af780b00312fb7714576ad6b3e18ce684c052c72c44b -0x5b7f6ebce402a506520894d87e20155f9425869656d7ecdf302884b738fcc1c9 -0x0731ba0e419b4b488192b126be235928ec96dbcb650f93913c5da5b4825460f1 -0x3f15dad254db702d57efbb0fb67c21f7628eaefa5e378cdefa0cc9be7b6ff839 -0x266a2123f39f17c1e10a1e763896adea9ffe58ef98399b1dcb26dbcf57bbd41b -0xbfb9b21828ab0305edcea79bb2c8606f923dab9aba2e8d10d0eed5c0044cf9c7 -0xeff56e70f50ceffba027f3eef86a40cfbf26e86b53ddcab9e70f2d1b536a9685 -0xb5f6bfc25563b9699a0add5e01bac8358ad119f6dca8408cf07a1f9a268341b2 -0x1784d78477bf36dcedc835cb7e80bd0e3d7896ad8b42bb083e09fbdef157a238 -0x7d38ae4b9bdae73d696b05bb4ab848e0504db0d101b6e2ae690021fb04485ed5 -0x163a6ddd14d145e2cfabf59e68f7bfc1c8c6acc23940791ba4cf2b91e5226a76 -0x961130b099e64378ef0527b2c5020e071fc1a06e1a1ebde1e276f0ef6f5745d2 -0x06d5985c05ce6946011d7cb49f10ee086c0e3ac7371241dc7fe78df7e5928199 -0x99deac572f6c61c5c86b9ae44d4e2a84e0a4a0206dd2e6b08107d75a0f8bf0be -0x6fda615e46eedbb1b4d4f8690ef854e0988cc2939e3ebce4cb70d47f9d14e1da -0x1fe454a4f2b2b9955ce853d1e658f10ab3aeb970407f3a96920d2055d5cfedc3 -0x955115063675e2489e980f9d295516bc3e0213aeecbed6f0b29f501a6a6fc5d0 -0x2ed75d282a829333e526d1703248212aedbaec765da7cab71ff8c7ca49d24278 -0xfdf5e9af46beab996a77b1e4b9df428bb4f09241732f7d6727542de394e9339f -0xdf7834329e2ecdd71668c191494a438250b769f4b24945e40afc2c58147fb077 -0x4bdf1e71c557ee8dde7024428b0a7a54290dad8047952e11c457f9c8c3a795e4 -0x1ecf4fb4193949a7311eb7df68a781e5c73861d5c2dd82cf8d1ac82dea294736 -0x2c07dc7cffc3cf9330c54464c7a29afa70b5b118fb568d6d1af8dda4dfdb532b -0xb675ad848a9fae6fa548d051eaaefdea64021e835bc656848f2dc70525182955 -0xbbb99eaa550f25e9cd28d2c86ae715f838824e96ffeca4281c0f7dee7c702ebd -0x37d9055031d19c9c814a695cf0e4e82e9705f6027983c85e39e232a96729eb54 -0x909ee07634408cd63666f1e7a62defbd89e1399d0dd2973417db1a4320aaf1dc -0x26ab63393f043181c242faa2b804ceffac03f99cdf6e23bcf098f13379c9c5e5 -0xe4f16c924ad68d8dec616f48e0929fbd10f69f96a0c5b3a6cc3a1eaccf345d89 -0x9272dfbeb03715389e6fdbfd3a56ca250b07bfc64a26454e33567ea7d600f081 -0xaaf424f453288dfc6dd5442bcae74b510ce052db4d7cd034958a2d4414a26931 -0x045cc434b54d50f8048a47756bc191c6251c4033f39af5f5870351bc7e54c8ea -0x8b81a5ba288b0463b0c590152fc0df6207d8fcf638ca42d7ef70445703448541 -0xcb20439defd496186d6c2d5aef587baf131afadb9e40053e57c8b272b09146f7 -0x99e9e71670bbc4857fceb7098d46683c7990e3806a72b1f0c8974de3f1368f9b -0x82d4db5e012c08d6c77970961fd1aa99860d440b1ab667d0b2d5f5e13aae4a9c -0xd8b681a79657a044439a83bebc965991dd8c63b929050b3790ee93b18dffe167 -0x9fdcfd03cbc981c2471a207260a7c157cba26f85b1ebddefe8feec5c4086383f -0x24bbf070710e49515c9132244fcafc3086f2fa3262da0a03e87442cfb1a661e2 -0xda7c928a532bc88513a998f8d21c37b531052c83137ad4f4a8f4e4a70b67c878 -0x10f3a71e56ed19bd2f9d21324ce17a946658d44623af715800da337a5d6b54bd -0xef3f91f1f3a7e646100477c02a242fe01a5d4ad0b2741e71de6e4a4d33740ead -0x3648e99e479631d057db1dcb79fc898730ba2d1edf22450f8947c1cba3a8b157 -0x599ae8eb3d79d3857868590e2f95362ad5228c74aa13cca8dc7883af9521a2de -0xf56b9ec3242c6d37debc776ec82675296986f01c2d8919c4470c6771844067c0 -0x2a2f75b4223ac7979b102507990a7025e113cd0e7459e113706060a6b158721c -0xec08fc09765dc5a41f649830dc9fb7e814066c674e031130c5c8e345fb495409 -0xe1bb0413c6d08bf359418a05665cfb61b5a64379a6de699eb864ee1f18a672fa -0x65c08a6d96f7a3cc2efb622cbecbf0c10fbf233d649008b1190fd53b7f77f5be -0x922e17f009d2ddf1f47484cae7cc26f8ffc08d3f5e2273f60623b4e970d20202 -0x63375e39212b370f62e78315261d150b0e30ec3b8017a82bafde80e1dff1a733 -0x28242e9c97272c5530a5c2957f8a25b5733d5b26e548d8a3457f7ac683eb364f -0x67bea357da3a0682a184d987b1f0d8a922e1d224eaafa968110b2c2e74fdf989 -0x839d4751949efe4e536f6866f6577f2136e3be6bc76f840151a577271db0d44f -0x17690c1188a4a197453dcf7c0a3c0ecd6ddf5d37801686c7a219ae760219d3d2 -0x3cc05f2aa9a15bc0ec3433a9ead2e853791753ee01518d37f89dda9bc9d67f93 -0x8f0551767a37185d2445614abdcf976789e6b160febfaf9a9902ab5be60b4097 -0xc99edae9915b1e350fde631175de5b856ed03ba86ad3b59015460993ef4c4979 -0x43a18550c27702e34d16847b5a52695417f764f29a5ed762b99b20765d1c0d71 -0xb5c08b4e44e09b92b5b88f0efc882b1dcb1242e643e749594d11db512abdac5e -0x399011bc4cd8750a7e0e07c7ff756686bd3b8c16567dff544f471ad2670eac2f -0x05a8c9b4383596b5a6cbb83fd2eec89da5822acee9676a062f53c03fc86732ae -0xd27630012e623325eac237360c7233a4f2c58e8df29c8f9d2331a1848946bf72 -0x50fdf69219755c53a27a5d2ba3315feac1b4ca5bb4d81eca015ece9c20f69494 -0x1c2b51102b8098fc75c6aa34da306ec6e4ca065378d84300e2c08167e3131f64 -0xc351beb000d6bd2f98d9f47974711a2b06c88c854b5f253ae289e6928565d5b8 -0xfab88c7aa0944548043370f441b217c9b6da424db589ef4ba58cf2c76e546b42 -0xfaa0f2f522e50c5d271da0370ff01153075cb8f162a32ecceba240f2f501ef78 -0xca03d92f2a06bbab63f8f163aefebaae72d14ceecd1365bac179e175a215c914 -0x7833ae36e28c43c42f237e4caef74277142c5933688ce1cf5a592e29ac65d793 -0xd1e5961626ad6359fdb1a98839cb834ebb5361086a5365532fefe70181f23624 -0x990a0e79d6cf915f1dcb99aa6b4b2d7c6b3038cd779d746b09798097e018e22f -0xca99877ef0507c747c9e12a2b3ffe5895a0d90ea31a8ae53a9d54e9335e6c5d3 -0xd3b42b80430751f365c8f3dfbe209c6e9c9bc88c852914f3a62ac1fca5c48fcb -0xd9937c4646f7f4c5a3c118c41a14c80ec6d11b186199e33f1eed45c7275add66 -0xe1a8acbb5cb266a0c5d5f85415443cdf4ba6d50232471e7c3aa24a4936530dd9 -0x9b4e494f0b7d2bfffa198df75794449942e6f1a6b73439b37bb22ad18d68fe71 -0x654b42354d4cfd2212e168c8f89b7f97d7693d63486cbee07c5066c2ab34579e -0xf8b1ad879e528ec91abacbe1f158cdc662e135b2d5062205eb2b279c0e29c77c -0x7b382dd3b6dfaddd24ab94ef905049530cf7055cc06b230aea0f3c93cb204f3f -0xeef5bf5a00443eaf6dc1576587816cbfe03590512aad90630ab22613a93deeec -0xa28384ee15e50dc1537bdfdd50e6fa5326db178a829b6e13828d4346ed8e5a8d -0xb862f3331fb7eec91349d58453559b7e252b45d07f9eda83ebbd52d95ba77837 -0x7a09091414df1643d66a47d89faba76fe01da2db8a61052c9d0d29698a13737b -0x6c244ca7d2e84d6c850ba2ef36fb28d1c70862acf2b3626de85559b2e5104a85 -0xf4fc73ca10c8962e38f5948c10c5a8aff68b5177863c4520bdb8f76e1c5f205e -0x686c8cb5bc8be99842164d0ca6519951a8023fe2b0d81ad78d8f18c030156e9e -0xdd6736188cf71352db21c92b85d52e77b7d9a4faa0add161387670d23cc3bc0f -0x8c0158ed6cd6a80c35fd5449555ccaf5da51cc9c7a1e2d920192a731ebd39282 -0xce62c0ee308dfc2ec20516c19b89bfc0eda2fd1110130e8a6f682f128cea10ec -0x925d93c31bfbed4801b4b17f158915e4e733e514bf0dc3f1dc03d357e768c963 -0x6d6f092baa920572b6021707248752445bfc9aca779aab241d5110ad5e0185c9 -0x0e9f01ee3bb55edf64e3302d20c7f281fa01a8577da9939b2f1651ddb82e9ba8 -0x78931ddee8d6d947fd637642b5ff100ba61c9eb5f12cb52f7a947715e59436ec -0xc7826d239f6ab61d5c6a28f3a0fd93b1866e936f628a47f5af6f0550a9cf2a99 -0x7282a911bfa19904275dad624e4b59488a71e00bfd2511f90138031d216de466 -0xf80c3ee4980dae1a33285943687270392cabf82b42ab1d02fba6579e7d82bed8 -0x19e02ed83189b48089d12213bdb701eb774af7acadc86bf9a0157e25e9b524da -0x2d9a88066cddd3247298cee792d326b0d0fe6fd0dbfdec36d3df27eb3cf5d388 -0x888d33f6edc02ccd962f6f325c7a125aa26f47985d251f7c24393bc918f6cb4f -0xa6aef415c01a460d844e778b607048b42749940f6c075479636b9ee973846752 -0xb932bdf6b1f8b9b5192ab14337e62f822f926572b8cf211e9727f4adda1d9b65 -0x6a38f35d587ef716c3912c212d6b69f5b411e16f6f04c51a74812d19eda080db -0x375f051b447dd698c8f739d2f42c156350f7c6d492c2b6d794b6fd3a0a29aaf9 -0x47cc83aed477914ba72e00a7cd92fddc268d3e2ab4d3dbf1319bdae12588cea4 -0xb081949c20de838f0bd9c7e0639852925ac50e2fec6aeae7cf402830fb6167c0 -0x7c0956912fd102e9f4899372dd9213f5f1543861bd6e8451b818e154df5060e3 -0xfe11a0d817e55593eacc70e3975a3888dff7e102badd24f5e9b7362e4246e1a3 -0x2e8c677407607c9c7ae0e88f974f4f862f37be01bf74ee4f104c48e024a53a69 -0x9f24520c13bb0a8564b593376054f63201604a5dd4851719f8709df9add92447 -0x7592626945d869fc0cff1cbfcfe476f8e1490312cdc437a4e5ccc37c7e73b02d -0x0804b4bbf1b7e5f4c782163873ee3746595dd0de6dcd479c78e7c1dc10ec8bf6 -0x2a62644450c5a5fb321f8bc6163d037b205413e71945cbcf91827fb121990aa1 -0x0478a394a32686ff2b83aab7425b42b39eaf9bf374124b4fe126bd136ae4fcb9 -0x008b7fd103448664a5746ae131dc335b6d00361561561f2a5884b35e5715f574 -0x04c946e9f5a0c85ebdf496909d126257d8b384ffad72b7fc54e12766b8f10bc5 -0xdea77085ac94eee086deac24f00c155ee32e5e30bb91e3f3ef33fbdb98844914 -0xd6cc4332009c28de1c861a4e02c38aee4c79946ff9f063c54e131be7e9472938 -0x77107193df8383b67b5b347a10e78e1b145cf5a36b80469815ee7931aa0168f0 -0xf6258b0a8630a944e51f5f044411017247a87bf232eb0439358c830ec3e5c80f -0xc88f0acd0725bb92d0e77c5f62114af46104b2562b0121cd08037710e173a9b5 -0x962bed20d44699001aaa098c3691432c59888847fe2a4d319fbddba9b9c7119c -0x41b207841bd38d0778d11190c51b51a5601bae38f8c028620fe6b9da223588c7 -0xd91f34814dea4ce4f1affb33f231cf6f92616bf7a4961aadac97ba31691e45bb -0xced7e906ba41796a58b493fb589d7a39c659e4ca9a54ee24c9e876c1ec7f3a68 -0x238aeec783cd2e2b4df2ea0d09518771388cfdc5aecb0ec93e1f2ea2dadf41bf -0xb6386bacde955e892fca0df7995894f73f3b22f3a94b34475ad6afd9aa4659a8 -0xbb0fa11a66ebbfb1a29ee73e5f17a567b2e1489883588144a409abe5a5020f3b -0x8410d3321273973921db300feda573418eb260de0c365f9fd99d52b8313af38c -0x41781892b9a9242f60aaaee5e7697c73a58eb3056cde03fd6595236f7250b6ae -0xd46b808d23dd8ab831f91396e1e2ade5881297d22d7090b7b9e550eef8772003 -0x55e3fd8df5a74ca3bdf5db9241cdbbc3332d84ab6300f6366afc136bf3d9b4d8 -0x8896bac53ac0473a4d97ed75e775e30c3a70eef02388f9c55b5ae2b5e8c9083d -0x3399356d3562b10ef5046403642c135f8cec25f4932e095582d9d97cac2d91c2 -0xc92c03a228943abb07abd310672907fadcea8eeb9b34065a0c88a654df197ab2 -0x1b6f2fde2b76bc41b12dfdba136c6f91f87ba137b5100fd87f3b18e157c8cac9 -0xd9b2437a06d20981a0ce5bd60b270df9482977a5f686c50731ef954a6dee3203 -0xab3ff483467ff1df6d4a07495e31ff3cc679ce9f097ae0e7b993fac4bc48088c -0xe10bd510f712b11fa4a5da72013c89a06de7a22c7b37b8a485ab6465aa2d4315 -0xf075374a43703eec8cb8413f664111cdd14c559fb85e03b38f074840a47ec8f7 -0xb512fb17a0187209e267f8ee8c0f315d02ceb3ac44d1741bfbc04e695adf017a -0x029356dc623fa39b235c1cb2bbdbd501b7cc5621dbe32b6b36def645a5220981 -0x0231635ed45faaddb18ef73845d5f1060fabaa1436b3f0327f42508bf3ce19ed -0x13520cbdcb03001a5268f0ad45f8704d5bd6d0b23adbbf53457815d3be462dd6 -0xf60f5551e0499659d5a35a75d80f9e3ecdd478875ab8fde7d0d9480e182364ae -0x0f8c9b6c9dca9e83409b4eec070863a96f35cdd1457175ade83b6dcfd79629e2 -0x55c445eaef07fc070299a94b6a1de064dceda10d45793b80e982dd8577ac76b3 -0x806625501853fe266065fe7f3c19d299721aa71892c730d73eba7e5ec88160b6 -0x332f4058510f8d5a7986570832cc7848f0854dfd750241a27830baaff1179d2e -0x657ad910140d8aec936f212eec6914e1054952c7e079d3727bf1ab5453b5faa6 -0xeda1e2811c3570db8f0ab00eb150a214d6e28cf93a6fb76863e90b714673bada -0x342bc64f2d08ac7d3719051e6576dcdee4669c20268d0b349acdfa316585b102 -0x76a32d12f51f19afcef01422a95c0075fe2ccea324793c0c98850ffe5c2bbd7e -0x4bbf84ac8ae78bba5409eb32ff2b281fd73c0d17d238624ddd007f4852bac99b -0x1d700f6bdbb86527150b1f037cd840f117ad0ccac853d83c10abc0a0f161e043 -0xbccbde449496b57df34ff429e5a6779fcf148929f5e2d6fd3c8689ac94318e44 -0x65afd9ff78c94af0a14d1187a149888ca589af76811763b7230a1e2fe21db99e -0x10aaf7fde422f2bf9db4a0fa2bc055a49d89a4e600eb4c23c1f72a077ca3abb8 -0x04b6b6047ddd70676609c61c4e481d82edae862fc5f91aa2fc19335843c7276e -0x5dc74d3d7a231e8d6bb18ae2b09b8c32c96a513b67d59f26d29c30bc0c38339b -0x94d853318da467d6c3fe6df873969fa6144320a6f0b0ce6a535ec6a73761d122 -0x8471cb5c24841a8c7b5d781a06c0cb5cefc6a5a2f1bbf275e5ee1cafeb5a633e -0x0c6c64e39d8b6294017b6222175f2a9a4edbf0839afa2778b1562185d43d3cbb -0xfb69a0be6f20a90cfaac016cd51cc3aca406266bf975e9f0df94ddb3069bdbfa -0xb41a7f6f4f35bcbc2443c96d90a7258e292586071e1cab7384495d1fcde2eedb -0x9c232d3c023f319050151b596100bd2d6a952c24d52cae3b0cabff54e5430202 -0x75cbf1ae72f7205edb16947d3ade5161cc18d267b9cb90d446685a133c06e8a0 -0x8e4a9b006578296f80360f91642dc79177632adf8aa5d706abc48cc8321cd85a -0x7e194189e583cbb16a42776127e70ab745570f730cc1e235046b6b3c9a7bf45d -0x6e5387fa5975b4608ccdd6110f2c8b3aa9b5e326308432437b6d4c3b246601dd -0xde0fa9405c0235f21aaa86b77df9443b10d3dd43736cac3e7c9860600a9bf41a -0x46457e46973f23d6b541286c13badd0206159f85eacec9a98c2906b09258dc6f -0x33381ad8bfa084afb5a8ef2a4323d3d16e92236bf6885a5c2a2eb520f4a45367 -0xe50fa07e43cc9747d080e35378c6a165c6175144eeae72edb68448afad5c8853 -0x47468bdf324f759f9851e42b1841efec4f134084f51b362fdbdae5be3f9ac4e6 -0x7687b31762efbfa2caa065c9d554d1746deafbe034580da10c94495cbccb9c8f -0x8802121ad2b6946581209637e0c167dab03ad215aa422783671b6879dbfb97cb -0xb76a35bed0aacc3546830c2d144a1e8cdd2a020cd5972d030d9eb19fe5477336 -0x13eb712af88f6e7fac5396c4ec691f4bfbd90176eb266363dbc1ee4af62d0980 -0x28b860be3a0095db568f5ecabb3f61036ca9d886b13334efc9a81231b7477de9 -0x8ddb124c0350095b4f00e185345a0badfb0b845c765a5cef6ff5f3b895be8909 -0xcd786801a11474077dc227572c8283081b9396d74b8b2c5d7ebf7ad0b980e4b9 -0x3eaf72b43536a758dfa42669507007ef925ea320537c2a640fde64723da7250e -0x35cbd9b4aa06aeeb9a3718b66861f7d5007a751955add3f7bb2f97d147c2d201 -0x4b930c068049bdd55a29803d53980aad2a29107e2dce46783547eb32f1171d02 -0x77307aed8e201a45d548756eddae7ad22c7b67b747348437085299b4002a9835 -0x1b74632038ff57c71e8c60668ad059d598f34d939526eb262e385f9f165ed151 -0x013a68c26bfa2cb8ff5d071cd757ac461e0141e2ccfbb7555f9a6dd969d87258 -0xeb9e3ff952db12cb1e67eacbadcaa078e10049e8e72b0c592db955d198c6c77d -0xf48151fc3b1e1cb3a2a3cc97fae3d9cf721bda792a703b86bb3d1ac5f5fa56b4 -0x52835167e35452564383d3b51ab6115057d636f8ef6d5c5d9b7cf773a4228b5d -0x25fb5a09ed5b3c0c25688215e25992949da8f6ba1a2bbb36bf34780a92e5cfb9 -0x6aaeb78d7a8e0dfce5c77e23ef620802214fcfbebeffa44cd9cb11efc1ebbadf -0xc2b1dd2c349448de67c92addd6337be514eaa7295af103b7227e63bf5a225cb1 -0x7ad8c05f5e005e32c9adc2e5be8efaa8bfcc6af149faf220f49dbb1152b7f30f -0x1f866ce70e54ea1cdfe369537917f6f4782d5d17f815eb316d3f29fb0d4121d4 -0xfd3ba3ec46bdfba5de0a643cd4a787dac0278370ffe205073a179869f67a6a5f -0xc2c8d70d874da43dfd959ea28ebfaa02059f8c9f8f8c85d26a21a6b0aacd60ad -0x85843af8b2fd27cd3fa508e313f8f50b5ecb3b844fc1821512db594eff021a7e -0x5a6b6e8cbbdc9297d7d5296ba3feaf6a2f1ac79b5fad0b3d08fbd709c8ae6fcf -0xc58659eb2c3a9c437951a26143ec295c1b33b06cac93b9ae63310f888f8bba5c -0x6b6e16ca7ff26146cdee5df42acbe4d6b111abc9e70cce39ccb9b0b6baa8d918 -0x702f7303a916d9f1367ff14d4beadd5643939c41f0428b67a32befeb5cac3871 -0x6e90680e3dd6f168aea628bcf8a00713698acfb6bbdffbd763017bcda3b0a318 -0xe8414f1b0af6c3f274a5c90e05390fcb8f6382c667fa9056cdee10ad311653ce -0x0ed2958944ac05c9eb704fb9bb1d18729cf8c4af3e979c69af1ecda6290f830a -0x07a33aa57ca5961223b33ac668eac49049b4ad446600415ace2f8d28d28c8394 -0x8872ff9b40f2b9022595e956dc7bd81e1b64c011e826421ea7826414d7ec26b2 -0x6c06528a01c6f391b5f0e245a4fe106ac249624fd29e1eebdf81b451f0c0fa3d -0xd7f843148001d2507fb62f43d4abb0cbc77abac426ddf231cbbc8defd7ac7f6a -0xbdc5c47526e0b2bdb53a8d92b55d2a56b7676f6d149bdc6b18d29edda2ca27fe -0xa7f33804b0599596c6d66aa724bd19824af0b85e1b9a5536fd6739a56f50c90c -0xd05017637d125940348f1ea2e6b05cfb272fd19b5e8ff3d8cce84e14ddfa2b55 -0x5be16a8e75f8a4c488cdd53846fd32ad0b6773213afca7d37c3be87a66d20230 -0xc027f4889f9e28cac3c24de2c930a9bb39c8e6c5ad7243607b3547efae620c86 -0x840a04c0f15dd65a7d5f21798cad0b846203ad64c101e62f63eeecd1aa3f9fd7 -0x447fd405a41f5ebfa6ea968de4b7c6751f16295b868ab560123f5d18f832a28e -0x20a68bedc36eb87849d5867b0cb2ff4f5266bb9083185ff8b67f7bddb7798985 -0xc0521d400f59b069180429185ce4c9ca5d75730f346419043a79137fa86909e4 -0x81f1f17bc64832fbbb969147286ff0888a26306d5a139c7ecbd2f82d7e06eb0d -0x12ff2d3fad8dc8adbce17d2ba65652da827a8835e986f93b9c0bb40d745894de -0x2ddc617897d3d517abf7e0bd961af57a9a6c00c7dc331c9696860ee3dc029b45 -0xa1697f02c44c773919d26cc171adbba7a455ae661296cc40a71be45ca0156b78 -0xde2567c058df9aee0fc8bfc41ca6c8609a88106926e925e099eb4d065de3a6cd -0xf5ee6f1fac5f9bb11a944ee2d5baed2ae9164dc2b2a2a2ec0d4554b42385baa3 -0xd446e85280bbf572c25130266bd55abf118eb452ab1d531afc828ac7f12e0a73 -0x5345638fda8e91d2a3691487bc17121587332bc31e0b5990f2d68168f428a022 -0x5156e1005bf45d59720bee5553a2eda4456b83524b35f66491251b55d07d44d2 -0xff7992c417c27d2b7fc41fe05879b90c9010c3733549cf0329426d70df68ad26 -0xf4f07e1eb57e2f1b34bbbd84be6cfc2cba7fc00c055e452a87aa6f29cfc07a8c -0xd8bb2187cb5afa33ec71d2a61360de8a2c0e8bcec0d1020c88a05377147e68f1 -0x3e66a8338b5c79118e1a1ed27a26fba446f7adc6f975c932100f236d9def30df -0x81a5b33e5cf08aff21ac9d6ff5e3b9dd393d3fcea2d26b59643efca8546053a2 -0x4174c4b02ede7dfdbe5b6375c55e6d154e5afdd6b0528428e84a2a344ef59380 -0xc7627394dec35c02bf8ab689aa1163130f669d852f3a231e2656750d2b11c969 -0xe24877899f560d07d786ee00cf9bb67410861dd00e9f9079c075b463f3a6d80e -0x67775a23e55b0320964f8917619963925b1c5a0f4a704a13ef97a7a8dc9620d2 -0xbe4d2b5cbde86641448db9d218e902587229996d7fdb51fc7320e0d6d1eaee0b -0x544a28833104ce7164d9f248f7f498d08d0e3689539ff3d1179fa3b2545cddce -0x42c02da5e03fab8a1de29774e995670a9763f995a275a25b338e5ea7a27359d4 -0xe17abbda6572632b73c194b2d77c348582a5d2af9f60d48fdb99d769466057d7 -0xbd0de668a1a79917ddc1ce51614e2228d12b0b1de9a7d23ba5950bc835c66f5f -0x4b030f8ee3d3b504244fa57901d4e9734791d90b2a5c6b929592b0b7cda973e6 -0x9d434e5fa99461e70e8cd4be12f490b3f747d97c483de74be52d8e66409df8c0 -0xc162c19bdb21481ef83788f02527f0ca2b6f9a53af64e957201765849c921c67 -0xa10183138462aa0e549c1db0c645d3fe893dad0d3709e1403f45756f92bfa3f3 -0x1425217bf828ac2640a97c8a816d7339c439ccff33665e6ed742c4f144d83945 -0x9998f7b860e2ac79b441f0126537135cb90519c2619f78db8c0155510d1fd6f8 -0x4bc5e2530529297a96b81f7930767eea1540623727982cfa74b9e300fa273f66 -0x3d75dc63825ffd04f942e976861ec3997d321fe73a4ee60fcb5af03ef441197e -0x5ef0add4dfd554045941ce51026ee8b5a7789a98715c64407c31e2e4355899df -0x97323ab47d97d1b8fc73849c822792f0e6b6601583917fc998a42218976b316a -0x77161e11fdfc68cf4de2f391cbffb12e9a7ea42053fec1363a89e165791f518b -0x12ea26221230eb667f22cfc0be140618007a0be49f28af85095b2308ea738bc7 -0x7dd5530348e87cf72493e8a35f9bdb7b2a4fa4d6676c3ecd536d39942126411e -0xa78e55a0a1e334511d435e084b915e840c47fcc568b1731e52fe50d896b8ebfd -0x1c5fe7ca866062b39e114627bc09599d77537cc70b1593ddb738aef18278894a -0xc300ff483e614e1a03692c29c61731e3f977f08a8d257a1b39baaaadd48db6db -0x55d90bda092d7ce1931bce79912420ab3a42aa05183f04e3c5388a2ba5dfdcca -0xb8d533b44508432c10966d20249be746a0a60dadaa9ecbcd018add95a8d50b1e -0xc0cca62a067d2d6109819a373211469698a024ec338fbcc669bc02ac49dccc22 -0x110562624f3f307ee9f2f570c7e92ac5402321359b0f04231ae58f3bcd8d7fe0 -0x221d83e7ab8ebdd0145277d7d6529c006d0c56ffcb3118a4ff79e7fe46c2cd7e -0x3112262b4f13099c951da7a1111da181267ae1fbbee63df63ca66cbf2ebde42e -0x1376eef34f9844eb2d8e103265b78915ba45fe3a0c315491b0574eab0d900908 -0x376257f03934d849d8ba2648322cb2db5f181aca9610f91ae87bb609b1fb158f -0x8a569d1edea4809a3befe7572d90addcd4a45ddeaae06717586105b866582a1d -0x3db20a1d2aced8877b62607e9f79980921ebe4b8e49686f255290bc7ad8edf5f -0xc63d48a9e2b1afa238d5a4f0de1edead16aac1f27837f862c0be6adf70ffaf79 -0x5367ef94cb076a3df028a6b7f860f73d26359d71392bd756fc8d01fd1806201c -0xd1a94e9124491db80c91aa51889948426e2e9ccc3b89995b2f32397ce578695d -0xd75e9b6abd5453f4dcf6b0752c71604d281ab613dd3677331722b8582866a8f3 -0xf00a6bf3f1a76f5eebd4bf2a62cc9fbc42aea61245d7e8c4be01e134840bffe7 -0xef0574d2ac850ce31ae1003451434b35abfa6b8cf67fed9a055ade273a3b968c -0x33b3344e43cb924c75684116d8a2ab3def499185a7dde777cafb217ea45a5b1c -0xff41c9aa9f2d5b15728684d1d6cfd5606256df374c7f98899d0a7062ff936cde -0xcd5071e09b0bd01c03d2f49cc600f79e7dc198943f64df162cc7109ddcb0c68a -0xfca6dce5bc2f06d47a3417327bf181032217cbe26ef812a96f304b48dbd82be0 -0xcdaee8e22e5c7f77c149c2381f65c0a10ff1a0d0de73e46c6ea3776f329ea288 -0x6963a775f92cd1c4a80205d4c3f0a1aa4521185d60db1239b4bb649a492ca7bd -0x225898479234d3cf460dcb415abebf107c8a85359545fbfed06ef8fc740fa808 -0xbb479740f52e700ead068012c375c041f5f6b5a588788e548816e5ee181458f7 -0xf0223f835e1172ef18622cdeb6b24865be19752c886b16f5a82fb38bbb7b3eac -0x08bfaf7c6e1d2cce4a004c2ccbe0befdc51bca233109c17b6868fb11d6c8e5f7 -0xdd4c79fe34b4055ce467dfb899bd42c1e77fdd45ba9580306d2e2f0a6d5e8bde -0x4732ead5be1e38c1f61abba0cd1edc9f8d553cc9a87bab791d7e0c44838d1ac7 -0xbad722b22d2e5e536ee4149545ee693ab1a30aaf8c8ca64413d54052100b4994 -0x7a5aaf989c03404a7d42a049be70be8d1899e3e402924117734b8c6eb28ec384 -0xca88c881355d4c905b9cbca8ba828eb24fad6f08f34942f81c9f7d611e8f7867 -0xfe24baa76bfac2531735d464ce982452ed4e99dc1c824e05829fa7cde6868e38 -0xd5494283955f1acf942acd00b8f1ed1c0dfeaeb7f2bc8b6f0b808c015d1fab12 -0xfe909975c9a2df7c06c718b70c11e938349789aad0bb35942643f6b1c6f42ccb -0xfeb331a3dd2fe952ced95d95cbaf71b1cdcba88f9dd57ad773c8ba5b2c75845f -0xd42d97a8d7d3ec00902a77acf2a0f0851781f70e434c6e4064ff66fa37b6d48d -0x4f4387cc0419918fe0f06423473bf42177fc0856f3dfd04e0f937d15fac9cefb -0x4e50e1159ad0b79977b0619d359fe8caaa474c06c8210418db05ded8be06fa5d -0x96a79fe927ca9cc3cadfec3ce0820b9dbb14cc27477ea0a4ad1b2c5d43e282ca -0x4cba629aa4afd196642e1faa777a383e4882bc3bc0c2bdaf74fb01566baddb16 -0xd61930a705f417f7adb66ffa68bb3fb86986032325dac480f30d3a85ffe2f66e -0x25c0c6bf020b911d0b00534f31dd6d01124070235d8b364c6a69375b43d68f07 -0xa6c49f47c867d60783873d2b24330d051d9e5c5566564d3f8a2da5903310f3ff -0x3a7ac05cedf82cbc980f58d43ce2f35002bacb1647d9781c5d65c42ff9f30ba9 -0xdc0ec2646564a8209fcf1e7605929a8e1e3513a1bac30bcf1d054aaee7b64946 -0x49434b278f9e06efd4ddbf12a29c08239b9e9dd05060443db2e5a3aec8fae840 -0x8f5edf82f9e639140f9f868c207a1c3bb47d03367be8e9dcaa46cda185c1d4d0 -0x98500589b46f259173a97609368d0e53b3d0686e58bf7a1c0a07003b2587ed0d -0xcd09b94effe791fe453415672b5816425b1cf8a844348dd375b214b9016b1a2b -0x21210b91d1cf56ecc11e71564dabb6fe3069ea96170ab30fbe3f9263db9cef7e -0xe4340c64b7b1766b59d503300fb9119c5bc11d5d23aa0ea1d13eb5e551e29a6a -0x62b76a46c57d985c7872078ad4bacc0466b5f75fbc3704786013fad35e24eb56 -0x3baee8d94ea18ee26eccafac090d23704cbb2bc2e2d3033379e0a3e87dec8f15 -0xd49128aa07746906ef7fbf5acca915096f2502f067d02e7f47143dca3fc95466 -0x1e94922d3572e7481e0c25b58d764ef1887989e2180631dd4b410a73376db24c -0x6e3dd8fe5b64e3ee0a6b26c2927e25f1dec99df2055ae1e320d4f0fccc33de99 -0xc8a4d88549a184e872499de0f33914660945c838f9ad3edf27b09ce5d6f7c4d3 -0x191ab7105e69eff5290646327c8d672c762a961e3fbfe3e9c87643b03018ff54 -0xad07d3ef2613d8a582c6785a7096486b0ca0c0782660cfc74962985d3856f055 -0xa9cc73568a0394e0e3bab59a28dbcfca40853feedea88a5ceae9bf2d19c3026b -0xdc94e8a2bb8d8a2ead4c9dec8395a39deb24caf8848e7bfe3fb559b05b578807 -0x9bb5e248db26bb453fa90bed42b57f6bd21307505d65564c985ef0b715ecd9fd -0x71ec24daa991f451ff34f6385aa15f03b0fb1dfc1cdeb22e7e3671df9e13917a -0xbff40bf7904c94fcc629d61081a6c21a4b0f98ee635413866a542f5405880640 -0x63c3057711a1ff1a7018c6970036af443b90122314f0cd9f6a13381be728f20f -0x289682dde00da5d021199ab032498236be708997d107bdcf01d3adbb414d4841 -0x6f2b040d7f14e3483fae65b48ed6ba8e6dd4ee1caf597f1b24a6b9d988d3e055 -0x8e49cd01271f5c498adb9485ec09c72ddcd21363580fdbec21834ebe0c98e80e -0x449f9d2b68b9d2e55a0c936549cd745656d30185aaf58b88c4789978cbaacbe4 -0xb37d1fc62a8b6e4c3d0e5a99e7d180a0b2a37d120b0833c8449a236df30aa4dc -0x7b1fd0d9a76999d7a270cefe373c3f5e2870b45925a175289dcd11fd14316306 -0xd7516160a586268e97d82c816914e7f08de0ba387d451c29295d6a2d3e1e3303 -0x03948db45ec3c76b7abbbee25a95388ff10da102bf1478d191cfb11043815f95 -0x5b3cbbcb730482c8ead47450cf15e94a99b8e3ed7d2c42ba668e49d6c6153dc5 -0x21845692a471701f9dcea7b3be4a00ba1476102478810e27f19d292c7a885259 -0x9720b696759df32e036c9a3e196082ca32713d3f931950df2f3ed97ce18f68c4 -0xc0be982948fcb619905489c189e4131b1ffbd73948383058d18fea35b91cd005 -0xf9722e888c1a25eca334a0edf4ca03fc67787a3781f0477eddee13c04f487a96 -0xad18de0279ea65845f0282029759b8db7dac19d7945a807c0ef3be82139474d4 -0x4d0f15e2e7139fc15c9cb886c2a3981eb4c2c39accf726da6bc17c3de3e78f9b -0x94c742ba36c83e12fcf9b823250536867cb6f183297208566f63fc4041629e61 -0x6a7c1ada8db5405eba2ed2f5170a962e9f5b339fe8854912c93e6acdf693b730 -0x69e8ea01425a9e7b4741111baf74a74b19fe000c87dc5abb1f2a6693c162926b -0x27613af804561920f428dbf4ba7b27b1fc9a60a7a37b88a2cbf577dbf2591db9 -0xc502fab78f93ebe7544236a0aeeecd2b77c647c1f8b53f870b9442643c7615bb -0xfc5a4d8dc840d25a2919d42132e4e4b20ad580587d16bd64a185f8dfe000e9c3 -0x5644afa18f25de2bc29b0b2fcdcd5bef90a290e052f1ae62855e1dbf3a85b8d7 -0xb66cf21e7350cf67760acad30c1caa59ac5d1a2092b1376a0ac10890a6b033af -0xc589d349a6b7500174e017c45dd59433fef6f1217f2759889601f084a2af5680 -0xbf0f194b274b6e47fd3a4f68f51f4a4e92b02b2d0b4c07411a7f16ff0879ac78 -0x378336efe4ad82562e4b7c453ae3a108c7e8229ff28ee3ea288ce43664bb99bd -0xee214d3c298c1c54db484ca09ce7fdf7622b4c8d819e8a67d1d6438affbb4ee5 -0x1a63474888d5340c337c81ddd8964adddd440245bc53e8d2d98d52779fcea8b5 -0xfbcd1f6247fbf63cc7f47f45e64a77ca92cf99f1a1ae6caffa61b5db5cb3f692 -0xc6849bcea4cd4025161e2da9e0cde8fd7504b06b146306e23b1d2c924508faff -0x7c0bb2a183f6fa670b3cdc9461d186f2cb3e71e61e6d90e265df6bfd7e16c783 -0x8d93458ac7ea36af9cf328cba6b62737ce3161fca50a214dbcc990f2b5acaec7 -0x0292e216fa78a8e2ef33912ad2e2a5aa5889cb0cb6668f914e4763118cb9f8d2 -0x64cb3cc9e9f03b5cc2b62b5588e718586f920105009286351abd97a5e837536a -0x1ea601594ae17397b1dbc49bea509d578d644aafb27be5a445a694b3151adb59 -0x34e462b4fb28a7396cdf19c5c4d8dbd13e022e08cb7a104a283adf1f23cf392f -0xc0014923ddd2a69b885a3b8384bce5708e2032d53960050afcd928da121ca1a3 -0xf167cf850c3ff52161d0ecccd1f5ebc530a07f7d569e37dee4397ea5ea0794fc -0x6c5b3165adf138f0bd5a2cc6039dac285fbd660305ca37c318a58641f4ef1585 -0x4685a35c472fc3f78d0345b6b543514a91d6d816815827e132c2c852d9f78369 -0xff803ac82fc702454731dcdc8bb280d9a5103c07e5a21ac3009b95fa810d0a54 -0x1b97f888ea1dfe6586e9b9ed429930089db7df6c6b543d452bc6c8e3d5284c2d -0xedb26ee9800d799ea84cd4776be25cba6013a117abfedee8ffedaf38431bd0f4 -0x3d3544965dcd044da223df4ca0c97314b1d8e7448a914570207a395c2df3b91f -0xe50755b303d25a48af3ddf1e8559a8c99a67de548d04635e8a8e14889ccf5ca4 -0x6ecb3a10ebd09a35b8bccbdddb26355ca4e969732c86fe9ba8e2c9e0ff5de378 -0x968898a096244f62df486814cc0fde3e2bd1cd8511a585b8958553c36d124664 -0x7be84b1b456018d1b362e16486adaa7b471e27a193726c11f91ae5d45d6e3046 -0xd2d3c27c834bfdeb203f5acaeb705460fc69ca6439066f4fddea07ef4e8fb8f1 -0x93a4fa1842b51b27b259587b37e3c0cb7893d118d5d82a7a91883a174c7ac079 -0x8423cb6208638a7051a3b47bdaefb4a05c2b695db0c09fed36c40ef0398834c4 -0x1a12513e76f086e0aa7cd587b33c2b9347410658089ef2de6df0540903cc28d7 -0xc77bcf70d09ced53e9b7be04a199153edb02c15f9b204e488453381271607eb0 -0xe772b59814bdc0e2dd10bbcb600018620ea9818a5a6c8dfff04bd5b380969ddd -0xfc4942a65337f3ab67db54c1a3329d22fea5e3d0005d37b360d3e3fb62e5ba9e -0x30fcbbd43c2dacc67bc0f6da38a6c01df1923157da2cb3d12174da17284bd80e -0x7131f76b8fcbb0d6562cb18e7b1ec6abc35b213eca7e0c882b3f50578b5e4103 -0xb5e708c113be961a4eeb16ba20ebb1b5ed3a85a74229d8aa40dbe90cc085adef -0xdf1a34c10e2da5c3671c79f1d5c6530026ba6b418cc661f884748709cd1a9f8e -0x7c30690141613c34ee7c10b7bf977cdb1d15c43f2eeb5e4aa705ebd57f2a6d18 -0x7662659e164ea36fcb988cf4d84ef14fa923d6aefcb5b1b3628a615f50a71205 -0x50cc93b2e48d90af2bf7b81f4e1900825f73584ad3bad501d18a50ebd7aff97c -0xd74edd786ad7b067c1e14c23376dea9afa0099d13acf2f413b9a59e3f69641b9 -0x3d941c82f8ce941fe8b6f07402dbbf4e164b56a9d11c2c965004d430a7d9407f -0x03ed2a0e67787951baa8134f3579644d026cbb59ce874fa70bd4fd5ec1f8b4ac -0x696b5d4aa2d1b447ea7e4eecddfad0352d194f234f7ac0a13d66a9f45aa17826 -0x9b93ca732ed0f285b391abee39bca244b843572d8a1f43812afd3218f4998a64 -0x65a26df0eac24e1719172806adddaf423fec4ac2ff1c6a0f1fda40e81f4f6f9b -0xb069118f0f9cadb3646721252b1000b220403e76bb0394123ba4a5c0164ccab5 -0xf723cde8d43effd4565b8c5fe1c0bdb944849f9b6a98639c441bfa44233e332a -0xb5a661247065dbe06a238e9ebcc14c4a1bb5f812f35f84dbc3c9b31ba5b3c10d -0x9ab9b4f9b5a88fd7f96976f8bd006bfe5d5aa455b98605e4fc4dfe78355d0f28 -0xe0feb3d769fc7ceb39e85fc7559c9cd503aaa93abe988be274f2d19da3a12196 -0xf4f8a1dd98d66e31e548a9a1a15555cd61f7258aa169e63181bf27eaa08c728c -0x8e250147c20369ac205fc8867165e4a326a322d5448299fbff548c322d78c12d -0x5eb311db5c8fbc7549f33c38c67f50cbbce92a72f56c3ea5f1a98dae64e8c5a4 -0xae7f98adc523385e2e3ac481d0e87d6b8c693714cb34879845ca48efa5b34315 -0x1cbcf9da04d519968f7c9823c6d4acfd2a9817866e0e65724f0942131d7032a2 -0xe87cf0d89f427d1e266687259110da357cdf2289ad9c4355066083ba25318807 -0xd49c412ca7974aaa4dba0a2033580b4cd952d8e40ce1de130d0b17fd210bb434 -0x0cc87a23376e1dc1f2b9a2f9bbae4b4e078b4070bf344ee21eaf7d325d0346d0 -0x20270e8c24e71fa19babd22e893a887170da9340731bafc95256eadb7a08e2eb -0x107da12cb227a9ea885a808256153be6b27ed99f62229dc2404f1b751670fbdb -0x2b0150833e0d8f0bf7b3218ce3617aa630627e52c281f9431cce56bc0bfadaa8 -0x473e3b8fe728fecb748dd2fc520ecf8d8719064759e36e5e8cdd708c47bdcfe8 -0xbfae5d7209a54d95513db5d823609050f74cafb73f93b70a5d369d7d2b1a4d9a -0xaabf965ee953e519fc9f96bead3920a72becaa1c80169cc69eaef770890b9634 -0xccd6aefd7d2ffa641aaeece16dcdd90a1d9f19e19813f21ba28bf7822ea3a1c6 -0xa8f66f0baa80649d00f5674debc34fced75c5ff6ee190f734f1ee40c33edf1e2 -0xaeca18aab6b3708178ec1a4220ee9cf8996829d312aa7b7eff6efd1780435c64 -0x1d826e46cce221b879aa9fbc785940f23a8c9b5c1b372c4eff4e6c41a2816e3a -0x59008487dec049af3f22aacb36aa300087fcbfb1aa882deaab52d38f890efad9 -0x517c4dda88c9f90db9d05348da3b30c1910da663725061b27f61d474c31f77b1 -0xb226b8cb20f8e8169a60bcb67af5e39a44ebbc66b0601aaaf9f782e9a1bbdb06 -0xdae8da9ca2066e7d0caba77224ec8d183a656611b3b0be6cd952a593c2c2dc61 -0x2c23de8b3008de553448e0968488ea51a28507b23ff3ebf2f32f0026c312299d -0xb8df025275e4c6902a09b628410a2881421cec2d14f5f2eaa754aae917b5b58a -0xefdfbdee972f7d9466e801182d9f53abab7d4c6e16ff332bbd29ba59906b4b6c -0x31a5b2d43a56e142631a1c45a9897b6fdb3376281d993f1d244e39946bdaac71 -0xb6c402a9e7b841c3d820b5040dc840ff11d4b632f4516eee160705d060b6d185 -0xe6eaec7b523cbdf28c6ab1a0c00a1b00dd8dea5596abeae265a095b47810095c -0xeb6377e0a0d41af384d7065929e6b10814ec07a7d2ede0c6b44317abd6de3a97 -0x7a89d4343f84e25f67feafbb5443312f454779d059f8d47c740b490d9cec060d -0x7a0b9f27a5274bb0f8ac889185c7a33121d2649cd8d571e34c60882e0a1fb635 -0xbd69ad3e6722d77d0dc0a6a9cd9b796b7d2ae498398418ad7c074bdc7bcd0fea -0xf3c6ad21be4148e7794da00c5c4ebf6b2275b079d882dc03db3924f8ec971970 -0xb09fd412dd9358ecbeefe6f80c4680d68019b2e889e118adf79326250f9c8eac -0x015cabaf9c26dd18dcc34514a212be44e331e38c3bf99f9f9c432fef3354ae0c -0x657b8aba1ad1e334566b2ae9b8544ece2d4053f3657e7cddb12a8a03f1941d81 -0x58cadea085e5d1651b66db27afc7a0c7bb91a926fbf0013b3817dbc100619044 -0x4852a1ce256bae41e2ea7ca07bb949b5cf49bfedacae55923285b25fcb38339c -0xcbaf4e93bd26426849e5dc0802e5a939442445200aad6c98cccece98221e3558 -0xae1abc10874b47ad7bb15b73365cd25157000258d0eee80a4c454bbe6ce98404 -0xedbf9c51a0baa35fc87b4cc2bb13cbeb7892033c201ed2eeae63f86c7783141b -0xe2935693dcdbde8563bb409397380b608feee0d1ce1c58e52d6665a420abdde1 -0x46c7382042bf5856627cccb8ada47074d1d73c836fc86e9ab2b1013fb6fc2d50 -0x8d5ade9213f180af79d3fc63fc62225ffd95acd7a6c341a63f5cf8e143791ace -0x58537fa3a7961c4780ecb2257ef2fde6e831558f010e46e4b073907281d46963 -0xc0cbc7cf3beaccc7a2714bd28724c1e94d4f955620f8751e288f6ea56cb34560 -0xc74272d21f34892162a10af4dc25688983230438c43b1d2fd36bd767a8848819 -0x795143f6c0c6653273cce3f9993db01f8ca33ff94bf7601943ed7aa8006fbc93 -0x2b057cfa37dc43636ac199b877931ad8c31c62067af8eb1ecca0d3acbfd7f9e7 -0x99c974afddc928a68b5cea42a65f30833cd1613471c870b32d4698c051584a2d -0x8c60b187d9070325adc22c132a1fe33c1d73677be9661a45b8b306bcc32ab0fe -0xbf7fa76072a20d2a0b0a998bc6a1af9789363499e741af322211ae28e8e17dc4 -0x4f84d57ba2e485e6cae90cf73d1b3c83d1a7f545be49b159247b2cc88963370c -0x9a8d05bc06683942ea90d62585d9dbf41bfbb759dd0b93257f87306aecd67a6c -0x9e8b5bb83835da8c42aaf44ce6a9dff805849358deb2aea5c18677d83e931939 -0x211be2eb547256f0eaaf8b779e7d67103c58e73ccce38e5999a407cb09b52553 -0xc3c097198eba65b980a7a5d43f99c5285f2e06cf4a9804182647ec67b2946f77 -0x4445ce550a5d693ebb8e36ba64b5e2d4b07ce32f72cf87e0509af64cb3e362e2 -0x3c632b4b190c95d052e4d6f90d26f7710e77c6059d6184a089a423694c6da7cb -0x1e39434e4616f1e99bafce00cee051d1597b1fb191dcc47786e65018332f3592 -0xb0da59477831bd84120472beb527ffcae8f1943ef6da8776ef26e802e23d9e58 -0xede47e4e85fd108c9decf33c37375de47498ef22da03e0d913accea02ad28e56 -0x6b607c729d8eef4f957ebc8f50a768b42cb1f7cf708793b0c6c9b50a1348a0bf -0x2f9249d2559353ad35f648c256224dd12deda778e069213c4cfa5c57e37725f8 -0xa74c510270c88f570cc09a5048e68b562d2bf23af46fba25a51d60bea17059cd -0x2e78dac15da16f3b96fb6ea66f58be4dedef87de7c2b759bd99ee96300d18213 -0xb759d82d84af718f5c7a5c74d7f81d0c54ab3f691296b02333524072129aa200 -0x676e2a28298e7175126563b19e2ce023a7fb34aad4c5caaf1f1e9b47e1b9c008 -0x66eaada03ce13bcb32531b89d9f4be0a7f1d62e171963aed363f0c6f5e6795f7 -0xc08bfdfff6ec0a36aa05eb8a9fe3c54486400bf2d262bfb5b8f703f47651d106 -0x6b1812bda64de279a4386b83e47ab2291d91127d522141bec0f3bdb5e4678f74 -0xa01a70a3172dad2b6fc5439a00d62cf6ba0557c5c55c4c4a218e375c750e67c5 -0xe835d8a36237e5b19ef61aa1374bc7ddb9590fa4616951c187530126740ab8e0 -0x29e95a88e458c812cc867b4956ba28133a26193cde4552cae6788c3a5b7ae0bd -0x4df048b63b0c3370cc71e155531697c77716c5e22e94c29c64b064d849bf7a96 -0xb8371c4643bece306b1ba8e510b8db04eb3d48650a79b3148a61e178bb3967ce -0x9766983e9494e49be3ca2986cf47c47fd0764071a6781ce404451541d868dccd -0x3eced4bba5d4b44aa219b5708004633137f2012b827d5a15cefbecb26f3d96ba -0x7eb273cbf2227158f67b1ca13e635fbe65bef1b58684fbe5fb5a3e3be178922b -0x9506e7ba8b647e974c90e44416c425337171d710f9a1e9c44456ac4c85602523 -0x9f19e10399e60bd9fa25eb1fd1e4a20c083c3d4a49608b6e950f5b04d9891066 -0x39ff368c4e5b9ade89be504e886eee6e4678990708cb518c7be0d07c84df45d3 -0x1500a50b694ac179ef3da72330ac0ea420018c964c169e7afb72dee5a93e1093 -0x12cd2a986f0541ed198eba13e20d6a4931c30820e4f27eb70326d429b22c8bbb -0x2275085fb8d226f8f36cd19166bca11fcb28e0a4bdd5c3065f2c25a674a33b20 -0x9d4f88d9045b71e3393b20a634a85da4f523a917f32b0f85372b12527d8644ab -0xc379815ca8da6ed76aca3367244e00e44401862b4fbb4f20f67db7c401c3dcad -0xd472f8e05357a837470642a09adfa764ea60b85f76e13aaaf9dab0317718995e -0xc02d0ed8031feaa4721eeb0510c29b722dd1db0a6629c14c322c164f5e662fe8 -0x368aae9082086b1400b14462f39087dbdc85e46be591ae0a04643db6484154e4 -0x3f8fc65927bfd4311b926769e96ccafe8c5c6922e9450a421b7320290aba1be8 -0x2854543fa30700bcead7744be64793abf6e19b1eb8a49cbce41485c6b7338625 -0x3cc6a4352e087fcb372d408f9d2f49dca5190995ae11bf60f133702bc8399401 -0xf002225d318a455e009ea7397ec7fcd70e0024a4c2fb158d380a1f07f534f0f8 -0xa41c1dfa6c93f2ccac10196fcf6c4b0280090734512ab28edf2140d44f2d6cf4 -0xa36829b6809f199c59a4ce73c15ee13daec4ba81017bf81a476083f8c7b901ca -0x4d33c927c808821a1d720a443bfe18e2e5ccea323dac94d10fdb59705895e51e -0xba3faf4ac9cb2869d6b8d973ca58e1f97c13c13c4cc7f306043d9855d5a913ae -0xc369377186b996ef118b66a7c9eb501978ddabe58533cf2ddd86921a9a91a15f -0x7d67adb27430b038d925a6cf9b5ba61d5af34807b9e5382676904d176f834e18 -0x4b2f658a54928e0c6526f40835395eb924fa0a1b0689f44988c8b0ca72926bbe -0x3763bae70bc4d4feb5aebd974cad269294fb1c2cde6a9e13ffb624992b515702 -0x0839d64b1a8c32a8c7efbc8ed5325aa980ade8822b28d4b4761f9cd2eb6f038e -0x75a5f277bec50d8449697d45314b79d60e409212b8abb907b3ff1210a646d4e1 -0x9be82905db8d73d9e79c890113ffad1c366b02d9fdc893baee0edd78bc299cf2 -0xb995ee23ce7e39d1bdd2bccc5b3d792ac9f6a2e4b67c6c2682091588e62f5233 -0xa04d217406e32d5f9beea3513877555833cb844a2aeb8df7e80631c6d79083b5 -0x54d3520846d793f4794c28831acc5f1f55c0a6da605045f196b4f6a2dab8aebe -0xb5b8dccaff433da25dd48aac8cfef914e286140e205b7051675de2443ed7f3a4 -0xc1e8f22aed453865349ac7f32957b308a7acd480ec8cc47547fc6fefd6666f3f -0xa62f3947209e6284622a9f57bbf290080bde5ca57a84387a459a65e4cb6ba279 -0x88e0408f1ac74cfe92f6c186a6ef6bdfceaaceb0e7b9c5d2e89e3aefa8cdeee0 -0x0d2115714b0701e0650becba7d85c1b37e42f9c51deed40b6cee76c141af67a5 -0x308f2c50f881d7f9c01d0abcc76b99d3b4ad0df07e3e22da6ad4f6d172339cfa -0x8bb89d155d65310e170ffc3e1fc5d5e9de6e38e8e301b4aa8331d613fee718d4 -0x59fb233b8feef31a26e113757e157ed8674623e15764555a52dfe9dc7d1b59a7 -0x7b816d7294cb0bd9f99e127f1ea34dff4621b902434d55d4172660453df87a47 -0x0f85225e4f8a6f5444ffaa5530d1d8a1836f6863deb905d7d14167b8bd84026c -0x3851560cecbc46e6f0c25f729d92361239ae401dbce5b427433e923efdd710a2 -0x7a1a2eecd4c905bc9466daae9a7e477810c9304e2a5f58df5a9798ad30bf5dc3 -0xa3c4a79594e7bef03ff427a7a92d4b81a40491cb6704ad796b289b2cad10b2fa -0x59a4f616e370346dfbd1751c728087caf32c16996145d83660fc77104e5707c7 -0xe522ad1a32b36d70417dc9f9f3f49fdfbc67c14e7d3daf0480e40156385c52bf -0xd5a6caf0a0dc3421684c6909eb9ed33bc0360ebb85425afcbf9d7f0e8774b0a3 -0x4fd2f21944e84fecc5dc61df1ef9008e6474fbc6a0fa67ab21448c2d29303c73 -0xead04eefd7f038a662c255ac7e9bbe3373e7f71fb26faf369d36ae306150a071 -0xfc2e22875b7abe02fd00ccb791ce380a5a7530565f3865f7bd23dc701fdf8341 -0x22579033c6de4b85e0a1b4dd845929c3a3106761959eb949358913d6ab5210de -0xc6aba5eb6ea37776d6a860804962ff0bcac97408a613cc293d1af46310ca956d -0xd0c3a75b7bd5304f918065a1f9abbf7a5472a973171dd9f047f32c9c05e67cfd -0x34a9e714b48d7adb2439019d9d1743651154efec063e786ce893aa9409bf8b25 -0x8792471edb159a88964c7c27d9b3f0eac1c18128c88054b31ebd5891c89d9e22 -0x881e158c6f6cdc9d694e4ab616ea18cef9bb76195eddaafcd60593235a780498 -0x4414008a1a2fe968bc8a42e809e6268fff75b95f3e2f4b522ab58b24119cfb8b -0x0f1468244abf922c8549121da645a52a8df25e277a85a69826c64512351dce51 -0x6a6aa124ce528fe4840cc5ff5fdbffed2bf0383446165392dcfe4ca46495435f -0x4e04b3077601238b0cfacc9538bc0ef64f37435ba8ca66f1dafbca5aa9af3051 -0xcf19daf46f089e87191f27b990c281361f4520795a0b4562922d17a7e1413d19 -0x1a4abe22d2a79690624ea6944be4a38048f3f68c345a8f5acf06b2ce82bbec1b -0x23043e0632592ff1776bb3c705feaeb47bbf6f7603e7376197f917b15bc51d3b -0xbaec2bac65ecc48dd48569d7f94e134e822b43dd801d0c9659769ddff2c3d49c -0x4bece42b175783c5466551ab3c6384b2c6dc0615dcd0299e3bfe9a53a2ca977a -0x77eaf753d233d41c0d9ffb15d8dd84113a3549549c52dcccc3217e2517d72f0f -0x6bbaa74313ce075d62ef95e83e5ddf28ca46f3ea1e9faec97d10e3715854f251 -0xc18c2ab3cdaa17b339c2f9641c131f7daaeb48a5ea2139ca1c1b396172be1b09 -0x5af1c21976f36dedce38e62d5728de29409699cdd58e7889e1abc30ed90687ce -0x5d26112b3a06c1f0a036550c12365b3ac8bfcd392efc089ea5a46d75a6d966b8 -0x9506c043b9ff5778df7a254726ba7862ccf1e003e1bde8ce667880e316eeedf5 -0x5e4ca3fb0152a7655be1324ce865147a30319850f5e7d6fdd3715dd4b983275f -0xf6c62fa5a166bfbfdb26a2fa5d563ea43aaed3619ef3b5e90583f5f803be7185 -0xc661234bb0c14238f821e6672ea45d854d76392b2aa53a16f3a2e57b994ba7c6 -0x26db3ead4442db08f6be75e3dfdc95cbba86e329f3fd1f34c2a355fa43184131 -0x9c4df680551aad05a3e3123053e2b974bf888d137036330fecbd5e0b9795dce3 -0xd6d96bf41cb5f260e1b7e09957bc2c2d7e39eab4584de4f38e0fd110c956737f -0xd2b551cd3d1ff8046607607357f560d25cf46fe14f55bd31e08e6d53bc9c19c7 -0xd42ac98a4632fe519986a5bc78be39a92cde505bb6abe3bf4bd95da5970c8480 -0x9402cf10bbde6e1111bdd436d496cfc760be4aba1cd8904be0b004b370889d68 -0xfc916ce73268988b32558143d03274a97164a3fa0403ebd1b883010d2a2066e5 -0x2964ac74ac2cd17708d75d890af9f265acac9d0852a647169977fe99a61ce498 -0xf8f14f6e0a6d5c0ff0c9547479cf84da7f4889493be7b0f852e69d7a9db32131 -0x8ef44e6ca1640de02e4653dc3c3a39375fc223d3c8477142007828e087fb8584 -0x5631dda5773cdc312807e5224215b6dd730daa1caf62a420bdc56a12ecbe0d4b -0x22fce6e01e24543abdd5924a3e112d6b0b2a432633e0ad6f3c732eb3f225ee37 -0x97cbbce1b35d5ecc68a239d3a0837b09cfa0df80d2b40ead2fe123807d979375 -0xb8b2fad529d697d7914b822148d523f71a4bcfd2480adf84b01c804d8985e93e -0x09807c4ac70011d609ffa69e5e2931348cf2bb8f65431315302433979b1a113a -0x90d7a595e14dbb20c6d8416adf119059458158d9efabf9dbc2f4bbf2fc88698c -0xcf365f544cc714bf171c4d2bb2f2d3da304fb5288d0c1b98772115d7bcf13b03 -0x32109c5d35d4ad53eb7596f92bb91c7074a417408e26840c03212ee0b1b09048 -0x4509195c6fbfc10166ef26c81de6cd1a7818c761f9089ea35f16fb0aeefee5fb -0x56b78e8f1cd2e3114799220199b6711cf7f56f61602450f0bd1757f2f9085e82 -0x3770c44e246f3513bd6137d604be45ce7f34aa4ee0bfdbabb44d512584470e67 -0x25bd1f64d72abb920fd3f67c807e399baf13758f2a37ac136833ae4d84b4ae5d -0xaa18fd17bfa40a5034410eb607d2187e9b8043961cb56ca6b9347fb86e09474c -0x18a692149b0c607a55cd6026c1a2845d63f9e3fa713bbe5dd9bd19aa8882ec18 -0x57b5eb451d19dc182dc364536adc23017116fc4242ce5b8a546f5c7c8c95a707 -0xa11b31fc5b5aa3d17b0fe4aef80c7f764b9dd4154893e5374e08cde8a67bb4b7 -0xad87e0162f0b54dcb72f104169b6be7d2588cdc1a50eb6b55bf11257766131ed -0x3cc07f1f0f5112ad21191a3f4e4064c83f1bee824d96c726473b0af88417cc20 -0x6f365283ff94a4491d2d5b39c2435c330d405ade7ae3ee740627c137c76450a7 -0xe126ef96a23b99ea91224c6acca83f22b7525c4ed4da1908c86700e9de7a55b6 -0x8c0dfdcaf72a4222e139084adf492081d8f6af01e9243f17d1b1e0501d9a85c4 -0x938bd4f7a6e5f1302d59ca0a0b2c8209c175f5c49483727073d23f428a6997a6 -0xdf32a57708819ace9832a0204255833ddf734082476d1637dc4c93eaa3b3aede -0x7b9fa49c920d1b2dc57d3393587e897ea858e7ca887a0214874da4a89bf24e02 -0xb701d7a7e05f198988f48d0e37436dfa544b6da8e85214474f86c3a474abe089 -0x45e63b43c6897cda9d43d7f9ffa799888934ce2ee638b19799fb00d4a4bd7d13 -0xb05cccbb11f59d7631a24119033028a3088de55ead8aa3946e477212934857ba -0x0367ab85afd6f07f2d5b54da9eff488265103bab87fa158645a5b8f2c099fa15 -0x18b9c38b0b8edc6ee36202368d0d998e222a32cbe5117eae13ac2f49e2a1bb8e -0x2c790bcd210b0769548b04702c2165a48e652dccf0cb1d9fbb7bc936cae6a90f -0xb1fa6518da94abf5ebe23e2feafc92a1b5d6cc1d2566fead3ab43977ff1fff58 -0xd1764dff553c842f626e15f428da66a1156855ea48038f45757147ce7216c568 -0xac3df9327ef10362be021566d8e15f9e9c9fbf46c86b1755ec0f56e80119e316 -0xafb90966f23097fe5feb5b4dde98ae6b6704f075781578eca57ecf33b49e7da6 -0x50fabe7f362b2e275d474c9a4c79d243a2438292a80b25186f6d6c00b614a508 -0xdf4b63f79d7e7f3c91afb50463275cd3dbe3b8a62e804891974371aa715ce31c -0xe59ad295b773bad353df0f3e3e169e7b5f432a79d58417851f22cc5a0c482467 -0xe22d554888e8d4a47d6657c0f2ca1cbabe80589c486f5f9bc4b811ffeb5bede7 -0x5bc21be77795cd4f2350a1e6e7e37d178f358953c3c5c50662b1b88424b96c94 -0x69207f42534040b72eba227f85c9243298214efc97d3d002fa68490187aba1f3 -0x62c24e927382544a2bfc9b983587cb3ea79b6b45b10ed3c7d93503bdf95ebe48 -0xe8024f1a56cecd1bbd0f32c812a62b56b8500c76c993d9c561feb28237b80752 -0xa9a3b21c7b4fa75fb5512165ebf26ecf47a97b1674d20f237df35e561f8ff8af -0x4cfed64170ca0045f89f1a337e94b8b77fb81c43c74b0f6d9a5081e7c661851b -0xc8cfe4625414e9159ac90b4160bfe7c772a0ec33d31f6423805eb5784af5b6ec -0xcc0fcebc6fcb81b111b368a73020bc4b4356beb2e718174931b214ed14e52410 -0x7b54a79d92b3a837a83b717dbdb51a28e3437b9fc659537f4cf807cb30933ca9 -0xe9dc32c83f37721041032d865f8f446dca163f6b7735877657a2fe86b327beb5 -0x1b65ad027b0e252a11c1e5911ad3c0efb310a1d197a02e4e3d364f1bf77bbfa9 -0x797a12ee93a4e5fd584b5f3c8b78c08f9d6108fbb1cd54d0c48b3ecba85ac99a -0x679e15f3c2f39085dc46a79e8e7980ccb44ec9510b80faeb6f7297ae545a817b -0x8b98deeef6f9d5bca7a77c47cb15034639e93c6c112872cd28e7568656c01553 -0xc0760a3cfba40be55534deede18fea8514d93034869be2479094535500fd928f -0x386b619ffd7646cf6033e677201f6267398948b71c53576026b4c10f8649ab1e -0x9b133a4e1862999672502e6bd3de13b90add68bb9e986fa7954cbd3315235378 -0x2fc7af4970e464dd786822744c81c69df5e7be1149c9ca9dcf73f2a01955770a -0x63b6959b903cd5ac2eb925e1aeb6f0d33fd333e0746938c9f6458645fe6b824f -0x90e9560fc9047e28732679dd183f653d94bbaee86794ebbec97a87b0604e9cee -0x25b3c49d5e8c60d30a933762180430a8065ef41b784c44041a5cc4370a9173d6 -0xc80412a78a1164b69a27dfdcf8eba7c6e7cf566b9f285009b845dc7a2984d8d0 -0x40ff176ba9a56472947f324245311a601f97dd4dc4be20bfd23762bf2556a8da -0xddc5258152239543c999de1076b886e9bac54411684ef84fde937335a1e7e643 -0x5bec435ce1f4e26458d4ac3307818796e7041c249d8f2ce2ca0a2877bc185223 -0x48cc0a79f0b3b1622d1c94991f992affa91a53c23973990352cf5714541d5566 -0x291b9f1c5503b2043968e9a41d43d753cd00443f1bf5042ea1061158642f041a -0xb0fefa79d4695206e33a5118e342e94e1fc737656d52de88a35af41b48f0360b -0x59df29ac57c7ad01774f17fca78d320edd580585e3060ebb64c7d4c7202370b6 -0x98683f3b58bc3e76ce37a67aeb61393e7e5bcfced91de72185153e79d816f3db -0x47e665ce487fa5aadaace52bcc1dc2eac2bb213a5b423a8f45592c26374e7ee0 -0x9c366b2fc3020f676afebab405599f2627e719c60cbd609ccfa9459a5b873ea2 -0x8fd1f942515c22f6d9a199c0883b46091d72825c07053b11313ca2c7b56d0fa1 -0x0ab7a3ae86f6b5c815402987ac5fdb0a9d1baeb54d7c19b79b8f9b2d6b15b214 -0x699856784b4d92904114d8843083ef8ce15a7ec186e86af838b122993ba352a1 -0x92a72d3d0b85984770feae2cbedef6e8389f37562f84433c58dd43ce1d1bf617 -0x37cb4a0708ed08797e779d710bb6a42f5a8ea8ee10f4c7f330f5fb815c53d33c -0xe896ec1b3dd5fe8d69bc6c4cba919dde3a169707a132756550140d701dce3842 -0xc5cca14da06b1bb044d6ce4ef752993a8aa903c66c8b3f33dd37a2e2eec14cd5 -0x95e812310473f754fa7b6b4011c1c006d3c6dac2ae70904405eedddbf2286bea -0xc57163c7154f195bcb927bdd397655c964a3a37575a4cf095582f375d8658b4a -0x6a219b1c4bd5c462eda28acd7dfa982bb02e0953e9bd4f37f13eaf44866c7f7f -0xf9c6af50555d001dcfe44b0d3be02857c758a7e8f12faa682538a0acc65505a1 -0x6b72715dd96aa1323d8bec80768433ef3ddfbcddb7923815a3698b2cde07687f -0x7fc2a190040e646cbf6960598fc7788fe606e0883ae77310c1b072cf5ab2b59b -0x648074ba224248a9d069edf24e22e8d08fb76294bdafbcc73eb9d5d04f06d1ac -0x09a89ee7fb410b968cc592469f1151f26df46b2f60bf365bb63e42d93876c86f -0x40cce24b965fee920d7b0865ab8bcf2ab1e8dbafbd35f33e73845ae5ac7e7915 -0x03d4562f9835495f99d0a9fedad22f323acca3a3233ef86e4a13c5f9a7785bd0 -0x401fca3a3c84156186e6f56afe6d878af5e22c79c0c1a00696797925d4ad560a -0x2a7426152967ff55aed9b5311b4d18f39cc5f13c6b5ffcec0f090aade8f761e5 -0x0208acfc9fd73deb95a4e25bc4f14afa76ab05e3a3d2a8a223eef03c17728baf -0xe77ad79d82929b6c9fd3d825885199d0af52a45cb3fa34679efcb24e270e1eaf -0xc4074786ab8b2a97c6236cfdb946f61b1d20a4957afcba90d17a91cb0945ee5d -0xea9f3acc8cdee582b4c6168626e5cbf70a7a4c0c58842725f2cd17121768e70f -0x7d8dded4e0dfa1766f30e24fa730e2467f9026b61b4ed7e83708d56315da74b2 -0x2504335065071fbb4f88dba9a811f08312ab77e045e8fd090c750ffd643373e7 -0x2d81a0f447c67a1d8eb1e46860ae9794d03b4b924c6383393072f645ea705c03 -0x2b59ac94042ff00834edcba304ebfac9749aecd52858cbe1b6bc3fe422765781 -0xa0f3d14e1a44723e26dd82272ad5506717ccecc8afb720a8c76a3d1a8ed00196 -0x009842fadbe7c1f39da3f376fa191b5f6f285dfd56601fbe6ddd95e07b126f41 -0x50ae7d83a666cee716c45f99502e48c2b1b930846ba2fb0666c04241884c2d24 -0x7416c410457e9c11948de4257e501517661c25d14bca14729c72267346292ec7 -0x41dbe4543797d67d67a0ba3a6d43d7011c46b61bfedce2ac1efa85093e85be7a -0xfc25fd40296b26fa8efd6e0f828a0682cc5a687115b9853fd29d012467ec869e -0x886aae1db4cd2a667bfb512c3b729d80d9c18f1c1ebbe6a9f6b57fe1bfe2f126 -0x095c41b302867b458ec219673c17c23cb8c409e6d4a1e786763e8261dd7bc7fd -0x88c801ea431b207c2a583d343ba541a8e1035425b0089722ec424632333b4831 -0x824b734c41130d7707777f5055edc4ae1529309b9bdfbf5a54fb82a40ecec806 -0x522215fa9d4116ad416db1a35ed9cb1e148a82a5aa0c46dfad6809dc74a9b955 -0x6c6cb5d7f444722dc6da2b8b31e3bbc032f42cc3855a10a1353840bd672a56b2 -0x3ec30176678be62642aa168b59cc9be3442d8e86eef3764a884f8fb308a0c5b3 -0x1f81981f4e69634d4825769ae7d97a101f658c25d8008333b6cd22d27655eaee -0x97dfc328456e6c81ef0daa4b46c7ad18f85dad87b6d63ef736a7a8ff7da0129b -0xd6cf5f7be708160a087d481e4beddb272d3671d865db874c3f4dc846905014b8 -0x2f48bd297a6b2e8dda98ae168ed1fcea31ed534c10c31a69b63efbeb85951b8e -0x34e04a6b28ec52392eaa801c30631b195b71d256c12e0842171734e879943b1f -0x8d7a46461586a35f803575151ffcd42f181af44bd67a824931150c5491aa7329 -0xea072635321346ad0a9c2da3f79f7dfa3d4aea8a8f7c2c8b60f702019d6bf444 -0x46ddb4f7a7f98c0aefb3a8f14841243a263322a0bab987746d54d54bea329beb -0x0cb210df09609615cc7842e4b85dc6b393a862c48141ce58c1d33d363bd8cef5 -0x7da01890ca2f07fc72c483feb00eb8236cc8c36613b2e0bc6aecbad6c8a5f437 -0x389b6c7530e55911809561b26c1d83f009c417459cd39244dd799bd4103d1af8 -0x7fb180f58626c63495eaade5235bc7395073242380015aebf3243617794a32a8 -0x21b9a6537b35160cfdf5b8bb9e62f6a8e848acf9923ce7df69b72124be8aeeb8 -0xa7842911d7722e97e3a0cfdea8b7ea35fb9010280386f567f0433cbb41efde37 -0x259c510b3dab5bdb43ce2dcbc591e69eafd9646518a97d4fb098caf8f55efb75 -0xb269ac7c648ecb8b01ce9aafe624c7117b2934a5412d899cce868bf26bfdff74 -0x3e7defefd2810742cbf2874e02b3f21a5897cba334262fa6f4ef9fff5a9d8337 -0xf85e4f9dca86c5c60d161206cd7ea2bd48cffcfb52663edfd818a70356209f6f -0x3a44b4c411d8920db2e0c1b128747f0ec26a6e6a55cab0c25ef3a6b584e59424 -0x43931836df2736ff95d1e901aa114661805a2d95de472e8651fcea8d7c67dcdb -0x88a1c224c15a803d8f897b66d29462729b2ddc697041081ce65ccb4e6bc6f633 -0x52164c0cf6e5a6980b64816aeaa9b0e3bc9548a95c4e20ddd6c6435b8da00bd4 -0xe6d16ab1f3b944047e5d2b2f56e48aba9a344473def5cc741ca26f868959eafb -0x9b005b9961e1b8c526c9823259e458b62935e7df199b3134fee22cada29b12f2 -0xbb2a87baba7373b5b5ca0f5576c9c1ebfd34bfcc326e114d337318a97965202a -0x84b573e27abafce10e579b7061f6dd09c7cb8341987b5c35dfd3a8c36b9195c8 -0x074d47a9761410418605d1482f9897f54ff1b377e539b16bbf78bff6a985c91b -0x36d8c634d3c67f69c6e630daedb2644f594de339168389d6b16529de104b654b -0x040f90bde2ee266fc21379d5a0842809ee94c48c01e03877976b312a1def2675 -0x9d3d3c1038bcfbdf30d389670e035ed4b0499ea584c418a97279415a6b2c314c -0xc9ea0571ce34ed32af95163fb3add3bbef98d9625d754f5293839940909bcb26 -0x52df01c5208bbb97be5e9fefb9030fd3379f3023ae85e66c26032a3d48d392c0 -0xa7de2519f3ef344a68663a54469775ca21efb457542367f476caeb11430b352b -0x43ecc17736400da00f4775e10eb19c68f09045eac6de5f1a2c2069047b382fd4 -0xbcb4ddd26140203a485a0f6e0baf6a03a57bc61dd66ef6d90638fd32710fe80d -0xd160c8ac2c6bbc877a4f015d63e43ecf1871bb6d051c01cb66249744a94700d7 -0xd6eb3f2789aeb9378b9c4bc8bfe31018e170743789de0fb2fb72c47931bf4c80 -0x71d12f0a6a07b068f38a66f4515293bcbf565b81ccb0f2cf96f7d1073f7f3ce9 -0x051a98517769abf94bc2a0448a59dbe172fefc93c22726075270e7a12dfa01a8 -0xfece6f698412c76dd5dd4f542adb7d3c2fce122420e78c9c45c9e8e06315b0c7 -0x635ad73acca48e13ecefc53210696b150fc9a716c066888c96e8f41488f27b63 -0xf44e8681e6aa69046ddb670992fd5b04229a03d9cebf5a21b5efa43da69a3d13 -0xe23d550860f9d6f0aa159014a7704db0cbf0f737b88c1a77e8285acd419e34f2 -0xf4367e650b31f57350d6fd3f66f03a80018034994f1dc0d436c192695f4bde3a -0x4817ef0f76b8cd4e9411afba04a3dfaeb04268aa873f4a3b1e11652922d86b42 -0x301c5fac35caf42bbf2175c248fa808985177c1d6482844d152dbcf9e39b76b3 -0xff8a45998c3bebfa40df618dfe8576bd1ccd18d47132d7b6d792ce6ba0d71ee8 -0x9e8e278d81eefdafce1501805f3067ecf92ce91a4f5113da6ccd591c3c24e41f -0xac234ed81b97e49cabfc0891d8ef6c85e072756c8449c8603021be6aa3284cae -0xb648843e0a92b230d3d12c0615b714eac577036e0794feb60845417db91ccca4 -0x659ae5a767221aaaf42fa3887ac3293b392a28e479921a7f74243446d14b5198 -0x10f56fbb0514543169a7e7e3e461771c802a3f2286eb850fb3607d5eb9b794a5 -0xdd997d642599e85abf1078896cb12aeae6fbab975b77f43fecd7273854ff75bd -0x3c258c337e722c25f99e83975cda865258194a12d087b3a3f5ef68d6b7e8d057 -0x8a6ebfe16dd0b546b539e02e7e254b7cd55fef4e7c292e113c9acebf35140062 -0x7bd01b5156030c137fd4a477d2ea048090f2fafb9e6cfa1c83a7aeca8ffe98ac -0x8f32f31534d56765c7b2e5708903cefc48a29e8e1f8d1454e5dfe66305f98db3 -0xe9b631709738f1d15c9f6daa1cfaaca81407bc202848105a24acc10f06272ec6 -0xdfd83537f8271803a6dde91f74c7953e0332186ee1cb565220e1ef157db8e221 -0x2181181de5e0a0acb9ad307fbde15d69fb71398b69c93379bb7b386107979806 -0x92c5a2336cd6ee7a9071e5b4c5a69df0221532b37381ed8136069970138c87b8 -0x5da6aa7c85a782c3906df224b258dbf3d84dc859e4b96962a810bdd79d38689b -0xf5b7ef122f0e7d2d67584ee7ce831c97cf0433a007efa7efc84e56f6f1906916 -0x8c8a6f8b97d1aa2a0cf610c1b4c76a865045a01d9d0c1d4b24343750e9a6f270 -0xd7b8bb7d023dc0c280c3de5a7e2ce924b50a989020a5cc7831505a526cc5eda4 -0xb3ad5ecf5eae8ddd6c9d54ce84e9e51c020b801d9863dbb93d5137c776178bb6 -0x0bfb60be31fffbe8a68e3d2cfcacfe96cb946baf63ab18441cf73c095ba82a78 -0xcd0b3376f800711c690ae0c4f3f4f947dcea0e1942a0bd8d342d0db7717c6fc8 -0x4a94ecfebe3d3bd503e7a385b68320e25df29fa81e2f84d6e1162feec932a873 -0x8519801f47154d49f80e551296e367183275e5231539fe2f5be798ca37c23fc1 -0x0201067755d15f58545490a21c0ffcf5a4f6eecde6f35939015cfb6cf33bdf5a -0x0c5da8fcf6986a785c8eae8bb7aa8f68405a79150c573d95ac1ea3183fac9c79 -0x1f4f63b9cdf21e7af59e34be4a41f96d19e98f4bab0a6f3828c935290a8430b2 -0x421fc6c026f8c11e2319d3decf7bb3ef616a1c0b5054de6b409dd3f41fca85c0 -0x594fe7e03ce892ed5b30bf6e4eb8a55c6680b5c798a55c1b2a589ab7e4bb2bd0 -0x5d9e29522a0886c0f74900588488d74ec6d9a97e58cb7a6ead8558478f9610d4 -0x4a7402c435affab8d32595f0e4c4a84ab1497c6810e03dfbdd78033b2b6bd17a -0xe22dbab796c8406db8904f876499244417eae1c67b531686968090d7385e9a8f -0xe16e5ef33bb5cebf695155fb25484dfa0613447dd616a69a09d2e07c7cdbf09c -0x0e64a7521b7407ab9296787422e52ec14b098f1effbcbbeb24422ff5310a15b4 -0x3a3960c2a6abb33dcff13c02c2abb899361ea922b2f6da7858ebad327241f974 -0xab8a9c16ecf3bdb10a4baed6dfb1e1ebfbe5904c86f504c120b6f4f540e55097 -0xc519b415b563cafeca0045c75af29e438596241f1589f62cb3e833752602ec94 -0x95027ca0faf90250dbac0b6c8aa83f21a3d48be5626e2b71e016849b6d52bcaa -0xea5cbd7c3c09f28bbf7c0b918db22288c4bb0cf708e05e5d8bee0bd1b32862b3 -0x50cd5bd729ca59304f3325cdd624d4721aebe3edf262283f46292391c814315f -0xfe40ab9afa4423663a2ee081f3b80dc5d909921cef961ebbbe5907dc61cf489d -0x6113af4e7d160ef4eb315d42264f3bcf286d8f8b841ae444b1d84f333a729a62 -0xb6cd7a0d0b194a11cf975ba2aaee826ec68dc091f6542a471902a8ea9a7f620a -0x1141d3b2ace2f104652aa64dcbf9a05d0c0f4c8866265216785c7cccbee08b28 -0x113aa2bf35c44b48b20cac1831a0e8113fbd3da1823c026fdea3c989ea9c92de -0xb6606ed6e4531ab3b79ea8b144080282cf1a93f57610a62c858355ef6d1ead94 -0x6b96852d8da51ec924618f363f25f304e1cbe6c7919792607ff0c9e588c1afa0 -0xcbbf9791852082477dd3aaf7f9f5dd98a7197ad358f827d15975eff0ca600c5b -0xed81907929fe9e2fd25d6fbee8e7f4c55f688f466011b914e7a55669036cc98f -0x047acc4b41889a4d18b67e2057c2f3d8e0edf71958aea9a2a904a4b0f51813c3 -0x7e82b940ac3f138f5879b83cc75cc00b8b06d315f13ec52a01a5131c64415b25 -0xca1586a26c16ed245a8aedf0429304a65bda078be6e3d05beb413b152503b9cd -0xc6e12f94bf5704908a6f64b78b35148e0f75871acb964ce0bb906a93de3bdbbe -0x1cb619b159a7eab7a886a9fefe76205bcc659679de906d0a4b98ddabf2b571cb -0xece23e7df838429bf3747596bd971f637f5c338cf0c7ad1814942c6ec4369d93 -0x6e00be4599045d47445ca702b6bc5f63d7f8ce0da361c5a05e0955e422481cd9 -0xe4a1988fceab813670e16cde5aed8d2550044b0f2d8ca66cfe3fd15cbca2ab34 -0x2dce9e2f8eabac9f1bf298f96089dc82f55f9c56191afd690441b8a3b9d52122 -0x95a9a555ff4c7ba7494b359a2ba0cf254ec39cda890fce21d042fbdd3e7b740b -0x93139d6ba65f7eb0a4662b9146584fc03adbdcebac4e391e32890406b9179cef -0x0538094548e7d60d57ced1d6f7b81548741e086c00940e942f4cb0c958bc440c -0x89802a290fdf24aed967611d3555b3e1cddab8fb7d7a40fbc44efd7c65fffad6 -0x5b45b5c3b2d8ac77d5b9ac84fb63539b1e2791959a0857711dc2dafbf88be980 -0x281905f54acf49e3033aa5453c7c2bc5ce89f10874812c2cf9f7ca20d8670fe6 -0x978124bcafbd970db84ca94869ee5b522deb10a9901e76c1fb9a28c559c4c5c3 -0xb002751283a59b317ab17d24354efb718ae1f4a4b658ebc48122025390d3c0e2 -0xa31df1a372b6b85ca22aa237fe9d1a68b5b419ae86ed60d9302a390eb84e0368 -0x864950c5d87da9bcdb8850fefc6829056c03b1374e8207159187af66e7d14d8e -0x67c316a2c115cdfbff40e882aa2861b79a8ef7b3a33c3c7260046ec21653dc8b -0x4f34a5998b121f228db1dbfaa716ef2d607673dc8eeb4624e6ab77edd9214f3e -0xf67b81d5826c80ca00f0d8d30425a5c1c5e557404b4b50c59e87e94c0a3c2f58 -0x6c95128b0be7528236314877650cfb58a515c93e77128228bbed8613051bc04a -0xe29f028785e041652a9e189418c318449e1c7641e8b40c0e7fd2330850c6d4c0 -0x603401cc2c72b6ec181f8fd948c9e7e061afe958cc513a66d58f7e2ceb6d3ca6 -0xa41845eff8ad9efdc3c9a78a68f304d34ff832f6abdf3133b9a08bff990c74e6 -0x95b622fddbf26df4a2748a3fd824f803a4b3467a7a2a62c3f3b91df1519fe4aa -0x4887d6f44d6ae7e4d8e3af25a3fe5be0aababeaccc353d579c8ad2ca1b423652 -0x8edc4ee7fd8cfff4a648527b7cd87c9f2d0a26f6e8ba00ea48768672bcebcc18 -0x901ec92a28d3a06b5228f2aca7ddeaca986e0d7db616e72a810ad905cff465e5 -0xc4a3402d77dfbcf056077c91fa3e504dd03746caadf0be3c035cf88ff4a3b075 -0xab01b26feb53eb1516665ccf6abcc6b20be56f6e808634d0e908e33dfc483311 -0x9a92eeccf7e7785ee6e32b9483f20dc6d7d3ac1bd5a444eb3de0bf31b989e2ae -0xd6a383c36ec589e46f1b036cea890994fe983f24f287aa6d222cf2c6df9d1640 -0xe675c1677d8a7d4ad6015683c68773daeda110dded66118c61367fbc35da9db1 -0x8d275bfe4f757c2f23fb68b5e72e572cb54d9e6dc2d38c20476966454811aaf1 -0xddcc99b426d8e67a88029f2fb528b0811eb4e009a148f5dd59b9c0486bf4e267 -0x556eab4c4ae516c31f7ead8ff9b39483a1aeca2c6bc3f4e58fc35d702743c145 -0x9d0b1edb551c93ebf77393229332a99795714ab8baf5949634fb1ffd7f124733 -0x7e93fc76ff399a37938969c2fa7d9d25699e3610b7a62e416420aee7f789fe75 -0x712dbb8e69575fefe7a8097b9cb31e674375a1a187f518e6bffa2013e9d33af4 -0x1b6dea19f04e8ec5e6176400a3fe54b6e9cb79ddfaa6ed08e0189e41b06dc80d -0xa91231a61f6164e883583493d7d9864ca84ae12797c26e41da58e03c35dba1f2 -0xdb3801fbb10b6b4a2f0f8eca75fb0ab41874620fdf90b1a8289ed7cfb99f6c2a -0x3415fb8b3c5428db4ed10f4c0e78dbdfa3d81e590b141d5f45ba601ee8a4cf61 -0xd86bdb381bf8b48ce7c9aaf92692151f6efc811e08e04e51aeebcd2e2f4b29ce -0x3e6eb85079923b56e404242c6a9a4be33c8f9222934ff1b206a6bb7cf2203348 -0x98870d520fbc09b3acdef81be5364b19cfd72ae998cfc2070093c9d67c2baff2 -0x66622a9f8dbefe56fe73575b0addc8b6ebcc04ed7bfbbf3a38ab8a795e10dac5 -0x984961d5108877454180cdeee563bbf709da057593509000ac1b323ac624a9c6 -0xfb9a2a7f462905524603e95adf345d368ebe9b16f9e776195a904ac0cb2c626b -0xe1fa9467c64d83323dfbe3381932d4f79ef03d94582de1fd948cbe8045be6dcd -0x366429f2a96440a550f765aebdfec6f34fc82d09226daf8223ed48f655b80d93 -0xc4e2bf08899e7fef3640945947ac3f5c3af70a4a88b16abb664b0e3040b5a3a9 -0x3ea39a7b786e91a6d1da06fb3095487b960178505b4e257f41f76cd8197c656a -0x9595e0508a3e6ee934e6bdcd8506fab9f234bc40def3cad81babeaa38e9e7c46 -0xe7bfeb517f6627a87b8a0163e6fce95e57e46901147b84e91761c1b075491dc7 -0x1ff069f790ba6df6a160d45fdf95212f4bc508796fa37866a35a0b5e9c09d850 -0x2780407cd6127919dae40faffa373eb778abc80d0f57e86d95239c1386071eb9 -0x3e650d50193c2e4dbd4da562aa292318cc5672fa6661a806690aec77cb93f767 -0x29c1ecf0114ccc87e4de83048855394f688e0faecc2b8c396700f2d889439b64 -0x5449e5dca2820b972d49d5ad074105785f4076dbf21a0cc10fbbc2307a045df7 -0xe43eca70c1b5c26ab362e545be5c8bc3f247cfb8fef58d32df0587878c071382 -0x8b15a6819635510232ddcd67c3f5cd00f37b6639d551616918c2086e877c0f7b -0xec66fcbdf50c8281009052e67d463ff1df908e59a7b7d23b462dac11651f1264 -0x3ab10f9bc7859f1ee2a2057ac2773a4d874927ad88bff6fe1586487b1a989237 -0x90a98da7a51c851d500cb6a21b08c018b7b0f3185b107eaf231232d92a0f64c6 -0x763471ac2341259cda6f662bb5c7eca265788186a50a4582a3399c665cd2fe41 -0x2de2b024c49cc84a43f461da89447675336d18517a6fe262f31e6d743822c85e -0xc5f85f3aff49866785d2bb72c820c9f82afc4636abb7aef4dcc9cd5106ac39f2 -0x96eb60dd9b7a68cf19ba7b7c17b8babbc939f7df684954d83e9d0a7bb727f492 -0xf29de76e690c2d506e2840076539b0959cc9d6a3d57e2253eac6056b593e6b25 -0x5428f63133779179ea2f04a804386ab0d455c130f6267e1c316675f64981071e -0x65532ca1ac46a262790342df6202eb5c1ce7094eb3caaea466312f0e9ae7fbc2 -0x8c78f875e82537a2b1c96fb1d3b1480dee098042114d30313419bd720a6780bf -0x2ffee1a84824659c0667d8387bddd22953e5c8b3cd2e529eac1574b7a4761e60 -0x53e99cfa8dd872422d0944a5a44919b24be8e7de3ee58743135a41a483a1ffa1 -0xf13592b02122a48e9d37449546ba226bb685ecc316599733d847f4e1e2f74621 -0xd5448a6e7b5776689912f5150b0b6bb131e1b72e5c9f802c855bb48d08f6a5b8 -0x7f244f9d96cd459da00463527c8f44c1977d05083959af024f50528f6bfbc6db -0x6a37da69297dff48e6fa2b0042490f17a35e276e417ce2f3651faaf38d86c1b4 -0x0862b1678549e01b631839de20cbfe0513fc3ca04f36b6501c86acd7186bcf1d -0x8f48626363d497fab8562347f50a034456234eed339eaf5fc6a4285cd29c958a -0x07eedf8ad05acce914cb70b59f6e4d471938d39adf6f16d787ae9e5afbf62c7b -0x9757cc132e729d9c7776e24c7e96aabb5d62f35bacbe7360d0e7ec9330a2fa2a -0x2038e00c95fb2c18be8fa70326a7802f0a570f66e60fdfcc9d5f3879929094ec -0x84701025bbc30798f53c206c3867fa655e003ab821442e55371bcb3463165f7e -0x1781b724ec9ceb177ac1002ff5fda2b8a71b4c8d26234ae680bd951accabb762 -0x7580e1e1ca49401070ffe423285ef0e4d38894903a83e6d4fce3ba943b69772f -0xf06e644d821a5671c21e91431fa1fd69f1e8cf2346cf45c6224645c339b4388d -0x747824999d7bd6a99aed94b1e4eba64ce80e5af05dd60533e1cbfc9407d635f4 -0x43ca4881614ed5ff0d8e515aa35622a5ab996f077228db2fb8ea621d8fdd056a -0x43f8f065138a8167741e032d1c88b19ab8beab9edd5c96b6807c019761f0db83 -0x3f22090d16d03a2dce2db738fa20406d1977044f0b8ca0774546fdacaecb5937 -0x38b959084cc5efde0b4f7443a3616cf4a778e57d36b43efa55ee89822d62a93c -0x8a9881849b0bab3399c226fa1af9a26df1a1d41ac9270d873ec78423533c10e9 -0x99c5dd588987501976ee7c074c309179d1ff3dd857383915b62c39abde1d71b9 -0x9d5c87b8113c1e0a5c396a08d308afd59a962d6735ed3f05df1aabd0279fcb06 -0x374c4a2eb12f6ba75c845309509f33331dca0b735fcaad5d6cfe4df4d36f5638 -0x367ce8bf735849ad23b2bb1e219f1c2d3db58540bb701e9b26cee5f1be2cca46 -0xb1b159c187a4ca9b281ce31d23ee24ef5c752a3d25142f408223e5f507d7a820 -0x3338f2632e874fda10d636b543a92b1aea5a9b64157ecb38d1136d15875f2b23 -0x9e2c70f8f37a85f0a97659ee60cf2b47d6c687d3b2952f8d49182ebe65669cef -0xc684412fc95379d36312e8a853a179ac932313dd9d84a36b5296c00eb06f94e5 -0x3498ee6699edce2e911134f098188b5d86074b7c810a860e28432a0b64b50141 -0x730086208eb439e4af712547f47f5b638726360c5e52190988c3c7eafd6da0e8 -0x9daab823d9f84855ba091762f6ed84aeffdbbf04c4b48bfe7da665d7edcc97c7 -0x6e79818de243b766071ff834e66b63061435f4ba515e5f9025a15362116972d4 -0x669346183560b707f2113cb7d58e05f759de53e6b7ea2830182f078f30e88b51 -0x3faec7aad86da58c434496c8459638a88ec2dacb1f49dcbc41093f9ae5921b7f -0x30495a255798ab6788b0fb8896402abedfb2e8f765490a91fe2747347224d39a -0x25731bc23d9f58a131fa335d846cac51425e7db97ba09e91dd1376d6a86012e8 -0x360db273699346db77a0fdc303fa25322e2bd08d18212b9928af32f112a0d093 -0x0c877bbc28170b4c3fb53e046ed36978f0dd3a96a65d20b9a3de8a47059be66c -0xa38071f21f707e89e1ce43ffdcae790a480c9ef677ab88c6a634ad1e0449ab0d -0x7ffbab3cf1051cb6d51f4dcfd8bc4ffeeae4571be321169eaea0eea51981f94d -0xceab5809ecba2595d8af4a91f23da35fe417c07d2489e958262c16a1fc1d3d30 -0xe0759dfb5e814d3484b3a26b022d08ce72b6e25f77a2929a9371a5b66bf41bee -0xccee33916d9cb043ab511297eb0e6cd61802c6a51923a0b7763f7124e8099a72 -0x99d2467d3a15ca789b05f76917c1d4e2e6dcc4ed4689432648e98353e70b18ee -0xb90498c487c9b2207f2b2050ba36d95dbe6431ff839713b3d59397c1aae77079 -0xbe81e6d8f39f61b454ad6f3f45620092c315ab87564194f1e9e16d2d15546d54 -0xb1cf820faa154487be4532516827ef1df0126bcfa7ab87abf4b982e7a6da436b -0xa751e6d864f6693884d142f2f19422a3723a94effcbb75ebd1d326b7ec07c4e3 -0xe817533e976b3c3c6a92472f7d61826388352ca9edf53bacf6585d14ae5f2a69 -0xc5e5380530a109541e7c6273636c73b5ac2b6d049505a97dbf6aec258a115538 -0xe83995b838e9cabe59714ce4823b6b33ad6fa0e5a67867abca2c1982f90c96a1 -0xcf494e083430b82b4f3b97f6a2d4dabccd2fca088c8c2e3008d504dce2c5f54c -0x2cec6acb5edce3488c1950f55624ced248fba1c140164fe295f7e20341ee63da -0x814eb1d9b301a59cb971820ea2c1cec0f77c8194572b021eb13e3d6ff35b4e80 -0xd649c968b7d971e6a6047d202e63ddcb9134bc3406f92b11102c488dd42f3b2f -0xf91963ae830d31588b5cb290368033a8e5f4186f1ed05964f7cc64ac5fc92814 -0x4b49c4fb8ff2063f0c9a5a2af7ee90805144c3606929b1bfee3050262bd5d555 -0x2947b89b69c9d76447382ebfba1078b0f25abc03247ca8f5ac724fb6af93c069 -0xb50dafc0ae8f424519bfe5c63a422c13f49ef4ac5e790c6b52a3d6d4300ae585 -0x6c1ab59db8a4cc914448eeccc8658276e5d65eba8d0796a3768200a87adb78e4 -0x722893fb827b82c9570bd9fa17bc991c48206850fd6d98999b8f2d9ac0c48fb1 -0x186af3bc1c63d487ef85a9a99bec646819b8dbdba876e53c2c0e47e5f441fdfe -0x42281b545b3e628c3fc5f3441c3ce16038b7719f2d92af9e7a11270ff9904ec5 -0x6b94a31472a92f72c7dbdafe30b59437021cd1d980b492a04a609d9a8a3b1c44 -0x774fcadde879ac92da2e0394eafc0c40ebdba67289c3e96ddd1e6b32da50a7bc -0x02a7acf957575f079c01c5934f28b3e1d564cca11bec69f2984e95c84657e973 -0x8ed7808b48ca90ab45345426c5c2790a68b5ddd82de7e889c201d31aee11a9ef -0xd2cfa1bbbc2030f0f3b911f3ccfb53b8f9413fecc7be05ff180a260ac804fa7a -0xbc5215e5363830d520665ea98fc3db7733b090e50b31193aa04b3e51aabf4083 -0xcef19d443b44aa4f83816d4949a5a9e0731558819dc3e6df17521ad19b1b976c -0x0a3dc912287c342192ee55576ead784e5efdc44a99b2d4434f64be5a4ac1c021 -0x079985449948cb144f9836a045245e96fa2fee68e17773a4eefe1b4a9e0393fb -0xffda7d7687ccf8825ef8fff29738cf2dedb5f208a06687f6c284c8573533035f -0xb65cd66a00e756fab986cd3b26d8ef00e98ca9239dc45009d203c778c3987088 -0x58297890b233684f46f52febc5250a455e49c3036ec05518e01aff0e998faf89 -0xcb4d32f3909f25e3d8128e437c261027a520882857e931b8a9862dd504dac620 -0xe1f282ddea3dfa743ae54816442ad3655387910dd4cabc7bddc01edd7128405f -0xb00dcda6e3286eeaf040055e4666187a6bcf901cf53acc265559ae48d215e896 -0x4945e3c24a010ce5617ee6fb3fb7d803ba0e3e8e7ec8ec6ef964120201f93ab4 -0x3af7bd7a8e85f106a0ccf6bddcbe39565fba37f8dcc801ee08f7fbbdd5d639b8 -0x1ca35b611527056f1cfb7b728bc3b34b0f2b2cc585fbc23d112ef2ca24658c05 -0x6268349fe3d4813a51ccc36e832269df04da4948b851d7aa12bb06294440aa85 -0x12e10129079374d4422e57ad9fb38f4e68e0f7275d53edb67ecd14cc8b751264 -0x1a78b054efd70874122390f6b131245c29b1eca466de9588f8800dcd9534267f -0xfa324b123f15b7e260f760594aedb838da51430a236bc6863248c2dd76af8758 -0x938dd877c3fc0f7b051c939a1aa3b0f00dd3743bdbdff170b37d80ad7c98851f -0x168caa4d2cb45aecb03dcb1cf0339e891ebfb29d2cbbf1e562f46e34e45e2bf2 -0xa31b8baed57510e9ebc7049848d2a2ad7d7da5b158769de5eac31b195fcfd2d7 -0x2cadc44308e1da5ac8990623cf0089b354ec424402e712ee483aebc8d6b6b44e -0xb9170d9c8e21d03137b0d4ae4a41bb43ce5fe381b3fa1e578892d7021150e991 -0xbfea1a36672ffbceef5460f820c4b508e5c204dd4c43db8d5b4ef670a5261ce7 -0x658f9e1f37ff5127f1c55eb27f6bd082f19ab32b3b3e290cca00881cb628e945 -0xc8b92db3f46e4c112a1b3130b5eb294299bba15d6050bd3c0f2702de173ee1e7 -0x51a68f72fa33722f825f860322e0e555ae6946c51bb98632c1a0ab6b052a6743 -0xc9f064a4c7e305b04d56fd8d80411b4c090739095068e11424a988bd8c78c78c -0xa94123c2f94c809d78a6c924120faeacb825cf6e93e1b520fb2d530b739f674a -0x8cd137d666f0327bd5aa64d9d1e23ce7a8736a028686d23d45f7af3a8f2f9252 -0x3da65c7f624b810ef5022140612eed66bf8d156064f70fc13c64c252fd148aac -0xe09a6dd0b519077db07cad689fc31e1bf46b313fb10c4e46ca14d6916b23ac39 -0x24c5e52f549440cbcda432bd9530149b9078f472aaf7948cf68d845fbf771c3b -0xfa31e5bd7ffd3f0404314a9a14ffc44c4255e8f46171ea292b6965b5615761a7 -0x4e4991465f4d48514435ce9a93ff0925e87fa0d7d8b879c58f4ee1fde96ae298 -0x6786c5c27dca0bbbbef48d411908875f28f374fce6055bbf2a7cd567031c95cc -0xd80c94aa45f2d36ed9e4b77f966a50c2fe28b805409438aee85c4541306f7559 -0x9ca8c3f70bd77dd5e20c1e56864507e8beada3daeb9407044e584b3636e1f759 -0xf6466c65ca5208c9125f6ed4409982d9d455896f9c0215db46cd069a3a8f2375 -0x6363977db005216a5db689599b092756a4ccf83e6dfed8623aa2aa17c36d0c2d -0x9b0d3ee62cceebb578f5588f0c0712998b5fdc228254c4c8b07d03482b4276a9 -0x8a9d6144c25438c66b796ba7c363cb4ea92e153a35b0657424d80e7833b8899b -0x7d3bcf13ff29153b3544bc8c498774f73b1c5915d496388d0095ce0f3a8f1ee7 -0xf05574e0b334e3737084f71a7cc6938f825e51e6c61de9fa5d0aa0c0eadb4986 -0x7d437a0f9f8f8533462509371d13226b053d2f329cc48ec67bdb98d98edfdbce -0x7b2b2f4cb82b71c0670004e2e84814af8bd1e23d78273220033d5d6983536a27 -0xedeb4907be990bd8f068014eda7aefe84a613c4019a8cecc5938e311c8384756 -0x43a5224008f08c4f20884f11046acc8fb2de92df6944f409a6a4634f18e6c770 -0x2a38cdb936b388db265daa5f0861cd0485cb7d4eac7fa3787c77d0e088cad22b -0x237a0e096387f2ac106e52b5821667243412077f9a8d8c1ae5b1e38ca770c24b -0x25fcdb6cdf1f83983e6d99727cfde9c5ce9368b737a3f93ec01ada738bf2f7b5 -0x808019ef298ce75b4826e1f041f7bda8e4d6d2fc5f971b375a46711cd3bb9d51 -0xde29717b9e5c0936a589ceb3e1c4c00e5daec9b209fb4241f08a60ce8b45b671 -0x6b96d2c11f071e306d54f2c4d122cf72fe74b7d62209704104a107e0c2861114 -0xde80cb1f557858f5eb4f29911e4dbe97034cef4376780603257ae74374f6aa3c -0xbc3ba7c2f1cb3d7790ceab2bc6ed3e362c411c7aa12ce21b3ad6bd69be97cd17 -0xe1a17a7f32a0f5393640386d987d05668de4a75704b9aa669ad30300c6f15692 -0x12c3946ed79cd074bfe089f920415024391778f8c7e469c24c824ed74effe0ab -0x50ac28b8d6be81d843dfce7109822427b52fbfae992df7a04cf884898141ebad -0x074829813a0ee56b41e78e3f9588438c9b2ac27a1758a18ab5b14e7804bfbb67 -0x73a5e4eca05a3ebfb19a1b83164123e686415bc23dc503bf8f9e9b13333f8873 -0xec854d8afd013532e4644f0a099e302569e8e4d73b3ef1d566d13f894de2785b -0x54fea9203d991832de5b764a596e54a851774c2638a7ee3981d775b1c6df12cc -0x59e3ed1bdee0e417681aa72c17d68c0b0ff5ccb1b86614f51540c18167c7ee77 -0x8a08623abef1aa89eff3e5f2fcc0db2299d2e259c2c211179589cd420f6f7abd -0xc63d2f7dd7899ad33d1f97ba1925735344014009ca1733d23fd406d7441dd716 -0x1b8d17aa17f8ff92b4b4041ba42e6e1970fe29d7f8687d22dfcf509e01907d3f -0x25d3ab2b2a6a740f9d9216d2b3eb1f2425e2075ebfd2eafc94e1b7846799291b -0xc9f81dcb22950a73fab62ada3afef1ed1825e3dedd3a49c40bf0ac5b220f708c -0x508fa87ce0f08e328d99938ca29cedd737f4ed959cde4ca3f314ac82d95a2944 -0x5395f2036020567dbb604b851ff7621ba6c53cccf8516bab247353ede23b9679 -0x31b12e67aaf8bd6b7e847c86b80d809ca9ec73846db22cb5f303eeb6e1a08662 -0xff2d77e4c5a6fb5a124ce580acd3e970278aecc798146018775fb1df0c5727b2 -0x19da29a0577ddbba0f31f2351d11007a0ca8d0a178a47b477954eebcca9bb213 -0x5c4289dd9e02deb5b9e56405fa0c6699bfd0d59ccc26fa8a839d853dfde3afbf -0x27b65161cb1f0a8819ebc5616161f99c53ec9b6ad842ec5bcdc54b575f3c2f7e -0x87b5634acd73df89a9dcd4f17d6a8bd541b772d74db539e72d20b8de161e0355 -0x7fe46ecf3f71dbf44928d7b9de7cf317d80e02aebc8367af4e4d34a4f7389580 -0xe684870c52087cb82c41d097894d20596d6b8ef439de0b869ebc680630be8fc1 -0x158282427885b425c5f8c65f085a756642479a4729c3b4cb59d7381cb654be6f -0xde7eb658be6a7546d18f43a71e6c10ae071dbc84f1797e6473da61e6272d4e5c -0x92f90bd807fa8e6a7fcf25b833e8ae7161a97eb6e9054b8165431c61ed65265a -0x7d9f14eb5df8446cb8b5a3d3db8c9bce831bd26b5a17102d5745d398ebdea2f8 -0xc0961bc017f788176178ea72904031e663fe5895a275565ba21c1bb89de35017 -0x858daa498a0375d1a9333b7f8dc039388ac6638322fd54a0976581289839519d -0x08757d8c64482a2be24a02483e550fcf74f6af808773d1759cf194d2b929ca7b -0xd87eaf780c05501a09fc6deeb317a9c4e7e703049f9e6e1af93627fa4f76f21f -0xb189201ba23cd0d03f0a55ff864391205cf86578b92f740334c388959d6f40c2 -0xc5bb2ee62b2fae92d15ce66055e6444a56b2274f24d71747c61e7fdb6dac97a0 -0xe8c4d0747993163f9fee166e6b926a3b478f95c4e5a353f93a4cfb092d0046a3 -0x454c5a42e0e00a8ccb9d4a650b9c00dd63390a938f7015d967e3b48021c5b0f8 -0xfe5eae47983e11d7cdb2c6d02ac445284bc358218b6729a423fa1756a398044b -0x0f9a851dfc62edcda5ec3f69f122df37edb5faf09e4a727392afd38e72c150cf -0xb368967d128361f0d8b17a02a69f7fe2ebbe36564a1fee1c7146296fd766fe2f -0x1a1da06f94c0832f2bb9a0ae454844249bf98a9133e8db2be21e2914a94ea268 -0x43ffdb3e7d2cda52f2090dffc6db9479acc953cbf063026b4efa90378bca4325 -0xff8032b93be4dd37658725203e610e31135ca65a1e431657d1b2fe04ca19acca -0xe525572dd8cc683619e83e6d86b8977eb40f83e94c34d166697cfdcc67abd793 -0xd91ae4542c875bbd702a1d02b94b18bc4a114706a8f4c1fb53fb3ccd92b95c26 -0xb666bd0169b519d5e9715b36ee6b700efdda4391c1fdb86ca08b730eb8f783e8 -0x5d7d8d47e4ffe0102ae2ae3a630ab15fe07bc90a9062e84e2f5518e10bce8b5b -0xb280fb589d5c7240af08149c5f66a2097a4d58f3c109f4d493deb22718e9008e -0xb2fd298c88e158f0e9be9c7821627aeafa18cad60d8ea662d610d07bca88f5db -0x309cb0a7dc786222e3c4d36cdae2dc2a6863a6171050343b98f76ca95b6f108c -0x5144619ad3a30898394dbd4cbb2ec63baa4d3db9d655f293f70c00a6c7d31fa3 -0x226303058560c5505bef603eac441a8d0bcc142220e88ae57360812867b402e3 -0x4d4b28b6bfee785eaf33d567a7cb1263a7a4720f4b5cb29d26247351d06c9292 -0x370270c1aab18ea16eb967f34b16b5cac00ab9154068dc55c67ffdb6aed32ccc -0x16c8cd3626c14f080ffa5b2b56249878440e13e7743d9c8ecc7fb7ed6f67a146 -0x14de6f9a360d9f5ddc342097a399ae95e555c9fd90047ec4ee7525502987c83d -0x188dbee2a503f66f813435ed2e0af0eef6832306abb2b8a75c17e5d105807d1c -0xf1c5fcc503b6e04d0ea3803f78e7d5a487ae0c7ec4d44ac42275e503183eca39 -0x9cc75ecaeb2130ace7b5bdbca6b10b4995cdab86accd8857698eb13e2ac1fccb -0xb4952a62fec43255eadb75119b28e421585a21d7bfa289d1ec99e9fa3d05b633 -0xc12081eda606be590188cf0f9d09a461b82cc8f99c3d5f9b2601777eba7c34b0 -0xb25f967382b5a14f255e9667dbce821c15c91041c20f0ac594bf276b71b25c75 -0xb36b9ebb496c41b77e1092fdbca3d0002aafa1366f30360858a2dd4b9ec9f1ed -0xb152e0db436950c04c3a19a7d586deccf915a36bcb1c10f324fcd6b5ab364bbd -0x2f579baaaef26d0aec14ae0815515d3d598ce027697575e944421ffc664c2f39 -0x452aeaedeea98f6d21d700c3650f1506df6993c84257304eb76c0678f708cab8 -0x3dea3842a19c6f60283269760dc0e837dc6019c106538ed116582bc7b022ddad -0x37a8c9fadda9ad8e688bf6e93d67fa1d6d1b52840368f800fa33d1283bc71608 -0x63a4a3e650c2a1e44624a95e0baebe4165d86b754004c8001bd5a326003f4262 -0x11eaff50253c9cf55a70d195483793aede1e6d7936acf954be36a515480e7564 -0xe4d7f4d572e67727775e059465a3394e083b1588539813a4cece953c3b85a867 -0xb9ea2320581872007c4d69890b391dd7ec8ba13e2d74820590fb4a4c991b70b0 -0xc8b798a37add7b130e1b2afbda7293e094f142708bd45de1d40970a3e5e36b8e -0x8a4add0240a53cf46516963fa73fa295046acf3c712447fe9a46ca181d218e93 -0x02f1efd41de629f764978998f78fccf628ca242d9e8b8807e092d997ea2813a9 -0x6dc2bbe9f7315c0dbe9856adbf0ca6f8f5d6386c7933df66c3424ccd50868de5 -0x3f0b0cf3f65716a655157090897821714f2d1f0cb729bb9d38f448f14c8d4c8c -0x8ab09a5949024416c3ee4a8fbb6c5d8e57c04b498e203d4ee18577ac10c4e3b8 -0xb8d0a83150428acd9ff0007bd07cbd05b82f69d86c84b6d42e2dc2989ef55f07 -0xa96ce75943ef99df15b45cbe11a5f577fcc975e835139212492df7a5ea399fe9 -0xa84a5d6a0f66c7599bb6450691edbec32344304c427670053e328a142113bc3a -0x33b28b207d28002494e0d995629a23daeb42aef5a6b772d0aa69e3a7d24e819c -0x2d6aa9e299b8cebec8aba17b392dc293886dbee024ec7f2c7b91e6db952d5e31 -0x6145c957a672470f56d8b1546d2be751b39aa68dc44857fc33e0bd75a88a7d04 -0x1ec0ddbb191d5e3dd3cdf31744afe63b70a5331786816860f213028bcf62838e -0x0c266b83ef8730a2172b10f09c248eae6aab7c7d05f8fd33f9aa202ab0aeec5f -0x622f9d52776200afb7844c0fdc220c7b03cf75edfaa14f095f6180e3cb90432a -0x3a9cf09c718f2c01eca12e149b19f6d4337eae2d7f74cad98e0a46cca8b944fe -0xfbd3699230763a00e7b102850e6adedf314de78ebd941cd4db482be4042eee02 -0xc5a68f0f224033960075aa4ae3f5faa6db0699ff1a16abc18040e60c718f4c16 -0x08d91c8fea8d9fc827b166530af751073c70feaa29defe3299c6f15ecacb749a -0x9a8fe8371c3e10349222195ff963fa9edd4a9862f5dc1644c2d09f27826e09da -0x5f80a142e239d890b4d742e1fc73616afebb24b2d6e367575f8e5c6ecfcea495 -0x979041a8bc9ecb7a22c4cf965d33fba36cd0931e0dd84a04f53e3971a67a2e21 -0xe3672b4f8775a0278a23f0bd170e1face4363e83ffed84f1b20769a408680d8a -0x735fe2e9c9aa3fb26ce07538d85040a83547a90aa85ad0d5f51e6f50c85cd2ca -0xb3806f5b0a1c28b499a8a6df529e3524c2752c4c0145dabbe93f7e8ce3a9d3cb -0xcb62bc0061b8704490a91035d95ad334496ef5aac0db863b1e9085e1f9d1a939 -0x8c332ddfbde56276ec5b3825221676fd4032360da39cff0abd9a24105ca5b84a -0xebabe40cb599b6ac42a9ba16ce7e72f404310fefe2aef46e50ae3e9f8e5d08de -0x46847698ac00600a1df87dad36f308432c1cf23b1b5afca42fad8420b2a5e773 -0x271b1f9cb936d04b708cea628adc566e6c0f956df4267ec3dcbf79136ac633b6 -0x984a5f44fac129184c948784feb86c0885b90c541825a3cc4585862aa96c381a -0xe65881655df8aeb7d119574fd12a4fe0e021f2614cca45941a06b4dba0642631 -0x034ad881f34512e17878ed19933f916c24a45386c3253c7e654e73a6481f4897 -0x3c313776b62497c7f5fa09894761440990dd084e444c21a52163cdb27a58c4e3 -0x6f9b3bae74e00f9b0f88d3de9b2ff1cad0f4809a7a80a42506d274eb475f85d9 -0x516b46757f398f8bd5772b2c7ed0e918a9decf6719dd0d2f7ab33a738b9b73b1 -0x1e945a1971cb19ebfb0e05e094774842105701acb70b40eb34c2bec4833abca4 -0xe0b18af4ff609b01322a1c29f55d873b860fc5ee892b84deed18a16e28e5dd20 -0x61b6240d4170bc2954bbd341490c5ad59c55d5d3030516cf1d090205f826cba9 -0x9d4044e01ff31b2340c5e4638c79af1b068561858ddc491bbd6f637d461eec46 -0x549426eec0a61409d4ca688e9479ca029981d52174ba9b3aa2dc81fea963a756 -0x55b09a8e0ee477866caebf4219606d269e7781c6edd6105e7d3f2a50bc4304cc -0x37471915c03d7b5528fe2cc563d1ebda64dd8644eada4a3e6298939c31ef55d7 -0xe4253a1df19114bc1e641c8e1aae7188f4e45dc96ee9ead6603f2b5bc8c0f93f -0x15bcad938d375edc2e99e7006d62c08448e15bc214efd90a45336070c68e92e1 -0x37787de5219b9334ccc4d8934d844692b354a884d6929efa4e7b2183c495fef3 -0x671003602c6c5a62a3ef80ea4c9b09674f1064e38444a6d0b674c28ec571d2dc -0x934bc3483149424099a8515edd5ad6d1dd40819e7db23b1b19dd3718f5b64d61 -0x29130e53bdf6fd2e3d4bbd2affc9c6e657ed6b8e4d3f906c92ff43a9f706759c -0xb94b24f6fac0a63cca6d9c94c30a454309d490a39da0f3c44ead6ba17b5475f3 -0x7500814b6d74d480593e254fa57f2a64373ba8e12f5ff5dfe6e84b1afb8c5be7 -0x0d3bb06f3c1c5e0f3e9a10a58866ac904ce5daa8cfdf4c04cf3de0fa2dcb889a -0xfbac1e867a2aaef2f5d3507fb6e0fb32a868c667096d923128506433d1ba730f -0x4a3e0dac2a986987494938f1c4df5b247197d45175fc1774db65647e1e42ac73 -0x747aa2346d1e47b8262ce3cd6621e1d460bd95e72dca557d6b4718a7b3df6cb6 -0x0871d84a39b70da96c7fe85b12412aec55055b2a5bd8da0b4f9087b1fed0f104 -0x62c669e008703ef449ed1a0c90126a474531fb16e2bb108d06ac1af816eb9717 -0x1004dcbedacf4de8ad8756d6e01ce3d18987757426c8876fea9472dcb862f8bf -0xf0f8e047c7c8fbda42d8ff064345a1134684b66aa6693cd2668c016a1b64989d -0x94014d1e762ec7ac179a8cc2255cdc9c5e07517a89923fb784011ede216d50f9 -0x0a68f1010ea2f308ba8440d8eed72c1d883435b08b1b32ca5040f6b6c8dcdc53 -0x9f270c3eb0a65aa90d14e378b19ff1cba9306a95d0a5a985a7b72a1b97ffe66f -0xfd039576aaf7843961e22d17d47917da686b611d0a000c4773f14dd937bdb1e3 -0x596795c4cece9d7b1e7fe2830a65c06228d3c0aeaaac4bd8716d872c52e54027 -0x2704b0ba3ea147cc2f9ca430802c3d9b8ca16b92ef67d8f6816b50ab598d705a -0x0a7008d874f11fc5f285f01fcfd5e11d5f4172e69721d2507b0d98125f8e3f7a -0xf50b2d72b3a0ff2e3707ffcd9e08f013e28e9a33438691d475adec36f6a159fd -0x63afa1f7cf689923fb01ad5c4c94afb085c4349266be81ef53de8c2d277fbb15 -0x87017478a68038e9c2d8bb26803a6e8383ead17e677a9d93fb5557b6f06a5a42 -0x6b6509ba0100ff0d75f81e1aa8f2ca9f4f72ce4385f6c7f83428b23fac0a9dc3 -0x47a53b55db802da7359045dcfa8b2ee471f6ac42c30c2d3828c7fddad358b911 -0xf18f00cf3642978eec7ac23c5be659907d077ffe7b3980b2e5bdba81e07559b3 -0x088e93e5622fa256d053a5e219e187ef3c10bdfad778ffb53eb7f98f64c802d1 -0x5e4f6c6fb77dd24da93bf024634b3602507111373d3391a094fea50e4ec3beda -0x6acf2260cc229babecab2791f1847e0d3e79729738d4e2a8aef0850a778cde96 -0xca1735827ea830ad78055165f396950018420025bdcf52a485982a3484ccd790 -0xfa6391ecc39127bace0ce35dfdfc18ff43a0f0459adbe84cea535400aa654d1e -0xfb85e9066507ba0561608a96dd1a03ee6cc4d0128524ec317d832965ce76a006 -0x3d587480eba18db7596fc7720765f34ddd12889029402dce2ea433ec8b7b18c6 -0xe1f16e7d767c08c71eb39181b18db813319092eddf7fb4b84fd2c7cc6f56dc9c -0x8f362633d2bceb72b5baf979797484be7550f85b9871662fc5a65de85bf357b5 -0xc571e49093c6f5e1eda1bbb33544d01a5c928e8564c31048115876307922cd3d -0x5a0bc97eaac76e7975424f616fcbc7c29123956484b1e9cf98a0c5b2d3235713 -0x512bb343c89a6b32e3936030b64a339f2106d25a88f0a4d9d2d9c1a03b99e1a5 -0x024bf6762f7c9756ed782dffbfaf228cd3777648ab02d91cb7fa082e28888e9b -0x838652a076523403c3d85413a30af63aa1bbd38eb009498c6c07f710b5cb796e -0xb9c4e5e1a6aa6c99e077b96fa15cc5b20875074c2502ceb56f68b51eac8c7c0e -0xaf387bc45295bce5368aa40ab68074695b43fb808b5e9c21148ccde361ae9f68 -0xbba9f839e3c4d45594be6820bb016989cf3aff000772c09318bed600ca794b93 -0xb7cb7a3efe8a08942eedc4275d1a31025e0aa75804b923fce7461fc0c4d40874 -0x105aba8b727a5fa5f62070f8324eb854f36defc3f86a40da1b7db29d4e5d0db9 -0xc067e3b28ad2d2af7613a736f0932253b4daadee6ca600c7afed94b55a87c309 -0x8e71a314e297314dd80e8c8917a5e016a478962a6b32654e5a50c7ae876dc4d0 -0x3bfb893b19d24adadc4da9fd824854612d0ad5b554398c41ff18fc88a7902683 -0x3e254f3eb5a0e3b8c4676f357e1a52f279d05faa320969d6476388fd1dcac990 -0xe9943b90ad8596d59f05dbf728c9d51a8cfcad260b7920cfa71d89d09ca4a406 -0x1041f3d7630f761b3b44d514f796f65deaea4a8c70b7c6ed3a1d14f464828906 -0x9140ea823a6a969a8d8100e5af0651ea04e4212cc81537b8c1b0dd6f30d4688a -0x10c91f3f8528f443aee78412aca38f7fccffb560ce454ac66f693d0c450d50cd -0xc4c12d35736ffe4a5d717eda1f9222ba456ecbf963bad23203c176c7cb8be029 -0x098a783e6325e7f6f5648f65e5d638183483ed2bf0dcbf574db9b78435364c41 -0x3ab5af49756bec344932020baa810925bbb1a916f22fbbc7af2aabbde1a30056 -0xa2e4e1fc77d298ba73883a0bd2aa1f0235dbd81e0885e460556d48244988ce7c -0x6ee633c65e76657416fe97f2ec8bf3708a3ad8c04519ca526aa8ed49ff11b79c -0xc388976c49e3e30a5ab21919c93af4a140881eb19aa5a994b3e4dcad5abfbb3e -0xcc7034374676f2890f5aa5b8d7e2087ca8622a59933ac4fe99bc02ccef043063 -0x95fa5893065e4ee502a9ad91c0f532b34c8c21650d2fcf24ffce9526595c5231 -0xdfff1ff21d8b60ecf9944d41bda950b457cd986cb320a9e593997ee13a010155 -0x45b930b8adca35d91bcdd5ba139ceebde0e03de06564ec0f80f7976ee3298ee9 -0xd0e8774bb704441e2f5eb398300433e7216a95d3d269cd74a29741917eb1c04f -0x33abdc5469e4d166a84bc81e08488ea0e9135a47c38d99728a175e98f1dc1319 -0x53edd859f87ba293facf6f4626cf6c3f12d72547616281c23e7d8d2b64e4bcb7 -0x111a273d3c35782cb9d2f31ffa0326097862cf41c1deb36c0fd38894e4940624 -0x082adf978a851f04a7b06c6779260e86ec72fe98af8f8354e0a526128e055e54 -0x1d3b3a12e3cbf5dfb52d23018efc1cdc8a456faa50d43967994cbb26a66545bf -0x12e2e94f544750d1b4b5134cfc03de0e3249193f39fda6baa67c150473e38031 -0xdbbda54f891d7680e6f3bd34df983fa70931165df20232c458a0afe246277980 -0xb2ab3a7c4a219e04cc52c8bbb26a1c1e4c1146f9497a031b7193f8e88d602810 -0x6fe789633730fc0df76578247bc38ee0f9df995485e06b87efb03f5215457904 -0x571aeacc9e9f2f36419edda9c7a35e56b8a3611dd33c902adca949fe4ea4c4e1 -0x759206117644b528f457c741cc953ef4dfa4c5e5f42d8a3aa9642f4376f51783 -0x250e9cf77d04d44da1551b845890b089d3d1673a2ae2962bcdc8317e796a3b6f -0xf699e71ed022d5e595a64f091ed7c9345ff81fa7dbd82ff2fe89310fe6382a94 -0xff19d86c182d530aefa9d6474e0817e038368011ed7c2b03f0dd889bad2b921f -0xa47b53ccfa6a7a1df09afe1c97d9928a612c1da3cee798af471ed3255fa1d68c -0x5d8da184ef1c89feab12d7d2b966492fff2f5739c5fecc7ca2610ee6a47d6b9b -0x7ce1ce6c0131faaf26d8e883b7191ef45673e03e78a76390ea1b76e626ddd821 -0x3bce8fea2bbb4f65ffd9e9364e69941f5ec5fc62924ca53e825f7978ea8b8cb7 -0x976dd30b6812ccf1285216ea413189e050c37d6a17d48913bad6ab7b2cca779c -0x5689913bd4db396ea55eca0fdf9d66a43188c06b2b2d827413b30d17a3810f7d -0x06fc1bdae6da55155fad02342ead6e2910bca8d76679d9eef7a1dfee78fde79c -0x2e80dc024c46ebe90bf57b972a7345271b5fdf5cfbf02c0097f1626993157b34 -0xfcfb496b8d607bad6797e56e0e9683b6971a043e7c17876ef835fcbc729bc8cf -0x75a402636303dba62820401151d4306d98e60bcde6080acfdc616dba7f50f4b1 -0x9b7bc51d95a0de81e72ff1daff16c23cb773e59b0b8a80504eb5e71218130b31 -0x8b736ca39acd4565c84383a19b835e6bca408ce79fccd7d584439638a8ee3e06 -0x5fdebe99fe09e202e6849fb8e1679cee43491a59cff1b92cc4202bcf2dbb3da8 -0x49e7f34c0c140f6c9251c9c44b13570bc54730f105b15caeedc3e0339ad23496 -0x4b9e6da4caeedf7f77b3a4e7c87e6c7a8e358b7f9ecce9f56acf0d1987a3ed0a -0x5cdd745ceb61d40cd8d3e64a82a9dc8b1d5db7946a349c590a5fdbd70027a8ee -0x8a485f25e824106ee2c876863948e2299c7c4f74e2e2ee20fd83a15baaa02399 -0x2a243ad1e754e242c01de8c1f00f46bcbefc858c3a0e0d8e42ce33e23d4fb6ed -0xf5319aac13d75e75394aba6c30d416f6e8c40d9d0b4cc9daf4b6248581fedef0 -0xd1fc4132a9e018ffa1de8667f6d1d7aad4ce79075e19e52ae0bd2a655983a031 -0x7501d80579f189b310194f21213fa8190734066ab96c3cca9eb4e15141bc2085 -0x166c5d22be14c9511cbc083e1a676a5fe5e90a32b456157457ad7e2da74033de -0x978a6b6c46a87b12a91a2aa372eb1405aa448b64fed6cb7aa83ceb676507978c -0xba0688043196469b3559cc3bda3e9a8692ba29693ae7f11d8eb845432ca8201f -0xd1b9acc21d71b76f6c9be42532458f824e1828438a3f9ca745d817bc583876f9 -0x9cf4b56ef5d9165992fe79173a639159f63b77f1305e0ee56ec18b53886504ae -0x0d6e7cec89507edd5a8c84e6e07685414ba6b94079ce591fecdb7623f6e491ad -0x8dd7c5073e3a807678f74ef4aee66571e843cd752688aa678ea03b7a6a8e8137 -0xba191dc56119c01c4584ee3dd9710f0168cc05af5f1ec587863ebff3dcf103d3 -0x7ffb0965e9277cf9b9ec7c11a0102acfb284ee0a1e5f56d7c89aa34ceedc6c7e -0x57c43906ef075fee0a829bbcc0a39a0a6b52868fa2ea6a7bea25ebba2b38fb44 -0x2c1bc5ffad95f90f0999af2b4684c3d608791c917f061aeb26a82e40886423ff -0x4589eb5aba3050f622837d706b46805863fed4e614d212da2d391a57224aa348 -0x1e2d1e160f7675d0357fe35772f083798b60f54bbd77d5da2ac6b0a570f965b2 -0xdeeb99fb07876b0580504d72431a7eac40cbff6e06100f0e95d5ba960d971247 -0x182159c1fe8c054b3b40a9f3619f6f8f6a4b2bbea71f8106edd21e0c04fa2ba8 -0xeb453fbd0f4330480053c9f87fe2b945c38a2a908af0f90775c40b10c0fbff3c -0x14c1763206620c931fe1d27867d1182ec1b477ee9edbb793c9352c97ab41c1b0 -0x2f0d68b2c392fbc9fcc24355d7d98b7cfe780edf07c6dcd138457684e3fe06c3 -0x96099ed01f7bbbd07bcdc25d0cd16e33e50fdb72690588930fd8606b8136da6b -0x323f12c85f414fa3fb2a28aabccbfd4570c4a4cfae9806e960ee2ed2006b4008 -0xfe095e1c12eb855a8773679689040f803c728674ea1b11fb0f3f5e2006dc67b0 -0x9566dd37491974806ce0d2975ff5f112ed3917384ed9b7d4f7876acde80d902d -0x8a0930a54e4664bdbbb8d2a5ee94697a5083ee175d9972da2e7f9334d1d5b619 -0xefbd24c003ffba026bc337bd61fd858e1190c3ef5672bb515129828829d08858 -0x9ba39e151374bd18140a46de1c068d698dcbd01ab36a0783f5fe21d3b0b1e0c5 -0x2a1687c7ff314c5e821c3cb8f06c024c086decd47ca63eda265f5123869c3a94 -0x00701f340ec64825afeac2c9727fd4e3f2bf78e9f9ca6a11c67607f9ee1a65c4 -0x87407771f34e098d692e0dc50627fae42b4b6e434b9b9dec12020b87c1695d58 -0xa00f330eecb275ccc75af7e3f1829f5ed3e85de173293bd3f7b2cf30342f748a -0x85727ae6cf3a2f8e2f8f0d9a1ce5336042038e63c8f64237acb27973bca12f55 -0x7610aed6f55e9551cc201b5b2fff7857ce6ed6b85461cf37e20b4319bbde9109 -0xbfad13e5c350c032b157578b7582d23869ad6d0497c8f95ea1a45ea2e663465f -0xe2a5536a5da8b551c895e0934ded77eb39c627ddfe0611416536d9afc6f0e83a -0x5908034d37c31ec6f10047273c482e29a0e3c4920501cf3465c1f53a340da466 -0x4c5822f75b91abb49d8c49c965d4e38bdefae90471edbaa6bcd4930910466de9 -0x60850097a2f42650eff3e559f0befe0df436a4dfe1ef871456b3c1fe36e08ac2 -0xb6e22fff82449396ab0a6b61abce470d509a2afb2b24f34d22c65e1c446f1356 -0xfac5b3708900ad8840a65f5e11c9bc5055f446b3554a7f028d14f25bc1aa78c4 -0x41438c7a8bd945414dd909cf22fae1b3b8d09830db065c97213bd6c9500634f2 -0xd1d0338964b194b6bab1da635e1bb4f7bb6061e943ce3850c8a83b9bb4f70a15 -0x5af30450cc89d5cafa6923e43a099e9fdf9d879b75718cc54881253b7d069d9c -0xd49b924750eb886663783dc4a82e3b63147167a5ca1dd235eaed84a710c75da1 -0xf2743f5f56b48973defe26bae30b7accda855592e4787d41fa63b270994cf353 -0xefb47d40d08ccda1d02fd4a7b980c1e109076b5182a2959b2c6462c91874e91d -0x4632d3c715f974feabde9bdba76572f374d586dc7b1b14bef00d064ed5977915 -0x6865cebe6e1d0db0b26103b78410e66f1c2fcb19872cb7165a093f216c76fd54 -0x2976948ad6b6a61422c717d450d92a04700b9bca7e514a101bac548dba8e2801 -0x88312893a6d2c61e1c54eba36b0a6452979dc9caa4333d0c389bc3ca8860c133 -0x69ef6ca4043a192f7c5aeb9e8e49204fc7b03e9693ff7d3c515763607202b5e9 -0x5c4313490423314006e8e762178e17c83a3420b718a474f5920ba5dd175bfbf4 -0x92a3a5c623546f918ea759d64adf61de146ae6ddbe9e8bd67464a2ec6a0567ce -0xc7a1f848867643bca1c738fc242ce0b1257ddcf594ec6f8dee123f012987e85d -0xb2e997c8ac5bf3c30f1ed4d223188b545faaabe5bcc0128eb2fa241ab7ce95e2 -0x58b8907a5e9bcc16022b8ac80c64716763c21ba67ad711f42d1522607068492e -0x5700f8b2c218fc9ce7f9bf47af6b17ab50ca0c8b6ab7b902e3169628e31681d7 -0x379a81667feb7c3bc256fca5a192ecef50119286fa3275093034f2f45f117e41 -0x93f2563cb534fbf32147a43c5750f373f4e10d359b4d7190af3fea17f02c9725 -0xdc4bf863a073da0a6db4c65fb5ddcdefb8f66596599c45f1d5e7f0c3eafd3b15 -0xde06031940e0c428758ec53c46a77cd1d031f5e1269136f828ebcf0b86c1faef -0x491c2abbf20447167a06b870c1d73ec22f5e069e8352ac318903b048ed51b4ff -0xcd50ae92543ed821537a346967fd3d396a0f768f21a3d8d22a8282985036d8f7 -0x1aed065b0bec4be06c6f48e6dbe79ee79458592ab7c93144c4a76e8466fbc6cb -0x4d5f27d9741f502557cf910a8ce7d488c0385e278ef8332d85c0ddfa9b770a2d -0x88a7f7ee682e6b8682b310d181c532de871eca76a595a5cdba68412d735e4b82 -0x872b4b67dd52f8767642b2c5fd4246965151a343496e335b9964cdf6a4ad3738 -0x8eed1666569ba53a96f58cf24762fdfb5075a939306e68ec60ddcca5443c0f53 -0xc3a4a5f18920a040780e2f9623e3f2de286880503939060222158c9e12ee76ad -0x3144c474d0bcb78b5eeb5a34cc6eb637b45d82cc6052e09983d13c212e26e882 -0x1531d816b1f58bf6c9bf464a78fe19dcaaccd04b0cec8af7290ab3c75a382968 -0xac9ce3f5002a823479186ef099a9d6b652de0d6416fd9a1079eda72f7244c782 -0x9da30303eb09d30fc73104b9601b99e7d6f1cbbafee9d2d0c628ef297629485a -0x149438d52c00f1fbefbd48af02310f73724fdea3485ff44f7c99d5c0e402965f -0x34105c37121e06cc74ef784276d64ab0ef2361479a134bbaf9c99a58d444f431 -0xdcf8238cf24dca5591bfd56f941135a4425e098e680a2d1dda141c29c2426330 -0xfa15d325c95ea1400c5e2070973cea962e17615cbbf893b41ce1465188915a6f -0x3bca976d60a69ef75087dde913f71d627b63cb7d9846ed51d40052eea3a8c19e -0x2a897e4c8911894b1b4ed8f4161fc852afdb3248b4bf4c1b9c77a4a255016a36 -0xd6d0d524ed4c78a69911fbc582aba685d0f0082e83cbc9303bdac2715d3b6920 -0x66a97c12fab57077dbc78f8ee402013d7785acb4b398cde6992ae9a0714cb38e -0x26e6ef994400f9cc50caa80ae42eaa500522bfd0e85d227d4fbf95bc978d8fad -0x253b7ca681639fd11d9a53d35a85b1468895273a050614bd0b6309ea08e25de7 -0xc3e51d9da1a3640790fa7cc260b3fb4ef60896b810e1873c86996f328b05e5a4 -0xf3953fda585b1e612e6dc707f95193cd457ab9cc74bb7dedc38ddb4a881fd70a -0xf4e468449ae5005d7ded2c17e388c546bd715a7d244e324a82c4800808d43d42 -0x9343e78ddbdd70626598d5c5fd14f89e50f710ebe5356c1003c3420e767ded78 -0xb6fd456a0fbbd51aa2f3a12e57ce196a555417b5f0d16f26ff2a558a38dd9efe -0xb3d9ee2427c9350cef60e022ee56032a57ca9920df2498bfd72d4aa6276f7092 -0x220a54d50ebf8f8e96f78b01a4f9952ed907bdec141831ead0341029e25681ac -0x00c2a2250eb20efc9963d3bded09aeadec8ef737951bf38beb43b4f7b27ef8bd -0xc6c556163087db28e7cd1013622719be47ec837b6deb4d65c49e742101d9c777 -0x4ad18503e28a0d73aa3b076dc43e3ccd16cb1d62be40fe5d5e2d9890a9369d6d -0xc9b745818e8d3703f7c2c916b1b3b5a5d0edb225c2f2f95ec50e87311dad61fa -0xd93e70b2817e869c738374c2b1937376f21a79c2c537d8c358f7a4e19472a7f0 -0xd5a2d5513aebf3bc55a57ce7c76b2802d95fb8f6e85db313517b6eb74b45d746 -0xabcf7cc6e10c652ef5f29ba15b1ab80f501f81508c944c7fa8cbe9185bef9067 -0xb28e258dc4a591b5164b161837f886442aa37440894e3034e52dbb2aff19d905 -0xf848cbfcfb3666abebc5bb99d26c7e634d8195d6c7dc4412a1fae3056cc3c860 -0x5857baa09da122d6b06b4de8369e770b50171727d8ec784a191205d5ee8cd579 -0x548b0cef66bd1907daf12e0eec5934830da02e8c319cb73b2b40ee32718aceed -0x6e1756bd38c429ce9d8fda9174fb3f41742835f362e717505bb797e24585c8a7 -0x1d4375574ceea242fa3f91206968966277b37cd58469c49a14a8e3760b578026 -0xd9906a0c1b943932db3c583199bb52d6c5bfc9b75c4fbab3c4087f227b6f71e2 -0xf3acc4cfa78b19fcb73ac1bdb115762a106f741a798cd943af3620aacb8cbbf7 -0x1a47ca8298514f83eaac68c7a99ee2c7b09e81077b8918658827ec87bab22df1 -0x64d0bbebd7e391cc3b025a7e0927106a87c63dbc88ac6754199d6740a74c0eb7 -0x1a43d264affb9fa5e9a24affbaf9b690716b2e5618a52d41639a6e3dabb58862 -0x2f826eb8028b646e7aef6cdfb17fe6f551e9565c5ee210e5eebbac6c716e6f15 -0x23d60c4ecd164c03c0768dfd45bef84b5fec9a5b0a8b151ae1bd984b75b07b01 -0xcceaae90e893e2f40c68b11c2912e28f3a216e01094044016c80365b4d8a9478 -0x25abc93da54693835d8cc410572aee0343a106b35ac6162821b22786d947c657 -0xb8b66f92d44f29748917c310f9181056faf01158caa068ca9b40cef99a92f932 -0x2404efce80a965a7601329a7d5d653f7b2e4748fda686e79b59c76253ae0def2 -0x0cb8c692a91490b8b7472a87236dcedc362d01f75e4170d06868ddb529f0032b -0x89ae6fe5f515fae6c3b868cf1595e52254c432c3077ce82179cd99338eee15bf -0x69aa8c76890101a1fa88d9b943cab1e708156915ae3c232c71b471538417d256 -0x6457898d2120bc077d90b48e0d52db71c08541fecb27ba3e9ac8404358c86a18 -0xdfaa8e8188bb7cdf37f4ff11cc5793dfe517d62c08246a3d388b3d74308b6fe0 -0xef9b9328c6f147833322bb9c57c2bc402d97b8f8e866d19d24803f89157e6e29 -0x34bcb9d7f2b0a5cfa69bdbccfd4a743d4e0c366faa0afb0ea6be56272a20699e -0x8c9ed49fea66748a85ee1c4e1498de644fb8ab03d9606bd16b15f9ef1ba31883 -0x9008d5a2fdd54eae6d9ac8092a7371286a24b824ffc23c4ff33daeb6db7d1e26 -0x668f594f79b1ffdf5e721fe5ed31afa637034c57a01f5fda19bef0cc3eaf2268 -0x34b655947f5a7be515a83fb512a68b657c247e36c5c541090eea9fe387681bda -0x804dca7e75b51d269cb902ec34a7fcc263ae2b42692ebbc85cd96629d275ee25 -0x1894cba97d067e59a75b8f7fd8168d9f92ff4ce30ee70365833eb554e24bc13a -0x4b7d2c43a18706318f521193b4cd3d67f031bd28cbb74b67bc2f0d05ebd2c7bf -0xb97b04f57146aa77f23bae898cf3bd762bd1257a9942055ccf10a3a14357b063 -0xdc6e16c24952845b7f64b44a06144fa5bbaa4bd9762eb577b7a7692178c0b717 -0x92418d4c6a2f63cfe8a07af339bac1eb878528e3a976d1002120356e92a8dcc0 -0x4ad0545dbf6080e75a21a642dcfe86b88f22957b58fd6c99a075f31acd272eb0 -0xcf07fe3a6dc281c215ae9e3917293dabf1c59f6d39a3fde82fa19d91d2f98a5b -0xc77630c11832be0ce8ce57e90406f0ad3051e57d41794459ee686ba80cc067c7 -0xc4686fc3990c3ffb994445dcbee00cf4f834adc74e6caa306b8431e2ddd5cbad -0x2e46af9f2c2488108ffb33efa1f68c09369d1702f289945b99b035d71101a6fa -0x2bc512f5904b288a2056988b5a6f8430f85d36ad631e085496d060b51f8a1efa -0x352b48f324c8877eacad59c09395b44af12ed797b3bb9d918b31d415ced583a9 -0x9d724570353f7ffe6a471a2da34900a480bcaded654563c08a0eda2c4f7e82b0 -0xdcaa8e5b081d57019f96d4106cd82c87d15efbe70c0b1171832cb988e167d713 -0x7c1fb8534c3b1dd7aa30342c54a23afd49fb0a8d01462785e839f5f8292672e6 -0x8f11248cb7dc749dcdd55904e128342887398773b9e08a6ba2c4a05e53bd0963 -0x5561f2ea0f77119e4a4250409cd478ee00d451d6e119d22ca112cb8d1de113d6 -0x57c3a0431c30f740ba0ab071a119ada6dcf3994b1111561afefe1baf9c34d958 -0x834c8ff0b4f23588b15be685088781a69b130d39301e6a8f210d45970fcbe921 -0xba06f87be8173117d05318af0614c78d61f8333a4ffcc0eca5d81a35a6b52414 -0xcc1a09b5ef9bcda5e38ee94e59d87cf9011a64bdb2d3958ab70caac4db239712 -0x64a982235c78b12ebe002411c285933032d760f395af59f293fcff025bc795d6 -0x836a1548ed0f7ae49ba732d6603c59cc67406b2dd1f4aba3abe673b10b8328d4 -0x8a2b42e3ad53cc6e1ded856e1280f6c6aad034630e69de9588f4c9962589e48b -0xfe2029ca43fdb90e4f5e6ea520a0d7f72bed61a4cf57494b285ec90f70ff237c -0x30c58c75e41a4d6913295f154633cb2fa73a687e79b9955bafd86389bffb1473 -0x9e175142d9f6557f94fd164b6bb9d1e164435b73b087e4c5ebed194c0f38d348 -0x90b6e6c6bd03fed83acec9c06725668f4f77a5e444bfb47774d7fd6e8840734b -0x0e2d065976f552a2331bdef0f0325571c2fdf4a480746a6c57b4d0d6dc8b5de8 -0xd0133a5c8fbddeed3571854800379468b9a93fd5b5bc6fa5f68e8cbc0e414563 -0x7e1649fa3eeaa32a3e06497f378608f45ffd42b70cf768e6416b50d6a1007eca -0x1322cf28812bce1362b92c7634baed507422a5097f7feb00b2f08e0ccd0cc37f -0x476122c23c87b2867438d5721a028a0bc8a19240e3d12d1d0513e555786e1928 -0xcc5e796bb1322dee914ba75ab0005bba943c727866f4ecdd6d4838d1a7826399 -0xa20636473b5770d9b44996497ceca1ba4f81d88c851f686195a3f27c0de1f480 -0xa28c09046d2bbb678e7755be2ec6c977f7998c25f0af2e77194641cf9f9fd79f -0x26ef57442218d847b0b88d69f83f0eecc5d02e36669da03128886ba69a2091aa -0x213ddd74036a019b7aa6c6806dfb40b7866cc7c2ef69d4cf3e364146f5ae9a34 -0x6317b6ba7818c394208226f79eb80f54ef45ad3cdde4fbd5625bedc2948e0878 -0xc13cd1d06b562c72726a7f14be48607be4c4bd2bcca4101dd69709888b864ec8 -0x0f9c17ed7cfffb5d5ad411d71de4464ab090afd8fa988f76b8c9c8254963aac1 -0xcac0ca80224ecac3a27b60f29c6cc888b74e8e7e5a957d3e06c62b3e0c9bdf15 -0xb72da3e7c35da883766a9da7d352137da582d88d922323709aaaf2a012f3f474 -0x1d56ea7861b27c4331a933ded75402b57a33058c419828629408ec9130b64e82 -0xa0174187b8eacfddd04f0af418cc5e07f3d389131ff810ca131456ee83b4b2c8 -0x75d4aff82caca938df06f33f66a9f1a593b846c37956cd6ab308280167b958d2 -0x68e4c83802b1d6fcaa3776a446ac4cd8e87c6ca6c101eb0de776b1c1260913cb -0x078797602bd6438c67ec8b9b31d3d61e230886ca013334b6576f2506a05a1fd3 -0x99ff20faa03c6a72a56c72b958d06e00dc4994dcaa02517403b4b72f282139fe -0xa6f4e7ae342cd5805630d91dd651d3664396dc05e72fdfc99d26c5b4b2d62832 -0x9b7a618d60c95902d90734c9eae0af726fbfa723a3cd16f702124747aca29f9a -0x56c4684e74618e51de88978a6f78fc5a6edbd097f26358dca5029cc16d0c4794 -0x93d2fa2856039971a751275e12a7cb2556033c084b4a067fc81a10aa767a1c94 -0x3cc2171a4226822987092c6ad7387ff2b305f4b54ccc184b0a7a74cef811a0c6 -0xfc4755693b576a6a57646bd6cea1aa8f50840541624529656d7a19a9f386bc3d -0xe2bc38f972c41b7ae2be4c988122f1217ba43953486da2827963b243f11d47db -0x5cc5779dde07cfe1ed36b90021f5bde33ddb0cae98ea71b3732413fe5f90b087 -0x78800038664632f54a137578a8f1dc1ede715e15aba25763b5720eced6eabc82 -0x8558ffc39ab28751c62546be4d4c0181f47e46b0e575ff7bbf50d3f78ede9b7a -0xfbbe66e5ecc79acbf8b924a9a56a0c248148999b51de81dd88c140a4c33802cb -0xb3153f7a4114854e579c08633354194461998b2897baa9042c29b178db08df68 -0x2c93c72ed4579aae60d78233db89527c8ed8a8adb5a80c6c272e59c1466f5db8 -0xd446c2a56184ec388bc0a637feda7b71a3b12c3314dae4398e3c2905dfac420a -0x66eb1a017a3593dc02f01f25fa11b04f592d652d1c8dd4e8b3bd8b4b886709bc -0xc1ff223ebfe049ce0c1c425dbae3b81d51c68044138f5fe52c3780803ed3bd42 -0x60e4391cee93239699d3b15ead18d3448177d5067adb02e9ccdd8bc2c5416863 -0x9c3e6760305e0daa3973d10c52161b951d86c0a3624b58068a0725d72c339d42 -0x2bd8a483856e349955499edd20a0389f68524db7e35713a1aa5ac33a0992dc8a -0x3a24d1fb89fb77ad22d1eb33b134e0a2672578703a35131f67ad943e0a87ed1e -0xdf81fa8f91124d0c12865853af8d5c22938da4c56bb68704649ee18d2051b95e -0x6c7d7994488f272c028573abd36f0e14f7d3e36571a34708b7e77e86cb92aa8f -0x54f0cf740656349b69546be0c0da2aaf5db2b72fb6b8864279716d802b116d21 -0x3b6392fda22ca7f63c4b82fca664940efb0a825bf7fc42901ebaba5dd57d97fb -0xc3cf9a5de952d2edff7df4b1093ce0fab0e1bd53f155325bef03e8fdd438d283 -0xb63e8c12da672bf14e55bfe804b1588cba1485ec7ffcf84cb4183b8866a333a8 -0x9b0257c2a836f3d4930afd4a77c9f931abe6838b0863e55b565056f335637007 -0x503f284482ecf72d58c60042524452163c92bd17ad2f171dec56a624ee66f64c -0xa4c53588fd45ef9b51245d10aaf0164147a4a5b536f9fb6cf39e5b2101d1aa6a -0xc9ba7d2ce176a4512faa6aa076ed72250930581f1ef1a4c524cdbe77245fbf3b -0x210028204863cae59264b6a24d7b75a1cdd60bfb89afbce718c1b9d0d477447d -0x825f062942ac9bea5c5dcbb1e54d812aa66c3f93c74ef7dc17553f93c731361a -0x676d077631c5f2ab1cbbb249a90e6aca2236e5d0fcb243210b02c016f386f11e -0xbae6440ea464615f3b0713cdeeaadc8838a871aba2cccdff2ed339b91495724e -0x4c383b4a4233bd9644969f3d65bca2a9b6a27c7558af6c7de8c07f93e59e0edf -0x66e7b27ada6b64a4cbf157896781b076e75c4c4d85d9c91d2ce0c5d90266f70a -0xf3b3d2f685e72434174fee39b00b826556e897c91717f0f83e05784e9a2da42c -0xa3ff18b53a031c2bc44509586df63b2645f942d268de772e5eb85d967ef9ca0b -0x59e62088ba321873335aca08a3c75ee19a9f7442d7959ea7b96d07c1b3ff1fd1 -0xae915da617f7c170c1947f77b3e53c52f798c30337388128dae9d0844e238c82 -0xd75df67fa6c4078095e92e1c5d734bc0c8fe0bcae9eef7a41440bf02e7d77ad9 -0x9154c80953278f824455b1ea1266215b303572860c79d00983f96cb321c8c73b -0x233f669e5c9502fb00303ff2b3ed515e8c6e9984620134bee8ae08c654d8ac43 -0x062ca5c5fc5146eadf28f6c0f13d1d6281e9fca34dd6a1857d94f95d3bcb9931 -0x9095662676b8b1bd4bc91f506fd17a4558ca2bff8e60cf1e09e12dbb7d0017d8 -0x4820c851a79400b69f34b66d10e011bc04ea2cf97233d1d6de94c6c5029c874a -0x62959118a058c03b501bdc5a84475942b3731e4a0880ad2197ffdd575da8d491 -0x508e9e563809c63217d63f6470c51e1a5ccd738335a9eda04c37b523a204fd7b -0x3f34cf38087df1766d6dc4af19c1f307306c76b5839edd2e35e593d7cf32b213 -0x3c2f5826706a914e898955f6275e7863097026c6b0f11a4019ead248d55bbda8 -0x0a60f1ee48bae69b32c39c425052e79cdef93ea64883cbcd52f21095975867bf -0x14e8fc0bc071ac0216ed19f4dfbac38c7ba0ebe30e9c3aae6bad62eb1d7fe5d3 -0x8cecb9780f63e1220454d7113deabb2f5064938be4ddcacd43d362105d6ade10 -0x6d9d992386bfa1cd5705e4b5cc7bf98b617a7beb25207d79b58a0f471197a6f2 -0xdf83f16533e1c49009de3e468d0f6a09038f9cbe9f03405497952e77cb125197 -0xbff78dfbec0bbfbaefcb234b397bbcddf283a40f685fc56b83ce7dcb0c40bb1a -0xd641695a2622599edd296a43f4a9b3bede4f5ca00b1ea51666935bd1aeea3561 -0xb277d2da18a34f8849f271ac2eda65622c00eff5adc97bcb17f0fd43cd7e1305 -0x0042eb3e44d537bab246e7dc9683d7de51295d147d350831f921894a8d481b8f -0xf98e998843c3d9978f66edf66da021b0885f97ed88a9b610c4adda16ce858c7e -0x39d9ab2c7f45e8f4b726fe75b0d39faf40cd5cff0e712485874e9e5bacec4b57 -0x40f0e75923265433a365eaee5771cf5fed04e708f291735ec50430c4698a0925 -0x8f9e535c685ad8fb9ce674d292579bce422794dab2a1bf6f4780f42b27e7d93f -0x62f5efbacaeb6922456f885c904ab92d5b770c6f5bf1587e81ba8a7b4611fcc3 -0x0721a38181679b508612fb1501d27fa26166fa516d1d379cd21d2f9b9337022a -0x391e13a8e1c5a29182288e73814275e705ffd533441ef43156ea1d8b92466c21 -0xdb320ff8eb27e5e9a7b10e0e974c8f9a053c3d6d6a4e9d275c63dbc8f8fa2bda -0x77746c6a0bba6f866f62bc395ff02a030f56cc7dbd9e2aef169704edc5787168 -0x0f29e32c184f38c2b87930d57866f4ed84220daae00052d9f5eeb20f41de0ced -0x83dcafc7f652b76df1ca034f5992f4f53a623dd56b4ad54c96cd52da99f6a1e4 -0xf0f20449f8910f602029b8854b41931ddde57b9ea8cf161f5aca50774b5dfeb1 -0xabd376bbfef7285dea27cc3af390513c89f59c34d829dd363fcbed16ba5a1a32 -0x2cad96baf8ef84f4bc8d9a29cd57135a897105b71907f97daed62551c071789b -0x5c36b358502399c8dba55830eb609c42c9f83e84dc42dec52ff71839479c00d7 -0xa4593e83846cb3e40114e93f72cdd9d4a96fb272da8e8ad630acee5df4a17e59 -0x6579ec395754f3196dc4797415c87d693fd267f78e905ab9bb5a8aa6f8d4f863 -0x9e4ada9017625e835eced7dd2e0ed310b1b856bd3c2092db14082cb93c912203 -0x1dbae4c4f04db81b0bb7e703f38acad94a2b0196cd9477db670f103f169608eb -0x74d2523f766409d04bd37accc9e7f123b3985ed52c5fe12ca604504736b6408c -0xdda040fab2a8b118a03c49de023a27d27469c22d9c85c98d4fe0145c7fc5d4a6 -0xb45ee0139db5f7567128e7b6132a6abbdef8bdb41d8eff090446b0d62cb4a599 -0x603b6abed14443b71374fad533c97b951030232f699e9f177d99b232e2403b8a -0x58eb58deeb969112329bb3002a03ec49db65c10fa5e17f38f12001fdde2f09f9 -0x7537dda2678c504affed15369e697f0ee5d5ff412e76cfb7984e369bd2c7796a -0x6a085e128483f6f54a6b4c88cc1737c9df09762b4a512904fb8c39b48b2aabe0 -0xf57ca7c98b21e48da27f06d7c4aa701032bbda705f9ee7f5836a5e98ccc17378 -0xfe9deffce7f2eaa354f7944fde2966541b836a3b7cb98ed59ab1eaa2eb24f3da -0x750efcc4f3778d4421f8a2c8c5a11528199a7651e75a4f081443bf44122c8d10 -0x147338893bc84751fbc9136bfe0cccf2c74e52f362f710e618d7228f8fbec746 -0xe0c889f752445672f4c8bdb80198b16ed88334f3e3b8570abc73e5ae159c6087 -0x8b95d2882c1721c9d9ea8ab61cc5a4e5e1ff0505b3afd0761d2485254507e193 -0x9200f87eb2c8e3d7863d08dbae59d7205b36d4397ff8d4f457543e7624fd4f75 -0x42650c55d3ea47d9e49b4e68c3c51ee5dbc7994486b0a1f52235787cba56fd43 -0xfdcd31bd2b63f8c3ca6b3eca56e5ac8341bbea85a4025ebf110b5abe663e3a61 -0xc1c5b40ee79e0d362496ec71eae12674bd376f45525e160aa8d0aa3d580bf809 -0x4110df625016bf8eb84a3cd419aed68f87f99b698bb5ec72d03515bfa768d663 -0xc0cf3f0087ce0e62dcdaae2e34c57e43e95f9749bbecf7e51330d3d1821f4aa0 -0x49830c0fc90f1e870514229bf84cc53a997798b07456b36362cd190ba45d1e2e -0xdaca35f5c21eabda059f0aec920d4783ff0cfb5baf86dff44eefe7dc2899d928 -0x3e671d3e7d2b976c77cc6e94ab23ef59a2cc60ca662f1a2b451609dd1429086b -0x4b96f5e079684ad10677df9920989c4ab106e6f1cf41cbd78578b155032c306c -0x517a0af1dbdc0bffa8a354447feeb26ca3ac54f89744d92a8e8dfa85e05c6a28 -0x3570aadac2cbce769fe2f92a4d1f187fde326087f4a2af05a69e5c1b219e45ab -0x2492b98631336eec55f7d6f866df7cd6cbbcbcd0838ec57b9c1284f2a5a77414 -0xf1d6ef2454dd7f5a7e49a59fe829be9dea496e1e0f4dea7316ddc2eae21b16f1 -0xc9c837a99e3534934d9721fcb7e1cea10a574bbaf0168a1abb73014ff3bc058d -0xe5bebe5169700b4a8e7b5862dc12dd8104962e96d7930695cb079639530f1462 -0x78ce2311f06f74aa23350f7850f91ec617916c134273b94d98620988766e07e7 -0xf2eaf73a6188b080af511aea2be0357ea7d5497803627f6ff7098130960b7bd7 -0x13885fe68a2b12b193ef981da9b7068388931429c745e17c4a9d6df738712c1e -0x12c1eedcf12c140fd5ac6a09934ccffe735540ba02d232f4cc879ff437fd1a3e -0xfcacc403cbfe1e211636fa083802f74f5aded94e8d93858bb69c901d8cc6f8ac -0xa56eba020bb9e1fad40cd3909e231646e5c97eb1576c218a019fca763c51e4cf -0x03ce25fe0e9dad6e50caa251af8d5d2e25ba9cbb344b0bc58bdaed14f37a67df -0xf3d7fa221f0f9fd2d9865b42542ecffb9fcbffb42da5a7ecec0d5aa276441f03 -0xbe358f99948572f00edaa5b40228cacb4f746aa61ea624738b6a0165b4181902 -0xdf43e2b8e99501b2b8b8b0b2e943d0d520fcd357577d13db54617069e2b7cd3f -0xffb5ac4f9c897b0690791e1346e07cb7974989f907bbe53e735647401311dedd -0x7098a2eefcac1783cb8b838da6d2f5d3e9e1f4c365b40f106226cdfeba838364 -0xd41540f69022f27761ee7eefad78716c295b76a546904bbce2871bf3065b4ade -0x04cf43f96608e823ffbe0337b870f7096491c217896659be55d6a145c6a8bc9d -0x65df85f88b7ae5d74419bdaf822729acf67ebb6c259524ef00c19142a82d7cb4 -0x52f05030618b9a2a0b50fffb2f63c58f0e664ffda324a979ec057752a25e9a9f -0xce782050d07ab39a83f10d8cd52a5defb64a1b12f5492e15bc8ae916ad8c4099 -0xbaae41fc2f647c19e1cb134a1dbd93b3f66542624bce117a9fbbb4e02be39fbc -0xef08afd6a911d7b5494c38e6d5f89b7d3e8b6e7f2614c60720514b60277e9557 -0x52a813607fa3da6bc49a0a12a1fc01586e6d037e4aa22332ad3877faf4e7d7fc -0x15ca6ed78df54b956cfb830ffb8435050c34c6435131e93354f7951f54ee7121 -0xce4a95b0a8f7178d2c41e8e1d1d53fd6c70aa33c9dbf7303d4fca7e90169c396 -0x1d502da8145e18e06e1333780caf86debc7293387462d149ea2742dce0e4dd47 -0x6fee23e6b0a5f3d432e597092d21d8cf0742f7090e0e903205ce95c7e86b71ce -0x8149bbcae0815d03f4d53861335a8e2f6968ac5b9ccc82a59e040b4c7d650839 -0x356f32c9deaefd29cd8eddcc373c200fbb8b0276bc7a6cdd450a3abbe496bc45 -0x86d2e7c36f9921024fad1a0166ccc029346dff80b65b590d53cc34677e739c90 -0x891cca21eaf22d0728f8abbca065df27b4a578c7d2f0f9aa81fc60742dc48677 -0xa7d5985c7531b288b7db738a0e3481a94becb52853955aecc7f59981d56cd8f6 -0x49ba448482729e45d7b56228b837c0680e86d0b7ee7dcd40a99768ef05b3840f -0x5ff38891f4e72c020e243c304c290b5871cb3ba52bd625f00cb1e305d092bedd -0xa1c86cb25bd71f24f4c5a971a9746c6b22aca9a1fb0130f16f4df384f08c2c57 -0x964f67a4451a31e5db0b792c1cd919ba47e57cd91c88b56c013adcb4ab91110e -0xd64f068e754a827026b185a085290ab958dedd9259c087c508ae05c50ae11cf5 -0xdec6307a6d45d7f7016d1791ae8c3f7cd58751983794caf234ca0630edd4c8db -0x9e98fa6c0c3169d9d35448abbb465ed791e9f4ae1539ecd3d38b56e90dffe3e7 -0x66afd64c1cc45979aca052276d233437afabab803276ca3a8e881e37f2602f87 -0x986e7ac2210d189b26128fba38f75a181fb418aa13139700358c68ebe749933b -0x53688eaa9af78936aabccd5b6c5529b2a30dde6cf6aeedd2139317e060d8424a -0x61724a87968bbfd6d7028d73b962e56cc3812ea9de17e6af207bd8f7d71687f3 -0xe686a1a052675b90c36acb6e088535bf500b7e0eed3cbe02337fdb3a04bb507d -0x6d71a6ae30d97e400c9eb8f5e41171ea19982048ea5b944e728b0d0731020c3b -0x4220d9eae7bb9a2ff6387f9df823d6a533a00e5002ea4dbf6a3a2b149142cadb -0x2eb1324e5875f0a47d01403d17aaba6a46896318ca5afc275fe3acd3aee2dd47 -0x0cdacd140f706b0da049b69a252d1bd121de4ed612e8dd0c6d799293de229900 -0xbd27b39a4f98691de295b44650c6624febbe182a8a85ab847b477889bb2248c1 -0x6cb726b027620004350f8b3069f0abd4f768910db52a297a5165d97c589aced1 -0x6db13ed6583193165891f0a21d5abe4f9f3ea697eea078023194046694855abf -0x7ee0358c9333c705fc80133e4ea28c747cf4b7015469b4daa753f8e979adac84 -0xc4989fb495d58154f3e0f3057b18dee9eab75ef3eaa99f0fff37644507e9bffe -0xb83415069c41b9a29777a8d0c8b2ce3656fc0de8b1f91aa2a5a49e7cae8089bb -0xa26580d6c10568dbb899ed48dff63c8d3ef684602ad480703611a0ba4f5a6384 -0x9ef210ba9d745f686e01bd06507c4fc2719b0b26c5693273d860db76ad06768a -0x73c5b7a70a1988124b12dfed9313b66dca5c5b8b9d038588147d448e6dc4e507 -0x23d738d7f030cb7774bb6fff3526b6c177d303f5f1842365028fad8d4781800d -0x7dbedb632f412483acc543a503bbe880449e1682de085b2a2a9bdf2bcf54e6b1 -0x8f9ae23fa925a115de4e79a8bd7e2a3fc5a0e6d632cffd1bb7168240a7437a3f -0x333cca1767a59af75dbc5418388ddb726c5f39b1189d55a5783e06b7a1969e34 -0x5e0e9e20aa09189e548a694f456f6c63e52ab21e44eefb28910cec6878545399 -0xfbef068799b88d3d69be5721cf904653a0c23add000981504d84d8fd33fdefd8 -0xa4b4b1e85701f3f99cd22af3d90743d480da0a349c7c7c6b4b4ef80ea6843e70 -0x97db7bcce1134b804ec09ee45a036f3d733a28b83c1d2bd0e2e4974bfb2ddf7f -0x9917e5624429d78f3c9368ad575f5dba3333c052c71ecfc22ee75a23eb02f39a -0x1b0df6fd93fe7e4f773f71e1168a54beb16b7af4647e050fa1bfe988a5665ca2 -0xe3725db6ca83225b3b83f754941b73a124334936cfa7edec402c13ab5c194174 -0xa6d56a054601b323473f02f8666023f08f40ec24e308cfadd60f12541889f005 -0xb37a5031ed0ce94d1bdb4cdccf1b5b7fe5c6c443ddc1bd10e5eb8a87b6d2613f -0x4a8fbbd051bd6d4540cf2bead92cd2c11e9cffcc5cd5bf8e6e759edf6f9d60f8 -0x852767ef4b8dbc35a0cba93109e1c0fc681201f32b2062836ac4117d906bc191 -0x54f58dd558641abfbd8abad3f990675f15a4d0c7423633f5a90d1357fc382141 -0x5c47893d3d523145992fb62c40bfea182ec1785429516c04cfdb914e90a9195a -0x86f25e1d8a8ed738c484d8ca1a1815af0c5034e710a00e0c61eb0f9101bb0b56 -0xd60796eadc803e77de235c29ad19f2dd6d8acfc1870975899ee601b49e67f5df -0x5e4a477d65283b43831be5463dc9530a74ad2fc644600a3e7b66059d45c61080 -0x8532af71241139216efb50e96fd4df290369c15eb8a73d45ce6515c587368cea -0xea80d5cd7c3651e3dc4b0667a6040d85cf8c2279fc2b393ede3b8fce9eef383d -0x2bb1a39770747349875b183a83671f5938fecd236e2de6d9be8ad73f6eea64d2 -0xd3968e777b84db07cd8c96e9cb92fe00c2a0a75de84cd53af7e7a10df5cc087e -0x54078aa5c67ab7a80278f4b2d69b4cc9e3cc80a2ee67723da522273145837ca9 -0x485007a2de1b95c37772a8d9762cf36235433f4348791440b8640be29eee3b25 -0x7ff9426e0f5294d591c412d617216ef6b524ef71a493add42c0b3272ad889e41 -0x996dbb554552136be47c5553ec5af25dbdea9abfab073b57e404f52a6b170f92 -0xa5a05e017137f74edb3a042a5ca47748f2a9bbbf78f73a469c61c41b47491d66 -0x075a077c4f8ced1ce1383b7e068565ab3703d6837a6c37c8d6dfdcd764bfba0a -0x1a3058724e510fed1807d9649e259bdf7af93bb5734773a6f8957c0eaca31089 -0xb918c1559284bdf328feb2933347b55a2e76f38e709f3e098e9a502c2c122853 -0x22bdbfe0f94e6bf0942b87658bccd45cd839bf5191b1a6fd191c57428cfe4122 -0xeb531c0f6db39832655872447d2a4a713e66d7ff7e1b9b93e0848cea71461887 -0xb1f57aced8c1d97cde6320103b50fdf9c2820434130f59846ad0dd1d7e650899 -0xf008336668ea5328716b7829f20965e63232978e8d6ec25c714ffa52bdfbde15 -0x083b7d96d7b90d17ef0fe7a98a38a3b449ea1df65547f004e6f720245a15cffe -0x5653bf09b61158ca100e01e483bee17dee5950179309e819a34403884521acc0 -0x45d371cc9a59206b5a57a56a8d7388b42af10ed5fa7e8420e185d53a3e7e00ff -0x4427156a058cec821804c2403935bd8487fb123fd26fedbddcb0a58a2f0c909e -0xa17b8a4262a5cdfcf898eb9f25154bd749e25ce85f45ffcda71b1a5baed0b69a -0x82b088a3836637c3885c46ce76c31081a53ca5fb004d0e07b7a889b9639919c3 -0xfd13b900fa024b6c60871d687eb704ef5cc6595fca211a93ba7aadfe1f2952cf -0x91309804adfaed1f5b04c6fd3f09ba87d6ec916b725ce98bd2f18d24b07c90c3 -0xeea9d1ceea4b4818ef841e38d5bb6107d1827caf4ace23201b28919bc9410221 -0x4610aff96eb3e6dcdc9ed38cb02055fd73efd3ee51c580665e38b67b2a7bbefe -0xa0470809ab030b8ab8a3de84889a6a22a324e2e932a01f1d6b862d15f08a73b6 -0xb93ba0a6bdf75befab50bd90e242754d67a72575ff7a1e9ec3afa9bd1c0cea41 -0xe4e2ef50ada7b5bb282da3efc7ea657332055d533388c1273bb2ce3d04c29ed8 -0x93bddc18d63725e25be899d3afc7653dc81d7984a32a69e03147f526acb0b7f2 -0x801c8c1f390f288bb8d76a8954f10111ddd9ac0c6c1ae038c5c5fd77b2529ada -0x31c7bc94c45f938e590c6147aac8e21d299911bcc889cd4f8809f2cb117a911d -0x7eca14a04977896f57308e56a937967af4682f2000e3d959cbd9e23436ec0590 -0x0a522a9db6d7697441e20151bf5e460fdc2f4c676e72afd5e394bcbabfc7ae13 -0x0c782cf2dd8a822495f179be136c4af4227f91bd0a826a553ba3e10703d7afba -0xdd3456e8aa68d88420c8b8037766797578b1b56d6f14f262657b04a605f800cc -0x1760106d5988378b6ee45038e32c43bfe2a906300b7c1fd43c1ea922fc2ed858 -0x8b658ab264a8be6da51e3a196cab1049afffdbe7eef37c3b056c843ce765230e -0x8d578c553121cf3eb3d1a20020a6d667581ffd63bd2781e3b8f604a74a33a964 -0x1cc558e26c4e0516a0cc4045d901bbe917965f34588996aa1a761dcbffef1661 -0xd1cbb5ddecbe9bc1e245b1972bfa4c83baae94b66678749f8332d89c91ee99cf -0x6e2fc15d75b4521e25b757875a78c3bbebb9b7c34aeeff1dc302a44ec1411817 -0x29a87150f920b2b8bac31cc9e9350860991abbe8b535a164ab56612eda029814 -0xf7c86a23f28ac48a9b013ca42905108820b712973507b005ac2bdc6ea5550179 -0xeb413129162b4361beeaaf122503431f3fc451ca1f2792899797b3ea6b9b8871 -0x096e14e3b0c6b6747ccb2b674f695fd16a861e49e447c6c28dcec7ae789a2c8a -0x9542c270e7dbf38012d9f36dee971ba5d0f11753c5c54f555c735edda9f5dc0d -0x368b88e387efbf01a629125f872807c346d34248546067eec55ac3cf671b5689 -0x4ab4ca7eae76aa81984f35bd98d7fb33f517ad016131569c41c13363152fe81f -0x3bd42afb2abd18c2526ee7d75f1d4743ffb0366ed872192d6e1cca5ec6a732eb -0x2f021e3edd8a900ce9d0c7ac5c842cb8aae0dc129f0a6c1e92c0d5fe24cd4b1c -0x4db21d2a5c65146920b295309cc87cfce53ac036e23b7f24e2d84d46093cbd56 -0x758c3a2437c166b7fb1fdff48b8bcc0ef43a30d71385e796864f1b888da2c2dd -0x0c0321e17817c3f331add78b7588258a70bc87e75e052854dbedd67378832165 -0x748970e7e3c6160ecb18b9c860558b98fa813fd4e9b7fc25f8c8e39b4036d4e0 -0x784e1dde397e303ec51d6f72d0f1d3661c7afb77e9a76cf49d34a9e254307541 -0x817619feadd225c4bae562b025f3f8f0ec6c12912218b5b0df025d6ead6558ab -0x8722a3a8d59935bbf83e54cac1292bef33a2fe5a15bd5dc05e00a5a2e22ed873 -0x57e23883978f8a3589a02c289c6c1a7716b316578c1baa3a6a6121dac3c357fd -0xce8d394fc967e2a4d1e687cda7acd55df3d89675989d081f8dd48bb015c7bd9a -0x066627f3d8a8856e483540556fe8e2a72e3c6310fe22b73e228a8ec04e5c2b27 -0x8cadbc7548814709f4816629e35540634531e07b137d8c92afb0ff99e0d3bfc5 -0xf543f8554fc5e04a7891fd9fd226c3417c74d36fb785e11ca6d8d1b35886242b -0xd0b3d5ffef956767070bf0ad26b471dbdd650cc73f33b13c481ee87ae5b60fb6 -0xea8d2924a9f452f9d5a6fda7cd574fef80b1636b094f4965247cf6fec1daea01 -0x73bc862708f49971f915272ab5f550c6a99d89a87388bcb241f25a3148c78532 -0x75fed4b57669429535d207ee5e2a5553b407e6caa4ca3625c3a2bc5a1436cecf -0xd844ad8c161ab9a9d093f5d546111903eb7b0efbc3c66cbd9e5eb48d1de35423 -0x9935964b891b23f3d2791cd0b02a8306102d0a37758c9c0911332b4a7db5e80a -0x52466aca353c1fcb0c832f093c23634300325dbb27c7a3c2f1122d492452ef83 -0xfb85a2456dd0758f64c36e38f91cc66379b79a86a7c3194c945111dc9fdfd99f -0x8d51add5e61d543072799c4139b4077f2d75be446246ca2eae021613de910678 -0x5eb7f3329dab77ea63f89a222aec08b60a4bf692722d64081b309843c9aae10b -0xd4582b578e35f14ef21023d800ed3ce5797d2051b0ccc7da871c01cdd81969d4 -0xd812f265d30f46352c33942e0a54f9967dfc48a9b9aadcfa1d9ebbea59140deb -0x2def762945588c6450923f6252c981669f2cb9886cce7a3e7dcc89dae4d18b2a -0xfb76b8d52372a7bfd97d315ae0ad5c8454931d9f0b8911cfca0960fa23b4fef1 -0x9053e6f49872d6be54942ceb594ea157345df193cd6f913c639696fffab28463 -0x04c2602479d166d3bc353eeb0859e3986fa12372b839d6a1b059421a291062ce -0x1e52f494fc2767fc6e4be672cf5b639f663a0a8be19fd681b65ec9973a62a79c -0xe98a7eaa6498dff52ff10485502052bade06696e897cdb322f231835da9429e5 -0x5e27218cb9c2f1ef9108c15bd6e087ebcede85ed9a8055ac2a1a4c2165700b6a -0xfb4537a1b40e020734cf0932cc937023c09918b9dfed432095922c44d72e5f41 -0x080538fd465f22ddc53aaa1f41648136f54f91480a9d1650b601f94b64d485ff -0xe3cb342c6564279274d0e3377ca1fe8b3fe1506b52dc4fe7d2cfa5fe4e766ec9 -0x01c7372415efc77670b83cd87e26463ea69a3947a69bef29c5bc08c43b12e733 -0xf1359fceb5a4a5b8d3e62deaef017fe47fac128870b407c8057d763b70e654ec -0xb422a630f4d92cfb84538f345d22b74884f2df32ecb7160a7185f3c3dbc9ae0b -0x7d89f86d58b40fb46f76441992c142422f74752b9597391d44967e8dc68b9bf8 -0x7aa64c6dff815b4261bb081080b382159f16cb4c4e6b2ac6423473e02b36b8b7 -0x1462b66bd87df425929dc31b9f98a6d282829da5b3b1fc522efc98b94dae0f11 -0x5cdd0c07283fa7e3f0e832a03e3ff0a4dbf4c730197a07dcf5c926ad3edf104a -0x7887377fbf7c0a9665f29d71b78c54f93600fe32caa6c89759728908c5322018 -0x21e188d07833cedd45623e651a64af5cf896b76c920e51868305359312fde23b -0xbbacb24bb3852bebd9ab34b79e41d5e2f200b57bccba71be80fad6906f905ed4 -0xb07bda7c09a3e102a88c89c246c6f9bddca9b498223a6b0d5b5f25de4613e4c3 -0x1c331c8b24621bc2c8503c6ff3ea5743eb8f168a94934f2f0ef37aac9c878a6a -0xbcb4b07973477fd44e092822f8175fc1c63ab0977fc630c3f05e88c8ee1d7823 -0x7371aeb1234382aafd1d737d2d0af3f640c9c6f5a4d1bc06e57e766eee3b2707 -0xc12d1d22b8c23fe54bbef698530a010a08c434850b3a4c30b298eb1153e9a6cf -0x614d3a9ea5dd194040be8701ffe3f19a791327022efd335b5cef5b5694fe805e -0x9581efa335aa90a4f2624f27a7e937a798c73f24bb589cfdd1308d3a2f43399d -0xdce5ac26384d7a2fc122355a2c94e5d7c8b4753516aa4c4829244d79a730b8cd -0xca0ed9d0802f268a9bf31319f144c3da87ede0ee8b51f04e95e204c7f6662712 -0xdb7cf96d3c72ca02b643ce5a80b2e1c0df2107cb7df57519dbf9ef82b0f657cd -0x251015d109d6c579b7a661f0820866ca58eb0d12a8f25f81684868f6d690f7ac -0xbd093fb328050087dac62d3f162330be8dbf54f72eb601a67f7c05f9a0050f0e -0xd6b2b755adfb7e97ebe21d00888de236f7b04eeb8e7c8b942b64fc4b6c1e2ccf -0xd9a9801d86db038081476b4c51e9d0362b12ffd51bc79ecb6b957f5a293b9a84 -0x3ef98e896e313643f1fdadf61e85c7f6cc7edcad03e3c30ccdf454734c2b2bba -0x3a263ca4594598a2f1e076bdef5243ff0d3f9f16d85748560b36a58350ecdd61 -0xc83fe218ac6fd894a025d7d5f62358d4c0ffe53d1e67e3483ade5d36382483cb -0xd2b04eb05009f6640af6f6a1c1833ef7a9ea2179e5e038360324cd880a74d6eb -0x9a6cae0ff7302a9d2cde5b1b8bfcd7e84f8b32409ac8af20c05b8a97dda9bbbf -0x32b3bc3a4f17cfc1311bbb5d97bea82aaac787aa0027df8f63c4ceabcde693af -0x818eb945590c188a422b741801e6b09beb7ad253c413aa6183fcb4f616cd6f04 -0x58d8102f7edcbc9e84da91d22f582693dbb0788df3445498d9da2b68613287f3 -0x9687bd5d4b25005e981458e00ad34132455809dbe39f1addfd994c41b14398f4 -0xf9a2d79b39edd8017b62d00ad8ed56187f6a47ec9bfcfe5032bc546137a03ce0 -0xce4b13a3229585b06251f770fd8f3188817c9314c2065746c7cedf047dc30887 -0x5588c29ad11ac604d018f74d6b824cfe05776786b84fd5edd3b1bfbd1d5544c0 -0xcaa92c990b79aeb85618abdd5aaf78f3e67287e422130b68e7c06d4c005d4f28 -0x4b9cf1bf962d89d1ea306f954cd8ce52c89babf6d158293936337db67e0bf298 -0x43a5d4f9db55e22e87eaf9b3fec739ffb94937bb43ce819f3afaefaaca71053a -0x40a8b647b0794a287cd14cb6f099ee713faaa04715d7b9a6f805c5b84fd9439c -0xd5fe152c403cbd683b394f456e50251f068ab125c43bb48ed761f1a3c8f3f9bb -0x980deba0320764d738495edea17a0d472578a346da5132cff4ca519ad191593b -0x59f64bc56367ee183f27593d5c689c4dfef3656110abea026c801e000301fd27 -0x4597dacb8dbbf5fbdc0016404ea04e9ea33f2251f5870be23d7c164d6a79f11f -0xda96aa92eec699f90b0545a5c85e13dff7769388ff76c3270c4a0a3a7f2c46c8 -0xbc9afa978bf34269efe829f586950e6447ecd1e71b6146df4b131a19d847ee61 -0xe9a743ff0c52fa6cadb3205f1f48cdc5da1a2e561d1c8b7318e51f0e9d2a48a5 -0x6490ba07a7c5e15bf173250c84c057d3b44c5e7433ccf7c8dea320298d6666ec -0xe74a9a11a469a633d10434f36e2fb0f121a8291a6b163f55b398810437dcd5fa -0x8fff101877ca22f868c639e5d9ba3a1371e84f50d43c2e76fbfb6d9f2d10dabd -0xf1348ecbc2f37070c1f56d4f38f3e3919b7bdb43cbf5401cb065877e1a4e8c23 -0x60e27af6409ab6f6321dee3d60c4d52a2b68df5c77064a09e1cacfffc8505591 -0x226a8b8586a437b2d6243400f05e55020464e817efa4fe593de24de94098b619 -0x39e27db166e87e8f78c26b16948f25bb1d193ad88e718b303ea6b88d414b31eb -0xab2e1715332f816291aeac922052cf86df5890763284caf44772bdbf5192a10d -0x0197d8b8d3d9b3022fa2cc6a9f19f649c48714e213957e033d866f656359bb24 -0x9e79dc126bd51a8170ce91fb3549b71d0558fe49c31f07d337127815a3a5b29d -0x2b17ef6f3a425f858481445a6b2170942029cad74360d6c4d71746b7d94fd9c4 -0x8e7f72a2f32bf0dea85e03e6069c9a6fe891c0444eabda7070745e247fe10d49 -0x16f4770f72e72659d7570e8f612cf81a895dc3717a97fd9286ed2c20964fbcd8 -0x5ff4d15f510c1fbfc0c81f1fb3be39b2297964e1124d240f96966c4480f600b4 -0xb7aba6b6c10e5df4e2c488a2fb12f1ca12fef7c1b717d18ff8e8e866ac77ebd3 -0xbe004cb3fc8cd3cc234e0593b2d731f88e72c1934726975dc98f57996de11288 -0xf030846952f72180c5eb0e8ec0b1f2b037812a1fc06296a2668712d5f6da5de1 -0x891b44e0634a25eb09ce13379d3dd23ec227b542fc791a9ec1279dad54de82c8 -0xeac56dc316119eec2044adc94e8677450a6c97878f2cf44c9868988b0ca72a10 -0x220872fbb5ff9047daff7465e66817f17395996d15abf177873e9436c17dbb64 -0x3efb33e42d8f2bdf71fe899526d24b9258cbf8eacae19fac322a7169db8ad635 -0x27eb32c8eb7b3eba0ae8f109bcc8a0c5074c08ee87f507d21e6acf3d1ea2fccb -0xe4c9fd736f71157738f65851ad35f59720c1a7d89ce11465f861e28b8501bfd0 -0xd5446460acb4c885518ed8ab6b0a91a3449537eb40fe878500a65aff6b0f34a8 -0xe2593e52cf115f13b0b46d5fefe3e27935ae9f2350cdcf8061f062ec64e744e6 -0xb149717eea68cf181571c5089af56ec99d6febc12f92e7e2844ee1e916ffa86b -0x8715ef8f34ff4243320a734d9f9ee95e2f737fdf0155c3d8419e877992cbc02f -0xf246062db2216d613914fe1300409166fef48b83ffae5ad7774cd46851d95d4c -0xb171b97382e5e840d8df9941e917daae0ab32b88eba3112d4e6f5bb0b96ece70 -0x5369f1cb93b9a2e0d6c774523d07e8635b0ab5638872b3b1573dedd8817b98d9 -0xdb448fa07f46dc467309e5f200633289e81ee19868bf91933411b8226b88b6ee -0xb19551f86e7ee7c045789b3904c48f8b200449bac2c41b3576fe1a52f2844056 -0xada465e69fc4803fcefcce4ced61b769a72c53ef36a90ef3556c3345242fc316 -0xa35e2c9049671d7c6b1b4ea3cf1d2212834011c2b2874557c3836c39e87aedeb -0x16735e8ec8243d612196a854bcf38a408e04de441f373b9d8f9def36777f61e2 -0x65d45b82cee8ebac2f69f2d63e132bc554691868ee3364661f7785e2599c3e00 -0xd9f9070b919481ee5f5478e9442368ac2aacf8e0d2da1f024d4a50b319710a59 -0xe7d92eb339e2d16b0aeb567bde4ceb4990e78e9bfabcb1423b0a654dae07ba40 -0x13ee3b32494d526a990561c446c5ce3c4aae6eadc2d605c71bc6bfcf287f4219 -0x23ae3651cf546e81839fc3168988eb002b1b4fcff21096c591cdcc7cce593d17 -0x7642d3e8e8ce405aba595baf1b18fceb661851a3d36b4bff325adb5632a8447b -0x51cae3a0f01f2f934b6a3cfb4a8a8c516d38ae76d22d6bf745da893db0f8ee1b -0xc256b8c05660695115df92bfb763321a0fde6b1191695381d256e4d474967dcd -0xd2786118e2dbe388ad556bcb8f7dd453cc0bbfc327b8a2eda82506fa7ed027c4 -0x4aa4d3c8708db252ab95305969546d2235c3e5d37a3e2df76b64480e6e8a574c -0x4f0e31bed3a309f2bf7e060589fa23dbbe8ac95a0e6c985ff1d215058cc1a2c3 -0xab1f3c16e74aa8c962d29aa661add435d842199d96807c44c421f06b9b1c6474 -0xb4f41bfb165d011e29fcfceb9b89b27a3578b0279987372a0746c61aa71e6ca1 -0x31d05ee77e3232e6cefc19470743fbb48c700bf9bae21c58ea2fedd7d2077f8d -0x9397b8d3edc93bbd5e068e855ef2ba277c13a53a669e4c4d6aeca4d3633ab490 -0x72a484d41ed80952daa848945234872a6c294422eddedbc346eee2fdc193c7ea -0x3a4edbd94a8caa0036e0f386cd1fba9fc73a7392023b4d217b771cdcac2e2350 -0xcdc72cf307135fa1379ae03c52c3f4f66a77b1c6a6262bd9f435c07afa2895ec -0x7a8e63787dbbc7858c6b8a95beb3ab9b906c3ba45a53e751a19b30c540957f97 -0xa562caf1a79e5d174bd09e68bec3173ddcc5f6ec16908190854766e4fc6a0309 -0x14fb5086c343b7956fd3cfda473afc3b0c12fb76e48b20722a20d4a3bf2b8807 -0xfc0fa2932eb98c0163d17784b8822c3d0a4cc14bb9c6e119dbbe272c60c57b18 -0x4b6024bf762f6209cbfdfc5a44999cb8092726cbb6e807deae25d5710c4ff527 -0x2fd8aaa8b1d984e5180ab78abc433b7c966a4a4a9f4fcab532866de874deb69f -0x056078db8b7a42fe963de175c7e3c08059f7d9ba97210cc32aabf37b69f77e10 -0x1beab31a98bf18529a5b7a72a1cbb5ebdba8c47784d0eaa672ee2645a6b4831c -0x25a8ad1acdbc36305d15c14781217121ea1903c4d7e7a4e1ea6ea6da5d50b3b8 -0x81643a8f5c4a549c921c01b4d4aa2691dd9b3bfcf3c9017bef4331bedd5200a3 -0xd41f3fed9f00d487b6094d624ef55b3803b862a6d2f3f0ac8773a4a722ea2445 -0x77726de2b15a3004ccb8fc34b3e093dbeb533df41e5e66085389df9f08538be7 -0x7fb6f02a5434853d1e84eec8667451c84c7bc9375aaf05ee490fa3c4501cd786 -0x915cf4e4dcc4e4de8b692cdbe3a280633da9e8409cf668402e00054b61d696d2 -0xa2a3d13a208bbdf56f10e16db18a97b2b6f9f5b7fc9845ec48b620cfc095839b -0xda704cb0cd77de78d40b8752b65984960ea7eadb5ac3d43c3b892924ae1e90ad -0x88dcfc3dcef79de672289b3205461633e4825edf8f37b05f4192410ea202e681 -0x905b1729b90ea3ce7b1cff0136b5c020b6b096e1bd2bdcd9d076b441428f9871 -0xc3a32865dff6506b7339e1f8d3b7e4ba01f2101f9c1842af72ea9564f1983a83 -0x8cb62e2b39aa46541a5ee8db6c34f710c55db3b26210d6321cf253976eaeb598 -0x8adb2ccd05b7b8df58476dcf493a7d2458da003dc6b568739ee1c62ea7cc48a8 -0xa525d94a0f56f67707b9762a2e51ad98a5bd9f37a02fe0bd1abe86763118bafc -0x1445e27b9bb77c334250855cb68eaadf0a89231464b1a29842469ec3e1717281 -0xef8620ca60f8fbde02400e1500daa368ddca70d9db145462d6ad417f3d0e2cb0 -0x21019c8a4266074749c1deb7fab0df9fba62e344d59478c0d5bf93a009aea8b4 -0xf6857e0b048b8fbfb972bf67ab71fda55bb02411b9014c1b015918c5b8899725 -0xf3a7fd0abc7176a7b6567ad5ef519236907eced101112698f95dcbe4781fcf24 -0x3184eb121f44e078c937cf9097e4e3356815129aa435cc0187c31c613d5d185d -0xe651002f72963369b95c19a9448e5c2ff43942d70c619c1c79c8824a827e0092 -0x07b1344a6fc939527059757664aa71e53c95d3b563243383798491843795875a -0xad7e4ea513ed53eb8d592bda9bf2c48dd0a073470f8f43e301a9e75ca27fbcc5 -0x2b824dcc87116284968e9ce1d39d28276c21f67d519365a123c8c550a58f10f7 -0xdf420c321fa38c1562c3eac220434696fba55a4a67ef005e9c6576cafd563a2b -0x0f32f1b96b42898f8398c219573efac58501a20e0e9fc8035188f975cf01bde2 -0xd20f4007360f0984ef6ff5c32a9ba1bd9593665e7c78c0cfcab1d6f76219e335 -0x5a48022c1733b42486aa7c53096c36db0974fab410b028d98b1272c17663d091 -0x1c9061b68ec71b0837bedcb51c98af6cc847f0cfd7dbff8b7f3c75304bd95add -0x2a4da9539ef29b4be38a3ca9344977412fb3d741118e62b8ac4cc012ccdc69fa -0xe7b727c0606bb08e23597cebe1a8769d50ae6ecee7a83ca5ece1c3cc3893743f -0xca58a0d1042eb2fe91435e379cf0159916a88581cb239d1410886820b16256e0 -0x3f31b835bc5b04f60f61085f6feadbc9845729c84b2b728a6fa87fa65b366762 -0xe6ca4cefdafa7e7b97eeeaf87cfbc7d5fb2294bd43f6274184c0380a70abacc7 -0x3b992e0632fd2a4791d6ea9c80d74939a4e2f9816a58d67b7cce94c8123f66b8 -0x41b96c627fd7bd7413079e8c2dcf6796a54c0b17296dd03644ffb7c1d126bfb6 -0xa287fdb0086f94ef8c0eb763da99826448e7c59d40cd19a31a21dbc6a2f43e47 -0x8f86ecef6d51fcf13db1e65681f7ad8ebb8d3c6165b56557563bfaa963d78521 -0xfd9ab33c4eda05d57fb5aca87c009ee31876606e244301b43ffb664e49079155 -0x2a06cb63653bc25d50488dc5e85943db21f64c67e76052e197d5f8e0e5fc6044 -0x91ccbfcb396c3b4ff8dbc11e26a7dc6aebbf00b9016c2e273e3229a9be29affd -0x7dad022b1279b03e0424ecbbbd056c1070463c454bdd87cae6debd091ff46970 -0xbeea98d349e859d15f1e58578a94ccd5ab2d97ba52f8df7e41aa15f22eed3bc9 -0x203637400eb39e4ca59a12979c83ea58c954b4147dad5a77d5e30b325d07b0f5 -0x2d39d0bbcc2b69d1cd64931319846f03339b0b4c62be4194c55b10fc6cc9ef30 -0xde5e88340455ad5e4cd7fee4d7ca5b8ef232e4b5bfcd59c86dee0bb5eb3cc658 -0x9ea37112611b2897f5075ea9461828408c4b2b9c2f636b8c08ba227e9e20307b -0x8b5fb6f7219bc291b1802228dd19a74a17a0e0eb5b780f8f14461ac85cc77343 -0x82c860eb025089750e09b9d6df88b81a56d79a5f528d7067ed924fd5623df4b2 -0x5119e95cf2f36cb1f8a063fadb1a7b786e6c0403f1a9c36acfb8d964861ce14e -0xac2cf05347f7389e29bf4c11ab03ccc44c774799bf4cddba8d01e254c33546ed -0x9cb4524bacf9ab9dc653e7cac6e2fedabc5cc8cf659868d039cc4f65552a6913 -0x9d467c46eaf33ff657eba46920856b114d7b32158cd70626d9a00bcc393d1559 -0x6bfe760ef992a11a8e9a5f42e84b2f0884771275b8d6ca5b45070be0931333e8 -0x09e3ea1d46b5f6d57a23c455bccc90a49212c8cdd2734c1c96ad188afce7aebc -0xe5dadbd260bb9ea7264329a46c0e32f6ace0d7889e0860816c295e46b1d8a05e -0x077031417ba5bae5b6380221baff1b7988e8ef79505584d19e8bcf97cede7aff -0x82ce84071fccbe533e9e77551d7c4ca52ea8b768fe7f68d90deeadd64ddf8af7 -0x29828f53204a5d55d854137d963bff6eee5eaad3895c4638e63d6000904a6beb -0x8948df23d6f6ecef9d6e6e1adea2ad495bdd1e0ecc3d2a52a1ea75d4ebf6d0bc -0xc72113266c13978881d588ab240ba879142730ec6041049f94d8c2e4376ad254 -0x4d7c2a6dc864ee0b0636d8f925dec5801b233bf435c92c84efac72ad502f1b42 -0xca0117ae1bac0b3bcbbd0f24604a5cbb276c6f965b27516cd9b1b79d80566f10 -0x9354d78b8e9876b734f36508af97802b1c1420e66eacc369b7b2168440632b46 -0x8f7cf6a59079eb10260a51cd8dd6b3132b4d6dc782fa3f261b857ab4b6be3a7c -0xcdc9648a2a5838fa71b754c934062383486abd282abd0495967171377c715541 -0xeb134e16402d1764b483f62afa134b1121b2eb4e93c71b7e15a67bb730abf1c0 -0xb003fc8a8f67a69426911e5a35bd9d577bb41311005277d2704f6247a66186fe -0x4754cd8229be2c3e5f354e469b3edb5478df49392c3f5d8425b291a91a17c274 -0x4dfc42a646b3b5891d8a6ef6ea8d520e467760e9ff91c89dc57e10abe70f4184 -0x7c73080fc91ac5b6c54401d79d6d873c183b0b264a9f3c76978cb5e93e3a6af6 -0x721082db3f352768e10054ed33b4f6b2739227c31e321adad32c1558c06473b8 -0x33b14432c3da67e93ebce815909796ba49f63702820ea4ad0a97da6aba37964c -0xea85779af56ddc8d9e944c84145c615fae245869620945f649cffca33cd0b80a -0x1a80d368816f4bafd3ef3df89fd59234ccb81aae7879853deff4ee494035c175 -0x057eaf264d46c2bf3b9ea37928cf0f0b0f0c8865af940113e2d3e374563e1ac2 -0x385ddf63098e8d97e72f340a90cf8837b36144cd5fd090cdc582d6fcfc2f830f -0x9d96fc0328d6d9e0d022c93d3786a906be0e1ea7bfd20e6f4ccb71e36922cf35 -0xa49ff4e071c9e550d837a8c7a67b38c85aab636c71be7905ee83ece42433502d -0xff4c67af026e4e8611701be6af9ceef1fa49c7e1a00e1bfa88f2fbabeda6dc68 -0x48659cdd92ae75f61d197cd483c006d610b04f3a95d679ecf21f51b2e4b918aa -0x6d61d2a2e38083b8c99800ab413c43b3cfe8aa3d191e18206d7e96b236211819 -0xa0fb3a8cdc56cec38176f9657acf8b9ac1884f176d7b3a06fe9fe8a93ead179a -0xa157d1ba094be6525a6bbbfc1fac7bb9a3572f4bc5b5ee1361736441d73c738a -0xd23847cb083fcea1e416c99a4ed6b01601463536f096b5ef0e941f67cdd18f3f -0xdb519478f07ffa400685ee43e95c77aa6810f60f9de8771c776c512ab8f3c23f -0xa80fbcff82e85ca74c8291808f9a3f8391c0910d4bf85aaeca6dc104bef2ce04 -0x31b5c67045aef20326181475c5453ec84fe0dcc2daba440c1a4b7d538125bc53 -0x22c40fe5ffe2db4882179fcd92be88739bcd38c48b72dd0c623fa5dfd8a56194 -0x68615c89ad14320f3366a034422d76145e4528d2733d9a94576c14b35cbd1310 -0x36128339e10d0dd28b6694ff94afa0d0780c18385091f58212745ae56825d399 -0xb19006d2bf39e638c9999e786116f8c1a06b396acd042a556cf499470130346d -0x301693b69b48c867efae107b8d6e83d66898f1df1f7ad289b7c9957a4c2a02d1 -0x9573fdcb32a30e9f7f7d6e5f03b0c7ed2c51134238d41b169c4e8c10ca1a06d4 -0xcdf970893ec3052b6023808d19fc4f4cff5e0df7254947f00679c7075e65739f -0xa7b5b5c53e7d0e41cb8c55a79ddfe5976a6ff34901e038bc8f80794e75369bbe -0x475178a8fcb3bdc8e81367062f30d52dbc3dc9eafc005c0e8b720127716a5c6a -0x37bc4bcb181917f34f121c1228e08d322528b94d4f36e03d39514ff1b9032161 -0xf36a0db780afed0615bcdb51f4dcc4cade4c46439c4987978c64ca1d4aba910a -0xe12e4bfa58f21b39be5939702f396ab0c9a1e5f3aadef1ef0992c4a7d8447e71 -0xc5af45babcc2b8862c1c20236e3aef7a2c35ad0f9796ac59e87212dc2181ac10 -0xe3cde8228c66e9f8d802b466082db1d856efa7c6f70b81caa13851bb0d84de49 -0x86e5f398d04e84f1ac57b74265b8639ea110924e6b7326ebf54be56210145ad1 -0x680d9a07886bc32c487df776588d1acdc7ed9e1244ca597eb301eb878ee636f5 -0xbf08f8f0fff90d927e61f0bae8f7916d9974ca404c9a6181fe591e9a5f8121ba -0xf566fafa37b9fc2ce3c95aa1d5898ea8a12e0bdc7b472926495429382f3c7b38 -0x5d8268ceebf6086af4e759c50602b0813f6877d39ad9e6732c640ece24687c9f -0xee2c0d0e91d6ef12ab11e0b6f5025c76f48a9898a8dff1aa29af04ffff8bb441 -0x2f6754b39f69a9c84a1a25785e04ccac2fd6fc50fd12aefb1ab978cb50da4354 -0xd1140a75e13b337359edd79ba430deb395f6e6a26b63ed1df371d5c18243b927 -0xcee9b0c5338ef3cbbadbd6401d1e595e73d89ff22c508dc865879f094ea42dc1 -0xb3911b2169db54e2b4268d068abdf51dd676fb66c3b07d84bb09c6687ea1b27e -0x26223ba65215f19045593020a1ac95b3af3775c31cd859a596c879c913220dae -0xf3dbc66183955e9727159cb86ce5d964a81dc3583c9feb14b9d346203e2e32d2 -0x693b1fcbb334992ebb728dc61b82e02c4f17ffe31051af9b324f71fa99ff2947 -0xc67aec06bd3e9db9d13877048909c448e5603d7bf097051e5fb1aed866f20ab9 -0x2e19181da169acd620abbbedfc7cab800cd021e9fbd9476a95b0896b9949dc53 -0xd46a68786ea922939788166a7a7d5f97259bfecc6623b38c23f7a2e2dd934b66 -0x9430a669c541fd6a9195ecd389361447ccf56c013b84021a53c1bd53e818ce6b -0xb282d6658108b988f206ab1266d71ed7d9fccb45953b59e9fa979d28505478a7 -0x8f4bd8e5ff9ef71591e6fb264200c9dc2a7d3d7e54b9ddff50188771eb6ed7d2 -0x60d039bb747d19285be1734a7a05cd281058f9cb1cb406b31d459a62793c31bd -0x8c69e0783b092004d67545c443b652d22d9ddd97e5096c5c353a2fa70941ba88 -0x11c6cd52ab114cf0571a938e1b6d971d75642e6ad33d5b1809b010da9099aedd -0x0f02de8468a94a9c65a0cde20b511bf646ad0553e95f521a0e60fcc17983b9ca -0x31edfdb32f6508366e01b688eeb6046d9fc5432d4916b39091afcb914fc9b5e5 -0x5db8cb668655bb1ffdb79a8c719fa3f4a7ac81b08fb1d9f5278aee1b071c2277 -0x6efa0081b2b98624e44cf2b144a3b07dde5ce0689b1f8edaf8ad54fc7de1cfec -0x2181d70ea183a3777eb20d656b4db513bcff2c9993a926e6bd1b0b1843adacc0 -0x36707f79cfe97a192271f4bd320241dfa6a2735e48f250ac832b3c658123c5fb -0x79c3e5eee50346f30241969af4c38dfc09c2fd12a02603c14591a15421b8e459 -0x51bebe7c4619c9b4542a7ca627ccdcf36f0b0ee8f8ed47d93c2ed6be34b59514 -0xe29b76b1d8c8f8b4d0b55805cb541fed72185271e417808262125ecb281e9225 -0xe21efdf9c8ab17df77e1d8fa4f289930918d454ade9e1c7869c7453e524f176c -0x7af7ad181ba451823e38d20330a6de39db8a94146306fe81455d415fe87d584e -0x184fe072890f39731710cd2b53c0980705a4656c40a4cd731a0dcce105b87432 -0x6d5f763f7dd7de8723ce4613ad376464df994aa059fa309815b85b3aecc95372 -0xb5b99996571e4319c686e45b618b185ea4eaa8528fb4ad0f040b39ce8bb79e78 -0xf3ffc876e60caed4fa8f7d75cfa1d73d943ec0f353ebc1c79da784524ecec2c4 -0x3b28f5a17e83f4b1e6574a275e8a61fa922cccb1d5ece48c0a7a8f47538fa351 -0xecf8513d7fc25e4d58e287de1df31cd8c491405314804629275c6487336e6ffd -0xe4642a219abd7534605232c2a41f973fd139b50e8d4991424c40a1357e2ddc79 -0xee834b7778152fb6d9f40226ddcfcd5123f37bf6144d8209a9dd206121474884 -0xca82a77a94ae18bcd2b4ca0d8f6e6f95389a9d28f2c4f6d71a2443b9b47bf1fd -0x1e9179ffd125543a79610ab5d504df39d980333bfd96bd1fd09e59fb2827a30e -0x5dc936cc85c8b79dd2c4f08fae6ae4bc57073607112223aba38ecf287fad4063 -0xebcb32c0857c3a310b6335f0e50a4424d60b633c7f2bcef8f260f71f4c9a3270 -0x62309b5869ce955fe282f88d81c912a799a499d8f012b35735a2a939ecc710a2 -0x4e13f1abfb306e2ba8a22d92db33de9f7ae2a103604996d0a79864eee4071044 -0xde8ab055ae9b245c5bb9b3b005336962bf1f17afe681c7216c226f7f1e127c17 -0xe5066a2478e6c1cf26eaf6e558423eb82164b15f3906f1d8a648185b3f2c5e00 -0x19fecdb8a1239107b12a16b68d65901f5a81f3a7a1a8c0ad42689f71635692eb -0x6e6ccaea4923f44416605b016734a7435a8ec49f93bf532d0aa505df0ca0df1e -0x9ef1d8003c8ead3ce415529a21f125a5e72db529d1d09c36a3e17bd1090e2463 -0x186fe3b6eca048e5db0d0351fcd51f9b30f01dbb50e531b4cf2ac158357c8357 -0xc2fda203053d78e53d27d73422d4ff83c1a48fae1e249927fb9b247276fb9db7 -0x84eef14f515db7f9b502a957794590ea6698f6f36e4e5174a12b234aed305e6c -0x6f6607b4b6d0eab6b70f298a41c1bb8eb734d3625da28a2291111be42cd0cc54 -0x10914f90e555ebfeebbc7c7bfd308fe8a8356c6bc40cfa768f7872a5cc30a58c -0xd46a08ac1b02d13381359ad9d25058a54b802836b749226cae391a919a74d80b -0x337ff670e928964d6c60bc9ad8fedb242f32502bbbf5a5b7378b0c23f9ac952a -0xa4dc8f26ecd57a19660eeac302fed2e0d8e781cfefa9f5a474f777e9b1d74e4e -0xd623dc1e7be511a6df91aa68028b68185f47e05802c3d5cf959cbd8f817ffeb5 -0x9594a5e52cc9391012648096c7d391f64bfc72b194278b761727246369d3aa97 -0x486cb9292264965ec5c4ed1fe4877d8859942a40d267d65328bc53f1aa8a813d -0x0554c74a82e23618a46c70689c8ccd768485963f6874b882e2d97741f0a043c9 -0x6cf44864fe81a1a68d16c12ca259beb4313130b3469b1710a55027b991db8c23 -0xa27d6fdb646f9937bf804df5383db6275ecf15085eab8e01fb3a278d16abc6f0 -0x74b57b56dcd4543689233e182258016c97898155f987cf692fba199d59650fef -0x4d3a0372097e21fe3d0e6a8c3cc14040ca3b550b54716bd07f44244c2fc35d4f -0x4451c9458fe65e4eb398cb999cbe7d1aa503b09913ca84f4ad6bcb219d42f409 -0xc14d6ed151816f10bd1584faf379ca9fa721efc33641fc6816a84255d988d9ca -0x99c8f86359d5a50fdc335880f5de22d1aeebf7d25f7e6b486b14b74d8f6fd11c -0x76611163a458572cbdebcae198ff535dd1744054642505436a4f022a15991d6c -0x296c718aadac1e5292bbce6fc1ff9cedba9c7fbd3fade8b8e9420920c753597a -0xc593e7f6db12e2f11e6af1304e28fff8ef4cdfa3869f3b105de4309d4ea3f17a -0xa9a891741d1be1446536d2a717e5eadfa44d1399f1615e7969988575d433b8ca -0x3775b091911d25358e8896116dda0b6acd23aa1507115c76690a514381e2d520 -0x09ab41010a80f719c0a1a67621afc6b216db6508fb1a9d2f70c69363c103f24b -0x90a4f74f92c3e9e4fbca0c9aba437084dbab729fa0aeb8bc4cca5de063c21787 -0x014ffe49bff966bb08091d1e40998acb889ea0a713eca6db9c79ad78d1272365 -0xb3e540abef85ce415e4d9649d99f875db37d6d01c43596300c14f2e83ebf7fdb -0x152a2b7956aca6e4940211547ba266128e1b277b5755d651495902ba4e1e55be -0x954225339fa95f1134e0b57ecde36ab1c49fa0d1091f810d0ec9d2061c506fad -0xbd907f9e014fbc243165065486ddce910d36aee1e7700822d9bd230415c5c953 -0x6840d142a7041569b1cf53dffd2d357884fdfddfb3c6814a9e32d1f1d06edd24 -0x0f06c81f10017039ec3219128be98525baef793bf060eeacf3138cefdf91d484 -0xbbed1b7ea8e472b837b788f8c3e43c0b3de13f7ec48bd023a614879f58315517 -0x5bfb09409e1dad23a4125d0d6960b5e86741d4f787e82913aad8e75f1fd7e8f1 -0x0428fc72bcaeda629cb6d240e0b98c75feb13e77e3ef0969972d413661cd41a3 -0x3c7e7fa489b03e886d5fe62b04ce48b6c1b53b42f15ae38f05b6850e34794d1b -0x0f7fe55aac582319d89555f251c3793d96edc5bb7d23b708a184673a3c4009cb -0xc81d55318fe86fb8dbda6f375f596ebe0f04217c7ceb93fe226e424377610700 -0x210635c97746b125cc349f4b247229ebb38a7a50071cf863ac10a39e154ac670 -0x704eb5f571c335ed3063c519ebf98c8c5d9fc494dd0dd9b2e6cd8e4918eecff1 -0x5c9635459339a3c2b8c42f2122383dfaea87cc0844c3a26679d1ea6a923a6c1a -0xac32778d43c7e012ed3dee5c4ccf9c0c94074b3719ad904a92e7f80b781d98df -0x58b529aef474c032915e46120bbedaf2fff98cfb8f2bd66045320f2f677c0cfc -0x2baea2f0b727397043ede7b5376859320e0bb40ada59e5e5f2c6e8120f3a73a6 -0x45614c9671df25880a6030a9927c7225465031c60a166e8e78b49ff569e23513 -0x21d408212ca2ce08aecb78009f614715627d9ace96e38a4ee4422c6a862a2d2f -0xe5312292a5a57c0f2ab9623c240c60aeb268cbef6e6b9a7cdb60572e6d5048e8 -0x8d8d9888bf0c120f82738465a579593620ddd86e141f9912dcaaaa846e6aef3e -0x28eda04bb17d791ac1c039170a13888ef03ef00feb8320ae183895c04667b2d4 -0xc9acb26502bb2486bdc7cb3ad986eeda7912ec673c2f710fc8780cac8dd425eb -0xaa951a869964eae5f74ce8000e30cbd5a51377e4458e4a2775e7e3e0c1c5dc20 -0x846cfd43cc8d3d7448f9763c21452db9fc7de2b5056cc665393bc2cad03c81e8 -0xbdd82c80a8c30e824884ee66ae2cc8c00433311d86536e4da0516c637d206d76 -0xa895ee3e514593965a4a314078d005c5426e87961e4c81d8943d5deded83895c -0xb563b9736d3e91d195253b0a32331cc797fa6fcf90a8f01f7949e03265c29413 -0xac40e5ba23813f272636d0aa30ff600eb4652b453250e18f3004f7cedb34efd0 -0x3065d082f161e17d8dd92fbe30a42ec179a351d062389f03403bb2d0754f7b28 -0x9758f4f84f2bc119090b9221864995a87ffb43cdc9d69e795ea3ec9aa7b6e99d -0x3ed605b414b758d4a35ed8039ce2533745b43784b378290152eb2dfabcc76ab3 -0xfb0e8eda13cfd2ba031f723338bf97bcc6dd0472ead90648bd323abfc909f786 -0x86612d51337808c8262b71e2bd62d76fe9bdf599c5148828a016a1085777b2ca -0x152abbddf13578a76d7387625e3f8f72f92ecb15aacdc18c26d96eca675f0eda -0x87baa84dafa848c750c46e7cd4e8b56fcba31c54f2769db6256a8f36d31ec381 -0xb793f88eb08bbd9c2f91685a7e256430654427d658f88001b15b834f732a19e0 -0x52c061d8ce1ce64c4905b76b8f4caad17cfa31c43da1f57c8a55a7c536ffb08b -0x00dede5c5b1fd1fec1e48c78dd4692a15ff7e7104bc525b6fd62bc6ed9a65e73 -0x2e3adffbe208debace61ab9bff5e2c1730b796ad0ed9e889abcaa1b40644a027 -0x0b0c18bccbe71bfac1a1777491b9cdf8ee6beb0c28638a3a7c52a76fd85f7682 -0x3d21711cb83a7fcc7e43afa845848aebc694851328a78dc6fe85a341c5d570c9 -0x3d29f1ead2648a49398007037062745f357815ebf9f690627464ddf77d35c477 -0xa638f5a7e5537e76f015cf5585a1cd86567f1ef03733644d83023e281054ed5b -0xbeb1e2e919671478bb3a8d88ba39564d4c7b1f3d07fa2509a0cc879fb2bd069e -0xb7bf68750039215af86797b29703f8ea67dbefc4fbb1c6773a05fb890ecb8856 -0x712148709ced480ab97e4ea4ab86696b2a23e7602af2586d0d78b474c576cb1e -0xec61958280f7f09c94980c0b452bc6a9576857d4e33d3f81a89a6fabb0d2ea53 -0xb77df15efc2592449699c8cf1e816bba147397038064943f0d7e157e5badc08a -0x5a4e2f6a63aa49ed53795d1484e561c4c04ac07f4aac6d62d066d4ca4cafa485 -0xdb9d46f043198e9a81ef492637d1669fd76959253aa66c12780a0a290ba183ca -0xa025448583d0bfbfd9b3e09f6bb21629252af6e08b632a6cde8f6ec457d5c205 -0x452bd74328640f0707db409e903d4ad6dd5a8500441358718d6131e51f4e5b02 -0xc0da38d0bdd43b265291f170474bb9358a414fb4a7d6aaf4e851fcccc07a0d4c -0x775c1281b70bd7a9e1c8dd2479397667c45868c1a2e50de8e4c502ccb0ca9d66 -0x5543ec46acbe97789407bf5f8f8c41d581f9507b0b8ae495fd8a690a1678bbc0 -0xbe7d5a24bb10d4fd42e469f05a88bf775f06368b6a3a7ff70c50ca615b3e9c00 -0xe94dc7d84982f5585e5d97331b8ed1c602b20db346dfcbc7a6c6111759896fbd -0xa1c41dd6eb91f78f5f0c7f1fb37d710659145ad0b5dae0c18914f76606450ba0 -0x2408550f9cee652f2302d22d3d491a3cb9c2d98778dd60988aeec7ea5823150e -0xe91601855b1a5c77d080c6b4272c61e21253b11af1585a48e2f259f3b0fd7241 -0x961b2566c53ca243686235454c8ab9410cda2eca2963d2bf923ff9c3cbc8c093 -0x7b3bbf71a52b8f37cc677f67fd64e0183c08e818675ed89dec237116ef86845c -0x40accada7a3be199bbd0477c4f3b2ebd4ddd8d108210b9772bc9ae47cc69fa1b -0xeb97f955009da22f03a5f0277381a2f54644b76ffd0de9b23c44b3e32079f6df -0x32cb11601986401dafeedf1b0906ea622a7021fcd80731aec793284261a0ca57 -0xf5769d1e868af3965be36c43fa82bda62bca35e9c388942d26380a210179cf9d -0x8d450b063f5610d303efb191b48b43ba02a12cf028293088f0c8078c5b9ab2ef -0xcc8d9e3806200a90feee3257b882dcd100da25d7b2e784d6945ac078e970c9bb -0xf9e14ce5561f785ae10d93f56fcecbe98e6ad7ea9f9157fdd8458fa9b9796616 -0xbddcd66cec81c881340caa39795f98d34647139dd517d219b4aafd3753bbc2ca -0x7788f5818d336cf8c36522608b27973f5f31a7b56261897c72408151190d551f -0x479d7ce574ab2f10fcdd85b17da4e2fcb2bd98eb056872dc3a69ff5e40c72a35 -0xe8f128b653e54871e66634cb1259793b5c27cb65319b275d4b323b3bbd44aeed -0xd0bdc2f8ec3615003f78632c35f43dad200e2fff0b43a5b890665a7b5955f5b4 -0x905423448913d523d345fd3fd4ff5dda820aca07d7e34caa59a4e1b74533b3a6 -0x9e235c326c7db8a501dd1b9618e47ae4a6e67a24623fecc3fc09835be55bff5d -0x22b67ef58fc82881e46544dacb9959398e9ab85cd665bcf3ab359bcecd87d13d -0xa7b18ef99b56c41b040bf78ab0ec02be82d1dc35ffbf8259d4e5ef23738766b5 -0x3ed2f4ec38e28a5b87ca5db70f7ea493ae9c914e5e74b3175a15928fe6139533 -0xe2f6145d9cdf98e756da4f5698f4c7d44f10e56cf66b135ab412c24eb64d437d -0xf032e3bd4072cfbc877a23f579b9684d2c7283ea66fb6061887f2cfceadbca2c -0x328c3d63e5da191b46f605d5b171fdac7c8fd2f1e19438662ef68d26bb8d5b1c -0x6b3555f8143c85c71a9dc585f5bb90409a5ed0826da6e7379236a30728582dd5 -0x319bdc1de7b7bd0d8fcfa411410be633fffb4f2ea7d5dc13a7ce7abfd62aa4bf -0x0c114467dfaf972ed05fc6ed58cebb4d009162d8f91e97e59035bd0d408b0aaa -0x787f58072de79ec6e006a75ce76c0ad7f91fb960906da634b4059954022bdd41 -0xacbbae1903eec777525c211d4e8be8af00a0cb4e1a98114b40b13a850abc6df1 -0x74a548d9a5c064576a9de1a559cb93537b9d39e62db48f9bfc277175a099f5bc -0x988915f44fe4eb549b5b46bd418d14018a69ed4234a25162ff63f6dbb976470e -0xe93938f65647264a78a56d9c3c16660848a072a69c37fe4805c16b50ea9aa075 -0x4c33b567a844ac9a4543885db7487abb83bb3c31199d56efd590ccf1b8cdcdc9 -0xfa4acee3e2c8e2e34df4c020b05d35c50dd838695e5a862cc7da181109be0192 -0x7366d43eb1b0db44298e43df06c67ab80155277f252bf5e7ea1b97af1ba603b2 -0xfd30e1335a327b8a6ec94f845ff620786c42399ddaf106597dd5dfd7cf6133f7 -0xba7d55f05febcdce790e4ccd5e86ce4fa66de3a972ae14dc086a0f54401bb4f3 -0x60fe9d342ae0a6945a119e97abad136addf7b938951772f6211fa02dc416d398 -0x08542993643303ead2cea27d7425e74df96385fbb3d8ed8995a85f1a411cc04b -0xb3f106f820fc2c80eafc39aaa0b4da4791baf3558e519681b2b58bb90c03b936 -0xecb6aa1e87816c5123064dc16b84451d6072e6baf1d86cb9c586b99b16ad9562 -0x846ad009f985d0bd2f5418b454f074e127ffc8880499026c5999db6ca81eb742 -0x038ae1eff02ada9c91f9d2de12e2e34dd5a41f842c985a51dced2c06eab05e62 -0xef9c35fcc03a277e7d18d0afe5615bbbe3d194751c45810fefc95e2f9362b07e -0x448aaf447d7aa64b2528e485028423289a53311e35a75ac5453c85f4e46d5280 -0xb6394dc373f01335378d25634afa4ce4240f35ebc6534c38139e3fb92fe16281 -0x524516aba616783eacb128115adc25cbe2c3b86a3ff13c96c26dc4c17ad443e5 -0x3e7412167ac318660b6d7ab4de6ae84117ffaaa390d22e26ef4b0421a7ac97d6 -0x5685801f96a0ffb4263920d4c1bfab6e7cf05d6aee1224ceeeea30eede28ccc5 -0x980cebbcb90be30530e745674ff813fcdd30d72a8207edb62ae45d4692091828 -0x73e506ffe44ca4ef7b1cd44c8618f261bbc31e516850a6bdaf35f7f7e68333ad -0x905fec8d3043572cab9330981a81609d8b7767fa6463484143315c83461a6265 -0xfd716e21f403026a828351e0856684b2f336586b3df5d5dc19c583c8dd1bad22 -0xd632bef738cd0e70d0ba7b3e67d7d22982ee02f3728f2142d6f1857bcee7c13e -0x7e81d6dddc0c48f1504fdbcdfb7dc7f8a738b527cc2be393f0c1e4b8fff71a7d -0xc3f9a3ba33cb4c36f70103896cbc61130a279776097b91528ab58bcaccbabb9f -0x1058c817162813c66d7f0e2c6a62d5f6355177b6611b60545785d62bf7916742 -0xdeb16bfcea9a3c7fc2e1104a6c3191071c53f3095932be9f9889400aca57c057 -0xed81ddf42609391a927d1bd5d7882d31c681c471b50965c61af69542191155b2 -0x7b9f5a82ae9d3c7edcd93c0053e81d3bda6d3c3c7918b1ad7fca9bbd2874ac3f -0xf6d01b4aa2b91e134d8ab779380755e2e990ccb2ff8dbf738a79fcc528a35d84 -0xaeffaa3165781960ea7f246ccf22632c1559f8f43d21b031463e5459f7780abb -0xd49db6eb340413f9d86be8c6e2d04c83b12fb9c065e1991beaa68ca699ef57fb -0x3eebe3de8d75d62fed59f120e8572574ddf4328904cab0d2690384d0337c3ef5 -0xff8b5de2f357bdfa248f60341fc6525493f150a2624bc372c0b6b72a070b4096 -0xe987c1310418f9cff4d81906d7e37a080c9fe9f916f0995dd7daabf7060d5b78 -0x78f09c585b98b7fb58a9a51fd64107de8a5ddefc95635b7e801bd7e3bbee1622 -0x033ae1c9b3d5d5e64dbb43b92c2d93404b7fa08e2250e923bc5e0e30d95cb867 -0xf7b6a459035a898e94be14c0282b580fbeb6241ad3922f6e9d979cadea44e15c -0xe7b4557f1d8396fd6fbae8cd735b80b46109f6c328c1e10b1a5b8d7e94c550e5 -0xd8bf4ae1f6d55618eb33c2d9376fcc3d69746b03d92573bacabfc1ba12b85bfc -0x6151fda1fe28d7cddb905dbe8a9a79fa61605ebdf6df342957442440df5252da -0x28c169269a30c627604468615db0da6a31f1ef76d7fcc140578c2d611a053a97 -0x76cc425f0d3c0e4077afbb6f12a47b0c71d5479f5db2eeaebd387251226477ca -0xbc7b425dc9f5d23eb3934e3437249a3b75102822416a054abfdcfdafa9b32453 -0x9be3de79e8f81a03d2059a910811138175a7dc95578bc8beedaaf4266c665513 -0xdf1f4322afe55ea0f5eb7928b438c5b7c4e59b13e27566c5420ef585bea8c417 -0x0c57bec9b56cdccd0a82df04075c776bfada7c037aeebe070b3b62fd7e5491a6 -0x9169c392fa9e36ce7e6ca29c0da51cae96c6b41d430f4253e956c8ce7da57554 -0x44901b736d1b90142ff278ee84dc9b3dd64d8ed0bdcf2a56029fcc6cd34c5d4e -0x0d1ad49119ad8cd681a24a38934f63c3599a7bc07e9b225c1ecdb009c5ca1bef -0x0bb97f98b23c03ef200e2ceaa9b8c10db020010b2ad718fb254af8a44ffb5193 -0xa01d8e22d7f2b5c9f4bd9f46607cb540878b903059289804d98cd2e517801981 -0x5addd15491bd61d552967dea7a9109e064d40b5c304136dac3068069b29c22ea -0x2e7b10a46ab1963bd0688666da1430aa2e880f3042c59f06a130ec764cfc34b9 -0x39158facaba56ac1d3b19caaa81d58d3a4a8fa6bdaa916b2a6b0b3fdc9c3b0e7 -0x11893ddb0cf19d4b9978611d06b7c9a3830d7b4fc563ce2e5aadc7ab6ab233dd -0x1809f720b9753f2b4c60304430e8383d76fccc2f1a19a6e44408b1e6370ffe22 -0x1ee4df2eb17960fc8bd31e9771a08bccb14ce724c905f070fbde1b427bb80297 -0x0196a43001c8e82e58b377fc33b7453b057cb0613b13601a4513b5b0f67af29c -0xaa872b9bea8125f4fe9b1de1ab5a9fd1dc4092d1eda7ab01dc5861727bdeee56 -0x8480f34f0f631a4c2eead7f92e5a2d6c710afb5baa977c9a6f2c9736e57b49ba -0x8adf34b5bb8427a78bc4158d2d3d46c18978c623cf0761d9dddb30234c4aa9d4 -0x09697287fbbd0e1964b290954e28870126005a837b66585a968c61c8d78e992c -0xc4d563570ae885c527b25a5a8d8af4756d81710ef3e0b15b4e0a1016586fe23b -0xa90388501a2dbcf68926455d1039d662b02010510f5080da1c04edad603c7936 -0x65aea7568d7310dad8f8898c620b3ef3a41a6d3828328f69c01b664e610fce5d -0x44efc6786a43f1d97a9b018c20cfd3d70d0e5f405a369e39c542b57eb93191d4 -0xb82e1b355ef5aebf5b8f34a40f445e1b2b3933162d0cd47a7baab9c6bd272986 -0xe47bfa621908cd58cd8f2e39a163ad28bd3c805265c897a4dfe01cbea8d4807a -0x88e0a81a4228640cd1ce8c3c984601666521cb9deb4db57828f359890b321b02 -0xb5cb81143837235fe299f5741378cfba04020b59bd56e824c0b4c0d10d787f99 -0x225b8b625b9d5575adc8c742d6a6f8fbba9cb49ce96dc1310100758dcdf362e5 -0xd89b73fce2893171849e2be2cf715ef5bddaf227323c95608146837c83c8a187 -0x65e5da95a9b3174642e19b199c00a82ecc7f5ea608a6ad45f4354bf4e5a58863 -0x2b10fc20a309251c9278e401764764b566261efb2a0824266e8f5abcc888de34 -0x5bece14e5397f37922085dc7f8662b2c51c966117bb2a44c5f0ab315f5b8a649 -0x5e8f7cefa6caecd63491203a674098bfb60ec16fec40920dae97391bfd14c0aa -0xd6c2d5024a59d6e8c3b43b9e38278ccba7e2955edd0bda17a200bb333a396f33 -0x30374fb43094d2d3745528ac5937dbdc8767e16d28b16c853f8bd3c90a7d19ff -0xb02b82909b95f7eb85ff1a967139699ddef39e9e545ea1627c693e6ba6f8d993 -0x8ccdcacf624fa5b0c35e9212febfe368fe7c190a0dce6472e37ee44eb604e460 -0x9a13f7c067715c8d9f6c2f1042876ff19937ad3c735d5b94a556aa3e433a689a -0xc2221e067545fd3607c4bdea8542494acf30ea0ebd7f4fb7cfb564b7b3fd6754 -0x62ccc05c6262f246b2a57a140ea94913547d37db9b8931df4a6753d1ea939b04 -0xa23bd64059d5423fecfd935a6f134f74b834d9b55d25d251a2520f4470ec77d6 -0xeeec36dcf31c0f6399a0763d2638e0282966e8d8e556e354f6cef0d1f79e6f41 -0x2fd9ad9e37397565ea2a05eefce9ce8a75885aea8ee40d1f56dce7f318d949b2 -0xbfca21515d82eee94e9933453f23e2f0df6b2c055b5c3b2e66e9999ae1da9177 -0x1e8489f460c75ba6d06c0e1bb94152916e57e411fa5d387deeedfa89b03550b3 -0xa1a046bffa12e9a3798b94a9819b5827396fb2f4318012c2d951eb427d43c76e -0x580b2b21a669106b143983e2d61315dd4a7a468fb1cf1c15946cf9fd67e8557e -0xef014cd32546d4ffc0f113e82bf7c409b0003412a8418679e0773809b152de5f -0xddc37b9dec1acf95bf9c9e8227654120e58374854700be23672212052aef8cab -0x2cff81e4377f56c1ce72ab98d9d79ac1fa0f631fb99b07921aa247f08d89db65 -0x7d337b5b8bb142b01459d471df24bd687b90f305c83ad2c046ee5d0f063e2f47 -0x7aceaa5ebabbc2f442a674862c19b2112291c22d828ddf3d9980af15deb12c35 -0x9292f86b3b41d2f9c65711f421adef9d7b2d760a7a3152815d0e0b51bb30c0e2 -0x098b74ceac1ba9f15d18983bf6531e858eb20e4e3d9ec196b8c75d719ff2ca75 -0xfa136183bec25e2fedcbc0f990dd08f94821af44b8a58c6d6692425c671bbd05 -0x5c12edfe9ccb18c5bdd3b6387dcf746c8a1de33aa6bec44614f7dce82ab32b28 -0x901497a229a0ff864a1946091a81265a907f884cc90d0e203436d948caa954a3 -0xe353a086b8738855b525eca2b1a597b517120528a874dafe917cbd3636331e59 -0x95ae89c62f612688c46a468018a82bb731706daba4649840ca0eeaf9a277f642 -0xc806d79dbd7cfaeb11d3759f6fad55addbd76477ea4201f4fe56a05842936e28 -0x71ddf9c1781ff344f0b6774db9d2b85192e2ff9725168aa0e1813a573802434e -0x399726d7a08e668248c3e5713d746bec4faae35282f4a68f4a9ea381598daf48 -0x36107700e7fb85fad0f38cd375226df278fc5266253ed6c5feb8d2077954d84d -0x5ff1ea146567eb6cf1d2b2e52a40cdf2ff91259cdc62c38404f68ec6a58c37be -0xe47a51a9f0a011564739b6e0d1a2df12b0889affdaa3f70f661d0eccd8ad8363 -0xba16bca6082131a4d3386bb79413e3d7e9f502386585a9b4cea64308b0363198 -0xe3a4ee50234ef79622300ff9d28e05980092f8d371dd11fb417913d568f45951 -0x73d55c49141dc252350fef6412b56164ef1e28f70fb0069fa9fc91013ddae6f1 -0xb640e59341899494a9b914b5bca1480e72a283025abb01a3950578669438a7b0 -0xffc2bcebac4ffe7801c0d76db44b67c2704cf584c8a70c82a951f0c971ab0e88 -0xf2aa9b669ac410d7cf4287f6cdc180b01f28617812934ea707167ac4d8b28bc5 -0xaf6236a798cc268c130a1e8c6bc022658107a4e49a4e03764634f4eb3b56d0d5 -0xc2434fd7f112c7c5041da7e96e77a99b483990c105644b44a2eeb0918a261749 -0x83911c33eaee3675dcb3fdfbc69d4fc5bc7fa860fd513ad431e2dd538cd1d4ec -0x20ee32538ba6124dcc7ee03f091c32ead2b9bdc7a8891c92b49be09a4ec5f769 -0xd874db4d7015d6bb055b5a638cc2cba91b87dab95c54cb589d301731a0c6730a -0xdfb7f4c8e7a8a9eb8e66ecf064390a9a473093e929fd1bab518b5076457a555c -0x1e11c71b5874b1eb32bdf69de067ac30a3b77a95950d05e8c87d553ee6c6a7bd -0x7874d90ee9d3927f0d0b42c540ab58084c0bfb7b2b93a1122819afedca9832f4 -0xbd8e7d417a10eabf603bfb73f53b012cd0e890b018119591bb959ad16ea9b012 -0x7a238417792854b97791df941d50c56af2f56ba3861b0856780732546a1ff4ac -0x61adeeaf3effd52e26c7277b47d684d57e58298d22bd1cb017e7043160b464f1 -0x44e1f4f8f70424e324fb017e56235ef0f7256c18feaa3bfc763cf8b498724140 -0x7d5d14ba3f8353bccdb577231b0dd3a79cc5dde76cec63dabcd9a18b9e398f97 -0x36ea66bb24ca301d8f2a74d5969c13f9b7310f3eb54a86c136c16418e3e05239 -0x73d3c5303bc6ab1bd3517d5ac9002715b67c368fff905bcc6eadb1b7571617d2 -0xf1bb543e395211178f00292144cd1fd164a8830e57a64496f3dcdd628229a70a -0x9aee01a570ed62fe3a05d855d7ec41ac95411bd67be5e803ad13f82b83b87df9 -0xd6b370c677c7bf5347a09db6fb3c850a61473ea4661d42d1783c288a6c757fe6 -0x722eff26b243622b97158f5fbd14e1745d59256b78597f0e7b20987cd7254b74 -0x5f3c8f406709cabcf26f1205a1db7cabbba3712a661bb1cc65808cc5ee20dabc -0xfd57173b0879d4628f280b5a4900bf50114ec9a28dbe56a8ece908e2c1711a39 -0xe9247e1af967818d3e2ec37678ba17425a566be512614039afa82a513ac84c8f -0xcd7596f3c357fe9bf681c7d91985de1a26a85a07e5caedaa568aefc884852bed -0x996659db38253419ca2b00da9ac674f773be5872b7770eec0ce8c38769625923 -0x505cd9b142d5b6fb2243777bae669e4cdd307af6faafdf4b2bd3daf736d02f81 -0xcdd042df8a4857eca9b249fc015a8efc88f5f3660cc7446927ccc298af0ae41b -0xf38eb5a506a5088e59c37364a12de1fbe14dd1475c28d6f111ce706018d9e2c1 -0xa286bbe500805716f32e768fc6f7c07decc50b76678d5f9081e1eea561bb01db -0x0a7c84692d93415039a7f5df5848d35221325bda86716521d2dbdab7df0a5e42 -0x9b3365d5cab49b7a3ffebc96757295e3342eb43916e9102e363d6d7775eafadf -0x16f1092510e3feb29223a3b9fc7a1dc61f53aa553611d0d51d758c29f17c2a24 -0x41c9ba256c018f0fa2e8b907e81ab22d6d1c01e05ee408d8c247c450c7477750 -0xf54851cb44d0190eda2d35b9f5ba8c83a39afd64904bf3f9d5aca49ab0ea01ee -0x271d55e405c1ed435866027fae307d0a69f8302694583f39905419ef55904dee -0x2114776c796a3aeefce7b5c39eb6288b578c0d5382ea1e344d9c1af0cd37d0d5 -0x7fff9f1c01719ae74157b0ee5dc21085c3d1ed04432e9dd049a2c8b4c9a21bf1 -0x6f35174feb6588d925a8af363c764c667dbc84952442ccc834723a7aa6998f8b -0x377fe2b2982ddb1fee18deee30beee743ed986ec7e82fcffc9dc690001180434 -0x14bda44543013c501c670f0b18eaab6cdad8107311e571ce9afec37167e6a3ee -0xf2be8c0aadfeb1ac36396193c777414e4e4e7893c3861684045f3b3d60efa7d5 -0x37422fa0766aaa3f98cde19fa75e4ef72ca33622baf49ce2ac13c356d7b1c9b3 -0x74861d16ed87ca5d9d3a1625b030aa9853ba152e5dd83fafe1720b2c4a6a4ef9 -0xbacecd34f536fd1066b2d33d25b50b05afbd668333c285c6c93bbd293d2f5882 -0xa30ef2fb0adb3cc5457518cd2e4230d98a4f4a12a0d54c70bb8cc732fd720269 -0x927da899e1ff071acae4b9fbe2c906ce231bce215c686de12abd98e212c9e82b -0x1a02de3bc634dc7e6c98dffba0580f0469cbd48f8e5a45ff41343c0e050a65f5 -0xde6951625152aa8af64f6404363414b5dfdfe6e0c7d91400b33bbe8287b3aea1 -0x157a0c52e5a4e954d1be776c59b4e4b6bead139178e19cc0c6807706c65dbb5c -0x4bc5cac4a732fc9779d741a690e0ad379e550bc5765315acabd821e62517fec1 -0x9bbfc85207226e5241f429245aa7fa3c017ca62ca2b0861188f955155e7c4326 -0xbb84d2eb5b664155f572935b68b242c86aa32e4c6d1dbd57e80fcb9b4aca743c -0x7bb9dc236789519d0bc81db93cb335f0b84d0e3b57e23c7b08438ef368ca40f6 -0xe3b70c412b865821db58c48e341015d312f08eafd568facf5363c880947f273a -0x1f6ac31b8705050d561dfabbf794cce5a7863255bb5978f5c0658eb77abce04c -0x38a305dfcf192c01d5d5dd3cabdb250a875d43e355e7b558930a8a560419de5b -0x2b2ab160cae53a0e25650e9bdc93815054582e124f16b79038874da107b23074 -0xb338f23e8d4966153716b646def255bdccbcb3f2daca62b59dfcad8eb3b75467 -0x1b14cb0707fa7a820b80735319fcf4a2f736315df278276526aa6d7e36f968a0 -0xe8633898cbdb5d13d6d79e87136554e9c0a336dc078a8a245b686178713dfb4b -0x59be9a90c180183612b730e264c7f3071c828e07da28da87fb6544912a6a8f78 -0x47e871860a47050cda11826f48409362fe230fab76b811b9069409b5138a7a34 -0x51d21791a8e690380f3853780749cbc2bd8719d3fdf9f01a61088b21df87f4d0 -0x5006674b9a23752609c26ebe669080de7120053b28842293cfe20a7e3eeca4dc -0x2012ed8c6cf25bd90124a37773d8726d8120bf077c25228a6b0f36919de1594d -0x409846812f5508944a57e42e61c9ce277c9d858be738557c105f36b5d2b84e29 -0xbebdcbeb5aa8305ba1e761c26eeea3d8ecac983c0337961c4a4e4b0cca4b0e8a -0x8be4acd72c205fda3b4bd1da192ca1d456a631326c15e0d1ac80ba5a0ee6617d -0xa83f88b12006c62b53f7232fecf8a7c2e42980f296aa1ea22d05b8df4de91ad1 -0x629daf67c4a0f980dea5e83973a4be6c3990eee3f386c96329ae60bed8ba07de -0x2c2afcd63b642b8c49c98732382cbbe0eb8acc793383500fa9f4df04d2d1e2d9 -0x6270258757fc5242e120b82ca869f78ea5fd49a1367717a090c380b7dded137a -0xc3b45460a492d45715783f5977f27eeb3135b46791f98fb96c827c231082c9d7 -0x5f9caffb3a4da8b6404923449f0ad288a0ff85e3cda8eb76dbc79a011a497782 -0x6ad9d454fac5533eada553710d5f059027d19ed56096743f6c0755842e5bd973 -0x4f6f98ad61366e09308cbd72be2716bf5023eb721b0cf5e733f197d6b16045be -0xefaee20166768a8ce08b1abc81b5f6bac5374953e560d14414c586ee5f8f6662 -0x6334c6892bd2c4a92d974f18796d3edb95f95c74b5fd06eeac3d82a4b4c51c61 -0x0391aec083a317aebc8b446af8010e45b177af93075355b59ace76d48f551263 -0xd2184dae0e7efaeddf282e6244321a0096e78ae7e35daf359ea46508e720417c -0xbc495619cda6925dbe64172a40875f54a32555b6c03fd23e50db9e25f8beb0bf -0xa6ba8150e938c5fdbc7aa6f95cd4adbffb6da262b59fe9638926696a532d8888 -0xea66e2be1d4c47d1034134d96bd8a386f9ea944941186157d9e5f858b6c88886 -0x6269312f64283f103ef3b8db0445ee9900454772a1e23f833ce57d58f7740f57 -0xdbe115c626b44ffe04e8ce58c4c4353cc24772b202c6e955c902da219838a45e -0x4d3af1de3a0d40d4e3e61d5e04bede0b137d035593b873f120e3330fa7f21e5d -0xaf6c4f70779dcaf0d1111a28b7319a177e9e11d01cac46ea7d0796addf3872a0 -0x845117aa5dbdc92d4f9e05f5ad257484e22ab53c8a6d135cccfdaa5dd39ace92 -0x2d5b2aa0f08b874cadc3c88573d5ec6cdfffbb09266ee1794549bfb679746538 -0x435a7e931e0025fb8c8fdcf62383f8be786ee840c358ce1598661566c56ca337 -0x3832acd921f5d8a87ecad22c6383b268dcc7818203cbf48b3d31499bf24452b8 -0x998a90528bf5e3fc501c383d0e0952155693c860dcdd39fa703be67b36035c2f -0x0189c52eab748bf6e6d72c22e0182f3bcb704854195104a5d97db8c93f13611d -0xbc766098198564fd4991267762a638ca0baab55fc3fbb7ab94df404215107452 -0x4b629e90efb1c1c626f87d6d2d2604ebc7856870f97c65f42e36824ec7045d45 -0xecfd7405d5c9a48d7baf9af19c3f9ce47d13d5557f4a1619d80be4b3b5b06873 -0xf4a516778dc70ba3268af59121388556d6fc94d0e9d586d2bf4f0d0f390f4206 -0x0f654fa3847101f422dbafcc8010d1d2f686c1610486f3e2539ad6f4f08b5917 -0xce6c9281767abd0c455f29fd384804a3d9b2ea72476428f1848a030ee9249a9a -0x1ec8907e50b3d5e2aeb2787ac014f85c50b3709d73b9a9de7b0306a3d33f6a5a -0x1e44b42773378e777765706cc1a9bc773d0021ea1ce4fc803adc3f1974f65337 -0x2b7e2e2d24010f4f3ed842b70e372a496e43e359be6b40a5b1d9c4c2cf902bf9 -0x380b35014ad3e1dece8e9da60ab910ae4583b0fb0890313a39eb2ed875641251 -0xc7ef45ffcd81e0a0d7036935a59a924636c4249d858a6565edbc5f31f29710e9 -0xdfd3fac5ef4fdbfd51502448761c62c04b8c4cf1a04db87f3714b049cdf0e483 -0x4ce0e691358ff787b3e9b3486e0b9cfca8c3e63c86afc5b966f88535c154ca95 -0x5df4a6a1c5d7e484dbb98cfdf3dbd8f45e3bad1018b7cfd10f1d918f1c7ca311 -0x9e17bef0eae897a6a36540092b19213eb0db4b3e80b4c1b7b570e9f63bc63a17 -0x0ac0c5fbed68b304ee60aa3914e34a67e49cef8a4e3e8005791847355dafaaaa -0x1e66bac1d9dd1feffc3f8f2160c948afcd8aeba668acc83141d9be7629f66639 -0xf9d7dd8e96eb7ffb4d76791af09d64239532c1d82d668211ef00f29e48a5bc4f -0x410582d1f9f97788472838c172bea53cee116806ba9fae63d4efb7fa10aa8808 -0xd937fc5572ff104e0ce67e58dfaed1c88a25c6fa5dcf6adbcdae7d80167c9043 -0xb333d9900055d5e9f606caa9435c69ac0b9efca1f51d24089c55cbe06c2fd2da -0xdfa3f100b391b60d078b863e8a5a6e46de67670d74673641aa2e74b4ae11f36c -0xb4d1218c5c3b531473d5ad151842295b79bf1bafa5d7ea6f391e6ca001cabfec -0x147d31bdb23bbf9086860c76cf87d916ca79fd2de1610ed852b66f9c72400dd9 -0xb280200a84cee02e48e8b2a0d0536820a53e85c9f4983a922f6a08c0077df643 -0x6db97f40dd39a0e93d010f6478d2fb7bda27c8db07771441035d7073ec27fa2c -0xdced570c48f99afa7495e882c48fb3275a7a4973d43d90013b6c6594d76dfc0f -0x7c7ad2c39bb99c5b2b32dcead0676c8cc53793d76052dfc0ee846a57b4e05a80 -0x1b01c69014c05b5dba99340ccd648e2d8bcd161560ab8092356dcffe19e76c70 -0x34146c4bed883ae26becd89cb52a3298c4308b2fd1c4cb1966ce5c80dee2c7d6 -0x47e55abc7781fb168504833c481e7b989c89fe1f5a8a3ee4442ebf37eadbcadf -0xa148949a88d1bf8edc541a68cccac3fe8d958c77dce59522211758aedf95df80 -0x8c6cca9631d76638b1c81b2940309594563938d6df30241487e59b1fced5d43c -0xc17a3046e80cac1ba433de01744de16ac26be4a2bfef2311d61d8ecf18739554 -0xcfbfa8c48a702f13c4e2f8599976c24dd9f34ec2dbcd6ce4097168b98454ed01 -0x243ed722d7a493bc88ee74c74257512aa451c581e1754c1b90a11e13bdc012f5 -0xc08b87d8b55ec6e21e779ec0d48933714bce1f40643241cce4cf80a524f34a25 -0x70121e8da2e653c52b48259e40432a697383afeea24a80e4c20c5e03635248a2 -0x435407de2a6cc8ceb04a8b4cc121aa05ceaee429056a3deb288a0d7c079dc98f -0x2918156683d540d888494f4196e220a5b00b7df37b234aee0b73fd20fcbe4e88 -0xfffe083128037c6f464bd63594dd301305f36fc96673795a7f8c5d0f10ec0398 -0x1efac21ee50db53c9dfed733fe574e9e4745594624c93256d04f50f308d296f1 -0x1d8082c342a628fd960c4e5e8f4dd3c2f5fc655bee00197984f428e6afeebd86 -0x9347d8753e3f0927b6936fab2eaa624b174b19b88276834f97c03344431bb7ef -0x68820b1a6e32665082f01845015725f7292158d8fbbe6f7fab28d1872fd94719 -0xfc7e8f31abeeaa9c6f3dde699eac3f79bbb93b41935ab6cb4857b64b84a653d1 -0xf91a01409058088d02fc04e7cedef6ee3366182197fd18ff93b8e5249a7e7438 -0x4a723eca2a406069417e5c7bc9226d85576dc854530ae32eeb30e67a7d468e33 -0xda789f0262547887df801d7a1a98cb36c4f912037c07bf52c9dd83c89c8d44a5 -0xf18f505d2f7c6061c4b8b111550657b898be19124b11d22a72643ba98f0877a2 -0xd4030150903b3d4063fed7e6d42dba6f4b8770ef73616629576a6f15a5767376 -0x526f0453bc9a6b263af01c35e2299f7f528b9cab970155122d850e1956651aaf -0xd9c4bcfaef999efa3b9b85b40ceb9dbb08362fc87fb41ffd61dcc70a5a0428a0 -0x9ed4f4196d3fc2272f40426416d02191bf97bd240beab4ca92928f6c3c2af5e3 -0x66d486f215856133f3c7f8db9dd3e2235c8e0f75fb9582cd0a7f8d2f4b25f82c -0x52cf836ebc4004dc08488edae6db7b04ad5afebd232f418e28b2098b16664a30 -0x3fde59bc2939b763b63d2a4d43045b8074247c867a765d87c88540e78f548abb -0x60c5c5ae4d83db6682cc3a2743b744532833d48aba5c2aac21b91393ff7b2bee -0x726a53bd042b96601cc76ae42445203f907668a58b28fdb6532fb76bde9d4223 -0x965659680c11cfb047e1505021753a9d22e9ddf4adc7093acb8944801fea4995 -0xfb8383cee3fe754c6eb290d8fcf92027e2dd322d22c32540daddb0393803573a -0xbcf6e1b6690c0073031646bfff361c20211840beff47038e83b8274dd21b55de -0x8164c15c4e345d348b6b9f7ac3a84075bbb00e9169b88b3094443f4862f1c889 -0x8a513aac08290e5ed57e28d8b1a9c4a8feeb1565823ca409703757234949efab -0x19bc240b268daa0b6d1369715abd54d022d3a70d90a360847c953d8c8fdddb70 -0x09ec1c9923852a58d989fa7f75d085bcb2a650f9030bbf7fc77aecfc4f6ecb09 -0x6c31e04b9d01dce1b274767590cb294f866f5af47e78482f2fd872f4a48a3208 -0x91a5f0712c1b659ac7283d9972b0952d3772e05fb4138a60574b0fcc7a4bde93 -0x7ab70fb4847466c51303e6ad67dc81539a8a6f6fd6cc75941154c9dd597d4f0e -0x9bde3bd53c633b2761e4a02e32a8c49177f305d6bf7d5c97ac5db1afde0550ea -0x2fc084f54f21af4cc1fcb96c2c955210b3bad79491b4772be54ab3e29fc263b0 -0x090e4e4e06aabe7197273a1a6ddd2e5a43a846b251cda8a526cd3cdd9bf5c2e1 -0x503bfcb4229beb5b8eaa8c8036b705c27b2b65554add7a6d97f3702e9352b564 -0xcdb62916ef71dd2d4a7fef37960fda5e64cb9026e651ba37cb1f79f1289d8ffb -0x959878b92eabe437063eb6a6be97cd99331d20631a6c16f2f78cd7d2ef116397 -0xdbb139e5ef3043df099929d79590439bf3c2ebfc7145c235f6d8572eba229481 -0x2613e6fbd0edd778b5d7247fec495c61e75984b6ea2f86318612a622a199286b -0x1bd8e9072cd5af8b52e5502a1255b4ca71bbe99e12cb07722f599b1072af6fc3 -0x1d08b8ce835222fff9e2dde4c2da1bdfb386cf84bc457b127e3caf60c28ad403 -0x9152f57d1ddb8093cafdf075508300b98856d6d95aa984e6bbd610dd1d087f46 -0x56fdf4f2fdab07c7172de7f69907b0afc1954ac47b1016c76275da935526b1c0 -0xca415f817ba73adafa6bc54a398e99a094e7f1b21504ae363f8420c6356fda6f -0x3a4539e19c1e439c9d0dc76ede58959eef1f203cabb08e8b3272020b666af489 -0x4460d4b5e867f7705649371df5a04dea4d770637c342abf25e574ad573537441 -0xb31069f29412b0cfe0dd3e6c1069210e025b096a8995486024f3cb60ff1d7b96 -0x128d3ccc83c68a2114b9721e3a44fdafb09488ed386bb4d3362219309e42fa8b -0x31f63f80e74d83189aeb129b9caed8ee4ef6706b91b6bff1f315e52ee1bb7ac7 -0x51b16025fa0e7140f131a1a63a412b55aacdc8fce11c080a979466a9bb6051cb -0x81cbdd23a0ca2eceb91c2b10043b4e6da23f05908854a73d252680bddd50b689 -0xd233c08b5efcde97a56403582a7a9496c449a0dbd19828d3c63a8ed6c033d2f3 -0x3d481d93cd27b8605bad1a347cccc214d924645422f280ff2f83f641701eec42 -0x3cfb04a94a172093298541eff33bb0ae152a5eb2ecfa9004aa17cf36a7a7c009 -0x33075ad244462bc8b6d34bae90e38b00222400ea8bd6266200332c35aa148557 -0x465fc88f67df9fcc8d862910612219a2e5509375d6762518a543586d1febcb32 -0x2bb17efa96dc4db094f67791bc30020d29498e1a37234e1fc80777d9fdd33122 -0x0c05f5b1ce9ae4406316e2389ca135ff97635e200d80b3a048864375d899fd38 -0x1d4dbfed1b2345f34eb25433067c32c0b6f74e111a13995d9621a5e68aa14a99 -0x1b7f70ae3cdbcad8c1a2d49584ff990e5e76a3539f655dc0f85e74808dd99676 -0x30ab8eb451f64727f75cb122cfa491c4e9f726f71c55142e404e1e27a8ec483b -0x659bffbab802ccc404469a1abd9322995641557d59dba2578addcdbd8cd891fa -0x5a9bed1dafb1c42d294093fe52b4f215a7406296b321b131a9bbecb966bfd3ff -0x455c47a4856c6c486b3fcf5766076f038d3aa50808c7126ef50c26e5b9a35b0b -0x504539f846f34e534d5bce93e2adf8baf76836f9f622d9410f35ebbefc13eab0 -0xf4aef30c722c3b7f488b8ae11bfc4599c6ade4fab779a6b115f4ddb3d4f484dd -0x4b41e0b94df17dc50e15127ace640d16f602daaa23ad2171ffaf4d9fddb699de -0x5bf552c0467745a2737bd2ccb1a289aa56cead2902a910bd388085dae7479f57 -0x4f6a2d788378c286ec333e1152da5a5f8f2fc2e327427d2a5494f2e188671d47 -0x5b2368329f488843f1646fc492e31dc3c876dd23ce2e0c3d12eeb67d56a39365 -0x8896028e35be386ded17c28e20b74979d14a79e1600ba03c0bda0de834113afa -0x1134563c1dd3338027c715776b1b41e76677382ed1a3fdd2c9ba36394da05fcf -0xd64f5258cd9d954a57beb1e1fe3fa56e61307dc11996d144602b32b6e672138c -0xc6622f3733106272629067102b9495aa050eab230f9a7cf56d6afdaa030ff1e1 -0x19978cbd5f4321d8a894499e1d2b2bc516b5e088df6db2639a26678469db33d9 -0xc5edf0b24bca6b8cdafaf4b9a46dfd70d2a687695e06d23109c05d5116d1a659 -0x6db98551a6cf1a7a3fd684de7b10519d15e2db495378240e62bf77a4cb273d31 -0xa98de57b7f39f3caa4b96683ca8f3c0a7658413e53fedd8611e9a2f60dabd5a5 -0x72e97b5b370ebe87b01f763886fae274daa8a4f7aadcde56576d3a72e0c9ae8a -0xa0f481f9c757f13836ae8cb05ae7b3b3cd376cfe99c4cf24f346faa7a0900e91 -0x738ac9222452a74438d0c62f5437ac066b92679bcdde144c88024dceffd607ff -0x0ccd9fe651ed022542ba82f6cec3e8bf017c937aeff22f2e1624357fd8fa3bb5 -0xb4833db7f09461a4ef3e9e8176b47aec461bf57db92f79d3019c3860728a8aa4 -0x3daa9a9b92180e95efc835eda1f9e90d897747bec4ad5de48c471f1b993b2fa4 -0x085d21f309bc4d119a0419f56ab47a92997b9b10bfcd9c08bfbd05aadf3560a2 -0x6a175887ef486611166020ecf1f2e604dc9bdafa6fff276942db1de4ac0104b7 -0x1872899190ca6877f9190dd0a79cdb55592dc1f1bf58bb9df16599953d0be73e -0x67f8e507676364eb571d1354bb065a7c127416151c6dac1cecaafd30392077b6 -0x37ae36bc5284fefc551ab25673dfd178d87a7cc8d01184ab8e06d13b1d897022 -0x9f6da3f5a96d4cad57b9116891ebc476f9883ec394f51080cdf42b670b3d2e79 -0x416cb8bbad8ab84e3df071ccb662df1f675e142adad3d60a2c4727d0d65b5e92 -0x2c9520c8653713df4f0c77935fdd4131520bf91a8719085851a97508ae112fc5 -0xc77b05f00f97d9cd57feca8b5c068a9a0d08221333b448860850b10711a0fe9d -0xec860bb884c0cbfa43e3f28e5ca3a1b56bf066a3b47281a9ebf6ccb7e76319e5 -0x60506d4462b110361f6a595c186e97eec5cbee44eb72ac694d21d43cd900089e -0xac3a930f7a6a260be425137488f0ff237ed936999c0d4084748ec30fdd9cb32f -0x1575940ddb382c9d2f315e84d9288defddd9386f05e2693c0b70461bb7b15333 -0x9e34e5225deb368b33bcb1ea750be13016e0472fe505d045b0a774454fafa54b -0x18ab3e12139c3220d4faafea85122d79c3a9d5e045476a33246ee1aa63421b26 -0xe33422422761e0934b6b031beedda345c3788389ba5950c616763e0e05edf1cc -0x801150663cbd36fc572122b8740099cfcc09e93e5d4a6715dcfcd432ff7468c6 -0x7382d09b95613a56761ff9261909e48ebd885fcccb4b86f3bad008d120d0a69a -0x58c1480e2d386badfbd2e26d2c86704cb6d3d7759336fca8f077882b358042f1 -0x1984388de84655a6949e331354968e73b555908672f6ef161748577676921d10 -0x31b912ca029f5821e0b04f22ef91c8c1e0f4c5c6937a0740d352af32bf8c962e -0x575ee258b4fcc3940ab548393240f1c1ca9f5563e4ee429cddd6fa6c909f6fca -0xf5f0c837103f815370c3f6658f6284597e26417a24ba617c2a669d04ebb8aaa8 -0x2b6f5c200e37a51f95892192785ece90e032a1e9691f8ba0ee697d8cfe79ea7e -0x50e6337b6c83394448078c41b1bbd79331900e491b2481b2df74671d729a0a71 -0x2eba1cf8232759dce572520dbdf4e01c1059c3b376d8c726675839ab9c7c0bf0 -0xa0895559d20022a62a3863cdb8ca42676a9bd38a10e134c09e0e93f46c4c8026 -0xe5dc2dd506a31156ee73af217c1b0dd0eff35d6a3b4bc29d827b52a5e04a323e -0x690963a9991ee38fe97c665ba2b2213c5d5bfcef0ffd14d7318b12fa1a1a34ae -0xf512e5596597db9e03150d37812257b47c89c731066e4fd2d2acd0abb67aeed5 -0x75ad76e3668d5ad7295e3b83942ef6aac915c7eac3abe507ada41fc6fbaaacde -0x5ef3af6628cf884fabbd4e1b720c25da7afcfe53658aca8363de4856f98ffa4c -0xf7ee1354805f13a52953a677f9630529819646ba5179be230776843280292c89 -0x0a3c670b4a48b9530e4ff6661b7c7aabb9d17bf9a1a23ee6d60af8835bf4096e -0x80e80e8e4125e4069438e7a35f9467954e4b77c4a49ff2914eadbb41435a67cd -0x60fba2e12d0374798e348f4a5171e968ebe96fd1f434ddc9eefebb5fbf1e03d2 -0xab62af92968a58793c2f959f9cecf09c59e28f43336aade6f7cb6c8c12b2245f -0x746abf7fb5267450145b692277335cbccb964c06adaa20a9f6d3693e56c61aa4 -0x515ede4ef1738797c9c8dddda477fe1f1b071a38a01004e313ec2f3857bfbb75 -0x495df8b6d55882397871e5a60017ab5e9390bea8231055a75e0e87031bf57ee4 -0x2ea3e73cdb1ad648506ebb2e21d1367ee6d77d9cbcbca8b0066100d1389dd328 -0xdc38b99f269b60a494f9651a50d765a278af617e9b348de827cf3fa583a72309 -0xa2f3151f1da85df6f53ba7f71a1846122ae72fc77e54db5574ceff26c1faf80d -0x4b3490ca1b1cc716dff75d2602e553a45938b3aa935d625f4c5820714293de29 -0x2a1ef1131e8d02c8364f86a9d854f0470d54c9ebae1282816aa818c3b3172e58 -0x50506b4893168a82752f7bd12b20889a993520f686ba0b21d8fe1d29d638f44e -0xf0393949258a4527902ae15a6abff2a38c2d53b15760b22ef380af65274825f0 -0x247fff4d604767eb6d7bae2a326ce9d5a20c5e3aa1b953661e2c1bd914963e21 -0x82f0733ca8bb06bc361121be06bf524b92fde32d796d3e6b91ae28dd2a92f81c -0x622503e6f13ebac35b963164e93d2c1556f1199431e09ad3e663f6fd8eac29f1 -0x46deb1ae18c81e8add37365c781c0744c99302ec9364bd06b9234546418dbeb5 -0x59d1ca736b23b851cb3ddcf908d836fc47be9ea740df6ae8e742cf99bea3d1c7 -0x9436553ba4532f18fff47dcc182ab4483a27c9ab9613ce6dca1cd54db30f9a88 -0x36ae460ba94c3e432aeff5cf14378a5ef59cb3265a861ec4a0bbf8ae23ff5792 -0xad7d9f4900c76331e3d7a669c0eb98f7e0a494c2d2f73b00c8d9f69229df6d59 -0xc67276b23866497cdc8e91476e0ad22bfa1879e13e4fcb275a6cbfebaf2116d7 -0xf58071fe6f345093b7ba65d2a13a9eead4f5e2b300c2b6acd34de647417d1dc7 -0x319d94b78889e5beebf935a9ec281d7ba8b006084cf3bea925dcfa316a2f0d60 -0x34eae9bf6331306a8601dac2b4aa56f528661cf456fc1011e04c9970679ced84 -0xd9bd14e602654a1b21f817163b413a47b2093a2c57b821badce4f0d0f98634b5 -0xe724ebbbfb8ee7a8cce046b8d74f74889e1a62edc4e88a137e6e3a1c449e1b43 -0x3f057db8b761163b609956970f3b5baa943570272056bbbae248ea695352c7bd -0x87b93b39f856a2dc259e08dea8b21cdd62ec5455201f4abd207ca8e66a78a486 -0xbb4bef970dccd3bf7e14918e3a1ed78b2d8e65c454581e86eab53f373ac73385 -0x20cb41b9db20931f388d4160297a22708aeb9f523633c73743b8b2db1e1d4cf2 -0xae9e41111abbb6c14039f8e73e6b6e8ecdd6f565b6fbb359b1bca24be4c2b5e1 -0xaf80f062f951cd48e302b42c93702c5f64cbddc67e18f9caba5126823854755d -0x3ae7f8b4ac50ecb51444bd66f9529af727f9fdc0a35a41d860848ed6e7aed7bf -0xd80bd6350a13aa57a2c9753e6986898b23fa565608ef67aafb03eac305fc4a2b -0x4d3fe791ec2f97e8de47ba646bd22ca9dac50cbb00f245b00b614d7470dd4033 -0x0ca187d79ccddb9f4e35e3da112978e0c274c3a755e35dc59a697996f31483cb -0x448570542966156b8af46db8989631888077d989a059f07290357ab33a44c8d4 -0x93d82c84c7c470c056c866ee1eb7e7ed9d751240d50b95eaf7694584f6771609 -0x31ba753143a669b0b3772429a7d7c2534f3f728aff225f6ea5d11a2bfae801e5 -0xb96b079caf648e623ea6cba642d596156188f9bc83642822347a4555e0d1ca32 -0xd5a58ba27d5221163907f59375dbed39ea0782b7752a648491788ebe3bd02bab -0x2dfee1ea55ba4c929ead95f132d98baf297ff8fc731fecfb3f52ccbebe0f03fb -0xd09369ef4c5e27fe66c6a71c696a44a397109e95a30c4f5266a845a96bed8244 -0x068d5eb1a05ff1137098feea950ad711f7c118c845170c97ca9c69406f15e0a7 -0xbc7e2cc885c59087c4b65a6a050da1e693c481392147e5aca50099c3a32ff22a -0xe578a4c5ab8a2ba4cb49aaeb4fe1d845c66412985983f8e7a63ee1e40549fcd0 -0xcd942a588dbdfc77452923502aa3726e84b8ca20c4a0d25644a73f09e54dda3e -0x42b6159dec48833e94562065b40197a174c6c2bbe5bb559c416f78634a20c7e0 -0xb6fbf2fe439927d799c162a950aa9df282b160f3de43e8ad7f64b5f9434c6344 -0xbacece2b76547476db821b8309b1733006d71384626a64dbec3bad753b0bbc12 -0x5590066145167037b14c3954a6b6d3faae09b4c949d6f5e5fb07f16c285ce109 -0x9c85ac9d563db9f3ffc72d2b380adbbf8b9cb00892c5669a5aae86b222bcc587 -0x90491d9574e1e9d9204c486c867101c95fc017843db96237a3119210e6ac0f8a -0xc20c65e7d95ca26c30832bf24bf88859112bc7c7667def0310b9006beaac38f8 -0xb1871e80bce653fa1616cedbc2e027b1ee6c048dee614860accb821c6ef1468b -0xe88fd58c57e393fd52cd760e33a4dca10d0d28df1566346bae7113d6d0149b3a -0x55a409258c165112865ee6812375d065823ffe42d9b59066b494417ca8c30b27 -0x582c1b547ea60c3bb37d25403c4c92386770e1a4eac537f3b6d32e584f7df23e -0x9ca7f1de4b2d4ea68ac0256109795de5c49299d8c4d0c06dfeba799aea50b259 -0x425cfe79918a02fe97a8ed499b12bce92f0a188ab9d4621c1198ae1ae81bbd56 -0x924f216433b7327a280c7ebfadd77c39973e0f868da8ae0f7f34025c15957408 -0xdf545bd5bde8e0c3706e43d1bd198cefe9504a8c8950cb1184b82c6992d16cb1 -0xacff9759630693d5fa915a81c2f465dde59d38e038baca94b1fc1420f8610216 -0xb99aef377cd401f2a2c7580c77a8b25dfaf9e0bc6733e3dc2e2fbbfbd7daf84d -0xac4d4a591cfda44b6081364fa909b44e6724072f5887b8a2119a9757e0b82119 -0x1fddd58dbed1f1edbf281ba3978ecba2bf634d22dfe90d4d427cc7418598ec74 -0xafbdf886f73780e6930d9c9f1389d72eb51778671efe68f70dbd3abeb626bcfb -0xd71ae3a9a3eddca1bfcdf811311256eeba79d3bfc1fdadcc568bed760c58446f -0x11356d67d3c03552e454e0b9e3a0343223b725a139f98d5515c2f0e1aa43406a -0x7b1faba3a68028e0cc24a605e949d8fa2af51d2fa77dc2481e482b6adfbc2f27 -0x78e9486603dddd8510df00400c4aac63a5bef0a90c9d8ee02cfb96e6f9303b36 -0x53d0a6e2383e3e127882c771f85230e97c3e6e3b3f19ed2287f02207b72b4b7f -0xdcc134d769a2e98274f3ab356cbd5e5e2a441a31655c7bea63654b6de4574469 -0x0ea3f302d2816c5508ea2f36520ddf0b944890eaf31689996c70484a5ef7189c -0xbfe5125c9872a5ec719bf74c0a52e954811644690a1b006ab4077c170c92e82f -0xc11bbcb3a96acba12ba7bf3bed7249c0ad3f080ceab6b97eaef7e992fae584b0 -0xf15892323ecd3c7fbb2c6ddf8ee2ec31fa006233cf062259ba835de78dcabcde -0x2ec7ca3da0a50dfc6e02ed30fce5c09f7c976d98a148726dfcb374d659380ad2 -0xe2cac758150ad4fb233afca81b4f3d535c02c56965fd816b87ac5c757b1dfe97 -0xbc6a92b8b491142e52fd844284158af4d5efddd35a9577d8cc3c698fd120144c -0x75f6ad99c5c0ba7bfc219364a81da92ce1bfc076b2176edf9e9185ded5fb3f77 -0x41ee1cf05680ac9af37215b8bd247967f249a94045fe5cbb3fa2cb610fa75ef9 -0xd727708bebc26a4f8007cfceadc5fa25515738f8e5941e04395bccabdbebba1a -0xb35632f600f7adc0aa684aa14440333ae1c3bb5a0725cc506695ae6427c8ef31 -0xc081d708ba63be8d98658823e8e363f1cf44d447ace47ace348979adf8b67fd7 -0x0ed970556068ec19385b23f4104f0147e771f2b6f4716c7b390258f8c2777265 -0x7db641a23fcc03e4c000306d758865d6f562f550a8d7c92ce854a603f110bb2e -0x6bd2a11960d39766e50276f11125e8b868b6000c070e606a92d48dd282d227d4 -0x0179987f50fc0a018ca9a2a180ae83accf698b4dd04aa291c4bbe21aab464775 -0x0ffb6b9ba75abcaf69f8015e85a30aee9d89f0318079e781e80b1f07d40ad864 -0x83d8f1bd59d9ee65af5f7dc3177bacdb215f6c85720587c59721e5500a09942e -0x384c66ed0e473fd749340dc97544caff5860a820dd09f3919f883e16fc8b8626 -0xd91e5863ec64c4c7fe2605c0e7b6d5057b2ebe1b06b2ed81c17543caac4dff11 -0x4b71cf54accf87cdd3e8efc0ee725af15a2a5d7672f8ba95e26e4b4ec8d2ce74 -0xa283dcbd8691b29539f0d266a9cbb97fbc83cfd0bd747313c3287a97d990181c -0x57471e16e1bf71b2d34f400209d97001b43ce9687234e4c07dbed7582d9904d2 -0x929c4d73c968491cd1fdc3dad448366cb816c9d38a86e3071bef18944ce76058 -0x876dcc48ab41ff9047fef342cc5051da2486049833178a195e5061ff97039196 -0x950f49e78478b5a2f7f82f53abb47b734052b519132f044ad7431b1a2c84c5ac -0x303a4642e0a46b7255e47ba452cd02ea730875c4a3939806a28f36b9562ef6d4 -0x3b5e70819982516747a2d30262ea4e9189eed682ba4eab6ded199e9f7f6f509c -0x578d372e68e294e4486dccf2f8cbb2a3ea4371aa7bbb371a20df3432ef33b00c -0x026f0f9587bb999d3778e7942a1a168dc5e56c43b7bf38ca1fa670ce22516f64 -0x4b2ef3d5786ccb37b5dea8108db0af67b8e7bf8283e76ada825b09f848634907 -0xc39351b9582e592fc1c3b7027a06d97849b3ef87eb0a11a669f6f79a7f3e2a48 -0xed5e8a314dc2ee4846382c9701dda44df0ef3ead0b9dcba8ea41b1f1e0f2b69f -0x824e96f3e2d98c88a8ade7552d0093e59a881bd3c42311b3be784d754b7ec67b -0xa6c7858cdd9f8523ce4bb271edc788863bb7e100de34d131bf73a5dea76341e6 -0xc8c6d61a7b14589400ee4ccc04c19ba75d1ede7c94f3d77592a18c5adad3818b -0xd326b4fcebc7b649168df35a82ffc149fcff2ee4d1df7def365a55c365571dc2 -0x06e0a8cfde0a9e2885b30fc4442edb858326f7a848f9399180dd342704cbd733 -0xb287db38cb360e9f5f43632b1a37bd8fa0245568b385928a80dea7401ffcb0ef -0x13b44d8193fde0fa62231e50cfb587da10aa18cd6cfb785a2f92beddf03fbf62 -0xdd56794418d369b71422b2fd220824667ddccea1d6bc6ca4a2346f352eb7985c -0x1a7b19dc798d9f5016303fa8de7d4d05ab60483506ca94c63293396df4a9b966 -0x9d4ceee3ca14f86dd5209603e179190306bbe691c51722209ea1ffa5f3492f5e -0xeef7605cf064bd55dd16c13e2b8044f221979894f27a1da900500f3ca8592802 -0x2ef4c9a8a8ed952b6e3b42e89c32645821dc693d50818a021b3812d67d430b67 -0x033d415fadd1a68318886c520b418b3811fcdc0f24048073afac4e5f829b41b8 -0x7463be95fc4f72d7321cdf87c3bd536d3d5412055957c3d15d503719ce9630e4 -0xdf4cf7739facb31818626c8bd82e263326967b2365c9eac6c69ae34f14458a8f -0xff329331b579aea5a7dd6f35d815ec08a577b40425342f990c019347cfdaf260 -0x321403eb343e80bef29314a457cae88ac807aa12a9956c53f8f14cd656271ef6 -0x3e9521d1d5d2a1915c7edc9c543471d08b292db24e22d2c1d72fdbe7bf09b9cd -0xd14a74426f1ddc37d719126eb22c7e7138fdfff11c9f97a792838fadd09b8bcc -0xa435bde9cb125e7622b973c53bfabf62fdf58a3e914d168026d1125fc61e2cee -0xd665e88d81c07a86f7f56573cef852619ddde3315474b97a23658fae8f23f512 -0x7456f670e0fd09d23c1b98cc44dffbfd5184e37888e710ab410b6d69b4f57de6 -0xb265d265209e81ef8ef2049f73b36a3e0a59ae3387fe18a74980e648f89d1b56 -0xa34941dafe5137c7f44454b0195a571e111f22e9429ba6bbd65fe3abf7efac0f -0x49d107f293f681c7837b9470bab9b7c405a9b48576bc5168dbb3a48ea3aba338 -0x452a4940077eb666ee372b147cfe6dbc739fdb9e573929cc6247c7f8399c64a8 -0x899eae0dca25dc29b5da1b0f1f43fa04f91d46b6acb84e802807c89f6634ee4c -0x395adfcd183ba77d8b23e2888d13a8ed0eb2843b8a0818e224cb4cbda5ad832a -0xf7b5a5eeafd59929ab0067d2d73b207254a52a81b7b77df229dc1372348c0609 -0x597f957d17ce2b4b9f058874fac5e6620561f3b9f435eb3b29ebe22c3d75bc2c -0x597929c23bbe22434f0d6f08582c584109595f58c7a9f1de899dc8610031b707 -0x4c02c2fa310ff83781f5efb1e67efff866f4373075622622ecbd817837690e6d -0xc0d46d627fce04aa2e5743b037245c62aee40b9959759ac5d6f03c15c71fc2af -0xb1150e99cba1b3ff6b4dca1936929f6256e19c4251a54ad963c4de6a5ce9c04f -0xe66840ee291733770080ce495fc4bc65c8a765d265023a13ef1724b2f0594a0a -0x6cb61d17cd7acdf26cb7531d3ee09a74703d4384b841a0d1d5c66e32e6e83289 -0x4fb54a5e985866f48da322951b8a65fd813df5f5c60bf95d6aed854d0f380a6e -0xfe188063356560633667766efe7609320c06c2f158a129f55d3c40341e8b079e -0xa471c33f5b013521c0494211b3867b15320048e8b3563852a01f5ddfb8487d30 -0x53dd01f135dbf7368720c7f1817d2b8990b06448916ae0c8e4f5ea438fe672fa -0x38d64f1cf5c10134cb188038d428642fee0dfe5f3bd9565082d89d81f3567a85 -0x47bd81fdb63bd74fb53c27efb014fb8d1f7fc79f72959ee76717e0f58611034b -0xb29aab85a71a8346cdc917243ff6cf7dcbdeedf271af3060d7b89a71d61b0b08 -0xf0632dbb409c12072dcb94b468f95783b26fb089bebb35e02ad2e6debc52f2dc -0x91f4ad68ef64a92a515b0b7f78ee7ea74d59a912e824425bc717948fdbc746ca -0x5a48a6cc8d8f60951e298afc94e13bc4f581cb04759a1ee97e6e8b91c55ee008 -0x5a1db00bc3743b08131ee576810a930a15cc15938647df7e6ac38a97cbef5616 -0xddf379215fc60164a4bd7b9d908bc6f4b7f09fc6eb0ded111a4ab26ed343a982 -0xf860704405d7fa4af27e45013f2d35e01093d96f5936ff6b4177553f623c83c8 -0xa4965c27395eaf43569e969941eaf0416891bbc2e82526eb2b69dd29112252df -0x49dc24ca18460ef83789be52a91fa0bd3b137643922dd2e9a410702e50d0ecbb -0x1b7badff296bc47f83f7aff396a39c29fd49ac9e2e26bc1b4bc951dc63603925 -0x30a33f5438bf4798c97e5d66cf8a0220b38ca1b48121e4fb51c1c0e918722130 -0xa5afca8629213eb11a711816a841dc53037f48d3bd011f7b7f25a8ee82142ac7 -0x48966cf69daabd7661820348ca367bf89c2f402e5f7ad5978b9de4a6203031fc -0xa5ca2a4d24156aeda8e5dee2f34f111e4a870329687f104ec315202acee0a4ad -0x89ec2b15e3c235f89a2aeb02d10afeade5b6645505c36bd1b0cefac8c71921db -0x3990d70e8c7bf917660981c88ff9d957b5a81549c777279fa84027ff04318898 -0xdd4b8c542b736f8721674fa6f18d220915c0aa095732b90df5d112f8d6c44b23 -0x9aeb2da45302746132ae354d6f19d69f7b45f0708b25a8f0e20720a993a76384 -0x31202ee45d6897373d07d3ba52fdd53e6f763d29b71cf34f131a99bef8f7e8c4 -0xb6b3e9c66fb26ddfdbcd5c0a65fd06fc7cadf5e3641bcff5a00d702c2cccfb08 -0x709727ed2fd24f55f81f4e7131f11dfd3be70c6bbe53055f566b93e1564bda3a -0xdcd5135c4bc11b11628b497d380555004b0ff0316aa0c36d0c1f56b42bad45e7 -0x74188d1de6a109e442ad1feb62d47329804d39c41cdb411b04a9b9b1befa3345 -0x19d46f48cf69a2db112a1d41128de41f73f048fc689b705729210fcbf1639320 -0x0a7cf4273e90711b1ab3f4396a4152b252d4dcb1fe512428d4866e8d2cdd9e2e -0x283a27bd8b696eba87b6b1de078003f47ba48a33d0fa5e74923c0bf28febe11e -0xd9fef123846e7dc85a95cd19751cfe9f5fbc0d0b48fad4dc506bc400c1f815a3 -0x63ddb2047406e10891bbd91a7a4a9d7919f1e294a8f8a38abeca87669c7993c9 -0xf541a762f56f1919f2c3aadd4c8e6b29b3dd6ab3b4d432c3d039b4e0f47c3e7a -0xb8952cf28c55e7654c72e6348d1a7331beb5b68e33e413dbcecc20c5f420eb48 -0xfe557883d3c5b29439cb96be85b01d1f53bbc2aec96314fecebfec66624a45a1 -0xbd9ce1f1cf04d286893d335652061b7f70bf4f405f9eb2874f1e19e94cf6dfe7 -0xdb5717bcd6e2e947934b0c1384c84b763a530c5f55c9cf2ec48e11bf250359ed -0xb182665e48b302b8f61d8007c505a80f415bad6507a36feb0ec5cedf349cecee -0x84af309c32b39e148f5256d5824bef9081dddc3d19fc8b34c41108e7e448f34b -0x6525bef6adf528036b2fb5577ac432f1be73dc87c2e26c35ba8673367770fbdc -0xec6858cc082c98bc58774ebb0be9c6a23d8f57ec01fc266ebb2854e998d5c044 -0x0c79ecbfce2b16ab50921ca0078480d74981ecc7ea7c644759830cb7ef4e278c -0x10f7b54895c6fbd054cbddecbead05a34f0510824e5721e488506a297dde4fdc -0xe632be05c042f5f068a22151c04477d904d572d7aaa81e65c510b4e2cfde08a8 -0x58bd6ce21ae27895cd2bea0e21015d7764f201007972e12f5ba0d105a835bfee -0x308266458b0ccfab1726ddf54423b8e1af54eab34695b2872060eb0cee51ff16 -0x8a9ff7dd3d3a5addb2baafc8bf33c79f60fb36ffa87aa3b667f27685cad072a0 -0x080ecd7bb017feb39b4ff6e7afc746273c75cdeba5a4c04073186f9145c87672 -0x64073accb76de72e1cbfff44c1b2af2d3aafae996ab989370bf81045d2e6173a -0x3a1b4347a287a6e5f3bb6151ccae68c48ed2c0fbc520ac83e18e2aefd9116edf -0x4dd3fe9cbe9e12c3f9597ae3cfc7d7d55762c3d74563555cfcdf05b50dad5996 -0xa417ea1e9c43303742faa39040b7ebfa954d384c9d602b06792d8e35958c651b -0xa42d1a9a78d4e6e7fa34bab856d17aef7449f9413dcc37633ec793d3ed60e772 -0x99eafa6b5f5b42adffcce5a0a63a8f1183071eefbf9b6205e0abff66b2f3165d -0xd22fba67b32c1595e353e4f929e2c201a37b2c11a291918e716e1338cd6d792f -0x24ac41671b56e8433e784fdbfe74ca3fc8c6531d9369f83c61d114e9d7fe4f49 -0xcaeb5cd9fa1de6d0c37ff712a309224b5bf7a15cd6ffdbfc421f74d465c3ff0e -0xaa4c17fdc2d97446b44c3d536ad332aead3ec69d1b97af6dd60a640c4f9b21fc -0x6cfb494be27442fb3acc23ba13d74914406ccff36dcfd692ee9cd21455867dc5 -0xde685c3a4676cdef43bc5a8946b01fa72c6f591e4b1bae4d4f27a1fdd775a614 -0x884b3ef4ea312f1b2712d543b8686ef58ab642a038fdeeb726e24ebb2cc8aad0 -0x12f0d79a302a1576dacacfb0a9d840972caf6cabeb6d0cedef9078cbe9861992 -0x8eb8161668d0c49968c285e23540db9dce83656ab9dc37a206821927f38ad031 -0xf570fac613bd15daeee87ee828cbec64490fd160151ff15b753f9e33c80a0555 -0x8e154594feab8283aa0a925dedf958e726395d9a622b0bc8638dc430400dc344 -0x631ee43d41f3e454b6cb420904191d337b9d98a55d280c704aca861136db86a8 -0xadfbb89dae70ca295e091cefc653f53169844e8d1cf3ae52677bb884a1ddf62a -0x9d1e3a84bfffffef31247aaca349a70ded7f2b68e4a453982c18b23542e4febf -0x57b39f623629788af20dc881805b97a42109f6a165cea099b55691aeb3b36a88 -0xaf8ce1692371458dc72595ae7259147a01caa924190fbdea04aa954ca277a9d4 -0x56d1ba3bfd5a1d93214b74b648c0be8bd6ab0ca3dfb44e83344964f3e81056b1 -0xcc5dafbe23f7190eabd43642265badabf6ccbc37a226e27a7a6499edfb7127ed -0x3ba188946a940eb0963910aed12b1861e919ae70cebf5e15693075be309e67ec -0x0dd2845c227d8b79a5fc1b937458fd066165d84951e500b7fa086cecd3dc7b76 -0xd05d6cea394159057ba563a6b8c399dd45f66f97ddabb21aa4f2c0eb1865b2d1 -0xd506b423065b6ce07966fc58be223bc7aa8ed2edda0cd28c44fff144c7864975 -0x00ff6360646a8599dfcca2d97afc3e9a6ab4f24e9a8fd1292650a70315f47ecf -0x106394fff5915bef16555f457704b3d09eee63d655143846950aa72268f62833 -0xd0549b653cbe4649a2931300688cf49f53d943e2555a0aeaa13cc614620c90e3 -0x533c5f976a77130fe91363e5b4645b8e09522b94abfff179a31615d8b0ec161d -0xf5a907cc6183f444de2797d5d07b94c9a4415a223a8d01e201127b06ff3a06b3 -0x9567c7922f897f84ba14eb88e621236045baa8c415581fe2e9c7452dec7cd636 -0x108d8c1765bc0e3f0195f8d6c42dd52906815daa3a25a07b8d7df3955d902c95 -0x523e0d610bdc00e1672f0a2e6570b07ae7cab0a04436275e95604c284428d6ab -0x37fead1d7b72e2aa67e7dbede98389471b9d82dc098507e2c1f8f9382bd9130a -0x34d76fbf393722a2f04020e80ba6dcee3aec33fda48306baa73ed70741c5ca8c -0x8976bd0ea821c352dca7f8565dabab249992a7f53497ef134d80438f68e2dd96 -0x4401bcd0768476e5b93f21b6d0ee89329008fde8155da5e6fcaeb2b0d04f0915 -0x184bc031790deaf9b02e1a7ca021e2a241a71c4bb2990c67ec1c29dfc3b922c7 -0x2da2f612b9d8118eb3be63b25dd87acd48cf3dc8c765824cb7b2f5201e8d70d0 -0xb1d61994bc30fa7a09a3c77519550469be470c761d890c7e08b988c2b1893727 -0xc7d05903c15cf0748a654ec61c12d648be1c0db6f743bcb0181c63721e43d28e -0x1f666e023ef8de3a557aba05f1403f374a16e86edc54d0ed710df848931796ce -0xfd8d0a80e1c6da5e9d92ce1fba52eec77923847fbfca560f68e4e306fa179e5b -0xfb36575996d3be0a74392f039178579c9c074eee1adfa77edb13a877ba558576 -0x9ec05c4e0185fb870b01111682cda6505cb85ff6037fc3e9c105837ae5fdb7ca -0x304c4d3138f019f28fe287b37ffc4f1711e017a7ebc226b39c736a56f19a48c9 -0x211bdd97821819dd98deac9db4a9b2b7d738f66b6332e6aa55cb83644d52ab8d -0x8200d895a01436fcd0664b56ee08e7ea60ae9694294301ee9af9ffd8765a3653 -0x73ef16d076bb58a3b8c67d560e231ce8e7c93903706f55a4843975a45169a08b -0x56345162bb9cfa0b7436e4cd319dc36c4e6cd33f959a8df14068397be5204b6f -0xe17bd6fc965af662b83ea4b67244c3917bd600e72588e03757ef8177b5435d86 -0xa57cd048efd786ee4cb1488d9b5c8c4c848b8962ec208a711cd2f9b8b59d61e0 -0x924b5127573733e9bf55cc9cc7425774e0efb4fc8cf85e4aad2838c277491863 -0xce509b3b822c130e28e1d4fea5d41199ea142bc937465ae8a20f1e91a8bd68ee -0x59399c6e5b6c308e7e7e56795334048216b20f553167361800f9d59d25b113b9 -0x7bce6bbd2eb5ad3081972c4746b3a67200ee1da74361b7975356ce800de517aa -0x1fb8d1c6d6dde389e25542a4bd0b834937cf3dc20f7fd0dcbf505c4e7162a0d2 -0xc6065a3f43c0dbef6061e41b75cc04eeddb5bc385d009603ec1d366b35840b48 -0x645a9145f52f55f4b73a9b47b0fb0a65bea603f15f480d6064ce858e35124135 -0x0b0e4ee97927cb2b4bba3f530836984857bb34a718c8623ee45eb2c80140f5d2 -0xedb84a6bcba012196652ce319c7d235ac3cd82ca6073174106396cc0887b6f28 -0xa55c4fda8315cf924a32c85594c34be7cff0749c714e63d9929f5fe9dfde4c79 -0x6e14db244824da2ff709978278e6d5361013032e6f923257c2ea0a518fdffa96 -0x04d7d128c5e370823994dfc82bf448a6c52ec52eb6d1861769a3aa59692e6d23 -0xeabf1de150628fbd7c7ae66a69c6ce6547d64c1976a7909e1714da5778a3c12e -0x9b603801e6ddccd4f6107e704cfa44368fd761d7105739488045ebd74c405441 -0x22a7197b4a19b36c95ff66fae3b1ffc914d9406f41a2bd842d5012cf39b4d42a -0xb0cb6b626748d95b98b9663fabeb655656a327fb0bc4ce2a719c6b68c07dc907 -0x55f167efe8da4d7e29b7a5b3c4b9e4a9afc63946d483a0df034e70d6756f7d6e -0x309edd7489162a368b8e94ff8072dc3fd9fe6b8d290976a137ad3123161a8adb -0x5edabeac6ee9aaef59a410dc0b33e1c9976f614ea749446b5646e713d52f1fa6 -0xbc548b886deec5c9fa56fac4fd32eee07d2bb85dc1b1713f16f75912467c2bd1 -0xcb28944d04a1089a01f66609c04cad463c4fad72cfee4e49fe539ab1ff74cd11 -0xf13497447c4c33f10ebd4a0fabbf58f176f8ef113dc191b5875a55ba39f33d75 -0xf515383977a01058ba766abc0dd03b68d78e7420fd8ac49ff2326354b9de1732 -0x095cabeeda118181d9d0c338f5ec1e143e773164e9783d12ffacf40f00d5f3c4 -0x16579569afa339fe1b14c2080246d8975e49b21914dcc7544c54e30491989ff6 -0x739fe5659b412ac265dea7afcbe97fe632a216c56b0660b10ebbeb8aa4f6deaf -0xf76a2ad8ca7deb759807fca36c6d6b8321adc23ee2dee89234a51e2d65321891 -0x8ce343888cbb5a6633d0d1dc286868cdc852eec33bc0878dfaf5bdf79a9c2fe4 -0x8398cea2c983b86aee10b105b5c248645f44e14b8f01c18aaba63a998b2f793b -0x793d1cfa3e6f113f67f140cc29595d432aed0bc354080c260e5b4a1f85fc9e17 -0xc7e554b8cb6b1370943428e230bbcee795ca88596c4ecc083ebb6d8088be99fc -0x2c7481486d12972777050cbb47080fb3d60fc938daa31b3f186bc96ebca9511e -0x0c841507f4fb27b9c42ada7c70b93daaabb7d3237cf6297c0790e1e0e5e7de14 -0x3ebc2cdd7721df70ca8da593b209dad589c6b287abaeaeef2147562db76bee5b -0x3281951281a411803caa3f561155810a8bc2604d2f7677f27f34ad17638a1318 -0x10cfeea0b7d32b1217fcc9b6f0cfa0aac31a9472b053969ee5c25a155b055baf -0x6ae7353e4b322ed1c27920bd0d90a7d66e825aa083e9e7148e861143b038979e -0x4afce0d8e6c391ab0cd8006e4686733e63b2df7b38d235cf46d89a8f24cc4451 -0x567b5112fdff807c948e1bbd78530495b3509d65621d0383ecd95a992f807928 -0xd8dd2d8c5d16b88bd9d2c2fba8f15f2e7e6375079a30bf9749ba196169df767e -0x1504a37c3fb7db6b444c87b0ea5b901e72ea17193ee4c6738cd7d89e5f4ef2e0 -0x86d48691ac50fcb48a92d5a2c6bbffc3c9722f1869e948b9d2782d99fec0141d -0x54b50a1bc404b3b19532e5dcd6881d3f960e3a92e86b967c34adaf3c8fff3be5 -0x3bfa9ef12f46cdcca485440c26ffb1ec59c28d0474e7c3b61415e00301ea49e7 -0xc82cbbfd152051492852ba854f1e96cf3ed4ec503fe9d986a256f93f4cf42730 -0xa6a4d2b019820a943c23a3d91931fad4c4500d2e66361da72956d4706a1c9d16 -0x8786b86f1982653dc4a09a7c2955250e772afcbdd761769cf0dbb7f78344c929 -0xbf5ab422b86360d6a7a1ef9b76a74ea5ca28d1b6bf65c9621827895a4041227d -0xe532b7a3956fed8388bacf4654e67379380c8ec803894da809f751ea09a4332b -0x9f5547c2619f5a1f45e3186d7e65efed534b532ba028f86b5d76cbf17268091b -0x895364cadee26841b6897ff267389266b9a074d1b36da3541b2eee4b753fb3d1 -0xb843e561f40904f0947bbd8d1b0cdded54035b09e3d3b42cfe61ba17d3fee0cc -0xaab14de770c8f4bf2ab994eed398e1fa1212db370ab0ffd803dcf2abf49485f8 -0x89dcd1669748bfda1503c45dd9f5dee09cb54e7c88e11ad65ce12b1f793112f9 -0x590170abe1004e2d6a3c18dce5b9b90253d26dd1f66a8f377fbeb096e1609c3a -0x87fc1e7be7e7b1ecbcf75262629a053460018a30ddb99ce3ce73c4c22dcfe9ff -0xdfa81abcb20e2bdefca7d66eafd8c4322179c036a49740771ea024f551cebb96 -0x53152f0283b5585218b0df36c062265ddf9f072e804f4591b5f6ab3d22f791d3 -0x1693eaac614355a3a0b0f0fa0565a2041d2d0cd0d5e7f71f71ec5bec16281a8f -0x6b5293ab7c0f867503ee85b593fcb6552583934bdfa65e6010869c5a201a418c -0x3e3891bc332aac0dfaffd8ab052d60d4d7dbf302eec4f33e73e7c86c45e47bdb -0x67068f9171f817d81b35ba5bf1be57e7568ac4dd39aefab7472afc9aade32347 -0x091fe60e4192791b8b4942bbf7627b977e75e48a9001e0f389c7b4ec585ed142 -0x0df06d8e65c25e69858666fb6ab116c7955f2f080c6ef774db656e5ee3d4bed6 -0x446f326ec8226953f4fb0d21dd1eb5a925744abbd8ee8b95cbe07ad0a875ca81 -0x4d48928f6a939f34b415b3520ce1ee11d1f18c13f076fee80fc5f326622b4066 -0x8320b8332e86011548d7d22813179dee493ecc5756603472f90a878e8e139fa6 -0x85150dba87b63d061def017e192910a8cf0bdd43c00c90c9f6d9eaca505f96f5 -0xe751cd64afa2bfafcaf53066102737f5aa7ec33c38f3cd3a88e7e57ba5677131 -0x9f3a538bc5d3286ab91effc9e347c76ec7a0219ba14663d72ff7e14628af2147 -0x723f4c2895fc3a496f5765384412337dd5e8ca7020ac2b2b00466440bb232030 -0x6d5a14de1d8c51b1cdaab18123dcb2949e4995332b1bff7a0ec54dde80d68cf2 -0x3382a24463e949e26ea3838fe22183e809c63c10f5af9c459b0a2f0536e2ffe7 -0x2a789fb5153985aaadecf554b9b1a0a5f49bc67b425a877fa3f53ac08fcd2848 -0x056dd15cb52c1ecca30e0d481bccc770e29cf42363d28155e8ee584b93df0f90 -0x2a964575386b6aa3154b2f469d266127ccad342fdf6f26b81598b6062e789a3f -0x29e319fee6dee6a2a86a71e0bdde05e306b2fccc3e3b55d251bd617881b1ea2c -0xcfbb16452179189034b11c74ea9ea79ff3635bd6701a9bc69882cd4be166cf83 -0xc2e06e1010834b73f5276501c74b5fb9b876aa2f2b01802731fd19b12a372bf8 -0x219e1aa4a742a58f9b52a05d649e0380a242aa5bbd3f4c2d38e8601d4187d0c9 -0xfeca9b8b8c8bcf206b7513c891226c97e9561435ba0e376130d872be2bc5b936 -0xa7712f3ec6411e5fbc7788b4f70cd3e761362bc6fb7914576022ea62049ed607 -0xc8139bdded45bbff7561a6881edc2710b156caf50f7eb837f061b4cfb036ca1b -0x6fd070f9f60159548c6d1213d2ec7681c388b27722590ec7bd9415e1f5c57528 -0x2c7d3ab7a170d9181cc88c81c94df4a4fa9392c8e27156038a52be447b80f823 -0x67c5e0c4054d1d06d32630747be497e41e7e3e65245e861b8ddbff574c253556 -0x7ceb16291322d2f6e0d27447fae1b7fac9b9241a99f5708c31627b16c037c51b -0xd3db811203934377ec3fe3fed98583b63c636f76b1235d0b9c580d3538a5a4d0 -0xe6c41d008e2ce1dd39878d30c4d4c9f5ae83326cbb91dff0c9dc1bada4b76dd5 -0x9e236acacfb702e89e93c38eb8f4c847f13efc41df404033835d8dc7e28b4b5c -0xb400cf679361779bedad7c39be9bb2156883349183a6b4a1ed7d7956bc3f8629 -0xb5b36825570df1df7c32248f6c05b67bf9271d9dc30ba6025a84beca21a120ff -0x61f801887a1413e7f49d36b00802d6a6f9a6da21e973aaf232fe17671196b46e -0x9b981f051a4b43e402feb353d83e06432552173948ba001fc3b32f4668d8117e -0xb67a140fefb4765f0b500a67f7e941640d5e20c31d684789dd4705c39a7ef11d -0x32f1ecb76deaf16294c9e1cc8ab976560de525a8e0e7b06a2f0ce7e0a1680a49 -0xb8ac0681794a725d4df422121392b0a2dce33d897067411976d5ee53a7c8ed5c -0x359dac7fc4045ded36fe2e31a64aca302c5c51ac5ffaad2d77e43b30b79e5359 -0x79a7aeb0b8658642fc7bcfc9fc3cae4d4faaa63772c841fb1b4853850aa9b28a -0x5f3a7bdc89c67abf78efad28a12768ab8ac8d9894ce0a6df5259b0e18f7d0421 -0x9f450e439c5b8e4ee74a6f198af495efc4bba483c0d4de80b3683ad2784992e1 -0x7fcd66f93e4e62d726f7c363a4d5d3a14057bbc7cffe734a4bae7fb8d823a7e5 -0x6eaf58b5d5f014e34c3e54851f31b7840adf8cec95bc18d4d63df74c47f8fae1 -0x78772911da2c899e5fd8861031f1e9486c30830d9d8da8f5af06ed5fbf83f7bf -0x78dadefdb5040062ce14e223bf30d29f9d16657ef38651692cb000b8e62c009d -0x33a866a607c50ae3759e4b2dbbba5e11682ff393b27bfffba22295a9c6cc13d5 -0x111f86c0dfa1880a50f07e51bafd41fec0d25fa217bbe68eb9bf50687a07c509 -0xa4a9f0ab2194724f1de396ba0a3333d7e0d6fe9dcbdcc134045bbadd994a3fb0 -0x25229a2eb8ac58c704d548af56419fe7a90cdb6c95a7b3262dcd28fd1ab04961 -0xb2901b23862aefcf79d7e8a484f49a6622cfa3e83ecb5735033cb718bf9e70ac -0x8ab73c73b9875d541bfb9840576339764d65bf59497785a25453a86704431544 -0xa08b38d0d632ef7ca1c7cf170b8774d7d4e244b1bd1731ae7e7a545534086e92 -0xf66de1a9556a7d29b504d1b86dd2a2fd2bcf2f08de315070adf9cff72a8454e4 -0x947a6c3f90d0cb625bb56c5a4fcfa78c9da94fdc0455d41cbb4399b83e1148f6 -0x80547b99471d200635a9fe1307b68712b662bf99ebd951a5d961a674aa0f8e6a -0xab2b88793cc666a5dc4661d49d0e6c1b66839faa9fa7c99f90f94118eec63953 -0x7ef2c57e0f34ab8609f2558099e3dc0c18d97b850e971d7d9810637db17d598d -0x2f4203c38970c65ec378750395c805ba53b11e0792157b68bb33d324f959314b -0xe5100433f4718d4595fcea4b009af8232cccbaaf491f8c3c3f8944c2ca0d1d2a -0xf1a05f2a6ee3809fae9e24875b91f9c583d8070f4ce74195f6414eefad6471d1 -0xe50a63a46045b9002b2819b29648b428412a03d35dea17a720638751685abba0 -0xf06ba507ae595c6133698fc14ebc92f93c3e180f762e5d88e791c421d43c689a -0x8c3ef09f91137089b88bb143d30c7eb1e718c237666d24ee9b65568701f22cd7 -0xbf8b2c1504989e2bf4ddce2355eb6053a86dd10b5a8b52606100e5638b2922e9 -0x72847766e1114e4c3c90e151f11642bac863add103d086222b1d4f7077caf2f6 -0x2c71319d6bc0e22ec7e0984e99dc8022df9c22a1cb262fb724be73720651d12a -0x4b0833f3f16326e432dcc4661b7711015b273ad8e07bca058e0b261d0e8f35df -0xe750a4ac2ae94064b460c56de9026f8aa0987c07c63f7d2ec0074efa0c384d59 -0x147e813c2fa2923554c3d987fc6fa695ea64a3174e71143d847730483d1459aa -0xf4d9e4f30a16fbd196cbfbc07a2a7bd832ef90782784b84bd48ef8643d9eda7c -0xde0f9873ea31354df866860edd5a2579b982976af1d513453b604ddc8a908eaf -0xe89b6cbebdd814eab91bd65fd9401af5ca5cb22540f45a368a45d9ebef1377e6 -0x2643bdcbaa8c455173d41c4012dc32344b37eb12b4d3ee8d6c6faa8f1b45a825 -0xdd6748a80dff1e4777e47d2e14e98846dd1f370bfc16a2708e6a55205ee2eac6 -0x16c6457bbd51c554c15365fb477fe3770da9e11876d8223a2cb3498ef28e26ec -0xe63a42c508d4a2431f792dc65c6848c49885acc9c5cd5ec346fb1ee3ca1bcb2a -0x25739781a79f798412e62fded7a4f2a0bba2123666b6caf2ed2e6491b84f58b9 -0x3c23d656dba0bfbf67684beb81f16e96688652ce7c25661331837bd9cb7020ff -0xa96e8e70c4a07e7bf4a54df75cd6515e66ac451bfdd95079b788ca107757815d -0x61bd43877ec2926522f9aeedd382321fded700bd434a4367d406545f9629c91c -0xca7b3d063088764a5d9fb657a125b0410a98de109e5724aa66f6b23e27aa9b52 -0xcab3b504f52c44d0ebc50332ae4eb459e37b2f0358c03500d9e93a9ebd05c449 -0xcd457e44f9688d1ad6ef9d56046150258edb689372d0072d94a9c97349e672d7 -0xa4c62ea7f3344e6d9482f0e1bf8526f48238716d0ffa4c5d24cfe0618e24d955 -0x687b689e7d90984dd0163eafba8c9de6621821345cbdee4e0dad17a450bef6db -0x4029566ae2c58d5613f19faf83545a4f32755df675ce0cbe202594ee68c067b2 -0xf649fdd0a4e35a4c6d2d1240ce284466071b941df7ca174902f7e9fcfb795e69 -0x114090962c129cd437a733678f1de00338164a9b561011065d88a0dff2606076 -0x42daefb9e558cade67378cc00d69f1673c5d440b9c2d3e7076c1f8d90f398ce3 -0x1df0c14227b994e3582a08dc1a3c3afbfd13f2db609a48e7ad1ec4bacf45daee -0xd47ca17955ad99b8e9191300c87ed0109deb8c3dbf22842a1123d5413b8397c2 -0xeda0d3d756f7fd4de68d98c36bd6ae89a98787daf44889c182be5edfc15ce482 -0xc35a43e47029ba3da87a476a2db3d1b17c7ba372b886d40f3fab377e292eac2a -0x23eb6a7793070b043266bb2a8455818f798096109362cf653aa43a4e53fdb8e2 -0x8865f4670649a07e76a03232996951aba1e9b775b67966e2c33481b9f4354eba -0x252591692261eead95965bc0b2ade1f8d181fe69b99cea33bfd0c4b27e62f433 -0xe66c4fb54678d41089ce5f88aa268f39b342270dec17b5ad14102686ac07629d -0x35b5c44ad7b07bf19edf5608912537ef7792fe8ce23d6aa037d9d708799330f4 -0x6eee3a69902a13d29ce926b0ec584243ec8a93a6f74426b1029a49ed9a559253 -0x55cf2d4a1dce47e10cd863da4491c3f01d9414ed6ba17deadb4082be72327c06 -0xdcf33db7d5bd38622654bd793cef7d6264c57d8ad755d29f847884b3cad001ca -0x0b8bfc300a4477821947be045e6dcf4fbd5e39ce87035199c93eb9d8f030b877 -0x0875dadbbf0b43eaaeddac888c9b01385196a9c254ff7721929a2b516ec7b3f8 -0xe17132bd61e20bc0dde88f4caa581bd0ec097e985a6538689d9501f038ffe1e0 -0x4cfd59e394cff70aae48c3178f3f8ab2c7a9988d95a574675ac39013d2f73013 -0xf8ddc3ab7cc22e8eb1a35e7500e3cea902cf9e5dffb7680d6ca001abfa68180a -0xe816facfb368f3c10eb79e080e0f45ce9375e251aab702e63fb1c13c7532815c -0x11c4696dfae218620a5566a73219fdbfd86b1a3581a340d7317199bf6dc58b08 -0x55f28819b5ef9979835150acbc48c50474488f7fd375b0e0922c17f3165168c5 -0xf8f1a86939577d4b3cb9a79557c542e24d70261e145b5c92cc8c58a8052f92cd -0xeba347e1d3a45c407e27f03e0846da597e1dfa7d9efaebbe802cb74d3428d3c9 -0xf9af867dd0ab03750a5276163ad7f6b226d2dfc3d8c5d6d81918b9bff006626d -0xd3b74150af199bf3dfe918ccefa7ef81aa72a3ebdb2654ae17f3b6751ee33d93 -0xf66a943814b9d207b7621e75a0de8e506640d03998e6563cd4d12e3c5dac1282 -0x8d08fb7ee5b395ece4116d230866a60cc83929ebd469460953ad50f870f10108 -0xe5d15b053e36b63b2015c232e292dff8d57fa86441f2a503d1aa4d41edf8e585 -0xa2e0df044dac013ea24f6a7c9e6019d1fd08b4cd764ed582e96a08f39a818b6a -0x291a45c5a49c02c512441aca00ae0ea7d557a324a3cb65ee464746c4639189e7 -0x9079d5e46836f4652e8687e3fcb8f99ec13d448568d62d9aabf0766e474d7176 -0x29e85718b1c74d65a07a526c95a721d63bb88a4d0d9b86369a1a87b3b0ccdc3e -0x9fb9d839530eeba52529a0bd071e9961c02b4ad180d47a83dbd5fb0c4300f229 -0x7127e0995bdbf6b9f1a069bbda9a3d8877c6d85b3081ac5bf70346460526b947 -0x9e83bef68023af5f46594feec0108a80bd5493c9993b97741615a3cf5712876a -0x9cca667215294a21cf9fbdd4509f0595d8a9b6e263454b5705382d2f2ef24559 -0xf27a07ab1656af6149d1f6cea0f4b31156c5810d62c4d6d30066d5bf8c5a7c09 -0xf9eddd405dbf90085188594139863536e2d17556923bb80c2ccd2ca3130630fa -0x9795b8e7cd08f8736b55dbe6bea6fc3445ffcfa4b4c025451837631d81c20d2e -0x8d56666521c21de78932fa173222b70d809cf5f6745d3ae5a36eabfb03fde525 -0x787da418e4227a1a03993b00d4de573dccb3393e21c4e080787c54a3e5bb4b6c -0xc66e86cc98c1fbf6d0e0257212cc5ddc1de3a35ab31dc1a30d68bf6208abdf6d -0xdd28aef5793a2df75108a67f3d3f723676a10baba690090d3c53cbfb2eb4d097 -0xfeea4a5b711c5b760288a3fc95e6893e31b436e815b8be99dbfd6d0cfb12794b -0x9641b02d37bc70aa212d007660160ea5c1bb0e550f3d66fcfeef6315468eb629 -0x03a48cb265c420cd3a4fe7750a0f9fcddc6ed46ac8b5565ffedb1746b93b9301 -0x32cf292a7962cfd5aa296ac4050bcf2df6104e93411162b141c2da011f62cf51 -0x1faf71d0d14a5a3a64d326e5968dfc71ddf2416943a83dacce9129961efc342c -0x8340fc76b8c2ceb31a7497fdbba09a5b114b02abb75c4f17845f780e154436e3 -0x23fee6edefd8df05f9291a787092a8084f3259ee53f3b4c7fce77f2b4d61f7f4 -0xc053871e50aafda7c3297135a6b07176534a970ef4a9059f672d038277268900 -0x1750b59f72bff6329b4101d31a94834c0894913918823da4299ce54bc07f23c2 -0xf2017c8fc891ef509558eb09042631fd7ab77be60c474fc42b5de007db6f1de1 -0x2a6d67fbda2c82d7aa986ebfe48791a54068039d0c27ff7fea911dede4cbb134 -0x13970caff3137da86bcf7d813f21e61cae1c97b52bc36755dd8da30370edc1f6 -0x737dc463870ef1603c240fe7d7e04a64cbb68647999931ad1501b09c1c37c423 -0x42b158b01c0e53c5722fcb9ef4cecc2d9b4d27f85e4a2e0e6919912da24026c7 -0xe2f75a6123934e49c3d37024f9486e4d2bd34e8b7abb18020a69d3c564f7d039 -0x8ddd2319ee914179b0d29bcf4c0ccfbacd6c7fb20a040afb6f25e8bfe1b879d9 -0xa8e2e46903fdcd6494be7c357894c38813eb8f62be84701f029fc37f7de34699 -0xda2f5e12afb97b562d7c68ef3217d7aa5504c4abaedff76ac578912578b9652c -0x76798fab990aa435ccbbfb648a2e8c030a1a4da1d576b4070eba49880d6933ae -0xa992e32aaa2de9bb5dbd186104c8bd72d1a1ae58e38da2e955c5767314d84e15 -0xd6ab0f6ed9e18b41604f2141569db55ae63e78e101e97e1132400067438dc8ea -0x8cc42b70bd02215a3b70a03ad21f8dc03d846a369c9173b4bf0e6da27dd77016 -0xe034166644a3c0c7234283b804e52ed74b901991871b0aa336f3de12dab4ec20 -0x7e8d8521efdad80b7b2daaa24576ebc36407595fa1b2e227ea8b7b2903552045 -0x283ffd8fe5565036e30afc432054896ad1bf8f5e7dd7c218165c61fc36953b31 -0x23b8c599dc1ab3b1d85ac11f32cad1003bf7da8f3fbece5aeb30fedb8d23d032 -0xbdaca36e67d2d7d0f23d2f7543358aeab1a9aa29b9360d0251eb5dacf0b489fe -0x7f523a87c02bf1adf79f0e9fad9e0d7d87a0bcc87ebd694a54649b07b90886f0 -0xe301e8880add21d5053d0093abf3417ec2be34e43c7fe757e5a5ea398df851cc -0xbf6baf1a311861aab87826f8b9ac3e16400b7a3d8be807d3cc87b855502f3ef9 -0xe26363baf2c14e34ed70de7bf68b7794d022d42367b2e81cfaeee3208419119e -0x2adee32965b5ccad7bcc9d34b6108db4f1dd8a85a2de90499e2ea72e717c8dfc -0x956816d76a158ff74040c7cd46770392ec350e11d782b465954c1c078cef3bac -0x768f98fa9e77f8fbda5a99316240aff06a2504e0654fdf44483bb94a50693399 -0x2c5ca19e5d1d8c69a54201444fde27b8f9db59c5af1b2876a0507ec90a18d9dc -0x3c6dbc1a73ff0e4ba4e41bb7feb6f911713e07bf31eee3ebd9e2ede2823c01a8 -0xd0aa407273cc1e3c1373e92bee97dac57f79f20c73b1fdbec857e68659b34fb5 -0x22a16fd84ca9d63c3478ef104ab9e622a578e316cb55d39d2c93d9fa7f216e32 -0xc82696557516995c4460d85fccf34801c8506e3e964eabb3dcf6b821f33f74ab -0x3b6de43984ef358502dac7730b241d8980eeaea3f1be334ce8227445ceb1441b -0x500f51875d5a536731419e5e22bd94a47b0a2bf5571941a235f0a22a99658856 -0x778a377c3794fe30d640a59eb316ca64f21d72ca3ed51e01133d3046b749b141 -0x4c2cdb06b6d3d5edd718f152033ca657e5b805660fc0384677af69ed81408d14 -0x259a28e38807cac4d7bf2f98507ec9e96249f6f9b6402b3b99e65600f2c281b2 -0xab25f1da0f96c054b4ed9db236673e22843a65a3a0b317baf6bb8683a6adcf01 -0xb6c04520271b8d281135906291b4d071ce4898df7cf216b65c63ed5c1e786e07 -0x399f8f5a3114996fbeda07a1996931f0990b4c1ad74c42aadf015c300d6ee997 -0x66d655e84ff1a618e553d1451b7db4251113dc3f1532154242a4d9a4b514348b -0xf2c040f22aac1973c93806c16505f3151a9075f053c770cd9a367eb7ca97a1ed -0xd4993e6c4472de86da6ee8638f29a4d9a37af6dd86397b9572929d582349fd49 -0x2b261f7e910f48bfc6e455f8e4daa15cf7954a6e74698883d810185d8971a2ef -0xa6afe9630f2804c55b48f199c26689039f712e5aa09ea33a4f6439caae60699c -0x1c657d8d51e1894eaaf1e817a959f3adf3b031701ade9d740c613af4ed74bbb4 -0x222777f16539f17743ea178187a8388de1a602480b2eba31f4d2c64e2178690e -0x80c1bfadbda134c9ace86ba1c71f83721db99e37a1ddc9f5e08a2ed120e9db81 -0x97e65364554fee53f84a3ad99ad8f56013dc3d0e0134c4f2ba718bf2b6e3aeeb -0x135c2978b70fba193e51207a507737113d43549019ee37277cd4ecf0add32761 -0x88e6bb1a993bb4dcb2c4b183b7406113ab9a0dc37f3ff54ced1aaa401a8074d6 -0x22615320b7dc189cd1f3088707d73ba5db5a8b3f414b08e100fd42a823ba500e -0x4dab3f7a8a8246a043646c4a27e6750e97f58210af39c2a5dffc8f3632937530 -0x8100dfc40ca275c8f93842ddcf67ef062648010c250390a255bd2d680575ed93 -0xc71b99304ead0dfb359b38385ca01aff66f0e21be74d84a149ec6f20f6a465da -0x029422a349642be0de0612d1e527306a11112589f3e21462579afeec3fc5cf78 -0xee3b915a07582f189f91354abbb3135716da6107fea6396fa41c34eda2ecbb6f -0x9e874725e325feff8a18c1e877260588fe76414120d66ff969d24eead1946e60 -0xe41423e515393488cf6923324efd90178daa4d323517833a1fcf0446e6dfbc67 -0x6c74d50dc79a6b929f3ad161e0f2e860f3e94bc3b77b32411ac374cf2d5db3ff -0x43d63b85295d673135c36ed978f94ae8ea5222d4c509a7a4bf768030cf727b52 -0xa27d98b9555d3b8f756f6e6acaf60bc7081c698897b5d9f18153c3d2c2ca867f -0x0d0372e6c4039223fe2348068080a0244d07a3f6585029f0104050d114f88db7 -0x8227534456d105f842cf25eef6731612f2a6516fe21a9294a58b5d960f6bbf11 -0x22f3e604422149d4713aa7cf26cb632a7c3b1b9ff4e6ad8c5093960e87c18558 -0x3addf9c8a598b00d5cda370607c0cef3054eb739d34f95bb4ba62e8d24c6cb13 -0x963cabdf660bf0a8d67af2772b315d9de52f676613c0f2c5d6c0e9ca398b4c03 -0x46dd1a2f4ebf904ed4e49c14fe6771e76c7f39372859ed2c942ae7952a2e26b3 -0x5633965ccac9982e81abc6d25a5c107890adfa2f451eeaa360887faad8a6de4c -0x6f919bda4fd42364775da9623039de5e317cbcae9f366a3627d0460489543336 -0xed9d39b59f8915e7d286d3f37a3fbf982ee9c08e59604d8e2006121f59ab616d -0xcd9a2776e65bc906018edfe9c9e90abf6d9de7da435a599f7c68c4820b9af7f2 -0xf5948daa3e8bbd079ed7720fbe96cd90ab9dbf0ba0e25ffcea9152a57633a058 -0x7d01920ff568f9b5ad6a437f760e8e003d788efea38eae7c62c89b5fe0aa877f -0xa9ef4b2a1b836534169ea799575aa75bdab04d52f7a7d376cc04baf3a9f7dd7d -0xfddc35a4d9230de88ec0d841e277d43663490ac6714e2f8ae0daaef46bdf1823 -0x231392d8ce691167d32f8ae91e7906b1b69f2cb1ec920f983a22fc6fe077be9b -0x7fc7f876855146df3a03d00748bbc77091838ff20d0e9dcbe310ca5e5cef1477 -0xe80631158afb76da2b3014b2bc82e08eeffd3e5aafe931ca4c0e323454099127 -0x7bb81b9ac633876c5c3eed4e92adb5b4a2444f741fe8bada7736a0841e2263b1 -0x28506bf494f280e0041bbdab49c505ee932d4bca0500651c1286583a55236ec7 -0x74df8f5a6a58074e6313c3ac322fd7af273e59cb0a81340184d342c1a5ab60a0 -0x0c7c50c9ffcc026fbedb446e798a85f6bb38767eb77f4eb24c46159731376aae -0x467446e82db9ae0e92559a2e2b9b03d571f0b2c7136e3b1f5b7744cc0d990122 -0xfef54a41258300484f1e56df55985d1090aa4312fd6473fe6c801f2551bf30c3 -0xd77fc4362f673a1f06f366293b66424b46055f8dd3647ee0a0ec9bb756f562f4 -0x5a4c7a6b26a34aaf8d244769eb7a35b008ff7dd448056fc208d2692f9b6c2d94 -0x726e561faf434e865d1595a031e8b537c3586222ba47bcae4ba7d3634ddcfc01 -0xfc6c97a486f171927e4ee0f38c3fdc96ebc945dc271f7aa52cdc5b3544dbb382 -0x7f44213ad238afb273f70253ded53925c1e85ab85dd007d9b6e1f4167c82adba -0xb8dd2ce91852922659723a96abf63634fb2f63ce61ec2eb0d303e474d54838dd -0x2729926232fccd0751fcf89a3b4c374b11f0741175c94d3caaae95418082b2e1 -0xaaef38664106d734298073df2b7c0d11faa76f93cc6429537df6d04e95100fb5 -0x4080f849c01f69b5ee76bbb4378395e62ba44215c7d188488be4762e1568076b -0x4e0e55fb3626ede1f3b3e86f53aa261d9d219a71295507248e7cbef2d41ebf4d -0x78b84ecd7630b0dd54bd17f43c7598c6449e1d73ce717b6eb38ca61107f00991 -0xac92125c41c7dd1efadeeb5971adb06be5f40aaa492777b05f0f959f8299174b -0x9a1b25c50dd488356eea78f473a5385fe5db8ca2be73150d583e73d2d011afe7 -0x50f16a48601cdb997a0bda5af7414c09e0300de16b84cd0ded6dc9975439d082 -0x9f9b77cbe554a5f13bdd245a655455835c3d1f565c1dbb279615ebea529ce0a7 -0x03f2db86565e967f1d2afbedb70a69de4b3551b6d738e0b3ce1f12f4b19d5731 -0x884aa6edc2e2d585a55ad2992a43b99d1e729d859f20ca137c14c2f2e4edc66b -0xda307ba4f1d376578a1eba92145483497d16301fb51f073a2c1fbb21d8a990bc -0xc8ba6a884e9d9f69544dc49f3730ca5ba138ce1772eb427c675163a247fef8e3 -0xcf34ff8478fc99b695246337b20c3e5e3c937bedd857f83fd4c73dc558030d6d -0x54728a2ddf2911df420520d19c8ec76303d5b57090ab8346e05f0f7213aeae65 -0xc3eff20f787f865f97f5e1897d31d96d8902f66cf7e89272ebb45b8df61f3450 -0x3165b5a87f011cadc49f34fc0a55dae5bd902f2aee4d4a18fdf90f698fe13fdb -0x79e1eefa23cfbd684a35780f529d9c29528fa962e761c67c11b81104e9ba2f93 -0x0cb26841682e27493cdce27ca674b0c2020ec46b36c9671bf355b6b80979601e -0x80052d8b1b118914e24b3bd5d4d45f7dc9174ef8a447e69826b22a0c05a41f49 -0x35fdbcb3798c559fe798a2d9786e7f78b7bd29971b2ade8ae7209ca11c454267 -0x0c666aad9923c206e0e9165644091cf0b58d7251c1aedf711651713d81b58aee -0x0eb41bde5f7a5da6776901f044cc35e0468e47023618c7fd30e646cf2f79042f -0x48ddf43e42b0ffb4b7e170cdadcff309dbbaf9be39e6235bc6fa038efaede391 -0xca8975d08f51ec28356435f505b8315b5913870dd68266719d5432fb53a9fcc9 -0x75deac5e91d152dae9b0ecc26270c6767a5b1794fdaf40e54b22e1f802852c37 -0x17bcda53fcea62774e5c964f0c322558fd789bad6c67b26147146415a83d3846 -0x3fbda455c8f51af493449e8d46197d89be4383a59c97f7fe12c49f7109ae23e6 -0xd9447730cecfbac50758fd3fc3890488133442df3db35a14cdc2e63ac82762ac -0xef158bfe1170918c12854fa15f05a4f6096cf0b3056c7804a567350385be9902 -0x50c4f1b0be38262f4fa187cde08d56cc4ac644f58de3d305299082b3c1125916 -0x42ade53bf47ebb804634c95e74f0b8ccb4bb1c3e1230c2bef5132db1e7ac23a8 -0x1a4e7e1609ecf422200d94f4b2356c202157dddf0df517139461fc54092a336c -0x7625a22c809ba78ce6158a9eb878f214cc27b7e39f828acd9a493614445ee368 -0x8b0ecaa9d9a32eda1ac3e7776c55bf85b31f1ae5a0bc225a805a0bd2dde29d8f -0x340cb2e40ae0dc47d39a1fd891ea6f4528bc09c2a02308633d4412df72637340 -0xa9ea3fc4f5e8228fe33132244978ef6e89dffcdf10af44596f0c15ca64759c62 -0xfa6616530b2990cb86423497bf6b1d415cec5b8e1fad540993f0f7260d8754d4 -0x1b9cdd51101465bf51a22b401a0d001995eabc35bc4bf7e7ba193293a100702a -0x7712fb96e40d8829e5c111a7b73a418fe119d85c057c7e370a138687800ba63d -0xc0ab328f54f052d717891e759bb8866b14b48bd774e3797025ad7cdf43105075 -0xa8f8c381d8a4a6622f9f3577ed16068479102c6c0c85769d8180cb9377ca0a64 -0xc6a49ea4f2a99fd2e016a149132b0e90c454ed96653675cf462f1d962d186d6f -0x033c05d1498962bc9e22ebc2334391488355d439a6ec038feebc4f64c4d16dcc -0x4aa8719f4d2a8cbb1249ef24261324289d136cec8d3f466bb212f8da381a968a -0x8734724a23519e24f1b93534e76639c0305c046c287c2e69f341bdc9c42e557e -0x7fb8f3a9f7f988d968be452472798baf6a2363ef93e896c47f93651bbeb707b0 -0x3c9308e0c6f1905375168f801e72baad1138afec4f389d97b4a7c5020ceed0a5 -0x4395edad45851f7b6f973dfbe11022125ed4308a314ec910efe394533288cb7f -0xc35dcc8e5714dbde4684946d6900cd645861b6a2a2e4c207f45ce1d120a67526 -0x14ad8d0572c2ba745df3a82a7b14d37716b2e1b144cdb3b98e4d351ce5965389 -0xf436b79f4f393bbf235522c50614face234e700006c2427c5d64267b554f7964 -0x97f3bd4feb9faef2d5f05d9611665a3551e4d07c8cd2b9ea7cfb0afc3e71f2f5 -0x0a12b3e7cbba7ec3bab4da91ae672263fc803d23f02af9b6621fdfe630938ea9 -0x7d18f0d0381e4d3e59dcb75a71de8418ec9e986bcb2e5eec66c8bfe30840d32a -0x9ea45b84b9e03a3f4c13dc72aef86cca2fe1de4099f90eea2b3299fa5532fca8 -0x61ec51f429617e5e97563083f47adbc6f397d4afc3a78d07c1894b3fd5feb6aa -0x2ba73758802c2c27ce7ed67d96611e28c84d7cd7e38e206f010bcaf5b8b85043 -0x503d65b37a63ab7ec77dc32db3488820aa1c7b1b484a8f1ec250624713ba49cc -0xd1cb6a906c6b21b4ef7d5e11f5526326fe985eaa12714acb5de5832577bbaeff -0xaacfaf5b74ddd10f7e790de17e7dad2b265c603851a57a977695468303ce90fe -0xe764714903667434e8654290e105ca1443ffda80f828d16d1351e0002e0411aa -0x57f0319ebb412203daf514141ac3b1496a558c43351e18dcc32f42bb1614f60e -0xaf759c5099ddb6eddf7c08b8d4b1e39facfd4309e1fd1aee4a9ca2efc0ac9b59 -0x71868754f89421a8dc200b4f0c4cd0f581c800daf255447ddd81be911a008cc8 -0x6d214de1344a955c44d9216adb3c38a644264638f1e7693d95170bd430b2ef50 -0x54015951a471f8b90fb49f98b37f69f8a38c109c7a6ff067717914f29d94e192 -0x6577ae13547822cb72b35ca511c44751f1d1ff86b851808ca39cd0e617d83c19 -0x9b892d64c46beeb4923bdec9cfc3385e3270d520014a374819dae78b6c3aa932 -0xe83ffd4b9c9d088b6c9bd8e28bf6d0cee97172fc4a21572b23ca4847a7749c8a -0x5e1e0d383cb03011e1e35e4117a610617a38e6def6da78e3afc553deeeec8b23 -0x5bd17411805e53d53cc32c3d7496f0e6454e3c409b5811cf60a8ac1f8579fb4c -0xe47fe772177a9a7b2af88f7a49ac648f04763a367c527e9ee5a32933e1cdf6bb -0x06708c02e2bdd0bf202fbbecfa3b40f1dc59f6dd57fec49b962097942d292ec8 -0x05b4f2f546437a214f3afb2db96b5a92b8093fac52f8bca3658b3f6e9902b3fc -0x31a59b072e1de2196a7674567cfb54c7d70462b7dec36d8534970f1156580fec -0x03c735a085ff2490fb9f51dc8ff9c894d5eb4d8ca92c83994e53c48249e16f15 -0x81a8b8b80b121765532d78166ebd69ae31d7fd5ade1426875c758385cf311f32 -0xb7093df7f00c5584d5261006102175a09b7b40077644dd8c146b1cd9e93ae7ac -0xe870e46b4c2be4c5b9145f0b318c7dbb83e7e2446c9ae1e41534eb9e76de4173 -0x71da0ce6559daa191223c88ee69118f835cd1fc8735ad63e90d861119e5d608a -0xe603fb4d7de9330409b395ae67fb7b5057f864793b86775b3907b79702c99d9b -0x9dee11ab43ab79ccdd68c980ef2b603784de9aa65aaf3738bf25fe86641ad3bb -0x7b03777067b5502ce83f996cf1cb83209b1679d635e0e397aa0d725fdc0af23d -0xfe6fcdfec15cc7b4fc4bd6a13339b605288e3072bdf93f4d9acedfed2c16c8fa -0x50601eef0ff55f1ba59a3f574a244730c0c4bbd6c9865f869df2b47238d634e8 -0x38f8bf68edaa194c233103499b2214156d8680e6f8d5aba985da640cdfdacd51 -0xf62caa43cef640d6a12fc42f02765c4cb274b2eb6a257bdc76baae2a83ef4f41 -0xd742af4c3e78c0ebb680594cd23657aa9a0d46d349eb6b52ba24c3f6f94c4b28 -0x37bb5e58a2636275177668488c8362d659c80e9dc727e08211563bd5d05a01eb -0xb5a5cf38456177eb166e19f5948fd78be8a71ac36eb5cf8e3259484d69808f60 -0xef025156e8fe857bbbeb305c413ac8559e5defc534c022354959b39538522ba6 -0x39ccb8ea76cad328169830b70067a5e0098732b6882a217625413c3cb50bab3d -0x6ca5d52077a28a858f1630aff6a9cad233a3b3ce69caa8e90ee11f75c8c4ea11 -0x9403d1f282a7e7927e76980cf964bdd9f534ebcf6e28250caf16367944a1ad9d -0x576886f84b729572c4494a502d2034a5bcd21bbf8f03bddb1a1f7079afc957d4 -0xa915c1c76bb08eb2cc12a672b8698db87c7b8de5b4e2409286c1ec81740c02f4 -0x154c158722cf45d480f1b39c86beb13bd5cc12fe8701ef496b46fa66b103a5cd -0x02f6196cf5684ae44b016b2432d8e1cc81170b667405c994cf51cc9735707faa -0xbe2fd901560e325b4e5d8e7e769c55147014639ed4e9e409130a94d2e0fe2e3e -0x659839f5de76a5269d704c85a744928e6ff9638421bda5579df63e00eb9d445c -0x446fc4021b08af90b7cae61aedaee43679ffe6cdc44243f47e30b69f4066e9ba -0xd7c540be171367ade87e38e2aa67b093695a0a8f2fbe6134adfde831ed80bf72 -0x5049cd86afeed514a5bdf3362a99003210f8ff3b82bae688be312b2b6204f187 -0x31aa9b8740b13b1efbfb666c03f36999a8992a749ebd5643d82688d8cba4e79f -0x0c0e94fb8fb2a10784026094620f59eae9b91546292019460deebc26be5cd2a4 -0x6661103b5d55f5f34e1a287fade497555926894e2f738b284c84f1195d361eb0 -0xa05af8a82831406a83a43e75fb241b197ecb402938dcdb728e4a4c6666740375 -0xf274e70ed460c38863af5f3b50621a25153858afa4cd84cd1a7fbbdd4cc173cc -0x17825d8a5562e11a9332b4967784c515d4a13dfb0e9b824c233f3e74fa25b0d6 -0x7a223e797b6d7cf7466027531a05baf39e691b2f6733e10ee082b1214f0f82b5 -0xc97fb96ac3b736669423ae0294f9ecd046bae6177e635b34a77c6896b44ea7bd -0x3a16b3f9c8c394be99d3e091983a7f9a77ea5a1dfac6a00cb185d6c429a3076b -0x23c5a838cfd38ac210efd7a4cb5b7e388c42858266d8af86003c9d45921a53cd -0x02ad697fa18ac913003de8e0a84a71546b38fd5f59a40ce067aa505d2ac30803 -0x3c9b6a79cdb81e4518720a5af8a4718708a6cfd180c84ee317c43a4cea229b2b -0x1afb9e444d400fd46f82a2ffe789c0f36543eefdab5c5c3db302996374507d17 -0x3304e4b11f23b7e1270f50f6938a59e5644eaff0675e3926c4407ecc44e0a756 -0xa3a83cf68086c1a0e50d690e0410df7ec46fc2d5d3fd68135b3f82a22083c621 -0xaf7f5097ef5a6e76dd4eb09b60049c33a8b1f5f7a1177801e5d2854bc4b686a5 -0x7a3c6b8cf9f19b3850487fb49bc52afcb6a7f7fce45604c51952cac854a88c72 -0x038382ce38440ff53815b166eff5fee1a8a75a5e48de791907196c374115a65d -0x7640e91bd3514f23aee2efe07828806c6e4a55ff65cc5fcb72c6b0c0fab9c429 -0xeebf8d3e5e651215ab1a66333e59490c3f217f7d2a925e8392d65e3950159709 -0x16f59806f87ea12ccd5303fed670d0b091f95559c2c5344cb8689e103a2fdc9c -0xfbcf34c7470224c0fa4615467514d4074be44c02a9f8b2f59385e1d80d1a94fb -0xb631769ef3709c96e008b5043d38c5d03fc9cee315d2e2dbe4f0c73d0ba13cbb -0x80e302bd9c6336adaf20e1c85deafcd9669173a7fe972c561416d123fe282c36 -0xcb89cc54b9f47c2dc883da85a45eadbd13a2c1ab9448c44ab006bda48c4e05dc -0x931b035eb42dec66008ac6a6406eeba262ec5eb6e70ec81bf85465fb490cf719 -0xe50037ca7b64cabcf641d42eac824c84bc544b115ba29e3ffc5196c59f9481dc -0x480558fb464f51d226e0a0400013d90988eeb4d5185a32a06b959d7794c651da -0xa03021ff9302d43d0e35efa2a07ec1c0b8b110f394314a0a169096b6767d3053 -0x29e7c83a8907096b55fb5bc5118b7ba695557a6c95a039459bde9ef08762da62 -0x45110c41ac804fabf6dd5f2a9bea03e20e6823e4a782aa609214fe89f690fbef -0x99bbd1102070c96e9f93e3eb0d0efcd33a7484a14da775b9fdd42d7eb603cdbe -0x886544371f4a0ef3861cb711196816102c4b034c9952d95e612a89d4b0d28bca -0x984372044c5f54a090ebea13369129c7015c462a26d508c136589d2d787b121a -0xd851f877612894b4ccb1a2eb36fe026570de707b4095e91b083da68017130647 -0x0bcdae5e9a25202ae8cc726ad32905367523bee30d62062122fe8ee9c68b4499 -0x4a248b089b52a5cb700086254098cadcf49a69b463f42e0772b2efaaae05a110 -0x14473d279061e3c4640d4b5d68a524544dfb008bd6cef8a02281679eddc31aa8 -0xdd446effe1ca4e0ac34a42884c8469c90237c12c53f1477b32511b9dba29226e -0x20a6a4da928aaeff2b564e25a32f7f9769d4b456534af11ee6865425592a9433 -0xb28ac02dba35c92c630dd16c227a82cbcd5257c850a9732e867d81be30ba0a33 -0x15e55ee6589b95027079b48b5e40f50e8ef343697efd60f267d6888dae68f989 -0xdc98dd1b123e5df8e87d5cf1b74fee60e682b7bae2472a1ddd62fb80139b3640 -0x4b49e759ef01a11c313257381ddcac77ef7d684860376a44f059709fb888a235 -0xee9e2a49bac233cb966307361ddbbaef9010861a72f178d46252792eae9af09c -0x1104c512b82e9fe04380ea6b6006010f845c55e46da87e17494f6b88a2035356 -0x53cfed936480b9e19deee1657bc540b2be77159c1cc31787190767df4b306eb4 -0x238be3b162684a00a738a34cd027ece2a09afddbc33cb8659f27b26d4547b421 -0x82693682baf3693c3943c429d6b36727a6d63f41e846fa26275bf1d8dda17702 -0x6b2f2c6079ffa12f02aae81b9cf2ad3025c74137f33f609bc43e217f0f8467ee -0x1e7eb89ca9cffa8127675c45289f12a5678c89f083ff2e6ff0b48e9f79419549 -0xa6b0ae04f7a9c1b2e438d13545d751c4a92bc227512ef260fd58ea9b737bd483 -0x91bfcb75ac8c04f4ecd3ba656634f1d5e1e46f40c88485fca528beb0799c2847 -0xd6770f9f8bd01ff562a581b468f616511e29058e396a8126140436237a58db10 -0x85a7b6fb59b3635e97b35a3cb187862146af2ea0828cd4f36e3f73e25c022b98 -0xc2208ec79eb87d5f9d0dd0d0bdc02ee94e3e44f5e5cb8ef7841f7b35ab86573f -0x0c2982abb16966f92f3bd075b5cc3911f8d1820bd4b6a70e663bc2da2aa84c61 -0x950ab1b55d6ee3b102948072670837ba422f5722f819fa372d48a5f1e0af1f78 -0x64302087ffa6a7b26b3d959281fb53afa3b194935e14b26813adf81a3a675862 -0x48028b08725dca3839ff8450c68055aa3de119844e25207c5ee89fb95817b9e7 -0x83c8c2918ad8a2b9d9a25eb16e0e20b99d797b3834c24a0c7efd62be67c1d51a -0xc597a6203f64d13178b796329f5930c151d377a318efb6dfd0449eca0f265523 -0x6757ccc657a7dee59729243f65fb74b20be905498cf91a9c6bd4feb75c13aa82 -0x32f968df42149cd3169b0b5e7ece5cc8f9e539716e3124c7daf50007467e2a83 -0xfc8a9b11c5cc9e03a724bbdb6e70911e58a357b1d0d72dd74b47de821064b127 -0x7a1382f1a74296b48d79671cfe0d68559819c08b924e66093c6f2804f9c298d1 -0xb97c3512e302f69907d9658b54a85059c087616e3a786733e9ee2c121eef17c5 -0x538eb28f9191caf629065b7a32cd4440b415750f111cb450270b57c710f79c2c -0xd32e80d6e7d88e1dcebbc261b8212b800ecbcf9a145231f253cc5a7eef850a2c -0x511f156e4b5dfb9c4ace8a578af6e458435afeaef0dd005b5c9ca896e65fba71 -0x3b05224c9b3be04ab3d8a3abb4a1ca101a0b25bc0dcdb3d396516ede8faa1b95 -0xc2eeb3cd4d0127eb4a636ab4ac8a336010850294e38f8938b805548c3ce7223b -0x40398a9c9213240d06aa743a2108a6f217be0cc781c044585e85300fc3042d24 -0x4216cc043fdac77fd6a4cc3b326e6d89c6dbea4b542bad862a76fa46b3ab2c30 -0xbff83a57c611f8c0f2eb64682b201abdf494fc1c186d730ee294ec0dc42a744f -0x85d8bda3eba61fad63febfcbe3ae8f3617831158de04392b5f265624bc6dec4e -0x5120db3e0a21d2f39ba5e803bf78fd1f400121a0908e988cf793f9fedd109563 -0x24239d1be13ca23364a91bc00358599904c7da900eda2c54480e3e44aa390cc3 -0xa36a43c55bbccd047d88b3b814391db4894f77c03a25bac9aad8d9f73698aac5 -0xdc9bf222fc978295198107bfd2da0a5640fa70ce3d3c244f2ac36aff0a26fcc7 -0xdffcc6e5365bf89f4c576c40ee06165594dcc53c47024b5d542c583632584cda -0x46eb570a126e5c73451205571f914f9e32c780c35a8562abe5ba69013f7235b0 -0xd90fef5e97bd9cca546fbcbf5eaccdc3ca0eae61e32ae688850c50ed81801f1f -0x3db9fd51ef63c17d727fb7a24b4ec7bbcc5ff86be7e5171729923e95f1afe2e9 -0x81583b316e69c6577581b9eefd1fc88b5310bb2919c685b536e6ecefc11b612c -0x2410fdf9d609dba3e0f4220eda7c2752a9f6574dbc9c59bca0d16b6ef47944d3 -0x555f60b7d6cfb872392741812a8150fc6a25862a4dc564ed00d444bb81a88c41 -0x8fc235b90cd8aa6d248edfb2a492d36f90a272621bfdd9d9e1feae63ac0fcbd8 -0x2ee48375d0050d4cc7e578b0733f8d0e5337d35136b7a32d0b30a92b112310b6 -0xaf7f0a19a97f800baf895493c6946e63e333709ae49b244a2f10c31433932553 -0x18db2d31b9cd4de828b3fd98fa4ed3f49ad527d454b4d9d411e1e33be9a6f426 -0x85a11d51bcb8db98ec68db5ac55b44b69d78f19b1fe23673ca715728044558a6 -0xd09c2b6476a634ef5f0f4a1359d8d950a497b92c57ca14ede802ae63af66b2f7 -0x9f9458e518756b075e60d3f9ff10d3c610f9f104ff04f95824d8d16f92268ebf -0x22e507163f2f529f1a162a1a922dab5fa2d277f593d381b7fb6ecc890ee994aa -0xbe7165e9c84589fc58987be7ef5afd6e8ff656d01d55a06db52effd3d604bf6b -0xaa86b8474262a0a1b3fd84f8cb33d101f601f57af7579ea1108080343796835f -0xbbca2dba71b8553bdeef265cc12d600d389aa37fb865f16b88ea04af1f113d78 -0xd794c82cf8d24ce84742de7fc2ac363367d4e59850d08e5791af2efe0867e06f -0xc95d9bd0a1476ff9830e076e9abb30a83cbcc38791240c1e9a2dc265a421dcd7 -0x7b005d12ba309ce7b6af16bbbb8db4995de01d15ab02197f629f7dcf0b2873ff -0x4e6f4247ae87c977db98d0272d48fce38b6b1875f5b0463a319576e225cf9692 -0x5858df6c4f6f7fcfa1e68b62d74b98731b95af8db521150e5d458156060a6c83 -0xb6f98621edea59fe696ad471842de03c6c4c0f65946777484839305d174b6eec -0xa83081e4a1181808484022f7e974a481f9884b61792fbf0b010f62c3fb17f4b9 -0x42e675bb7fa55ffa2bfa083f51f5fc949cd37a27b36d770e3f1905e72ff9b7ec -0x2b3768c81473a6ac84dd88c36203405e49f5909d4d740b40c721d09a01086f50 -0x9b7931330979d78936f1886ffb511b5fcae6d507e3d066b162f22a0e89e4bc1d -0x1b1e79dc4c97e90eb7c4b1c6d1dcab919262ffe40864693ddd91d454c711fe2f -0x07aded69ee7b4ef61e8345bf3840dd33a7fced702d6cc1bc31d3120c6f9ef851 -0x055d4661af3033c92bb012fd52b771f7e292e0c5957d02fbc699b45fb3da5294 -0x7f315ca0637b2a9010a632dc836d05412c5d8c5ddc4f8c386a1b3516feb8ace5 -0xed14965bd67604a20b0716d3d574c748d76bd87e38387f74736ecce33d48b27a -0x79224f8d8ab72e4fe475cae7b2cb91ff851992ef6c3ef81df58bfb0533fd46c7 -0x7ecfaff00a1b657be63e8bed1a9afb11ab640477821552bd836b117bb8432b55 -0xdecc83b06259fcb26de9d233d12bbaf3f6a4025a0d247ea78315aa5205f22551 -0x89f86ffdf2f83018500d08b769447f435d586c3d78bd324be1750c8d7bc19c2d -0x61f533d5d79eea1eb8c76de86778265a0a5274b571ee5b3cb176699289ba9626 -0xaca69ed70522f6350f1dba3ba43977e9b8ac3d97a8faa99fc5507ce2fbb641ae -0xb6fb5b2a3ed7d968a0c8b0454fd0f543c581f8cd86aff9b80a3ac167b1fc6750 -0x6d911b2514aa8ec6a00ce45754fb939dbc85ea80dc22af7b22d0d09a5c7db1c9 -0x70f2fa3897729d00fb7c4284ee796f99b249413bd631176a84ed440396fb1a5a -0x5d176142567e09d50c32c1f932cb6877ce46a2e530d37c347809137839032dad -0x37e78b696db2b92d91a9e05affe8d29cb37a1c3ce8ba9d2c94ab049c8fc68ba7 -0xa5cc965eed575854fa4ef9c87a6898e32b41a0cb1c7eeaf30beb68d48fb7517c -0x51fe0da88b1328d7b025cbb9deb7dd350251c1dee8909a439030db0783eb3433 -0x35e61f1b482eead83761d624af6badc000bbc1e9542d1ba0f3038f6fbe1cea61 -0x230b9c82f6928fa26bae1c97e4abe19e9327a543efa758b60732eb333fe96d3a -0xf76fa2c64d53bc72a3205172c149bab81e27c5435b91b76a12acbfe3a3fa479f -0xaa23c08e730e260435e15c9b5a0489378ebfd0a6999ad7014d65ee22321c5191 -0x9acf01c7a8ecf8d757557f8b19331a685165a9ca9c0ab9e7a1b0a24aef4dd513 -0xf290e274a1d1dd2895cef32b02cbe1964e441427b0bce712046727ae7cef7cc5 -0x58eccf900acf7d2c6daef0b535404afb72046c04d03869661bd00cb5c2c476b4 -0x01f6aae4c461b37d7c7bbe4b5107859c33f62eed66655e2c33bb3b76073c0257 -0x376fdf7abe609d3aedf64784e42dbb25c0cc39bd9b713cccdff97efe5bdb2897 -0x3c1a67dd817f2532468802766bbe1ff26b710155b4e0e0863694e19b22a8acc6 -0xe3007fce7c3186d67856c2441d6f16e6c752de68148a25f4dca747168fead1ca -0xf89f494164f67a65acbd0f49a34187f5c988248fccec8f22375c9e5148ee01e4 -0x6e491e8d2829b0f6f52eeca85de4d6186270416718f2c58cc1342bb049845599 -0x4d358c843cebd396d7ddd756e3c856b72194b434ca8549b481884083085e58e1 -0x17f530b90654c2bdd1d425ca5c9f68a2bae6afa5844f7ff16ae77a2b521a1261 -0x4d1e7262acb26a6832aeb6c9f5c16f2d2bd21bbc2b39f5e24796f40b50790291 -0x4c4252bb8200f43291915d8957eb2cf1d399c05ce69b341554659e3a6f8384b0 -0x4ab29ad7d6ca64b570a125f8e0c64f33f2b97dfd3e066e330ccf1875e630c264 -0xc06d7b7f34576edd5aa0f35cf5ea7c9ff0975f252770529248c46408188856d8 -0xf6f257c16faca710771704be59efc6dd24fb5e52987de4d276faf057701b8011 -0xba838b87089a814330ae7ac0be820070bfed5b87442c04814171d1e3e8cfef82 -0xc4e4055c110992ec9e2d708437d260ae7107d9c79822d06c3ce5537e458a8fc6 -0x03db1f0c37f9592e304fd5e921affd9b4b0eca42db31e5c7e45768cf8e65292e -0x55e3c79daa3d19a756a1bab4f0b247b505bcddd933ba6d17d3add92c435c5ff9 -0xe8652f55fe994a8b94a431eb24036ca4f7d568c701326cf4f733ffe45593eeda -0xd7266293296332b57d0036a0557a29d0b0cbbeae8b9c4fe362222a23b64c339f -0x6477cd286031caf7a896a775e1ff4b70e97d096836be93ca90140148508a7c88 -0x13b9386b5b5c39cff33faf741b6ad19ebe503dc6bcd3f59eef7840dde896170f -0x613f2f1f9765eca68d16354b499105368059ed5ad421be7763d2fa8b9e8cae29 -0x918b30fc2fb0f614b24f4f3810746c3082b77d9ee96ab7c864e0e301dbf3d34f -0x8a4f47cbb6af0ca55a9f6922d33525a88a6db063c3def12167f95306d46c9c45 -0x2f1c1bc5921946af47e529e16a3195da8ea6f61898bb525fcd5ce9b9d78c7d23 -0x28a07b388f2ed086ab10af00c0374124d33bcaa0b596e5e1c592b97a3f99b98a -0x473cdc37825339da7bb63d5e6fbcfb49500abf2d471ed62a4c769088f660e9cd -0x033b1969ea06571cc8dce1363c29b050bf9af7b28ff67c3b6dd1950f902e4f40 -0xd56664462b12f140d19b84273ee83839e781ffeb1809f5ddf664524c040dc6b6 -0x3d70780d813614ecaf35ae95bb7832394d1b954786d1b605b0e172f92feef0d0 -0x2bea779568278384ca6f5bce7b01a5cb3dc26124c1bc57cd6077241d95995637 -0x6a08142454d64323e6647d5376f38b1b450dc60e180c4ba68f8bb637a0faf015 -0x7ea78e27a7db658199ec352fd5b4897fc8bc68804c491f7f1d85601251caf543 -0xa7d6c75246b2a73c9cc8770432cb408cf2a2627e8e3bc583adefdbde2fcaad16 -0xa0c5aab0dc169237b5436ffe58d2a57bfb27b057bcd1b1ea32f8ad84ef5a8c9b -0xd98eff7f9e15c625b59d6bae94aba6be6c3dbaa5f17ceb54d8a9cb5952aacbec -0xa0de0ede10b0469f7307fb776229dfd50188cd7cb44e42157f888b1308663fe6 -0xccfcd294f943eb4de73faa2a343de0f5d2d77868329ab15bbae9127912c274ff -0xe76e2f14dd3bc09c05f61e64d02c3f7e139dd5435ddbc8e88e20c407c5b07f1c -0x9314f6221e92893ea1e55052477b777b2561a6f5f0d1ebaf531c4ec3115bb230 -0x52e064fe25ad1644ede2c4230f3ec908270dd8c73686505a080b7afe8de14fd3 -0xa8cae1df89bd23ff5c9a46f784c51d1d68ef9ae0bd9056a12539388fc29711eb -0x0048d0af291bb44f77bf8c28244e912a00f84163d3294cbeb941159aaba41ede -0xb1917e28fe2c78935fea9d18ed9502d4e7d6422f23dbbd65fec0f14c2a60f1c6 -0xfceb346e72b25d1fde2127a96554c7e63e737749ded8e92f348fd2372288c770 -0x531722663df128b9b1f6740dec7436111e5c284ba5dcb1945cc5a38c3973ebe2 -0x1656e5345cd1a73af6dac9750017edd36176b7053415426c7acffe658cdb1b74 -0x81c7f0566d4539be3aa2aee6ad20dd0fb2572d53935c2786cb05c9b670996ef7 -0xd8bb2402dae26117725a1f2656ad1f2df9060a32485baaf7ed3ea510bba49b6b -0x2579363290f02629392e7d7f51b7235150cceaa506056e49109c8021aec0a416 -0x9364cc35e3e7983f26b1a90609718d10986cacc4cad39d7ee3b5781c3f554b0e -0x72c59ec3c015243bca4daea50f11b9c8054285d2e9aa4bdb9da1917e68aa01b1 -0x0af3985f0066d3f9071311bf37317dfe5301c2f2142e28d0fa1e404ec7b9c765 -0x2cc5fc40afd22b6754c7dae515ad140179dc99bb050fc289248346a725766033 -0x18c0eca690440daff6a27834e7345993cadb63a5de2dcbcc950cd05c72bbc203 -0xa6b6154f09a443237f7e9adb9cc89a88c48af8e3027637abbebb1304efdc4907 -0xa5ae752571312e93e30273f508dba5f9d21b6c30c8105023a4855f661ab96f43 -0xd188c62b57cfa2e0d6f062be17053ca667fd6164674228221687d9186c4fe8f1 -0x0fa17087e1a8b7e4eb35c5624d4a68198202baee4ae1a475b9825deec13b6827 -0x5aaf90999e5a5b86ee78a81e52b56827c3863f79c63a0a503f0f7f1ae085d52a -0xea29d0de855fe950074e60e6edfe955075b2212e7902e667d933f5c8cde357a4 -0x76975b2ef95707dafd238636dfe5571bda57543af2a53962e97152cb39e619ad -0xbe0f91b126b0e86b32c3e1520d20a0636149fa1d927da392780a552e23ea1220 -0x22a0cd94ba25a313e25a92f15c083b41a802002a5a76fd7c3bc3dc1db2b6a0da -0xa06fe85e83794bdc88f9ca30bdd0bccaa93978b10acbbd1a91a333128345ea00 -0x9624ac483d29dbbb8b22b2e10a309d08160b01bae1bd60a6a637367324ef4309 -0x607bb717f6c1ad5675acd51ef91f77ba82ec1d746548bf69f40a18d07954b754 -0xd6b44e3db911f071f130a7b1d448c074ad810252b316f257cfb9a5141271e0fa -0xb09ee966df80d92c5165509953ae43337c39c6d4d691b11647bda0daa7fcc73f -0x95c8f6d66832e22eae3f585b40be6488fbbc5fb3ca2507857c9841e4467c9286 -0x5bd8467c3575895c76aaabf6c4cb192e91363b79d09762a00074179ac3e90831 -0x30e406fecfa541d662dfc1d6ed64577d46f9ffbba14770c949dde2b8c69e3b64 -0x83d0d1033e05fb872df041a5d344345bec14d3beabb011a1834a7c647c0d263d -0x334b6fd65d6e245ba80fcfbed09086a4ac31167c6aa96e9496882cb185503bd8 -0xcb73b19ca15bcea43134b7857d5081d6e7ba13094ff197c12cc3416be650c515 -0x07460d8344b9fae6528722ff9954f891b87d503a30ff9cc0c85ee77e4b0eee59 -0x5c5e46c009b7326a4061b26e1c79975b0e18ba91de9e15502319a43510fcc847 -0x4eb0bf27c8d7afd4c7fadfb5befaacf517b6e087f5e5b23ec314b61908c42ae9 -0x9223ea869cb123da1a6d423fdd75d9f0619e2b9357b939b3f733cd75688eb49e -0x7fd2b212bc7416e2040314eca9ca2b63e94fef1e75333b4d5f598e54078f4074 -0x0cae8e93f460a011b803ca5cc70de29f0dc96631ed2e2a321e7a0bf4681e8a37 -0xdfc2f572cf5c4dbe93e5b8544733a2b7eea577a896867bb0c10788a388163952 -0x1c233fcdb5c1c7e1e58311ff8df6848ca84837530ffeec343319575c595c4632 -0x7d30f7b60c60eb81f3159ad2aa8aeaca426156c2dd8be348f91b8e76ee054e3e -0xf582fa71c4cd7b46710a5c7b5c23165e2b2bf01855ea7b7eb90cdb0f95445c79 -0xbab4e0c249e0dcd91579af8f3a4c08e0df9db83ea46ba1e4a0602ec5d593e2cc -0xaf82c8ec2bdf5e2730c89228935fe2da25b8f6703f5e77079192ff0c8f93efcc -0x2392276935389eafae7c1ad14c20d0099aa33c62f6ac0c30c0d3b96830dda3d5 -0xefd97b4589ddc0031170d5ac789e95a3bf48aa8e71c16a33496e3ea8d457e58e -0xb241c55185b5db03a1adf7e98826ef7fbc6b7a1d1882dc4072735cd3e52c35c3 -0x4b13910e26b530b0a6706498cdbf1caa095c7c70a2d6178a1401e7e91d53494a -0x5640ff3a29f7383dc4ab6ca87343709b3d056581eba5a1a2d94b7bc867579522 -0x10c472d83989f0154dea3d6b6c7249e1e83c62b921ea076a3164d96ef24c9180 -0xbc4ab816a6dabeaeb4708c2050e5756ae7c936d0ac43188b8bc1637fdcd0fd98 -0xbca05b4e6eb2cdf0458b7d7eb2a80a0eaf270e14d9c1743938ded97c8b60cbff -0x3f08521d9111a31c1597030c8a5b72914445edffda34ee21da691b4b8259ddb9 -0x4d880b3b7eb18d59df5016538f269221289e102ffae66c6b48962a20fbeafff1 -0x4ef7c5d415bdf6363458f7fcd6c5c63a6b69f0de40a415faeb001b974407fc5f -0x127a10c5099923705b1bc1a19102fb3fa2dbdea063312c22ab3dd8605c868eea -0xeaadb106d68e93df76fc89f73fbc07c41ddcbb615f3914e218e3f4901a47d40f -0xe7cb6abb6fa109a71833c6f15aa3e3c2cbecc91379d892ce8bfa20160efbbcbf -0x4c551ef47843c39a46e493e1483ce4d0ab0aa768386d7897f024a32a0b17faba -0x23cdbc1e494728669b4b47500487af10aa7fc885a81c4a70d47bc54cccb0e38e -0x2c2033a2e0ff905588f2fd0d0e5461bd2484e0c32ac33c2533731aa122c55f78 -0x23004b85d8821352c3713359b60ae96b3c6aad57534c1427bb254582fad37325 -0x8a75233fa7c62d6337dfd5bb93430ab902366f6b551f5f1bdda5d0c44a61b262 -0x37ec47a0d3f5168f2c4b9abdb2f0c08bc15d8a45cada4b3b1407c764ec24a1a4 -0xb3db7b8bd5ec8a1124b04b844a800b8c82bf8c3a8ad82399fff2241c227b9003 -0xdec55e35ccefe3eeac2a51fd1d9fe88fcabaa07d45643b2209212d134631320f -0x9e7d74084b70eb3efa3971a8a717d4a4ab419708e9a827f7d7c6304201e6c7da -0x098f8d26ec5eecf7f6b83fe2c7b932d424a8073decb94e805b9dc9610fd12ac7 -0x487aed60584b7820512bf55abbf49e15628b79d6c1d5d09c8c382e6e41f66590 -0x76dfc7d3f848e55948aecf1d313b7414d6cc044e05de5af7e926dd135f200b5f -0x2651abbea6763392c0d5a4d53d231ff2607509b504531c856136797656c3e7e3 -0x08959aad5f7489fb5eca383abdfd7a0fdcdfbb3109a8d5de0fc8c9fcc73d604e -0x10273404ec9fbbf704fa2987f1edff5f87a60a7e98ff4d72ba8e6258f467d482 -0x799d6e5cb12a6bf2d77c23444a18e9aa5f3a6c05356d5fb290a802bf57989e62 -0xfba318784ba1a5eed4a5c1fe755ab5633249e00e9f0e09449db8c4671450f8df -0xef1df641e102bc41892fb67b6558b32cd66e9eb4aa64d31d1671ff7299d36ec6 -0x9e836e167a91187d70735c27283c484002cbc9768388b837eb48a33fb730719e -0xb4d376d1ec26efe3714b95689789270545a61494ada9be7f1cd6b2c3ff8e34f8 -0xb9a1d90b66f7c1ec2ae7b220d76d1ba79a4b5c4d61658b7ba5571d2c52823e55 -0x1d9c7abe833527ebcf4a585c05d7de61efbeeee6055101136c664589dd0e61fa -0xddc4608f421c7154e0c3a13fc64d8a1a026a8d51d630ebe1bc1b2c547c5ed315 -0x98109c664d73afad6ee52b5857cd17de027873506ff1c70eaa204ec8b725d220 -0xfef488d02d71f0c6ecd986720632d4c2495f3b4705b8b6e2ab98c2432819ce9d -0x0bc8a166a957a758fd16049ae55f0ec7b4467da3e61d3ec34b8467de08313e39 -0x41d88d8043d0998e2eae6883ce95082b8714d331a347cab4929c1604719153ea -0x4de344a02f05c60cdaaef6ec020bc83b589548acde86a521c01b50f2884566fb -0x296b53ee26fb624c700abdc55bf0aec3b2daa72a363f00880be8a68006ef5c2b -0x0ac7d50b319bb8736d8b849f32a1b2767ccd3089d774eb802a85369e36bbd639 -0x630912451d15114eec0717eb972b9fc85f33e8b69b5ef467f6ca69b1bad1bcbe -0xf06e0bf0d3b61fbddbb76dca79bd175e7ca9e1af02b9d3897887233f03d286a4 -0xc5f5f4774356837e4c29e5e3a275dcb28f9e04c2f8c634cd6a32781548b9389a -0x57b1f64c53d6566847b1784e0fb3bc7fcaa8d6ecccf59b39ad8bd2ce43778d71 -0x6ba0edf0b01da0948afde77e8b7eb55bd5b08df832fe60bf5f8abf3700062350 -0xd3e306f6d40aef3ac5bc10e002ce752559ee01f06cb8868f65ec1c6f51cf7ce1 -0x1fda3c0b600130b54854c89e5f96e1acc44a1b25ea91947c45c398aa2b5dfa9a -0xdb76231e885c3b22178e07cd6bf3121ebd6cb7049c5f3fc10422c3ef35dce506 -0x5049a3ed8b45c77a221b52b593970588b13658cb8f6cf4967db943ee988f2c7f -0x36776b5e2b7bd86a9d06084e9e1d9335308b8f63b840b361e5257a147f660880 -0xb2a474726e262f207a9fbb60d88b0681b0504051c6743803dfd11dc006a554fc -0x21a5df30db0ada00793dac320e97c73a3a5f86cb6b505a3a14729c8417fb14cc -0x9ebf7f41298e09ed8c12fbe34b8ceb163b6e4acafb71b164fed070a6f9191d0d -0xdf5590c446c0a0ebc72e2e7dcc4ae07cf591e86d55a24833d10b5eb35e48e372 -0xe163afa9d27d9c53db6199d209ef5f5ad2882831d51e922522af1b44b06c0e61 -0xa3d48c69d36f369c5029251ac5c1b7bf3e56ce67d3af65d030c9edc7b1f3fee3 -0x113b0de0cf9f63d9b4dd4bbc995ad3525a3ddb06dcbc63b9b4c0c4dd7e059e0a -0xe0b3aee955ac0a3205c82d0fb4be6e49ea149769dad88f1e3883c4a46ef25779 -0x51b94f220ccbeda86b68fb7bb3dcdd28db01ddea7c813a37097c27f1d38c5f71 -0x9d71a714f3b382bd0c3d8cc4be18df988a626452225f43f280c2693e855e5d6f -0x8919c9b7251fd10f4c880f8066719e71249a165426d67f84a76383cd822e7a81 -0x47d1a0e9dd8e4a1e888a41af1d9a412592ee85a317f155774d92147eb4e7d006 -0xba3b693e04b40341c3e9596fd05582727e4cbcefead0beef7172b301c6f7742c -0x3ecbe272d32c9e0d5e5f5758b3182676d30a2b6b416b1ec73ad8c6923b988c31 -0x660539420c465ed26b66a2523857f6da40d572fb178ad481556e9d4c7546c799 -0x4c6525f32b05ee737146e7f41d21801e603d1e72f5e24aa08daefaee348c24d9 -0x390061ff429de54a7c100deaa4039ddc449bd65dc8dca385476f1810f1978245 -0x6aba9969bff4da5a9306c76d1a5ed2894c8267d690c14e5aff9f6a5f8fca78df -0x371dfa5d09c65697d7e7bf889819500cea41800e6ff00f82f8b68bdcfb3d1d3f -0xe75b30772811067814f39eea4292930cbbad63ef301bb79fe63b17e4b2345d85 -0x47b1ba6271f2a84bf9d4c53f7abdbb522cfc2047e140a6ee4552225dd0e01b65 -0x3e1baeea708b9f91659991415bd571f126af155ef084010832efcf509191aca2 -0xdc467198d309aa90738b3d61183e598fed070877555cac5c5177aea4cbde130a -0x900e7076ff065e38db30a8d2b3e0fbf38b55c95ad988bbef6ca4bc8b55cb0010 -0xba0364d28197f9dce2a4693f1e2bae756345bfbe47aa397ef6ffc06d6747772b -0xf443e9b127096cadbc1dd3741586df13d1bb88c92fd4f166056b8537064977e7 -0x8f4289167f8b11a0fc07200652c99d4e8d45844b9a22ffa558b63d8a18cbdd18 -0xb050b4cb20796e87f7c5d4e311cd08e9d76fa8bde64f9a0e4bb7d6a59b5b708e -0x2c3919320cfa80ba274ff5600ad70158554783d33ada88cb63080d92871a4228 -0x3bea2a60a823cf7ca7ad3ae7431810db7353fda121b6901d430b63bd4e986586 -0xb27f8c99d0716261308bd85c4c11443fccc0454e7af169fd36ca035bf7f5a810 -0x4f2538f94696721074f98a49bb34d802fa253b2735eb4dd2af1062a36b357be3 -0xf35aea186b012ed05b836ee688a7584253f4c74b4baf65aa3a5b9cc657a1a6a2 -0xaaa47c37b22b64017b484d0ddd9eda22a48cd590b4a83d87879d1d262437f0cd -0x13d0a18347db13ec2d3d0eb9ebab081f9898c93c68189dc5cd6376f9cd2732ec -0xf04e399cb55799c8c94334858777800f0ed00fa3c865264e83849479ebc5b594 -0x8db9e1f8326e81ed693505047d6bd63e400c18a5c7b18694ac2e60898f5df0fb -0x26d94f2759546603b5d31dc97d61a9f11ac6ec9f4dc4788894ca7292522d0e5c -0x18107d09efe33e0c8b2d8fa75d2b5f86fb24fcc5fac3af9e7578e3972f671388 -0x47226325c390c17d3f2c878831f7424b227f30051ad112f3167dc92f2a4b56d3 -0xba86a0ea840384c5a5b210470f3061c5069083c97e2be9af3d4ddeba9f598631 -0x030deb46f4559ff363f7118b208675b67dc9356d4c84beca0ddafd88256cd54e -0x68e6ccb24351a75e15541a54fdcd5dbd14efa00cac278806acc270c1011dd0c3 -0xc5e3139ebcb6b9379758acb7f13ea191cf5dac94a9c3c61d12abcf5dc306b3a4 -0x8bcdbbcd76f656f611f08d44407801cbe9d5385dfc343fe40ac09a5af0acc272 -0x07956ed3b1fa6189b95e4ee0ac1f5e85270f69c17bfe7ee0296dc7dea6f4a7ed -0x98b564f8aa37d491ff78f10bd24f9d730d1ed06c94547d8397379f344f5ac39b -0x65175793ee4a23b8d1c872f89235fc19dbb679a0121728bd4a4356c0f045bafc -0x566f6c810c8cc9b6a17c9947a51d57e28b92c01685443361fad04c626b7e5092 -0x4797af317be833da99190b8898e77c862b2a4e3e8b8ea600006280430a4ec832 -0x0430a1e961108c522f273069de097e0d7de4f8517d69cb71c933176b7196b65d -0xcb39ec3d2d468c3573f48756e4a042beea91bdad671a275109a3d98cac84b5f2 -0xb6971b314f676f80cee7e104aaeeda9cbece69e3d7fb44da21d17948960fe1fb -0x3d5e45108da4b2703167b5bd8e10fdacff5d5b655be03d6dca197501237f2f1e -0xda0b77b977890391eea257f4c5013f2a1089264eb60b1db1f8fb3a02faab9e57 -0x808b4c39c06142e514a7c944f2ce501079266d0be3baa9956aeb0897aeff50c5 -0x66df9f97e37c82a12d8ef69e8a08905af99ca9491a35496fe1563a31e9333116 -0xec0b8121c6321cd4f3ac45847819267f1ba6fe4470918e4e8e577ec3320451dd -0x89b24089062a6e087516d8aac1cfa9cb4cf965d1f200cd8828529a165d990af2 -0xb35781e3142b593ab9ce2b9d9f9f479b708a3baac642880d368348bdf5119408 -0x70ed7beaa529aaac594215a8bdaabae7a113ff0c675b023d401a09fb5261a024 -0x2df9515f9c3406b13182bc7de8a8612efbd5127493aabd5677df3e82ad3537b6 -0xc9da581e4e3ac73c816f95eaf3a5019458231224c43ece78cc4e17f25d2f2507 -0xe6cb3ecfaa426d6920d543538ba9b3adbb5ade7312a981c4334414baf865f3cb -0xf73dfe7edf097d5eab228027cccbdff6992a921375be8c06107a182e90b42531 -0x1d33f5422478b937b044eb4aa0ed3d5234ece6e58f549e95e06912f2b9d84a27 -0x55afb573f075608142bfe5835c4b9804ba2e4aa521ce80af0c9c3931c9b676ce -0xfe4a18feb814da5e89011d1386ba6f9bd5489fbae8da498b8a91dc43100c1301 -0x3e9e7757bd2b73e64cb2a385d5411dc2019f2aba972bee9489d38aa4ac9d2fef -0x0e325dfa19e47f81194ff3f5853a3cf0fe98c39efb0146dd111a723336522ba5 -0xae592d901553ba0d8a66fdc949a96346fb91746425f6feeda89118ae911fd9e8 -0x1e0c0556cd66edc71580720b01d76b5c959213521afa437a3c971b2156406f88 -0xa0057db0e7ce510254899da3972dba95b8f4cd421f1e1976d7c0e7e952579785 -0x4df1871bcf038d0c2c6b2ceeaafe849ce851146109bee5a6317a60894db4858d -0xefce002e92ab400807adc5b34a30e1e48bd94b096ae57aa97b71895c985bf18b -0x138888b4f2be7ced16e7aeaecc8de46e6197537571bb0ca4c7513d5f7660b7f6 -0xe4ffe29b8d3d45cec3ccf363b44c873b8587db5e4bf83e5a46ec161cf3595b8a -0xca088867ff5c70b20daf7a599132432ad1c4a4a7e2192b4ef9d10414d2f70aaa -0x37df1997a13fdad1355e355523704bd141718c1241d88b9f600a0c5240a68bb1 -0x1230b6d971634311829159fb143a9b1b61083ddfc2d7f625457e5d82c27701cf -0xe7bdd7ca2d46dfff6e9322315c726eb5d3639cb5e206869d20cef79c8a93ef39 -0x8e223a22e42273d566075af8d7dbe287dc2d4cb4a411530e335a6d77f3779fe4 -0x14c00cfe6017e5c19554443bc02eab31ca2e389e2ffffbcaedf924157f57eb8c -0x814acdebaa7967c29e22bc2bb80894e6f2de2d83289ca8dadb8485a2675098ce -0xc06c584d1ef3d255ae37ddffbdacd5d0723ed49407fd164082edbcbe7a862922 -0xa2bdd4181dd2b00a4cdc3f5fe83d10960c4318a9d3ea7dfbe02406804aa06fb9 -0xe21650a37ba01cd6d336b5d1c2de744247ce480c3f6b9928183bccc254ec5d4e -0xd9a9ca0c34324970d273722cf7a47b8fde2d4672807a36bc581eb475cd774940 -0x29e59557754f7f5092797be427caf739aa25917e0f422b66bcc88c59884c5325 -0xdbb842334cd98c1d01a7844e20e0ac49b64e985fa48f0665138d39e0680b32ea -0x2bc995b2d480077794a91f15d27dce5504340a435e50bcafee0506d6d84d4ed2 -0x8b433df2775a8602680e656a1a30776c1e799ed1cae5b3a448288e3abe20dcc5 -0x8a6a062aa886f210a5a41ffdd859b73156ec60154353476ad3eecfc24f92c189 -0x6861dea2658168b6d48e70029a497e8dbcec710e015d5f9c2804df5e303f5ad6 -0x80fb7bc450771606338806b888d9ccf57207a237603f3a2ac8d6909a2d8d2ff4 -0x7700b39041d4b4f52190bd2b8f4827d644b6a31982ac95324c0602ef06655c20 -0xc8c5736dad0230b69c9027bb7a5b6b5687fe266f1ddbf5423d337d7c454933c0 -0x7f28c73957014d1c6b85791bd441437bc500e9885005ca7fc44bbf988aa71c70 -0x72c98ae4f4be7e91b2c8cdf5b0e3552ebba27c1d4c6a93c3f30dad9d03777924 -0xcd8f48ca9ad4883a2628d72b5a6307c18924e20566495491701589971995127f -0x00a223b0e6bda3cccf284c0a90b3dafc3899122f8b308f4569930d358a537949 -0xa3145e452ca4df5360b3d9f38396b219b24c86fe9e62b1e70b2af5fbee47b447 -0x40b9518be23e71bd384e2f015fb710d6208fd78f2cfae67f4859c6846e8bc228 -0xc995af05dee0c3ac0222d2598a11d9d15323c7358b57d3887885cc63aa34549e -0x001365f84e20681dfa17dff60e640f04065b9e9babb9cca4bbdf789498b22c10 -0x8ea2c16737f640bf0c33a23a16ee4c574f13d34503a848e0d55755967530e335 -0x6880c09cd9e5a3b6a5db07f3f4a98cda911609c0e0914225c8203ce974be8ec0 -0x6c1876256cb0a0867b42792af11b64f9ae64ad23f7f6fc3e76437039b7c7ed3d -0xbde786c85b11fa88f8dd5a7500b7604987f82fd1912d29468888abd3da06cb59 -0x24c24895077ba9dc1f0eda39d03a3c5fb09af2c1f511c5d83c59e4c4a0e2841c -0xb81987414d03b37ba4e9013a6ded9db629361857066e69fe5efcc2d9987de75d -0x3d99fc1397e9cfa8220aa2adaf03379dd5f048311af8c1fe9117a8b980af45ad -0x0a30ac8acc56f4dce83173c7a75d8fbe38c7b3c48625f9960e88cbfc66d9d9dc -0x516290251b1a4c37a37092b3ddfe96ed4a1c36b3b8c9c6fc364566181f6133d0 -0xad4b5cd935885db475f0fce32e501a5605029b1743ba7c45415f2d7d1d081c71 -0x9daaaee483ab24dbc7248dee87ff8c7e58093241244a5a498f8856392fbbfbda -0x86d6d6fd66a999233775ab9396e12796e8dc36ad35e2021d3b1a94ad7d309da2 -0x7b12f78015396589ab86359ffa5aed903a43c3d44aa929957df10aeb3dd444f0 -0x038ecb0fa69b2f4f897517ba1c928d597e564b3e5ddaec47c710329ded532218 -0xf789ac04eccd97a604900d4ec53edd642fe8cdbd77828bd550cb6f9548fb3c56 -0x2fbd346cb863d9cb2dfe8d6dfab93431f973d9d390a3b75f1d0f111f4e454d57 -0x1b70f84e22b449855d3db368ee3ac75057112e246852eeecdedd805143700312 -0xc915c8a7e5723e675186c6a389d504e23a1550a66c85096b82cef63af9d9fd36 -0xcf3b059162c7f2e0f065740b8c251859b4444d43d3eabb09b6ed59edeb8a6c80 -0x89f16eb841d72c85ef48941e78d0ee3000b3713f232f30589837e1bab0703be2 -0x6e321532445f67fe1402f130ff286d1fa916d2a12c21aff0c5bce6576ff63aac -0x8f5c8be880b822656de9a224e3215dc603e4c754f6f29b9071f6d747e88a17aa -0x888aeb6c12c108d0d7b7d7beaba6b45afd1dd8c8507b4ba5b363794821d673e0 -0xbf084cdac1fd74ab32ece38ca4031beac593703f511f13ebdd363d35bb928ccc -0x6bc2d0b84c3e7a333d1fcd17f5de9017e6b16d9093b97ac0f071fb3d7ab319f8 -0x6383c37b7635f9ed6b47b85f2a0a496e4940f52181bff7b9b1120aadf12910e5 -0x7334e09e6851de81dd88d2fff54c7733f2c2ac837b95b56dff1e20cce1f373fd -0x38904ca1815e5c2e8f9d038220449fdfbfb86e6d2315edad07ce54ad3e8f0762 -0x9f5033f82fe4e34eb8e28f029daa9cfff463f439ecfce997d66baa628d662132 -0x54054ec0ec7967beb4f835e0c9864eecaa435953f53405e71153e74e88c37342 -0xc5d60ac089b6c7a2b2b1b593267afd60a1424dcf929a56772fd88b7b568c35d8 -0x4fb63a23378d9fe3d9828591bfe007c9c171770e9a295e4e3c986e12fe06e539 -0x11ff9acbd865cd70d9f8caed83ec8c317d4178621db0f1f4fd888e84da35b91c -0xa78f7fb760cc3d7280605da98bd3de687a46af0aca075e4899bad1f93d5a0d39 -0x4df6035f6f37aaa2ccf1e031678fd0048732ee5362a93a9e95f8f7ed61e2e5b6 -0x8aea2af115314f63dfb3f60c81566423abd28085aa0b4f55a74c7d9f517200f7 -0x789316b77f86a71b20960382e76aa7ffe625b344417c2763f646462f0df6dce5 -0x98554a828ff3855585ea2fbc7228f9392f150bdb124e21afa56019604924d086 -0xf9747ce1eedb7e887e1bcee3e782bc04a5a935304a17d5445fbce45b507cde71 -0x8fdfbcb5584208ad63d304e78fbf85bd66f43b421495477558dd77d9b2552446 -0x9ec60bb50cc787cfb0ece9a37198aeea15513c8c08b3864e3990d0e5e71d7cbd -0x9027c1d79d3a55ad75ad2f09a0ea099283156d8db76e95188d284a8186172781 -0x5a59b0e3d69457cf0f1c1cb5625709818baae32f041b40fc983765a53b81cef1 -0x5784919fe913090c8c3f6a09c86e01d9fa9e7b90af1bbec82f2f71fd9111ae4d -0x0e3ba0126c265af6153c973ad777f151c0be090fe5c1597912a6419ce8c399e6 -0xe145f9497d7e956c84758f7f84aeb96c88b02bf78e7e732d7371a56d8380c406 -0x6287095ed83bb97803119cdc4a55c1620ee3e8dcca5c5abec47b34fe52fbf4bb -0xec51724d8ad4f1e771a19f310417019ee1f6953f887c1ed859262ed410aa8804 -0x04a99eca5857571a92317d86445a6cf3a8962e89007ec4ce96be6f535136683d -0xa6326596989d1ea5687ae706126a40939f298ba1a00b78b595bb679602435b19 -0x4dbbbe6b3e8eee300a455f86cd5f54d0d9bced16b383bffe29c8a6218e31667e -0x454f8b9ac109e919072625153c4516f7c9edf56d60d801fd7203d7a6a4f1354f -0xe301e3e6966497be94077cdf779fd9982ddd1480b2d06f9568fd4686d4245dad -0xf6f97b5e148b93c2a7feb432d4d53677071a61161a3fa0d59e9ddad3da392ce2 -0x5e323c9136d6e3350546e8cbbf2cdbd61cfbde2b4b8218c57acee6a1a53e6a61 -0x1bd9430b5accf2e7e8f59f2b7de543e618339567446edd3d33f9861fb2aa9c68 -0x7fd11306e9ceac9c17f1715ed9f2e23fb3da3667f3200189522ffb87735ad731 -0x7364964096641b80e2ec507cb382697fafd9f27517fc5de2edcca53063f48add -0x539ac782b9d9ceba07eee6770a2df808a01125636afd9212579b6123ec914d23 -0x81ce132a773035fad5dda6b9bb159a121187320b2f2a7f56bf33ff6c3421cb9b -0x5e157bdab966e27b8fe3ef51cb2bd8162de0335131835289856668cbab68d3a3 -0x0cf36db27feefcb233ed100b0766a2b7773241c9fa08dbe95adf8bf7cb755638 -0x16f6107f24a6ed1bde379e3ce36ae540d3e6588be58ca6d175077de94b5f81b0 -0x21552024133ceebbe764ccd06326cafaf33a1c760a77d01f6549567d8d4086c3 -0x2c08a0d96ca2cabe9f49b0ea08a4737f12df7169da79dc9b543a2aba8d70ff62 -0x5747f3ce1d265d8d6091a58c6aa57e3e2d6694b75f7a0cd59e1786f8b328fd62 -0x30362bc82044fd3948d4c8fe3e1c7d1e167d2ce8ffbac4ad75dce26242d9d73e -0xe4f3d5e6b432e53accfc0dab16877fbe51571d9bab34493ae3148c7a9c037eae -0x9ffb106f875bd1faa5a351f4e497b2fcc53ccf242ab3e263e80670445385e330 -0x2edfb5731c6e2e0d32b6f8bd8e9e350c00488d754a0c65e5b4826ac33116669b -0x45160fdbd21669b45d32f01ba6e1c09b97056e8a42a6218e2ebcd1c6e4a4b917 -0xd94c2ffebd2d60cf8c52a573498b7707b049d2157a494100feda149fe7b33b47 -0xd8e7c18ede6c921a119907e2577b03dfeca63240d2da5b4c8aeeafb7bf43fb52 -0x81fc980f996cf25af59d17c3692b94d58c69bc233078caec057f231f38d7f8b4 -0xff657589ceda9e15b6794764e63494c978394c61fd231332ceb0b74d66d79ea2 -0xac9d838acf63263b4b64508d2f4b83a52b6e7e9cee1f0b4b8b01a6a012ddf541 -0x74361d819974b2387327ab0c1415ea4814dba3749b6a7bf6ed1cc9d1328a9a81 -0x60a74e363fda2424f3378d072af2ffac0f2d535eed980b313327e524c13041bc -0x5800b8971f1f8ef8c4074dad37dc840b3877f877d5427811bfd2ef90b93283a9 -0xfa10785c094916a4f8c4ab7679b2353548f30f5e5575a0353ea9a7ab4a58343e -0xa2b0e3264eda8c294f6c81057c6cd855fdc5ad894ee178a26129c74ada792ee4 -0x40e2faa41be97c09381dde01f3ca470a0b1e16e374b5b66c239e978ffe3f71f9 -0x9c1a0bdf6d2c744fed9adbb6ca88568bf071d6b2a69f77e76161d6cfc26dcb88 -0x1c85f7f2c9fc9adfec8575c87e199432513d3e4f027a8f62a0b595617b94f005 -0xb13cc257c72e9049fe67be7af1f997079945d80e83b1dedd893f5545ff3145ed -0xfdc2943f173c5ef76ec0d5e505f35f845e404ed9b68f25d7f194d20ac3010f8b -0x79bfa4643d88dce8485fb1e4efe2e8f9d520d7c3047060ea861a906006a8dd7e -0x0e33c4797dbe52ae2369e796288908d854cba4e9fcc48633925204ba44031ee3 -0xc2eb78ed9ad835b85c81d9b4b142054ccd7179e2c962e8dc9af3579d710115a7 -0x4157f03a2e511cd810812ed260c4e3f46afab7f2fb33e2e0d569ca63d9e25c2f -0xb88a3e9dd009d84a73852c12a1f7a8a1a3f1fd080807499dd67a3186abe26d46 -0xca8f471d4626ce3ebf0bafa8e93c6654b751b6c5955b1f76a9c765610b144ba3 -0x8c4d25057e66751bd6f47a4ffb77047f25f0c6b80ab6d084f9de4ef9e12b6e48 -0xfc003f0ae673d8f0a96c5786d68ed4bfc7cff0256c709f10cc97d1e0b94de346 -0x60677e108c66252ed023c7b769eb8bdbba07f3b4702902622c6b554dec2e0821 -0x7d6a392b3250234c02f7872cf4576a2dade1c679372f488d4bcbdea153a7753b -0x3554f70ea70e585ebaea6206eccf4fb28c75f1ea75dab537407b0f5a2e82b34d -0x078bdd4c1946ef5c45807b442d8b37b47b8f09c8dc4d5d3dc3272fc6c3d3de24 -0x99292f2b22c9661c21e448a652aec667be43126385a89a1af192e3da1679659f -0x3c3430878dabb30c34c28832e8a02af137eef7da6a206ac705a5b02aeb415ae8 -0x3555548540c880adb49ad03ef9bacf943cbd424b216b104397d37d11fba1010c -0xc7f84e6341b5528259ae3dbb937455a2db3ab0ad00947bd8fd2ff7eddba700b0 -0xabdbbe82422885075a170e0b7c4ae069bb224c706b598bcb972d142c8da91c8d -0xf8e0cc54be7ee2421678746e6386ce992a8c1993496bfb2661c1e74834d6ed56 -0xdb9047f09f611b8e64cbf3c5a13c154d10d22712255a47d4647f4b1c9f8a8265 -0x8bf34563d807835fb23bb83cf7a2269a75d8418bad399c26985c90829b275d55 -0xd6facdff2596932c837779a0fff567525021cc302840e1cce183407d8a9cfc40 -0x36360d7f7d57556297ae21684034640e1890ec3a4bef2a672d35c19b62d572f4 -0x88504444b2f29e889cf163c31a1780167991a94262e8080e01ee53d296322e12 -0xb4d9fc3b08290d518845787fefb9928d6c2a4b656915f480a2e3ca3aac1f440b -0x4ec2481ae0904146992db0b35d4d769977041a7c5efbef4f4f3c29a45afe6574 -0x81218f26ccdccbf825bc415c5bae4dad3088248d4df2495ee71d27dcab3c6d13 -0x0bcf2e6c3fb81f79388170a6be2cf7557e245604ff3d758954741a2e5f9052dc -0x17b8fe3a8f701380c702fb77620645f478360032d2489e569a0aaeacd25704d9 -0xb1541b5095c5b9065a59cd8a774209d7d458b3f9aab2cce75cf811870c02acbc -0x8b9891e02639200f4ee078412543f8634e45343c2ae80c57abe2314b36ade7fb -0xf066550b9f7ba99b5abe070e0d03f4accdca892785546b3404964052f06e2f00 -0x43fe224eb8f55880af20c0bc470a20f9f5afaa5e779860902dc8a43b0f38ec2b -0xaba5c601c4e998b90a207b563e90f3ab6f937630f8740b1808a6974fbb9537f8 -0xdc4b4f28e796722c6639e14a49f5818a3ca833d185159b8a1c5a41bbfe25e81e -0x4a8176a0b791092d3d746242763ec7e99f56499d4ada50542127f0697f298f91 -0x8138d6e538b5708d826779a5583386b86d32316b9bc9f0e13eae472b57ae13e8 -0xff1e95158386f3837639122cc5826329962cf6d684e5b01a24fcd1e1e2e6f4f0 -0xb189cac4409310b5f825578d95405668e060ccf6252e6e2089a7f4f65dcdbcf4 -0xacffe7898d6685b6f5cf8006116ab4f8aa2af00553bfb6499aaafc5d8f8ecb8f -0x22ec145e4abab662a093a97f84d0cf8001b5ab88d460778900d701dbe39b844e -0xc6e8c5b1de00feced7d326559168d3a4b5dbd3d3f9cde3f71f38d2dfec405e10 -0x1c46e6e6b331f0da2b4e3776fb6bc1555552e736aeafbeffc8c9733e91e17040 -0x576a9bd8eca20fc2019fb2b3e2e952b9925c98be6f68f5f80c5c42869757ca3d -0xc981c6c893c66749fd75996f9cafae519a721297314303614285968be748d87d -0x368162de4e6800bd7ee5db2796b14c65ff822440d57a929af34a04325140d171 -0x83cacc1d07538cba4f7f411d164cda0ce92854675eb9d2be7635b3a2f233f1c9 -0x45b7446e3f80c6811e30580ae7aa97efaae47c6aaca440a796396d4a52eb7708 -0x3eb16caa7ff273439170f81f55478359de5cf3b9f52f0f272ebf257de8fe05ae -0x171328b73f6859957c8df9e1e946233f7358c491f63837d59832ccd6cc319f52 -0xe8eee7e716a9f1f181e8f9296af361b2ac23d42000a58e29a53bdee54bf6c220 -0x3394d315823a92acee27470206926fc052938519e795d9a3b565940cf86822dd -0xcd41a126a70f43a8522cbbf36561d8d2f607d946154a008f00e862da58a73fdd -0xfd9cdd3bfd056443a7177932028d275e41d8bc5260aff22ce140c8bad7bfad17 -0x29e7d175c33d9d069ee8b30e3c129523f03601506a9d441565c901fc13a41220 -0xdfbc687ac6a43f64d91e20dd122aaa5acd87e2a2bf5e73f1f3705117994fe695 -0x6513a5292bce8601e5ca10b90c4fc7de60424f3dfd45e90bb949d79ea611e377 -0x01a552e34d55435fed3f972b10af2ea8490d8c88d881d677a88928b7c6164f91 -0x8b047e63da8504cbaf59bc4115918fcb91d2c22ca85a65a899b0ccffee14d567 -0x7d883d8048e2d4e6f65b7412792b5451cddc99475e23391ed671e957fbb52577 -0x013c32f7ab1156e0a973fdaa0e7b0de9fa8ea186e5504edbcc83b3910caf7ebb -0xd40e39c7d9d5e95b42473710d821e289c79e3a36ce2024647316666de5303b5a -0x155ba8ba61c9d2019e7ab79bc158f998002b9abdbf121da873bf7b0691b4be4e -0x094b11705e285ba9131aae9b715132ab54c25b0e18833bcdf850eedcfd069e79 -0xbc3b4dac96bd997b8159377b6e1a80f105b5f8808048952744bb08084351b113 -0xdd99d80edc575ae162da764748abe6b86df43f1577b33aad39b1512bde7c3510 -0xa44c7062ee735784cf37874b409e6ee2589db0cc17c4921b97fe4a880131cb49 -0xe366d2ead3c6befdd2725de6445ba262a64860dd1021326060d31450f0f1c67d -0x544f87b03b8748313a34097f950873dc6187e269718b104c2b2ddd21681b786a -0xc578212c3196755b0844684485f192d34918f314f0b647c13f9f1b050d24d080 -0xbcd4cb4d13403fbb60896a8fbcf3d6cc680c105c3ab8136b02ac06ce47d7f018 -0x468788a1647c04e61c88e63b332e63f879d2b7215fd961be0316d72fcb575e78 -0x3e829028120474b85795d3395be965b4393440b1eba5fa2d35bdcfa5afecf189 -0x3840b1c9d112e8709e196028c937328f223e747e7bbf620752710254c1abff62 -0xcf0abe4f618417491a3f8f016b8dda74890403b0dd515a828c6c725d03f61935 -0xae45b0365b5ca2339f1c7688c626f06c30fab1137c4679bac596911765c2e3dd -0x93733f7afe4d936c6f2392be84b0c51f654ff2d383fddc1f287ebdada90e84cf -0x523b3c93726421c161b991b979449246c3c60fec109f5a1f4195d512387a7083 -0x40899ed675877ff03fe8ccb3e0de537acca094810e237eb33e2da0033cf71e93 -0xd150ec5c4e65f9d64a0ae8e1a77fc227089d11cf8c615ed502c3d6f6bee06cdb -0xfd1eae41c269604bf5965c9b7ab8a5d0c43365f83745004c70d63a54756fe15b -0x775f419fe776e9308c63bbbba94be8e9755e0082248eb05cf8d4312add368f50 -0x84d3a40177e98a5ca1c388798391a39e70a8f47b84d5b6bb509b7729c5596880 -0x46602a07757ffde907bbab3996c772a10946243eadbe454e23263c6e922119f3 -0xac9174b3eb51c2ebbce9a9a88ce65063584da328bef7c07f53c861d5a70ed3d3 -0xd1dfde97f030c208e0ce8c3f5305b94b3fcbca19b2246b2652f0bf2781b3570f -0x4a87980fec0f35143f2240b06b6cc08941d6bbdc7202a406086ee76d6d726175 -0xfaffa93b0087a24a407e8aaff71e3f856f0c2d3beb05d3ba0003b5cd3e745a6f -0x86d8006f6ee325c4cca2e4badf5d47db1ddfaf4317c021e2e2c0aea2821338eb -0xaa343554f625b7b13355567e8544ec1752b14f6d777ef0969bd8d13bb49c6db8 -0x87fc8f4a7a1ebf7894ef69479e3efef8af1a7fbf9d479dffffc0a8237061e48c -0x47c4865abcdf5a531f7d22c08e705d21ebc94bd4ad4edef984a310ca8b379d30 -0x84eb829d2b98f58cc5c7e8b6796fa4e52c9f649f366dff4b5d28dbebfd4309b4 -0x496910f2b358225abfd3105a853d2c5076dc4f180adf895e75ff5e7c6c2b34ac -0x866fb378e10d831359644b9210e89cabfa92dad54f77bde772484f9fbf374760 -0x77f1b7a6f7bbfd0e99057b8fda249733139bb8a6824db13eda19c4af20c210c1 -0x5f76c669795d84fb1193298dc3f5df560d0fc058e7e802990f5121af7d50aaac -0xd0ee0ee9e7c79f57e7c22f5c5202034125e8ad3ff2cc9e311b8ca1e4f8585397 -0x7d42002cbe8dfe86877e3eabfd6f36a7b57839be045604a98c5a2e7656b31a4f -0x5533b8c9ed1c8ca5f2175376f8c805e2d789ef0ee82d49500aa40f6c3a3de124 -0x46aef4be5b5bb2ce663abc3382dad8a3d50c67a7a14d3eefe887b80b2f322f66 -0x275484be64cba9e2ab94d5e837825ce08ac6464dd809f632ae4a752531b2e65f -0xd3db433aae5bb031327e2103e2730ed163cc74eb7bf1473b3a29190d4862ea1a -0x980c1574a31c02f8baa8e709cadae27733bbae9f2eb48bf42f0da4c1d90aa4f7 -0x10494a2ad0213de9a113c8bd6692cafbb2cc6761493a7e934f3e9de8aa1550c2 -0x77af59a6b256883c0c768d254d62918593d29b04191e174a02adff2dc535fefc -0x7427f46d59bc8e68848166fea9cbb79007671b5dc577b785a5e654909b507819 -0xf2e6366410de701602183b152bd90ea9348a7ef7b3a6accbc8a3c4908b1a5400 -0x96ea12c22b86f8fd02805e328e91ab8731d0f6a5b91e539cbd01342acd70600d -0xbfa3f64f138c99010815286d0f4115f72a39363e0236d067618319c5870d25d6 -0x57ded10013ee4d40d74a6a08fdbde88ce4e62eab96dcce4e799f1bfee96ea118 -0x835a23a673e6d3086d06c91cb0c0fd7c07a60cd16818553cd2172020ef7b1ce0 -0xe91dc79b99da307c28e4ca26e780f26ba31229a49aa3fa80180c57ecc28aa0b2 -0x40b3e89cc71f27dc69597a34273297918c3708408b1fde98dd3487762cb24fee -0x701312900725a563a83bd22ef9df054cf375459c4095d4dafda00f7b5ed7383f -0x15199fd1c12ba2ed72619de7913f22d0079bdec3151f1a8ceeb3a352bece7213 -0x634a61f16fe02657c08a19629e410ce500c20539f85224c75ecbe4fec097728a -0x02fd736311ac15fe5daca285613fd5919cffaf52406cde1bb23b04a50a2d0f48 -0xb1db2eedb5a547a8a3e9171580db89f288aa4e53e91511531b4017eec1f905fd -0x2534d91b6692e2eddfde6463e7655b84240b89c8e9f9b1422f17d29af6866daf -0x0f118b6d244ff12af0b1830131cb0671d27338a007ccefbf4b295949466afb8b -0x359d54e21acbb1f0466a41f914f492c064a808f6a3004127afe2256835a7c6f2 -0xbe2da6ec43594cfdf69554b530770b9d0d7946ba0e0b335ccc0f84c3d37b5ba3 -0x52e6f01336224c92a46d09feff1e1ad6b1d82b8c9abd3d44feb87680199ba15a -0xc84e3bcd4a6dce7f08fe8da4f427762975b6340d204bb9d14f70267551b2c5b0 -0x1b213ce470062ad4482d45db225037964478da1d269b6845cfbef7240b1cf122 -0x4801a48070ead7ac7cd575af3262b1ce63f40d5027b1e82a581ed944b8fef4c5 -0xe5ebf519babedf9ceb9f002fcc55b2b43803ba2f7eb91c04cf4b31b4912659f4 -0x2c9b872ab445627ea91d52261682b10c058bcb0707d1b9136522537ac4203c31 -0xb7f5f061d5acda15d1eca624e6c9a8801f8352b2450a0270e42597d09645f9fa -0x4a19aca12f9ab24277c7b256be790558e38976b88f98219a311ea615fdc9fb44 -0xba36212478409423b84a81abf0315ba8c3e2cdddf5e2ef99bc85c6ef45d3fb35 -0x0ae619d692efcb0e7cd5c6b2565d4ac13ec5657d3329ae7e76e30905bcaafd5c -0x34749aaa67b124a7ef5f1d8fef017cc22f843d15a6b1f2e67d490b48ef8024a1 -0x73be61177e6904df0d8a7c97af47fff54a503809120c97bff603e75be100880c -0x5de2a8c8c0c488ef71be60509e20192ae5444fe549bdeb0c89f23064fa28b5c8 -0x9383ab43e50874c204bc9aa68ee76f1fa4a6ed9b79691f87bf652a87f0f233b3 -0x1694a0dd9d54fe558a44322e4c7c820e2c99371b976736457154ebcf22da7920 -0x04c0d4d55df11f41911d872c743d771fccbbd46e59cc585cd7c077bbf7f47f4e -0x08e920c4c4a04ecb138ccddd8f742f66356fb9eadba32e4967fa4378da60be6f -0x8335a42c5428f53757032954b6fbc39c84b0491be9728d028b2e8a29d1644510 -0x1aa2d6d0e20190b30888fc184776551bf2478a889eada4815d40198bdea2595c -0xebb917019a5d7e37274f3429e5fe01b40f038e51d5d3351bf1ccdaaad7b90645 -0xa3f10510cc0f049cbe7765f4ce0fd1629a550aa3a118f5d1a71a6091bb12031e -0xb583bb4adc616834b45ab762cbd0c84ee11a732ce3c59f3199f9858137b7024b -0xe87b97c44d2506c8651ddc3940aeec2ce11c4b8b95d00fd63982771e6f92fa3f -0xc0d3c368a9d6e0cb91957f02485c0f247027fc2717f2a17828019277f4120e68 -0x6236d620aeea18dff8b678caf1157aa661da7b9a3f8170b75ea43021f2368896 -0x42ddc4134acf8177b2a4b062637e52c4e9bcb1dd6388cc47deb322de233a1275 -0xd31a6d943ddc2845618b85ec1d65b5c358b605dfefc3046b3d576e01d50eb159 -0x7384b50e837fe4190b11a2f24de190da60791c4cf6566b412bd6446b28530e3f -0x527343e45d024b77fe76d32700c42f19ddc8104163001ad265e2ec2996ab7572 -0xebf622514f4d4a66ef9041df450f2220b9b3da6a4d4de356a39c635feb829475 -0x90ae9a4d80764ce20ded5f9266fbe2cce09227664ae77ca676ce168a8fee56c0 -0x44c12a3d59497d2673b8824b99b6c4dcf157fec2fc37cefd24f8b5e50ad5a0ab -0xa1ebb062c7257336cae3be42a8009efe429677c726b3982f91fc5267f02fba5a -0x0f5c7d0c028caaa6e1fab92b836840748bf0c8d578cef94d1c28549cdcc39c66 -0x3a28206ee96ab55da2833f9037c6bce7a859ee1965d2334a5fdde7fe578a7b70 -0x71ef6f1461550e69ab2f68bcf861010ac7eba92549fa0e8dc5d9310a9f907b07 -0x0b5816339bdfdf20b33a29d03185b6275a1df867a3089d79b6719484df034ddb -0xeddace5e830960cce8b38069adf6fb923e6f36d723775108376f7ff538574c7e -0x1d337c4070c241c895fca89446817573652eab367b331b847026fd693ab299f8 -0xd130ec24cc7cf06945cd5bdf875329444254c3289e106b7e26f36ff3a5686703 -0xbbdd85c39cad456e85d242cd4c783cef029ab368c1253d9b243f4173c8c48a8c -0x7157a24f6e1e854dd76306b0bfde4ff5b0b117ab7286143f37c1b3a5a03d622b -0x80f8a605f20c241a26fc8cb8e0a8ad2a099ad403f48e202fcedab0731c5bc2db -0xc63f736931248fb0ca4167d59627d24e93543af1cf080ae6508c7df69905b3bb -0xcc0028bfdaa40631fdd8f99c5a70837a384d84465aa7c62506c23babe051975f -0x787b4391c22aa79e033de6370819272289f36eadf250700f346cb12654b06fcd -0x4b624db383b517270447fdb8a031cf12b5098a970b0889260e1698619c8a9076 -0x9089304644b7172ac1a164fc439de1b9a62a45a8684c1306d36751272bfec6a1 -0x111db77afa08ac3311902ecc2015d00c7593e8d8e0287245845df1183677cc68 -0xdf3bb188b0e9dd348350450c6acce7cc12858e54439ab8f3fca9bf9d1ff11982 -0x8ec4be23ff9e52de30b054ad5254f1a8b2619f274cc9f047465759c002ee0090 -0x0a6d321299bae5bab99918aa631ada636e4dc4aec01de2eef31a0be71e878538 -0xafa64bc038521c378f6cbf5a67aa9d85ec24f8a4fdd0ab41d58ad1a19bb3e764 -0x7d4eee9108b4890653365ca221cfe5a68e95fc2267038990ff0f25d935a8d692 -0x9c4067b20ec173f27cb7c8a18a860ca9ca4a0520625ea9f22e42ab6c912d9682 -0x1f954b0bcc426e93ba416c650d3f9dab2665cc0f68d5af249b2ba9002e1071ad -0xb759c518aa1784dc1662a8f6b8b6a810bb5f566347c4ccb5fccf3b938a45c75d -0x4e568f0f21f5e2d5b84ade6b02b7106b13bb0084373235543bda288963192f5b -0x3eb49e85d1215f9c0bde80249c1c5aa9b4708a81fbb4630a90934f1e9f60b84e -0x821a60a5818a2e724481150746aaf0b30527ca12946b668ba8c514ec37f03907 -0x9ec77b01eec0bac23e8def2ed60e8f75c8b9a16e4d4f6ed1c755c1489e74f022 -0xa1fb9765bf328433361af3967168a775c443dd4a1c4cf2394b1e5d44ddd1a9b1 -0x8f1cb918620ec276401e12e5ee9376f8ee0a8c97c873e67d8b5656bde9f6d81c -0xf901bb4999400230b161d2835539464c7ecc87871bc5ec76fd0ae39a64ddef71 -0x797c70eeec4f184a8ef0ab3c07d84ac7adab5b3bc4a7b7b9f9120a9e7188f4f4 -0x3f19e93ba1ca0a07383e55c2a6d17a7c36f919131757af7b86a40583bbe6ae7c -0x7a622cd8cef713ad8d5011f0096e6e46702d9eaf8e09c906a8dcb179c83588e8 -0xce4f2391dca17dcf4b02f092edcc0ed16236ad797fdd8f45d2692f00628faa6e -0x8e29243ab9447fc5c88f7a5fad71fd52b41de8f949bf2943f0615dc68a0df5a4 -0xd1a83d45838388a255e58b00cc403378eb0e88a7ae08678b53401dac3196cc7d -0x8c2d39279f339ccccaf4e02bca50d6693e07e34711e2cdc1226c97920f032a19 -0x9fe508c6762c7302db1bb5096b51db07d4a7c98cf7a8b73995669e39f0c0617f -0xcba71a33c89bcace8ac7733fcae957336c2fa1c1a2c837bac1655b1ab2d743b8 -0x0a07e39c8d8e4036a672d49e1415184bafb0dfdb4c32bab5e12af59f57de9aa3 -0x75f4cf19de978558cb4435cf6718dc79e47f96d0f8e8187e87121cc490107adb -0xd54f4e387d38571723ffe2352b74cd007e456e5afb6e21f53084d3d7e5774cac -0x36a813a3e8adf837c624b723334c34635e093f3ddf7617f9234db6597281c368 -0x6cc9cd33668cf3024cdfb747fbce2b5d0dae81cbb2634d3068b7d1f70bb3ef7b -0x1e1e06dbdd1c1e4a156c711ba2026957e531993261e45f8a9d281a89082aac6e -0xa5fabca8bbe8249067ec1338b40d5a53b5dd074f2daade5c18bcf8875cc220fb -0xfcbdaf9ef7a8122853f237f030659c0e2fd1d17c81317409cf1b30dd23af3565 -0xe5fad062190bf2a3acffec534cc4d008957b50f8e630cfa837981b5c7031e9d4 -0x2b8aeacd12e11420f075712ed7150c81b33bedf1f006ae3f71d5dc9d7a042325 -0x21dcd489c5118add94fa05068c8769cb07ff089af9525286804189814992f9a7 -0x5886729c166d427e59b715aba1d07dd8c6c272b43be6a914c954a5eb9318d221 -0x0fe7f311713d4cdebbba4106a97e727ff2a7639fb7e97dd41298a96b1190f1bf -0x2be210344f4916a5130e7a034eeed9f57e5c88c080fd86c99c02ee110ee324a5 -0x94e521e3d0ac83d36829592858e94f4d9edba7abc996924efd806432ff8604ef -0xfaa347a3477c3af0578e93350f9c749fec3b18f3db861d8db420e75efc95326d -0x0264bba025d35db4b9c00e2ad1e60ea606a3b30311bafe77c900a877ac0ccb1f -0x42cad312333130ab03580754ce38a4d5a40f562f5cfcff28d43556f203df0fa4 -0xa22e59d445fe4222bc56bde9ce32ce1958ef0533f4aa1ed68b964e36e140deec -0x60a990ac182b9c21a9b85f382228b0be4a1c68e32e7e2c9131bfd573fc41254d -0x959aa4dd6bcda59658531ea71dc0ad05b32526c0e596652060b37b29f2023367 -0xf2da6a4b1ddf383f0fc24256222490706b1c8f3f83394fd20dc12be9b6974c57 -0x2d9fe2af5bda482290e1ed3b62c8b799c34418f80e945432e46f5ddc462c8160 -0x5fa04e9be55f5047950d32f9548682ff122356f5ec9b9b11bb165e7efc11681f -0xb34c4776b61d7540403512ff2e778ef811bbc2b87c3d57d65a81baa25f12d61d -0x109ea154adf6e17942ae3626987db94eaff38c41825af82f81c94c7728a65d15 -0x400ed71251dba216b4c77cf44095d4217b1a6b4b1ea4668a3ab03c3641f11fc3 -0x2fbb1b8677db4063f9444f96cb1d4a0666fd2e7d0861645f8abb2a9a61556fc5 -0x0c8b4371d6c0cb27e030e4e2a1f9eb0bb12062cd02fdbe5b977801eaf32585a4 -0x3b966bd7ae1d8b93d61e0282eb55a49dc7aa8263b9ed2faec4ee7be18be003af -0x590d95f7ce11fa45bf760853d90cd7787ae2d5baa7c92139f2ffad67a6ca74f4 -0xa48ad769128b555470346e6067862740cc0114591ad0d5295266ff777eb28aba -0x37e466605dfa2112e284db386d3c71d3165c5180b6a207a948e1b51d5a198443 -0xd824b6b8595764ca2dead31c6ab6d0777e758a36686f1cfb5d5fef4262c996af -0x66a50dde3e1cdac409ba2c5c93f6f9c2f8798be7ade974e3fe959f6204a98165 -0x0faf5f2bd2bf48111f44c16dd1e4ec262d5de3dfb6139a4b740c8400bcbca1a6 -0xcfaa21ce6648da9dd34e6a7a04f584efeeb4b3a1d04c0b1650a1d62e07db8bae -0xcdbd83965b582e1894108f308896a82c6715ef5bb3ef71eca38fa4b81b250c99 -0xa25cea6a486188bcac5076c131fc2523f59c9e02b2b88054b0828852ec19f493 -0x4838346c9751b636c33d562dfdd809e40db7538e87a4751b650b445b0d220b39 -0x8096ea290ac48a4d089dc36b41070eb06150ad6d705f5c30ae99fdf0a208fc2f -0x49224d061f48b7d1994a6228a31b1a3eb3fa814c49a951b2b7f291ae51a0c5fe -0x3890102531b2dee1b4901aea0eb6795b8709c617b4e6abbc73586b765d1fe0f9 -0xac8d4fe230a0f01e128cd0ffa02036f75a878bd0f289a696c91fe9d14ac5ea8a -0x8c202a6ffb7611a487f3cd0e90ec21531735d1fd2f3c4964e3386adcff3987d5 -0xcace7fdda48100e1bc588b4339914517167fd6d30806c95a1b7187baf39acb0e -0x154205ea998b917b9c31297e3705ff64ceeedfe99692019b238a39556a150e71 -0x04458953855cf8086caf455c0e4a3d4f4aa07fdb42960d5ebb41e93bb87f3f2b -0xc28bcde952b74189371007d82549e89fa072455c6baee66c761c0d841ad11e75 -0x66b860f315fc3f0737dbc1fb8f6067dcfb6fdfefcaa6b4da0f896963fd527488 -0xd9eaa8d6b322c7067d25a7220341bde74186d5a0cb9800df073d3c13531ef0ea -0x670c2e2c195fb4256ddd15d87bba94bd729b5d4966dc02e44d06a4f9ee358476 -0xc3c26f8f9f8975ba4b905ae599f9a222db8919caa9358665d7c5a0dce426345e -0x6f56c55fa7fb489f0aa613ef258f3183f9aeae378ce0ce60578d66c8ebf0b312 -0xd83c0f2c77dc1e9c5833b29cc05b3e7ed9a9dfab74c70fb70cc14d94ca068455 -0xaae82cb89c12dc6253911fb2065e4acb91c23481209cbaeed4975610ab2cd731 -0xf9692e84ece6200f4b884571549a67e449442d828095dc010be76f16f5228de1 -0x2e0b4e7fda9a80a10ba1ae8055535cd6e0325eefe4263de8f8c8125d8097ad65 -0x90094388f4cd717ebab63a52c28ff684198ce75e3661bc8600be997de6414134 -0xc92ace96eb7dda706120356b460f5eeec53f502c7023bf5271c1ca27ff885c5a -0x3ebd1899f58d323130e2bb9ee5f9e21a5786bdfb35aacff28bbf5027925a75f8 -0xcc15f32dfddb4d64aa02ae06ccce55349e1ef759408bf5853128793e6a8ed953 -0x2c35510b50524cbd21bff64323994b2edd03f82aee2139ee05fa8502736f3006 -0xce13182998eb4a92051ef72f31ef29da927a12fb4b9bdf1ae521ef7cc5c436d9 -0x70519222d87c61f2e2d1e64fead628afeba60db56abc5ecc2f9dfd1ab87dd208 -0x1f0b36e6fc5643dd3ab9d945ea81cc64d6f1902f08a5480aabe6ee80d91a4301 -0x29f191066d5d01b1e62c0b8ff554e98be49796b9c64562ae06e27100f3e414fc -0x5535996c78e1de71b7a1642337eb354c1697e9f4985b1ba2d3ffed10567d23de -0xa18fa1a0367ca1b420777ec2f8ceed6e78d2a20a47c12fb64b3406db4984df85 -0x63c8b77bab7cae168fe9d7c3b9291feae7e7a76c9e54a76f5d5e083e325fdd84 -0x6a53732d8fbe7c7f128beaf9ef2c5449cc39902c0ec5720892ffd397cfe5c541 -0x3953315e81518747defb4e5fa6a29d719aea7e095139a2767bdfc25e41fd7c6e -0xf872252058b494cc9c5a9797de5ecb93de24033b68621f3f310d14c661ad2d19 -0x31ef7fe0818f33e9ecbb517873914a5e91865b16c2c0a4c1366a1aa5050edd3d -0x60095a30a54a48bdb47fe7bdba68c93ab1f6871c4ecf78bee815e0e66d92d510 -0x079853f18e76ae27477f1eafe711c024e6104ff473ab6508570ea32c9e5d877b -0xa6647227f51d5e9cd81f9f0c3d85268d886bc4d1d950aaa3eb8f289e36d9e065 -0xa9b06ebb71520ffe8b22aaf64427807817c028bf21735b6f345dcf5e6cf292f8 -0x05766a07b24a56ec403b4f600fafa2913cfcfc8da94934de4688d39468241927 -0xe7984e8addf94ab0fae693ddc40966fbf1beaff8386bd3aac7b5200fb499d2be -0x6c23851aa34fd234f96ebd2961cb9b08a8ef0df6fbc0546f00d398b7eb839516 -0x08be6ba6962e62d030883d9c88ea4a09aecfb2b9298e3f785edf4da5cb0c61d2 -0x4f362fa5a3db3a07666665ed69355e86a4dab1c3802b0b07dfb351c8542c6ed1 -0x363b3c336c9ffe522c335a68e59ffa0a1827426260cafd30ce7839a4f9fd045a -0x7dc542f01dd6bca265d4582b46779a2e1ade98d2b9bdbf9efdc7b2dd894b2a48 -0xa6820f69ee059be380ec544b8d3288e9b0ee960e3b3e92bdf335cc42161108fe -0x8ec76e28c1ea564ceaae954ff51fb3938506ac02ebf2d3ce30f3bd71420f37a1 -0x208f17373f610620db650570d4b52c3ae9d665809149a7ec3311c8fbb40ec943 -0x46e95960172dc0d03817c9d8c78070bc01e42def3fcba6f1317b46433c30f692 -0xeb744f17b391e0cb49d23b3b4993650606e7954ac49b58b645c1ea973b28fe1a -0x06005700b62620705bb5bcbae9b899bd7f017d4190eb7eb4ce23b209bda76a60 -0x181ec31d42d568a7401c0c7441334d4e6e015afd91c518d1a2c705eea1265d58 -0x20af399d294ac6df99a0f5390f9775645459f03a43c25864c7946c878fc87140 -0xc30ff062c3ff6c9d6d22b160f53c411a36ad9ff5611fb819481d87def9473795 -0x343fff7aafeb7cc17ae3f3b58b6a5db27d78b7d414a1a81dfbd548e39716463a -0x18a69f0de2a600a133c474419a0ee585688ceb18bb6d1bb9bd64290b7a98d2cf -0x9960f72aad6171031ad9ac4911c1df751733801bce7b51e24360fc8267363b6a -0x1137910cf49be96bc1f22732060f499e8deb3f10ea9d63accc861943df01d4d2 -0xb581c5f287e7a8a18f5b291de5128c58e1496cb9ca691b847f5e1b7d72d906a6 -0xee03402c94ef245f6fee693c46882c2c73556df9cc9c3738dd80f824b8e56b45 -0xa837af2f26019bbe90eaea086ac8ee3c271bc6387fe41e7382bae476a2451f6b -0x07294992e666ad32a9b5f50bf916d23ce8bcc2225ea1d5a2c5f93cf84a7e92cb -0xcb7839e2133e7594a4d03ac1b1c0d738ec2e03e083de25f7492e8491618bdebb -0x65daf4782561f1200525acf3fafeae7a883fda1b4391b9c045bdcc37dabaf38d -0x09a2613a8a37b98ab22a1b34015440a00bdbc6d84bed8104d254bfbd691c039f -0xab378aa07276e78ab8ea7c6879c4a01f39789ec5e037aa3924b7197e4c650c72 -0x4924171bffd395ae884b2df93c8bb98e4e8ce4b8a89c567f8f192c4e151daf3a -0x798b13b125b4d3935029d54d81ecbe1fceeadcc80bb4fb03c858c0dafff02fc9 -0x7d5eca4d3a4d0863d449d8305aab7b9e4faf920c7708fbc84e936b72eec70f2f -0xaacf5f45556016b05ec9d26cbed62cb6161c6cc19f6cce32dd1d642c9a1c205e -0x78300d9045e8645a32e7442725f1e8d1e933f27d1b36866f3f356171793699ab -0x116a3b02d90355007a70ea8fa42820c9ea7f4e1b75d90dcfda51c38756de5d86 -0x529358f4a2a55281a2627df5f2921327b5f9672b4eb921d71a2b102400c7b37c -0xd93f868d28b0096983ba7df7e768df5301b3177ca50fa1c8a330173dfa2a4d3e -0x75a7b59e452caed35b8662cefae8187aec377da66577280c8346edf78a509131 -0xbe41ef836792174491a6e39f1e28ea852e59c8af1404451c7a817341997d7511 -0xbea8590dd7ac672ff1815f98da3b555a1383df7f245af53fa5fe56a1be74f570 -0xa3b2dd02335c079d6683b60e63df90e8536febbd60556d3cb83cf5a03ee429ee -0x6058378f0bf05dca21c64f77bbaad74ffd429a127e51978f8ffdea0f0ac25745 -0xe38550df0e5c4814539f597c7166cf4aa2f795d08726ad84f6adf9c000b3a728 -0xec6f67ff741d87f87caa9e35ae768e330ff0bda8bda520f659a53b50481df6fe -0x9e048a564f8eb9715bfc7b0f321bf0ccf9b54539a4733cf4241aaa0b3ec4b6f9 -0x646b1f63a1088e49feeb7388f30df7c61321070ad6ce34ec483e06fc3f6fcb0a -0xd83437474ace0b74a01544f8fb4d5a873b280fc1b3f484e5722a07a5c94d67be -0x9e854d77bcb2c66ddf66a69e9b22ed1520da9930a7742bd7ea117dc4341dbddd -0xbacb825297c3171792096fb362cab7875bc9bf4dc230a21098aebe73f4ca7c5a -0x640cf9478ef1a5eb086fb86ace16815364e08e602eec33a670ab04d8a231adde -0x6e7af26c20c5f4607bb51a0f823c931de5e54e573deee7f29b78a14fecd1cbc6 -0x42e987c5def88117b0a76c19ade3fe697565595fe0e8eaa16691985d8e72e65f -0x15c13aa3feb6a0d03b4dc5962cf5f564dd04d4d2b86ac89eb1e1006f2b9eea0b -0xa54c515d0ec3d0d32a98de43b38fabd814970e73bb68d485abc958f73d864bf9 -0xae79016311ee1acb9f8c62527571646b344a3ebeed24370fbb3f37753525054c -0xccd49ccd6d0637ff5017e649c001dd63fd09e8c21d0109a25052d97598a70322 -0xfccf00dbad707d48399ca876014d739a9253f7f0592c6b832923607ff8667b7d -0xb8caae94bbad1fcd8a32cc04f3e44d75ba4e84aef5b735fb79397fc172b7b91b -0x3c2912e029c88d7aba7cb6fde7a3f23a6a8594b101eed61f6b6f82ed6061a5dd -0xe4aa6a2846a6def0be1a7a2ec8d8b3b69837e5f14f5534d97d94f5d671d10ffa -0xe7807b6461f46fa869efe5012a48fa770b570609586496ea14b75f58f7817c4a -0x93b0f3df02525068345c7ec7a18281589d11744ba14d934d59817f65c262e242 -0x3e62330e3a1dd0488669b5da44fe1e54b5b1af38988ded713fe504396fd1cb74 -0xebc96960a0c6524cd27f92432a0afe815b1235d63e95b74c18012c841cecb9d2 -0xf3e386f9849abbe082a3097ee1e15db36bbe7caccd7e0da08219c259f4695128 -0x68055c7f2428b979e1c9fb47d53e07d10e1a551f34e7f92ac9ca817e18afad23 -0xf65673915d045fa0c1cb9a034b59fe6f4201f04f5f34f3dc279f9e4c902db180 -0x7e9d09b58b0b8f3952207327efde6fd7b91ecf5dc13a3a82d838d067e98690a5 -0x3fb0cd11df8fb7e43d6112b9b9dc212a8e05eb07c46b3f61ab13378e83cb490a -0xe2e3fe75690f9d2a1f964cd3bdaf164130e13dc25a0de64c8f2e95589705f958 -0x90174d4fb744b7d2896da8b7af1c1252c27e2902ff818535c75e57f7f8ea39f4 -0x67e0f43964dd581f7e059bf65a332a54eee5a16776e9b2f00cbf2f381da4505e -0x95a74b4df0d01905625f52319cdb80c456287b5ea378abee7c0e6a13d275482a -0x8fa1060620c630c91bee9cb514497f8cc38287ff92b902c0fdc2522f968b6531 -0x8884fdd38d866cf5f807f613d4ad1ae0b077e3c175c91add3f31e26062f36b05 -0x8d37e80ee5d5806b033832583962769cdb1810c92ccc9ef1112fe15612fa4ef6 -0xd80bfe69e2a295da6242086886df0bf14fa5283dab0f97598b4348ca76d75e90 -0x7426f7a6cb5d7d21ac108de7936b51231e1c676efc76030a4bbfb62dc26a6aed -0x948f37ab7ffeb797e2b6739d5d513213dc934e3bee021371abb19e9d373ebe6d -0x090c0057c41164fba05b5a9d799fc1160f63e18af5dad87061551ea6f87ec7f2 -0x29694a41844265f546ce73dc8ccbbf6e3d31c62b9992395c82f64fd0c19b592d -0x0800d357b7fc7cfd58a0dd4fffb6680976d54179aab5c7de5f38836df0f30c0d -0x89a24976ba9d5ff1d7e54d2cddad3e608baa73345380d956e55931ebe284ec18 -0x35d9a6861d534cf63f3569997e5274d552dccde3f4583f7abf94a05229948c6b -0xab2a1c04872845a7507296b604308ea27bd31ceb48bd30e4157be539fcf33b30 -0x60d2eb9024a0781d014bab3b80e94f81d47de0a8e46422e6f0c60fc8780935e3 -0x8e791f83778195d8f33493de8e440356186e878a64048da9cb575cba91a9efd2 -0xe4493af283d08d7f013f9905f5223e13abd016b984249f37bc72b2942bbb9d4f -0xd3570238cd8e1aa5e4aca2d87559eed6681a5dd427809ff4f998efd3fd8a3738 -0x603cd0fbb451d51c57c7aa6a8193b316c735abbbc799338cc882bd7770394e1a -0xa3d8f6904eb8d2c43cf9de61721e332c009538e4fb7d401edc4de15da7817689 -0x8d9f129ecc4b9e7608a311c69b45e5cea4211f438f8d3e45f8b8ec8b75f7e8d9 -0x7eede815c8e4d47f184b7a1dc08c724eda8fdf8bb28e287d7ac9530587e15740 -0xa490d3fc98af24234fcc12c22f2675a8ced4e155e9900aa3431781517874706e -0x1135e2c6ffb489a26780632705d0b92a2b49040b42df20b18f51335c1645e346 -0x70c194b3312bfae9d895a39f58b68e9df78473288556f889b29909966818a768 -0xba757e33c0c7438af8007f4dc54ec10297d7dda9e81fe23466c9212682b13390 -0xaaacf7c8866473a03361028f3231baabc93a068b0f744c75c34b1fd2d42415ec -0x7d64e42980642a3253da9396e1f060b5873303b4eb67247284426f1a34a1dc1b -0x6f87d217439c198d618c557433a0f0207cd942b27f99f36f88e7222770bfed45 -0x686bbc6e703073e7495a8b0c8165877e5b8512b70450a18195d73a070c186f78 -0x712ca2c9770893d8d452bed0e5f1e387b3fe3bc14a03c339bb8d6e672e858def -0xe39bd1daaae4978f73c2f8424e7f7fa3eb23abceaf9468251a8c4e7380802498 -0x69555aa626af0aeb5c6c37d286b5d72f7890a1c82937b36b6b63979a0b7fa15e -0xad77861344bb6e02752d9fdb1db05e909139d83364d0ae528b6a8863c206a0be -0x9a48c6d1a6729735be92c7a280922209c3ada9e8a7baf19f80dc6a6a9e09689e -0xdbb856b5c3e3888ac1be4a8f62dd446787c167ceae43af7bda82d16f4c7f267b -0xa16e4b26012fb70d1c09c1b581e6a55c4676449b49e779df2666cfdc7a2cdcf6 -0xc27564e90d86ac277eceb0d4ab3b51ea177821104f2bff542bb1fbef03556f49 -0x55529a7a9bbe6688700fc6d78757765d954c90d7573a8458e1c92e28c4e784f9 -0x084904b14d6302a782aa3005758118db910c71870a60090d60a6533b303a5fd6 -0x28e0528604807268a7ebf9d51d5e1c3ff7dec1c39d0d60931061b322be4bec61 -0x81e29096389ce36b9c2f4164074676a7fce11c85ac7061fdc6cfcc8c225b2bd8 -0x892bb3f37d5596b651d9dee9df16fedd9d1929a8f608bc0de473946c20712624 -0x1f33029ae69fefeb0e0630ebd4d6c196a26b7712663b898f2368a6c324e9c0eb -0x52e0ae48e083c72da501632b01f39ec17e9bad303a6fc1d34faf74e54a2b94aa -0xdb4549aeb93294db945c3e57fb5b9f32dcb1549a40af9ae74bd42e0772404736 -0xb40b495a5713b53275e9a11a56ccef441ebf5609efe40c8a535c2d87a4443e5d -0x567d5cd727054aacb0d601d0569a14b40eb7094515057a1538f6289de657a04d -0x74ec454c15940a349eb0364aff973810103a780528faaeb26d53152d1115da69 -0xc737c57994d766caba8ceee2251d3d0ffe6038df383ed3ba1b18c10d4f05bc04 -0x252386fbea480803005f2c6f97dbb3b2516b1789d22a8e34a5aeafa8932ecbdf -0x585445002f977a205ba1ac7e5c3ed5fc4473b180cdcd89cc98ac8b7c65fa59cd -0x66d2692d626db67721ec71a6163031ebdab2f0fde0d0e7304b61696fbd90552e -0x292f622538d1e40ec44155be86e8afe8174a5d6b69597779548bd1e5b114178f -0x042db1aa88e2c741424f50718868ed6f2cf019dc068af138c6f13a5c5ac5c08c -0xa310e81955e18932c5b62e5df9b4eb28b056ef58a38adc26599bbd96d07fc7f3 -0xb4adf0eb4313c97764eb0991893c3e4021c7b3e12718509e01ca125aee0ad7cc -0xc324db8af3f8225edbad5036e3437cced73eda2da85f058a02baf53bafcdb5ed -0xd8e5db28016dabf3992e8bde8116a308fe8f23e497dc99509ba86f5dca9adf9c -0x23a664ccb53c0f433b288c85a711989fc9e4a779fc64126b135f66014ee6bdd6 -0x91f9a8328d6abcf9f830399eb13ea2a9ae2906b6cc440d97125730299be2a27f -0xe351a4ea19aff3d310ffaee29eb82076fbba43134f08497f3ef992145e3e8c6a -0x936cd43749d68c9c64d861f68c6fa943fe62f921dd8b5c15903e42996422f412 -0x0ad8d0be8015925077f4f788a2a1bbd9e873055f5e0f97691ab138cb80e0c142 -0x51b49ac015df5c6fb5dc012aa5d5a187caa1bff3d39734a47c077bf2acd6c6ee -0x544d1b2faf519f2a7f1a7b465c64740d72f759775983f5b9661acceeaee2349f -0xeefd4ed87d1e072e82f73316debd3e45c31e91e37b22b63d861ed3cba7d72f26 -0x6f6b8fbf9b0c019065b2e0971b07519ad5d1df59bf6683ccf2d72107855543c7 -0xad9973406a29e8dffd531b5518c5e6a3f30ccf7d48f9ea88e00039a50a1be0bf -0x461f3e698724adc5fef3f558c3229149b46a532c0f6e880e7b458656b8baa87a -0xec9a64510bb1a61dea364deb790aba10dcc3a1367bbe4b49a808a7a0260904e4 -0xa986786765f80f85b65bcbc7daac42aa07ad764f46ab96b9be1fcc81a06b74ad -0xb69e8a3c0fe2c0ebf052934a81582147b36318defe4b05dc049b670c7997a08c -0x11f33be0a6b4c085bb47040462815cf016d867fa30561fea56010ead6fb1c24e -0xf72a945355008c035ec3c4ef914cfbebbb26b6beab358c5b436b1c55915d82c1 -0xf602c9b0ac03bdda62af1810328f5fd07207de03ef7016c7123888f5cd2f93d5 -0x0d13437d5d23734d4d71f2e8cf045fd4712e38a5c82e1fcaf3c0f86868d8e7c5 -0x89e85b30f50f41b3a6a6aa6cd00324ec5995c449bae37953626452f5aa131907 -0x058e39f31371a5e439ea6fbf3960aa548a885a8fde0804a5033c5397c1c19662 -0x86a1c20e6d8442d2fda1f2ec8cedc02eaf9ea5b0817e228d325f4b7a244a29c2 -0x2517ce6927bd64353df7db77c4e1945b901336f943f8a4b8e53d9bb786d69705 -0x7eb7b178b79aa53e7aa1998a2c1f174159c7ac7c7b3d7eff5d86b57072b59d48 -0x68e0dc6a205b1552248a8a52d4ad55ef3127cccbbd1e76375a54098569031e0d -0xb8ca9f99df786fb61c11322169aebddc5ddbdfdd4a92155f95a924ec95e9a2cc -0xe996fa1a7b58511efc43c09dbe227e39fb543f3b2df0f5874186f47d3a72ce4f -0xe73d4624c05656059784181eeb1e6b2dc77bc6f8c9e7d1ed512fff0027eed48e -0xe6d22b3e552ab046444771a28d59dd6e731f8aa94a0a905d9a84f9ea9f61a04e -0xe70d00e3f7cecd3d1e64ff1df294a3523df09f963b1eca1795be9ecc56b07951 -0xf9f37ab298bae49d71e8ff46a9488c7e08269463df341f264e9f5fb221f8e737 -0x795c2c4971e1787b8d31eaf5d8f226e81f3f598d3659d55c3cf16dc9c12cfd2a -0xa0aac36a90ee01e0aff5456a65da108a40ee586e9c9fc69abd7755802ba2f405 -0xf2e26e63517bb104ff276d8d2e9faec077914b9e9475075c7f7acb347e03c44d -0x24ba797236301043e7ce8b54d12184cf9fa806fe94e5fc00475f33e6af931b17 -0xf03ed8a845deb93bd7e24b8733b988d1b54883b5c1338a2b16c4dfdae6e8c4c5 -0x1506a630487275d1119f82393dcf91d618558b34345bc8847fbf4c329e019cb8 -0x5447017f3009abf7c4a921a463e76f3cb1b01cf288fb1be2b07d1aef0af21d4b -0x4f5d3d53e2bbdc969f5b80a096861df939fa93ad2363c4893eafba2bf797f644 -0x7579761647bc0cb69b15aa943ad5a464b1c4bc1fd51d67d5f9031f34a34390fa -0x16aad961dc03f275132c1d39b3142875f5fd13366e4649341ca5f058c7bc8f13 -0x93a33c2cecc5f80eba165968cf8729dccc93fa1c7b604184f11b221b5fac4802 -0x63d5e95bcabafa15538b1ada0bd7738fd47c761b302111c3771dc06073e2b410 -0x5599aa13a0cd45f86b40f8c2304b1df1f80e6fb856303027306982ce10077a5a -0x43a8418aefa8c14d36daf87eec634c8db8c4160dc7140530236ad3a720580be0 -0x26bd986864313d1ac54b8bc4869eeadcf59127996d4fcf2e02b946f3592036c8 -0xacbbace18633b71f220cc40e55e20c541f81dbb9d753d469f7c7ea9de83f046e -0x09310ae44212ba10de114c52ba16cfffdc3d8230a19ae11c8666a565c3944923 -0xaea42dc0a210780736bc17c8545268810c519a3903c67a2778b3762df8a1f7e3 -0xce0b57340cbb106a5a5143284d2ae18a591564ab19e679f5fc361075a0df7e8a -0x4bc16fa81171cb9d06934f6bc3aa36a637adfd8cc2d663d63187264abcf76e23 -0x6599018cf9e77160519627333ac7b0c134179e29c204ebb2b21d3e753f4240ab -0x47ee67c8ae40bcbb4ffafe7634bc8bb403c90219bb18852bebd6f16893879e5f -0x19da4e195cada83d6c4e7d4eb5ebc608ef85bbf2de2fc6523abcb548aedb6b55 -0xed0a6d39bb99a1a0a186e9189142f6e55e963d0ad168522996c5242f44c996ac -0x353437d916f312fd7711566c99a885b3aaf85e00cb4dad7c2ea0472b2112b9dd -0x9e74ff94bf6f2893003a63e7aab5acf5ea9dbe313997f6c63bf8b284efed5e5b -0x6ff6f203a12c3eb8d0e9a1ed451d8ca02c476c07f82a8912781b0d76dfba8113 -0x2100d2683be7b148c31391e025b3546233c87b47a56f03e4af0ab066abe0fd4f -0xc5e221d35d50062a123f90d771553bd876eb06737d9328ac4c47700e0ebc3a7c -0xf36f961154c5bb031f703fbccf07851c6dc2eb07434b69d160346537649443f8 -0xaf8650dd0d46cef86a808a5acc521a0e131cdc31d026122af149cfa90157a5aa -0xfd807175f6021a87bf02e0b692fc613e5031bccaf8a278383c2dd6948c2fbfd9 -0x062334333cac3f832dcea40e42b900f24a73096dd89f121ab17db00657d417f9 -0x24d30bc55bfa47a4bffb814a56a0a5f4147e7a0f37808edfd4511f832e1b6fe3 -0x9402dc46a334f6e050b61b6f146255082ff07974183da8b8c1cbf32a0a9c054c -0xd64a7e9862ec8622d90373581e04e33af91cad85402eb3ded04299c4dbc4aadd -0x847fef405031ca45cee544b23cd2c5bc9adc0e9bc0b784dfd37e2f84bfd9ce61 -0x698f45ae8acb50af467afe43c35afaab09662f0145a2742a228a0f963caf6805 -0x666d6e386e71297c4c46949100e4d8bf41cf92264281c93528cb49332ab6e4ba -0xd3bd47b08aa5e34c5f0b1ea7751e1868eccf01c556a07550d1274b33d3ca92b6 -0xae2865709154104ff86d6db33cc7accaf20a5d47f8c80c1d4df4560a7ca583ee -0xddba42f300dbdc914f15216b90624f876298323bb4eca2592b68952417a25cad -0x222439a6472b3eb9971cc22c75a9af32ffeb8829cf063a95e0116ce8701aaed0 -0x70014816c3193bf532377bf1321c1721ea2bcf0756e652bea27bd0a9f1244210 -0x26f95924d39accdaa4840369b2f0f25569b52c76409b2b459b67217bd55b99cc -0x983d43117c5ef2397445e06cfa716f3b6e71bdcf25842034b3796eaa84e7ce17 -0xe5523a0c1a253e3f4677e894efda2742d8db509cb74da596fe3d1ffe0a7fcf52 -0x8d63f0f8243ae66935351323cde6561a87d8273af7d609a80550252f485caf0b -0x1f7cdd9f39a70ad2b808d4a3b4f1c0c43091980909d6bda49ff944f7156ccb90 -0xad7aa641bfa9d3656a22f928844b77d3ae85527b28910e5cbc4dc5bc910d4289 -0x361fae7d857784b465a993b651e2392c7d2dedba689019da86941b1b7883d014 -0x03f227bd368ac9ba56d8f1b18869e5e8ab52dd3d6f07ab199d0ab031b0eca8ed -0xb0ca2215b06608c9de887de70b939cb6a1cbe9574abc49a38e6d3f23ed68e687 -0x3476b61921a3079cd79f98d8fd69c411bb58ee3c78198d0dff23df7c524f26a9 -0x1823f7311627d561e9727433ac65a17b2f1b7b49a777ac019c80e25bb902cc3d -0xfd6909ef731b717aa8b86a8786c92af6791e630a24750ea227fe6b7ea1a1cb27 -0x497c8cab0bdbc952cee1d756a82c51ae03dd28ddedb5fcd5bb1d29241c45d371 -0xcf87134b61fb4891eafdef47a98f8383f3d53b21b941f723086551381db2130f -0x35de93a78f8cb78e888ee863f8917d7da65ab41841d02ec13bc2d834559b9e17 -0x15fd1c1c7b4179b6ed68359e3887cf84d0d31a021d14d4da211e9e8fb72fbb23 -0x02d825fe073eaa04266c78c1beae8fe9d4cf18edd804df0b23aee8fe3cf45c4c -0x76265763ad048105dfe2ee6a60b6185bef0f1946b365e1702a9f3ad826bf3ba2 -0x5ab0a1842382e93ef88a6450e019a03ef02a27420c6b6ff1acb2bcb7d9c3acf3 -0xa2955d1545f79bd8aa008df070451b4437b472a95fed7b434449e7096338b221 -0x1dc93963d055baa610d6af6e83f6e1a71cec4b99eff8cc8eb6ec38fa3c9c0e63 -0xc910cc584f415d95e891d0d7301b685e58f793cf2d71af2080a90b134126b503 -0xfad30385506bcb4d57d6b645260b5b10f53b44a4739822b4607fee5390dc69d3 -0x5d95cf604a7c96d0800a2e301a84cde041899018fa7e406e7af63f02e5ee6a3f -0x3a81342b8ab3cb85872ec6df1c4d9bd066d6dbf7ac5d643dd020e8b4a95ac1c1 -0x2336979bdfbbb44a5623ba75a4d9d1c5ee8e968412ba2ab462c690aafdda45fc -0xb2dbdcb743b47952358355f8d0b0fa7279b95ee5421f833d2b61670a05d56c76 -0x5eddb43a35d89dbe43e392857eeac8e9ef059aeba691b9483565117208eda42e -0xf5d78528377248e9620fdf1f45d2fe5d563db759490839124bdacddeaaed1ae4 -0x0799c25f2266671067352efa2bd0663c89207fb6653a1168829b916d0ec88f89 -0x0e90e89fc93eab5ad3b6040a08ac49efd8e0461ba58d3ace460e2a765f844af5 -0x275a8d3b3b0c5647db4229061189223394e0a8453e712001ca44b8678a2039fd -0xc4c0b0e3cda3f7691cb5044d7d4cd93f32d227abf910f9957afb0db5ce8fee87 -0xfebb7b320769c18531fe8d0a95249b68c1a80141969a12023191b6060c1b4e03 -0x8e93b5c80d69bc89253bb35c9982141500e4735ce28064b10c61b2cc4f367c99 -0x7fcf6e1c0c57e4299533c5b839d26958153ab0225e5051fce246b907851f016d -0x12f28688cafe4cbc62ace37b9ca4825563285b312017ff8adf8869a4f9d1b3eb -0xd19a98d469d5d2eeb4afc8495f3b4d93f990b4d68c41089585c2bc918bc03858 -0x17431150de1457a6797e8091a07af448a5926a84fe6859ecc5bb27e2d77917be -0xc9adf3a571e2b52f9c950498561da08a00b452be1320e981b618c484f73bade1 -0xa1e1942a4515361ff0cb7b8fe9df63d98e1d1ab98dc5d4926c79ba1d614f1d13 -0x585b79195651bd086947ea88205029caa28b9a15cbed030a8414d602eb38c27f -0x2ac88b3c6e81043bc422a347a6d284d102159f9c227b6c8b4cb12e754ba336c3 -0x20342f389b05d4a87af7a7e3fa505e074d2a3ef9a7830cc216ed4d4b33ee4da0 -0xef1b9d2fcbd18f62c0797ee2a57eea36d1b3a239748cd72c10181bc11fb31b1c -0x8da8bc06fe6cb9907814543389f80cbce089c63d187cb151759621a30522573b -0x8a528bcafad16b8070f0078619efae920d71d764b476fcf584587f99183d5be5 -0xa927f44cb495c75f65767ecc76ea8e42673943a831bdb62422ffe41bd4e7abe4 -0x699a8275b15a497842592282614e0d08aa04b1a609810a6b67b1f5836629f71b -0x38641f0ab520ffc09989bd5ad2be59890510b55ab454bddb985bb360b890bbfd -0xdd96d2fe14907920b12fe4df748a270dbea6470c057b7a01aadf878405930a45 -0xf38c3b8e553453994fd70d02603d3f0b7109a9139cc14fd722bf3ac74c29580e -0xa3ca1e0e065efc0aaf7ea5db1ffcffa522fb4a11e233d42f1b007c1d6ce1dbc6 -0xb177de50f3a445ec4532f8309be03b9edc188546b651a5c5ad78754b159860d0 -0x856398853919ef643328f10517625bdb9041a8f460291c9014493746aa9142a0 -0xa538ab25ab933528f2f67f75d4121677da596347514d68e4ba18e0c4dc64aa12 -0xa20f999cc353ab765fc9a238f327da03c863468b2b0bc9e8c779cce3af25c049 -0x4a9901991f9879395752a356c884df95fec6319c65c8dc87bdd935de0fefc04a -0x8f74f4a5f64acf1f298a6a914dd939c087e475192f732b44eeb4c88d3433f09b -0x3edbc254133bbc66d75ee6fcd6246f1aff66cfee13a8cb0828599c88f736511c -0x155de0d4157fbcb9fb86deb7786a9f18c5ef73251a54e176d65f9d39c19eb792 -0x2f82c0492904a3e2acba0334757800464f94d0d7391a3ab1ed62d86beb8e7d9c -0x78bbae23f24773ad85f76fc5d191c1f7a20a3daf418521cb5aad1b914552e124 -0xb94bea39d5bddc1068658a67bf7f067622bf1302cb77804f1659f5191b1b9623 -0xf05fe8248086a820dacb800e25867062ec275bfe22c5bc7ed6542af0fac8f749 -0x4828e3f4d2697f16d7616f9b0226030551749baefab46891b6df573b84f4c33e -0xe4d096fdf41033b1e3eff1c193c1a15fbbe7b03271ff8712673402cd34cbf93e -0x6f1be1f21717ee792cad81e38db0f22a16342c9a239f261827dc5237336723f8 -0x0ac5ddf11e8a068e1c3e2fdccc98743db0c5d16a58a3b4cabefb0fd3a0ec2bc1 -0x47bbf4345263cc241d18561bab52a7906c01297fd1b2755ff2206bdd280fb2e4 -0xb051e56525b90987b88b36ad1fa22a0ad87ecf9d58a681e2dcc17fe997d30189 -0x24f95d329b9900f7fdedebe6043cc604e253c1c3d8d2e08069a6a2464f9fb0da -0xee051b8fbd21768d540d947b533d023548fb8e122723cc71d73f0d13085373c3 -0xde5b86b02883890b68fa7e04cdef0674a4656225c7451d11bb5a3a52fcceb6d7 -0x541cb814ad01c5b9f6214fc9f404430e2ced0ee72c0a6ed2be8411b3b9ce4747 -0x897032b2b34312f54810abe05969a64d0c938124283bfe7e93080e5cd44caecd -0x42a397e6a8fb9117073640aa03f2e9ccba14fdae6b04c5dbcf9c32ae55369384 -0x93b12b5ee339e6dd42c7bfcbb3059ff451c996d0612dc9a28670083451ffedb3 -0x7c3709354f72175f69572f01f0ff761827c3fc6cb9b0d426d9856f8c7e670727 -0xe9367698bc9e8bf95ee440f554869673e55519af5408c2b96a142a737431f147 -0x1353339b394752b800686554b9912a0471323f29af2a2a4c65d0b823c3f35029 -0x080585c67da62a44f75a4dfa95ffa959e193200279a22afc6cc022cc1458f41d -0x00d163aa50b39a85bd2770ff8c44a77d0000a91d7d127e8eb174a59c7e6567da -0x7c90febca35aa10d175b81c1303dea084b4643821014ffe10786ed553955120c -0x8277ee755218f5fab45528b3b2eb6867e6a7b59bb9891bcbd246f7bb8f56f751 -0x79ae2808b65687efff5103b01da3937d9bfd4b2cd0a24622fc6e09d56b153eb1 -0x0d6d40496aae75432c0944f333125a283ccda827edaf34e73ef3118a98448a2a -0x443ece0d99a362af9f0cc0f7dd5c408092d78a3145cdb7d0144d140936d48e72 -0x076e47ef7fa69335546f5b431be1a0f03375708f725b7a6918776da7409d4854 -0x5a844d9fb75fb992758237c44125ab39577358166bfec5b0078185420b6710d6 -0x9831fffca53eec2c3f676ad41fca5d94ee54e801cffb9279c7853136b062621b -0x32154812953b1e0d96d364a7517de98fd28052210905220deecbbe66d38bb368 -0x2504014e0db9290741336c421b0b274e3f260d8f49fdb6b6d3dd3f5054581167 -0xe590930a32b452bd949b625cea6d8beef386a02e44e3f31ed09d171ad0be7825 -0xbc194e88b1a276e84160c854bb4dd3f6742da326fe6c9890dc51a4daeddfaa29 -0x7fe94534a70f9718df96f0f9359bb5f9d75bb6a7db455f762408dc65a80d65c2 -0x0b88e0d1335851a6a74abc06336494bf91578e88223083ec9884d6758f3d71f3 -0x5bdeb23e5f5e36abb2dfa27231285e6f2e1d780ae83d4c3093c1d3341c46023a -0xd93736aa10fc8af11a39152807b0278d2067a2b1bff060377350185bd5359c3c -0x1fbb33b49f0d933e23f2804daa3fdea80243e5c8871cd6295cde8c95df9ba6e4 -0xcb0d7e706c886fa4b03451a903995527fdcfab608e34c9c3584b8ff5b9144c00 -0xbf77e53ff34edb164c0d783c14dc02a1603ab6a11f1e1bef33b2a2bba445dacf -0xa52cec7d5f12f279e788bbf8e401ee745c4fc722c6aac4834603371b650db7f7 -0x3b11d37aa16263f5792977e15e13c56ec9efddb623cc41096e312fa71ade983e -0x3db40aaf7b705a9d2f67b310a102e731809c40bda0280978feb33699ed12688c -0x708c402e6b5fe0f311e7374c03dd037b179ff88b4379771c8afbd55d4c7c217d -0xf87dbb8feb9609a5a379473d5350f6e4ac83b546f50f8c79f91b21d8f61e5ae2 -0xa57ebcb4b3e9f651b89834f3cddec508409cb14351d6069509394dcbe853c0f7 -0xd9f5507022034347fc8a66082edae12df616a98f77c7b6b658533d5574a79962 -0x77b6a8718b7d8664d7d7a0b736ad98dad33183866b0466d6229c8547079dc520 -0x95b552930d47a847706c9e76803a03f0ecefafe17782ab8193ae5bcd177f5b05 -0x6abc0b3a9d9167d7f7315bc29642e83d819ad55871a48c2425ebf912cee19a39 -0x856894e10685a9508bbb9d2bdd60582bec01c2fba8ac0256150263d7019e3f9c -0xdfc008c5dbf689ec8ccf26d3d3da09bb113a0813c5c96958d2e1a82e4b6e39fb -0xdd874846ec24bb529a3fb9780909a9a83bea2426d7a3e0968ebb7d70da5cf433 -0x55ca7a7ae39e65c512d68e0373ab4fa2fc48e22e8cc9cb135222e3fcb4d29ee0 -0x69f0dcc34bce465f458f96aa4d627eee758b21f8a6dc92cbd0013ddcbf264801 -0x0fe156e078e0149ff7f71c05d344c1fab064a8a5fa2dbbc48863ed901ebb9ce6 -0xeeee12325173c0bc721e0992267a3cc9eec669cdca0408803f2ca05df44a99c5 -0xfbac161f8e8b9c0c87fe53750ebb7cd0b279e617e53a2ffa3a933fdea7842759 -0x4ca843247ee0b7d1ad169d61909504d489e82acb6268eb3075dd08b1495399ae -0x93d97f1ed836cfec779c0338aeece17ed57c0ec2683e99d0c143f529f7f78a5e -0xa74e8db580bd0e478537c3ec960551c8d66f7fd47fda859fe7bf46d6d3f8ffdf -0x1df732036e047441937e32e853557d0b734768eae8af360997c278e01cb305ae -0xb8d4ac3f1044d059221466789d68c25e07cded89bf5cddce7577526179cbbe7e -0x8853fa916c4578924b7f0f5be2c1d73feb73665566966a365bdb13cb8f1bafeb -0x9e561a3894022cdcdc15517f743f0e3f558dff19baef18d48c232c839404c649 -0x5540169878f349c92aaa07fe85e5eea732955738d8a898aafa1ffb1beacbc14a -0x93834d2372c4ffcc3c257b06e3e791c88b34b4f7e004988239c07e20e6355b12 -0x6ab44ca700a0575b9cd85dd65d31fd77a802d955777a59de6044ecd42ddf501c -0xc920d0bd19218005b7e12ec7f2525565b84b4d0ff1bd5623500e090960e9dd9d -0xbe2ba9d6f30f37f98801496edbf3da241b887935b9484c1365d2756e6705675c -0xb045da599ac5d08a42c24ff7c9a0a7331a6351ef382e157631b31cb7e4b44c83 -0xad37387ee239f826daa5c35d5b15bdaa5361a2d51e2cb50377877de52109015c -0x89a33b9bad661d8af3462387ddf27da9518f99904c60633e1d8dd6cf5b2fab1e -0x2f956681587c91c9511d6cd3187eefe529aa33e720da72143f2815e626362b9e -0x4e88aa6fdde2c1ca2d5173aec63d9abf2da1c32fdeb160b5ce93007549ad0da2 -0x6097b6cb1076279bf213dbc60b8da3ec5d83a04d8925887450d6d0a6a411d7c2 -0x51ba1aa7e4828406f265add6b336ad78dfb3a62b87bc0b80f4e498ba589f939c -0x6ab1b65faeda55e2e49a622379a00fa42cc9d2cb568d0b3e54b46c47e24c513b -0xa18305b512823d570e72394bbdb4fdfa965aa22ba1d967da310958279e8d23e8 -0x34d9adcf46be9a0e4ab95d7165812e37b8c3953f071197331265a6577744c3e5 -0x76a93a4544aa298fe561ea5f775a843676ae54cd9da15bd1ea277290a5a06301 -0x127d5e18cfefeea23526e29c2032b14de0bcf1ad749eed34a05071e2ada8a1ee -0xa04eb308f580d6f64e2ba63ed53ca56a818b3a4a053e578baed820a01d613704 -0xe716599a2ea405e7cd605745c27e0b7d05d55bb2dff0e3e7bc47377757b56988 -0x92fd5a0b730004eda229a9f8661e5fa75223aaf523a6090cbf29093c7382d389 -0xddaa71d7b7a89c82de51da13b8bc1ff3dedb8d84d5b098db4c296eaad8ee463f -0xda183f901e093d69e37d574d9b74ee22cc70a9cf15ef5db0f8cf2daaa357a9f3 -0xfd9f02fda3185faae5629dae4df48afa8f3e922ed0c4a0c5f1368daee32abb87 -0xcb44061a6d3af2f8f63e34a02702084f5ab03832b0c02be853569f6059ed0cf4 -0x17b8fb4af4a12e4923474ff8a58313a7b88aeeb25b43b15a9e9f9c609bff8c8b -0xb92ad1cdb14b8a172bd0240c2497e50c445f68136682bb412b3e201c0622f33d -0x5f774b034ab60eedec59631e96c115ad4e34039fb992e586c6f8419ae347573c -0x51035ef7e51c1772da8f1dd01a16c828d6396722916badf3e63af723216d525c -0xe86aac973bfb67d180eb8114dc2792f5c8e70e121351bc8cc37691fcdef5cff2 -0xdfd5cfbe23bae0c9791d58c29f2f9b789599c6a3ae7f531c6ee13f39afb0882c -0xc760c820af056ebca43209f1894865a32b1a77c7d2cb2fa5fc35f4b63bca649d -0xaca3bde6003b229d56b4999d96333a092125075f2fabd7dd6b719abbb885f9ed -0x50cf6124ef8bfa1dc21174acd888ffe9f156505a77fd360f3d198de8c62e0d5f -0x2d91b02380d6aac3a51dda21d6fc83a35e03823e9ef5c054a14db2d55c2494bd -0x3e0c8c11ed671155f93112d21aabf7bf3804abd3eccd03f164ecc536aa680a60 -0xd0f620b2dcfd4b14ba1115589fcd006329e62f99880cc883fde18cfad4af60f7 -0xc423a653e71626113e274fb43328a7294daef1d0abe7794da456d277db9a2b37 -0xe19297b910665bf725172951f00868652934a93e16eb80559ed46b27d23957c3 -0x9c2c8c0cc8aa2a50d40a9dd1d762b50b813a4dfc8ab56b50fd9f9f7ac4fd4cad -0x5f48aa8994e0b97949dd171841b49bb067a33c07301eb6b3c41db4712bba8963 -0x9156e743a1b300867ad8e48adca9317f5ca7782fc29aef2ca881a0cecc769053 -0x6643efbd9ae5fccaf253f241ced636c7f510795493807c93f0503a9f9f85e120 -0x2374a76993e94abfed3d607f8e00a7c3dccecd30f0c5d41c30ae93c978e982de -0x1c62bf267c2cbbd3bfec114afd292747a6f23d2cb871a04513d754194bac8eb0 -0xb33fabe71844c802addebb0d5da521de48c6cba357b93ef931f53576078a87d4 -0xf02d3f80ce74682e4ca541386f1361c562ea55c1c86882ca608ef7a79c80bb44 -0xa13d9474fdf5810740e61a5069b8be0bc40bea33653faefeac94f7378cb3ecaa -0x2fb80cdbb9f78d8e494cf57e9ddff0581124ade28b6f78da37608994d884461d -0x5c700853714649ea5147982efc62379c861ca92cdc824d741dd81e2dd970b4cf -0x658559b82388a0940e1ce593fbccda4ea714048b1994b0ed9efa475ab8cf99fa -0xd2bed11943a0af0bf420ec8e212e52507ca56832e7239abe78e3b769b66ea46b -0x892e31c25e16d13b3b76322df3e4fcc8305135f08555b4d9b31987ccf5283590 -0x7c13b5f562b7157f1c9cee094c686665b89a7149cab26ae22bf2ca6c33e20511 -0x467ee61560078d2d64ab9c5665f6ac19b10326800c01c9a192be3bd3f2671b31 -0xacccb84c79c9db5cbba2a48258ab2d0c620b5c3be8f7b15dcf73dc321476c1a1 -0x4a6bbc080d992f26eae81551af1af5f94d1ab3ce568891b9b417d4a7fa823be0 -0x92c4018ab751d743b0f11436993a42640e4784ac2fb50fa8f23fb1e779e929cd -0x71b8bb187d156f0554b5f58e052edcd360888cefd10267f3e01678ea00f2f5a5 -0x99778d382546d37e7bd9aebc6708e2817ea81c4a9e25e8071f2402a8cdac8cd8 -0x78bf8eb54d572548f2a61fb715e4a7ee041669fc88ba157b1c1414f62684c9d2 -0xc248ec6562458797db289ea23e4ca77572abc84dc89026e4a6d85add4481d038 -0x72ff7390b60bfe944587d1f3a38d3c8477c774fb6d9211ac5d308ecdfaf24d75 -0xd35aa657453360c320fb4a66ec7d0e4fa381029db05b73a59df6bdda58353ded -0x2250a198eba8c2bb2f260650b58a7ccf5b0da073a4681372dd8b412e2b62ee5d -0x03cff547e90b23458f4c53332fb7e0907af0fd6cf247bda8d7913db365079dbd -0xa65a54b14552db7af30e656f943f08764dc5208859dbf7a913ae31df003a46f4 -0x450bca9b842ba5a92fd7bbf958a8cfda72eb70578c78f4be86af16ff2bf408e8 -0x4701b74a6b3e477c13004af2900a9a27ade577280f6e6a316d3675550c6bed8a -0x2bc26a6e056b653a096e455f1dec84ea5c82411f36637cd83a4b99691a5fdb11 -0xa2a9c1f92d0c291d16afaf3729c3f08a7cba4c6d0b84d240e87f9c4be37ff141 -0x572e853127c5e0c44252170e7a8f172a6d8d2b8b94afe127392a0a4446ae783f -0x8e8f32a988704ac75719b4d542d05f504abd1b63623728d69de47f94899c43c9 -0xc492eb4bde4cbc737b558fb22ef1ce3e0b31817e624be425b51e8cb64939ce97 -0x15c94f7243ea022eba296375e349eba2253a84c4accee027cb59d8cf316c2fff -0xe4222b1c0a212be5ed05b2a5c5e3d925b6f8fc103c6ef1b3e84292dda9ffc474 -0x1a25d7605763618688de3cfac8ba5c66c35829cf98cbda04c17f210aa5a21bbc -0xa613c0a0deb5ec05150ef13fe02c0c72d5e098eb5c220f03229b03a1d9c89fe7 -0x3d581174853c1de34ba14e17f46deba98ced76207f42471aaa3a5c1916601aca -0x16294a9a2eea854b5a553088e92f95f35a34a240bb75950241630fd23e9b0e79 -0x41bc78b8af261816c2c5e8d170d843c5d75e1e2658361dcf3c25b7cb01e3af9c -0x75c57fd0e97b297e6f0137f9baa2d77ad7877b91a8dfa40bb95235c9d5534abb -0xe88fe34944a59deb807d64ad41e779ab0ac9af9ee605ff9223b38587853683f9 -0xc7f8ca8ad794a9da79237059fad0ee18c7adc347cfabc4826f8301e19c1e4a80 -0x72b8c87552fd951101797bb851ac618da986fecf093e77f95555059b74bb0874 -0xba486b48fe1a8847391b87a481f7c83e2d96081eac23227e083802f23db18160 -0x5a61f47bc5152b901f4dc30d73454b2faa3c1aaa3413b9e408c9014651360536 -0x02acdd474d6f1971e60e454875f1208e876cfa1422ba2b910ead112b4bd071e2 -0x39e718656a53c13cd19d036b1fe6719091bd9b8b688d1f619244e4885ccdac56 -0xf37e5f073173a1401093f86cdb222d6f0f026396b9c389784924527dc428b4dd -0xef0b2d2d3eaf97513005e822d152b84b9b2c24bf6c2977ad33598917bb931305 -0xa01973fecaae3f13d0aac17c1c0ddc82392e1f224ef925d57f082ac439ab19a8 -0x8f836f172f8b264a42b141840d3bfbce8d5ac7449b1a8d83287d3824e6a79e1e -0x310b819ae07dc6d994418d83c24fa3056b721fe0f98e03d21a19041265095308 -0x5552c13c98ee09f1c98b48036628063e00e5894ed2a530b88a63ae812cf94bab -0x60c71ea5b5ae052c326ba7af9ec8eeff84b15c19ad9f6d07ab2d20d5cb401b7c -0x18547f99d9eb077512cc3f991654c83e36bfa4d999e758943d02463ed52eed06 -0xe6ab5468172e49cade539cf088868a4c16a653efd5e4ce18981885f95839beb1 -0xf116b119867a25bce54fcc6c67d234bba9a6041dbf3dc20c91dfb39307dbb520 -0x0e5286500c0139429a5eae86d64f38135d01bff67096ab368457fbc9e6173b48 -0xaf7bc4f15a98c2cf2f774fffd922c0a2eabdaaab020fa3c7ead80ab977dc5207 -0xe84a502957bc1c4212fec9467d855464d0d83ee603aa0ff02f0226b71bfa8943 -0xb0ffaa6ab43bf52ac541d95e69977192cfe5ede661fa38463852ccc2604eadb5 -0xa090123bfda8014aede313a73bff3e978ba90399757d552c612d24ecd634e9f7 -0xde316788a4af5ac8c9669520b4650c815ee4268d2113a27c6f8c6763f49b51ce -0xf68a633d3a01a1ff71164470574d08a41eaf34e996825450f0d8f6c18f690d2a -0x7e64013661b1f728d6b59c44dcd9c3bd73f21a1a1c8f963b4a8053e30b5205c6 -0x2d7b94a7b0555c82fb59940d840601875a25de79d17cafcc349f008217d7a9c2 -0xc7401c31083f693a22895b48148f665b076b15e255b6556c20abaecbb6b9f542 -0x565af23012d8fc57615fbb114e7d99a2f9aaba82db3e56a56da955b09e13bc48 -0x4976a75d30249355bd0e6eb7ec7f50c163a858a05a2519da5bb0260af7248d6d -0xf048f1cf113cafc022998ac198ef4b818237473dc2ead013ab621895b50c5838 -0xfb3810166d64cd5946879119ff541a2cd0b51f6d0aa8a8ccdff139ee932f5e94 -0x39a9e82381bf8a8a596db54bbb9e9caf6ccdef30b1e8c207943c1ba648c27ffc -0x36ce07c81b080d9b477f6051829a7d4352b30f690a787050dd9bbe81453c4d2b -0xc9e569a954656eddf8b417eeea2d9afdbb28e77e7f36af79d05f1219e60d25ca -0xa9cf8ed0bcd0a780093551e5159ac24de62270ae13f529d727aa47519cf068b5 -0xc4957233d2ba1e1d4646c7552797cc7ed38de7ee83b21ee01ec403641cd5e44e -0xdd561c454a3f778bfb144246abd9059bc3002a9d84b1ced8181e6cba099954a5 -0x971a6ea8ec9c854c62cb57be90efb603d65180e9251826af92c96fc12e017bd5 -0xf7c54c3d2eff48e06f69c194a7c1bf73a2381abeccc2eaf2301a0e1ed79b8c8a -0x7f3fab1a7156f5660a6e9fedd7c98704de058dc4a0e8cb1f17e95feb9498f8a3 -0xe8739a523b8cb081138f3d821ee13a77ed96a701c88edabe87a524055bf2e999 -0xfa76152d0a8572b3d0c61456c29b5bf8b33e39facb848ecd522685821460743c -0xb8853bd7e88e598fca0f4df349fd704343a577bbfd410bfbabdd876460ab24f3 -0xa7192dc0e109d439b4370bc6932d67bc796e09ac18df2374ba5d979b170cc2d8 -0xa6d10319d57074d545dbab7a5d3b1c1c036cb209daa1365a4730bb351ef73247 -0xaa6cdde922045ee5dc036b5a6364bc673e48f91503169df5b3bd4d1f9cdb5864 -0x73fd5be2e15f9d07ef0965b525d99da756543942b3b082dd548c44203088bc83 -0xd2ccdd56b6c5412ff69086f3a06fa9cd47e9198875c902bdf020ef702d360a7c -0x79cf2a857c180eb66ebcd4470cb06398f98a6eb43894c096508d90511924a565 -0x678e0b9cb11340aaa173a8fe3993ee0b291651748ba5b0267c43681b6c822cc6 -0x74ea5680eae5adc960d8b6d5685eff2cbfd4267c26427aa8959cf71fb93dbcc1 -0x701f922b63a15aca55e0ba7380de8a990099ddce271e75a89d6032b39736bf71 -0xc7c5b977f9ddf777ea5e15385fb8bd634d5c71885c3b88267f065f9a82579c7b -0x4fd84aa3de5ccca04eb3726618abfe269d12e57aad4ca83e53476da725b4e45d -0xaafebe72b2512dae8ea717817784daa848ea0307572152d645953f9e65479172 -0xb12d49fab54892eb2302bc4ccaaad6bdc9a5964bdbd426a102707704f87c860e -0x46b99a0bc6b5813467426291603444b9ff3bac4f70ba1e31ad2be81ac66e206d -0x4c7a07d8feac2f9f2f7f0bfb711b4c2d30090a5ec63556d24a2db0e06d20874a -0x4b6bd152d800b6f81a18cb4253711f20510598d41c34b62b4685c031683b6289 -0xddfdf12fe146178da3eb525df70587df268030bd37d137f4568f5d20d307962b -0x73fc4ef47c3c403e8b252a99a76058a99f5ba4218baceb01b68e3f2fbeac05b5 -0x87a76fd98d2aba1c0b702cb32a763674b5af2d1c4b99e4d6c58f9c6e22fb2de1 -0xe764316b660bcfd0892a0e4f153e3cd60ac15ced7caac5e77b1fb0287b097164 -0xd57eb4c60140e4c9fed4d810afe37d2faa01254f8a6692abecf2ddf6808d845b -0x7e4814b081aeab211ba888dbc99c5140132e40818bb72e29eb9c80692052a8dc -0xb70d9dde34e7e1ee747efe7a169a8fd61b9ea4279c9cec663d2d328d03a11f68 -0xf8d682e821c883628e171f17025df0e2173d7a15fcc6147a0bed29104fb7aa86 -0xca080b200a51d2ade8349a50618dea30de1b37608382fdd39e9613d2fe86b551 -0x2c52070e5c89ea2d937594be76437e6c6f45e0b3b435c84b39c7bfc0d3f3d088 -0xae11d79cd7b1a6e2377eb7754534c4a7bb0f47cac2ea110dd7e1718177ee3cc5 -0x9f8da3c662814089b5ebc445f52b7586e52739465acd792305c02f4b932972b9 -0xa29c428a97c49f03b1b43e9503e963ac33489adf4610730b69e2d9b52dd7cbe3 -0x8298d2a3c382b8ecd3e25635d6b9c81888461e808098d580a1fb2e3157e17583 -0x06691b80a404de6eefbee0bb8e775f5f565e15122229020f60c22064496350b2 -0xf26e964304039e303c44432597f080559a259f9d28f487137a7cb661d9b1d708 -0x1387f8a1bc2d8a3c91b47d27c6774a65f81a6a8b122435dbce9f3d923111cd07 -0xe950811ffed131c3e6dc7e30146a02d3617a4f2564c50db0b1e890a82da77ce1 -0x40e566d6981a3cbe7e22dbbb50e9033d89dd67eadfe4a2c6f63b6d6d29a1706b -0x3fa69ea89bd5fe1c9d43b99d9fe7db5df7d8350332fe9d40bc0e05e379c0380e -0xaf006bcf0cf7080272427a2c0f660deeb4483be4bf6c25dbed2925b16be35ba7 -0x9048a197f7697eef065f8a93dea47b6b2279d1ef5bf45ee32be6f83ede842190 -0x2160a80e7db562b246641d4e4583072826fdac2802076586ac72a9971814a69c -0x331cf3cdbb56576a94381c76df4b93bbb291fc1f14642908c74ef7f53c31b1f9 -0xa542fc155dd7efc7ddd2c40483f1b357388d59fdfdb280f3473d42c1ed50d080 -0xb7854fd60e3ab0e408cf6292e9623da41f349caebfb990524ae3dfa291a4bc38 -0x4a867efd31283e63003c72d14d6ebcb1d97ad3b3a5dd9cec04befd6ebe5e818f -0xd632c8097ec3e8c5222111419e290413e5b8e049c9fd3f17c31bdac789145154 -0xb934b9b3fc39430ec6f38563f4afca9ca7d1507f7437341ee1c5c08fc475b449 -0x417a21ecb47622b7fee495e305706030fec1aeb4475ef5b998f094c132cc7a1a -0xc37ac8133cb40509feffb1f5fbcde10b2da4708388bec5b4811e3fa4380d1c12 -0x52aed7bf38fce025b948ff55ab1c927b5346d4d0df5e4d645a4e6985cb2a551a -0x4afa05f49b7d732801e31f382f36cabbfaf36179f60a903b5d6dbaae99f1fd53 -0xc0538e974cfadc16a3e8602b6223d6cf2438dd6d2054d2989a152fe72265fcaa -0x68765bfff19aa0f31e543155ff022a029a1399403d9f47f659d71a07e7031d11 -0x79ac869c7119f7c3f94dce319afdc01bceb51eaa4b2cfff8952b4252eca9a885 -0x5819a89ad7200f3ccf62f5d2355f856ae1bb1e9832ec058c9ac5bea1716240d3 -0xbd1c2fa9690414c2bb282a157074ac5984e574400afe641b8cf298082826ff90 -0xfb77d359cbdc80efca32a43b89a1b573790f390cb7464cc9d15725f495261311 -0x7b1900a03736525e888398ece64c471761c6267260d59d3220f5e4994da0e8dc -0x708617cde57d62488394efa7047302bb424cc2b034bf2eb1091478a7b143269c -0xeb1102c893abd2a74fa879c8283ce3d15aae81f5e0ba86be55059c2e6f00b953 -0xb8f1317daad9ec0650caf7ef30c960d787ec3b0baa3c07c335e2692ade3fd5e9 -0xc952392bd0ce959a9e54d4cf8c19a86d12ff3a42be942697465c1cb9b8b1bd18 -0x04262a54744b9565ea9743b3ca1b574598a87e8cf255f2c3ef5d867297f0cb1c -0x351bf0a89d37baf1c7dee9f95543f15da107006b065f22bd2de327d7acc8b992 -0x80ffef94d16f1f8f960f1a39466a50c1f90b8899d2b8d6143e4da9d15eea5ed2 -0x79662ee0cb4019901d91009eb5f02218556db2f036405d7a84ba386277a19615 -0xc6b9b4a299fc9f460f39212ff5f42e3dd04eca6b4790cddece8b19614f749c87 -0x3c12925f0f91e9e3984fad5febb2d4d7fd6da7c89f0f2da3c5170d910cdabf7f -0x40a3481dc8a11826ae7f3254b3484f498a7096b12b845fd61daf4dcaa7cf89e8 -0xf51637d75bd697dcb5b3ce56de4f24964f7ea76e755d0037869229d3e2606804 -0xcf5cbc19742ad792849b4da619c0c606771fd86c80c5cb5a0a39ba4808678870 -0x3d1e44d2d3592b3ac662cae9e64ebfc950c29eeb77b7d762a2a0671da1130197 -0x1b1ce3b05bc9d19f5b7b6a606d6eeaaf258e202d22b3c19e16cfbd3c20e599af -0xc086d4ffbffe49cdd76db69e2e8f79921caf93fb7f91eaf18f5f746e86639e57 -0x1c9dd66fe4ba46dc5e9d2703c8c884c386e551887d5773eb307e8b009d18f499 -0xb980fb1ba60d52ae2a1aecd99536e1d77e0689462fedb58aa00a1f144a774321 -0x8c3537815af445d98ed88734c4abd29961cbdf8aa8625d430805f5bdaccb040f -0x1c85b185e13a45a3530530369d076d83b22d624472f079fd8a0e08f26f97da74 -0x1a9a6341dd4dfbfa5896b391800c3a48c433c88a372e950c6c1106d85d45442c -0x3faebbd515863a3db0e778c4d88a62efd937a823ebcd81b6d975c6d653a9dcba -0x5c12c099375b36a3d11b3fd72a76db312a4ab70562ce7042cc37b8cf34f05293 -0x86bb0a12c4b85e435e79b7ffe3e13d8540ecb2acb46aa6d1c8cea3a1d6a515e2 -0x9bc9d4ffa2215dfc9b5049c10143a0238827a2acc3b2dc8ca50e486e570bfa00 -0x9a29b1861f6ae1c74a8c1bad97379b13fc55c93cd4dcdd5837da1ace20295eb3 -0xe05a45e3c6171799579fde6e342ef5fb0e167bbe4873d3d1c509b2496c557e5d -0x943bf05149798ee589ee8cf62fb1e8acd174015715c7f713f143f57559dcb578 -0xf263323c486c31114df26d5ba09910d5da6f477e0b4210f739e3718e487d7ad2 -0x97b9112fcf0949a4c5199eea7e91c6c9b6b7749a03769707e61cc40f7989fe13 -0xec9615c2f4fe8033c050f9542d011a02593f5213e6a04488176f8b40bb1a26b4 -0x91c5de2c6e78441ff4073a6d8deaf5db03c0cf5ea2d3129bf8449416405a9cd7 -0x4e0ace8aae54152bccd3840f012646950910615c98ebc3d786e12f5cb11b6aa7 -0x4fea3b2c2bc4ae4fe17e95237a3d62f85b7cca03d863731d9d1cbca48c1dc0df -0x7f3177deae273b495b72226780baa2765ed889ed26204cdce6351beafa117a0d -0x8627b97cbde36070d541e8059df73898761894fdf9c6b9b81e0bdeb5777e8d81 -0x958e0718069eed97cf3398801f97b55dff6b647c10cedec8555676a957d5cfcc -0x428fb11d7961dc7a7b6d57300e17dad70df05fb5462ad35de0b2607469b0e2ec -0x589d557a8479d365cdd476fb774b2ed61f5c2ca564dd0e5a7c9e017daded9adb -0x9e5b3c587bda9e9689110893b87092133977cb93552ff57971de6088226c0779 -0x8951b691d6204f937ca61c9180fd381e10c7bbd0bb132255a61866ea32ee73e4 -0x6062e65eab801fec9a1ab353b6e7f97e9f707f54fc78e73e09258e57019c705b -0x929e200d6cd978f64c385341fc3ab4a30675dad945c019f87e9fa3ae0912018b -0xa951d1128dea07260c4e9f6d2181ddfb54eb52e91b8df8be5f40fb5a89d97d92 -0xa3ace9ea9b7a3488dedd15f7e7c197b0aaad2224771584f41130e6c334ea2662 -0xf724ae77fdff68aae186af13b35097cebd33bb4140d99863deb69996050beadd -0xeac30b4856f2d616a8f58fb1f1404bf2dd2043705b0e5ecbc3bce00667b7bdb6 -0xd59c5b418b51a0d3098474702323b5ee305123658a20a99153ff9b25e7766d03 -0x601911337cc06c63cd3e436e868228fdfd115a710dc63a43e3cf8faa9799f346 -0x589f7f5a07278e0eabb9e96051e7a52eb166d0c45c09f0513df59390b5405357 -0x7ae1977350dd6e18001c97b08a29522c6487ce2350408b4cc657b0fe72350fea -0xcd480bec7c4870bcf06f8635c48a7c17735f5fac334b536abb3a6a8455c35424 -0xef25464913763ac2c2ccbd1cb1ffb6c1f2fd73ee2fda335d7397e49860be9302 -0xa684b10eaa0efc3cbc193eb062cd324edfd81dd113466fe58b65649c9731877d -0xbb8072f44372fbe68648a25d967da3c5bfcc65e0d18d212d279ea7da17d01d9f -0xebf3ff907d8fa166f08f94cbd2e58c4363897b9901f5256f13831ed052096dd3 -0x0954e200572b240332260b28c2578e65d043890324fb1a9cbf8f70506d195898 -0xe7cb75d9aced624c8251976ecd7fe9ac50e6317ccbf6c00d458b6d7598fdd089 -0xd8778dd76dbf4b0a69be2bb730acfa6a94718e60ba2e88deb985a6cb24edc47b -0xb73542a71895a69b0abb489610384ecef554d4e678011e840e9fdea70d6815f1 -0x99fee61a179146fb227fa3828196a99711e50e65bd80d3f469a8e8d32a80493a -0x89c226878cbaccc19cd467bfe2f73312df1ef2d1f71185c0a3b3468b9c2ebfcc -0x7edc6b58713638d4e9de799fe28dfbe4ffef1baa66b0d53cff69df6779d44519 -0x98bd2266e1cf9197eb3c45a6f1757b873f3058f93f14c2ab1adbf7b872649e8d -0x3d59bcb036430c0ae9aca6d31809647e8cb0535e60c23ca03bc25c22f1ed8f67 -0x064af9843393c3c943c09524d69d08e42ddc1f3fe5fd65c9b49d665e3078e865 -0xd1ea97f1e10f406c8bcec409b1de6fb2829fdaf486bc548bd13f178155c10da3 -0x52a8c6c7a4fad891d1a2d48591cb3c125a09bdab9ddb9c768c15f3f7072b2a34 -0x9dc55accdab149c3b9d2eb9c6bf41d9fc05428fff892652685e3d3b8a6137e8f -0x00c8812be308e4ad8a5ca07c82daf00256700986c9cf85c9b1332e5fc42d9ab3 -0xdf05092bd5e5e03a3d116d8898c56c31a9cf96dd3596d79d87256006b13c77bf -0x23ff491d8c83012857f8a5ae2c6fcc01e353bb4a1e78bfce134e53550b499d4b -0xb9501140777a98e8d52288b7cf4b60074808bf52cf58349823bca675e9a5b0b4 -0x95c882638ca20eaa33ca13b644888ea7fac3a8e07843dff16a444ff5e9a4cd96 -0xc6dbc1db0f34f9693e67fd163a9092a3f8cb216aa6d68ac6cf411af458e18ad0 -0x66a9ce489b780447fb7249c715a6a36254ddd72261e6d4167333a2137410c611 -0xb37c9755b386e7267c428250982e784155caba15649d2d933795fbb4a30c3a14 -0x7039b8a1ae2f88b725f0a645a78b6299b4a61f0aa55ee12057d46266c3fa9a52 -0x9c9b995b529ee5917dab1dc45f35f3f66d4ab60a5c1f5709bf4176708360523a -0x7ecfb5af67068cad30432436cbe1091d514a48757b28546f629e31bedb97bdd1 -0x49581eb3a258a05ec9ba7ddd3c0b541f3f072bda241450a58f7870b71ff9d178 -0x572f93d6142df6fe2da53cc589949d6ce576b8d38477d492eed3b5ec1ea39bb3 -0xebdffd6fdc50e7d7ab5e9ad36dabe2a368e66f77ceb7b3563ed30edb866a9510 -0x8f27f7a37d34af37d47015217790cf90741163283e773ceb27b3792db30df955 -0xabe8f3fffe22e039cc04f4ce55cba47de7e7b1f5d710840b44eaeb2d0015a299 -0x9eade6fde539f7a05b5f310258bd96a3317c4e3c610cd24312d97cf754dacd7a -0x9fd3bf56aec3f4fc919e75187892e47334755774b5a3b10cb42c8908056722ea -0x4c78f5480aef31725e17c0e1387b4b80b93f1dea3ed18f79a8a5da4a93da4ed9 -0x5b83b125f5d9aef557d5a3fbbceee8bcbd93fa66591332d57d057fc7bcc06e86 -0xc5236572f598c181834303fd8d655fc210ac1f3b697d704313f2c301007a943a -0xec20c1808555f88a19fb04fec2444caea9ca243e16eeb4cbb8a0c0934e9879aa -0x26e31981092b852f4a43e1b76da0d20880c6a34d2a929532a6032d0e4d2d9fee -0x8aab7c3aeded30d173ab5499330f0216bffb628030ed231ca1bf63ef892ee5a1 -0x5101f904e8f554d232c8a9e935300d8adcde4a0abef58e3192dbd4256cc90fc3 -0xf4d923f61f2fa047df7f00f2a000ab16600335d38af36d139c1c54443aba7642 -0xb4a35d11ae277b51a868263229c9d77652ec2ac6d0b673b9562ca6eb6c413bc8 -0x2eb8890238a3a63d687ba6281c24fd96b69c413af835f512b17a3477e32410ca -0x48dfed53a49953163475c6779337b6fc16966e8276ea1454b636a29ffae04474 -0x28ada8b48ead68c5124f17bcbdfc96f2e1bc563f70537f2ba6049ff935f8e0cc -0x5e5188b4ce8e1fa0665bbf95c3c40a24dda936be31a3e74312642a55f37b68b2 -0x2518b134bcf36d581e5baf48cddd1dc86b051a8a325acd880ce6d215d0487b85 -0x2976cbfcf7cacf87054d72f9e66f0306f0a4369eb1f8e9048776b6ee62a916ed -0x2961d256cdc1745069e083afed71184cb16e7338c97df5541b060194ce9ccd6f -0x54131159b46525cea3599735fd07705dd2ad9afa1165449e31fe053e0302d21a -0xe434dcf070d7b277add8de1e6d267204e5e4b0c60bc19f2164f68d2cb62279be -0xf8e399da3d0b4d6a0efb9e201e6c1b0bccc8eca30e9cbbd1c3c484e2108e0234 -0xe6864792ce3be9c2ba477cd058864bee31974307b7ac3039d5357f6fa523554d -0x111a7210394b104c7c45ed78786edc4c4501ea73933f5c60ab1e0bf797024f76 -0x9a5c2cecbbddbbb7bc62b4c25787fa7dd4673497c5053f8418c93507a873e04f -0x298bb462e5a7b88a6617ac8c2ff6467d58f3c21037392ff0b86c555957527608 -0x71e8bac9ca9d8d4e6747932af02787e330af42f5f93358646e5bb7676ba8e9e6 -0xd0d822a3aed2df5816b1b8d998b7b7e6a597111b99b04c6f98b2b7abdd82870c -0x58d5905ac6f6a4694f5e5fdfbf90134a007f894e5c459d5b79e5a28cb8e3dfe4 -0xd1b676a901171bfd67266790c07cc534ca41f6abf87ff2fdad71bba4e64ded63 -0xb32b10d73549af6eee791c22560f561eb02862189dbe4f0319610b8aa3e55581 -0x45d29db25aef14760846ebda4f1df7f01543db41ee8a239bcf60b7981c64521c -0xcd6d95db4a7626ba75ea019b40007961a9c8e1517ce58a6ec07fac354e92e5e3 -0x3f41fe9fb11daceb9869829881569a4c2f71e2e02db3eaebf3f8b1f4e9f43f2c -0x0132a08cf0a38070227f7af543613b94dcc6b8640693d479ef61c994fc0492ff -0x31a296a59a1e7e8f209fe3a105c02cf8efc571a27540d512e36cda4e7fe8c5b7 -0x9e7c993dcded2f4269a89a1d1aa86100e5125d29d7dc4fcb3338d709e6930163 -0xfe42b527526e72988e620b90be2a7aa7a51ed9414068e181409038c4f3e67422 -0xbef348d039d9bf8ba03c1a8fa2b7b7b527623bc5ba1a4ef9573a297e4f3efc8a -0xfe467d11ab873ebc50d58e0fe60bddef18fd882d2ff2964ab4c133c6d8039992 -0x144158e1ab4c5df4555b43ffad76e8b760af35b0e1f38177041d79713c6e8905 -0x01c7b1adb4652e0f7c6fab57c61ab3e6593975c7d63b7721e3ee766e329549dc -0x975e098464f6a54c1d123d94ac85f61a831ecb6fae387ba44360bb624009f413 -0x20bead610091dd9d25a519f6a5d05b52162c6dabcb4d6fda95c87828e49a5b1c -0xfb11758b424b39429a1a16bbb671f4640c2c4465e1951c0f6e3746175fae2b87 -0x9a49d4e51526528f36e9671a1c0b589832de0d67cd2ae2a9a768e13869147b51 -0xf2adc258ad3b2c7d5e8fd33afc4ab7ed7b4fe5fc68676745652fb8a7391fc023 -0xa50d7550209c3a1bb85ae452b3df6d9c8e30faa72d7d6f79db5e2f9ff3faa0ae -0xdda7bb7f10200d68141f848e1297b5013006cb9d8bdbfccf429c8261f986ab67 -0xac2decbceaa2643dbe909fbbccf01c493551f5175693415569e52308f35e3f38 -0x6df827c619760aa5bfca93e5d4e45256ee8c7ecf73cfbeec599fe7ca01563467 -0x69c22bb6434cbe4f82706e6b6565fba958baa62fb33a5b99799efb9b309018f4 -0x250cf950883437e75ba68f25c0c8aac45b037fa5db5c39e6939cfe5e0ac8c1b9 -0xfe82a27097cda350e8813273d67e5b65aaf71d1006f0c8373f7e82a807986049 -0xbe686769dd6828da3376c0c741fe63ca6187feb7cc20f578f92c77287220f16c -0x1098bb051ad83c4b6b6811515c6ba6a01114340a17b3bcbf136c885daa87f2be -0xed0c1520715f23271280177e035aac16a23b75d7f05cdd282f33550d9042547a -0xe4e1c78d8f66371d2bddfee865e25432230fe4e267a442dcaf14b87375084319 -0xdcc8453dff5207b2d655fca86ddf3a68a3f902a0159d7317b5259859b20371ac -0x4fc07fb7ac9bf1465184bc2001febe06444ab9ba980068853c422d2ce25507b7 -0x9c231e75aad8f96be3b7f0c7834590c840e899eb28d3d3c2e50c660ca34c333c -0x84ab8e7aa08a989b4b7fddca034bbc6875ec120757d53bf7cd2c4bba66ede629 -0xe4b633a1cb83821c03bbfd4f980a9f5775aea2fd9f304e607ba82f5834361692 -0xb87d4f01580b37de34c71a77b3599cf85d3d45cd33f1de4523712bc2623a0f95 -0x042cbdd524e0e43f71a80f2931122b61a1a9d0a4066bbcec731aff378ee29849 -0x08129d8028c75e1f95909e58a9ad8abb4adce17a8b7f207a0eabaeddd882b8ca -0xc33d2c471701bf5066367e5f1474184dc6671b6e3d14d80ff44ddc587167913f -0xa8f9e3bcc73d12ac5d23b920a69fdb0f1a285c3387cf369bc6c16b191fed2054 -0x2e3d8978f2238483e6500c312244b6b2d9cde3bd39e1ac842245e74ebd30e891 -0x9dd129bcc20bf598087f988192dc8b6675f729d113391691afcb0c9307736fd5 -0x66920d1981843d48986367c9ac2499fea8f1a5f10afa12cb56eb4c967b61a90b -0x12feb63b37e54db407a5bd4058f8d99ca5ea9ff3c9a23eafd8a16d984291000d -0x890d28d31f6bc63d9f56f38e8a3f41bb5c0b0d1f7dade2936fb80d389ad29ce2 -0x615775fcaa1d80ddee79539c3c85dc9b3ceffe5f519df80cc2945e7e3758b5d6 -0x9822f1989376a3de59880ad42363344e6c8aa3bfe1a5097156468d9667f78a6a -0xbf62765d056a8287876a4607d8c546841c1a5ac8edb3750c4a9b39d4fc5fdbd6 -0xd21f65d88f240aa5c93e64a88498ab5218dee2a83456f1f2c55308b4f783be2a -0xb4f4da2131c222d7e581fc6a2683b918eb155fb71dd352852e258cacb46f97d7 -0xc4edc142f94478f9995fab79a29911b963126df437f12af46d01d79cc8accb26 -0x7269ce4279cee1288e3ee701ba14404e542c0150010ed9f8f29f79c32cb6cfe0 -0x20aca37effc18801ccae3c9ebaab888aacb1ae1c6725268cb28bf6633064d633 -0x34a76139b7827263c97f83241fc6228c03c7040f0cdeedfd950a5be9f54a23f1 -0xed53664537dca1f9dc6e7a419646c717d4d46477b08d1ff4fe9a82b43070ee25 -0x1ccb664433ae93bda8d32922a9091d8e6371b65debc625dbc7264bfebb60e67e -0xae3cfa5ae8996ed8ebdb9e66dd18922fe45fcb71d6f821f7b826a9aec58ac8d6 -0xf0ceadf5ac9090a9242c4405ed765c321e9a7013c93c68a363eace0cca58d900 -0x4273d7450d3291e619d9606a13c98c1cc814b8607f1700eb9b312734f538a86b -0x68899a73d5d9979a6b0d66e50287394623ba1e3f80bcb2342eea8699040cbaa1 -0xb1d7a4b19af797547f18e6bbf42fc681c308b8fd97e2af1292a6fe341ed053f1 -0xc73df3e2270e0857e60dff624cd01038db1b16e58927e2ca62f7e62a4a1ebf00 -0xf88252d75a91a83d7579e1af742b8ca28fd2de88bd2244b484cececbc3c7195c -0x0c163f8448c168ca68da31a8657b563207688ddd4aeaf38e2874eebd795c12f6 -0xcf588e7e2ff803d67ccb69c4b38882030d62dcfc8b29101d4dc9720c9325d8ea -0x7e9a3186c7fc772f555b6deac2fc32e66a5f0cf837bb3bb49b39dd85744118c3 -0x16e2bf9093a3a10dcbd896a3d9dae465988208df2af624a29bafadeee3124d60 -0xaeb99eca8b873252983c2fa234846f7a930a9073511bf6b06a87a340303019bd -0x33424063721511de337e8cadb57bed0d88612cdba75d483011608cb952c696eb -0x89f47f69b57798a8f0ade643befd69beca85c0775e97e7c356b70c252a4003f7 -0x0657ff24b013bca1f212c78f6861abe62ce830b722c90efb27e50b80b9d4a945 -0x39e3f29bec3a5661e075416ca04d15fdeee0f1b571f971b706752c70c1b90021 -0x12180795c6ed1e1324e277ecf3625128a065544ea4ad4efcffcb3578e5242cb4 -0xe36daebcab8e8a88ccddba6ca7cd257e90df0f4c128b6bbdcba053dc8130f355 -0xf3f4c4293dc09cc6dc51b6b73bdef44cf2c1f6df3e876009f96f2c3cbda19aa0 -0x8510a16f01dbf07b748c4b0256fe44b0bfe13b5494a2eb7f297c1cb4156f1611 -0xfc19d0ba691a11a852bc95d8284f07ea5f9b283958f744dd11f1f0dd1e22daa6 -0x320984ce29896ea2baecc57e68cc892645461576f2ab330f8d7056b895390ad7 -0xb098ce654486b946da0d2b48437722620d3698998246659df7fbed14d5ca4d18 -0xfcd4ce246256b21ac0ad911ac545a0dfb1e56e08be8345a89775642e7f41af11 -0x419afe3630981fff4cff889414aa45fd8edfcccd3ef39ee8abd3a2a131c31295 -0xefc1247fc1537a08de71458428ff476d2ae463bd0f1afd44d9b1a5af2fa894ca -0x14455b0911d3a29291f239a5ef927056585db42e02ab8d05d5653f2c55ebf2e2 -0x5856d60b16352105de2d03ee1044d98c2768b738e6b5f41cc8bae1104aaa132d -0x5716f2e42e06eec6b1697cfd86a9d686444e2ac27054a29db80c9afcaebc09f5 -0x6fa8bdb66fab2c2b63a3316384786747124c06a32c06e0327fa50b8573e804a3 -0x88691cdceabd7210b72384710ff2cb38ac231abffbfa4ac17f346b78e5e0b79e -0x9d9854f2c121aff891dc771844519e8b07379c6f7804b3422774cecb1db2717c -0xd662b54ccf30cc882cb944d39c80875693c8c4f9ea6f1fa8d204819b219bd954 -0x5f6145e3d1cb9747c8409317b20fa04470c34f1b34f060205d047d9ced6792d8 -0x80f290da5c96b31d34e5a9e7e21049f0c78e136190858a2132c80bc3b7ae5320 -0x6d2ad8f4f5cad1fdd49b437ef93aa63773dd53f0db0df7ae0f4d95166f0b9d7f -0xcd8ad57dfbfacfa6fb922bf380c3aa1b3fd731b6d72f9df3632cf48c5099cc3b -0xd0204914e344249dec11b072217cd3fac5069ee98003773615c59934619b523a -0xa81cb6f3fdd1f05257dcd72e29146d1a8a4a695e352a55bc400ec36da1fcb951 -0x8439f36a6577e10dd981228ae6e2642c565f659b7aa6e70a1647f7fc8ff83566 -0x3c8a467f5fce6aa6c38eb6e4440a4a3b48852dcb7f75804aa107cf6c6845e124 -0xf59f714a80cf2c1e94212929ec7f42caad40f0551bcfddc1e9aa22e876752ac9 -0xe6680308e1d5b6d90f577bd3fd36e0c6c3d1cf634d57a21bec45afaba0fa16d4 -0x9b8717c9914030d96830c71aad50e71f9ab8b16fc4abbcf81f218d0861058aa7 -0xbdd43e812a98851c9922b8fa85d1072400f2c40a1b2503729961c59d2c7943ba -0xa0f6840acc217d627888c37677fbe7eb7f9438468863416a8d9df58789e7a329 -0x30035240f657408a67de158f568f61a48bb95517b4c0c170c75c12311d14c7a4 -0x0c70869f14498b71a5aa5e8ccc1c97f406490bba73f708ece79480f4b49a1466 -0x7c78cb165511e2663026c832ca1b3ee51aa94a59c52801fb4a43a6fe988c4f24 -0xb2025958ed48fb254932d2cc0e58a76d7d5c91c3be58c9e2cf668b830223047c -0x150ab13045b6748650e126efe87e6fae634ca7d827862fdcf31efc6436641d18 -0x22904f06351b06b583bd5d4432a570b575b82e173a3b11b3f45596ea41a52f43 -0xe5ad4ffa45884e08432b923c068838bd07225ce7fb0505879b4770cac9741c8c -0xe478e65bb96c74dc7e9030b24fdbc5711f3fa8b9dec020e1ff649931e42f99fd -0x0b14b7ea6c2903651aeead07b0163be412598de62d8382f5815b46e96ba36941 -0xfeb5dd37156c918360923e28d301ee5b395e62b88a98d08e7ce3880127c42966 -0x7ca183db2ffb87b00cf964a58cf52c1aec2e5728fdafab0e588aead65eef5cf1 -0x83a58d8dac6715073bfbcfa3ce1064322bb0e8194dcef4861a96a7a5f734f6a1 -0x2deecd7111553b522541a8ea2469d5ed4800432410d349b6126d62a7ea46b6cc -0x204c66e164fcebe67ffd485c2aa72ba1cc06fdb384bca7189ade40a5acb8bb46 -0xff593a25da58beb4cd97c8225de369d1ea576fe99a7e8f2c5e2bb319b54e6bcf -0xce9b67b5bcfbcf941cc2446a22bdfb3bf8a7080a2974765ba7b8eaad2220663d -0xcf373c728f58ba35bf22663f7909d2b4666fc9e78d19c345b52bf573c83a7797 -0x28f58776b5ba50c4c2bd23375054490d48d4f91a1176bca32e8b0312432f4640 -0xa3347b4b7b4cb7104abc10d3ef1fc1b6e9ae903503e31341cc85279aceedff83 -0xe9b3bbdc64fec7598d3238ed248ea6585e0f57743c99686540a0994f9375736f -0x81fad1b8de489a7846bf2d83bbd9cd928403c7f4298a29eab9b8bd2f267db309 -0xcb401df9ac29756ba68f29cdb1edc555ffe0dceba04506d936b3f3477d2d462a -0xe0474f4f9129cccfc863702c21419123b05ec77bc6d8a91aadb07dd67ffd4a05 -0x83d311c6fa00157d093693e9c2e7041ecab3816ebbd5190ba88136c33fa166ff -0x30c7901cf72e39193b4a365f97eb0bab21f68b52136b51cd69d5a6ca43b60434 -0x9864ee2b0a138d7a2b881cd9eda3f92d004ace72d80faa037395e7f1abefaf96 -0x4797b22db8c0ec4e748f24a382aaf739ca6c38cd8852e3d7ab8c9f4ddf7b017d -0x34292e8b9494438c79bb8db8ba4b76316ae50e67086b8ae0cb5d27394d86c3fe -0x1493179b9a3b25854bc72762b43757e4b956762ea8af6da49cdbf2823230eb2e -0xd9c1ed58f804cfca379cbbc5701819232e6a6ba5aae50a7fa1ba4d25389c7fce -0xcf712eb9f1ba5ea4ddff07b1b35fa9bcdbe74077331e999c99d50b802d2e4c37 -0xa46e5e82a2110b0a9d3fbee8484e4941ae9075c7cf48b68bbba3311d08d1b884 -0x022906d513e362e4f69e1a008717f5af864ac2c4eb701d12d1d4d44cdcc2ed95 -0xe49653d0ddc8a55f40ecf5ea8a8509d82f4f283a4d99d93d932dcdcc7274b773 -0xb8c051cc9d7e65dc5fd2812815909e5f376cabc4f38c4aaff46548f0f97060fe -0x95c9ee84adbc6be9f5a3b8add2a2e5ef5ebdc86092568ad9b9457d86a1b502bf -0x9de172a92fce3395f7e087ff10bd5c656e41c22babdc4acc6a3ea4df970829c6 -0xe1ada0c208ea12fbedca7f7ab00fff8969b60bcc0dc94d27d564ac1b43fc34dc -0x9eb24b9668ebab3142baf71a23d0ea08bb413b3c1874d61bdc52ba0aa15fd4ad -0xccd62dbc687e781c4a79cc79ec02fd16053e1b81ef2ea5185a40daeb0ca4a9ed -0x7eaf7d48e6bd626fa3ccf308a88b308d5aa30360093b13214346cf6067b6cd26 -0x1cdf2927ca8a6f5ac19b46541b31bca384a499423136ec28538e3128773c785a -0x61c56f8451ae0202f72ba832d9219d529ab1912641e54d1058c9c60538073a80 -0x96d8466f57e3a962c280a49eb8effe8c4eb825b91d58345d2b06b94883b86e96 -0xf0160d64bf2a822755e4fbc57c393a47c6d848a28243325120cb2bd4c0639ab7 -0x2bc7831bb2407155302a8b475631c04a99d3a91b58848d986efa4f86be81ce8d -0xe9ebecf630fea8347066ca1236f1cc1129182ca2b0bd9d9b675b3c090de9442a -0x4a2519ac657306a88883367a02df0cc30fd3390ef2093cfb248d4f8d8d4569a9 -0x2e0539beb4dc1b917002eb5ee890c31410b3d06930d327c2afbc0b7cba2a0c7d -0x62551378bb0cf75defcb1de7a571067e3dc50715bc19fbceeb931e5f22387f52 -0xb22c62b274a755c438e3780650f831fc68c81820106a3d5f19f772b7eddc049b -0xbf173feb3548705a1338d01e96f801ad3339256f1f58965eb4b81021ce19485a -0x20fc323f58769d8a7bafb3c4de2c3cc05cb4b1a7cb2b4162dfcd12be309c0dcd -0x4cf8b8488adfb0c1a0ae4b91ecbdc213d638ed709fb031a2543403a65cf05738 -0x89f652a4d6269e054e9633653752fd8f98b435e2fc26e0569382d2070817c849 -0x2eae6ae059114d31caa39ece8af8e51d6153ec3fe123b7ed46784b8dd7057ff9 -0xf827e634da6f6b50b1267a59f111a0f99f60281643cf09f6bacfffa31db5a927 -0x427ee9182a2952d2e7fc9e27fe5a20f00465e21e6341d61f75288e66b93cf805 -0x55d5f2e2dedb99b5e80caff98a5ae5021ac59ce25042a421e71eb2dd2bdf903e -0x99a662635d1dc9730c15aaacca60c57493962e9bedf93c3f0c6c52cccdc5d519 -0xddc6ad98cf668672f7d7e52a743f19db09df09e861563a73df5fd41fafe4175d -0x6f116ea4a8533390d6d7ff867f80110d864fd387900b4b12cff3b6a5164c7060 -0x6c3e91072d24527bec934dcb409aa8f9f966f6ca55be146fc9790d19f5778a58 -0x7be650e7b68257a34913e69854440b5b79db4d4bb5048cd0b7b5eaae1006e031 -0xce6f9f2d8b31bf16e9bf3be7122c693a81734225e7f0c1cad064373729ade25c -0xce457a831833cfa72656ebae14e83d8023de02ec3df4a948117f61c791ca4348 -0xee6b9fa3ae2852085470e021cd6daca3940274014308600a4d5a99fde5b01528 -0xb699a6d405a65b618206155128742163c890e03d4e112727e8f5a073b72e8099 -0x597cce98172d4e015c25135eb693ae3acb14369e0c0adf132d4dd6064039d407 -0x4d2d8e6bc3a735abf483a2b4fd11b22d9d3d63453702ce64858bb58285c5dc41 -0x0af772b0008f09b2b73379f87c9e038dd90594282816114c7a368f2d12656624 -0x581e266f222993d073000a839458b1aa612b671a4ddd6d564ef4416c34db36e4 -0xcef2dfc0380c5935e908a8bd11599e916760eef8f551b5f44ae57ae6822fef9c -0x26d05b138dc66f2bddbffc41618059659c174f3f9bb4fa7a31a9e5e9d84f385e -0x0f3f48f584a0b6d52b8041843906a1042ca89185a44e98338f51fd54b595d70f -0x26204e1aa15bcd139af17144acea347b4bf981e3481039413ec1619ce4677162 -0x6b43f27edfe4e03d806542fef00ae5024a093403d87a69812951dcab895863ea -0x46536d3999027c4b0f270514b3bc4a12b2635efb99b7705edc1704b6cbfaf859 -0x738726f685aeee51d541ba12a9fb21cc34e34cc90e3368e21998d9fa96c259af -0x9adb57faa7e7ec58b745c9d87baf7504d45094eb8057bbf4151550ab45910e96 -0xad508a06351f392f8374073e03d2b78561b79218226681c41abb63f7afada03b -0x5ae31f963d6ff6f3a1ce0ed6a52b3a2537deb5c0ecb91e2941d1cae74c2dfd43 -0x1d3c5021b5051a69b5c15e0ceb66aa1746ad941801e960af540f9f3dcc589045 -0x9a44ebf5a3d7c6b5b4b339ff690bd074382fc9c6e7200c5434485aa0fb0b72ab -0x8d9ec956207610713eae76bf9830a21d22aa96049bd664482a05441e7bad1d45 -0x614593a8bb8724281a6f9447d994ab54f50c1ec9efa8ac9a4a2cb9caa8034f84 -0xc9b344a0d51f15c225f2f5fd337e48d6fd1ed7297cca7dce69e49fbd5da5b607 -0x79246875315892163616479eb1fa3d42cbb659d6a241200946a9d069f2e67dca -0x8c1a380d8cc7e5e541d87c0b016cc50ed4e658ec726016a2853ae1d7a1c52106 -0x1fbefc2bf546093b1656826666ff0383c875615941f5def672f363df882c6fd7 -0xa9a3fb39261611ac383d9e6659f73771103b7ec97d8237b4f0b5cccf9330867f -0x959dcad9830bc1b44d151bd64fea746a36aa4944b4e945bfb1673d1f84c5a070 -0xfda5e13d1ced4ca286c85efe0a22bbff2b2343e2ad2559d13322840ee4af05b2 -0xbd34560653ac42a5552a742ef37ea1db3c928961e62db215d4ca1af9345d57f4 -0xdb290fa01f49bb1bd994516b4b10ba5ec1d361bd4fc49aa59f73d0e786cf6df2 -0x21975b9fd6a1514ada987f7a1747ffc18a9afd512206b54d46aa73b594d7f3c3 -0x3c253ed5fa0ad50a5d254fc52db2d9a2b43760823ea025041ce368a718433921 -0x4a4bdcc2acdc4e29bb7f0c33bd38438a55022eef54c2e6884bda129110f7e626 -0xf81627e374057226e0419c37b47eed124c3c713d6a515bfde8b96cb206bda872 -0x22071ff8667bf875a0e8cf5e6fe5af37f33760cfd18c7dc3479c2870760c6a90 -0x01433bcd73a05641b26b8d6455a9e72df07e5e1c56f08eba5d82e258bd8ca24a -0xf6baa6fcee1dc12a11600bf8ff0a7915716f9fd90cd15e6ea35d6447e670a28a -0x1a773568cc40af37c5e15854f251fd9a3704479c2463481c36c7d259611380a8 -0x7e456c5f3513cdfeefd510242929fd376bffabce50f03488dfcf8e28a1c05952 -0x2bc715742875e67fc2b2775a13c7b8b4061fd058023e5af428cac4aaec331f9b -0x164c6df1ca067ae53a5464b0846a3bcc27eec0c56a07b2d2108d18b401454df5 -0xeaf1276aec8023557b601e0062edce725466d27887ff847a2f0ced9a45398789 -0x6af9d9ae0605404a794894081071076f864c407cbcdbf76cb05b24cf276d4faa -0xe5210102315da1a9419ae1e7f862602ed54b5b62420df2a788418169e9519fa0 -0x895f258a4f2d71e93a510b78b0fbc1d4eaab8dcc9562657e1421b0479fd746a8 -0x59adc334352d08c7aa1f77b7adc4bb0ec9d8e6c85cfe0a21787c22fd5482a36f -0x3f2b9fb950c4a4c5319e8e9c0f1758feed90c8e75234794a4da47cddbd385fb0 -0xa99046bc4ac22bad370c74b5bac5c93e49579c3f54bd737da5394408c6334646 -0x0f00d1b5ebbf26defed4c6995788db20696bec6f7a80d183eaaba27aebe013a7 -0x83f56381696a42a86f0f60f022ce728808f89678e904b0efa173205a3400afbc -0x3e60dadc7051b97363f56390a55de570631be5d58b8a0a16639d298d3b9d82c4 -0xe3ea4be162fac50b9fa96b2fabb728a1aa5f5c75fac49e564db686e9fa567d1d -0xbec91f3edff02370678456b865cfb5094e77225633f533621d7cddd49de41f34 -0x7bdb02e6df800b02c52d8ab731093428744f94539967053e369c30118fa30d66 -0xdce50d3570514b407a8d679d05b120e37bc03f1ee39b4e74a2e34803e55fcbf2 -0xe1803f6318860f914a7954a655f441b4884a8061e2b9719fefed737a96c8be0c -0xb352b34c01964775b508a3c7e60f8dbc8d56e157ac35886b1408ddc0dba89778 -0x2b602a12597d0e5715ba9e5ae817fa4c710ba7343ad2afd0da6f510b9192ef4f -0x8febc92a513a5a06c7f005f2fa34872a7e7033a87afdf0a5ec8805da86d5e81e -0x13f379e185b7ef36b607ed65d96b12499577a9976511d0e0df7c24decc77599d -0x56a63cc617607553b9c8ef983200da4c62c0acee0276e2f35db55d76995b262d -0x694bdf23aff0db7b17321a17e5dfd276b97a55f44cdc3f4ff64748a0b38ffb0c -0x1ad5c7ab058a485e1cfc120b76ba345270851d351c8ad0b2f1519972f882220f -0x0ad0fb8c9bb0243e7ccc4f33098fb48aad59853ea6120d86f01924af93735b31 -0x37a5f8fcea87de1a7579f5a3ad3537855f96ba391fa6c76d661180eef7793c24 -0x0834090a3d1bc288484a67a2e246ed0f8716fac86f60eb04a5ebbd3fa1611065 -0x9bd421ef7a125dfdbda2796caa554f0491345112e52dc0ca074e4b962312a477 -0x1c4ec1f096b227739aa2bf2937ad1e68b80161bba6fe13f5e816623241cc1509 -0x1542663acee0cb429bb66626cba5d02722e1261208e27651bf639ea298ca0e92 -0x8d0e7944bf6facf92d48fa9f33a7d26694cf6d086fcde015101e7fb05a3d7221 -0xecac0826fb1f49817ae913511784aa20f82bd9f9c3f9fefbd8285a80e08e2bcc -0x9d2ed474f385a34a3ae4fa5c1f228ef8281edc4ec615ae9b576987063ef3974c -0xcbbdd4fafb7de196c399b41df06ea254b4222acfb77d20c588f9cfbe1f1ff13b -0x3cd921da3d39981f6951705d9c33661d80554cbdb099b7d5540313c42f3d8d44 -0xbd7a7f041d84ab31732c0836cd323188ac4080cde57ffcb26cc7094ba33b0abb -0x6828e394bf8b96df52b334d0aa37c9db94810b7b69d6e98d9bcf484076e1a258 -0x60588033b9043d04c58327fc9d69d801f84ca49b43d31f20053fc4e67ca153d1 -0x90ad84b3d64696c468038a46bed0bde85a25271525696d4bd7d6e5a33c0029bc -0x0b173a5d69f1e6651b8e9a3523656c6a0d123cf8323c1f1b2e83209be7fe9afc -0x41d482246473f1fd2312c4f134001f0cf316364d6ccdeb10014b51ba999ba908 -0x1f5bea1cc44baa7ef5b8f3a11fd6b83de35b428cd1659415dd2710c6fe9078a6 -0xf36765457debf572c91f86e207fb8175324bf62e3577c511a04a1b5a3ee573b8 -0xcfe64253423c0e98db35c6523f37b4f6e4f4039487259cbf9ffc0a1df5009d26 -0x7cd8e9a6fb875255eba0305b7d97f89a5194aa2a3c25a6af6b252099af88702f -0x76a3d1672de3cac9c2823e6c03cbc589a1ef90b01962a211e234f5d7be37cd72 -0xd772db0f9961132c53461dfcc19665717e55f1fbdfce7810dd45f5a0be447846 -0x25bf1926b7dc01fee41ac770d683a58f35f247aab7fd898b937103673da5e75b -0x3a782a14cf85a3daa9667b578c458cc0780541f0057bcef6a87730f47e56c199 -0x403a74eecf050596fdad7a1750d0d2e3833ee37ad25b6ac690d6519d5204c63e -0x3cbb32a40969e93732feeaab6f827698c6a83a62dc73b73c12ab726f430e3740 -0xe9942099df35a6dd1cd6e42e216caf6bd4fd483073b1926f5a56650e99519d1c -0x65a9f6a9ad456f09187aaaabdb42848024880af9111442ac29336af5169ac66c -0x24b35681b38fac0af4d8a115429bb345e74d17ab9add7a1f51178fe36f245681 -0xb07256750077cc3096880e59a6d454956cace747f506223dfb5c889f61b1ecad -0x6e63044ef68e489f7dc566b700e821cc67962466b09435d8a1ca52308966d73b -0x349b5c7aad3e9cce2f178f58374f091f401450c31f38dadf20daedcbcfd1b6c0 -0x29e21096c874300119a249fd90ab6c2a3f404d74aad04e5758b7a97c82e10a75 -0x334cf9d6233538ef2a6cd587a89f4832168fb07c8a30f13399101b835118ed08 -0xf4581186f3e74656ac298fab0a7bcecf357edb5752a16f8a452e81f6ec3503a8 -0x5650979860191b8fe8c771562803728722df8f445444df3e2c77283760aee42b -0xefa010b16cdafd5e9d6903daec8bbb8417977e2b6f0fd3e32b0093f04735fdc2 -0x04ab12ec533c1817ed163220404019ecd44728d705d37c981c223fe229d884b5 -0x0b1da60abd261b6943124d11685cfe61f3b99113d9065c1bdb3f933c8977d5af -0xa2fe116b1cac0c61bfa8199a6216e27d07ce0e092a96e2cb8cd37afc3dfc0551 -0x6415d5b57015e65568010ef2fcc947fe41c7efb4db46f8ef87640446a519fc31 -0x12a06d8567658fc8dc1b19618494f65f532e5b4c3d388ac4ca2db763997350dd -0x4a8091dd1bfde8e03d52dc709b26aa582bb11743bb933026b6a4a9f67fd3c05e -0x15027207205447c81be76b6d6f4d1b4dd58ab210b26c1fb474f070655e9d3c41 -0x2a840cf4a8702428b74ffbaa4c8e8f8899b5fc36d3e6409f167d1faccba0c8c9 -0x8246631501f1ec3c0e7c05406bdee8317cfcacecbdf2071181a9b8db8de885d9 -0xf599d5274b0d9da024ce30ad2ac8f98e7a4d0e62216b771c5a8eec21d28f598f -0xc6d1b9d6d6fddfb49e003108bfb64a129fae6f9ace66ccac47af5d625facc84c -0x90035126c74be3dbaeccea88b86fa22645ed1d0f455b9757988fe25a02c8f9fc -0x851eedd2ec7fc5bd2ee5f781c01697d3cdf7f7774c59a7fa6c3e8b866553af0a -0xb175d5f7e337dde98aac1ccb50593fe23425a4a72f4dee6b7c1df9664f1750c2 -0x12a183e0d217c1504f1471210550ab3d0867e9969ca91af11f42b3ae4388c2c8 -0x99e1b75e0d293a14bea58c9240e785a1b959888fce97dab3bcba99c02b495fdc -0x1da65348b7b5a39f0c28937b3c9456cda1f4c34d40cbdc3207922ca80197c137 -0x439c51177fbca83a41ea6792694f8c6b9941f2cc125bd71b79683589223cba53 -0x0c83a4be3f65ebb24ce2f44873168848b8b26deca62e1ce035cf20d2790b9808 -0x9f4a7d81fc61f8e3f11dc85bc8617cca92614d95ef3e41aa1f68c0bd85e88a2e -0x277f9fd8fa50cf0815b9c763615c1f7aeaff39708d58cd7d81f5f5802ee1eff3 -0xa1be271a22402f52e61ad83c33e78455ff125be4f4dcc2da6e70494b956859ad -0xe519404b6cf3a4accbb651b7b67fdefdae26aa5ed5f65d67024f48b8fcdabda1 -0xa0e6ba0da2ae5fb0a77f773887068004d0149f58e61441840ddcb7ac7af7fb63 -0xd9e78e2d43ef05724ad1dc26704365e1787460b90c52162ff382844f55c3bde4 -0xfa194c412687e54cbf3eceaf5e54dc793fd2cae17cf45246bfee71b952134c48 -0x806459e7d64f1934c3788615ad7e64c3349952ef1a599315f5349faa3477966b -0x9b0d6269c5dfd9f6214673f66b41441dcc05b9c91ee13063e4237dc7a5e8e50a -0x5ff7b29576ae70b42c9e9c4c353a4a8265c60ae47dbed22cf7b8a4eaf740928c -0x428ac376822bd0a812949b116bc3100c665b56dca87308e80fdd76d2363eb1d6 -0x7c4bb87b14f5f79c7325af9a40b83603ae8e3dea9b50ff02cb00ed88e0ea4a1e -0x65018a6f2de6de27686a33b7597cbfc0a5ca8792daa653beda408d8652e8a73c -0xcf06d21b910300c068bc8c82f16dc22aca55d5d74f79fb70b079202d281253f5 -0xcf2905141773601fe24e3b4130f647885e395bf59c59d2793a22c359c0904d11 -0x2bb8f9a572ae34d6ca4fdbc54ef9ce0560b7de390d2fd82449b6227fb785f2ee -0xc0e9c8694fdd287385ba60c8e301d12913adf55d50389f53c1416652f5eea80a -0xbfdd795b39132d65cc0bdb82d85bee2b4b9e1f4b6593790f5ac7915918ca2baf -0x5e548f1ea46842e880cf7e240b65af015c023ae8004a508532517a80ae8c932e -0x2b0d4f28722ae48dd1e035b1ca76a745c197187d667fc228af38d72311ecd70e -0xf6f7bc906f091482ce6cbc57aa4924f72438e222c79731be9e9ed66cf568efa2 -0xc97db96724e4c937fa9cfbd35f490b53daade3d9429f7c38bd4d6a2dafb08d2a -0x1d5cf7800dfc19a56ab048f5681acd7314c0a90e50b1d9c39176942920023a00 -0x38fd02f3da5cd7fecab02082a24c8b85db45fa84f24d73803e468fcd13934f58 -0xa7faca99d61216d1c70075237b7ffd79a209daab7fcf23f487a90e5c2d56b907 -0xdebd856a0d8951e059057f00e3898e6fa45ee20f16fcb7c7f319e1cb65dbddfa -0x428abd8d75520ce98586d07c4a9b465042f3e29ffcf27b299f9187f0d94ac56a -0xeb7fec2e604e43c009824f2b0eac4f5cb3099ac5de9041f41649fd7f96cf414f -0xa84cd938538a1a6fdb1142f5ec8292c31a4b01bbac0aa8290f2c7cfb3685e054 -0x223dee66624ed476420dd93e4159daf4dee8c87a5c2e5852ea59bfe983d9c262 -0x45fea259e5eccd2335c3e1877e47db77a1da787afc7a5b5328ca1e7c8783d666 -0x2dba17519bff9df54a7225f0ebbfe84113fd9babe340514c2f59bd1d98bb7957 -0x5a63b49afca0c7a37fc3d5427b22de457e93b83a06b9482b8473c6d7a5ca533e -0xafbee2b9fec8fa6f20234ad8e5606974d69dd15cc1cf273c03d561ea586ce685 -0xf05046d3bafea826d2f3f74b832d92740d22229b12bea81e9c6a2009894384b4 -0x2689248c4fc6f6fe35c25883bfaf7a88c685ad1d0d886e45df5bf010c5dee4d2 -0x252ceb1c8f46519fce6f87aaa451e4e34dee4c9c9e251d9e2b64863bc13a38a8 -0xeeab116ec369289d6f9e810ad47d686b307f2877596cd549d8907bf0fe4a9b60 -0x1f61b3a2f2a149d51fab508d37bd034e54702fe1abeb98ad61931910c255c6cd -0x22da463e6b933523886a23ebcea695873ebdab27717e45b97ea8d6fa3c1b9f63 -0xf458a32024b5c6f222a843a69c5700048aa0106574f27fede6c6f9a7116c1751 -0x90b3983a3e13841fcedae330a83a64c04c47d1f61c6f8fec4bf1608adbd04ad8 -0xe36521acf06ef0856a39224cc15e38838d79adc6faa80a9a77892c0dfae8a1f3 -0xeaefca3878a5792e6577f998e66b27d91d7f22709e53acde159c056a5f22a78f -0x906715b6ea94a58880db1c0659a9cc5720bbfeb9f094386e7ce9af87170fee43 -0x9f7e704fdecbb3b919912d728b381d777254bc00f8f1207f96f04ff727df0e9f -0x89294e19569bf4cb303dda3c3043540dc64223578b51f374290a9a71a47a0b17 -0x0ff7b5099cc2a1343d3a9df0e6ebedcf562823aea1cbbe7d6a6fe43ee3cf25f7 -0x72b4284a7b1ea3ef6811dbee858bfe0165e319bfe4d5edceffeaaaf32fa9ad55 -0x0d97e9b1c1b770dfabe3839eb62aed43d21853a33576da0ea7fc4074e6577128 -0x0f85a28f07ca26a0cc4602edc157b6289012afbebc7226cbba84b31f8d2387e6 -0x28df7d52b88d41b677eba5205cf28bae809f64e3ebccdd49ffd569f396ddfd0f -0x721f4e80f3ccbaae30a791c8eef27ac36bba9bad062d250050e2dd155c009018 -0x5a639324bffc3f2dc5974ac3fde53fc7d19f997e3f6660d215e91010c6c35e45 -0x77605a5ac5d8bf5726bb89ad75f5519b962047bdbe080c5b5729c2673c19bafc -0xaf9d565c09b2b70c0079f834a9d43d08f00ae206f10929fafaa9319f3b2a1499 -0xefd85d64124f3204d8bee9eca70873a609dff9bc0ad68a40194d08e6c4747aad -0x50baf141ef6dda8bf559e80e4461737017354e31dda3b169a7c27b7699a4f21f -0x11ed8a2daa136ceacece3cbf334d43bdb22cca50f911dee517218ace5aaec625 -0x9c6cc6b45d3f2a389642257b6b064da7daed5b9c530150555288a43f26ed3004 -0x6a25c7459d78a91f70ea4a0bc5693868e376a75bd7440cfdfece15c42c9dac2f -0xbb87ed93abd4e2bdb5ba3914a68650dbdb833ea16bd30cc0de5770c12e55a28d -0x4fc8f6de244f5baee41cff76e95e0da57a1566f66259f21519219a5350f0f663 -0x0834edf916e8ce2f1b155d8567f22c8137e13d21203fd3637f8563ab3400feca -0xeaaa270823cfd8781324fbea5ad94fcf85d186253199b625c67d7cbd4e98e148 -0x509819bec2390fd1173487f99d42d506dd6999b18fcb05293b5a629131525ccb -0xe6321bd3c60ea46afe0cb4809c39b1a9fa34df77f3285bccc973eebe89c88cac -0xfbebc7d3cf4bf23486b71b1d413354bc07d1564c6cd60eaa7ec437abe3b27896 -0xb2de4a77f662689fc4ac32098d7f5f3cf57eb1f088484400b5ba5ab17cc06097 -0x53a51b3f8cbb7ecb9a5ff589afc380976c0b67d92efb55e0f9d4cedd76a923fd -0x8ab2ff92de415f265f9909f56bfb6b47e0a0923be7c36f00a15ec970eb7be555 -0x66b90e81c21ce003e9aa86daa51b473e98974b4be298f91f8c27452871269a33 -0x1e3b0c727d23748e9bf0da4391693bfb264a390404de699a8b274bd271b61e7b -0xe2cdecbbd1a872c8d502fc1fd32abbf13be93c5749a05a92f895038e91d9ea28 -0x18d6d3cd0aa5c39e53ff4ee3d9248948e5fec103a8aa1ab3a8fb927cf3e62ce3 -0x84eec945abb50b04d97c4b73ee4e47dd387ffb93c33c42e10b1795b2aa7733c6 -0x929e0e8bcb57c51472b03a4c8ea90d8c7650570bb71e90ff331af5cea77fb353 -0xe32354f22d825eca34fa297311b64ae9954e41e2b3f9a68c24b6829b2d9825a6 -0xda88c3197c4ca26d97fa079d985aecfad4ff9134172ba9f6046e5fce0ecaf52e -0x2a26636368e43c23c004caf129e50bba7ae7f0d57718de209f8979b089b05197 -0x3d4cc0c0ca326a13efd34c39931fc826635b1b1e0927e34ad7532c407823c301 -0x4646ee909c031fc33da7116c1549439bb9332fe6804db082af93606251e37c64 -0x939fd9f8eb712da42b62a4c45b137b55dd04cd24253d88a5f973dff0c8a7b856 -0xeef96ba7d4fd088878ac61290b4ecc30b570c0e0e605f10e892103b0453d1777 -0x50a0f92289658dcd4e35e555cba83508a7d7db41b9b152666b121b93c491263e -0x51bcf6836cc054c9873cd25b6fa21a7b490ba4bde4f2206e0b98c6f539130ce9 -0x050bc940f2ae6c5da7ec00c43c117262cf549e7ab8642dff6f4c31b104e80936 -0x38847fb6916367fe7f01dad8abdbf5fc083b05d6301b12958291e3c7ae690cee -0x94b7cc5e654d1c6531aac698e2ca6af3ee2f0f5a6e2fe45f29af905ce443c344 -0x3c66f8a4fdf7e6b815a6fca9202ffcaa197c653d7d8912cc5a93bb862ff34230 -0xc82d69488685e0150d7da753761c387d10b317889893950cf71d99167a3077dc -0x6dc875de540c49aa7dbe49d0734c0fb30698f59df3a2f295d349a183173cddf3 -0x01dd9a9fb5ce867b75212b12ec0a8942722ae5687ff2c2800e61e389b5fe1283 -0xc70992525eec206220df1bd614a0f2151c82242c364bb8093f30be5e02394988 -0x7b8d87248fe075238a86656edd565226a18ebb5e531d56981e54ec855bed018d -0xe0025fa996c82c4433fa4083a8a81655f9e8c99fa053cfdbdbf0c661d2bf7a4d -0x48a40fe0eddf4709844541caceb3388dbaa0931d18216fbb8a9e480423f98298 -0xdd76ed180323b055c13604d72219dcba3d133a8b1631729175986c27512a0c13 -0xdd221af79929c12bece944e431a78a98358728aa50711099b2239357a03512fd -0x8f67bbc0433ecceaecada0b296ffbf3ce4a83b82e140e0e591dda64898148a7c -0x0ffb34c829444cfc05586b504c071d25ad2caaa2bc815f0346e429343f882976 -0xd7a307859d353eeafd5c79dd38ac34610ebd55ddc584cf020ddc4141ef5e9c89 -0x737cbd9a8c8df8ae455def924989e03e6f30eabbf0a0e563ae654c11fde1c908 -0x67d5d3a6cadb61067fcc5c8dc85f84d0a6fd5f7bd35f6a1232c9e4c7f005f5a3 -0xb697dba4a59ecada793bcab01b722d9810e2efb279ab340bfc047064ae0bfbbd -0xab5000cc637ebb62b1be80291efc09d176a4659a9713e0c82dac0f502584f98d -0x9727bc69fcd2400c16f2b28440319a759a2ec1c3987b6c4bf2666119f58e0dfc -0xd889c2def74bd7b9bb5a661bb8fe070cfdcef52743c5c33cb5096cbf6ea4bbb9 -0x14d0c4fd9cca8fa9349f2106de0e77387d932b25d29a87f092b2d4af46ac0cc8 -0x34a56bfb9194034d033d6112fc621074651690cab404a7dd30cb58966f112ff8 -0x622901c8695f8845a36f5be9beb0b3ed52f17b6222abe02c5e0a778b6e6f0cf8 -0x279b22d30e9556aec8fe32c96102d83282997bf5703240ce66f7ab998f12b78b -0x03c4bcc9aa17e0c8078c9a36658ac72f9274a34ff82bd3266aa14630415060fe -0x9e8ed1e85d2ec121c735302484f7c3b8759cab2b8da7b5edc08cb340ff65b77a -0x17ed24a17e527a384a8f097a4ea606817bb1fa3e3ad030e36b05bfbc2842f4fc -0xeb51e97226790e357813de99f84c5e0745094a7f31089b100f6e76cdb5e2eb2a -0x11c5b14bec3b5f8ef9c040d16209132a78c3e579714a0e36d4739403c9d9358d -0xc9d6f76947f4438fd536571e8cd26ac97fef41ae771407ea4a5ac5f0dc2139ca -0x5ee85045d014de79a4c4aa469d35432d6f8860cd08946f2d2fdf87b0faeb2f35 -0xb95e9e9f94daa2dca883f7cb73dbad8c5aebbc373861f3a56dfc2ebb002b8f7a -0xc0a6cc3917c1f4583dbd7262f5e239a013077d787a8af10f73913706a1923756 -0x11f461ba45f68f6d644e79da29b2fd9718b0acf12aaba4ddeebb4c180fee91ff -0x53fbca45caf68fd3717554e7a46001f8a650252d5e1731eb54ca897c1d5f86cd -0x94aa967bc00017bd9bc307a2fd72ab8432c4114696fdfe766e369d060aefcd1c -0x84101a64ad3d4b1a7904328c4ab0dcef6eb34ae98afd9e606d89303f9e924efc -0xf4710a09e235a82f72f6286192ded426e322df2d352e0e48cdfea24210e8d2ec -0x1d5c44fa1c5c4d8d8c939e21148dbce920ad9948d68653a4e97ed76005f61e05 -0x24cad33bf048932da67da6df0b8fb97e36786e1ee647859229aa7bc194308081 -0x814c2069fdf0f2076b8e786672be37b8c7b91b2d941184b7e26c0ba234aa2ffd -0x18bd213c4fdcc152795ccee5dce9d24d66602cd927f500e38a2c72d819d75699 -0x4c161582e680d947bfd16e1343c9f3ec8a36e13266d5e10d47ed6cd87cedae72 -0xebac89dcb04b0f5e5b0f791112d88fcf02be349c787d2aa9756a1d3a6696012e -0xce87d0db5dcbda235bc0c41eebfc19d3cbc88b072de968e320e680faa33eb433 -0xaa8a673ce7980e11592bc144610d7f612dd2f79cd9e7916c732d09c4d9eff788 -0x16b2b0cdd5834b2bf27a87588db0c7a7e382da012d4f510214e8ca78c9a459cb -0x1f06e4d3399d3ff2c101d316a7fbc54b5bba63cf7db41e24c4b775560d9bf589 -0xf7b2d0e613fc048a9c826d62769a49c6e6578fc57d4dcfd5739054362097cc8a -0x6aada206c0a42bec5dab3b370caff3e378e7087bbb606cda0fe2bc3e8e106c39 -0xeca0c257ea03f49920c46034f411136799c654e6dcddaca89112ef0df9a0465d -0xa3f667e574a8d1e1e9de6f5e8a9c1efdf890bafe901b187b075a7e2ffea3b5a2 -0x285638106a78245e052c51ea37f18112552d215f8af120ce13aff54953fbde8a -0x52addee538df233a5fd42aaa000768154d0d7403750b0f168f854d6cb15de050 -0x9d791d8e50573e144f714b35ca88168cd79eb213a2cc326cbf4d5afdc95eaec9 -0xea37309ab7cfffba9004a4540c995317bd6e084629b82805465b3188c3de4341 -0x4fd8137d3b5df2dc5b541f41af39b471a92613907ef40e2dff9a526f563e5f03 -0xe807b6928ec6cac46fd7af608119ce7219f344d7953814b9f7f14623fcc310cb -0x76d70e96027e0e6c7c44110cd12816e9041a6aa073d05b77c8c907de57d7a8f5 -0x5d8b77cd34e1eaf86dd2741c1e97c9cd51b6e6f1974fe7ecf6ed59ef5afe2b69 -0x49e840410cfb794ae03c94464d5a522deb0420897377806d74ce05cb21d30f69 -0x6530791e68c0b780dd4b846dd048634ab924c2a9eb61e0e70ed46519bc92d296 -0x0601790132bcce9563f374a79867968ed6c86e06b8023157fb0e34ef53e9940d -0x4556763eb42351e539a9321d8aa65475ca907d7e7f9e0f4686185231049f4ff3 -0x3c99c3e240259d2fadee99140ed42899cd27607ecb621770d4a672101e013785 -0x1e812d6821c3c93c547ab74eb47f2c34cc255c1eb9d3eb0294715343625f0065 -0x58f04cc43be4c474a5f63d3e787721e9ca595d4ac0ae612ac22f05d6817f0573 -0xbcbf22256c1ee9a84d7357c8c69e4d08e644640c3dfff6ca60ad108ffb633faa -0xee711c13d641cfce3ea5c4d12f3aff490386b08d484ec21d1e7304c9b5dc6b7b -0xabb3d463b44e15d7b900322a479e925dadd2ba2f918a9ff6be35f7295c90ff9c -0xcd4045f7c5ee627f75d6b1f36192b84b14ba07a89d0e732f205cfee438c15b13 -0x76f661ba45a0eb34af5dfc09f505a08b030341a679edf1fdefee5098fffac7f0 -0x536607d59d77fa8bbdff9e97ccb0208c92ef128aac4d06938e5ea7a11b04fa02 -0xb884a8354c6cc1be9131e40b7429ab6c0f6b8c8931f2519a7166d9d2199d9296 -0x460d83bab94a56c8ea61f3268b30e04a756e43cd64fc174bdff52b44032788a9 -0x9a9d56e0619226eff625a680f487c5b4cbaec16bfbca63157b047ffd02e35f4e -0x8b51701f998707b0d50b220128265c32929e2662615469437cd02dc01464ce92 -0xbaf898acbb4b88f9631b0e8614ee463bbe8473e463f044087efc952c5dab0ff1 -0x34e089f3af5b1f22d6c422a39e9cd0ea86563e73a76077a27bdb60d8d561b6a3 -0x67331196d450efc6de0999aaab560664b348d9f3fca0e3b921571679d16b822b -0xd9875fead4d159bdef1f87f45ec4b639b58c09d761185ecde550347af0bacb9b -0xb5b8b5fa408e109814a94c03c2eb230cfcebe23cc93c0b5849d4b513c5fa9150 -0xe1822ad563c613a72bd1310d8b40c2b35356fd8c555d330a5ebf5af30ca9809c -0x866218435d3c4b5984f2fb9ddcc7c51cdc5c863aac4d881c137485d0e2dc3bce -0x0607004f230b8cbfa80a1e20f95d3ef3476313a038bfce28bd6363edd8200d6b -0x50b5a6dc2d2def3c95ab39f8a7f1d248d6bd84039fda18771d3fd16c6627b1ef -0xedf6e406dd5b4a624947bf475e6bfaa8eff58f9b5ae708a616ffbbb4233e5347 -0x05e996967e47f5e0f0c6187e74e5974fa5e0467137b742f3100e7d335f6622da -0x51cd877e9207c8084f72e0476614c53dd7df00cf27c49f94851a34d351214d22 -0x44b797c070b29ee91dcda4814b88ed1d0d7386868149b962f7f08c668c30ae13 -0x275d7cbd9e823a98bd86e61d8a952fa2ed996adc08daa2284d0d02f988dfadde -0xa76eff1b5a7d4d093e3a38b29e0a8a137a3222ef74a3574f282af7f71f2dea77 -0x31c7d75004644c88d1c8e2f48d0041d6c9e4eb1ca724f244fe54e03f6b35ca52 -0x82ac6299d424ab5e528f95a6f97daaf67fb2d8f2ff86ebe8e816a0d265e09e2d -0xdf21c0729bea55259ef2be72e4fa340f9d92139c4beaba4c6c6bc7ef39495e65 -0xe75982657eae35e1b633396180c3459eeb3335f97ce5aeacac038b6062355896 -0xfb5e1071dc0b80ba2873dd2859e4c73e3327681df42a67cf3f495c73e3eef5d3 -0x4f3cb205c94147936c5f2f34237a44e56409eb696bfc1ec8b33d980cbd30711c -0x8d4973c5ff622d0eb2abb14253493ae2e748ef34ca144b2ac189a780ddc9afb8 -0xad031423afc063975d6f26a2c41a22dccbd35a7b34d4c3072af9df217e8c5b3b -0xd6af5e70b69882f25d8157c6353825e709050d9efbe32feb4dac781596ca8140 -0x97d86013fa8d483d2283eaf6e3530d64426406f0b140d8a1c3804ab73210df3c -0xb5a3a5bdfc0f6699a65d609804a4a4f47962b447ef1cfab53c721e8f17969047 -0x707aa9d135b6ed209f50c2952f370071e5daf0c0ab20d153c3a3e83918e6bd1e -0x11f124f7246755c7a97d077afb8ba5d261dbb718aec80775b90fbd3e3f761120 -0xf7fde6e0e7b9bb17f30d94bcdfabef9e566268f185ec3feff20dd6128ce68e32 -0xcb36e609f6c195457286d7bdb3b9b0893d748aa31884291d701a86a3d7413e7c -0x0876ea641e09b34d3824cb6d18beffaa7a2372d3158fe5c8e1feee05e0a67b5c -0x586008ce1da6609a254a543d96a99d6e53a5b64335ca6671e34ebd3794f0e6d0 -0x10769628ca146f9c99aa5505f88894d332b55b2e5e8555f09ba4dfab1b663944 -0x675a81021c4a42af131b6bdcfb9eb7236ae83d68a4bda79f9796a67df8d6aaec -0x35c8d300dd633a35b344e12956f932b0431a53a9c6a8b9feb181f4ecd395da48 -0x86cb09d7bdff2ebd0b1f7d75acf70ece65d00354419f5e9fabdef4cc6b071177 -0xaa36963b47bf2a4fd62e764633ab5100fd091060902b099335c829eba842ee27 -0xe8edd5353b113dfcf9053f281cdb170201422311f95bda124d1fa9a4f459773e -0x298f920d6e9de4e411ec8f4c4799cc76f904233cdd25c38a62e62d479ff556d5 -0x2c06eadca816d704400b16c71d2b483377e68e0b84ca05deed9726e731b9a106 -0x6c5cf203a6f5bde67ac0e437b8770a2408f0fe4c7cf2d5d290c8313788dfc5e2 -0xbed7ec1b1bacab148eb99c5b434396a0473168a6307b3c7aa01f9e9af5032c5d -0xb7a6d7b61933b05ab2bfb411f5a89e5be7b60789dfc5863b8b56aeb7249d4c96 -0x8546c076e4c6ae9581b20e9f3382886c414e53dd4898c759f9641e53dcb969ba -0x6890d0a95412c848460d0d3c484f1bdfaadffd907ee79309264c977b584c97cc -0x8710234afd25ca8aec594488e9c70d202642ee7c35913c45e3cd8d06cd5ff479 -0xd6da8fedc443b022ab4e82b66e645f5816411379d96906cb5630f0c54c7f3551 -0x7d41a67dfb677802c502377c77a096399098a3dd8e6f789d6e7bf3cba8b8eed3 -0xa54a24d664c254d1326891342a36f1e8f8d99541c8b40f2a93e9aa82fe940ce2 -0x33a3235367ec2edce4f1913644b70b0445d0d8ebf16307271c518e0aa4fb83fa -0x8a358c84137a24eb1fb69cecb402307cf2748f3d3928fa9b1306911ea2630c41 -0x0d0d667a24d921fc35cdc4d569a49e4dfa75d7357b0b436ecc98d7f50d4ee1d4 -0x8039198d434138f92cf11ae81e6e24ba95adb7dc204c1e4a14c22765aeff863b -0x3fc3cc6946501db88adf4b9e7cebfc95e20f4f224723b36913ad54080ad131e7 -0x80929cebe08d413b2560f62eb32a2c78e7e0b3602ff4c392d4235bdeeb3f331e -0x5693ed5e34f4de3c8bc9e030d9f91abd359ea9aa380601919e8a9f7a6879dcf2 -0x5272c5f3d9c6d4a9511ee2fa85758c014a5cb426bf470721e6a0668c4482cf1e -0x1e8b4d0b4bb77d0ee491fc568c7cdd88bfca50d5ffee085f2be82475cbbeeeb1 -0x952c9a095d8f5cae05a98eee54b187556cd634f0bfdd6e1fef6eaae6ed0ff0d9 -0x91d48737bfb6294d6c0f8ea6be16b186e413659a156117dffd523d7106856145 -0xd94785a08d11529623afd2ce9e3755dbe1a6d421e69d16c4bd50e6a119cb67c4 -0x24c3b66a12998cde7d2dfbc49050f97b95883698308d77f085f48ba49d4effa9 -0x34b9b19a4edb1121af13f9abe192be46b4cdd6aa6d4891fe84adbd2ea6ef8d44 -0x7036f270bf45c81e64bab262ac9905ff184ba7a9a83cfa9514766f5c2181d961 -0x981c54e79c4d33701b3630c6c0539d6785408409e22e040b596d2820d373845b -0xaf76701b1d644ff45fe288253873c3af3b8b41b75a6f89cf2ae62a1a791da17f -0xa13b7429f2fac8a265587ae836170c46ff3cc78d2b21301fc54d0a95c66ec3f0 -0xfa80d52989c52c865aa928e8aa871110aabe154e9255c91b307cb5689756c616 -0x599fc050238cfa37b74f44b03a8a421c2997b193b66b23ac746a94c6a715057f -0x5d88f8210e7cefe113cd0d8c79b3ab1778c8c0e888dc20dcde68ff2ab14f4558 -0xf480dc25a3f380172bbaf82424b495955dcf74d239ba997a1a7fd73e7051b98a -0xc227f40903a096abebdb285904aee2f08a279c830f5dd321fed9a60c6f5ea079 -0x13e62772601472f55e7640bda2fbe22a2fb8b9835ff244038e23ab4dd55a992d -0x09824b4ea338d76fb290be95efd83b66a7b9651b7e15ebe946d9648551ea4c0b -0x2cc16af00ae097bcfbc3b31a15e52c024e976080517b75b607888262d8604cca -0x571a37f6f974e1dba7beb806a2c6d2e657842094b5b94e8763981d833f851871 -0x0a1ab205b5b70be4db3a4dfa0b468956ace97354c5ea3fff1b4afc9937e1f1a4 -0x796dc77f9fbfc269a3a836d6633e0877d349f3f4c91cfab4ca07a99b3b8a4dd0 -0xf7b7145ece97a42512c0276e56d70a48f550e80cd4eec18cf2e49df56263d18b -0x069e59a6b4af9a593ba2037e1dbb192bebe49b0a5feda65da47dbdee04e253e0 -0x53da1ecc58f699e5912f050af16d761997b4c91b694cea28b6ef7977231282dc -0x2bf301b69772f8ae044cf8e7e038c4468ccc037f1285b6abc88e31a2877c7cec -0x086f53fba62149a1bc7e659f477ca51389ffa5a610d04b9f1dba3732c27aad27 -0x33b2b78f2151b9d1dd39ea779db668bdf31b45859b76ca7d2dccfe9bc77b6fe8 -0x8dd930cc4a86102357c1c7f7e55d2d2d72481675437b730d5ccb8b0f7aa31e6f -0x171a7e67016d9679688bdac988fe8537e71e73347f339b8e06a820c91a700aba -0x1777c0dd92f0168e9a54092538a7158e8d9721993a210dd7a4b9a96720a22b11 -0x647e40bf73adf27ceeca152a318fc6f4585dfd3fe441a6ba0b1ddefae22ef97c -0x2c0d7b90c9a689bfc6ab780bc7fdda442e4e6e597ba593a4ef4b7ae70df649b3 -0x2156cb0b0c4b267b24f861f7508d703207a92c016d939379d9e451e93d65bc86 -0x226ffba54bf01ec663b5418c83d87e4738cf5f544d26c50763eefe8526332f3a -0x978e51da539d69449ea228cee49d76887088104d01021f0e15847f0a003561e3 -0xebf83d5519167f0c0ac35bf4607e312b1adc4e4fc1124e4bcb58db5af3919142 -0x65341f7d26cbd79065820eadf8ae15314b8121acb3602d9c6d3bdd6e86fc56d4 -0x092481db52a24f4546fcd5c1be989ed0d34346e9a824d52986bf11ed13620ed2 -0x7930a14b5e8667fda3dfbe0e0a1fd7fd55658e2a9361b8ae79ee0152ef489e44 -0xc9ea45cdd0ae3379c0b785ac0beaadfd4a915a60a08b501248a2f648bd2cf957 -0x9563fc10d656989306d565bddf058c6ae2b75453be9d714b0451adbb5a59d796 -0x9c2fd1af244a63df2e5e5f4f5d0846f7c1a4eb122755bf1d69724a2f99b676b6 -0x4031cfa998d71dab3b937e9051ca37f410d81a69eb6337a0ff4cb75c88634df7 -0x34bdb42829c57c0dee2e9e5f7f0eb19450deaac85d2a29379f3161dd106bb757 -0x58b1b8e928544cbc87e8573d414d7a95f4ef95b0751bd3206b8e11fee26996d4 -0x80b0f7baededd775f0254f7cc4fc8399c9a175bdc165fd37fc3bdf32eb134062 -0x82d2f659fc2198518d2cf3d5ad29775d341006265016a21aec4448b5031ebd85 -0x31060f41d0cefd3b2a5358ff3f3e11ffb8a3f4869c3853afd3a1cc2fdfc28583 -0x8b61e659b2855221657469ba86ea0300f83b12a2c6dcd2b45a37ab4a4a14609a -0xb9c627a77e45bdd560b9b6b21291b8195a3eaf928ef59c697b2fe15daaeb7622 -0x322ec7a8b3e19ae0808a6070d3888fbd956e65c35b90eda264f7d3cdfd396776 -0xb6aa1c3ba384ec5f8940957bec190f236039925300732317181d7fadf49cd11c -0x73c1fb402bc87ab540ecaddde29cbbcfe0009432c37170a50b6e786cd5978333 -0xd4c28eb339cffbe2eb641464000a3d3825214f3f9fcbde6fc7a2b687ecad575c -0x7bd4497da104bb134f31d563fae5d48c78b92fe0d91eeff719f09df4ba16b932 -0x15a265dafb6242da950a1a9420c9f3fcad9a87c75bd337ed7386270a2fa660a1 -0xac73f89422c282e17a6e1a36af903a6b9a2524ad9954ed9e41ae089995231922 -0x6eca093fd415e2e5a907c5dec4a000c1cefc57df53ab34fd8ebb461a0546408d -0xd2c3f0f9bbb39e4c536cb1d349c1747a1190a5cc4b6b907e72ef6fa70cb8c094 -0x8815d40ea71441971653ef100db2799c506595a97ba07d0a9afbeba779aae8cb -0x8aec18b266ea34a9b2ff605d3c5a88b8aaaf3ec51561c1c90316f1f5f979b6de -0x8ab450bc10bb6da9f6687abe0dbddc86e5895c00fc2e140fe00bfe00f3bb0758 -0x29a36b286b7c5a0a3b9b0551555be13c705302856219c92ebe17c45ac5b7441a -0x7b66f04a9c5572d09b4508b828125661dcee61054f3de1ac9c5e49cc95bf1b4b -0xb808699ca03bd94d3010efd7e0a58a8ea5b3e812c681f3f36c1b92d909027035 -0x82ee56cfe3d19b498d9ba3178175f65c2074478ab2fa9cd5db8c7b047bfcf95e -0x033b7be800bc0d2342d424686f3fc125c4e03a0eda1a7f40944d0d56f174cc90 -0xa88df00cc75788c634498e7bb7ac1fb45d47a1fa31771450b47e5c461eb28ac0 -0x6bf9da2f96cf08c34055fe1f49255fd284f90a40fb0705acfabfa0f97d2f463b -0x267431f956c5bc0656cc57700bb45952a504006f8f408bee9a26bb1b57ff950d -0xbf5f921af9f787d34a138055f2114fa1bf66e8ee229d908b186a5325068c47ad -0xb4517cac7e2d1342db2cfcdf236488609ee2ccb0fb7e22bd3fdb789bf84cee79 -0x4f452168334355a14a4cd9d98ac43ee5002b3169df3e7c2b091386322c071fa5 -0x8902c6494497443bdc84a29bad8900d78548a0da8afd3b2dc13cd71780c2bd24 -0xf56464eabc30a671fc075a9696dfe86620b9cec9349f0b7e56eb6057cc1fdcbf -0x5c96944000efc3c5b7a9dca23d701913c086624378bd21389eb58e43f8adb941 -0xb75efdbc3beb81fb7163aaf3a90bf2495e2307892d0a2a7dfd529b71d4034361 -0x0f640ff09ad9b795d13faeef0a7feaa3b94e5f4c37c8e9b3ec427d67519d8566 -0x7a9f8cd93f64c8c3ce03b15c138544b32dc32aa2ca62e76e9afb59fc55d2bdd2 -0xc5e204e3c27e8aeb3258aa148617b28d940d2959a25835a2296e90695f1032c0 -0x72592429d1f1f815dd62c5372542aab418248f2792f3da17659cc0037499e36f -0x9c74cae298dd60e30b7ecaca880820b12deea42ffbdfb59ddd5177125c142d41 -0x98980977b8035f2d6ffa19c0fa11b91c253c625b818c034391046579c59d8cc9 -0x8a649d86d8aa5c2eefbe9c25e656929b320a9079cc4509b160b6d49bdf4898ff -0x3e5096e7fd8e58214af4a8d418f095bf11de426716624645deedfac534d8d3be -0x5b94a0578734fe30d17ff82ace1f7bac5b080910c07209f84cdb073795baadf2 -0x7c2439fd9dae0a838fc0d34fdb332636762e0c5839a1cc10af697780533c9609 -0xc4086da69b88a9ab17e7b7a194ef62d8c321060296e6f015b2535392c38f96a0 -0x45902a861049724942c9d7b1d46d9a652f15b7b3f71110c509c1b56a4ef4bb94 -0xc1d523e9fc7e8abee4373b6f3ea65cdece574c561dea3c9d0b9d7016cd335a4f -0xb22100c46210b6ce7031e821dcbe1ad4fb07a2318cc6a29e00c3bdf78927b51d -0xa9878a044de38516d062c6b06c6595a5b41828ba2f250dcca2fffbd316fd0cae -0xaf3c897044a8b1546bdd448337f2085b9cbe54e41e46befca7b661722beea418 -0xe7260d16956e208df62636bfa975cdb5ec05a58f90c3b94f0d92b268a1988433 -0x8176f86061be6902a0b26ddd33944d390e8f14d429b17f29d40c87fc1940de8f -0x31241c4291fc424829399534c2dd09a6a9804121071d5d14a2b6317cf3fb2e7d -0x98cbbcc55cbe352b0ccaa3364d131e61e2f2a139280ef7c198848f3faa0e3b28 -0x08fc001b3b37abf03f1b79fa7f682cba80d7f648116fb43d2ee3795ac0d3251b -0x5809a7e568fcfbf36a53ec099148e814ae7b7cb455d1de9f0babb4a509c268bc -0xe9ecf9348092d960ce434e7fa26b2f09a54ae4fb522969726deda7fbc8d395e1 -0x330c36b1ed5fe68260201702aa7208509b8de6cae046394dddd2d2172b45ac9e -0x7aa24161073eef4c62bf35165bff7a72d73a4063df35637311af7c7d7c68e3c0 -0x445981079954873cc1142fc278581e33892644a8ed96dc3f48403f3304c29ade -0x8c2b314c70c065aea824609aae2f89a8ec7cc1b583f131f992b4958b240cef62 -0x9fa4eda1ba2429ec7040e1623ced0bd9bf76f0d22c1dbc804cb8fcbbbc842010 -0x03ffc85dbb60d7c1136b704f59872ce8b732707f9b8728414b7c2773f1d78b40 -0x286d4bd50ca011041b8f6983b331795c07ce65bd5967cf37bf14f000853b847f -0x7535b1c1bae9790203de16cb70875ba4f5aefd16833fec1d238b8181fc99f973 -0xbe12364debe7b94dd67ec3296c14693cd4aff3756fbc9fe377ab2861aa06dcde -0x8ef009679f257c795b16ace4d0e06ea250a4f91b4b1fe1ea4bd6aee0cedd35d6 -0xeecd5a1c2f19b95b60a46f74b25beb1083d3f9c1b0c56ee3a602696d119ffa83 -0x4cbf311d0dabca3e2422a272ede0ea93cec27dddcd76e8044c6613650e1f9b75 -0x2d3936cf680150203e61b91e78df170903c42c519f1869568c54e88a0782c8f9 -0xde9d5d5504299bd4dc572234c82ab8a32521e9ce2354f4e16d057328ff06c901 -0xc2cea7b59261f676834a767a895e7b878c326406a7e8253052ee9c9330b91dc0 -0x325e4b436760c58ad3b9f72e3ef563e1463eea08f0ad243c1ce3dd76f4dc974c -0x7cb88ee989e824ff97b20d58eb3a1ab2471798a11a163e81b13ff42dfc33d8d2 -0x44dbcaeeaf68abb92f0cb8032ef804c862dc88786ff50635c6b7cb95aea53348 -0x74a15585ae13aecf290e3e83b2028026893d7f9dd166c80d8786176f0df413dd -0x57f733f17ebd8f24b2ff41bc365978b9b93bd45d95bb2b7e6fadd39399d8541c -0x0a8309d253f4da565317edce014077b2229224870e73544b4203d9721b989a0b -0x7c0bb1eaf3cbb2471c7d15b2d183aa21866bc3b20b2681849e1a6a106b809bb6 -0x2cd90bb2be2c1e0f4aec061819f17cdbb881d92ac6ac3ce60958a125e168e2e3 -0x453a5a034d86ea37378faa5240325277cb8d306685f327314665c515cf0d9cdb -0xa1b9c9b4444fc8136d9198c2189a9c87b4720be62a4ec565624d6d8b6c9c2206 -0x974b4a74a039b821302de7716838919c22f0af1e8eb23524555b6a9dabdc8735 -0x667fbecec2055e7b8cc0da18c805b6a2a85601f78887eee85d5ad233ab066f55 -0xaaea6506b951ac2d2dcb28fbd43ad92dc50f7a4667fbf0599371ca7931ab5f4f -0x0931137b1264ac632307e22b5cd3cf013044f7e39f8fc5db93b17fedfc4bdd31 -0x7e8e9751b52402ab7c09a931dae39b34b2ee54a3ec12109cdf07b6d5ec309024 -0x1d188f9cdf1a1a6fda37d32113889827ce5469dccc670496e5be33b12462c7e2 -0x4d8d83bee3454c76e813650ed32655d62683d8d2a38b105176d70fbe8c19035d -0x1dd50bd8f08943bf0da4a653d3b52bbe0d592b86d2795f5ca09148e8a918a825 -0x9422b36482530a028856c2c89033e266114a04a85964dcba5cd1d79bf2a2f58c -0xf075add3eb7747a2ce72d28154afe41b5dae0219efced1c292cf8a3174a2661e -0xf6603f21df841e1e249d27b19934dd380c8e7aa72d2251eada15097e4325c33b -0x2cb8febcb2146a651fda6c0ee0603dfe78d7816b2d8551c01e764d756991b2c1 -0xacd6230f9d46a5a3a0e4597174799489bacebeb69aad14c2bcacfe0e87ea11cd -0x6e2e8c878369f4a628eeba944ee5e25ed708a2b4979b6bac99ae36dd4d4652ae -0x7fd3bc898da3d00f6a3637c9f59e354ca29be03b30fb301c506ee340c3f0193b -0x177d2714d03a81e1bf74ab9882f721a993831d547c13b3a31e826a37c327e5f2 -0xb93ed2ba5880e3891ecc1bf647ae7dc0a15fc4f5a5c38e268e35526737396c69 -0x2ac4965c57d25bc86a8b8b2af5c2da733f9088f7f38590854e80f4a017305efa -0x54e0a8bfecce9917b3075a556f043a758ab0f43d3451371c9ad0f44b29626197 -0x1a5046df59b4ab24bcafca3da3ac9f1f281304a4e5336d7126293790549685e4 -0x2c6408e5cf7b4e597f2e876a4385735f38bc2c8c0addda15cb881ae9c6636811 -0xaf11ccac27cefee6df1da71acf6e21a316a3e07ff0a69f0ffc99bb4cbf1a89da -0xd731f1b93df6330275efbf882c1d0e0e3fe56a07c54ffa868063b96b0494659f -0xc3cfa95c3889d060b14f7d53c029af47ea189359b01052258b095e07f7fe9be0 -0xa4a560fb7afa01f8b264fe38f2d37b4f5c1934c2734aebe784c5488e063674f6 -0xb21e15bc7ff742378000c35db292c1a1eb4c819fa3806c28d176d2c3bd1cfe5b -0x4790e236c0e7173b114192465134cf470609c50a95fa41dfca97b4d97bec3c67 -0x1f82cc44c15df1b5a19210beb2304fc821213d2ff6b9635fe78442b514abd7d9 -0xc39372e63f0946c04d0e86bcb9a6e1b7dc5a2977e536706cb491ca8e1a6f790e -0x1acc130206942d7b2ee29f105b5f39279c2d81ab764fd7ef6e3e6063cf1f4422 -0x332db354f1c6c7ca02b380c47ec407cd2628372e29f326b0464a8e3614f761a3 -0x54877398c2eb460c2d92e2e56338a0aa3c0c727bfe004e86cd127456066d168a -0x8eec68f135ae76c3ebfb6b4d3b282d22899f55d4bed3e0cbad1e931b2642ad78 -0x9657066d02a51813fcf681bd0184f40abea512d4bc2ea729fde27dac78bd2902 -0x61727d959329273e6065211ee01f1acaab80e585d6e2f0a75c0a7d7e52077b95 -0x5c4b304d4f5a6ebb9c87a9a0b13d6fb6e430495b572bd2bed4c7f42800b346ae -0xdcf0bf51cbe876cb888093695c5b6ce0775f6af97dd1657bdc1634637d3a0d85 -0x49f95a4d616100ebf097155c55472d3d1be4f33882f41fddb91cbb39ed0d476b -0x3a6f40fe1eb012dcd8d1f6785f12520355ba5b9f81ea3b010356bfcbd5d170b5 -0xedb9cfcec72c4d8250f91be8e676abf626668197ca53d11702c51c16cbd928ab -0xc80f07db0a54dc9206b8399bc175d15b2d2e1053175aae6cf3f0f90bd08eb746 -0x3b17d90a670c05206b0111c295dd45a44e48502a1454b3b0a0c438a436f8ce1b -0x8607c8a0882ec8aca76dfc0d85d1fa347e10567540bc949c9a509fd4827ea131 -0x00fc485be8b8ae9eeca8f1517872afbae4acb242dd3c959e6dc3ef36af00285c -0x1f1518396d709d9084960a75f08552d5a5025648fc916bf53f42d7304eb838e9 -0x8e9749103c1bbc464cdb6826a15cc41a6d2e9a1c1b7a00391afdfc79e70f993b -0x169e4efb96efb79c292ea87ab36c04e5e37f45a797f987643fb86fe0ba7da1e5 -0x4137e3987e004089d4afd77c02dfcb6cf121e8c2287c76537998af4a40fc6412 -0xc07306ef64b185b09497909a2f536771d31accdc1467a0680dbe75e378abcebb -0x0dc1586c902b06ad9a705d6fc95517e8f3408aeee2e9b053a7c3de5269d56142 -0xd9e43ab3122b4f64d84ccac3537a3f2dc637f87f3646b85d951d75093a0ba9cd -0xe5c45e2e4d2e5473d062ccc91cff63492c1bb8283fccb20b3a166ffbcde5953f -0xb714531a07acd30dd648e6cad2b4d5ecebf31b1ed9c0af76a67b094f8a47c5f0 -0xd80d2aed5851d80769b0932f1872a2e241faef27d55e8a65b8111d9745c6aa85 -0x0665ffd79c2002624e11bd8b993c3cec99604f8f15459cfb982dc792039dd5ed -0x7413da3528ed4743b0832f5ad7b884be32a1dce7ebfa126cec370865cf95a9e5 -0x505e9c6b336a8f21006220ca5e2ed3931a1d164834511aed3c173abe093f8d16 -0xf8ee93804b4a8bcc3d7922eb4168467df68e277444d639099f3206fb5ea7558e -0xae8a0ec141a2cb4f9d6f186d438382426f0cd07b3fe3e2e59ec6175cf2a18a1e -0x35c7229e5c6017265fed06b48410d8aa9b07ca7de32f0c3e9971801e2ca334c1 -0x055192e74d74019a5b952075564ffca1aa3b4a10873f44d3fdde492e30a53365 -0xa8924a3031aca554f80980c9c5ab37b94843ca7871ab0f077e56d202df9405e6 -0x614c5dc39aabbb4329c60128bb66e573f4579cfde6d564a8bd842160052637ec -0x82d8b5c43394074c7460101e958b126fb449f7b7bab958eb2e361fd2b8fce70f -0xd96a3747fa99574e6144ed0376b42d67e1a507f82e36997bbb9de5ac5b88c5c8 -0xe61dec672719044e48b9dfd95f41583a10be56eee80230124fedccd3d7272885 -0x3716eaf978d17ebd4052f0654b31ad43812b2579fb57d6c18fb72cb0f5dee319 -0xe20ba3b6c75d8735ee5b040c80add82b442383e5c304ee460527a541c5e00490 -0x396e2c46535d1efe80c94578597b82da21d3694f41f803ad248e9ad093bd8e75 -0x0d8583289f609c663a13edeee406769a294e893839db83ed6d5c6d428cfe275a -0x42070988d7f60b417e9550a01774ddfa24096118e6e7d3f38a30ca5a8374f4cf -0xb763046647506a51950655807f3698fa5f28e464afae793cbaec82f2e17c07f5 -0xfa8c7bfe494cd17ba829ccecfdf3008a07c0df882e870737ed739cded8178810 -0xa289dad2d3d3082d7966bc2ed0432a92422ec0666602e552ca7e4daa75004d20 -0xf313b81aab28b087bec36b4d676889049bee95f1e415029faffd2d6015a6c45e -0xc5c419179ffc86d276f86b8d7f18f7c5320b71c2287dcec8ee2ce96f49bfeb17 -0x36afa4f296d3aeb7ca346016c19d09e1cec9535f7b34f4ae0139dfc70388f2be -0x7b3a3e55c115482b547fd252a82b7001ae5dcaef2d074575b62c75ec22891791 -0x89dd55aa9b4970a7df9b0952cf68aabe559f6ef431fd516f0c6d4bf4ca81d0b2 -0x03f6b1672c2aa5e88f966d32c56c8cb9d87f93856b6cd79260d386166f28e79f -0x8b018a4e680be2f8f5f283c261c98a7e3b909dd7d8efb10c2ce06c492c45dc98 -0xed96d2d07fc4706ab2cda3f1c4c8b3e7288de0beec5bd0af989b9a80e7ce9ff1 -0x1ef58183119cb05399631f3bfdf10f9044177c696ddd717bcb1eef02d19c46b9 -0x3364f88ffbc2cd281484f036e023f97cc85a8b71df3740d1ea744a91e3110444 -0xa10fcd4e8a949920201e928df982e2ce59de4f9980b59310ffcb808ee03f8773 -0x1f61a7f9115599175f2dffbf5e340fb9262c5c2b6a649b0bdc48ac05f9578653 -0xf7a688605199652509c3d90ba47773124fdfaaea2bfc71be16e11b6b26afa417 -0x05b6679353f7723990c30b2d18b0bcd1e3d75f9e2781d7f5e5bf6586754599e7 -0xe8201f9d33f7db9362df587f558f40346baa308048058844762645eb8de9ea6a -0x7031a708749984c8601ce7018cacbe4bd612f1018fd09152f93a670be7af6e4b -0x0d0cf9d79c27d8a0e7ec80136ba51867aaaca01b45c67649ec354bd1bab06406 -0xacbaeca78e8cf5845f7bfb4b665025cda5d5b65acb93e416afd20cd939e5da95 -0xeb9ad6bdd43470e494cc14a468358ee09a8adaa5bc9b06327a9582dd44eba2bb -0x44c12884d0b25a20e5f666282cf9fca71d1f941ec4eb949db8f32b55a5c4a4fe -0x6443d09898cc7c90a935ebd98b527f765f6294c970162b28c66abedb8ea3e944 -0xef51e644ddabfe9e0a11a97a29e39db32cd40ce81465974770f4a5dd70aa6155 -0x132847950ffddae21a4f1ecf196ab596b8423defd73eff2c63cdc9e74839ac7d -0x35245fbf698cef090d150b5aa9fe15fac0741fcb880ce8b35e893cd1967e135c -0xfb972c743c107e27f9a06c09fc4d0de153559099408ab08d069ab8975d869cc5 -0x491269e8af80d7a8d61d76bc0d6b71f3375be2acb3b95fdea3d47689af1e719c -0x3b0d1f76496618761aff5db799359c7836796f30e7957818c4d651bedb4878c7 -0x7c60ba95d09f7c78515211b5286f25e26f4c8fc21b676ccb6fb19840c38be31e -0xf144ca651265e57ace15244dd30100a43bac9c2e02fdec691abe0a27139ac5ca -0xe7035ddfd420f648737fe0673846552669646bead8a544a1808c309eba9a0418 -0xde893d60062b3bb4fb9eb8052d26ca4d9c55c205a17cc4bebc0a68104eaa8548 -0xf6b7197e612502f97e78c48a52b6873d8f00ea5674e79b4d0ada627c7e74d42f -0xf3af492eb825f7837b1f3f9e6f8c77d3ce716a5aeb863a7ea0c09d6924efd901 -0x1849339ad144b0bd0a121bc98610ae791b618eee113011833edbab8aa4ec27c7 -0x813c2140824b8480c498dd21c94791fefe610542f11400225495839b01ffbc5b -0x978873436e498c2e97fe24448a8635f887cf9197619efd65ab61c291509c2060 -0x0502757cb5023e0dcb8e1028d8087035dd8d3c3dfbe70872690be5de3412015e -0x6e2a30115d40ec908fdbf1c7405fa8ac72eb059e6ba11560fc1d5830faf84d95 -0x46d42833ae1f30ccf3d324ef0a6a1fbb500d3d87bac2618c219bd5c02961702f -0xab4b0d536ad2d3f4e872095aceaa8a904cf7494e3ec7dee5ef6b3c5e879d0526 -0xbae52cc2281ffe8372a1d246294a65446f078a8675fa74a00901054a08af5899 -0x6851166d8a5f1f6b144167834848b668a7058aa780ae1e116cb810ad76e2eab1 -0xb4d08ce643c2ed4192e3862150899e2579d1fac28880572f30df6798fe2b8f9e -0x77e12f5ff8de4f11376c60461619dad06161d0116208680fd84785654869cd45 -0x0d84e38fbda00658567665041cfe1b8cdab2596777de35d42423e396a1b8298d -0x44fb4294856a5d06e887dcd817148fab436db846852484b233b1ab9e91b9107e -0xf998638c6016235204bfda3fde90d34c63b0c44b541511f0675720c76bd84c34 -0x0778dd10ce33fa04e31910d1d4e99e1b8765e34ac223e7e748bba72e190386f3 -0x37914f496c3c955c8f95bb15230a809b748587b90a03b6ce23435948959a877c -0x2bf935daef306a3e5fba74f44257e25b96d5d7fa597691d58aedc8158d21ae1e -0xb48c45ef35a0ae72408bc23eff30190257147ccf799c5e5700296eeb98332ed5 -0x6531d8838797e48ff854faa0588a73900c206819282e07ecdb8eff851dfe7029 -0x415d3fd3f55b11ca0a560a987c344c5cce54f7b4048865781f00de6bb60b22fa -0x866124f3a39580cef0561273612a1c91d580a3049a4c103f4a21f5fd1e336ba0 -0x90657d921e1aa9eedfd08e08b7c4ae7af6cc727b008e154d2c0762e0357ffe65 -0xd890d6be57e020ad4637249fcf470e7b824a92eebd2167b3c8dc672649131690 -0x66f389eaf5cd2db555db86d0900cf4f3cbf8a089e57d59f8ea8e82b4505efc8a -0xab1605517db9da58b6ef6ec9b2c3ed7d423b96e6bb6f9b8b8da8447417836316 -0x7302c257bd597f098867218524dabe7299fb33a3ca8b2d317200ef1df4002b9a -0x6bc2dac85af06bbc58085c2041a76aaf3c7e8fce31a2375541bd5b98e11df381 -0x4613aa898e125b5a467f85cb8fbd07299f1971be6e5bc0ff4ae5190f678d5b5a -0xb29a95e6b2eb81b15c158b349239dbc027eac52cc2f7569ab7234f98bad8f349 -0x6418a3d0004fe3b33cd753e2ee07d3b0637a08272831fb59c108209d5dea7f36 -0xa8599ee1dcf3ea3a9c2760b88dd14f2cae778b102ec1c3c87834982b8e936370 -0x44ea95c3131667876288430b220f2531af74c0a664864f9f52421993c0d600b9 -0x9511f00d22fff1f16d4147e0151ccfb8b7e994b613bf6fcf5ba4a1f0aa6d5aa3 -0x927aafc332b07ab45358718ea5267ca96d7dd2bb9d2997595db5b691518ef473 -0xd918381a5e9819d4c5da0c488fff027799dff13ce7194117b96bf8e0f2e812e5 -0x9b2df067f16cb926b5ace56cba8c2a3586c4d23d9863a398b1144a1b84fc9130 -0x26dda9780bd7921aa3bd4d02b75e4ea6aea46e09b45f3350070b59a2bbfc215f -0x291372deb86439235a5067f51ef46b01aa5f2e93eaba6453ca9be680777fbe94 -0xa4de5ebe7d3f169bb4797175a377733288c4a0f54f876f8aa59c173c8631e781 -0x02b84ccfcad9963a79cf3a12de30f785f64f89ef5e0ae969bb4c4e5f9ba6b014 -0xb4195c53ce8867d5703749ea80f6b25a0ea080b98cb3dc465dc58cd05ba9ba8b -0xb3bfb1d19452f7e9ee0f18790ed7d77234bd5a3c8ad1473936dfcba9f1d105fd -0x5869d43f252f0302ad4cb897cc4ed4fab2731fc0081d8c038e6517e8354db7ee -0xd355442c0ecc75f4ad0fd0ebb9b05cf4d4b25ff5568ce3cb505e3f9ac5fb6abc -0x0f1163925fcfb5e5b8353b630e2889bb276ff25815515de534adb8c988cc31a2 -0x51bbd86a084b04d88f0c9da27d01e3406258f23df4203a3d64c84efb2846c713 -0x0a8fe549f8511efe8a48138eea67c29c016c763eba0fd4b626809240cb90df12 -0x25c265d762fde59dcc60c6e475616eb47dce54ccf5dc6aaf494c3789d6fd055a -0x2a616bdc34bbce023196a08ddbbaf7d505fed1c2825f17dcace807fd5aa23335 -0xe7d2e2d460a06d16153645b19474f9d6562a106e515b79889a69226619430ccd -0xbe7f9dfca1ac0622bcac6677e5b8e9cbfffe754377d0b60fa6d61b0bdd72353b -0xa71e9bf9a9947e5ab337379cd50e285cab685830f73a9a2a10954c4e0ea1a662 -0x7b5c0cf74d36f36e362d595587c7faa734edb8b4a18eb1ed2424905386f4a000 -0x0ef367defc1d407d1a3b6d33dd02fe9cde649f73b3d3271b7628f14842576680 -0x7dc0f59bbf209b0c165cc6d4fec1a34946268abb6d82dec72fb1dd277de086a4 -0x30a7382c1295e19eb2c5b0f4cd57e2f241c4b419f4064e9bd33d8d60c4978f33 -0x8937e9aa97d030dd7203a3c42e5a17bac259916aaa4e9f3ff2f61b873ecd859f -0x3f6270c6480db094adafd5827dc06a4f0387de107dd2e65dd7d1fcabfb7f37ef -0x1a2af0af72c651d66677f5064d85119b52cdd07253ebf80d44fb099fc2828ab5 -0x644b37756192c484fd26e18a77fd051ff91d3834d8b1dd4be2d2589929f3cb94 -0xeca44f706c3b1b00c0550a0784ce77186b8287134a12dab8ca5b6302930cf2eb -0xd2e1587027d860e9f170832955247303721c1d0fc9d73ed38bc901b644125e65 -0x21c8ba9b54920a9eb8d74e2f7141e553a06129419b178f6cccbc2ad2b206e270 -0xbf7c7e72b6a9d5d1f54f7b3c7cce1aabb6e0762488f62837a61056484ad8601e -0x48fb2f450a2daf39d62c1e929815f21791587db746c932895fe4790b34cd2834 -0xea877f8d918a15e3950f0a19baf950c9a32cda6ae21812c066eb11eaaecbfc8e -0x13234de93b5c611943cb4cff1727385baf74bc3f47a91ab000eb27215f6dfc51 -0x595da77d4fb5c11f3010245716494d5deb5ed324889aaf41f756445e9dbf525c -0xdee0b04ee9a7b0c28d28e1655581415cee093445d36ff6c9b59441e884ce322d -0xd98e5933a3a8171721f0541c9299df8e8e1bd3f7ea2d2f25aabbe1850583a8ea -0x8a5622ef5e81be5e5b9fdc39c31471db7d1c421e49f1a89fdc1aa3cc1354a223 -0x2b9a205d35e55f47cc830358d50a317f7b334ed72261b08d135de386df2f03bb -0xf160ad3018c42d5acfc8d0f69d5c4ce9de65d4091e60102f6eeb4d6b69d7d0e0 -0x0cc4c4264f6819f5e4c29079276d6dc8ded66b18b3f5d242172d7256f4c2ac1b -0x0795098c5e68378cf39e1a1849cd343f4f0178fab1dfb90c22cf42c3653ed8e8 -0xfcfa07ccc88e4780af802734d793a547a5c9654b6d23d3dc59055ca65a67b2b8 -0xbec2889fb1218e0d08779d1a505624a025230d4360a7cca5d3684a06a04712c6 -0x0506a55fe21c729b09b51719657de02ea31ea62e790ab04b02be541c5c0b51ab -0x35f12cebf407df03784eeba9a8d74126acc164735eed7ab1016c8cf13d5ecd35 -0x12ba2bc5ff0ffe81c91c8f1930c20f7b7e1aad1dc471cf49e5898d0086ee7c5c -0x30d5db0b096cfdb76c24f03ee9eb25c46b5d63e82b1bdf4fa3f794825d61454c -0xec4ac3d6b6b56a2b31f9fdd7f791a5f1acf5f4207086698abac31691ce5f3f06 -0xde4654c21da5820599d240720288b6c1f7f73a42151cdbb42f957ee0dc0ee148 -0x964032797b2f152f4e1c1b9a53a07d92f064f899c1f7eebe5335fed8b53e536d -0xb47e6496a962a102fb5c285dbe9c6e9be7f2a00d3274a649d1d2cf9e5f6c0947 -0x9183a4ae97e122107f444f354b0b2636038402c59f714a0cd509d8fb1862a434 -0x3b5e323a6d6cc50b2fbee4fdd60a9500cfbb933a7aba26ac28cd12d38dbe7f5a -0xd01b4798f8f9b444fa37d559561c83caf91f9a0849eb36680768f30114146cf1 -0xe22fde3b0d709b5c9eaa328b584f6a0c3ab04909beddec6655fa97d16cbf33f1 -0xbff56fb719607f23bfc6923279ca56b810f973bae0fa4bb1045b28e30297017d -0x809ce20a87087fe40f3e5a855f4a5af0ce0aa089acbdabce7f19fd88828a8e38 -0x827aee991543cc0ac28c85a2e1d40a205703e1f4b87c288f3692b322f68a74a3 -0x89a7aa4c837c37a5b9fdf933ef0ca539685851207842f7dc54a9564305f8ba26 -0x7f7a43484ebfe92d5cb37cb1f23ec2c25498d7d8c39f3f2252a16e94be23021e -0xf204a136eb10205aa6c288f700f533d4d4a02435a8cec20d2101f5e9b695c1c1 -0xb5d6da5c3316f7daa61be81f742e19a1913899850ad001b674ad20c6f256c575 -0x4d5cbf35cf41d490b282ca527007d277ddbcb2b098a36d58ec375fe01d5f7ef5 -0x656debb20a24d56a6cd6a9e75f1ee484f9d309f1b8ecc90fe726cfeee57e6512 -0xe4765b14e1cf19975c6fbee6a761f95648d0fdb786e228c0b1e5b96d9ccc09aa -0xbca945c7492e4a11e11b7d5ae74800a39c8ab024630d733e77eef33744cd9a67 -0x65f595a6052d2c736040d59e57ead2cd63b2b04fa75ca0292895281f11664db8 -0x245811301f6206db06af9e907e95ac6a704c68d5cafaedbe6717fe3ee8eb1a09 -0x17f40e68fe8dd66d969fe741a63ab81f138cf97bc482a2fcfd3a6b2cd0199f04 -0x9ae78b9e255d86856eb5be0df8bda0e56a28bcdfa1ed2830ec63a7de1cc00aa2 -0x49985f9b0c5afa61c669d55cb2267d4fe6a635fcde2d66453bc8d3c1ea137e13 -0xb62ab8fc6d4515ecf188605b0820137a99798d0806dcd6d016d0720a2f6f174c -0x2a33696f520f10de2b19ff128cd6a852db3b4b099163099c5e347b291c22e89a -0xc36b9808236727a77e7b9062dfd6ea74aa6065d55f2afc05949c08aeb1ad085a -0xc45687991d5ff221d9e8b5bda9e1ef3ed472539d74567dd495dd93ab85028e56 -0x4c02fb591827cab83612d4f9a2eeee9ce4ce4328666a9c2165cfb9dd4a7ff2e1 -0x1240605d5c1d5e455ab7ab9deeb3c5b022ad09891c6f4345fb7c86d174b499d0 -0x0cf78fe744106b5c4d226e2156149e9c85b42dadc636590e09504e639bf6d141 -0x3df1d9409ad417c558c5a36f78d92f403646ce9a1169b3c2c2228b870fd67a2c -0xf3c5711909ad3801c74b883848986f59f463f421e7d7889c36a0a4042f5ca4fb -0xbe8ce47f30d3c0ed9f215c8bc4d84b0b4f2550b30b7081e63f791237431e6bcd -0x192c9e14bbab08ac288be01106d3cc8e7db41e8f1a21dbf851291cef9024be8c -0x4876d632d54c3395257c61029feb4239bde296919aae6909189de7935d595a21 -0xd8819ecd8d8448f8065a998147f9d645beed43e1a5242a562653b84d8ae5d7ff -0xfe3c7dd9d4d83c82c2e77e8a170e6c9b87679135de364de8eeadb0b295704aef -0x33bf7baf4ecdff0493ea9b2c5fdd007b48ccc55676f4bd41c199ab4249df0323 -0x241c3f77efc009c8af702f99a97955f4bdeb31740b750f91a53a42cce0830741 -0xcb1b450fa3e97a018b63f78c90332bcf55c9298305b511b59d38c21433f277b3 -0xdeedf5fa517b141a65475cc838df23e72f1ce6dac3b43e37b627ce5b76680ede -0xefd760b4de12f6ebb6fdbf3846da90ad004196aff3380a02c8b277573bb35dcc -0x6a629565bd71b8311f1cc8a5c85c2cdd456a76f4f18daba4e25dae5b1efb6683 -0x4e2bf8e718926b8dfd1562512e7366c03374b4a671d917d3133428a211e10950 -0x9be4ec7a1f77a67852b69372b161e021418a040a20c7f11b2458817968a04cf7 -0x02fe87d561786facf4fce6c5dec3b73cc21f5b68cf8ff3fc75fe3f6d20dfc48d -0xe7af7a6ad4b3b05314c4e096a8acec4434915b3b71a848e60854332c71ca1b79 -0x052a95e19f935f7bd1cdaa4f466dc20e03f0077beb4657872b141f922259d6e7 -0x00881a44ae3b97c1a403af46d61240c06f81bf20e00c7d89663bce71f9df71a2 -0xc0f161a087590394f8cc2b4f98145fea7b01792aaf4c842383310b07a91b86bd -0xcbbd5bac5075cab60e417509795f4d5f6c992efc3dde16ce7ee18df7aa85e5cd -0x0c6af66d5311eac30e6e57753c131d06c64eeb091e4c2402dc4a78a1ff3995b8 -0xe6c3bdd62b240fe7d5da69264164f11bc7e4f624b3b2fcf411bb37d1aa5a6e82 -0xdfb29c4421dfed258791509128e5d2614696f3f009fe39ee7cc40c15a28bb40c -0xa037e5de8a9bb25ce46dd0db7f7b58d32a9c1b15edffdb4fec616d0a118a12ff -0x2e55d7db01e4e5ab296280b01b6ebb83a484ba4060ec5cfd9cf43142c804683a -0x2e0d33381294ac1d395000315062ec9d1957accbd0f96df12a733e34e7e2ccf4 -0xe06d2a6ac8c19384c382d36f23f0180b6431da8096c49b80ecd468c6df56ef4e -0x7da1023f618826e3ba1f21d286ef48a90705ef72dc1bd599371da808c5abdcd2 -0xe1053278177424748c8425170882598581daaed85da96293b9a2e88dcb7a9c63 -0xfd8a6c80216a2b20385c6580b6a5072d11f26b8d62512cabaf6ed988180f6167 -0xc1f4e7adfc2a480d044d64f0650a5415c66688e59619b9a11c032a884731948c -0xa2a7afb293c267200e2cce35b9cc675afef613b7fa3d8c8892985b9909c11cb6 -0xf0b252ad6738f259b5ee9f7e841560bbd36d8e6e767ef646ddb39cf7a5b3cc71 -0x0077e4d5527f151f8f85ebfa36d5695c3c39906c96172b92beffbadfdc829673 -0x3ea84f0b766a03df730e122967783fff0d7aa50d5a5c418c15cbb409c942c7f5 -0x4ce201fe44133a5da50763c3a768ba64ea5230cb0cdc9c3231604df0dc92a2b2 -0xabacaed33ddee2c5c98a5a91f0a379a4fe0449926d6308d2d75fb2858d337833 -0xca224eb7a6f92b0f2b10e99dba193329c3a14e7b6c445c3549edf8c7b6443f20 -0x032cdd5d960d913fd5bdd2864746e44c4addd8be768930694540c14e0b39b6d5 -0x8567772ea16b5c9480ebce5714cbae9e669bf373d0b12140f4bc855e419f832d -0x4fa1910bb5db8a04e42fb34c5bd390f1c27f9fa2970b37731b8bad9ba6812cf2 -0x25e36a98d2e3e925c49d5d7b07b455c9da838c0f3f08272cbeb42ca842f82541 -0xa55026811391e5aee94984d64070b14f78e1594df9d7ae88a03b57aa6d85555f -0x38db90f7db76623bd74f72f9a3d00a66d65130efb41c9f7b39dafea70560149b -0x78c9fba01939481641cba634f47bc68339a613e1c395070e5347496c219fbc52 -0x106032abd91dac665810dfc0b7e99248ccd00655cd08dce3dc0c1d55bf4704f8 -0x206eb44cf8873c6793eb77da49898babb021273af92062bc7af515c9b39d3643 -0x1e6034e1bb352b84103eb3e207e4d4b216c41b0746855af2563c9ef27cbc6563 -0x84b0ef0679dfe759bcb8ea5291c656d4497652f61f052c4ac10bf767a502b82f -0xe01b2eba11a389e270f5a13b8db0f0a6fb39c98e09245c557f5e8e79224aa2d9 -0x33e1e3b58e0cd4079279f38ace7c973a9a5ec5c7a9276ec23786594f874da733 -0xfcbe25bcd20ef9abd74f0525d15b6f0d300a2b91e2670b306784eb1e662ca496 -0x73c8a51f657ad72bcc2008cf61587d79fe2384b382259381b37545ae5b411ada -0x1ab5e80e8551d33494172573e31e6515eba7075ffab605b84dd9f2a7bfbdf5f8 -0x35506a05c08834d081c9ec67c11293bb16f3fcbf54fab2e2759357fa54e77ffb -0xe6fda8dc2160437cee7a07472ffc778d08a6169b0042eb02400306eaea9f7a0c -0x9a9c2f0379df8047051eafddffe54d17710e05783ecbd4faa53df89060a84f16 -0x5a50dcfb839bf034acbee54fe1fce35636263a8e058ca641b76254463cd0bf8c -0x80156be4a098cf13a22ce6e730278bd61825a9269d64ee699fa852b7e4fef169 -0xf40dc0ae5931818fb607be66711c358ec064eaf59020e4af26987e52768a86ff -0xac4204f050497dfc6f476ef756e2a9d7bc62741b83234f44180e1a0302bed422 -0xe38da3dad5099841c366677c662f4999a3a478bcdcc2d706375610f556c0cf88 -0xae5a0759ab7974e09836a1a63f0e5bf17c37ee12e7cf12239d9bdc817d028942 -0x924751066e804d0117aa8632bfeb834d3a6854eb91850de93846b6f566491d17 -0x51afbb642951f2f43f092f4e23bd28225dc705b86aaae1b795dbc7ad01a87065 -0xe2e276e0b76b0e8037e603d504796df680e9df2827d655add15fe4aa55caf47f -0x285526d66a88f0de9363444840146a43d83e158d710def99a5cc5007eb516a76 -0x9c1e5f6ba1e084bea3f34581dcb3d61b83aae05bf4e490431330406bd278094b -0x081a0500c921278a428ffe7e6b969fc9b5b4698937449f4c470b5596d5c8728b -0x2520a95c41e28bd7e830895a24619cb131367ecfccf7e54cafdbb59e8ffe9da7 -0xab1798114e2e2feb97845df7b679fd658eb00bc84705ee3299ef6245e6661202 -0xbf66493f17f9146aff4e65df59ab9bec52ec0b593b80c7748c93ea5f1f9cfc45 -0xdd655c43eebd3bc3872e0d1402e328e5c6ed91cef33ec996811b54a0d797ebc4 -0x3d9cf003d02725d2de877d1e41420e6daf5ad5ef8a53afa70065e11aa28a1317 -0x3d176efe5136355b791fe7276e814ab7f6b32de153897a0bbd4d033cc50eef18 -0x5108ff5c42fb95f347e78ecc2ed9a0a942a5959af012dea2df96bcc8e147c42a -0x8539c86b7dc243cf0d4ae478ddecabb4412174aaeeb4f3b8ef23b54c68a1a98f -0x2a866302adb012697bb231d59a606dcd5533160b59a8564e3cfa60047311babf -0x6f40e2517a40dc98a372b1f6cd5f01ffc597f5c0b2598b0df974c7f372622587 -0xec96f21f0f1f443b24cde618d3cbbbaeb983f0357725b7acd9ca7edc12f9a9ca -0x2baba482d5748c3efa3b3a0e0e626307336e166377135a6198d893d73bbf81f9 -0xe3b4be97c2a77c8ceec261ce2617a16fc6b9e5ea2a567e8b921adc4455597f6d -0x4a67474320f00b399da5eea8c9a1c54146b51a0fbd79d8a8c6581dcf1c9dc90c -0x58c1938b11d0264d7358d3d6ac03051ac559d57ba3979d20558de75b2deced6b -0xe9cb6db4f74c37edd9cdda36a770e47346904d5e3366bb6cb73498d489da1017 -0x2030cf4396d931074559e6989f118e4b695787ac56aabef10013a7ecfd8a3990 -0xd5fb5492609aad63b97d79d15a5ba29a3fd4072575fed90d40d450b1c39c3322 -0x6df66533cb75f1883227ae1a5b88752d31bbf7c5e4900617db61ce35d3565759 -0x63f0e18842bef9d7e9b1877fc612ce6682362f6eb6496a0f4f8366defc99bb37 -0xaa64d182a6a329733a29f9d29982a0e5d1c561ce348b5d6de0d32f524bb9d4d7 -0x94746cb413a36667a0f10159336ae6a6d90aea710fcab816d858b404db29abc4 -0x16e6fb5f60c240ec6825ac60079c7899b9341b71f1b960adcc9c747952ac24b0 -0xddc60aa09d034d938bb330ab7cc5320295fb8f20f4d21187faf9e9d07c1b6abb -0x791883ed285b015a26d869a7bfe049dc64d7294d507b652f0e011af45faef520 -0xca64b41de4f882e777242fa40dc95b0f1e617af7a99d3ab69a49e7fc78354eaf -0xfe67924ea9f2c675d99c274bd566938d8192f8b13ff014e404e4e476be6ba5c4 -0xb54f5b39a7d2da5d4ca3bd4bbc55750f6b0bcadb8cb58ed40045024594481e22 -0xc50ad484482a42342fce4d55b34e946cf3c1c4f2c1567a412ae99efe64b277f0 -0xd3ed25453da506e23c5a0a8d7e77cf7a9cf02c44af09d7837d136dba49055055 -0x0fa18c969a5ca4de1365f9e848e30053a14cc9a64b8aef356d3841df64dcd632 -0x87c9658ce5bc8c7cb97ed11384a28574a2e5394630a15a94d4ffdd30c7175464 -0x5c43af5535fc45bcf95293389486bfd9e8b97c537ab949c299d7f243b9fd9a48 -0x75168e89b3d6a3caa350de9695a4be09f5d74c49f6a3ac9b57d6a259bd46531e -0x4fc5ba78afdff64d8472c742d31afe9d944f6422cd5fd1a469aba3be7035dd0c -0x25225f3412a9c0e965ff618d57981268992ce2ea3b673e82e71e5fa82118ecf7 -0xc62aab24cd8801484962e170817a066a7ab885e17b2ee4ab428d052b283a5b50 -0x4118da8ed03eeebe7e8171130ce3cc9b0d782aa9b9cc9538796d6ac2fd34f0a6 -0x786d011e1c57e43d43550ebbb80aaffff0d1b7d754e17bb9ddb569813c2f9ab2 -0xa8dd291507894e1159cc3e4f87971d5288e16f99e64578fae5833a88069d4638 -0x53080d79f386952fff8ac9b87714fd791a1d211752d166f48e3ed01218ff3704 -0xf988c7b44f456e453b8c8c33f113ca0dcd166b202b2ef213c2e9d4ae99fc3b92 -0xcd01d70cc88204664d9957ba26866d69d9185dd571422055211905d9c37cc448 -0x7e1b5b540c694270190275a7791eb79229f96349e3910ec62bd84651bc0598ce -0x05185a3f1470ba98739745585516c083bd0efda2c9198abfe0fd3df5ed52285f -0xba55828ebdc42985990c58966dbc120977f60bd0a11cd01eabe0cb9f1170b932 -0x438ad2811abe2f7ebe6eaddeb6af2721527b2d7990a2fd773cd99bbdfe47602a -0x36a59a4e4788e31eca4f2906cb77ecb43cdc880d0a95d2fd16c556c5fa5bd86c -0x7a7d9f8a02f7ad0e30bd7465c6a9ac77818108793247f834056f7d2ae81a4a3b -0x9d72b597ed3441a826581187312a46591e8c04979ff856ba8a9b6fad5ec96164 -0x24ae37b7b606fe38fc198c55701976309d1b7e9cd027b87d051523c540f3fe6f -0x3d68a81371ca9c6e7fbbe621bed451f225b79c36ea30b4749fa31cf31e184e11 -0x4d550d27ec81226ff54acda3593240c0cfed8c80de15bd6990bec1994d60658d -0x3fef9c775be7cdf397258237e178d148fcee014d98ce4fc4df4882aa3faa2d4c -0x8064c7d5e9342438b458bef1bd4ed48273e64c28737860b970db2e1593d4ae7b -0xb36075bfaff4c3f3f08640f41ed8e89d133bba2d28d7f91d96c95c5a1574a852 -0x5aa25eda0b9161e10eff02d0826d16178fa6d86becace0fb7a899c865292274b -0xca815910444379a28c3f23a966584123596a3c8bd74035a412cf8778ba4dd09f -0x5189f5a506f396e0aafa01a601f5b2e912374cac4c59e2b531febbee4ec87d1f -0xf11be17402d8b2676e80e63d3efb2f5e24ce501e5a3057c5e34b69641abd37c2 -0xd9b342057ef99c090901681a704b88b7d8b5a829cbc1d0d91994d7f6b81046d5 -0x325cfe535999fc87ea640ee595e809d17ef68d725dc05df2a7c63cd2ad8e60b4 -0xe40fd46ff4a8ae165cd1e0ae62be18a091b649a2bfe58ba6143260f393a33b2e -0x7451ba0e39772d83f52c1d7d6e03780ba5d53c0f722effc6b145813578cfdb99 -0xe8d59ba464de66d676034e8d895e64732d9c48727d52099997fd48d5c6b585c5 -0x0d1693a2bf5940c33d68ed3da05a950821376d8c98112d8369959256f84121c5 -0x8561b19e84b91929f10384e3657a4dcd462999c9a588c96026ca94c829cd96d2 -0xe70aee0935a642c3e74a68fb705b8f1d3cda95e908ea9ac2e08801cd7d7724b5 -0xa0eb71df7eefa781a18a1e831883e6734a72b16985c492b15da605c6a6f62042 -0x07be3d1756ea9652b073a8de77b44547169cdc1c81bde80f58ed1db4028738a8 -0xe0f1eeec6bb999b7bbd5cf35f4ca6a493d421c5d77aba03f7a61cd9553d4ae0a -0x642d6c6bd9389ef4280239f559467feb6a9ffb8f2799f588a8b1be51e4782cb8 -0xa54db8a3e2b43a3eb54a1f7488b367fc12581fcafdd298f2eb80c8523fa2ba53 -0x24ba246dd85ce349171314da022ee4da78c2ff68796a9561181a2c08e63fd6ce -0xc7ed2bac13ace43d955ef67b002b7fd99f5224b025bff70156bc9429b1290710 -0x1f9875b9b605fd773ef42b3491a15f3638290d142d8f8270e3d5aa56beae5624 -0x25756aa7618c825ee94c8e643ea89340b6df6c659b93cca87b2008300c755387 -0xf3dcd19fe8fc582181bbcc9a9c4d04fe57b27e6ddabaefd3b574683a88b28ef2 -0x701f35acb4fd98f442ffd4d165d6b83db151c819fea29a5ded0392e0fd76305c -0x11ba2f99d664789b37ec72acef03858bfbea1999ecdf3318c8b36d8a2ae3019b -0x3b154a6c090f532e4904d92d9963add857a5ba9564f60c6e01d62144fa144bec -0x6ab6b7fefe76f5a5375c8b8af45c01047fcba8614c583317f1b5fc2f1eac152c -0xd37a51668b8aba456882cda5f8a1086006e9074585258b6ca3326bad3d724df1 -0x7d1a1c8b5bb76654d75fd5c873df7cdb94c54318ae91a670bcf4787281c71130 -0xbd79b8bfcffbd3377aa862bf716bb4e38dfdccfdaea97d63ec3806c20a56fb18 -0x01ae2142680c04002729739f98d93b90e2ab7e20a2e00e742cf6b7cf26e7af7d -0xdba8bd4ae60acdbadf048394082faf0e2144a6918260dc4792160b7ea19a89b1 -0xf99fc1de40dcb028e02a43571f0db5f1facbe5294eb55c5bc9e98dace18d333b -0x29a6225f4efa786bfbdcb3ecdc5e201eef43fa582e927b7f0974347ef35cf4dc -0x385c48de233f9f91421deac3f97e881026b173e245e937393b519b434cd26473 -0x1ac432f6b7d0ddabfac005ed6e3b7c4504180f9814a9b410f62cefcfc08cc42a -0x8f3098e7fdb00113815ce32aac4f337422a7384fe9f2836eef89cee01ff58558 -0xddc5c6e44e10cec0b029c09766a199c0e7451218dae7c3b387f10da71531b215 -0xee8fa5dd8aa1df7f79dd32205f2da4a0a97eaa216f5235c15a46f050f7e087c4 -0xcca53abb3206642f0653aaff924b276d27cb102500e2cc369835259fde6ad372 -0x50ce320e58d09dac1809197bed99f1cdf58b0ce3b6041984d39714e45473c67c -0x4dc03247cbe1631f26467bb54d03f3a0a1074fe135b1a91b2630996e4aa0b16f -0xafcfa41e481d7a78c228377a7a2d2cb0aae0bd887bd767d0cf7f5da4ac64178f -0x79acc12f66e218711c724f8fd97db5faef722cf0b01f4986a47ce4375a824e5a -0x82f939cc05baba990add5f0598abb7b30ee84845ba9a0a42c4c4c0a0af356429 -0x1c1c887af14f83e823080aefb57054848c48e96b5b39b68333357ff39b15b03c -0xed7ec57036fac4a320d4be7ad86e425e972106cf60b1477b48c79dc6b74e1440 -0x1934eb10f582dac396f8064e12e2a3f81d8d2fbd1ead3e188f13d927f481bbda -0x5b7f96cfe8b306609d817200acc7bb46c72c73af968bd566878e7986f92f27dc -0x21fb5a82b90c101434b7662a0209efbdb79d4c425a729a96216ccb4d23fc8ebc -0x4d94232f34a8c1e0ea0132c0c8f43118371a4e3eb7fae44fdb840d13b88f6043 -0x1cfa29fc8c3ff9c6339ceed3aed6e93fa456f6a9b6bef2a2a48ed109b9ce0668 -0xdc638e3d15e8ca845a4c86186928f0a19626b08b75a6b057547b597a4f0315d9 -0x0ca945244332f0e70abace8f528d678d04acad8b7018d663da5fea80b45c3bd1 -0x346656d6d020da9d15bf1436e8541b79c4a4a45e13a821f566a2886f33ad073a -0x8f3db9469c5a7414ab878978f10b8348ebc0a0a2b2774bc21db7acbfb2b86423 -0x2765093f94f775ebde89512d11b1039943aa32ce10d2d385b73b44215093e8f3 -0xee89a1d88cbfc5b729c40c4dc1159dd756707e6fdce667278261b9641e25fe65 -0x58b5ccba86d1df537bfe3a666b3ff1b77148a851b18ea2566aadf2a41ba0d788 -0xd67a0ca3d52033c95357abfe7c143ba9ee25b910aa106b3e8a2566486ad7b602 -0x8577997c9cc0fc80716ec4b74e6f19a87d8a37272c88a447edbbc5357a3d6518 -0x9a8b452d6b05856091782a60a55517a273f15623e50142816bc0fd5c82926585 -0x6f3c66c70ff2e0fdfe4f684b1e8edc1870e17666fda20f7549357c8259e97d87 -0x59010ae7dc3ad9733149d7e4900ddaca39d63bb9e4508b3c9ad819f9ed9a6e76 -0x9c2845cd4b3589fd23b685f64a3ff6688e5ebf88ea5ede25d5ddb32863aa743d -0x9f29afe77cf5b4f798b604efe167a2988412abe1aaa916bf6cf247af30c188c9 -0x0d127112f41ad9263a8d3db4d1c3d5b57fa59bc1c1cb01a1e3ace21160d4170b -0x7c0434abc78ec3aefc7d94492a6089e94c0d3363589f94b5676e7be08ef99c17 -0x26f7ca39bf1dda439861599677dee9839a3452afbc62417ae2eb74af49baef5e -0xc2b36178794b532b4ac9407e722dde08666c3f687811ffa238dfd13408dc3e3e -0xd35b98ddc8d23e1a9c86b9c8c25c4a084b5ccc7965f5786bfc1b86ccd83921b3 -0x1c147a0308527841374c78be8373248cdfd85a84d71dd89221e2c666b74eaf07 -0xa72d78aa19abce9d958d5c018c82b4869d8ede85922a907e70bf58d293958ce5 -0x6eff9c86bdd771649cf438bcc27b699612cd47b30deff9593502c717efb56fdd -0x67c4c6808a3b45bb485a326adc0a3f96bddc6cb646c14d1932d402088357e03d -0xdb0e2f9f24b09ec7c5a6c0e0e4891e2fcc05d38fa83d4431e416b9e90b5fcda7 -0x06022640ace7da66f5a10f973ae8824586fc2ffa91382f16de4baee9e94ed4e9 -0xf2359306961662d8a63d063852a964bbf6994816301356a09afb664b217de31c -0x928d38502b06886963d6b19db46a9a5f7a4c5655d753051501f677e5034e8a45 -0x37c08f8ba25c025288508f9dd3520f9d57c964c7f021a944a6d555703479a821 -0xef59ee947e6a1706380be05b74c067f4fa87f3a51493639d7bb76276f1b4fc71 -0x5d34cd72a80f1ba4ee3134cd6830ccc247e5e311dbd442283bda58012643fc08 -0xc467d72b5c8aecf6f80627926201fc226e433b075b97e6ebd57122654efbede1 -0xb63d78dd5e616f69f4dd54ee8a0b52d98033838a5c4f0a4555780deea2925e07 -0x69043fe77d5a469801a55a43b6534d21f8e3b32e24717f2e39caee0c503a3b5e -0x9270b6ec10e37ae67ecebf1674547223fe92163c26bfc8d115d0ff7efcffb794 -0xa3cabf95ee94472f7e50931695f69c53729205710f8b3a59d1188237a5dafceb -0xf89073644bef0fac812b83c8030d17bc6390da74675ae962a0c14af5d2f7a8a1 -0x41069c5a8785c0c17b396b61d2af12232d13a3f301aca98ec85acfe81256933e -0xcdf9cc46f01413a356660cbd12f9831872dbe5e40bb259d02ba75bfd0dc8c0f6 -0xe75ab24caec55ce2ee288233d6dbc031f1a1cd654f0fa36eb54e7e374ce9c3d6 -0xc404d0d27127f5b842c7e9e40d405de403835733c517fe05c3382877f85c7264 -0x04d3ffb955ab501586fd122a23bdda75afa9777291409a94a3475daa5b53ad6f -0x3d3971e34c5c89944e2345d5bbbc6fbc04b2ec57bd92463180b9eb3decb5e8f4 -0xc3059a37fe3af5b63c4dfdb773f60bf9553216e9e2e4247605a06e87c8763784 -0x8f60e7e0dbb32f15d156b98faea9167d03827e81092adc1e0c812dec6c446925 -0x9ffe9d62169844651c20e0080427c363c2ad7f7b5de3497c35703badef2cfce6 -0x295e08da6aefa0c96dc4694c44446eb3ed3fbef28717b2da74d22823fc45dece -0xd9f409c887ca77fe119e823f0251eda4a3e225eb5dbe4f592c3c3e57570516b3 -0xd2c403e9b823d4bcb396f1ae070065d62ea3de94564e4c8513de798f1b40f809 -0xb485d18d27d0bd065221c8cb97a1078597dc1a4b84374c43cefbf4c87f902a3a -0x35a72887a41f910e00e390506b5f1340d2845d8a15c1fe3faa0e6662e5cf6c93 -0x0bf4a220b68cd46fb182e1f082860f181925e0ee9b27107638a4e8e281ea7a22 -0x5839c8113c61ecd7702a098e35c4c50659a1674fb4746b19b65017f8aef758fd -0xedd4174ddd3d73788bf0ad9da246ea8dd8c2884eb29215752514c15702e8c241 -0x9a944cf8e5139879506cf1bf3fd5d915115018e0fd406c67649fe62cbbcc00ec -0x3416b35fa2e991babff84b17550fd3a879a931d9099fbbbf5d7e5ee83b027e7b -0xffaaaa43a8ec32a962a73d2a0e3fb1933c626dc2349d01a82b0eb9c71d915bdb -0xf473cdfe7788861c039aadeed3690498e6afface251449a2243d8e4909a63d90 -0x686b2a650b8b86d49d065576044578af59056df79cdf4642d77b71fa5e062a1f -0xb5e4be3211af61cf4e9ded89cd25474db54543ccd285dc2aee5f6c8b4f76bc31 -0xae50b9e9d54e7f2633de38b17ed74434e60db5db49674296f6c58f96f24bf06b -0x26f5b389cfbd99f955bae0045e8d7d139c66fec9027d22d509e535bf776b3142 -0x519fe016c67503dee01f571f57459ff00488f5587b317fa67c538372acc42b5d -0xdb4352554d8a180ab21cfa5a3f8e8c1477568b05db1cf8b11f5c64d58c1bb17d -0xa097bc52288f67d5d7b0d20fc52dd030166c760a86821add45196336bb75b644 -0x84ff277d01cd75ce44ec4e76c571ddbf69d2890a6994b05210a276d66389d864 -0xa120371a9e8d2506c84b56cf0b15920074fab32ef98c2a040cbbf3461f9246c9 -0x6904f14860bf9aca4e9e5d137eb545719df3d78b9ca850a4516bc15e246a585d -0x9153a837b31b95025ca89b3165c12d3cf208a6eede78e2292851a227b490d307 -0x0d424198f502095f3c2a7e2e7e82cc5f7df05e14d299f98b0a871b735c51bae1 -0x399e39cc6f485e755daf16f3f3e90e7ef04843934d36897d7e372823ddaf0f25 -0x546c9d53966364208d280d22efb6026bd64fddc4696f9f3e35406b62a1b80661 -0x99ec834579a342ce85b93325fd2892b9f77c6d776b3a32a925c544660f8d5c13 -0xb2a150c01b4d04d541d9ba39d5c7b8dbd86fb7dd3b8e95220ed6f1e3d4220ad1 -0x3769a88c4e48e9a4887d0f1e5908666e41607bb4165a5ae2cca73e10eedc487f -0x2f7a2da8cd38589dd1e7983fefe27c396687bdccca7bb08b9a18ff3b94602d7d -0xabd0d594f5af3aac7613972cd141b48989a2f8f07939fe555d4424ba4f57ccf2 -0x4568a3ce493eed418afe5b81e6d5c52c7a7cdcc867f15264ddae1725f3e69c33 -0xba13763a28adf6709b8d657949a577c4991b8e024acada8d50d9fbde414d543f -0x0a81cc44863db979176a70c28ac5d0118d47327ae6d801a0e2c49c3521f03afd -0x802fb1e087d8c6dbf0e428ee3cb4b6f613d96c617fd8b817da36294ad7c18d77 -0x0ce2cc27a1d32ad48e7c48b26cc30b315c54a8cdc2a612461b890e27bd1a45ce -0xeb97893261858b0f10b86bae8a1a4399d46f51921a18729477519b6ea666953e -0xa2342bc0eee8da5c6c3eb192d8536bfbea91fc2b2ef520c2f0f57c1a19d9b266 -0x96b48eae538e345fcb56de93ade2f14da6c474a8c30d246ea9982a8f660e2a37 -0x48b22121952ebc96ca383f4a5e1f966242946f7d5461283c44295653d00f95d1 -0xafccc24b12ffe71ad92ad99859dcc22433e7fa373074847d6aac8ca1a1786ddd -0x68a54338c980fd4ca0e7b247a102cf49129174e49fdc967de855c62f52b02ae6 -0x9cc61560bb9e256590be9f81295000f069f9f2262db7324e389b8514c39ad7e0 -0x1bb4075dd241e4690b1276545e8d13a680a165326c308351b014f5bb1917a5f2 -0x2537b4d83707472e0a63e3d708f1e2dfb0ebf02401c9d893f0f18e998d29193c -0x36575b1f33c1f10e874884b545013bbed54653f407899a24257d69fe7dca4507 -0xe896c7db4b53907dbc6a5e368ac2cb0da5f5809734e0648b2f385454eb12a8f3 -0xb3d5b510ac42f099a6628451a05204b389eb1e326670282e9fb10ac03de9aa04 -0xdb5022c7e053bc200681c52774cae7ce7f8e641ce0daae74bd9c754d0f991cda -0x4f59c6fed16a9203e6922d315f73ed3a393546e7b08bc33f0420076854066e7e -0xc5f444ffb8f1ca415df2841079abdd0d6fc6e747639b177d29e7440330717f5f -0x399e39e3ee4d14ac257235c87513af6f96684d0461d0c9783ecde555fc952481 -0x024f0eb1f3d103e7aaa15891adca78f052b5788f386345aa790c3486afb29361 -0x4d4f45c67e6d1dd5efa8ae5cc687172b63efc69a68e0b2984fc3f329151b2bca -0x8931091e35a110dea79734792f623f89237c262d7b37c192cc232ed21585cc16 -0xb3ecc43ab80c12f39f787e3b20d69c4b49e64d326dda590cecb5307c0217a45c -0xa719b5a1c19c3a2fdbae3019e94d2234059032344142ccc7cba0a79d1c017a14 -0x085017e511d2ec26fe69a17d91b20340d2d231422f2514bcaff4811805527dbf -0x492d2a9c2fd76c4a52ba828de0b15d072bed5e82c25985ae4ba0cdfb91f3ba59 -0x7a592fd0e3475e9f01c4ef78d77e45ec37e9210ae3cf074709f6a2a1b121bc26 -0x28fd87d6aacabb6518499e6cfc0e3d336ab1fb596a72752a50030884b8b4ba33 -0x1c2700e08022d0d3ad8b8a4708ae40e0e40f3148ea3ef6ed897a611faaac1754 -0x9436c99f3e5939f7c1480306f631ca9f28a6eb860c41f2b7a4e58f5a835366b4 -0x88855ad7af1a0d89e75ddf8c8702fc8e12c0b459e450b232c88229e8534357ce -0x6eff40940d342e0f4b20ec1c5a3ca0568e566c5e2cfeec61507e7840ced0cebe -0x2f08f262022570fab35b5a6b9e3f51832b106a6e5ceb7b6d7ca7415103831cb6 -0x45836d0657da220af6f485ecf1a59d7423650893db8b25c1d2dfa55ec5087b82 -0xa75f88e920f00c46da93e43296d2b8b03218389a95811fad15df59552f9abc5a -0xf6f111d564bcde583096088b68a447952cd97ade6e1a705feeb0b4ce4f8eef98 -0x17948b5f6c6807110a85709bf5021729922b76a09f21cce4ab47e9aaa21bb12e -0xbe14073d5c3da02c95e551e351d14defb1011952a8db578d6bdda15cf63fd524 -0xeff44c1a472ae53c0b9e1d3fdc3144e30c14842a6e7a7bc01ce2c76a37d79849 -0xfe3157f3d98a1b70511dd5f2c06f0fb915b37887cab4c4e8cf2ff2fcc220e1cb -0x7c7dba8fd18a9f06646f129c6a61e0a71c7d78aaf7a94b377a5d5d838b0e274d -0x70455b312a522d0590dcea95d394d9354de8721ef1de32828f93dfdb76e850f1 -0x4aac45f6cb7f32e0790bb69ca62193c6dbaf2bf4a38d55a9491e09b9515e40b2 -0xa006ad9fea4e90f385d3d5e4343be853a0625b4cea126d77b0b732813c8f055d -0x258f4c9daeb2517863b993579ee06bc5c675a74ef18897281ce59ded66586f02 -0xe559be60b6185514bcee56499a3ddc5453b545015decb89d17e7a0fd4d3b79e3 -0x4a12adbf82b9565c4e78ae74e7f6880a096f7bb3f44898971c19a278ddfd0866 -0x30da36bf9ba02a35bb5179f30b0bf3c45cdc4d2b672b6487993a2da52f405ea2 -0xb11b05255aab8dc2572ad3b8323869bbb8e48f6bc628f9d36974e62ff59bf156 -0xc034842dd5db011077359caf8edada5ab98fb52126a95a0de5abc21e07f896a9 -0x14fc7911481152aac9f02301ffa5491051c5cce57677b881a71d0a057a75f34e -0x94e05e247afc2014b65a06ee784a308d1510c15b50ad58a79d661f4973203c66 -0x788f751770feeec95c3246f88276cea4856fab436d73b151e5d8548a8c5af685 -0xc3f9058a3e30797ad5e7ee2996b93e67e6eaef7b74d4769a8e755980af85b289 -0x6b575029d2b2ed1ba5fe4a3003756e2b4c4b644c15292585dac7364dc87c9c33 -0xe17df932092c8bffc28c7f81a5c2d7cf4cd945a4ffbeb3cb7406d0c996bcf88a -0x58e06ad73103f3dcf7da37801d512ba0ce88b887abb568c4f7378eb5977d614d -0x720256deced139dc3f5fa998f1ef3ce86bce9953b6cb5998a08b4ffce2d994a8 -0x6c5945bba17d9cd1f6140156c21e2a8e2f5ce9455571deab07c8aebc9eb4afdd -0xc79f773f985b15c9486c60c05ad7f4ee0fc05f574b78f5cba042207ce746b674 -0xcab37abf22a4434c48f0f6fb73266cbeb814eeb5d4c20578f5e35256ca1a187c -0x3791dbea8e5b9713bfbd4bbd193d3e685bc007930a78b215149e51b91886e06b -0xe41abe1e4183020c7d8dea4efa24187d8719954d9bc57d53bdf7f3400c408e6b -0xadea87011827a1b0d88c2fe2fa9586fb9789846018e5685a9e4a52e43ab11f8f -0x9afd8e9e3ef39a104d36c86a126df4b5e2ca36e65f23aa75c5681a0ffc7674be -0x6460be170557c26a9f44478d688d974406c2b1cab225a8f87018919279093b73 -0x88a1173173af30bc6665dae21f48710c27277ff4a5993a910c27aba6b468ff0e -0x7064e38ecd894ae5f8bc88939ebc78afdc1c5d7d64f447ad801b520a9f3d7697 -0x2e8eeab56ff7da58590116c99ff0975a2351be6c39bb843788df8a2865a649b7 -0xd5883da7b1197e2bf8a33e91fcffa884a57fe2905c43ecf8f9a8ab168fcb8c87 -0x84bbd2404e824e36ad79d1c875775779218a829a73f9e2ac177ee9d34a000a0c -0xac6ea7673c0b059ca49fa100e3630b4128ecf0442408e03d5279548225eb4bae -0xcc45cdbb74a12a9f84749b815eafc75e40a258ac5d992cb669d9b78599e4bb10 -0x575a39872e9ca37c0299a8e2aea6de439ed6b914ad9a75bcf06ad59cd6687e69 -0xe0fa5c4edde4b88491e3f5aedec83bfb507dfadadd357136dbce38a8ae1fc8b4 -0xabe9e6bc7f5f74690daa52614e7d1d7ed4295fdb6813f79d83184617486b65fd -0x40321c0bd42be43a9baed7da317837588ac65722b9a7a6ba7167c947bea95003 -0x2882562ba056fd34e4fe4c6430487963412c4928762cd73c324994df002f8ecf -0x1c6369d9f952a7adb0cbf3570b3b8e1baf600e955289648386ab413bef1fb6e9 -0xd3ffbda2fe333ac9f628e81ee6506de7e674ccd3c37d1427025b0fb958b97a81 -0xcbcffbfac113fbc64073f75770cc0d06bc2861a2b1428136f1f314e82730f3cb -0x80ff44e5a992ce12e87ebff682eeb80f7ff92678b1c183aa4e9556961b7ca932 -0xd6ad1277bbe3e45b87fe65af77495076489eae9f87c5ff29875d8cdc77c79e51 -0x3c1abad96fc35e62338adc55b3a4ccec5f46a64d82eaa90da9863d4b9db20467 -0x7282e4c0512b8e2e7ab3fb288207c0df33dd1e0dab6247d19dd3ba5db547ad07 -0x1033eaf2a2be485c04b73f201259362952ede286899b8ea8d10aed77d4b7fa38 -0x2de73adbfa651c6217b8eff7575741f7317ca2869bf2e2ddb1ee55b58cc4538b -0x87910360fc53a68c856d22d707c950abfcd93d3741e72881dde6332522f527f7 -0xfbe2af9d6902ef388e2a2a79860918cb53ca7e0d138167f33ce58c12b4634589 -0xfa814b2ce9a3b8d75a2058e193b6fac0efe3e2646255d28e6350d66086bc3e28 -0x9404f8d86d0fc8679a40455161d050324cfd3dfeb0abe043b7fa429982c8f104 -0x433e1aa8ec1172a2615f7b7134deb92b3ddab577ff9142953be6f503dff61a05 -0x8acecb77430d6a1ec3303ad1eaa724d54870e89a8bcd9c062477bbc7a23495b7 -0x0575f7002cc9dc155592f716ffb8d48b7c98866c4f1c87513baa16d446d70494 -0xdba1c8d5ba12ab0da21d3d4a148a8d52a87770af1779e553859b8bde73ba543e -0x3d5c17591c0e5bd8e3338fb91072d6313f3c4f4ff61d682c935e5db4640bc94b -0x2ab1f974b1930513ef957d1e71944c3ed5112c5652b2e14044379ce295bd1d32 -0x66d75d5503a26548e361286b6654a479f0cbef6eb7ff9ce6ca52af9a874ad38f -0xfed39cf456d9a4f4a865604d46bd22249a416e93e63dd11523cc42298ff7b5b5 -0x4da2808ef0fc014f1c78458207cabc88b6b5277ce30479a125e86eb00aa64bd4 -0x62a60f7670d3f49aa5045e176653469d743508f121d783e3538de6af1c48bd6b -0x334a11352d9ac7712f2d1afd3153d8fc5ff1601a208bcd369580d1bdcaf3fedc -0x1be56aad6c17b6bcbe09d3fccaa52619eea449f6558467e934dc279b1828b029 -0x26fece3826cd75714bba94144679032f2198649d3ac5aa8553464e1e24369655 -0x2854546defd296d217338f7fbcdefaaa3ff2c774b0f45ef3cda4fb50bfc6f5da -0x7a98b7982dd64f269df1e9d40c7a5999e25d7210787b1b67184dd8b75c8697f6 -0x6b563cc8dfe592025bd0d5955b886daab145e33c93f386f905af3522e45ab9c0 -0xb1214e0482fa075e8e4c3bed279627364ad70c65fc9ebee2685871bc7886e399 -0xb4add55b7aa8e8631c2a09d297d5e83a3b35e42e2b5a48fe76750dd67f5b2d7e -0x06f204b9abe0380b5665e5ce417b3a37ede4abad92b9ee3b0c5f6596d688c22d -0x99defdc56f536506548b141aa65648426719cce2591730ceddde9829f96ac6a3 -0x14606caa55f1d95cc452f589f79cc508fd472eeff0178ac4da5cd96255713f23 -0x5375b07eb9c138977ad4e9ba320ddcfea6deda52cb2cb7680a29c0c23530b3be -0x6aad721b3573b5f36efe770524e4a71aeb9bd9a83bda23d19916774245261444 -0x615e7df6918342d12d2a3c8f632172ec9cd95a9af73cd04ac527ee130b29f0bf -0xa72d1759f59d11d157d5adc6addbdb29cace716eef509e3db4b0a3c1d3d2ab73 -0x33383b15c95e1790c330bfbf1cf6d278687dc9cdcdb54eed0120fabdec58c312 -0x963dbd93928ef934fc474c755cb064520c98d194a74f4ef065b2579d9fa09027 -0x76578c71317684c38c945e54e5a703ee2d67712996e04386f2c338ddec5143dd -0xeb7d28e3cf63bb2f9cd4c404a82f9a25e5bfca9f346ca3c193de2417375a2837 -0x02e260bda138a75d28a6a1df962249f4b8dd7dc8a8f2c9386a4f1b64890d3bf5 -0xfe18c6185c44a3cdab701b202d569920a8547c68c95eec923aeac98e1ac33d14 -0xf56f78221b02eeb863b9a3308f6f5545f2ed8f3fbb2ec88ed8e406e2b640ba10 -0x05247bec3298977b88cd12d45e3ea5e9b9cd3623014e44a4ca7f6e5228102f23 -0x8c064e6b03d9647c86c49fefa8265c0fa0eb92835397a6f7eb92693f003fc43f -0x010f84ecfedbc7959c6b7a5cf6acc6a43197f890c9c00b3e48d8fefe043f8f6a -0x4d132f137f32d1cf4ddc78097f81e1601dc81be3f0eed7a76b38994d07323235 -0x75a50d7c6b638429ea5798b5a012f9f4908d33a517b292053aa7c45ada289730 -0xacefb0aa9a4d9642a1a0afd042a667beef47f6fef9391a66d52e34fb28ba6268 -0xd7588d3d7c6895781c82f69b216ae97c6dc26cef21f905cca5bc27a676b06a58 -0xa0cb936ecac043b13b89e04932b9bb0466d08fca412a7a0fe715d2d1f33caa16 -0xffc6ea0a6fca864d23ed8c6af3b2267328a87660121e8c8df065a472e092a54b -0xb327ce5e15447b63653caddec097f1760623e30c6a19568a6125ec074905ca28 -0xe4ea896dd5c0cdcf560c188e1f356dcdb5f5e6acb40860e03d09d6547e0673d8 -0xd51e1eaf3404dfce98cc44b3829d275de4f09a646f02972b8230244efc970a51 -0xc1b56a2e85f2aadb0b649aecb3600884440159077a73e14b584a5370655a3190 -0x29f8c2130ceece382f61e2ea3ef13de6535ec8dbc4b20dd24d393635014f6d7d -0x1a7b3c84b5ee3ddf88befafb8b5d07889adf95280f0685c14488fab5e77d55b0 -0xd4e3fb560ea39e596e692a5cfebec60dff6cabe22e1bf9e6e0ceaf9a1f666ddf -0x5ea908e4c47b96a8c8975a15689315e2775a4f2bc4750b444623a23ab1cb45d5 -0xd156b1ad57b5ad75d1d607fcd89dcbb4c216e708fdeceafd98fdee61c42f98a8 -0x778dd3d05389a7267e8a55c68beb791b7521d5771ddd25817e587bf549397fa0 -0x971b83f7aecd054e25d1a788ecd1dc01570ecc0628248a80221cd6211aa1e582 -0xe7d95fd0dab476c57ce51d59aacea59a11c7f75c7f87738c950927e7e7f86ca1 -0xc75c581f8675b55a05cdcb74c252db45f18fddfd2d0871806d80b1f4af10bcd2 -0xfa23c9a345c05a76be7e72583451e0b413962ae61f470fe3a73343c2bc4aa2ba -0x4b16fb6678b9d8659b65ec3624f854fc4f9237f2c024aa2a86baa068131d23ff -0x461b4752dc0a3f75a6b0976a01d3a82c1cbbec445c9c0c903aaa8eae09b982a6 -0xe24eb066315e0479e2b0ce8c0e033d950451701c8ab643f294b74b04344393ea -0xb4fd323a7d6ba3ac4c112d63f501a2507c22b6be857b6fcc940cfd0f2c58a549 -0x191713ee102af0ccb5cf490f3159c9687f5b5e9ad30f33d1b54b6d9c3843f227 -0x00d0db41c1729c5379699d531f6fb4cf1e68a8c9ca3562fb0728a63f2b2652ff -0xa21317906a08ee958fd7fc5ef5b4a79ddf7357d6c48c5d7a2cc6386e42548fd4 -0x56af2bcdf0957e70c44ab39ab3973849cbd3b6223d1ec06b3cadef94a494687f -0xeb4d6e44ecc4bd78e536710ebba09358e4b93368717a51cfefc00c8c6efde469 -0xbe5f7705db81130bcc9b7a2a9c14b862d153dd90d770dbc59eaa081475a32daf -0x246e0951a060f0f702a7d4b08e52f69eded431efcb67954bf167015dc3c6c767 -0x41c8bc946287931920a6327a82e4c912093f37e85872b61d15050cde0c517cca -0xb42d0b50d403f8a4fda589b5f706af8f14a7465d4017a17f9cb6c918d357e638 -0xd654c98be846891859e6ffafe995847a5a0640c8d0ad82ce2fb9361b98915b83 -0x1688ba50ed5055b1a2d30df6e89125983f50d9ab98b064b51c4cedc3658266da -0x06ddb5c58cc6bdf8acce63408e6629d62034116b9b62eaf12594155e09ebb1ac -0xd88e1226b9882800c86a30e8f948bfbaeac39f943843a59df4a7fa4feaf2bc5f -0x54cb82d89039d57a150a9412d53799946dbdf5639dca2db1b7748fa2c3c3483e -0x0f21c29ce637854027c68faae7e785a0b3533ef3b1a324c9e1390fec6faf4a76 -0xb8a1891ae74ec367109fb8f1e9cc78eb86cd06d1eef947e728d18542c847bb7d -0x0e35650a9a02ee808ce0ed226d8ab7af94648a4182353595c0e16c1beeee552c -0x78b96de483f0f49f0d96379af316a3256aeb429157197f06432408efa2ae0755 -0x40869f77f40d383f7b2fd72a61412e7f2bdc0a326410a0a6a945caae81c31129 -0xe6a7f00b243b9df4f2d8430c693e3df307a9d94e01d6e83b7b1c225e67096999 -0xe0da6aaf6b4619ed60c4cc5d499638042ea3f9a25eaf218de660ddb2cdf7cbc2 -0x23509fcb52138b2e885d9555616b6e5dcd95c47e902d08900e330e14ac8c4813 -0xbfc37c4fee73f73c08e0890f1eccf5ff78d32b9650173e4f94ca7f00be259aad -0x84b5ff3c4906273c0782bf8116754ddeeefa023644c9d62b971d541e0bb21a3f -0xfaee7f3ac5de078880c975af319cbb9c46d62328767c62e5d30966056368b1e0 -0xc25e79f8cee1f871a417ff7801c05b683b4ff4bb7749d50341a2a6876575a0d0 -0xfc8be4f9bb9b7ff1e85d8c5621aac254f5d14ab491b57ed00abfe987c42dd1a5 -0x0e843a712a68d0b0346fe74b17becceaabab260349d37dfe2fa5ecc160c75f16 -0xccde655bdc4a4391589a4859735b1dcaa0013dd790f7215f142506d79fcf939f -0x62b7930701d1883d3527ccc8c8e2eb0784be9890a097e6409e1e5cfa72339909 -0x2021666f99714aa2696962fe2909cac9b6b4479c355106f8af68250b976ea4cb -0xe1e411dbad61ee4556540b6cb273aedb3a91f696a9714273997980ea6f036985 -0x113f9e5ae3712e5bb81d82c01cf383f08cb58a9eee499016c1f65aba4d56c2c9 -0x35b5ecdee5307d807c2df841246b325c83c620ee9362b42e32571f87a68ebeae -0xf4a73392843f0062f158c99c8c79a876abf3eda3ff9d295a5a6a3becb85ee696 -0xfc0f0a792a077bca2f5b37235d5b8ec9c84ec32ea6a3205aca451ab7119dbb91 -0xab91d991d5c44622a00ea7c25c2e1a4bd40ada1533430d8f677fc4d2aae60b43 -0x7879fdf0b38058db33449ac8b53cbbd6f8483b0d8f456eaee728d18d248edb46 -0x4a1e6a455659808e14f7b4055873404314972419a3d6d2d47d00cd3a28f7f0ad -0x0b11fa8de35e918d92e5e8273aa7a3c4900a5006f1401d3057da8baedd1f489e -0x1121b4c2ca82be390afd3e987872582f1b931bae9c7c39bb51febe28f194b32b -0x6f0dc064492f1d83be6774ecc7e1e26ae6222658e1da4e5ae26d39af9c8005d5 -0xd3d3eb3bbaeef23e2220ecc74ed9107e886b5dd891c9cda364bfc7d619a72816 -0xfc551f8e7790844a735b471a7489847bf737293380b81a53332abeca3510308e -0xcf88ae69f693bad164bb8541a5a2501e7b275c1b9fc257e1e5563f3cf57becde -0xb309d99422337897eb9f56bf691f68f5c3ca372c5a0469587764018cc3c597de -0xce94cfb95fd41b5df37ac1a8c0d68c2f4aba7356fda80b044c2eb07564685cf7 -0x24782538b86b0a57da82418e2cfdb82643f3778d7614890aba99c37d51aa51c0 -0xf668ad0e6bf366c97a95e940e98a8bb29d960bc1de62faf92a0d46535a67db09 -0xeb0aacb42f279837d0f140c1f9c1b596e87819e69837516b6b7b726aeaba1446 -0x46f32567ea211c40df08503af9576963b482bf44f93c9a8c7fd68e757f71b6b1 -0xfe039e96bbc99add91f6f8e6c4d7ca336d7768802a9f079fcf8b6a2422370aad -0xcdf01a082c64b9d56fca9a7bc80e28e9025955b9ba433b44d0444257495212fb -0x7a1eeccee9eb59abfad243a8f6faf4bd05e41bcd6c1292752a629bebf6f77345 -0x17224d9a047ef75866c4d60501dbc31ed66d35c5c8113588b2407a7e0dc36378 -0xac72f282845fb777e4ea38b1d35124f6499e8ef5c2e968f247d001a22b63162c -0xa811dd1e9712209f01ca252ec4665ac997c5014fbd4474fc9521b65851a97df8 -0x45618b54360c84b5720b1e3a9d6f9de0e635dbfee858c3442cc6df7a8f00f3b4 -0xf161357e92a9c7a9976e2bf6f8a1013743a377a01ef58025d81ba5db30b6ac9f -0x9d3068626d2776338e6d1a9cff39c3cf609e1aa4eb12b85b850c9a5fe6dbc6c5 -0x4e4955f760b4cbbef2036b0fa3e7f510df475fd1f38e9183a3e69e2c4b4a8f84 -0x902f2ded07c5432c5a21bea15f35a337a895f688250d70ae765be9e83950697b -0x5abcf2c11d1a976e34e4c3c54a16ee52a98881a7180b05ce181580d00a768409 -0x36e060178fdaeec934a219b4899856ce8948b8813e847ba38bd952460ecb4ece -0x3d5f3a02a18475b65b6009db54b16d897f2e11e2aa355f44a8aaacb18cf24302 -0xbbdfd201c2918b2ac10f557bef84ac930220919ecb8aef1e4e94cfbf053afa09 -0x39155ddf723f2bc5b7af1acb32bc73e3e486a7d49b00e9da7a4b8178a18824d7 -0xac7b1d1f69c266f8fb3d7ae6a06ce16e1deec1934ef2de5db36448a3e9c72ac6 -0x7e704469508796605f8a8b40f696889a4e1df9917aee65fe254fae52d373afd5 -0x62fe34a75a28a50c66513583f5dafde6ca4d8e6f968e64610b48f459f12120d0 -0x631a6a51da8f4078ee9bb084207750b3d91f1a93b9a86645b5cf52675839ad3e -0xd64b89ffafffc657563f926872e12775d61a2d874e9073c222642cb1e512da30 -0x7f87c0d0eaeac175127b456d63590727c82f570e49cda010a6653ee3cdb68c39 -0xabd3d402545274f0cf1f9bd795b935c7449a9a7e67d01e554a8d93d4aaa1970d -0xaef0e9aebee68cdac1cb8a42c4b8a9d0a438cf48d7826af26518ec5f4425f227 -0x3b3980025631fcf69210f07a31b1ea4d024e840b34b1e25c34fd38845908b936 -0xf6869cf0a02e1ef9cf0e558a1f018c0ee81961df9e9edb57255a7924ec31f0eb -0x81429584053bade22ef0c506458ff9b1caf0be4d9961fff873a9d1e546511d01 -0xbd70b63607e1b8dca8f9a68b88a7967bc56f37f0578436660bc50d56b51caac0 -0xa5bd2b194953047bfde83d6544496ab0195bcabd7f749f9632ba75c4c424561d -0xaef217d89f2bc0a023082d8bb760964ce22d9a451ff55eb33ae16b87d18af78b -0x180470a912eefefdd69243fe78213b5915970c4c86bb82b5e59b97a39158fb6b -0x00a6229acafb473fda9ca6e74782a85c9056fe3a6ed081cfd18d74f9943e7021 -0x199574923465ee5319656c19ff894ab46a86a352051d44d547509822c6792c57 -0x89e8b064674d363a0d13ab26a7f96c2aca9d246617483a3d1f1c64152c0529c2 -0xae0084f0dde239e0d2248bbd62cb8a7769ec11f5f6eb9b37d5642d0634e2049f -0x5a6894c10282f355e481eba3f45bedc10dc701da383aa169a3d68bd63991a334 -0xf2969546e384738e073e66f552d2d41e97c8f5376ee76ef56cb61db9b397e8f1 -0x260ff0ec0879ef9315d3eaca4473b27f594935f51b7c150addc9f9f6acb00806 -0x5ceeda8ff64811cb499da699057e0dbccefc688aafff4731710aa4153ffecd39 -0x55fd6c704b6bad1183db0204b6006b1729a705bac2b7d0315597a150700e1c61 -0x852d12ca58e1a99445bce9d660f8ed63a1646f4cd551540670c1d606b2faebc0 -0xe1af781fdeab1ef0bf0f2e726364e3274ea2740e3fa17d29e003546c7aad35d5 -0x9a1ce96539472b030d8a4bd74a552da054b09e31a8fc079219f8893b043ce1a2 -0xd424f0ea4e6e17619f6ab323ebfb9efbab19549073195432e61e1df3973245cc -0x03d0dab7360486caaa74c05b2f35804146429f7b39ab979e4224c90045566e80 -0x2d6ae9cc423c7740a187b75c73792ec04c2f6a06cd85717fa41fa7f30a777b08 -0xe9d65616557b50fd5d6935526ee6d00137f47a285da65931071d8fcb1132fe7a -0x3af36ba9b1f4dfa795e8436139cab343120b128c85477e661c01ba44f26ae47a -0x1be973eefc73f1d1d9e9c872e48c16d367866c56a3d5d3c248258e00f0a09633 -0x818b39581f77d126248e721fe8ee35e108fec35584d3ccde143d4dce79db41b6 -0x75999b574ba893f12cc6b9e95f89d2e65b9c14ceb263ab82c757e51952889640 -0xa9ee38b33ce9066328df9dbe44ccee04b21a09550198056cbadf52f8d51dfc1e -0x99af296f0f88a5b5d5b7a2d06f4cd5ea7e59bcec95b9ac98b1d65cb2160d59b0 -0x24996ac4dc9f366de919b1b3c4e248275a7e68ca5521afd8ddf787317308cd21 -0x07cec5fc5a1f8e61dad2b397cba28b14fdc421d869e307a7c61893d023a8c60d -0xd3f10e153ed94251f6358db3ad8f33f32f8c64c564e43e7ceed4e1a5e6ec68bf -0x3c4e1728d7ad70152b9c23c4a626c396c8a8625a66d37a8c936480deb7569779 -0x92a85f6655af790d9fba83fa4706e31a0fc386e7a0041db7dc7d98186de37924 -0xff14c3e767cabc5ff5930f4b2b6ce7a8df78f91847fff9cab54e8ce0db98cb21 -0x18ae5948c86df1a10c3f0c761483f71e618bf678b5b99368338eafd46ab88c49 -0xdc30e42f0148d3d51a150ec63674568d80ea83926fae76e89bb2e8c761e0e566 -0x18ed6c985d27b5bb13bdc1925cb4fa50b2496667d034c777371932e11d3c6de1 -0x52eee280be2bc538088b1274e0af19eb07e9f26e6daf5719e6b68f4746fbdcb6 -0xb6b3fc9a4c41354d74485ed99a71bd4d8422ec61a060cfcff658cc45c699082b -0x24cda32b6641d72c09879c7482ec6bb80862efafc6a5b96b70852b5d17ee8c52 -0xfa9f816b8a7ed2bfd32c2bd92860878c3b817c20dffe4847422757eeb10a8dbd -0xb6254082044216adafe4941d7f530557761c74869e3adf28e35b255b65847317 -0x087d47d4f4f9ab0e23248618463dcdc59c07ccb3d4affec826067daafc81b025 -0xae91c8edcaabd8ef84967d030f84b215d5fcae5b811289a27640c6924397aa46 -0x58b37b2f2394bbcfdf7c3a6f101f87b6d9e211be343aa96629013c0cbc78d428 -0xe7d55ba6c3bd795d8736648c1197a080b86071112e725acd49b2cb5a7ca3b5db -0x5a99375598b756f9d16b702c6abf2459051c6320adab8a631e116f0bf60c374d -0xf4c3b5a198f020ef34e63c2f3d14af7b1cb804acda6a976af39799848829efa2 -0x94e0d690b17da39f93abc093b7a609c0602de4f3dcf942f65894d58f74906948 -0xdd498c9e986d9a08a7a2362a91ae65483a0a497914dca21ee72368121ff2edfa -0x140726801d7ed7d00cab7be48cffce000f51757ffccdb1cf5ea866b6dde25531 -0x407f879753bd5ca24a72d54ce6bb9d3c7dba959562dcc0a8dfda10e401adbf77 -0xfea28adab6d68f68479620a3c5afc6aa788b6fce48adbeded482d5fa143adb6d -0xaf57fbd858cfb180d67acd5004d19ffaa8928d66e367a8d779c98ec6a0d688b4 -0xbeafe8eea288ba50d0134f04852c44aca010e1e61973c2722d883c27a1c54424 -0xe6d607f331d912c3a6e1b934b80c054e19dc611e6433ab296266b3a5a54ba64c -0xefdadf1d8798952fae7420ff7f435bc919cfe44537c3e376e6a9887d25c92844 -0x67acdd5aaf23a6ff9c8a14df2e4a88f880dbcaedd7b11336efc363aeccf7fdba -0x2459335d2c06a1e7f9544857a069532df0bdd282be7d407062bf8a8dbe605f46 -0x232b9cd1d116f577bb697af78d18188552be462bc2772f76091ae1ff4043d7f6 -0xc7df0d9f70c504af0c2adcb93216b380bce6c413dec7e10825f3e3c686dfdb31 -0x27722c8439399ce0391b224c0c7a0d3c79b691428982a219b9f711189553654e -0x82fc249d315657010e31c27afe17d6a4a2ec73d262cf0c5b4025ae0250305d98 -0x01df7cc548298ebf2660bcddf826e1334e549de5f878a09edb62341ed420fde3 -0xf50c5879f9efb21416e51c6f54dcb4b59cdcb0bbe1e3aea137c6f6b742b71603 -0xffed1001e226afc221a43d27a9117b2b62e5726c9341447acbe0a1346ea78f53 -0xe4151541b149dfb5dc5696b29eb198b4b6b4c98c6ed23a2ca38a0310dff363c9 -0x7c1e2d00bea521e7e0844422ade4b6b65a00e4c3fa6b50e1bb28ce1b3d6436ce -0xf021f8cc53039b091254e8fc7d04cbdd2aee9b78b816c6e972ef1417f67fe622 -0xd64f4f1808705b316cbf2f7cde16996dfd640200f2aace5c084bf3c93f5e7f69 -0x25ac381544db38a91efbe57c54e6a178922dec8e762d167fa1c1e7952af1ca98 -0xeb2f3eb0fa1ff43e1952c1f853ee361004b2089ebd9ea0fee216cd3e3dff0650 -0xe07afb519e52d5b6004e695960fd7754a2c7b31ccabf06a636e8c74289e9bee6 -0xd89c04fa36bd540a64f509bfb3116c07258f967d289f1a5a17d27fcc5df58086 -0x7ff29bc36e93760268f73f90318a493965d9c13a9c1b9100ce51cffd2bedf566 -0x5b7108fcae9f4815a30f8b7d9add9f7c7afcc218ef8cb1680129cba7950993e6 -0x524984ad50e6a6957393304bef2a355269b5a511e2b726c99f5442e888573121 -0x32c4c69826f41a11d0b86127dfbe29034468a911bc810aefa0c8cc077ee69b60 -0xbe442ee5d2eae660f875507fa21c9809f963adbc69f40fdc15206964a77ab3e6 -0x7788065c9bd6b311a3b730535d95dbbbe898f8ee213b234c75193349329c487a -0x9eeece2ac607ebf92058afe07902e228497f8b8ac2aebb8dc2da3c925e0f1f08 -0x7e2615ae907159ddbbe857d35249608da18b4f9469bcea23ef35c4764def6df8 -0x54f9937f3a6c889fc3d42df0f21563c19ff3d510069db8eadedf68c7dafc19f7 -0xee0a14b97223430d2e673eb8629e7b9a581489f0c3126166f670f2d2d3b70d54 -0x9992826466ff2660ca6f1af246233cde0c32201f317ee6d37caf2e02a8b8ffdb -0x08eef889bc1c44ec0c46b281ef357971a035bdc957f17b0c286a39fc17c47218 -0x1abaee06c642f60479580ef645469d4ad392ddbbb2e5fb66d0257b2bb935478b -0x8eb92f575aee1b3a0bc6aef3edd348c82279f8255f187c03ee337c11d79e06cb -0xac59723fe0085dc9c654fad508ed5112fc56573a1cbdd0d87d277e5cbbd97e73 -0x942c118cee1f32b6c0f8030c9a2f78bd4dd9234e4caa9de4d463a7e9d9d0836e -0x6249536732a4cdeaea363cae92943c1320f1b3048aaaf8b96bcc8b33df057e7d -0x5678758716be6fc9b31427457c0fc6507a102d1cb3366aed77c1f6c66430bd04 -0xf01770d259b6a353a70fbe1000cf2cc0549949131279c1b2a0ec69949739da38 -0xe5569680016d760754debb50b26fd34d47e92d2a0e2f35c619eeaf518d056976 -0xf89ca7bb0c63d655023d6f2065afbdd6f91042a8e30fd0eb09755ac78d57e259 -0x815f71dba44f3180f30ca9f0636982e13ba529a004933d8fecc0b1148a8c6a93 -0xd3a2c98cd786798bc5aa137fb0884c5a6411690a50f0a0ff1f995d99bf7db1d1 -0x734181eb89a5256d83c78770eba38191b3f463407ad8bc032e409f225484ad10 -0x5e481c94441942705dfb1b70ee3dbfa6071055bb0617c229df684625c5d34f4f -0x901936d657686fa56d413a7b70ed2ba499a06ba696c6e6d0d88f277d4e093c55 -0x16aac6824fe68db454388ab6a2dfc32c594c60ebb1dcdbdb252d91ff1d879e5d -0xb333dbc59fc165d6521880883efe905d6df08ab0778bc41df82342e4c0ebcef9 -0x8efe9423d29239233a26cd66ed9a8cfefea21df87910c4d1989b6af6ba2ae79d -0x303e7cfa5f824b5f47b85db5d729e6aa912f0e2c305205292ef1161502ed10d8 -0xf948319f99ad4ab0a5a81d50f9fa41656f3ef73462ccd4edf17c0f1e3fbe1b24 -0xb51f30872115dd22b8feb2f2cab8da30bc401c79eb221fc00af3ce814ed5c811 -0x6181d458a97a8a12bc68cf68337ae6d90d3e9c5145fef0af1d6a6ae1c5fa41c1 -0x861bac96087f3988421300dd41fceabf998ee2ad624704a17b41d13d8dc68031 -0x892e1f713f9c2bd9fbb934a085ee2279141245d180e89c370360ce21428d2208 -0xa67b352bfd86fa3d527668a42dba18d490542e733e41f303da85ca8b7d8f41d5 -0x77826b0d00c5028be6de55cf99f899c24b67e8b9f76f9cbfab5f4d4bdea726f1 -0xeebf94e717cb7ee5d8bcbc4cd6afe395eb11c720e61b787ac921c9a21ebadec6 -0xeef061aaca1d0d0be8fb146c404290e60cb6ed08af596a256c766c3ae78c2f6f -0xf9c0c4c2200f194d78d1291b332546bac36ce4170ce9af6f31a7ef99684ea12e -0xd5d45f15a25a07b8345396d74b41764b47d0b5df3cc538e0a7be1b1305197eb7 -0xf9deccfb92b9421bd6ca0cbf9ce7ecbe47fd1795f02744509ef4941a290ba8c2 -0x0ebc539c8d6c123b020ba4db068b9edc31a83788ca8eac19fe3722b8e632f9ca -0x89bf569b16b08271c5626cfb9eb1a51da30f4011a17c12e3e25f123ccdd9bf8a -0xd2bff92d4fcc8fed42b4b6757357060276d6d036ea19eddbe3de6265fb9da656 -0x955bc23f36b3b528cc02a4d6267db9863c52c6dd1b94ba819cc2241e319df110 -0xd962d16f2b7cded06a10b3bf9e06f5991006399f868adb77b65810f57221cb2c -0x386b2e66f555fffe73af5c9a955b64c2f12fc8bb1ac52b387e59ae9c4c235490 -0xf62b5d163469f7724c939b9bd8dda283296b82fed0f1955335a6741f2e0989a0 -0x37694624e8ed5702d1e44f5c71303e1a2e3f29d28c0f79ab6db922ae936293a0 -0xac547dbc06e25066c0d38354c282872d5c7b420d815ce4facd824a40f5adf866 -0xcf0d7f257e62aadff483b612c9fe5d6f1b8b85b30eaba8d4519a9c5118cf3712 -0xa561c66b051b56ac9f5ae864d6cd9201bb5e414925339b00a7b1da9dacd36b87 -0x6f5826db95d3927185fb3f9ef58bec4f0c747001643a424f8aebcea78e2c9dba -0x58f6910687405e8565d66ce77b049ba117b3bb9e7ac493afce3a7063883f1e1f -0x532bdd2e6bd53c51694335ded6162d27d3bfddadf083476c87939166cab1ad85 -0x60e9ae0e1f57212ea20510a41a4828161a4405f6b542960a4628cbf2f7b92501 -0x9e4d1d1bf0bdf731b211d659b82e782fcfd492d18c7505cc1540bbd2904fba9f -0xd958997bdaef4d2fbe248e7ef0efd61448e56b8352945b03aea18d3380f9f915 -0x7cb045f7a58e6a5f31f4e16ab98a08d56f056fd0ccbf3244e2b74d6fef00daf3 -0x1950a9bfd0df225fee4d5c2f7394df5becccf8422bb5eacf0ad1064affdcd7b2 -0x34ee52f35433fe27fcc6dc080fc14d5304196854ac9f4182ad9fd803ab5ed8d5 -0x8cf689998d9445dfde08a17f5dd40cef7bf3b078f6a64cce11db8a3c5ead2fa3 -0xe8c08897a59df4f6b2f4572b15511132ff02f0f6c0dab6cb00fa8404906dcc86 -0x200e0041d202c393de2cf9046e27557957851c80989c08a76fbb27022d2559e2 -0xf159250e540ef9c0dcc261b625f0e0e5905a73aaef2419aac3c52f37302f24f0 -0x8758921918a030e2af5b986057669e7bf02a1adc867070780e55d4a1ad7527fb -0xab3fd6d44ecaa167300210cd6ed4cbae72410d9973139f8866a090fa3705a7cf -0x9d3232b125ac9ba9f1c69df46ee7e9ad6800db4b1eff4075c07c79b0214ba3cc -0x4ddfef7f619773dc4a47d745ecbaccf42f9b44ad9c2be4b08227e540c0c61fc0 -0x0a816a0c64189262a56a6549db9979d1ce3de244174512fb80fca32d03bbb6c5 -0x9f9e37af9d98a667d3b744b00d9c9eb5fe0a4e305a95a1d74f197f96453dd8fa -0xdf72e1efc8c1bb120cce4838e7c7549879e3692ac99d953fab188cf04b76110c -0xb4753fd5f98418a1d0e3cbb0727b8a869507d3e3f6e7970ac7d4b9804166049d -0x06f4cae5205b4169f9ebb4a45092482f83af24d2be6966ca4b04ee087ccd6ad1 -0xbd28c81920d929aacd18d9f49f26d72b84bd1806b05826ada0b8831bc7c4f91f -0x7fae3f93d4c0a88abf3056b832aa18634130a44add0f1c95b6abe284b815c309 -0x0793f4c250df116bc066a1b6a1c85bcbad6607271e50455dc63896374849dee1 -0x8d2451911adeffbef0256d5a64e2f7c11109b7648fae3750800ca16aef72cb08 -0xf594afb11488366ac1a33c97afe506d6858971b173a5d6a4fd67429f2c6240ed -0x90d4c6aef8e73adade30aa5d2b5160f1e609484817992299b572838eab2cc4b2 -0xeef5c6a9ce9bc8cfa6b376b51dc3d95b0f64b053a0a3e2c36e139c3cba5481ed -0x850eb69b8bd57169e52ad62a646a00b31f988fdff43b083aa3c1c6fb1ca56b7c -0x929d929628b515bf0f35bec5c52532ea28feb68ef4c73788aecd3e9297affcb1 -0x8621da8fcb7031616ea4feff5da15e2f50df8d606d41d39e287f69533ab6abf9 -0x8e95133c8dec2f30b7979d87c4066b6c3217612d40b1d2f881b1402b1f6da109 -0xefb6db169fdd43b81b04be0b5b7b397844e40e60bc6f42f8024b194e036df3ba -0x6913e19699caba2b80ec7c689cb5132d14055c77f73caa28c6b8eeb819acdc7b -0x8f5752b4c38de230c407b3d11b793ef34619913c8bab37f1e94c63f74657cd2f -0xb99eff632fc53fb769542653cc50ed5e07c3f79c2c2c4a83b90126cf0c3d6413 -0x4af2d11efdfcaf37ce4931a1c5af77ed31bbfe6d4c7ece58ca498a26a8c7a3ff -0x7d866ddec1fc278aaefff86fbf640fdfc8867255cb2263415523175b4b155169 -0xf1530751f36aee4571c72d6b1ef9c99365ba7a1071f0f0564b81a92c561c4d9a -0x759329f9e2f1763119cad617bbe1154cfffda51919be05ae2d62dc044a6b83d6 -0xa26879e1daece59792c79e4c95d88e49dff188aa0f27b1b8ea9ff9bf991eee45 -0xa330b180079209053825fea392a9abdf12a3b0cf747201571439044ffd09f87d -0xb17d21803dafe23bc76b021e5728ba4b87b49ffc73ed896f220e99b7dcc3dd2c -0xbaef68a308f592ae45494d0c7104590645a901f0e7383a63abd65080b685bc2a -0xfb85a3e19b3172ae8c7048536db2c05c3f9c3ee6b404a0f368d0c8cfa7b078d6 -0xc33025b210e0f25b64975803a27b965a73bb63861af2b64bc0cfd8f316019fa8 -0x8815fa7223656c52d3a80446210c774389cd51f01382e65bf290ad0bfa0b8fb5 -0xbb1f450ba96700f3cda91c39ed266a5912a64150d5359d1a99200a4d2ccd6a55 -0x4417ff5669c938eb5295aec8c2054b57b78294c2a930b537dfc549eb74c8030a -0xe750ac7ad9f964209e4c76bb419353c77db647be05b4a66315908818d320b365 -0x31cff94f9ac9b84246f2e035cd662e40653c6441c396d31b66ffc0b08ee6ea21 -0xb7e0383afefa8a37a6402d622bf0cf33eb4c1e9415766579fe37290f1ead50c2 -0x9ed1fe20c9ef302a11863cebefcd1bf7846063adfd936e43d4a26dcb4cb231a1 -0x48243c05faf0e22c9a8de05802c2bce61976929b4b1812c3c2fc7991c5bf18c6 -0x5bd985490a94aaf0a9e1aacb64379cf32b5e83d0b6d5770227b912f2b8f96a89 -0x9172dce4c145ffd943dd8c3f54de29a4d8f57b541d8b2e2bc334715f054c78eb -0xbba68e6e0376fa56a09afb70442ae9777219020e4d9560d1e9ef42b3c709ef24 -0x6fa2938c6e55565cf216f72631af65956f3d582a1fd2b2754000bebfaa72209b -0x3dcac2006710988adae0a5c86da18f7fab64c0f2648133f69c94507c9d6d6a2d -0x92a1d451d94ffdbc163ea397a81f9b64c521ac877525dd3dc6598e666b60a884 -0xe81b69dd2e1e01c99332ece961a6b5440e4d802ae052024a071d89201f3289fb -0x319d7b11faa85532da0fa2d9a0991bf3a3d5f651b2fe97b8c50f143fdcd5f380 -0xe28ea1df1be0f5e72c2783627aa901ec2658c7b916fba51d7392f7c3c0ec7080 -0x2e682d84d2e6a541f139eee559fc8b00183600b33efeac3daf669b92ca6c1689 -0x6446c596208325be272da0f195ad1546502478477d7d7a0e730177481242004e -0x6da55f74e87a1fe780c32140671c0c1791d0ae1aa307d6ac854ba5111fb464ef -0xd955f4d8001775e50881379a3ef2ec90e06f574180e8c07ac227612d91c89ee0 -0xc5e99c2d5799a83b26831d4ffd4e48a82d2590b6633694de01dcb728c5104e73 -0xc1cf37ec9cf4558e5a50bcb98eeb3ffadd84f39a299736de3e5db2ae5a541206 -0xa24de116bd06f4a169824d91b97a49ee063dc06b1d33b7a1c20a008ae133ad4e -0xd9b0d0155bb40b8e887dd4e5eb99f3c91b7038ea75b48056976b69c45f387635 -0x3d225b2023b2bed5728f73a218d2f2f615e2d689b15d898a5164e1dfabe620d5 -0x9d5e2ae117b8e392bf0891a492f6af4a70db99221857b5b2f0ece2320c2d594e -0x0f5ad528dd9dda46ba0c96513de32a0a7f2b8282c86cde59b937878331b60499 -0x9dd54147131621c5bdb69d39e6036a010f6dbd7bd012364a72e337af2259ba0d -0x30679b2a95e1606d4ccffb6ba8b0c7fc356a4af089c5bbda03395ebaf8d50dae -0x7de2ec38b9aae5ab88ecff071c3128ae32a8b294d6b381fac11599abd0d0a5a9 -0x308ca87027109d920ccddb30fad401eac8d3ef34eb9eb0223161605c36ab60ce -0xcaa6c9f432b18ab2a2057263a2b882877f5b3e18122b9aea6a4b72841fbf34e7 -0xc9d4cb03715e8c40bbdab6c4e50bb96dd5d251d7b1d56726c96906f605a12d65 -0xcb74ab06195e47362770c9588062f365a7b7a00053bbcd6607e3044abadb208f -0x9da45d0759610eb56ea89a1257dcfcb922909c7d6afa39f49dd0e3432de7a62c -0x5781c20c8916445ef7b50071f90e4b019d5fd48ce29e5d6dc38ed011caa76ddf -0x0e7321c6289642b0e60a21fe5f509879d351b4a82936875726ec856a94b3d83a -0x60d6a1b5ba22dc1a85f8495723c923760bdfc7236344de31c796a960eee6095e -0xe54339216cb3c5363794be25ffe253cec4a32ca16bcc14cbb9142112a555fb74 -0x214d8c9ab5f3c562515c43e00b05e0202f968c32064917dbde698e9a172626ac -0x13b48b9e7c899d063c4543adfc2d4832d703f277f0259949de73b8b7e6e39357 -0x0b384ce5c725f30c4175d1359371faa7a5b0539dc6649442ef4e56a8f32c8ab9 -0x1fa7158c808a97ab636acce062f4a57c61e6be2d1eb023e53fda498097f9dba9 -0x7f5eba6e4a5253b9fd7f4d42c7594a3b53a3d8ccb5f57158ed965e0993d6c29c -0x036652a6ae33ac2dc41d7c008385444e91871eba5c3ed32571a10f877a72e181 -0xf73f7916f0bd3a26d3b08fc72b4283bd6d7fc4c98347e95d6a150881c0a19243 -0xd06a70be2d435e664d42c081a43a0588194e594ab4f4c518a30e388b60b4134d -0xb302c5a5a9581915e80fb88cd84a17a4bf45b168a797384232420184e7c9cd63 -0x812fc84785b2747bb231f7733b8740aa8f025ccb0b750eeb24d247d03f285525 -0x80b8acef59190daa743d78ad07f0c73b638158684799442dd6b0a4ce29203df8 -0xe910118eaa3946a3d861fc29fb3f4e35c55d905e8410da87ce3827a16c455116 -0xedca1c7dcd3af23262614f3bd860e9ad9519322a18f89ae70c59148862490ac7 -0xc91a3971a65dae6ee511e7e45f27eb1c44a94254fab086f72da3ce10bca2d3f1 -0xe7360700737c45c1934baec6f4971f92f654319867c6bfb99581c6c1360e75ee -0x9f171c3b44c5876c30fda887f8aa187c683e41bb2918dad9f11ff3718604aa7e -0x46ea1c94f230898a6e786867e5d56dadbedc2267152e687a3af1705fa5eef8f6 -0x80e1d5edd99da62c3c743e808aea7c9eb82addea088d4ccc9bdae16605996e35 -0x3c2ba142b529a273ba00ad7688e5c652723b32e2d3749f8dd1ba9d004d3ae8cc -0x7e14f47b6fcc8d8cd2b4bf548aa640910bda9fc0c89e5a1d4b40a8a805897548 -0x5459a0659645b670349611ab645cca84056dd3197aa42c6011344b9159205b94 -0xa7558bb5e18e127a54ab01efa41194f66b51442dfe1e744e98d3e347d05e7603 -0x8580685dbee8d70b79d62a4ec8701638de8c160c27aad9766407e8634d8b6dd8 -0x88cd219a1ab06b30698e56dec4f44dfd09a8ecc6d0547c4de6326a4a126f86e5 -0xe6d0517f1a3852c8bc9e71c7d34c69a76eadd3271925e65b2b387b7d77151489 -0x2994e3438179c9a69638ba4c83a8ea093a7ad6624fd979d3d5c7d697efbdb009 -0x66bf11d65a21b927956512560d6da595841da2a2aabd49d74f9aceacfacb8cb3 -0x2cd1834f48d8cdaf9574984757de434bd8d36d38988a29fbe70ebbf74e0a96f5 -0x7c262256e52f5c8dfc1d619d43ae2c516134c3719cb051db0305d04c076d62a5 -0xc0210904e261fe8a45541e0765c6b1cea2cafd29a8c101b9db9bf9829ddb6520 -0x981048cfd94c43a70608845bdc6c15524bf995a966b3348cf533279f44c1aac4 -0x19c01ca6ef37735d4b43662aac03bcd21ea1edfdc422d7c9d49b4deb2ebc61c3 -0x5d439e5af7c264d359e75c611bcf18d9f34a77957f780f16560f9bf868afdb3e -0x9fa3a2af4388923de08b4dab798a055dc0cfaab3ef985d608ee6a5d7f85e789f -0x5f1cccb954e7b9d2f4f0e55cb1d0afadf4f457356e735a65f56f610e8bf0c5ff -0x7443f6a11e9c7911be0b66187572425dedcaecdae47ba9f7d5ca9c1087e44116 -0xe3054ddfa7ee4971aaeca091ab488f7a173307ab394e493b44a0b2058154e806 -0xb8045085007676263d0baefa480db9ea3edf35cd869840df9427429bfa1caed1 -0xdc078aa9dce3e182329382ffe5f5e732210c17b338f4fb0d587776f241cc254b -0xff690bf29ac6433595bbb0429da92ab81d18747f0da7f7630c001eacc7157c67 -0xe0c487555def94371e3f293e589412a66f6e50215cf0ecb2f4a32e580c51c34f -0x3f9da62712f82fa0457a672f5673901c62c16065be569bffe0194d0df3b13006 -0x78460c03afebaa1959e1a9e87cdf45ba6e77ea3085d8e62c5b4517c048b06a2b -0x9a0ffda910d5d923e54e978d4eb57574ad537a5397ceb22eb8ead293fa0d1347 -0x859c7cf728b84e28d393864bff450d9f282b03bb70202b6274bfe0aa2e47258c -0xfdf2b42b45dc78ae631db84e918770d3da8c92fedb3857d6b6d2dbe9fd82b597 -0x65af4fb3c61f7d6a81b35903fb937cb01fdf269bc4d81f3d7a24375682b72989 -0xd0f6b2908cb570cae6a945dca655ffb76b7fec33b681c49ca170220bb856a869 -0x49af8411b3ecbe506e9ddadbd3ba48cca96c7869c76977ac82410a0f35ad3e59 -0x995975f7ab1f187bbf1e93285ab8ec8b97712023863fdcef23f2d5243293d838 -0x2d43d73416952f66c17be7a242482db6c87bb85d282d45bf50dcaf3eaad50b0f -0x2bf892e03b58e3badcfd899297a6a1c2a903c079038a5de9ab2fd18dc7c56096 -0xf55158026c87d263b79f51627470d03ba525ce2ce0b162e58ce5f4cfafeda957 -0x65c0ec750e6188d2296fd3d213d93c675458d637a4a3fa2cccbfbd69de0410a0 -0x3b896f62eb282d1100874614835f6236cbc4ee946eb882d5d5625f35850b3878 -0x2433f95aa30e4aa43bb799e507d1c704705a195e3325d4a2a771cf7caef227c3 -0x08f7779537b8be0f1e4a6efeff34567022b12089bd8a8368335d60e2e8de24df -0x53ed77a7537611e82bf251c7c9be53e765c27353b7848cabec16c0cfe8c91445 -0x9cd655145e6d73e76723c04461a757b9a772f60fb0c7eab458b539e98864a954 -0x7edd23b056408620df42fdf0561b3f462e5d5333cfb5ebdb6ba269fd3ecff14f -0x89b04eed20e82d82beaa5a767cb89b7aa7978c140421423819d7818f4dd02899 -0xca6958d1ce0e94b37eea9d8eadbd91ff681e72a8d142f198a6b295bac734b7d0 -0x0c3e879e34a1793db9298cd86832ad9a4275ca3621523f69c8d7e83c73836d2c -0x02fee87f030b286cc707d8efb299a452b75b13407d9499f70c1422c88930ab32 -0xbbd7a776da2ab51f83efe71cea05e4832307deef95c4dd785ecd50d72be7880c -0x1fc719887842df891321b6012244d268998c5807bcdcfb336685b765e1fe6d9c -0x807acad5a3cc709f61e5cbed62b88b63b1983cfb307aa7b47e5517f4ece44eb0 -0xec5fe0c22fadfbf100051dc2d8126bc292014f0f5ae30739d893021ab75d58a0 -0xc75bb1f086be51e0549fef900294a2f815b6ff5f0086bec355679b72a9c10117 -0x64719a84def1579fcd363590387112cf189966161ad7317fa4d2d00931da5822 -0x32893604d925b3171a42d3080ce17edb9396305f6dec08ffacfad81c5e16eced -0x8062f0f4dab823c76a1bbb84ee706d509703d5b03a26a4c029771fccf1c93f95 -0x480887e16accd4eda9b5997556b9e159958ccabe403646e21445c34f3957a645 -0x21e18be43bc828aed548c7c37bac29688857aa1b69f1947e5d2541ea3bacdc15 -0x733a4a578cb96a7a18b7ff1ea26cdbb463995cc4ea30e9f2e796475b4f425ef5 -0x9e6017268c98fece866044bcc71b848322cc8e89bda99a6d5c1c6c4c9012c6cc -0x951203ee3d4b70c9d34d3ae250d8037ccdd7fe6f88f859009cc47ba3c5300c53 -0x24b249dec6246ee3ca8a39d1487bbb9af8e9e28b69b626c4f41987b0b4f0f10e -0x47bdb9cda44a67f4b0346881d5991f86cafcd52237b842af0429a4977f7132ac -0x9a90cda1715b78c4d9ee8a7d51f38209bf6454e1efd4af8ea4781261d1b2484f -0x5631a530fc64acea09e0747b5b0a4ce1dd76cf87b251c9b1294cc9940ae1dcc9 -0xc9451deefadd9c59113f9901dbde3648634b6455dbad240976aa1a1e42559f46 -0x7e2cbb2726fcbc47081fa0e3b2ad006492bc733b19e704de1b3f8480ceadcbc8 -0x2ca52d63eefc2f751f7739127ee967abb71f34ee0eb0212ce848c59f19b57f23 -0xd031abe3adc69d7ec608786400889bc3ea94472de14ae535a38a8e5463d1a68b -0x7127c15cea480244dc6af858237ef916b06b01c43b2fb863e2e357fb25004712 -0xb0ef022877e07ec24640dfaad943e9ec7d3becd0ccb0015fcc389322420b87ce -0xbef029db3bcde07dce4f5fd12e24eb11df02813134ddb17e58c680dedf915634 -0x1e5e1d94dc7a78afadc4375b73985d7066f8125d031215e0384fa508601ada19 -0x70742270e1ee3f83e0ed868504388eb42704d43940f08e1da2e176bc4e161b04 -0xc7b0939e47527f8adecaf656c4a294658f638d59e929f7435bed81583f06c7c8 -0xf8e742417227db3d264541bb7e514245d5dabf2a3c82ce98be33ac73352f8898 -0x47e684d3c1034b0017b759d7191cf1aeb2c80193b7e99cb0d83bb881680d024c -0x70903c2b3b0477c0ce99e6b33c16d69c9af3acfdbb754195dca86c3588d37445 -0x906b266a5e6b3cec72662d4a8e01da03f6986f7bdda505b3bcb34e68e4b3d72d -0x9fd39adc0f2e0cdd0eeba26b19319765bc65090a8b12687a8dbffce3d809b26c -0xbe2d2f00d9748a0df174ddc22fadb88fc90bc8758c245935c090432524dc523d -0xb17eb40d46241e51cec160adc35925287ace02e82a16f0728b7bab3205f336a1 -0x8d79ec598442425db862d62da2e17b8d29d46fbcf76f86a88818de978ed1fefb -0xd1e6eb3bd7751ca2542244a6865e2b1478cab1a4bd50d5b95eb6fce1bb9e46f1 -0xe2fe194c916a0db04463aa152ca94b0c5100aa032d3ed48f7d326e2555b02a25 -0x078a808c357fc543238236b2ecb5ecb9bfdb6718ac0eb118c319bd5b6c5d4ae0 -0x10725cdc69ac0d0000306967c56764f49c28d1fb389ad7e3d3372cf95e0e0c3c -0x7418051f810482d4c599393e45cc54a2abd2a97cc00e1fd817f1bd6851caba2b -0x84896982ce0d7f038e473220e9bf4210b71ed3008f29f0a35f8b89c92bd70f82 -0xb98956679773de154ff4e388402456a4521931a92b247445978d8bfa67c3e939 -0xe190bb0445747a3835af90fe87d197da5e319bf28fa1ce7922113bdeb44b28a2 -0xe84444a8efbf282eec7c70dd43a90e7d5f7f3ba534febf34904f0b318f8c9672 -0x8fd9f22b42a1f1370eb337adb61887acbcaf9ad6723cbd5c4c7967bf8fd6556c -0xf0faec13219d9bb57f37b475a0139cb42b76d23ad9b229b21f64137f9561dba4 -0xe4b622bf4ebd9c4394255c902c204855de3cb68d88d924a90ed67c16b469f17f -0xb0656f200a43d2fd88733fe3ddc3905e8232887473cb456ff6b68d5138aa5870 -0x2a9cfaac12ac2ca39fbea17dba5723082c02758ec45906ae2f362c76d096cad8 -0x8293abf727c0cd06b144550e7aefb9e224a13a4cfdb472da0459f26cdc1d92a3 -0x2f1885a0ac7aa20a60ef24ffa72291c1cd9b8c8a8d6e7cdb4b0576f1f1b8bf77 -0x3adeec6e0320d0ed5e2bb6856bf2b1c1cb14b84c761f169857db88dedc0308bf -0x46252a31389bc4f0c98eb74dd939b3bbc72f6376a9eb372099a31a2fba7f122f -0x6c105d969ff45452160e6c0cd06efad7c9b6a1b7561788dd1cbb115d8223a3e7 -0xeab509c631e6ec0457078fb28172737d8eb454bfea2ca639eb38e68fc717dbb2 -0x5a844245a50856d7c4b7cbb3e08032f3733c36a553bb004fb2f6e76468e3d0f4 -0x8150de1d109043e0b6c2ae75b70b88f8bc68a260d11973f54b7c4394d344871f -0x7c22149cdcfd4434c33c71180e203511d74e5738b0dd7371e7662f09cfdea465 -0x637001a367cffb363de455088032baa3161b63aed8b27fe054f205ab6fe2f80c -0xd05850d21a70d01af287240f5107f6bcae08bd09a200764b93f59cca4faa57eb -0x02c4c6c8d787662ab53659bd8ded7780d9033195e937458168c633b29b577b1e -0xed5e98e68c240169d3e4a0bfc255352c855f13e0afc8b9f82630004d31984672 -0xa0bda36c42b9950a3ca43159434e2acb37947c417b001a30b4326b657a0a4931 -0xe00951591655c2d03136d6d0ad8f345abaf61a6d7e77bae7b53a4eb5b3c65bf2 -0x61fd62738242960b1dd738d98110fd529e8215a319ea180116715c0c46af535e -0xea17b7c473225fe49906c4d0a76f02cc1f4568e8ab10eb57ebf5558c9e6b75e7 -0x24d588e79009604d437b0f8de9132dff6768a71ea2ef791476e0593aee205b8b -0xc069bd13183a59b9956f4ae80e8c35f2eef4d6269d0644d3914c751cc45f4875 -0x8806ba667bb61cce91527396841ccfd670cd8461f5ac1da27ff35fe5bc813afc -0x24cb5dff2e9444c5a9b91c520c87181b7140c95921b6ad203ab86aa167fa1f78 -0xfa7470a30037385b6e17de921b0efc04fe2d725d31d390fa5f04cb48c6c70fda -0x01ae5083468f0075cb83936e1248a1781fd22becba5992ea0ffcb5dfc6b5f8c5 -0xa51c92e88e72456ecbfb5987017c4e4061ba590c42190096e98c287245d3dfbb -0x1c4609a4424a63bead66b0ac2d90b3cc4f6bde66e1d07e0226e3b6043c8e5e35 -0x6312e3f4d2fe802ecfdf1fb3ae51c853c669552396c98a35e9fedafb35b2e8a2 -0x21a5cabff159317cc37a729aa8d74f125a9ca14b23ef28437cce580eb9908778 -0xfef06dc4644c1a86e42cad7d16ff2a8e38f26f9090cf67f6d38ab8f09b3b3226 -0x2e44f3367784abc0126b909d307ba99dcaa966a0037bb48b9be4083b910f135a -0xa04538cd32647d7346c757e28177facedf7c106dc5ce09b0926f1051b1e0cd6d -0x1271c8f99f92777c64feb28cf46c3f6a1ebecef8da2c45803b1f0ba8cc0504ed -0x94a56411e771d6d1e8d7077e3a4ba62d9ae98c747573730e870ff9b5c7d791e6 -0x8eb46ad3e728b409b7e4d8b39d32d2f38434eb1e6930246b088e981d422077cf -0xf9fc8937340d20196283fdde4c364c159a84f040c30dc17a0e1f8509a263f662 -0x4fbde834d9d72839497737e30de718ccf610aefab68ee36b2f32b1802e9edc7a -0x27c9538eb654d03efb47554dfe32b0c843cb60cd5b40cb6318a5fc9d39b922cd -0x06d589dbf37d3bd044138d356eb96f019182368c740e994f11e31b38c9b51ba2 -0x38d549056d434b43a4081a829b7580b4ded2b4e752338a79d489591308ee2dff -0xe6cedab54436d63d65c1a81db939de2aab21072a0aec80868c5f99040679a6a1 -0x39a4945d4070ffb52e457eb165c6edaa6a93b8ac4133080e4c1f0fb354075dc0 -0xc0a4f983fec607cb72d2c688b4c75ec9c552e0613dabfc9c020f8943e91eeea5 -0xec02ba133c5976d38c8493bebe8a3bf733129a42bc5637221ac36fdd5569aed3 -0xc8fdca8f8a6b2fdf3579cb73a7bb963ef77900a3eafb7098fb85c81868b5b78c -0xbdf39f3eff1252b5b2a2c8ba6bc11050408a56013d6e2c63129cf4763e280016 -0x870886533b520999ed2d0c0338f332aea2239739c353a6d60e2d4be3dfa013d1 -0x28a866dca130b528be969045b2851aa623a922fc61cd7020b471e61d7b989d73 -0xb9391b83e2a912b70a38b5325e6cb95e1d577d0fa34c650b5c64f8ada8b6089d -0xf63fb89282e8e6b6ab60ec5a60e561d110711780097cd4cd09ea7a32818b6dcb -0x6016067093221ac055c086f3f2993a8980bf40dfb9491b57f4d56b84cd8724a8 -0x039166db555c82632ca27dbff868782024c04d154f7ca6ec9aa0467e8dbdf9bd -0xe9d50e8482283c2481dc405c728c42ed08ba409f89e090a18f0c098dcf1e0061 -0x730aa3ef1c1307e9dd8c3a8fd0584fd544740e0758a62dc323e445d42d359517 -0xa48c611bf69451bbbac5cc792d8ddd4b38fcdf0febb201f66cfa2eb1b87560f0 -0xc1c130463a82866be3a6eba9f7aaae41c533b247209236e22743d206f850803a -0xf485e3a4767057eb181ca1529e5d88eaa98729ef72917d7a5df85d344e199099 -0x253bec58668116bcb06426b005aea8e3bfe4e328ad671b4d6e676f04da9c6e20 -0xe0a20c94e8225965f9665fc2373de05b2d3307c145ef2524d7afd56a9743064f -0x4f7cc9ccc3650084a40f554670fd7c7b524e587deab07fe7bda6a162254abc1e -0x5e27e56e15a70087756d1036067f9c72107e63267b1d11825262347191a97d08 -0xfb7d4ad46b83b1b8c9328b015b47e932c06e0261689769eab86066278c1a52ca -0xffc7f009038bae87c1f2dc11b3ca858cd9178c6bdb3de9a2e4f7c553e3a88bfb -0x2df33219ad373a97ef840cf1491e19414ad318027c96bc9d9af29738bfe3e215 -0xf208af48b58ab53898ec6710c8809305b999bce83b0aa6d3934f1aeb33a0f496 -0x4f02b98ad86c42fd49cd711eb4b955ea8b92fee5d290caabc023f353248c8a58 -0x799a50761cf1342d8a1b755a14c14e2d502351a0fb252a67782611422ee89ff3 -0x74d7ba7501dfa18eeeaa6d2849fed11732dac4fbbc7a3bd1a2e43816a61a792b -0x1e6a95e15d7282a25f8fc7db665c2096c091e12db57d2c1c238d3f97e2970414 -0x159dbc11d3d988324491679a4ac909463d36b8078cf80cb1a56c34a193daf393 -0x5f7b6cd67cbd488e8def42c52304eb32cc1f9233ca315204b6f51e4ffd50870a -0x3fc517a5b409d0720ae475d3284b420a0696dc0cb4366b50af9e389b4d324937 -0xaca64843c86e726d92a190487f8c89344a51f6af7c33e8fc36126b28fa697f46 -0x97722240d3b6b07c2fe30f6615e0e90b0321887c38adf28e2976438b013db1ef -0x44db6979b8da4991514d5e0c689990b9f0a23fd8b9d756edf7f75d9ea5d1d711 -0x852afcbca622f0bdadf7e3014fd38229b5be5aef6f5ac11d92663cba8ea48998 -0x42d8f5860fb117a115d93fa52a9543154457f678e95a567cd553805a798b0821 -0x6640e8a2c0fb4b821d77e27b6a9a0add9e2825803d4e25090fe02830f7454279 -0xe2cb38856d7f1ace784d961feb04187f2698019886e8efb7fd2ef0a62f4e1797 -0x58919473fb58283f8bccc2b118a6c5d990d62ef1867037cf3909b711fd109d65 -0x989feaab50bed563274fdf8fec9355f7a4ec7043c1114c72d7d5b791f535b289 -0x97563e3235ce878f3119c96d90069869a02466e0a76c0271f25da9d93f507c64 -0x0c21164d8bae71208d413c4a0cbbbfe1033b90490f6db1f84c41b267f1460d27 -0xab57ce6eb3d32c772fb9f3eefee3667b0f62d5e8e2119ed1db681736d34ad1d8 -0x987a6bb2e1087b297499c0b570c066fbaae6e2be7d5816d984f9ba2437a6e776 -0x6c27d485aa013f2142841828171e2ba1ed90c6b00dbab325509d54b870938e76 -0xf6c59cc88e4c2e6aa6f313e97307c1af03fa22986131a174146d28ed5763cb01 -0x21e65cf8525b5cba01dbd4caf5dba93d8feb009842c19e4a8ce5d88ee0233677 -0xe1a51e3d14d0890083c262d13d18d9b87611079bc8677c86b63248baf4b33cf5 -0xd617967390189365f72e7c92743863bcb8d865ffbfd81578f6005ba6576259c9 -0xd86fb6c4af3c68376f0138b5ea65af65883e993341696fa13421f8ec4c0141df -0x82a833eed5b302a04af63cbcd0314ca150519cf437d685d3e2ff903c33120c7b -0x078d1f24b130c615b0c9f6e85810ef8bfec89b479bc888b216c85b2fb8e7924b -0x5a532df06d04bfdeb6de0c12403db1c2845b9fbd7c81b10e8f0087fde225c1d9 -0xff7f7b483ec79096f4a5f2d58358756adc217ce4f9a960fad83d71224c5da57e -0x884d5c7da7a818175befa2f33b70843f0e6f3f3e55393e09e532787918dcab45 -0x3e5e43772ce015dafe738979665a8a39db826842bc063e5c8261881e9a5f4455 -0xf2e184e86da0d0fc3df410d87c96cc6b3514b1e1207d260cc4dba5cc63f1916b -0x95912d953231024fc896c14d9c0e9a02940d2df5470c1f7bf14d61bd40db7927 -0x94a13e77c46ca1e5f1f56744da760650c0efa8689befaddb2e78f223e14401c6 -0x4bb284553200eea8d19427ce18a95662d34d78e3b7d4f3c5bf76a0282ee4dc54 -0x53efefb8bd455fb15aa482b7f5c76c74d8468e9f0aef8c0ea0dcb13baf77e831 -0x167f074481b12460b1c1006a45f48a2457c5170a5fc1f8994d0b46a0289741f7 -0xd5e7aad5b65eaf446dba8190c9b45aa5c08b366667842a77f04b053d97567e54 -0x2d3ccbf1a03831da705518943afa39a993d790c06e416311240bc3e887de41e4 -0x9ef80d984626e616aeed1d6fca6f33969829be9cea90d81725fb44120e8e9893 -0xd0cf439f551fee722cc0b5bb3e6c2e70027390c784cf7dc7d95f3fece1c0e24c -0xf565db05963b1ca75136e5495ce098084fccc188c650e05dbf6782be3cc21993 -0x42544408743ffeee54d081d3df8a4f908a9866c03e3fac46a95a3b4574b4ca3f -0xf4ebb479a949e18867b74d0a2756975e73af388362aa597d35e337d632716b6c -0xaf784c36017dfdf15d95b8fa57d8e0e8f258e0aafdb90d1481b67894e57adacf -0x40b8c9287559ccc7ef5b0880acc8c42ee577335bb0b6d18819c9d3bd12169194 -0x5bc6d75848d30d77b06751a80f7e87e378cc14c1222a0d9e544fcc46395d8382 -0x32e6244ccedfd0a26a736739955fbe71f2b353c72b1df17bbf88f84aed12089e -0x305816e12bd3c01d862aaa47b6ce9e59042b9a901ab7200b0c4ad9761844ff2f -0xd4ddd9955ec0f09479d70b11f3a652a7722b695a964b3456e3c287ce94563cc4 -0x1b16f7d72667a6710f623e8a795add7d5919d01480b24924187fa4199af7f068 -0xa116579ff9992965cc027ffe57f3983e2e2ade10f07c337d0bfa8f9bbc18a604 -0xb9aefabdb685c79288a668f50807c425a7709d6f62b0d1daf84cd21b080adda0 -0x40f4c22a63d103578dfb1898861ba7661abad1e37c17c751f85dbbce66c998ad -0xeec7ede15124bf471c521f489c16f48ce80dee89d176f8d6f1cc4ed07d250769 -0xa0fe63a40fb01be286873901438aacf6430831f4894573e61730478294f5c6ce -0x5fa5fec9ec5f76e65a6e0f81c3828ee9485f89af77e13546304a037fd3abf246 -0x8a678c2a593aa630fc02d37070404bc4ac29ad0808350ea7d39538cecf0510f1 -0x9c58a455787f9a7bd2533fe0d3210e7d8a2abe5a48f9caf93325067b60f9fec9 -0x793be5b6240ad95cda2de2f9fbb50bdeefc0b93d45f0b156521522b8e35eb635 -0x8529548376aee5ac753475465c084de153f1d82d6e1759b9146fa732c0b677a6 -0x21ef0a596ec4e2d005e749c5b94f636626945543974cb7a60dc4992a89a7e566 -0xc4bcea4b0b2458764501b5b2a2cd4d57d455dcf43b338799ef9b03144ac5e714 -0xa1dcbc04866adff83ca93e8740d5634798ce880ea2f4589861cc8084f53245cb -0x84f54645a8c60480487ba9f22d6d77c00f8946c5c7c47b9da39b84eb54d8ba29 -0xc8c945f11cfb393ddea3410fe0087397d77e9d315fda842d906e9e9fbf2d24e7 -0xd2084113dce7a5b6db91a7a5f1f3122864427690c322c4fc385c09acdecc8e2f -0x609ae738b6d1ea2c39c2ff3e7a5e873f052f7f939a455cb0cec0b61a61510705 -0xf9e09bf35b334b9793f12228b73f7739ab8220e53b934ed7ce4306c1daa401b4 -0x98803dee57fc9f92f0a27d4692fff53906eddf8ebc0ef26a939f5a154689e735 -0x1e5e5765cf7d638aade9c837c45513b5f66101dd7b44bb3a127aef6026ac1a9f -0xb0fd371e104f47db7c8f7616674d7bbe86b748e32a7455e72a1873553d6c1067 -0x601941a157442b14bb256e9717b150a7328a8e90811f4ccd31cca67ddadfe3c1 -0x27c812bc510e1c744084b9b9ca4d6d8c67b2043e564138922e46e8c12ed11837 -0x9ebef7664028976363400a369e65c02c33e9052de4cb027f96dde81ec66fc2d6 -0x46379aff3c17c8276e9a5a95742f9dc4a490e7f7361517e56cef53c43fe4a6fa -0xbd1be9367437dd0472cdaba7844abf044dd3038d3a97eb92974dcc6c7663ce81 -0xcf79f38545d66615190e3f96d1c2e8e2f30e14a517bd1711e62051269255ec77 -0x164e62c684566cc0c7bd8af78bd4265914cd65800093a8ea902716659d3bcd02 -0xec81367ab5a885a19641d9557cd304d4870a90f62e8947941eafef8c51876ab7 -0x9ab8aaed41e6931a91f2689f00e83a39f2b10c4938631c1780de7d933f301a4e -0x718b9b37df5a7a0c0c8fd9d5a6bbc095b684a8492f49af077ce5a6faa84166d8 -0xbf67e796b90ecbd4b5e309cd9e823d461dbfb0f5f014fec71d0ccd7345b2ba6d -0x30178814bcac53c4b7ec389928c5234ff3c379f4c3746268d9f1d0d161300744 -0xbcda643c89de7f5746c5fe0b70b506db067ce0a514ca647a8680c5fafbb8b105 -0xe205ecf509c848373cd2965fd80a01355aee558cf64f7161ca27294f547c403a -0x869474644377f7e75b112ad9a72485961b9cf38031f5dd73ce439c0f9799e114 -0x00d53676f5e8a76a1792e46acdf6fae263dcd1b95647db8f6839c277ef63089f -0xbb4c4f1f1bca908e9a31c66ac5baa6e7718147680d88577d6981017aaaaff871 -0x873969441a304f7dd416ea943c2124110f469111da6f022dfc07bd5e136b2842 -0x6bed3c1383bf58fb0b04f94e09fee41e247529198d6c33182daffcfed837f85b -0x2d361906d3a9bd3de96034415b80194871539ace0fb70bc13a7d179083ac6afe -0x86c48914d3a0460ee15cb594ef4e6715d0d31c10bf60e0a850b8ebf7807bf62f -0xb3f0f4e010a03c677985b4da2d91446fdaf0d27060a2fd8ce1af60c46297915f -0x7c79d9a71d23271718b4646d008e72f86dabb6cf14b9718536f6ea7048dd2f09 -0xaede6ba4cec717e7e97bfc1e1e1b64fd65c756e65fd78fa5f6dcff4a3f60219b -0x1e3ceb2fab914fa5c0e215c557f36136349b325834f1693369fef9757bc00b48 -0x28a1701035bf93559b61f8a32d50c448c95813024db4b2b69c3ab3768ad72523 -0xd4228c3190edaed6365bf9d4fd9db083fb2fd495196645661edd920be480b3d4 -0xdb78d50305204d70c36925e68dd27f43218a9e9d5ecb3283fdb828d7227e2fb1 -0xd53bd5dda136a5eaf024663b00a6e510615cdbf39e4796624be005d702730b17 -0x3068b1570644bd990b6ecf3d1245da9157fad87f52a4caab229d48e731162955 -0x5c4a13a89ea308b7d8378c3da2a7a7ad81a7317507250e98823555d5b95fb511 -0xc28f62db37d454d8de4f67a78822831a1368655f059d0a8ef7d1d869636f9141 -0xcece53d333253dcc2adac139ac463625caf4cd8739956d45bff5f07fbf756cc4 -0xe9937f40ddd2e1eadb9be20068a54c4695eb313c47bb31a58f1446c902d5e40d -0x8a2dc7f136f3d8406edfc1d761cff895f2c4ef73e88adbd8ba73a8d26a463226 -0xb4019cb0b36f5107ce4387d1dd3b643eef3d047ab08195992af4f48329d2bd84 -0xa3052139f99b7b5b974cdd325c097687e707a7c38a8a648a11740bc84ef8e109 -0x17e0cb7d3d5ab39b756d1a5da16363c022ec51e183f4f02fc9efb9470eaed180 -0xb9582ec47d19fab864870925cc5aff3433617eddb96f6d248c49ae1c7734ae42 -0xd62f735ef955d0572e4d9ffeed94552983bc7d2e2558b9d5c3ea9df48de14c59 -0xd4d66c597fe4df543ef453b15af46d04768fe027d7c6ab7c8fce4964a8ac5e78 -0x68a5f7981bb1f97a4b6889c4a4279db295226c657d1c560ad125bc3858d12e0d -0xa2302302b4e9e20748b6c600ba23f09d490dd32fad9c08de1a483afda3ab53d2 -0x8b866c8f3614004303fbbae1d27a217b4cdd96de42ec423db0ea92d8c66ef4ed -0x516c495dd3ef89800541c3534e709a2a0d7e09b904c3d768d0e93178a711c82b -0xc414ee6435904bcd5ece19b1a57aeb19809afd21de524e48c06db3cfac7bade6 -0xdf85137f14ba143a57764e51d841dcca40e80230c8dfdbced2e015ec7734b133 -0x1f444bf83be37ad9fd8bf242f26ca03028967ff8310455f200dbc207b2c6ee87 -0x74c01c93e1057f0e77a876aa98ddee9d400734fc4c84ce522184068b2f964be2 -0x60b883e772652d1cc2e982695d1d9cd279b03b5283ebdba9a2adce58544512b4 -0x91a7f6a4810c7d7fe8235621162ac1423f70e8b1f272f268f3ab09b347e4668c -0xa8662c403a479ad655024c27e76242e34d78c2d18fc170aba071ea11cd0927c5 -0x9c573813e91e7888c6a1699ce2b972a374be2b230a0316e66dc0a23f573e8b58 -0xe506d46cb772198066323d599e473a92a24827a484ad5f5139eb7a03006f9117 -0x75ef671d3aa69bf93bc5693cfc2adac61bf0b2f845c3162c7a2bb20a8c00eabd -0x7e73947c0523b659b743be2bba7aef468c01a446b3b73969a02132c04f4df4ab -0xff3188f188c59a932e62ba47378ad7ba537fe0c9db77e4c33d9146776a879dcd -0x943a9a8205ed036843dd5468a1502ace6120f6b41e65da9636e381b43a2ec01c -0x42c6173aea5eef3154897ea041fbd6be5e8d2e0c65bf9dcc13e0a9472d2a1c73 -0xd71f4128f30cdc661a69f7a1604cb45ec3a29ebb96d3034849739fb05d4da4de -0x4b075ddc780e04c3e3e4d7f524d23060faadf78b466bad2c6fe88b3294946516 -0x41051c56f6c8ded345030c1c4a7a7de4e005f1dcaafaae35b8abf45f6715ea96 -0xe5b18638395d0a7dfdb668f6978462bff031dc9f2d20be7bc78e3833ee4cc8a5 -0x495a27bd641c9c80ee0ea8291836225444163fca2c62ef42121966ff5f6d1239 -0xc9f561b55e1f0fb989549d89b0decfc282ae7adbd68c9437de1f5b1dc3b45052 -0x87d5abc7aa68a5f2daa46ac6f0211826979f7609742c7bf3bbad1bb2ea900071 -0x171dcd337c8b03a9d47774519e0084d0f1db990412463d73ac7da48ace6593c5 -0xd3f397b816f98d902711be501bdbb8f0485f1fef54ce0a8c3cee2d21c9845fc3 -0xe76273affa2bec3a945f499c2ae2bec41083d3356704ea894bc056203e6c6bfd -0x9057364dbf9a30dd2caeb6e10aef4ea61c2c1e67f229d472b8b58943c26c9818 -0x6e1ccaf935038ec95b4466e9a6aefcf9497c4da7c22f3641bcbdf9b1c08003c7 -0xa4958ab289dc6cece39253dd3fa381d01288016e49b15a6daedbe519171c1b45 -0x0f8bd32d2dce9d153bbf91fde98f57ef89fc8072f6860e0e19fc1eb6efed7f5f -0x4875b3e655ab3597053fe0a7747e9b264381ead5e57abd3e0a27ee16c0f11b80 -0x71f50c01893b1191d83239fc050c45e821641599b6795a996365e130e5da1cfc -0x14006bda26ff3d71676b4608d677db30f3208ef327a4ff6915053aff30d9ac14 -0x979257dffe2fed01982283a6964d28a7feea930512975ea93843b9bdb71559dc -0xebd842bb6dce19273ff4019498bfb0cd96a07c0389bbb90952996c51a6cad651 -0x36c28684b47743610347b4bc9bb9f41aee6fa6c03c8dfd832542a0c29e019285 -0xe2c5a34e30bd31a0d065318f787108e3e453d7400d1388949f1de0f7a7184e4f -0x36fb8661050e6d3612be34841b7935402dfe7caf654dc8d67954511a7291b077 -0xfa742f6be1a2d77802698c6a2cd6556a3c3c6d66e99b2d90baa0db1cb1887ed2 -0xf699cf5454ddeb022801a94d27e24ef2d92ea6a1de9733db1cd4720ce62e7b6b -0xb7230c265537566c7db174d683c5e9cd8e3bc9d8fb1f6195cb79073b9e21bc39 -0x3699d1a2141088d0bd62bb8d76a17a98b3e9c55df152006824211abc1a6d4ecf -0x7d191d65a39ccb8a13e77250272ad0ea827b2a9863e75c4bd4224c14de10bb4a -0xb7334e19d65ad8d7f1c731fc406f205b983851d98c6e0a5ff2096c172e03740f -0x8a1810e2c57eb1beda3cd6033c4006c00f48e7e0534f4fafe07d7fd9d5e5e3e5 -0xd84e507e463348d0acc5fa8d08a62ec3954dc201d152dd9677cc8192a3804487 -0x47b50c03bec340341c6cfaea87edcd82e0b29293510c3c0866555a6423fb9819 -0xee7369612dc439dbd2d42ae3db683d0f0183f38b6f1ed090c2a0d4ac8fc2200a -0xb4bd1d92719fb87cec0855eb673da9ffcd7ee71654d3c0347bdadbb5ee2bf751 -0xccc1d3966a3841a8c67a894e632c44aa987962a2d4f2d53a2d1f2ae58b82afcc -0xef086a08a8d99e1dca33b5f85be749246065969c6ee1728f91320369ef0882b6 -0x0fb6931766783eb97bb09c7ae4e7ff4d0f0d0137c1fe07ba8792d3849f84ecf6 -0x5f3b0c6affda93392511f058ac4aed99ec7fb9c9df6dc3578fa17377bb84e2fa -0x8d58901d66539bf100f0e87959e7228b2ca5243976c6e845004cdc1c51d702c5 -0x5642703a7a3faa517ceed68f9172a2e36f779996e5c3e2544df12f926b43491c -0xaf725f597108452fcee6a5dca356ba062ccc3d51638082898c258f3190318d91 -0xe9b3b6d4769d140310139ec779875070f4dd12d2a6955aef18b16238608f07ca -0x9bf2ad546b85bdce44be0ec63b7eb91e270d581b7aa5c4040ed2d32e6206fad4 -0xb5e02c1532505d44054bb0e5e330dbe3f2e9ec5ae048bf0a32e17faa4c784659 -0x8a4acd0eef0fa51aa80fdaa085860177a525cdddea0690d16b78dc171b53835b -0x1a314bcdb29276bfcb4c2a9b26ccf7b54ea87e5817400d66abb14995a8eb5f7c -0x06089efa428387337dc39d954108b0ce2685cb8e64e619ca31f6937f5ffd5ee8 -0x9c892905f23e3cf361ea8e24054184764ba10bbb5db708afa65994df1872b30f -0xf349c5e1d452ff1e3647e8c20941225f27d4c26853ba57e49327cb0979836844 -0xe60ae317a4f254cb6270bf17c1584dede27262142711b032bfb8c63543400835 -0xeedbcfb8340d2a0d105896bf1467052a3d6738636d919169d1f7f0e08f4faa8d -0x035731cd77d042922caaa280b3815881ca6b4a884bbe34092f0281e32f55efa6 -0xe9648b341e2f8da094b07333d793d862db277f89efc0d93c94f6cfa99b078f7d -0x662c443d7cbf948f316ef0d40b8a458c06104c5525bee21e556574ae198b59bb -0xf69b8269fece6e082118f30057ce928fa1b592a4ced651c0e4e8b9fbb17cf5a3 -0x05a2d6ad69dd6e60c0f69474bd16be54be7d400b572901573728bb63cc308833 -0x6484f4389575dff10eaf877fff6a963e0204e9c07f8774a960e8b401da965979 -0x858853ddb5365c1bf3e93f301f2ef3eb79ed3ce9ee1c0b81938e3164f320d3d7 -0xbf24504f2fb1e00ca12876b6c6f2e2449243dee7021c3af11b94e10276eae82e -0x454000141a8a5dcb25aeae1fe63858744968c7f16116351207bb273c0da16f55 -0xd563eea6e759b097e4b3cadc469fd82dbeeaf0b950c56ca7410eb442c8102d82 -0x7d1e8165b2778e94f450c7882211d14f35532a6abbdacf2e59a347e5266eaea4 -0xc3c74efb532f0d1fe94ba72b9a7184f169692e8e903a67214de2b19d07180a62 -0x6c672529b90a97338207da3297bf631ed4c513fa7ce60697c4046455164500f9 -0xdd5f1b4ceebc5927f9d6bdc5533c6d97ccdf08e36aff617fd7c1a7d3ce7e946f -0xcbc5066fd8e763a8316b8e9f61c2e253aa53e2ead8622fe8b17185766ee2731e -0x3eba3b693ac98abd97936573d97c6303aef7228e05f8f50828ef4741f694a597 -0x0e70ebd1fd38de3997d19e2418b26cb0ae2a466db257d00314403b065d93c8ec -0xe9dd1bf739e4ee90b97eac21a88939282df692df5eac5f0ecb86d42845092130 -0x9be4a8067a95119f4f9c00335959203f5efdd4dfd3d1b5ed2afd9bbc6c56e90b -0x9c015c4cdea05973e6b37a705429571dedadb65d4bb4f5c4ddcc0fe67124aeca -0x208bf24f67a0db0d379a0835657a2091a89709db8168ccf90b6492829420e4ee -0x8208acb0ee05dcedd273022e410fe8dffaa105dfd3c1b8f1ce1de670c654b04c -0xcacfef7e8ddc513e2e71f49ef2e679cecefcd40253bd0bf4da4c23ff5d30845d -0x7857da7d7ca6279e1d56028f5b5e6a953b8986d85ee0fc3efd9958472aef245f -0x226f6d844860fc1f5ec264e8793a39c23d6027c084642634f91ad0ba76226817 -0x4cd6a1baed4b67e6520640f673798df6fb6ce66f86c3a942271200371bdb72bc -0xb4f9fb44d73a110ddbace8a5a5d35fd661627b7d3268e46db436a0d65df801f7 -0xc677cd655e9137d21c92cba2269b9b799666e3fafd9731f08b3ad9ec07e5c71a -0x9cef8bee6b9614801117a77887b8be1ac35a99d76baf592a60e56890cfd82b9c -0xc10acc4a4c3dc23ee25c60b9b70b64bced54b880accba250c1fc7ea7778b24b6 -0xfd588d719018cb24f25b1d9464d2b32c81abd416d4ef8824342d92afe6764c5f -0x85041f80544e0a22f490f099c3c403312d5d7d5f29387410b8350fe9d462b9ae -0xb4a594872f4f31e3aad7313adcce29edef2e7a51ee88e2ee71fdabf3616c45e0 -0x4c1089d025d4cf6d75839562498b7fd62100f202c1c4fc454c7d45753ebf6d52 -0xd6eb7d0016b6eed71e5bce19d8832412902ff3758998b191c2e9d3017f4fae24 -0x5200ca986a9b9d6e58c6635f7a80054e1667e3083cc96949999431e8bff8bdf1 -0x08761a8a7fd3bd50d0dbb4bf4a6b684f70e93888ba7f878cdcea7ab09a2f10bb -0x3ff7ee4e912069f338c40190986cb0ec3861754976c0c0420b5c945bf6d1ae27 -0xde227cd6367047bb097d178c2d69341f60dec55d8d31b6dd830ff91c583b14a2 -0x350ae0d27213b96d8faf3b6815342e6b527df8d668d975ab17a549638d2a70b9 -0x3a00a41514365fbaf298747e53dc9c2e12bae09d6ffca1cd2fb90a075eb0941e -0x8df0422409d7a0778fdd6f00009cbecce8b60b0a89a5e5d7353cf492d2526ba2 -0x8fd1d0c3ef29dc8b166c84d7d7acadccdbc38c3e0316f34574696c583784fda5 -0x37346fffdcc89f9a5e4d2b86c8c0a7d8c439de2d16b63210813ed957df41285b -0xf70f18b59ae6d694ba3b52439ed5b95e2b134605e94cad3a1c131c15f86f0734 -0xac2bfcbfa6f51fc39152b549b813fa6bf96c944b62cd6f6f00f058987b9f84e4 -0x88885f1645c3c9e98e9a0f7ee50ad966f05e7f0a62bafa957beb5c77d980eec2 -0x635f3170bbd5a236faee0cfbde03b67d4b5b23c83bd8812511fd5aba158a0f0c -0x275dd1eb075367016af22b09b8a49ad66bd2a9151f793a0161e4207f8cc8b78e -0x8f112d81da838c653dac7bd6aa92d43f6b8e62385796ec83808810a1e4ab6ce8 -0xbdab9176eb017da9e9d6617bde635a750747fd8fa7f7b49997a6af1c1a220f57 -0xbca678740c4ade4a0efc4bdaea690ff206afcb5c007e601b88643d4745c41590 -0xc745447f480674b77a86c34a85eef753cf844062c6916c9306d62b761abf4c50 -0xecff81e24dd157e9c80cb83085d4ff8089da6f84cf59ded08f7acf3ef5089a11 -0x811690ff45b06b420672a5f7eae1b9915f5526966b9351d595f84c13578eef0b -0x68ed733eca152a8db540db31ee9ccfe7ed0398c67a98fafc415627631fa1ac26 -0x217225587aa2945495d1b7cd53474c7416078ac9923adb6846829813223e44c4 -0xd07c76eea00e3a6a74b0bbb133c56cd9e416a2f889f72ec373a2cd6341b85ef1 -0xdb0b2ff98feec9a9b8261849509bfd01756bbeba75cc0f8d6f7c5b147984cd2b -0x26101af3819aeec90cd286e7033eeff2f11d573e5d1de89647fb0cd76b683bd3 -0xaa2dc593cc42974cad67f4abed3acf8163be1fada7450f165ea0675ba9c9abb4 -0xa391d3d695fb6a22cdeec31b5d9803f8921ec80c68690218623989260401f223 -0x3b92b9bbce076f6eb38f8a9914fc2b476f67f55c71fc244fa92abf468655851e -0xf723f523a3187650633a98d14a033c08753ff46fe44b2036eb898a120367f7e5 -0xf7bce8c6bfac74b90df9ef27f3243147076699aac6c49818757d0cea128ca6af -0x419997368bb68e734121a675a02077b3b03545372fe81b41f4ce91256a1271e9 -0xdec36760d096512238298d5fec6fe9891cdd0ead797e8d8a066965cd32da4479 -0x7e05b5b0d78f2550b74db1fbce7c836b8f5fddf6c2bd81cd23c69d60c2d05b1f -0x052579d3c9aed595923f1e0d6bf2c93095c48aea1a0f0a93ed97e9e5c5a7b720 -0x6a5518066622151da72cfb14b32ab3ded05bb80023e00060e221cb00fa8f7fd6 -0x69469483ab4dd4a1d7bada0210e4e2b2aa0085277c7aa225664259883ab67b4e -0xb12b42755c3c19f82c6aa5a9d3e633a96eb612ec78efc811f112465dc61e9a1f -0x089c9d9d7ad3f4304e4fd10da0cff6baf438f94e7b4707c5cf14bd0191fc3feb -0x016c23ca7457b2e71c9b12b2f8aff28db3c644bc57a66a1aee234cb324f88c6c -0x97f5f5c2abd23922c1b825a1793f13950f069bdb25ae6218f61d7538b82d5d42 -0xd8fece32defa31d3d8336039a3af1e9e6bbd94b65757060d5fd4de19b25654e4 -0x2d67458d6ebd58f5894719146b7e56240fb75ef57efe11527872ec2b720ef4a1 -0x3cc8a3303d0847cf471f33dc25750c04ec6c0a74e2a4ef892eb87a25500c71e4 -0xd48c9f1686a3449f53a5446148b62fb0a28ed8eeb5aee7c3b1872cf4a012caf5 -0x4afdd6dbdb2bb2c8c570492fdca9162c37895a214f0c37a644bb939359efcf3f -0xfa28e75b96b1aadf52bfd68f7527b062ed7d97a8c7fc3339b7ec229836f898b2 -0x21017ecb796390edd5a5eb452af1b78e6d1e9e7bd99d7dd3a49364678610d734 -0xb8d7c66bd559c75213e7309f51fc4e28903ba841d91969096cb5ff44e4affaa1 -0x3f81b74b014812e3582c02fc4e22597fe570f3649b44905f56fe8e41060fe731 -0xc67597f94e499ab48317c22425a0a4ff02e871fd0b377898450c009bf987f9e0 -0xdb7b7c47042a323f208647420656e97b0532e4669e7ba1d875eaf0e2960221d5 -0xee246617f506b20aeb2948baba4ac513b61c085e5c5d9e713668af98236dca49 -0x87795785d3c40547e8d6c9b6e779d7f51ee1e49a5d01404af1aa0de9e0534a1b -0x6d495531293631e22a6d820df94313b0b573df2ddb6832c894f344655b6cb6fc -0x46f920ffd8a7331c0b21e1ffaffee840053400a6aedf6989aafabdfa3c21615d -0xfdf1aa171ef72b344b2abaeacf201829d497739ad6f46ede0ad71d93b16a39f0 -0xf34df86996f108d40ec3e1dc440ebc3e911f800b17cf183964f7e99e8e0f3bb3 -0x3be866e14f95428c0cc238d6323828d126d8eb39c457e81ba408fe6446a743db -0x3924c13034a18b6a131334f9efee47525043be344629ca50abf1029d0456a597 -0xcb20bf0cc6a2e89be64d8edf03f5a70c636b233320fdb16c0b0325fa0eb3682d -0x286414e6510d2dd56bfba542974197af79dcbf1b1062d6d9a75d7c26ecfdd0c1 -0xaec98a77d85c5ad8fdc33e59103f0fc3c0ba0c8f1593007170f2d7ff0b48226c -0x134892f8dd451e1050bbe294e2280d976ef4ee42fee751eda8c4fdd73e4d6aad -0xa2abd6799d05cde9aa1530fe21059d173b9a754709610a3908e81bb0ece35675 -0x18556373ab0956588e781d581430e13835a31aaca3693e416e12d422273e3ecc -0x0fc343ab7522b4b6ca07fd9e05c0ef796e7f68ecafde027fe04a7c57331de697 -0x56a94c3bfada36353edb68e6e08f201995328d02d12828ed1be3c8fb0f918270 -0x6f1ca9d7b2b5107c27de8b07bab0b697f5d19d78fdbfb74f23f5846ad60faa86 -0xf053958cefdb2102002f1ae19d40ec0da62cda81c2e412019a687b77682bf096 -0x82f1ad942d575868492f15e3a8a5eeda25c4650c4f839cd418b75727bb267b73 -0x893cecb020bf2160d74e22927072ccced7c36b6c60cc93665258a050a2c21028 -0x4e72be47cf13aeb1708278e32cccc0c7406e5badb56a30d621088739758a39d9 -0xcda4924cb8be9875833119978024bd499bc07647a73b2f8baf05160dd15edb46 -0xa7eb8ad56a4cb944e2b326d8ade22e44afc1af744855ac25ccdc7142b2aed7f5 -0x31cfa25d16554e4dcb8206933d12927d9bcf89125eb940e51e80d86f0834252f -0xd486fc38b8d7818716bdedc5a5fc50082780c1b721a76dd8a8efd5472c60bff1 -0x9d0f516a14125015c17c45eae977bcb68b4306c3959dac05f7569a1c6dbef659 -0x47793ab11002f613c94fa2f9c7ef3e71cb74c8d63724da451bca63c524dab8dd -0xd24cea652267dc48f44f8e58d944bbbd8b065e3645bb6e25fd265ca7181af271 -0x126f24c7c7c23cc600f633bfc0d05a696c7c27cb3fa132a64d310f63856615e9 -0xbcb871aedd3bc8a2365655d82c453c2c74a5943249255a7a0bc1939081679196 -0x6161a13615224e892f8e8b6a9d643c2f9f216c12340768878129c745c3b2414c -0x4e9df1c69fc9640b65214f51a758a5bb7e75e82db298d08a1dfd810de58cb655 -0xe3f8d63129df462675949f056d97ef185a003fe7d07cb16d034318bfc49007d8 -0x4a998be9531777455c5e12f45e6954f41cc5e0d9e45f700077862ff244edfd7e -0x955b9beb18293d039a174b29d96052bb86ca9ee93934ebf17560e529b04321b0 -0x392bc8aad2277d7d3fd2726e548dd38b7d0d54c3b243c9d0e943277922495e0b -0xc69f5a3c213d0d1383619c759f1c53337e25382b333bf040a3ffa473eae80365 -0x714dae3793b77422e4c3d37461108af65573d789f656f9235ff8eaefe111f18a -0x5c37b1e4d804b1440fc8f185e3782e315f1a0cea97d1e9c1b2383855e7c7eebe -0x5da41b33edb6b1d2fda5914fe230e68648c8f574fc50650e6335632da1e7fb9b -0x56514481e32cd0e4a8384290f272026d8ada3d694406373e9f3c51a47b1ed8d7 -0x9a288ab3f15446a867c4c690c45d63954ab23dc6fe56060ecefd742fbf669573 -0x080b4e285ed9f551215c45e2111b38878cd2757812d56cca94374d7e495b4a07 -0xb5fb57344195502fedf1f697f8ccad098b0e3d679f995738684c4c5dc40bfaa8 -0x24de45f31577bcf0e23314a274b869c2badecb603231a9971e38965a0db10d54 -0x8cd77fa119be160515fe1879e174ede5de4fd2da1a006f2ab2f9d58bf22c41f2 -0x8221909ec0e5dd6fa4efd4161fbe93b6923fb19f49d9aecd2250e88ebaf8c897 -0xea8f35dbd1797db124653dbdb96f8ac2dc2be7ae38f1f654e55e2f89bb207c84 -0xb891173c07435136d85f471da30ff81796bfc774fcdf4a6c5a0fb7d409137a56 -0xe2534b1c18af9248894ed05bc493dee30b0c8d58b3d479a709e2f0e4018fd888 -0x3cfd12f6e32c0ffcaeaa53b69bf081e30f0e8057dc85c3b918aeec0936bce442 -0xd8f1c11b3705e169fbc6fccb70960c16fc923f88105bbe41faaedd668ae23884 -0x6aefe92609ee4cae946dcf72a2482832a1185949850a3869e7aea5e800106c51 -0x596dbc050569b616f1697f4dc275efddaa356545554815d24eea28dafa7ade0d -0x7c519d82297c1b211991d34450d199b944178dfbf27b0af486489c65e41fcb6d -0x4322c48ce1c0d26e2bbec51fdea9509f89652c9019051f2ee9151757c07f29f9 -0x8c4653823ed41e18af2cb145a5b67492d4ddf9399f1f49b3483ebf295a33699a -0xe98831478c9e6e4a3ef6ac5bf464b11175110754ec39f701de98e8e84da0333a -0xfd50737b11c551595134030c1d6aea8295b657eaed38a1d1906d96b52241c502 -0xe933a16308f5f7390a95db12dec9dca0e1df06e714147219aefe30cc3cf37b00 -0x986acc67e040b1ce78436cc430f33fa2946486a6a83312648baa95edad41ca1d -0xf789d4eed0ab3e0c84ca8077f5449d5ee2bf2851f2c1d7c1e4a8a46108f92302 -0x2742700814a4352c1ccbd069ffe38f464715a9ce2e396fbcb01e5625d5d0b29f -0x0138ab30bbfbc94a02bd429af7b2c798c83ee3f09bf742910e5dde490a1344db -0x9912849571bbfa17d54fdc77f54880279e42f50d27eab862da8cf68972cca43d -0x643a3147f30d173e02f6c98ee11d8fdbb3518db77246c694fe9c02da0836fc87 -0xad3fed05cbdbeb17084c212cd164e82d4a72f2edd471e3c19cb5ace0880f114f -0x9708c82927a4b433eaad2b2738b72bfc667d2e7e19f50de38de249543ddac35a -0x1e6012a94fa596ae672793ae5db50bf99035bb7416fcd6bb6ad8953dc3dae081 -0x7bd621fcaeb9497d76bf82910178ad2242124eab75bdf9a3586cf15965c316b1 -0xfe5e91b1574ed15ff380e3bebf4316d2ef02320e326f72fdb74666c978f88a05 -0x2976295dfd1140492e9c5f66e537f8a9f85f85c35d1b5fd3a0cf8253e1f3199a -0x1ae28a602df6dbc12cbd5fd11577ec92f71b3307d5b42a48297b7f35bad61fb5 -0xdc728e8939085a074a19e97d2bcd07eddf41e29dc4ed3fecf5435bbdd411b488 -0x69ed84e9b3a1bfadee5f33394ca7722fb7861374134cc1ca90f43abbffbf6991 -0x583c6e4df1c11762ab502201d8adb3c841718307362961638b52c01a28739ad2 -0x188133ac93ca5b33b0abc260684206cb44c776293917366e7d5c952ac8fb5bed -0x7a5cc71b3f9c8f746f6c1f8ea449a9834578be148365acabb3616235fc1aee84 -0xfb78ea7f42b55f4e532c8152ef426f883a0ccb39842b8304bb9e8e153e7edc88 -0x28ef65bcba907d2a8502b73876e867fdba0c9abf00399d646c562885d9f76add -0x6c12113f4ad114ea0c210d40403df97a6028b51955c161dbe1c820f08d0099e6 -0x31d381c9cddea71148e9001e586d88d4ea8bca9d96fadc7f9fba6232a16b40ef -0x118889a2f6ca2041051dd94ec3927b671612d3c10e0284759e9ab17c7838c30f -0x1bbfcd477c2d5eba09a4c9512e51ccffbc001d5a9c3dfea56ca7a00106d40595 -0x9867967415221f83090957aa0f5ef0b68e967ad9383b12e1f411c8a942860ec4 -0x44c5e8431f4615e559d17fe816eec5c2a1cbe775181288478b013e1f011d6fe8 -0xa48ec86e2b1234ea07982b35c1eef590efe8376d0fbdfa9603f99012c56cb2d5 -0xa9c842c286ee7bfbb9f1713237fb5000d75c2677e3ce788341c3759aa166b8cc -0x530b16ad7ac1e40db29aaec9cb9d42404b9acf7ef6d52d34941f8b2f644d1daa -0x97128d8858ba4db3db15c9a42c8210bca918f4b96609212e2fa1fb7e9b9b445d -0x352631fcc172d59eef5d8709b62592cedba51099c90599064cebf085b080cb44 -0xa715723af3a1b427282d6812eb53740878bfa856e416320f4e3bd3b53b9f00bf -0x7adeca0bd0af06244df9f7354a574033e9f896fd73d9e5df2924049b60c5e986 -0xa2ed6d43f2b9534fb96a2b580f36a87289108bea2f6a2bf8803948bfaec1243d -0x9ae2dece66ebf9968a02dabe50ba880bf49c2366335fc44695e9005081319711 -0x38bf294453bc0ec0c6704755142b81ef22d864261d426fa655d02731c1af03ef -0x00d5fba0de2743ba8ec00ae2f2632fef4f63d6fb5533b19d2b81b9d291413a23 -0x6dc13869edcd10ca9208bf488df82a4bd60c29b85aaade7fbd66d448b2fffae9 -0x37ffdbf417871702d927887016df939f96ad695b5cea61983df272e9d13bdbb2 -0x4a042cac10a2da92b30da1c40747056760156e00f87cc1d23ea6b665e6840899 -0x04cf22f6036006299203ac474ddb59956d39d39dbb4072c6fb6459e384908a8c -0xdbe074a5bd84a43ab9ee65737921a1c0e24f3ffccaaa256d5928c07c86790253 -0x8daa81f27fc7fea78fbd9e4474f41a5bc4c96735b49a764f83cffce35aa35e8a -0x4c56c0ee5c8aa96e066b5e317d5c6301f193bc5b2be8ccd4e2be2c0c0d39e876 -0x88b28894f6c04f9d3637ee8f30b4b046c3fd2fb9b7537dd366024b803fba2223 -0xc8d245a6f584fe85f274973bd0909072113de99fbe85e27d1ee5d991841c81b1 -0xc411bc0bdc6e38e71821d4acd5a781be159b565ffacaabdd13f86a6fd0e4a220 -0xa42ae46711193e70a6c00e1df78fd87d33be885cec71589df2b74e2aa3de4755 -0x7e19db947e3c4a3ed9f302d82eaa71c683d52f82b993583cb78416c991c2be3d -0x1c4603ded4fd5c444d2299f9800f4fddf8743ea70b9d3ff42cf144bf8f797c2c -0xd2222d41530007933fe2be3f1c05f02dc5aedf4b06caf6f9b8ba7aad3b529e97 -0xf4e0bf01762eadb3975271d7036f38e2e4e21943c4a3028f1bfef86e4ccc2203 -0xce359031bf45e3e4a89ded7438f69dedd9e04cdcf0f718421890ecb3564e0108 -0x1b24fabfb8b6b030b71b6c244c96a8aee112cf72d30985d1d2bb07f504f1edb0 -0x084c3929418b7a4e38ad82bb2fd50fe063d6031a07ab21faee5b6eee67aca0c2 -0x78122a301e54eba41d5880c0498c326226ef85cf276eee1f28f5aea90738c008 -0x857296da9382079181faa0b9be8dc3943db2249c3875ce4c6fdfcfa537d79da0 -0x85a267acc5e4a48f029b88e1e44748a3abfa87ab1b34762d8099913017655cd1 -0x01b023157c13b92e3cd90f5a848d40580e7925fd8c8f88471e8c5cf0ecd4ab3e -0x02ae3a5b06b6f924a9a67774d9beb74325550414c7f782946ac903aedcf24e2d -0x7436a63e32838358db43b1ff20ae9d090b51d88b0c3a5da5c43ce161dcafbd04 -0x87c3fa00cb6c54ecd12b92e25f2ff2b03ff7437f3a0cbb58bae2c915df5d3166 -0xc59d80dc9928a73f2e964933777f85e066d97ad355fd6c3d95929879f961e14a -0x0ed537771cd65cdde3ad02b278be0332a2450425804bfa20e402e01fbf06e019 -0xee6960db2e58ecd99c8abcd3e19382874e01d6f2d78478af5db174a40aee36c5 -0x81ff46d587adc0a1f8257aaec54f48e65bda4836faf9dcb8d9cb0ca443f47087 -0xfe280e8546308dc897e323ee0413d2f7dc8b7247b0e62eae5fff61607455e826 -0xeab04bbd51ff96f71af4a43ab98f37bd1006283c46ad97799033f6db28b21d9d -0xd794dee7edb626fa1888f72df7383ea6556ce4ccc5b1309fd7f58fcd946e6570 -0xcd1f74b63fd87e53d637990b4f67b3feb1dbfc14a2188543bcd650705f0d4955 -0x9305d17517611801463a866c62a03f6972fa85ca0e88c25a30c3cea3d58a1a08 -0x01770be48a9975b3b3ed3b9615ba17bf607b37d4f627dff0ef00f5f7e16a5ca6 -0x4b7b5210bec755f7c01b0882b0728b47fde3b94e7cd20febba37174a621ae339 -0x5a4bb76049cbf4420a32c2cb9a5832df87f7c2d571c5ca06b90f6cd4c0c2a50b -0x121571a70dfb517842460033360607ac4bbf1052ed71562826c3135860d3d75e -0x21762bef1912f951a8367f4e262d47eafe86bae5e2fdfddddd8825dc4a9c4c47 -0xba8652332d4c99aeaba3e6ded2197f68c7faf3d92f82ff1d7f270090671769cf -0xd2dbce544f67d874e618aa156f683e49eeaffc1f63600f7c20a30e6d6473139f -0x2fff0233a2d5e0bdb97afd78a4c4a32d9f1075053288bc8e660987ee67047061 -0x907d6a84bfea38cacaaceb3beccbf2288aef35d90fd4e5242afbcb91ae14831b -0x800fcce3d85f2f84f52d6aa4607fb8370de809df52f2edc806d44544a4450a0e -0x378da210d7336ae26338674501b713d1214777d7b5df3e378b555c3459d82ac0 -0x14885caa58ec03f0f016ef0c249bf314a41189e5ece8a7ddaab434a4f8ba45ee -0xae9c319c3ad9b8a55c9e8d6b38f8d5cccc25eb5674512a65c811c58afe988880 -0xbb66bcdc11de2166787ee6607056a4200a0938d727c23093dbf5c507c9ea7d39 -0x091e0fe0141575d146b53f8d477df283c3d8d534541cba33de753e9285343b20 -0x450d463ee064afb528119c6790a0e1b55ca1647e627f57c953cc6d26fc697bb0 -0xa8e5e7be4a6eb8bc3823e610d0f4d4dc9a255dfed75bc00e44c4f3ee66ee2817 -0x80c5aec09f42723eecd43d22e95ede306825066642698cf9e8acaa50f9ca946e -0x4ed1fccba6dfeefa097e3de08c7f58b34c872504167ac415504454f47e681f99 -0x1e336ae58d85ad2a1e43d9aeb1f370be65c82607380a97c07156ea6c4e9d4013 -0x646503a0ce53b4befeff754897fd57f739ec6f8439f8062181200beed5870d5f -0x33b534c699c7336b6cd4e019dbc47966e08494b7b8782b7eb91ceb573c378691 -0xbad78b83119da5133df004a5536c4d0688e2130e315f699beeac98c75ed213d9 -0xb4f2ef635211e91f33c77a0996551fadd52bbba4f1d65ce07666596bd9950a88 -0x3bca4aa2379b25cd8a5dc0e17b2f102258bbd7091478ea050b76d94bec676c77 -0x56ed056b72071c238e9df3279abf43859df2a7746f47182b06a57a5f28fe3a85 -0x3dd2d3dfbf8e8578d7202698abc8d6c504741e1fb742cc09aafbaeb9fabf268f -0x40256bea4af45dde2ae2ea6d81d205d579c6a83472489ec0eb80935f6042caf0 -0x4ad89455ad796fa7f86dd5592a0f46176e3b1523deee64694541f81f6c268ca0 -0x1ba6225319de0305424911a9b520d0af097fd38700332f9513b11a76aec15a45 -0x3df670f4911c2ce093b961215ae19033236e36693df94201841559f2d5b23fac -0x4d01772dc38e2476d9eaa457e619511d559674719887ee5e915befad9e8a1889 -0xc51e32828635d567e4a4bae17ea761ec50b44a1c94e29a822d82e2fd71e8a8a5 -0xa2978becc9852798fab1eabd7f7ae0c1e5b7163d5d523bb82e79c2cc6b805fcd -0xac9728f273c1a08c344ff68bc68d4f50624b1db55f3ef03ad86034d1bfda535c -0x72c67cc96bcebed350a47fa44fe89a4afbe1d3bb3333ce03750dd6b3877a821b -0x0c1b435d0405b6ab35263aa8e33bec2c456d3a52e8ce4be20440b9ce15cae806 -0xdb154c828aa381669eaca6af0ee79d461290576bbbb90b9255613f54c136fb19 -0x3d2698d7dc820afa30796bf740b3faeb01237edf70c57d11696939f2f11dbd96 -0x158f3c164b23cca2a1d02b5f1148446cf6e918c24a225cca1d42d41bc8c53762 -0xa8b2090dfe59a4b3bbfc502e2c8e2e5999da9acf82ec61a8da01e46c0e79fd0a -0x9f4feca03d8a4a3686f29cc1fd84dd8cc04ac5443f1db50bb4bd6c55d9406915 -0xf187f051ce3500b25d26d2fe619c101ffa0338f581b95324b7b1b52cae90d622 -0xe91f69b5cc2283e2786c93730ca2b0940204cf28467d7876b1ae5767baacfbad -0xb82d2d91cdf378618fcdac5119321a0c6d77ca1c489ac1a29f080228ebb5f778 -0xec286c270af60d5c114d5a01e68007606e0700861e1bdcc491e9f56a00449f42 -0x324744bbb4430a5831a7d84284505822c6df62acdb95f57254c9256d54d6b9b7 -0x02869e5b9d062a9fb5111dabb8a44425b8d856431ea9496739f7c4a1c7b6d2b7 -0x3418664c7e0e54299118b759c528d0a5d60a5492a627137982ff2902f983adb5 -0xb461af1f5dc1bfea874508d3335d4215e81d3854fe86280decac1efa27751c1b -0xd9e57eb52349b15cd8c0076c3bd3fa6f52f82d4c3b9f0c4091744f72cb96c9d6 -0x6d56754b195b639dd456a9616741aee5a7cef47614a812f9b979972b71c19e0c -0x3f4ec88fa9031ca042ceef98c0855931842603d8f5a34bd311fe671147598ad2 -0x0067f34c04ce2371014a0091cec568612437b31796e701b7cc2c270808578659 -0x79167435d2df26965171726c06b7ca66fbb12733bfb65f96091fdde897e9de1b -0x1657caac16ffef8e140b8ed03b0b51c0d9af31939dc269f85fe7dfbf26e31687 -0xe20164d9cc2631bd5bf65eefe4010fc6e2cb3b49b8a073d0338a160febb32e92 -0xa8ffdccbc1ba87423c34b89914f2975a2753a04850118e2152c7dff78807761c -0xb3b0baf59a892a156bd5e0d9c34ee68a78985292e3e330e30c1ab1e7baae3694 -0xb093b1b76d6d2bcbd4a3cc0a422a442fbd43ae1ea32dc7949b93715669c2a68b -0xac5f1fc26cf252873070ea4381849a0567ffe8ffcf1a37724ec49ea8bceebf38 -0xfebb96ad8313651cd4dfdd3c74a365495151eb16787573aa95ec3991324ed735 -0x84b17dceab550cbffd6a29569e42ad0e3facbf6c4420ba97321aa6aa7c7dd61c -0xa340739bb4cf166e5abf3d5792f3f4452a553b29e100da1654ca0ea2c37b54c4 -0x9659ba2cace377544555b4193d3a7113e35d755ee5232aaad98898864d242b1f -0x9ca35f9245e1e22f6aece3e1c257110280744c0d00429a74d29badaccb4ec426 -0x37244646b248e1da9d9a6cdfb9b14a1a5c6d9227c689ad9dd332745a259eafe0 -0x6f9c11a19435ddaf99d56400b9c277914bf3f6b6ca633780e2f551b09cf85eba -0x893ccd885b7aa4e626ea995eca507b8a66e2cb764c0d4f6a82b24d0c4ab00820 -0x821e35fbea36a1548c86717266373eec259d7f32864a10b9ef0b756aab0e192c -0xb0cae4395512e08e07f68802ca53630aaa6fab1d26e3823e16efa08cbacf5a3e -0x8d89c9c9d317e1803725b1982ca699184818e50a8557370b4d87e6cc2f809647 -0x1e765664e8de0d76e2f28318efdae0d53250ab50cd861ca3bd0de8fe408891ca -0x7e7d98d362219092a01f2c99489ed73f0882e0562c5bb608022b877cb801253a -0xcc334c5ed0ce7a8246b014f111dd84bac5d0a2531475bd91cb5e6cb45900bf22 -0x7002fe2369b846d620de17c6505e0676149b525b84925f09c02897c31af89c74 -0xed88d3bf79b7fbed294e72befbaa4263fbd65b93e88a6111ab0276f3aacb419e -0xa7bbacd00a0753dc047f45161637815c015d10ea3ba21175c82627549dc086cc -0x7ad59b6e76734e9aad53ff9afa6f1914b1a9a233e9ac23059a5f91cbe66f77e2 -0x0b7e2b630d1e9db9fa950567abcef09949750dc94c42d9156478f1a497e5e03e -0x0f4552ce3bcc672565aad090d3f0f19a68b4de8847df6ae7f79c973aee3c323f -0xa8c815440e15f88e3cd72242f07307acc56dd654f4bbaa184cc999f72ac1ceef -0x6e816edefa5eeacbf9ab191d80bd5fcfdc44e76d0ff191a54356a8d71d480c7f -0xafe991d5bd7d29574c5cbdf5eeb07d955f61288326dfbeef61b9dc9fabd676b2 -0xdf050df88277d90ebc25738109c110eb11accc322833b806171870d48d6b9df7 -0x887d26ef1bb43e8a707ebbe4cad4250e8e04b21c2e8caea3109eeb7661a1e236 -0xd3e9127d19d1cda34074e03e8c7e9c5fbf5624c994abcab2fa4072f6aefc2b8d -0xd3df390a0e62153353ef6ae13e64a741b52c91721f380fc5add3cb6707305196 -0x7ea55692e7d9ef7bafad78ccaacfbfaf2b1838b0a6f5b0dfc0a12bc41bf5d166 -0x2d3b77ddcd51ecc790844ab4b740dc0d4be38ebbecccd27eb8a81fe1cd0a9586 -0xe31b39f35cdce83e8181e14f0ef349816183f2a3156f95c4828fcbddae29aa5a -0x083a1c49c3cb0981716f50e77f7a3aa6f1e283f865cef5f957898d2ab7b9f646 -0xd56b0d75eaeae8994b68c723c4ecd2b122554b233bf52bc603502c9d719705ee -0xbc2be2d47c406af20797e086775b960c06e1421823d35baf8897d2cb09eb2b6b -0xb3090f22483d1cd3d9be1fe3fbf5e1506fe011cdb5f0f5765e8ad23d8b33a1dc -0x6d63651f7ffebd46a371824b0c56fdb54b9d00b52e6ee3463675edd9ed3ebf92 -0x0e6829cb944b4a17ea53cd2c15dcd97b393bc2c23ef03cd4e1a97f802a3bea96 -0x33a34210025defa4f755df24a9cd381cd880da12b6f26895596ecae5671e16e8 -0xc09cd9d1c0a2a14bd8a0228502101619780782a19f9e2ef27251be93a1b517d4 -0xdfec7a51be06a2930988f158c0bee826a52154ebb962277531d795368056d859 -0x79bc1cbae85362d3703ad191d1e4d5e38fe7a4187a049568ed831e4abe05463f -0xf4962e9d28a24a66467f2058c5b2d8f9734f5697c153589a40fb0effc1e0ffca -0x8924cf25bd1e24e207e6c56364c0b893b78bc5d76a49110cf80e36b452591c35 -0x0a79ad4556e1c5948f6409169cade5660c2da0a3194c786905ac11fa8bd79e74 -0xd9f2fccb8a28ae1817963519fbe2025a5429695031d50c05cfbe16c7042865a8 -0x38816e607ddf8e014183ccc5df53e73d5a23c9a434e11f54a16e0383de69bc15 -0x6fbbc965a87f2609562c68a3b260e441cd4303536ccbdc1283135b00e47e7bc2 -0x1aaea881346c9b1ec5c9ba406652d10280049eaf68d846bfb706e445a11fabd9 -0x42f216c1ded7fe1a49844c5f29b1cb4d5614de9fdacc0e2a88f69e69b43e514d -0x60e6588f97c2abf39a6847b9994c8fac75b81823dfd205f62b1b399c251fab13 -0x702c2b90b158fe229a5030a78031aab2a5526cbd2108f93ae0111133ed9b91b2 -0x06f9a0da6ebcffc692d75cf7343ff0ea097997e1ef0e87809af6087ff487280a -0xd240c6d40432fb214202fce799387b27045b45345d26a9333aa42d6bad2cac0b -0x72f9578cb7ec0de758d3380456f2099c2e59227926f2dea1723de4551b18a66d -0x17ba13c81b66f0d42daf00a5498273ad1ef5d12b8a2eac04a794856d0c6e948c -0x03076b71c564271750148e29c7aaae1965ce04b7293c2fd5691c7d103289d6d5 -0xf364e5bd1ded39922b52c49cfb64f40be771c9db8e0c0e981e42cb4e87b47376 -0x816bcf65fc8117792a7a61afe59168e77188e13dcc57053e45024060df580753 -0x9dcd6133fff44867c3c25054b7e4e4c44d617adaaa08424d9f00d7af864906db -0x8e5a505542045673dac7c66b6cb1614cd6d0d80bb57575f4487b1dee1a6ad80d -0xf445efc4740cf566c4c2978ab753ba8e8065277b6815130cb9f9a414de486569 -0x4bd1a1f48b8736286c339c29025554f781e40a2bb7717026a3e9a40646f7d6f4 -0x12976430a7922d6808151f75026812431388cc27ec46b98218d0392aab865cf5 -0x716d7bfa576d60c2364beddf8b38d16eb8fea0f7439aba96fce010a01ef28f96 -0x1fa581219235935ca4eb1983c508dc85cc960129f5bf4022fe18557263668216 -0x032fdba49ce14f444bd84beb199336acea8bea4367e42fe2aad125fa86ae7ee0 -0x7c2f1d983b82702500aa82e018218ad96403cefa1f7cb172bd926cf447b792fe -0x44359c1754cc89de6d9b6ddb363b59a5c56d3983f356272c95b53598121e1e0b -0x96a964765d1b8e9d29d7e4f18b2620c7af426f97e2405d478aed15aa3d32c1a5 -0xd96e4eed9611bda21ee933ab055f37f7c6de38ff3a76435511341482b3c8a778 -0xf5711305381180adf2cdea4592143a241b161cb38262424d5bd3a63a5bc1e4f4 -0xf1c990b05146e1b11d1b3dd475ecd80e9bb7d2a56d974af6a789023065be0432 -0x3f678e1105cbe00f590e61c3d58950d0a341fc6c622461ac5872d174a175aecf -0x48992943f56c79d477a50f93a40ff453a347c3a076d067924b375663f6a94016 -0xfa69bf774ab5450e18d96bf89de781b2dbd9e509e4295cb5cb858a96e7abb4c8 -0xc06b4350a19b33d25166823f4bc41bfb85af043dccb2327833ec45350f27b39c -0xf567d56993c08a341e9768f16304458517034bb5adc2e696284ac060f4a49d60 -0xed30f77e8aae856ff5914de1c3acac15aedb8065d616bf2316e2630e71a3ee43 -0x31eb8c26eae7e7fda33d721748885ec911c0910987597ba1cabb24fa315db8f7 -0x908424af9dca048fd27de32caa41787a4f6816784cc1c9b69895314760b6a92c -0xc19be19eb0bba46cadf0482b8aa3d064ebb8764ab4a335db7a39cd4d262c7887 -0x183b7fc62eefeca95915cbd0c3b744c355b5ecc3420785cef6505f9da25f75a5 -0x45dbe5959c376ea8c6959474d8c2d87d03a54a1b5e9defa6c80f5ec8bee1be82 -0xd817fa2e8c4c10a75eaef2ecad99bf16b66e34caff8bfb85cec7240b016b35d5 -0x367154318e60ebefd5d14707899b9fbfdebf5530f441cc9bbf14a68e73ddb309 -0xf097822854fb98119f8c7312a14bddd47ab855d9c5fec092145e6fca877b262f -0x9c66d99f37926fcc177153a9d39be4bd18eed0ddb1c190c0cc6caf4943f552c3 -0x568d25306c5257f48a8654d6225fb3a633867108c81318295bd132331a42f7f5 -0xa6d5b2cf7fcbabd043ff502d6ce0c8f2bd158eef4e3f951c2d14920342891a89 -0xd0f552e76270c287e135091fda7bf287f125848baa7269ea6dd6b40023dd215c -0xcc9e3a4f2beb2578c84d9af4b4f3c41986ababf9b51e3e1ff22b9267cee5d477 -0xeabffdb4bb616e9c60f8da6ba2ce0e1ce0e5a80f47e4bd5651d10eb92d387cef -0x498eadf0cd3d5cb84c7148c7e4bbafd67aa9bc20e2e1a0de3eaec45d09a11ecb -0xb0dd6a735146165d5431e8679abd52d260bb9969bfb6b47701a3181453eba0e3 -0x0eb5b00ac9f9d8baec9b931c832585e35986218385a9938509ff658467497988 -0x916a419b054aa87c06ec9fc426bf098acd59e2b3ba5515facd62c90ef77a36f0 -0xfe0780e75559158ccda26de6dd42a4a0c35807f31a42abc0d5080fde28432743 -0x596e9a60afb7bbffe9ca5e1acbb567ddf2b685d93277d06d6431327382b1ebac -0x5a519b50ef3b45adf40df21839e34445afed35336ed559720804d2f0eb9facc6 -0x0295966e5a1ead5fd1666084eee14ef290aa4e803c658303714f41b172c9d903 -0xd7d1acef59bba1536b5d3bad22d9c035041bb218677aa0dbdfc26985c80d0356 -0x21bd41c12499b20e206ec19c574502f2f58e6ba088382abb371ceaf3f7d5d189 -0xb46466b9f8abd3a3a8372000155d7e82946558b8fe3649853d0e60e5c2653597 -0xae33e4249b0f401ebde91b30f4ada29ebc68c4bc7d64cd68d075b6f9ad2544f1 -0x4ee4b806c2c3c3240027b148470e483b9822e454785e973dbe4b4e41566f1f84 -0x9611d7e3fe4e686def4393c27bf1b1e3a9caff7045f42edb5e1ead3c3be62b6f -0x21be62b33fa297770591ad0ce72af72805386184e3ab1abdb4a9a7a71704703d -0x1ef52b818107c535230a681d29ee58099f87a129750d76c57c842e3cffc12040 -0x12a60994e58949f1de6f5b6abce55b79e097dbd76441013e5994e86305d529f5 -0x6345141cd21ae3cfe02ff433dc8ba6e56f53f6cadcf137893938a95e654df3d7 -0x882a7be9b1f069adc1df6d1bbcfd58cbb7d34b5cd30a801e7a0d0ebfb6511dec -0xcfc1b1f96900a36c084e922830c875d2d2f4c94481028a822b6d047096777bf0 -0x80f7feae2444c2938f4ff2ad1489008275ffc19d492932beae089caa6c4826b5 -0x9d47ad90e71cc77074ecdb11fc0716664fd7ce4db9a0fa702df2558f022e2494 -0x6dd051d14d5bd46b3b2ca417bec86fcabc99c015eb9d61f259c2ca7c380d6fbe -0xf5132a9bd7c88417a73c0aaa2be99c8062fbea3e213c923c58478cd5958a4ae2 -0x6b38ba7f420110b315f0219a79a3df5b708626edf5d1e3eec94d3edfa2e7ecc7 -0x76e9be0b0600ffde77c195ddf81b6225b14ba4068ac84eeceee94521da1b63e2 -0xd6470cdc5a35829568da79b2111f6b07f9beaa996fab658b32a8939acfa890ba -0xaf998af78537809858e444768567581c208e77c76e88988725bf41cfcbc6ea36 -0xa429d8cf7b998c1254bb59df4e7fc3b1126bcee1601ebe55be6426524c0763f7 -0x098fa3b363512eac488130aa825d571ab9cd88c2d440bfc81197b8166e91e219 -0x929236e7e95922761195e149d68c8f9813c679e7c5f749396d7e5ed321ca1cc2 -0xa3494ac1f096760adb7a1520e15a0b4e1db0aecc445e10c5e5d381dc6cd81e67 -0x7b52e913f7104c257894b9732e6c83bed8adf12c21aab661c619ab9ea5692f14 -0x6e0cd9c2da4896b4ed59073a79b091932f9e6a99e0a57c8b636bab01559ee3d6 -0xca722ddab899808bd66704373dc90375778f8de65c74c72c6e9fa11a26665892 -0x352a816d2d27857cd3a85b1c06f509210fb710d82b7e422fafa8a925a1386b34 -0x07b2144d73d413562001b0a400e0d17025c95b2f4ab168f41e56c9c3b86c85d5 -0x4087ed3960cdfb5541f1b7f016d17c86782e1bb9638f839a16eccd58b53cf31c -0x2c9cbceb417679509ac68b0b6e1e6982cc3030a7f0ec2eb2b708a0303596f150 -0x1dd46ba2588a5096f5e19bc1b8e917cef7c6a10a4629be63ca1c2cf251ad2e4c -0x00b334b7f0f775f174769921e86090c7b54ec108c2f704fd468d6f699218c2af -0xc26346714ffcc697486d2cae2513b962dcda1dcd89e88d516fcb144da21fadd2 -0x07bba9ee1c7b7473699e8d54a52331405845b1df195010714a7a2965f98866d9 -0x5d851ff840e75a0569efe0062bf5638788b412ede9ac4ad22c6679376ca3545f -0xb31a266f3aa535c943b1707ce9a211e4fd7d27bbe2ca07d99065d3f9b5636534 -0xf63b3550579f38d8b49b0be72f357fcd02af45a0a5dfaacce8c6b63d4e5d218d -0x63e9dc0545b39fd7ecf84d96b744119de6f021562507b886d05d9c5ac2f62692 -0x7c2bbb394f0af0d73f01c761c6aedbda1fbec8665f67571c9786d5027a5b82fa -0x031b7f52b9f49953d27c7ebad9abddfe6f90438c9724eb5fcc5096ef5ac24182 -0x4bce14b87abbefa4a9a2af79cbc8d333dbe30d2f09b4f8b150f9473e126417d6 -0x2f7c22771be4ede5a1bb08f8eddd9092228cc4672cdb609ea43841e6d2cc3e69 -0xac4d9155b3c8768b0fa5db969a9fd82c19abcead75d25f94696190db7df9ea5f -0x2719396f04fd512f1e197363dc7974619b35d2426958d78dcc13e920d468bec2 -0xce9cf9771aec4afd77181afec2845f4ac8e8dba4e1545521f6470925b3f1c5f8 -0xe140ca2caf25af256aa6bafe4a5764b837e1a8b6a5f3ea6857ba8f1c1fc5a902 -0x9fec76321dc69854fae4a8fdfc6e5369aa11e243aa2b10033e521637af011466 -0xcbe19691f94a8712864b3c1aa6b6fd5536e7f2c1ec9e6cc48b7c12bbda4f263c -0x9bb5c1b72f79d5160c29853fcf213ec94f18189462d40e8e9153bf758974b3d6 -0x44a8fbaadb2cdc1ecbf649511c8cca3c4b8e5185b80c85c055c2b3ff034dd996 -0x2bf34291ef4bf003be7e99f5caa53a890349aedb76e0a7c6617aaa6d177960e2 -0x958b3463da0d4ba67e0e4b1aa8da18fc5c7014461944c4cae279afd1cc1356b7 -0x95799ebd017f259846ac5bf8ba9172b66557dc47a8f3bd4b2287fcb3ee61ab4e -0xf9262dc2dea09cc56d9b62329ba572447ba948b31c0e81309e4d403f8e277d49 -0x121e53f6453a4522922946501e60b19036fa24bd1c9a951e4c73e467d80e5293 -0x6553a87c09ca6ac0e845ea3ff1248c5952e44b159d1102411a4f9be380cbab6c -0xb050770e717934056383b84cc24e7dfc4da6ce72aad0a140b5514fe6ea009637 -0x62e0a9a3002581d8c15c2218f6458a488597c658aa8f203e43c5201ae8d4399d -0x44ed9333dd4c0f85b7989454684d493328047b8910f94938eb63a74cb75ddf04 -0xfe684ec92c2fec3729489d27f77950109e9d873b89f29b1aeeab6e3c1e6781d5 -0x39de700e98f02885d8cea2e5fe78eedf4545415e20ef034c7a162ca02e330afc -0x15f918b572a7eb5a36c972e367e87d32495f4b3d579bc79883b230ace04a55ed -0x7c1e7f74732ae556da9fd2b785de49267fd17d44e24fbf09e8fcb8169ecc53e6 -0xff177025eca158c11b45f5cb5f7ae8d7515e8aab28b1a97b596a178cc74f4e82 -0x08f96ed8c007ee5c212bed66eb0da2c66c036d8178f963c7a518d166a0a99e14 -0x6efef37ca6d3cb15b188736460888f51ea4a56c9d3c2befc813961b65ecc86df -0x6d408e66f3d551eb993a1b625f8c2cadf453b3432a733a2fb119e2aa635d35d6 -0x7e239bcad07f6783fcaf6ac594826822b4ac238faf1009bbad54daee07a16203 -0x9f7a8bbdad771828f926926693b8d9f1035a5d0a36e3d083d18de83d85110ad5 -0x308d695dc6cc35663e2eb4848ab8f0dfbd59b82b1012032b7021e3e3873c1392 -0xfb64ec981ba807199a3b5a3627896273dd0d47f496fecf107b9874c2e9bfc9af -0xd523df0123c3648365ab6c97c0e31e25b06ad9b006750cb55c8c3c2d20c93706 -0x0f0eb0b45c48573afb305eb6a0037dc6011c15a53fe2c92a429d69dcb4a122a0 -0x01bd8cc343d0fade2323eb91451f052b33b1d73dce82b6c499ed6cf4e659b4fb -0x7a428768b341ff3a6d88daa334203007918e1dc7afe4c45caec5553f20bbf976 -0x7ee21439dab8c6521864ea61a78f98a66b4ebb403211124377aa125e6728354f -0x813584e569829829a72c87106a711558ceb80254d27de78d583fcfff9d377abb -0x6ce169c265ac957b77033a7abb1f43515ed15f2614352e7aa46536278324e9b8 -0x39bd768a4b04327d404a83ea6fe2ef29ba893f595f2f54ceb522121cd13c834a -0xf65ea50ad18aa1af7b7e7e2dac78146d84577da25d1718cc120b788199c63652 -0x989549cd758c3483056662c09e6e5e795321ffd5ca6799267761c5e4e2475bd9 -0x7846a091a6c003b700405ade78b222dd57f1fe3d5e7a4c5b0ebda44c6f301d47 -0x2460f9359cb0601d0f2b10929b64c4da99010d86966fb13d5d127f4a11d77484 -0x768302f8585e66b9c19193a76ed08b696e7c74a43b63e749e361a31fe192fcb5 -0xc963d20d203561c4b17f8d72e5a7f684329d066b3c32cedaf7671959b418a98b -0xbd77ff601df7af4da144be9fe328a6d6e5b91fcfae30a3a4851a1f74657d916b -0x3f299ada773ee2cb4fe4196b85f95ba05e507d1626ac89faf79684bc67783177 -0x25a8061ea57ab80fea881703134db82369cc4381909d5052ff5d9da142e77462 -0x639438377b901bc63bcd6d43f07de4b745af6dfcbfb3c80435558bf790dc3e90 -0xd8cc1aa67f616007cf9e792fa8a6aac81af91bae09e2c0e33b96f8d988efdfa5 -0x0b34346a5a134bd3558a5596319c10f5e59f536cd6e052d42f75486e5e8c6ba6 -0x7ba06bf779fed5b0bbd4cb35b3d29f6e4b9b4ede7513faa9088fb35ac2a57031 -0x149d9746c99ae343cec80c48b1543678b5bec5424098b1d3c947e74af4c3af70 -0xe97d3a81db2b518accb460865530f73e3cea029f4b59278f2bb1fe4be0c20bd2 -0xdcf545e79c0777b243ea8593d54780ced9b215c6b2c7e6e81d49298054338e24 -0xc4877018e66b396308c84ad59c14c37461bbda6d1482b771505bf88dbb920b01 -0xfcd26120e799ed73050aff136438fff47c08fa1415adf9c9c04de0dddc354274 -0x6eda116e4628ded3a992fa5ca6aab0c705fee18b02712429cd61231fa646fa5d -0x4ef50c73f8aa796a12b3b783f52e61646b16298b2e4a195a74d936116a1885e5 -0x82d5db6b9d4a85e2389dc55e110d610a137afb2610f9639111e56f0a33756cd0 -0x4188094e9c20b72307158cc73b034f0d587c504fbf3a5d96a03e1ea522304b04 -0x8066c5688af0f003e8a90db86905248c75859215456623670edc46dc05408fa3 -0xcc8791f3fe10174eff2a9a0023daec989871357f48df8ffd35704625efabc9d3 -0x0a6f137551bfe0953690b7bed5e196ff06a3a347f9238dc49516b5485f541f00 -0xc6a7d194e072b0c1bd9ac9890b436423a3b2906d0001ab1f3c7423787f413918 -0x898f656fdc275187ae33077bbf1872a4d09ce61916fc000babe2523c069c52b6 -0x6d7b11b1b8388f4032367a7c1a3d82e850ad4be432ac4382e26d9cbd1caa00f0 -0x73493c586c55f62e2175ab011d5c42f554a11e92a7edb1d276a1fa478978e61f -0xa96ad5f95d3e912a9a2b33bfcdb14b9df9a2a8a80367abbf1a158553f0183e15 -0x98a8965cbdd4d4522c92ce1af1a60ad108bf25fb8b5a4d33236eefd1584b3776 -0xe250209ba57f39e3771eeb91da90bfb20dddfbd964d4e8284fc7614f41884d12 -0x082296a2e531afcc3a8e3d2ebb1f5837c4bf703d86ca732fd7b35c3a88b12f66 -0x2d4ef44e174e162b7f5a1ba675169e38db4e8d6262e41c67e07d491735259dc1 -0xfc0984021a19e5039d689e2ab63be9db082e5ea4a43aaa12f8e55fab85be64e7 -0x9a859e014c5f4bae3d768addbfb36fb523f269ad38cc6cc0b71fde7a9d0f0376 -0x03f37fdd5bc5348f83e4a8eac72b2c6b5c0626d6528a33de0d2d023fb34dcdb3 -0x83201114e37e8338947112321377b47114f9c8dc00e3bd05e3b78cf481926c37 -0x9df7f9fd0f906410f9f7d5ada776042fe5798d2523e3c5acff34231e279bf5ba -0x84eeb851b9c678b2dc1cf4784450368cdb2fc039f6a638eaa71bfe52189f3dec -0x8dd38206238ba677ff5ae1d75123b63a3fca835a0f32c81ac5e383e0b0778565 -0x5043463bf914ef9d57ac15dd081179b102d2171c6f5f6262f2e78ea5c8772f21 -0xbaf2fa536a7832606c05ad50c3acc31cc38fb11302aa8c275eb778fd47465a60 -0x2fb0c994f8e23ee9e3bef64ffd0db2b93937d009e22f4bfe1fdfe6d43f76d390 -0xf99e2a43b9e64e3d1f928dcf8c130941f9d5fc7e6e48efad0561892372588c90 -0x14df6500d114e692c339c5ac9dfb4284beebe5f149395505d3cdcab8db537147 -0xc7c83a45defcc1dd49e7d958cc67364696e04bbb51cc1058ee5760a2371a26b2 -0xb2eff63385deb7b1c6056b4877c39643081829de5e987b958c770f85408b0ed7 -0xee403263ff97ad2f2d1e5cf5d8a2a0aa71403fd9d93f79fa224107c677124197 -0xe329934cf6c41021817657c8a64d96f3ee896657338bdf9ba1ea1c5c53e1c0a9 -0xb66ba3b457516c9bd8aac0a300c483696dd6d03a91650a9b650a654b30f5a3e2 -0xc8ad78ea202a64c9cecaba3286afd0bfb65bbe53c6c43edcfbdb289a86baf7bc -0xaa63084dc22818351d8c791405d0a889f161acf20613f0e72c567989c22573f5 -0xcad001355d29ba55caedc1a2b83d862b2e2998f146afae1c3f2bc76464160583 -0x004187a74bc0d5a3b97948dc91e1bdbf6670efcd5c54f8092b17cf9d6741a4c3 -0x8e79c9f46ead475f7faad98a95572623928fa609f65fb92b583e9cbc410140f9 -0xf69d68e12587be2a1ba289f2c473288ce7ed0306916cc21f2f73b5b7066fafa6 -0x1283f22553474444f68cd14dee3ce00901489267692a76f2ecbb92bfa75a9b0b -0x5bbe9614ac5d272115ef2aaa8ee55c09f2df45db7b5acf98a334493c29fb0a14 -0xca5f0acdad41f9e66d3ea9bc3963a55300ee370f0795ec4186f726081e4240da -0xfee86735f41185abd2d2c42b90acebaaff3a5d55dbd9b5508c9a81bcfa10d325 -0xf5ecd250af044573912b16badedf45328d312e7897d79cf83135f15f923e7159 -0x5dbc6452d58af6af06111397635fd7723106ca6670a3197995d393daafa95d8c -0x38a9280a73a056c50e84627948d03f84fc7ac8b9b5dc24e3fa19dfe7eab5fddf -0xad4a5976f58013412e82bbbe0be502464633d37f04902be6ba60da04094a5921 -0xf30cc296600bc11cc49115f91658484b43cea81f1506b936cf13be87f03c03f2 -0x9adf628d7c7be1c8dae7c8b42713bf4ea21fe15fcb859eb8c93451f83e6aae6a -0x052bfc848849065aa941039d3875383548d4f80fb5f73d59e4f5ea7ec4eba7cb -0x985a294041f8970d8e1f9905e264bd4430c960d1c9ac93afe77d3ea4047adc30 -0x54406c3c79185ca69b282af6437d5ee3e06716a238718aa27f2095b5fa4b4d44 -0x2f1dd29c231eb6ce835e9b2af55eaaf5c3a3950912cad2ec8cab14d56657a193 -0x9f5e479332442bf19af3eeeb2a2dc40eaa7880754dcc7618aa5eac70b3674d28 -0x8f29ee6a62d17fb2de8727c746b1059c1b264d6dff158b967486e3ed359043e5 -0xd53e663518959551ec020ebd4a714bebaf970280bd677c46acabaa8a12184e82 -0x15342b34ee241964033110027fe04ced790868f039c2e630f0d7990037abef02 -0xf552a81a8edb0fe28930fe32d8097529e8b8b26d5ed6998af4f4407bb404ecc4 -0xb25a029436316ae6a2a560c400f99e6e8f488777e6df27ebb4da58c2c1805cf3 -0x1c86d23dad7ea64c50d375baa0ee0c52d7e45c38719ee4ad93f9dd401907a962 -0x54ce67ad8271360bbf121acf9b4399b6ca977ef29abaf0abdd1cac7bb2d6fc3e -0x19c7bfbc35027511fe1e8f6ca4eddf04db82bb6deae2e9ec8588dcfc1e356772 -0x369452177c3c9d8b8f21d55a2f8c65210d4a3c7f7721e01fc8c664c2763442f3 -0x9b9764ff8098ff183d95e3f2a9fe1775716e8c7b006379a5cfb536f055987218 -0x73bd8394d1f1a7a3110ff9dc46739e849671d4f353971d1715a7dbb5ebf67efb -0xb09538131d5682f072a50a944fdb65d0141a102e117edf6fc5759f7eb5ddf82e -0x8e430bc212a7561ad4aaa35f66370a59fbab36daae3129ea77ef4cb718433053 -0x582f672329c82882253bb52c43085cdc56770d287d4a36d9b243d2e26dd61232 -0x296f4e3be3c22200417fc722c04ce9e98f7a4b9739d5bc7b77cf3eb4d05a5bd8 -0x489dc0644fadb25f9cb3f65ba3b0792c125f5cfa40de3c2ef7a30db72f0ccb96 -0x22b5256348ff67dc411ac4165de298cf5e38b49a594320553f6de663d4984fe1 -0xee48d854c2f0ddbd48c555df4b3553a5673d2af5605b317e45dc98821f64f89c -0x70482d02c72485eaf7c4387ba9ebd28dee05536a54161081628ad57ebb76df47 -0xf784d895cb0d6f1fbc2cf48e52a4445627b292cff19efd180e38656ef9d5771b -0x895671b37fed17a41f2b4d5cdbe9e63838c44aafcd388a8e4c2a16b76f8ce9d4 -0x9c59fb075e3278b00d4c676597f13d1ca356092e1f7c3f98d02648727be2072d -0xad3a3ebe5ebeb8b1c3c5ea31e5e624cdee80ee40664ffdf015b24f7ecb5f4b51 -0xa3560c41712184393395ad60ed04cdbeb21dcfeb2f3323baba4d696df6bea655 -0xf80d3d03dd140612f9314244790c7b67eef6a67bba09c70aa987275167001e8f -0x796ea0da4216cf614af74efb9eaf9580ad3060ca08c2a2763af756943a7ac189 -0x663e03711939fda7daa70a0d8cd4bf138606fbe75aa30ed43d2021e0869a25db -0xbb26829ad7265008112e4f0868b2b70f518d86eefbdfe1323cb9eaf3c0b38afb -0xb67fade9cc076780bf0f5ab6af275b677f2568f94a24787cbed08baa1989a5df -0x404f93aaac00ea1dada466e8d8c4378af0750b829f8c7c07344e0788dbf83daf -0x780fd96e9717afb8fd5437ffd8ec284007103c1cc60b0578952be19139c010c6 -0x67f3ae2d5279b25f7506f3ef95a0a134635fbe2660f75c6e0983d8357e0de100 -0x78f58a954b76d2779d84d6c6888ba239aba212734b152c93737030db93b0db7d -0x47571f621cf09e704fac595c3590c841438af27375427da5979a03d13a37b3f3 -0xf597a67b830876431a68ca3b5319865df861f4c077cf65320c9956a3eb0e4944 -0xc1e0069e5e117a4a17597008d21adc464a8d16f010557dfbc6bf73ec12998675 -0xebab7a158fd040412dac920761175e7e8d94ec6a6a8a9a429098f366a056ff83 -0xfb9a4ba4fcc78d56a3126a6fb51e2fae3a8c66cdc838ee5ba1160a16fb48b51a -0xc3cf57d8c73c8aaa04535fedc8231d66381d5ce227b244bbacf3819d980d3b2c -0x299d978ae7dc9b051b5d9d487d87ff2328c744d99c31d54a901da324a7d846db -0x667e40976ab80395eb4af477a72d5f660336e3dfd5093a558898e17de80b7854 -0x009a022bdc4ab6fa9a6ea33495c60c5b935fa355f9556263606cefd37e67ac26 -0x2c76ddfaf5bc5489a02befa1fe4f1a4ca4fecfab5c0b59f38015864aa6bdc6b5 -0x115345f67c414b2a1974c93f1968e4404073e7821102d52eade5d22ed36d279b -0x63b9b4fb405aad1dc345979209c8721fe8e303890169f03578400b57227f3d38 -0x1af36e1617615b5292f1cafc439b21e9c3698f455e740056a4b90dc195301bc6 -0x89b7158a714943cf838908f055ab3e87266a381c5a2d13124f5a58273226eff4 -0xbfb96f96fc920b38903aa03bd6ad564b880cc958e67004a642f95702b87d45a0 -0x626681409548494067c76762cc55c3f6aa77c901f9f4a2d71e7f7eea84679532 -0xa45084186c377c30874b56d8a3cdb4af683f2dae32a23335dd62f2deee257b25 -0x564a09fbd32b61911f72c0bfd1f2bf115820c5c40ba7133611fbebc8e7b78c92 -0x96ef2f3aa452bd9f55aa9da283fba3ea52a0390c401671cfe125595f86972870 -0xef2831e51a6129f086b391551784958e66a0c512f7eb319bd790fd9c6e84b8e1 -0xf8a5c1657a19a5f618107a1411a303d47ca6511c78825d4af242222abc70d6af -0x7fc9fb58ce45b08f49e6440ffe86fe67df78be41693db041f6020dfa60c6aeec -0xa389bb1e55de7ff247d1d79eed275bf5f8f9b7b59ae0a438e4b2afa3d42e2ab4 -0x665f5f57889908c031afaaacdf3074af4522dce7104a5d40112fa1587a0638d6 -0x787bcdbe7e43dd1b799b1ad67652484f0521742bcd51bd0f05c97ea6fbf7951a -0xf3de77af1786e0265edf780ac78617b5affd4bc1d23ecae1039424c6fe60400b -0xf5f3e53987ffa3b9d1811845746fac9ee1a63fda2bf0372e6d430563a5d10542 -0x603d897843ea1c8b0bfb16cca4d678978556c57b05cefd6ce34b5473a456e66a -0x5729f00464d9bf6ccb380dc13830eee77bbfba86180c809272ac0e0516c7f8c2 -0xa7163cddad38532f7adedbf26086ef8c35312d010dea523c0e8a2d887d34c704 -0x5971e6f4bf5e46f2b477445bb6b02f9016cf8a798100879000b6d7aade049293 -0x3ed4be9e5da23d1669d72187199427139054079005a97a8585b19e7380f39e1a -0xcc954c85fccf0c3845f86b17c12c1c2d196fc7a62ee395d92e2982df9d364602 -0x24980c3527c673fb99c58849e507c34b1fc44eea3556cced9aff20e126cc4607 -0xcdc2717fde4875a0129abbe9c9488e7fa3a7b46dcbbbf345ac1536524eaa79aa -0xa8ef1ce12b80af3fc45fcc6c634e9fc6ae143fb75cb86f723fd318083b619f7e -0x3cb0e643835a77f59c2e5f1260f00c0da82ab8e04dd7c0e140779a02b2790fbd -0xfe484478ec039da78dd8455d3551a91d2ca3b26d04ae1ae18795ebcd422b8fd3 -0x939f0091dbfdbc32edd35007d4b886dd5bf5b342768e6137909c97db97e79b2e -0x7aea09145afbeffb05cc7f66971b0b55e3fd455e9bcdd5c2f61405ab4fb013a6 -0x09599e06384a44a22f02ec5ee7c9fb4381ee632db0d0c4d965ca5b4522865fc5 -0x9858f7bfd30ca9cb90bf78482b2fea70d5a9ebe611803b34e4628471fbdb7d99 -0xa2315a202a11ae548e9b0545b15a728083fef018062ea8ed83a421e34419a7d1 -0xc7cfbf623402c7b1f881ba90faf89cc9ad9329503d54ba76f3bbde7e699d46f0 -0xcd9490258adf61424e7176a79c1c78767532f3a15b7b20e598017144bc725bb5 -0xdfb9e2abca06dbd118c1e1762e9f87b6ee1363bd725ea2c63f7c1b9d9f88e488 -0x2aec51f62e752e7420e3dfc2475e87a7e594444814daac964954b98a6ac4502a -0xdb1096fe4b7e2aaad985c9603bae8f1cb13e870584f085d4889c8b550f98a2a9 -0x22cc1b82a15c9c24bc6b752f7785fd17100b5b1d658a55f89ea803dba03478d8 -0xf540a0590e8c8e97d250ae9d113483835138bc8a3353c054c155868c520fe967 -0xd11252ebaaa4b0cf38ac53c09eaa0940e9e248c7d63bbceb967ed9d44b4a4d5b -0xb956ee876abd93c2f09f33748688e77372f9dd852c0885e3d7e360bf10d89405 -0x8f0f42a36f4e218c80efe83cfbc24e1fcffd927abb3b9ffbc41093c2543d352b -0x9ec8752d17a1d623dfc71774dc0730f9d45a74335337edc1e1efd6a7870b9569 -0xc188f67a96d4c834242ec1d7a3a7c67797c14a43de89470087d40722c46ab5b3 -0x080873ba916e66e4da96c6e5587eea24cfe23f06221147d92258281bf9e02267 -0xac06bcbe07d11d4fc9eeef0b422189695851e172dec96846ccc29950989ce2af -0x1883fe87dc875a166d7885249980df6984a82edd87a7ac89b068dd0f6529986c -0xfd450bee793515aff3963b7c94efa79f52f283304afe906cda14857121bd66d6 -0x0cce3d5db8aac0baff589adcb3c4bd7edea88c7c9cfe01e69fb422089606550a -0x72b37d3e6efacad4ecc228751b0429026978340af00a267f580047f2cd5222c1 -0xfbbab85447cd8439612ba6283fd9649d9799120679bcd5f9be342b75a9a6056f -0x0955d82082949418e2ea010cff20c8c625a1b75038bd26a1bb6bd681188d4051 -0x06fe629118e75549b1472f05ca2d0a1695c898777a5191b5b40fe9b8c4dbd1b7 -0xca19073ae1317e584c4a2da8b84b487d6ef9bb352d40bf301f357dc3ed800937 -0xba787c201337ff7662e92695b4573c2f0cab381f361a38b6cd21940689ba91bc -0xc132434888ddbc1750768a293512c46327166c71e5f2c9191400da9734911fb5 -0x8e92cc6fc414a34259386bbd24e2729600fba77c161aaca2ad0ddd16cb2f6a5b -0xaa0746b8fe274b64bf15f160452f41a638d46672649f7b82a50417149f92a007 -0xdada946bf0568daebced08a48ff668e2c5b52cb13337497933d200442fc772e0 -0x8d2ce066194a29610f89138306ed730c4d084a5221c460db224065c5a7b0606d -0x63534dfe8b9da9b227b5f6ffda9293498a2df7e32038f5c4fc202f59a34bc0c2 -0xb4064b37034f100c35351275c23f8f8e7ded34b6504e7ea5c84ab11f38394dbf -0x8f726558f67072b5e1256eebfd50e15302b74706cad6f6483ef7fb690562fe20 -0x45eeb5e086a3f49786126a60352243de3fb5f50023f24d91d0c51fef04c231dc -0xabd6a4773a75b1014ea080586dc7c3f4bb25cd500cbbaad39ea90c3d5f74a854 -0xbf751b987b6164521668f60c5812ec0093fb170839afe2da869d100bb9007342 -0x632ec3fce241d7c39314e9dfe10cddb9000cc11709ba02d762c27702d8f3921b -0xe505a612c8fe983932320d584f75c53b37129f5ec377a2036f0fb1e672de243a -0xa61372d56de1c5381bad64a215d3109be177e8a749712cd3943083aaaa04508c -0xd4f77a93d8db1a64c245903dfdd08a974d6941175cd621c035f6fce14f88bd51 -0xe00ce5819402df3f8efda16f972b2161c2d391197a1589c1d2cc78888384b923 -0x0db8e30c28b8855506387fcd2cae995c0b58bc8697b8123a0b3dfbaab67c47b1 -0x0e5f33a68c93b6dc8ebcdca8d6ca8c66e1c0bc3dd349b3eb593b20e7ed6fc80b -0x6dd8dfb0aa183126d0419617955a33052617365c6f4db8cf3b96d16121539c47 -0xf8fa453a73267855d573dc8fcbb39b2c0922ff49397bef5db48d8168a3efd272 -0x26e565f2fcdc50d55fd67e33be3c4dafdcc468404c6b4bb36102bb7d438f3c3b -0xbcd0a54c21a46b3145cfdeb38e4f42d1f782597dc08e5d4160c3c21891623cc7 -0xc76fb8a60aa8c0fe7f7d81c6940b9562be15c681c7b2825c7744d6ebc5978c08 -0x5fbf04512c258d85aaf6317cb52812ed84f3160abcff12c78632929103aec951 -0x07322bc4f3f2e6a6ea1839cf735215959e70632ebae987e995634d50a4136bb4 -0x9b9392e629de802b16d1f79bce1a0bdefde44ab136dd4dac3b80c2e39d72c209 -0x0d1e67b1be4539b8bcb45c61a8c9e87824077922a33d8271e3e64be8e2f191b5 -0xc8eec753e9d92ae1c48080f3775d72bd2ae2ab5e07e0e4d32e8e0ff34561c600 -0x7c68b080b13b0de22c563d7760ec126c1f0edb28f6afb96fa4723a6a1cbab024 -0x1add11019d411e782bfc71d47151bddd660b74f9e87c6c389f7f909545d7be15 -0x412a751ed9f1c1c87b70301da3ec70dcd7803ff4dbb5c32fc13a2da6da7a62ac -0xcd484a85ae9427be0dc3a2253b8b1bb9de44f715e37869f5393e6ecff1953298 -0x33c6026418faa1817d2a14a059aa3a493c4cd3c7b7c6e38b4c284ef033ec87df -0xa2f3d15a6a0d293500afea8d152e603a1a50a47eb85ecb6416f2833f5d82bc4a -0x1533b54e8fa7d324ab14acc9235a048cc4c2e99f9bfa3085e0c61ef209f4e949 -0x54d13a2d7a686621add38cf9679d1001390c074cdda010e0df520c34d1328b57 -0xc6df0256629fa8c7677ff650fae1438e839923229d20c2bb4fdbaba554822c9f -0x1e7443b5fd35b6cf59ea85468fa33137f88c00ab9d55750cff52a5a5e4788ecd -0xeea66d6fe5650bf2300edfca53ae848ed25b085f01708de79285a554802c2b50 -0xb325f22ee4de6f09ab57dd0c173abcfe4904c8be18837b1e5eefb5a6c0653432 -0xeebda422ae4011be45c4d88ea5a72a93f07c305606c85aab2a52b7911cd1733d -0xf6a06d4482daf5359c1d4a241339b93a08728b6ca329a1cec86f212443f56cb8 -0x6dff630193b0970267065514eb4be7680ceccf58147d66960a87b423a2b865b8 -0xe7dc5528760e30ec9f1372c74c8879532ef55e07d3d2860382e1241862e8fd9e -0x92ca55472fe5230175dfb67316fc366f040048cbae17d65768787ade685f4f8d -0x6bf993ca36760e47abf026e067ddf76e7b78e77174435e7cf0d7345d1add1dda -0xf2f8a5820e2178166ab07300c277f1614cc9e64a3896ab08bd07d700511d18e8 -0xfbf233c9dc5670797dd94f51981017c2dcb0af9718a3e2630ed50eac43388504 -0xf1ca6703c871b95bfd2183421ecce439b52f3ffbca01b393505ef1d702646978 -0x85fa01763cf3fc0fbb4dd94eaf589644a4fd3f5867d9cd98e638aa73e805e845 -0x758612e8cd1908f1d73c5fd3028d03639cdfcc0d1690444edc297f6a377b26ea -0x11cbbe45e33116ead48ad7ce6edb242d2643a400073f41188fa5c169f30b3966 -0x8d636deb16c2093ae1a362bbfd3980fb66d694a6a0eeea96f294d5d90c47a762 -0x0f9130ecba06057b63a5ac92bbdf63380f0778c007abf1a23f781ea3b7268b60 -0x26142a7a85dec840cdd073a62ccfe5e699b41261185fcfbb0dc7a575d8b29f55 -0x1aad043a6a5ddfd1c39100b63910b6cb209e4e92f12ea897cbfe897ddec92101 -0x0583c319679a6ed5ef625cc1013e5862d6e40f7c9f5fe10f3e2e50fe13f8fe66 -0xc3ec3c64434cf050c3ef668ba6c7d9befb67e1ccfb932d430f10d40251135234 -0xf15966e4cb2293e805dd916e970c710750ac85ab418d00e629329cc8b06ad081 -0x5e260849e05d00717c11ad11b81dd5a3eb4e1ff69e328de8ae07c2b64bc1b66e -0xfc7720c2b4fc573e2d0e32fa92154ae5b0230f09109bf3c056437bb74b4f0b2e -0xa60082a5e4db9866143b8d4962f1f391cd0c84048eb2264900d2bddd677bb187 -0x99c3c3118a8b1e5678f9c75c4538f8a617685f82c582311a8ffec91a127e9d06 -0xa8f60921632de2fd8eec66d8c4be5daf02945c36ee3005f7c39c04f2820b6552 -0xb74f84b1aef1870c2cec933f03a09960f20a0ebcc2f18fdb21dceb5163a2e9be -0xcc838c9848e6f33f2033762bd928c6a4db2bd4f1a6017ba035784d218944eccc -0x5370f64d42e241eec37de63ecc5b758836197ed639e0f9f27dcf1a84d224448e -0xdfa14519e9a8a599b7419de4c43db2320334c3c293d5d6fe74dd8f0483ca45ad -0xd731dc3e4c523866de6b472803c68df0604f7625952e7b1f067fc3393cdaf2ef -0x72aeb5055c41ce5a3fc64bfe01f5bf6823f3c62d38c50efc6f8e4f430e8e6e30 -0x0e7349389039282a0e4207aea40fc4c705ed83a332f1fa390bd927e588d13a73 -0xdeb46d0fa5b37c547f291b999128941c1e133e9023f1a6e5c255c827b22a1a47 -0xaf72e9d782238d44730a82b78ccdf843394c1ae7f1e4073d577cd65e9002e0a3 -0x6a355cd5f7a3b2a81621822c06ec00ff7cd86959ee527b93134517a8db4bb7ef -0x7f78feb16fc5012006287241575427fb6748b4140b1f40428194039091610000 -0xfbb5a0609c95cbb644db13fcad40c7556691fc9f74dbd4760b3011aaf195c1c0 -0xdb7f1230d96a9b34f6e7802f435062932ea6f70be9841c47da79d238f2587dee -0x7a603dc5994b0d627a2772702d26d515732aa9db5395c21fa3c3bd4f11c9bbc7 -0xa01e109bbd5cfae3c0a4af65e1dcc739dad243434213ea571c045f51675c075a -0x3190b8c62ef830233482f833fb0b76decb39778d3ce6e45446ece76d79223ecd -0x16009dcaba93cb38b5a2ce5b7f82467189f87435e5a14917f0b3d757f4495843 -0x130f345975e6cddc3fc164ed01b54656f787002a83c5d66f705c00c0df0d45fb -0x11c75b94c135d9a879356b7a717685dbc0a624cf6b649f7d2eaebeefabc2667e -0xdcb5ce31aafe9070babda4733c849911a8d9405914079f2c68244c06c9fbfb90 -0x87a4e0ed903d3f8226d6531921847170e268835225f02de2a84958a18772e197 -0xe9048429ca1ba93e89a7284fed386c4ade215fa8a0e360a506dde8aff7bdb3f3 -0xa6944944c1a27f005e981495b92869eccb3495e90ed9324a9fd57a624bf38ed4 -0xf80858d2bac32b46bc1cf80b38e1ba0733e348e19e5f70b45a4ff495c7dc481e -0x3a45b6884bf1b2d7c0610e5cd7da8e401e23a356cc0329afa103f0e9ba577a1e -0x46184f3f803608d524efa10aa1967f7842626fb01091176ec09dcfb55b71d12b -0xa9c12baca944706657873917c3ca534967ea101b5a5a4cf29be034b93df6be06 -0xb8d09bdc7d8b86d147ef4ccf62e77053d11bee2760226e307024d0f30f07fc8f -0x3e28efed6aecbdc997557b2194d559ad35f5033f277c414c578827e05a292d97 -0x53497f4eff6823986afebe8ae2371136fc63ba4001a8f9bfe361590192a16c3a -0x9c3b185da19f6ccf8a2dd2815c063894fcd965788303c3a0343a325dac792f5b -0xe184534060644783d3014eafb186ecb258dabbb0ed1d0e8d665c7977cb71ae27 -0x57bc39ab94e21820492b74a74f2c27ee8394f99645896d3ff1cc1ce4d2502d9e -0x665358f2042ad3779a8c655842e12f700f9cd7e493ce177f036ebb3d435b1a4c -0x4df9aa502685efe48673f8e782ccaf15e74c6bad846de8cbfc4371ad0780f444 -0xc405834a9e066cd9a429414528592404214667bec2afc362188ebd1daf8cc033 -0x204f35c884dedb8e9074a71077b1f99237e8cc730e6b0e4a71845084faa81c14 -0x96d0e91b08919f7fbfc1f69d822d0bf8d7265d352534418fd7996aff49e9282c -0x6dd51b164be13a33a757ae55e68f3a562bc5913ff362f457435f28f6edce3de5 -0x7644c2e1b7143d67125244508531907cb66d762a87ebeb5ac0a769527abb00d5 -0x24a57b0c98997157eb5e3293877836960bee39dac2cbadf2cf2e134b3b948816 -0xb1f6acb71ec244bedd7146fbb361d0c249ec24a6bb51f5aae1fe64806d0d5db4 -0x9ac25a581c902572f4c136518882e7fca2a48eff1aea05c1db0e59897dcf5774 -0x93051b008aacbda0bb931829fb754ce5209834b028b346e925eca832b66bd33c -0xce8d08114f648fbf3688f58dc9362f944b48b152d2dd490f672d78d236bf2f4e -0x41235ca66445cd15c9ed5e9a9970a0b72aaf057a3cd23585bfeae1e9dd038a1f -0xf4a09debcf1a75591799e427f861e72e27b20fa2e0d00426af33adec829b02b6 -0x776282e190746f492d89e585639a7a845ce3f159ad0b48b48305cc589477f011 -0xaf79b34ef2d97172178a8f806307df01434aef08e59789edc9a5a37a6d07a47b -0xecd13f3ab9516a6fa2ffa0f0e55027a52fe5d1c1672f9ccac1285bd1c8b5dac0 -0x2137dede949bacfb593d3d57734f075d74a3427c651b7357e40c95c21d1f2775 -0x330c2240af24e70fa1d882b7aa21855ad7101e73d1262af8236a81aa4278b520 -0x673dbbd337e97ae94fb02a1956f77a09167d123855c4974bb4e28ee1603bb133 -0x32823c1463699291030a02b70ee8798888a3db884e60dad4430488536ba818e3 -0x648775d1f1cfbc38bcf9e2bd62dd714d9c69199464eebdaba8feee5db5482a4c -0x4d6abedcb5a474fd28883fd46324b2fc66ae159c90eab8f4c68a1335b2608b33 -0x16a64ef2ca3882cc361adc70594b0f048fba30d1599fff2d6165cf2f97f4610e -0x26bded6c678621a72fe04e7c7e3d8b7a549c5809a77d7d5f417ca0dfb6ba9f57 -0xbd82b940eef0cb96bab831ad1dcba5330b66d6060428852763870d9491f81458 -0xb6eedeadc14a66e5eddcab0c26f141867ee965101e6c7e2429bf7dc78a3899b4 -0x1386c50023e545d062640640595eca49cb3145df62dd61a6c7a59d415a727655 -0x87073cbb924ab51dee9bf5749cd2b21b32eabcaf22f04fa67e279102a16a0166 -0xb63b3dbec0d36fab06f89806d977482361714343cf43e0e9c6e260b81845e17d -0xe135ab8cbc2a0ee996da63f946726cff836947ab0d1e11d921a903b2fa62729d -0x20f912466936f84016438abfeb1ef85d81e1eadc11fe787353972975efa6d11f -0xbd4c5212dbfa6271f4428945b57eaa216f1407096123d5deca28687ddc75af93 -0x5ae9d1dc603ded37276dda5cf94d93fe4a4fb880309a5d0a5ae42d8c1f59651c -0x1e6b7744437324d063bf518a104658d37f0cca4395b4b0372963b90787201d55 -0xc151606a08ced03f1b6b56e0f5137cf3fa2154def8a9cb95d99a1ff37ef3c22b -0xb098bbb6ca8fc88ceb290fcd3ef22032db79fe0ac211c1f3d20d52947eb0c333 -0xbd28bf917ede373e88c191a20d0589f98ee935dc5c92e11e7b1302b2411e018a -0xb10402e97ab8af4100a0e50a9b761981da44937e86d677ab47de9c0c1d30a56c -0x4490a07539475da690a05a11eedeb6b09b77326cdb977acd4271c16213b2d1ec -0xb7c990b370a6a8b9f13df87a6d718d40281635fba279666699e7a83a40f4157c -0xb4974bc29c420c0e3665294e2a7f25e671d9d1e2dbbce4b778bce34cef084a20 -0x851c2763aa524e9edfbce807424f4c5cafb667866dc1d0defb1f8a8823490b87 -0x0509b0e8f205b4f0ee8b39984a2479a442348c9436ac1e8af5d3bb1965b3d3fe -0xec6f1dc4621875a1d3e4d47a41340a6685169c4b144ba8c56b30ab6efdfd6522 -0x87355b6977a4dc2bfa12914e71122b68173b3208e25fa090f19320913da2874a -0x638faca5180d26c8077737ed5bec40cc73a442500ffc4db4f4c4b294068e0270 -0xdcbd2206933620bbd139577be81149bec1b25357f2ccb71b18b647c1e00a4859 -0x93cf9a059112169619a49002b9544dd0af5a510d3b7f86b983e946d0d72ec6de -0x30debaaf7723165c834032b3c4c08faa50cfc642506098729d438d40f0dff286 -0x5df4b18be4582d43a0dc230b73c74e79d9f4f5185665984bd55d8c2169ee5467 -0xfb0f3df263a74b5606352fd84f923ab074c12a5590a69ff77691f4bf0b20a9c9 -0xc9b6fa8b5690852c6dd2705c33c274032c82fa9a83b31734ad7e464020b7aa72 -0xdaf42a722c9d3f5fb5d8cdb528e1932d01af71ccc1fff937186203a1bda70692 -0xf634d28c7d9ca14944d48d87740e9725697ea5f11db067264921f3edc8d5ae14 -0xd190e6a5e0d79a48c5918c33759d2e675090239cd2cddc2cdec3b2c954f7fad0 -0x3c3c32aeaaf51b9cacf7c30eddaf7779c87621142eade51711285e26a8ca9e7a -0x9edcc5b43c256a1939050f3d0792d4b72525f9745e548edd0f632895089ad938 -0xfd70b1b615bfaa35aea6d36d8e1e6e1e40a80b090b6536b9519c20d17b675f49 -0x675e84d23351c84e948cbaf30c5015386d1c21f176964684361a97f3e3c206e0 -0x3c6049255169f707e3a38ec050cd699c92d3864e875856b81a84cecae54f58dc -0x4d2f6e9809989d89d90dbf3af7d85e79fa9ea7c0daf8d2bda09bcc85eb78152a -0x89d5d14cc6ef0a8f6f0f77162de7727b3b4a8d77616d5a4567d2c7727eeb4bf5 -0xd0a4d1c16c87439eae328cb9207d5ca3ebdfba66f612f2d4c0376a3bc838a5c5 -0x06f953b32055cfdbb77e66e7c8f317f51db8c83c757edceb53cd7694ab90a565 -0x5bce0b0ff4e587af5b1d452ae9f15f603ed015426da9fd5c836208c1ff5762ab -0xfe3eaf1486996403fac658bd8d0b6f676a0ad3709b56f2b52f0616baa2900600 -0x2d02b05d862cf17466ab2a232ac4dc0faefa279c4295c3a304cccfb3bff2002c -0x353cfee2a857d60915a8def092629ab3e02df5e7ed2857890ee04da8bd2a2db9 -0x949dc06cabf2601f5140b595d304199ca60d8fd5a8b6f3f208510d47a2ae2fe8 -0x781eae8c4e8b5b09b14331d120c44c62de084968f03e305cccf6ed1e6223173f -0xa9c94a24abdd1dd3f14546479955e648c184c5ed63c4ee9c43fe84438ae4b7ca -0x7c1b5609057d3fd714ab893fe2bbc710a474a247cebcd56cba13181975f1c8d4 -0x1cee0fa9a77ba60096485f6c948f3ece5b43648110d4f0e141ace702a4ae5446 -0x6cbee02af6eb84282b1b48408eca220fb9fde1aef13e77eb7b6f5a8e353ae82f -0xe1c23b5a3a84f9856b007b2a0c1b0234b6d8c83a84d86f81909d98bb6a512365 -0x6dbf6cacdc077141fcdd065edd4bffc64d8f1069dacd4fd38b5a726775e5a72b -0xde3e06ee46eefb435d4a327005a62aaf27699a29d3b310e85dbc63fe8904e305 -0x85e10f3b08d4d205117de7aee9c34d992059293b2b939e1d7accdb24d68afcaf -0x2c89dd66c056a473190925ca31e03391dee4c031b1d7410bd598cfb345acf4dd -0xd88b6c1f7bdc011b71727d39044f2e4fe0de33ee780c27e1b7c0c81005a3004b -0x375460bf5c91c194cfdecafab7d539801335a2f6d5b62eec4cf34157a1bf95a1 -0xc5dbcf4810a13e124f1eaae26a4111084063c47ec7d51a1037a57b01d233da99 -0x0455042ebb13dffaff4acbf212cce8d4c68808fbaab9b3afd3d5eb471e5020a2 -0x229cd9543ea7edf008ce819e88236127654dc558c0ca6b550263fbe0c25e9acf -0x34a23be220d83d9a6fbdbd34b47315f8667b34c5bc87fbdcb5af36f67fc96fd5 -0xf938446962359a8daed873ad2a8eadd2da2c3f5703db462674734f26478ae0e0 -0xfac3f32343ea8f748534f6c33faf83803155f8e015985aa509ceba865b23bb44 -0x7f8d3903213e75ae85777dc82901a2dc154bc1b7179b5a1034c669995cf83e0a -0x4ff0d8d35a1efe2227d63d7c9ac397a2378dba6ed785b0fd2f6e30322fe50192 -0x2f08896c41f35c9e5f366c558d35b64027f18bcd359970699109d9d25eaffe47 -0xc4d5e6dcc1c7043e673a6a7e6304570a906245ec55c517f538de3f64ddb31b56 -0x4486e7d2a65a70a579f7219756c77416fe6a0219bdc4e82a1a2c5e38133eff64 -0x8fd9b75aedc6b81e45a03f7f22552203040b135e8940dbf0c0675bb7c53a9a38 -0x6bf664d591c488579c4b96bd017c11bf27d5f3b9871641cbb53757d54e470a99 -0xaea93ed7675a11c7171093369f18fcd9b5e59c872301d0a36bc9e671e352f9e2 -0x8677b5358c724daf332e973f925258cccf5913f0f39ac9052e5836feff10ec70 -0x8eb93894ba40de3123d80870f1057292562ace931889fc19f1b1dbac65a5ed01 -0xd85258a99524f73edaa52b498b098f2a0c8db81f7ee21a2e7d91129d173c1411 -0xee57a6cc1823ca483e77ab73352d00914010b8fef70758caf173290296604d14 -0x65071f5469e42f0fc9941fcaac3f42dc5dfb80cb45d2d2ef3c890490d126c76d -0xa57b69a9a1ec885801dfc7a944b6c1a69fa6a8ab6d277467bd0fe63a2f0f86c1 -0xb94c2ac7c3368d4b348afd1881e4b460166da47dc8ba78cd922647f46c85ee8f -0x60a95579bac224873db53f06f494e18d33c20ac9150ae54e48bcaafe813e6acf -0x965b593c4f130b323a41338cb06d1423e3c70de576508a9623d54c8328283656 -0xfe8f9f45d8cf243675e0f0265d5171c37462a313ba9d59dba44f09d2e384a4a8 -0x17fb9b462e3995d744a8ed519d5313df98355c0f953506d25a6c3d3f6acceaa4 -0xa30878c85662cb1d70025a22288ff1a00c71de19e5f9151a65bf249aebae6726 -0x1562eff89b4c656c7446963cec76fc26396ce3657841d2a916e383dfaa3aa166 -0x343ebb6c2569b73ca1ede7d9c950fb9e1c2fb8ac1de0588883efab7bf35e5439 -0xc9780e10c5985751a405fd1062b32849dde81a68cf1d2a4a3f93aa17829cf396 -0xf6b09ea04f055b13a15c16c8b2ba5d6d19b99527364e225e47d844071ef97896 -0xd13823c650e08777bd7efaa095be55bee1a4557682ff4c113ab3f41626e307af -0x933e474ce53360d2672dceef91373795ceb3cdaa658b20c909086c07254aef1c -0xd4f348f1b39442dc0851e1ab6122b085b2d54b61e8a09760d8876b873afab14f -0xf69eda648a2b8e6e24783ddaf8863e60589864aa1b8fb303bfdf89ca3ee95cc4 -0xd49950bd5620f8eb32c3e8d0c803aec8a744ba5637513779e1da5a77cc8841a8 -0x75790b0a3b9b4cfd16f07d5b4891b5cd030bf0520a18550db0ca0137dc5513ea -0x5a16eaf48e2c52107f5445ce7959e882fe701bea4f15e5c70c1e4d793b8baa56 -0x86ed811b7ee82448746d967d59ed33f280b82780583c7875b15633c4f83f0230 -0x95ddeb0e8d733d64011c2758f51b948eede828ec05a1a30fd0f2b75814349587 -0xe7cbd2af4966e76b5a094893b083ce6d60e474340e34279a2d8ac37e2363146a -0x22db1ebdeb6859fd2db6cbbdd917e1bf91c3fa34adc14a32adb72fdc370fb0d6 -0xa54da470280657ec0b580abb0b2063d16ec94823d0d230a2d294f9f03ce111f5 -0x26d2377b0e3b2184b6895d3bcb862fa3a3d40c152ef7ceeef7d8efe9676584a3 -0x047084b47198cdb2e7af9c337d4c152724cb0c2eeee25d5b834d96ca9698261e -0xfbdfbe2be596783880c375a8cc56c86df46fb70f9ea09103fc5f7996dd28ab6d -0xeef7728364b0135325153afe059142d5ead0c0db4b36cbe3e54ca2ff6d941c73 -0xadeba13ef1d1c8079307bfd8ef57b43bb44fbf9114be3baa3039335a17bccf53 -0xf35f1f78afb5cdece9fac38bd8615fa218509538ad5e36fa34301a993b4c84aa -0x5833ec138fbfd1d5f32524d44784abb8b85139e6b957991fd82f6238bca025f7 -0x9872cf9afd0274d4890feb7c452e62e2c66099b2a98d80a9764a01e382408a67 -0x1cc177506e1bf7803093e85a0ab897ccf354ec24b5b987b8fb5d15e6a7189f8f -0xebc4a75073adf51b22c0859669651397602dcee2c77c61659faf6a1a5041310c -0xa3659f5bf6b6b76a277f456b2bb3857a9b71267a381f4585178a15909482a9e3 -0xe685cd09e8b93c235350a968f038f93cfc1d08aac57120d2dd6fcbf8d1ceeb53 -0xc7082fa583413162ab38413bf184eef1807cc5dc69c6cb98d610d3b045b18d83 -0x4665cdca90f335be0e946d9c4586ed2c69aff0cbe969be38b95eccc5f6644680 -0xdf0c5d156ee6066e0b3eba3674625b629f7c3057cc93e35b80a1d3866a504276 -0x56f38717929a6566d3da52d8466278c2915b13c33cc90eb0e3e6545accf0dc04 -0x1a0c0116c3ca29561752f18447c64a466e033e2b94e42ff8527a1cc250e34c18 -0x9ef8c8379fb04a64c36cd16d96ab8128042d828e95b29e65f34d267ca8596c51 -0x701e184e383c68d371ee38b9f16b503f786d6e5e4d9d70629b0b31355487db44 -0x85651ecf38d5c98780007506ab03845a707196dafffdb80309fc54818130261b -0xa26010f81c75036f1fe804e95d315414616a83ca76119adca437044d0f9cf5ea -0xb15a5b8c0193ea5330095c3a5ad59af5d338399a820134c903ab05b59bcea1c7 -0xfdaa406ee2dbe42414e5fa6432879af92a2d154be9578e235f241b72dc94313a -0xa0847667a7465bac7323d8f92c30dcb62a6784bb03cec8b7840106f262db8e7c -0x9a2a19f0b3d198944a7757a1cd6262f34c56622b1375f75813ab3d637c426a4d -0xc8586dea46ce1d2b1589658d3def38baf4f1169b0ed4212fde9b036c9c1b8c78 -0x99c15b73e6b22b8b31e6a8bd4c87d7ecf985ad84fd072f1660146f2d584f611b -0x973394a5cfcec38a792995ccc9a1a481b31405f2b993f5d8fe6b7bf16c85104e -0x4014611b5965cd11da11c8f28f9ca58abd4c56835bc7bf20c567443a4cc4c0b2 -0x5002efa806ffe88f63b13711d02f90b0f9865827c87feb8bf511c4d4e5206028 -0x183b0324f2c8e1a13ee50b4e48d774d435698edb4968db6a58a47e3c50ed7f6e -0x0cc4c711a7875920f6aef3d3aa91dc89c5b1d665ceaa80f6e382cc20e05bc308 -0xbdf72cd56f107d01c385ea2bd17fbae908d4dc43515e0552bf37433f1bec0f29 -0x05224d13651999c80ad05fb4baf7e19d1343a47d54b646144b7d87e7e6dd47c1 -0x5e41228d12bcbbd9943f33bad734f84f745030deaf697994d1c719b3d83eb931 -0x11032248a107345e11a88191e312e7dbd36dd294a82d2c8095e8dc69d54b73f7 -0x9743b45f0614f8c3a425d4e8f74a603fe3f9d2619c35b0f26f8d682ba35dfa87 -0x8a04d2a84a59bdfda2864a6803f563c42a096f8ff86801f1a7e47f78927a2af2 -0xdcd960feb3b4d675f5b7b7887624bcc921f9c5abbeb8b7d06fbcb783fdac8f5b -0x87831d6e24f4745e06f50ad652bbf77780cddb06e2eb1e7bb27f747ab2797ff2 -0x3079c0e14562aa5ff838b8621c3f76efe514276636c6f75a8384642b94078410 -0x29e5d1b32de1be657355b51087a88b305e17659bd85131d930d6fe549c7089c1 -0x88eed8ac054fd8fb9609eec47149a527858bcf1706dabedb3c8a30703c1f7328 -0xc9250b994be0e0f6477c8267f47a9e6b68bb6903ec011bbc36aaffd998d3a77a -0xda80b71cd40e333bc0440de3fa8f5ec5b6dbd74216503c7204dff7d678afe7f3 -0x60d96548a0eb45c4224ecf1df713f60db375a8c30742f203f71e2b76b72ac4e6 -0xd1e0857d21afc5f80d1be0495fde3deaeadc34e89e4cb4e94b3fe74a37255398 -0xa3d7ddb2e236538ea29df8e951f64a487254fe747b6dcb4e46b771b6cafd36a2 -0x407d1b1976282d35e43381cbe760f1f0e740d495f24de306aa082125ba0a0f30 -0xe58532e0964028ea9c9627cdb6a842ff5500972b87cd93272a53ff0e17ab42aa -0x52b28f10fe2b95560e8ed79efb4c3a6d313a6559f48c940055a2fe09000c628e -0x4bdbb8067552054346616a3dd54613f0c6a097665c1b746e5fa8c900e2c41afc -0x5f2da789d3782cd8b6a315c1b8ecefd56a3c1832611135d341a270766b8c10b6 -0x2efd18dcfc3bd6b77a609bda5a1f045cd34b61373c2a1759732d29d4a2ebdd68 -0x73698c5b9a1dab86b88cc3c8862e1b0ece466987d7e17d3a3a903ad1801bb5c2 -0xdfc84290306f4fb26f175f93ea45b1ca669d88c168e9275c02d1fae114ea271f -0x6e92d60b7f74f12e7ee9a41b5103bc43e03370c3633a6efbe6e726552060cb44 -0x1d827cfe80d44dc1d02add356787008f5e7c93afad515a4425c709b7a2f45de2 -0x35ac0b6ed8a7a47993ac858f688dddf200c61c8e43437009ce9f37459c88b283 -0xc2f9885f60929b67e58d84d7e124c17010c12ad07717ec7556f98a08b34ffec2 -0xccd42e1a512d5c4d845aa113857e9ff3f9e922d9fd212f30c1b5a9a7dacd2c5b -0x7a0d67ec1e9a6208225a50436861e326097f3bfd31479223eb8b768e0428da1b -0x9f1f212cfb6eccc0defadf25a12813568994d63228bcff25cec9763658cfaeb8 -0xc03397d01b37d0a6f80d0019c9a01aa7b7d4365c0fd5203a91e356501f437e99 -0x3f76873e91658e27e68f38cced8fd6c12c41bfbd29aa4587f54e930806b737a2 -0x2ad3a5d886e9323ef332f6ca45c9ff1e6dc02a0dd01e0694ca9b6539f692ea61 -0x986c1c3582cb4d810b5542f082ebb42db80f6f16024f06493d3833bc47acf3d8 -0x4095738ed9f0b644600e178aae9bc70c42938d07384c9d3ee0b62b8c3dd4f1eb -0xfe9d679cbdffc32940509ebadce6cb6feb8783080739429da6fd954536df0b17 -0x42d64065bc8627d8411f32c6e5d17042be347e91d0e0e1e9c32561e80e17911d -0x0ad6b4514307db478d6c222f67cd19d3db25e0d4364bfcd5c6fa51ceca8f78ec -0x4f0ad462c05525464ece38b37d83b101605938f0aeeff5a32a0f4660125ae993 -0x5df76ab601d5cabbf4b59e02c45283c0ece9a7946d88df0821c173f8bc0fe560 -0xe0fad04a1b973542a8fcf3c847bbab4ee9245db695480d79c9dad9e773ae01d7 -0x8208ea52101b2041e2532e688693601c1898459ed15c3b77e6c2ab86c1b96637 -0x0c48aba6b3b020d4b8b8682ab013e6d61f6fe866547a2c9685d552579026469a -0x69ad689e4b9e91d5e36fb832a6d580d61a4176a488e7628495cf3c5bc854d73f -0xd8f40278df489339b46ab52496516cf2e5587abee6030aa9dd7c7579b9c464c8 -0xc063f53ae224370557a87fdc5687bad1b62438dd0c9a275ade7b60c493f4867b -0x50f94c8c28c0c620f10e66bd43d27e9c75e1ad2a4652f7bc45673b09ad9fa0ac -0x94b36b8eb868c3c1bdf6b5fda93164b8cf4d8dd0dbda11b5c9702a4b5b8025ec -0x31894c0df05707841fb3c694c3ea6157a0204b16fca6198824dcd3a496910829 -0xf4f7ee73243402fa94e66c6b8904033b3e23b1e34611c906a87502c49f6e55da -0x9240fb68735624c2044cb5974cb1d081160d7bc29313c3188387adc7016405ad -0x3190791811d852509013b78f293fa3c16b6c623c6b3a1f5924b2bd32505d5c73 -0x8a0158eaab9d3b1dd39b904f3bcd13bb21dfc5988a0ba4fdb3e7627ad822b26b -0xa5be52dfd05b4e4812fbe8bcf0e3171bf053eb55916ca53c4fd068650844ee63 -0xcd7274b107ed3c37bc3558e2d71fae40c43b980b59988542211df35af3aea147 -0xcde6576bee8aace4f2937ed797dc806bb55a97324a7bc79a3cbbefa99cdcdad6 -0x44f5f607252fc19ab78e81a2d5818063e8272be1842beb252809d79d3d1e60b7 -0xd055e1822bcc5a87781a52b6028a7a9614547af269f726afc0560f7db5e5cd15 -0xdcf967737d3143afb44e157a57413918dde452f5dc9f8c0439e6ae0cd67078ec -0xebda325b1477cc7d556dd2f803d5af86fb636fb623c50dd83d651f1fc770ff6a -0x77cf72c43857350e77b408536dfd35c772e2b166101ac796125ac1aa5b5e4fdb -0x9958abb4dbb73dd3a80606b46cbf3d01005a4d5bdf250d9de657165eafc0fe3e -0xe27b4f99f5d993b858223693e2c40539bdbbada756b1abd0a97d345dcaf79f1b -0xea4bb23753b69436c04f102ab977f192bf521f7945e1af5169c47ffb5b49792b -0x242ba4fc178485226125113054f470439d7bed9ce5e31e540e04aff90d78b80c -0xdf63fd16c77afc5c106ccea9da16c7b4c8821a94f0aceb3c069ab2d7e0adde6c -0x983232ba86b4d52cef9f048b620d58418828c60aef5ae4d57e17f346702c57b9 -0x446627ad2ef76efba5d85ccfca2f474b3837254a6e1fabc9cf6a3c6e18989a27 -0x678f3624fcce5014099916f34316c3297031cebb9d64b13a47fafaee27ef3edb -0x10c0efc1893baf39b9e1b6bc555f8aca6ea453b2174a9042c516bd5bbd126737 -0xd64f3190e73df2e7afe9c159b6f4292d686ada095191537adb525fe22d890012 -0x43df27eb3ff8e2247dbc4405c616f2bf7fb185c4ef68f2fe927105b4645d762a -0xec961875ac1fd49181787589809e7e2b47aeab0dcc2fc16fc80eca4c4be618f7 -0xf48ecd8c51641a87864ea009474af85ded6f7d6200e3ef92a0c2d406dad76de8 -0x18e0348d274533a443eb41abacbe7a7c10c35a825ac4268ed8f5fffd8f645c10 -0xe04534cb3c7a89216ac9bba9eefac36c7ca35146f39ca3163f80f9fe317970c8 -0xc77369af9b2e7d08b8d778a4383294d5d2a6ccf17540a5e88569dd5a95658d2b -0x4ec0024aba98ccd577d65af540dbb2464e5c10ca9949a3b1f870aa30cb42a366 -0xf7c70ac0f8f38612a486bd3a88534e65cf6b5d04c16fb81c98aec38c7b62ce46 -0x82ff7e88f234a806bca9cae67a233988d07894806d95372e8e8fcce7494205cd -0xea5546c505379c11f2b8b32f3906407c3b6d71b689fd4694eac57a0ff4e5ff5b -0x5f4a80ffd53a9ae8f0ff5a6abff8a69af19ef83fcb08d373ad95013883fd4900 -0x4377b0a833c8866894f5f0eaa5fd32fab1a480a2b6538f4fb7496c9a2defbf35 -0xbdf61c8945b5540de2fa3d819b0c1667e4989975cc56daebc636e492fd274651 -0xcc3b964c17da4418944c2fecd674a2bc050deba968633992e33ea1e86fcf20e6 -0xf2b6643f34beb21267a344b3714c80e701e946ffa8e1e423ae5e246cc1924da0 -0xf20280d3ab40cc004da0394ac21370919e3317f18d4c6ffe1525896decfcba84 -0x28b8d7f5075c6065bca059ebb91e840a0161a678772dd8d4f59a805632030609 -0x40ce016869b55e25aaf757c21930e387f0a59f3c6ac2090c486565a730334eb4 -0xa5a54adc1d74de726a8e1d0ce861d27c91f204103df3bc8cb6f997ead66b7988 -0xc98748fa69d3d85c7530c036e617ca37d11816a716489049e73cacc56c294b3d -0x2a8f330aa4169137a0e41352585eeea2944b958110f30c89997fd432072a6f49 -0x71a919db3ebe0766ad695aa4eaca890fdb811f971068be37dc1aad800f72def7 -0x0bd5baab034a9d3e881e0a084d379974f0585678a48655b5408207d9fa060142 -0x79ce1a23e5373cc9ef71cebe44dedd4dcf9724c3e94bc5be91a629f78615882d -0x855cb190c4b8127654bfe6269a6d6922a562b16573a18b393f3dccc3742c2c23 -0xe851164b06f5feb59e82916da08ea23a9391a29225957fac90250a3e9bfb1bdb -0x567c784134688d92ad5b9e3803a94dca6c2479b127d52c00ce8de6d3d14192ca -0x56dee438356ebf6c2b1fa486c79b3669d8feda731be1a8548571aa8d4a8759d5 -0x35c090f18caf9efa3e1fe29e81de14e9cc7bb22f287a5c8ead78f96f482d9b93 -0x93cf3175dd5e7299e0e7c10c9bbae42392b236e1efd71be18341b3b81148ff50 -0xb291f2b45cd9029bc237e432aeb0a080c99d8e27fd461c978537988b5a02103a -0xfa9fbbd31bcb80f8cf095bd6b2a0aee963d1084ebcb6bcfe5252523f6db0b8f9 -0x62185ca40e7cc5c40e3d4c99324293fcfb2cf81cfcbd1a1ff817dbe6b75504e5 -0x3592a43c074970dca56a53bc86a93eaf10d85a187155a1a74786dfefa1fe2c30 -0x8acf325f5fb2da81ca9b2872a57a77fae13424443db23753b269c96dac91f9e1 -0x3d4e437726aa164e6911ae630e2c3528d2c58b5d4173cd2ce7456c8a08636deb -0xaa55875da344aa1afc4edc29069007be2c28df18be7d56a5cc20d626284d5bf5 -0xe2b129bee72088ea829e5d6c99bf7424bf10a14b3db29022d37939735f9132f3 -0xe0f46feb8883d9307d229496f8f1658a2861c42bbac047f013445d860e96387a -0xf75c7cdaaecf8a490b514519867b26f1f9e8767db59bd4081672bc938c759eb7 -0xbe9a1e730f74c105ff241a7592dc2d6b4e750511ce5b67f6b0014b1c78164ae3 -0x27aed8b00063f4276847d11714927ca6eaba37958f38b4fe31cea6ff18cd651d -0xc844fdc6345a303a72faacf7f02b1ed01bbab68385c0f45c9495f1202e99b97d -0x41ed9e4cccadacebc524fd2031f37ca95993f559d8cf0e187bc3ad3485490569 -0x0faed54381af5fe13d8e6d8576e8386ebd418a24f6e83b5d7190839ebd3d7e61 -0xf04e1f13b42d7d37552a58c5562d17f1982950937f9e07b17ca19f58fd58f5c5 -0x025f2b65b7830a58e51fb8908998d5e98d0209d9670245f11bb18e6d0a46c10d -0x9ed56af4d09c94ce430b354332c814ede18895ba3c164b48cb7a60747adcbe87 -0xe92115ebdcb616e65ba02db6b4d13d70bbcd9e70d9b8ec4da0050eb3064a3ddc -0x2a92e92cd8395e91494a3a0f3caea170ac771dd716478600863fa3d597144a36 -0xb1f9d3a1f5b177dfbf1499461ba3b544f63a1bb85790040f5efec5337e8397b5 -0xc10b8be8c613aaef4d35b3a61bacb149697e3429a4227605f13707a405fc78cd -0xbc350b3c7b14f635d693e6e0fee29d299e1f3b866b16c33ad2daf260a2377200 -0xf82b8008903b65326e503bbadaf9df5e6c6df81ccdcc0fd091d93d33fe0dbfd3 -0x400ce36f2320590da51a269f75304a846f0b69ba8272609f5021afec5576e748 -0xd7ece881fdd69499692ed5a08acffda87beb498ac74863e717688f14789a09a6 -0xa1afd85fdc955844d8aeb043399a618157b7d7fcef342f1c8820c226c477019b -0xdb77d96e82f5e0f6a6f6cf2c8bf3f72b506b1947b9f33cf4a99917087c6b7eaa -0x7d63fd5229b9db9299ecc1a721ec24647e51a5566d40dd6e100e1e8ecb91efa9 -0xbd597306e088beda927dec57560c1c9d16ac96f1d034d574bc86161e59d39c23 -0x035ad54ac6f968634bb97b4d87ff7a52b70bbd4986673c7f9f8426d27fa49942 -0x955df5e1b2ace5ab4fd33fe4a9cd1152926137f3e0351abddf9c0ad6d1b0807a -0x4c33e074c3cc730c4b533019bc316ef9ca2788df22ad8ce9216cfe48b17fe3c6 -0x6710e0ab404e95764b36050b071cc643266a5b90202ac4f42580df4f48e055f2 -0x84181f45705763dabb156b9a5a518c3f3745de8f1e485c56953f64f03f42556e -0xe66c1c276cb90bc7e52e1c9a7ccb3ff0f6c9c9550de549065dc8b8b3e839e0b2 -0x224f59940f866e45069ca8caca5cdd7f5877de4e23dd8ed6e9104f2248a34ffe -0xbb2ae2c797e820e6f7020a998d1ab37ae879ab3e3fc111bf8fc97287bff093b0 -0x38248aac98852a51bda057860a20e15372acfc6297333649adf24fc9207dee76 -0x13e9866ca4c4b494ad9ceb0f2f6165b313df3036bb78848f6e6319f00957e951 -0x10bc8a10565122bcc1ea738daedc65eaf2e7776bb919f4243b2743f1d04b6b1b -0x45da5cf94ae96ccc7d9cb21a697c19d03bce0689b7cc71e4482f89534eaf1144 -0xd900d2e70bff1f2a39eddb7530d181571e107b4a40fabc755321d430b248f1d3 -0x3fc2681b2588c9ff33f8932cf065825c0bac6b14f1d85c068b721d34540bd07b -0xa43fcfe9d8bf46a834b7d33723008318b53f62b199e0f74d89847de15172da5c -0x18a063299a6dd8c7e6d37d8460d27803ea2ea0081318c69037f3071319cc36a6 -0xfc1739fa9732b4adf94e2781b6e6ad0d7e248a217d3048368aab304937f2d474 -0x935784745bc31f68e53d786a697ee11f98ca099e1319ebbe129d28e581c25cf2 -0x1853b30284f5c7afeb4091d2cad058a42ce6268d3bb76aae884211a5173545e6 -0x508659d98452c5a76fe11f5bfd4cb084db57c79a180df8a9970d9bc6c883ddc7 -0x94097f9ff1bdf5a17a1cbbd5c7c0587c55b18699759bd4d8d8efed4e605d72ed -0x79649bff33d3b02247f848e90622265543828aec4b070852b92b5e9202c6253a -0x5d56dfdb6af9fa8e60cc8ce3c980a3c04ac4a2b6a91d0c68addcfc2b64089952 -0xd5913a30cb8be236762c470e4190640727add8782cbc6406b661d086628b7549 -0xbb30c4bcc3f6d00352717d6704737f5f39ac69d82e8c2671e49017d5fb94f64c -0x3a280defe8633e85f8f061cce1693709c8a4ff949d99e6bcf6307cafcd563523 -0xd8d9f854b5d5d70ffca40d31e60bf172fcc7be3b1578dd66240b7b8c015cafc3 -0x9b03f0c6c4ca3dae4c11e39bc5553d7b68375e771572f937990e1aad1efb5f20 -0x21c3ff3f701d5cd688e71f47db78e5a7cdb30b2e1f7aef7afcd86493efe4b051 -0x899a96cefb7af1c10835585f558f4ed7e9b42dc729b04530a133a908b667dd9d -0x4a60c939646b7ea9a787ca13938876a0d9e6f19f04d47c80baab87cc67af3dd4 -0x698a7ab7cdd8daeb3ec92a809e275797f40247bc3bd025ba7f9fb39317782527 -0xbfaa66986a5552f93db6b2504895fdd39e903e312fa1dd5a65fa0320089f953a -0x47b3c8ab95f2d0f738281ccf3b8017a09a0fa313b8d2d25d80ba96137dac6d8d -0xb9e627c576ca3f3c957a1156e40027b82f17f247b51faca90197ebcc1cb3c9f3 -0x7df751ce06a5d322791eec8b059450f0757b5b0a4a3c97127c295befaeb5d6f6 -0x7d0206891f60530772567c70cfb9e2b44b84589800089bd463eaeb2fcbd347f5 -0xfefd0b841893dc142838040571eab19a201cddd517498ed34a84f6b1097ec9f3 -0xbd87155e7f3df0a82a5891e1aa08cbc1d65bfb82f3e221d16446bb3abdd285df -0x507d30487deb11873984ee477ad05f1fba27e4067e25be67c1ca6acf5c5219ba -0xa9c2526aaa752d09cac18093eb4029c066d0d0b36fccdde746270af99460ba7f -0xf3efd0f944f0985ca7ad026e9705d8bd17a0e16e82ad2f9861aeeb92b63a42a4 -0x5ec17757ac56e899dd297d5da4487d1b85d92ff204aadcbad3707773514a5693 -0xe1604d1a555fe2e44ae790dc6a0e32b57f1749daef5ccbdb44fc45a64447dc96 -0x294993f9ed18446f624e1e5e286f7f1bb06b0578068bfc48a06fbdf6d8e2ac28 -0xac8bf5a2ff9780de9bd9a779a25aa0fe7bc6074710ba1c90042b9457bf87ee0e -0x58b6d1aa0739493d23ce1ef14cf6627dc36e69e4d389b8ed8910a1cb82a47559 -0x15c1b44ef2db5101bb22ec8693e84400b0dce481a09c72c33fe4828ef4592bc4 -0x14c0431ed55f557708bb7900e51a21e14f22d8662abf579b3522242d49dd9859 -0x14468f29fb95f8c8fac5bf86c3e6fd7a3f9bf246d629ee40fe7ebbf87523b38b -0x9ff5c25f3a78bc68463308315927915709503cacf3f32d0a39ce6b70985bfbfa -0x6eab4fd5eca6b62cf2f16137f732ea9cf3d16ddcf471ac997c1cbca09de462cb -0x4e63e2adedbd53bf9a970b52ffb7282712453a2e6e5b7b9d3661499f7450ce50 -0xa96b2468601f2fcdf7175e904fda7ce6d6daddc7fc8cff24ecd5e67df6555523 -0xb2e617ff50eb10a64c8c6fca447ec9e88a419bb0d8cd65993a70d0dd958f5411 -0xca11a52662c40c8f587d45453885dd6d8334e8ae8fd4fa73ea68e3d223dd7e76 -0x1953fa8cd28986f6db9b640c4362ed38b71bfc4b4b49de6b08373fa5b5dd33ae -0x9df350768c8d48fe7665eb0e8402889f99450e40acf48678a845a30e2b58c0b9 -0x8c5581630407fe6aca7767e4ba0a504ef9fa9d26a73e71f66e8100ce6b0f4137 -0x499a3fb03362e6f98af816e882112a055f0452256d0940f45dd096fce93a1342 -0xf4ef9aeadd64a19433bd9630f7df4e4b6dba31516a23ad212153297cb7d30edf -0x2f030d800eddb6521e50cab694f0d6fd73af9e02c32c345718d70b5aba0eb5aa -0x9369047db85faa428815d4b47a056c6ea4149a8983aee44ca086bfb7504abc1b -0x757e749b00f3ba9e1765c86a549fab44c947d6f9ef5b9dd1db22794eee7e6b19 -0x93bd3704196c3154de561bc7f198e0d4a7679d78e1eca10027cca8dc6fc21f6c -0x17eebc973b1a308adef1b463507e73669f0c9f636c5b2c690f21ba41804d53aa -0xebcd7ed3d6739eda9595203aa4a12f25be2575a5eade0f7d0dc3d84dfa6bb1b7 -0xfd90fc92fe4edf7e07ff5f29dac53106c612c2d06156ba96a18f0553d08644bb -0x9c4fd2a91f928849c7b28ee25bad07355ae5e09b174ac0d4f6d80e66fd37916e -0x7a6cdddbc37b6965d17731f2684043a292184861aac9a6a00dd43b5c3bc4f6a8 -0x63ffcb99e987f5c529c23e9f250a2dc4a3356c53c0742de0d912c291a60b11a4 -0x827269510b9bf2c51599fc2b48a2011c8aa61455b82b72e854c2f45cb92788fe -0xed72e3ced228d2f1518977f63ed4879e49e0562f837814bb1851c36dc92ad875 -0x118240db201b16ddcd9ade7ffef44d90f068aaa9439cbbe7a03ab12ccce0baf0 -0xef0f1911acb1f9a39b3666474968ca1255b8017dbc0c09f796a5cc64208e5978 -0x977a911263809edbc92ec16578d6aa5ef85ef1d5dec989fe35de836cc3f0fc1c -0xbf58f94f95170a2710ff6741cd64c7e094439d901abf2eb65871c306cdcbdc3b -0x04b45aacfb1ad66c396d787f101dc01e2b8bbc354b61ec203c9576fa562ab5d2 -0x2b4cf85960a5fa44af7faaabdc7d52de229ce1fd6844cf2850b1bf0130330dc1 -0x302520d9fe7e92fc5f37b2583a4739a08ca49d003b0e5e2e5afb55446b9c2789 -0xe5470e5996da199469182417b509694747ae152616d55c016762ecdabda0ddaa -0xeae6683adf08c1ef5915105828b0eaae82cc350022817011235df7d82eae68f4 -0xdc33809536c4e4643a9c0bdc95b9ecd3a485b8ebe08440661994d5019022fe0e -0x964779b30110a2169377f5e1c9c4f935905a29b55432f46c74c72df691ab223c -0x563c5d312b535fc44fb7ffb06c41ef7b85fde348dc8d08945687911bab3b537e -0xf414bb0c11dd04a202790b0350c471d6922aa88cf7cfd8eedf865f64b26715d6 -0x1811ad2b1ccdb2d7aa30e66468e4d7922becf9110b8998c4fbded06595fb6aab -0xc9b508389f5dd6d976bf67b81daa67aeff3b42fb53dc4b271609d1ccb3716705 -0xe17f5d349017afdc7d10ddea97e9e83bb3d37d9c3b6187542fadf9e0233c2c38 -0xaf3de7b950451cc636286958be1249fa3b5c3cc87e7a6f35c0ee67953fee717c -0x08852c5775682af10e4ab0832cfdd86f43358a5d5d074f1d276a63b90d535bfc -0xa184dcbec499cd6deaf02962f3fae4401e0ca9ffd474ede897fca3e78d5707e4 -0xeccbb6743605e52b057123fa6858882fad9659160fcadd2c5e536bb7654c5fa5 -0xb7723495a726a04b11b67b51ce78fde7ede14c4fcef5c03bd548ecf88e5ce709 -0x84cfc29cbb2d563fd118137e12bd832d1a29f6f88b7e6b00371f9ec13370f3ca -0xc35fc15efc47709aa49c9a38612e047b415c08b46e4351389db1a93c8ee59bcc -0xd418b5bbc1f10f1be2c855cae04d4c9d6b3aca55d4c17ce0bd34015da57889c6 -0x9e595dbd5fefb4a3f7d894e4f098d1d8d7c09e4a08edf12ebaba7713217af20f -0x76ba96f45215417aeeb4fffa870b4ba52c3529da0e805c6f2f2ba3b6ceab3b7f -0xc92188e52e2672bf556eada2b279e8e70bab300f8b921b88cef52e7651e7d241 -0x267496275b1983abc75350d2bf492d9e3d77f381b7579f0290c48e706705083b -0x347fbd1f55f2503ee7ea3c74ad1dfb27186bd2dc109925afe5725fcd5fcb33f2 -0x0c5ca3ea986aae52cd7d6ae6fd2045e4ad6656ccac4d4ba95852be80003caf5f -0xdada38f8bedff7b7532bf6500c2f4bead986bc7e3b2305135150b9908bba30aa -0x1ebcf6b45d14859ff8a446564e7b779bb6a97b7a314e8552120945da69f09cc3 -0x3b8c391b5c415f6605f839c8b3ec5afbc7f4bee9d890eada53925b84f641c012 -0xfcfb507959c2d9532878bfaf133efedcd3f07847753fdcb66a13800440325959 -0xbc93de1b7bb21cb0bdf167887dee394ab68c18aed7a4766e43e93f233db341df -0xf44386ccb8cae5d6b746bfff1069323234519d904e101df30f3372031b22a913 -0xc5ccb93a18632e8eebcf5ba4bde651fcc9bdc526e1bb8ea0ba5d0d5c89c6f10d -0xac20350e5c7f49d6e5248e3e447b9df9ad6c665a8f57c16c77a159bae59e3c8c -0xbd41d4f2569390dc4b5e5db3d4cb0fad5c40d1812563b827f365e859c9d9a725 -0x2f44cf08c5e7797372bc19179bd5c8b862ca524339e89794d33d892971ab306f -0x84122783a61a8dd7e5c0e63fe020e2b1926e851a1b5fa8badad8310c3cfa2706 -0x33aec10f058f78482306a3333e46b709d82715c5a2ad595f10323d1ce0cfd07d -0xcfff93c129aac73e2bde32752305b082e3945942554defa3d06ce0b39c8b6117 -0xdca639866bbac54dcdc38946fae7f07c54b6add7ff751d1360ca2c50df0742b2 -0x9ec61a47a25970f34391ef1bde165f6aa09c8d8e3c978a5f1e6be816b637c5d3 -0x44201149710db459a800989759e5eb8d9831a84e5862995968edb4d71f4e2548 -0xac500fe55515fae88984ba08c6753b9e8a2a0350160752f4c2c620eb7544ac66 -0x3bb13b40fbc0abddeaff650a12b0a04b2f15f511268e5c801a4575d86e35a070 -0x3391e4c8b347d6de008d269e103391a6ddfda8f364b562b427c440bdf23f14cc -0xbf130730d346b99935e1432c9d75d4f9bc8229f57a8b4449275ee6b1657acb32 -0x5b99107f15b5a064138ea48074fa02940899da59b1af547059827c6e5be8322f -0xd751b431b2a5e31a82d8bdc468055dac370304f59f93cdc22eb55f4572ef8342 -0x7c0c5e56cc494b39c8652d8cb62c461990cfd61e1b040e97083feedb35e2dbf2 -0x7d0fd09c491ea4ebf654070e66e0b3d9e76471fd5baf75a77417fc408c2877bf -0x880675c503444bd3d8ec8a4fa25bd89f1ed543d172537dc5746721383f3eca31 -0x5e232d3f0db0eb98efb33f76d514ae3d1871dda74e9c594c3cb6c0619d22527f -0x1c25a4640e90e13fdfdfa4a15120bb4b131f8698430fd074be601dee7838cf3f -0x94f846566140cfa06de6c90cf228e599ae1af9423c5531ab467d36bea7b2ed17 -0xa77b8f06a95b3ccce1b0ed21bf6be0d112217ee7899e927ac81c09cf25810ac4 -0xccc79b1cc9f074749f3e920bddb2e612ae6ebc8892eb88263235a6696777aea8 -0xf9c1003ed44ead40be63797df4c305ed3c36405f74b9b318749fca80bee428d2 -0xc91703c35257df762691bf5d711229b287437a062924bc1799cb6c6a44675b67 -0x23fec27d77e8a76e9745af8a88945f178182b02ac10254c906e7124748ec91e8 -0xf2b540ee7cd539d5b9cccbb73aebdfbddfe8a1990e9612f668bef54f9f64aae8 -0x61a2733c8c7b482b6d6a424b3ed19a385b9a3ef53f84191abc193f1cc8439646 -0x1286632907c67b3b7eac5b70cc402fe2b0a4128284f7fb41aa1e3b1e308026bb -0x5ce233b5ac62d3530015a1d206051619f0a8797b3683c74901250a7fb62626c1 -0x20727494b1549b4762972eb71844056050f467187fdaca91b7444031da9be18b -0xfbf73faf12bda67f44a6da82e9c6baacede905efe9ff7e2fd8087bdea4cfc99d -0x4ee489996d1fc83bbc7b5d23cda24a599114005578a74042e52c6604cde904a1 -0xdb33ac339dc2fa83d2bc319c27b265571b39818648d04cb83ee7bf47c7df7665 -0x760fc644d3bccd924a0d27b18986d5049e0a229f805c3934bfa17056948cd9b2 -0x86c3ca83bbebf62738b7bda7d3378bceaaf51be469571bac0fcae901dddeb9df -0xdc44ba2815bc848a9479031a534c5ea0192672358b59ed8aa74b97ccc90863a2 -0xec542e9089a6b7d773da3f3ca587294567701ceba684a72b025e8007bf10fc53 -0x9d0ee62606cd9484fb4838d874731448e372c95e857d42586cef10cedad07b16 -0x92b2d99b167330b1ad35cd25a80c3757cfee4b033502e87ea9c8ff547e0ddef6 -0x11ac2b6f2f2ff6542317511904a1da367ebd42bc2181108dc66e923d788c2e80 -0x2d82732a5bb7e0ab53559255256d1d9da1ca361814072d903600c721d7e86fd1 -0x95ca56c177e7801c16fbb17c2fae0658ff6620a1f4d2d7e29778ba522f541982 -0xaab3e4e1ec5145e20c9b87cd27698f339aefd5a7730f65442df9fe95b45050f9 -0x88d50fce2914128d38ee59aa5e39f756fdf5628de15caef442930ca127b28570 -0x92ba363a495a6fc970d9b9a8cf8977fe198a562053c01e64a49a0a3b5d776dcb -0xd133c94595f669f951ea0a6e30e2b99b5c19b3fd22f3d08df2edb9dc78b14d13 -0x76f389034de9ee68b31b6b14b08edebf575757a7a903bc628804ea623809f9d1 -0xe8c76ef899aa97f936580834d9bd2c32eab24ff70a7dd48f9916ad2f69de07e7 -0xf125fa8bc0ce3a7cbe8d034cb703162237dbf89e95d8f1825139b1a8e011f8ea -0xf494ea6897ae1a5658048ec1d6fc2f6f3e704a534e998c2a2a51cfb523d2f8b3 -0x1cfc9c6b14c7bd33628e51eccff2f1464ae829f852d0f71b8768a73e70b15c56 -0x43f45ad41877c6cccd369fa781ec58c3e16be3ce6a323c751fa19438053cf4a8 -0x0b5e02bc936c2e54e556da4700e9ad614670700dfc921621f5b6835ccc60b452 -0xef4ee276b9b39f0a02cf71925c4fc5c82a1379eafb4d04d8231011ac6e8a51bd -0xb5224dfc439dedad05242efd12cf7783b9f9012542f20daf0aab45d223689f43 -0x017e0eb11ad607a1ababdd9a48c11cf7946ab75a5b69b78a6feb0c04f2d8d8be -0xc1e1876bbe15ff16d673a9e51bb8c6c53c96e5751b48bbc4fe6cf84e9eee9586 -0x9c3d5ec7014cb46ca8fc0acb6bb3c5cc08cb9f2a9ad0b04b142be25f600e26c1 -0xd32dde83afcc3cd34d0e7db42616359f7f541ff1fd591dcbd033d5d94468dc02 -0xb2b6578016dac930f7c7a10a90b38764ce7ac087f41543bf5a418e5f13848c2b -0x3428bcd32f8c07671dfb8487338c8f6e3ba2f55b48251a171df8c91df9c1d40f -0xdc1cb7b7b53ba997b5266c849d07c4936035c8a315dd44c765276d3cd2e77746 -0x30c0e3b4cb8c40e3309085a507e7ded0df7a7516a35c11c6ec6f61eafc07155e -0xdb8af74b2a0f1f4e492de40a5d21a6d443b1b0af33f0956fb023185de182ae36 -0x35437b301025342b726464c945fc1e957f9f3839cb3455a3233d1bb94455841d -0xbee881e0da1d14a8ba204db5d9c82660fd098a0955750027d8202b8c02d338b1 -0x8537f8a82b92223b47d621a9bd23dddb2d58f96009e127e04f32764dcebe85d5 -0xc1cd870ca0fd0b9f9ac60419e434c61d0e92f23bc71ae32ebe8974dce0fb5d3e -0x39fa0b6f7f2910fc88793c93aaad3f2f92cb8e7a01f629d41598cf45c05181c9 -0x663e765f5117160ff132ee1fe3e6474f5905a1ff69bd042bf8d912d454cff056 -0xa371b2e2fbcbe64bf21320ef0cd42511317fa468c1182f24e07f658854ef7faa -0xbd2ceeb80ff0789a2054dd1eb17fcfd4b0b7dc31b1d3638c2c1df2283bb89682 -0x1299f0a93a6b2d2680c757fcb470a3780434379fbdfd2dd5348fbaddcae6a86e -0x0ee7ca409fc8e396bcdd763c8eb1ab3a4344f62684c486bb794722813251639e -0xe6c5af33e3f8ba6f82c440bf4ae633b0aeac5882f4e060c0fdfe3439d1d55d04 -0xad2e61d205e7f2a3b563056e2236ba4e8fbdc396deeae0118aebb47f854524f0 -0x5677aadbda8a85d426b0f03dec6e6255bf2f3439fb0619ae1521b1a8715c042e -0xfdb7a9824494afc643a841a3e6a782a648b5d89a885facf0e2546ca17d0d9555 -0x9a2c4f4ead9d65621845b987a48ff2ad42e754ef7f903586af6b12f30fffa72a -0x2b752bc59e8d6d58d49e4b4394075aac808ba9a8de4ba886512d951d94abe382 -0xba3678bcb8bfd7cec64866fba67475af5707072a4d03711d4e26455cd1bcc45b -0xbbff9e3a8421a1ef9eb83f897e02d8c467909b678d0b8476901160e05a86fc09 -0x33ab3dfb20d85ec7958286d35f93e5f5f24f94e5fc2b766e4abd1c9c3040841a -0xeccc542279858ef4f1f9f320cceb1d0a08567b90724775a5938a71506cf0150b -0x39e66d54bef7c40573059b0b69370dca46e0ecb48eb0fcfe50a6e4aa9c6c20d7 -0x345d4f63b9c320acc85dd366fc953fac0580fc9bf5ad8ddabfa1924312f6e2fe -0xe0364d209f51b73744f1a2919f7e1d09d7debef3ad640ddc50c56cb1712c8095 -0x0963b1b6bd84379d27fe580563be0a68ec91c9ea43cfcc56a9b0da47c2b38cb4 -0xe51f4c685662e7247d514c0f80117f654ed2989ff704dd0453f8c7d5e6a47e55 -0xdc046b2f618ed87f703f2715655b67df510df698da6b8cbce5544372ab2f9e6b -0xd1dfacb454cabbec3035f4cebd344acd72e77c52a73dc7920d1849997d56f54e -0xb1c078cce5580a9bc476d0c7aadcb00660db376a253c26b81e356bff3cec24eb -0x711b40ad0d0299c875c741ae7849c6b5229d605e4e8ea771fa904d5d1ec609a6 -0x1db01555e96c88883ec265f3e16da9bc21d1daa2fae64e315a864c941a6e4b3e -0x1b3294fb2bb8a86e693a9da5b42bb2a0e2e37c4102c936a1f76194dc595eb3d2 -0xfe95e28cb17ecccf24da131b536856beeaa9048b85b73f576a028a090a2d4f32 -0x71ff07a4ad760e73927cfeb169276e254d761953690045ac90469b8c07e92abf -0x82d70519e806f703aa4741770ae6002448a669a1e14107137d0cd4d948610e8f -0x0b26603dfee7fdab1ce969061a8ab13ec1c50b098a240460a35115f8c14836a4 -0x64c7bfe0f7e96c9cf408d5c9d2848a3c507d0232b484c909ccd6730e47748678 -0xb8626f4467c9e74a1c94f92f0dc144f1e9f6a7fe318c7c77e7ac73e489d2e8ad -0x97d534003d8c5fb239a5c965be0efb38495c4e58c72e5039f5a5d510fd5ee2fa -0x3437602eebe057411cc8f59e080fd047f6d8c21502bad597dbbdb7338b51ad1c -0x710e80bd3bc9ce1e225b6f53eee41b509075a8a373483a19daad31a2b67ce293 -0x7d30d40fb00e819c0f63082b5cc226340b88ea4aa0fa0f871b202b95dfa08c2e -0x300f60ad28483aa6a0343a4535e367d35654c88f889cb76c3159e77d39cdbcc9 -0xca32165e55f609b7746c1a5b74dc9474adca44b1afe987d62724180aaff4c094 -0x562545d1583c62a3101a5abde00faad101de43ebd5f958025143cd84ab1ff531 -0xdc85c612f579c8673fd99c19cf8cac840a5c898b03bbeaff28e4de56b78459f9 -0x77ba9106bd55806e4c6f8e42305ef1135afe81f0f2d17a2c4976409e27d39824 -0x2d4da7837aa63605a1d405bcd3141b81ab1c831f852aa2b1152d2a4f1ffd730e -0x98741fa0c160ceead2d8ffc2158102dd67682b5cf5050da1b663c8678b8b2bea -0x2566a4d5fcb329bdcc740915fb2a63a55ebaff8420de413b63f3c194bdca24e1 -0x4e46dade0977d528084f79633a41c4cf06cdd5e1f2101a73ff05848581c4cab5 -0x4bcc8ea3aaea42a2c78de15bab77f9f9786edf59d3a30a2a82216244047e40d5 -0xf57b4321304031b9ea1350f47657983cb908e8e8f33556b99613ac29f9cfa1c6 -0xc6d812176987ec39486c399014399e57acfbf5e5bdbfe4ddc90d70b0210731dc -0x9816aa68257fa7f3750d0aa4892a72e4d8c749da38660a15bfe7742b1b67cb76 -0x85db4b1316073dfaf33d60f2baa0ea1a0875e385bca44d885ec87efbd81d3703 -0x7a0ec6d6d65318e98dc8a16c487de12b05e21d8471c6b849ad36d2db548f3598 -0xc867673d84e9d2010f09dd46c6b46e614a577d5bf95275be33a82846c8e27e32 -0x0a51f0477c4db177a26494a2b3e6eb3656be0d9b9b64d21fc22ce548dd79fdf3 -0x6557348d5c0338ddd4e18ea534f02f46cdd8da45d8ddefce5c60f4917c5168e5 -0x4358601c078852de61e1edf5ac2cd046a0c42d382dc2e05e94ae18c02c1f0350 -0x14b98c5c8fb4bd4e3f1ed638527007ed7d42628dadd4349b003d8cbdb3aa25c4 -0x9cc6476a24162d99a865a42030caa618227aaae755e28ea7cd56be724927dd78 -0xd051b154b5de7a89d3b8a6b1f3cffa34b356bcb8b126b781b6f9117d139b79c5 -0x9cf8662a8c2a764c762a74828dc2e2954cac85a212d4b3ea57533fbb2b667c2f -0x87f3b2a0035abdf7ce8be16afebd7f3ef4556aa3350c0ce705f5f31de71891fd -0x3e2f05761d1acf14fb2673b040419a01f5d31119b8da03c6c7cfa025abf2c8f8 -0x625b80b358f9370a27e707709bbe41905936875d4d873e0b8679f146113a8a8b -0x9c1003dbde12cb4e617721a22e475b9b195bed78985a1062c153cd4c83009c75 -0x84add6c5300b7d4443d4d541fe251ce790bbb88c265b02c333c3241c4a01b1f5 -0xfd110ed6910686e33825940bec9f1e661d67515e0bb54bd1747daf3216ddbb1a -0xc00bac06964b6d7efcd0b01dee84a229ee99dd785ba56e0360685b0a454c679b -0x93318ce0f706da01a826dfdb984f7406a2d205d7eb21767a65177a719c7f9659 -0xc196a251a3be99584bd358252ee02de2ac7ee000bb07503328e8f0dcdf74deca -0x915fd9aa42ca0f0b0bd15f9a5c649006a01df0709346e3048b4d02571259db97 -0xfeecb1cd5389a6c62c92eb424c91d116fdd5e9a2ce491e13ae3f725c0b4fa538 -0x0990dd655292578efd9ad3000a5088a183bd245478a45fe0c5ea888c35081dac -0xfc08561f4302c048247c0b68579f7c8f5da0338378e8c8eddf8c1e7412f3769b -0xa1afebca8d13f7a5c2f9f84e4da1c8d51b59271bd75da570a287fc6988cd297e -0x333515232039dde9922d5f69b81b44dec3c7396d1705a832fbe55f731fbd09a4 -0x3661fff7311293398978b2cdd21da2e23b6b0585eb13700af8f63e5bc6fb21bf -0x1ec59b88058921108b23698d54b1718f938ccc680b2324c6349a2ed048c256f1 -0xf4da4d14ae2dd9d391a6011e6e7b67f06cd6c5e50be8359ab7f5a53cdb9f0a26 -0x7b7bcf91d0c8e252414b0d79218248d417b3c539f7784a69cb37836f25799294 -0x08dfc29fd34d1ca5c5f7066d46ccda8f0bb37957d1b1c94dbc2bdae27187799e -0x30cebe5aea71bfb8c56f85ab4939eccbf7f079b6b855a5ac9dcc90c08960b355 -0x03bdaa277746c5417031f47583275fb9f8bc4ca529af41fd420d9569032d3317 -0x0ae336f8033b49d2c20f8668bb5e60befc823a9f72b2ffdd0260751c564cbb32 -0x278e8d1c17b8b09b885b5704c6c4eee186bc3928732a4cd2c4ec011b03a44f08 -0x80f591270ed381d9f009d9a459eb04bfdd1cd68ca66411085a73f1de27e7492f -0x60b5582fccc94b30be1c26aa62018b3d574def7017c17546f6a608f0b035327a -0x429db19f2e6997dd1e1760b3a23c46004b29c6d32c2ec01da874709faa33fdda -0x9efe8231d98faf0ecd954711248e03113485bb069b484c40e3871961391d8f66 -0x5a22d5cc395a3cfdc35fae4c64e2c7111a2675acfb4c33e5661512710ca35c7a -0xfbb6b77cd11966fe37614d11a11ae8f920be7904753a8ef12b4830d77b260cab -0x79b39e101579d5b65593447358d283a1ae67542bd4ddf31953a52ce134d3a42b -0x9d2fb5d26c21e83c419d708982f746824e96dcb64c081c00fcccdd191a8c3a16 -0x06bce5f9c04269281807eb21f7e00d6fe1bfe9db3de1f8b40669265d4bf8361e -0x67f16490f45fecb3ccde411f5d82c7cc55239808620a040f4477e24cb03d8496 -0xffc1a7021acf9b2e40d872d532c78231871e7b29fd88da06664e5094adb57916 -0x6f04f103e5b1a37c5acdeb5b3a2d696f31379767884254a4c6e1f4bbd5145d1d -0xda47e47c2b0083c1823dd36db37c20b4a2313feb0f0920a6fdb99e175d53b9eb -0x0fa7fec4ca9e59f76df7ac62b498dcb4c279443890a86a82ea7184635b8cd136 -0x77d41a3eb7e94af11dfe4acc68a834bc4c01d6a121c3e7c7d34ebc43607415c5 -0x29e77eab98cb6951cb4a210ae4ac87f182535305e5f722eaf17055f7612762ea -0xb2f16437d6e03320349fa7c626df3ad15f5ab7a66443c768561bda432256f7e7 -0xcd12db0c0af9462618fc68aa2255a8cc077337f982e3b3a014f7379f50a60e1c -0x66675a185872e5a968a1859216f14c674621f2008e5f03fbe82ed89744717eba -0x605abc7795dcf7ffccc17ec3551fc7cc562f98e4e3b3b35cb0d99420b3567875 -0xb63c7c273e876c05074eca50ee8883cd94931f6b57ebc240909780fbf2153b33 -0x703d6a8cd8d86e964629789a504e5eb0508d62b41a54be32e0993e19d8da257f -0x792beb8258e9ce5db54f062fd5979ef835db8c1c42963b536e7ec1c49b848e3a -0x8f8998f679c538d61ef5460408653aa0fc3a4048e08aa781f72e9e712a02875b -0x01ba74653b40540015f89194e7ee5ad774ceeb1cdcf73c2a33e9ed6844912cf8 -0xef66572ffd9f3a137a369f43ed3544537c4b7e2bd0e2e12da1d360b43b893357 -0x8e793b883272e1e9c055cdb169734b91a96c7c72054c6eec2417370f948fa54b -0x898c0edbc98bec1c2c76e82000c2aba90125aa15f698bcf2f47bf479a9b41b46 -0x5eb4f3cffd4446e4ae08f02ed86544a7da78c17cb65649c51e2de6743b8d3fce -0x951198524f27370685b6482c542d640a77d72a923d78d46d753f541ea935254e -0xf6dcfd07c7a2a31047c226d9a8e656ffa1f3afa6a74e48cd071776f9f9f0d19c -0x2cbe8e7fb8d1d3544312c5452e3c0412db60c2b7db93b965a5fc0f4aa9e5db65 -0x7e829cf59cbbaecd97e219912ae710f04a308f12dd5a37586cfeb9e5ac15cec2 -0x80c2f05b305d3350164789fe3e5b985ce0a72013eb56fc25d1f92b86c19542a6 -0xbfc492dc65c778e5081817c47439984ab82534a8f61a35f9251171b1e795adb0 -0xa353aee75f39a5681e8bb6a5746a605dfd5d4552a3d3eca2b8b2ab8ee1affc0c -0xa125e545a2b25073f1cb813b336d2123b2d6d70310f1220600fb6e6b487e5682 -0x264a12fef1ffd7582e28cf5be354baa05da162ab5c97ce91523018c2af40c2a3 -0x6d7d7eea1185fcce184c22cd021ebd5855dbc46672dcb9d262e48eadc9aca4c1 -0x562ace76a5284bb04b8965405fc8794b7841923c588dfb77cd1687560b3595db -0x3e74ba585db98943ab1293750ee368ae5e7e56e9a1dc39d2cfa0bf0c109a69ea -0x2f64727d06c4c4d51aa0bf60a49688a59bcb98c3cd59a1907f64c1b0de92b363 -0x95e2a7dab5311c11c00bb7a5ea0e793319f505fb111c8c8f4d69cb3633c1478f -0xf887096bf350b577b7d247236aa25f980c20138bb21d5e7349b17e00da5a96b0 -0x3446e57ab461836785b2ee95d3ec8cdccde9a332504ec29bd216d3fba8425451 -0x4e8eb1f7632d213bfbd5841d7d5560fd6588ee22560793a146875da531e30eb5 -0xd00c7f4660f13ead2d22fb97815d3dac75ffdca6459c3840ae3e1112287a0516 -0x3b3cf9b5bb547dab4c07e42695bc9dd0d3bab8540b2501fec74f2466ce3c01fc -0x38888ab968951aeb1c28519804efff039c56cd2782d96f913f6f72ae4b16ce1c -0x2bc9e1f1483c14df0af78dfe5cde73870790ebb34fc1f10d966915eb07116112 -0x308d56da40e4b8f2b815bb0a727a62ca3de4bae14251cf662fe3af2c9b908651 -0x7f6defaee5db3eaba6c51647a076faddaed6df8749f12b79891f1c7062aa315a -0x72eb7eb5e7d221331b097bfe8ae04d61f0947b618408bc7eaac25e587c642de4 -0x1918fd1ed5aa95565420944baf74ddb2f8ae7d9e07722722ea905e20ef503a82 -0x49d76b4bf2b1f3bf398868979f363fe9fe0d15380bf27667e7ced061db5b10da -0x8a8924fb2a64c17c75d5b5f3d9a73024e35b7b3b876c3c3bf09bd5ac31151b78 -0xa42574b759d4a8b0258ffba285cfeb7f7c55bf543af47bece223627f7d994f2a -0x7d27607afa466241ec7b628c8d478b678e113718e262567e6658eca8fe4d62b8 -0x68022ef3de326a32812cb248695335f76bfb37fb5c39335ceb08948a69fad4ff -0x62ff8af57b7e37f7d29f2dbff21f7f336e1feb7c3c1b270e1f575ba428eb2e48 -0x709c0784babff9591f723175d28cbdd67d840ca290cc3128800346a1ff267f64 -0xef6ae6bfce7d785d7c00c149fea2918e79f11084e0905e849f006fd951d0ac0f -0xf39ec27074bc5f3a138f3f06288fed3b1276c44abd06d62c91e008ad0b40a3c7 -0x002ebce112a5d11aa14e59aab56237da9d3125c678b9823b57b2738e081f3b0b -0x0172301294bc68ba46bc6b40c0a79e0360a16cfe0fbeada3507002e48fa15da6 -0xe0f902ea47f8e544b52e318ddf410fc698f3f23990fa856c6c8ba4e749b6dd8e -0x0236226eae87b96a3efdbdb1af340b36ea28f2b864ed81c1e9cfaa969fdf85dd -0x2da100d6ba3826bba419050b25758a274cbb0f1c839365578511d6ff7e6ca5d3 -0xa5502b2357893e0af0d0a683ecd59269eff7adbfcdf49afa5f8b749a2f36a7a8 -0xce4e31dca834703b851721449be9f0bad0458b3df6629ef0478a61bcc280d7f9 -0x29b71360fd7e363754c31ddc2c6cb8f5ffe0dd3c54e9389ad08fb73649d134ff -0x2d7d9d9467589e837a9db90d1ede5ff006f884e0bed9d19cc8e9af916641916d -0x97bc85f83ae2e154138df1b961440f7d828c64c8dba30ab6edf9f833ed416041 -0x714301cbaa0fb4d388f0cfc50a684670a686d0c1a1ebdaf2b885b0162c580e76 -0x9f7ff3d5785cbec2c94db803b6b255548e4967aa676ad7e59825f91916b751fd -0x84ba3a9bdae6696590147924f2d4bba118e50260282fb135876997d72c3ba79b -0xbf55bdf8ba40c336df60192eb22cbe7a88059c203513d7d85bf67250863b944b -0xe413d24361191f8732c8637d7e4a39b19c354a5c7d9880fc3e2b43c871675394 -0x76395e26184904c58581ebef52297161c06d7a35f93171611bd0e6469e30b91c -0xcf46ca3ca36c8429af3767ea5e9c6df0635662416afe3ed1acb5671c96cdefaa -0x02fcf452359ad65d26bb2add808ef2b8c065398c07331cd4b1c8dc9a2e2f12da -0x09cfd75c66e172a04eebf6d4ca64632e010bfa2acf226b1449cb9dacc0d470d3 -0x5c7e0d3c861a297b10dd884222b0ee9e0ada5c50a8ecbcbad82bc7735068a223 -0x56aa6846c982e09d0d7b6a28766449ca513dc666f0fbe57a04219905ed71b0dd -0x1dbe30e460f9632ae877513e996f6088b64368c3b54e84c716057d37b74d2748 -0x4e2ab10190750772aa0b57def27e8160164c9f19b018b42984d23a83292cb1fc -0x7ac16d2bbcf2ff9d5750d535702d37ab094d4f01f510dcf64184312a2b38bb99 -0xfe914ad763e45829a410706d987706c6809f2dc174a42a2638e365771011306b -0xedcc203af2f58fbd5647a425b81148fa3cd5afb8e85420abb628e9a47f38f32e -0x0a2905d28b19a57c50816eec670da6e2dbe2be8a1eeb38ddd9ce3e4feaab4f0f -0x0422696dec896dfcaa26dbe158f44fe85bd43fe3aaf18aea19e64c4cafbc88df -0x38f40a5f45e60c53a8263ac87a1493f14b1db1c68549a75f38b878426f8b4c8a -0xdfa3b1b08ea8e63f67d4a6a838878402f93ddb3a57c39408b3d2ac3576cef755 -0x789c551e3d723d81acc37a7411a501e1491ed6ffab9c4317d7f4cda7bddaab7b -0x005131352bf838330d4ba981685b325f580ff750da70394a0545acadd29a4fea -0xed5dc25b63e7437d30315e31e7ee056dbcf52887a969db18eb6c0a32f81911be -0x2e7de2c906d41d20f1af794aa0c6aeacf26ad253820376d591ba481589135583 -0x275508b5ca8eca660ba29a90bf447aa0adba90985acaee4aae8293f054c39308 -0x9e59f58f9a7687c8b771722f5972a6d5f263cd8438f5f96fdccf5cd2854b25d2 -0x09c050dcb51f215984774554e432fa826e74d4be0826fe2e1afa229791d841f0 -0xe2e87d42953bbefdbc0165290eaf843927dea0560d578c1fd0917a78279dbddb -0x3ea228dc9fa0502ab6886b4de0aa918eea7c414f0c53ee344ef68a859ddcc658 -0x7326489a80826259f9eaa217b31af684cf5726cf2fe27e423d4d39ad0f29c992 -0xa3cf6299f597095725b62adb0868198434fadf758d177f62501569ffcb518499 -0xc6b86d7073e5bbc6f3c6a1bb577b5df67bc16c00e27d00d4c45a877500dc9a6f -0x8f17234e231e1d5f3551871bb7b475111925477e4ea6c9d6dc5454a34ff35ea0 -0x9b7a84a6e15a235aa669b75a3579bbcfc0b1b56b67578f57bfc7d8ceb63f9d8a -0xf3f89e6a51355910fb9e4085ae33e89dd74855c6d28ed3b2792349066088aeb3 -0x9b7db7c468a86d18ba5287f061845ccdc77010a315ff7a8aff7386c726e3d98e -0xaf3c9d357f79f976bc712d67fc9cdc615e86fb4d794ba581eccc30c92e1b3596 -0x0bc07228c42a97ad2e11698ab1519fda6ea3587524092e00583bd58247d7e83a -0x5014f5037e1209a5c1bee875eb2b6677e11136410412fe9ff7a07558c93a3595 -0xe4a49b9828185ef7a865835b297b1e2d031aa333f113a8ba02985791fcf542d4 -0x4b0b85becd7bcf5fd475d0dc3a3402a7534bd63813ea5fdfcd1f8e42298124b5 -0x2f2212634132effe07344748a9edb61bfc31fe2f25ac70bec429010324a3fa3d -0xbfd36b3ad04c04329d7f503e45e6a712c3477e332f1b7a5d4180e9c82832fe99 -0xdcb9c71926e78ec99257384c64c7f1c7ca49c13734c4fe8f75cadda94f3ea1cd -0xd6166ff205830c32ef3ebaee80648705f2b63020a39eec746c4fe9ad39e72883 -0xc32a2d03ded56e55d110c92a5be212cf5629fc16606f371fa0d6db2b2cc337fa -0x707f949c1376b052909fa26c17ac2735fca3ff09bc193e2be292769dbf2de8ef -0xdf76f45a22ab2de88502ff1093cafbc840fbe56eeefc5727a86de387fbff5a6e -0xa4e66846b3cbd691b6db4ef5c4222ad0243fd593293f65f3539664fc1482df09 -0x4d05b95a8842c8988941bf3d00b05ef0e9550e800a666e0f6e182bf27e5fb046 -0x3e59f3ce32934dc4bc1f193544852cba062fde948336d981a352113001066c6b -0x8c3b0504f5f823a9c44ad558a81e5198873d6532bec67ec01aa17416cb62d19f -0x4de35325cd181e2bcb6e7cb317f3517a2846b921aa79a9e98baf310ab84cb8af -0x51b6573fa96d609175d21a07071f2aa17e3676a43d28cf9566965d54f5e5bf34 -0xd4610fe1ca8c5c5f87968ab9df8a569e68f99eeffa886076a29e0f51e0f983dc -0x39366c31d616a6f0d7472c6fbdbc9eaf8a28f79b63a5248f7f4c653533262aaf -0xd08d20384416990234d36a1438586fd647b6094a2227c993617c6acebd287674 -0x7f28f00708d2208773ff7019845870cb420fabceabfa1aaa1d998ec418db5607 -0x045eb84002415cf0db8fcd3cb36e59d7f95ccf1cdb3665a440bdfa8036789d20 -0x7ac3d4d569e91202c29786f399442e374e476b175a10e6ea8e416aee5cc2516e -0x3274880428e4514d476e1765069bb70009f7ebb8a25ec66cccc5c3094e7dd060 -0xe7ef11524083ad45c15e8f272d7ee70a1f51df45bf440fca4299b5f650eae395 -0x0fa958c573ca055ec5cd6817fd1dd45b54b6daff4b922f3d4e17710b4210cc74 -0xee4d4bb1642b0c4d601bb63ec5fb28e81876b4d64aca3bbe425bf1407672238d -0xa10d0aca65d9713dccd00e6686a9a21de444c7825735fc2075cae07b074f9a2d -0x0832ad483122cb3fbf5bdc5b7f9a26892a6c7e5b138d29abebafec873dd4f8dd -0xe98e09595986be0e9194a6403d8f4c6fd20f0c13220b96592e8d12310b21cc33 -0xf4fea5f3371fc601d51125d332440b66ead3de8cd7414bb11e222a2b4ba71eb8 -0x57118cab948e7dba20ab48abb087de2b661be7174387bd42f776cf0a68e9a649 -0x1358bcc5bb75959d550aa5c47fd1f9e59d5efcc7468c47299e3fb630cd668320 -0x4c332021e0000c5e6f4bad395b6485d0f012c2c1aeef5b20464d334fec8d3e05 -0x66fa646c30d70cf914f135772860644744db70eb0c1699c5ba3af9a28495d684 -0x379179d9a4cdff6b5794fa97f66d21f9db7a69fcf85c7893bcf936345868424d -0xe05ab8775a41c1735ca342d4b889519bbce97551259e207e7ba8323b92a9f921 -0xc1246a2c62876e38fb478033514d1ede6259935eb7ca36ce7b2de30a572634d9 -0x08c8948451cd8c38764eefde57353244f08c7596c8a168c6695000d9de5c945e -0x17048a5be5cf24d8a31652d28c14d531b2894ca133fba19ad0bb1824bc87ca1b -0x3887a3ce73f9e4dde7535e46a74fdf45ba2b63117e3d68da3e6e38d71813d966 -0xb4e5abec54300a2bd0d5d20f2acc435e49fe60fd0af2d189bffbc215193ba6e9 -0xff83c0b185707939226b3df3c9422165dacbd607f9a8d8f9c6cb0b18f485d6de -0x1598fde0400b3640130f7be2e7cab1d9eb8b79594c0825c40cda01677c7065e8 -0xa88969a23565d5348a53c0612ec4160ec3b0ca4a613c2a9908399e6cb2f598ee -0xd5c89116a16fffd9fd42f00b6b4b81dd39286e4319c9895fedf9de7c7a16581e -0x158058818859adab4dc45598639eb0ec8e082547105b031e9d3889210841b5cf -0x20ac8ea123bae028d7e20a71bc315b8b008276c423fe2762de0895334b75536a -0x078c0de28e4422cbc680a09f5eda4443e522dc8180e01d97436d6665d5ffe2c8 -0x6a02d623f50af1170f57ea4f4f11fa4e57c23d6d5d089ee49bb129b342006c6d -0x5550d5cb483520a3db38aa1622dab1415e1c44d069d155de6ea58f95e2adf9e4 -0xc5701c183d5785d24a0666d0690bf0d8f757afce22f9711b8aae19b095cc5b18 -0xfbd63d44ed813f7addccdaf59255479770ab84354c94057459e0cfe5be6fb5cc -0xfc1cbd83bd2211d3b32b60da770321b1df118abeee2dc0cb17be58e4772a2c38 -0x6129604d271c3bc6ea9b806b0d98d9725b4e85767d4f8bbdff32b02207d4788e -0xe8d60142fda0aa56a2be963d06522126c5dc7d921934a47ea25c125029f43a96 -0x6878f877a40a176f6b30aa8c92e7e66e340f09e1e2f91445a98775c92969508a -0xa9d09670f26a37864ae1fb8fb58ec7c9c1bfee841c5480377566a3ebc8f2220a -0x235abba464612d5b2218a130e7a577dba4d52c96fab153e7ef5477be2caed58a -0x81c58ebb77a4fff569f1b2b49aad440c8ba1248c5f1f6ed31c17eae4c93f8ed7 -0xc41ed6d17cdbaf3cc9109cf40d989def9f20d272ddc56eec3b1a130bc5593bf8 -0xa7b1da3608de3ffff6bf3c45819970dd6419cbc654e23717e2ab4b6e627cd66d -0x8b21ca2fa8c27a7b82cf085e41086e9030d9c7e5418f3754c702c7a8283ac4d9 -0xdfff61a93337a7ddded293c355b4b15a45b1192fe92422c2f517236ba5ddaa80 -0x7fc9319ad386f8fec472ecad91b84e8ddf59b57e1b6004162a4d349cc8710e73 -0x124bd4ba0ec7a15d460de322f95f6adaafbff306996a5725c33ace3c8fee818d -0xdacc46ba4116256dc42d9266987636611eca7153e38a4223048b08609cf13127 -0x0827e38d5415213c84fbb7f52a263ddabd69605586f5093ec78d14cf14f89952 -0x0b21d1fe4b3e5eca7ef271e6e90ebf51c154d35d8a7ed686fc7f5d0ed2f7bec0 -0x6053cde2eca7b1c34030c5f8fbe24bc30d720c562139307853ca566cd3d5a39c -0x9f1afbdb75d5fcf9565061c7adebde45f9940a6cfe182a1e29fafb6ecd921dac -0x6e27798042169512af2c7600ef95b396e34061861dc8b7935e1508018865cda0 -0x3e810c2b6f80bc4ef027e3e3ce11f111bec87291015620df1348be1ef950ad75 -0xfac42ab480d7c3030524db4d9777a6871d86fbbf53bea4d9717e64abf96abfbd -0x9402b2f4f45eb3039406a3c17f2cdd628dc5f5c94a6a5a652c1f1a0a954bc64c -0x1c0186dc93e6a87ea9817e051e4160b60f4f024fc6d419be37fa2146f686901d -0x7c7eb34e2cba4292dd0711167785bc8a486bd349df9f98762dab6bed74d96b5a -0x6b241852748af841732a5b772c79f9b90d24ddbc75e831cefe2c43ac53d94ab1 -0x4ae6b9a5b5508e9825dd1f1aea49279d87fa698eebfee623ebe48ce3961b6859 -0x35ba7c8fc2324af3150aff1d5280115a84703a54810e6ac613b91a26984ea28d -0x7cce234b100fa2833669533a7348cde37a9d6cf1a447afd0eb0cdbf01d99ca5f -0xfcc312367148542247ed8166c40730d70d023cbde52e6a8db3489cee82bb378b -0x188147512e45abd7aef7f71297caaef67cada3423aa847f74abc08aa6cf32fa8 -0xd40e84c77023de792e321844ff7dc9934efcbbe0ab967a5c7b04b589d5d226c0 -0xa6edd03e85f5888359a72295a4560e283403e6892c1e103213487854d9a0d42f -0x892b0bbfa480db54d1f72014095f624f898cf9ad135b38ba38c8a5ad3c26ffa4 -0xdd292137691a0b75d5205ad89b62e0c43738009aa7045a66169eda663cc763e0 -0xec14cf896199c434e06ce167ba5f8928a263cacf44b92a25911ab62de091e880 -0xebcdaa6e2bc5d0f53ad74014f7d0f1e0a427bdf2ef749ca7211ab67b7ec4b211 -0x7d09ba54456eda61049043c56371d8968f0d9df0dff8e16cdbb523c4d67ebf95 -0x7c80b468ec6064dbe91e14f80e795ed8537bee4c394cd51188c8d28a03feaee1 -0x1ee0dbe8ada6632fe3a75e8e99f0687068146a19197e43592186be75f750a1ef -0xbf1d0f4e9f5223f50d7f89c47321bc26aa2623140defbab5eeb606eda2a6f6fa -0x289dbcc82ef01dfc3ec943acca7f6d0355146ccb396a18c90e8bbe76e7c6c001 -0x5c8e63c200e89372bef9ab46d2688922cf74282f075d4d77f4209bad22b049d1 -0xe1422dbcfd2966c2aa56b9212769998d0250b531283040c8ab842691d366d98b -0x565dd86923811e94d0721cae8389879cd1a146f1e9520a457b004bef7b3f809c -0xa72fcd406690ab87974751e7bd2665e3e1ebcc6023d1c5d2dba8b76af66086e3 -0x03cbac45b5cc6ca9ac171f04f85f849b1506d6a1ade180d4e5ad8887f5d83437 -0xbab8f42762909356bab9fd94029a690e28df3eec96e55b9d33f9ba3c103e3229 -0x3c494a99a55767bdbca958c28fa348f942c12c9d9bb3cbf003b969e8f69db931 -0x9c5d37a14fd4a5f5c7c3e455d68d7c1c55364e66683220a4f1aae42c7f58df26 -0x4e0e627e09a113c993d4d62b797a20cd09b1c16db8a8e82e013393b6bc021e1a -0x84f62a0e82a118d392f2635612917d4ce75b1882fe20e606f68ab23b5b00fe98 -0x180e0d54f99f8f888029583b5ca14e430a62c7742ca17bd1c5cd63512ba227d1 -0xb5960272d317e3140c152a536a7ba5ff63210c2e6af0fb892d7a8f0067b6c3b2 -0x1e7fd07f3f1f93275ea904bcfc492139c161280944ad58799a9da4c83db418c9 -0xa6af0ae7ec68030ef508451b26b7135646da3e9382d0cae816cf2ce02a7b1551 -0xbd52c50dd4364c8d3310b545637d7a2c6be3bafab5f2fb094070f877bf928cd2 -0x63087167dcc19c9d2367a7812c5d7866e39cde6c41191aadfa51a34af654ecb4 -0x3310b9bb5f88d0000e74d930b0b754871ad4fc01e19212cfb263fce57ad48da1 -0xf23d170d99b0e577db88003626d0fc19665a35db58d43703b523b752d075a715 -0xd19a971d322a2abbe98b8e7dc76369ca5844cf0aa87e97c400f097e569149869 -0x7972fafc00b0a5840b416dff01c7dc19fd66a9ddafc008adcc2b3e9cc997a048 -0x3f10802ebf5cfc9a9775af7cfcb18dd3128b42bde510cb981676c673f27f7349 -0x75261d4ec382c78394ea8b4feeb549306ddc45bbc361cf9ea3210679449eaca1 -0xf58a5f99d1f0661c75c15c64962e6f9460f4c3b44486d60dcf913ea4454772cb -0xf7ad409df876ff57a62213e7cb860f7e794193d48f68ed25f0cf49ae73ed79a0 -0x4510872f825a8609df0e7f9f9435dfadb6058efbe5edb5e37536979190b63d89 -0x97004d6fd06799b8601ab04b88d304c65001dbe17e751411c88ff69e4a19c31d -0x2523366dea04dfa8886eb41fca9d1c5ed20bdd8ba5f4638226950e7cd467bcd5 -0x135a06328918a30d69a18f5d89f10b3df53d3b710ef17023c99a677a1b95c4c4 -0xec36dd293752d9a759696d336386db113b7b8b8f40a8255b6abcdb726dc8dadf -0x2efba33674a9901dc5f33d139858cbd59a2b45774e8bc86a2092d5a534ab2b8b -0x076c6f6284721b1c702a7157f0819df23d1130dc42bb5365f2a41c558b5280af -0x4da99b11a2590b2f15a9fd6a67d1ff573f2b8f0b23a5475abbc09b4742bca43a -0x186319765f71b114ed396ee3f1dad22147401093b140b981affbedd2f1fc2f52 -0x5566685079261a63f5b354a0636024fb0223c92545ddf80dfe7161a18c5a07fb -0x3f2001074f06fe46c15f86687def2efbd317b94d14959e0c0e04cd8fed4f0ae8 -0x229eac79d7e11e393420324da2abb96834263365d08ae12e90612669a7137b3a -0x14653894474116bbefa550b5f0c4c4647a373c8de3aeb67a8602853cf3179bef -0xb8b8b474cc65c0a6d0f6d7a526bca836580841e7aa81aa03cd192c66f3726142 -0x0862607dbc28b40e7942dba0172de8ea4384265f3fd9faa817aa2f6393ecffa7 -0x13d5b5cc5ca0dfdc03e41dd648475a81b7c39baf9756301581f6ca465d24422d -0xea3a6068751eb4464a0daef9054b913fafa193029858c32d5189901d88517677 -0x1227bf1f1ca11494eed87309651dbbbc9b8d2395a9adf0b48c5203db6141b34f -0x4d6d8b52f24dc57464c8d8d24b21794754f3c0b2a437a7691712c53a40d5cf87 -0xa28460091fba75f71c7f61566f1217111861c292276c8f147094cfe110364754 -0xc9ef3c364cf48993fa31533addf5817b03915129ee61cc436a348affb7bb7a16 -0x9c11a078fb27d138983e707f3bc9735dc6b47ca7b1e21c7867957cd11aef757d -0x729d97cbba62f12ddff2015812e8959f47868ff270b68836592c39d32d030fe7 -0xf792fab55ada589af59b30dca31c1a910772d2c180a6b2e8dbdd31c518fb35d5 -0x3c0b9175402fad5d58c16f99fc1a58eb7b0046fd6f0571e888dd1adf9aa73817 -0xf982a7e1d35266bc1b5593815b056e17ecffb6f377ff797b862f63ec35cb8388 -0xdc9b808a9b0f90f96860fed64d61a528cb5601be2256ec8c345d5a7546dfc7b2 -0x930c8aa1c978784076318ff45895f4948b34ef9daff556c2c9a4b9072af70cdf -0xfba248c8f313cf0df783678c83004166d81cd6d2d3daff29bb7dae422abd70fe -0x96ca438d0a599d9ae7b6da6f1e08440af881d22c68729fd0ef56e739ed16d512 -0x72f9a789023596ed270f9557e19027e662b0eea3b51cf9e0ecb2f3ba3734a3cc -0xb49427a5a270ce55c8a684639304cd8ac793e2c0bf64fd590e78f3c24a6e9700 -0xb1147d17d8c8a33f5e7eb94e9c8b4d6538b89e9830a3891073d9aedc0b01a404 -0xb940459323ea9738eeb77b86abf9db4eeb7aa4bf1ce2ed6849aad714b21f5d44 -0xcb15f2b90e8002c7de3ad54e72737f5b1f4ab5b9ede581ae3cc6dd1319d20171 -0xcc5d8246b982937ae76666936a539dab7521613762a7642094be8c1a092d3d00 -0x3264681892b795888c25316ca103349bf503d595c8401c91dc028766e60c55f3 -0x301b841ac79c09a0a16a6ffc73ea718b88e9853adf62e99c8dbd4c3ca8310416 -0x3bd7b620852d99ea71d157f9dbf067378f4e76b2a0dd92e9d19a5f021d2cd586 -0xa1e3f4b90d6aeaee83ece261419e93a3c0a55ea5a237701aff0cc6a50cbb4662 -0xf498310f5e6115000b18a37f002666b1cc3bc6b25bee9205c565b5be48dbe5ca -0x6a307b88f549dd3fe61061cc9440ee72104c47782da1a51b964c3a155fcf3b78 -0x9bdb550a8693f6a0d9724299380547c6535f275ea9908ad82d1df3fad2bab502 -0x24c77b9dd3110a589e68253a1c9b156cddb158578d3bb64eb0344575b8fc5a42 -0xa3b1bb1f45c596c25b33b14d1c8958eb3c65f3ab3cfaac69bc94470b68139738 -0xc09847515829e23b57e86c591c80b6c07fac692e057b79a4c02908dd293ad4bc -0x4dfb60ea1dc92d16e3726ae22f112ce91b0da39522d729235a9125972421b730 -0x991f99d3004e48e7b94f5f5f46e53c800a72a54dca93e7dc019abaf31ff2df1e -0x6172a0bf88ce969ad842c90a6066560011472aef8bec8d6b9a94304ce1da35ea -0xa02f864eafe51d49239574fec5857431dcbd1521d998220110e08be3e899270e -0x415e9bc45c534fd354eebf824c7d5a3eafd460ef7ae1a70edb8a8eafd2e82471 -0x952b5ac12f7f076c0fab3333f9346e3df5ab31d8315653424515834e3e498647 -0xac88764cf517c29806dcfb7d12c49bd407b9fe3b8fbc9d0e718f841473daa91a -0xb2c5b57513efdb414fc595d03f5f8ecbea82dbd505ac46120b720b595ca7ff3e -0x1e22d755bc95731f577fc2edcb7b5cec452b3f2e743da849f3024b91acbec33f -0x0f0f66b944baf35e8e712371aca711b6e940036741978bce390551275c559cab -0x4ec2f3e16f3ad4fee06dbfcc55ad2d61222738ae61d26ef234649868d38dabef -0x7292d89410bd5127f450e350ef4d942b6809e2d94866769cd5d0c186f91d2c08 -0x2bc3eae29ea655349c3466fc7534601684672d1a3ad2532fb64d9b7de1575b8f -0x2c00b2fa9254f241de6297741920fbf9bd36d3070102675b1ea004dd6fbd680a -0xdbc4d500a4c466b8c5c0c9418416054c11b203f7ce8891b0c5df12aa0423e36c -0xc9cf6f69874875bab2d812bda382255764a183e5a45120460b3a86832672193a -0xc44b036ff96557a838eb792e434288f4f89659e73edd3052a413cc04166a7255 -0x928da41767c8e2a738497466be61fbb4d8d6a3bfbb44d9b7ed455c04db25a5fb -0xfab14af575d19f71921d20fb4f740a886fbb004da8ab65333d19c56219baa8dc -0x3a2cbd9f22082eae65b9b81616ab78d5d631e61174587011730ac55ce7e4056d -0x0712a0e89e5941d0dbe115706d5ee4ce4d9dacf829e95995a6e79f507eaac9d1 -0xa69314e58df0851a7b53830ab3325fc86991c7d62788a1b0359b724b84e87f59 -0x7849d7f27928d1963771086b38a410eeb7ad0880600de0e603e3ff26a44deb6f -0x61ac5a4a61903f9fcece50ff0cf61a4facc389b410c668c8482c0acbfe3e27b5 -0x7a12cf592e41b4e8674744ef1b73271cf1229e2fd62d501f11af431e6ba362e8 -0xfe99ecbfda65438cc5fbb63f93df8ed7e9d5b586fbebd4995bedb26611381d2a -0xf00377fa2d6396cb97208f84f744e95117a5c3e598ae85cf440abe0c21aba61b -0x996e8e82eacce9169e7e46b805a090a73ddb20c5e51544f3abcb191b991b18c0 -0xd8324c9ce5810f6de7a4d7fe0f247e18aee50267580a3a773ccff546b7ceea8d -0x3eda29cef17f4dd77624c178096f90aba44498c20d169f50057c7c1c316856fd -0x9e330ee6e09d45b6f5529f577f9e2c760658a7636172ea72fbba7bc5c7cd11aa -0xbbd656c824c3f0279b3ff5c80d5acde41ccd2633cd84fd2fadc6c09a58db2dec -0xbf79c698ac6a9d013062946817f4dc130f9bf7f2f04b6534d811a2003a69e203 -0x037644d0ee4be347f04cced4232ab3ca5701f99ae5f431a8fd76ad9f10ca6cfd -0x3c6b324c4e7c1fd3ca3d790eb75713dd56079314ba707bd3a40a45e1bc4a5b5b -0x8376bef8fcc3ce8a8fd4617d6337d2449baa1061a665431a6877b32b68f0c86a -0x49c47ed7d7c3bf280a47a821a0934906c6352d0fea33fdd774d37ce527b0e694 -0x1d80c54419b3048c6a915b9431260e1f907df72292133422e1a9df4d5a0e8235 -0x39e899ddc48f0218d902b1fb7ab893e72c60da9925a90990dfa4044d62f16f78 -0xa2eb6eff484d899a7c0e276763db767ece25df281e63b91f2d7040166356e7d2 -0xb40340019791a5c2e2bc3f24fcc36afec64ffab6076ec7246db5f70f61a018c7 -0x49dc0ddbfd0354cea8f8c23f5fc62c89c7d08a47b8bf26f2919d85b109373878 -0x2978223b7f22033855308203cf72328560ecd48a3a5bc7274127b1adb5daa41a -0x22a5c78a1c260cd72f0f6e1dfcd836be828a4faefe71853ec0295161cfab4ef9 -0xab42ebf23762e79ae5921f1c334faee66986b7f3f536c01758f9cdb7c9300106 -0x384e8f6fb1c03bef84bf570ca1a4124f4f013bdea1284f54d038fbbd7bd5e95a -0x1a25236c60920d7473fbffccc2b57c3f5f88467310a78e377d383ac7aea25f8b -0xfde4c5679759a571bdfb279c41d42dcb4f65beef053f3fb11fb581b03227d8a3 -0xd87ac56311f0371fe4e4fbcb7bc5834465da5d12379e54cd6a69f22e16388180 -0x2fd301ecda8c648dbff51180287bd68f57de86a26826c8c60105fe4c4087698f -0x3acb3534249e4c9491e5be93ed295c1bb64d6fc5d7f254679a67ca3c5a3e9471 -0x9a5c43c1f29b0c907d07a07c7475be34770091af465af44f28ac488813c9fae1 -0x9b3c2f70a9672a5826a2d573953608e5b09c7c97691d0264b15dea370bf93cc5 -0x19709be3519332bd95ddc0e7176c38c580f55738532d2c3cb3c3dec270b8e5eb -0xb2065f9c5174b80b39d675224091a1f00fe2d3a2f6747b450028e75e02bfcc35 -0x9071aa867a954027d685c6b6527006f9fb35627f7806b77453bb03ab288004f2 -0x004051c6c892f104e4e0411c02f5f5f44f59032d74f682bc0c90b046be791d1c -0x80f77dec5f5e7937b8ebb944de54706b85e600e93c0a71f8817a2f2e97f01aaf -0x6976f40dad1f3374a65959aee8ff1232079e9d83d3ccb09fd53f2531da1c6f90 -0x41ce8418c447339abfe9779cf4bf6533dc27f5b88ee7179a6482818ac8e19c32 -0x0a2a2c72bea9991c8f356021cb4473dfeeef831f8dc8ebf4e1f7c0ad2b5db734 -0x02c5b1373bd6bb6ff4e25649c70369e68b2a6ad5f32a8cca74c938c634da5b80 -0x1b8b02b8597ba4f4c5f7c3c5afe53884008476db2b87e8a48c5d73b65ea1e698 -0x48edbf38133456a1bee9aaaaa7e04b9a03189cc5b60cbac8af6c1248fe710b4d -0xa2ecf6da51c66761c81394225437fd6fc67ad2870f0db1c3abd72776f64310aa -0x341c95ea1cabaea3d338e365a2121a11ef3fbc66d331870ca330ab59eba5ecea -0x8ce36000b74f11cfd6d1632b87c03f2a2d966790146adab51d31d8399b760fef -0x974198697ea13d39510a20cc2a4d2f2e9ca7c0cd03e60a87b313333815c78c8b -0x56272349eb5d69fa7dfeb15b2e11bbaf9b106ff8dc1bd9021a1bac58abb7bde1 -0x77643b92665d82603c240a4209e8b823d58dadb0570b0df0eb9d0b37ebded825 -0x285e56088f2b7164b151393fb453aab95f84cee9a42f3a4077a3f924a4b732e5 -0xe77ff5174b1e6cdaadad33d93e3e087e3dc9b45497d8acf0ce055d0ce8c80107 -0xc1d46750b56561665f3b07112715206267442fc7dc842e26acf86d7f11169c56 -0xf2c816422fccdc6dfb3f12722568fb01406fe1b5518e8f0d417c1d76bdeb26ef -0xc8c4b3f40e4ab9074e4492c6bb2387a4991f315f791c691edfb97fd7e849b625 -0xe49196f8cfb4513ffd5f5b182a6b4af278f7dede3d935df1fdb59def4863eaa9 -0x45405ce5937563774472c1595970119f0b53a0d743a0416385a5d4c56ab38d6d -0x8aa955c462c8c940cb7a6b07748855073e47cb18d4d7e3eb8d080de0b6007ab6 -0xfe164ce05f29c029e7912a94a5be8168e1aa562efd2e00d88e44af629ee4d633 -0xc1c3c110bf26bd20029c371ad294931fc027198b0d8ff7020ee2433f61c596d3 -0xadf249092a7e832b7a0af796ef4383f08594f1deb99f5561e74fd1bd7b85afe6 -0xc54e5353c6864dc38ff31f38a4dca2cd8a77c4a80e600e70d79022923c31a104 -0x9c1abad70869acbe3a1a985b23b4490d61056b2b9112d4e4bb9be5f0d0f38838 -0xb36f355ebbe204573685bc3855e2b2700666b230a83c35718acdbd426e6793c8 -0x0b76c1dbddee2bbb0168a91695cf5e7a513611acf2483923d567381b5ca2b334 -0x80668a4ce4d2d8a3e2cbf698cb8dde051de16c8c3a4206c4004a24179ab048e8 -0x2e2acacc2ddc708a0ed05f43b9a60076783623445930ced8c39c7b03a6a5af3e -0x712874a5c461fd2ac72b58d2b61b65ab30cfc9774691d5b0af7ae88865e8b983 -0x516672aa7877373bf4ab5de43d46e13ee4d7e0be5544321f1b5a90762610c06b -0xc908eefd070711ab582e8f6ead4bea60770e4645179fc5bf1b1975a7db549860 -0x0fd61684e9fc040beb47a624c44c386627e5a5d8b57fd7c17b5159a3cb3f7ecf -0xc56b86b9c51fcbd8295cbeb9ce0e4078de364c1aa5284ff97b0dffc622aba4f9 -0x8221072d0fb8e8c9496dcbcde6e413608594434f7e58417385e4f9a0ce14802f -0x937769998849a02dea640f182be6e37a0bed655789bc65bcca559a58b6d9f975 -0xaa7293a9bf039cdcf377df79f78c071ef1ecb8140734c7f0f10a6fde6ee6cec3 -0x4db93c5321c52803126b92d7582e0557a40b19119773f8c662269bdeb8942ef9 -0xe32086496de01764761000c4df2f7d21f0eb2a0d41e954225752eceb592c1a35 -0x4c1b5ed78d3cf2bedacfbb79f3777ac2b1be4cb6a1c25d9ec76a758f41f98bc0 -0x9854b2978958368a1e0bd54898c3f3ba17739b7589e8d08b0132885130f2e8e2 -0x23bcf77dc2c8065005cb53d001d6273aa1b6a7e660d25c37be5bcb7d7665f32a -0x4f74f2bfafcea1e9df0ae39eb752a058d7c3ad025ddef5292426053dfd8fe62d -0xe62ace3f763e6e7a30d25fabf7629f8ec4e8707f80636cdf670db757ff7ff17a -0x5c14f2eec89e9e0212984a6bef3e6e94994b81c2edcef934ea052cdb3541dfbc -0x45781d31a750540bccab7bf964012b9c39864ee650e6aa0a2e6e6e71679b32b7 -0xb707c2608b37ef5c2002cdbd67ec8d43192b85d1798e40133625238ea078fc1c -0x608ed4af31ba845601806f413f77c3301ba10ea071eb6c9acabbd41460072e43 -0x42b03f6988973c80f15383900fd233be833d66e29b828f0358a6cc89b0c44ad4 -0x0db40b76779ca24d68cbf07041933a9832e62ae88cebf1cde8c14daac3677f97 -0x1596145ae5989f4577fae91f0db122fb8575d09ade268b75c6ce86474db34b12 -0x7a846762250c83c169790f7b40a08233f568e4b8c7e60ea0cc5c1fbe77928712 -0xce20c37e40185896d2a6afa22b219de7d9362768a95543fe3f37adbd9878858b -0x3fa197d90731e7d0b3ac89337b8fe01704ac0a5d9c50c1606c0d273ac51c9dfe -0xd093856e04c1a74ce33468a0c8eba3ab3d9f03505a8378ea9a5271010300a946 -0xab9903fa75033affc98fa6cc0314c8c6abc3cdf8723f573c29c17bd0f84e0bd4 -0x7a9e23cdc8bb6a43e53fb6559a273422c96d76b284f86cadb2d4e0237b764004 -0x1848565c8cd4adef32f9df0849820d7683d072e74515df66e1d29f8428fd417c -0xcc7e7b2a67e211924d47fcf775c38dbbb3d77426ec17ca2c81e4c2af5dd8c7a5 -0x013a99ef44482e525fe5e900592465b238e2e710899d71a56144c22f507adfa6 -0xcb6f6ab8d071e7f359edb861d4bfa6faa710ca0596bb1207b49681b370005241 -0x801001483e7e49cb2663f3fe2120c4c73292c7bc443d50ac1d30427b1d7a88bf -0x49515b97086f23592662f4354fde86113fee62fec2439d85fda81da5a81ab538 -0xc351ddfc6a5b1ecc99de369acb1cf4b6fb0f044d021cf92a4a3f32dacd044550 -0xb8c20a2386976594966c2e53fe451fe462d14259eab7c85b606f8d9562b92e4b -0xa2fa79e5fe20b50e1d874e6f7d6e0e4956bf9d97fed906ccbeff3b6f678ac463 -0x7e2c07042eb4df71bbf6dc108c8684fb2db8262cea88da4a4c628d6026d28b2e -0x1bb066314ea909d6752350df4b766cb996d35b9d8d7ad3f51094f855af5c9fbd -0x535921c29939b531fc76fadf4b05d44241caeb42d564fdff9e0bcfa23b4513c3 -0x750903fe5236ebea4beba87fc0a4edcaff2cb5c74c106eb54aaae13190385ad4 -0xa92df61397168254089735be37fde9dfaa31f7beda8d6815ffbde4b1dd050334 -0xf088924c10712c52db2055fbc16a1c2b068551b1e1bb8421fc3efd8431f828fd -0x00309713ca4d5f5e83e512b08ab5be52a0dd27e312617f0256d8978510abe061 -0x09f6a1ba896b6972605ebd97438f7269013ed914a0a4bff0ca40755efdd1c24b -0x3908c76954e78f77581d4c1c9fd989075de4bc536efcb2b3460b8f6d16668cc5 -0xa054e9120b9937e8488507d325c99c30eed78e562c0818ab20fcdc20c15bb4c3 -0x2caeff6ceab3404e9bdc613ba6d3547c1e4f8b0cd26069ad1469a03609407ca9 -0x5274a283b149c43fedecfa32f8d6fa627ef07359a8c7145ae4853c2ea8c16b8c -0xd65c663d52bdd4c87426788af4fc9f1aa9a6696ee8cc200b37fb6a67dd286f4c -0xd703b042605452f904502475708b0f9027830f40259f49aa2eac9b8ba77023a8 -0xa0eb3cf50e1c5ce225a9935e9ba2d0041f05b007c13ba0267b0ad7f80a4ec086 -0x03e471265b4d26afd862a80aa364c35fcd769420b245ac83a4e858664df6b7d3 -0x775690ec3d197bf97f248ecebc5c87de1296528a4b5a805b05e25b820b4e81e6 -0xc7339c18d46e7d4ddea21a83c3e8715add91c00ddc1bf187eecac822d8e849cc -0x580d9679e19575c02dd5cdfb6a77761867363b622650e44923b4e836dab6c4b1 -0xaded7912bbf5fdc488804606b9f9e31827b541ce3e5769f966f54adb085578aa -0x0eca667f19ed969a3bfd26a321603c77660abd5a09843806b043d07086cd798a -0x2088bd59eefc07fad5db009c24a7fd71a5e527215a2ae9c8664ff050055c7d87 -0x42938a736ebf7a61cabf8f9a3b659d32c25b5c1c8a5d56b87f3f7eba0b415359 -0x87e6f0e056b6160566bf102e575b66b5fd36fc9c988dcf18ab88fd26ab413675 -0x851beff1aec5c481facac1e42d5f27e176259d63ba5ce074a1ca0a91822d6b00 -0x60d5153b200ea653cebb0b364a42e698188d85936b4162e3291a18d91b338d46 -0xf1bdafdfbedbde51e7d5f3343bcd358989408929b196caa978d9b4c51278ebee -0x54b69de30549b7ee0315a7260bc994e666bfaa8026eac1034d38f5fc5c812e64 -0xf981cb4da0834aa43dbff1befe4e88b5f2cb19ba691d84c8e42442c4673bea34 -0x7ce6d46610d0f030119d7177873af648824b0e64c5137381e2ae903f476aa462 -0xbadc7869ce04bde35fa8fb5524276a4633c245c84fb1ad0904d6338a1337bb30 -0x41e94a19689db880a93cbe85150c438e6324a6d293a31e3d38794aafc856c250 -0x8040c6089d54e888ad92090cd4f7db4a227a75598076ba736216d8106979c9db -0x9d53ab3c7a66f9c94fe721a30a0636338dc216b15d380e1813b411e2c938f9c9 -0x2a52309e00e6c6feafc14ff543df9cc550311d8ea99e6a513dcf0753797ebab3 -0xc89d18edb7f6c09b5db2b2dfb5fbac046455bb27f0287bf70f632ab9d6b2c8c4 -0x8752ff08edc1581ad62548a82a33fce186964b0980507c882c5950b57337d7c2 -0x095bbaca0c2a9d39049a19d48c889afc96b01e9728d61508b6ffbe040c78c033 -0x0e95f7fb03cf2d122a727c0467779f240079315fca927f185b676f7e3e6ce296 -0x73cd9e9ec43d21818bbc6d9c3187da749d294491b076bc762d5087928f3baa80 -0x9f74a3d6458abc4aaca146260ff4f7808b60e9b71127de561e98a6051405850f -0x0b5765fe6a34d38fb097529633274197a490cd65035faaf24dabdf700483c3ce -0x23db466b765059660507ceabb62f7addf1c532ce20356bfa0adb9a9ce35de8c4 -0x97971c44613fd6bc643c7432959d8d11bf7bb4383d4bddac543f0988def3b9c9 -0xbdd8f8c82475963115574c9568fd48d957aa93d8e04274407547c27e3145df7f -0x0f74bb665b6752e27b7d11c27e68b5d957963fbd8d21b7b15889ac833442ec22 -0x334cf92e954ae56dcf898757d00b6e0d173ba93c936507b7fc470bcd445e8658 -0x27adc4769ddd5b659c9455347269547f84390cdfa166e0b1c059de61e127fae3 -0xbd84fd2fa99bca6e280e07972090d4a8466563c0c920910de7b4696da6c5ac40 -0x3fb2b13b6304586aa915ec4eb0dbb2ae17d1d57bdaaf1c93f955988d3ba890f6 -0x498e5f87d0a8d81cde7c86d97a1cae0882d6d037cc29ccb9f3c4e904154fdd44 -0xbcf63934ab5c3c0361ccad3b29af09311903831d6b3cd9ad56b71d9ceb4d208c -0x39465fe9d50345850a6bec7b06733af93ab02134d700a222150977fdacafae6a -0x72b85b49f87f36525294a1fbb7300e7b9269e24ba3f3c45623d152fa2fe8ee04 -0xc2624559f34dba7c7ddb4e36a988326e0c62edbc88c4133bb1830cd6bb29eebe -0xed51b769e0947cbd8a82888c79e6967ee54e1a56d84f14ff5e8bb2d477767d70 -0xc48aa94838e9c2ed7f0d232baced7e8c1e140f6493b36f7e06c530fa18bbaeae -0x64aec740d659676c5cb86b155d7bbe3655251cb21ee61edad6284cc5f7e61eb8 -0x7e4dc09549a5a171c6ecd64671a7cd57cc3222ec99e0f344bd1a6cf753af73a9 -0x8938b7d6dd2ad835fb83d54fea4b9b44322948998fce0af89888d9b673be23a4 -0x034ad36247b0b2042515d89d4a4b7226c40cfb1219deb1f1e99fc4ffd2e1f476 -0xc9d3caa2e1bf8c0c3b71677e51ac2d5fcaad07c6357f9cc2fe4db1d390a4782e -0xdc0e00b2101cfa68e9fb43d912faa7ae54aaeeae74cab7f0bd62ca4082198a72 -0xaac86f52cd82dd6b2a9897837eb1ee60e4ae1db4bf9a5f43206d1c985083897d -0xc70f7cb8f8d7b28290812dae45aee4073d045b530ecc6d54948b06995a89cab6 -0xa49483c2114c59ac45c78f4d8fb2674f85a3afca689dd97de00bcf6a65e632d8 -0x172dbe1bf304060a063235aff642dbd032e7bd6731590432dd3c742b0b939a2e -0x6957c648425c1ea0418b1e775077d2832970e5f394d8518fae5789067c4b8ef1 -0x73a45a4b50fd54c1e50b37b2d0eb457919b53834c9bc91dc271e7c299b61c3a2 -0xf247ae3d3c9fba630379fe71a036070df5d15e6c0fd19b1834d7d5969d43d363 -0x31666ad7dfd0a3edd42021f0562b1b66be0924e2c00f7b3cd3dfec66825f0e26 -0xc92552ad02666967ffdf2d8179dbd3248cd1da817a546933ae9e7cdbdf54118b -0x3735a5eeadcd7cd407ed61165fc7de9f668e9e8b813a06cd52f635749c921836 -0x5216dd4c00ad37c276399da695aafb5a6a4407e298eaedb3d56d3c385367ea33 -0x40a4affe38d3be4ab6231b81294a732401c6e2c21d89a9f074e0a8dbcca300c6 -0xd72bb38049733b94f69ce2655a74212e9663eccd33243d97142e98abf79f103e -0x127aed2ab3080aaaddd41aba34d30f21654b5c8d5f903502dc68a344e67c76d0 -0xb575e6a93c914bda8b870eb6cb16f19aac9ecf7604f4b9a68b0646d1057474df -0x9b2d1ffd59fe4ef06f692130a574ab528585af14ff3f5d77873bed08febb7e09 -0x32bb9a18e4730dd212183413c964eb95d8e748c0b9bacc2e0e617acd507cb53a -0x61981bd2f96e4e7d98ec2b7d7876eb97ec3f4a34a1dd6b1aa5fa55421c461918 -0x8b947aeaf75658f0f36d98c35140988fcd6b518ec311063bceb379e23ef67d9b -0x935e68f5a7c92da4277bcc642f3c3e4bdd9b32b8904c9cddfb0cf751d5f893fc -0x805fe0f34b966dea1945b7d7ae01d1ea28905f928f96d6ee544bee6539c6386a -0x79ff7028842326b0d3a96f999d109b1006468b821f4a13ca896671a326cf7f67 -0x952e986e23112e4487c78348b2d2261b26a67fd6d910d545cfe59544036b9df4 -0x5800267335c8c2d56145a2ea492abf08c6fdfac4e8013c2a0138e3650efe2ee0 -0xafeba8e212dcccc487cb55d68358440814591c1d990cb3ccd1787fbce1f0f289 -0xd274627427b634ec0f42ecc42d1d27890f54f89f55c75b0e8eebe9e557f9b0e4 -0x8d36f548446931e126a25f98d2163f7850ccaee440f39bdcca74884c567cbae0 -0xce8dd9b096bdbf0074e7dea5a6f9f61443bf0c34eb91dced7d9009f8ef7026df -0x3ec56337efcf45ae836d98f50c01fd39b94288d6b45069698cb33e6210d48f43 -0x4748d3882a695fcb9e75d6bafdead41de99d33d8f89feb02f33ac4c2ae0f4dd0 -0x63b9ae1f0543d512f7202aa6fdcf3ce68ea577e532f495055d8d55092c8cfc75 -0x33684a96ea8449cfe6372b7ec44a1993b09f30cb8923d02c972707d35476fc33 -0x2d143d85c24d5b81c4fbf7d2f66ca221dbebd03be4ec5b0e005fcd134d8c63a2 -0xd944df62cece0de0dc1019fa9e12f4b09d4f0a301f2cd7074c89044da3c0e888 -0xe241074f202ac14d064ebd2a0caea656ea85fd26c6253dc15f146bc60522e3b1 -0x89e6d3474cad59b95932ea17011239db566a11ecd079876f0133ca3d6c87dc17 -0xee112dcae069f183328be7231b3d6ebc8d4c0712eecfe191903af991d558eeae -0xf45f1681d446e8b4bcf6f358c60fda6518c8cda99405c3ce510bcc3a32e170a6 -0x9656763043577d24317b36adddf3c7f1e2e96c3ed98bfaff629902f3bb12c815 -0xa63208cb8a61448645855c9ea8fc4c02bab299d91775739693561f61d1e58b10 -0x27cfc2e3ed1585c93973c2b08efb0da6e22d1ac79366490b272013479d483b68 -0x8847bfa03323e28455218a167d971edec9f93b82866366c6ab8eb05aa3fbd953 -0x4c6b3af1dd0fb18d14e699c75398892d95a3992c0ad4eff7669d9202241bbd34 -0x838c127081c3f17ba264920d90e4b47035bdec3bd1b90452a047824e74aebae1 -0xe6d9282913b59470a9a99d4148143848c8bea9443b6268fc24797ddebe360687 -0x6f696ed1fdd0b91d352977d53ae911e4b3669c1dfc6cda686fde219ec7aa817c -0x598034a6594955d585eb7dfde8bd4d8dbcaed099b0a8dc9aec30a8a4ad93da40 -0xa5ca901690438bbc63b7ac5ff63f07276843a89d8c629fabbdd9a9f0c3f0b336 -0x8d87b747e4eeb9f8f7bdf283900b75a3c887108445394f45df80c022608b28db -0xde609a801bb7ef225762145a5f3f8d4fbb00b3e362cc3c324951c483cc42a30b -0x5729ede6a357800def49ad8b9c7c0d7eff7f7658fda7cc1dce2633c2ed06791e -0x92dbc8e695aefbce39e4edb87545357fe6a15bc58699bed5fb9d075f294d0d8a -0x94d3fa4e4b2b95f94e9a8c01b63493558e937d8a161344b4c11da713645a58c2 -0xa9faaea971a85dc0834e088c8630065b292eab3a7cae58e385e54230dc91ee48 -0xba895852a9baa3e692951bf33a4c2ab2c7a340419e7f3d091ac989c7a71d6134 -0xf83c3f46c1116db2d58ee6365427e669d7873715e23cdbd1c519159ad5a5e42d -0xabdb10321ecd00febda7ff21c8031fbec38aff4317b29182edbb546d40bc78d2 -0x1794a27d6b81531df1703bd87c3f42994bc46ea6c08eeb1eee33f20df3474f3d -0x0a5baea71f60cecd9d82ca32ec1f51c763a5551411afe9f666157cbb5b475423 -0x533ab9ed006947ce2982cc7885260b1df98ff4faa6c2f3a106d1548ed0b867c1 -0x9fae82aa94a03377d9d959c2c0bffcb47fcb128e18586455ce3c2b99d8142054 -0x8ac82247630b0bfd3778f9fed9120cd0ebcaeb61fc47e03cf0f8b786dfe6af16 -0x11d11e53360194c18517b593db4c063fd8db1d635bec316d5d6be7b53701cc53 -0x8062d529893add72f7d4ead9aaa5a629c00f4b65d370900c5e71ceecd07d22af -0x6bc3d09a76a163ad795031c70a0d5b7a234c92b63d63844b23b88a519afc1a85 -0x2663cda47d3ea9156aecbb7a9582ba4b8108c9263903eaa11a6c5681ec035755 -0xdb953a656e8cbb62541ce85a8039e78854ecd383fe3704e7228084cdde1952ee -0x759dc856e6b568fa7ccf9c212683e496f22c77560868882770a10bb67a7d2be4 -0xa8d7eba6c3428110199802a19f3f6dec81e7493bba64b200b510a0015bd9c8fd -0x325ebe612c5c4d6ef5c4b7061f2aef93924266c6fd784830a1c892103cbc2118 -0x298d3881a9e6b3401eb2ac06af5c965907a4a5473cb6c18f4423d6064afaaae3 -0x3787b812196f67ba2a0e0f530de73656074e5bcec10dcec710d2374edceab4a2 -0xf9fbe8fdd4c0a7a23c50a2e45114300b74ccad3b00f8e1503b304763b45c4161 -0x2ae16f2b94d8edfa0194157251dbb136911fb86cfec2a93898011de059f118cd -0x464d5d786d1e47bdf0254a6756661185af8844ff588fe86c4ff10e5724c8c9d6 -0xcc2894245a9cc3fb375ba842ac1212d2a846e8e1ac868b185286cdbba83a090d -0x9a265e7befe60d90a4b69e7fcf2b23fa11ec5c8b64ca5c0cf1e0db63847db9cc -0x2cad9258339c95f9d07908b1a22d0404201c875ff63722f964bc4c5fd9f1a8a9 -0xd5ab8d819e80b5316b901d28f158af89c2cd876e5a288ee79feba999f03a01ef -0x8540780b1226f702eff2452146c34e19a6cb57a5fe7eaa233d4d0ee4627bf09d -0xac0e886fb6195daca354a765f08aa35857a745c2265d5cc33f7214d066d4ec5e -0xb574c915ff0ac1bc0d28e686ecf387f708df60a79244a67159cc5910a48eb775 -0x8d97faf4d274fe08bd427e779e3798ae04998f80b83ec4c8f8083cd46c98552c -0x11e353f5d486e2a3dbaad6d758e5686593158be5c374277ae7452c0143cbdd22 -0x38860085d367b539cc23b5e963552b83785c144499d0d330a8488180e4c5eca0 -0x250fb795d44a522f85ae0c0f552e101396c1a6e581c4fdc1c13ce4ca812682ce -0x41c38583569e00a0a592d3656057335f57e4d022a5769f266e215edb61b7914a -0x908808acae1ef7fd1128be2b483c7469d71295a54b2f821b345ea18d239f3a00 -0x663f776cb5348c0400c967cb85a5aa01bac35615d7b0a24c2d15221099c8d4ad -0x277a5a9a5725957a93330f7983707aab72f31f29d8365f1acfde1a3bbacda4ec -0xcce821d45e3bc5deb1bd3e60e80e7ca2b5b023c665b021e8c5ff8836f4fb7735 -0xdb0584a13a16bfd993af1b46ec73dfc549df55ef258d8489a2ff21d917dfd547 -0x8f459bfa251b10bb2e58d639aae37632b88cb40832de076a75cb37ee61e4f62c -0x0556c0d9d2a09ece00cee5471ffa1000a1f240ca296c7a06a097cdc342d09a67 -0xcca2a0dc2e3233095df60069a1953ac4eff8d20df804b0004e3c18d452e6b718 -0x1dfb103399eca5a3fb8fb7d2d506753e51b2d288ffdd7965dfc634cad1772014 -0xf4f7e7477a67c651d2e3aba6d4415d53bef39e09f1efe8ab092caca49a4893f4 -0x4de94d5fac29d5c33507aa6d7126a6c3a271dad9e0fdad39bc904081c7a90d87 -0x04e037cacb49a940a1a46f90d50e4f75ca2d322008797c3bf53368408d327fdc -0xa6293edb0899ebfbb1ff64eff07e5edbd4b61f64388848fd8218fb551d558870 -0x47c0e91d420b348256fb682184e2b7f50da709b43a1729e98f48d34c50585671 -0x53cddd11797107f9d318d1c0c929a70fad4002147d96bcb906b701911cd60fdb -0xec8ef3d7b53189990a75476186d4dd37648c3ba7d114f811d544f0116854d6d4 -0x922f31a997e98dd7162644b18f72d50c15ebbe898e8ce39c1cbf0203479e65e2 -0x5bcd033828c62ad635224152e747a677fda671944423f457793ce4ab1fd50941 -0x91f3996c5f59081c30dc4e70efc0006755b9f7412e91037490d55d407a397fd3 -0x99305591271a912b45eddd01c7d41284e78e067eca522444e23d9504d3429a6d -0x1b398af05f7efeeafaeed55b4dbf7fe0c034baf1c28fa193a1b7a5dee5a683b7 -0xefef6e062ac396afe8afd7faebd9416798abb4c268e25863d0fe42402f2c85a5 -0xfc5275370ff0763484932636932a6adbdf09967e64b488e407e828e6a0e0a288 -0xa2aaa8ab2d669c6f431abd60b59ae15710a7c664bb70b718f81c15e17129f11f -0xb6861e75b090eaa31df7aa4d0c23c2c6aefe9cf5d8e5a3a96341f7e014737ba9 -0xbd0d9a6e02fdd8fbd81f7b6342cd1cd4f8dbc78b0e198ddfa13683645e206ad5 -0xd4bd0c257e4bf40de152e23915828f21752c1ae52fce7bbe0cf02a27e16dfa89 -0xa940b2d050367adba7fb6155b07797e2a9bb3626a54ff2cb6b5701c7f4096e77 -0xfb2145f7551ec5ab1479526af562bfb492661c74943d0fa83f492440d2f68f9e -0x887afc04dbcb925e2a7342472059be7e0564c38a9cdf1af9090371a0b1412b73 -0x0d6bc9d88fd7135924d0466285d9fe601a5560723a62423c2564b3ae6bb32d25 -0xc05f8cded1e4a4a92b972f5c7e586cc31c049a65683dcb9070d8200bff4ecc40 -0x24e64616fd3e425c43332007510e2b2d5160afb646ab5d86b1ae25c08dbe69bb -0xf3f165feda1f8ad87da85458800ad04059ea9f37578b6dd0bf642eb1c1cf6416 -0x825baf3988acb63ad63a28ab8d0b1d2ba8ea6c821dae32aa874b69442d117670 -0x3e9047617a89fc786f26995cf9cd15a6ac8f5ec91d8ad0f2d335ee9d176a0111 -0x17e26a2716b47c27c1f9e02e6f6f58e0a01efe2d3d60b0f1ff6a2b4a56622c20 -0x9d302dfff1d6f56ffc34bae1ea2f575f7d0da756b20286113ce4aa0dd614ef0c -0x889edd9d5147a6758e28cce00b04108ef711854e889f5a5eab119752190abecb -0x90721f62e79e968c35708b1301e7ce38cb72ee4aa623ba04c5f115549675e98e -0xfc833a2e543c374e672f18cf48129308a746b0aeb6ea95eadfebbd1df44e3c70 -0xe4c6571eabef80dc0a375b69e5681828b00350795e4dac093795b7ea1bc02de9 -0x8878b026e2f8f5abf4028d41057896564d79d78dc575e1692b212128e92b4c8c -0x2ffc1769a98cc3157a5d3e5f35a50910900c8b2680f4b607f29316287b0a3cd8 -0x13d0bb09926fb3054cc6e08cc9ec263a43ad5523396e572e6fefb93a45e3805f -0xea7da59cfa48d3ea55ced28c6a86376f9d5a67c29645f8231630cd60360dcb67 -0x57df92c06d8c5a113cfd018e741c22f2f8e9fc7d744395363cb706931773eca3 -0x7fefdaec09f4e173141b20fa3e061889484c27f94989a539fbad9dd5254b0681 -0x45fa60bcb3b9d83e56e9680c1969c7f80b5ccaaef8aa68bcd8e9e50236948c1e -0x324f9fb4ef043c3c66ce72c1a627fb10573c0dfce2ff871c8edc1c8b3f370d80 -0x923690299d45cdd4e88bf1be78925fbedaf2e6fc57500021fd23b7d4ddad6eb1 -0xcba8d46c3fa8c1b749e385388bf4b06a09623e72314ede6ab6ed2fd1e4103dc8 -0x680e8c83ed96a87096c774319526d49db3d10645df048ec4630e4362bcc47d1e -0x16de52a1f3ed4ebd9bcebd9b33bc85b0186ff74ff547174e516ed89c315f5d9d -0x3cc80a2f94ff617966add4813eeff21ed7d6486a0220b2d96fab84e42b695140 -0x3be25dabf2b26e61030db3a854c62e501207832322376a8284352aea59eb6233 -0x9340398fdb914cd80632bd99785dc491cfa2018dd2cb4f72ab4349635f9e92e4 -0xa8926deadad17e118e36c68b91eb38e903634dd9a12f2232261ab41a0ad774b3 -0xac6a7f59e39b16a1294fedc74de33cc2e61cc29d72f537db400393ff33f46b4e -0x579b22698c013588fb5ed53e4cb958b9d91df0210afbe380b32260a290bb93be -0xdfaa796dfa708453a33dfc42e5b197c69f4642fd973b1e3f8e0f88e5d05c73d9 -0xaecedd446b6a2cf18be85e9bb826131559358268dd83bdb3154cf7c6a19e5d66 -0x50869d279f0c6d85d5a0084a6c66480154013eed2ca84b63d9554fb9884ff2b7 -0xd139e9ac5c7f33e347551cac012d758f2400506879657c8bd53d2862eb4bb44a -0xe4e06329db3d2fc53ce641c82d76b36f073f59c8f3b7833bb772aa9f48863b4e -0x9c024ebee03a19794eda8a8cf3d72cfd299a84bc4fff735928f61392105b07e7 -0x568d050dbfa62cb135a8d66e6752b4ff1dad2158cc6229908b77c12fa755aa66 -0x203981ecd3f04b90253c3fc79d903105a125e71b5baa543b05cf861e2fe2a92f -0x8ffa94693b71a49b3fd1253af6bc8f607f13d625ad74141756a680783e8c3884 -0xdb3a8b7940c2f5830ea499eaa95274c040339913786ecb1505c77ba1cf8fb8a1 -0x0883efcc81a2106b7c44cc471eb92f863db0613d382534c25489b10dc899e172 -0x818e39dc8cbffb284ad0ac7f827a2bba5390374f71ea72a7fc77ee9bd642b233 -0xfc01c150dacb8b8aaba1a4f0bd2f29052b16c24666a074812c950a3110f0e324 -0x951fbcf6a925d49900606a8e1176fc214802486a365624448d2c0bf352110518 -0x67e44b95d2ffa192020bb3aea574339df54ac9a2185a39b4591410aca9e2c062 -0xc21f875c90f4c73e2ec1a57ea3a97bf03bd7ac31ce4b861b30837f5cd0c52e31 -0x3d0074e9efe63c652da9d3667042827de32256988a47c5cd0228c31dae387483 -0x1ebc539b212524004d8f13ac5d51d8cdde12a44e726004cd8c3af440970d08f9 -0x38263723062fd8ffe876b66138bb1f8846a09948e6bf56ffdf842dfaa40c01b3 -0x52ec765dbfed0303d3b7abe53dc3bb943bd7024906a34c57642e659e0c425af9 -0x2cae09d4f9fd4d507573fb94f8cf13e822cc08cb62582aef7353ac50d91ac01f -0x0cc18a174c44d761b6a0ceeec222c75cf93e73b01c5e5fd3ccbe4ab0f3881f15 -0x8ccc848c1425390e6e27a24d17eb32ea5b4a484d6299592375bfdf4fc4cf2633 -0xb5e74483139950e9f9d3868f7ab331228610405fd6e314b61cad2a8e731dff18 -0xc0f33014aeec0b33a9648588a94c80fa7bcd1547e75dd4039cc10199f40ee593 -0x55bd68728b8e0f1059afdc8dd4c80bc0fa76fd3fdb764452015d78203ddd09e1 -0xa80382d1a165b213a37b785b8c8552f1a255b3e42560c9968fab254ad91e6d9a -0xb871186f526bea63687c2262e8795d162d89322a5ce31ba2a46eb58145629ce8 -0xf39dc838b6cdd25ba9d626960db6bc64d32cbee864faec40464051c89335ac64 -0x1259ac9c7682c58ad8a758ab798cb2e034008eb53b3dd652b62deb88f9e90246 -0x8ab5c95c0ab5a9f8ec186669354c638a4953619b7e34b4800a3b4e2bfd300e73 -0x22d569fcb7753b1eff6a481a20df31a6c9531c471b1f4eb5c706bed9bc4b05a1 -0x5e3e0e2bcb42d0d6e7ced787155c6af15243043283ca1c185c0036888f3f06f9 -0xc5cd11a1be9e9321c2e9de2c04677aa79080ebdc0f5c2c9463c5d013fcdd9ea4 -0x03645eab83bdc1e191774b32616f793ebdf72bc742d3322631860caaa1e44842 -0x1c4a8286e0fee7274c8798c745cdae1938b018004f72366fc8fd287ec1545466 -0x4f90a4c4bb87f397a358b46462f6342572e7ef0980af8688535f5e1c344bdb3c -0x0f5e4233b493d9db68ae9e1b28ae8e3a7c4b500820d709cd5e693587881716c9 -0x97bb2cc536fe673a4ddb36fb34f80338eb36a8a8815c0dfebade10d89cb3d101 -0xbc915a14c8404fafe2be3952eb21bcfd5f67e29c05ce06148c592ba121622ffb -0x2ed3f998ef6669a4fad52e4af12d9ac44de033617490e6603cf528c0f37d0366 -0xfd73ab3bc010c4f79709b6e979799b5e52fad0c0dab2e302f17fa9eaf6f41802 -0xd8a75a3e0b67702fdca56dc5f5cb59379d06b4b530346e5319f12649d2e5c147 -0x11a686ca1c233f48b04333029ddb9079df76f988f7860f3f92f2b63e077fc287 -0x93c03d7c4316993b0beb45af25b529544958413ab59f1cb307a8997959322e1a -0x829f02eb399af1c6e7c351f6e8ef4e6f090f63e0efe81f66cbf02f2118b934e4 -0x1a8d7bb7a55671c8b862c5932df83d80ae74c7d18d5bffe20f4d0632b2ed68e1 -0x112bef283d5d287683b9281fb981df091a44f32f69e89321b134d42ab04e4dd3 -0x4648842566cac8e0cfdbe4e4e52215b09d87864a23fd674d7150dfe481949fe0 -0xa9da643a5fda6111317760593f9ff1609d679485a3a87865a8b36f692236c78e -0x6c6de880f3a622f42e4bb6ccd7589452b5f9ef913b89d4088ec54eb8fbd8fdc2 -0xcdf360f5e82a16d6312df69affb9a3abddd80a3386995cdb6e627cfaffcf384a -0xf03991b18bf418538ceb166e29f13631893c8b85afdc51115d53fcb62e5cf16b -0x964367c94050aa2fd13a2bb17a384c652c0255596ae469c64fa2a5be10a04494 -0xc515ffe55f283c3977b33f2a4baf9d3567584469e2954242d234c355cee8c411 -0x398286e5168f99dc1471d1dd90a704fba58b6271b1dee328a744f43142f4c83d -0xe402fee8dfd0638558125a55f470b99bafea44e1659a307edfaad4d595b9a7c0 -0xff0d251246ffb6d45c9ea2e7ef6a8f0b0ac460546b4f1d69237fbd86536130cc -0x1c742824995cc4d4077d1122d30e15591bd83bc4c6569c5e2baf698d4605fb12 -0x452678df7bbb8ab402ad646de0d4502580eab9b60be7fb026f44059bbeb9a9f8 -0x8239294dec2a82e4e96fd234de6b158e484096a29236a57d16837b89e84b1b53 -0xf36f1f90133a8d37d28068e35d90e91f2940ab50035063c05f717359ee3165d2 -0x343665081238ddd75f6375578936dfbcc9a91856a2325c03b7a51ff16d3a76d0 -0xce6a3874f3a133b25df908547a58eb16431120ac0082c84fc411fc8850f67e4b -0xfe210fed49f49fc98dd15aa90d77e6f553bd192f88d5b4fd259f7feb1795360b -0xa0002daac44958aed57276baf0cf597a19bed8832fba7aa5251284f2ac7807c0 -0x136a1e336e277cfbc261c9b37da1f69f240728075d279ad6cdca6772d230e21b -0x64b4dce8a2aced46b387086d8ec77622d015ee711a75d5335ad2be2b5a40bb73 -0x94b25afce2038d39eedec6b5ea25191c23e71093a6abe652c9512743cdb0d74e -0xe9cb367a328b051533175b9fc4b1468d7af188482bf380e6bf0b2a4ada846041 -0x9a4640bcd44800294255b6cf7e0895bfbf1f70a0d8607c05c5e692e6c3074b85 -0x5800e58865ce7654f5a63d71ca8485236b0a4bd11c72084b003280ce5a08cc70 -0xd3950b6e8ad8e6dd0f49c5719e90823d14d41517da221e9e135abb57af8a0d92 -0x944d26466133687d099bf58ca00b7111fe1e3efe00a2c340a1d01e348cdebc7d -0x65539e1e0b767ab697483d19576be3adc197a91d6f667b5ddb5f2350e6213f46 -0x71cbca4f3c45a5c30953fa9abe5626d61cdc4946c8ef7bdc73a6120b1ca5f74f -0xa0a3dcf8abeff00293e519271b96744c383ea7b3a7dc3324d85caea9a54f32a9 -0x74d8dc6096236e59a3f1fe6f962509aecf83f18179ca24cc1772c5e88452acef -0x27365138ecffd323812c98e5556783b1e6237e5056fe4723bde78683bc7f1fdc -0x123809514da9023eeb72c9055832f56adc834fc718ea8e621611f3e3972c015f -0x38ee8a54ff51af48ce3bd4503f6b4e7ef9254067fe6f39ba0ad702c7c4a73210 -0x63dfe80c004cbece9bcfe918fe47fff5b228406f923ff73c6707a6d8fcc064c8 -0xc2c39a00bc7829ca5be45d34cd74c99759cca0486cb27b0c0c6e725198ddfcd4 -0x3a4b8f3b6120ab5e8c3ccf5330f1171418d5199bdb200e632a65dc77a5a27687 -0x071bed5abe637b437630b070f84738218b1f3d44a157eb1bd8573f43017824d4 -0xd7a7a51385f255bae4557952b9bdb21cf02f486d955103358b912763490e7c89 -0xae3bcc8d4ba0705a90d8861b278a7325644c599d3a98ec5681b1cc03e6fed6e5 -0x8363ab99ad22729a5dc9311df7e63e70cd7879229aec5ecdc6f2aef7091baf63 -0xe3917c572c339d4f6245dca4b90bbf786c8e056b61b006c2c460d8fabc79cbf2 -0x13b16b239362acfeae67ad48649f3584cef0c2c2139121d1cc05865b40c0c7c3 -0x9ef1e8e35572ddec2b8c06e0135b9017d96217d1857e2f16a0d4ec153656b22b -0xcaebaf4e17be1e16c68af28512d24b2c9f8e25211a0638866ba0bc03ae8b9dbc -0x06e8f891120ca0f3bfa9000fe5e90ce787ed786c3cdb730660a30b7bda56f2fc -0x85dc9e1465c7ddab86398a06b83785d7e63108902efd5874cae0ce4cece92d2d -0x883092caf6389082f767ef2a275fb1b6cbf1592012f6bf890717415c522fde2c -0x7f9d26c469089b3bbb4928c9d14f9efc7f43c5d93cde378d29b22a7fa7ee1b6f -0x3afb3ec692bddd9e10c6c418fec37340730be802d3ad9fc5ddaf1a412f9b4ee8 -0xaba3edb4ae78e4838dd0d89b657250a35fa2f6a7d287174c363b81360950bf60 -0xc2c72696dddf6446bd0914dc4a2a7dfebc64072a6aeb55d4306de38b2d49bf7c -0x7b1c1bae360515964d3fab76428aeb2b93e26172d7f3d91fde919e7ec4cac9a8 -0x8243ccda67c4377b4809e5614d5c6672df5007e8edff820c28fe51030236713b -0x26c0e466dbbaffc8ab15d2723b6fb25cd8255e52a6e5d95a204080da83e4163e -0x1d750585f5af3a54ad994ed111023557a7697d2211d78aead9eefd168e7e6eb8 -0xf2d53d2cc8e9db0d895e41a7de4ebf7fb2658cbdbf7dc0de9f6840ba0f5d23b3 -0x14594fc1894d012be1f1c9880e7e4fb5567b2024c23a674a3b34316c3afca7db -0xf4ed984ba642a5038a8453d192b47ffd533395d5a5e267db5f3f38d6f30364ce -0xc30861fec9039ae6e180313fc7009fd0231692c3ae6dfd50d47cccc3fcf6291b -0x66719f9c0ed7284cbdd0cda05e14520ada6bf877240c914b233402934bad5e4e -0xa75f7ec1266b4847e6223e30d1cd0f3e54b51757f09e31365861482e26ff7a93 -0x8d2238016ec23c4495b9bf5a8f355c249458ae3491bfdba6b70fc5d913a1e8a7 -0xae958338dc4691e4e9bd7d2d85f589263f20b773aaf0b7eba4cf4f9f39dcba39 -0x00bcd17c0aade6c6746461302703bf22d3999bf408d6c66c69ba6c226a94ec48 -0x9b2bf9932e74dc6d06dfe7bb6e6cef37c796b5454f16befb58ea28e286ed08fe -0x15813402baeb84980463b888a26cffb1a8caa545f2a0ebe029266efd15b0669c -0x1ac56e7790c9d593ae357fadba15f535892df5fb6c82211b32d3b3089ec0f41c -0xb5f206d6b6680c314a8e02bbbd6aba5e778c3d1cb8adfb5110bc58798ddde628 -0xf0f3f3a7072240878fa86ff39e4bd2aa76cb5500cd0e602f4c0ae5bd80ac1056 -0xb2f5677c1eeea5bf6faf95ee23f3a9db0139bc48ba60b021ee9f17284f16a205 -0xa1a6e2d75b3f601bfa34625fca0b53c6072fa2831fb1dc42965b96b144b63d4c -0xe95ecf926cf54765b55fbcd2f978fb3d46d37a07be61245ea534bb06de06a8d4 -0x33d615bf896ca624ff026a836aaf8d9b2d763d74ac5842051f78623746565d26 -0x792b2d0e6eece08659c6a43bc0937fb6009988ca30af025b9f09c5bc2d45296c -0x753299ccc19059143d78168d5c6455d96bae5a7901a5981a658f88d51af5a480 -0xb29a136e390cd81191cb8964bb7f1c64fe66e9b0d60f81f1d89175c736cd62ba -0xb805e1ee0d99568e8c765b149ed3d1c380827fbc098744a7f988ba548309bf8e -0x0dc64be7a2173023bc0977bc9b275b2bc19a7b1e4af8c171ce346703cab37e20 -0xc87b29957df281e2c3f7d2533509672b45f86902f8b5a476268c16ee85abd107 -0x048da7911977317fabd60680953a1617828ae88411b181518e116e545d4327f2 -0x8f0ac9d435e5f1d41037abf279afd12354a51ef8d0bc84bb8b782ef125980489 -0x3a2f89c135c43032191401f0614fa95b6ed61ff563cdd721aa4b78801855e5f7 -0x74f608d769c23a72dfe1ac6ac54f1b6b73f9e8a336724a72457d2b96e28da92e -0xc8a605189e6defdfe3b87d0745e7261e0f2793ae1e414c0155cd5a552cb676cc -0xbf5b2265f72d2484c3c4a05e0706ec4b63dc2e7f220462eb46601e57e7f35871 -0x811f38e2fcab15848d5eb0c3c3a6132d56a1ec2bffb20f4586e474f4f60765e5 -0x4513b3f75f21aee5e947299e3a7e94e43d6aafbb4945bc2b305a784f1f94e394 -0x891612ae1f980d3194b437444f3fa3bfa9a367a7092f2961ddbefa538d6647e2 -0xe59db1078d002bc9dc4dcc55df2f9248db98cf9bfb36da89b84eb742be04d903 -0x2e4bb5dcccf7ac3ef747d75280b3d55578318ad58d61bac924134355b8e00d83 -0xc2c832f26ab4743c44d070de330c116b14889ae1b0fe6a401e935167ea94962b -0x0b7973fcc71693527ecabd6183267a69a61e9463bef7922ddf6055d9c1512b9a -0x6e39a0a7c76f7332eb52c716c98c8ae5d96b527378955f3c2f4cb7ea95a27413 -0x9a904bde339ae5e0389375638e9edc0336e9b62fb96a90ea3982585e1b800b20 -0xa80ed3fa9001ccb9d1a2ed1a654c2a21b3cd31f2ff4f301a3005113dd86f764f -0xbde81aa7eb90d2fa5def55265b183c1d267ee48c08a2a193dd778ff1b0d601b0 -0x934e3061844b735dec1a19bc5c32fbf5b21da574b48967a706be0a2d25009c82 -0x581e5d4c6f1fe94457be0030afe5197dc00f096f6de8d8e9c6c363dc68eb6723 -0x818dadd12a670d694215e61fa6b2b26e029087d35fbc31bc33042129f96f44e3 -0x911bf9efb571a8900ff93f57f7a5f1f057c3ab410fc3e6d6f100615a4070dadb -0xcf3896b7fe82bb3e0a016fe8c14525c79ff5542e8508739ae7b5e4d028c05c27 -0x46e91da2cfeee83bc7a531ce0c5d214e27efbc9873ae79a8810f4db6a333eb74 -0xfcc5e8864c3a9d6b76af0e1f4ca82abacd22b4f6728f2819a18bf7e5e82a4431 -0x48aea67aaf920d6dc1aa255a2128aa44b6d2f782e27b91cebeb67404e4086f07 -0xf052134802f95ae898ca8c25b29a5558480d60b95b92c96c824954f25cf4a753 -0xc0eb30d447411c2d06564f3a066f3f0ce98a149dd366e2231a2251aaf0a7ca5e -0x80b6dcc672f2d95699f423decd64073c78693528b48a0ddeaa3581db55280e98 -0x4ffa50bfc032fd29b53a0b3883505c6af4e9eac2864ab263ac98dc86a0ca83ce -0x904fa0859716007dbd57fc0042855aae7111effeae0d3f94b8804197aa667931 -0x063ea3639009d694fe632556d5b2212e1393b081b3e848375dfa5d08a778720e -0x5ab7cc7bf3a941d6497fcfe3df04c5b458d0ea46e4c3394779bc9f384bba8881 -0x0d71b7dbe36a0bb2edf5f3f9f03ec27e5bad8c1da078d176367e78b0f653a77a -0x042f5fb4f34110350e238034f2f1257c14d3a899a4b9ce0f627e38187a911fdb -0x226110ce190fbb62b1028fb89dfb1f2c447cd0408daf8a3d73562757ba1e8090 -0xb5c7d2b8ae13ccec59ca7106601bf1bb1cf9cfed0111ed9c06dc8797f305de93 -0x431999e72e6a10a71387b9d6bfd8a38d0aaaf14230a4807eb1cbeee61f58567a -0x1d0f4fcf2846b1c41542986c7d2a9147dcd10ddb2db79c5a2b9cf8be1d4101a9 -0x0450553a0960879fdf6fe79220bd1172774156200c308d0d242f8869e374ed7f -0x95f543ba5e0cc0fbd564deb957b31f997bfae3ca120adcf37c59169323bcbba6 -0xc3268715f04b39b1d3240c5831322f64ff97d0aa352a5a79d5d7ad24884de36a -0x551a7f80b26f8badf38203524b537ac8ba3cea2705699b77139bb49aad4e1eb5 -0xa4d909ffdd4f74a17aab676a31188fccc63ee60f1ab332d1b367340758fe36df -0x997a8db966ccd90b8a35e86d1e7f6cab174c619b695c28fb3354fe413875439c -0x36c218ad9c7051141386449bc3766c361baf59a0e8c1bc84c4dc888958f51e3b -0xd788cd107ab2865071af09d226e2cd9adf22004cc30913f90eaa8b4bd5abdcf8 -0xe5b57b376df121acece52371328aeb68c94c5853f57309851007e10f5ac33564 -0xf988e4787e0b6e064961d5e4ac915a31e3d21dbdfd1ba67c9372cea8c9d36e3c -0x97ba3c75052e6f08dc7a2053dbaaa3ab7b8a1d5fb7c4bf292de7266619379f5e -0x979b18a1a28735beb3470ac20aaac3a34414f58aef067e2fa569676cdc5e3b4f -0x0bea25e1c0a3ea5fc13692feb687f54491cb830c3653db8f4684155cf87f804c -0x01c36928816fc09f93dc08b12eb49b5c333e95cdc5bf4c434612c5abd6214927 -0xdf3a486dfab37f605643787073c83d7cfb5aa94ce322e4458f849beb9d367664 -0x155ff52decd2405ec6db384d24483480502b42ec111a48d8e48119fa190d2091 -0x9cc20dfcfaae94f178406f4a51d95ec591a25b6264ced38c384f9bed4bb77b9e -0x34b4f1b6b1a622b35017968357391876cf822eb080d5d0d01cff8ebd9484ca1b -0x8d1acddafecb8c0222fdb91cf0f931617843a1abd7e07df5c5fb36b4e8ab7e7d -0xc35be2d0d1fe548727c7940a830dc06acc73dedf367f680337b93f3b0b9ef06c -0x5b60d50830399bff79f95a96391aedccab0027298e597307ce11cf1d36829d47 -0x64d2388c89ff5e1984d9efc89d6b357b6cc40e907d9c04de5447932b7c99fa2c -0x7da4ece3064c007c772a96ed40848b1b66716043704b97bf941a6d40c8e487cc -0x61bf5d5963e9795796c00ac8e22508ba56790a5a975cb8e666e71a343280bcda -0x3576dd175b643464e89e6127656de3906afc200f3cc6d95a9180a6ffb6a3d6c2 -0x76f6bf953f8279901e9e61048aba0ccb6591219273e0551e0816c37ee598ec60 -0xfbcd217de003bb4b1c46a3461ac3a8e698909fcd622e1748f259a3b62dc96912 -0x7d8ab1165a5bc01288009c9e4f637ebebfd03c6cc71342266ba91d95e6b607a5 -0xe907c2b13b3aab1cd4ff4e920f21742a2114eba22d152a86cbcaffa4b8a4078c -0x8f29c262689e44dbd8485b78af938c9c1bbe434dc1c44f5949a5fc2bae71380e -0x1f8708b07e1cd3b3099c4e9f8ea0b99bcacefbfbfe0c3c9aca542f7dd651041c -0xb10b9ce5c0b2c387541f569d43cdd2774429d22d24e51cc27b7219b09306dcf4 -0x0f390502931938faf33d08f620c8019428296164f5f73a5ba3bcc04396a04935 -0x77300d1a68d62713227bf33fdcb2c09e4e4bde14009abc013207bc8dcb44467d -0xbb1715bfd40ba9f6219db34b5c8c49b582ed5dcc79756f7d0edbfc8a7d135cc0 -0xde85f142bac8ac614990270d8671e35b8f626de06ab56bf3b969a177c32a1ac1 -0xbe99d03bd982e812485991de93fee158ce9c00052b2af389704cc2c05fccdd93 -0x7c8437fdf6b50a4617806812dec38c291835d5b3e4ebac0318071b01a25c9f04 -0x6c2d2f22421d3aa43311b8328799e169f94a410a9222c7f00ce207136895d97e -0x317b0060eed5ecdd2eb2065bde6ca09d1a1ad23ceecba494ed5f29d81cf718e1 -0xb22dfbb4dced64b6dfcf092dc514c30d4aa1590fc442950a7305d90acb0c3db6 -0x3bd9ba4e85ccbc674fe69345d3111151ff8738bc8b06daa0f8073f60c9fd9f4a -0x4249666731a4c069f5f23d7d5081e1aeca91a0ce81fda06290dd50c23b7e9fff -0x78fc10725b623ea2e1c333d28f6259ece87862a012b0e0ab40950aeedf5a6478 -0x21aa711ccf362f0a40e8a65a4fbae9cd13ea6c27c1562f89b9eb2da66e033521 -0x33632a66d77586e46942a6f685c9634ca3e354d0e06c6e44a58af2990c5b3ae0 -0x6f784421cbb838828c2664e3a504c7fcf6e986a52d11172d1928b6598341182e -0xe72e371867b6d746e02c143fe3645911f9c6019414b0a0ba250be21526d3aa7e -0x9aab4bb5b7b1b557f22356f858af4c65ed4c9f2fd606032155de5ca9ecc062cf -0x68704d0226988275d260f689aa28956258ee1e73eedef822c12bfc5af54b8714 -0x7d876857f093ca33a04cd2a5a92e5a44e2839b1d88cfd2526afa92fb907ef0f1 -0xc1560d20337bb3725c6d3729d56c94c96dfc071de1fdcf36f8e8676739d4f645 -0x3679fc8b1663a116fc4aa1977636cab569c370a21bdc518563e9c551d3f7d918 -0x2999323afd51c0e702d5a678f295fbbddbc2dd51390e0e810bef4a5086a219f2 -0x88ac72e91cccf43fdeba9f1ead0eca8b28f1a08ad225d0691ce8a8b2d896e0d8 -0xd7614fa48d34b21564fc8cf0d275e3d1dc10d1388e1289a1d67dd0146976d372 -0xa74c32496ff3de44aafe6a9f13b8e946d87bb934ca8ac73fdd5fbb45cdf3e045 -0xdca4d04873e0733fed156969cd9ff35723a4227453c20d3290db0bfca93f5ead -0xbdfa25f39b9280bcb6ea556bb9f2be05f57bf78733d6f4c4aad53c9f63cfd0a6 -0x7dbebd3f0c2660d753d8db9aeab16932259fbd65ae23d065c1b837411ad62fd2 -0x55caa002d1b14584516b0b5c883f0f8a0bd35fc546a4349bf8b5763bc3ecb7d8 -0x263ea48e5964532045db6e21aa463f24cc0e3e65921a5093d71859327187eff4 -0x14c5e0b13ca411a987aae883b7314ae3a6956024e5ff28903f64d06e32a80987 -0x4906d1a8557bcdd746907dc17f6ae89a8d680121fcb0fa6551ddae962135c8b5 -0x90562b0d6602bd8c34b31acb9dc249b658351db87c8120a6ea78ddc4d7a4eea9 -0x9074bbe09a8e71e0ef944f725cfa95c9ed5bb72ea39650430b5ef75436745461 -0x2fecf4da7ac40a42e21f9b4f70c5aa5cadd081ba729546a4d337a4dce42a59d2 -0xa585c7d87498d7de0808228844ecdf86832acd1ab36d596889e5ac34c246c89c -0x70dd702318c8419adad22310cd3eeea46514572ac4ec573b28c8dad161dc9404 -0xa1900eabb7c9afc5293b88a0497f9e64e919240d27ace6c68ed58e437dbea9b3 -0x557c5a6a1564c3cba670805bfcf3e0b6ed0caa327fcd04da3696652c523576c7 -0x8b1a7b339fb14bc1b958c39ae10bd3ba0338d57ba6f553f14b1a80382da63b68 -0xa31eccb93e3efdfe627b0d9fbd0e8c5ad4fc73345f948006acf6b3398d0da59d -0x069ca30b6917ed6a92d2afb733c893bb008c188f20439685cc07a7ebda8b5a2c -0x2d3330441c08cb53ac62dd7afbc96116059c9d51ee65ad6de5385a84ab5685e5 -0x6d2c50e3ec96c2cccce8da3c5fc56c2873901c35d5ebf8012a62afe122a54f29 -0x9878a46756d94876676523dd022eb5c33b36754576581313b2070e3fc1f2ce02 -0x7c47ddca812ec5f5b5f453358f32df64d6f92ffa5ac3217215c70eda44172d78 -0x76bb532034c8a04086a9636b23373f07d867eaf13aa46248b073515035390a4b -0x609688b962ffd9c10971c5d7e98475447b74e7580cf818bf8d69c5c8539b6264 -0xb7f2b8faec25b49371928fb378e320d3886599ed755e986a4734e797831cad0d -0x051deb217d7cb655535c3541ffe0c9e98aa685c6951ba712148578e11e083ed6 -0xda8405459a1e4f1d5e3e899df39f37a37bbb1dc5f7b0eccf248ebf521611225e -0xc9bad28641cd08c90d928e3b54f8dd58e1d7a68cd6ada22485afefe145815a6b -0xf4ef41853d3a33a9496a850883d21c0675267f6b6eeb318725461c0b80452866 -0xdef930e62cf318ae56909797c32a161f94035c6d75ccfa72c4eb7ba13d787db1 -0xe37502a685f2246d644fa4870684079e3262d9ffe0e0517d155414305c068dea -0x7de8707271c4aa680217046d47335c7b4b0c0ba75e6f1e7eef3ee262291755c4 -0x9eb8bfc552eace937010ec7324c6d38d4cef738752676f3ff444b557866d4824 -0x955aac984805b0756a023742157d7737d4a33a06339dfecc0e9e9a24de3b1918 -0x652c9f7e863b0e0ddab6fdef4beb1134e9105d072c6250f943a749ba5ce38da1 -0x6d8559b884083b8d20544a0b4c1de81a56c01b0d7fdf37c6982246b31984ed4a -0x0aba0bf385faa907da43a7952b846be92bf30a3670c39991d1ebaed9e59d448a -0x194968c1766781d1561d97b3a9e3982508f83383c1898107725012b3fe03c03e -0x4a07f2b6e4e3d31506154e510aa829d57526fd839c5e6c4ef14ae1e66dc186c3 -0x2f03876664725a12a7a6d60a757fce8b951ac621cd02291d0312ae5a20f60a92 -0x1f87720a643053bab09d791afae831149237fd451b484fd5ef190c35055ebe7c -0x4bbb02d1c628c36db00ab245c402d51c630108d6725bd68e814f985aa26bf0d2 -0xa1d952ecedd62d878ae39e2da9112e218eb6101c2d9585d33cc49ef26fb8450d -0xae9015e0242bf98ba65b7f14b37b460d2b5b48ecfd4decbd055954826b00e26d -0xefcb1078898dbf8039c5e57333181fd7ce2df029dc1d78962abbfd0d328e5480 -0x10e45ec139be1786d1fb4034d1eee4facd3494798df19770ae32f1961e1cc61e -0x789fcca53ba6bde9f9a03b90635f0f2a120c6fcae109824ee2c0343b7cba184e -0xf191550c5ff664cc8b9612ec8f104d1e88e42b8296989581689ff0d5eb10f4d1 -0xe28c17192f7acfca9eeaf0cf0b88826a920511ddfb50d5907486f2e989451195 -0xb633b1d784e8fbd96d2d1229e2e85af03fa3d24c915ac052db60653f87739be0 -0x03609a8f5af553de2f633691fee3a856a4b7d33770a938ae27de0d7185906945 -0xcebb776e16dd78d12e3310d773407a411a4c24005f0c1ed1917584a44a85f677 -0x3aa961495eab17581d8dcd41896d17ba7b8bdfe0c43e980e811658734976051a -0x314cc042c0b3f2a7d5fb90a5882e3cc906cf74ae11479f236d60834c2f4b9506 -0x2eee324b4c4531b4e4db67f4e56e6c5d65cf619f72299e030f98a447fb5431b1 -0xe3980a20cbdc7454215ada3ebfd0ae2ec86bb08fc631855278a70db01efc2d04 -0xbc30e9806e2ee82e1f3f1e6e20c4d4f202b2c3264f6c14be8c6577030ed59b5b -0x36fc16e2bff2c1e197b6b570d750d65799378957f4c83f89d82ce59663d89687 -0xbec5a705f2abde78e4cfccf8e1ebec2952ae245198f238d4d67c6e3bb58a281f -0xd0ea74b66b4da55435fa1106f87f17a35d4b0090e9dc4b1c1e04a82b681730e5 -0x16d0680c00613c67f5c2eb10dce83b80be3ef8a71a935777aa3512bc004f59a9 -0xe287298aee9ad967b922990615509fcb807393cd59885dab6d5e0951ac4e236d -0xf7184a3b7e94d0c42ebd0e8b76d7c501fe5e8dcb8d738fa05fa90b141921748f -0xe8e74d91967b47261829ba251201d8bf6e5517590372fa1b205e30ea5b0088b4 -0xa7dfe0e96e1d65e1c4f9624bd786d159ea2eef27ab120e25799ffaad2d9efd6c -0x68d098e59574be152874dbff5d9986aa66bc395d4325d6b5c0eb8fb6e0d02dd6 -0xe2d5132ae767b11eb5c59985dd956a37c3cd03de5955c1fcbef208f4f6d8971e -0xf598e7397ed09b5649b2da374c3fe8eba2503def2a603fd5c9789886bd4a841a -0xa48c774bc87c6da398cfcd4c32716f7272ba4e553926d4a056e595169f81d66b -0xe3df7dae89ee07e5022634a8fcde38b09625b134b3babcc521ff77d466791336 -0x7a8b098be2b767fcd1e7f9771b5faa04e03f83913b6c91c648fbbdedba60b4e7 -0x61e95e367a35fd0efbe8c5cd3a4553cf5adfe6f2e2f6714d2f70d8363b8ecd05 -0x9217908638ee2e30a4bda80ac689ea8a675cb5ec194f7dc11c3c6c7ea88f8c98 -0x5c401cfd7c6d3405658284a6808b52fdc557b7d58a0e667700b716a19cfb2efb -0xfd89e6dcb7147e495d0c1a6c07fbac1328b20e080a261f9d72eabec2ff8026f5 -0xa2691a84a8eb2d1cd9b00a196ef0240adebba7a75eadf57caf4093a0443d8685 -0x0e34ab8026946a022e0aa4fbd6d649a8389c561a976a88c828ceb61132263ad6 -0xd0218937dc2d3bcd4cff1c4c89001e7272c608f945f8c6a15bf3f43832f0584a -0x0d8a046d93b280f33da5f593ace337fa6d633918942e33b57365f0353b8965b3 -0x4f330423cf70849790f60af8562759f7e34d55023e5d3017e79dca7c4cd99363 -0x72c8c0ca3b18d6c9b9ac1cc6bb7b548728d4a4aef4fff0396d96c44bf38edc26 -0x037ca0818116c653f6ff3dadc6bfd3f468aeee11b9179094fdd66063ec2e4f82 -0x564a8efe00403462852936541e1ebfa0e2979fb8e38f952b2c3e18fb6c2be965 -0x25d03fafdc36b25cc9c810022c8e6eb8e028ca302b7cc38a5808e25313c2a2b8 -0x8c7e32e0b17f2b0e78739ceccc714638f6bfaae07198a8d45be22c8b52bf26af -0x0d482109b60a68f87dff5fd3152bc61a6414c3104bfdee0186a909ae4bbe8c3f -0x47d623b6e00a8a34e10a976b4961ed0e117f80dc071f5fc7d7c0687411f5d3e9 -0x2394ada959ddc372c5170cdf2aaa67e3a22fb77537de345bb1c0ab76fca2b1ba -0xfef9252fbde9d7ddd69d9f22610e4714074477c29dc7ff5d152d28006d60173a -0xffcefb4ee7d655dd4ddbda9e69eed5147f27f1f0d1ee5856223a884626967e19 -0x276ca749c5b6ca9bd08436ee7fa411a71b324eddafb47077eaa0b9b2f387d838 -0xb76124c2dce8855dc341b1ca264e58fbb2641cc146654bdf32296b38537ca498 -0x25cb7890a6318b7af0233991a09f5886a33882eb9288a058f38194860b9a744b -0x46d4a51c34fb53ae9d2720d1c361ccc36daa4c90c5ae643aadf08893d50e31af -0x5127060733077acdc4caf1df3b0e60420ef47e03a5e95d8c53cca66a82fa842f -0xcbd717e9fbdd31683d1c94425fc39b849109b548d19e8d38e17ea510ffa3389e -0x21c05726edabad4c3c08f7d2cca467bfe7aa5398b0e7adfcf0d004b7bb8289a7 -0x30db8139116fc273e6771debc87b8a55c754c06bb3bdcda0a29b295e56e2060c -0xaf3bfcd48945199cd37e4369bdee9abfcef02b960f5eb1f1eea0cebc18525bfd -0xbb97c7718cff7334e981a7593b350851a95914e0c57dbfd8caf2c40d20522998 -0xbb3dca6973bcc9eb091cb10a1d35604da6a58740dde09626187063e8ccf7f41b -0x59ccdc4823fd9084409ead79de6f4ef48c16852305df9ba045a08d326e7b169e -0x1d8923f63f85f226a6e0b21bbf36d2c83e8818445970a73e57427aecb2cd604e -0xab7fc4b00d9c1b6203234b83b570184e80ca42f468a463a3f4e0daf074ff519d -0x10598c9f6184b22d01c4d802fd7e49248a997e12318ff29366459dbae77f2661 -0x71cfc75ae012820b48cd6d95640ae7c3f00e2a0df58b87bdbb6730008d19c9e8 -0x2e8841ef8fa51364c45f6df60082c5297253293763a1ff765b7bef2c17d790f7 -0x54a0d6dde60fefd6ca27784df4130f513eb5d0a00007dce78641d24421aba51a -0xa08c7ce3f0ba2e6978930e0f07a45b93aecb2435e1f4172734f02465c072e4c0 -0x087617f9a02021bc6b01c5df11fd0bac3d3535184f6fd9939f70dfd58d328b3d -0x362ba25c8a4aa79cf692a599eaf7bceab59f3f6ac355b84697e1a27f0a973f74 -0x3b4d77b80588b950978ca83371d375431476cb9bef824bf64550bbaba44752f4 -0x2c4255c7af805017cad157f046d7594ee32180bcfcf6fdddeb615b0a29f6fb3e -0xf325d4d8e109523323149a45b05dd1f672d55cbb5bdbd647eb2a3c9803c7e4ce -0xa1ff3e3a0a65e904cab53a9d3d2b9be166c0f3b3eec1c0951c89d5dafdd2fc47 -0xf7f43f75dc4b683f1dc7cdaa5743db789e2a7e81a872c2b9faeb459a6638ca47 -0x61fe7fc59b6f5dc6a0c175feec797d7ffa5ad0d06b723c7cd5289c3d8b206a22 -0xa89fb7edc3e316517247258daa496bd5a1f7f7c094aaaf86eacc9f9d3e7cc7ee -0x1615984b837e7ebab3f783fca1e0ce62406f2c0a98eb0b1e509c4a7d2155287f -0xbbf95942a5cfe5027b27d4e73b39354433c4780bc3bc730fdf63049408f694c2 -0xbb8e734eff42ebe2ca56d64a419ad120e94959888bfd77da60e8062eeb43a578 -0x51ef5199ee605cf88b65c65be310fb22173a9fb8955991be74bc60ffbc294336 -0x7f32efe2b7073eaba77bf50b686325dba8f3c9919839a99c22c74844208b4ce8 -0x7f229f4ec87a07a925864683e4f13023ab4bc38a60f9d28ffe0819a5e7cda156 -0x65ff5beb11a70094691d0a891336a8d933fb5d3ae613e65ab0d12aec3cc9f89f -0x40b41f67f2885e44d6025859d78a6120a3da1901d79933897ad48ea506d7de44 -0x7ccb25741e818eceef84634b7a4e523b4b4151fea5b0da40910fece53e8a9358 -0x4ab9c3c81712e8bb673194b1b3746d3f8ea66a3dc0a37d9b943dcb0585339af8 -0x002a5c63ae86abbbcad4a9df689c7605d7ce3d56abbe3407fe9fc54ceb2e3956 -0xc25d8bbf6f748e714dafe56d101ad371dc1a9fae5b4c9264c885f6f8451cc39c -0x2d07e5a91c39aee21d26d814772ea9f1d7848f07016b826c0f9d7faf0e85906f -0x5be3c650c67feaa36f4da0753db3337f1e71702dc8ecf66b503afd6d77f85cc5 -0xf2b744f2041c6569268eee4a3b63a01bd9499529938d370a104543d1f212b0ee -0x997f3321a74b0f9714b6cbc9ba8bad95e60d3e11ff2472d6290d2383d44114b9 -0x2d0f4c0a107328f600ef009407a4881cb16c2c145ed7438db4853051ec2686c5 -0xe716123976a0d35a370aa05858aa7f4cef5b9798bb6b5e6ca7724c589b63792e -0xd9bd2af12cb6be9e31facd7586b3cc970fa95b8cf5837005f2369de462097967 -0x347a4514522320e07765c234bbd3bbbb06caf5a9c261d5b9a9226678fed3d463 -0x90e1ef5c551c7ca54aa6dfd8c93b868ae223d3e0c97342424fc9fc43d86eab71 -0x589e5813a5def54a17339bcb5ca6654f008bb88352c2258f6e260a7c5c9b8a85 -0x8490ab9bbe5348a96cfe73eeb64fd2888d862a9402dd44a092a74ec21405709c -0x6fa0ec92b1cff24bba34a1870ba142a380538788ba45c4ec8c6b791475d1c854 -0xec50742af960d8f52968f65f034576e9f226cf39f31cb172a7c004bff2162b7b -0x70a2114d50b686c38bed1e79f6d2a3a7392cfaf69dd4fbee225de4bb2f4e72e6 -0xfe243d05d32aa8481e22e3ddf9ab816a4e31883eb34ebe5aa323d2078e0e3265 -0x915b1d45abb81d797859e526f18e0d7d9c29c8a4c99011e7b6eca935e6dbe34c -0xdcc97d0132d2a5761e0bbe77e0324deea4fe38ef4bb809eb06d8e2e85f1f0f46 -0xdaba472a92b1476fb9a7230399fda7fe1eb93070c3bfb2a5ba9188c2308e6d78 -0x1538f1956b4e3f5dcc661b42a5e72a56451104389240b5529af87cb5e228b082 -0xcbf4e246f2455a994e906cb1d7a4106117f919861074b93032d548b42e0cf7d1 -0xc2a53af144b77c0ba9aa0963fd0d40d27dfd7bcdf8458ca87c9c9811bf979419 -0x15f1d76b72ab23a5365ac5d3f1ce857e6251f44862f0e013e45123f5550e7934 -0xe462a580d6a5b7252bdf6d9f992158aa9758d0d8050d7c294e8863b256e9727e -0x06185a2bc9ac55ebdfbe11cd0a26732a1139c4ac656431998d8c0a511f072c17 -0x3203e8dc3ab59b841d68b8f14213b7bed2079ef119a954a5d6134f18228a5914 -0x2e0dd869145ff377ac916694a7dc59545056b1579c39e3ad69032e602e0592d0 -0x77e247262307dab7bd4eda4e563cd5da4a2597fe748013fb5e06b42701860781 -0xb15b51e16a7e3fdb5c27653edd38109767a5a06b574fb476fb10795cbe69e963 -0xa8741c0fb205b04e98ea435ebe04f0ca7ca5fb7de71791d30a4b1446dcdbac96 -0xa3e1b0d08b683b28d24a8122069edc831c571330c90a33c69e93819963beb8d7 -0xc141297d4230de8043e8dbdb2009c1f5ade4f7631f0d65596d8562f64410a17a -0x7efbf5857a16cbcfc52f8b9aa671f5f283339846b143577edca14c3801676c57 -0x06210856e09a32581935ebf4a96e2453b993b11c89e15adeeaa399cd516ec32a -0x81dd70f958fc28c60215a1bb9bfea482a3bfb69a0777552ea0ec15a025c7cac0 -0x6e27098d344ba806c81095a7789114750612e0e4a2d943a0af79442701c92bfe -0xd2629274c6d78c52a531ec0ca7a040c3c8785f9e7a1bae0e91e9252ad6394c69 -0xef548fa46bb20164e91ca9f843136d0603618a8c9b242f0d5e27efabf09823cb -0x108113511a67fe16aed026cd7529f14fd2e113389f11f98e0e2c01a21d2a374d -0x0eb6157f31dbb0047b7affab484cc2e48e727a8dcec1a884989952b0d471bb80 -0x1e02d8e32f61a0105fa9a2fd8da0cc2c63d427c89fca004793171e9fa2a47337 -0x8729fe28eff65c209a424dc1e96b977821c75612212c0a6908bbe0cbbd6578c0 -0xb0a9ed42ad9798354693dbead627ef8034f9f7a11b381bcd2101e0e15cf5e169 -0x777023e13927717b6b24bb076fffe7bec465edb21be82c08d33edac38762ce8d -0x6ca7ca6a8998c792a02319249c5f23acba59af0c966e5d429d57befb3e7aec5e -0x87d422d863ffd506680f32279825cf166c257462ffad39bfe4e5e649f5c67742 -0x04a4d12182269d70e6be9acf70f99a42dbd27e7276efa52b49928fdf2e9977fb -0x6424994d7b0ca8ce4a5a8dc86273f6490bb7a6013466b5ca5728ba57b5b94214 -0x9e02f47e150b46170a15d1eea5002aaef658ae651af3b43c8fac34eb883ba78d -0x69f3efbc9ed327556a22f4e1eda0a0865a3b13bee563b69a0961a9a2163b3e3b -0xcf3ac926940062689c38a340fd39fe736c556e74b007868c744baf95a8a26220 -0x93a0d484c6eb83009b0eb3362308eda2b3a6e504694c70f68fed567a08323f11 -0x284214d0337a1468b9659d2e8ed4adce87ac6f0b1c39c5a0d831d57c9985e127 -0x03854232dc1fb7bb06f8d1c61ff7ab9ed7bb8e3f0364468adadf4690fc990d44 -0x9c4de633e7c10a76426607fa46853e7393db1afa1fee9530e659f83a430270db -0x48bac2b543d75aba1413261867528f33870b34430627a79beb086f48e8691f9c -0x6e2e471084b5e202a3c11388b4bbbbbee3162e599498248b39c6f04196702e81 -0x0602dcda5211bb986b9b3407a055c1e7875cdf9b639e1ce73e68a237ae03b9fc -0x88e276a447782f5d6158fa202d81192255eb4bc4d49aacd9a45eab6740aac46b -0xe0b7117a1c77b76e4bc832a8e9a60dbeb54a077fc6b6cd1e67c023b3ee70d75d -0x086d76196b2388231cd503eda9354b7375c2a2ee95382408b77d24e4b48d2114 -0x65daf2d655dd719d4014813b1efc40c418f7a620a7a7a1bacec186cda8278fe7 -0x6183dbaf66d76d62c720211685518f8263a5d147c8eb04a2f20cd1e005ba6f32 -0x07e0274fe9b53ea49a913c24e8ccb99e98ffb7b5d0bc5577533a50a32eaa3098 -0x8f35e33b8e4a575e9a67ba366a35cab6ed9609e91495ba59949374e6244b3c46 -0x30d226faa77d6329e5d95c4a1d5f53f88d42ba54b95ab29e2144bd336ebb3f05 -0xc424c52ea0d07171f1dfdb4950c818c15e65adeb02a6266e1d39e48342c438b1 -0x307a38d9c33f16083c58decb2f710baa0ae7e1cf428bd7611b2e1cefb893876e -0x16faa8921bbabf75980b54bd1eb9b46b0b12b97601162b11f192002ca98a54e5 -0x509f9efeb9dcceab46fd56539064d935f0ff09aeb51dabd9b6d9d5c6cc14cae3 -0x66c6eaf82f322193fc7719566dc7f26a3f69b82d9f5dd5624aa78c0a5175feaa -0x8716a56d3ce22aa810b8605f027e3d0898596abadf29e4197ffb0fbe196eb83f -0x7dd37d79aa54ec86c63d1ecdb6330b15859ca411a4e5030694838194dc0245ea -0x631f607f34363560012a321e5f8c289e5b71e6d9e4112ab9b5531953f786e6af -0x541617315a02ddb84bd0b0b0abbe088b9203ef93ad70b9f4ac4c72cdd316b182 -0x7530c4c72cd1028527736440e7564101690a3778b045779a1f43eff868e5c371 -0x5fa61b05fa9ccda3e71e08085c43398b2dba21d25bbf7cb5ed862a6b59ad3902 -0x2e3001040847283a324afa612efa3abc9df6ee05d4f4e2f2c3524fd7abebc3c4 -0x839ab14f42c0f0e9ae41818dec2c05b8351d5b435a2c0add21de57049b5bbd86 -0x9a78a0948db804b73a9cd7f8b601ec09643ca2e4e7bfc5060d3d64c8cf49afaf -0x75e212f089e7c753b5e76c557d5e7767e387310c7257ffa3b3da590ac9560884 -0x557b645f17e26088c2994db913843b3f631a0e320e88e7066d1a9879e0002e18 -0x63b772c7b925f6d75318651f895c8b0562f187c69cb32e23d57b0039f7c1925f -0x7b41268045d189b3d3022373577a8b99d3488a54973005073ff6d21cf0a9b704 -0x2f30d366f7d454e4649fdc1b956793b23f660000408249587be4169debdb441b -0x2b93f160e8ac982806dc842a234d4e6fc334a49f493972f9fab2e490025916a7 -0x4f244764e372fa209ece4f17cc925f6acb60d40ab403a84e218f1359b0c034ce -0xf75b247593641a7c62f9d517b725eec28e0bc6b571d73a6076d13a781b90b180 -0x5a7de861c023d5a474dd299ad9ba54d5412de018d6d346526233846c4b71ea00 -0xa50ea4c8cbdf702bf85569ac5e33e107c315511bb16986cd4db30050e24dd24c -0x4ed9ca813136ae816ab4d2f9912be02bc74a1789634a8a3a845f194299a21bfe -0x153286f117e31ce29b21c6ed4b445fcb61c33f0db84e8b8834dab405ba0928c1 -0xfb9931156cbac3e6f00c237788eddcc3754d148aca120eb127ece006634fe410 -0x689141f2d2c3278412efd6b57767970e090f8ae16c501b20fa5f661fb9fc37b3 -0x8409bcf0942decb748bcdd1b957734b8efccbdc32322ab0f8abcb0c86dfd0f39 -0x4269f59ad41c9d77e9bf464ab8ac9793eb7cefacaf4444953b4109acb2014c49 -0xb59ad67240e7872946cd92e865e940a1f0c56dc3e2675f95529e79c6faa718c8 -0x7783ab0237be801ff3b1b76270b337c4eeef216c05c01c827222b1ecf3eeb729 -0x472d67d656cc1a5c76449b5e02bd435303c90ea5c4a6398da585702fd8c37add -0xf5ea2de36ea1f98d1269804554befbf2f30d2cc6e576a4a0b590e1374aa07481 -0xe593e0f87910d9f48c32a99850cf1977bc5da97b8f97e1bb02514c9e6f84ca10 -0x1478f0a2c3a220dbd0545b527805b2387c4782664cc4f0f2f64d163750a370a3 -0xe85ca4dd834d8b855042ac6b136dfc30c680506880a6ebb409284833ba4a81dd -0xe565e3f50091bfab0b983dfbf1ba18e5c90c0cb405539cf8c441e7ff3c159aa2 -0xe2a26cc668cff7304ef9c77050b18aa80a7f8d150c3f76a3f6477a0d1027e506 -0x6a3917fd02f0beae53e97e76c0e65257eee6e7ae144bb8f96779ad0b2b7bd7dc -0xf5d5949e9bbce66d0f213a2fd33ed33dea4188840dd59694ed8bbfcaf866de0c -0x3154d81279ff0c2849ab9cbe835c31a52ab981d76f5b4a5873499b1b0417eed4 -0x12b4bcb0f54d5bd41bd44df9326dd3e417c6812b52bc202b00809bee85371bd2 -0x5d9cf2fa95e6630cab535c77ee46d506b08d0ec3f630764b8841e953633c8d78 -0x881fa4481e0f0bf72a9ab74c367ff5f88da666c7001ed95634e3b88e9b6215ec -0x435d53c33db2db15c21bbdfc3abf873b1b11f9e5d15d47c962785cdb6daedb5b -0x7a333975953005450c37590c03c5034e751a5eab99deb47a5569fc495d724426 -0x1ebfd89448499dbde407ca0eab8a3da419c9365e9f0cd7e26e70ccfa37ca7f9a -0xe3d053766432ebf4ceff1683bf1fec973cd1c53afbf82bb102a14db568c585b9 -0xc4bba24e56b4496ad65d51306de8f03af55391806224b8b71530256b1f801e2a -0x4f2d2aceb3fe3a81cdb96d15cb75aea985ee26b0b14ed35a0aec0bff052554c0 -0x056a47d0ef572b41b0437b72fd37a82b8ae879c50aed2f032bcf449806ee3e6b -0x5e178e71f9428d87099225c7fe51e3ea60926d9933a195147ba635b79a05b3a6 -0xe84dc3dc1224dc83196e9e7d2dd5fc16266ad746362d21660050b05005293d59 -0x6853dbab70914de6fa1c38fc4f5399fad5982dd81e2aabde12d5e8a51e8e252e -0x9d91be2c0dd4f7b718567777efce11a1bccbec8d616522cc5d8a7354fcd89cbb -0xe693a5cfb3289948b190e9573f956528e08874daa89479bb17973bbcae45dcd1 -0xcaf215e98d61ca90258b180c14920a8711cb85659cdbccdfd679f55cfd31111e -0x7a19e62e4173f8327465fb9b17e864cef7b02a342b0f69431be42710f3828cf8 -0x253075fa6261fb2ad8fe84885541e35ca0d186673e069e24bbc263515eb171e1 -0x7ce0bb341d329dfa0497e641f61b93561e3da217b87afed96923a5076a8a621a -0x317019a081d0a7527d3a005a931895351e1a5f1da9a60b1202856e80e205836c -0x92661d3595de3a5dcd8278bf0fcee8aa6194ea4f91ca326b8337092114df5823 -0xd96a2ed92204a4b2b753630cb8c12e22293b4fabe3ebfc30b4ec6f5c680e2dff -0x3ad953f00c49682e6362fbfa01f20987820b0097d59d6d0052e434ba810d1e4e -0x82c835ab1fbe6bb84b92882ddd71c04f5624994cec78d7738b3cbe36c042acc8 -0x76e4928b3c047f57e86cfdaf1c3db7ebe9ef4d65dfa635a52dcab49fc40efd3f -0xcef029f8b9d910005fb9086f0f0ca81b9e14802b2bb70a97368ab4a1cd086f2f -0x3c37aebfc271f33d2e133e0c545d0a4455e97840aba093093ec257cef802f413 -0x63da6bdfd329385163d459af7c4a90a9cc9038b7958cdc9aa64001214f1a236c -0x435f0a54f8754f8d9f618514ee9f32a3b1c77ab19a58a1651e663b15cb080803 -0x936d3b2a94c64e5977ae072a4d78319609ed151969490c10a99332219e8ae8ef -0xdaf454f31e7c120edd711bdffb7bdbc9d03b583234b0d3a7d0c35da7dc2b729f -0xea5184eac18f3f26bd05ab3d74cf4aec8785f5b2f9b35db58a35f3bf95b5189b -0x6efcfeb508bb196272c93acf7f74b47b2febb05b21df737b3ef00171060767c7 -0x39cb87ff7941449a0fd6aaace5025227c398252b2be458763176083fa112dcf8 -0x7ace435274293e276fafc5b8aafdda75b00edcf11a1a64ee0a84cdc19014c29c -0xc76d601458f8d375a5d4b09576e5d4a73614086a68706dea42df18630fd36dfe -0xa6b3f602be589cc1a9143efe8e1d14aa7484300ac58f1f6d0f2f92cc343d2962 -0xc2072352a5a4576bcf797e2de074be82bdd5cdabcb529d24d429f353b96eb0d5 -0x907f0161bf8599fb63af059545230b753212dbf15f3aca71ba23f7f366a87d31 -0xc99b9e35b3b46fb374479127b6e558e45c8905ea08033089c5ab5bc9f0e2d498 -0x8b2a9be3e3144a7a532ac41df8cfa0fc95f275449066dfb7291736e81b8f4942 -0x1f6070accc7dca0e2847084a080327e13ead0b5e907b9550ac932ac3a1558db7 -0x096a8f1af710cf455fd4ed1d57ba4e764fd00409e1b698b7ff0485bb8281208c -0xe45929802b15e23ff15b33a8753a568af84ec406f7b872cbd74ee72e0255fe6b -0x91918ceffe5aa27bb7c52b4703c3a0a3f8097ee748d67593a426ed7b6c9f0c63 -0x0d985d5a6070ce214401b90990fa9a617a1c5acd18793387f347c7c8c9883949 -0xa310d656ab9bde25220db99ac03e69af737a3713ad07ecad49cabbb298a8a691 -0x6efdf67865028fb9edb93c564d12299b4d7c90118b23dd05580d096ed802ad9d -0x18dd614d2fb972267477ce9f37b6a5685dad8e9ede17948d3c63fb3ead6d641a -0x54e27a53ca9b53bd8b30968512a4a47cb861e04770cc96de0ec5b4e6adbc414a -0x04713f2a25688e6b917d607039110fa6a673c2237c2c5c5482559bdc0166d5d0 -0xa74713b7a3b12f139048e63e82f3dd3c8f7ce4cf511f8e381432d6374ec2920e -0x87fa7d4af3d03e617552404e2d3026aad426db93518608bd944d94543a12726a -0x2884a80826db6b5b4e1e17fa761afcf5c7f96b67ecca12720ae4b0902708e20c -0x250e1231cef07ec78e4b5a8dd3f273a16ca4a8601c5f9884b1ddcb4dcc06dd9f -0xb450e030bf216d6cf5264f4f2ce12f406a7f651c154b0de62fc5240b704fcc92 -0xc55a8742de1d20e6e7ba57f481d8c602ac9e2189914318444e3bb0047c520cee -0xc6b1e3bcbfee007fa65e1f38d7893a3339e4a6e85f4fe2450357fd9a57b8e5dd -0xe0ee0f0e49fd329aba6ea669d41cc0185228f4c168d813c3d8e44d04560e7414 -0xfdd91352cf0d8a80d55e890592f40e427dc525976d9789677d3c481217c326a5 -0xa0c500d185f5053f0c48c3e73ca7d1693899fce57d350d807c15dc93b3e452be -0x0426a88675ff1521c3d0f6f4f2165a77b0102a71388bb4f7bd2af3a45c22f3a4 -0x68ba0352f94cb9fad062d424796dcedc0db837b85cc8c71b0d3c40dc49b9bf99 -0x445d5880817de5e09b8721b3dbaff6e2f7cddfd95c855200c631e2871cc873ba -0xaa84b6a46d5d5dea23fcf4eb2e537df94922f4e5634eaa36721899355cc2f35e -0x76c88bb04ea442703c86e5ab403cf15fbc368e0d2aa1e36b141a9bdc06213f10 -0x553ff8b217fb05162a67be2aae3f598d1c61d0b40ef4dd9bbfffa57588a256f7 -0x815b94946d2de2b36e99e2e80d8c6e8bfdb556a2d2ac0435f3c1878c839677e5 -0x9282094bd094886422c23c5822a97e2bb02d37e9196dfb1c4dfea77d58d57adb -0x21ec0fb44b89c78d29747e010de0b097b990b37676590eadac15913ed00507d3 -0x5a4a7d345a393f16dac27c85207d85c744058409a190c6faef19779b62ae97c4 -0xabafdcb534022bcafe97f26d840b394ae4794c97311234a0146059047262fcbd -0x8606e45c960a624cd2f51602e7ead4c72f5fa92acc3e31df01d7354d970f8e53 -0x3ef2cfd6de65f80f26cfcd5958d2677a3a41b0099b9bef4c0a3111a842a471be -0xb9bfa181860b9a531039b447896a5a6f28413e1b648285f2c6e93734241b0f0a -0x67806d8464ec76d9aa7096e1d0dc47326b1640b651c7c484ed5af89ea56ca831 -0x0430781036e65d220194a350943cd850cfd5b8ad64ffa106a899d6b2095189de -0x81facac1d1add046f4e2a8964e36ccee8c71450d38c2d557415c246b93255fe3 -0x74446046887c3727fb951c08fc6d3264a76954259e2e7f4fc04a8ee29db2a29e -0x5c5d536554828911992aeea6005235d107d066535f8db60614aba8adb521b94d -0xdc91df51dac22dd9a91d3db7c1359df5d0d68b932d5bbade4d191a0d6937afb0 -0x8ca1da4dbfe6655e5a2d8516bfd9d9947ddec842971e5fda00b8dc21f8176f33 -0x84eb8cb442069b14b8c7cf91d32c08b757398b605631b9074b75b244a12854ae -0x0da79d4790d3819f82ceb3296fbeaf1d88d970fb5110f5e132573d822c16b1f2 -0x9e851de67779a8d324709e21e5b0c9e687cd905acfdab50c12c4efb1613e5dbe -0xc31902352f1e5bf855f99c716c573b0a5158007fd83769e3161de95787a810e2 -0xb4cb0a57f706800241314904baf7c706749a72a68d8f787feae06a70e4c00bf7 -0xe0fc73a1ffe094c7faef4772466e6c5a4a3724280b662bde63903abceaeb8b71 -0x95dafb3ad6a7d1334eccb0f1e3bbf64745bcb4fd1024dab2e270a7c20df9fdea -0x2f6da6d39c8653cc0b864c9d2c74fbeccf2ba043c5dcaec03dcd03e7618f86c3 -0x1a8c0be361f9ca2d4dc047e5d3fcab9c7780e2350de024c3df72a97f335a64bd -0x87cb181f466c80df1b7d5846905e61a27e39d04af1260bbb1cf314b694231dce -0x6f0137c9c7e9a9f49bec33b5995a62234d49d698cfab91f57ba4829f0b783b6c -0x81e00fb8d11b9cc74b4c559283602d16fc5c24f71fec60358f0fb94c74b91463 -0x06dfde99f2791d2d5f1ac67d8d66ce78d5efde7ecd55c05e7f1ab0aeda7d173b -0x81933914b5f4a61ed42f9ea2db44e78ca113cca4103402129b3c8a3369a72f05 -0xfd80a160e2a5488a3994417303fd57b8b2474d27501f8100fa150bad1e3f92eb -0x87e38450c4452ee4fa38bc565749295e8a6b7aba5e23db7f1ed3520abbec1a11 -0x4b8362c47d889cde1ddbe747bfbe78beac909766fbb626465ae5a5aabc10f8b0 -0x387bb8b812e1f2873f43965aeec8a6d7037521bccccf974fa86d3ed43408ba1f -0xd9590f1d85b1e988579402df8a007366ce4b24f3432365a5290ee8073efd0fd0 -0x97cbe85535b0914653e3f5b28d98852701ff2a47717742018b34ca5bbfadeecc -0x6f6c979518ae56b5e9a32b9a6b3662a48e05014d946eaabb59385c23b5519a29 -0xac341a70f744b33e6611e2ce3963774252c61da118fb0f6b49e1fb0611ffeb39 -0x48316cb1f2a22d9b65123d03951a0dd8b7fe7b181e7e98faa18c86cc0e8c9282 -0x26080ffe2575643f5f35a66a13f66dedaf94489dab5dc9a33e9f4277dd7f6afc -0xd3ba4a4dad47c6a6d197cb7cbd856b8b9e6fd2eee574474c4fab67dcaf71bad6 -0xf7c56750ee05f8d130751d96ca4ff88d1a61227b8e540e1674d20bed61e88524 -0x377f758af29c8ab83affc1e4a19f841df5b87e3e0a071eeb086cf9d06c2bdca5 -0x2de7b246086103af5b38b25c39a37d3488b2c435ba3f873ab15fa1abe8a0aa43 -0x9baffd02d4102e8022cbd69b6c31a0765bd889a6cb108b57b6eef753b7ddd78e -0xfb13ed4fd15f2a86029269c7c3595c12a184df0f76d977fccf2d0f77accdf98c -0xd55d588cd5fba4672cd1c1ac3f5ca065248d6e0fbae5fbee6c1a25ad3cde47c9 -0x0e5a541da8d797a8170ed437c8daea23c0f5f3f00e36a685352e596273919465 -0x3301106a5b8bd690f873e801a1f70cf52efe6bc04574d1ed4c1551e812144e62 -0xcbdafe81765601c96cb93becda085507ead1c56a8a3a41c46a6958524683b303 -0xf4d7d9a65c9b4bbde6686c1525fab6f5891758cf1f8031df4a71a0a12ec6c5f9 -0x15dafcb3099b7f9e6f2c759be90616284474957a1117be7d789c08870854fb5e -0x5226ee9ce21c84d471991abef38d23d8332d1dc988427d65380f11ef4cfaf0fe -0xadcb8d72b0a6aaa058ae14894f55c6bf9d129baf23429ca58b9ab7699d7645b0 -0x03cde804d8fbef6f814d18204e8788c73a08eb3d4023093c703eaf7163ab7ecf -0x0c18e715b83d5e065699dbbb34988ccd5fbf95db5afb0a38edf5b3a9bdd34081 -0xe51325509eeafa36927d5ffdb7904be23ad568f52a9a6f881809387fa79014fb -0xfb09be86029d35739cc58e95715d919e678fa9f1b22f35d20d322385c7c7fa1d -0xd55042148c1c4b41fc67b59d6c792761747ee5ec2e5f456ccd7ec89dfbfa4ee9 -0x0c1b52d414aa3b85b7b71084752d2ea02cbcba570017faed57535ed8d7acab2b -0xc29b8a87d4c2e65a3876da48cc9d306b24f27a6d3122eff3000c16a92c5ff774 -0x4aa47331aad97412f2d8d551bf4c95a39c5e43d24a646ced06e7121af648bd6b -0x92ac54c258b80f4bfa6d241fc624badf486fceb52413208bf2ba56eb1658ad88 -0x40bb191e5d9bc28c1d3921a7d78fe3a7c2af23005bca341012a444e2600b0326 -0x77e93345f5e93f82fe3e669e389bd54f876a1b1417f2687369b6e46648a3458f -0x9215fd4f59cee0693e6130e78af01a202d957ec8c46de91f65cf3f6fece24e19 -0x1227c2ec5f0424bbe500d9cb2fef4f0869a68c698aa2eca1c27bd605ea80bde3 -0xb1aeaaa4b270a69e97362736a6aeb563e64cd82effa4984c9644fe4a300939c1 -0x0ddd58673374bd74f2eabf4cf0aab66f142b54f0df3b6b94cb100f1ee00528db -0x7b615d4620b0eb45b26b7842d57a90c40639464f01ba3a536ffda03243eb41f2 -0x113883c2a93e82bded302a64682f1f259ffac7bc70dd438e63390da815a3a83a -0xe718cb037ede7c1d892a3e8e394ee6f33a04200fa7b907e96a484c7325c42a4e -0xa9c7408a61cb8ea669024e6772e1fbe2088cd3584417d1da5b750dd3db8410dc -0x1c709a65be378f8cfd61c6b7ef3c40f9d6b793a246c25229985e71ed401af067 -0x77183d226fedc3bbf69071728ae0a5c2a13da2aa0acb626d757f549cf7f1834e -0xd26725fb3050094ea960c2a207a9d873001c3f825d5d952137e8637bc1e27dca -0x374be933770cccbaf5ee60710daf11c8c90d36402a29329768a1824db1f660f3 -0xffb0008f2f2c9ea483ee1f0d65d5048cc73cbb99dae6d85e6b3dcbda533d593e -0x7561b8a2aafb22e75d8ada2d38dd4f0fefd2b6a615bfce44b99f46e04a7d8974 -0x5e637bfb972cad2668e0783c993e1e24bcfec5d3b55e2a162c42613a7b76d6f8 -0x61895e132ba68e697b9437b5035ec121f73b07b4bf401beada2b321f4abdf814 -0xa02bd45cb0a429b17cb8b6a56b5872ab7cacecb53bd096d35e48cf3273d68f99 -0x1338f621c1b6afad95a801fc565c1bfc9c8a75fe277cb2ccef52a5a0d3729d5a -0x65f8c6096a3216abfb71ffab4fc48254595e9c4c1560edb18d603115f6eb1b0c -0xece01b08fbed0f3f30ad3b63e1076a8b493caa7412605e994ce1753313043490 -0x7fd51483c069301b87458d2ade6077a84407b1e2ee87d7a2e15b3e0837d72ee8 -0xadb4361fdb6b0ccb11a1d1432fa4e0c7281be76bee1791e4f4b5d04e99d4f093 -0xeb3749f8d8b1aabe0f087b4c6eb506e2f5be08412c73a0d6d4d24fe4699aa0e9 -0xf6cd51be9b78fef2feda5f4469537cc2526b3da48a36a552f2e95bf6a3e5ecef -0x3a8668f4901702ec123a5c020d5a15b01762d94c728db620f25a611a1c5e6db2 -0x03c431e358621a0d66ecbc144932c7d32ef7f4b8efc84d72f0c27ed95d437706 -0x71af575fce3ec4c4969bd48436a11e7a7d09f9e3cfe6c4f47fe9b1aa0bed01be -0x632e2a89a8c5edf6582b5016eb398f13ebc13809b71c4ac4dd21cbe22a6656d8 -0x5513151b3a2313ef7b98f9d72c4a1cef215a099e9a6e674e21f3c3f44539519c -0x68495e84c6fc572926810fc8b69b7949132b692272cc6565de33ca067798f4a0 -0x489d116ee7692ec182b1621c1e1639a059a20e4f15362db016d8e3e805b6e287 -0x6e19d3940ca22e6769e0d16ddee7a0c8e120757e4220f68baed628f7d004474c -0x85aab955b4111ed3fe6a7d97e73fb55cd6f3e024168a78a4529259445b0f0f95 -0xa133bcb5d79661ee25cc66e8276dec7057f23bcb0439353266fb931aebc9f6e6 -0xfac50e2b6b0ffbe903c68db32f47fc13ff500979d02d5bbee6f3613efd213b8a -0x95c19d34be83128e2d2cee472e520446a12fc53fdb867aebe833b6be0f04b38a -0x12b6ef7ff34e9965204841fe8b1a06e0009bc3d59e8946ee417c4680f9dd888a -0xf81a2ca4b1d7d470b73981c135d65a9a04e36cb496f05a97c1eb93e6d0d3e565 -0xcdcde25137fb48880e82f60b1f88264419f3488c524f156142545364b04f11be -0x54c8a31be0e33297ea8e7997df26359ec1afb937c6009de79dbfc66848ccb810 -0xd2346c8c935e64f409cc3969b3cad49bb3812ee1d83717412fddf5e357fe1cc3 -0xc9eeeff00a96f66057eec04a9cb10272d57c82809e27c7d7608043ee09122d51 -0x6431cbb2be781cf545925cdd9a1e77273ed3b2baf6a1682183368db6df00a073 -0xf0d33eb305d7a584c86df9aedda3d1f7fbdf1f1608bbc400184bb09f13ed577a -0x0a40a59dbc2845dd2790016aa8635f96f1c217df0ee4e61556f54474be0c8ff8 -0xc799be7858e202910ed850255b1861b72bf9e804638fdab78ab9e757b7c4b889 -0xb80d31a8d7f205bce4b07617beaceaad73d4a65bad64fb4bac9f85a6e5ddef64 -0xfd096fcc1dd1b213fa9d0284c38512378fbc6e0988515fc081d6589d52a78a19 -0x8bd64dea5bfa6fc803671c3412b19e798b0deff2e7e33cfd50a4fac26d722b2f -0x93f772e4a46290dc6c52a0cdeb9883fda691d837c60f5cc66f1bce540eea9ab1 -0x5a115272cd1a22178bebdd34eb793abb927918f8ed65bf703d6af9cd0a0320de -0x56f82546f3dc47fdf96eb316065c1f9f83cda1cd8b3d18357ba574cc51456315 -0x7b70f84d2c49cf9f23783c9083dd32943866bf8a19ea762a2608a407f0a68cba -0x4f019db3cccde4cbc6af58c756ba0e6a9a465aedaaa55d829b4d6c7804ef6879 -0xa942fd8fb7546f3ab70f77c701d06f5a37b05acc5e2ab736a03faa5edca2bd9d -0xbdbf50ae2a545ea3648a81d197a29d600c0a36f6fe9756ef82b0d9e7e318780e -0x5d8948dd124bd763a4b62f6456b05fc979994bf1f8f1536d85e5560a423b2d61 -0xe5212af98a717ef6ca256aa15053daeccda6c191744e6b623424ce3631072658 -0xba589631d2bb2949f811362f4243d6c73296e9ed7c0d2afbb8bdb89ad29acfd9 -0x42be088cb6fcf97f3c0fe615108b4d3fe99d9f3a2892354ee7aed573663794fd -0xed803474ec971fe31397e1aa4c808be78db38531481dad579da299f8bccdf73e -0x50712c88e998db0400d7ee234a3a424c9165abedfbf64c3b3455bc2c4d485fc3 -0x07b36586868b4fd3e07a227b2a970c7b31f534d659f8f49ed6e237e688fb0d70 -0xf50b34d1f4383343707db0eb8d729898e714aaa46990ab117863f2843a7bb3b5 -0xcfdf9a8789c15dfb7ed924363106b96c9ed3be62f6676474c922faf519a562e5 -0x66f4b9e8d42e00498ca2d3ce64101a492d0348a1ef59ef62a394f3d1a5693eae -0x804201025e528a0754780892762d08e7befd39233637fdcac48448bf87a3bbee -0x2701758d8cb3775e899bbf3c6a3cf6b21e65b985edb68fbb0fb087ab310693fb -0xb84f5615a4205c5a52d1600a794f7199466e9139393d05fc7b9e60a1ff4aca91 -0x7b4c0780293f6e27a34bbd7cd6339fa176eca57e40d63d8c8b6c95d032b3cded -0xb164791f27f46a8d125e2dbf90a34fbbac303968a1256005b494b3f0851c305d -0x386a85a9125c062f3d6b15587cdd00325f422a3b5870ed977adbabd2cc9aa285 -0xbcca37d66aa2cc7879b20c4ea68d12cd5161936a4b8c91d0e3be7eeebccaf5d9 -0x3be1e11d22a24acf9e2ce96eb980655c01d92a08f70c16a4831f17bf2f650295 -0x20cf3868ccf2c8bb3066060b27c1daf0f965c73addc415e018edcdff2bd99c56 -0x0d8e80c40792ad45c8542e13c510c1777dd461e97b22eb789260b5351bd74fc3 -0x7963daa77e40fd0d425cd356d1f64b69927d1f52407ea664775d6ebc2a1eecc5 -0x20b68e2116b75305fb6b846e7641af358cabc395ddd40be753ff4f3b1f9d710d -0x4ba307e960d1e80c6a447a6bb0912cffd0d228679f37e98e3611c7eba31858bc -0x924418ea97d2cdb7393e5049f6c438aa295fa94eaf6a3d8a12a0c3f1730a1ff9 -0x462b1fdc55f265c6336d440d4fecbbd7ce84418384ae4b9c66ab513fa1438be6 -0x944670a0ee4e2be243fe4b742537624f414c36c25850c15c4943336723668700 -0xe6a55d402f91603bab51b5481f87662021b7cbda6cc7001b593026319542914a -0x26fd37e7747c565feda87bb6035beaa9b2fd16b6e6b4c94670e0b224b5fe61c6 -0xc0c6299434600567905e142f85fe402b2999819fbe7c581e232c14c362f36db5 -0xb606ec5d1a56dd542eda850aba7be787ebb595704e9ba1f79c85999b202baae0 -0x6b00287fc359793136fafd6f2217e5b46f3cf715bc3227ecb7a7145e1c1c4b7b -0x3e2826e834a728f35d421396911f82f428d7d13922d1af6ba2bc32f20ee3e7fd -0xdadf685941b7991c7deb0a025e242487ad7cf24b565048e58d4dfc599c186e74 -0x2a7002c5fd811e65b8ab959ca9f8d3328f39887e3d53fa3dbe5fbaa2f8b5c504 -0x1529380c6ec3f3d37e6ad73fba5703a7873c2a097a1d9bd1c39bfb012ee97ad0 -0x1aa530f168248eec042dc092350dbe8e34df9beae8f88b4be689bc4598831ed2 -0xdd83097d32c994e6516d27ce8d574a9fbb5003069728f515dd2fbdcde3c05463 -0x760b89324fdac5da82613ed0e0040a12d6289a14fb89edaaa5be33c5ef1b76b2 -0xcf15e86d883e796f6c64a23a75dbe2ebc656ac8d5ca45a0cd4fc317ca9ae2cf0 -0x7284469a1c6291974426b32b4ea431d7db82bf8fada549d56b3b8e35c4b5a7ae -0x4fb260c150aab7a34ab133147012bd0697809887256fb835d683aff51e9a946a -0xdd5e4fa914887098c0b4a968fe765e9399c580f332d0f63a05b6e32f714fdfa8 -0x15d5a9c312fc646b566dc58eebcc139a4ca94268dc7867d1947a6225deeef9da -0x29bfd35d1a64ddf07003e78b49a2d3cd2209832e2a426eaf0111e7c907590ff0 -0xa8fa8a82616b0efe5f796ae690516defd23afb9c5c5cba48aa0c4f2f1cb71f11 -0xf5977f79c284e8fc73b0f222cb9e12eaebc08b8ab2988051f55c0656be8ae77c -0x4115f24822c8b052078a6a33c066556c718fea991fb28f33215f151cde8aa4d0 -0x7ccb14f76c5d8d8105145da40d05e85223c6a665c3fb8d64d9a60a09c11a9f86 -0x4ec2f4c30f2a4e4fd142b9d0e3d39d9ad1699c28ed7c223b5fbf8bfec788a90f -0xa495a84bffe90272a011b2016af4de7d515bf0957e0f6459b06053454613f93a -0xbc109a31955bd0da0bb0785c99828063cd8d297fa4064b6b12859acc350e900f -0x1c47d5434e9973e0c93d8c5fa4b5c0cbc3660affbc1c8425874f1626ed5dafbf -0x5c7cabcd40b8acc77e1ed92e576d7e91f096146159742b9eeefd3ab9815bd9dd -0x358b9e1981ee09f02c3a06385ff806c4021d465e2d3cf408e6bf34759acc704d -0x86c4405fd0ce94d40cd200285ef43eebb6b8f9133111dbba4e6f857070fee4f2 -0x9033bd17393dfd2897078f15190a760a60c5b9d5ebb9631a1c8456be22a12fd5 -0x1498238ae21072446948f4ca3716c64983cf1c94f20d38f9b0ad3af07cc0cb1c -0x9672c7ac3f05ae77a2076730e5e04c11f7ee2b3204d9ba2386e44dc8284c6304 -0x1e3d05038293cc7b9f7fcc2e2bd5c372df6ec154e9a413281a71f436c5d3225b -0x449c576674b23fe6b81d55aa53be59d011631072b04166abf4d6a18f5e2f1f8f -0x7a508330279541b062aa51bee61fd74394b5fe85083c8588da30255a3d2b7173 -0xc45554ed47f35cbdd2e2602ad46d3b6d857d069cc1c15fb55eca4817355c588b -0x63093a34105699036c6a5ba8fadc754cf9f1a27e12de39672ff435c59a1b137e -0x6a6112230c58f58e12b82e568d37a29eedbdbffdf3af337f51127f39b3db8213 -0x284825a1d5c47245171f5af2c0db0b23bc381463c675f24f6314c9c17c79069e -0x6ccaf8f213b2490be34cb0ca78b60f2b9d8f065e08e9bb1dd2f04f4e5f82da5f -0x375da1237a129eac988d18b55d6ee65117e19edfb9be00a54de93305ab66579e -0xbce4d0b8de448f349a219305fad619036eb350dd1f4f76c61904dff3323b8286 -0x1055d760242ff2fa93d8464117feeb03deebaffae4b426d8b4c39cd498a4c440 -0x5f0a7eeac935facd37f3432614e768ad6f05c8a2afd3364e302e9dd9b06f6263 -0x8ca17a0a2bf7dd8a68a8306c27abd85947bbcf171efb1220bb63df9489ca713e -0x38eee2da426f495fd01f847c690df7d7a067e73e976f341d59d93f42a8670916 -0xb7e85295f9c93e5d15d4b024fea3254f79e0210c53efb4edd008dd0b44489a8f -0x4d70ca01dbfc1ee746ed90b12ba5c3c50be89a16e1b8c68232513b1777814a64 -0x7824545d9e58d76e121f76a3e74fa9eb42fc4ed29daf77620c87b861b90a747b -0xb5413ea78aa05e56303e62fa8638925dd567ee6667ad626e3c4210b6e6862605 -0xb49ce161a8f33a1df100aa8a59123d21b1d1f4fa97f6afb8351ec379f9df3b94 -0x64adb906a8bfafce12b94265e3dac7b8fd49bf6e16d864158e4fbe993b6e9833 -0x4c49944e6aac9713cecc1954c4659e56f4e943bb8dc40a53ce78069f9d8440a8 -0x860d01e18d66a82b6b83dbb1738b2856027f249f07f666b885ac3d33a74b397b -0x7b98f275de395031ad2bd8254b30c6c08c278de90ba1c57f7891c146beecfb73 -0xb06b333af171fcb6b027954be25e31358aa282300c73ab935a5019c94c9dba9a -0x7d3d59e6fb58a4aa0ac8d95ebbfc874348a3ba8abb85fb3c832efbc3420bb5d5 -0x6bc18de83311b0061fb3a7f9027b161f694d89ba7e3515cac705a0d0c68e775b -0x362ca13a2c522124bccc5706ced86dc83c5d5988e5c7c38a3d0da504283c93bf -0xefe76379f8a726bb2965ae74f82c79fb8bdfc668aa4bafa3ca9c61f676a48235 -0xb4c15efa76faf098e82468cbd865254860c96ca9c047e6a3c8c9f836c05299bb -0xff26524efdb4c4dcafe2cd3fae92eb5c026adaa646a32c9a8b23307804364cc0 -0xb0d1111a82629ede0452727f9ef059cc9d1f9aaabc15e493933b274d9fdcbf90 -0x66c249d8385318e6a84d7e53349708c4afa353e7432a03481064b0776754d29e -0xf92d1ef947b759a702b2783da1d52db500376ae06ef8a61888b73692fdd45b5a -0x3608248ff7b6481f8c207453866cc81a6e7d3bb7436836a4e803c4712871234b -0xc6a1b6af812c319a5ebf1c555a5f7a8ff0890e977ed1ff02b4d656008ae2e189 -0x275c45b6a072a0410db2c6f3b7e8f845398bd5bc68adc86e694b73953be55299 -0x403d98f9a470416a76b6ed7b0cc70aeb0639bf14bcc3352552bcf6662551a097 -0x8b5cc3f21897d043296d260147b2efe0ddd93755d7014146401a1a39779a16f0 -0x0d9166f875feffc53337239fbfacce60ea673d816432ba338dcd16058eeaac3b -0x2a0834caf648f96a6e9989e9a977e67f6129d65b68ae5df9474a09c378cc8b9b -0xddf9b229ac34f6548a003357fd97a7bb001bf853c8b3a1c53cc74322c72608ff -0x9c1c9c8ce4fa708bd1bebacc0e765f020daeebfbaf3702d9a0e21a39a89ef91e -0x9fe29a1417e53a5c9199dd518007507ead0066297c5c8685760ad5d4ec2a9885 -0xfbc24e9b7e288239ae3837186a55fb36044d6340ea2dd4b73f58d325cda27e59 -0xa65d7b66b3de0dfe64b9bddd9948db12cdb4f200db4ab42119ad6d268875efc4 -0x38a27fd0dcc7f9a3f0ea7a44d8a8959affaafe0c73900e34bc957ad53a6cdbc6 -0x09b9349f7c7f18bdb00fabb2f750e2513d2ccbc7bc02fb48dd19401f350c30f0 -0xcc983314d25563e4fe5905e40c3770620dbcdb748883306548f2d3d1272a9ab7 -0xd40aa8a5ede8c1bcf3b491743a68cffffeeacbfde3cc936f6fb983b9709f98f2 -0x1310620f79adf344a1ca0c1df5600541184b9f38b0167d746bd6282a0e4e597b -0x6380d51ecd27d8a810511323b54df458bc8cde0295a9ba7b72f8f8e3100eb9e8 -0xf2dc050e6d983e9b1be29c27ceee2cc81e87e9428c7d6edd06adecefcba82229 -0x684064671e93e0469139cc15d0553fb08c35a81f019ffa4762e86684d02b2ba4 -0x60fca35519d1ff1c045e53e506e1ca951e2d735503e2eaeeb48db5aef57fb605 -0x52ee7b2369a02f4610e7e3d6c6b8589f90d10cfe3070771b33ac7c8adc3b061a -0x5ad17cc36c0b2916fa9b1cd4f6546acf300a53a8e5b39678179577b2f3e47f57 -0x7e2867da3a355eafb06e34564fb0414bce2d6eaa6bf44687b02be47760ff4878 -0x834474b7615da023aec124240d956a44c80aa93b8a968b9ade3cc76a8520fc2e -0xd351bb4c6c61f3b8eb42d39093599b796525b4f170b3e4346a65a8771f326c7c -0xe6418281efb0ad4b53d091584ffeb0719931d5b80f43240eccbc225ae1b2b92f -0xd4ce86b2813256c16bcd0c784394380d763449f51337d1e4eef5e9ed900308b3 -0xdbd50f906357e4362429bb085ae288ba509df1b6898e09f32f2282c30e99ac08 -0x128965bd5b93e0cf3d70149f22c10ebd4c74fc5d30508f9646e58698488ccd0a -0xeb518adf86f103efa1f5a76e2e6b6bf5e025bc57dffb39c9a06fabd8894d1cc6 -0x43900237a7eca1f62fbdfd145bb710f8ddb2d23dfc1dc7b8bb228cbca8386881 -0x1e3a9716248f3031e2f53b97695d8c07033ad677ef61cfab1174b0996c611484 -0xe7a577bd9d536976b6ff2ad2d4454b7cbe17e36c79ad009582207c750e1555d6 -0xe3be9ecf0906849d398ee30a3c811ccf707945e5c0213acbbb276b6397cc48fa -0x1507da1aca6d5bce3a03f51ae7d62c112ebef56e3e3614dc3e304a71ec70d7f7 -0xc28a2cf1121a3170f628f489e1547de4db04e07a41d79cbfd6f83f8365db9681 -0x80403f36b565672e0795d227ddc38f3b324081ee48de3c2db87c7ac3c8eefbe5 -0x58854eb21827a2a52b35ddfe38f2e836feceaf8f6ea12e37a0fb797413ec5cee -0x0147a64306ea8a7533eb214c45a8b376c7c94e316074d840e07048bd55deed68 -0x22714b79a19a2713740a40dd8eb22ec1fd7a42f1acb497ef6c2cf645123e8467 -0x85d57214784151db72908381be924e0bcbb706adc172e6833f5dcc59f84e8847 -0x22ba946554cbadf4d9f001a9854c1aa40c0dad82d59db6f119c163a94660acc8 -0xd3230dc21d1268c30ba7b72a416998488de65800922c524bfc417e29a5516749 -0x3954fed3997276d3d3f9d3732affbb6b7bc91059fa6771bb1fa7794c04739815 -0xbf718638bc1d681cd8d5df60f29cd20ed8231ce51fc5ccb44802183ea44712d3 -0xcd3f3781d2202c45dfdb84b6b6e4730cb0164c58ea382097dc949f28c68eda54 -0x22e517ad8077f49a5007bc8161e2c9f555641e435007dc99ce6f9504d6e6c6dc -0x7dd0013cab6f4dbc558298e0933ee440fb72a3100b8b65ec525e81ad2905ccde -0xaea6814c5cae6fcc02a5e7e9391d7bdcf194efabc7130b88790861f7c077c4b6 -0x932f655f375b1db916171d9cb943137a2064ef2aceb5d206cdc2185822e6decc -0x83cf6b2f46c3f704a0cdefc596e62f4f211b060d31878f40941fb3441f723ee8 -0x12ae0b9bbfea6b16de3c7d75c0290fdd2db8104cf45ae3dab3a393e02f964d1b -0x96fa36a47222d12f4a9c23499f59b8261c6a4e3a0c2e1575cd900232f4c1473c -0xd79562a954ff122cd0aa52f606ae21601e59727940a9bf9a5cd295c59d8b9ee6 -0x155ff41fa83c6a3688ff8fc139118c0e0f62217eed54c8de3bf643fd8c2e79ee -0xda645a28f8b2fb21e875a1b35693cfd70de03e938a6b9140c236ffba26ebc7f3 -0x624037f332d9046d6e4f66794a9389cbeefa048ff828679449b634046667c75b -0x8f2af41b9794faee5b3031eb70fd695ea41dc01df0e0cdc64f9cccc64da9ba18 -0x06d546004e003001330c771f3104b8b76d77136a037831ad2972764859cc5ecf -0xbda9ff9661199262906f9648bce83dcc8b639581e8cb6e4c158ab32917d6d0c8 -0x602b1661f375ed6e8626c39fc74c658a28eb27a63685da5030841f8847c99be3 -0x346dd8aa61440d12d0457a5e20ed130a38adad519dcf85e1be3473640a9a9ba5 -0xe6ce1c53a5217ee7698b0968d5ddc06cda3751a2a8961bfde371c1484e531eee -0x2a6d92de761a9f5c8ae824f517395c12dd70d53ac1e8d906ba8c5b30cf9abdb0 -0x3a4c211612a128ae2dcf050de667f8535fa19367e81e4246027e2a03b3ad127b -0xeed3c12eb3b6c5b4717ea4a155d995ebcee3bf1a466009c358626df8b4938cd6 -0x52719b0b27c54f79a5ad1c95a53cfdcb6f590b86865be81db9da815dec6936c7 -0xe7a1baeaff098cc6b9773938f611b56a84c23cc172169b3f33fed81bcdaff686 -0xef42c0b9a0cc747e05fa2debb4b9d31deccd275f37e60fbbf735b3fcf4b949d6 -0xaf7cfdfa624489c8ce8d0c01377ae5ff78ed70f6d937ffb41bb858ef34c7638b -0xdbdd01aa0dd66e0cc7cb88e1c7f716ffd99c10a5bb67493f8c946454968ff62d -0x528cd7a254df4ed4dc164bee498384cee45c49315361ba151876da2510cec46f -0x4eaa8bf5701a5cb24ffadde2b1d18f80871949beceba49d680757d12ab1dcdb8 -0x95f43b9bb437d3e0d936c6c911153e192b33407d5578dde50edc92ebc43ba537 -0xaaa73017b9bdd389f81f77f2c5b90e0f8a8c5bcb62a19139aa07977ab051b758 -0x85f7f84189d2fda0edab133bf5a28c7fd3086e13416aceb3ed54c52ac7578a74 -0x7209da16173ef400249b74653cfc2ec91a7fb6fb19a4a44ab84edbfc683709b0 -0x4bc4a2953204f6022d9c9b4961f2664b28a1887626c858e1dc58599e422aa596 -0x7e21fe38c654eca0dc5d2cdf8a60b4325900315fdd1fde97955a2eb7b4b80f86 -0x56ac7313302f7be9e310ca9abf7be1cb74ec0fc3b9c97485c28874ef6cb50097 -0x52d446aedfb180ac3cffa2d9b5d91e29693f235d20311754dd1688c0da4c02df -0x5eb37639eaec9bceb81859c3d4186fe88aaa3cce02dd981af03d53b625aaaa51 -0x362848ad91c9850aaf0f65d1cebf93e728a032a6b14ddf19748cd17aef68105d -0xfe2332eef338db9e4ecef057e595aab7ee07d47eac03e53cd9a8fdf98e78c147 -0x4914120b41ce6f605292c9a3ffc3740f98658852f05346dea5bf61659f5cd113 -0x223a79653dc6e77c087b0d93f0c8d11d10e788ae6e7a850613eaeb03cbcff8af -0x6674083d70401aa15a35e6f1efd5a8943c06c608e9215dd77cb28e0d14bcb3e8 -0x0527a6ba94952fd32c327faf0f1b256c707e71baeecb733b05de3f791528264e -0xc552ecd1ecc4e8f5678f35e0d2a9b82d04994d40fe2917fd89c0154508d629cf -0x4da6a748b08d2bad81c95ec404ce3153d894ba19e406824f67aa8a60aa7613fb -0xd160e9dc6f8665b6cadd5c044a5de46535aadc2170810e8fc29b7ce2cf55f4d4 -0x6b1efde4087e328b3210ef8126b2898d52915bcf92fdcdf8ac9e310cc7afc0cd -0x25e882fb0c85b8ac92e4401f8be15040dc7d84496a821f320b590f4a49f9084c -0x7a51e2d99df5f7a76587077bcc0e9e3b8d060526b9c3d96cc3d435f0c2edd136 -0xbe9c9a1a40bc845acf5be682c87e37e84f8e0bd15bca03d120df5e871a6c71c7 -0x8fb00f568bfe95e3dde08cdd44f73d9370e1b575dcae7707e39d83fb19ec44c9 -0x78289036d4c0ba405f28e233f35d9e5616265f7901dad8a4aa4f24ef64526c73 -0x641e8d0d77368c2f8f2c656e3dd6017e8965d8d87899860d784073fab3cad44a -0xe307b2aa5b31cd012f81c510ec83a6e88418c40fcc414f63b27c0a23d5696946 -0xc883c85dcc8d59c55bc287e1e0652566dda04ea0bfc493b6be832e3c927225a6 -0x65db23a6291e338bb8cfa3ced6ee157d9e0166b2b59e7753550f5939dfdf58ca -0x15ebf18cd3cbd72d284f7cd53b804ebddd39a1067b64281ea1586fc0429706c0 -0x78b56e79f7df5112da7a6e780b625ffc6bca0d2bd82a6d9b0bd9de84bd45553e -0xbe297d555ffdfc5d81c40f1955b11b60013ab93804fcc08a71bc719df6b95e68 -0x78ec3d014b73ca8e5f2ba71b49a5edb97511365bf1912d5a1eea7a51cfb99732 -0x0438016946cde38faf5901b17cfc6ac1798c12cc8bbf04a9c1b4d12daff307e7 -0x387e62459f95567b11535b513f018f5070e8de41f6ef62ea83bb475342540960 -0x024c4b1f046613fd53692758c78e6c3eb3cae658c0cb55ed2f7bed206bbce85e -0x69085c36d5ee3be5d5f93f7e0c0328dddb1007cd1daf34a8a33f874d529de163 -0xbd8e7778701d02cf3fa6101cabb47396cab7b6fee5d36ea242591ad467377efc -0x92172e3f90bc574752b6e50e9c32dd07afe6289e44c2585a7e8ef484ad30624b -0x4b1101646decd57d0f22350bae146a8f300cb1ad88f3718df4471029a0f01ac7 -0x81b302f71986dd49b3734ff77e34565827216320d79fcaae4077a6b633794de6 -0x46f13c3741c62af5e99724f5ce4e9ddc8c9f43fc95d62701c9431a7675f03505 -0xcfd726e76cf869e61add935a5f5401e961ea41cfbd95f9bf9ee6de83e6d448dd -0xc128f9e3397a06daaf08d1fcb616aed71efc7ce400df34d4434865a929a883d8 -0x5b0227ee7f9097f953359d7a1ae95d28c989ebaaf7781cbd87a30132c93e3499 -0x2eb0df9f29fc66da48c3ccf6f795657597851194974ba993c8d8980814a28b25 -0xce928927aad472e9a620fccf4edefa90293171c838394627a17c07308b501bbe -0xd2322f4a92e718a4df5fb97f3cdcd62b8e8a97d76adc0b87a6ae0832cdac0b42 -0x5c4ca38cc6c3f94f3b11fa021f095ca4acd564a309fbf39b670ada2f61cc8dc4 -0xeb544b3bb096c7d574520fbfd2cd89e9fd1c9daffce2094e7710dc311bb71d15 -0x9b35dece21938945d411af8b048e2a61c8659315c01b8a7151b4afd956a21db1 -0x497f15f1246122e89cf39ef8ae0899c2a187b46542829e84ef4a1acc330e3ea1 -0x6e5d3e189befa981a1fdd2859914e6d4388e74eec7a7c1f264c72a597911063a -0x39749fb4ede4c5ccda7a1b4e4aac54fe66d305c9b84ca867ced796cf3051e198 -0x8c24a7e5c74d1602e45bd4ea32806d798ead0e65c5af7fe61f154fdd1726afed -0x6cfca2dbbb16490f2495f3ac5a39c75677877f6cb0f1b368c2e4ba7e72b4030c -0x80ebda8da2dce15b834c6a8362f82e16f171715baa3ce8584619181a4e9fee20 -0x94f2f494889754d2b483bd609ce685b692b83728eb9947d3298b09bec8d4f19a -0x764baa5a137c2b6a4032e8959d0e5aaa866cefe1add78ac4b95de99f0f7991e8 -0xe9d230cc7bf8610aa8d3a2554c31a9b4530dacda085c51ac5fb692b20822d149 -0x5cd9fc74db0401b3d933b8e66471241c6783fba1e944d370e16c8bc0d0bda789 -0xf013350a5b074ad40eaac60952f9c56da080339b27277ee9dd180bec8e154bb8 -0x8700b7a0ef32f6604114f9768390f0357f0309f7fd0cf6d2e665559e0dbdecce -0xbbea16df654a7f77233ec7ed7fe926136c8d2ad2c23829468a107f40315cb585 -0x70986634db656a6f174a1788fd00acfbf2f64ab05823b949793d69d0b96663f7 -0xe4934c94205d3ced87f53547fa070e8579a476318634b73f95c5a4c0d209c65d -0xdde60de326e9fc65df362e91947722bacf36941f893954653d38b9a553f7204c -0x527d945e2bee7ae3639486570ac92c570191c829f104e575aa87b49c71e69c44 -0xc7484e2a8a602470b67918e0f533ddaf9b43f0a4b0bf3d9c7d55e582e6a2a803 -0xb843faef34dfbde3b94e8fc3600b8adb2f6a72120dd070087e6ea9dbcb0c4bb2 -0xec5ab97ae0f13e662d9fbdd0c31a441e10a528f8f0745292edae63334369de42 -0xbbb4b08a4f195ed1db64b56229088226717cb91a7e1d4c56858ddd3c1f9a0e34 -0x081da6f4df907f0f7a0cdf8184c2a2b529ea680cff07e11eae6f930c221e0afb -0x3ab9efe46c75f1ea0f8d71b36503c13c77bcc1b59328ee512db3b7857784e635 -0x41d8814341a6e7d146bcd17f3ae0dada4b44b088a8c94ff8cfd83d7e3dbabfbf -0xee225777a700d6527480878a6550de9223ccab91608ce887ac4c0ba29dc717ad -0xcc0017ff6ac217e3fa0bf2c0f671c1e243c137fa1ac7ff6391788cb58a3765cd -0xd1ff5e8a2ca6e14c4d269131a56dcc3d9ea8a1bbbcaa0a4c8898c9e389e5e58b -0xe61976d4a6a81543108fc16e8e3fe11b3cdd1fd531cc49cdd02845e5b372b4d5 -0x0f6aeb449e656b263ef25d94f14f1384bdd80390b811c549db41bf9af9e5f4ab -0xdaa0ae4f86f1bed779fc07d3aec49e20a7c73ec9f8749c2ad137f6cb8f7679a3 -0x460cca8ded3cd4e33479738ce3ed2df648d4bb9a7b12eed834b921e721c345ed -0x1605f39970faec81f6082f5529f024c5df7a59e523d0f1a893b570deebe08918 -0x635c6ab9ee8bae8540bf7e4c6187d3546589123b806a6d982bce26cb4e16f6ff -0xf66c076f052f8ede35709090b321f84308680d3c72a1a7062acbd6c886eb56ab -0xdde8838cc58adf84ef4770ad7aedf6a909ac35a07e7eda2e13efc8aafd1493f1 -0xe1d15ae2aef67ce632fd485bbd989b44df6ce8a1cac5a42180331bd88a28aa47 -0x0d8c2e73c9854e8fdd01bd4caf68fc137c5935becce72a25481acd30f54d1db6 -0xce278f1d427703a3c9deebc20dc6b6bc62163a818fe8f0e9a41ae1c84643c335 -0xa3258c83854611ff0332a2c05d327cf3ea5a1adc92e99161b96907cbd8d5cb72 -0x3cb4dba3694860034d6838bbdc6fe6bac7264742323dfca8ec895aca778d6f2f -0x9fa368503df1539fafc6e6b3ec638cdef91b8e65b206be6ba53ec29a5fbfc43e -0x551b226d3dd0dc621ea36152d6d7545cd658f188011d916b81df7b88c68b9d05 -0x526b3073beeb808ee52c8cd07eda4b1ba9337ae3669de4b97bcc5db269899fa6 -0x7ba021ad9066bf3ad11e50becf7dbc3e751c95a344e22f9faba62a8e78295acb -0xee2b2cb9931ed33b3556cc78b96939bcf411c9248326e8c6cff5cd81c07211b2 -0x58d72eaf34558a988617ff45572eaea5af06808952e2178cac703b502986cdd4 -0xc7cfae465fe3b36c31b47244f7c08e2f3933292132df85d6c00f9a104abef0ed -0x9fc7b2d2327ce7aff92cf24473b87edbfa2c0e6ad483547b5ceebe5f16a7c5b5 -0x08f75743e5ce9dcf62c2483d17bf366d285789184ca49d4f5cbeedc746fd7cf2 -0xf7a77bb0e3f0271b40bf2831e75cf66409e83c93dfe7a6c245fa36062465b5a4 -0xa77990deae0d3a0fd813aaf6d8cfe7823114d877f5ab6290ada32b88eb74c9a3 -0x16a1d78d6b8b47cb18967a55726371cd481c403b974c4cfbacc444aef9a009af -0x3afe992b29eff2a8858942e74dc8a9268cae590095c92c8073af89f656fdb360 -0xe7a4bae958a9ad34a39ee5b828b1acff00c146c83da89668b40027db6ac5bd0b -0x3d77ea2ed8caaac7cfaee53c5670c7674f9d76f67df0a13c951d3e9e2e4fff90 -0x36a04f487bc8b9a8aa84f0de7e26ccc0ebb48294951c37fe04303bde691f7a9e -0x7f56d7bc934f44a6f9840d661fc4b828f51376d4a83c8a1ce000379761649ad4 -0x55b5fac6201cb955f6663b53995f5da64446cfa0dc6e4e54db505efefd95cdd6 -0x31c8e063b80dc4e753fd5ead48f424e4169b990b031b0119220a82385a9c7a94 -0x14de94f91f64c0bfd3572a0261d40e1e30258ea32cf3637e57da4dc2a6a25b5f -0x7f0695007c9de5f0495ea1877889f2cfc10f404d52632ac9d39fc05bf00665a8 -0x0aab98cd247ee757ed8ce0e73d7c43a4f081020ff7cc1362a7dc94c55b6f6d13 -0xaac33dce644e75ef39dafdc0aead2de9a65dbfefef4733db7e552c6cb1c5aa2b -0x7bce6234d339155a4ced076d380e7a3e1bcf7cdf44096fc79422f13ae1d199c5 -0xcc345901b6a67bb4e0a54422021bbc9275cecccef62194cd333ddb68730e9cdd -0x15b8ad649fa8f089c1507072277ea31f9d50211ca15f5672ecf6ed4790fa9cf5 -0xb51de06c25395ca5687f8e104f41750127a5e50a6841f286bfeffb018e9f2ee5 -0x6c9975068eb07bd18aede0434d7d029a0a33ea93fa0a49aeb45a524e3bc7c793 -0x04a2bb3b98669daf2b00e76454e9dd3083f269c63af3e42121f2e44703f78380 -0x6e26adfa20016b37295cec11b9189a6c636fd777da062dcc6239ee855a388097 -0x4992cd1abf212bddcc6f756f2c34415407bf2945bfadbfbabe30d73f4bb6a0cc -0xb501948b6460bf4fb577fc14b10196bc30ccec4042993ee35524966f7135e43c -0x6f39ec5d4a9a1f312ea82fc9fffe37c47efc79db5256562c7b9d024c96ad4f42 -0xfcc328f41133e324756d1637d8d2c17b0d59a73c91a22dc78f58259db7e24abd -0xd8d790d2fb07756e06128ba3a70d8e0392375aba2f898f94828f5e2c3867ef71 -0xcdabb1b4e4ad3d225d672846608de6c30701315d86409968a562dd1c2496ce3b -0x0836c5d5734cd9fd8c2beaed67cbc147d808c0c4b19029498b644ad70e7a85bc -0x0838bee8fe3e0b9642f974505aa2a247213dfb74f1896476dae945c5ed56acdc -0x811ec23de58d2809ef5d6ff4ba3201921ef2d1d729f03de194da764b1187222d -0x27b01bc372f65d4c64cbb957728aac0a6093f58c4f95499e250dc309e3fb51be -0x9c03452c152d9578bc2c32cf7f3268ae817c8601bc3ff283e79cec084f93f888 -0xdd052a8933ed59766cb09df4e047ff29c0bfff6b2eb297668eaa4088390d4c2e -0xeeac51ad0c91427c4af13deefc51626f2ac4cbe8af730816bf0e19ea80be620f -0x741147fba0f0950c7f1c2e89bf1c9b7da929fc44077d90d51047e75120b0bb0e -0x7f73b27fc56eb9a8b9f6e0dbeba1a1379081f4ac76c86de8ec047fa649043df5 -0x3b0a995716a257d786978b6ffaf4e286c91ab766aa37dfcc0c6f9a4dba9d6f17 -0x82ce8384b79f0ef742fceabddc985b037d25718fe607d9807bb5440e4eed1c3a -0xff19e67cfe7ec0174a1ebeba0ddcfd7b9795b1e32f834da49b710b00938f3d15 -0x5d56c808ab8599f908db7e657fd44598fc361d9f21ca1e22f7e4b0a733e58bf1 -0xcb6268e76520f06facd5c667a410a346c63b8d7a4a13a3ed15d79280047e1a5c -0xfea2ebb8a5cd856299405d66b6520b593967fdfbc4079a72476f4099f0bda724 -0x5c5bfb2d2c959389d2981afd63aeba74f2611e4552a0c97959c557d4101afc10 -0xf86059d15cc1a2bcb7053bb117f42ba688304e910dae971183272daee0482225 -0x5cb0ea94cdd55d4646a5470623ec30b66e58b96fb4dd50824c3518694045dd47 -0x1c79cbc6b575d150a406c2ab699b5e0092cf49ff77bf61ebb8a8d178408a15c5 -0xf3c36863643804924bb3e42bca55977a50bc6738b7a6cd99a92dffb972db6858 -0x97822bec328134e44a27fe1c475dfb3981e28bd0c52c28273b316f187d9a8eab -0xf0f2571e2269cd1263070798a430b21f3742526555af78ced5235c373115bd2b -0x9bae02722d9bab2ebf27e0166bcfd0208e9a82008c995bb171669f7ad20a7ca7 -0x5921cf439b3f437ccf5b760f181d10d33331ec16cbfb633001762bfb90f8b36a -0x9a7ba7eb866fcfe200cac59cd2b80e7556ff71b9310be87b6014f112d4fd0cc3 -0x6012296107bb37a2f7a56e4f22a61066ba752725ea0d157b867190b06fcc4cbe -0x0dd9c05daae880b19624f98ba454bd00c49a5cbd515fc3e0c94c13aac987ecd1 -0xdabb71b9292b2ccf582f319662bb1ea7c4a2a5a90510eaf2f1a1c6a4e98ab5c9 -0xf3e02fc814af5085c05ef1514cea71e5757c7471563e88f8a59aa63796a69142 -0xf4fc4b32b06b6693fafe0eaff8525eb1dff904c5176d2268469a61ec4b35e652 -0xf10f12377368bd7af5cc73fdc372b4cf18c15bdb8b8e52d048a2a95a649e066c -0xf5a1cbebf25a08385851dea3e6386aaac281e7c3fd640fc1a9c140a45e4b6687 -0x24438d049c0dfc4088a74a74d98d0d42b3c8f348e63dd2ea6fcb44206d1ca3dc -0x2eccd57220b8d1ee7cd5c1bebd23dad43ad5c25de84d4cfdb99e8e6955a7ee9e -0x211ecd36fc81c08d519df984ae652ef0149eea0183fb15cd9a919bf679def080 -0xeaf902137ccc2eeabeae5cbd783d60e9d286fcd75d06d987670f78757386dfae -0x8cc6a63675ff0b5c6b8e63c20edc4b76e2f9fcc403bde784f2c9a163d3a6178a -0xcda6e0e1e23cf9ac60a827f561899163519fba42801839c4910fd56f0e72845d -0x1b36e80c1ce74e6e8debba2e236f8f8270f813b36d4bd2bdf0f61f8a409ebfe9 -0x0b75fce0a14944417bafe7039ab7589b0555b35a7c8dccb3c65fe8c6b6f78236 -0x68d01bea265355c4ec15ee268078040efb64fa947663998c3ed79862b7b9d236 -0x049d3bc6fc93ec4349b0e20d60893766dfecc05ec2d254b8889204f13e75a3fc -0xb3ddb9601595f385757762684c08a54529da9859a4a696b43fb8382fc2af5112 -0x7d64c15c024cb9e78b7494ac0d978e31d2ba62d9d6e3df3e55f0cdbeefb5170f -0x669e9d731a58d7e6322e9ec999b7598095e8a46f57e4d82d3d86c32d21d7429a -0x5715ccf7d3db3a98d3a0513b1786abcb6c5d75a6e42fe079f85c4b129310220b -0x6eb3146fa52cc821b38cde0f798bb1370d03caadfdc0db1f621e9618597de28e -0xc556a252ed1c388007c782c76b9a0607dc93b25b165076dee563e743852ed01f -0x510743e030526c30e265cde56d0d18de97764c833f221864a9a17f90d3d8b21d -0xa1243cedc3c221dc584191aba959010aaf4fbc69ba3d8e161eb7ef3999b275e9 -0x5ad3feffeb42944af3d9d1c14ba7dd5e52787fb5be771af3cd20dacd3351aee8 -0x2f559a8de5d99fdd5127d8fedbe4cfcbd94771884707228a2afcee69e991e164 -0x1dd83baa4e82c59537c7df44baf2532a5cc3ada76c078eed0315fe36868ff639 -0x94fd717199affeea73d36931e703cd659f0cbacb724ed86e656ead6ad742dada -0xe5a85d250aa067c598af13c419dfc62028cb6d3e9c87352447c8e74b4b942d7f -0x9b3841256f4f2666eb7be71623684ceb42551fb1219fc5a0b4beaaf3324df7a8 -0x978da95a308c8f205c447684fc37b1be50ae7fc946948912344766214456b35b -0x06f4fdb4c8933971592286dafdde4e5f7e2ba2ba164f7e9f688db6629ea8a54e -0x9fa44d01a8ed90ab57297c46c671986f5b5f259151b5856499d789aa85c801ca -0x41cf91ec57efd7bb62cf42de43aeceb5bb0da1b697e93c4d84b2b90d14f9e17b -0x174832f046173a3374f8c000d848c742a80d69c35b19259bbc2f0179d8acb43f -0x75b25e2a1f3f2e7c9ad2ba9fd8d9d078e6ea75a297ba387162fd2e63396071fc -0xbd3fa3537dd49afde910a233daa436cae4e0ce718f6d75bc66716c068fcd73b8 -0x22765282ebb6dd0b04f09c7df5c99c34a43b8d5e36bd7d7cee61287029feecfd -0xe2a077ee799b300eb5509ddc3791dd388f36cf82096f4649613262c9af61cba3 -0x69bb82b6968b050ccf3b1e320fa00d97af18a599b9d82a118af7de36b19ba756 -0xcfa72e863ccce693c9cf55146b6ce9428ed62c20c5b3d50153d217fc42356d0c -0xcfdf79f71955d0647a2a62e2f1800d3b35b1e62780d3613706dfdb42c2608506 -0xafc4cede4003bc591e5b43b37da74730c57c7f9492b5e19654fe9c740902a807 -0xc2aad46b7c49cc77d7783df844017b273fb7b76146e9de9eb471a939f75325c1 -0x3156cb9f97eb7c60986ae4d3ffea9509964310944a594735c6dc56b76560878c -0x07dd924ceeddd19a34220819acb58d670f9587238739780c22bc416625e0a7db -0xf6b31cf58cf82b5386cf047e804b1fbbf7e67964432795d0a8f655d3cba221d6 -0x9e34dc935ebf98e33b41a57800291f8ce09beeba33e44ef0a3243e06c40632df -0x324ce161bb77f1a59da72d03557d578964a2dda2a96db302f3954acff81af985 -0x3d231ea58395b9b6732f86bb9aa1166966fbfca5ef485948bf49546feb607c24 -0x3346bf85244bac18669497369cd2fdb7090ff341e21966d7f04a663bb1e4b9cf -0x24d2caa1135858d9863806dd83ae7428c89f347ffdf2b2ad1f94895808343f8d -0xdd6abebfb7d04a715ef4964cc16556d7111a5408dd07e2df314cff14295fdb9a -0x2290c38e0e0d04e54016b8f2112f00df650cba537a7dcf332750fccf8182f3c9 -0x7474a0960a6b16c2014e547081bc25dc7cc788bdb06044954167d567be6b8c92 -0x28e66363aef0d11f040dc60999d1ddb2b856036afb8dbbba073a724b341feeac -0x60204db144d3919583eb097dde2a79697fdae8879aa123c3661add5171c97934 -0xaec7c4068252d09d3d5fb79ee196aea4d143a58e6c7a6912ac47fd3ffa6e71d8 -0x066985bdec770b34c155f97c4990c85f43b4badc4f418ab6116ebeda72cde235 -0x767c2237c0daac7687e44046abb6198d22dcc8c8a42a90af3e7cc89d12111b9b -0xa2873e528af8e0f4120bd6f1f9aaead293ae53862e2aec82418f80d0de949955 -0x3a4c371d2edafa445876366c4353de6b1bf3cd86f91cca912ef326cef008ba0e -0x7e52ab862b21eb81a66ecd7630ddc3cf90ee5b827a336946ca9a15ce048093fe -0x3e49f3d6d057383bbeab9a4cf3bf082bbf931fa1d058d3a54efff17c787324fb -0x519da84c6d018eec5436568b65237b9e49303ca594a5fa97f4bebc1dcf53e4ea -0x0d2cfbf09836c07d0daa2563bf717063e3fba5edcfb440f7cb681837e6a433a2 -0x665e853d0bcdb2a56cf5f25be7a6427e3bcdf31a87d5aa7f999e82786881f608 -0xae11cd687580ab4427026b407a228a83a29ce6e419c3facde1c082cc47ae12f5 -0x62ad87d0ae352afb209c9c5998508e311bd1d303af9200ceeb81a9cbff2e2cb7 -0x3257e914c7da98e18622866e9655a0a00a032b136e1bcf9be522063f264a4afc -0xdb1e8eee22e3b9b314390f39751e2c5009001d89d86a9eed86c2d80aabc86de7 -0x522955092a63dac992a3594190ba003953c36a2d41c92a114eb5061f33f6e299 -0xc766230e46fb6fa4ba64831642765eb5e61376c2d07c6da197080997638381b2 -0xd6a433b60c3ca90572229fc0ecf4ff752780e76c5a3fc71465c7302aba459479 -0x1e45be68baab65617b6f069b1b6a62b9e560822f69ba98c68bc36b786bc00548 -0x97930b6567644327b53ca93a595a76af6faf1dd816ddca9dbf8b47b3db3e697d -0x00dac5f06a740e6fc24c6f962eee9dc43ecb10c43c206a6a63e397049ed5220a -0x5422c874619d367338fde984f7a66e0cdad931448d1bf06b2bf7793ef99c4528 -0xca6c2cb5ca8a7364acc22d1a93e8c0a5182ca8d2f2f9c3a551893a86998bebae -0x8f89424e5804d0893903628013637bc661cb8c56a908a2433273e270a3966f1f -0xcb62b61d4a3e83a4bb3d0688451f90ce5a3cbc0ee2797f33bd69bb6e8c5a6d43 -0x80cb716cf0d656a81906151d285021f54c46f6abdbddfaea1e34ceca929bafd6 -0xb81e5aba62d529eb0cf8886a5f161738ccc7dc9c5baf19eb0191de24982e19d0 -0x0406f0e8889757a4398ce305ade46062c151e21faed9f7758abfeb7bb8060bf6 -0x85f36289fae3478c6674cf2dc1fc77ca19f3d6acc306ec31bdc22515a634bb5a -0x90495fc6b2a53eda2bb8ec1c033e243941ebdaa40c70b195486f17b5ac396f08 -0x623a072aa7784f7758f3fa3e38afe24cb2632049824db28c347d3840f5551210 -0xbe8933a9a12a41ef39d2d8a92a3291264bffafa6ae1d84a92028a649597c6d2c -0x7fe2d7a24cd5287b8f789742c70ee2f4c6f1d61cf10b4a64d17244425aa49aa5 -0x7e33d3840b2b48a089a4cfb91875c3e955b3ba5e661c35c6a47b3325c588927f -0x5e94454f3b7c0bf6801915de26be03ce7f0ea0546db10961aefab8f1f027229a -0x781f46457dfafd304630ee2d3b49f46770920e4b7bded2997d05f4e70b4076d0 -0x550d32f983a20809cf98d3db04322da453b33cc275758bbf1a054da2abb89143 -0x9e92bf2311b497355ca3d6caaf6acd9069d1bf180941ccb9aee76cd18f0631fa -0x65ae88b4383dd1151521b960dd27e7444f759c00170c6379549ac819ccbb5463 -0x77af1586e5c4fa4e3a2c6e487cf1471661e1726e9f24973dad4b9777c4232941 -0x0657d332302a7c6b069ec6d990264047893b59c13c5ca69ca429283cf1671093 -0x970bb1c33478d655281180a77f4befbb4484b605d4a30fe4777ab8fe1c9ec831 -0x251df1edb2b999bc1fd6a543e6877865e83d258dd69c8469ffa251d68f32a6f2 -0xff1076f43514475ee68f8414c56e9bb68b7288c6e206ce2bf78b4b36e7107986 -0xedab92e72de61cfafd26efb1e8b44966e0937b62e6d3c4dd78c5bd787907172c -0xfcc216de7820316c9e3a3e1f72f236c443605cea76bb742e5a1d5f9ffd489036 -0x2cdf0131c295d6176388ab95b6acba5216986e5caafa4909d5f61fd4b7ae0eb1 -0x9ea7c11d65372ef3361d8c341eb0f5988721ce2f88762e056dc378ff2a21fd09 -0x29e75d82e745c540d9b570e207e719f30432ec3ad996e18bc010df0f632bcffc -0xe17e415f8f2aa4dc3be806bd8a5ee4a744211a829f1a6adf5f1196b64b6fee53 -0x47f7499b558a50990e55e61391fe8f02a3d962df6af7825b7a507e0c1c026f56 -0x299c3827f268f34a8c900b15bd325a31f77ee07be098b3832ccfe1dc6afd8055 -0xaa1307be39893dbc61d99de23328363ff7f25ee0ae49dfa172a86363033b466f -0x40057dd9ee49ef405854f7318529f5c035f2b17e27592b71d35946b930eadd13 -0xa2cbb94c02320a7c73b3c6f85df84d10910297e9bc40a8633b3f455b9f56fcd5 -0x305ad90a258008290005134c1aa1f88d004e01461a78e77f1a5252525b5321f6 -0xf60f466b51dee9b50cb39022ac63dc2cb1d6eb33020b0c2d68186b22e879cff7 -0xc683aa30685c8b44d3c3e599701976be6065fd070f1f136b0b0f1c3cf7b41a75 -0x583133c8da4ea2842b36db2f36a431dda554e5318a7d0bd1ccf631dda6662995 -0x183f23e564f7491f6bdb60e0ed5aa24bb4e149b17df18221f44d014cb230de60 -0x2d2847e2671f0f31df0156fad79ec5cd354481ce38fa09b9f2dcb8c1754c933c -0xd0bbdae5f7a6f3b053c9a02e210ab86c7fbcabefa84cad0bd74710ede990d020 -0x46691727b9340b90e37d6d9030daed4ec3c10ce054ea71c54c72686a84d6b332 -0xa08b75afe65be56cbf6f4c97f13c28771a641b4ebaf2fbc8ed508208fe40c512 -0xe01f5aabee91f301118e8affe1ae0bf21932257ae59cdbe26bd0cc38b4404ffd -0xb589e144cfa69fa7c7b10a4751b79f3d13339abe5067a0c03e3be0183dfca6e2 -0x75416c5de325a3555054b78128cd16f41fa6d58e081d28f3620554bafc63f5de -0x1e9ead17b684d01153534acd9d15e85f240b69870491bee93ab73dadd7f2822f -0x5330cba00e8bf52759923180e66813e72426ec91cef27d3722c61077c5d30cf7 -0xb67345b60843c54ef711904d2f0cfc6251f7e58bed5da6d7526ced4dba4baa43 -0x8d70be9153cbecc46b62b7e69d98c2f67206ea6dc0a7f0c906228c59e4f54b94 -0xb360f3c0836d48c6960fbaf2c0a054d57058ed3b7dc30207dfc576ee08fe6de6 -0x73cda3ee7b793345dfdcead2a80c25c7f75e3c14e32968e32fb0f4b96247a8cc -0x2fc8191f34defbcd1d56d50ca1c56ad4a641c397a4bd6f346d4c52d332a5dfe3 -0xe7bd41a72d693fef8968df2fef387ee564f19691f4dc6bac0a9c00ca42c46089 -0xadc2b7af22d859219e12690238acf6670d1f2f6e8efa0e42c4b0255042049aae -0x68d1e2474a420b620b51ac286301b03f0d888b510dc5e924279e30f60bde2010 -0x80bac94ff32ab0bbe80ff35bc3c8bdc938f886f232fc78ec69d916f7d8fcba08 -0x4b4a57db41e8a179d49ff19101d0977685ac7fbd7bb213d5e949eb0d90c97cab -0x0fff0c5819c1f6706749d30f4021bf225a2f53e0d676ce5f1984abb864ff5c16 -0xfcf0aed8df959236b37dfc18403f95f51952304c959f939d128d486f78e7c9ec -0xd2dccbe99b1ff601b9a2dd4521e4c0139250630fc0c5336d30b0e99fbca12a3c -0xc4252fe638ac867fd77bc7b5fac6df7462ee1b0efa4910a82e1e25e3eebcfe15 -0xd957c3a7791ba7f0f847252e03f9f970ffc1a677ebaa1880e52658f60a01bf74 -0x274a0f5cb2dd50bf3bf7e41a9f76f6c9d6b04b65033311874857602bc62953fd -0x27db55adf12326efa4286ccc34fe2aa4408cda869ae46884461ed32072fba46b -0xbd307e3f3b4cb789aaef056a099d36ac934a84312e291878ebace8a36f33504e -0x3e683a442fc79510956f5ac39ad4dce9661ec9cfb371ab8b74f3980f5a1a95fe -0x696c3a6780bbb94135878060f54cb6e37ac71f6c177532ddf3139f5dd2ca6eb5 -0x03112821d77e75375433f799e0a1cb008e9373bc22daae274eec05c364aa320a -0x6051bb06c50e7514b3fe3d1ea67573c2fe6eb75321424508bdc557d07ab0330c -0x6b93df2444e0b46af014827ec820b1b7a570c2ccfd5e13935a46c95b8f05e53c -0x501b3e60aa470ed3acc92619418535768ec5c0af515dba9f2c320098386cb96f -0x6476f11a06a19e4dfae58f40dee8e62754ee3ebefca82b5c5aaef8efc8088962 -0x68de63c0eda0f88e44a0e175b1a6480ac334131fce57d80037492442eb7cbc99 -0xa5466d5dddcc109ae9c8f504e496a2ec9fc924aa02fb71bc51a5a7cedc198f0e -0x0ae8d22f8ab041bd64aee4349b14a0fa63d8cb3f6e11e343140d810a471f0fea -0x9cd85ab96ffac5d7ff9411644b022e70f088e24739c336e89b2dc2ead3dfd6a2 -0xd83ead72781d41ad348c2e92b2058956f89854608fc587b5831267de2794f6f2 -0xfde72ad9c1374244d076cd0bd535db538da9097dfb6aa70519a23f1c85c99f26 -0xd622e1ef4b7dda84076d251ca46f1b21d093e7cf91af566ec006cf13033abe38 -0xad69ddf7882664fbbe9258896ae01dd4c01c06f3e6c043cba75911251d993f33 -0x1ce6ef05fe41cc7b1d5ee9b750d22bf263579014b1e97c003f87bf3420e6eef3 -0x06c312fb8c6db3f55dd02a15de813a158e9ace86f54e360b3f59c67ddc4d6d51 -0xa462873ca6c9deb5d6f70abfd22bb76165a62a29cc21152705d350d81601c5ce -0x9a7ce9958133253cd3604179703a8754d7d97973965725000410e35b30752f27 -0xb27038d5110006d9985154c6ad2a5af56716dea200f121272a7b6183ed368a49 -0x83db0a89dfb62d0c97c7e3c1424ddc6fde5d71df9ebe0ed474feaa92eb1a3035 -0x02272d2921167cfb8230b425e84c8e04df2ac608cb812a30ee55e83761bdaaac -0x6d882ddad051d68e3a3a7b5f217988d673dcacf1e1a27a106ea7905ffb88ea2d -0xa572b1ee347ebb4255bd6daacea4ec11a3d95e0024cd250ece72783597c67bca -0x209193ddb3f360135722fb682667396e2b36f0032192ccbff560f9087a78d50c -0xe7df467f93d1b33a761bd36ace900d31687a73d2a797183b8ca0f88f6aa3ff54 -0xb8783993daf79c67009f77cd658d5841d5107dcf3bf370da7e0794d7425d05c1 -0x30508c5137ef9a2efd5c7b2aeb2647c477f7b3c7fd4aac87367f91ddce040e1c -0x42522b92d3c6d6a8581a255b358d3f0caecac03d38b487b1e5636c55e617778b -0xc963161699b5d65270fbf9e998268f572d000049c07c3977eb6592f42a8fe9aa -0x76f5d8040a19be38cfbd6ce0c8ac7bc62343140071a2f15537a660535cb2a354 -0x186c4a87a995b26d794620d8d322b6ccad07fd66ad9fb5b21358106042edad25 -0x4b354a780357232715d250c195745a11554756b23ea8365983c2bf64e3a67c4b -0x286e68ccb869e05b6fbbbeb688a8c7eb27fd0661fc1aeeb65a3189f95ca4c437 -0x54f33ae2e8a624e7093c3918753b2247d20bdf03c6b25f59355ec5c4605c99e7 -0x99751daa0a722cf7f2cafdd47eab53c2d81deb93ddaf6c28590cf06e7287d230 -0x5355ccb7d0c9a63066578086fb01920ac1fb61992f9d191afe3b42eac646664a -0x325a24cc984ac1173b44f28905eb673f7c175b5f42e339734b32816cec53a422 -0xf23bd8a2ea1d7320951435f49bad5c8b567ce87b24e245ccb141181e488d6bbc -0x9027c708c21fee914ae93dd8923c7936a812fbc8c5f8ca0ef89702e8ae0bf822 -0xdbeb1a51e9f12554924998da022db754f1b17fc34a0241e76c74ae5f72748a0f -0x232c14a98056e2a8d08a6fe1f108daeeccf2adc3030ab8d27af023702a428456 -0x7db5493754a35e04d00b1b7e1eb76f61b2f055e7db7f6df4f9691f3a0d272689 -0x55f6620cdd6744c71e8aa8e01f45e897a5cd05cc183c5529454b0989e4f2ef8f -0xd1df8102dcb32e857912f46d001249f627a698f556e630557e559e758178bc03 -0x516a6a196054bdd33464dae5a2080a2bb1812317f9ab5abfb1673c377cd399d1 -0xa9d3c2801da392a9fc6e4adacea94c01eb6e7bbca8eb2a39a63905f3076c5aa8 -0xdb03de36c513497b513618508120c29c08b1e0b5cbf616599a41eb95f7985db3 -0x22f745417d541923a762c648fe31d5345427507fe56aa61826b741224b3b3045 -0x33e64143043f3eecbe2255e0cf8a0b6d2116b10702d963b020ddbde3536ca3b0 -0x7fe7f66d11c15b0fe1505b3cd23324f401a34d246fc34f8dd12f7226afd29f18 -0x115d80fbaeb7a90fc7bd2347d4e70ca9714b98c294fc77c4e53d155fa0686f13 -0x523805578d038aa91da77340615d69f408c227af455aee35c9cf493fd576595b -0x822975e96b09f3c67947d501b1213716904d7be9d7ab148af19573157d7b71a5 -0xa0bb6781a04132b770329822853ac6e9eb636692e626e225dfcf245007b9209d -0xfa42cb4ea427b03735012bdabbb16432b92d9298c14a026395257923e978a9b4 -0x2a03bc1d983e4b9314a9f327417ac670f302fd60dec5f9866b9c7e498a27a3b3 -0x3173d3093941c0e7ecd2bc22081ed72b4e1c7332a93e77f58018489ecfef54c3 -0x1ea5815551d51ac854fb5491b6a2bccee642158d5ce6518e29cfdea4f6910598 -0xcdfb869022375ce9dcb5fa21ab0048933d08ad19dc76953d9a3055edd5dacbe8 -0x672420511df992332dc516002a79eef7706a4c28a226594b476e5ec219e08ff3 -0xf9bf720efe3f41cf44ac501daa1d1140aeddd03775f652fcdb3751356a60ab1f -0x216e43ccc4327e08c84e9432dd680994ce63afe861e59f859fb0de4910626e67 -0x9dabed40ac51a552d8410e4e64d3114f59023fa8075735652e37a56babfe7ddc -0x3efeb92b1bb7e77bb8a128e267dfb46796238a1977faad419c62760e9a9a603c -0x1d70f31b9e9455fbc7c521950b149fcf1bff4b310ef8f4923cc2a5cf4a1c91b0 -0xb0c456258efdf0141c4abfeadb6c1dd6b1f75682e392bbf77663e9bb0f2115d6 -0x6585fbda6d47ca388e06f952e92f12571f4c515bfbcd2a86377bcd7b06ab3e4e -0xb352f2a34b379dde9c9a13e5bee5aa3acc21e5249c7d6226fb8013968f82f10b -0x2f9cb80e7b7e10341b219cdb8c07649ea1f8ccd77a882255520c0468b606fe98 -0xed80f0f0cc6eb8d883fc5f361615ef71127c59071c26817f53f45b3c2b14d732 -0x4a83a9123fe8b6339fb56dcdc65af2367ba16ca584f69b996fa026492977828e -0x74979c90db7b4d1aeac61c7870d562aabc343467e11a401093a4e0748da2888d -0x8a9c62196c2329127124caba8f2671aeb79090b94119f247cc138145aed1b0ca -0x0f6ccab02632b319905e023432811ae9394ced2aee756e59745f0cd5b9cbf3e0 -0x02482ddd1bfcf07ca9335c759488ec6874ed14ec02751c14d6ae4087f58b608d -0x1c1b35d64469619b5c4fbfaadcb31a07e500a03c71089a2ea42417152583e818 -0xbe0d0567da555dcbe24c0c021c88a15175538e8c803fd3c64dfaab1537bba73e -0x8a02b49cc93c95ec54b89d76d5bad5a8732d065bc8abf211bd74f51d62829563 -0x7c256061e208383908a60901f115321166613db29e8992cf8d569efae360b617 -0x56b1c758d15c6094a91ed3ab9c9baaa840f97291c441aa168fdf4c402001ae66 -0xbb0e50e3ee05c1bd6bc2ceb1fd7279c18d3e7c64f06446662bd277dbb41a9ae9 -0xdc2ceb3c1b3534c84cd693286f467acc7c61936813a4497de49a9df0e024fd00 -0xb7363190a16b02aff3558d977a2c167c985d52e2abd06424f5b70dd1aa1688ee -0xbafe5b69719bfaa997821c761e12831acd5b5c8800b8d86e5e839e529a71ff96 -0xaec7ebfcd7e48395bd82764367d85e0ec47a59b00f94cb490c8c926d34aec67f -0x5dbe8438aade9ae1aa5c9da532ba1da57de600ee822fbb4271f0712a378cbf46 -0xde8bdb7ffc0debfb76b9446ffe51d3b2a80265e6bef1ca5c9bb4fd5e9e3dca53 -0x8748a10be414cc6d2031d39109c4b44eaa3f466f8314418bb8c98f58c0f6c4be -0x9f4f50a6147ba68fd360c8e0e7b00357021bab0b8a8a047785fa66270a7fc47d -0x71b6c7207b421a56cf70a4128a8ccb48bf3a5849760b13c0a2d67ead1e570bb5 -0xbaa9194fa3e099b4daf63a44ffd678fa855309b3ace7fef989fa9dfdbc9b2695 -0x8742669fdba33ee7685352d6e0aad7cc448fa4413f89ec3af3d4bb962c6b9db2 -0xbdd29b3235c1a716d4a16a4b9912fbb3d21296b6aaa3049b1c529902818824ad -0xe45b0616249079910460f26df93604512e2b30d877c0b246a4caae2f762639f5 -0xc2d1badde201857f262a1d729cbae4d6e46e57d9996d96cbda9dd7754d77e810 -0xd7767ecddc4dbbd09bf87646ec8c7efbe311a7da998bbcd73892b348f8963bb8 -0x1bd4a585076a6be72da8cd874e7776b0c293fee4d4cf48ef64dfed5d6dc6fcff -0xc9fefb35f00456c42d75596ca789c2083fc80666682d6d1d40f6777ae268ebc9 -0xb36ba9bcc1ce332b7df7713504525c360781949100ab1b1f2b7f1e108ae878b5 -0xc0a3f81e056ad8ba422a4f5c85167ae78e2df2ed62dde4b25785b0df13456e5d -0x8d3e67635722c381886095fff880779bb11b1d850634d4a8686a0cbd6eb0b16a -0x5c63fb982ad4f7ddffc85c84bc49c9f1441bd866cacaf03c0b5aef0fb123306a -0x6e0f7592f344e0fe3ff04c6f103241c77f9334a9c95ea3df1c03c1396ed9ab05 -0x48b5a2eaa49b749971bc5f5850b8ef9ba5128dd7db6ef46d58227167a08fa491 -0x7a3910b802258e6fd31c6a00f4dfb876011104093eb17ed14403fc6e2642b49d -0x16940051d69443dc4fedb82a844b2a860203f3cd1fd7611681c77209040ab30c -0x7bc2dda1576c320210ed055de6d3d4109809a3c5f136ee207b058082f20f814a -0x550e8b46a870a383ec04c6a05a6a8f0187e9c96aad46517984795ab6eb30e7c4 -0xe4cead9add0f2c817b068dd001a3506bc7a518643a3dec888aa452a2ed6c4f5a -0x77325a5d4a9faf77712b0f081f249de79e43a3e3c93c4a15fa74390b17b5f630 -0x23ec6bb80113fac000276bc5b01c7f49e12aa5d9f2c8b6238167a994ad76eac8 -0x0dc69eb030577f83d2f6db3186914fa09f9fd3521045bbfed0f892530302b6e3 -0x3c7e934b6a9415705ce62a6af1170e8dbedf0e4088ddad4b214fb60861844cbd -0xe1391e9070a02df845daff52f4a8eab06a0161d3b62ff03b0fcd461fe0e19d05 -0xa93e97b8c7b67a5b9fbb62b9b6dc718ba375f22eb8e3bd87a2be8aad5c72bf6a -0x0368cb35567d2b9410dbf6c2fab73a88ff83fac61b5b5f204c97408fb462ee9c -0xcb50d6e94925da6f4de32b3ddaef6769269bbc592fca81ad95054d47cf5f2fa8 -0x7309517220fc16e9fdb5a7be4c9073b2444e9923254c52319f747ecca64104ee -0xe0200a5343d79a5f519763e0b3c563210fecaa707045352c46bdfcfe2a290204 -0x9227b991e5f795d656c4610cf86d0cca594b3c208a9dcecf17fea90d2ffc6ae1 -0x0a6e7b4642ed14f57742b32597d6f51be80fe8081e46bc94016f619af64fc466 -0xf4f6351324911f7620ba04f7ddc33d1916e8a5c3f919cd0dd977af04e832330e -0xa05ac02974bb74200f1ac7622543c3d937237f69fef76d0c181b667c17d71444 -0x2e5b1e014a6f4b4726c3ad6468708e8d2623312ac0d8180392b438d8df9ec765 -0x83e358ab8fdf2a9bb329ab7cde30e6607873448ab9f17f9622020a80557309c9 -0xeb2872780a310eca2097b51e1825077c39b881fbc59a15c43a2c8ce9caa187b3 -0x42f1e185f7a6afa8a3659cfe79e813f8ef851a663afd5a4681bad0160f962f11 -0x130d96d2145449fbd91ad4845b2da8e510a0a910bd2a643115bad0d8a5819926 -0x479e370809e4951950ab7fbe678c33a6f9ccdd510477d358e23e3629cd47028d -0x90a6064849c72a5e54ec91267cf17ef975eb9df9014039f611d5450fb347ccd2 -0x4c1545daac71d55b1b5e998becf9909970a027800602957d5f080847fceab789 -0x44747f9a311237c40260ee860d3c5b5260f4a274a3bebea0860a3f29db268c93 -0x70d37a5a726a1af5e9e77376525939bed4f2eca07d50a9ebc940670d8f3a933c -0x82d1b42643cd0baf887b2d1b89c72e68add3cbb83ca1f2134825d93dea03b7bb -0xed20e21c9644e04fb67cd4370180eaab792146e70a9c5bad11892f8782bc13cb -0x66865d01a1195fbb374a290fa629dfdb0e83fbb228661a5b367755a208acbe37 -0x24b84032e29108c28f9ed2c6a4a8a70c93ff1cc7087f7e92d07773083164253b -0x53b2d95f77e6e77383fb6c8cf5e692d8549e5ad19a593f6671b922f6918dcecb -0x463e0313ffaa00218fc412b9749b4303c3abf998361ef907a9fb8d249658821c -0xe415b03129f8501eb4e008bd3bc7d9713075641c9d8e8dc59ed19ce964f4bfbb -0xaab3fb520c8c540518f2b1148a997ba5005bcf48d4530b59ab5138167f5f8b6d -0x47ab6b2e23d4359e1381802adcaa605a04cdf05491e891bf2f391a1b46fbd10c -0xbd5f9955c371b4b8076cd5cfea00cb31c970d68a3c87a441548acd9cc053ccb1 -0xd69e5b3d0d7b4a5796892e0b2813cafb9ebc1debf1ffcc966b030263895cea2c -0x5420e195da561234c643a300a34a6f2a06d6625a6318cd31099d05897b0e2e85 -0xc0080fe6cd18590a2a06f65a22cb5110a6bd62f063432ec26ee8184d286dbb35 -0x2fc4e08fadb1989ae7071e7b28b0ec422694f53fa3d8f49d13a51225780aef0d -0xeb3bb213e1d796e475ed71a6d66f38c6c8c2d552e3e1efde9f75aa38f4b44db4 -0x04c05d9d8292f45e2a9c6caf4db9ac080bd617789bf420c40b32648934b2ad22 -0xa066bbade263aff0e2169ecc8f2512438da025cefebe6039085fe439f853f724 -0xa73fcec7f6ffc2bd9e9876de470c098da9a4917ef32802cb4aa162a9b74e8b0d -0x26219fed512d512318088282e562e1473ab625f4321601cffad530ee9d18bd81 -0xaae2417a85fc6538a436c16a2a4bb0e6a96ac1141e991548666b40581c3a39de -0x7d4c307f771c269d353d2706e8f16e7cc84495b6424aaf095898b9dd457890b6 -0xbd8110de0171f2c6bac61fa625d080472b1bfe08ab46af9ba24d9f0b48105415 -0x5210f47e170adaa394978bb08b994cd21f42d9af766902b24a0961673f0000c0 -0xd30768a020a9687cf5bbea36b1ed965da9b7812f063453062c866b18056bf823 -0x7e0cc3b0b193ec5f73e3d629c1995a8455ac6fdd01b8bb2b58e1016ae65d116a -0x0c628d76bf9d7bae9a7d3d0bd909e6f2de20683dfc3d0b265204a739f829d780 -0x810529798846ff416a6f8909e52bb47cf163126ca80f0022281004fb98454dda -0x68500d05e213221ab5b123a0b10599e3f4c36f032d3259628dc2025a575e1b11 -0xca58da96756196bc17917620cea5f6237a09c5cbe8747697c7c9c78191daaa6f -0xafa4691759c56351cf7e021af1d62f9b67bc8c8229d02dcfb1a48b3aa28b0354 -0x868a38b67b58f7853740d202abdf400225eecf201eb905b8612427f8454f9ebf -0x76d2985b6da1fb6a7a36ad968c845684765c5739bc8d56831b2f4536fc2983c2 -0x544d2d384db398841b78a6d353a43a8f3f458de22c4266be3d82f33afeefc651 -0x1c9b8a547136240fac95ebd300e8149e00469a47dd25bec61ae3b6394f6379e6 -0x1e81432ae96ed83f0c363ba23688ebf625ea77d62de45ed4dcdb7e8e4459a9e2 -0xa16714db420259954d0bd64956dd7ae9e279eac51d3de87eb402ca7c526a54be -0x785bfce6d5f5de402c7881905ee8ef84de091a94f48134f577eb5a55f894df80 -0x383df4296cc6d7391c42990589f5471bcc0c9674483d01613eb517fdc4c490fd -0x8fe338fd1c15afe3e07b9eb90b813dec351654531accddcc7ddfa372c6f7fc79 -0xf26fa2b68009a84366496932759760dc8e81bad209b406777557f595c7c285a4 -0xfb2a6e3032f1b825757d8d9e28965dcb0ed96bfcdab1c4455b246b973f3d999f -0xa5fc6e51dd3257c742ace121ab384ab591181c0c60fea02dccc54890de12dc84 -0xd8328cc2dcadbb58dc92d2a5f4fcf0248f1f164b10673de427251f633fd4d055 -0x7c4ecd18e873b4d6280b4e1422a009a7c6b101e27ae07f23282b121877099995 -0x60cb2e57c6fa2c337aea30037851249400776e1bbd41206464dc879a31000ad0 -0x124dbaa3f4f3273f3070b58f18e2319c6a45570cb5a57dd0828d21e0a6acc55e -0x235054a7310e2d4a5e27b51fc9b3bbb35c2a8ae77043caffd0935f786ec49d06 -0x8f12e0a5430fcaa3bf629dd4eb3dfe1c7d9c6d361c9139fdfbf784efdb349b70 -0x69433c691092f10fd491ec09e309ba238c2838e4a28d808d3a5e998962285f73 -0xf083e05770412f00c472bb5cd87e797b9e0a380f32fb8761c2585e599b9ab25c -0x365a9110ad43384c4a12042bf0515ace2c0fbee675160611f1f04f47ff149470 -0xbb6ce8834a4f57d5ca0eeff51fef2571d4cfc985a0e71ff4404acedf7a752fa1 -0x49d47baf71cd53686329b1f990c06d1aeca08c19ab524a5380822bda18a81bfb -0x0887e892ffb7896644baec9f23423f9ee017a877ddaac1d9846adc905512a591 -0x261e7d6c2b2ba9b9097d11fc5bab489ae9ef0f9115ce9e398a138b6cb59dcde3 -0x3ddde21994439a3578b45014245b12b786efe4fab6d60c26f1bf4cabf7fecbaf -0xaaf593125f3f100f6db8458dcab634955d71f364a7023f5e86b04cd3a7ce94d5 -0x2933396e0b400d17318daaf0dd92aa60c1573a6f0c851a3d95d5682c7b82bf71 -0x256bac5e8ba6b8598c474180e072fbb8847acfafdfe37b1b7fb19cac5f485a41 -0xb0ff4a595728def0a1b1d2c35007cd8d1d2a68e5f60f497f13242cdb58107b7b -0x68783f1e9cc71b7c7b04f0c0338741f01bbea71a89e99678306cade094d44c3c -0x822fdf2f3781a72f79a2b6ef43658d089f5402c58c6698f7e04cbf1a558b4ae4 -0xa2996b2a55ef50d2e31467fa91eedc998419263e7a107ec6a9b924a70c81ca3e -0x0c0efe30a93861c534a6f96ceb43b0ce083a5b7ef68beaacdb6b86cfcef60ebe -0xb97e792fcd8cacf9958d9b688de42e326d84298f63d6683901713fa3cbc9cd25 -0xdb25a1171e0d64a5f4c4cf206df3aa47d002d8d9781b7c6e53fb8dfb0a016089 -0x110722dec6cf5266c3bf0ae9dc3eee25e88cee3b60b7edb42630e55371931df7 -0x41d11cde001a74f82bdc9a7933b4869f7a04e0c281f8f673baea94d2feacc24c -0xc005106e5830a95261a30e4fab9b1d9c6121be4660aeca8c67417b025dd56b16 -0xd0efcd650839c8a7d716e6e8e206f384bb11153da206bd1811fe9d0289e438d0 -0x4c80224eaf470fb82c8904255f2b6a980d7c352446b8bf3b739d7a3f3d61e653 -0x16029f3cb253d861e962151f344505b0ff600ceaeee3dc6d2588fbe0dd16330c -0x3267c075ef6681bee89d4d1a2ec39acba5d2292057b4c7e01e2f8ea8d5875587 -0xf8c4c6124461203e342eee0283ac3f929823d4b2c09fa097464d3a3035d3fde4 -0x6805bd0e543c0255590e34c20ad6c7c54308d306a3121ca3100af000a32247dc -0xcfc49efbf3f6724fe67d7b6bfd27347f643f9d3e4f3e56942630378a49c483e3 -0x1138a217a202967f23a1d5be3282c4bfd6ed7b51969994f8fd4c5e86dd554660 -0x277c54edeadc88fbc239d2dd4212e1cad874f731676b03b9902d7e6fc0198cc8 -0x2d762e018e03f16d9d4a05a3b90ece7f6d549a5acb252c0b2d6133c87a38dd27 -0x92dd1f070ec393d1c3960ad167714f0a88c182f4bdb38d7fd556866ff677afa2 -0xf22bb9a7757f0ff4e9e660810ab0164235bc6bc6dd463a87e042b1481356f638 -0x9e4d566350ac43feb6e61710f8acd7f01891b6f86e1428dceab8875895817786 -0xff643f96e01e8fb7021749f4911e29be1ad575182346d26df34da65da221b5b8 -0x05c2f2c205c41c76f94d5528613e9336094b82edfcc1da8483fda6cf05f48878 -0x4341749a59c529481867668c876eacab140be8314153855049b3145bea59f097 -0x61e3705f17a275cdc09cdd8ef711ad2080a816e9138d18508dcc6e8b19c590d2 -0xd5ea5dfc7a91042328a9414de02af7e37c742f665e533b5e30dcda3bfc7fd094 -0x68af6c98b7e87e6f90d8d0d8ef997eddd082e058d2a80ea9ff43607bc2c8b00d -0xff179cacd393128441ec264f1fe0ec640a100b8409aac49fb3908304549f2a47 -0xb55c10739082b01c4262388ee5e3645331937889ce2ba5adb6714cc4dd14302e -0xa2fb080bfe98a4d5a6eb3bc4ded6b6195c2a825214c336a541c497f1491bbc02 -0x9a6d2460aa3d228cd884712187a8ec886a5b13f3d3bec05e63cb15f624282264 -0x28f14b6139cf5da1bfe6c4602bbc982810f474011e4791505c3dd8caa4b1b1e1 -0x69568bb5d16e083624dcd8e90e4a86e930c2723df1bcb9a9c4f37b37d18007b0 -0x97946c119fcf9a958a7b44b2f8829385b36e46e08431eb5505c26c445705cfe3 -0x030f77d70c1e004cc6eabf1fd60e6bd77925158c83f85c81a9169b3bd500c392 -0x1902c537a4b8aae508bab40da5234e35fc137974e05b7359bf82b99ab115333b -0x382aee25e2b1e8c971791e96a457195c37c38a2b76160476ee304552f382a4f2 -0x18c153568633810d7fb1683e7543c53663e5c8af07f129b7da3b5c78648662a7 -0xdb8d0c88c3d76798ae760240693e29e346ec4abb3c446e39b979692de3171780 -0x927fea35263b01595cdb77d3dcf1c16e1ab1954396d66a3e46ee135f24d82ddc -0xfcb486bd63eee77aeb26102910e9426f93233cf5527aaf4fbb06373f4748d0bb -0x2e262e9f83ff3e3a418abca7539acbf1933e8b7ff939ea78e9cf8ea2a29b0930 -0x20ca46667f5ed1b3565ff94679663f4eef4ef78d0a563f87dbef9e86458cd3ea -0x1bd3d8d7b8005b8e32af944e08734bae8417f5267793660d5f967d01f756d0d8 -0x0e60ffab0222033c2903d874ebdc2b9eb7cb8a03550ecaa3b393f4c5a1e624f9 -0xaf221b418c0affe4ed0880e87192bdcdfb5e0bffaa34368aa400a37ea6e732da -0x9f8a931cdec90d087bfcf0bfe54c5fb52e0ab4d2889c5276091cd112f63f06b1 -0x6197c92c2d4c3ff24dfe34740393f1a073765e7691a89545249b565d33a2c8c1 -0x8e4ab2ebc410a132c429e92db7f581a15e62fedae147d1de5149607f93d80cde -0xc13f77103a9c48ee921b76e83799bf559929269beee55cf6bbbb811ce82fdbbd -0xb7f9229eef3ae754adf4e4293d33aab05ce876cb9011659ccb10c94fbf923ba5 -0x1bc4d914dba053be2f7e724e054aefa8b27122dfc1999710344cdeda778377b2 -0x56e973ddd2777349086c36f8fde04feef9caa701e19a5ab4211012867b7576b7 -0xc9f24e5aa4ecadba239bb56220f63477c57cd67a0b23db630b535652c9dcc6fb -0xadc151560ef6cb97485852ccc51663b36a085be20e7457491c4ed27a14eedb46 -0x84f2719f58af0ada16ef35caf85959a8808dbb28bdbb971d5d3fe3ed5d500765 -0x4c746e00ea71bc34a04e331892966d2e7fb868192afe0f89fd7f7a5140ce5386 -0x0f0de61789a9f1a9f089544a6946770bd0b5aec2a4222c898c4a30c3cd9428ec -0xd3bdffa2946f8b74df77b41e439102279bd23b47192f325ceb3764053e530815 -0x1a5b27506f776973983a1d074a5a6e27af725796369684a733ee13ded0668325 -0x07bd21a60b86fee99958a8cf98964e1b017a9e57204c710132b6b79ae7849023 -0x6564a262751a12882d952076c9e60edc1101508eca4d9e82d0869b5b6d664d4e -0x480521cb178c3a779f21beff38426c6821c1cecdb0ac18af65d64555af2ef0e9 -0xa5178e172c07f8640321e790cae1666dfbc0108275d432ec770edc5457abefb9 -0xc4b8dad5a3f111c4ad1cded321f21c6ce2d3392522f9e0da6c3964fc4f665173 -0x3168fbd97cfde7d9fbdf7cd8e74d93b9b27288e6c613a7fb89811888a608744b -0x82ab0942d78b9b31001bed03e2650964aae4fb376547d4be2b7ff82b929f816d -0x85cc8a4f9cbeaf8ac55eb88fb698857552a95b36f475bbe374ca0ac8555cd0fe -0x8a49fb6cd32d50463eaec27a1019436380f56a35ee48d62a0983f226b6fac771 -0xaf4c1bc5d49cadece4efd4e49dd5f3566f3741c3ae35746f13aa44579bdcf354 -0x46a2d8d00a5f54be8b23b468a08126e37e5fad0097bbc543902f0f32e79000f1 -0xe17a58baa2864395644096ba91b86209bd29afb8459bfd501b0a9be103c86a24 -0x548fb2d0331acc24c90653c3af5b1064de80992e74d31ccb6b0d37c343453a65 -0x11cfc8ebfdff53800f614af7694a8d0b655eb9b902748970aaa851f6758b390d -0x07cb9e75199392c081cb09643b85ddd689a65cb1c3b2cadbe87b59bb7963ab26 -0x66646c380103a2dcace6441a3299808a05770da37499142919d976aab50d8a50 -0x846fb25d1129210c013ab9c09758df6aff4dbf6ccc2a116728069cba290bd209 -0xe4b94ea77594b26d5bac96d5778ff44a9862ad57de4bc21da54397bba58f3117 -0x7fea369146e82acb02db4ffe6e8d0fe50ba5cd260aa9ac72c10e9f90ce60f084 -0xe3befcbfcdb22d73f807dc15562aac219e56d7cd9342bcf7bb06754ab0ec2df6 -0xe5a1d13aa7a2b508429b0c8da5c7313db8a3b9a823da59a50b8f9a1ee7c7065a -0xe0347a726406baa0092cfb44709325643b1f9d102a3ae27de2fca050a4af7609 -0x5c771f088be954cfef35c0d1ef257cca400ec49df0961133adb417e5a6325fee -0x97381e6f51f3fe53e3ef0c59dc855e982eb38cb1aad0ccd2c542dbbdb3786745 -0xffca30e75b7035f2d2a3d177c2a6bd8f3e3e00f78e4f63363e144b0ecf1a375e -0x8560ff4b5063cee53c81f26d83dd4c23ab6544be208aa96e79d544a03d8d885f -0x4e428ffa99dccf116e80cc99c3b86fcb7f3e828b0f2e11fa215a934d762672dd -0x78edd050533e205f7e5701b5fcdb48a6c8f36fe3f70a089aeb0cb871bceb9a44 -0x8ff7dc11b74ce04b547d7137cc045f0f644ac87baeb2ed350c5c5c4d9f6b24ec -0xfc4370673f4bcb4a9bf33218e6817062c44abdd79a65adca3308c59c49e53908 -0xe1acc28dbaeaff51a41579c90ee5c9e03af433334c6812cbfa1a06b5b078334e -0xf4123dd27deb7cdc2bca8742ee4c0c1cbed212587293af59fb32e7874fc00e6e -0xc7e135712f4902a777500f0f47e077f31e5494adb326f2bc807e511f2c07a06e -0x9479168ce1d4a499adee641d40568bbedd003b015b4f90ebfe809e568dfe8081 -0x044ac02755745bd30434cc14a4bc2cd3c8c3cf74c4894a004149628aad4611a6 -0x4531531305cfcc335cbc2637024c8aba91dbfba4860db8f74fd03f298f58002b -0x4c8e7ba1c6b884f7e526b35ccbad15f76a964a791b202843f6dfe7682c56b96f -0x679e633bc1f4941015626f56cafc565dd8d9fda4fc13323bc39b73b75a5762b4 -0x91596ee72877a960faf820a17347e6ba7c7af4c9119cb74b31f25df295546adb -0x31c3a2fc7ec064b82e8b855a4eb94fa1d4086e348ad17d87e86fcab814f2722c -0xcc1549752cca06eec1af0d1036c7ab4bb04892d5e56eeedb4dbaa8ea90868ed3 -0xaf1526517f04caa6282576d6d31c4183b08683705414dc38b84a24b765ad7008 -0x759f398f2e726094baa810d95ffefe7a52700ccfc08409119e8ae518c8aae9a9 -0x1837a553081ec42c31442a87e5ad37c67d06766ca1591ec25fa019c4f59d0c17 -0x18ab18c0b8bce08dddc2c0c622769e6a4634cdde32e2669dcb3f3d58fba406ce -0x255e0b842a89fbdc6622cbbc6d7ce64c7d684904b76ddc3fd1b534639ea65191 -0x05137c39cb365d9187724e4e0b54ad90fbec24d0f545c13e97eb7b5fbd1b547b -0xeffd839cd426a4d23334ea1d01879559caf5f3b52978ff0c0c690ceabee81362 -0x9c9c1e4c5af8922af8a4adce487d57758d78b67bba6f2a462bc3ced0b7d4984f -0x651baf1a7e96dae939fdc2ed287e8f21dbdab06a17173be348ef87cdc8998277 -0x98167cc51919c79161ace4d3fc4f157794eb5339feef2548d70895c4c7f24681 -0x08b860f5e1a68630e3b4ca932f43762c9dba30d5e7bc01662949ccbc52639696 -0xa2477c3365e40a005bfb54c5e469c582369be99726e754028b9e8388f334bb23 -0x1e4406050921f4e84c1d065ae5be9f5f5906e1b65ad24afadcacd2c91f3f0666 -0x0c1d55699cb51a0c1ffba1cf744be512bbbadb882c8b1557614f586b33f3d96c -0xd792b12cd3a1870cecb8ed7c29637a2cee09eabfd5d84db510a5cff12d488f4b -0x737b36ad0b21a56f7ac0a00eccedfc05ad686368568303c6af813acfb279f824 -0x9f6ad96b44187f1fd4bc6667c33df49b4c2445f9919de414b9492a2d78b5c640 -0x3f5ed54776ba4fa401d77ea90f1be91827ba57cff730e8fc01285ee9ee0a0880 -0x7c2ba9e7c92778dad1e98324c1ef7231afc940a346fbb0f37df6b30b370fa167 -0xc4749c16a6bf39e248bc812d05a3e95813aee0154bd96f66e96734be97c25933 -0x520ca33258b68ac3f8099861b7f552f95ae4365cb5ccaac197b62a48a2ab1c84 -0x449c6530376351cc4794df89d8bc779c06473fa423b26c58d51857b29b6f34dd -0xa47161e925fcbdb91b7bc37c0a760f65cbeb45ed1e6452ddf6919d1c73858e46 -0x9d3aa72f28abf67726f0ed2f8e224522586636ad2547197b6948ce9d55a515d4 -0x154f65cdad85d912f250abec623ea65426d455d1f594716ff9c75dbbd71bf692 -0xaa3a703f032850eca6556f331776b3aa886f87af3bdf6a238c60da98f56e29c1 -0xed9bcb02bd2ba9d433e3a38051b5ec2da4f1eeeb9589d8978e571fef628dd539 -0x9ca3531e815a63d84fb0014c401f218d6f5b7d960087e812afd441e32835d63a -0xee9041260a1180c97f57386749904ad960a79518aa3dfd0fe3b9423da682b0e8 -0x6181d1da70d00943c377b5879f724591ae96db3fd50a158c289f2255c0eb116c -0x516b437758c348b5215c30922c256949545c1003c4aa52589c855ca0d5d0a633 -0x21815a26daa18173ae6d115f42850490745526ca4956f3119aa1e07a92c53e11 -0xa01dc8faf6e041b27c7283aaa2f271cdd878b1aadda8e6ce287c1e8711d7ffa2 -0x4f9fc5434863cf56c5266f77c907a031419379275e7eabadacc81481a4f2dc12 -0xb8aa5b484ddcefad9d4f58999762663e24fa770109fe02a20feabfdc6b66aef7 -0xd66bb1f21fe34d23f8f1c3fd6e9bf8464913b1ebcd0c6005c3da2879ce95e768 -0xbadcd537c2bb8e6865b428567f57c349172126bfa2c548e5c779949ad7f4a8b9 -0xd133793971615ee4257e4a4f26ba6fe260d57b98e73be711a6d81cebdbe890f4 -0x0996dba593c308a0cb434579cba22aee199fe62d2cf93a0e3f5bbe37db68c173 -0x0eab1a83f57af0068ae23f174d2f7df57ef6d21cc4c15483eb44756a4c17ae09 -0x75aa2d6dd5b1d44b273e5b513a60e601bef84c30aeb2728e720e7252ea030b62 -0x590cef2fcf35a16da686c0298cca0f8a0051ec7f2b6f52b6d0ba1c0c954b26d6 -0x83df3cd0503f5b9945a5512b1a769217fdd408790460a2c5742ce8b04f09b2e4 -0x8de8df43fc2904dbc47d4dbc424da5a14c717571b67fdcd717554df42ca3c382 -0x6902c696c19107fa2eb15aedb581b75e1eed0f79bd4bf72c2ead360f0f45acd3 -0xeb705cbb234ec8161adfd673f1145bf9fe2695691cb556165ed31624c68cbb92 -0xfb6d6bf14de74a73d2078430b1a141fe314913a423dce00a5b3adb328f9c1446 -0xf937a4b34da9a45f8e5454f16823e8b015626d3cbac8c518d76556fb33d2a2d7 -0xce19165cdc44efb5f08fc6625f2dd7da4b5b0df696436f0d93fd8b8bfd8e0237 -0xdb4f6727296e7f20cb2c892f15ca2347b0104135f757d6c6f5171d0ff5c80a96 -0x1149f57a303cb7e412622144721eee9edb8d4e2b6c7bf24a30d72ef357537b97 -0xeec2fca12c15c6d563de23caefe0e4b81fdd5161c276d8dc438d2e85b1bebbb3 -0x7be49d3c9aad6b700531450bec383e8aa590426d7068033ed1cb649a2743e802 -0xf0f2f07b4cc74ea686e6ccf362d3c1a8108629f958f58af989090049eda9c708 -0x14665aa66384355f7158c0c57fd5271e2a9b9fd2eb679b75acd216b9bb772461 -0x2858c5c00eea7b0477eb06c2872b434d0315462cad41e740c75b58daecad8194 -0x862cf2f1a9d5f08338fa49959ce883aa6509b9915d9a1489879f24a3371ad0be -0x6d5a3132bf6a84562cbaf129679cca6633dd2b8107eeac131ae7e7b04f5a9463 -0xbc28fa857d1baf826d07617d45059c544acb0d60a4e8fd7b8c420efdfa052472 -0xf5e087175dd7dab509822d3ecf591bdd0cb388448a2171e5e9505d6342977332 -0xa407fde5c2eae938eab0f60d92e6e1f753dc63dd8ee6694af5b0c743831cff90 -0x85702de49ef3490d702a082421f80088173750712dd7c1ace74107810c9a99f7 -0x3a91729eb7cdc330d94602a88324b8912911a77f7d6c4d5f7598cc0c7be7e21a -0x1cb20fcf3f4e654a9480a4acd5f0483c1d08beb7f023fcde1688868151f2bd3a -0x33f8f1d04797ea8d5c357f90f9afc833a70fb8bd1defe7c55229f16e77b93d81 -0x51059c59f4af5a58712cd459727bd409dbb2cf4d1ddae6a427a92ddfac774c97 -0x14e4202b0015180f432efb130f3af243186e841f980b37778072b31b9d578646 -0xbeb29252b05a4d2c4f04eae18314a9309a46ab40a31fd05cd032e2fa70c1ebe9 -0xa681249e8ad98d216c2f0455a1022255768e806224bdbdb6d315873d26ce0186 -0x69e588e53df4d6c9a652bbadba74f20159f1a4d5134f72a482bb97228d4849b3 -0x117b39eade136265f25f8615351b748a43173bbc76a33ef4b004d3f370a354a3 -0x939bedfb6ceb56c449349f3b97cd85ffdd7f6737ce8bc1fe0c8f8a5556a8de48 -0x6206b34374f574313da5b605bc9f8ced22efa5cc571f10a65fe6e7e34793bbfb -0xee303544a471085d8553cf0d2a7d12a68dacdf2e5b3c73e8df3db5eaed494efd -0x80737b17e9e004a390bd02496d22ad9bf5e52c1b56715b136748f07492a0299c -0x86c313b11d3e64d83fc7be894a81cb8a2503074f8376613b0d6558c92141d9dd -0x52ef99c5842b21a1db3bffa9de5395309df8c5d63a73f70dd7accfe87a54d888 -0xf68f77b0fb6dcb6fea808fbdea6de773974706be22404b86b49f184a8abb9bcc -0xa070dc8f357028ac89ee47a1504227281b7bfa1cfbec9b3f40e88e9697c1eec9 -0xfbb55c2379047a978d7d2884da9a6361344e71964ec515aeeeb503d3f0b22380 -0xe321ac55424da515bc88b70e8323324fbb6635757dfeaa09f306d9218e919ea7 -0x1514d2bd1b311fb4b1a9101c0f42f6ef668ddb273e941a0c7853c24995cfeb42 -0xcd633e4faa0e6c057a11606c0fb06e0d2d1cef218bae1ca9358cd4d6a15140bb -0x6fc3b2e494685190e4004561b631096adcc11d5eaff9d93bb0317dd3f894f528 -0xa9b7ea47aae4cdf10ea756d28d98d815568a0a12eec9c8b5391cd7141e709e4c -0xa678d6fc99ae70404ceab87a660e11764d9edb15103d803f54cefe0e61ded598 -0xce6ef7feb78acab4855d8229642f62b33f080d06b9e0386dde1b682cd1a052f1 -0x6bc1b3975f151ea426eba2b35ca099348e861052db7133367e6cecc7a9704cfc -0xedf0f87d739b6857694ccd2738beda605d565f7ccd6bc96441cb2b577e63db69 -0x508644db594c60276176d696b68c90df501b27486124492714e9e0e2df0bc34e -0x978728d04cb983a2abe4c3389b96c50940237b2f8750a40611b93e81172a58ba -0x442442aba672db519c4062172b55ce593c381959900c74e2a20dcd8b53e379ed -0xd943e358ad7c36c524c5cbb174e13fc2701d7828acfa85efea9e96a4cfc424d2 -0x2f969bd306bc82eeeacfee03ea77372ebc1113e32643c8afa661ec6b364241aa -0xf775b5c3ef402c6847cf198b91208365d2af8df56f45dcbde3f5b7a6fdeca882 -0x2144826b46870d9067f44899b062330aee80f9b9be046b84f00930c582363798 -0x681d41ccb6ea0149938be33c152bcf2b19a59ca125ce23220877d763ac56a9e8 -0xa5954147923308af479a6b6d4d537a3a84273dfafbb142add8feda0d5bf1e88b -0x84b96a172e241e75c622095b8b98eed57e66bd6c86b3f834c892734aadee0fc3 -0xd9d806354ac1723bce859b0d3dcfae2f7e361979f9596700577fb6ad4ce347b2 -0x9e4d4efca48e1f842bf9730c1208c6ff36ca76e0feb4fe9f67af3dd4da89b7b6 -0xe1cfdfce3d73b2a63b6ad36193426e79df4d1c5a4c5c97adb3fe8c056857b287 -0x9df8ab327c7a17b2e2d390ba18c208cf4ad995f889d9fd3bf9cc75afc8e5874b -0x04590da7e23eb5916d141583081f447e29d37b069fb23f93047b9ac9d61af182 -0x22570491b9cd768dac3397b343da8077bb84a553e47bc5a4d805b61f1af40a62 -0x412923b154deedefd1c0b9bdee6ea9e84db6042a366412d467bfd5b91eacc365 -0x71fe2f73559acf76ebc583aaced93b0976578aee3cb25a48af05729ef40289ff -0xbf750dd64168fce913af6c037bd07c05cb01e3d3963720dd13360125b5312999 -0xd462f8795d37294ccb89d586f514b3b91e89d13b4b5bd05b0460359e18f9f36b -0x53568567332af15cf02ae5b1da77f2d01a099e8ccffe1e31bde9eaeeb61a6e4a -0x9e2b14317e5cf5f23a81a8568ae0dfbdfb0e480bf2843395955f0aaf992d6c08 -0xba1028b18353a1ebaee857bee0c029c47f0d74d42851657f9377470e722a521e -0xdf28b28d33397aca5b992ed2955db4333e0c909ef2ae18852916c2f604ad4b4b -0x90f7a989778cbaa5d775065c20a141d68159b4755fabb1dc572c9431b07e86ed -0xda901e0766f398fc54f017cd3e519560b501212521ae6c57b935b28594489411 -0x176fbbb98c795d359a9e03811b79ee432ddbe516b62cb9177466b12a4777e557 -0x70de9d48a4c0437a170556b3bd42a482b7b6bb0f93dcba09fc7ab14c0737b1c7 -0xf6286b1aba74e76bd52b3a217b58f41f38a89da763c9232dd85179a664a821f2 -0x5f27b5d93bcb80ae89a2317d4ae069ea829520a303694e622bd0d884e3772869 -0x594ad00e8b215014eb0b4f764b4e20a5d5836af0297cad690de6b6300d902a63 -0x0de100f9924e8d3fe9173ac606cba2b76cf1f57127df6d26afb410cf56e2d080 -0xd451fac95706bc2333090ff13da540883e3733b2e8d2e5d694a63b28573a377f -0xf379cae3c18ebb757e66798bec400b8e2aa481bd3548824e66de64c1f8e0e39a -0x59eb58819300dee7a72dfe65ab750553d5ad846ffe9a4b85d6dd4cb7e5c49e6d -0x85e42bacfd92d1ebca56eab1a4c80de8d8bc86ee3cb0cbf190930ec1ca2efa5a -0xb1b3d2f99a812d73671690c1c2f1a374aab5aae1176b5298973beba0d86e4700 -0x8d5afa8b0449af186b2caf0ec1f46518dce6c9757d8ed4df93e6d7bac934a7a4 -0x3ad17867253d4147845623eddae7902c39e7b2e013f9acd2d9ad85a3a7ffe59a -0x913362b9a5eb00f98da914b54f1bf5ae2aa3897ac767df1c3c1153f4c02bc8ac -0xbe72a8e8122184a1197e51099fc7b602a458f52ccbdafa6de606d76e02f55eea -0x92da55a2ee04a912dfe349fea0b1ddba2919c85110f8a78e972d528496562fc1 -0x1f4b68a52fe7ce041664e1b986933c3e0b818bd0fdf63fe821e800f7e4b91da3 -0xe6b37ab162f483981c8b5191255f3f7ae8a21bf367fefac618183b1acbb0e7ff -0xe6b55eff5bf959a85b7c51df65c7198b0c4420fcf86c2cd0f9fc9533d206dc27 -0x1f13a5e66ade008eaf94e2621194e6044f7b3971f3d13dc7c74763669aef1a52 -0xadd9570ba061a2ded7210d31663dbac0e11803cc4760579fc262c7bcb35897a0 -0x8f178ee7a55db7dad96c5892dbba0ac079175a9aa95dfe28394fb29ba025762e -0x3ce7f8a912fb6d7d6e3c9344cc14b0329d2536cd5a9134a9b6dd98575edb072f -0x7e539b3541450921d20e0363d41b1eee11bc0a75c88fe41899e03c2fd3df9f83 -0x5e7b05070d6db5c8870a67f9c1f61a84132b9c8e7da885e30956cc605688a767 -0x6246e5cb79748dbf0a5c28fc012043812dc613281fc32dd557669f7741669db6 -0x9e812760e02d04204c0f96357db42f107431227328d2aa905f67040fbf82cfc0 -0x2daab48ea28db6a260159ef3bd461bdefe2df3ff061c0ea1cb3d659416a861c3 -0x615e95d046eb1d4cc7e31c5393e8edf62708cd0b06fb4ef9e6a9fbf739f08ea9 -0xa5db5536d8ad4ab948556e1de034d7665df9958d492cbe4a31017de58e5971d1 -0x162e2d7aca3c4957d01fcf3dced18a559218f6b63b90b888290e8cea2253a26d -0x5fc0d5d0ccd24e23d8e2bedd386673d52c5ba542db0534643f314d1e9ab061c3 -0xadd0517ad60ddb5d3244c41f89d962411645c26b16c3a52517faaa48863d30b9 -0x0932fa433f3f27e40d7ecbeb492ef1cc98ef76f84dc29eb0f55bc45d5ac287b7 -0xc82a646d57288cdc6ef5cc0f643f902cd83f2c5848fd2860773334d590ee9a9a -0x190c131e397176a425af3ec9a68c02d0484ee523f068cdaee00f7978378d9a51 -0x6cf889f1168eed4b8d3e35d7111be897f6039ba9adc285da30baa7ee906de8f1 -0xccf1852c306c868f92f8120527f4e2a0ba1ceb074e7f2176209ad65c2e52dd55 -0xd8c019122ccf05f1abb5d63bee73b49638ca2518eded8329d1e3b34ea0d2fccb -0x41f19b19d1cb72fbe51eaac4d83b54394db9a19d61d1c58f1e752304da9dfd64 -0x752528cc8d0efe87e8abf28d3078a689c6bdb104f841090086f1964a2d4ca64f -0xe96d51b2bc4d8e15f4035159355e51d218dbce2f9f7b9662278f01d7ce35285f -0x896e88dfde73da7724bfeb25871caa28dccc6fe8de2b7fc3361d39f86ac5c693 -0xd80bfe3f4c5e7f44439758114b708bb8853129df93266383d8b98c81080ff3f2 -0x726c24408e010045d07bf2fabf2e05668a351b92ed80d25cbf17d87e6c454b42 -0xeee1e249db07803321e46aa52898159991aa092017ba34b7708c6a48bb8ee5d7 -0x0bc316a2bff514d50b13dfcae384f673b0ba5328e716fa532acf2d5d1cd54204 -0x6a8bd354f9e53242d95feb85359af7c3b851da4fd78d85ccbae87a3ef0097878 -0xd05d7b8a362717e2aa6b432c90712372644dcbb09b193b5375ae3b7e73704aa7 -0x312a375592e2f83b2083f91b07b5711782362ef7dbd1ba401e1db88268380b0b -0x1b65d34c0418741acea9a35c69f25594b7cbd044f62ab976877da0ac338ee9b0 -0xe6e3b9b2efce3f22a1bc73d270aac80f1b2d3e0faaacc4f5805c2b4c64521921 -0x469f27852694f5925110f2fe69b2f968fe783fdd601a41b5fbbdf36a7b0bbcd9 -0xc45fd7468704dc0c262834dbb486ab17060bf19b7b40168eae3b5367bff18e10 -0xfec286b16f94eacc337c46cc76780a378c90e3da7cfb8a977780762ed09bb995 -0xf48492ef70917647b529055cadbb5ef365df084724293acfa2a33fbd2d05e93a -0xd8c5a49b924399d315d10520efa61021107fa20fb2de5e78ad1933947c5190a8 -0x8b5ea1c7e2b4b6521fd26e93416fe68843a93ef11cde6fb541ce00ef01aa856d -0xf51cb178ddcabe7e27fd57517b830703ad5cd778c2707ebc2d9668f0658ccfb1 -0xcf17fee1b796695a0b7a1868445f7322a67738e4d5917fcfc406c2bdfb82f469 -0x8dda8540a1b8321aaa9410d111731c18395239a73d4db50496a1aa94a1c3f154 -0xa048c57b68e759b21137b84ce3acba8d981e3d7d13fb1d5eece62088750a3e0b -0x050035008a7563b7e86362d0de7fe73f2b472deb9f806f693b584acc0e73e1c8 -0xa5c1d29a34dea40f67e9d60abe86d79a6dd6122e56ef9761279b197eecd8a169 -0x7658e231291a65470047f540bbd72be9d5ee89dbfc69961f61d7e3daa5473e3a -0xfcfc6287efa045ad6555eef375d4ba72c2c5afdd2b6bdfd222484d3fe2a0922b -0x73abfe1804abbdd693480aa1069432fcebbcb480264ac4a7013df795f0a763d0 -0xc1029aa724ed2ef0df2a44940e4f356f9fd3eb54a7c7399873b0e4f08d32a68b -0xe38f890f0796df2c6e860a4f2f7fb53f97adecddb16654c741f1240bc0dfdd03 -0x9bafecf288a1e8caf49262163f3221c22ac3129ecfd17fc6c3eb8af258017acb -0xd51b7f669517babbf7befe8efbca92ccacf15856a63aafb74e20f113afd3995b -0xd136d2671324ef63aa25e96b6d369fbdbc225bc41356ff3ca6ba7a5d34b07332 -0x612a10bdbe218a935548ad7f1f8c49d01df1e98216ad6dd56cead1f5eeacd764 -0xb948a03c149dd98042dc8bc397a0e33b15122b797bcd8069f782011dd2430130 -0x4c5992eb26b4ba79b2c7e36c00e2dbe168153ff6d9f2f0b9e449f93e4c79fd93 -0x2d922ad37018fc399e773179b7ef50db55ba79a699cb3e9b00ce63b70b85add2 -0x15f04c8f1e19692eda40ad477f89282fd16a22adab7ada328296f8d9e122c478 -0x02f3c3998ffadd020a201121d6535a83837b4a1b244f563b2e188e37af6ded2c -0x12c9a6537e044152fb467690383e40ff1d5d533ed24435448605acc31a36c3fe -0x7df2a66bc4857a0767a7fae38ac93f6f2d152d48faf09a5c689685f969799fea -0x78cbc5bd8e4ac661400132e279b041aef259e45136adf8ecd59b89b45ff9dfde -0x1f41d74280e654550874b93ca377062fa9bc578b02abeb8e9b53141009470f1f -0xa6b2ec77babd8e7cc0a496144c6985c676d1442d40818812494408f72da4e033 -0xef58525ac176a82bd8d9029c1817b5db869becfeb2d8f03a4b4a384592702e92 -0x587894dd848805a5098ed556f2377574e4c4e4f756456a2d3701f96515087810 -0x74e16f2f3eaed4a673b4ed780ab7a3e335abef127757ecb512a15165b19cebf3 -0x17c78e0bba4526e6bad94338e250277523e47a92ab2f0c3559f69f6601b994d8 -0x137ebac0074ca830da839da8420dbb1d769f0386a8d5378887dbabafee87a1ac -0x96797060579c59f5ca0a128963f1e8c7a2a278796ad0c2cd9ed2f8c1d1d1fa60 -0x0049f4401d59e1a614cbdcf34a6dda17f953818eaec70a573bf783d4abf7a77d -0xc70af164c55b72b9e985b64eba4d59d662b648bd5b0966eb413eaaea0cd629d7 -0x8b0b206dd1ec019b0ec70dbcd89010cef2e396e8364b4588222820943ac73e50 -0x562cb795e3fe06878332147725906df68cd10168b0afec6732dba5d3c4ab5fba -0x370b8fdd325aabf00a645b991c57a7b3b96aafb036ce739173799bb115a645a9 -0xaed846d9254b30aee651666064de84c6b1ece7d752250c34198bf2d6be565f96 -0x8973f2f8742b8108f8be15a6ee629f54a0682288745d4f6950ff17ebe77486d2 -0x786ec75336596486f23f6491c6e8584bffe468fba3bd117b44080a9c046486b5 -0xcad61aab8f511a0a3ed0f4dad8ffae636246108e70fc10b7df275c02982372ee -0x32ebe16a06689461cc13c5fc3433f3c289dd37166da1e71ce134efc688a00111 -0xd197d4f01ca596eea20a273a2a59de2eef2f19fae805f21ddf52eb806ea4548b -0xe6746cdfd668796750ef3c6285f714d8833a420bd8661201a4633cd4168335cc -0x81232c4a76b5efe0d1f015447c2dafe27ebda0382419bb5d75fefbee3b7c249a -0x437be4d75a6a32a999be40b6ee5b0d86176fe70b6ec4e80b5f10c053af28cc3a -0xef7169fd96152682192189b6fee28849da3b3fc01c3a1a73c06b10aa2ada8be0 -0x543fe371f08286e71f88b0fbd95f85f4712fdf530fddfdad5d5c5735d905a48b -0xf6eb956252540aa0b1cf176782ad76eeea6bceed600fbc9edabec003a694a68d -0x4c05ea8ee22257450d839dd6dcaeecc2fe2996e75a28e491092a9447dd601406 -0x602a9836e69302659b4f836cdb80c2efb1e694eb99fe5e7c8fc3d0e366524fa4 -0xfc028208b15173a33daef886982c14cf6951f2481288f72fa5d03334ea26c90f -0x68fb7079d5e7c860c61f537843cab209aa136b688701c6e82f125b606cdcd096 -0x14f7dc800386cf0febeb06d23cc71d8a090620e6f78f7bf3aff5425e2e358040 -0x7a5b8fa41719bd90b4fa3880cc98868014670b1eebdb659d50eabd3c25b0636a -0xc608dee5724e969ff9276de25fffa34f43203ab247dc2d97b5ab3027db227acb -0x8ea3f27ad5e1fc130fd862d80d5e0e975d39b1007e29330edbea8cb495801913 -0xc399a8f8bc6907b9f063ae81201204e068cfd6c7992332976dce2e012c89d0b0 -0xa5584d229eb5dabd129dd9df51c014a41d6eaddacb4bddbc56f3ef9891027ebe -0xd98bda419e1f5b6bd1ee3279b99eeef04d5d878a7de74fdec9420630187072d9 -0xf2a59ebeed1fb4ebdd7543cc3e3bde6476fe14d8db64ccfe56777b569c2c3bfb -0x88fbccd1371a4fa5a5684a208cdc55fff9fb21705a7eed1d2cf7e44c7f7cd4de -0xa7e6e3a7be1899b701c25f5fadf033b841ff8ffcecb145991dacae3607b43dcc -0xf4d7b296bf7764fe7464713e751be42230f7d38bba9dd4ebf3067cde0e5c71b6 -0x8965f4d165c80b0f3943acdf01c8c0677ab15a959215f3dc8685fa79812835f6 -0xbd395a41111fe6b4b551adc63fe47183b58e7c7363c193d80933831c14afcd04 -0xc5c93a4759b2437bd02d56275768229b972b014df12d7dabdcd15c8259001489 -0xdcf00fc194fc3cd5062fe3116dde33ba38ff7270f9aee34b5e6e76aa54917f95 -0x723b9352e3bcfdf68253f374b94ee3d2dc69c61dd96cbb2ecb81b96c1d6a9e63 -0xeda789212cfd51b3f26be91107d5da19e461b6059f8d3ef9b9eecd33c8dfdcde -0x8969069a8d1e85a6a754e7392bb3caeb48f20117aeb11a43d0fd38b4c6aa815a -0xe9dcef62ac23df0129f89c635cc856c329e136cbfaa843da4aaf0422924e06e6 -0x559547d8906c90fa01e131615334dab0fa9626d4bdc6741b8847d17e79ad7e6d -0x870c2e925719bb15c1e1d02c3eb349c11d3dc3126b1350c83db5b50a3a9abed7 -0xf4c01a79bb0867c8b1360e8cdeae0f6ad1b44a2567fb2557ca5842169c00b8ac -0x17fa7fe5a7fd303458f94a969622b2c8793d86f156cfe89734f12090db972f88 -0xd55269c886408949b4db76775fdb15c64f1b02b69eca32d2de5acc2d492dd783 -0x5a2e91191bfe5737cff66d30876cdaa2f83b0426463633ee3af4aad3a2f6f3ff -0xacdb58d84f146ae1f626604e770c68bdea72f6c463a2b6503d73389c58dab2b7 -0x49b05ef17f19ba068bcecdf4420ec899fa2af5fdee8eb9c2d8fd529d9fcf50dd -0x3ca52e722f799ca96db864be3da951c7f14c39812d06d61f0393edc171a3c8ed -0x47c9e8636e11524dc47de52422a5ef121489fafe91cda8461546af68550a7fd6 -0x08abc7d9293682819a4748c273d0e6261884e1687c45208f2c61d5ad7823c37f -0x394699392202b20f0c0fbce697579ad85c03a4c2c0f78466dd3daa13d8067aaf -0x344a5ef4a12b8d56616067d64f7894c04e82327330bbd05e7f74874f8ba8bde6 -0x45f492974f30856ef898faacdd650961d00ef6631f355b3cd75c6427e23a44b4 -0xa057bb69fa1212e1a309581e763a68e3a8e2424dde0f6d0d4d3b0f1309bff2e9 -0x53c0eb98cfc78f1673933170645b76d717b2a5cf7de92acfe646ebaef322c1ee -0xfe71e110a02c52a293f3cbfec3c2565494dbc78bb1ece7ccf904a3441f3d24d9 -0xb18ea31e2276e8c66d8757a844ad42dd6f9f4aacf90e27f3260d6d8d84cf8fb0 -0x0f84fdebb61b549e605a3b46d78e024a224a44d695ec8a8dbd93f10f0803a64f -0x8f262a8dee6c42559566730b181734e8e9b29818d1b58ea1097244d5e402efc3 -0x05eddb45b2d8e84152f3f8e07ae9abd7f8965560f6fb00df647ccee5ab872137 -0xfa6ad4b71124146b1363aaf56f5f1df040fd50e8dff272bf51f54079ef12b2a5 -0xc9e893605563bf1f99d6bfb41499b395e07be24e02b2260fc9e268612f888543 -0x566ad435f263241ad4285067a67a3e44e96eb86f10960489cccaa40682e269b5 -0xd8a313e0244e68d1e050fdfff12078d5837cb4687640b6f5204d7c4938e8b809 -0xbdf362cd7d6f67c2a33126e39476e481e0e7553dc9a33c87c8b8a1c61bf4e906 -0x382f3983c36478fb8c28fa6765f9f62329381e9892a38b4e436cbfe0030d8428 -0xcd469429e84957c55107311800ebd4e0cef45774998fb72e5a9fed1ddd2d3418 -0x26ac5cca0ea79fd0f9137d2d107f4c2ac61c1b488c3fa55eb166aa63d155d912 -0x4869aa0308881d0bb5c49039f3582651adb16bedf0126aff4e42660e1a2e211e -0xece705acd36258f09df02af2cd05fa0995b958d1d88b0ea1113890b240c62d75 -0x83e7b3d99552de89feb9543e3a0d0cd140173bb9c14c4e9869e6ab2142ab4343 -0x8521d21b58ded4580a823f495add8f6be021b74a837a46270e0f6b939acefa11 -0x86ff9850fa78af798f912d31929c2ebfdc1ded2fd7b5c7e004c2ec0b73983275 -0xdbd88d15c07ec347ee1802627beed79c0ea311b556482d7130f3621e6d03438a -0x4600cc79d663cea8a1a995be66a1b5bf2de64a700d9637263363ae28b8fb203f -0x003901e751a3a7646be64a17e2fd28870f87e17320ebfbd3fe56f63f08942dab -0x365dc750f187f94be9ce342c8ebc947b772d6cc6f76446e81ee3e6c7e855c73a -0x6f11da7a50bac1897340a6c282a0187311567e755d1811bf2004c9506357fe45 -0x7f6066d6966c87314a13281e5c6c5057871018220f54dc0a4536fa074f59df48 -0x0078d2f3a189144c64df77eec3be2b7109a10f69ce8d01969e7654b53b05f9be -0x7992fdca594705ec15cc815800aa5cc01c7a08a74f13e095eed830cbee5d2fd5 -0x8af71331f9d9a4eb08b3fd5873b1ea2b111af6814b4b233ed7adf4fe23eb8712 -0x301adb10f5445cc99da9cd47d58136c31e7d7786bc5c730a6418cbce2c78db1c -0xa82877167b5de306e388f136610a24940e0a2eb62ba786b7912609644697d198 -0xabf572c58f7c37303c2a9195cc8f564510a44706f54ff9bc4d4d3fc83dba99f7 -0xf7bb9889aae44d16ffb1a8a89f52baf091a77c4b18a4ac6f9291d9159711d495 -0x860a994e5966cb9cb0c48b0a48236ac1f45579707ff3cc750b599ffa73b686f8 -0xc25085fc031e10e72609ff9e937cc397b0e2ec1ade8a87a6c42ceef7db39f869 -0xae5c0eeeb1354d1ecf0ca058eaf973a28e5d3109c79590e4b4abe7568e14f73a -0xf096b0f8ee348158305365ee888721932a651ba69437ce82d97ef151d9ff33ad -0x03f4a100e305822fad4257d0c29ae21e093b958ff34c0ac8c6237bb093a0d6ec -0x3298e64c2af5f8f296ea797a7413da5cc43cc3a03ed11807c47f485cb1518377 -0x2cff709294db022ddbf26340b5d5d75c410f631858ce2919ce2c2062c94104d8 -0x3274c983dc3ba458efb60b9e562b1650492a2aa0065280355dcf09c190fcfc0d -0x9f5d1a80c00aa0c95e010ec3032b9ec8008f07b325faf6ba1ee1fc7c34e9e09e -0x6ea0a0c0bd1b70332adb34740d7a5383275245a325a1d71028cc9cdd82a73983 -0x1cd4ff519715b1bc77451430ae8f7f805d9153d552eb440bb3c62c851ea739c3 -0xebd091b3b3cee9383bf2d352f16ceb5ab450b9e0d70b7bb82999d4ce564b1236 -0xc44f4fbab2e37393d296eee9412655e298bd5a241c90830abce8a553e12f1a51 -0x11271e43a85f4d57fb68d85fd617db0c14e05cdaaab2537cf321e48e75e2576d -0xa588cd5f03a4f212a8fe2a9c6d3f0c85ed4d03af5854db620a592c48b27ff691 -0x2d55e6d72b743b132f27b9e30ca289cb66457068866018103314ab397498c469 -0x97378175ec47bf44ed219fcac33a910bc9b2c718f516784a1861af2cbe4fb91f -0xd4d4ce87bf35e6be9e50e60ad33b3a9ff75a8c863388d765d479348756d152f8 -0xc9a62dc0928be7716b4c48264f72ab644cf6c4f7e4f80e9d3e1072a987a2573d -0xb299d5f19b2178284433998f6df5b1f5d501dc1a8c671138302cf0696916995a -0x2b980c269717774c94a33c39babbb7f7f7ca660a66ca695d53e930441510b0ec -0x9b8e195d961c682aa1d04bbf46ad01a812521d2ae242686a640e18fde0b5bc48 -0x970238338ee51442ebbfa36b8a078f0da4ba2223fe7d8acd81410d4c0ad605ca -0x8127caf269af902a334743fce686365a5eb51d1d3ad129776cbca61ac52ce213 -0xb2a3f891d7e420ed1041cd862e7f5cff468181275cc7a870045dc975a7640c25 -0xfed8d116afb6ed914f28e6c3465c668e6ba051fcef139bf580027752fa3e93bb -0x39eea2ac5e58f510052937e4cd11addab72f283f4638325f88dced98cbf5c924 -0xbf658f2f10dbf9e2058f4ea21cf1f7a5ee0fc7a421b9fb2f4fcf9b78fe608914 -0x333627a764bf30b66b9851230f03d20d19f7527a876b7240ddabf7c2d2932fb9 -0x1435c88fbd8f1bbcd4e927c5fb2da65cd4747ec4bc65f0dd9d6df2bab5ed4546 -0x1e6bfce33ec35a299aa99b547c44518f9c6ff4d022afbb12469f014ac8cebf86 -0x83074f4ec573ff989339f83fa68ae6d11b8140a159913d8aee0761c8b2795172 -0x044f5914ab864926b813b99679f28577c6f8e50f7c22ba4cb0cd280d543e5aa4 -0xc7f42d87875e33113f20dc1f7a7b1372330574d1c6bf950fd6cbf12b72139049 -0x08d3c53b7dd54f90eae684ba5ff8faa99b4db3e857edbb2479d22d094135a44b -0xa04797464ce23319613c708a356b75cd1c1db7ae1a88abeba52ea3bed9e0c477 -0xe3a13376e127b87832c71444fbeb8258b1ebe96eaff9a95189466c1420504755 -0x03a327cccd5cfb3392e9356cc0adb644fe8c086115ed79c0ece5147da6271d66 -0x4c4f4deb829a2939b8184180ce9670220cf3fed0d88aa1b60fb097db4ca4f46c -0x7b1e93d38f721c52ce1eda697cd7352bf2c91df645b47bcf5f0ecc04e25c61f1 -0x54f19f00678957d6700825ef96c87ef876c5e3422b1423a47ab39f683ea0cd4f -0x307ef4be00c0db759a922c978a0a407cf65a5141bd00303004c8d03ef96322ee -0x2a694b5fcbbcae6ede667d8913ad1e76d0b370b65c4271f3ac2ea8b7e5723450 -0xe564cd8cd205cb09363809ef5db1db8d646cf867fbb91c970d02f95582be7e93 -0xbce65d95ad530575ba537bd573d58fcaa9a971fd955c8d0bf61dc5aec32266eb -0x7c74084f13dcc900c147d3d216e6bc707b4cf5874c111e57a1980fc79a95da84 -0x56faed1a8113db5c8c0d785757e75191f4bd97981cf7ef57576b50d039894fa9 -0x267cdc7a4f86269695841f24862b0727d94e267e17a6ffccd0cf8f3b7daf40a8 -0xe04d163cd2b6e66baac8e4a8615f576f6ead5f51ea7f03609ecda8b047a4baae -0x75f4b419c6965fd48f09e0d0140fd228a7600e17f9c6c356f2257f68403b0061 -0x5fa82418870b50dd2dc94c96814c1f2701b0e58181b84fe9750ef93786d46553 -0xd86c772ab8dce72ffb6fa23c0fe5679906a4bf81a54e4fbfd804bf501226196a -0xa680787e807747ce21d4763782b5f38173a2dcc78595d14fc52ec7c883c719a5 -0xb830a3d2cda34d3227cb637e9b6e491ba31434999c49c61d0a9408fade48b8c1 -0xefa0af15a5b3b49001a014bcdc922f144807fc67b84d356710cbab3cefa45849 -0x186d71bd78e42a5c063ed418c5195a7dc017ea6dc08f40c96a20396c3f94b22f -0xaa7edbafcc6384a670b1583d1bbce5dd063ba6b18644931c83502fac08c4e845 -0xaf3be2c022d7e9e790bcd5e5d27de0d459a979edd82947cbc2fd43d32d50d45d -0x42e8f01d779257d9f3d8845402967eec22137c2767540e9c5a42a79e24f513b1 -0xc53a110c368683c1e9d1e75486e92925cccd093c24b1dc7779da8cd5ffdec52e -0xd3e074e28a0d830f62959c76034f92d6bb3fbf2aaaebdee0ca546d77dbf0889d -0x48ebb45657c8e5bc491fd9a76c808fa6d360536001ef17a4e4f5c5aa2a2204d4 -0x66f773b37f51b60dd7c18678813f367c546f30fc9a1cc7829fc27862093626a8 -0x8604a72872b7b0ae6359adbadc1b147f2269c07614932d03201a50eef194bef4 -0x27bf8c07336e81bca11600b05ba6ec5bcc6ec6c648d48c1bab6b9c26f732497e -0xf876de9df1bb9525ad8f46def827b777ce2f9eb0e49b399383883351fe4455b1 -0x8db480c11495d4d9979e388d048bc94847cc9044fed77569dd10e9d147e8db70 -0x86d0287cd02e68b9bfdf19cd068a0c8b8d5133691f9fddb58dfebb2ec55e6341 -0xefc4c85d27b0c22212514fd2bcbc038252ead41face2ff2b94a0b2df0d4cae45 -0xbfc7b948878e8e33aa9744867117e284dad9f55effe8bf31790a873c993647b3 -0xb52cbd3919b931c0c19b2f6c20a3ba2a534e3ae72c2e5baf2e9f08da2c593cb4 -0xc84a3c4f54d972747961110e36fb2cd23fa7a5efdc996741e87c82f993aec7b0 -0x0dda09893d8c1448381fefda0f5d9c100294c12fae3c865a16166c7ee7d1f848 -0x1031ae19066cbce22dfc8f45fa09504739f012d8e1ef264c08579464e402ae65 -0xbdfba15ad78dfe105a68a4fe67ae81cae6d11cea12fccb24d052d7f1bb25a4f2 -0x238cd6141bf12d68507f2ae3e50dfd4d2a91efc11958658f93337c134b41d765 -0x6c7b657df935fc629f157b96bb3f81dc4010af83add7c276352f77d30f3fb09a -0xfd7600f6ffa0c932f490dca288c28692dd7407718548ff975e389d4d5f4a1063 -0x54a8d62462bd4da701a182ef21015337cf24d0575d82640a2b403ee8201cb060 -0xcea9d435326ac487847bf3347b8ee9a7cae493ae6bba601e2cad96a3d857385d -0xc7803e6279412f34cf066667c63bd7e4a0a8d5fee5b56bbfdede3b6f3c115701 -0xd84c3d86644de7733d721e311ad0b0126848b1843b5b1d467ac7507838ae398e -0xe88f0339b9f2dd9988292e82df8a01b508600f43d637e10bd63e34a6ca583125 -0x89cb08a7bd02a6e46ed91c320182571b9f1001e627e6829e2c3380db5294dc5a -0x2843a6082abe8c27f799487f1ccbcb7cd20d5c9d8a6b69c6eedb427391e0ff4c -0x995334e3c1b42566c7a6a95f670f428451d40f85d883ed93c9be75ad0fbf1cff -0xf666693641ff68ff752f838c57a315c6c1f2d61f609c73b952e4f840d94e3377 -0x4b1cacc24b9f05b5d6b04047fadc57e10d1f7d2e8ced83c3ed05b34e75e725d1 -0x6c3214d6772a95d6362ded298f5fbee735c6d3199ed1dd339aee78c3888d2b46 -0x43ed6c53151057b4aa02960f8b59d4c371893c555aafe1c8a8c6edef66649bfc -0xe01e2ee5e39dedc1d0504308a174e6295ab5bd11c655f31a9f9ae91227b65735 -0xf0f0f3e49682ea3387c3a73faec11afb92128459e63920b8e076161033c891f6 -0x0959649a7a4036c3dbc669fcb53df8fae536cbd0fb46d6b409eb7c7892fe7948 -0x482bd26307a7aa9a53f185020f8503925afb326fb74bda38eb5c95c95a450619 -0x9b3c7f03ed33bcbb679970a8d9171b19ec54921d2f844856f39eae58653e7629 -0x082228c7256147dbc2869ac9f5de13fa8a0667c132ae8793840a01ff470eeccb -0xdab5173423f825ee74e017dce12a077ee2e9f81f3ee243a5b99d4c1e678b71f5 -0x940847c31e1fd90782e7cb00ab24cea5ef19b6aef974be1cd4ee5d158637bb76 -0x4f81a6f93b1ab314a463e6415e60d22d0438866423ad5a198258b881018f50e4 -0xd610f048a5dc724cff26416730551758402ec5acb5ae6d2c0d81ab375c166a6b -0xe4ae57bc59ea85bde50a84ad46d329710ed95d55736f0c1d2cef1ed1647d6964 -0x7b8f71fa4238c62f53452e6382b43c4c5beab824e8dff595de604d80e4022667 -0x843d3215c0148085a60deb420f9dc394d13245ef9a83a0b3fdb44817bc0bcc2b -0xf072c320ea39dad088b5accc06631b129963cc9d2079b019ff36466611b5bae3 -0x598037aede4f674fabaf6787458bad9ed0c283acdba2c7d367a3d341379663e2 -0x4b95c4da2152f0ea056fb1b8d4d68befefc26d7939c970f479d078c71883663c -0x611e4bdcc3b9ae78238b99a7bfeff890a87f76630d99b8f9875829d506ed0a41 -0x99fd3667163d43bd1ad70be3f3db337f85d799d9f93a15608fff72abb4f2e319 -0xb8e523dbba5008c086feafa420f7c7847cf6dddc87736376990f76347ff06d7f -0xad8bf588b905bb4118f2e4bd05572e8f8665d9aedb5a32a53c1ddcefd84f559d -0xb067fa61a08367c8b3f84ec86196fa463b69120d270910e82ff92231772f90a5 -0xda79f8935682195b3a5a84f908271c2cf44c454755907ecbcdfb0e5e197ebd08 -0xfea7d979dd46ad22dab2a417a3781b378dd3634de4ce239a195fd04f39fcfc2e -0x56bd96a0d54df497953b3398527b82f533ca5cb63fa8c7242111898b53af542e -0xbc0d254243afec7a7513b20c198b306ed2616355b596f0d6843f59596d58bfc3 -0xa7cbbc28cedd0434daf2d8342d1f7ba6e9e58ae3ce9889581044c765ecd72be7 -0x30a85e65925abe23b1b01bd713375eca09328acd97741f6e578c09780ac3ee4b -0x3bd20d83889a73ead4f49f773079a45d88ebf3cd607cb6f5583b3e0027b9f331 -0x109fdbcad99a78404b3e49c9303c991186b46a21b8e2b685b14a37a8478aef77 -0xa4c9177a429de67df57db0c772d1c2ac20c08f78c8db1115e206c51ce6d26f17 -0xe66b7438264224b45169650f314d0547cbebc089944cb712a655e5eadaf48d84 -0xb59811689abfc3a59f09adcafb0e4aea2995b37f6b0a13c2b18a3df6ddfb74a0 -0x90b3240f0a54d5cb54e0ecbf05302bbc196455719f50843d7dab91e34da5e17f -0x1decbad0384284c1020313ef69b2d2d0c92ac3e2dc6eb845555d5fd3e00db6d8 -0xd134e292b00a3f35f4454598fee88804871fb75e161e99ab94527a17d25ddde1 -0x57078b70d29bfcb3c1647a023e7544f386e1eb3b6ae811819a9a4ad9afa07bde -0x1b1937a3198ca7fcd10760aab6d6f5167aaf354b4b2343556a3c02c8b3570a96 -0xce0ba0e77320b1f0b9bdff0d50fac06a30361f495f66c41752ebea13afd5763d -0xa9c5a7431714abac1d5ccb21c61e9aaf795d2ee2b45d0c3aa3a7203d98011554 -0x0d98ae7ec6b91a2f6b823a7fad1564e64f5a4ff3c0db48547ec02147eac5aea4 -0xb1e1f8ad654744328f4fdf8f77b0c24ecadc46ff6d7a738e7c850159804350d3 -0x4276ee5c1bfa7e394dcb96aa083f14798244aaa41717341b41ee1e2160a14a03 -0x5ce57e4c20e595705b380a01ba6907ab40d7c87231e89dad044007f1f4b71bc8 -0xcb592e9c6c61968b90aab864f133e949514174891540a93f2856b8eca6adb500 -0x346d2e2078fd6df7c67627f76e4a6c25508e90e253b61e5b484743d1d6a79774 -0xc0165df729a9501d8515c70e71c45006069d351c4b3e958bfdf2e291f217b000 -0xd0fccc891fb54f371f2556915b8025d3739624469034b95250bdedfa9f9cffdf -0xe34c072b50036b8bafa8e8162737ab700a477fd77dbde85f536e1b702db6c356 -0xd49f8af4099375c2114e7a553db7dc16ab5617655bc6006b168f9d560ce518d1 -0xb90e66670f7586d1ccf6b5b58757a3289dfb227ec3bbfaa8b1bce6d8010515cb -0xa174706aa806d460ccbd3ad9c90a975e8c9be5c8e2cfb23828684c9713c64edb -0xdd317fc910a2cb1b523bb727c72eb9ed3dc17a0b62eaf7802f68e83e0278eee3 -0x4f30c158e452bab03c7f3dda6b9cbb03104bd1d83fb22b0d1f2d12cafe8fdcca -0x6115057d28e1dc335c861194c96a172a9e820cd20e433a14167e7aa1d1dfd1e1 -0x2ffaf2ea7219dd8dd73a38524fe949a7075d8e5e9411b16b3006696fef53e1a6 -0x0223039c4216f2afb66a4d09c2546a7716757cc003941f2fec7218b7db6f3716 -0xc8314b56e4fe23dff0629c2af5741ca23a42504efc7512e0389002cb54f1777e -0x0fba2cb75f2514fb9508aa5ef24e20d238aa065cb30a3ac471008be291c634e7 -0x1625e6c26969a6391226a86bd7b959872f24988b521c7126af6ebbfe30df131d -0xa7216be857542a372cdcfa87f788ecd7422ae5a0535b981d72077e11f423b1ea -0x3648f4277dcabf1be824195f8e71a57784e049771a53c2f312e298be5179daa1 -0xd079ba94835e0d4b14f6c2c3cdd3739239d2c1d3880f6ee1101a3a2ed88226f5 -0xf1d909928ed69239059b84413ae7821e37f49f4e3c479175cb4d2a436e683924 -0xdaa471cf7a6e6723bb1a7e5bc36e05d83b4f5134676db7becf980f161cd6fe3d -0xcec05c632fbdd36e68fcd74501c0ebef71edf57857c17b6a379649ea3617db2a -0x670d8fff283710f6bdcbb4d4acdfaeae960d4a5ed09af516b4ad05a62796e05e -0xba0568e94a76d650d62bca60370993949d790e1059edd666d0d806d98bf88341 -0xc1a25f9775f8a5ccb365c33caf1cca4a1f9aa85ceb3d054a2bf16088b03ad8ba -0x8e028f9ba8f06a1096953a6e5800f16d5207c2ebf02e44ad8e8d1ab003bf9d86 -0xc1fc98b3fb568ba2a25f85c65638603323c0bacb0da4584cbb9ab1866cec471e -0xf4a3354b21669cc53cdb70d3e82c0c6eabe3f35fd4894d39440e3ceefc209a39 -0xaf9b639fd043094df627de094b034136266eb73acf7058ad21c5a8cccfb0f6e2 -0x1b9bd3792a91fc1b447ce757504d96f7036090cd66fba26cf44c6a001d847062 -0x947366928a5a441da6e7c2247665f1d328c9b9061c2fa5b2c247c08530aa4a1d -0x07ee05d8d466b00471b453afea8a26095bb2eef7b56bed8aa328b2f71170f1dd -0xfe60c52efa4b44d52514b3df7fe62e9fcf93a5558f5a024abf5fee221ad89518 -0xe5904706e6f4b02a2f04870ad978dab77c3cafdae05bab299abcef2262eccff4 -0xc670b0ef8587dd5ed860a57ba5e61c908814d92fb1de68e84e40e5f30d8841fc -0xc1b0e10fda189c7d7fc3109e5c625e09d0289cf57c214ff9538a58a433447718 -0xc213d6516304ad1c6edd9e1baea1d924b5305476f888ef4be4f5ebd732139996 -0x399511835d3e8bda81c257b1f71bad1c54f17c7cc6ec32ceaa6cce0af4bb32a7 -0xf9550eca1cfa517132b6ffce17b4de9565c4a14b05a929b21e3206402288a236 -0xd98f292a9a997379b7c702985515da5f2ff605954451f4cd83d585b7c6998bfe -0x4f0752e515913d2704e3ba7a17211e41ef2a4514a3a3bb8b300121bdec4b8c76 -0x1f7785a2a28ad4532602b792440a5faa8eb70ccd0bf93c30c87a7d9769ba2005 -0xc85c82547a8dc8d6664bc346c75c20dbba7816667938593bbd4f34bb054eb7e8 -0xb5c01b56a4b5c778e01a948fa2a90d73e98c27ef316f42e2858d08790196a62a -0x93e67f1aac13502dbe71cd6001934d1d5b0fb5ca303807afdef9f3e31f747718 -0x64df7fac4527461f3c6c2f07c3115a243032a5dc3be1c084b86816be17976a79 -0x91a499110b6c834148fc37beab6f68aaf5bddb2d5bfe369b4ef36f73c0efd1e1 -0x9a83c867fb8b51ca48fcbe97d503896aa90ade2613ec4bc56bbc94fcfb8497ad -0xc0db37e4db6e65985830f7a5bdbc956db06eca5f9640f3ce40b4d66205f7c4ab -0xb22272e6dc135cd1c0fa358a7d9f6993f061783b062a32ff8216320566260901 -0xa1d67f849296bf4d63540d064d843719176984536c3c22a5e1c086ebf3c5ad9c -0x39568edebc1dce0159827859bd936e64878e880744cfadbf20f8e370dcb4a9ef -0x947f1c09892296302e21a69285b078ad0a166d1011ee2e23e08757ef3055d9e3 -0xfdd4a4d6b507b7426fdb2fbc36fe7ebfc01745bdf12fae3690f25571a6ce4a71 -0x56782eb588efd3b584cf1aec55ca0ee2a69cea8557bfc50c5954a338026ff2ed -0x779f07adf2512d7ac953e426ccf43137f5ba0e560ba38e2e2602f98b30c78d6c -0x2e5eb17c422c9412a906f4a5d90f43d7a4ff1642e8d5e1f1cd839ed896e4a8a0 -0xe15aa3fe5521140dfe5c6ec77b62c022a89129ea3afbd278216e8099c47e5c25 -0xeca97f3a14b60d66bb1e52eceb18aa4655d320d9a1686c4d31cb7d0a7b1aee5e -0x92be3091b95746f887be5477b83eb07690441aa0ece760f3a821da8b73c1033c -0x5ebbb1626cc59b8d8a94582950323d69dcd206fb8187428b06477f9399cacb27 -0x9c77b42aaaa06f96777cc7f1df8dbee0cb068321c505487f679cd91454922e08 -0x919e81194e8e24a3d09876938945a7eb1945f14c2f4d2cc5ce4758a3a9bcfe75 -0xc06054479a18654d47dcad9e8b8283b76146d4f8bf642322a49f116209243934 -0xf56a69dc2288b0bd066f9600d04c28ac12f8b5483db506dd504fcfdd146824e4 -0xa07751d62c2082219f2aee44c196d52ea90b0d15cdc0d6660035b97a0914f4b4 -0xbb5bb16ead1a2aa276ba6ffea9d3f06b94f51d09a1353fa3fdc1520c2910d036 -0xd2a511e0b3a6bfe4486273f899775184007aaf35e0575a3cd99eee1939cd4a4c -0xe86f9e16ce9423609fffdc00e9a4caed0faf46c9db9e3f6724fb0b76112a31f8 -0x3c50374394af5d14b212655cf411c452f7d3d0ce3a97db194310e39bf70c2d0c -0x04cdc013a9fa9c6d40b39dc8002b78e33a03064012fbdfcbba1b8817c570a126 -0xc002316fe0b6ba48272dc59e795ad8065dacc9683aca15dc4dea72eb5c4e2774 -0x640fce276146b076ef9432a6ede712de89af1c3657c27dc2cf4143a4fba60fb9 -0x987e208884b7207f1ba37223f53abb45a52373b85d038618d350a3e058f8304f -0xc3f45d3467e29b70d2b385f537c88b8e5aac0b6ce5caa89cd8dcd7ee7107688b -0xc4325d7e5b4a50c35083e4b13c04c4ead5d2e7a3ce9c36fcb9b4abc820cfb5c9 -0x0637e8bfcc0a3cc672e5440618c89f861f5cb4817f268de3324203cd5118a8f2 -0xefe6ad2f58543816ece282b56bde7af6e784ff0ae74b3a4d2a9e29a75bd5a2b3 -0x415326eac50bc7144b5da3aa65c89fd8948637eb5d29f596dd2551b4069c43f5 -0x0117c10eaa2d60ce24c1efaa0b8e64d9ee9df490e82d72a603fcaa7c2e8de397 -0xf42044cf3f1dbe6a9e716835f753331251f05b19619697d3c6160542b0a9c851 -0x387c59de2a66eecea88efdae34a7b0b75e99c0b4f623ac9d84389167406b4d49 -0xf0afdcb0614659a251cac161b4c3eb48fe1c375d2b69a9ee4efd8c41d84a5034 -0x94277259fc9a41abe47fc80f9ae18eec1870ce20e3cfa44f3fc3afc516972256 -0x784748b92d407bddbf6c2ce2fd3783f7b97e095660c821cc647c6a9e86a062a1 -0xfd3acd88d5a0dff3e22f5de5c0a35212ff7120e6c82d6b0984892f0b3a57519b -0x117d5faa6c2b22a6e965682cbac0fec07fd3b1a4bd72cf1477684498d37b6a65 -0x7bedd1a10236fbaeef3a3a9ff6ab60e14ef85834a621ac1a0d70c56af1f89910 -0x3969191e0c1d79abb5024a546e003d3196530738a5715721bf141a4713a020c0 -0x84db3dc59c8fd5c8e6781aed86727ec56042c6680366d44282eb3e6a5a43b049 -0x53c086001e2a977aae88d1aa4a4a3d3d8a91b57c5f745acac5e207c3ef03a052 -0xc096a7862c3865bfaaa670682280ffad4719ec026a20f3e695916bc6d4bf4b43 -0x40a01bd50c656f98881ae8d644b6b68f748417cc264cde0944111aed0f2d30e7 -0xd7cd57a8eaf6f99d599da51d3c1517ff504afccbaf3f110a9004ecf9acfd8bfa -0xc4e8654e36b8bc952ea1e96f1cd6bbd1633d8edd2e6e9fc2a175dfa05a8ced99 -0x304059cd80275d9ca6df9ac1c94152c330169d964c1fb1b0cd577de0dbb03d18 -0x6ee98bc813b00eed823bf35d70f2afdb5bb31b5fb366df60270409e197e0d9c3 -0x122ffffa8a8437bebd2c397d8afc29658819d162eebbe0687b3b3a4da407459c -0xf45996d2883fef21745a9302dfda0ebcef1cc7370f26b4f2fbe6cf03c04c8b70 -0x99866de57d47f9470b3b3a45a8a4bd7c722c27a305a9b8e355d2aa7cde593d68 -0xd9b4908c5769bb2e35e03b3f249eb809b889bb9722fa89925b43e2e2f3f162bd -0x8b571ff044ae87bfcd38abc6f05576c6436b466fe086f9bb2f7ebf6107b01443 -0xabcd47e758a74d5b931c2bf1337942104e55d78425bba10657a3142d7d3a016e -0x039dada713a5a2c5ac183bb3a5f19cd7388d432dd984bbc10e95912e55182dea -0x9b5ae3010830208c93a9df65915a385278629436855c4bd92a8d10affb708952 -0x4a8dbea0de0b13b0777d41af1c0ee8a7f3135e928fcca0ba4a3ce29e52db7c1c -0x854d648f87cdc48ca67b1ae1740df101b4d3fae11264d04bfe7f7081b8d123fd -0xe2c0a6a6b55d2d57aeb1ce75b01c7306b933a4539caf41297c748005cce101dc -0xc77c8b1ac4ea7418146cd8b93a598150a8e2bf1204c7c1ebd068b92bb9eca4db -0x95f653cc476ef93448a0118b74eff934fe04d58282d269d03e05ecc0a2f7504b -0xf5b027a0bb6b55c643d190d9be13c1d8fed65b265579caa2b370985e5d722f4d -0xfe4baf32ae510b4b7705014fdfda0022d5e0fd8d78be39e6a4fba04694c210ea -0x54bd02c71d79365c1b346e665ab07a298dde9c6848f544aa7ba692809b7dfb27 -0x4e5f216d40ef2c962f7e1556b67e00034a28bc0b7bc7f675c7a8959d113679c7 -0xc708c65bacdee3e77777c99b27735fd2bf97390398a6699e0c69bbfed9c4078a -0x6f3e12d565413704b3878a90ad871e22302e2b52dca25576b57a61643deacc48 -0xc2b965dd06afd618d601006835e6baafee6afd44fbdb4c0fa380a8e9e2947867 -0xb10bca7a427ed604c276085dda3188d2d50bb133c7f93f7dcc9775552e3ce491 -0x932d9bbfbde12e72b1fad61f0982511e3e0e39b5a6ff871c5ebbe81be54ed9ee -0x8367f7ef4bd58a21f2cd5a2e812a75029d8863dd32198082f6ffa31e7982bab2 -0x5fa905c82025f8681bd1a95ec15ca196f423980d70bd091e620cc232f7b71f4c -0x5ee9b60b1328faa67db90250ec047cab4ef0a3383e3ccc69ea9d927eb9a76f78 -0x98ab0598052c8ea60982ddb569009959371103fdb2d470d79e54168769c4f287 -0xf633bad7bbec706d754e9bfb11180e5fb56be5377e2463a5b3ad9cfac166bcbd -0xb31a038093bae2cba26daea25e7157c4bff23d507a37a3094033f382527f1674 -0xcca3bb5715091e6a3044aed2a02e532231f24010eea4099118001366bcdfec99 -0x76a4fa0b48f74327444b29b5eba7a1d64808bfb3a51aa467cadbb66c9cc3a7cc -0x10818abaf4497ec62db9f6669635ff7a478d66db6fb0a8fddfb822d705e72b61 -0x2df5ac511ebbccbf41fbec7fd9ed1ce67460f5ed6b928e82ccefe79b94b3aaec -0x346e3e24a7f9779de9d31d947be86438f75be0a319d460486fd414db0922395f -0x5c4590292a80bd5d9c12e956e1bcae27fb8bfb0061e3ef2d0468431434517fce -0xacae645731a5d3fb7fde82dbd89f0937587974f14de9e03ebfb4b58560356734 -0x9c23be07878ef57cd27d6a3d8683842d21e867e169e8d394848329730056cae5 -0x089aa23e4520f7511316abf53dadf47f61a255e4eceb41f2f10050bf3ece40c8 -0xa9094a331fcfab3a6c6b9cc840645a6d7dfd4cd780207356d9be41cf5f61d54d -0xd4e2308629b815eed0c4b3635fb47985378b197f74c2dedc79cc8a0a00eb4e9d -0x76f291f462cf4389c3f02f8f77edc01c3f0bca1d062cf57783552d2ef063d016 -0xd5f644c1a72b7edde3db42ceb290b940626bfb8c0f98b5bdb593cbaf9f414af7 -0x80a3b51c832b371d259a6ffdbf49f7093cfa8ba97efee24eaf41b9c7f327d1b1 -0xc1628dbacb02303fe7a165ba1f02e30f8d5e9bcd152b6a57c2e53bcbf2fac375 -0xc65008333b94b75145836f2b35e9312b32e265ee5c349e9d88fd033a1561a713 -0xe405df231740cfd454c901464233d9e35124f57a970932ec67e212e8537165b0 -0x5bad79d0b99921076824f9ac5997f1a434b9d07534a2a3026a7a619cb18f9ff5 -0xa4911e18122606b04dc8d5f1d4ac2024cd4938c85101aa44489c0ea07bb7b1aa -0xf49c37fbdf4baee4450db632acfe49012ac4711866e7513db554b0aa7d5404ce -0xb9a11632db6fb7486f2b7331078edf3dd577b623207004c193d348c7cb9786dd -0x04ed06c0383399d7247019f963cc04e89f6b23339f1c24135805c3459e7dcd13 -0x57f1b9ed6ce74be7a228f835379925288c9aa0afe1028c163978c43018f8988d -0x1a7a0deaa3821909b599ad4b7ddfe86129ca9d879522c833ec56f872b28de2b9 -0x02fb603851930788522daf14634b8c66aa63cef3c47e6b11f201db3d81ca4bca -0x276d49eba1c75a8fc89965b82f2152736aaaf27c88d00fa019628fe14f3b6289 -0x07b3499336f28ac496dae369e72d83cbcd1601d4825496305601586663239f6b -0xfc12791179dfd3ec899a9b79c18c37c78cb857540d1ac6519f6962dae123f792 -0x69278dded5e7bbcdb0c97ae665a2284ce9bbb0ea721fc9b4770bbef715d18106 -0xa383859fedc2e53103d13dc1220c7d6eea582b20b58db2f394667d1f77f347ad -0x84f3cdfc88c3104a2eeba0bc8d95e30d507530e9d3d0648b4b66faa602cefa99 -0xe85a19bda5e785ca746c6eb41fc6525dce4d29a33abdeda8127719f573e2f8f5 -0x14f61a989e06b1bd4a72ddebc35e0070e12e2bcc6330d604eab42bf8d3d4c992 -0x3f8a55144b47dc1b66daa1ddf8adf3e43a0f6f13652ef219837fb3d404442347 -0xd7b900ccbce3b31c5e444d2fcd7071f6172ecf2998a1bd5871603f9e995949f2 -0x7e6807dd8a8241936deffc0e305fed472a4d3c140bfc5da4808ea49d4aa4f8c4 -0x62a79f1c9dbbd64bf2a98451b00079c02733cc77fd4b0d19c98b0536265a37e1 -0xdd70fe92ca11db6ff30147783ee436fb3c9dcfa39129d4d29cd369a412c2fd3d -0x7ecabfb19ce7da4fbcc39965d6ec77cbc8a006608c5614c2f44aa593e6897faf -0x0b019fe46b013456f6a754cdde7062dfc1e9aff2db197286fb144e34d3f8a939 -0x9f0b65954302c073915ab6ded70033376602b94f45203144910c384f399515fa -0x99c80c06075d81ac8c7e5049e82f689c7ef56098b7e80f41e51a48d0eea29acf -0xa12f70753f5f8c5fc34bc0f77572340d41ce30957ccd1b7459fc24d3cf4a09a3 -0xb869269216afdb431bf63afdadc15a91b4b5304412b7864451334055c2bb70ea -0x28eeac3df250ca6377b6da06a157fdffa4402a91686631a1f17868db89484c2b -0x9b4443868474a45f097a66aaffbb2e49d0921af1c72dd606de0e59a9f0713aa3 -0xb55419196ea0a3371d4d7db16bd280f8de7987d47b45480b3841f0b95cc6e115 -0x30339c8048ee048f6d3dd6c4a848b7d0df9b5f0a0617fa02dcb4c41690faa736 -0x6df04f481aaf96fc77ab448a3c5c1cb5c6db7d230236bfc6cfe05d44be56d8f0 -0x33e52a1e95f480a0ae95966f3995e13ceaaf76a92fec0d2b8010e6ba80bfbdf1 -0x9633f72392478760f32bc74af6da501d40bd42566af631b36de85dafa231b0ca -0x85a54513287474ff947d6e8c2f3e9263cc465696bd5ba9dedf5dad69f43afaa1 -0x2432fe8fd38083e23056f1a0a9162d6e96dda16452721723f0f99b5badc7bac5 -0xd9338c1e09206f2f41851e5fbadf75baaf4391b9b4a9c1a260c0e59c540e87db -0x3c96a519e5169e058813afa09afa48b642beef51e1b6179472cf4a8bc47c5a89 -0xaa84564261c1e11cb72835a2e47e67bd34988d876a5ffc56e088a8f0affe58b7 -0x661847dc33202151c891466ea3f1ac38f0dc17d0c7ba343d5f7434820b0f28e6 -0xda894488e5cbaedac0f5cbbccc0d9aacacada42cbe001bc159e811985ef09e9a -0xde257f6f95392341f435baf4663698f9cd5352b967951945a2f08dcfcc951084 -0xaf86fa48fde5b53fd96327101dd10db24fbab61337fdd5b289310e090f2998a1 -0x658e2d6532a5da9349d956a7d2f8836968aaf30baf8eb013101d44b492597cef -0xab5f0c95a4e5657d08073b21b08c67775ae68315dd650b060239181978eab7d1 -0x40059c8e6492b9a5ba2b27c34efcfcab4bd1897df018a82a06cc0f38c1caf73f -0x1efb749c4184ec49c8c27b92a5f31707c9ea124cc6f98bc5e6052d86942bf462 -0x37ca7c3adc9515be8eb4ee5e79497c6b0b433664df95e95c77ec749b48e40577 -0x84f81feb9e7e8b6e7ee74154f07046920a0881f26dca7ad428e51b71126cdbd1 -0x44478b50ba0ed85f17c860194b9fef4357fbda184be1fbcc2337d3de540e4f3b -0xaf0ac9786d2516964063a4d75e900056ed92ae250ac3cefa059c4c1f0057594d -0x90d1c7eabc10a44633846e3a7e3a09e133d27d20b302ee9972aebd249616b655 -0xdeded9d844f4cae269a680333ce3afffca7ac21df4453ebef9e10f6ac1fa2b9f -0xb1f372fb055113825d1b944307d4a509ca9265f4c391706b9f7f429c4fe7402f -0x58966e9599710948ec0fbb5cea0c491ab8bd24c5b502be3ced0dab124d0a35b6 -0x01a82ee2ed9de808ff0530e5dd99ea3d74daca06e0b692971c23cb97f9ad9f09 -0xbfdad45f986c9d962d92324db0ae6a8169f4dd73c4983c2ed59652c9f195e934 -0x834199e940c3ab4f374853ad2c146cc8ad18532fd1092d89862f8a44acc89cc6 -0x630059e7b917f6f1715859b5f463cdc38c8dd3b84269175955e281ed823b9358 -0x2535be4a581f8e473d0aa02418a7f1804019fdd5c1eb5c6a43e2d6df1f822920 -0x8d9656f2a5c03b04dd6ffee314c82d7da7ab3dcb7eca4015fa45f7e4bf334f42 -0xba01775d2d634ce98b9fe8228e8f489c7abacb8199e72ce12154f325d5423e82 -0x0de1c0f82dcac3627e4ec7c141487d3d5b5600df7d0d075f0020c853781af632 -0x20fcbf6d4d4fb5ce9f06cfdaf1c76e575f557bacfc9d939c18aa81c2ca8b71a5 -0x7d65262791b2feb9d520a1f40edc20831d3a11360ac81d94b0b30e766b94f332 -0xea63d3af029fdc79215a0f71c6ac3f0799df97c98b77a11d548c542a638b7ff9 -0x5bec3fcc45f6c8a1b6ffacf8e276160a07689b6a49457179a137a6afbc929e6e -0x180d57b3bc6718da407472fdec7de5495a3b5834346b72c450f50ba70b38489f -0x5e5ecfcf28337160ba4d13c4fd7cd7f3ce3ca6593798ae9b31982118efe2bc79 -0xf72f636a7e9c4e5fa05ec4282aa8bcfce0d0cf706a01a3caaaec9f01a90e934e -0x05f792d32fca16026f988896d2a12052041ece3028fad5d11042320b9df88595 -0xcc111fcd67ae63680dfc4ece745026717c39ed875f37908b388a5f2496f3b6ad -0x28188e9c190f48f15c525947416577e9092936bdd167c1700429e705da23ba87 -0xfb0daf81724a88068bc9f0ddc0fd5f01875a735192c2ebdc078a95871cee025e -0x75e220497ab73da713427e8c300992d6508f4078a3080f6a3f4579530e4f12b6 -0x11af6e5bb4d22aa1a6fc3354dbadbfc2454d551a746b8d1a6fefb22284f8de1b -0x079db5f44a6ce0971ed1f2bf8928645e60b16329f5f5aa4a428b9666aebc8ca2 -0x19f35317b40ea6c6a65185ae0330a93abf79abd0f72c0f1755e08ae1cb94cd8c -0x8838ae105305e9403c3b326e1b554e8ccad281ef9bc5dcae446699c420556c79 -0x97bac4c7801b94f99443eca4371ba284b6de18b30c6da5f456ffb552d5c7e395 -0x6485652f3811734f7b06c7db162c845f789b6cfd374e2342fb73b99d86e19b0a -0xd0aa4164192f70678d8e3ddef34f2f1b6a021ec32b64ccc37e61d56fbd43c7b2 -0xdeeea2960c0b58f24fc704faddfc5d0eb2efadb5ac20af909bcff604fad96b31 -0x6358b3878d358ebc5a2459111fa30ba10e6f50b4695751fbd409d9e4e0f2c807 -0x3db6cf86c98a14d520c923ed6a05a479877d4abcfefc55f1a5d71468b84edb87 -0xecd14b45670e8db3b826d9627cf53e5666de503af52d56824960a122d9f2822f -0xa9ea43168e9050339841006ec769b2b658f97c0c688d49bfac6e358c5c999fc8 -0x4a0c79d964dca8f42c18b32ade3d9e3bca0d2144b8756196fc0185fdb6dce0ce -0x851b16e1eed1a2fe385e8a6d9c1fd2bc239d60d86ac9b895d5f08ffd6cf3f259 -0xb6dca2ec09663eff3584e82397d047bab18addfd5dd49a20bd0295889df00bcb -0x27281fce474a796265915f4696f19e6d0ffccf6fbb1317506cea2da3fb7acc2e -0xe952a6dd8ef8797a9366cd7b9cf472e8a9aa49930651812c654e5a5615943fe6 -0x916f4336813052563eaba52c6df714a970d983772b0da7e2cc79d938de092796 -0x9f47497b76b4364abd31a8f81d549bea71b28d33a9782baa34fd7b609c6fafd0 -0xc52183422a17a5ed9e594eaf6e272e38fc2c6c48cf7898176a3f61786c4e1ec3 -0xd596cfc7f2fc76be95f6b21cf9ff9fbf373646d8dca28c271af410380b75ec95 -0x8bad08a3eb34973c81617919b19546f3b3b8a0e0d51c47698aa213e2c8b5a09e -0x0a92a877b1a53d37a902d6de37567fbedb3b7275409d6ca27d79814ca5fd2640 -0xbf4b6bf54ff0d3614530b5a07c486f973a5ad3c6030459392bc8d4e89a1656ae -0x3d40d0d9f6d794c8b9055f61c0c37a979146a591d10ff68b0457840b64577364 -0xa0e03f3335f7e607cbdf4ab1e831af5544ade006be201d42afa859351a7720e7 -0xc541162f0b82f293af4560ac9c244f4008b7c961bdf62cf387b3e43e77bff070 -0x447b67da6a737d4d8124933a8c1ed6796b235f049b9ec70f1bfe7b6acbb849a4 -0xadc6be422f1b73188e17f7b7e29a475431fe9d2470ca17c15e61b1eba7e6beb7 -0x3c3c30aa0d4b065c18386ccba766a748f77604d52fb587f4d90d31b77afed11a -0x397428741a22f457fc91e9a6e1bbef2924a66c728fb9eec742b9a3e90f72f4cd -0xa00d723982625ed1fb952baeb98d9583d2b461bab19f68c7fd2162491315fe94 -0xc475c7d0b2353bff11d98fcd7b66232202bfdd83bdc960ca1f03eba21226db5a -0x58678713fb7d196d1223deee0d6de3e4800de4b7de63cafd155c637f1e3f8025 -0xa4349c9a7aa25be993f99a521a47d727869f2ec6df90932d1a96a13354eb2014 -0x981ffb18618e1673dbf90554d9d1118adf05f1f49b71bcb031b85974ef97e8bd -0xed61db9b76a2f6bbc9f9aca94fc926414190711c042c0c90e2f4ea62058019bd -0x953e612e92154951edf4973a59ebcdd27366f933c6d8af90cb466d696e912f43 -0x0052a781c1bd1d1d6683a8173e9b06594edf9c72d9730e1e4afa2210ecb31fa0 -0x9fd12642646d82232dc9a495b05fb83ebef051f9431629a95b18b89d3f940802 -0x69321d505f10f1bcf7510d0a0e6ad28ba3a691dd98ebe91fa0729780dd7b7742 -0xf3590cc1f4a0afa84cec6215e21893a7e7538323a69810224fe4672d16e17ac3 -0xe205c46bfc1092997a46c2128150658d02a50609c0a208eed427460518054ef2 -0x952cd384c31f5f5c2aba1492e64d1b796f7b3c5209752af6236f4ef041e1d376 -0xff03a172e58a6fbed286c794c9fc64f4dbee17419ede5f98330529346240d49c -0xf0fde02539a8b4ec4eb763a9834940dc5610001912eb452beadc6dfe89bbf13e -0x1edad28a11e76c33ed3a000e11e43d2a068f8908ce7a915135b3ab46153c7971 -0x43ed3f5f4f4def2fe09f5107ae9ff5539b1b769e1477e2098cd409a50c679509 -0xe4c4bdf1e5e801ee92a0e7c12c95e2f98091ff6adb005d4f034669f64b8c59b4 -0x2de58a93a4efa18953ff749a4baaf745b0797e7b7b31207b377f15b333df4f68 -0x97556175e80419926ed8b5d5d359a64c08b2b2aece975d8f1e48a6a60a873c3c -0x19c0292af8d3be0107fbdbbb557f03987f9366ce8e9256bde868d748332763b4 -0x71eb8de954653026574f349bc0f4fdcf70ccaf969137bc58d86bc316c6064aa7 -0xd09003297b0277c9b398ad643f770ab2fb62424abc18b48d7c7a92bfde8cedd4 -0xf89b381dce2590d946c2d5ce941131c3fea1f40bd9211dc5183a9c7ec687b1dd -0x6184b14b1768c8a9c3f99fefa9e517378e0ef3d3ff6b96a3b2f83cb1f574f7b4 -0xdc605677351f48981e141052ebe45c25a4f642b69beb46fa75e7c8c596bda0e3 -0xd5062ef216f09e542500f8a6528ab8f33884add623219726ae0d35e867b5876b -0x7914a762feb79a470698e24f0776eb0afa299021bf78943ed50ebb9235cd50ec -0x4eca149784628b7013f8adee66b5c005bdd32f74001552189cb54be8780b696a -0xa1b9f19492cadd1547fa5e39034b33b469b155c67438fe2f63ac5534fd3255d6 -0x340f9f8ed1c4e4a375235ff29633c5eda7fc5cfe45918976c61d3305ab00a557 -0x3048e2e0ca5a2c65083a30d8b22ee76e28df50e0b68450e280d26297e2526c45 -0x2358e9daa2b75854dfdd41d23b50c691e7b8262383044c029fc5c0061a4768c3 -0xe16e4a4485ea9ddcd1ea7f870d12a044491b8025d4873337f2eef8122eeb55ff -0x0f791c3aef387ba1267b94e0c2139add1ce4ee979076febdbab5bf9a8a8647a0 -0x79615d7b13d0e58189f067acb9c6ccfeb968391d207da47f3ad87594178b561a -0xde42dc84d293c6be89f3a6e56d113678d20b4db127b9f2f75dee8e6b99114c8e -0x6e2e3f7acbf4d9d775c84cd5606b163b30959b86b61e7b78b5e4f894ecc2cdd1 -0xd4178f14d18d13b3a71f8e850207ec7aba997632c2aa9915961e0a4523571d89 -0xe5369856b721c70394d0f1b24c8868cc5649120b4e2b8e77e1bfe6f1b7a69eb8 -0x64c0651384a62cc463d0ca9a85f028e383c3566c9ac1705983f282bb2c11e1ad -0x334b01c33b0c09f71d5206fd51b54caf522d86084bbddd67451c9b506424deb4 -0x38aafdf969f925760da2ba38789ef56f7fb0d79d77cc42ded1503fbcd606ebf4 -0x96bfc8b81faf750440a7d7dd323a460e8494f59e0bc925a523de08ea1774aae0 -0xaaa1aaab66424fa9b826d042aca5a3af477019806714a910801c72470c66a92f -0x260ad0d98fa4798a85ba8b5b0ffa0d1d41113c7bf692478e392aa04251fe4128 -0xb07a044df661a7dcd88e40243d0e1eebfda2faeedaf149e72394bc9726d41f82 -0xbf4cfed9af263981aef196f3b48ebf9e139c6abf552780ad4619c18323186684 -0x34ce514742520ab400502ae89459635e24af45630e1176b848f9df0b527b844b -0xe2b19de91cb89693f92b66d68d0004ae9a8a84df021cdc58fefd0fdd220fae50 -0x7c6d33dd9ae9d6b7a83ebd13074ff9fde1b78e1d019ccd89326c6bda3ae04bf3 -0xcc71415474f22832e4269731b2a5b91c0bc1498da7ffaee7071c90aa559ac985 -0xa2941bf46b28b1c16c01eda697a8d11d1ecf327d087dc9de177c70585235c41c -0x126fdb86bb876ebdf53ca686a41d8e984936b970afabfd39576054976c427acf -0x55ef68d777883cf79cfa2af18a966ad8648855cc1c955af06ca72c66c50a312a -0x38c7b7a4f67fbdc327b6b34b39f09bdfa9a0b6deb40010cb5e3af3f0a13b68af -0x65db5f7d3eec4641886446076bc0fde9ce1e60a7653db4f1c0bfbb5c51448f82 -0x35437ef0d7f3c6240146bc167dd581594acbcde136e280172e10a9341c4d7085 -0x996e5ff72170a38dfd055782240339aa8679c9f753a783cf747c46c4862fb307 -0x2975d71ef9401a1611c528a36316a72d8ca47be407b8980ab4d02269a4161d6b -0xa476f563671c5b5b0d9ddcdc6bcb48cc646c024b193861fc26a16303d6a0b8d9 -0x18a1f3355b83913d1d75b41a0e0c3221d0a04f890ad93ac385b388d72c6458d9 -0x9e5df735d970fb4e386aba6dde7770e3aadfc084f0c7860b2b172afe5c3b8002 -0x9bcf83d5b3447745a08e37f1c17abdd00998d6143b4260c7385bc635d0471320 -0xcd3f5b3b36fe9ab6e2f658a04872c9744d0f38e65b3a93fe287e5676d645f2fc -0xeebc2b88efa7db7a2b8cd36a673d6045c392b8553db2b9c3a811404c01db93ad -0x03756d189a579dd3d1dd7243df7ba2599e3ec1e9b260414eb004e04069abf511 -0x46479959259e4980687e87c228a6bea2a55265926055e0d6d4575b7636581c86 -0x9e39cfbf0b6f50ae4ef617eec3300e78fddc29fa19751a45abbb09637f228a4c -0x7379c7ddd2ee3fdc79374ffbbf3a76337ca7719cf3c1df704a10e0724f7b6f46 -0xf38bd1402a994659f9b290c2b5426c0e97b49c0bf1bf4b1e1cc632dddb0db956 -0x530a04d2f6d63d24d4d60d9aea703b8aceb1ed23020e28ca8ca8995a30f615b7 -0xc1c60a48468b004e8d5930baf1c2049ff24752de09826763abaf92962461ca6e -0x92b50e63055c9dc7077dce800c9778110539f11ef08445fa03587b537a78e3e6 -0xd34ab136a420e0bb4fabdf2767bba7df122a724a81b8f3057d27cb6eda5f3392 -0x0093e27ec13055fb90a2ea9a35f70f19f7d76b9915fdfda1410ed2564b546622 -0x85b97c18e42039d372c9b20cc129325148e6c923eeea371bba2afb6270294b13 -0x2ddab3cfcd2f6ecb495a9fc45f7b34e04613567caa75049cffb98b7c2b29d540 -0xfb2d3a0b25c91125e64b23ba039849dc46b7aa3271806a649e0b4de3dc323e9e -0x2ffa30075516a942cb599f56fe6fcd6d7ef629f2ea39b560f3be6c210c1b6fc3 -0x7e47ca5bad43c34cbeb67b50e8e360ff894924d79989ecfb172d648d30ffa349 -0x04c45b26e91d0681c0a91032ba91130afa7932035b81e3caf184bbbe5a15c86c -0xc0a791dcdca7b426e29013cee42cbbf9c4cab67c599e9b880ce9a5871eb17503 -0x1f10a6de885d8de419ba4294e881b3e297eecfeb9b45854f57a0a885e50eabde -0xdc9b93add033c3bf4dd19ba7f2145fcbcb6ede9d27ccd6ab8b32dc364c2667ae -0xd2fb080b0cb9c1b46e1dbec38174bfc46c2320912e4eabc162968b4da6dfa589 -0x60aadc92da4e3ebc3d7a0a049525fe8ab0397421cdf8093d675236152142d1aa -0xb0376945da42999a1814f69197868ad15af6e1e778c325d90abe59cf3f1a2e8d -0xb82fc59a049d0fcc56bb764377de2177e661a1913045107b5149acaf361fb9f0 -0x2c8a70d5f74525a99f744c5b98e1ff6a99e54b48c2c7801aa32ac28c1ead422e -0xf826ace8a4aa731267b8af9c58f0da59b0f871e342076cbe1ebff9a251876c1e -0xa82f0adc225d5490f959b13e1b390697a745a3039a94154fb7b39c4b98d23fc9 -0xfae93072bfd8aec08eab60c04f1c59cc583b05493150a07ae2503bb993de997a -0xea7d26f47cded20415a567bea6b26c1a78e3b02491696e7c1df61637ba05d282 -0xa77d0a59cdba43b84c9414eaed9b451cb89e401a81e475a57d88763109cad329 -0x7e51d9f3a2b4147442b2e534c12a3216f938b7dd60f6041cf53c711d2ed102eb -0xcd3fc071905ebfe9b5570f3458736dc2142dd4f9bac4b3d9d9d47239cd7ebecd -0x75913a171deb2ae76baf10ead33cbea5c7286380bebaa487d4cdec9f52ac28e2 -0xd94583e92a3135b3cfbff6f5deec34ce1e8e8a09b4e6617629bf8dde552871ee -0x2c9cc6450587fa4cfc80db11109277e44e6acf79d2e465ba9d6595512e4e5f77 -0x5191cf3b76de2482bedfb4eec7e757337636d5c1923ccfb0380c34f176457f93 -0x815a3425da7f8fe19688f676cac5789272e88788863e2ec6809560b603563690 -0x7544c529298ed6df80c4679333757cdea37f893f4283f156e1bf76f25df93ae5 -0x32d7dd86cbd2dc444cbdbf24d9864f252a17f94ba7b95d2e50c2bb7079da1e9a -0x5f0ebcf5e8457efd7f6bd927537464f07333ed98917185c7c75a20052479e9ef -0x3cb2b2f53aefa7241512eb7dc836a445a3b83c379fdd89a52dd2b31cf0ed0dbf -0xe5ae8f23313bbadb12a42192c2eab6326ccad32640f85adbb1b51b9d62d1959f -0x6b0554803c01b9f62fed261f71f85916f760b2fe9b91226359d06f882e3000cd -0x596ba51a7a7a1bf3d6b5422bc480c6c1c49788fdfc4a619b91834de769550066 -0x46eb06404aaf3b9c244ddbee54ff30b04677fd3fac666664ea57d9c31bc30aa5 -0xb0d8dc87306072dcdfa1f85d8e50a8dc5d1037d604f3140b6d094d402adb80b1 -0x284a326e305b2295c9c8bf56dde517258a86ce9dd8b420ff139ddf1032d92e7c -0xb6b79e260e1e3287d08943938ae61aa2228e04da3eb169889d141d0a74306267 -0x8cf26063886bf0025831deef9f50fe03c42523b1814378a7a4bd0a4ca94edeb4 -0xe25bf257119fa0dda02f51b4d431852023674f50882071cf77a90a277289dcd0 -0x29956f05bbfab0a4bc3c1f95666b2eaff14b3a84f4caf4de948b0c66f4e2b094 -0x6fe0df26a0a83a945d616a0ecc95bd5d7e9476ddef7a3ba02430faca832cae71 -0x0f9309cdcad5a3a8b841c7e07e18555c2e09ed8a3cd3c2cfb78d7bbb873a0578 -0xc84aa573cde7f09f02761c732b380c4859e058f81acb64e7323ab44732f9dc83 -0xf887ad1a0cf15555b1c7592e936fbc173f5ffcec79d02cae821edfeae94e55bb -0xf4188e626beb1057ca85bf9a6e7842f7bc04ac9f6874ff392edd60678467bd4a -0xa8f67c838ed5999ac53fbcc034a507e74ffb525ffbee8689bbe34f91245ab396 -0xd7a2f8d593848c78a307cd97f437d4756cd7942b273a5b6ee24837d291c7517a -0x0e108a5d10c1a5b89c3bdc0db52e8a5ae9f8b31e8bf177b02ca6878c7a276cb0 -0x64387ce6792c3c6125f8b1b90c998d799876af47e9975525a3e915e3ea4daea8 -0x4ffe54304f6c3f0d9a2d50067055f7eabc4ba2bfa5ed57f9539b2ea34e0f34a3 -0x0a1eb51a5eac66b8247be8ec3a5a7e6bf3323f93d2c8bda5691d8aca657bc38a -0xbaeeb0cb686de5be9f66f85b7654a1c5088e33b5bc6a2179327075a247cd0223 -0x0f27549b3c2968d849a72c15fd1687ef5dd8b3b9e41e0addf9cb528c5cdc9cab -0x0b8433dc9cb83c2771e2b14a26c3d46af4c196681c442b270da12d46ceab0827 -0x51e8830f363114cda0c31108a2be1e10871012022f54fc2743077aad986f574c -0xe4b89a92691aae3f5777987992a32e0d13e2b35e91a8e5094f89e3e649ff36e6 -0xbc1a27ce22ea601f858dc45f4663c7663892c606e5d87195f45043edf5b6e630 -0x68de3ad7edbcc1271bc0f5c90d9a8de3eb7e85a18e27e910bd06469e72e69057 -0x1ed2c4d0dff524061d63cad64e5baadab033e7671593c30a920c1e6ee0ea7c42 -0xa496afee04b891ad1ca223bcac546852a5c4212703a555ffcb87962e47b4b932 -0x8e2ba833658a3edfd4e9e9a0cfbf25001a48a99fecc7b0afd41b222b4c46f9c0 -0x76f9b5cdceb85cf1506de3fad698248081830c74d70ec5e58e87ee4163f2c81b -0x858d18d722dc047e0808be012d44dca30d79b45201ae5bdacaeb90c4918ba264 -0xabd6c662d19add500901659be07221bda864d06bf568dd451a69db2fb3c6c9e9 -0x320faf2bfc6b5fe6e83b73531d4dd59d574bae440a9c573f71f1d48c6e9aa31d -0xe1596cf2b930804bd22b31daf398cfbdbc12f0f1124dd0b22ceedc31bb122cb8 -0x2d9e674127b2c5b149afe50cfe88e06cd6f903bdc569d45576a067e670df75b0 -0xa6ec677a7602b3e6a86e75f542faaeedc84851b62a927931339a2bd94cd130b9 -0xc0adfe3bafdd0ae5ba5b5c80bc48e005c68ecbb3127c2229c8aacfc96dd885b2 -0xb5983abfd54179a11b04e29ef88bf8a7024736d4048a11e82fef4e4ff8467c9a -0x1e578bc89ac9b92c7a6ca4834b7aa5ad2f0b6ccc86aa0dfcf8ea599a0ff6151b -0xbcfca0375dad9acc3524f9947a2798438d6100673a5b992eb8eeb1d84fd96974 -0x306270428de3b67e50fadadf6d19085e58bbc664633d1e98052927e35ff6e8df -0xa38b4f3d10f08ffd2888bb245eee27bf183832df1caecc53a96018e016aacf5c -0x383053a679659c111a129306bfc3f76312958f41798288450abd82f48fb1bf0c -0x3a312481f17efd079429b4298c062b7160158092124ce553b45378b768c914ee -0x396cfd5e34b288e421d9faf1c9c053e6ebc5b3b58f7d2f33d6f406eac7b9ddd7 -0xe904dc71773d5b066af57442b1019590e05a35cf7978bdd3565ee1de95200dcb -0x8689852b348ce7a4f2a1a6d6c4fd572266007fdacaa8760f7e6773718a3db3a3 -0x6e34086c58ee3da1cd65884fdf40bf13f86f744c19bd2fbad3a52ad78918e689 -0x04ce98523a7e48263c34d75d7be0da337bbc96f412624ee60ca085be2936bb48 -0xf4922086b5a6c9f797aab8c58cd129d2a7470e08220eeac066f0b0e622ab1281 -0xad318a4bf4e40eb2eea00cbd83eceeefd86574e217f1b921495c55382d421568 -0x4ce0861bdfb1c85edb2cfa60a4b5c22bc699c89904091847b9ee7c0475ba55f5 -0x83e63fb902bfd527d4039427c0224af318c50eee4f622b1d91d6f46258047642 -0x06f8f98d9084e94e4907b3e56765233cb3e88480cd301c82ec3241cc579ff29e -0x09fda88d7062a27b8ff33adeecd904a3abe7ed64cdca1bdd3a771334b4fff83e -0xa5ce718ba2a8c6a98d99a08f6edbe0010e8b0d3503ec75cfd2973f4a10440515 -0x2d5560c0db0874f780958e54ae7298082f93b3474a02ce7f3b3223213a6a31d3 -0x197e3dcc5984d317dfc3c874dca5e11a2b8bcd067094fac53864a3a342e6e27b -0x8579db00a79e10df851e6d7d8d12759b4eccdbd02cbfd462c24593f67d309dc5 -0x9193f61b36a96fa547e0873a415f59d92420a8fe260487c7ccfff5ea206dc6b6 -0x2a73ded1ffcbcb0ab7d926f79f32991ffd0b994d94238a003cd334b93c768749 -0x3e0b1f57415c512c79dc89c4ea5409a595cb118a16a3959bafc7e966e6548a10 -0x6b34095a952f72e143d3ed112a41bb29b92fdcc619a68be6efd112cb93198cc1 -0x51083ba1eb91712de427dc911f26735082c4d96dcf3d45170ee7e9b4b4835839 -0x34b51f3753d130a516391298d05e798b88e1b1a344225e66a8e48feb01d8cd2d -0xfe1e79667745fc634c6792745e475e82abde1253d1b154b5915209d2cfb5ebf3 -0xaf8aac04e2ed1cfedb23bc2854b3e85aa95ed77218827bbbe0434755ebb42fc7 -0xfd5a926ab99a7e89ef82d81500814f46c6271598547d29b9adb80d633773da02 -0xd42f196475458124ed3d21986484a7e6178abe3026fa6e2c62a01995026786ff -0xbece695475189b10cf4ce5a19c5708ce245bbe4d11bea79a61d23b8bde736f7b -0xc4ad226213274368256faab25d2e880c69b48c4dc249e05c9f156a4ac8bbe992 -0x8ed069786b104cecb13555e6f846d5f171b27b31221697b9e19620805ff369e3 -0x168b2170b2e6db30138351fac50f46fc62c6b58ff4c47c3e249e86cc35e469a2 -0x7aa0fb1c57a9d4591e3636f6913cfa174782365400dc3a1d30a59681709019fd -0x0c3a79f726b0c5177d378443325a2cc1a719f2324a6f952dffe852084792d844 -0xcf8b8da4421295a4878c0987c2e24be3976ce918a02f7b59fe8469a3d5216ce3 -0xaa507b3f5ae7e93349187aa1e43449114f0e8a7fe99e19e098764f88c7589e9c -0xb14b7addea2a866a12f3bec239adb94d02a88a801f93aac6b57145c5b2f244b2 -0xa6aeebd089d651c29dc0772e04a3ba7377af8ce3e000d82c5bf94f4417dd92a4 -0x6f5258f0c69dc688a5357661c82e100626cddf60624c21ecb402beec64ec5983 -0xe18d18f9cf96d12914c32a01a63bf290c8d21e3d4b7f7a6e3e77c51e86467f04 -0x2e5cda509d77c82e98101e5d7041f80b04c9b0c75c14f8f95d9f2d8b5d66aef0 -0x495a0359ea83ea2b152227c0452ad4a9706eda35ca56171bc24b535faaef6822 -0x0383e4da8a12b900cc14eb13f91b575241b9c7599bd6de877369ec30c4d21f98 -0x5e00d9b545908c366d5a4ac216d423b134dc6e22088d13fa7992835ebf7ed0ec -0x591d9ca9ce19690253db340fbfb9f8a2a330610e1f7706e8694c341aa8c1f066 -0x87386c1ea51bca078b3b27489ad227fa403fd0eed42bcee898043aee1e7f0cec -0xa3ed5df932484ae05336aa57117781608c89c0590917f555dcd8242d071f575e -0x6f9825c4e8c04aa00e253f8e7aa239d82785575f32afa4091b6bc8262f058ce1 -0x5e3d0584eacc48c58f3b32bca904533c8f5a87256992ebde099f9d1375a35617 -0x8f9c437197ffe360916ba53fe191e2477776bef3706459d59abe3a5903a02795 -0x1a04326d961b7f7c188725168f9f33dd79c152478109797c531a727fc9e6da97 -0x3329b9f5e374facf83922c3e8f27f5b537fdd4194b4a1df5cff8ebe9d62cd239 -0x82bb7d3aeba81c0c4c161d02e488e1c676bc1494c858b8aba7298ab631c4d272 -0xab31e147c6f77ff04bd6fa8f79adafc4115eef5c9bdd10bd4197f797e88e9cbc -0x12c557543a7c2b4ef251d6ad51c7d0d3524efde6dd1d5dd0d9cabd0e9143651e -0x8d21b83a48e57c907ffc754ea023ce8cf88305e57bfdebc2e31d79e481a73a7a -0x32c86adfe4dac643496c80d08ac08d21b8b394eb16ec2c964939b4e4fdcf6950 -0x8a8a37cbbb378281e1a5de584101b42a47d1b325aef6ca179723deaf31667d5f -0xf6c485994480ce6bcd13569644da5da256373342c6dcf43eb0ec878a591aa1e2 -0x26a79ab03afeb6be5260c13fdfbbf4e009e9ecc5829a66599e809f50f779e72c -0xf06a79f180cb0be26259e5d3a99cf3fc67c1611f0a5bbb0f74421d5f9f9d3ac4 -0x1c5128ce90ace36c0f59eb8d46633cd7222f22d644161bf3a892637fe2051f0d -0x5833ec26867182a40a622cea76e5147171a143e9b47b7055c6e3aa66c527c809 -0x00462fa5d3f9a617d617f5e62cfdc3018e05c57762c5f469f61ae4fae0a32d01 -0xf638fe50b77a20ba6edeb78ef7821084c07433bf8c10b737da3154dc76807e13 -0x18c0d8418727ff4aba60cc3a5c6fbf518bbc60853fd62a6ad23147f72450081d -0x65f5489ae9fff6383e6b220e1562e287776aff4c8e73e3e9259ac246caaf247e -0x86fdc3260f7cab9ee8ec755fcaed297878a731df22ca76e439eb08a4553cb8e4 -0x575b7d4c3610ed5784bc9b1aa0a420746b8f3d7879852dc7fa9543f1388de8cc -0x4c58efdf66c2e9ff0c057d98aee8630c8abd7e1d907bb2fa2f5e99fb6b31999a -0xc1a063d00bbae618588c442946317f6615f76ddf761ab8ddb4379e2ae771b4fb -0xf3fe01d2c80ac7f9604001cc761cb39975d0e6b3deb1a62cb77a3c3769325940 -0xa21754d8208ef5579845da1f33a272a0216510ee8c772d3dd27a976b5fe6feca -0x695875192baccdf545e6a701aef765750b7d68524e390d71f0630f09c86ffe7d -0xa8286ef313b2432e25ed6d9855d6bc8f391092a64e033a42c732b84b3d1738bf -0xd26a7abf85190b7b3fb1b13df78079f2937367204258caf93ca50bf103d94093 -0xd2c236b2aa9128f4b1a07854ab6f4b5e78c6de9fc26cf7aa8d6a1640934c6055 -0x2cdaa394e505aafafe5ec33ed1564d674599969b2f02ba5b215ec8976d98130c -0x3c6b76b9668c45e8f3d528fc79528896a6ae56c4a445cb16457a3f3a87cb739f -0x33912de635d5d557654d5969f6e14777fe3a7e7197aebc92154dfdc916652be1 -0xcdfe6dc3389ecd5bf3480b805715a95468d2ac074838efcd0bd4e458196fdd48 -0x772ab4904bb36d5ab65bb7657b70dfae674d94ed987c6d5167c732a2315384ba -0x49dc722a3cd9c698c9abd2dfa91c10f42b4279f1629b6099b1a58b4c8597223d -0x8386be64bf3d509646dccf62c2b3cee76261ae71aeda8eb60df1f12444bee505 -0x487fe560beca58c7d454559ca97e30a0d12e30c62716f85bb6e5f40a0aecbb72 -0x03b66ca79da643197921ee79d59c43b12a38a7eb5c9d6f039b4e06aa154ee092 -0x7c5147f3427aab6ab73bc2ba2cbcdf3493553b999a21fa93adeb4abaddea196f -0x31aa2d077f44bb63e8e0d748189f4de314e146249da10b9f1e1397db61194c74 -0xda179b6d1a52d7c171344d031f372e0cec24bd33d82e3ba04d0821a68d026d83 -0x236193eac9ae8086b61945a629604da569adb58daeeb3b230a92df9f767133c6 -0x6f95ce9d554ea38b82ba250499cbbe4820bc3b2e6f1ad64ae4d3d8f44436bd06 -0x8dcfc2156befaca40f1e284d18f99ea0380a4054240362d859ff292ec5f97aa0 -0x93942efcde15452606b2a95d832b1cd9ee2ea5c15e569b873085a3552a6425f2 -0xf60a29bf87d99a09ac3376176e0a8491a307de8bbce85e5edd26ba1c5d0c8426 -0xc35ba84b6422f108c28bfca0064e2f20190f30c2d77da8096b9a0f05fa559951 -0x30961e0a270c5447d148d2c196603a3f8a5ebcd5dd036b8c322b9739033cbb8c -0x31ae78bfd37516b8375e0a7d7f91ba7849a640d07d7f0a701d4babd6d54956a7 -0xcaa649025971bc350467a51701621e3af19df02b76f862ed5d8e71fd6147184e -0x2977c7df9e55d149479c296ea7a2e3ae895c8f7ee83b23271cab3c651dd14aa4 -0xb0cf886901f4c6b413a2a0a384577e38e34811a322f3f4dbfb1e5dc2546e2406 -0x4bb615eaab4e3f3b21d393929e30ab9502bd4ec76df64be6070fd979313bfa98 -0x59e6b434d37b8d609c245d687bde283050344ebe9a8de86ead35f49f3e4a89dd -0x82453d03412cd616ff0f3003ecf3f45ab8cf34519b51e83649066a80102ec7fa -0x418b4bcf5d2c0b5e30dd6a42c0ca64c3879dcf52445aff643cf17a1831e7c366 -0xd553c81d740367980b0891272ab6340d7fca87d23e199a9c83a551a7489d8325 -0xdffc6fca1227831a08e38ed47894eac0e8fc32f7833d9da216034359c6dc98ca -0x2510898d89934c6e9e580754181fe6c1a285c602d706995e3a3041ed2f4b48a3 -0x1b78ee117590a52b6cfa50a90493df967987b803546d9859ae7a491fb95a0184 -0x23762289082b2801ba4bd44cdf3e17b7ab6c921a3c11852daf24abd71546b30e -0x7984c000ecd986a6566bd8471789180509fac99ebba877a2ed46be1171f54dbb -0x8e42430c3afc4b7c5725770801a0928e073b307f0177474e79312e2b3be761ed -0x13f9308daee8fd0772aa15cfb0c1601b1daa7f0b6e5004757d51ef23e82537b1 -0x86189d24e45be52ebc874f67bb2511f0e18ad0d2ab5686799330659bbbf59ffb -0x5d9c1a71481edd7bd17735f114b196942d35d0aa279aa85a12d908bd68ff79bd -0xa9b9ba23163ea789ecc90ad4eb352da50c880a057769a096b46dbad9279d3ded -0xe713107b296b7a695c03858994e69d4d0f3bffffeaafefe5d029554b21465329 -0x394c146bf758732f1d61816f519cb5d349098ad415d0d8dbee4bc24899fd0a22 -0xd3adb8468b1a734e99a4008818a705ed72987d3bcefcb48dd46cecc962d19eef -0x777cb4af71a1d14957c2c29092711287aee035ed1f15b065c5ef8b91def60375 -0x34b8a36ea9ada28e0984550bdee99d178dd2a3d2b9b4cfd83297b1e0931b85ae -0xe05d79bd51cf720e783daf9e29b72aba60cc2429f4ba18cb29e4959f1b5b7758 -0x7806fccff749dacce80405dec768467f4b5fd1c4cd0d0cd1531099e8af01181a -0x5093e34aef5305bab05aa269eb474a1ee945c64233e10cfe7a4b328a32640324 -0x6be303d0dce5d4b71849ef98ae9e80c551677ca0b0188c18a5ec926484310995 -0x7535a2e2c6a699bbbd41dbe8b92c67922124f1430e80b7b1ec1472c7da1a381f -0x3c7f40a5033c6a7d79ee4992befd76b22c98134efcdcc08338e908aff947aeb1 -0xcd758a30520dc1c6f000a607be99f57a10204dc0a30e9173e857df2c605252de -0xb9a6c3e1bbc7639ec450079ad74a49f7940c4176d90def54f46b87b4cbde6b20 -0xab0316c7f9ee9f09f5c3c01c90026c516316ddef4dfe7dc3a5602b828d8ba456 -0x6785dc4f9a99163fb3bf5b9386f60b0b5f250064b15a4e954a2406c3bc9f08ae -0xaa39d6bea07a82ab1cbf5fc0255609cdd8d7835e763ea42ca3409334493e7848 -0x72172727055fc887532afa6b26ff43e1042e316e70b061a13bc56e2e279d32d4 -0xb3684fbbd4649358ea5dca78b2c3b7f0bb8434f327e5eb3beea38cef9f3ace3b -0xeda7d5fc680eccc8c29b198b09380259401e1bbfe9372c245f2d63e7562daf44 -0x8277f4b92022b4f806632e0ada331f09c89feee19447f4af5207d98217a53841 -0xf0269ac317b2f9184ddb3a572fa7d1a8c162fcf360e269d3013626dd5fc1cbaa -0x00e77b6058b5a9fcc8dcc3481579b1288a8fee18ef4a434301fe6ab1e9771c2c -0x67dc2f47fd170b0bf760c266019b16f5854430c7d900a7fdaa38eec35e78141d -0xc2855087c2d4ece9127003b6978e8c975a37c1844c6db2330a8218c8f098ecb2 -0xc20ba238ba75d3722076716a76c4ef476eb9d5d233210db3e55f5d01378d1b63 -0x775b7b69fc6e75857abeb4dda4622afd6677b814e2234673c3a912656346325f -0x86c6922703665e33c04cf3afbf145c90d9d230a23d853eacf1a0853c88a89620 -0xb7100f6459ae39db0eeb02bb187ed98213d25559dbe82013aad342c18fa3c58b -0x559bd831ff35c9eee8dd7fa82ea1c399fade6abd7497903ea845fa03bfebead3 -0x25012f64cce69fed65b3379fb5c6361840c323be944789815b6976a24769b0fa -0xd02106ea15003a7f8c70f70d14deff7f66ea53eb03637796857f8a6e0ffccc88 -0x307eee9c400135177983af87d5ac8b1b92fcf93747ca1392c9f9ec32adb9760a -0x324e7fcd6749d7407976c142e2de14792a731ffc48d565819d1d60e8c69c2e59 -0xa95a4750399729ff85c019ff8114434c68022ace5782d23fe163f4ca4b71ad32 -0x903f3a4477b9ec7cac27b6bfeead1eea41b7f1ed3588a4407328a1d390ccaba3 -0x53ea0375798cbbd3b2787904949f4ba7513f1d24e2b7cabf8da273e7deafb46f -0x8aab6dbbceade308dc73243d2f2eb34b7a1af4fa10791703799d89cdc5b6733e -0x41affb714aa276299f2d7459fbf4bfa6381e60bd6069eb4e9f387d357512b1c0 -0xd5e21103a821080e00b7d45d06f84faae3d3faf27ee035c84c0660c9f7b58cd3 -0xe159a5ccca4e954f42ee3c69f92f24239097fa7fbe94f117cefbb0b45b72d713 -0x67fe2e1bf6f63cfb9e8501f216059228b39bd4981b2f29a0391588de64c076f3 -0x8568a5749f3e078640448e88bed4acb85fabdfe8a76b012f196c53d2943a2310 -0x8583cfa7fc0a32c38380832bd9db9b3d900fa11489e710988372ad530570d522 -0x794b437b78b5f494c1306df28d345192cb12ee1896636e52f41b405f64fa6580 -0xee0477ac84231cb9956aeb512a8b15132085e0364d57d31ec613cd7e27cf3bce -0xda8eca4f9043a839e71210dcc77d55cde9cf0b4133c2d880dbadcac2c955bd10 -0x52062f783d737c2d0ff3470d69602c481d761e07afc19e14d6487f85cf10b36e -0xbdfdda35543c3efa62ce9c1cbfea189faa86caa1e57cf64c4b724a9bdf999a70 -0x03e5b27a912fb0e7fdbd1b77c2286ec0d39d001f17056003a551c3f188a6ec4e -0x9605be7537cefedc65bb95f00fb824233a0d1e3580d86fe061d08cfaaef0ea15 -0x53c39b88508e5fa38ba07acc36b29cd247167f302d83c7bc0345f44f4599ecfe -0xf17f39438513019af0d3920395a70b4ee0e6a8911f3cae9e81aef66234cc4c80 -0x465c83f1c4e90d8e440a6b271e5d062434d5d0413666c2b587fdf36b4c54e617 -0x5a7a81460d48b02b15200998082ce1b9d4f5e4ec628f99f4af5b942bcb5e0b69 -0x030f55aba766a751e453e3efc4e67fb98d08e8fe29884672b91be31ba23e924f -0x0b884d5d0b5103d352c5931021043e6f6e248277abb88e650f596223b91e7554 -0xeebc4016e67d24e9f89a8c28faf85ef5d9761b0fe4deca4e0bb07c15d203c823 -0x9969fffed709b7844fc202511944d1c0615a0725ea99d353dfcfaa53bded3027 -0x76e79f9131aaf6bfebbd88678fb68d7d976dd7a6c496fc1dec38eaa188faa861 -0xa6ee8e75dd46dbaff969997d21f25f5e23c838c7f0d506873ef24c9ebcd09705 -0x3dd7e41022986ed04006ae80366a0db09182c8ca5f8e2157b93ab0facba4e591 -0xd67c0f75ec5188206d088eb95ddfaf0e7a6ae26af7fdfc9772d203f70b1928a7 -0xc5aff908b8869d1dcca4fc28763f42168c75e752036d3b2aac10fa04e475b641 -0x6cc3ae2ac2c6ee72aa3c130a55cdb26aad8cbdf686af6d9cc8f1d38a704083bf -0xfe3f3bf41c594c4135e3aa77f88fd93cee556291dafe2c812aca20c42cf33a49 -0x16eea8ff792829308b52eccd7cfcdbc5cee47467e1f97df791687e781f68dc29 -0x842a10332f5ebf75e86d849c3422c1a497ccc3e7b6b484d2a081772c1314715a -0x85f176cee2fce0295ccc94c03c6d61d06e765fd8409d029d9eaa7e153362f67a -0x0e9dd4ccfed41b3b43f96cb643b2703e71f21c136fa6ac033ff9de6977c9e944 -0xa2d9fa7eb1d9f396cad4b1f124ad19d37ec4676c238a31902ae722c58c53e2c6 -0x03d7b201436bc8b31290d1ab84e2cafc34d8b55428c66ae1b4a642e6eac4164e -0xd2c40e874e4f488cc38f8dd612cead40137485968fa27e990c094dd9d8bbb2e4 -0x60494a13b96ecb673def2d66aed67a70915a0cd21668959298ed8fe574eb11fa -0x6d0a2176c56a29f3bec27dd76f5afad187f336d6143c62003ea3f4ef4f5727d5 -0xf68d8b4393a6c38d5d61756481d4bf1b7ed7b28a2e33db520916dda2930bdfb0 -0xc0841f408548d6df8b9861345346c80350bd5fda04a4c7c0f6c48ebf986afca5 -0x9d069535707f268559dfd9ebeb7278a94ebc9729a7316c1b41e04516ff930496 -0x423b81b2805e6f0b9de6a8089089e3eb71aa072d94b00e28c7e43cec2e854521 -0xe994e527a96214f0837361457e05291524d0b2ff19645dbabf51b06ebea8b9d7 -0x6cde937fdc6e7443759e8359b1340a9436aff75f5e1dc486d811b3690a11a8c3 -0xe03d061c206be6972c281c73067e6c474bd96f66b06f9d5c159ea299e97da444 -0x10690f4452839fca165c3ec34f1c2300400ada7b24166b4f1cd371f53bb00606 -0xe0cb4d060042c090530da6e35ec52e798ecba977cb9c8cdc12304cf561123ebd -0x5a4805cc5c078c2c44e669f1253f9b42ad963dfbaa421e0d7582d0c7eaf8f80d -0xe0f2d16bfe683d81b15660b81e04cce9a19f7cfad72729a4728f7173f2eb5249 -0x78ca63550655bee3fc16bf9061f7b6d1530e22ce205c619132926559d7656210 -0xab84dbace87f86c175e3ac86301cff05fd0ae43a4fd111a9fb23cc32d16b4f78 -0x9dae64732a8f6bc6c3c4cf0405a184ddd7f1974707f11398c43c9368ce76f3a4 -0xcf97a65608438939c93a7601d30e4b8baf2f15632bce46971fc5c2650e449b03 -0xba060e0f32850e29a0706dffcee01ab6fc9d5aa2d0601cba9eff957c892ddbfd -0x0eb45478b1729c136772eb8823ee869eaf4d514b059ab895530629187d985ca8 -0x72d23f72eb73d7390a0e0b5c5873e5d6b5e78a01fea84a10d1b476a67f4c7555 -0x065aca026be971e2832ea539ca3d5c6499fd915fae1097772c604140fcf19e36 -0xe39fc3f9c187a9642b8bc9731f566e9596eb1b2084637af34acc97b859d8c8c9 -0x21311c2f0672ca694cd48e848334903e778527eabee0dc0406be7fb6b09f559c -0xed1751e248e6d358dc2f69939fcc29673e7629bf39c7cf403c5ed007b6d68ccc -0x0993bf18db93abafa75b8fb78e56df2c748ea01caf6b7c8c456d601bd41af705 -0x2eb60ec2b33ce2f923a3b3516f7c6703990f71be0eecbcda1c131ae0019f7b63 -0x139ab3de141b3c56995e03c0d5619112b6cb730429e913e79e3e72f22e81fb17 -0x0135387c163f804c932af2dc5012ff0f3af94221480b190722f1ffa01a70c4aa -0x1617c549a73858e2ef6cb66213b9db3238b3fc182213baea2a59a238f575357b -0xc45b1e38fe9ff698cab611a4c8941ce5fa7a30d4f6052e1f54b7965d7cff699b -0xfacbab3d81c0811d7f8ec46106e778fca19196a9583c0b9b67cbad00bbf0683e -0x3facec6902dbf9fae667a0118e1aec216e63ad88a767efc4ed18793a9fa45025 -0x5c7ff163ac2bd25a13964e26cf5174d9df268c425ef3b4e45255e6dcc6b38518 -0x41cb1a51d1f608686bedfa840d38f088aa6e6a5eefad66e355118ae8490ea514 -0x600ca95307ff02c01e14270f0b15aac0bf79d23f2922de240aea6cda881fcb22 -0xf03713a9d30672f2b289fefe59ec7fb140f614a47c73a2e00f26e8d1528f7918 -0xad296d8e94a2b5a5fa281c115f241267bf2d7ea61e65f23abc63e8e397be6181 -0x08d034f28aa4e6d2bd96d855446a3a8da355ae430223724f11f22677f6d9dba0 -0x94cc6a2fe773d11dc476d3cf9af4de71e5f030d02ca027b8640c726b78c34a37 -0xe6bc083824300c163bc8c775df3e5b6c3721ee4be90ebc5f7c4d137136da02d8 -0x62298ceaa7bfd930bd9bb356a065383e3a79910041e39c836dddd6cb9ec32e3c -0x763d242f57f3537cffb5d4ed633bbbffa45443e58b6032059879a541c0ce114d -0x2a16a1d3a2c7056b406def297fcf1bb6fe20527d32853763937cb7b31c51ef0c -0xb9aa87de8992b4250fabd5f0ee0ff68a8ebee033d4e6a8f191d513aa74ecbd93 -0xad53096dc149642857e703c7e6d8cc6b5390978e2952d9acc8287ed047fdaf7b -0x843acd0701d8064bf16f94f6f426398e0ba8dcccdd26b2f6fd7749f1a6e1d716 -0x13c90ddd678b2dd7da8b066b520162fbf93d1e5898c065bb98c9d71d720e8e97 -0xb9a45717e603ae2fc7b1615ac516e226850d32d799994eb26107325573c09f80 -0x206f9a7e01dccc34297ca80d0eb7bf3716e33508d3350f9c4563e6e642d9f40c -0x69be7737475844b46289a640f92fa86bc5c79154195d82565d32d00e505eb374 -0xff7ccc3e12dff68f3afdf88cdc7da8e8e5aa8c7ec26492644a1f84a4dbbe0f1a -0x6f4e53c38e33fe987b2317d19ff0db301e4deeb1ab2ed9d813bda3b773626610 -0x335f00f8c5b5d54a82567db2ae545c269079b38757b82b1ab4f8e7bee3e77837 -0xdaa654b9e92cf231d81ecbc24303fd1342d2a53ff70c40df852780edd3353aba -0x98ff5f58f6928a0f6293016f3c5c154c246accd69fe94dfb9779539d6cfd7532 -0x934b47f8657eda869151733dfd11130fd49a46c9e979621ee6424ca581b59136 -0x36f04953dccce0ac702e309ca75cb1818a83aa177a948da41a698bcd0ddbdf44 -0xe3de9a5e86da970d68d0535b418b6b48281884d48826bd95f583795847d846ba -0xe6e13c6b4bd4b1923166d7158b02923fb1eab7ef92040d6103b4658e6bee6576 -0x927f7cd572375729404ef6e7e8ede184ddb3e9616741d76b04acde6e6d9604e6 -0xcde6fb8d7a27a73f74b622695749808bc64fb8b8234904f2700c3fc3db7f35c5 -0xbd72b7c5f7fc014aa1cab7561ec5141fc1e43a80188323578090a88a11414959 -0x63a3596525870072de2f992643e255b2c0bb08bc644e71315e4aa12c0a2c0419 -0x61ecf4ef75f4fed10fb1a6987c8f233e8ff943db82acb9aad1a0763e53755f4e -0x4074c8597aac2be6153db7247b0de90222776d926c1a3f1b591bc4ad0782cf68 -0x2a903b1a343eec2c5fe7529863dfcddd237ae62b817f5d8b5c50482725dd6a40 -0x481c9691b764f35579a07ef666f3957748b5f6335e1ac7d8775e7a0b1dbd2833 -0xb849fc3e14f525182d8a67ceb41ed520980a21d4d18235797b46ac948ae04809 -0x3c4c16a6c898fc9c562d088096f41ebf6bd831ea8a104016fe8bcbb81e2219cd -0x5eceb60f01f2ad3ad1317679f75b8e6fc025cc303c46b479ab2f539753554e66 -0x54b1dcf0081d31099b1d4740bc0475b1f335ed1536adddcd893dd54e5bbb20c1 -0x45c2677096839cbf8bdb17bb713f784a033c9d7d936b187e0b08117952860723 -0xe6d0a775d5050980e6bb86375550edc9f6b26865a7fd81ed49286375a4179edb -0xb86e859b50fb8cdcbab069b7ed339c1f49c1bd4aa5c67491d04c303ee5bf5a25 -0x97d962e5aa735aff5a3b36902d06d1ea99917db8ea117a389ac748e02fbfd2a9 -0xa2a23792c67a0a6c0353a13e1e3c496d445345a0da745092a0e62717fcab6935 -0xcc04744167828bd9fed2d8c019ee8270551efc441965c0e9b2e41b8893e53c2f -0x16cd240fac0c92b748e3c640c8f2aeb592f8f635aba8936bd1b33f7f59741510 -0x956d158b34ccabf8ded8cd0695ca456b573a6066165a3726add034c0512f72a5 -0xa146fddfbcc6c397b613a4b3d328b049de5abcdf74c15ee7d28d43c44fe5ccbc -0x1ea58441ff40724abc1770f763e883e81fd9eefa0b05c932e0589767cfbfe298 -0x1b7051e9eaf595266810cbda92071ba7fbdc3bea1cfb42e9f4ba7c6350460d4d -0xe363486f7241f2eab3c1717a2e351dac95a82458d068bcc79f95fe85938e263e -0xa6c223d5d5ab97c0d4c51653f8a7da8a0feac132330346635ed99c2637c8fcce -0x2091e20c297fa397fb25dbc8e5433431113d4f5881097580251178549ab72f87 -0xf171dfd41daa57e01fbc9849bcab0b6ec4929dd6649b228739dd1578054a9dbf -0x99d4e8b0a1ca4ca92b317d2cc116fd03c574bbd8ee47a1e8ceddcc08d915005d -0x1e23f155e66b2150cfea3828c4eeadcd950f7c2a5ab6b8acd5fbcf6d976324bf -0x453c26955b1d859b695c5682a0f0687fb8f17bbb3ba224cf9fd666f8b0d03eae -0x6f7c984d28f0764572f858d2e458fd1ef702101ea9be74bb0b752c1d5c228148 -0x86a9747dd51468f27af3e458714934db9ac0ebc7b223cce603984ca99caeeeb2 -0x7de0ea4849d1f29e51934a200f2e6d51bb66130fb484835a246bf1631288183b -0xcd2c8d44301681119cefab49ea2fbe06e808e21a319a1cd87718fd71198e9834 -0xae384bdddffc5d5cb52d84d607a417379bee19de04264e1e30fdb353716e55e1 -0xae708c31928fb6e960196407f80101aba9ed331bc1e4bc396506e8f9f5706325 -0xdfb6b4cbb8d6920284f1afe1bd3004bafd634042c06a5aa0fa46cdc1ade3351e -0x27fcdcca1d49d8d891fcdffc83dbafc77e3976ca004dd83f321e7af32a0209ee -0x53e69ff82e3798c16ead3079454f01236267e072caf294887bca952d59ef348a -0xe18eb1b0a18ddea3a052197cacd40b92dfa77d773a7d56ec537953590c3a4fd0 -0x687b7b7f29cc5ade60b03e1944dfbd5e743d0afbc8fadce9cf256636b7244b23 -0xe1cd773a8f5b8ef2232b4e4c910d30bca04ce06a01c9324f1e8eb4d618100d19 -0x573a20fda89b4eaa2136eb5e71e73081793def018686f6c5017669fd193aa567 -0x76fc0fa6666532857738958325bc92fd5891ae334dc63a070327b5d0cec191f9 -0x2197a4c5fb6bab4ea01d2d812ef1a8a82dda0b79659ee839f3c76abb570ed2c1 -0x32db9a8f430c11a2c2a5c061cae6f2d32c6d31bdc314b827f22ed1e594757b00 -0x9b47a1b439ecdc7d177fa829c853156c578c5494a36f787f635d241bd8eabb86 -0x72f9774a1547ef4cf623274e3e4ec1855d93c2e5f2f456a1d77b697ef921e716 -0xdb6d46a88aaa90b99070170c576dacfdc14964467cc64dd46864b263be57adb5 -0x36d114329701da3e44b5fc9996e6a8ed460393bef62b3c281d4e84217afb00ca -0x9ccb2dd5f166e697b225251ca7f91316d880cd984adc60dc00206492d75a4ec8 -0xaaab4fa209499f069daac9c6f4861003a886d2c00dbfed1e4bffbf92be6b5806 -0x2e2ae7e1ba130a0932ee99e0b29cf7abd4b70768886e0ca739f1ad2e78610d68 -0x86375e8e35b7ce83c61f16bd779db2db019578cc8583ab775d5d266cabb4fd94 -0xca88e5bc5ea86dfbc8ee31ca70336278760be9671005b55f3dd0d4ffef22dcc3 -0x6569ebb854c41053790df1951c8dd57b4ddd9651515a1b6515d695d7f4de748f -0xb1bea30a89cc03a791bfe8752e11754acc3486e72cb706bc066683de9b805516 -0x88b0e01b9375588a2dcd1622ac04e04d064a8ca5b21d9038bcb44385ccd3e716 -0xb185a8f2b893a9c7e2d9b1bddc305ad33bf3ad453c0d5ef085f0b89df12f9257 -0x5a6d12955cd56d989a05da81413a1e2cd5adf61f2f17e35c1fcead3916325e44 -0xf67a5e1563488a1a4590c1886ddad62d303c5c82d9939cfe4cd4b9688f819a4b -0xfb4c6c16326b11458df83f95ee4f57be7196b399e34e6562c98d232f8e8cc1a0 -0x9d5120beb39c9e3270227e14dbd9a33e7b559d0a93236ea5c393b702cc4c738b -0x02913c8df7c502c14d170fc42e72696a70105cf2bf419d2b00d20af7cb99f1d3 -0x22f65bd2dd92efa363b702e9a5b7ff9e7ad130402da0f95e28cffd5f0c95a2c2 -0x79da9bed4fe248b40552195a0ab8a4b1cdfd72907db1913c1cb90e5f26d0f87c -0xf2a5d62d1f98c06ad99b612b910977547ea4d831767bc50a5d4a425c38d73b1c -0xeed5aec95ddccd2f0346694b0bb9c562ac63ad1dc2aade18a3a65d41476145ec -0x55e6a9436b979f3da583efcd05a2010b93705988aae72e7b5e94e65827078097 -0xad99fe85d1e43b44340db6d0d40b3e81f8b2e1b9e9a0b5ed5e5b42e4c931bf9e -0xb8a712a523f3acba3e987901c4ab6102e21c5008a7ef2080467659f43dcee97e -0xc2209116fac3090b29517feaa8468aebf35a63d2d61418c5b72e7c84d532b367 -0x4defb1e827f55994bbe0fdef1fd41a05934fa95b3b0033a6a77c60fd567e6881 -0xd010bc46f96166aa9d0e6dc01b72b93c1c8fbc0b689864232e8c2ab4d8b0440f -0x617b8abb64ef9d0f0b61b181c27c278d6bcbfacc5417b1b4dab3342aad4ce051 -0xbf5ff6d562488b503c42bef6da33a06a4a7d056f806eabbc9c0a453161c552ff -0x16805d9ba3b83ac2c16420fddc0e9fa18c6bd7d281c4b753ab1b3ec770a43a45 -0x29555d59cdcb2ceca402da6a5dbb5b0f489bf47d311dc76fa1070ee7c754f03b -0x86ab1a3e25e6a51a3abaecacdfffd1689a30308459754bdca71ef16f1148d3a4 -0x501bba6a24cffd6857c67f9f5f07542d7b1d0f0ada169ae5c329e16c59a8c7ed -0x12216847bec915510e1eec0ed43a196fa51873145cd1a8ad11b2c73ee7e14962 -0xe7465129b5dbb4c9bae13c2b482dbb68d36125549aafb97020cdc249f3ecdec0 -0xf39d76fac4c9f75f9956c3d0ee495f2956468d705a6219c13767fa4a7fe08e98 -0x68f826163af3e64b3987d4ff6303b4acf242282f36d59e5c722a47f165881377 -0xc95fd3a90f576fa3420cdbf539c924a3f690f940fa923bc0d7f8e79da90f94e9 -0x1a4ecd2fdbb277ce2ae9fc7e2f93433dcea243985a8e43d17814c5103c0cb2ec -0x6730834b26b2dc355dbf467a8c88717f89a508b054337957e29692792fa14096 -0x72f0e1f8d7d2c666754cca556c0f41900e25e98ba2fb7ac7053ddea8b68feef0 -0xa70411f12446e64b287ce6fea6c601ac76543c3ad4c9be945508acf54a85e919 -0x6325ad201590516d28f3742ad6da8eab7a0e89efda1d04b66f9550e21c5cc234 -0x535e33b897e33c29303085d771ffa8684504083c9902c73cfef7a1a5de5feff6 -0xa243218b236675eaeae207982e0e160f40fcd00730688673bbd736d0716d82a9 -0xb6b483220e5bc3b10d660339f76d9c944d0b4cb4a7dfec51b88d9ce926af50be -0x4fe61d0c610f332c9175afe47390c8c8dc2d13b6257aab5ee720e36c5f87fcae -0x60fac00cccb66d8b9e2d7eb70869a44a5c2930425e4c4fcdb4234f078932957e -0x1825670b8978050370b1b2f01ea8132c4c309e006164d75dd6088816bc17947c -0x3b81f59f57b9b395a7380270d6a0996b30feb231797491d32dc30fe9b82512f0 -0x994ac39863969191568148c78eda2cc1cb9bbe519cdb6678cecc5df17834980b -0x91f2c26eb70aaf96362635aa32ea4306bab5d3976968db1a09c0423c7fc7ae04 -0x2ddc717274a695ae0f5f812522e85e4b48908af2f31d931e25ca39a90ace1473 -0xff27f215ed7f18550b138d5df2f121c3602f8c478e49685b4a4f8c25cb3657fe -0xb434ffd3957414482205209816d5c4748a45d3c39827c33a36ba20185824e3f5 -0xa957968413a6cae2e5d797705b05fda892e4fb5c1225edc60e4ea68081b96e62 -0xc0a20c2c5963f1b0627cc38e4ea51f9c4f058c63b595a8dcad169472d9ff4283 -0x08a5207a2cd5eb0c9d20c41275a35bdd187d050bd419a8fa7b8acbdba049b34b -0xb897b9086c62bac4a17a7be6ad4f5331d329082c7db53b597fccc410808aa998 -0x0e16b6f927681094695f48361f7ea0fa683eb6c51767e8e2123a28e34779fe84 -0xe5e195058c54d097b5096c0a337f9363115f3b775447708da13ac8a3251c1235 -0xc156c2640ef61ed174c5ec740f25c72532c5ff8466a509c7b7baa77c54c3fe09 -0x7c153e74e5d2e1c4a3fe7d268def5031b10bee7c3df1ce9d9e9c702e64c43955 -0x77aa98e33f60b4e992a476d336671dcabd8dabf3e43532119866b85b5144b8ac -0xbb8837b97b7dfa52568cc8a65951d10ec025f51189ae0fbcfa938971829a17db -0xc9e2f738e3c757a63d7ee1a08f957380d669b6d30140550cbb68b4295724c2f2 -0xec2595ff37789ba9d57238c88ad21bcb050c2ec2c86746a331753cad24765b85 -0xe44efc7e3ff0ab391385d888a83be8594bac978f78a05181ded5241aa9e62437 -0x00ff05e5244db54deb6c2f43c341b8da13d1a5b4dcc6c0af0cc5ffbeb44b5968 -0xf5d04484d50664682e5b646eaac8b1e25ca181912cdaf99d08d90edcd9f16110 -0x44d779ee0c9c22c48d3b6e4e1da720396e306f18bb99940d7b768beddc83d819 -0xc13a7099312e76fef87f10d635fb97165b370e6272306b2719dc6c2393e38138 -0xf84cb1df6062667e46e88378d29aafd8c6764ecadc7863c73676b1a21ecf89cc -0xde89801dfa1c4efe34599eecb23b521cbacb659206fcbb252472656aaffeb777 -0x13627a60da3a1b5debcb9d23d710e732dfa6ea7c1516c72c28467de29238dbbe -0x4ab2d94343342121e70bafff92235799ef31e10029f1599badb768164c91b019 -0x22ad3176b52419f1083b5508bc4ef916cbbb4020a06406bf40bb1f34f2ac6be3 -0xa4f932c237c4bf603e2e01955696d13cd74fffc6766852b278e4267f52518dbe -0x834bb7a8f2f8c555ab6fd3c3a37f506f21c794b57e091f203201a8975b838661 -0xa01651073a4fa1dd14a2f16fbf6d93635316397b9ed8544836cf326de8a41c23 -0x7cc7eee9e8147859f5266fc88c3f6f6f2d0cc97a3630f2f2a02dcb795347040c -0x76759c9a3e8c975682f36e3de9f3887d701731d605f77e4b85879e1df987a7a5 -0x7e758006dd00db8526d691aed4d0d43e1c467df6a7b108a8d7c64d7a214ba0f5 -0xceba0b55f2edd70729b1ca9b2a5a2863868c103b653456a2911dc86fdfa7849b -0x35f4cc014dd817ad9126f8d8de2df63cb90e1f59f6d769736f180f96f6ca4e65 -0x2e4b1ad04f0827dcfb84faa02e7666b33458ec291abd898dda090d3455c33f04 -0xc730adf4f4dcd92007cafbec85bcdd65743a67114d32693f5b6c91f599868c3e -0x81b57b85cf6f3008904b986112d2d97f0b30e0f4a2907b66bb23f273833c6ddd -0x8238cdee280502822e556150beb6601f0117731d15b5f50ad69531d00577d825 -0x657489a0b978b235822099cc03d34f9bd3364ffb365c6b82731fa016720dade6 -0x4a001a930030965c7c06a9fe33d9f9b3096eeace5a8ada4c0a8c9eb5dca6e4e4 -0x1b4e400ddb569d861efb71e8b1599d7f385ba71bfb2d5e1d308958664e2c938b -0xaa11bfb1e0f1a6fb3bc0a4f0dd61bb14c52eabf2a388c977679f1394c0ac72d3 -0x66237850b5d0c0bd7ccf5cbf2be4414a8f34ee47cd1bf4e5cab81fc748747d8c -0xf1a0415521981dbb29a33798236b873a0c90eb737932fa0680111a4a50fd61ac -0x9763faeb4c5d0d0c495e83790f37500ced8ee3e3a235f232b32aaa8ec90c869a -0x4cc440288a3891ab80aee7048abd834c3c476f0e08cbfc35f18a906398b8f43e -0x77ce2812f862097afe98316e10528123573f6b5ae07057b46b68ed273d8a1222 -0x24ac953a959f6859c2e9b9fa4a05ff33c7a3a539028f1214145c0e60397ae19b -0xc3121398ea380d2ceaa5e7161ab1e456139af25f4bb840ad2b1ae5b1408a0c04 -0xf63a21c8e7a8ea0f734e92033d7c47c14fbe41307731a9147b28dd22e41d979b -0xdfc32fb0592a315b0d991ed0d60d11e5628d32a51b2403accd619783f68d6727 -0xa3e5dc16d03461a037669a65c4aca3532407b9ccd126f74573ba90567f5845dd -0xf53ad5d5d360a134ff5417ea43ee3413a0fd7968af64a0f2d2da1c6f1c9ec911 -0x812e8f9a31bb323932ba5eb5a427905e3fa569eff21986c9e52ec58dfcc6d17c -0x122df42ffaf6a9949c55f03a169f384141277d567a1c5da593dc4531a78100a0 -0xbee99fbcd4453f1648d4fcd63a89e211993a9abe0fd8b6ab0776e05b80ced29e -0xb84380fb02163bd93f36d48559bc704c985d9bffea0a3fce884fe1422744423a -0xe8b9407081cb41eee4f4434f43063f9938a32e949c16a34886ea75a6b37fa284 -0x84dc15751465011f12fbe2b4610fa49a0e8ca7fd875f06a294768e95040438ee -0x0586458a5fcb5f867145742cd9258c7366d556131dfccac7b4b5c4c5c10cbbfa -0x59f39a925bf941bf09c08b30172588e39ba1fc8b4fc534016af54eb45456453a -0xe8f6e7d81a3da6a7254dcd0df50241354d7f6c674de67b926486b27be92e2658 -0xe7574ca65d212dbf2d219ec2bf870e8393549a2c144fc95bd079c22ba9149e4d -0xa9b996e3a87ecef8c5dd3634b500f0ff61a8a31edc8418ee433eb24eb23e9bdc -0x9de49ab772dcd1f1de274cbc4b4f33af4d55117ca6559d0ee4fbdb04b9ae70cb -0xd0992b46ac35c0fad555790a5bd1b6ebd469409e440f23bea38e34cf91caab3d -0x6364c41c03a7cd3eba88e54614a5950aaa06838a5595f5fec6ea522e9384a372 -0xe38515c4e29ec13032a268afcbf701e42e1bf5c46847b7cfee1d041e5da4d3a8 -0x89738fb111bf480c9d6f0b85dffe7610ef61c51d02243eed455921ec138451b4 -0x45de6d63a7f8579566289a8a032e9e00e501dff7b9ea298b5c604a6ce5e1033e -0x1d7ceed0ccb97ef5a433f8d2b431c7a05b5780ffe6ff24de5cb36e6e9a5d20b8 -0x847f64622a3feb1f9f1b5f064a32f857fcbcb881586aca08807adcb7fac0222a -0x919b6caaf15d833f0aed02b1953c6494c5c348671367ee316a0c8dfa4da6c2a1 -0x8b233b530bb353771ed53c5496adba741f2e49ac185f6b87ae72406a0f036c96 -0xc6c253a5fb9ba1b35f5174ee35f8dec5992ce35f6904ce88a332871cf6bbe757 -0x7dd634f0d8f4f5e2fd53f14c14b8cab774cc47266634d90551494d9a5d499ff6 -0xff16b1e5bfd2b2200a1748f2c3eac8bc19ec3a1d9b66994a6f8ba271075032be -0x5c4830d2a103a4272ab838d25e03ef01b83a95c41dc79b64c193c5d04ef3003a -0xdd754b2e6cc5eb7bfa609397fcde91c1a60ae0e69852e3342d526d3546c10249 -0xb2b7593538e8340669e2325e893f4eb3332814332d272d30095769a8e0235a4b -0x0b82eff9d4ce9cf83cc905703fccfdeccb9bb93bea7ebbad19494c09e9b77373 -0xada462779a4b94909d2299b3e025b1aca35d537cd9c0706c8204551dae4f30fe -0xc231072d90fccf70855e67518a4eed5e47793493e59b8c2fb27853a71c303182 -0xe4f794e253e6bb146e33307c28a03c1da770b39c6fb45e1cb090de219a0889fe -0xaec541f1b911e103bbd6a9177792f9d78b3c4b212c91b679279cc9799e20afd4 -0x6fa65dff2ba3678d34318a4f9cc38be75d51b6c8e3ffd2099ff40b0279aae1d8 -0xa40b054d3a7a23fdc8c6428058728f1914fe6430ec2f8235ecabc2c595e6c343 -0xe8721ee58bfd562b03da71c2a7b867710cbdf7e6e0b55868a49330447db087b8 -0x1f79e491fa6260da8dd39d2ac39aebc37f2799d2132f639ac0243dfef2625c1e -0xe64025a5dad2e94ffc1b01ddf958e5751be576424f3e0b479eb419dff7e41060 -0xabaff2fd65ee4ddea3e547e1bf582047d4ad44b54c24cc60aa8701134fe2877f -0x50c5e079ba157e546d46e16ddc7dde5548e589fbced961d8a829d95d3acb1784 -0x44056f5816eddc770c061aeca8fc5f557c46530daf21ec5df14759051e070faf -0x800a3e8f27e52e1614f52bdf5cb1097441335f9a79efae36b4fb6c0b90d1fa9c -0xd142a2744490eaccd8c649c36dc639e5d93c26149e277cc3c266b2a23d57074e -0x8251adad80b421456249d7505202625216f6a3fd6653806a0ad70d6eed454973 -0xd09910b5d01aa8ef51b19c1066ad42adec00bb90b6a923460992acd45248b3a0 -0x6fc31a4b8f95fd16d4759b55e058c0150baecdc4b717bc8214ce0a9cda515b4c -0x1c2fa27558ce7b457d0791b80de9796bacd227e52029ca02925a19e96d4b832e -0x3bf31887442674959f39177faa6c8e4fde7ccc5cf9788f0d8f6eb98be803af51 -0x73ba56a1ac65e6547ed1a4b612c566703f9f49ef572fa46330e13bb8a257ed57 -0xe27a28b24ef7f2cf63a6ff56788190a9a0fe17ae7e82b02ca30a3f330a9b15f8 -0x69a78ee55bd2c3dc05be64250248f362fae251ecb6ee4d8b1bb6b7f820fc9952 -0x9fc82e01e93d4a06cc6e01c6134ba432a668372ba317b3877dd8d12454236b82 -0x9f671fde6c9110d7783483ea158e5410046c4ae3a141a2debb88f4ef5bfcbef4 -0x838a8817f95de6675f0e932b0fc9ce5c2fe4ed9f6add178e0c9710cb03291ce2 -0x4695df55a2ded1687bd2a8ab6f98016b0b3aa6b2ff945197267e727ac54c8e0e -0xf0a1f0f8f93f57f2b662db269396456dbf3bdf03aafe7a7660b42ac7f1c31c84 -0x379a063e963bc6f969f7f2952a20a4c12f7ef5c6453f20056245792a7d5921e0 -0x5a585feeb94a4e79f9507e6452b15d780df8277effcb4c7fb40653313a5fa18d -0x8370090fb0c96bd7efa933b3eba29f28c6dac368617738152c890a630a27d63f -0x47f04598c15eb18bb2f289951076f6a10b860e9a5bb4612c8513c1aa0f2bcb8e -0xe959be26e560040183b21b919a12eff2ee4abf319cd5f31d6f7d80eb0343d055 -0xe4095d37e51514a63eee33869165846aed2107a18290b74b56dbf371ae806079 -0x3ad376b7ee6d0f613c75088ee6fa08e2e1102dcca78c2f4b41e30d00fa4b6148 -0x957021dd9f962b60420094d5e2b5352c79d5fa6ae40a7b05710b3f26d34ea37f -0x3f734ba88352ea2e6142a0409835eae5835633a6d6734b3b1bddee4fdd0bb50a -0x5956581908ba108ba6eec5e438410a64677fafc8f68ca72ea549b3614d49dbfd -0xe5be6cd180f1efeb6fb42a2dc4d31b33fb1248a125f2f9b03b9271937c2b571e -0xbef2109509e35fea0e7b98ec34b1cf47ff72ba7cd6706047afc7cdbe021c4e06 -0x0a52968f1eda928cb636b831d3585e655d190562c3bcf592a3caed5c6f06c2b4 -0x74824787b52c87dac62f8b8a434e77c76f26c6edfe0c78820ac50e9630aa7de1 -0xc0ece44389a9c2c058e6eee810cda4b343c9c775b2aada733bb6896e3c15afc3 -0xb87332f3a30478cf08a7b3323dd28982f2a2d04d637c8fed3d10745c3fb35821 -0x50f7f46f8982c8bf3864706d93b413fe685a0754c1e350349582f0b54ce39e5c -0xcbff9f16904177e108d3df9ce4cf87734553c513391fb6c62b66be2538b94a8c -0x7a37bb909740a9b555584bdfe0efb8f9438bbc779868d30fbd5f753712436988 -0x40f5c701d50302460117e1aaf7535c9f371c7488017d376b8b4fdd2b285e472f -0x840b95b0f6e5c6d51f2dcd36a0fc64a09ca0fb9b29efa796f92ec0d354a8d791 -0x464dd3e16db6f344c4d2d30f923cde34d969365f10a844424ea77117ddb83925 -0xb4a79a4080412e53055cfd59048a7849ec6a848ab17ddf0e33298eb70961d76a -0x0d880961cbb9c0f5e8e071bb69a854e15875c4522c8a86a5842fa4d90fe282b4 -0xb01c49e746b005496cadefc6433df8be178a04751eb1bd2033a37721ef828bc9 -0x8ab16ece44eae1f8178293171e46944e3e7a8d9ac1d7d5f1c963568bc380afa1 -0x167a7493de1142507eb5f23c016c79fdb5c95892dbf1ce587712b0cc7c9a7288 -0xf8d763d92a3e0a93817131b5e18904746087be385cc67402c75878c4cf1f2a04 -0x2ea4a4174108e20aea81d229cff2faa74fc345a3d31df2bbb2c96d813192fba7 -0xce0e73708a2a1944da8e51dd49b343427ab68d5f59fb979cf77f26d111ecf31c -0x63a68ce48c0ddff1c8f857fab11550bdec0f8f8a6de4dc68f405928102f8f458 -0x4282ace26b3464443d0a2248cbaef60b299e9c34d05d449566806d8b9f39efe7 -0xef9ab81715a17f771fe1ece96b4db02a6636bdc9c81ab22c74f639541fcb6c58 -0xa8152c8567d4a783efba91f1dbc1fe4d51674b0627fc4ce1c7f532c9256e1ee7 -0x05b7f25050d09f73227c6d3fe234f9e578d909cc6a88722150ed3305d4bf9d36 -0xb7e644a40ecaa6be74d6434f527f18e87f1788b925c4e437e77ad74802cd02e4 -0x43198ed442bf28cf7ffce1327d4d83c229b25246bb578bc406268b80919dda47 -0x38b8ecaf3ba29d7a9641f4661aefdaff221ef2b4953477059d69ac8f21679847 -0x5ac6ad449268b5c637ff170ccecbc11d74b054a6c654842a3abd66d2c54a2fa2 -0xbd91161568e8dda82eb71bf12d43ed629bb69ca46f93b68a73dd0ba390e6faf9 -0x754847aed2e672a029bdec2b1378444947e4ddd916bc88d124ec2fdbbae5c9b5 -0x7bb354a3f9df878839e2862fa024a9bfd78b7ac94902e9071d532ba71bda68b1 -0x6fb4dd6174a4fa0787c19998c832273254313b8ab5447a8c884078e550fc1b43 -0x283c0e480702db1677fcb0d2cd5631882f83d0437540e551bb171a438c751711 -0xffc5169dbd73b18a15132c174850e9e6847bb1632d274d0176c6dd79324a5150 -0xd24ffcdc44c969fec17e2f1e34e9033e13aabe38859901f89a99b4e35dca1cca -0x88fc083409ac3c810194e57fe3f2426a5ec74e21e84ecc56004d5ddee0cb1963 -0x0bba8caf85db92e4a436ad8d03479abeae7e5d0f08813501436bdefaefd70570 -0xacb3c85568ce8863dbd126adde6c4daec6b99aa4c66952397be109e09970c0c9 -0x3d6a4a73eb87401421ea483816695103d9f13a863b7b9450048a569f8b815abf -0x673b8f877354825b050db57061f19ec762a4e147ddad554b11079ca7fe26df5a -0xaac138fd39e6a397b98f2f1e07e4569fba81047eb67e5e4c0d6a596dc9527d46 -0xcfdfc693709548bf405a29a3e21bae9b527c88bd83d6bd2291866851414b67ac -0xd455f13ef77ca6ffc379d6b9f6ab6e6756df8ec3f1d24737e0b3f1f6c1555bd4 -0x2a9ac9378aa6ec5ead6041a5065dda7676960ea0dabd7119b19c6782a67bbef0 -0x8ffe622be3607ad85e6e026f26c24704d7f35393543c328f616a95ce8e09e37c -0x43ab65b7d908c1b445c1244c48c672a8fa9fb441fe97d1951ce6893abf690364 -0x6d9eb176b791602ca1997167375c0336d09ba315707e49b14632919961e5fa87 -0x12a505f81967952b10c037d9d8eead88730685101fcfe9261036efd7eb69ed60 -0x6d7ef0c0cfc14a815a19f67bf6eb354b4f1feb660aa0fa35924c841b2c1f2b80 -0x393715e95dea3e8c2cf8928ec05bea744e5f9beb932005abb50f094e7b96147c -0x6e2b8bf25a2c67c5275231afb3d4b5ff44b173882223634d749e8b645cd07d2f -0xe1705de6ccec30c8c86b776f571e3817969092279766feda8ffb6c9a2007939f -0xd813e2e5407116cc03f3cae78a50dca8f88570d9455b42faaa51031d91bbd8be -0xb60e0b4d512e5e5186f7032e26e2360a50c5e4b30b4fc43c94ea01593c9bece9 -0x301942137180017d0325911ca4a97071867db08076844a381df6754f2153d931 -0xceace1cfb65422d8a8448935849444e0441f0b3b74a217ad7ea03599fa0421bc -0xd974ba3fcc338baf7c6a23f375829e220f61d5728e5ae6cce4e8026d2bca39db -0x3de592e4d54e35a3718b2113e4fc9d3517b018dbecef083246a9e475eeef8d70 -0xfbb9afb8a0c597258937df2e17ec11de814df76f42b4bc6a14d4be7d620d73e9 -0xb4e8af92c3ec7d90403b1cee5e73689380d3b64a83409310ee7bec96584fe386 -0xe45aedd60a3582760b78ab8b5bbd82bd6cb5befd01627bd8ccf6a1865f185faa -0x532b046e183abb3655349a86d18fc037a48296ebac5c0ce43315778e0b6c9168 -0xc8e778601daf1382159f6ce87f13e2accbac73ae35dc1a9aa44a2632703b57f3 -0xddfa452c49f172b755a3b4cea997c080bb42f49e3b6191f4a4a638234c469614 -0x32f93ae40e4d8e48f527259b338323429a1923732ea840a2d457058774f6a7b8 -0x72f5d6907e6bae9b963fc360d80f56c6fbe8fc8462273bba113eb9e2e4fab308 -0x467adaf8857e767aadd4573c28e742db8cfb02184a7c95125069a5127fb7b8fd -0x424c17ebf0133015b5bdc6bb39b1d2aa98973cf9f712404935dc4d17f9920869 -0x223aef046dbe684df99b6d025426e907cb9744cba460443e3e5f4a2df22fbb30 -0xc85ba585dc4a449420a3d373b8646dc1f53e42ba654af14b6a8b3ad65d78ccb3 -0x1104d82a0bf63a4f516b3f4a321dd7ccc95b13c0a714ee78c43b93f65f331f96 -0xc4bfc1da805edcc6460d6a0f587ddc5d6003dfe9c6cf69a07f4471aebd0b3125 -0x084a810bddb16e9d32ddd61d9df265be7f717426530e1aebfa7c11449dec4a79 -0xf485695036eb0b4c14c8d4de39bef06b7a5b2e6ee65e3527b765107e3488cf91 -0x5b7826ae4ec0d316ba191ccbce2f3fbd8316ef3d4e1c5f34e6750d00217f222a -0xedbe3eb7be7e38b772ab6941cc86fabcee1098a64a3f58515f43556a5477317e -0x2c5bdcf168cbcc032a181dfc8b93fd26988dee725e27d1944604e772fe885677 -0x7615214a648960bc672f14d97ea718e12eba69125a24c1a7bf48caf0f1850c31 -0x75af97fbffa6ea5bd8c6dc5ed01682c5031e7a3afdd37fa07f185cd043c741f2 -0x79a19cd157de85f9c7dedd9bb709c219f21e74ab92ac0d98182f71c023cefc3d -0x2b6768391e26348b2daacce5dec6d69afe0229a7522c543123442198d76ec56e -0x7f10e01a7b2792c4de5fd69aff286fd37f2827974e912c5461b8dc431eb892b3 -0x3fea7bc524d4214cae06e032551cafc12e23f5077d4389c493236bb4c0a42cdf -0xca774e5e27adc22e51dc2e462596f05a093b90710801b188818414de69bbdf27 -0x4f057ae8a1735a181043ba528663c782635ae8281ba28a97e59221bc5ae264e3 -0x67ee73ad3a06236822b5429faf5cee77765f581e0a9979ccc9a8e59eced89483 -0x7983a00e38438cdb68621b15c2230cacfe3cbc11c56fec32f46d19f99ec5a12e -0x48af5d012110211890fc4dff9c80cc66596bb8496aa1bf903be8d139a09cd411 -0x29a379632c6cb5eeba11d00ef9db6f26302f4d78f72a9e0387e7c9b05fb9912a -0x4a129973ebf85d68b71b71543d627b2a6ec86849ab3f7892a2312c371b66f909 -0x88bdd9e6d7e577b0d741b3b730cf2c7da0ba0221e85301bcc51029771636104d -0xd2a7228e91fc957b766e1137f41c484690a6d340034207bd2613f712ce3e63db -0x9b98f4f0b1b05afe349ca798c64115cdece9363117409cb424007bb2d97363d9 -0xb0427a4fdd83f995036be1a9065bfe3234aeaa200c1848dd0c3677fe61d220d2 -0x61ddcea438c1a8a758590778ab934c48a39d68e6d9578b5165ed8fecd91a5644 -0xae7852a826bd4a6e382fab5d820a792080d130ab8f51112fcbc7df2bdf5dc57b -0xf69b515da41735f987e34fa938e9f90935a38df5d034d550e716d2c2798a1660 -0xdda70e677ad0c3080908ae6409ccf1a37b1db6b0a56d3695694456ed710f287a -0x8a1a72f432adaa4f5ffe14ea5331630ff86bdcf03aefd4d39023e11cf90518d2 -0x53ecb38742aa288d78f3b217b0da8cfd81505368492f09f57d7c3a8f35b17296 -0xcbf8080a744a552a8a5128d27a73bcb1ee5e8d5f5dfb223c0336464d2b27ed1f -0xe9623cb32b0e67379e2c91c28915749a581410691e07c5a4c040736f69634773 -0xa896f19c37e7e4a8bd90c0d3f155bc45c57c518e47498c18bcc33b238100edfe -0x56bea7c6da022b476c7d5b384d12d36b557469e163d00fd4919975894d8fd58a -0xa0f4daf9616aa9db4d6a3263256b93ac9b70c6ffd33d0a048ee2c52b12d094f5 -0xa966af87f76d232b88282fca0383775689e8b7a14c59ac6221119838d528cc76 -0xdaf609772e536e34337e8e4564abfe718a2f086c57c381d4056f10e82b707336 -0x2573addb9fc584ad2549e7737e300f46c7972272bb272800988bbb689a834a85 -0xf336e14b82d81268017f87b006f18aad363560e2eba29b99d684e295a3687302 -0x54c9754169c76098a72cf2e27b3069d65f61d344c947170f49d3d6a004172f1a -0x3431722018aa8a6409669edb490e23a72e50c9b1dc9b6697aab24cb87920d75d -0xe18d8ee0827cb25640354a067a31a01b4173f94a00b753c8fe2a7b996e850882 -0x40c469fd05ee14186dfa5d8b67e196775d3b5ae82233d4a5e06d99d223afd786 -0x51e89bff137cef0164807a2a757e53afbd136e35209e2b0f047f2675c2f1b64a -0x04babd59cb19b64810fdb2290da713467201130352346a9ba85224016eb4b84a -0x1a7aae2de1ed7570bbf0748adbdf1fafaf1fc40c5f7600e4f98848d9ed0cbca9 -0x5486344078c1a3de260f89ff12813375bb7c474d8b72e87228eacf248224fe37 -0x1044e3c8241a23c56c331ef470fe2d442617b21647600c62310be2cb20f904b0 -0x4cda6a1db76cba518a4db4620a276d44654bded536eb4da635434cc0d6320f18 -0x05557d56993380079c3aed3cf63fde4e54b779601f98f8b3579015c48d0ad5f0 -0x1df9b71187317fa9f0de60e977c7c867478ea62a899fe514faa2246d741c7728 -0xd56190940f629b97e9db175bb49a9c3b857ca34ecad152a8c64bcb705775935a -0xde28e735df3003df5ba437a677d87cb88bd7c1c5d5e5d30581fef84b29ec3bd0 -0xf2f58226c46727e688881082d21a6c0e3fa783dd7a2fd2fa53237a2b99d27392 -0x571bd1c72ea53ebeb471db60da6fe5a921ea3ce619782c8a9e6dd4fe50137af4 -0x8fd011bc0d0e01554bf3212269b5c48a203507cab33f6b7dddff0aa77a1144e9 -0xa1bea37fd8d754b55d8b8102f8e4f9a98a7e17143691e4bdefb97337a37a8e71 -0x1167f27ca0cce8af5635f427b8ebcfe2508ba034c7f0c5ad12209a8bece87990 -0xc9c5839cdaae9dece3b7b83208e1efc97a26697b2924b6cd14826972708b03e8 -0xe3ad900fada39ac273327a89ce4ac6b66daa39bbe0394483a9dd20bac0fcbcb4 -0x65a5d4cd8cdf4f86bf8c5f06a01ce2c2864f5922433da98d44e2ccc899d24068 -0xcf68cbd39dc623c927efffe5ce0e4726ae09c4547bb0904db27d4c589bd4b2a5 -0x1043881cfbd670444e5f13702feb0e741200427d26daff1ed7b71739e2dba268 -0xe91d6f26c72987486e1ce5ef007798f75005351232f0cc6e36355e9aee505791 -0x8287442455a7a07479d3d5a7819e906b4de75a373c30be379d90268bb5d42292 -0x55a94fcf9cc163bf8489904b180314d5ed87a5dc40f215ca2f288a7c934038d5 -0x794d1e9f776546474a5ff25c9c42dc2413f721ad418da8483a187bf0182b05a6 -0xdd6bcb1a058ff0c814e5c6d2777840421138bdaffbe048c9d405fb08158d7eb7 -0x9d8d52b1084d5a8700fefcf602d2ec98af4c6ca878d78e03f7c6f5ebc9937782 -0x1b05e7cfc48d1d7d8fb1ddcb041746e29690313409b45eee6e75f26123f7250d -0xff202d1083c68b90da61b28736e0ee8d63188b51f986a6a23373ac62a355fcca -0xf7a998b85783cd92900cf81593a9e2cd7f751cafd0f4639443ae45b5801e1986 -0x82b459516a5e496ff4021d0dcf950daaaee9390a20a8ad3902cba4e2286cefaf -0x087d81c7f939c9acec5389ca807ae69a8386ea06055b4727bbb915f671230259 -0x01939973a3b3119c48882a4af2aa321ee69cc80794226f7d2e560bed0ecb36d4 -0x3896dcaa8d4b9e4909e4352283b1c51fd6b9f66a0b41dc483c091cfc408a7317 -0x0bfe7838f94c08bb1ca36b0daca03b284c1934eaa391ca2c856bc8500530b786 -0xe27ff9456b0cef2347b7413ab45c38d8789d1a2a0f03c4d31fe3db34b625c2ce -0xff644ab17b7f7f668a9ed57094c0bd729089000bb278c186b4f53a9fcba0f009 -0xc5da1c3a3a6edb4fd3ee9e1491773b4c566dd262a66ef32ecb8e7c0629b9fbb3 -0x34b1cc446c81db417c745c96f43e3a68db06555e8bb769c0c96f08388ee73d0b -0xe07df1427dca7a2e50265f27a42ae4bb8b0d79e068f44c9801b3082a0aa12b5e -0xf1d273a940d7d18deaab3b2c0ec35cdd97c37a5d24c87412e4d87454aba87fdf -0xc9fbdad2a17a82a6cf1b8328dc0877d7275c4067cfba401d0f3ee42ed5951db2 -0x8d80ff30bdd9a70be6a28588e8584b669985207bb49927b7e3455c301fc5c826 -0x8fd1588f2b6f232cc1deba5d20a8ae45782499121f2a56ff6c4c69d3242d30e2 -0x962fd275880f31443c07f8efae16518479c90f1e628847217e4505e5df5500d0 -0x04958b5e162ffdd5ab18990b5594909598731e0047c188c01242c7393deece85 -0x443237d93d2a55215d875d6a45084bdc9199f7aa34d56bd2e6c99e963fe00a00 -0x9a39b1e752d5278d30ef2fe3ba7be49f16cdd5e8280a6f33019032ccbed92ab9 -0x4b8112a64713ae81906173772a3aa7d9681f02e1b0d95b29f0dbc937fe8d2cfb -0x3163abec1a236e330448a44c18cdad814b3b258a550dfa83dc083bf398ffcdbc -0x3d3f7a0e95bced2561f991abc266ef8038d1fd8cd4bc1f76b985d0aaf0e63600 -0x08e63e3908d931e29806ce34ffd3fcfe26ab0e1e8fca4c3dd9c383ab896fd54e -0x2467491796c653fd3397f6816404c6faf88a9e348a44a379bbf5a49f85ca89f7 -0xfa8f347ab06abf102bdf2def89d167c40682ad6e19a2fe9b92f2b09241abd5e3 -0x03b5f79610658729861ccfce0de31ec0566d095ba03549bdba0dd0bf8de86335 -0x48420806fa32dde450e1e01a94c038de12d71e155041287e19742b1ff500bf7c -0xe510974718c66f5647de6ce5a02e00ef99c7a1e13425206a8fe0988610087c8e -0xd52cab1c3ab88d9aa4df0ac967898c783f33838ccb38d717c33a5b0659d3def4 -0x073a251e632f157bdb6cab9522addd03a42b7d089e2aab4d677a183e83bad6ba -0xafb8cc5a9c741b4f9372144f60ad4c3e9881383bf2c20c8925d71535b1b97ec3 -0x77e09bd7e3bf97c14ed92357b95e4442aba2da205d215babbdff407e9b828108 -0x4ffed6a6513122ce8a3ee51a0fdead518432764f261bd5a02d84f7dc6a99a507 -0xb6044fa603c1ee7a3a08fb2d3f5947200545e09d658c958fd46ca26c426a30bd -0x70f738441f247fe5af499b9d7fc686110fb36172ab1dbd2272b3f397fc2bc696 -0x7fe5593e26ab3cb17046dba718f69679da386a0801d837f830f92b2f76a1bff4 -0xda4c27cd792b5a8883de839f8dad390c147f212e63967969ebe0e4e4904cf8d1 -0xcb3e7a5ec45a8e44bf45b82efa6d95283b99e16a3592b7f965dde70fbe8ca995 -0xfc82a230882fc653081b749ddb0862c762d7ce9773ff6e8b5ec47802a73763b2 -0x9480b26488fb55f632d773ed956f44abdb6ab49af2614fe202c5e003a48021bf -0x0a18354f9f3ffe2e99be5d5baec098e716a54607f7eadc268d407cc88cf6765e -0xde2e5ffb5e9915b58665533cc54297d3fc529aa5ff1cb8391896c2f492bb9c88 -0x0bf382a9fef925aa8cc646ab43d9df9aa4c9356334fad0c2957730d267387ac9 -0xdbd918be83ea9cefa3123cabd080b4d37ec387793795a45db85a9ea53ac6a533 -0xc20790ce60d3f436fba6e7c259d0f4e375ed9474236216ef2c480471b7533b3f -0x4bf50b86e19c709366bdb58bf28411bd635e9558b19ba278c68ef0bd78d01ad8 -0x64b399e40824984706c6e8375529463d309dfd2fb7530da0e16a4ac434ba0d62 -0x87c9cc517162f329bfcca9691a6d682b96e4bec803dd5b565b399aae3bcba297 -0xd796e094e849e8d4e7e068fac3e49241a918103fea6457149b94e84d0a0437ef -0xfa492f719c1a0953dc730e32ae09327ba469115a166dd2783dffada290a470ac -0xe20c234583ed8eeb7ce2365af67ce6473e7b1c60f405d3591195d1fcf327db3b -0x63ae91f995ac716e305fcfe6a5de715fe5674b51e1b1bb86cd2c564b90d5fe6b -0x08421d85f1f1e3e9369a4a12f6be576e64a8e1547209a21cff8ad527c431c855 -0xe3ff0504f7a3a529ef01666c079dcc2a3d1dd73397c5787a1c6119e328fca571 -0x16f99452a2621ef532f79e05247ffe76be402455bccd4c2b251e71d3913ebaf0 -0x4dca0b29a61a430793fad72ebd2620a2d1bf0f8674dc25364e0d6c2bc128bc6b -0x09f336926d21494ef913ff1443106f1554069cb8bd37a6ab7367672fcd9fccb7 -0x786062a447fb387793a7ecfc051e039f5dbc3bad4d13bf38f875ed73c17e3a63 -0x3a6b070431e9e05433702e52f217694b739a7646f76dc144262c69a967baca9b -0x86a05508f11db8f132d37357ad309d40721b279af6a649d29441a06e7cd4120c -0xa4152cc1e08cc829b97c38bdad29d3811fd900beeefdb778d706470bd9f56e27 -0x0c623c65b3f1b0a432ec1d4188f648598b7ca77ad9405a5622d5979fbfb41e74 -0xe7135005091aeb1c59b9cbca23bb9957aafd1658f94fc6a6d2cc87e628eeafd3 -0x5214e70b7b5907fd33abdd2f40b8eddbd61cfac3b716c6a46c1f857b3d8f9cab -0xd1ccbbcd1f880e0c329f770ff08d491a92432e244f16be9d8a43b0ca1982c89c -0x893c06317d2ae593a75f98ade36d9104c1c109f3a071d273fc2ff691b40adc4a -0xb7f408bfdb659dfa94472a75de8141a14b57a136f597640ee405dc0526202f4d -0xe3c4aae904f257fa38dfa5211e48f0f808f794732a7d270a89031bd400d13c2f -0xb7306bcceb86f45e6a345ff708484ad30d72211ff9adce9b4eb813b85e5621fe -0x3b3eb676cbd1142db9752f18aaa8d6dd4bfae27ba27d0cb671f57b9e36bbf87f -0xe5ae445ce6ebe9cd5b89497172bc984716aa5abc0a70251b9b818f371c717be3 -0xeb2aeba044dc6b77a8a9e775994f166ac3469f83a3e0d3c22fba7a27bb504bfd -0x8064f57230b0ee0d501ceef5770b5950aecdad8ceb95324e6d28191cf0d8dfcb -0xf5f9ec5f9b95ae27ceaeed0970b7b02feb8466de0ee1f972460073b7b90c0a0c -0x7ca420447efc095009700260067782a791112fc432ea61fa532f2cef98083249 -0x1749737806448c318d5c26d57ecdb6f35d6434491552ae28416e79ac791c16b4 -0xd0a2529c339294fc83d3b99749a21fb800bbade431e3331e224f17047eeb7cee -0x84f30b67e715d8da09afe905284fb738778f72adec23f4f47ace5ace5320de6d -0x9b6df7eef80afc125d0e6b2cd40e1685883f9309843b14eacacedf6d698b778e -0x2be50179d2511c758df8c028267560f74b3480a38bd649f55b60b9f1fa2da79a -0x0b8c48d5a391269234d4f359a2c88124b08f093eb1071cb4089158779bf9bea6 -0xc243556f8e14dbf29cc61879422568baf510d3c007cb4497c28d9ab724dae61e -0xb2e78c0cb9e6208fb906a722ec3982eff88d4db61e21f1dffc71e24ea0594ba5 -0x7938c2559e4656e2b963c94d8685f8360fa81e426d4b2707d764ae6c4519a408 -0x71236818c0639eaade03c333771213990a66125b5c849bd2d2c4a0957236e13c -0x28feb746d28b2ce03d185fe4ae13dc247c20a8270fa7c47f19a43664d8535766 -0x79dacef4a7f88c2a2dc69b8269841c91299c1ca9d6d1973c351be72a12c1b337 -0xd6880edc09cee4c127aa1fc5431ad41db7fba8bac92cb04016bfdbe0bfe04c16 -0x6ea36d8178e16088f9f8bd242b86d3ab6e6b15f1d54eac4961dcdcee8ce02c15 -0x48ee4782b138e1a0057c1056bc5dccf43f2a8394539871e3f2c791a14ab263d2 -0x4509d8611a12bbd6b76e42498432ec5cda7e0ce1730bb958d7d1e34b8165431a -0x5299ccc417fa577eeda53d0542e62350eb64098a2e0682c1a1e89f648e2bdeb9 -0x63df2e4dbd4d3338931b6a90893d3752f8f16bfa45233aa32b9912dd1199837a -0x058175179049bc0db8ebee81e7e89a72d22e7d2761d70403dc168925f3d463df -0x925416d7be43e99561461a1c3a802b87b0a5c2b264ea30549d482cff5759a773 -0xc942511b3b2f538a74c1f6a235616ded820c8c5911455f3cce858964342acad2 -0x45e523551ca1b836d5f5d36865d1d0d1db9e75edf302122c6e64a4b05f447414 -0xaed11571eab2ec47d332e983180cb18cfdca2aacccdc6b30483793579f11b2d2 -0xf9fb50511e2aacc179c52e08321f09a4c3631fe40abc6958f43d991853863406 -0x3ed4f563afcdfd6eddab4c66502228e2686c9b9cc4e7ec28dd6044d7af21c14e -0x59945d57fd3ff97d7f0fe1e1ee3da80eb456a0248ead26f23870150bb5a51bc8 -0x8a9436b0b083c30ce5102b2235893234e78148fda384119e4737d0851fdb98b6 -0x432d15bedf849083f6bbc79ac9f2daec61e333bf83aa9ee337c411cf608312b7 -0x5ece480f7e65f24ad8850966599248ff5d1771421f15152f92771be2ed71e048 -0x8b36b50d923a38b64c0db68095d43f3cb738a88b473022d52ed3af992c1b1255 -0x1bec57e874cea266c56ea0c1123ff0a2919171e5b9d72e1710ab21cae60a7db9 -0xcd9c9fb4939c1722b313ee0d7f8111e788a57da5852359257b2a033ea0e42391 -0x313c008d5f13730fc977eccc6aa3e4a9928a5552b2f133d7e06f965d46cad556 -0x0e56eba56850fc13696cfb7eab5f03ceba39c7b4b45a5dbe63a62359e51fbabe -0xeaccbc814ad6bc1f114bffb68fedeccf70a8688a24bddd680a3b03c420fd0fdb -0x1aca7006e768b8f2bc15903e43cd3d6d57bbca2185daede08025cde28b8c3f1c -0xc427ed8c0a6f5b3415a9fe72ba3d529589173aeb581c48bee6827d53d38ca4b3 -0x38cbece28b178e1094da403c914b72d8ccd8872754db77878dd57d17b0fbf702 -0xdd16d6128b05a46f52333c7054a2297319525a742349979ba75f51f01406d7f7 -0xe724fc75a56d504d2e0cc3dc275424fb6e12b2828b9feb996418956712878dbc -0x095df3af69313be1d5610c85ffc14c23305cf2d43247b5af08215cfaf058d9c3 -0x600743fcad27f7eaece310142df931645115c487dd9627536265f7b8b6a6067f -0x5979c8afa77a42e6456af04a9dd8ff2325c66bb0f4464ab4a8bc22c3596f41c5 -0x1b7b237f488e8756e2001c08364ba3896586f03322cf853a510e7fd5523c1a37 -0x67dfcfc4873c3acfb2423f6bba7501242302d3f311cd8baffffc430cc00f4813 -0xf228e0f7d67b65da877d3e713037982082a60db1924f3af1e79fda2de08bff30 -0x71d7db8de94372a4d9ecc8936a26650d84b61a08fce5583f58e7569ce40f43fa -0x3cc2ba5b5aa400b0ed16e96c2b43d3eadde5465b93fd8ca6813863fefeb7757f -0xe3a3935e44539dc5f216f42e64c14c83157e41a82906f0722c652dc16a583580 -0x205bccf60897e8d74117f4f96c714c0048668d192f01f84da3f8bba284b9743a -0xfe96034d5b7c9e6d34bd0bef93abb5fe4871bf960517c4d029a45ff0b3162552 -0xa865bc75dd1819d598c454205b19916e0184c5f7eae88ffc12aec8ae1ad50526 -0xfe2aee730454ba164e117d3f0904d71d5c243bc9ba70b21764be806591e90770 -0x4e881543534c85aa632579b8b66139a4e9cb4cd433a275d68c64b095a19b69cd -0x64a105c185424ff782d917fa5a0b7fed9e49c1792ebe7d9d0aa99659b375332f -0x2be93ac51bacdc7e526abb8b0357b5de66e6032027f695c53e975552963a1849 -0x383c96daca13a7ff6047b1b06693fc42f51883a35e06f26585558a35224477e2 -0xbbd7ab8bee1143d5bda76ecc3f0bf948e975d10ec38b32a9ba3aa907513c3ef8 -0x8403a09f2504fb9231ca7d01bcaa5e63fa8bac7aa2017f1c6c2831beb71f6b30 -0xa24f134959ef7c5f77a35872372c39c258b05daa7c49c2f8b79d21efccb0ca10 -0xc007e57ba0a4c62e50db5edae6a04458738624280f1dd39cc0d8835085b1df90 -0x064973a8418c898810406a2b43c3068ab773ad9a44aed4fa38fc138d4b9ba4b3 -0xfdde5f3235f831156e78ba7a8b51c0b6acf77cb830e27ceb21c83aea01063922 -0xc7ed1ac26b1f13ec4e2d089465b4ee6930647d644e94f0f5338ef9709a071088 -0xc3376b8997fe60f65eb450ac64898a9061ad571eca34bf8ebb1d7f8d92b67747 -0x4a6f1e9ae3fbedc8598b36bdbdb41ba7416472da366819f82515c4c0a82de47e -0x7dbb373cc6306571d7b50ad8d110c14172f84839735635945aade23eb2da578e -0x7b1a116f0bdeb1f70196242c553c278ade943cd64bb03275da42dc22fc7031d6 -0xb3763792bfed49fadcc27ff57c1fe16848eb922f1513dbe52ef5c877df320ba6 -0xa1bc15dd9b9784edf7fcd538cb0ee40facb4926cb31b938fc0a49a4d3b5d887e -0xf360107f5f10bd1c4eae90644adac3752f09d5218136f0e848c4020f68a86507 -0x6b7e578d87011710b1e713fbbc6d9a53a60b8cf7118979f196d38af5c4757d11 -0x7db702a8b72b23debc10ffa8563eabec183c894f4855fb167a35d80cdb00e84f -0xb125dbbcc0d68f3d374f5ef12694930192017df785606a7321afe9d986daeb7f -0x63acc9e38ec693522e03f3bf84b9e76e39b6b9ecaa5bb40e3ed206f8caffe046 -0xc8e7344caa75e8152b6d93e869b665c57389a2b3420d1ea3ae4526217be186b4 -0x47024e3cf397035ea41d0eab7f31e81a2ba58d2452e8075fe9c528e83792540a -0x1bfb977f326aa27a27bbb1e81df8663d3e8dea7fbb3e6354a7d19d0987fef7fe -0x6864ad128270aef0da7dd7815d7d87f3b9324169233477d8f5d2ee9ec0f43d2c -0x51eadaaedf782563990ec9d8a522837cba1941bd037eff025c834caee1a6239a -0xddb9716b3752250d093eeba4a1facf27c9fc32f848097bfa86ea034b17396bd6 -0xd88f18b00f99e0e9bbddb89fa0006bb2f110dfb84cdac09fdb487d28d9252603 -0x28ec0b567cad97cada7bf3f5a348f64f655367693d703da02f5f36de16de30cb -0x83c1b7b307cf6043b8cbe692334e8fe8a22bc6fbdea426c3e62690db2ba6531a -0x5b9661c2aeea2356406c0a454d5494a6db218b3cf09b55d5a6ffcba478e455f4 -0x893cc06d9e98e4e0bcffb174b2d1527d269af6e4d9a84b883dbee538aae803ec -0xb85a33f9a6d0896c748e36a163fcbcda30a32d18a019632dc4ab6dbdcc26e939 -0x314a9600bff2bfe0c5b86474b4815c4c7542cbf0bfca58874216ab9b2b393dd1 -0xd0eea0bb48e833ebcdea71ba8409db4b29ec459cf679a8f00825982d6563564b -0x8123b23b26ecfb6099f6bcbd88b41ae54ad7a94c5973bb4090b4262b19df993b -0xbd256eb5b15155e650b130ef3c8ec9904f0013c0f5306754c59fb719c6c3c661 -0xeee0b2019daf68dd864780405942078b30e1d14215f66931260ba977e226dda6 -0xbc2b5cf1c0e6fb1ad06500ab639d5926de132dfe1406f5d3bcb0297c1f7b5536 -0xef859f4b370751e7980190340ad691a4b59f76f87613c2b5e6d43433cedb5ef1 -0x870e87b1dc5ac88635c75511f06b02eb788fe553c01d5f78a58d82fbf4def3ce -0x38aa735465b24d1f8431bbce8793e0884181dd84179391a61c863e57aa0c17ec -0x2b597bd719bc33a53a3807bcb511f35ad54ebb481d6e1bc30fae1151c06a988a -0x9f6d11a76c1504f9e9fdd9411689cd073a9bb01101288c0a0b7dd3bee1241922 -0xb020fe834dccf8d56e25b59cef3cc296faa74fad8e7782f1f4713a7bddc0150a -0xe224748b0727b46369214b0236c1f6cf75f74f61125ab6a78ba35bf71e1d2717 -0x09f74f848ba7533e3caec650fc76fd6a175d8fbf5faf5f70e7fa811e3d68c0ff -0x7d5f9b13de85dc4783bd9143be5599e838bf9721ae390a62720e7224c2b51b72 -0x871f2bc87ca406184db2e83c24f8f3049b76ab15c1de3b9f784e85f47bc02fdd -0xc6df36890a67b75372afd74ba35ea4b1724b0c50c15fb395cf2b27fc7db19749 -0xe9e2e36a6dbe8ec222553cd9bcfe37e19f3b21273f398ad48a691187f566a437 -0x0110017711a7da5af49e076d1b796e28585bd67b6073672557edd5b975fdd4e5 -0xb5159dd603ab491b8650893235bd924bd4ab46bafb05c3189e2426296e0bee11 -0xf0795518c5989bb39f23dc912848fe47ba1c29b588f85291e56bafd618d97069 -0x2180e7306010f63db3481583e49100e0d3b6754f4491dcfb73cd97851c6e3f51 -0x2403c37637c1eb8e34b6697f1989f64ce91234118b42a4ef7d8f69c7963afbb6 -0x30750b80e21159c29a5075205e07ddee62dd390ee6e99e48f5b1b63f9770b690 -0xf2a9c955d231a48a389f5e096de2812128012ac655cd56d50781caaf7c223469 -0x943d917fab1617018991e5ccf64acb9f4cf52ccb12cba41d083fde7f82507a73 -0x5a4211f6bcdd08e78bad0e13435e1f80bdae9fcb9a3d85964ac382110c32f8c9 -0x40318a7bf8346e45be13b22e2d9a0577af3faaa4d19daa1c5014a9d0fe507b8d -0x4a7687653dc0cb3968a83c7147efb701b72cb75d5028b567c2c7a73508c1fbdd -0x69d76ee67d0263c06d248115225864b8058d58fd959824b4df37a336d6aaed79 -0xc657944ebf86ec83bf0f352c484c4cb4f5694fd73dcb30b8aed1850064c1d31c -0x2accf23522e7bdcc57871e6eb7bb2eda34247f65a3bbf124df2b5343f0d6338c -0xc5e17d80c8e1c84b154602e7e119f761c9d3fd69891192d496c3990203d21560 -0x1818b6def0678b80e149afaa8e830efd49a9a653cfc602e5188b2b23e85fceba -0x613d8a3efe4fb2a3fce82c4000632f194ef32a45e7c2d028fb24768fb5bb78c7 -0x08ea694a798ac2c284d6cc6f7f05b808cf8542d9927939f311947a475a71eb13 -0xac7fac4a22e8622d1b282583514b3bd69794d2ade8155292172f2303e9aba848 -0x239207daf25929ff6629f6280049e83f0603eb1cc59fbb765aa66022bf780bd0 -0xe11b3e35bed22eba7a8ff616b56521466184f3a03251eed0507848a883ac7af9 -0xd6e1e40bf6fc8260869183f930f6b0e601cddeab2e8daa3e6abce4bcb6aad532 -0xfa6000a3995522a39c25b9aa0f71931aa8a6e05b65e1d079863a18aabdf61358 -0x0effd422642a3e74b4fc8d73227d37528455e8d173adea51a361e15c03a1a19e -0x2bcaf5415aabc20ce1e78296a8c81515d90b0ab45159056333ff3fdfdf6ade34 -0x3b5e3968b8b43adef784ea5bc1ad67759df52e8848e9daffb1677a1fada3b591 -0xef037189f4b1eb1434fb8c0f51c1aeee671e104648daf98f5fb5506c317ad193 -0xb45dc502d2d96fbebda9a5495f0c993e5a46923161f56a67b3e9032e9911f58a -0xd30a8d9f45008b3a625efb328032477835f84cd7a1294aa0c5b6a7103ec21bed -0xbbb969ba92ee89aad4ef6180ff6ada6570151c5541b2ea7b7527574798b2086b -0xf2253c6406cdc0bc3ea980a2693065f74987c1a8dece85c1af2d1a64046de13f -0x5bc3e7514914d82bc7a631ecb9e1e067ba98dec2913ce3f3e566351121e008f7 -0x0c7c6925e001fff22b75038bb7ae6aed55283f0715453d9a1794d5a413f1c890 -0xc4e969d027994b55b76e105ac191b6b6de67d374e81fe1f71a4a241292be4ef4 -0xa898df7130d33ca506ab9f6c8c6a78aa81bff546e9f5c0db9567176c499b09f0 -0x8ac2b53c38eb9580b320ca890d2915799344fbd3cb2a5b7d84f20a301edca90e -0x269a8b2d17e5ac74e0d441ee63d26c6e04b420fa7584e0ea1193a75d029f9c0e -0xeae651468ceaed2a079308fb3553d88beb94d8c1b31f87bea27e1123ec773b28 -0x8bbed650be82f5b0f88a44910eeac0fd9a9ef676191eb5c21c66548d5e5a199f -0xa27ad66be5acc0bf22a1114792c17da09663f0d2e3d01a879ed8803e661da994 -0x9aa14b6828f235bbe800a96deffc0fda791e83e1b5227cb544d714ca1db3cdec -0xc490e2963346063a201a18969d5bc6f07e7fd8a5d5d6773cbc0e171d5ceeb723 -0xd3d3b7c7f75159f506aa435b65285a03fc0215c015e1167855e18dc28400ebae -0x452d2fb2fce0b5a52d3c0ffe3bed306f84c80c0931af2e2634d929bea3ba5faf -0x6f66a3eb441bf8f2e65f2ab2b0afa91864e36e2a23e7cc054098c7b4ea9e615b -0x778bb589dadc2b99e864819c3ce01f34bb7ba695ca75eda34263f07d20fbe0fc -0xc2f7db6f90433a6fafca907ff6173f7249fc6e2d31109e43381d3e8fdbc04580 -0x3812f41c9f5cf5cb51d62de9d6bcab949a97a77e4b104b19befcdeafc776243b -0x1c1c2ce1a06d71f1d440f30550f9ef90a63e026a264622771df25f2a233aa511 -0x4cff09cecda1bf0f8dc5613dcd4faccbe4a0e49301d99719cc0e75ae071c5b55 -0xe4b624fc4131eb865591915b9c78c210b97c211c1e79e6d651e94d0ba0b91d30 -0x4b684ae4f97842c94cc873f1ca24794ea154c512cd5a743a12509cd2a9a920a9 -0x053904c0411775cd444e6e0d14a76da22481a4b311821aac04dffe61f87559bf -0xede52f733568923d7ed25ea986821860fc01b431b5a672e5a2d73251dcbc0715 -0xd78aaa7ab8770235dbb43d2fa3f4a6ce9fb9a364482857c11d95dfaa9d500abc -0x69e3a12468057eed3ebae435187f5df45569a32afff402e9cf8d0106d6f6957e -0x8e8075aff74d6c5e78d40df72b3a9384bee4e0ac38f9598d0ba58e6f308a7f5b -0x26d987b65cf7122ec4c75b68bac4dc4fd9fd90505a5846a57e72379fd1e36e9d -0x2e24c80158b4f2963b022b916db8d5ec805fd2f79ccb1a20f4930226f29b4f13 -0x9a3ef8a99d8ac866ff57a2bf031266f96b56d7c1581b1e3aeab9a3168aeba82f -0xefedd5877053659407952a448823d92486d77565f873f2c549904917b5d8247d -0x061b4d4761153d6a33c285e0e6fc0d9decfc388fdeda2fb35e422e0cdef95f41 -0xa88d5262076acbcc9914cfc2826ea634c9a4a09897fc65f645e86aa7e92bb5de -0xd81106cd3f1b0bea2a315250a72aa580a0afa38bbe234dd6bd71ac4abaaf7c69 -0x64431ad612c9882718780b0c8cd6d3776d63845863bf2e0228267a2bbc0d3fc7 -0x410358a0b113208b98344f55fd333e06775ee92c57447c943e64126faa7f92e6 -0xac5890d2fa69b26a8756c731ae1a41360374ec7221cd10606eb61e39c2a186ae -0x6b4755fbc9da728a8abd18e3f8c5967d2e0404262e4128d7cab3d0748939a69c -0xaa18e82263d3f643939b1e8603cb68e9fbe228baa419771a5fea25aaca3366d3 -0x8b929fb7dd77d7289f33f5438e15f7980403934fb5ef8adf5438b2e723fbdb0f -0xf138f68ac3e215a8fb7d1eb5be45325201c2e3a5fe6c34b2a1d10c60b8e127d2 -0x7975d12724ca19802289787524f02ac102a48da238acb69534260d672edba146 -0x6cc20daac4d7e9266a5f6730f4e9b7938af9982cf996695962503f993c24768a -0x07ac77a1a1dc008acb71f800b32ddce7cfb6d4276cad118a85983f33f9199234 -0x89f3bca392cc01bff18dcaf27868618199ead49ec1e2b43bbb5ce24a86ea3b4c -0xc044c3faa2bec3f4c04ec750a9b8e637acc22f73a8301f35984ba72f2249e2ca -0xe0f9fdff6d71574d630fb369ac505117731a592ee2be9e937385f1fdfb300aa7 -0xe34435131be20913714e7ac936d1c008a495f20e08443a18bb82e72d5eef9247 -0x69e3af3732b805cd8c6ba032ce5d9d0dbe1e6ac69daeff8b8574f960d6641b79 -0x86d432d5c1843a917cd0b840f2ca91dd0790b03ce30e73be6b21e73c1cab3d65 -0x4cf99de31e2d119bffc2082c295658e18b1fb8997f827248887f282ba4f75efd -0x36a36c27b5af7241e02be63ede3907e0b66ccf07a0eb8e1883ecd576a9a8cdab -0xf6c036a3ea33d778853e44ad3ec2ec9974a16330f60194f484a31f4b6159d77f -0xd98c907450d16104175bf5beaa8378245c1d0489dcf2237457a6909d2b062e80 -0xf0c59046d2ef8dd33860b11a7d460c6747d085fdef985afb155e502dae203637 -0xc5912a75579f5d6a6099b72df24b353a28075633e25afc76293e6a28e44d98be -0x4442f28bb479fc95314bad1139171ceaf17f926d7a93a16f178684a543273523 -0x9635981157bd9bd3087298aeba1e045f8c48b2fa5b90c627c13d4d655832b9f3 -0x1a11c39b136c7f406c805765cd5c1ba7fe90566c50f63bfcd84052c50da67104 -0x39ece27e7d2232a0a1e65121b68d47e29ddb9241b829bd4b64f39fcea2bd2340 -0x7f428408e57896d345e43fca2fe55022d0188233704a89efa2709ee493c38e29 -0x152c442d4cd3c3d56451aec60f4d9ed53cf89ab41ec86a66b945ea4d53b25777 -0x39cd6a895ade690405a46f62dbc6497f3b1dc9412e31ce5aad6ab3c8fead0e9b -0xd9778c31cb2c4d095dbe501a3f1ee03e46144225f6d338e96a234338d6f8fffb -0xf70ef4a1568a20f78831c4b7347a76e104a51387361ea18cdb9bf576c42302d2 -0x0766068a56ef2f171c7f7666968391f813517149c3c4cb3ff118eada8ad25803 -0x495acdd2cc7e8093a007701727e168a549553e48959a22d3f58bed61969be511 -0x97024b07f76e29de7455756de372077b33f8b84fcb1da5485cbe56d3d0c95e99 -0xb93f0c10c73bdc820db18afd24aff39f55302c3a8366941940fb6a9d3193f120 -0x3e89758c927629ef7a5abc5c6e96ff920369cc8538c7a0703091bcb0de16f704 -0xd48a2022651ae5767bc6f6737dec064322567e6f393f8b199993da948fa9c472 -0xf99e0c49a193e0bdaf4b5572d8fc99358eaa5953f8db3e2506961760ae53e300 -0x21aafc5d08336c64e33432187469cf4e4ff6296f8ae2060c50263b8c9ff4d470 -0xc79abf11a5a7c3d1c11c3b7199454c78c26e588fb4109baf68047c645b574aa3 -0xd96714457d6a2dfd2925616a5a4b064ae42e32473154d7d22095e98a0e38b5d1 -0xf01840de3f614c1551a7e5a70656b5dd258b28dc406d27d1911388c2399cc6e7 -0x81f198ed76eda7d86360892ea0031523e0e7b469acee6f459957d4281c37e6bd -0x3dd6d4923cdaf9c2449fe2c62b070264089c9e2c14433aabd1b3ce5cbdb41282 -0x4941fa34ea0611b526baf71f3ee481158d00ee41dfe67e9edddb8cf94b0c7eab -0x151fd6de78aec943faa968beee5eabd79044b17009dd663d9e1c090c005b064c -0x0df9ce63b5e8b91160c1aad8204ae605e4841e886b4b7fa11b522864a9a2a53a -0x5d42f9da2624db9f58459e7e3ee39312271bcb3bc37f0b1639590e07c6eaad33 -0xdf25314c8d3d0881b9c069d5913c3fc28e90d84125c305c8fcec1498c635dcd9 -0x657ea261fd40a9d8f09fe86c328e7bf2f93abdb2fb3fabe439e7b7f0d07b900b -0x63951cb687a7bee766b32c68a8af41bff99e55b8e53774410b7be32d252fba02 -0x88f363897c06616ce0ed95d04e8a80768ee87db50dc213047929dcc0126d660a -0x6995aae3ed441ada73544e26a8cc01bf2f844a4fc6d4557d7443bedf608812c7 -0x2fb9310449e6bf44279cf696ca25da7332a140fa45f81ed40df34952e7c9a71a -0x2c36842a0801feb35b23c48693764caef99d5ead260969ec1c10027d8f1ed431 -0x0c22d026772bf0903813ec08c1ac37b2f5bfb13f2e3ccf261c924058c1086132 -0xf4a84c87f6de83ef9aee4920532afb5339790ef214b2e77eecbf67323fa22ce7 -0x5fa1b0b08a2b210c533ef86bd9cc3625e9e168ad859545abe111f97c384cf02c -0x7f0bdcc6719779da624d19bea410d2b955ec415a11df7f27500dc9ce8c870c86 -0xfc80afd53122e8e442e457355762a3ef8bcf11dec00290724ecad17066dda4be -0xf7ca3fcb275b0321c31af47b3c6d34ca177e6dc0041b65f9ec4a60d3416fc794 -0x552efcf6ea08db0208f79ed5e0672dd0fe81118e7143d8e3272b9ca889ffc29d -0xf330002b9ab359542170e429d9d609d5c78c5bf3934cc3d110e5e2f8de4fad9f -0x9ac81f8a3a9dac94542dc7328f76f05cb613d9d58d1e15dc4b1fff6c6a5fef2d -0xcb410ff6c021435c28407e665e316543daa3d0e69d2fbd82249add5515ca4afe -0xfcf241c8fa54df3964a62ff164a90e32624df455e7033127e854a607b37762cd -0x967bee0b208e81fd050736546bc7591baeb811ea46c5a04c940843487e2997e9 -0xf87c699dae55261a8bc1af8d54318f5136379aebb2151e8b5bd8a613dfcf8dda -0x73a34573d95b643ffaf948db37ecdbe156d1f504649481bb32e183330ce86a99 -0x30b1a58b944dae739b1088388675291ff861eca19b30dba1ae1324b4ee608559 -0x9309e35e4cf816a4f67df2105e3eed1903d08b71eaad5c6d9a7521706423e1d9 -0x1115d6c382e08e6021d290f81d0fee9f5a3ce41283cbfe0af54257d684303ba1 -0xcc29bca9f0e0171f6ce437fd2a926e37058042ff6838d33c79c2ee414487c53f -0x01057a662bdc949701edbbb18838bd5af67ac815181bffbd1a6c7d902e6ac012 -0x6410f49ada86bee5437668596f116b59d5b27c268bb589f6fd4cbe73e08fcf76 -0x1c4066c113ad61cf7c57402ce664a741917e8525bd174ff98dfa9c43974e3c87 -0x9737b7a6c754e4adeb5f33eef505ae4cdc193863b1f5388a8c08e85d2c45732a -0xd03e71096c359b2f831fe73305022e111d096435d0f64cc3262e2181a0735ca8 -0xbf99a272344f8ed833656efce874adbcc5e10d79259f56f34921fbb3365a4096 -0x5336705ff85acd8d31bec3b1e4df094f6cd4765973ef30a6243509c5b9ae1521 -0xe13927c2d225174143e59c5c2a03197b6fbd0e8874424417ffad2e92f6b86a5e -0x08cbce824ea2a4ad495b132ebd6b2b886922115b8425ab2d94b32153686209ac -0xe26c83271ad344fcd7bcc72bae77dedb22393a4467f539cb206e76687ab808e5 -0x628a979a68b9582cc63ed4199321412fea730f712025e00f4a333c6a1bd74b19 -0x90eecb2cbb5c87fbbbbfeba75af990eaa20fb6850e2241c4118c22d17f4796c3 -0xdeb915ce763015b7543747b52a5fa488ee85756d59f04c1ee40586a1f1b90265 -0xffa2c8566e317f08b99cf2d90ff1d5159b9e562ceba79b1e9028c540aaefd7e1 -0xc3cab287efd21924a7913ab5d0bb687a63377e5eb61a31f54c200ee8e1500267 -0xb7048c42f2ac6457f03b7404644684d563dc8445344813bac99875ac8ef27cce -0x6a7fa040af760488c11ba9741035099913bc640a1a4e475573c9829737a5ac57 -0x83ef122cbfc627c392b85402f90ff7032408890d5728f6c7c5bd7b5f31782bf6 -0x37caa3ec49d11cfd8758fa04caf5a220f3893c3105a77eda009ae241ae477142 -0x22d8eeab1ae01a41fd90ac98c3b2d48294b0939f2357e980728a7ea1943e3890 -0xe7ef15732db4c3a2c77d3361064a7481778f75e31e2f9826c5a72f4e160ea1b0 -0x5d6e038b7cec21d277276319a86f5a10012f182b455b6bca07178f94cd97518b -0xb5b2be3ee52d08646086f96e545b52a883802171c67acb1f0f958d811497e758 -0x5e48c1e2ba4ef3a7d799f81641e0d0248dd868addb2579718959a793c653894e -0x725801fe4284f9c404857c69dddafc322d928934c34403996cffa222f5352f6e -0x65e23b335a294d81ff30400aad25b6f019357e83df3d94cfe2a22ea9ae66a677 -0x5ba01186776bdc560b1925c6c2b84cfd13f935204e940946b687bb43502dc0cb -0x807d9541160c32a23379b467a97f62db3660cf7d51f351dc385c7f4efb4ed602 -0x7241a3000e2f85ab0b9b4fbb41b229a0f444f48d86bf6f37fddcd8438f12f3fe -0x1a14a9b0addb14384c3c12f1de20cc740999e5cde337fc90dd8a71c001b221f5 -0x921c11f9505cfecaf8b55d68827826f9b06ed218a2ae3d294b39c677b8ef8616 -0xb538c8e8f6cea4b7d585ee402efe929d01884515ae86fb41d0bb99607be6e13d -0xa0bced883f0f0e3526160e5b858e8335542aaeca4ca985c2926ba199428d0d9b -0x64f32d32fad6b297345cf8e018f747825ebce97edb41919b27728ef8e2934f3c -0xc146e6dd9239e48a1240f70563cffe87bcfd296d6390680a7b9b6d2766a0cd4d -0x5ef98f7cebba721211d20c6502c63f98a3a372b07062006b78e86b834198578f -0xfe4948f234033c1ca67cf60c07d921e3fd7cd83eeb7db8e3fcb94d85275e0e61 -0xd77899f74f5bdcc76b99a6ba20708163f8598a7f2d6a7a1e65c41ac486d6980e -0x5a20b775013d138db85286e206aeb2ecaa36d26d0c4bcb40a4b981f6006103e9 -0x398089fd062786002a02a1441d1c45b966828859fc05c0ab6cd42b85520c43a8 -0xbba5168c84efeb208808884fb934fbf7e160c034f8a73187a3b029685afa76e6 -0xe957c8f7a2d3e00b6f8555de14dbfed1aedc07cbd217a19a24001a04f8df6af3 -0xe3dfad62c430a23dd374d43ef7498ea1cefa0e147d20a7227abe536b83f9c689 -0x0d737dc3d130f530a42d44ed9ac2516f61f93c5a7ac7ef49d87ee7571e7b8597 -0x599fd904de6421ccbe1e08f44d6a9632fcf6bf3433b0a23671ae5b0d086a513f -0x42bfc74dfadb10e830896be9882f020a2eeb8a531a15da9b95b6bbbce6983f1b -0x6a06978c86fb18bb50edce4e4884584ec589c064cea709e4f87f3a93a444de80 -0xe5552e1a3ea19590c086be5bcd1a05814a22f5429e320077a2281f9bb35ad907 -0x1f8bc71905fc49dd846a5e25b194519fa1127506d5c1923324f705f8c33e7db0 -0x129c225b572ef0232845b6cded8d7ec95b41dff40fa41a97007347c574e8ff89 -0x012e512fe44c3b4793b12fd04c2a34f0300a1229e17f9fbfb8c194a5469776e4 -0x667392a42ad666269b30119dad3e645914eaad0d58278776298318af8046ff3c -0x2a23933d577a2cb92ac08966a768a0613f8385060669dddd2691b0fe9b578865 -0x0b59526f6ba7a1e979745066ba9e10561b7f826a8aa7985ae928222057ec1e71 -0x846cb57b2e9f72a72e869c2e859f4a368c07c08c311840137cfd8639a32d10c9 -0x42b5ffb4b1c937ca1f6368f0ea746f6aae1e01cd2baf798b439d080866f41421 -0x843c7f747e30f1b9353b7672e88336bcfb8fc8540fb07a1d64750af8e7410295 -0x9da1aa57a3aaf14a6fb445cfaf854ecdca38f391d69ff121b7d5d8f0156571b1 -0xe059bf7c61438d936508740432a0ac8bb70533fc36bdbde018214f3122a7b5f8 -0x1029b9c8db774993308273e7b18472109592f9becd3515f0e360cf70ba6f8690 -0x12c2c58f418107f0e79326007d000ac4195130259dcd0d6e73b5cc945e4d937b -0xc02e048b0c36bcee653403cda010c11d2ffbf3c575f42b8225d20138e7925ed3 -0xd737c2157ece7a425e3f99f42992f4b1ce04a045afa420e318ac13b925b60dde -0x05519eb95a1d7827a4140fc3e3d299dea323543ea1889a72bf061ac24aedd7a1 -0xb59c37d2f19fa80741395e63aae45d71fa0ed0fa44bd826f905b09302636f806 -0xe1e3f5607a2f30396d5e59a64327f33f8c8564e3129259460e373e8ac324a9fc -0xd7115311205f7fb9a0d3c1f8fe821635f42ceb176ba87a02e6b3453b40962ed0 -0xd6ec113366ff51514f478dee05abf72aad18065f9b103315069d478a7e5e5355 -0xce4a832df326b5551fe3a19eb42cbc74e78c09aa3399fdaef6fe5ac54d1f0989 -0x37e7a6863d16ea99ed8cf219b12e176dcd5f612be6de92204eff833921207d95 -0x4f37bec6bf65e91a76ea53ba814c6cfebc5a13339f92b4a383fca7e7b46a5915 -0x544287ce248c41c9ccf4375cdb9b5d681f12ebda76ae8481d797002e8a54c6cc -0x1b619dc5d608fd57ed204d69aec562a9e0123e8564f2de3c2650cbc95b0c29a0 -0x034dd64e2c0d93fcd1fd900c478ac253770fba00e14ff4ac9795b37da8e7bc20 -0x8480249f4ae8fce16f803be5a6c96accf0da7c70db06674b5707f363b14444fe -0x21d4ce354864f7616a5600df9068b41228563868a51a8edb290c046f3d54f576 -0x0541b23e4db31f6212574890edffb6cb55bd03d6cff84f813e9237c275693275 -0xf06a135a748dd8ad02894401de77a915a8638396cfe9df70b44231539cacb3d5 -0x2bf027caf1efdd2cdd962163e0eb9aa9d07cdd3c946dba2bceb294eafaae795d -0x2cfb7fc932b9689615458b30cb6d0cd8d874f0ed0f0a1e84ce5311e0eb6e6750 -0x8088505bbdd91e2dd533bbc45c2e42c5ec4c7df7d50f8e5f40fee15359c84762 -0xcdd720663f8264bf06e920047c0f2b8c0c87fbd7768587738578dfc493f275a3 -0x37f83595839813ff760aeab43ff982f1a8ac230e4356c00b6ab8a4b35a462894 -0xd23857192c1fe39ec97d325305814b0a1bc81c1471110ce0a17a22dbf0beb110 -0xba94cfba018e29aa0d8edf22190887d30100ff43b796984f9180eb086a8dde6a -0x79641ae0c8de5911befdd56b6eb113a2325fd16772af750ae95516c3393c6061 -0x48db5b22002e6011520f5d6201dbc7fc107518621d0a5fadbf5b1f91eae9c41f -0xb5a9d01df7aa98f46a0e4dc904e68a9d196043eac36e26bc03657f571e3b0a18 -0xc8b0cbce4af5e01418d07a402822bd25b77e4b420def2c464c51393e1b53868f -0x93150d70506414c36be8fdcdf96f7f1623294e5c65ab4e18b4de97760a3a1273 -0x0774875d2d0b7d763cf3d52e52c7cb8a05458f49517415a20d9f8e889b09b0ab -0x47e68a85a916aea0474b0ecc59d741e27463b7be1db7a6ba71f276ed3c025d18 -0x72500201e5ad47855fb6db2c56c9659ecdf2ae3a6da6ea6f4ca7191459e585b5 -0x4c37003e52935a3895264824458aaa76738d6b3a8135c40622a0e616169c4742 -0x8f650c2cf434ff6ac92dd4739d49cd985583af1027ee0786c5e3e9d87e630978 -0x7ec4140c49d26e93ef4abaf4d2417f10905b9e1488cf7b0c9090e3a1350b7d97 -0x31c7e0ebabc59d0fd2fa4c5e0b5372f1f55c4033ba1cc1c18c42efc2dfe402e1 -0xa37e5c5a4c47c38504179026a0a07298d1f91affd3991b514f17bc35c02cfbdc -0x1e636c8d7b8ec3480e8ee45a088eee99dd58faf84c13465e725c9e3f40eb2e19 -0x46ce9fc838984b30f49e73180aebefd1a18f304dd7db88dd6891cfe196eb3055 -0xf5419efda85d9f04256d96ddc418e7b19c975cde44fbfceea20e2adef15ac4b2 -0xec7a1072d02fb6366bf42ccdfb64ca8cc71c7fc5ba7ca27b6d655bd9ccec13a7 -0xd3609be731c242e4f6fa4713a2237635a72cc53010b86064d25f2ec7e4c58f7c -0xffc54813c1dbb97c71bdc66976e1542c1fc8b8af34ed12105bfab1e44554c72b -0x04aacb6ee062706025434ca3d8da4646d65fc1cf20c791e78d5159957ed22889 -0xde53ff12ed5025a14a491ccfbead8f7f68a268d40aece7299ef094a7400b20f7 -0xf1143c3a1f128e0bd39b94dd81c2aa7ce07485edd003023a3e966c2fed491fc0 -0x0eb436ea6b4c8bb578555210f4e19b587543bdbc3dae3beb645bc1e362b7e89c -0x3069069cc51d995fd5cf5a0dc8186947597d2f98a53370968d8bf7a8eb68b1df -0xf65b6449ce4885b7bcd1b59c9a7a624247745a603e1afa3cdd86dd9b75c3c9eb -0x7ae3124813db1b27b81d5f60a1ca6daf6eb2eed149d498fac0fdab5c5f20f17e -0x63e43060da33f38b7dceb1b67fd4786b616079783e081602425f95970cf01163 -0x2dabca96cbd18161cb9b346aab061835dc0f926aeda09cf2bb5f56f9416bb0d6 -0xd3ca67f1e6865c6139511eab40f237685804670ed91a9d9b57a457ed1ea983f8 -0x2d0bd8870d62ef3bd6b6cb6af7293f7f6fdfa34441251e0fa212c398ede90025 -0x01bebc5bbae15c6b9813f2b9f84130212fbdc6a0d381fcf1d6ac6d85a9ba4a61 -0x74a97394852c31e3fda8081fee2bb239a45c497d5802feaacfc6c755d6271c57 -0x6deafcd3c48d271bfae35ad6b4ddb3e410106b54631d3e34d9e3cd8bfd1d35cc -0x46070673afd105ff92c497da5be3776c16139c3e21fd8cf12a287b17628dc8c6 -0x37e482ff8c3fdc1de42662c579c82b7ba73fbcc28fbcf040d78bbbcb51ed0d0c -0xd72ee7126e916b1eef2a13bec60f7db164eb737ab5b65c4edac1ddf76ff2f633 -0x7a3a90304a930e291b89233eb7cc12c4bec795bc5504a690d456c7b2a006fbbf -0x39de230edea296e05f33e386a680749b2d0a3c2c7921e67b6aa3c07125e48762 -0xc88675509b0f68190b783559ddc5dd8e2cab60a47e9b37dbca2cdb0aa27cca62 -0xfeac19f3bcedc46f574eec190ea3c756798f85cee084565dd58778760fefe51f -0x2a2a9b5fa837807a1acd05a58246ccda70b018f8d5a34fd89ff41bcf18c402a1 -0xcca03c41b9db5cb80f80c57a73e991617aacc523e966cfccc3d1664667e2c34e -0x853cae4bb26b8dea76b753608f09e69dfd38373a4203ecc861c300a1011e84ac -0x679d2bf428cab1edb437e0b3d77c383ff41ed160e84819b54e8fea61ee4dd426 -0x46ecbf6e0732b4992ed9d7e2131902674de23defebeb0fcd5bb7c2b88b6c4411 -0x8b9286a19293164b45dab005ddc2670360d4b8b58708ed4b38506a037d644a68 -0x24a28a40d9d5863123613ba05b4444465f92e78ac9b1911a6ccdc43009b22bee -0x41837a0590ae8ea1a374c1436795b46de54a7595b2f2ca00a05af55db516fce9 -0x2412b94437613f0caa027154629ce12395286cead422846b833ecef519cfa3f3 -0xfb53fa0f82479bb18cf1e660b378094ddcdf5f59cb7845170f2c0a9d9a9f558a -0x34ca5563635ab05ba8e1f7ba2b6eefa8a26cbee7d0fa5aa5e2a78f8f4e7fb2cf -0x6e9fc513dac45d3438934359e0b7a1dcc17ccdfa661440b183a4efa9b6afd053 -0xa92d1878c7f17ba7a738f864e7f9fd48d6456834e7e3c328d3fc76b42798f712 -0xd53a4db8ea4738999dbf97f6c3c37466c22f01b13ad18dd65fc675cbbde74a32 -0xbbd830cb210c2a5c8fe538fccc23aabdb99b8c5bac8a284fe02e0a1c249e0106 -0xe848f604834f3c48c46783e7d861800381666064e663f53dfb05d3a1a96721ae -0xc0c7b768d75a9a4064fddd775448771f4bef0ad519e8352871de235c369cf639 -0x794c2a24789e099611f112077c0353e41845c5bae03e6e1e43fa334e347220ac -0xc47e3ca9463d545e4454023d229f0f13c488677179d29f1456963171e5fa8276 -0x63f76d4ae84616822be3bd2618687e6bb9e63724ae5661bbb90c4b06021f0416 -0x1d2ed4133111d38094d48bcb804b7fdc890ab0cbe7f3d37de6c6355504efd995 -0x0ed2ec8901c9ec65f503a3cfe91faa147c127f57289a75a8a61fcd0f092058ce -0x5669654a236e6e10cc9a316ca2a0a77a24da161dbc1eb88077b1bccc929cd167 -0x99d61e4d6ee00c45d3df05e8e0ea6cc6853db2ccadd95e124351ef6f3bd847fc -0x5a49311c727b3aae6cadde665e8ff1930581698676c65bcc7db86ed1bf51d1c3 -0x25602e0437cb9a949afaa902af3df7e3831c02366606bc0b38e7e50e4dbbb011 -0x292e4d2254105f942dae4a379b164edf3ae573d442cca08da1dfb39f46056aef -0x8d427a1c18d6453212d6c578bd935b3fa3f981c5367820c5c6e7040576c5c6be -0x8f08d1cc1bcb7f02cbd55beef4c1b519a2375f8f764fc37af00a39c9cd4000bb -0x351cebb8560bd3a84786c3df0e253cffbc597357bc4f3277389259f38111c01b -0x172e282da59f62f2e3dfc7a21b276e6fcd8eb9376c3128c0ea2e55f1d1846b1d -0xbc10974a38976ac30ccbcd645382edd02f09549a84696c46d50df3372d64cb1f -0xff76c417b609a0c78a6d1e11251580e8be395ee6013b44458227a43e36610d43 -0x2131f652d8eddb25fef6ad75cbba1fe535adf16f6d2333d40ac4a5a9395fc52d -0xecddc29d6d2b4edd6f0231ede68e1deef752a20552140e9a21e48243e069acf3 -0x4ca8f12457bc8373ae19f8dc2fee4d42f8d8eec90fd553f8db4c0d45a278fb93 -0x597e2f0257a20a288468c92daa9a7ebacc0781255dc8f94214ae99f40cc1e80d -0x919f0a8cfd676240463980bc9bbb87ab0ee0300f7f2e6e6174a0b97316c88d17 -0xae1e7955758f7f82745dfad08022da40db27588eb0aee6ed127041a87ec90505 -0x1786b9ba88fd3ebbe4afafe6c73d94605f7b3fab2db3d57b780d0cbeb797b6f6 -0x91b1e28917ea39472ee1dcc34eddc514b419e3e2ff5f777b6c5a63164f04341b -0xb3564c32a8de6fae559dd4fc67bd9406487b29bf1233272a3e0ae8a09b959228 -0xae57c499c072b2d284c49becf661cb079a86c948864378e76d6ec54a13cccfaa -0x8754e2ea7cc698528937a555b85aff1f42eb502e9703ca2937c97680e8cf78f6 -0xc3b50cffdddc91c8bc9653fbe3fa82f059b6897d76fd5eab2427c58232caea36 -0x9bf7cc27e6e158ae3afbfcf75c31d61d94829679b13c1a2a14ebdfeff8c69c66 -0x34f524ee2191e31397c19bb5bdaa266fd966eef51ade2946737dc8510927c8b4 -0xc0947dcf83dee2f1ef67993c4049c6ac004e1840f07fcfceafb4ed74ee4a311e -0xb29eedc2d5e318e76342aaf95aaca5075156f18f599fbaef79bba3476ea97e35 -0x1f3af500e40bc132855af63b7438ebc3ef3023a3e09f97e9121e57f6bc2a882c -0xcfb903a5a72f28bef466d6ba807e74b9606fa08e3cef1b0349cd212310369ba9 -0x0a56b3d9008c61e4efbe53b8b463067c1ec4973909d6b7664549e7f5c7d1ea32 -0xb57b1e215be14dc85a4590e75198890af0b00fbf9a6916b6356b6ec34b718252 -0x49199a5137f8b60bdf8270db4222bf8c3c59f33d21a752474f4decec8bd34c07 -0x1d6478f31a06abb62190b73c3980e954e3d073127394a0db6abf5547e78b7042 -0x16c748f32b87348c316bffcde1066f15fe83c1b599ea7d78695a4b7f90510fc0 -0x68a89a211f55ed92dd2e41323b4f6ce0215a1d75f2dc0adbea4d347a7d3e93e2 -0x15a006f761020f18cd8d7ba11d16838e97bcab4dfdf90f8cdf3fb32d73a3be80 -0x3495de59081522e2e1497660df2571e6666cac279647b898d4c8471cf48862d7 -0xd3f2d38c8a994807e4dc462333c8496db9fd71d64a33c5eebe5f91d27ef08ae5 -0x0aa2e1978968a869d29fd7f4205a902c73152bdca4705d6c8db57079a0317cd1 -0x47f2aad57019c438e7f63305bc89a12af798dc6e6a7783a5837a8de0de2f42d5 -0x61004dfe8417a5cf2aa379935f0d3ec9f4efa06d6cfad87f8bd07f0f82c3e8bf -0x6c5414cfdc3c62dbd6722594210d69fcb5509a9f1cadefbd44e6302994289dcc -0x0ab95fc5fe1f32a06cbaf63cba7c442e184fc4ebad1d45b2da8829b19b69f12e -0x0b58259dc0f8e73422e5707f98e2333fbed9bad1a27af770ca0538b22ba41901 -0x5cf22f422f6bc6a624a0fa8bed45475e59d65cabcd8a2641bfd7711c507214f1 -0xc56a5d6070f8ed66d9ba9dad8c58f6b13790a5aaa6a18f6987f141dd86bf6e95 -0x1d91e09c9e6f9df18fdf460fb95a5d32ec177e7f46ee5b4d26d3c2daa3a0e4fb -0x53df6c16b268b46b0a193a6e6677c03bfbe6c8ac8ae931cd9a85a627e8e717a8 -0x3bca3e783adda046eac6a024530ce2603d73a6d25efef864a935070b5262e3e1 -0xa7891101a407ab5c89af068118013c3694ef126309c39ff8e6c73046e4d81e16 -0xd364b889fd0726f7b61adcf5505f3d8040ee804ef1730c2be32d3f33bd108c8f -0x5f453bc9d0af9a1e414d8a2b9b3f7785257ea8e31a49fcf5bf4f1ce6ca490b35 -0xe36e553b232c7bc8efa55cf300234acba1b3a1b6f465f81a75810a006f2646fe -0xaab6cf00b0a6ec511731fdde4ce434a4c2f94ca5c6fc5bee17ca58aa6aa17543 -0x1584e92de3eb5a138513b9061e6817fde0718ba59f82b25e5c603465035ec25e -0x4226b5ec64d10f122c92f28f9ac7fa463fc854fe97d43a869c5f4ccd027f3101 -0xe31208e7d29fe330681fbe4b2df23ebae86ea5ab0707105d6eaeab8ca695a073 -0xbb5212f79c984cf0ccd6f90874e9781b34d4aef51661bb83078c71c7f5e4b7a6 -0xbfe7bb013ab353382a0bb12031538fb59d3262835666182ee869510727d0256d -0x8329bc16ae5f33c6c32cd66cd1b9f342683429a95eb0a42b4859490a22df9637 -0x82f06eb40f85eb2acd74aa5d0f8584f3f19d5d26342b3c7143982105d5aaab38 -0x22f74de9ad7ed870a3948c7175f33eb876bab181090c57a6b9e89b4b0f097a65 -0x2b569d60537301abf19973746e5c157e15e50ee1fd21a8134449c93b8d512f5d -0x89b79e11070bef7ea6da3a458a1e6c058997683662eb450929584d04edfe772f -0x772d3f8f5a66fea24ff14209fbc76f60ac4540e590a6b0852dd65b40859ab9fa -0xc5b66b34f5942a5555d9206d0b9b64c89f3b030a7f5d9e005bd12f1b1fd1425d -0xd431cd4d1048759339232eeb14e3ca5e9baf030981306a895e50835484f67b53 -0x1e563b4e3c065e7114f4ae5ffeeeac2db9bf867b3daf7531afc21e1cfcf8c011 -0x915eb40151502b556514fc54ed6af7d660b09b345bcedead7a882bc5b6b8e228 -0x0c8a4152cd7ba58dfb571c6d9879262bc2fc368ec3cc133363181dfafe24b25f -0x864f3a08a8702002aafe6dc73e47bee3736afbb708342f3bde2cb5e86632aff7 -0xe359dff4d76bad768332815d05cfb71835b44427ba768342bee340f7f3ebadfd -0x16612112d4fa1e07f558fe993d5d66f6963c58bf5bb6a2bccc07b1cd4c2909b1 -0x1e4cddb82b3c0283fb096eee77ed0dc03ec54a3cc43e423f7e540449022abd2e -0x84fda1e0b698dbaccd42682c539ec9400c4bed8a2c7fa38d581f23dd1de077f1 -0x49051cab0ea8c30b3a405399b9e50c95dde7e09ab6e6fa3ef8c27de6a1970567 -0x64d4d6f1706137446f4d1fad6923fe2cd3728fbbf84536335227071ef018b0d1 -0xe8a0491f985165056198a907966118b7ab81da00b08877e1f421b7d718e900f9 -0x8752351e92057da60edbb5a15de7a27b8a55be491efe8697f5a88b3c33f53e81 -0xa2fe856c9b37e3126759a5f24afb324493eabdb83e97097de0a5f120221c33fe -0x5e571361593ced02105aa522dbee0500a3663eecc03337a995bb5d5507e94485 -0x37ca10d3879c2312f44ad60ab0be8fffbb42748cea092830d496ca08b4a78fff -0xc0080bcf9d27b7de98264ff6ca7cd37997013a1a7d84d1b9a96d0786b1fd7f83 -0x7bda27d0662c94eb6f19e423539fc7cbe253b99dd8d7a609df1dab432fad5739 -0x62eb3ba5e6547b0ece5aafdf39f47801cc1939ab87c081723deeb8666174fdda -0x82c82abf1a5026ad7fb01a946685c7f7b05ae865b27acfa7a880f930ab2a727d -0xd4a08b40f503b16c733079a077b8e11433ab5d78c1e05d165eb83d409ca1b5ae -0x2a65309c27f5f57b64207a60330aab6366c4117703561f5bc8159f3dd285ac76 -0x9b76c7dd8698a3cb6762cbdf135eb5f75a9c1c196baf1c6a85df03bbbd20854d -0x40155e708ab670a5b0eabb652d62761986b7484f60045bad108e3545a7ce55d4 -0xb034a8f6735241b4e77c95384ac97f4300c2e9d3e880c94bb6162c315ad06cec -0xe01cf5c56cbc8ed564ff07555cc1076d16380f9ef45369cb98d3cbe037f440df -0xe201582239bfea1703ab645ae665303267d5da97cf1880f2ef7130e7998c6aa2 -0x28ed9cb1ab77554331a32063585eb7af17c3af1d1609078f00e16b4337c30357 -0xe9e6293cb594152226a4d22b8f8e95f5e926d45c98e08367033f466c9515fcbd -0xfb428410376df7ce43d4d940101e922dfbef3405a8326a62a8686b346e334453 -0xf3a6f01fd534bd1163f3e052bc040d4189b2a8bd4659de879f1cc3d849a985a5 -0x19069315bc73d67f08dac0d218a450e011ec6762d0c5a52e95bdc7ed702f70d5 -0x4de3c5545834e7de88898eb6df2f8c95f7c55a66363aeeb2fb241f424e50ae7b -0x969f37cff3356d94c75ea9f63df5ac0b476da0983ef35b9462a36a85f44277eb -0xb10f189f19d9ab24eac612ee77272119190f2adcc3ecfd79868f1a04d320a10a -0x81ad911b06eac3e5523b153518869d190ff91aabcbd224bfa29757b99a8cd58d -0xe9e0620b33e5ab8e22cf6ae1bbfef2510cee53115604ae54e479a0630ea9bd06 -0x1182046d890950fdbcb1c675f27be7f2c067cdc1fd1e2ae5b0adff8745589c66 -0x545b7b7fd21b1963deae5e12629da99b28dc56588b644999c83182567f7ef39c -0xe518fa2528111ed8e202338f90fd226202bf2a90b23e3f5694f148b1bae24dd4 -0x4c8e84a8e3c6ec5716ff6b0c7c3cc23c8b95aa2e4ff03db21d17aa0e44b6c69b -0x57e438da1c27fed818a863223cbbe93a8316e75d6892742e9416d067305681e1 -0x27cf028d650c0250cbf2ea506ee63e5c1e15fdb8f84c674a83fce38bf3771110 -0xfd937eb5c379a2e20c82e7601a53b1e8400c679b46aff2a798a29f6c8b902b70 -0x6d9e14423a298bf820548034b1d575bf99a979dcbfe3088eca2852a534e757ff -0x6f1116672e74c454a03bef873573cb7f180b7f434c8811415732cf6c179847be -0x4a34bba425e3e3943dc936bffa58dad8b59b06245c1609d81b6dfe5d9c061179 -0xf3b46580e24568442f58ecfabdf22a8f9e37173ad06eff1ed8ae179235267856 -0xe8a6d87ed652c6957efcfcc44e3472ca696461d17da0805309568daafadc6953 -0xc3acab695f4a2235d377b83267fc752639809b3572d492bd04daab0eaf59aeda -0xb191961ee42f3783f5959752388f27ee96fb756ee827dab0089457602654a2cb -0xd52048d388ff3acbb7235b6fc8b3d8881f6959a7b0f1e714afb0265732cf38ce -0x2ef817c7bc89be22bfc56db38b237f1a2bb375b4c05bda37021ca7024192be40 -0x36fb0a01732c59c9d3aabebbbb58fa98af8e104e85fa8dbe70d9a32547f1cb6c -0xd022f81c76cab0a11cf1b78d190b160fbb609f502bc26cfa89cf7e0ab30d40c3 -0xb68a11b8826574b5140d20c85eb31326bbb5ed97aeb3b99a051ed4f83a8059a7 -0xe7c7d2007bf79a1c025559564222895f22ec4ca980a55ac271f3d74230a6e6d6 -0xb51a86a474e7b6a5424cd038782efc4c7703b0a287b634d858ae464be40a1cca -0x4908033a524a8eafa47d28bfa8005e89837b9baaed7439bfbb25f5fca97d09d8 -0x217661dd4cbd522b8ad5802670f3297d1597ae46c16de05d6f3ef6c4095c3aee -0xc2757bfb44852dc86c39cfffb1651b1303e6cb0417009a2deb2e4ad9bd9cb7e3 -0xa34416f41727785c9705f5bbf785524d0d505eb6803273591686a5abf4fa9e4c -0xbeccd8b4fae2c29734e95a7895314207c4d619bad93a5d7f2c02fd00fbc5bc00 -0x760ee995cd496608f2091fb4f7e0e8741753f64f7f13d479ade82824bac58140 -0x2555a6b983e03d1baef172c0331f00fd5d7d75560a718bf450d21e80a954c99b -0xbc9052a262752aa00d7305bcd7a4c44cbbf4ad78e3a978e20dcbc02995932d77 -0x507e461fbc596a26402fe53593b4465d66df4106e2cdcf10c729f919746223d0 -0x20f4a73df5a92a49e486a9b5c5a6a522aea4c5be8dc04e6fcb8892546a36e09e -0x087f7dcd37f5e7d608bdc08546ad2e3b4bdd30acd1cf07bdc2b5dc1616329220 -0xe1354c28d5ab4a200460f678d4ad2477faf27dc1eee217f5cc3e1fd50904dac5 -0x7599c8a1563975419528ea5bb45b7f5d918cca916c2400486b33f722d85afa02 -0x11b3d19f332ee7b0c4d8d25e4be7a789d3fc70bbdb4ada839c9ee9618e23676b -0xceb15b9a3a179aff53af45d1629082ce1e3306e6cf41566a28dacfe325ae6f53 -0x54f9de1808399f821be94d9b44e64113bf564181fb960caf9fc7d7f9075e6775 -0xd1144fd8b8bf61450f858ef4e6e9f2cc9d7a1cced9234de76f1743d0f0009582 -0x011e0553954e207246b0353a5eafc21f724068e55e5b0e5e7b1039501648cd9f -0x526c2b11a9c659baa8cffffafb497dd7b616d2fb39c1739cdd68a0e4947342c3 -0x87cadb17c9f1046b95adb291e77bb47e5055b46fbfd8dfedf5ad62424c50d611 -0x38cb9b51b86d56ec67f9ff91ae140fe5a2e8642c915a452d9d55e701290909a9 -0x62f971b42bad645855b45623c62719ac04d9799bfcf1e0adf8cec02b9a981ebf -0xf997665c2230583528b8c8271e5caffdfa022dbf0c7c9ccb941a5d4a93c04338 -0x61f573f1bba24ae351fb59dd21855f136af0a47d0b4f50264407748dcaf99228 -0x73c93657b3c2b249707226d2e5293f2529fe3f99b76ab0c88461659b2b40ecb0 -0xddaebbf9c4923796eba2fb5df48c3d74ebd17fca4691e5ed5ce4adeb46a8e564 -0xd6799c23349146071a24369c9507c01a9988af438b13b30da5e698fe6d9cbf72 -0xf9e583ae78d8d61e5ab66ea75de3230bc306c06d6cb1997d581d091cead44bea -0x083e5cb43f9acb0c9fba1cb8840290081fd7dbab21b00a84ecb604ee889beed6 -0xfc4f315249d2ede4394222298fd8a2884acd532d2cfcf930a177cd06047019a2 -0xa132211e4687000cc262607537fc0ed98b6432e0550740bf9ebc30a1e4d6347c -0x382cac7e63659e64ff85128245069089d9f3e72c83f47270cfd036f38721a33c -0x97c16800267f63287749fa8d1107cdbb47863edb749f4ff4aa8afa31aeacb004 -0xaea1c46428e3f2ca76e42e067eab3f9278a33c9cf39e8badc3e8f330a9c5a269 -0x969c4841af8eb9838723a71eaff03f0da2f80331d978a9ed50f4df933bd839cb -0x25aeddae91739c809a81011718624dd24872ed3aed8810be29ad070a5d968b52 -0x68b8aff43b45ce14b467f96e08c15923df1b7fb71600673daa1a37cb53549c59 -0x1dd49957580a694227e17389f644a647d4a8ecdd5622e9920df717d8e3b688d3 -0x16f87b47dd5ecb07f5ef7c36a4f1f1db1b6c27177109f756987e2af37cad110d -0xced99e9b8590ad0313ce3618c609285d351658610c68796f44557253aa161db2 -0x83fbe95ae22d40ca847dbdbad7c3c31ce2f1feb1f6969564744bce26671c4f8a -0xa2cbb051fb56a835d9ea9e52767024add1fbe944af0edb92c348fe276f2acb7f -0xe9e4ccaef4a828ddc93c94a05b8ca9fe1e96556bf7d4d7323dcaf6c0416bd419 -0x177ff0d758b37ca5bfd74f4bec939a41066a85b8c85e7c8ceac5c0db172e27ed -0x466dc46dbaa39cf2464f367125b472470f1a8cd080f3ca8d45c5aa8b654d5a88 -0xfb4db35e8da3fa9355ab1370de4295657b0616853db088e166791852ff5e9874 -0x592cd3dbb66bb12610efc77729ab5156a00ea9ed3914a593755d72911e79e130 -0x91136ef88b6850d6199dbc5de62d10eafaee542894c0e7dd5b7f1f9ec00622fe -0x68e5496ba3207989ffd7ff871bb193ba49da3633bbc8ea7548940b818bba187b -0x5ae98c4cc43241bda495ee9d04a510c81496f278f7add3f81306ce5916639743 -0xe39d4088510a29fc320d7a612da9cd7b23bb9ee78343dcbd796cb1fdfb770bce -0x48132ee6c86675da93806ece5d9b2295a81ce526ddb612359ccdd8801789f33e -0xf31010e75abfb8205ca6918416db18b2f8513b49009d301f8e1b092de61c6987 -0xecfbb0c5452bc574aa292a3c3d2bb4d7bf911721134e498e328313d6915de66d -0x98189afe25f7ecd63740b08e9aef6d9e2cd800c274d2944390eec982d02fe0ed -0xa2c85ebb949b31d450834d114b3c2731f9399493c34e16ce67c354f6c3188e63 -0xf8792485084f39e2a629c88befb06eb24274ba77540d13a58c26f88c252d4dc9 -0x8b7ada341a5169a8f290e54bc376fc28ba3413046a21330e44fc1e03fd3ffceb -0xb0a0cd761bcabbea3fa12d1ded12920eafb212741ab6b30885b456a0927074c0 -0x769023cd9110a867d6c79918b69b52382c967780197bd12d3bacda7d286a2d32 -0xaaf521c91731a02132d8b3b5afe4da5803ca17c7bdea370bd6c8b343b26f8e9c -0xbe3bdfcf79bc24b7f9b5e64e19381e333b0e2c354d3a069ca4aa5c1f30ed9e1f -0x1096c4b552d3511da1bdcffd61a942ba0c1ae608674b8343e0e91e6a36115d77 -0xeb4110170e0341fd1fdb266d9cf5cdc66c47416b772950a95d7510d118c22a7e -0x36697d1aac90c15d067d24f42d6082e9d3b575b76433ebaef459b36e551a0af4 -0xf7b837dde52b81bc87956ff603ccd4880d8ae1c25004c9536cf003c56846b401 -0xa2efd5524f93129a381c9a294d6c56b651df8c733c2bc4921b8470733ca4cea9 -0xbf3e1e5fd692d591773ed70f40f935f9b568ba30b9756e843631cce125c251af -0x3a7ebd71274b3e3e59a1e4390007c96d3970f5b7e111158695b14832f6591e44 -0x0fcfe16b256c8403426bc50024eabe61300ff8fd73a5175f6bdffc67bfb846ae -0x67fc8a59451719ed60654f15758cad223144ca95be05897db146f1974992ee15 -0x89ba37e9f92fc1d45c5e5ae37ae3a76f93e282448ca691a1d9b92dfa8098a5a5 -0x3165b6dea4630ebd0f27829132c46485269277d62eaf6c08d7067a5837a37f65 -0x735a787421a441f9c8d9791b9af4078a3db1294c3b48deba24604514213b466a -0x19e2238009f0b1927b8efc57810793fb3d5d341e260ff879b1deadcbe697114e -0x41255b54bc9afe7f8f37615510b5551c8052c49a88c1c459dd03f200ff6e0d6e -0x13eb2e109b38647a83aac6ee6b0c38d6aa324443ca62e916052a473ede366315 -0x2fa06ce21706f37a3307e03596f0a607c68b568ecc37cc6a58228c787154de53 -0x4f6944cb5298fa8d124c8f5c203be6fae3c1fed8e191e23c3203ab459313339f -0xb32f620c1c886f19bc18f1d0d583e2c592a88ac78111234ac5dabe314a31ca70 -0xafdb36afb257a454024428515d6d1323b8bfd311d4a41d55ec0ca380285cae7e -0xf2aa2f321e384d64abcf2a4405ad10b325b94657fbfc62c065a8cd76e8c47a51 -0x01cea56b799dae06dbfe543377e88364c74ec94aeb1ab1a5734dc66551b47ce2 -0x2771e6d4dbd7d234cffe94dd1bf9bda19167866337807d82fd40fdd29a851bcf -0x4ca04dde8e87967746a2ba57f13defba1dcab4bd93e585fc6a969ae700af1363 -0x9d60396927596c8b3763fdc7cce09811e2c1d30ab77f689211dd8e3652b4f411 -0x6f359b575ca5eb1490abebf032bd85b6bab8d5e853d03f1ea53940ec14ddc306 -0x43b427b71004d2b8c8bec92a5d95b87b0da9d87dfa23d5211d99aa9ede9d86d9 -0x1c1f108c45e5d40c1e578a25d1a902b6ec56bd6e0d26e1e54fb73dd0c4c2ad70 -0x2aa33abb2de834a50eac36ef2b0727e7144630186a141f51973f9cbed5bcc248 -0x472076df34684047ad17cd46666e56541295bdc9aa7af7b5b4c333c84906f20e -0x0c0b649e0cc079f6683af5d7564ebb39d28290eaaccb510337aa1ce092f34e0a -0xb10f250e0a3dadb954788a3176fd04672c7038095360ff0a596ad32dc8a15579 -0x2f5adf363892d322ad26ce0253ed81d555e0f3d85eaeeee6f9e98f06a5b3d3fe -0xd21183e4d144f0d672f31bb1b84a964b4ecb50176681bbceeaf27c4040204068 -0x9965d58029fdcd95fafae3a981229ebf4495c47c65e2d5d3396a7824dee86bf7 -0x72089ff77c2b5677dff6aa9e68935e1f1d11c2f720663c7a7c2afc5bc4bdbfbc -0xb9547f05e027c7a212d1e9d2be1781df1bcc39df54e9ba0c9c6101e4fb3813bb -0x9b7aef145b61342a1624ffae3b68a74374d2d4e1ef821ac9d498c2c3360739b1 -0x66e52d499188db81c2cda73d06d8077e2f5a1c722c71df4f90708449dcfca50e -0xf21666874be3615d5eb44d0a6d0df29da9ed47f0efdd14a1bac369bac73b96f1 -0x1716535853d1c8f52449949e090352fb4376f5609f640314e476afa301c3c6fb -0xc9843fc3c05fd1994469e30828de021e86035a262304f4109757916c099dc4b4 -0xa16ba03a2eec8b7ee18d6db21af01a477850308c487c6522bdd07b4add2a702a -0xa26df42775cbd4e1fddd9bb55111ff4ed4f8087e967f9ce2ef75fbd62443c3fc -0xb76c4a5c98b828c51b00cfe4cf5d3eb042a212e20c14bdcbe17ca9895a33c845 -0x957ea91f429d86ec78430b3044e3e578f154ea124697c4b3cd19e5f0e60db663 -0xe51bae4e024761fce0be3d29076ffa8bda6c7c189d54d499de8c202ac4c00130 -0x3691ef2d0be978458ed547e6509d6f4850a54ca60a49dada82224961dbe59fc2 -0x8eee05a2b2065cafd812075cb444e299290d39723c034204cb51b326d9ef731c -0x4c6f10700f20d0beae4bfd35c93c2661e2e599851c608d3854e80312703b43a3 -0x135dd193f8ff273971e1cf81f0406bcb723a68a6135d49e1558e4d7cd3ffefa2 -0x95df0dccdf97f61cdef961716d12b14a02ce917042446cb6dff4b7495ab2bd94 -0x8985529658483b06ac6c32ff38546161dbf97e687cafb43ac9aa5e2a44eb9328 -0x9299cd59fbaf67886aeee6786648fd6369f9ced566743649a3a78bf6e23aae49 -0x2d97ec34f2f9f37723c548e9a8a03f51adef22bfb578ab2f21c6cd412fb77edc -0x42b8cec7157bb40b1478afbfdbb9f0e5386897994e5e79a75875bab0d2be7e69 -0x473f3fbe7b39b80adf99b3430b24db816ca29cc3e69696cd2ee3e21e40e22291 -0x197686041a17e6c6419fc9f18ea2982f00037a7a23ee0d325152815c0398a706 -0x19d6721dfd3c8531aaa2bc52c0bfedaac77d3391caf1776b34e07695824b5f30 -0x34f902edc12194e2fbeb93dc22289a5ed0b04d69a15063d570935cf621f9fd87 -0x22819776d4a21dc7f29ee08e4222957cf8b476ae03dbd0ba7bd255c489db6fdf -0x582daca554a313cbb9e40ca20dc3b0fce59a62b677a44a829e726c879d97726d -0x2040c83ad2d1473ac5a249e9c202367a26db71de88dc1061636b681c383ca3c3 -0xbe81addbbd7ecdc12bf09907674bf20e57375490f39238fbcbc7d10e0b592f4b -0x217a375c6d76274aec8a46c35be525631fc1f6e14324163c75de01042dfd7e59 -0x9d93b58a2083aa7b52b6d37a4b41dbc29cf6cd70df88375dd13f2fccdd0b9868 -0x3f8ed487f190f3dc7d461bba865afbd657c664c455618cbbaa15aa7b6e03abad -0x4184f4c60f96411c76d2970ea57d0ca90cdb98586e242a7739217521340c4dd2 -0xfe54e6014c160eea045ed9caaceea3d54e5c9f3cb81d0c2fb378df0e2a278b67 -0x7f9e744b8d368197b5738fd3b95fc140b27bce32cae9dd3f398b75b2f0ed7e7b -0xfb89bf26582681b3674970789460c7322e4ff8b48a83f2409dd9694ff8969a93 -0x3e67cb797c31750e14f63f4607262b765193dc6f5df35195892f13bd34601262 -0xef7d0cade417695b126eedcc5440e37e7beea50ba613d9b774ae82d311bbf0d1 -0xd26439ae2bf2dd37511c2f3e4d7372067b70da9e366cd4ea8ebd5a54dabcd3a1 -0xefcaf94fd3dc1b10c6ca9f9e5b936b3900da8354fa5c01f310cd37130f8111e4 -0x8c47f828f0335da3ca6c8bda539faad5aeb46dc09741bd66b1bae7f94fcd5c7f -0xc5cad5b3f04143c06aafa0fa880e10861cb8b8bc4de62eabb7345e8ddee5c3eb -0x59dee709e60badb12f00798239a422d019fea115768fa30a5852f62bf74a80f8 -0x94f8615a514c3e192d024073dd2d26930d8d31cce207f1151ce3fabd1c8ae3ad -0x41e37e7b237bddf7313c130527c314bf5fd36fb284cfa018f003d9b31351f669 -0xf41d7e674cc9f11883a6333c3c88fd420a84829c32dec07c520706d0e93cae7a -0x642c9f785298005ecdc6c3a23b7050aa876fbd01f829df3c4fbb0c5f76657983 -0x849031e57eb05079b38c26adfd079d8da9612f3337898e2cadd46ae425736439 -0x721429516dc08eeb71bfee4b321dbf01f7b37a52e1bf7b409f934356e5b7c786 -0xc855feb7d036b4bbe6a0ec83962bca93c13d22e7234c43fad12751dd24a01097 -0x492c2094983a93d2e4d4542d0c3633fc9e7b1963cd86302ff1f5640c68dc4b3e -0x32141d2b651d5dc853bf7ce0cb0933b29c62d0f9b5669ea1e4b96b0297ead720 -0x865dbaaa49fe9386d8f77cee1bcc42a686f78e20fe202d3abe1c29a41c0efc66 -0x23309fc344ffcc9fb2740d965d0870c6418a330c567efc6f65218df057b3f69f -0x115f1ebc6f5f9ae2debc1334d8ae6237ef9229b50e8687ddb82d15227412fb09 -0xe77be9e1755edd67193098de2e743e3bc5173f38565ab87d7776e3042d5d91d6 -0xd5cf4550878458c7f7e50d9de7273e37ffad3e1b5b7702fce8f7900245394d85 -0x072a6a1d04831c8730733d1095d141bdb60f285e088ef1420d617f7a9b957ac9 -0xa17ed3ffa5b5f834712936083705c85d5bc1bb91992d354532f3d0df906ba21a -0xbd533b3bacc2904f59a37cee85f2081fe914ee7bb748841a2959f180498e2456 -0x139370ba7110eef85d62ae82215f5f467ba9485d1caceaafdc524349a2e97273 -0x0a6e9447c0ff605d6b2a128f73d397ce99d351934bd7c18ffe563a1b3da35601 -0x7fa3878aeca7f750f9728cf965d520e1a220fbb2bef5ae76268fd0ce46040bc8 -0x8717c05022d4364164fcf199c164f19dba94890e84b940938a58093355cc3602 -0xf9b918bc8f91d89b37a04d6c03fc90b4ca9658934d35b5f54d3f02fc665529ba -0x18a9e3057db23fa64a606af77ac8c86cf063fdb836d8cc4c362b8a85d05aef6b -0xdbc707ed053380bb3b762cd34a690e7e3b6ee1916132124f3157d060fae40394 -0xa7b37a082f563e4561e1e3bf53b6d7f623cf9ad70f495d93d8c1046e10002b24 -0x7edaaf65d3da964143909e3b6f200807bc5bf0e51488bcce6c3b7b73cc398a59 -0x2831abb3654c97eaa4c640fd0c55907014574f769c4a3677668427c1b1819f80 -0xdcbdcbc3f758fd42c0bbe7ae45bd53506435cda9362138764d5c0391420e4afb -0xf0029e18b8e2104e763d381b3fde15c3dcba578464964e4292e567660ed816d6 -0x71ede4296ebc09d7f800b1b06882c012ff7e3f6c7a0b06a359d004e330226428 -0xe867c03345dbb1c312ab1ff5629cf436f99112ad7c0d77b8c43ca325784b90f9 -0x350f266c6ca526a49a974ffbaee9167be7d8d524dbb79b2d87d857e0890811b7 -0x6e48631a72ea9325a878845e1ee39bc71f587bd1d94f3cf58191a46c7827b4f8 -0x287be696281f4e825fe12bf89881c71fd654aaf07758efb2d89a36f18ee44190 -0xe80f3c748fe09810bb29f42d1554658f31ba242ea698f60d543428645c7041a4 -0xac61df76d346e85992c72b301c0cbec6553eaac3870e19381a45d5794a4b7910 -0xbb968184405efb6a865c278848d195baffebcd342224f23c76eab3f3c5637237 -0x333a22b426a49dd09219ce80f88333cb84354d1ee822cfb8b6ed5e37a27e0a19 -0x308af988a759bc14ecc9681147ba13be38986dfb9f37a11adb677122a602b0fa -0xe21fdb8f2000bd8c309a8aba973318e0086bb518639be36ab7cd95123fb9fd62 -0x3fc4cc75dc211a9a673e04390948e0817b80e73aab02ed1098b498af62f48438 -0xedc61bb78b187660f65254c932d9a3b9d3e7c73d23d94ce1855470412dc98330 -0x8cbee6d602bd6aca80edb84dafa48fb99bc9f9e6b768beeab9f940f96e15ee37 -0xebfbdd45067ad53506b6a502f5eb3e7c5ec967c87665091a4e13f4791a6051db -0xebc3b78e509e844ad9d7f425c892b2fb64c287fe874ae91331d5747c2151398e -0xdda549fd1ad55fb65c7c1372b94946bed9d9080a6cba1cdcfd9d1447a403f3a5 -0x8fd05fd4772abe90c2ffdb976eb502666a7b9f1c248db17e6142958d8ff71228 -0xe497f4a28f11ca6b263afa49f97e13b09173419111793f913e09c737a0c4c6a3 -0x3565f311adb67ab593445ea0785f9633f8ee554c0a11b036aa33be969668adf0 -0xc8f916348b2eb60661082f4bcd0174ddf04a0728a3161e39fd8db8429b2a21d2 -0x17aef9267e70a654048720bd86eb7df2bbd42584ed19399cc84ce939f1a36b5a -0x51798d8033deec87aff68bfc72cfd730a93d826278eaaee619d0be3c02ec5fb1 -0xdf43deeed46655182629321bd394937dd9a674008970ec2fbe08a3f2c25f0b52 -0x86ff9902b2a7c253d5944d302781f678fb2577533a25e6ede1a182d3e17b75bf -0x9f16a3995d6aad8b1f8c1fc02e9dbff192063ca65197bfa0bb5abd7a86c3de32 -0x69a28355c4776977553dd0cacf4d07153ceb7f2ea46247ff896bd190d6f25297 -0x974ea45a0cf46732ef92e9760a7b65891ec056e0f69bf3cb7207b2815575d823 -0xca456354f3d2f2df444ed59bc6aa207e44493f34228c9d1d0a1c9033a831b45a -0xf87393d79111e58871bb07c50a64c7d7219f5822632544f81dcbb706fda11b49 -0xa98109e96e8d1e8090e6cbde1e8ea3ec8c1c1aa40ee99c7d94bc33b5dc7000dc -0x9852b8b92af4c90482ce001b5f6c68ff01441ca8fc17782cf436c7f539bd81cc -0x46bc3c219f01371d46cc2f86037e262574335a4de99efa585464cd65c4d59d67 -0x4329b2d0ab0346a38bef388b05ea6344824d78126d66eba516750190d4292a29 -0xc1955c41f03e1e19906c14916d6d69d25718b1a859b6143af023ee398a24d863 -0x36d0656bf931f5c2164d0f11219864063ee1577e6be431f032e24ce48a93fb3b -0xe18c10f8b78508b2ccffce193d1d36b8b5b3658ee0c2685718f27cfe218847ad -0x4437db16ba01a3fa5ac2e8eac7ba0a6f1b81d1d3be03ff154e629c1cb1fda779 -0x62c1ed0751de2b90fd646af583e8e2875ef0dfa1247fce42bfafac13019e1715 -0xb0f135a5839ea2ad5ab0053c4d4facc504796ef73553672d03c1401a365de4b0 -0x013219d34dcb1dcff89aaf47e2dcfa21e66258b5d44fe1fd14cb3101be7ee7de -0x53f6730fe2eacaa5c27ef709aea221a9ab878b117d80bdf0b62e3a0ba553880f -0x252969e64d580313db1572a4afbe0d8274029ee7ec5a6cc28c6366a513579de4 -0x624cc2d1999a88fa76da505bba2f4aa3909df51e520fce042083c31cf734315f -0xefdec69c1dec35abef24acb69784fb2f8bd86b461da16e32bdc24b3a96d33ffa -0x09bd5e0e46d05d31555c887875979830ce212086387067af36c8a3fce7485ecf -0x16886bc8ed867d2275a0317dd82cd16f061b754d16b8201d6078a47e0a956381 -0xb6d337761346b28e0553e76d00eb16947b80433d85a5f53c28a46afc91f70d24 -0x1d8366677506c8f8ac88b0a048847699dbea41a2a6d54738a006a591c888bcc0 -0x76d038d98dc4a1dec83add2b7d0da86c1cd07b9932ec61ed9e6cce1abb1f323d -0x73b195bceca07de6a3940f8135ec4959fabac80916166189d2a18a76c9980287 -0xeab5a07bdc383d2244c59a99b21b5deaaa23aa0bd9448634d389789402bddd56 -0x222f7db7adb23001ffe0e8c54c8fc12751fd02114ab7d79a3c6e7a995b896ab8 -0x8541990f46ae2f3b7c519e47635f28f947e54bd3832ec59387ffb6aa2efdd0d8 -0x861b4051b7369e916060f4113856551823c3dd33ae554ca184dd588a84f3ed62 -0x99dd4c64457be31e3ffa02f280d97b3004c3dc3371e209e45ce906f1b0a505a1 -0x5c1fe1c2e11c4cd138ea16273d8cb7d136d6f86d3c5624b242e3a1d012ce6923 -0x9e0c8c915e3c3721d945af61677d2af59f3794edb662dacec93c9e31800035df -0x6eefbf74ec10c60630b0a6d17bf92b5af534c001d9330f6e8631a545f789c7ee -0x6cf9dfe2efd6984f56f9601bc6544090bce9363f9bde3b05751d856468474e00 -0x948f12ba2fdf55ba7ed85c5cc2270314e818fa2e4da91ad2e9148dcc79572e19 -0xc28984142fa794b3a1f4671b34fe5e46de05fbdd1d8ff6c49bb24f02557c94ca -0xa559ee7a380974e010b082fa52de039198a19633a8848e41cf614887a8f1bd20 -0x66eb6c817be100c3df136cbb28307cdeb1ff6149d57fcb20c64c510903844130 -0xed478a40c556152a53bb313be0c6deedac41964f7ec61f4ad1b3600d5ca3ebff -0x836395b233a579e0f9acb7973d52d827ef846b0cd1c50ca0e679061dc8096d43 -0x178db9cbdd4d727198c17f1c07d76ae1fa15ed2e4f5f8db2b1f38b7d6963800e -0xf95b65e74a33754da69844ab35c5f4576a3502a1cf57b5103170d8c0661f5a8e -0x3f9aca18e75d9ac116720bcddf977987c5222b51bcefef6bfbf92f2cf84e14cf -0xeb88173c4416020184d2743198bac46180fdf6c0f3d9c9473f27864dc251984d -0xc91619e744869510f6f80c64dc7db39f0f818376bc8602641db738713e8f6f6c -0x9c64a0cccbdbfe9008d154f9b6539484717f8bbcee1ed419f525752d4d933933 -0x23f559001a963c5c7431cf4598c139babb8efe7c714b3811b5387a11dd703301 -0x35bf34fc29bb173f3bae173e15d91e1bc80907af4954bba65f2d42623308a576 -0x94a60eecd9b62e931d7e76a1918fef160cddc4996ff70cec6da39ec1f139ad35 -0x8750fc64579eba63ce754a7a8a8d8248be46c6ad715a971412512ca0057ed9c2 -0xfe1774d823c2afc0e6ab8a54372c7b2fde1c66c3ddc9c304d3d6747ccc7ba08e -0x86aec4df15740cc3b74cadb737078896d57132047a71f93026f18df5c3fe1b09 -0xa4062e85f038504e9d51dec8e4e779a5814681cfa4623069804d57aa83036e51 -0x88c085af82f14ad6f96a1af69edb7526b43d35ddf67bbce0b4145a459093efe1 -0x345ed557b379430a74bc815539cfafec48510c597dd813ac9b5a5d5f4df7eb55 -0x825bacfda43b80069544882ceee6fba52663af5091f8b90a6ff62f29c5b1dc2f -0x4866ba54b933463e04db58e64eb59fa7f8930d223a93ec76eb52345a85539c8f -0x3d59122c1aee931d5e0e5bff90c8f08820d37f1758e9005e4f7746b178870ec2 -0xc4700e5b1c5995752286e4092bd3590a2907013ee092c1a2cbbe2f627f92e1f8 -0xe275456c863bc0af303cab8000120a085d750a28b990f0ea8798d284f1183ff4 -0xe7593bac44de2698c208cd4de1e97451a9ecd45b55687dfd96f0cb34e6af9041 -0xef593833c18e25cdd8679deb90aeda2ff1a3e05a9c38611c34f3d27ed36b7a81 -0x20b2d22cb31928ce339d053200ca3432d1678ee188c22cc4da59a6b232bae0bb -0x370df7f6a389892f73e197b3235d79813324e51378bf941f1eb10fe81422b158 -0x290d0692f88b9c2ca36bba5117f759e76422507cdaa8aa0e65c9d371c58e1aa0 -0x994cae0f9df754ebca6e764ee54276c506723ffcb7a9fd50ef150d563c6de5f8 -0x383c0e6684c80f0b1eafa2e09cb79eb6b3a7b1ce517823fb16a1802007cfce4e -0x91124b4af7858d69cdbf7d62dca6b01a067847dd2ef93eb8625f36e3efb0b43e -0x26ed4133fe32149a22625c5f7dccdaa1f844569dd3752aba791b10f0e8fa2fd9 -0x44d0536ab00cfbce6d0162a9e1e29c9631668fd03022bd2693e89c6c56b08336 -0xd4f3cab270bdf7c7ba45e86a52bea75abc5e7cdb2cad684086914c58442a56cf -0x773328164a953380915836147fab8969b64ccd62e5e7a63720156afd7ceb35a5 -0x0bb55c5521896d7bdaccc70080e4e3025b73fb199decb16fe5a7ceb86b3c2161 -0x4e21916fc8520334d6a84d352b3e060d640308df81653ec3a22525fe03f8a9a9 -0x17e3e85c7aad73bfb5c5d0c0f90af1ab6d1cae17a3c489647a9f5f2f5682d18e -0x19323dc858459648c7a93163d1c4a15236411c3499cc8d8745c67cdae62ca169 -0x978da0351c37ea1457cb2d1dc71c8da40610d019c5755e2f1d716f9a12cef93c -0x985fd0237b518fb22519b39f730ab7a269cf187d8195f9929801aea951963cc1 -0x83968f430f2e087d2500ed3bd64a963684de3080f349b9ee4ef4f9cf3490d4f3 -0x08346dd475fd80db43b33b413e6bd226f19db415f52d3fcb16075f18db0eeebc -0x9f34d7278d3ff67d15f3b4944960bc25bafe8688eed475996dc4ba1b1fb110eb -0x223e8189618f12cdb56b1e6f521eaff6142838180be766ef086c334798110de2 -0xf7c3d11cd833f94c0d1fe318620365cfefb0afc2f884a2ac6f5a0446f5691ec8 -0x9d2b585fb09ad19cb8175334ec94859d3e493a5e41d19db7370681f3ef9ea1d2 -0x4d524e48db16a20a0754a20378ce1e44e5af3c688bcd75125fafd8e04ed73ac6 -0x056b5bde8bc7053e1e334673ffe83fb99308ea4a8d007fee6fbaa176ba9bebc3 -0x54ab3f6ccbd589941e32f31a56050e8977504ad811ff00a7b1e67bb57862a4a0 -0xc15be7dca5dc9cbf9e256035a58e9bc7c01c68d7e302cb7a38ad53bb3ee73b03 -0x99c4b0bde36c2c2eb303c156d72e5970ee4b78c86c0b4cb6ee258562386f528d -0xbc8387984be5eb5ab7c67642ba9879aac150d23ac13f21e7d17090485b9c03fa -0xfd52227aa1b35c239105f57aa8d605ed900fcd6b673bf3a33bf017d9c67c3dac -0x376bbe108e96e4d9082ddd85b2ac3d84179576d9fb8d18e05f8a0bdcf7b2aeea -0xd9aa970a73312f55c255a35fd3029fc313b473bf1fd29fe6243d2a0326e8125f -0xe1b26be9f89f7df7dee0ecd672267c3c449d0b6fb4ed0b6186e9478f71187e09 -0x902adcc13c0bf5206b078fb556ce0c589aaf499f7dfb79ae2f06689481564659 -0x623d0e9b0f17dc9d3bdf7e933c937c13694633470a29c9fac028f9fe4f869bd8 -0x48ddd89ab66a05092ce5b4bad9494e34a819b44bc098b84767b8e2e7ae826002 -0xe4d7d6fe9a5590a7e14d7659b29c5bcec034b8fee613bd8f3d765e48f479fc1e -0xe88b9e2a8f8832bb83b7499afa368e0c83316cf8d311dcef2afef26f3cfef366 -0x6d4047d218e3a7905663522182a12ee20968f637c99150a30100a05c7f9304b0 -0xb46f762342bfb887353711938b4c3aef29af3aa62043c70a90d7c522d9467f6c -0x2460ddf88861810476e0f2c658aae5c176443e3039ac0f287d220102019c9fbd -0xabd7b673b4d1e3a8094886dd2647952cc985e7f5cf7b0db427f8672b67dba857 -0x0a4db6d3221d343fc3a2dd301e7beace8e96bd27a4c7b840690b09d41a7c83a0 -0xb70154c22eee9458caedcd5695b4fde34cc56e86cbdda66737b21a21bfff19f1 -0x453b489ba65430f680b0393629c2023040cdfad0e606449994a097f8b4b6612f -0xe82578144168b7a43b09453bb95b49085e8bfa761963adb4185a9f9444bb8df6 -0x07893f722dc0be3a3bbbacfb2c6efcb0219a7af89a00f4cb64cd28af9430cfad -0x0ee5123e46b2763907242caf3072454d0827bd8d9c53dc1ed7eb92c1475f306a -0x713e0e4173ce10da28295dfa311f9a7c5dbfece3fe06c65402ff6d3bbc37d59c -0x1778a49ce1a328105108f01a0da323ac9eecf5b50ac9fe095fd49394827b5af2 -0x2363066793cfeb051469d309c350f0fc1320ba56fd2dd421b19387e3dbb40f5e -0xaaf2067eb040f6ece5c6cdb117e246bd57df1b6201c8cb020e7fb3967a0b9a11 -0x245d272f11a19e5016f8a4c2d5d300e3566fa9c2a8e9e3b717fd8f6c4131f168 -0x5a903329081ca89e6349bb59a7851fee0773d1e8f0919a363c65f4cda9ace1d4 -0xe12a9daa186c3fc294b944529c376e3b771d458924996ffeb9e0c96e16603a60 -0xd97972e1e7097e16c6573cb95bdd148bda16eb58b42d606061848a386b1dd299 -0xe5de316cd6ffdc18d33b0722b2bd31209352dbe8d6ff5112402a8ad37c0f81c3 -0xb34da98a661f6e3d387761fc07040c6a1c722bb0e0b0f609818fb88de193264d -0xe8bbcc5da9a9834a15ab696cb71338834048b41a736918ed41fb9db52f29d0f4 -0xd1f1ef90d7cb4eb070a5b4bfd68705ed9ec5d2ef5a841f34a454dc1bf71b6a21 -0x7115336b97678ade105e1874d8eda8cfd9f852b7accb666a8ffc0e320b35437b -0xf96265a79e8ef1d7af3b2494634c1e3b0c29c411c82e73e9fb54627f2c0d0e3a -0x02b3f5bfe77e2511fe9ace0caa442a841d1c6aa4087bf61022e3dfcf6b14bb7a -0x4fad3b68dd17992c1030ea44d95e6280af6f45f7011494591d3f28abf922bc01 -0x1577c21460a290a18eb31602edc4aa566d6c57e4b6c71b9b3d74f68ba2eceea1 -0xecbcf73f683374a179ff42065dc167fb583b8d68ba850ac49d74cd297f742f6f -0xd738810d6ab0f38a334e5f53f2b8fd52419b6617644431f0b83383ff33d99f6a -0x772814abb5d047d1bc3d1d9c6da79a21fe86131998bbbbef3a3c8921839109ff -0x066b546193d1895a07bf18aeeec4b62b4d7cede98f810ef9cc27d79158732260 -0x1de8faf652561856fd0b4226ebe04020643d282cfd95d978e27e1e1f027665df -0x25cb1152026536a35ca8e0bddf55df40bf4f4018cbe661c1e255f4cd227cd338 -0x98610bd5bdb0f286c57a1d85961e4231d39d2d1c430bdc5258498af60e822dda -0x420bd4dc8823848a4916b53ae817a8675bc0ec8c521cd4f1e01f643864a05a35 -0xc3a5569c0f86a9379eab7e85cd165e4eb0e17017f8aa06e3d600bca6acd54339 -0xc7c0926bca11dab2a0c15ec8a5850ae0854b0a269e0bd3e9169507a735de3558 -0xc892533b3af94fc65c79ed4ca5015e103767a1bb05458dcdfbcac580dd3ec853 -0xc6281b4f3aad76cf840cb23f6b7c1fe53e74c99fb174e7feaf93bb1145b688ef -0x239a1d37949b98906e8463a6d61e937c993a4341bc46018ed3e9b7bdbdb3e8fe -0x41d5ef42bfe0aecc62a9738534fc0a9c632a1f975d614c9c5178d0b3618d91b4 -0xae719b6a6c152e43b288f7f389c4447241791b108d4a838fa16e27ef7dab0677 -0xa9389c5ed74fa554840efaf095e6a0070bf1d00e15ac3e0e488c7580077dbbcd -0x62acbaf782860a86ed4470630fc5557365bbdd4a8e3d4ea4ac810eb8559b2b91 -0x2e03e65341ab7d5f51851b4100c533e81bbc32f50217e62362d47919a93d372a -0x445e1b2b7e0fc84c2c29f6f5608525134aab855a43f24da71a8bfda2d9148087 -0xae217209ea39d7e628bfa88d3322b84a81311e310fb5df503a514b7a2c72bd7d -0x340880c46a255460a0ae2ec7defc277551afb76e1036930f8d4c8a7e4655a51e -0x8f149a6a47378def2aeae3522e35d5ca4ec360a786b3d19dbbfd1dd1dc5c8b30 -0xd6d2a1825b919528c556c89642d9bae23dd572ff3fe9cd1533f91d3de1a1da5f -0x19dfa13fe83ccbe2b7577850e887f4bbbe1e2afee1c72d6f312ef8449359cdfd -0xf3648e63adf74541cb7f4c8c91427f4fb3e9305e0a0428acede4598a028709f1 -0xfa4260e4d903f1920cc7c72d7092504b39bcff5bfc591fbb86f65619bea7ea38 -0x0c85f5d2bbe9d5ab51d6e31365f1a8db031224859df88ed59e59594e01b3fcab -0xfddf14ea7e8c005ae444be0cddbedcf250512035334aa888b17f106e499e4194 -0xd3a8d80e2574321c594f6b61afff8de12f1028c519d1055f0e223f899a854298 -0xc6f9a46df2fdb0ba5c52f0f494fdf1f48a73b997bdfb25cb93da92272ab9468d -0x434fc6e730e931fb234dc2a0892319a89f5352bfad75acba87c21b1e358e5fc0 -0xe23cf62f82734cb32b4796b5a7a4961fe4e7dd4fe2e2da79ac3e6c2d66525d5b -0xdee07693cdd47edb036e22458be4fab852aed715d975a9252cbfec30ce73c467 -0x35eaa361e5c851c725e8369a9ea55c689ab20bf682559db51ae71bca209a316b -0x35a986df03e9b72a4945ba16b3c3f31f8abb0271260bd5253964f420a5a4ebf2 -0xffdc0eba26b71bc5e833d2af7509410ffcdd48158bec8f6c22d9485152441a4e -0xa0fea2812060a66141471844e36d710de45adf4eb5793f08fb2a02d5105eec99 -0xe499eee46384861ca875d223a9a46a81a076c5ee7cb44127de4ecf9fd35e9c3b -0x98608748ddc9e3711c8e022f15a0c5575061c86e4cbca8b51dbac6c34c406a59 -0x29fc6524d2c7d7dc61501afe05cd0b4941782a7aeb75adf21ec82240e07d431a -0xe10de0a69c57b27429f99807ad65684439cd27f2721837f511c690fbc88dc126 -0x0ca6e3ae9828e6845fafc8a0f3da73053495eac86ef11817404a64ef5f33c3f7 -0x684a55a3b0c492cf49b5b097d0adfca61901f963e882a8b3acece25e82b26641 -0xf5ab4852b690d5b04567172a29569114a6f02e469d93ef23ec28390c185688e2 -0x8682968cb18bde29b1638f1f60c1fc0daf9daf602195056a1d978ae8a530ca95 -0x4404df424fdb078e8697338735ed19a18b7069213fc5c9cefb63bf52d9a38f3f -0xe1949ca73984648ac57d0c94b84ef0082ec2da60f9ee2dea6d8c80077c226201 -0x6ae237eafd26c90ce5af836500e7918dacbbbdba1632afe568b41ac8c393cd33 -0x54343e169e1cfa694a4da4f0e85e8299247379f31a1c768e7d3f2144b7f183d3 -0x381c42c38d2e9a4a9fd2dcbfd6cfe16985e285a38aaa0b77eb250e79ffed77eb -0x2f2ea67cbeddcdf87f2a80c1adbe96720d05a1c570247a56edfc83ab9362a446 -0x49bcdff8f1e8a7ee70895b78a8002daa26e60123b4c0e9bae610727170cd1851 -0x85fadbfa802ad080000209e20bbecd58fedcd0b9a54d317385f550a3b38f3a2e -0xdbc1f6ff7f17d42d5634580fd93353a82b45ef6c3661f8d0e3710fe23b754e6b -0x5fd08d87ba2343214ebb352eb432d3e5eafba7f42845a36511d275bdafabb63a -0x00fb766065945f5ad3fd32900fe93d89fbc188764e808f21ff9baad65de18419 -0xf9a19537d42e99f1e5dba1c8264ef8323ef28d1c86a7e38a1be01d5e2ec629a7 -0x157ed78ba9b1cd262577954c1478f5a94bb93c57ba8583809de1995a39fc4cb2 -0x5497f6f402d010d1c7a2d2256d5c54cfee3252f6caefba6ccfc0e2473db9bc71 -0x7b3036c5a1fccfeca11cd0d44f2f11e53880f236cd326beb3b005c09755456e7 -0xbe0e5e7b811072225a4bfed5ad8b83efac1826ae1bd0e1368a269a2688c90d2a -0xd89303d815674380e25c56ae98262e6da1ba642e3a66b26eb39d9a2d00272b2c -0x1d04e35fabd00fbc3986edfb4a7fdf8242e6418d96966d3cfeb235afe3efc32e -0xec83162295613dc1a9d626f1985d9f8a4f52833bdd55e0d8fbe773c4f27f8624 -0x1662519a18f93e2fc3203be323a6e4208a6095e0e8a1c2f3556f4c5037b38138 -0xd3ad35900e9838cc6adce4e964ede8150f9472c0689cd841c2713d54c1a58e48 -0x6e8ca95b3aa22be0e63bb33eaea03bfbfce588c156ba47ef726065073e15f12a -0xfe98b8f67648e0e4477e55b8d1d4ce0924d50b15c6d0422235464a0c9b781f7f -0x7845254dd9d18e9e7f49f0340fdd0c5be6fc8cb7c5f0d97644fa2fca0bb0bd68 -0x3afea36cd76d50af56e8da0b2b022072077e3e47495d9c11ab982f7a6115c5e1 -0xd7f76ce4740a666c3f5dcaeea87bb88f9a8414694338158a4e28f8a2b3e25f00 -0x0285660cfddb0bfee8fc44e44852eba3ea3d0ef076126106cca003d8fdd45124 -0xb16fc3d1b227bdea594251c401dc16f324d249725776100fc9088f509adf47a0 -0x35480abb80a0bd5c7bb5f33096db6e97210f7d02fd737b5e7b2f020a373a1e2c -0x14fc9a697b847f3400053de118e8d1f7a7d1493bc1b8e17bf0f8f9eed10d07c6 -0x483682ef51d90d6e126a4ef1e10d8ef6051a1acd829179918a460e5672f95d36 -0xb5b22f022ff4fe83d4fd0f58cfe0e67798831ba1eb01ed14a698aca0e8b51231 -0xb08c4b3c3d7652331dd467595cbd34a894cd9b7b7beee5b9833f577f270fcd74 -0x62e7a7d82f4f51092a595ffb8483e266f473b7ec11fd1493a30f392d5b75c4b3 -0x927e3a5615b839d485f8aff489f61b39aab0bc4615fa9b5abbfebf7982af044a -0xa5fc1f090b5e176991886e3ecbe34e0af1944c515959469c6b8fb3e45082a6f5 -0xc75d12838460b5d13246b0c7d78718901540d92c28917487f6bfe1526f357a55 -0x5c2d00b93799e2c08e541e67a232b91e9848ef51b5ac14d9916f305bbb60405f -0x9abd4dd3f591a75e98a870d75a78e47a6199b264f1a625c2041b2537ff9a5f1f -0xa6dfd5d80065225f4c346009a80a49ec2e7b9ed5e0f08eda6d39d16cc9344bc2 -0x4d5dc5b631f7bd7b0d28ffa096f5c880e83b39163bce07a2267aa5b8fa64eb53 -0x2c3f89ee21a49c3a193c9f55fb58699cbcf93e7a4d84d2fe3abdc49934ed7202 -0xa78778fa39ed514ff9b3afa5b6ba443b6faab03fcb1d616f5dba7961ee962aa0 -0xbbcf29256dfedd1a27a191f31aabdfdb280bd9d17af0c3a290ba096d202dad3a -0x467fa19de0235b3fe42098b3cffe4ef433fa07cc10882894c33c415c1b139009 -0x061904a96c2bdccd4a18a6d0deb76da890f09e21fca79fed6f045f5a0752593e -0xdd15ab9db674a1c63423c11745050405496c199800ed3ad7f960b6a680666103 -0x0b2ba902e4ef7f7fa80451b57c5cbe0b100eddbadd774e042f611a578e37fb25 -0x867172cc2402d2a53f8a080a573649c266237720fa83283769c1909eed499c29 -0x68902aef43dad911c1eb66d16e03df7d1f57dc47af292582ac1fc2a8d8070025 -0x3dacb00b9b7b2aa57ca7e8c8b0f84e8cd1faa6c9b8d8be7f1cdc7d4406e4cece -0x063dec147669353fc893c469522a4312d27f49177fc1f8e1b5595521e94399d9 -0x8b033e2f9ced806e773e70637fe564cb0560d41e2586b12abad1467f43b104d3 -0xcc8650e1f7fb5403c63e7671ebc4d697967174deb580c5528deb0ef658bdc2d0 -0xf19fb7c7f931f19534d70a9da84fd9b039b6d5840a3144e93832f7ee0ec77e4f -0x22375db4751e3e9bdcabd7ac8ccb248d280124a33001fb7a97458640434944e9 -0xdac13ccd007ee6ab56624cea8019d9e524971b35187fa9588109dd3831d12c75 -0x078d450f41c58210f5530b71c2d84a79019fd3d9b9bc919107c4971145528795 -0x4d9fb437c847dd0eb32742b412bcba783a09d1179718cb2147b8096674b856e7 -0x75042f62a11f9d629af7cf57e3cb8d9f33e0be480d3841c75535e1d58fc598a4 -0xb399a54efec8eb753485136ac67988292d54003a03350bd364adff27689135bd -0xddef3deb3cdbc218d741896c595eda011b8971958883940da03f146badbc7cae -0xab72a5f2d2881550f1b5993b9b5c10f78abfc928cc39eab71591d87437836e36 -0xc04fc3f4ac8f0ed5990188090527b01b6c18df7dfcfcc8dd36af6b03d26b8258 -0xd361ea2f246547143f3354004e645bea291fca334eb69c2884ded12f67aed028 -0x76f59eb018017f7859637ab34f256d83608390f796fdee1234ed5263b943a19c -0xb78b96575f2accaafad646ac3af83de321eb3574241656a606984f87acb8525c -0x4093317ca3af5715731342930d57af072494033c82ea19320e23fb49e79c3130 -0x2f4f8ede3c6bd051b36403ca9cf5cfd17c8f4711e6e81073f7087280e0446fc9 -0x6e155e491cde8b8871c016cfac6c6915f54741a1d9646b18bea6074839c79482 -0xa6f00441acb9f1ba26b1b17d2a3797e9815e5a7b93a621df8381a0c8b69b6d10 -0xf304fe3c8e2ab0e9adca441ddfa7f838f5626678eebedbf743c6c9ff8fca8134 -0x4ffcd4cc8e9cc118ff6f2a5b5ef7d4e92b93152758708276f4e094636a9e7f41 -0x0672371fc54a08a0917b2fdb2b541a1de42ba99a3213335f730488234d1302cd -0xfed7620c7548de36fa0047019a52d4fa946e95e6db61c8579523418429d5d1bf -0xa06017dbf98a39b31e20b2416450ab29ad48e5333476db6274c600e12e269990 -0x4939c7ffd947e37d4242c0bc747d127a06b8d350482152be560fb9a95e835ad6 -0x1d97b94dde397a4342f4480ae796f97e59547d72de860c63128972fdc81a99f2 -0x7afa414633757f73f5d5e9019b30a3ad2905a961f3ba61d19ba822b9b6abf079 -0x0ff9ef2cd676d4a2232a06f8c26c1b3df3904d6d52f242e123b40d7fe83e93ce -0x919163a4c83ff54e3cce591f7da645176d962d654363a7550ef6130f08d9e45e -0x7595dfc794f2b57e4716a3494c3a34821b88feae1536c96bbad8e845bed7001a -0x0fe2d9e4593ca1ffc9b32444b1f2db4e93a8e8074ba11456b1e73e3757f1b61d -0xa5241c29ebfa9d33dd9e8c70390689aaaec7f62b99fa7ba33eac4da457ed1b50 -0xdbfdcd9dd766d83f638bfff6dbe12c58d9556cfce5dc9bbe60de3627e4864268 -0x821c4cb52bec8b79692e73d2784cc8186fde373014bdd3a6f26b777dc42bbfee -0x391387ef5f8b1380b99f7bea6216a00898926efd5ed601182dad81dab51edb47 -0xd60a25f908084cda55dc64b7dc3f52e466dc28a724b730cb779815e74c0c84e9 -0x1bbcd1568905b65d088605ce0454c5d291c699f2e6c9879f15de4c347b3c0279 -0xf44124ebdd5772854ccfc6c4445b7888cf829516314bceacb41a89432a3823a6 -0x178102ef9a6b946cc3659c1ee05fd2cd9dab0de95ac469e7ce768155d9b9e7ee -0x7342490e08891019e06c4b091603d32d014741aa2982907059fcf3ba75a7d26d -0x929adf1c94343a260f425a192a30102c80428c61e9c761a10a8ca0edb648368b -0x56b6d5510d4f80ed70fb0b64608d5d607df7e37d1e834cb1cc304b97d89d7197 -0x2ff8289fecce06db8021d5f0f24026cae723983343b3d05c94eea68bde0f8d14 -0x387cdf0afba7c346c875fdc784ec576dc49fbb6a5c2a9f130bb7848bf0af29c9 -0x33683c9d93c6609ea51050cf3e4e7c796572d995b70f9595deae9cf11ff97a3a -0x5b1b4d60b5e81d02994cf44f8da24cdb42cbc74910dc5c9faea66d0887b7ced6 -0x66434b45067d2bae61cf0b58190fccb47b474306609ec3e72dc0f8a93e9b1e9a -0xb18aa3de3831fb59f0bad5ca668344cc37de09934827aaef803334dd4543e0ae -0xeb545c4f803d5c47835e81d0389b900682767162589b364f1253e777f0cb2f73 -0x60a189dfc6d7474eaa33834a83b1d831aad9278db8f6e3335a4852b19e677695 -0xbaad6ccf9334c9b881e89e65bd9c6c1c9e8ca44d0b1b4c1b7db6431c8ae12c80 -0x4a36322980de3b8c1448c1d9c211b20b8679d0971cb7b9205881e99656900df6 -0x726c5ec238d9086d4a81ca844844dfbe69c029d961921ee41f5fc3baec50741a -0x47612b0ac922399dc43a08cfc826e20a2e9b56990910a4e7bee10f4154d5bf38 -0x74816ef0d5aa5124bd951626a7dc5d00cbec390f072ec27c75a2acc858636f84 -0xe82ebae32cc0563a463c990f796e18890c89892fc2fe23bf799afc95959b1a86 -0x948f70c1345f4bdd7566c1efc3e8090a9f5ec76378e12734ef3609cf5ac91e1b -0x0d44709d90ebab0f20a35273b87f8a4876976e5b05b0cfe5f76bca01e19d844b -0xb296eb46123398841741ef3b3327ab9cbf9df64d2196c061551fb3801ac501d6 -0x6835ec58c9d4e0fe19472c656d982e0913b573cfde1d39f9af49d7f5e2e3a39f -0x8bfedd019a9988508081dbc9737ba62a3d330bad8b237847245cf048db4be720 -0x32fae2d6ea4eedf6ec9ea2083688950a03343bc28da422218d40f9e52ad8338e -0x0e754cbd55ebf3a0a86e16234c672f476400f66c9ef1b9440c8ca6c46025f7c5 -0x08ce6f91c774566d368ada5cbc3f7f7b1011ae48f5629e011ab025c86d8e567d -0xc02b44497cfab914628ce568d4cf7d4948bab19cd8561de2cb2689ff8ed34541 -0xe7ef755ed0be6fc1313f2526c7eff0fef76f272c4e7c60364f198ac07e99e98f -0xf18f69efc48dcbb98fc61ac036b0adfc14105ad5f051005b615884792ef55a74 -0x1254edb1751bf2366568e7d4701f1345d8e4cc4871710fc096d24149029621d2 -0xec4d14f8ceb9f3d80c7d6c4e747ed455c8825c0ab3e3f54de3a4770011d90b8d -0xea14355c00da04416e590fee730c0f4b04c4995a65f9b7bc8d8af0c6d8d3095f -0x32203e47066bc6ddb841b5ab2363c518748dbed0e07fc7dfee2d1c31476667c6 -0x0a56b0375df1fa57e64f8674eeb65fbd4467b4bbc3d4effb63a0843ba1a51c40 -0x2b47f394f27cef0f43cd50e621d17878113276ad3f94789c089bd34783631780 -0x68302fe9b31a106247d348edf9b19b27fa3173d47fde0d5f88c5641275bf4272 -0xb0f458cc5947babfdcbf4a4e99cce0cef4263ea025fdf0d76998dc52d3b57387 -0xc45e1bcdeb2487dd9cd36e00be849411af2e23cc1633f2d0d265bbb7df2f2166 -0x7f7464e4fce311a8d6cb0a4b88b50eed5d23690b6e0d452795f09949165ff3a9 -0x44bf387448161c2e0fcc24191b660323012393d8f64ae8f7f7fe74e37ee3616a -0xf8ef3c538e35d6b5cc76319e02870ed390cd59f66598ff30b95b049c7d21c5ba -0xd7571a0a1c3920f7d522356877506b19596cfd4b35a3863e1307bfb27cab5523 -0x9f688f11acc068fcf39828d567f6b007da6cb7cec48be88fa194ebd4aab05f17 -0x82f7808259bfd5ed8a1a840dd08bc850a7fc432e890e0208b83fde48ba331078 -0x215379147481adb794b1e9878f8426197c9a1fe0bb23112cc0e71f0f7f14603b -0x527068d927daa33dacc4d04d6418af4e0e990b054525ec9222041f0e16b4cfe1 -0x1edb22a59d735b9b0aac1f9fd0c056163caad9f52cb222557abcccb0886bc055 -0x14c9b9380bd8243472e152f49cb341cd81625acd41f13a42e4bc0211c0ae1d10 -0x7450f0a528e062c2429603053a74e3ab290406d47f7f093b7390c56186111e67 -0x6a55cac0c11e5ad4949e858e54c09b5e5a0ad08d06c552e75e899cabf1691ecd -0x39a265c598e53be82c9213610eda81b82e551caae8cb7f3f95df9bf45786b1e4 -0x66af30ac86c59ba6cb3365644eadf2062141f06d19c3106b77f64c1773bbf2c1 -0xffa5c2d8a370e7a107b1e7762c7d12ba9f9fc470a75099ab83e6ca1fb8cdf333 -0x86dd8cce4ea2d571950a12fa7cbc688e73d7283352e37a68af2f6b4c89388e76 -0x7604498ada114918d6aaa3224d54d4e06c37c683734138a27efd6258581cfbee -0xe20adceb33357057fd3b09af958e9951b5ee4fa9e203cb7a106d9c41c0f5498e -0x6e8b6bea5c23604787e454b0a756b51dafad857bbc4b598bcbc96a60ced50d7d -0x7c00f3bc88c6f26e8809f2d28a2487bd4798ae052635b5ec7295a71ae14a5eab -0xee68a2fd168c8c0a69901c9198d8f767e603cb29a9f5c1ceb26f81baef28f155 -0xd92154b7c8c7c1bab3dd47eb45554882c6cd4eba74088f2056d0eaee215bde26 -0x2056c15db13073247648ff10ddb14f4facc37fd705d647b716f7253a20d9a207 -0xa37d9d8a287732a9274d33a4cf2f424f6197619a9418520e0f3a6ca328ad53ef -0x25cf1644a4095d9e7d8e912624bcf4c1cb12344fd5cbad8a2444537e7955bf22 -0x220c75fc9f13a2e182c870847bc4522f27b47e239157d74501d579ed19c9151e -0xf1cbaf5a64ef75f91b8851532c8008d728d3dc7fef68a192606c5ee25aa841fb -0xaee15f760a5a9ced9cd656a7a7210665dc2af26d05c1f6e1f77b853e703a211d -0x42b7dfd980d675c5dead2721fa9c3387e91c0363f7fba441e09b163d7efda61f -0x3741ac92d04d2cd5aedcf36364880e3446f8e1a617346cb7f8fe15c9d0defe36 -0x1b4e708f51d92b7107c7b4c4e5365331eccf35b637d580800575706fadf5364b -0xd8162c953422197bd916d14fa55868525ef33e982ba9adfdfb4b8286f7e86b8b -0xd8d199f7047956280b5cbf3b7c6835a9593ef38971b42a00874d45c5b140e3b8 -0xf583108b799f0e06cbfb965a2a772b53ddff2697adc61064db9f77b7270b9b50 -0x201dc3d4fdbb580bb03f640c304065bf8c899fd29204021b0efcc218af892472 -0xf923aa591e80236d0ffd9b0a098a556cc3578ec2b6cf124e1dfbe032c89cb5fc -0x638035c5474a35ecc39b2cb9b0a8fba2f67d4f2d9084724f68e051861b236ac7 -0x9977bbdc56043a88c02706212b84fefb78fa71cf1203a0e096a36f1c86f31c8c -0x864327257879391f5fdd87f1434c479f1e7b0ed4ba06b4c77af877cdc38da1e1 -0x1133ef08cdaef79483f7b77cb931f32b4f007f2dfb15f979f8fad8be741c8b5c -0xcad240dc7d48f32fbb91da1953386d19fe30b9c8915bda63df20df4fbc673e59 -0xab54ed156d023a05f958a33d1da4e0397027625e93ea46214e9f7375d90928df -0x21428c0e264101b0fcdf114cc1d5eefba3b9d53a4f145065c48924718d27f362 -0x1a0b269d8f0c79fd9a252787d9aa3666508e195a912577a86cdb6f99f3d2c63f -0xfabbcd39a7d8167e4bdf3871c154deb0131a327b51018c6afdeb7185a9b0eb50 -0xab9b4ac74377fe1d3ec59b2ba99c593ae0be85c4f9dd59309fa36f888092f07c -0x0440472095d0ecfaec0e94e3c9e91d8faa9d2d6931e6573c1591cfc2a51b254b -0x3072fc942490acb49d801b1b8054b822ed0cb2dce8823a3aa703eb8b02929d84 -0xfea32ff41359a4f69195e7cdc3f7ffc70e44213e6d8305c2bc6b56efac8796ca -0x71d0b767325104324f6a5b0cc7405b1277d4fb841aab84a8e597751d431bf0ea -0x55e59ccc8dda814427e502d08a5ee6a872d827abdaee8d008dc57d737ce5b970 -0x2a76ba54c6cb0def4a39b7051d4a0e0057083de38b39827428af0607a54e50f7 -0x9b4a01cf25cddb8157ce741fbae8c980ee611f94d48a09b73dd78a8255020011 -0xea43dd8073cab183263c2e3c87e045e393d63e7fd29f7ae11f02d2de5a2da018 -0x83707ebad72c96e89fa6e48480e948ae4026e54bba6acf7b4e60f8a4914a036c -0xa554d7a1f62a0492a2168af67c0c38d5b5455072a8124c1b146eeac01dfe67ad -0x029363c01d36a084caef3ad36194b19414b795bc9aa17b3ba0c3d569ac17e74b -0x87cb054dc062595d8be0e8477287bf7a48bf2707a868b194be268ca8e10e2a66 -0xfc95fa6769557961a750b93b3a62a92c0d58e2e7316ae9ce0ce0d8874d5e4c53 -0x63ca99dc8309fe1a417880b54e6d4d71f16efd1bcd1751e18991d8f1834111d1 -0xd47dcea22d33b81983c09a305937bf8e2eb4a391d2d03fdeb500bca993abaee3 -0x4e633c8ba62090f16c50064290b66c5e744be1f69eb89540a397064f8d1aac42 -0x5b07c2d8c9330ba8a8f3b47ce17ebff65f71fd961048f550115c3fda836f9ff7 -0x83aaccd8b63a066cab3078c65f26646561e18e476c53b9adadfdcfb5600b728c -0xce5b8e4290475cf823cac704382b8f1d5acbd01080cd4ecaf3b10bb38ef190a2 -0x1061629bf058aaa9c38468e7d02cd858492ea6f4c286d019937396361c74748a -0xf04269cf348f0a03a0eff7d01b191b2757452ebf9570092750f69649b52d73ab -0xdfd838eb8d120fae8eec647dfedc269c010168c5dd0f3f5b3717b9a0d0ab3b83 -0x67a4dc935ce2c9593b31755bde6bd85cdd2422f85ff60fc0e51e8275c3f51e74 -0x9a6c052543bf0b479350ba2d44f35ed8f4f228318dbd5cc4218faa9b49c17bd0 -0x831249b2acce5718c7caa8cc81e06bceeacc1542dd7e7d117105444ffde1bd1b -0xa47829b067926334a518b373adb8d1e649be11a2ebb506311ff1718de0538bf4 -0x8a58fbdece4a0158803859ccf575bd8f0bb51aa7f7d67c72128b748d16a82061 -0xfde2675cd3233533c09974c00fadc31c8e39a312936e9424d2e13a32762b0dfd -0xb9be3e4007c95671788dec6cb4b6e63a5aa79499fd9be1b8f768a181e4e3db8e -0xddd20c9152ce04bbb8337103af1915fb77b8e9752612eec52ce27d63233a2a3a -0xee75f1ba29003817101ab3ac5088ece9ab3fec4c493250e5606cac5408cafedc -0xb12c61ec8d29563892a340423089835d285830ca6eccd7e7303dc8338ef5711e -0x4e457553114bc8d286799b804d6e78b50283c721f00e1cffd442ffbc2a5be8be -0xb362874af3cac1c12c170442c857087cee6296969284d026e3c6230a72641204 -0x06264f10951879c5f3969cf9b58b9d1e0cf2707bf873184deae22e4f55023d75 -0x61bae39e0395adf8b3886e49031e856e7626811b8e9a9ff426ab4f331d712679 -0xdc9e920654227c21ccff6b978841af273ee67eb9c294fd15c8be2004b2a4d16e -0xa90abe705365d633052fd9ede13b726e24dd613c6971c0fc01d7743956566b87 -0x27c2dfaf8994b34a96d18ec52891fe8eacfb693e324e64e78e05348480813288 -0xd6d16e891d636ef549cfa8b859fbdb55525efad6ac7c1139c63baa86a9b55cf7 -0xd5f20172719c84e0b8245b9e2015daee94d861718bfddbe1ea6cf79af38a3c93 -0x6dc708a8c77bddbc46d12cccfbda22937e62664cdc609a3587f74f040cb0700a -0xd9d99f904bce7028b720f16a55ba1b23579605391cb168f955802e7bc0a84779 -0xbba6407fe76630cdd85b2a9b84429ff423bfca38d5692d1ea3fec73f7da1563e -0x1378d400e8a630c69c9103dcb8762ca78e8546630bab03d97cfd23772abfa0c9 -0xfe99c0690c67e6d91e0aa77ba86383a719ef970e6ff8aad37b33dd85c1ff91e7 -0x1319b85f390562e55d916339e809e467789f0887a84e45039acc0d870931930c -0xfecee8c2b05d4af1fdc2e4fa1ab1562836be2fdb9c403a97e6f0c6026668d067 -0x1606a3ab6729c963d75a595280de7f53d576161987850d407044b0e019dbfa04 -0x2186395a651d9ffdb6c3c89aaa855a2ad878d040299aefc8ee367206f7d0f171 -0xd7b07c604a07e853ad2ccf7d5913d1986b17ca53a708347b9672e0a988f81f84 -0x1fd20e970d5c73a3f852e35934142cc16246c5dfbdf3b6d9f849974d0d9ffeda -0xfef01fb7c153b96846a3d7c10ef68af5dc270cd157fc8e28020fe1e6efedc0c5 -0x90f7b4f470cafee4c9dbcd3a3181dbf0a0cdade3db09a068839544a89e4fc66d -0xa97d4c9f692d86654e70150c64115816df98e80ad1db113e311396fcb0f90525 -0xed5ceaf1cf0b7baf978f7e51716ffba3298ca4c853ece59a3fc287ff67fd24a3 -0xf255560c81195a6df792393a8d76d7c959892dfe0eae608cbd1f61f8ebbbebfd -0x28c14b278628ee135e73ff19e42d62eecfa1b718a66cf12f2c4f0cb0da2421cb -0xc85a85bc26a2565ac418214c497342424bae0ceadd9134c0fc3a7470a6b12e7e -0x7513d488273bf4079e7007bcf5169804d870ff4bd2cdb0c686ef7db9b6c0002d -0x9cc653f62cbdc1915f5108a176a0b4377c03ffbdf7603b6ac02f148e5b332f19 -0x4ba7ab17941cd1a0f491b48b3f9a44d4cb376903463d5088bb9a90adfb43351e -0x7a3c5deeb690cc85d801a1551f6d8a52a20b968bbcd358a3aa7bb5f5d89866e5 -0x8486cfd21063232b23b250668fad0200dd95ac456dedfaa2d077d9dbe037335a -0x4aa3bfeb84cef0f1362cfbf3c98fa576fa427ebaae614412a0f98f6ec306264c -0x417fa755026c5b430e140a5acd4f857b6d3dec3454ecb82aab2249f93c17dddd -0x73addb4544f150d9d263bb96bd83d8c7375d865b77021ff9a7305a4ef4e01a93 -0x76aa49388a30cb5c6b415cb9af8ae50bca54e1f965c1996b181056a1702a3e74 -0xb6ad61c26ec4b365c1c82f7d76b9479c8a7ffb169da4573733790028223eb81f -0x8ad3999a38f19fc8098016784f1420b677829391f014e365a1ba2eb5952d3963 -0x8b7a412433945c2907b2cc2afac9adc68daf5c6c7c3a0b307776c6baaf528add -0xbfd96b3efc67908fde41a966ca317fe81007bb00f0b3041bf8ccaa3f0ab3ee0f -0x2a43c4cffa6b01fecc283066df000392c18bdbf7cd3336b1711112aa369fa032 -0xb59791d3cca20b037eba32849043cad3e014e7760eabbf4a3a4b613f78e63c90 -0x659be6e632f8567c5b7ba0b555ddb38c20b355da60d096316021d2638bbf4b93 -0xf45fa9c5190d5d533416df3ad35dce75ff2e7dec68241fd96ecf539a64d46459 -0x14e0b7e24404ca431b3e23f21256a0c2f7b4674370f0b342b528307484df1bde -0x92a27bab4818f2c8b750d2aec8f5d3c0e2891c512c22929af36f0ed38b6bbf63 -0xe74c937376a833684d4ea4a2ff99af94038e5047f4cecd4a6347600527d4db4f -0x6bc58c76f1700291c42ca5472cdcf8c2a3c270926bd0b10257582679f77a6a1f -0x7975d9b93ebf45e6a6eb9838cc8e8fa2cd65be959668751386650900bd570856 -0x527581d7a1f417330b36f6e3d74c6f1374a3dfe1469615f31e075f012ede1cea -0x074b9c8ba60647385da459d01b564726d3119e778b638cd05d27d66e3adbc509 -0x412bda1279ceb03a735d44488d180ffcc2d0835dfa477ac3d3e96d3379146578 -0xfb48dbfd5c5a5b354e1ca7a6d395f7c409330d860ec9cecf2de426e962f520ca -0x2c90f53f862935fae398bd4371732ad8929436581422d587ff6bd217559e092a -0x0b52db6c8e37d05494e3b5abbd44348ef8fe32bc107c05ec427b2c95fd55536f -0x3b6a9cdf21950e1509b19d93e321c9ed07cf7bca03cfb583a515695ad6647a46 -0x50d1b23582d335b8b3f0cf4ed4b0ae59dc48c5f8174089942a0eec727f58f992 -0x77a86c4d9127fda8910990f109e730100c1ca6145a0c14d95fd9d7b183e95d74 -0x79cd3c6059b84099efd1581aed09a8115e43ebf0dd44bfaa8ec20f2a7714544b -0xdf4da5812dd3cd6e8c71800ba7686274a6496314caa1e168944080bc9eb52960 -0x45101d5296480fb8585b287e68e90ec973eb8ab37d8bae35432fe25bb6e8fdd4 -0x00141fdaa6e1883225c851fb468fb5ef0aecc07c34ab92e2a98e6a99a0e92f7e -0xdb5977103b225aac4d2fba4576ddc0a4b0425fc80221ea8385a5fbaa4e4fe6ca -0x5de667a4e32ce76a85d4e30f413de9c3d2ba88dc60d90ec6404ec9221b647e84 -0x4d9c05f5cfe42b7029c05332ba8c79b292a865f76b66404c3a89eaeeda28ff9b -0x29027c26da74d761a897708c25de01992b715cbc2716cc1b6365967e4a48566c -0x0b9c4566ba082881f593aee47b309caf2506053a56a8373cce71149fd0411def -0x38428a47dbc45f3bc2f389f7c1dea75b5b825eef41a7155e6535d2f7d9f9e3ae -0x0b262dc272af08274bd6e89393ff7f465b38d63e0e679fde8838bc23f151f2c3 -0xe00029b099139e69716a02f8c1eca31cfab8397123ce2c583bd8f7c1f3d649cf -0xd247a951fddf76edbd0347ec30a0f27e9cf4396b9b92054308d4ae95910108c3 -0x900922629ed933444967ec703afb122ef80de58bdb817befcacc67b830fb346d -0xed44531e0841b1c41ae43c0df870f0fb028b154062e3d7f78811a91c72b738d9 -0x2c0d797de02a0adccaa248eb4fbd07db8bd64cee6845cc2be5a3c2eec98a13df -0xb60923885eb75d0bd3e2cf38e26c1fc13c3335d1f8f903d101be537d483baf5e -0x45ed2618a5cf94df4101624eb33ab4626eb9de1a7497647041784f06e3dad737 -0x402f45db77aa93dd97936518429b9b21bdf212a25985774960c889757093b6c4 -0xab7788d6ce29b07e013bc98e52f8fc4acd7f185344bb4191fa1237eb3d31d0b4 -0x18fab2d73d1e7515c124e8aa443d58f100c8bdf243a716fc84c914dc348cc30c -0xc0d0124134b144a560a1ae1e44d9ef9bea6a2ebc1d9ae93ea425c2da4192cab9 -0xbf54b5f3d0e035ce3b16963afc560a56bcdff5c3570f2442fd706b2788cfee6e -0xf64ac7f35b396d7f65b8d5c57b7ae9a1e4a5e8bf9b07a4b1466af4bc1f264d48 -0x0dc5c0994d36e935a9cc045676ea3fb570064be417e25cad5c6b12c660af47ec -0x74cadf7c362e497f9d65fa44d1a3fd629156de2719365cce2a87cc04b18bc56b -0x04d028ec40632db69c65a595dfbf492544763f479c11a3b857463f830154d01e -0xf12123f16b7fe41e0a09d7c7ff625e7b6854d856945d6803b713ce23a71948a7 -0xd0f46491ea7533897d8e49ffd62470b1da0538dfff712f1d0c3fdedc20216760 -0x128ae1d9e095fdde08c52eab4759bfd9fa8a767875820141cfddcf711c7cc0c5 -0xed58d926c18678489c9613da0528def63a598d88517c8b3b22f31a4f746dc2f1 -0x43d323c66a729f945164cfa4eee249fa907cf856b10536ca2a31f3fe07053286 -0xbcc5f6c6971a182a5d2331600b05980441bfdba89cea187fcb16e0be9dceddb7 -0x7d92f09767710e577dd1c6c89f4d01364df0343f9198f6a88acc210a01853750 -0x541ed60c562625a87946144d60eda4f0b2829db41b050aea34c712e59d172df0 -0xe1e412122229726ce0d990652dae4dbe4a77cda900e578303418fea0a43be039 -0x189f4c2c2d7e1eaa58909479a7d455345d2083bd37279bd768616db17614dfc4 -0x73004c41d6ac4281e9ddae9effbf4fa498d14288d40c7dbb0488ac3f5dcdd029 -0x29df897843610c8a16d1117495f4c004d1d34eef358b72bfd54a09c89e204509 -0x90d8b23966f0d228f7899d6cc8ed8b626b32ecf0672c9dac67c947d57241e823 -0x146658875dc6716545310e4f4a725fa2dbe8481a7cdce7e662b74cc7b92255f1 -0xd915ef04968bdc20bddaf1750843975369687143780cf444f148c99be88081ec -0x55240a2fc141aad2f81a1699836341223481968f46830a168307592d59fb05b5 -0x4c99abc0f15d0093178ba4026bfc0561cccf5e0d8333c777de1274b74d3c86f8 -0x27e8194817f54b8dea2995f5965c81a1bb68235e3e0b254c6aa9607b1d605bd4 -0x761dbc2f8bc9a2d61f3c8f942f3e7076984a98cab4efa90f4fa6834c2685efc0 -0x9e9b068d832ea838a39d621eb8f9da4961c81cae677618ade3f6438189a234d5 -0x21798deddcb7fb6e7d36129200608c1a005941c8a0a1a73880217349f7379213 -0x88362bb12157e7fe8abeac9f85811198ee4b3467092b86cdfb6573c9715b9214 -0xd588b2763e47b7bb3199509c90e470b38e71cbc2a9db197e45962f9c52226566 -0xd04a290df505dfa0dd3dbf0790dc5e495a150af3ed5616e815bbe808c59d5b97 -0x3930ce7ede87bac7f3af4d8bbde56083d328be3c2b754845e8c5514fa9d1f71a -0x3f25d787c29b544551c1ac116d845e99b43198aea9e01e1fa480a5af2552a5d5 -0xef3c67ec05b1de3428dbe04d6a0a68f0ee5b6e21a6e4ca1bf81e5f8e982042bf -0xb441fb410dc082be472052a5fae66e3c49ac967f7b65b9fd29a389cdbb7c7fef -0xf09dad7c2426593e63f2cc64fce298f408aac72710641f1c2e57c1851cea3d26 -0xe3d368d930fa1a6c9d212214bdf6b73e42a6437154dcc71c0c86fe093d7c0ffe -0xf40cc4a8ba65d311e5b23673d7b9ba9f8fff020f2a0bd6251e2009878fd5bf53 -0xec1ba8dfee984fd8dbbb036d12fe68587a56e4d89f8f0cc3d8e409765649a952 -0x29b3d5f32fd3601a5e8daf9352074d5b5873d0b7dddb272f0ba1c992f71053ac -0x970b6e00923d460abb1eb8fd4afe16dfff8084984cced69d4221eacfe33e3f85 -0xdb66c37c9de568e221f7faf75553e10ac37e479e4237ae27a7e5a45bdda7666b -0xc0cf32b4bf9a3c6e5c0a8d32a1a1da3c5fb503e4fd58780a38866d856351ff51 -0xea87fc1a8d3d7166dab4830c24412816f98619e4409cbd7f6bf7aa853b8ed30d -0x28001fd4e483bf43113f9c902528e9fec09a75e4446ca9de13079f58f6c43459 -0x3005489d7414e5fb312d79fe6749b8cacc8c2634c22113dccfebd0b613352202 -0xd84fa13be5cc4b3717cda2307eb873140140e9f2b26cb9b646ddfa60053f0c05 -0xcc286e4d85217e7fc948802ab112f6b881a961d817ba5153b4d1d6f1321c5aa7 -0x5f3be02a0ed037112e9b5ce422eb70818e35a206c25a551625d8741f5ee2ef4e -0x0213918fabe4071755f49c3168fad3a12a683a26a51759cd03a0f02a47999793 -0x6217226cba54afdda9ef268762310b2c960528ee880112b372a7c820c39100ec -0x5d032b6f66e4118a3e2283262c4573d0caa09b6e60861c29dd496ffb06dd2d26 -0x8a46659439bf26fdc5f9758276906357a29cadc69f1a4c833cf7f6e52a8bfe81 -0x4c9de1f9d59b15758b41ff5051a67dabb7eaf6d1af822031544403fc5d71de46 -0xf73820dd47e6a68d5233b0c84852f172a1c1207031af43cd5ae25cfa96d8c81a -0x5a053b678e142544b2ea9c7b957540bb3d15e997c7e7ff0b4c62eeacb92bd48f -0x2bf9121af9b5b68ac192855f09714335f627abcf120b83f70d8d517279ca8bf2 -0x860dcae8920aa389ff30c97ab1039ca52877e37267d35ffd37b9a001661caf9c -0xeee6b44bca7d2a7ace09aec129dbc37fade583df57f0e79142cd7ea99d4d9de6 -0xbefdddd7140dd8438a793d67c007dce11b87981babece3de99b28a93a870c047 -0xcb44b040dbdf1c2c5f4bab4bff0f64af261a94c89b131061e06782abdcef053c -0xb8d1b283a7e55d8b679b46f8263b4b2dcf768719ab649d39f4124e19a46c0bb2 -0x7e2919d62de6c7e5e615604cb813b5d8476ff7d47fa9cf4da3f8507d75a30c99 -0x3c6902e3ad47c9a8885fc5dc282fcd1299ff413d16b029f5e3771c0015866382 -0xdf0197fbc0e506851206b60ffcc60722abdff171657169cc14395ab4630cc235 -0xb5d885b4257b9602263b8726d38279c44d3c14e3c430333b39d56b38c09d87fb -0xed7f50c53718fb052afc7c2c949dffa65f6917849ddff938cd9b8ebc631210de -0x971284f5383b2435c7c911cfeb5fce24f8a0fb72d9e67deec9d3deed53725b46 -0x3d0eb78479e7a5530ce72b5c1878b711a618772da4735b48080ccf48c1ed6940 -0x52c199b99b1e676410b13b123332e6a332f39886cc480e9e49eff31e7482414b -0xc27a84e58b9295cc8ef1a9f03d59c96c175489e83afbb71719a8753ec331c119 -0xf000b4879269f015718f28823ac56491bb25425870210f0c1f2b61d339a50b36 -0xc03ab3c5bb0989f9fd1b1c9cd9b145896ea3a9e140d4391453b10eb747031732 -0x7b13b78ce310e2d1494b3a175b5889064cb0fc4d3feb254345e90ed443018058 -0x50fb2c6e31a868b4f879cd875f8733cf878e4c0d03e91118eb1ed0d71b1d82cc -0xe5433cf28238ec41a248ed141f04d6c77b384bec143bc8d131893268331a89ff -0xdb4e55c674b8f9ff5754a7cf7b9756654984f241a22b3d074dfc4cdff2d7b1f2 -0x29f476f894039d7585473a8b5117f0a276b82c47c2cc64dddc4964fa02894f78 -0x303aa48f67f69c383d3a95cc59060f7181fad23152cc7878e8b281d2708e5bd8 -0xbbec645365b83453b63482db6683183d28373308105668feef062ece21e17d5e -0xac02280cb9ba68920a223f7e105a08857d8470184856b0c8ff9b3392d576757e -0xd11750bb5a370f26fe32bdf4293315467fb922fad0c0c0ac91dfdfddffb80df4 -0x900ee3d1d916231d1ad19a659d19216859d4af6f644ef346fad8cdbceea40a7f -0x2cac4af9e3d6266b3ce0d9e8f58b0b429fd59ebc74bc658ac921ebc1107b67d0 -0x62698f437b10f816a5b8eba4083cc8d12fa0b755dff164c2f758fbd585273557 -0x1f42f180acffdfc19a103842c146840de55eae0ca2297a04250851a7eaefad07 -0x49740e1f3587febaa8a41d100615d663330f21a33f4e97290b499d596cfacc8c -0x62000a585f6221d161f176c6f68158996f9ca34870abaf04aa0c1b5207e600bd -0xc9d355c4c451b3041e8d0afbb98d8f8be60ed965b8795ba0a3045ee99563b0eb -0xe6c2dcbe0cbe8c8569a91fa35674ae423b01e8a46b45d4816690be749d221e70 -0x4edaa4124d97834cab3b602311a9fe6f8a2758e93dfc2f25cf25b33dea123324 -0x960f02a50d750ea013881e96bccce933644659481bc8251680e6433481dc5967 -0x813fdfd7b4b305be229192e3bb4656b7377fd2c337ed6f4ed77607d73c3f04df -0x32b281c0454e2c51175569d74d9449f3fddc7bd934a6cd3f8a620270fbddd407 -0xd7b4b7b1e986be8a020abb2c3beb7d53b20d459d65a7282f7e1fc79e647fc0f1 -0x5ec5ec3d58d83633bc0c5e02209d9e9d8ded4b0aee2ea4550e1c008c68fe7c48 -0x5fcac0b62918c4bf31c3527525c019f2f7df14389b58272ec6ac341cfff94d2c -0x4cd923809560edbf4c144b5b21a3ec9737e3084b87504a0efc8da469c974eb4f -0xfd50fe43671c82c9615ec0812a14e319e694c03057f71935717ddb0b0e8a08aa -0x92a28af73e83af2019e7988993c7d6e239a49a4c8a785996fada3041ad5f9acf -0x115070a70522a5ae3d2059eeb97c66dc69478e7114d4f7176ab7df9add1cd681 -0x2b645080d7a0d873dff0577750323294eaee0727655610cf6bba4981b4358ff4 -0x41ba22a1ca85734ca4e58f538bbf70e3bea9d7faf565ff8e19afc0fb23e24bea -0x55e78734f10a62208a6993301ca6034261d6b6b7a97727d717473162816c52fc -0xe66f40c48a9fe1db3cfd52f8f05227614fd24a37d4fc8171a911d34e077dea60 -0x5ea14290f714dd187838c7e0f8f5d5aeb5fc1dda2bd4904e165f7548be67b052 -0xa1ab7d69b83ade319a8a5c7c715240e9ce4de5e15dd02e9aabac1d3c7a10e5ed -0x337309f0bd1cdd536fa3e36ba078532bfabdcc57b5c7a4e889b4e818e5a16b3a -0x9aac5dc91ded0875660f89c2c6619a3c0a4f5bf2617583e19a9858abcc5e6846 -0xd413311ca417fee350246ff0a1314361551e3d9ee1e84d675a4d4ca0b4f531cb -0xd975a6d40d0fa9bd9270fb93f0247222a511711734cb15b79026ef96fd97e388 -0xd62683a84aa6304340bea363a38d9770895a6df36bac8ca71ead657df8132771 -0x02e36bb0b12977a2bcda4dc14fb1ecf97a949f3052726607e70eaf65ac273bb2 -0x44a80187eeee171b6212bfe917a9418a8f571433606af2822f74b3cfbee7c0cd -0xf317a527a1cbb907e651a75cd5110e1953104b17b81b6fe52486200c3598e783 -0x14c07cee2c15a7dcae77c13bb5bdf77386088cfb27b448d8cf4c2f9d7eec8b95 -0x5f211dc6782c0762d1f641f085778ac7f454322a8fb3a326f396ef3d831ce1ec -0xb0700e99b01b9e6138444eb00c61e09416a424a069a20460ddf2f548099f7334 -0xe5b1cf4b829dfa941fe7b653db387f4a069618cda935edb5d609f9e6160b0487 -0x7bfbaa53ec784797041580ccbe9d9ce6c719bbf456ecc68b8a1fcb11a3194b56 -0xc5e9a1355eab0204202c76c44831a9823ea3f705ce3b8dd6bae32588767498c0 -0xc94c6c38c09371f767b81a664a989a1e1ed0626802d516dfc69e061c255aedb7 -0x2dd0180c6dbc3dcf267b8bd2316c68a7616b245ea674d14a62d40eab038c8b22 -0x87e8e26c6a8cf8f90c39938015cdf01a23eed0f6d53567c8aed919f2fb58ad70 -0xabc0fe6ce060dec74305ece90040eb55690cea0d54cdd7614908c12fe19cf7a9 -0x11b5235c98eff4814c830b65b2c070378362d1b2f0dd75dc69339d641f1dec7f -0x04b38ee08cf5e584020f5320bff160a5d993ef765f709733f59d18925066b507 -0x93f358643cb9e5be690552d61b7915c8c99a70cd8c56a7a2b28a2497d3f5a562 -0xfe36988c10cf7861f542fe74e9c3f1f148386dbfa439c39d57ff097437c77079 -0x458abe05bf01506886d978fb43c44aca425b4ae0b27216ce8f88a5529b9145c3 -0xb89e9f5e0f1070d67cc5706b09efed0764b60f147fce11eb7289517ce789d115 -0x48a0a45ba0ed74aa9b6c5e26f7bdaa4c700bf5c45ab2a3d1ae6838db94af72fa -0xe8d4b883e46587ede96d382ca3ac0960e8f5fa1126bc06556f4ae01008fac8b5 -0xaa9b5f71cec50a9838709afed8e9849638e2a3803554b697092b1333681cfb93 -0x78900c9c5949aea73a66300795fca4c14d3fa467c989e526ca0b1401e31a031a -0x9a988f69ff2c1eed9eec0452415d65e04928dfa94cf436e97c5b9f9f0939df9f -0x6ec5cd80f5075afb003b2c5dfca83e3ca8f63c8fdca01750b920f2ae88601900 -0x8e0a5b07efca3555fac74dab0d59c089f22f466a0f574f1fffb00ec5c9f41bc7 -0xb513ed26f1fc868fcf7e6ddcc72c9125d0414653e2885e3255a2b8397b5795ae -0x3596ebdd9fe47b89827be4b968a310c8fab7ca42c623bf9ebc2118a36b55b57d -0x314be7b78875d038562718e2733a1328cca508ef76ee371b40da5ab6c70f53db -0x11a16e7b64fbdce25398aa7b3498165d5329a7b12b2cd5b571e7373b59dd00c0 -0xfb28b698d6756d8f1114ae1646d954f692b1a25645a3d62928cec2b6b7897e08 -0x6d197da740986d6caf2b484c49142f88bd9172b39005ab68ce6dee6e1f04e8a2 -0x218307435cc85dd7c43f03f75231ec8001e2539831926b9789bf690c3c4dc552 -0x7ee2994ed76a050bb948633f5a637ca23ac03cc0c4d5db502134bca371a18808 -0xf844dad6a9e428c1a56bc273c36e9a229f31d21909006d2e1ae63fc8b385e5fe -0x705533052304b9b6bfc3ac9163bbf50f0fad90013036ed8be9b826f50df7f4ee -0xb28de37634cb485d834848b5b66d2ef119845024d21db3a92815840b54d3ff21 -0x3f8f07908f35837e68554c512b1ca175ddfa5b70248a1a48d994bbcdb857cdc0 -0x3c5d4201b43ebeb575a65dd04d7b1ea66148cc5b4d1e40d0618eae9e85071dd9 -0xcd2e94131e3e6a19d1850455ce9a761007b2e5c9c9b1889fdcb0b94cee7aa008 -0x32c58b1e43446831f1f6e548d9a636f1cf2800a97985310f85dbebad696c20cc -0x1a3cc412d88f10d305ac9dc95e864b608b974d4085edee5acf8fa54ca29131c6 -0xfeb751320fe8f7729d4847eae26c3aaf3962e6223c23a445ba1c6c24be5ef57c -0x220a35a28d332698da6a7ff7bfa306b291c4826cfcdd4ace0d3754adf357f5a4 -0x0d7e2886ebceb265a8f7176162a0476903c587d2abeea4f21e257bcd891bd23f -0x6afc4ef9b77a4ec1abbbdb767e214cf8f95c714b58f8c100c21691a721809e8e -0x84588843724b40440af9f5f16d35254b5d1e5851fbdeaa9e666563418dbd06cd -0x248ba3f7883ad63a808ac5e9a682b82e44d0f8507f212cfc61df8d0e40ee180b -0xf21ec3ce9063c51b86a85d4b679acc403dc051c2d0431a3cd51d8fa97d8ccfed -0xa8e9e13add4e50cc461aa2d2a2aded0ff08e321d57ab1666a8a7fed25684f343 -0xd5e7ba9fc2424385c98cc12670d26f2620c0ec0a7bf72549c7757bf837899f94 -0x9cb1c325bcd3401e72c83084a88de305acae42b3d4936113ea070c03be1baae2 -0xfdef844d1fb6bc89edd35944897de91ee6572115621e2198ebe268b9f81a56d0 -0x82216b150be40d6c77e07ae3c923b890cc5dab8d36830072ac604449d485451d -0x9ca4e7ee83ee5c6035b4ef2b69f91fc740dc6c88088f7704008cbfa73d9a9d65 -0xc0a1ac55e3449b4631230b01a9e218e1531988e79b5d6439c6fb42802b0e185a -0xdb38ea86b3a40068520924aa03be4a92c7b037c9d6c21bce26f4c4c4bcb98f75 -0xd660722ce142bf3197201f71052fde612356be5a2c2ff428827186530c43686f -0x991bb465d843947f10837061ba8056fedc88ece2a811f4d8ebe3172ee7268b4a -0x4aa8630ca3e1058ffd250c5fa0e2c0a0c48ab851d10f6fd946939372f4da0af5 -0xd1658903415fed2e4b281b42271015ad6cb22edbe103dcb465737d6c99260fe5 -0xc30ad18f293bec2cfbef952bd450388f1f814dc1ee0584d109454ac6296093d5 -0x088cf89b2f3be3f419a796111361aada7955d672d2c0eec8b230df0ed4b7484b -0x35d20b182702b5e6720ee1bafc403b24e367ef46a021771aa5f759b62ff6aa7b -0xcac2b692998716f5425c5a02025cecf41e01e39194d95a8dc36bf83e9dbc55ff -0x5b10825590e530e689588453ef842fa9caa0dfbca27a7a687442160bf8522685 -0x5e440c975e24b66430790e6b1efd872dd5feca64f7007077199a338986dea90a -0x0b910720de72325a541812a9fb0243a34ff487c6d8e0eb9547de41bcd4617c34 -0xd8ae49cf1b7c3456b5890d1033c142b9ccd204ca2a9992d41a390b0089adc9c0 -0x487dcfae820c913972e6d54edee906b656282e329112bf077cc4c38da9717389 -0x958961c618b62d407cc2d8185145d1561e82f37baf55236c151829251968e7da -0x67d253552d8a9667cb8a031981d23c56b1814b127263810791501f53cb7848b0 -0x914fd2485cfdd353555d3f3a48cfbd8069cf827afdf5d677ac33fe4bb44165b6 -0xd64ed615370c15c2f42985b87ec21e31a0e0bbfa0320a48364c01766b55cc79d -0xe30b815b9fd46e81ff12be7510a0b24cf2da2269f1c7e4ab9b7920ef5c689927 -0xa977fd284b843a020391d41054aab01e02449aed4f5549d23fd0288aae86326a -0xa763915d570e97e39c1243d7203b7d4c150a3eb77de3b00b3e36e91923cb773b -0xcaeb26c0d1c43c8524d858b026d6507e877e19cf9e9509bd9e9f004583437f9f -0x0b06dd16cf68cd708e058b337adfff3750189e60574d7178b1db3dd825c95cdf -0xb71c9558b7fcde6ba9c55f0e4b3d1360a68a664cbb4a1cbf6b8a7dca0413007b -0xb0b4d86709bc08649099eabef74918f1658089cef8a49cd3823734b5f749f5ac -0x7fa3520a901cbc47822474603facec0df2c91ebc38d024df326ce5ba2b50c0dc -0x1a412e421b24459cf19e976fc313c251fc138d0a94647b628a30e9080dd28611 -0xfea55a3bf9f65e05ceaf6109b2d22ddfe92cbf2f4662697a34e4852437e583a0 -0x3d9e714ffea4ed03406febcc6b04ae5bd870a872a1dcb05be574ca86703cb6b9 -0x64ea73a3928c47501b2f467b08e00bb0f5b53ee5dffe382d858e250166574771 -0x7ad2a47fae4cd7f454272a90df9c977fe24df8a4fe0b42fb0884989987e19e28 -0x5c0ea4634595ee8a1e9e586da03094d0ac64862b19132157ea257ae4a21219a1 -0x903b892f78e9b56f365f90c4948be3c94c56988eef08ab4dda60eed0f0b27942 -0x56d8cc4c251cdef0426ae07852cfea2d7a3545efbe7de004c78a53469d68bc3f -0x9bd7d798645d1e3cd4ebb24a7583563be28678dcde88d15496daa4be7349b14e -0xe0c24e25acc98425876946bfbc0c662d76a3bd0cf7064de0c5c547cc41c15ce8 -0x2d5737677e912d1681b8c103183a384e0cb4fce7e3663375bff5e235718e0c13 -0xddf00d54543f44d73cd00d44e6fdb9be438c4efd4d194f9ec09eeeed85e57b9c -0xe7c507e23b33c99acb40b207167b7324675af07578d37d32e31d656409b5232a -0xa798ffdd719c198cc4f3a5dacefc869eaf37894c8374105feb7cb53bc94eb722 -0x8c874a8a1ed12c7ecad46f0e65ad942d60d41467e635e0168a816d9eb320ef6a -0xbf8f084e34a15c6b2d6f270e8b4db083cdcf319d126892b6690e861a310fc7a7 -0x642aa824184c7b3cca37cb1c506c7010f75ad5e9436935be7a17af580a7daacd -0x474155fccfcc15527f46fb87267f681faab650c4ad93088714f828697c3b38d3 -0x8c4a10e598902c5291a699c68f799d912a9c7d19a7a6758d905928ed981fac22 -0xe96f1c0c8a9982787a1abc3dd216799e33da73fdbe31cadcc258f49f43e2b7f6 -0x4b394badecce6905afef651d35178f9347376a35d5347666ed77e9667d4b1f7d -0x0dfa1c30ba3635cefcb8e5e5e9eea3333664c517ab706668a996fae5c6d990c6 -0xdc8ff7ef3f6fb9ab580489cab0ecefa2acc7ee0e230bf92b5243a39d6e5d1f4f -0xb07647fe2a9d8015a7c19d271673f8a7a8e87260e0dab048cddf67de3fd43521 -0x7ae5a6999e6951bf9ffd7c328dd7d03023d10ee4153edde6b8465345eb323b5d -0xae3178e902fd6557a308fec8b2f3bc1ca42ec0f07187de9f15bf96749302cc49 -0xa9c3413c57382ae988a19d908329a6cb11007077faf847bb507b860b7a9e0e50 -0xa6e7423501378ea140909cbbd9c9df2d9c42158d8ed9927f06452de1b799efc0 -0x8aeff145fb2a23902063556ab6a6746f06de01dad5645ed0365512842439f978 -0xe1292f711712e5623131c8f258a195a8fbc7f8eb4730c123edaf78fbb167a9f2 -0xc62ca56ccad4ab5641b85de1e8da5c0ef38dc77b830d5f976c1db8a78e679455 -0xfc7643face3992f2180cc6aabd2df9a7d3bef0af51da2c0e8a865a0491badd52 -0xec9513037b01c92e483b835b6f19e17f82c8b5087a01f1cdf23937f62c599c36 -0x94321b1217a63d903373eaf58cec54da6b8c41a5819e8a7845c278b4befd9407 -0x38983d29ce771fd838b7e8c74821c1df32438b7499350f06c9693d21380a8222 -0x2b25b1543c82603e2ef1c4c590258798f92be3a6c2eb6bec4f9cd48e39cc7dfc -0x6c20de1f717f6a004697e372c3060ac0271749248891622866d044a835ab707c -0xf4aa61332bcf20362e96fc4fba7bd14f3e39fe84ffbfee949b7a967c823f531f -0xecf6776b3ddff9a49b249b6dfba8eb7cdff6cb0acd9b89febe52b7321c676852 -0x40b6e403958b81c5489324a001dcbb562354bd7ee78d9b0e5a2b7132a32eb2a4 -0x3b8be77a385986694c7370d943c00b67b224fc3cfd8ed9678663d59ba108da75 -0x056106e1abe94819d4f3f75aec55a40fd576e8f83a339accebf847b4621ffc99 -0x140bfa2b46b7c47850d379f04eee13830974925b28ad2210afd02f3edcc5d4c0 -0x8efe216175dbbdc05ca0c4ba81246752e5c2c4d46daaf46256f28f0fd41041eb -0xda4fb04ee92dbb20af54ffa9baddadb24eb87cd73fcd6e87e714a7e3d5b9b8c5 -0x753560520dae6c13505654fcdd68781fd9b23b88e672bcd576c3f0c0a844a9c4 -0x3529704c8281260411bebe5f6281dd2737f2a6f477c69f786b0b4a09a2cb8836 -0x5d8cf06ae3fde241602a0910a04f7f3df8c62848115051df9436c3ba74e91f73 -0x8399ec3eeb97df1be6bfffd3c74542dc83df97ff76edb6800d30dfb874161ef5 -0xf0b8990f3ea5884005f2b29254c467f626df0bf1783a9f95fd0a996f3d2a00de -0x9f92694310454408d78c8d7da2a972af6f7901277b5886d4550e83119462f446 -0x3abd2026ad426d424574e08c091cdb16d2381f26c0a952805408feff22d04e4a -0x5cb5686423092545be1bd82f8640c2558769bce777efccfff0f90ef7e79388b1 -0xb028a9cbfcd6f153a71c0feee67d95f1503fe5a8feb169e029f7234e1173574f -0xc9150eabd794f5c0a1135408996027697ec5a8c17ae7c2299b820132f89df437 -0x6c84f4f8c4851b622842a97b12decfc0a048069476b5efcbbee1a5536ac0f7b1 -0xa8dbab9dd90f55b8e0bbd4865f80017098caf6e6f8f0829e4ec805d5d49fb8c2 -0x0b18f0fc743b79fbae47f7f9b93bf5f09ac5ad10ebb3e3de926644bbff7112d4 -0xe8ae1eeb21c8feb5ba81a905ea9c6f2cd0db9af7a18a3a12e259c15a9924bbde -0x319e110c33c7a01c5cff4924b4a3c37f364eaa27a12c2de19432ccf0396d65d0 -0x8034ca35d3a46b4062e5f263c6c72dbec0c6b591cb36cf2dc0bcea4909a978cc -0x15d37920b51ca256fd8f8fb141ca24abe9226ecfd4b3c49ca5c219d796356fd1 -0xd09f9c6a2b6ee5aba13a0ee61296b30d5bf197beb5a3bf6fb04f1af56a3c6641 -0x9f99750c0030276b17a598392a6982e998a00dfd5e3160492f8162ad1d667711 -0xd745806a02a7928614e2d3d4dc3359a9a1878bdd6bb0c3c32c7f8bb6bfe06c6b -0x2255446b142416f1d78c8b7b5bed71b0eb57bea80913bb8fa42c20bce12034e9 -0x01c20471fde7f78c0776ffa6b28b6b870ca37e2499f27132553abe2f71570577 -0xe5a296342a75b9abc88d18e65aff0087dd075f7262b9b3343e47727d57f626c6 -0xcce8c0b38efe2212a4dc4300ab05d69464981a9137bd70a8ac83129bfd8e130b -0xa3ab4d2f34ab7960cb3ec2cfc73906f3045db96ff1ee28b7873969828d33c93b -0xd6a725ec6760378ae8a5e816f6bb2674b7dddb1d1bdd4170ae14c228bd831171 -0x985e9402c8946d6a2eef0a22feddc3c506272e99f5b6ecc24f6beb852bb1a7d6 -0xe95bad2e4c4fcfa7aa9d66ecb1c7e3e27560a7f96fd248708b783498d7e9c8f1 -0xecdf92435e989e2884b8add270e777e2892bcde784fa754ff6b2035508ba5f45 -0xffc97ddd1d99c20cfd0fe140dadd35d21120b00ce33d39053b1a05f6fa7b4b01 -0xcb35697ff5700e4c3b385b03508d61eda2aa614da72b34ef5992e181f23f0205 -0x67f8830931df59f2f5eeeb1cdff153d4c65e21180d93efd5a838963fc5f48d1b -0xb6921860633f07f540a8672bdc5b3a0abb7dab480507b0e5229740e400962a9e -0xb5b66eb49f13d12751a60ae8b6d22f21999dd70e79316807292e8cbd52260444 -0x6f4464c2f0b875c20f0273b7cb49b40ed4346ed61adc6891ae25538638013883 -0x4790adb1be96ffc4da05c4ac23ed190c17a3307a20fa74a080be66ea00e2dd72 -0x5b4707aa6218994b8af0934931d4edad69260b29838d145ec4fb23b824de8e11 -0x4c8c37d2cf2730a056e535ad52d4f374dbca34a24158ddfcc9bae0c53e56760a -0x639e95f25a19c9230d9a0f06dea5775840333b7171bc7480ce6e2ce6f82121b3 -0x466597e322424221da07d3f6b83bbdd646a93fd002dace01e697dcbf8df1afbc -0x7c7e5bacb3ba53ce6d62ffdaecc4e5265d5014743341afc89fa9a2cf69c82237 -0x13a718edccf31a46ae3e4e5237c5a1beccb5209cd377ed27a016ad238bf6ea78 -0x1f81d2bd49c3b3551da76bac13811154ebeef0ced0a67c037774567c2de693a1 -0x6b41ec008fddb2a4ddba6c6a0705273d53e5b7b91cc61d15e17ea626ada22c16 -0x04f421aea575dd59b8faadfd8a1a992b3d1e1c08cb762e4271b90dcc4bbdc981 -0x84b043ff778ee43864d6d87b4e72906815e88baed4b1ac8d078b0cac1ef65bd4 -0x73b20e78770f52617b43ac96a293e2056042d0f9d189907f504558d76714f12e -0xe2ba43b4fff9184b008a3cb5c57e75bceab4863e4cdca6a814983fb52bac8694 -0x7c5b80c3053382c60c08a8995b96fa9f61e06f4ffa9f5e5bd59aa8617f8bdf4d -0xa348d9d8a670f8defdc1e3b75782475dd1ae1b7f3b4ac7bcff00e88fdcec4bf7 -0xec6a013409112e8de5150358a59bf7c4849c24dd77bb7b110511ed1e4ec499bb -0xa0323f55a35f741256265742990a6e114a5ecf4a4e9413a7d29a70387a8469c1 -0xae49b15a371f975baec77f7fa94541fcdcff4008ac27fd602ddcb121e3ce0f9e -0xe9bbea5632d967ea5234cd332eaa8d5707d341a2675ed92943958ec9cc4ae50c -0xb90f53292b5072cb7009a51048b566f5bd5bd9c45af692c136d1f05d56fb7f60 -0xaaad65ae13918c6e2613e4fc1cc709e413fdd0d156b6d7765c2c8f21b9bc32ac -0x961cc4f7233c28e607625ef7a188e5b792208e6f96746e8c36f422643f499d9f -0x8ac507c9f5f3ee5a10dd76b55ec5846d9d6abd65dc2007c4179821097024300a -0x00a8ae3ca487713f41ef1c28000a3d73f42cd8d723a921a0b5f0be1e9a31f08d -0x6572790b15c031f24a053291430f3cacb1818b34251545644389244e8a167215 -0xade4d18a07cfce43131649fd0c31bdcce8a18805dc22a766861a72efede3a1cd -0x58f12062fe8882a69cf8bd59a2de4552d3cccfa3077a3e7d42d475fad1309332 -0x1116e0443c3b66c657bf76d29f9bdfdd4209e4b42ed952c6920fa1fa476a500b -0x11b8d45fd946a41a37718f8df40833af192c08d5232d665817bc5ae32bfb9cfc -0x36f8c58ae02acf52c69c636256e9b5599856b06d5031dc98650130eff39176b2 -0xed251ac01e1b09e5c8cd7513192faf7b442968833580c705d327b50e234c7147 -0xebc2f6dda0ed420d377ec8a32a0af42739fd948081fa836a9e673118f6caa803 -0x20d8f0f71a3ab7dd7107e58fb4503789a2b1d2c11dcae60d2ebc708992413a44 -0x2d751d4dece6559ac6f3d99ba27a7c0566c366a195d0613aa82c6b4283dea606 -0x64618b706b9b7e71a8167e38383d3743d829ce4dc5e512a414b4dc32bea23308 -0x56c2432aaec57ae2814db42eaf8b2b65abbdfb09ebe0ed39397c50d20bfa98b7 -0x46c730944cf41e981eeca6b0994dff507bfe0bb308881eaba9847f579277f63f -0x684d31f12d59e4f3482d310216b349c76d83ac1a62f82619d20bdb49c7f7b806 -0xf6f88453959c44bd22c25746c3780b4492ed34d2fc8840b4f51ddd318fe0dad6 -0xbc9f208f591d5ae7d7f253a3d84be802906edec403998bd363e2e9bfca14a5a4 -0x40e144381922ea26eefeb8c1495440d16169474dd83390c95446f29e4abc70b9 -0x8b8dba41ea918c0cfa19895a4ba64dec96d927d5747b3b99279e1dcae8500204 -0xa39560245d0ee476ef05ad57cc68aec4f6f95eefda36620141b3af27fc4b34a0 -0x55918cbb0a1b5be782921ca38bed2a95bef3f5748a95ebafdd422dbaf61faf80 -0xa93d3a6b229c704f6c74223cb03c32127b5036638187be50bfc3aaccb0e7ee26 -0xf2e9a45fe25b2b282175d6204687cde389cf371ce04b99372564f40aabdc400c -0x90bf1fd6312599d95845d3717acff478fd3b203382a881c131b4b87e571f335f -0x6af3a90f24ba7411660072bce4b09c8c4b81828f1805a8fde2603f9b5c3f6312 -0xfedfae6266ff520311c5859921858f0a413b1a18c814f4a2f266abf7131124d8 -0x342767afe782a18a914c849f8183e7759f6b592e05a786352e6ad232c9dd1292 -0x660c724bdc9d75aed66979dd8653e94bfaf0056b33256f320a5eb133e16a3f29 -0x17bb7218bd12a665f60aa7d44ab1e4b2fd8dfaf13d3561dbfdc5e65c0281e025 -0xa73cbfa556616cb1efff227ba6bcb66973fc7b4bf14dcadb6511a564e1be8011 -0x4c9137bac01217c38c4fe289ff7ef7416e18773205504befe8bf9c3f47103be2 -0x969423d52505d79af43aa3fe7c88655d8c139b9c678f3c302561a40a5b0a1050 -0x521682de2660b7c9c744a5ae56fb2e3f8c25cccb0d86f5df32ff1e67c3e4c12f -0x65290bc5d45b440de3260d72f32c2d3a18ce512f67cbbb6d1781a05c4525c616 -0xa7cfd7e368e8165f7839731ea03eae069433543fe6767e632385608ed305da7c -0x45922a0bd250bb78a1395c784c196908032bd1bab41d45611676a6c6f9dee8c9 -0x494a109618a6eacca05ba4c2815cec5251cdfa9bf5dcc0c2693222c4a1b9ba7a -0xc9f1985322dbaf9a271dc4e2665551d37a18652b588e1f53e22a591808cff04f -0xc75af7f2fe9817899c785c03ad6f8da605f0c3686be3686ea9285c8c2db0eb1c -0x5134e5d4d8444f8b780df39cea09e6eea6eed37c7280ec0f7eba5e1699eb694b -0x808dd757ed512e4401b59312659d452a8cf8da0e623f3095f4d7a768ca55891c -0x39dc2cbc9c60872257d521eb941ec3c711ac306869e3d0966f4fc7dd4ea2bfc7 -0x3a8b180379a9fe672d01b1355322c0d9acbf5659701e91f58c2e3f3195a710b6 -0x095820658a26617ee8e685e58fb4767fda0c54cb752c66532c0fd13e8dd406b8 -0x07d4048639dcde6b0b17b82cf25e1248bc738a7c23892699f0d2564eef802aa8 -0xffb55450f851e970be31597c26bcc7956355be09988d4017450aeeaf727b95da -0xf5fef3506f6adf92acf9428bb0b1c1c93fb5164d077599630e574b16a2eb8a29 -0x751b0af02c9db850b8db732d76cf0c801aaeed900c96ddd99801139ea1723caa -0x0f55c53c0b37f6fac38d7987acc36f155670c970d5c3d7156af28879a166676e -0x578f5dce8088915f1b21ec6d54164575daa7faef4505aef05c3a0dffedb61007 -0xc72774909410322787f8e12fca23ddbd2c758d663c28c473c2244023e79a3a54 -0xb5961f87183e4f3c7afbd8eeecf5041ac753f900fcfff40be67bfea0584598fd -0x8da3acbd7a12c204e5e827bc4b26af77cf970141e7537eef143d88de71ed7933 -0x70ea6e9314c505d5497595a635f0366784508bcabcb5fecc3e8c56c2b22840d6 -0xb1920fd695db43014aed9a910c79dbc73631e00ba88911686d488675b46be10d -0x21207ee474a319e8ff47d211f99fe73c6a06a934b5dc5e73250a80322b5e6885 -0xdbea73867d5fc3725a7199fd4e05306ae6fb384b86c702490fc01cb5d6519ad2 -0x6d9a0c0d81eb3acd6b74958ac4ca0c3534dd11dfe9a09a7c006ef351f491c8f9 -0xa7415e43f5ec14fb5715564900013cb7da241425d3f12b1512baad0e3c445a4c -0x3c521c9ce19dab9b717324ab7f8394f7972ba09515afd5b961958a9307ee0c47 -0x7cf110bfd72408931b920673e6f283e858768d07177501fbd6127edc0d01603a -0x308a7a412466fafaba7c2814659940e8bd5218c5f85a10633e7a599c1d615b92 -0x583a009dcc5693dd7b44af826fe4016c6008a1739e54f037d9557f06d6ce53b6 -0x274017eba83f91795a89570fd0cb08ececf8bda4a527ccade041bfc22b9c5718 -0xeefdc377eb83f02e89e22f839b5b3b37e98e295ada371898d9c4ff5429618336 -0xca7fbd158b0f95c382c49f3b584b85cc6f7b5ba01e8817b3c3aa4ecea16fba80 -0x0330daa38e4febf8efe10384dc04ecaddd400e9ab9e4557b4fe26b9ed62d569d -0x36edcff861b676d9b90a4e2cd722dda46eb6053105d367215eb40da408b6b92d -0xa0e00cc19a0c49d7d4076a5b1ee790390839ff0e33e115f84dfc4f81e7214190 -0x8631e87626565a4e2022f92ad34bfbefd7001e125ad560e226c3cb9f05fcf468 -0x703fd5271f964d054493a87bf0af54f7a507557735c8062cc6d57dec986b9ac5 -0xba229d1d8172dade63f55db29bb9e78f8c435c96f4060b12665ce407576650fe -0x81cbde1349d351ee9365ca88acf3a89bba689dcf8ab4ce4f9c1215f8bab5efe1 -0x6e7e500aed1dec139db8067eef2d907ac136e9be39d5afbb52f851db40b9a010 -0x875f134f3e2f8053372368d8c99a9336b926a6ebc7e0247c2b5f249d02f53cc1 -0x3194af4a3a8e3786fa0fd62bed03999db91a60da4ce83c0391ad0384a71626f1 -0xd170ef5caa61a9e880e3ecf9a64aac9e90257fc2ad0ad88081aeb0ffb44777f3 -0x7b0c321dc92eba1446e8f5dd711e6fc180eb0af2af99a54ba6071946d78f0003 -0x7e67fdbe96aafcb8cb1ebe2665318824cc8292577a061e747c24920a6e63eabf -0x1d763aed99b85ba63e5c3e924a833491baffaaaa77f5b40506c19aa5eadcac99 -0xf41f15d900ff7ad193f8726c04babcc5053a9865ce4a81166f1a5fefcf1309da -0x9276d7ca42a0c92c0be0f408f83a0163afaab35ee3dda1c059ca40730f49afdf -0xafb414e3e905a1916edf03659b56469b5587f4e23fc22fc0e5a24197d54d4d31 -0x76352c1bb2b43fddc4d3a352c918c0cb7f9861067e733b215361284e9f97fcf7 -0x74f8057518046acfbd1bedbef9b208f3b3e857f1d185f0d5c464baa725740e89 -0xa28e7b8b8205412a8dbb184d071b39f417fa90f961b7d3a1eaafe450daff6713 -0x0631bd0252da61b54853498d3ee6ee87a529e43afb5f8e5387ca36471e647242 -0x688e58b953584a52be25f2ab32ed3f51868d594a8e11a66cc21fd6245a6f3189 -0x9d03c7c50b5c967cfb2143a504e6b01f79c99d8e6f79b93a41c5d0c1bb8f3378 -0x0a03fdbfe51bf22a1a5da0ba2e2aad59ba9be169a69237ceca637005a2fff7c2 -0xc25d80cc228684edf23cd56dfc692989d2994bdad49d11189d1b330958a6cd67 -0x83d079a671363c2f157517a7b59d631859bd3b8b247b1b1571a88eb2dc2c86e9 -0x30f4c608e95af999252ad5e5078c50a3da15f5038273f15c7fd68a3a54c9c2dc -0xde7b58809d162761c0698ccdc31477bd8d8db2a1503a840b83cc35fe68de0373 -0x354540a0f7ee52bc948d819efd9599e2fa8b9c7f0f4162e03fa0afe091b5bf95 -0x56f7cbab9045a09f6d69f2f71159eb8fc6538a370df1e1227ad4addfae6f99a5 -0xd1b9caf07d92938548ad87327ad9af6001b414b02d96015b46aa943c0959cf29 -0x7c28adafcd71b55d772d125fb71c921c2c76addade97d8f8736c68a6450d5d5c -0x30af0397716f175ff03e8dc12e6cc50752b682796b6a1f34c1048ffb14e6dd1c -0x3ad79ef0e095bc14017247b842009ba09d2ddeef64646f7c89f35390010f9db7 -0x02a65da29b467e0f54385b57a916fd36922cf27eeb63b5eb02d2674453328876 -0x6b3dda00fbe7fd91b012604a0e6a8f676ac10966956ae3c28afec244519e6835 -0xc474e3b845691360bd62f5fbcade114d8b53b9720267c22a55ae41f65aadf65d -0xa651bb6a1ffc44da320304847374b900f13c54ff8c40e5f1a05f7a4a540e1111 -0x04dfe5c1bba08697cf03ae86d3146362079c0ab39c439e8080661ecfe6ca5910 -0x730f5b1eff169a79cd2522b19427139dc655866a69e94bc69b4a8912f643def7 -0xc9a57741ab731371386e799f75e4a0eabdf6e6243dc759b7a3d30960c89ccac2 -0x52cf576a1b15d4e2fa9d7bfca144c6f13e3d8fe5f7e29efd5b3b60c65768170f -0x03f676f0694032a6fcc7a6b69e695d3d1bf14bfa1c80ae31ddd1a5fc1b9e8462 -0x4f87433ba3e7e64c6d5c4c127a48d05f1e9885ce38f4686118e2fdd61286f384 -0x48c362abc41a22b6c31e04e492670682b079cb682a313c50a389e3b316cda869 -0x1d05e773a8c53e3688bd1ced0213e8b8e07a7400b9388a2105fcb1757c3dea1a -0x421f904097d8dd5628745b8d67540d777f0c2ed20e5258a59c9acb9ae0ec8f71 -0x4375d3ac2fac397b9dd14eacea129b0526f3b5a946055001fb750756f02eb7ed -0x27da72ca9988699b0e3a6ded577445814865ee27b7905dcfa4d358edce69a0ea -0x71179e1fdb7a95629d0ca3dc4b292d284029773b06546b4c5c6d9fefd56fbe62 -0x3529c7c1e1dffea55f7855498619bac67cdcf4b6b15c87d1054f61acd6dcad3a -0x2ca721e061e21c527ed93832244a7174d678746fb1269e17c9b62e4bf7804e73 -0x9be7f70bf4f515b6c11e0f7f5b70d65289c23aa8fcf066bf75d61e082df96b62 -0xd6d75fb4f16d51c78b253f785f88acf6ebf2107700e0ba1cee0478f3ed0fa266 -0x4a3c402d9827ecd5bf7a5698fe031fadf50dd9e730a252e1e86f466595703540 -0x78b2648572621e26ccfef86852d52416406512a38d7f378e7565488aa5570ff0 -0x96f05d0b33d4c21e93723e52e11c864e3bc65d0c4a6d0f71c12c62eb31ffaab5 -0xca533dccd66b8a13c7e2e85b563cb235b74b1f8a81538cd661640b13bec6ef1c -0x50d4a82403975d6311369ffe38a77ddcdf9831e97286ac303351033d78065ad6 -0xb3ef7f26e489819c0518e3b076aa8ff75fff3fcdb2b7c42ebe14b758df1bb718 -0xddc6031655fcd7cd10abf287992bef56212cfcc84c73e7e3f2c06d10c0d4caa9 -0xa236df329ac7300cea65d39fe29f2ea60c8cde042ecaa4533a07cf9621a5bbd4 -0xa57971401f1f7dd8474bdb6a104db25fbf36e86c2c7eebc4d77671c1a00d2630 -0xf0976a5b9a77f4b0ebcc55526162ad1a6f3edffb11f6d80fca90b8fcb56dd81e -0x1876923cf71251d38f3f08e9e3fa1299881974a45ad587994717e2d6612f7774 -0xf8cee71a816a0f7e5197e006a8eecdd88d950309e4b26e441076fee38b048958 -0x1973a1c5a13c2fe98529196284957c566da0c0729c9b91aaa4f5d4b602adf60d -0x2e182f3a19df656629388ce68338e920ac9412a116949f7675df895437a86836 -0x8b46b9570c687546383450db5b4b6166739a5e80e49d6528825ff37e1dda5817 -0xf48a8a0ece473bc979bf1d280060fbc92da825c2a126b83c8d075b817da04fdc -0x532921abcbe0ca0c4c05a6db002c263aeaf139d6a2d19f81b17a71d1050d9697 -0x65f84d85aa3d01c6ce4d981dd821ded811dc022ef08db25f20f9473f0f9167e3 -0x56071a83a4c41600bd28e9930fc4ff75f85cbda99cdf0b5d689e4367c3605542 -0x131308a29466012b5a888d937d2a4e25b78c101b0c666482d3e528318cd792d4 -0x90d39f5ae265280d78f749518a97921926bc620733b81d2e0220c15e8055d993 -0x5c7bfedc29b9687c773224d0fa1d82e7b5e072146a8f918ac22ca2de285aca79 -0xf3ad8fa44ed86843690ae68d31a64e143f6a8cb93fcd2d161d73576b32fcb71d -0x68bec3979d64ac2fcb03994681fff383536339bc840c28d53a444fa4f3e8144b -0xf7d3e6949c5624f1ba56697ff8966795074cb09c53780c2654e2eadd9eb24b54 -0x3c37379754fb4befd9d40da2a992ea6049472ba62351bbf97b5735c2f16aabea -0x784d41af6f58914b0e19fa2bd2d816fa5ba85d0bbc3112245982d51b59105099 -0xb92260bada01f6093708ea3951bceb63dfc108559d3fa7d697365c6cdc53ff5d -0xce8af797968d7c9aea2d3357e38942d34960027deeb8f47c311d6ee22633b71b -0xdefbabc5f6cd5dd19b6a6217d16613dc3c6753eb827f6d8b3ebed0c5f9afcb0e -0x556863011af126a899900e8b87e42f38197a85c920505a6170d73615b0be9546 -0x13ca75e3d84c45f605994a01237aee8a309fac186ad19e45c5d2e6696518b700 -0x59a43fe673d4c6b7963ee7a1f24f706bee46bab24258c78fa6061377810e33ee -0x804ac7ab869b3cd116a71acba91d7329877ae1b4e7f5d01acb67d60d4af5068c -0x874e0eb84422d4542beb7c74804c0c7917bad845e7386b5da623946d5491a04e -0xf2710da31104908373ec5001438bc3e99b3ffb9e92618b7e9ee9af9054908b5c -0x085c1ad73e1c8954fee7fb533da6969a5ddf061c42a7647bef69300d64253e39 -0x187aff4b6dfd19624d98fa92a3db761dcdacc3ca157994474f6b6344b5900ad5 -0xb2045ac497200ccf47d1a77662410db99989d45c1b98787c3a7c3342d4adc222 -0x20ed3fd48363b4a8f0af3840d9007ed021a979456cbd11e38b2b98fc84487e59 -0xa7a4c99287442d0cd0031735d419a1980a07e9abe920e08a5bf134524716641b -0x5506f8cc35d7b1ce2b1b3ae65aa9f31702856b145fcab34ae535984a502ede56 -0x247530a54e20c0db525ee14cd16de81002965a43661231703c8b8e63ded5df7f -0x8911ae0170b6e3f519352dc100da14c6d3b0181c1e877af431a2851a10588802 -0x6c3a173e10f467467de5c9ac1a6136a4aa8626be50cae4c22e570461beb7d975 -0x8c76e83736952bb82c1843c2d0f630666e12ef0570557b667ca25bcf962adfcd -0x06c97516263dace71c7cfc7b6a5222349abed2eb063e28dc7f3f3131de259f29 -0x73469eb52cc5238935fb0e2a63ee9dc192f2bddc8a686ef0fb752690732a8241 -0xa7dcd58d710b2cf19d74943b173c214052eef1e9faacbddadd806fbdb9bfb03a -0x9a7b0ebce7425d6d67acc9ee954c51477b628c8150e7b839010badbbca2802ae -0x68f050baae53e2f2250d014583e21fe595ef9d4b687afed55a5dbe31e3fe8845 -0x22896044d7b8eff3328677c9403dcbeed7b51453f7994bf91af2529a3c500d14 -0x72f3842d0cd7dc27325cec455560ec7eeef3c4d4018284ecf8f68e2547bc3464 -0x268f0ef2d4613aec7ae778b42cde631bd4be8aad4aa7a1e3db4e79d7adbd63cf -0x64f2c92c7894f25e5d1aeb2a04f4a0e7826ff213bdd3d0005fb6d02a46f5cdfb -0xa78709c67d1373a71b4f7ecbf16d5e1e16b90fbb6f411bd960f11f0a1ff9948b -0x65c6f6013dc098a245f9d6b2a3533826cf99cac05baa78522e59f97475fec283 -0x34879e78d2bd9eedc50445faf41db6bdb72f92f508ed143443c94b9304871f87 -0xa7b0004a2bf4fc4fbf0057663c5fae851cf990097761cb15f963ac3b4d9c0e5a -0x6cff35f18790e1ef4193a799b7dff779f0ce9089335497430421098d890f73a4 -0xb05df2e86374f8ece903b80bc4cf36af017831072906d22dac8fb9bc8a49e06f -0x816772f4052f5f75cfd98b2278488f78e5fe152cfac12ff33d8680414691a220 -0x37410c25d7fa88e70e31532e2169447ff2be764121a683e3cf94c3204d5d95a6 -0x00362bc6121fe9866783f2b3a2f266055ff10a227cfb887d09c0b8fcd4b61efa -0xdc60601666d0f5f189b178e743f1a61d9ccca0f83214738fb03e7f1aa002e773 -0xc8e8e14502b4d3ea3c7d7c37000e1b48fd979bff823f11c39cd7300a18e7e134 -0x61c26d806f5d5c094a56156048b3f30040787fc8808454c7e0fc5a158d245de6 -0x0495851b7ffee380c0bde02e4493392eb1b32d492ce73699579ff0427ecb6fd8 -0x340c217108f7d8016572b3266b71aede8001ec071a383797c02325e6f650c258 -0x25e9eb23f0cdf1a57bb85c33fe15c0b118f386124a321a55c761167b205d2199 -0xddadeba71dfa5a77ebb988ee1c1a314a0220c9826c56ba7a7ffdf0c264502d5f -0x7b3a97f52709d773bfb68e565bc97b78335123c29b256eb8a8222f1c40ccbdd3 -0xcd527bde8e171a4e9e6c9f40131706b992d7829a3b53d39cc2e06b038eda2516 -0xd01ad685bc6fd0357ef119ec55781938ca0b9a044c2052a6cb9d0cb8033dc366 -0x2626844a2ecdf2334a608db2a52a6d2efcfa73583cce30be89836d65fd71fd40 -0xf64bf54b8d6209a2444a73d84b9d90f8a627c5ba9c466c98cb014438827deefb -0x8b3bba031f3b33d19671d79cba2af8d2b3046adbc02866dcb690cd4d377ad290 -0xcc14298476d163c2ac406e8b98436449154e38f2f6ade6077f432129e8fbcb85 -0x2351d056c930ae2cb1c31bcbee40ed725d63cefdde76b67f2f03ce132c2ce561 -0xcee2b291cc3294b550e64a7e3787354467ee19bea6ef5b14e81c151cbc480501 -0x20de5a87ab4c38605851ce57f171a04b7ca89c093b04dc9c637c3321ce90ca73 -0xa0565f58796407f11b6aa670182512fcad045c17a1ac82de3681aaf44e583c2a -0xc563f88f0156c3d6c7202ee9eef473e86b3c9870c465ea2ad6567f00bbe5a0ed -0xc11095578baad0e906ad21562960eb5e312d1b9f28c2b825399fac18eccfa063 -0x2aa02a394869e9f954e6c44999d8e5491d018b6689322d82c8726729bd249dc2 -0xae387bd39b4bc5783d340a59c526752572dbb5e5c88f11c676f08a045cf8cac3 -0x3337013cf17f736f5422f88b947490781e468359dd91ca81aaec452b5e15bd98 -0x73448c82a3e0f7baab5244008d5e68bd258f670474f6e63660635192fdf0b313 -0xd048df909fb623bad3554d52c6df387745d4da5cc92b77604c4c1fdd1f642ea0 -0x83b56f1d717b88a0ebf75fcf535a54ef04952ac80232426ba045a2ed12c04572 -0xc984a9571c2f85c3cfb09f961ce05d6646e5922e460c8284881e53aae2d5f55e -0xb166cc8c202ce30abbc3c27ad9d9c48573fbc479ed7e8a3108f5da36990bcd04 -0xd3418246583d2ec9b5ea300d20cc0e5a6e9ad8bb3dbe6b6d2d44b8daf4f9b22d -0x964e22a80e440b0bee7b104973bddb5afc076ef7e5265676ee553a1887935ac8 -0x504265eadc71da997e473b8e433d41729d481db99b8bd43c10ca16d2c0ed3abe -0xa4a39abfb61e20849fb8af69f7de2948b921a2e1eb63d9b0322ebbaa06875666 -0x035f739e4e0e68840c11c6afae0dda4414adbf3cca2747911fd4d3ea86044fee -0x709ef6859c19e9b4e5779ce0f415f34c2cad733f49d52837e6fce2ea69e042c2 -0x825f8b75cc0fbe0617a01a5c3bcf957684a65c71cf7a8ca8a929a8c9cd1c0b2c -0x8a7830509de64bef8b4618518718facbec3e32ef6ea450b4b5579e4172783abf -0x06cb1fbd5d0e13c9e083ca9a4d335715b2bb94520fa68c1836fe7d2b7752db52 -0xe428b678a110b9cb68adf8e937b4b0ca56865163e068031d27293a32bed75650 -0x6234a66b3fce029030422d79c861b1cdf0238b0c97eb869c7bbe115f6c7b8d1e -0x9e7bb6ff109520e38538b6947c86fc922b3deb242d11bc0e86c3bc70011489bd -0x57067b177504aeb30aff3e59407016f9f6e7beb42985c91b55929c187e2ead9c -0x4688c29607ac8ca3e70cf6e727db18e3f57f35d829eed1cd59f28b60bfcbc7dc -0x30e46abf82130f3dafeec417a004bd14c3a4b24e4f0b0cd408073f241d7e2dc1 -0x4eaccddcb35264b79bbef8c2445eab4e9a72d832894dc4e36d89008707e51568 -0xf84ef0cc479f8456eaa4666a2a86c1982a56765d363271fe7eabe43e1f0ed3f7 -0xbc35d67b25e389746621eff04ec7d8a9d8b642c9aadb813df3e4c91eee243293 -0x7ae4fef34373d0ddda01ed200d86cece5351470f14985a179a6155af19fd267c -0x43ba1d8d2d75dc317e31c69fb7190bdb0ce6f4c26ce2631fbeaa1ac4d76ca32d -0x741e4e54bfc42c63a1eb67780601d4eb512f7313e85c2ab34e579aaf8abd66df -0x371484700f308df60e00635db72759e497570de6d32a470082d24273837e2adf -0x8f3877f02940a4ea6b7bbe0a22472ac2141750f5b453623f682c777253eb0b14 -0x48a850f38ab5075ed8c1a05951ed6cc847f72745c13be9e11bf92dd589f0dc5f -0x0531cb4741c2dccad6c5e09ea72698d0a7d7467751eae03725fca4bb72460c80 -0xac3503bc67e2a80813f9ae0e586991953b170d9fe2f6ec4ae37542c15f0bbdce -0x18f497258023efb683da987eb688052315bf9d6a286cf5a02d40d4e7d944022d -0x5e97cf9f44ef2a916e0013373db618e3cf175046415813fae4a5751ccc34d6e9 -0xf9a6c858b6779510e462300d49c0c49d92ec239a0af99c4a3319aa38f478c374 -0xaa8bbea161e4cc18f5de03b3f01fdf39a256d4439bbbe9d0b38aa5e109d109f3 -0x30cf028b4026363354b54fa2f67fb4ff31b2c32df3c1be7095ee8ddd824ef555 -0x25f0c810535acaa4a38b973c14f9b24d8e9cd4ccd43993361c608c787010345a -0x5bff7e95c53faef8aa3d5f1cd6750be9ba0df5a65c16a0673fcd6bcde9062e98 -0x9fa3c9051dc5ed481978e6a40be28d9791a8053ac1933376d5bede064f8d14a2 -0x9ddaca581baa6ac8b666ca23e1f3f6f5eca88dc58f6d8d979a5d8d709092ac9b -0x5b11bbbb526ceb9c500079c266aea6320eed7e1964990ffacbacf23020bd3e7f -0xf072bf04e16b9f9ae7d927228b87f41d4b8b7e2487ba898987e076a69e74d490 -0x6961125feb36202aa6483c75cda28220544abc8b823086cb9a0568c71723b9c0 -0xd5b9c433a95f5705ed2562527f9434dda18cd53f0743b30c707e50a8a8bafd13 -0x8d9470ff3710668b855d070a00d270d03b98e712709ab45da046176e0f12d56d -0x8af0cbf5356a175075037e5b96ece6b15bf61f712cb32abb198b4604dbcc2406 -0x76cb56cbc4c4fb0e94123f4c3385225d532db2d7ecb92f9c95943cce4472e1a8 -0x41bf547cf3999e27a4fc8389885fe6e7c03afade5a13157d666fa702933a9399 -0x26fc997431fbb68625520e015758c04bfc019c97b50920ac9892c4d8e9ffe15b -0xf368146c263bbc6b9cfe1375dd0be2c968ee61b8591945a8acca1004c16cdaa3 -0x4ac38f1cadd426893e0c5a871e4b310156abf08a0e4bd74f7b083839312ef238 -0x03f3720bfea423371885ddc4289110675d2261515159217a76a91397656ed4df -0x3f2871427493a91d9639f904baa5b98e394b5b87433a8a96b18b09b56fef4398 -0x03f823fcfe284d5850c0f7ef78539fcf5c0cbed89741cfc279c9dc80d28323ea -0x1782c245ac7e29263f54fde890a89e76c36a3a73a4167ce9e7dce3a88aef59e4 -0x6e5650475b4b2e52cd8a96de3ac64402b0d07d3c0c8f7470400bd34c0c1c2c61 -0x7187e3ffe6f14141fa4c98adb97e2395ffb4531afe11224abe995471a68bcc6b -0xc206c609c7b4a63bb31397e1ad4312ad0d5e6eac07f5b6de07605ef46c3fe196 -0x7b69ebe634f07e7cb6bb38b39e5896a81f2be8f05f8cd3bf1526a7dced9014ef -0xc6c79011c64eed502b3fb8f1cdbb409f9c61f533a278b09e75374a91ffbd3069 -0x969094f3bae79b1be496789a4b75ca92cadd6b795a288bd66bac0d4f8a30f3f3 -0xde97db6409f09f9744342841fe8bc8d998a001fb3371838a415fbff07d5d78c6 -0x8946f141c6434e2fa39bb9d14c775f6978217b4738754a28093e7618d358d7bc -0x8a8960948c8c39b8aaf4e22614f529badc4034ecf1cc4ae7c4cdabe2abc185f0 -0xecabc84d97069dcfc73087457c9a6ee0aa2e1bfcdeefae765236dfc0dcf5414f -0x68eb5f1cc02825fdf68f48bbce6d3a3fb86d8b84e2dc2491331eb038d9bc287c -0xd1dab7b98d6920c6b83935478b8f0ea0f201e160e4e2e69aa32cd27faee5523e -0xa96bc93289e258329b34e2bd82e82bd68d9fd2943214e0f29d143ef976269a01 -0xbc650375cfa2a66be06152e9c007025346b7d2b9f40fffb7738fcde005861a03 -0xf724ae7d3372d954544867afdad23dfa0f8d545b866bba2d89b5a57b2a39a6fe -0xe796b224b923651fb73023f48f4202e53ae158af3b20a411a9e2d26771ad3d51 -0xb8c4eed888cf877f234f9ffd7fca1f4ce7eb666f4d9194233d6c91d6c4db8dc4 -0xa0dcb6708a4b4f3c076d7ab218430f0aed27616cff289caa39c5c5a2521c11c6 -0x8f36a23709d4bd52bba42a755d6a1779bee2197f74840e6475cae2de3624f7fa -0xe58efbb65bdc0bb47b29bf5776cae7efd7948b4ce867edceda7ea859a178796e -0x512700f1222a10d3e79596d95e144cae92717cdc8b8e6106d1a14faa467c4c84 -0x9885ed826eb2892c93499b04e64eef5dc5303e3ffc3fcd023866ebef6f5391cd -0xdaa7a9f930088049748e4e24260b5560aef91c9e3bf3f552bc726bdd032d8932 -0x53ca150d8517efad35cbf585a39be6cec7add6586e341e1228dd01841b7cda7a -0x032f676ddacf1012f234777012c9fda586d85c5f9a431002c99962022e50042b -0x2ee1c68b2e18d7afe87af45f1840be13859db621fb7e0ad5493109ab83f79ae9 -0xc9f0cc4eaa3927766611232beb6267af3f23d5454be4daa346aa00a6e37bc5a8 -0x2cff9e482dd58fe0b71501468fb87c28476559ed737b44d105bea675963ae7ac -0xe38e8cb5b207a451adaaeb9822fba40787015b6eb4f42eb2f6c07fd626e03347 -0x0629708b5e864e5f07f7c5be3a96f2fb46a38bca2a979b41a5762ebc255e7c3e -0x7e90a6e58792e94d75e07e1b247bfa0212f7352d56664ef62046b4731d75c758 -0x2a28bad953adfd7f72beede162ad3f0b7f16659db8a81764cb3661951060d209 -0x2f1e6a7aabb4edcfe71af8b0378559bf5ed698a8395b3edffe7d3851fe119499 -0x072a0511826b6a6bab3d5dc4fac00408696556380d86d6222d219fa079acf758 -0x052190a805df2786512c2793257778d42b345855cf6c6f1ee9bf043f52d97a12 -0xf824918035af3bcee876ee3f0407a92318773106648a5199e16a539e616b00ef -0x448218356af7672b85f43433a3ae6ac8025513b9afeb4312d94e434b1341f1a6 -0xfa2f8bf405e1d00761f652a527adc6ce7a68446e95e465b548606a83ac6826a4 -0x04128d8eb2c7267937eb1d056b4ea0881041a9d505f327460232b82cfa88cd4e -0x57883c3180eb02aab3f37f53a4fce29c90afab247a85f3d5b76ce4c30de51a33 -0x932eb8b138dc784923eb42c42090495018ad104da222fb12626d6654e5e06bb4 -0x63a1c9aef47a4aec42d3bf3c0b84543890eaa46f1dd0a1734df3a846b3dc5598 -0x0c387c26b3e1f62ca7162e70b28d9787f7f3c39e6db5015aa7b6343007fcaddf -0xc22629275e7efb4cc50d094025417f3c951941d737403d5f4c0e03b08f2f6b0a -0xe9a7d01eaf141c75de137dcc8451e09a6198ecbb346ebe6f86b4b329833b4d8d -0x3a092217a36ca287427770cd6e05e27ff9a673196eefdd7b4993f645a4ac17ee -0x6e12ebdcccc1dd842e4e52987407cca7f9b1cbe7eb202214bd4e1d4e0bbf9634 -0x62e07c82e7a8efdf96539035a615f54fa525d25b0ef5ff718f0716b438c601af -0x560a2a4c2e7cfe1bf4866ad7de79d3f732e91360526385364efaa7d0c23cf5f1 -0xe07eadd6f851c69729f9c647bfd6ddc2a80149781ac32cc60d5064522b766613 -0x6050fc7b62e84d655243b4e5f9dec3a7bb18eea87373a3f8c645d8b6fd737b18 -0xd47e893a4775c96ae8ee215dcf78ff9539a03a00e6b3af805922bf1647cb297e -0x9110e23a240dfdbf0e9ce01b0f829567ccca4630949c140cc0187ce4f9d1be47 -0xbf05e39682e2cf4bf6a7ad1458f9ed931b17e8f7122cdd17004356403db4e6b0 -0xfbebdc7c1f86193ab5378d593dc4b7b61023317838fb169e452217965c4ae8b0 -0xe87bf7400df4fa6ec0a5c0751c18c417df37355396f12e3dab38006773e21a22 -0x400e0ba587257e6cbf5388d9693a911f499384ae1efbbcf44d7f9bf60f61cd5e -0xc05f2c75cc6ce1c0be0b4ffdce5926a3689890e43a7940144dd0918d0e119193 -0xbfd806981bd76f62429f424b97411c6d2994644d806dd418ea2ceb50e03eda9a -0x5ecf956d9faa6bfd861d3ad3c5fbbb222945922d880754c2272586685c9c89cf -0x0adefdf44dc37cb85108f539386b9152e36d9a1a138e687248370fa2f6ce23dd -0x887e3ef38e8386a5507d2abea1c46257806d644be1a6ce93b357ec9190064505 -0x09845a14703b3a2b2cf24c9755af9edf61cee320c5f25df27bfd6be4e4bc8db0 -0x5a0bc87ee19e4d7a7832913196da4b25cbc61ca7d00498dc6f19f1f7ed513df7 -0xabc9079931e175b730b5332cc3213fa90e76f99b3d86fb5e240602784073efba -0x64a401cf15f5985dc13e6a70f1a2381033e0a5f357b5aee19306c96980111162 -0xd927bc5b85ac7f195f5922f4d52b17b09c2f7fb5e4f3c60bb0f9f40297318a2b -0xbeac5883c72d2ac0fec60696b6c0f21a540b0113fae9d125459947c291433fec -0xfcf9433554b5ebd3f7c655d3167e6cd71c5a812d5da6d787a21d343f12574f23 -0xc49b66f8566a0af09e333a366a3c5dace6915d9f4bcf82f2edbbf2b1ee136bcb -0x6a6e9a4bc02bb6d780b1c94bc41bb21d760c2429b8fa7e0b5282b5b4bc858209 -0xa9c87ca825b3fd47e349bfc182dded212f837fb11ae163fec73626eaeb9fab87 -0x1e10320a888c0c1e5838dc2acc0a3c4620cfb664d8fd78232c0915b0bc191be8 -0x9ae641cc53138aec6931a5ac97bcac7bc120ef0e32da6be997553b2d9ad16aa9 -0xb2ae8431fade40c6e01a97a4e15317ff054267c453c535fc9d98b7b3ed2ff0e5 -0x1bb2d79aff9f0ad4c11de4875b1b754d0dfff8c337c7eb925c2e4b04baa9c269 -0xc63f5b6db03981edd3f016609437692adeed2b2000b40ee323770b76a87658be -0xb6cfed72de86a70fd8836b88ee49fd1618db4764e61e8ddd07d0691337855090 -0x17c7b03e09d4bf7e0122a75d1ad3bc1c4817e269fb2661a16971fdaf6eeb7912 -0x24595fe18258050ee6c535246e9a4cda113abc8d6eac4517940dcf0c49e94ff6 -0xf91c8590b3a02d7efb422ce3a80829139da3c762934fc4232e1533e17bffd69f -0xf45c9e316ec20c52ce7eefad894796a3aedc41ec0914efc434391b6e4e61af44 -0xfc74e91ac3ea1af45f0f5860a993863aff7c0abaddec71ccdb4e5cf7d72a8e8b -0x728b3fdfa5645187f164565cfd2abbd602d8e3aacb1dfa02b9a4d24c824e45f4 -0x2748f02c2a2a236704c5b2aa217d0d0dd1f50fc97da373dc8c8ccc84cbe4ceec -0x14761521afdd0c453f0b58c11bb138e14b87aed452ae9e087863b35a2f5b439d -0x8cc772f0505cd6683bcc8ce2681de7aac88d17f38bbf7711e44454b188f176f2 -0xd0ce4b0dac0ea001a3eb5e263d05ab31975ef86b5de89ade78afc8728c6055ea -0xb1e55288e02d6c1c8be51dfa87ecf4fd60e9c91a83e34487d3bc3db4256d3f0f -0x0560ddeca9e19b266d96aded65062db83ebf847b250bd1ce71d29a4331e71be7 -0x8e63583e3221fb18f8451a9d6e1354a3e27382085e93818381e2854911fcd5ae -0x7b12c2bf066dd9eaacb137c1c4ece5a2d43ebb92d34f072a1e1b91efa4b79e6c -0x7e9fd259185a78a611bb18067ead2b775e19e9fe419bd5507b32e1f6c4ff425e -0x0fe799c80628a8f1cf4515464547fc8589086dc9871c9fed57d610f12980ee32 -0x29c0d60007774a4e0498a654a63dcb8393bc8680d7a20335e8f91aaa71271baa -0xe06dc7c8de77be175961f9d793abbc8617e8d2e8b3b111b26f890998c3d63245 -0xde6802a2d0b25bf0bb5b98483e8019fb73e340d88a002afed42d611cabe240f4 -0x8fcde18671a341f039b4213cdfcc65a5de2f9fcd1f16df2969c7e3c44c7edb4d -0x57967d2fc87c1f013a34cadae425074de197b144e3cd663c77eadf94eb8b7722 -0x57b6328c4086fc814014d7d0f8e1f234de3737ea06c108616242f2dded0d438d -0xff967825e6a3dc40675d6f38f0ed4d2c64160929ecc96cd7951f324e7ef9827e -0x650c7125a45eeda60cfc9758e520ee53f9f062f4654d8c98d394b6379dca0a93 -0xd7cc5f9ccc7b6182c33ca83f6731bfa5edd3e2183315ed153135ac53027eaccf -0x30c0c6b75195eefcfeff5bfcd02c944aa99c048d57514406bb6646cbd74022c3 -0xb755c006a86404881f0431c992bad9323376be76f7223ac3385d93514839a5a5 -0x2cb25cd11bdabcfc72f4922cfaf572b155b49c1aabb950e0a30b9e62229a932f -0x1f43363e5a399ad273c1d7eb6da1feebef8167a723b7290db2ed94ab722b3e81 -0x8e3e13ca1263d0b5d7674d31777b142841d2af04feb0b0be2f0d8af19d213840 -0x5780a54eaff1b17f316a8003be069ede6a4f0fbe11d7f386df5834c4e7abc351 -0x97532f8ea01da7cc18346810a0bf3744c7d77bd153af3fea09e2859ebdc1f817 -0x3692d18a2cc29cce765f100b6fa8618d43bd56060e5e3fd3de77d73deb417f4b -0x91e18dbe344659597637636141557ff9bfe02e879b271dabf3c0e8f4c9b6a506 -0x678dabe593301fe552210f50f279a6f659df382e12ae497fbf7f236d1dfe7b44 -0x82e5aa0db5c7f807ab1adc8e334558cefef329ea75d6de708fcf0c5cbe8f933c -0x4f6bf45883fef812b7ffe60f934c802a29f54543dceffddaeee1063badffbdf9 -0x48f63eae5519955fc6d2403d72ec1c76b50e38845f2f4608a8b3aea124ecea60 -0xf1f6efa6c8c85936f949be36a8beedb4567c0e1f2a2dda28474040dd0c04fcd8 -0xa0df2a48c3bd964fdeb510f28287c8559ed941deaba43fc8ae020cbbdaee7c9f -0x4da4cf975299b0aa74902e09c6e2a6a2a30dfefb98708f65aa38d098603b116e -0xe20df7b88960a2cd5c1a29d2fe2b8e2a75aac3ea9bfa1152bb21a30c4a59c200 -0x4b54c8271a0f0bb8c7574dd2950f64e21dde33947892be14ddfed8893f42f176 -0x9dc13146059d11acf63fba1393d3ec66e35dcad48caa609a760624195e850f32 -0x0cc527616f2984fec5b6fd2b4ed31f80af48304be60a3ecc2ef12dd04dbd60c5 -0x4fc5509d03f60d1390ca4ea1c288c1589350405a1ea6afd667b1df60e4c7848f -0xe2421f4cac7e2be839f2edeec49f3eb313d2f4342933cf6e463fdcea63f85e9a -0xcb2d1a01dd894c66f0664bf60b5de913f259a0b01e0be0c8fefae281a2bb3646 -0x1e3bf0e53dd7bbc7664d7daa7bdef9df06b5cecbdb98e5f3c1dbaddaa65150c0 -0x842ee0684a9e17c7bd042c73ac0ed9207b93b521385af72bae56bac9c04fa757 -0xd42161a7657c95489b473e3dd6bb6281694e891900d732f90e1ef5afcc4559f7 -0x3e4aabea0ae3b246c4484ab3c50e4593c725c89abcd8700d94a291546eda2f36 -0xb17569853bd77be09a35fb7cef702a604fb3ee4fc9c23039e5e889e4e020c5c2 -0xdd0b0c723d24c194c40d4c7760172f75d09d9aaf12a7741f258fe6fae259f3d7 -0x30a625441c97310cc61a29881cb50451e839c25d65eabc73d8d0807d5e75f36c -0xbf0edf7539382c0032e7f5460d8b7e8ad0ab7c8d44e6be16c32c09c8a39383c4 -0xe14a2bbc667906bc2a8461109a961a2e875272621237360ff8117ae58ef32c9c -0x547576315dd8ca552d3dc17c05079f6991938b095d90dcfd829cf7f2f87f0b1e -0x9ddf12e8313794d9932955244e8db8db2e26fccb8c645cc78f12b18562877a1c -0x038ca80cd4b75dba4deb216b9093e640d2bc06313c0817a22ec19abb972c2c61 -0x1109f82c70e534eec72d01d7d0151e1432d4b94af524466f2a813fefed11f950 -0xe762c3376ff0652295d5edaea215429b277cc2b1c9e9fc24141498449f6f570f -0x56466e625683823e552713159deefcf6c2ab0025807b3d5056e72eaa5dfde6a0 -0xf221f458e58bbf9f5f05109394a596b2391b0dbfd0f3135a08cf7b288a7962f0 -0x6858068075bb1bb9ff73c0695b0c1e9a468774d21a6812a90ef14461b8aa99d7 -0xe94bd2955a5e06e2f0558b42f5b7a5e59ec3212dbf9bd6976d51d53a95b144f7 -0xeffb11e3d236f52cfffdc3c44dd871dbe733c5ca903e9116a7c2adb2f0090885 -0x8ec5f6021fbfd97f196fa4b7cf8acede326a8ad0fc6a31453da0d71f99d9f4ee -0x891f4133225d36c880b5a68cea2013a048c5defb68743626b4d903fc8ba7ff24 -0x12ccddcaf8a3d52be333c0f377ca1a559211b8f44e1a1558f8afc487001581a6 -0x81bd22b138f1abf8ba1e8249c398e7d1b270d9be262393bdd0be41b1ad84acaa -0x2f00e06b3b0e1d2e309114e2a36d96cfe4e7bb86b6f345ead4c01db9f1650e3d -0x1b10ed0542ff9b802baa15497ced1b934bc2ffbf88dfa8e8890932ea3f4638e4 -0x87d559c0f97b2d1887e0e3db6da469ec7ddd441f08c0aa72faf41f3c4b7859af -0x587a53944c5fee0e5a6061106d60abcb599b7f843078dd8ba5a0c269ecb9dac5 -0x1a022c5b23671e6ec6e97a40d8777b2424ead4bd42385c69eae45c407467c596 -0x5add5b3cea530a69e0827215122d2525760510502460c014ac4e9b32e7fc616a -0x95197aa831bcfe8c1680920433d10715d00b5203918cec2df01764dccf16ea95 -0x114e473ab1c664ec5abe36b3431fec27289c88d29b37664a69d4e573a94bfa0b -0x7380f77861c68b1af8a416107ab9aee934dbec9136c712ff9213a7291638fcd2 -0x4c208615a78bf61e976a4c3b02cd84f7b9fb0adc1567e75ca22429109ebd73d5 -0x2d9a1b8d50fa8a56f2b39d9a77ba1dacc771134b1d91d041a9d7f5e7da91b6fe -0x0d6076031d52b2d64c269af160e23a01f305d441b55ea467a39ea6542c142151 -0x04c5f33b004c732987d5a3f3d1339d3e72cd386d8e4ead00c18ff8517e2c6d91 -0x53b5fab1674ea1b74f361e23f627b30150ed056ae391ccd674a57211380d0839 -0x0df3e36ba5050816bceb77a66ca6ea46bee6b39cbe8a458ad5f2c162ec277a46 -0xff2d4656b24da8a9ca2ca3f75282cb9ce99510cab88b490526b6442c96f5ddb0 -0xc1a64607475f969cd160955c022ba3583b6ba8af491bc89e626ecefb544d8dd9 -0xf5840fbd5361602038bdc3bf80f91dcda5fa6802a240dc70163da4c3f27b1c19 -0xeb6d5506d02df29a25fac173642745b4acaada149e88bba236a4cbdfd45c2148 -0x8d6aa02a0069f61e452b97936004caeb5a39ba176e872dab34c5579cb6dd0167 -0x58d129aab2c33a143ae71c4ad82dfc7fc533623f67c5a107b55fee8a10dd4bc8 -0x9a54ddb36aafcb88cf4a3dee8bbc12c250ea6a41ab27f5648c601ac80061f0cf -0x961af64b6ac25935151fc5f6cff31a75da63b87896738d3f8ed1002ae9e7a3ff -0x243c3066f0286b7620e7e9a9c94b1461e79c3178ceb96531b66d7a75b77de8d0 -0x5405e03c948f64b9965c9db7c19f919a6137347c06c6ee0836135753219d1556 -0xfbb47d3a544773f4f31306289a48a70201d7fe849100be5501c35e91ccf93633 -0xb89b3e01dc27a9db342adeacb3184a4cd83fdc6fc5bc80051207d87b093526c6 -0x884602c403d5924dc77fad3b9fd13e2dc82e581465ffdbead7b4aaa0fb53502f -0x46dc41accdbb19e2ecda7c2c70bfd7b5b3afc3927529dd7a636985b8e3341415 -0x29b2536fd0b0a47f7712da6ab1f306133a0c05ea015d03426fc6b3bce2e8aeaa -0xaf28c1866de61a165f23369e1c83335210f58517e0db38729eaf2c58d456a64d -0x713b0aac78523cd639e71f6cb3973b5dd6dbb9bd6042b0d420627774c2dae972 -0x9ec326e2d18afc0857bcc2b12b5a7396673ef1521da8abd97935fb806e078b8e -0x89df8b8309259040aba2c985187ebeaee2be4d4ed5c2d1e1a3ddc2200d2a79dc -0x5f0c6788d359da8f922f84baa3580c776b1170964c2a434b07c448ed024af80a -0x9fdc6b8881ebe699f9c19334656fd091f4475d333d1a5b7f1a9bf7bca21c1475 -0x6ff2b8e3ad8b9f38adfb6336d255b9dabe389135262a50ce624183b8b28b736e -0x0dd5d50577f3a0114327724f99f2ea0a0c060aff90bfe184a8010907d8912ecf -0x3077ebd339f5f11d1f567a17a0a8636d810d35a2952f6593044415aeb23a0398 -0x37a1da973c0630fcf50cb00db34c947aa2e9140f9799a004d8aaba38763497f1 -0xbf99184364db5cb6661668af505e061f46d4666b7323fa656c53355001d4a845 -0x21b8ff0ec571e6bad0fe1f0312031774dfab0da732c8e3a53ceffd20dbb6c99a -0x262a93153876c51f1c45044fa1ff72e218ef5af03d59a006cb3ca36742bdb5f4 -0xcc3646b93ec8ad971088af56ecde4b273d7d068fd560cc2e1173b674bab72328 -0xfb2fae0c7d717fec32d810df7292d7f555be539e7eef7481151f0ccb57d491e9 -0xf5e95ce02927eb6559b39d2b11dfff9c5aa0c1754c258f0136ece568d573656e -0x2ff048de51d33e0d7d62ccc09c50fd8f1c8808236aa7328c885b39ea38e0af7c -0xcb112f6219b8a1cc77692db071b3c646cfd4aabde38e0f33854abdb11570cc48 -0x3f325c9c41fc6a8aef53d290696a026b1933e114411e6d955fa9bf718a22b543 -0xdfc262e41819993121aa15b4fe8c9061aec5de9b4e99913177b2cb8781359018 -0x28bb852f64eb3688a56cae5940b92fce6b75e85befbda5eca1af231cfd483d5b -0x8d97deb786c7ba42a6ae3a2fab2f17812b4a4d8b8d0051bf9fb88fff28eb1dd5 -0x04468d60f05acff788128048b9a23a6ca756d0b4062aec235dddd9e2157817b7 -0x0977baed28f0166571efff502d98a8a5dd28af2fe632e2dcf1966213df99192d -0xbf09652344387b9d769fc00a6bf01079a6cc1ab93b38e4952777922ea8560a2c -0x19c7f1f52ad8b87b822f4a241149cb45fb1954f6745d3e10f2ba5603ccd18ed6 -0x2acd82aff9631173ea74c6dcd3a239171e7bb638bd48e46efab4dc0da5804aa2 -0x9073ef2bbbb2857b87ff2841f211dfa80066da07241ee82188e568dd5bd7b475 -0x3c9f8f7e471803f2500d7c2608a7560410f72d5c20606983c3454874a2d8fbe6 -0xffc0cad3d48efb775666d80d02d8a9936095c70a0b2af030f86672d135fb3aec -0x5997bfe06bd6b399d06ed4aeb1d5255aa1b76194ab20832f7262926641527fb6 -0x7cad573192261eaa5f8865962f92ec9856a4e35281626ba36b40e3e0cf2fa74e -0xdf987e4c33191f6e0664e0279761f96cfc0e60e9f5282e5af91f52f51b4e1832 -0x916c7ae3660a3d5672040958550d65eafb6e29851c0e7c5397ff4a2688b46587 -0x60274fe1bccbf3bbc91e7ba61441e89fea861db964f75e467d5295a2adccd98d -0xe8baba760495f82af062516b4473b56b27235b6043b4fdfa6853d680dceee42b -0x1767d9d45db908b3fa69fb37a92ed0c714dfb8ce8527d1694b7cf84c87f14a40 -0x25f8ef0cb835b32075dfd6dd0e9851c1f07cf74fa8724778e80a8fe43f2863bb -0x675237d1ea013b3738d3d3adabcc17f34afc78f4f708645b350ed903a896fb28 -0xe3b442ee2b44f88afb19eac11cebd09b2ccbf48833e0d0bbf41f9bcb816f7e3b -0x44b8bf4e64183afbb1fd25882218093a0a27a9be9b0b00c71cd3173e819fc6cd -0xe27e63167d84470e4e4db5a2234e29b0639fe842ad641c154af6772d8ce88bec -0xa99184ad87dd412106b9818b839dc2d3109d06a50151ad11023feea46bb0bc06 -0xffb4da64871a6f39e034a66c360799318c09bc10a3fe4d4797a3ff267a7bd3dd -0x09c67ac223624669fa6b7aa4fd99fb8787efca9cf5bb4ab5ec626c80bb57c59e -0x16e6886b35ecf13fb7a9880237a5f301cd140f5f2405b66287b3422075391298 -0xf474c5429afbe745390ae767d6c28c62f59a3e086bc01428344b90f751844d7e -0x3c3e782835dc43255ecb639098ccc0fe5501990ee780c514a42a6ac036bb9325 -0xed6cf5a602af40c84945c7fe7248f609bc93db3c83345b10f26c9c7382b35c8c -0xfb1cb9c8440b3bc072a4c2573bf3ccace021da54563e02fecee056c5b13d7f4d -0x995db9e99a3eee2a5d7a0c53495097c2dcc49d1c860537bb766a5c877014717a -0x2a59bfabbb947ac2f935c3fff13b95d0206eb06b6cb6d064d5c461bd25d60003 -0x3963167f0c8340677f7d2ec0100833d7e6f975a6378a83578e8902da3b8f2116 -0x747ea7ddf621a167827e1e4575df4d14279d8df9359f38b8f83ec70c2c34f24e -0x289130a27bc3deec7ad834f6e803b4c71b7b3af3b992c2dfdc9b8e774c8c9a40 -0x9bd56578fca36a6a3795d9fac50c4170fcf981f10bafe50ae4041faddc72382b -0x237a637c69b18359c732186e0fb85954192beadb65a5e45fa64d606f7cf31b8e -0x973d7f513bca153eda89c30bda76bd5b34a6068b08892f2ad782fc0bda9f1bf3 -0xf434d96e07beb095e7afc2e49519a0e64ced5c1c9b1c276242004e6d0278cf88 -0x37b8ea35e445198b174c1c6e79385a0cca53afd3a6deb64fc3995e101eb0b5ce -0xace73fa25d4752d8e74864a355a1390af8f09c064e3b8abbb8cf6a3130066342 -0xb63acf0735d07e3b84570b816e01b1436d923551071bec709f9ebba3fb6c9208 -0xfa3c3f3b3acd9d808105dcdc475a8f4f72b71e0357c429de25beb429664c67d3 -0xeef5f01252aea64047635dfbed2e8ec4d3bdf1363dc539496195387465170a18 -0x20731b6409fc2d40c01e890fa6f693eccba2ebd3201871ddd793f21b00bbfaf8 -0xec22a220e923c56fc56be58491066d69be6d3c37204e3192880c5fd3adcf880d -0x0fdae8124e5c9aacc69194149c247af2f0aaffc757656cea573df93cbe56a636 -0xad0a5171498a769a19940ab50c131279dcff55186ab50eac85fdb850fed81f33 -0x22219cb26c293e62dcd862b0f68c969ed225e6593c834a11460db6c045d35a72 -0x96772ed00694e2637e0451831b7500145ef278927de2b3515ebc8696ab5be517 -0x30e4396818fa8d4cb8037d95084355333192dd5c9cd12b983ef79cb641c438c4 -0x3899514fb6efd939213b61eaed6c3fbf1858f5744d50a669065b2f6550e43d3f -0x7271963d11d32cf5a6dd8a3eaaf8abcf24fe5ea24c7b93965a5467504c6b8900 -0x9a601c84f25be090125dad097b96cd4e4827bc0b309dbfa8306e278859e685cf -0x8365cf8eeccbb12394d37b3457e561207992575649fe98410e43f5496b1df563 -0xff1efd10610795af149b30d4930d55e402cfbc991b18e5bd5013577fd939f712 -0x9d88dd9e03eeedec433180d07bd943347c175bc77fea89f4e2127c8c2110a986 -0xa4503a310e9c7e6530ad0e93fd90f028d69e5a6b8ca1be9c7d2f72cb2d9614fc -0xa15f4410fe686d59cae48b9f50055479f1c82ef5c5ff944bd18516a99846f30d -0x552cda53e95a808ca20a9fcde9d51bc2680fd4ffe9d628016aaa9ce3a6d07687 -0xbf1e6cf5fa4afe5c5e0785137c17ed1002e7c1ab42b8089b0924f2726547d1b0 -0xe30037d2b19700e4db73c67c12453486b5cab9ca7dbbdfa14217200532687de1 -0xbaad81764d2581ee1298c45203f7cbb072e310d46c3299cd77131c133edb1b20 -0xc2622c2f48a5db73282a6f3a72daa404086357ce38fcd6db947873693cddc251 -0x2599548a3f20b759ac971e78f4632385c8b5baad45ac4a56bd53d7b9bb5e8b41 -0x92824831e03a439ee37534ea562d046221615abeaefc897901906d69af1e5080 -0x4641aced861e6efe23008189c065bf20bfc5538b85ea0a19891b648a56fb9949 -0x8e6794e4bf08c1e72878ece24d67b08810bf22e69614829477449215fd2ef16f -0x5dfc74718d465901257daf2a37ef1f4bdd48c59a66a470052040e74885cb2840 -0x51886d2e5e53996018b20c2d0d175a91501865e605db4456cc88eeece2f6ae32 -0xe2561ceff147c1388070e34b27894a83b39edde2cb5513939f78ad034ca8d7b2 -0x5c016588e84de30e15755e1c57a09ca51694d6d9af5c785402dc1b0ec18587f0 -0x98c6e68321bfe87b2261449692714b0f8d87517520bd2b7b3a9e4b5905462e7b -0x080b3d792b3b22095b98d1dbf3bfdcfa54ce5a9d6647397c2c1f8110da479275 -0x7bd633c8c7ebe798023f709f10b7348346fcff5357c75951a0f99389336852dd -0xa1f55903544f779896f5d36934181c3410b32c097ae546324d975abd67694235 -0xe463f02a7ef9fd4e0ae93b9adc55597f6cf3eae2de15df38fae7125f68ec541e -0x2d5e01da7016ebe20fc00980c3a3c16a3438b8bd6cdfa1462e2dccc8a9bb5a86 -0x14da2870394183609a90aaef921230ba3f4d0891909cc20aca549e04b9dee828 -0x9cf210d33294e9b3e3681807b57bd22a709e2204a6f983dfd05ad56f21816f3b -0x7fb97ef0a4ef141ae1aa47129a2f7164f5898e43584de89e2ca87b5316d63c6c -0x55efae16163e8549e68f60e157f17dc5eee8718796d028ca7c7ee6d04ab8b7c4 -0xa27a32bdf8f0c1fb68ed02abd3f09c8db9bfa19cfcdbe3b4586c411e7922df66 -0x112fee254bc9d262843732dc372e215d83121a227ee44668f00bfb98d665e70e -0xb324e262a42c7f5dc35a4290440c0f7351d1cf069b6232dbf2cd76e2e63da9a1 -0x0cb110982d0a7d76e7d7788c1778c8922b1827e882b397c6984fae665b7962e5 -0x6e675bdc070cae52eeb557e744ecbf88682ed531ff8f41ec9e4af05fc36d14b3 -0x7fd1deab462f97e035f58df82cc2f5ff11c94ef5be360a57224a3ac13f47e483 -0x99602364bb55f6919a8e6088056ae8214865ded037c733233b7aa2ed62b2b790 -0x1d666e3da61ccc039d33e8682dc81998b9cc6ae03dafd1667eb68759a1704760 -0xfb0c43dcb97cf9ebbe7118b32622d4f278c8d40d6dc43af0cfb7637a936c453a -0x9fc48b0e75308dab5d5a864f11da858d28fdb8ba63939c397b00bd8db1945360 -0x9fdad9dfa93e21fd222fccd63b1f612efd0025e54dfbda837c8df2d92dff2a09 -0x6f87cbd0e53f534c2e0d6156bd1ca18fa82382788a2abcab5e414bf3575dd994 -0x4be87ce4b7c7b423501b66c0e1a0f97c8c36708350afa637720b40b5edc3f597 -0x8dd2659b911467b9e2c8b71c7e50c77652f7500f208526be8426888f531b9806 -0xd6233a891deaed9895b66f8770ead4ef2383f481aa0240de5c77bef64d5572fe -0xeb4d8195f3a2d43f13b1b68754770bbc9a26c75ff18d0d676b36c16b64ea0ce1 -0xa2d1b34d338210de8cf4a1b9d67dbc097394e5ea499cac909cf8974934804803 -0xdc81708688234e4c018997d9233537e355112267ff0e0f4836d1d5d9172f9b79 -0xae8d88437e95ed491014f722278f0f6d46615aa12566a6dcbb74a756649c6d22 -0x3959acb32f35e900258d5d36bf550d079ee55ff02bb753fea08aaf2076bd9701 -0x3359d681fcda63959d885ffac2259156a6845dad4939eb5cbb7b44d0eff494a9 -0xc53c0961023c44f757422af789bdd2fc2a285c0fb9c2d27091c22a9e21488866 -0xad4bd61c4cc19251cd47ccba40b197779a0874f841f03f7e6b70c9b0a0f26a80 -0xd60493cc8ff93e3529a0c2395b274922a48efb78c6d4d9cea972ba228d60d48e -0x47f9d97696efc572fdbac5097b9b7866749cfb3890d6cb7cbfe99a6d1148b55f -0xc71d379ae095b78a9d219459bf163dd02868a48f0f0d10a6ccf6d3557a6334a6 -0xe491d3490796dce8efa343111b2480b5fad9977abdbf2dadbe3b6df39c237a0d -0x00bfe62e617ffbce7cb77a1f8ffcc12daa54489b3d87c317446c84bc541c6421 -0xba9129c5487d6d5135fe178fff6585c3311105184718d933532565ba3e0a646e -0x2398cea042b3b98270df49ce03d5f998db9bb25ce20bfad085244ce220e15818 -0x4749cac1c755956437dd8fe05ccfc340a1845830d5d1ad8af6a7846c75f0cdac -0x0cdb12783a48edb4da46d69c54635e789c61fc8d9c42efed7d43a6f32aa642ef -0xf6d3e2cfbfbc45ea22404aa21e9545f6f35bcd16a39f05d9e5696b799c12e196 -0x9e4465e82abdbb864fadeb446ace4718fddf3f0a99c8debdfd8c440b1ee1d176 -0x2ec694f4989958aa15d491caa075bcbd95bdce0dbe31a872c2248a0b193cdd38 -0xe7d23929c8e8fe787a5d0e861936085d92e3132f812f3b35b966a9b939edb439 -0x09a75636e02aad5f88e80754917f6d44870ce8cc86f69cbbfcfc6e07007db7af -0x57a599b0a78ba7a3c929ab1722589655cf230e0bf526f6bea8af19f3b0e4541d -0x29d878635d3995ff9d1524d3e34b31ea19d0af1badb254c2cd4d114131a01450 -0xf7b74f1befe479e7c7d6d276205285561331bc103c29786ab0eadf4a041ee539 -0xdbb9d56d2a04c3cbd836ac34be3dcef7115f564d02010918dc94dd3e0c19fce8 -0x34237a7d7de472821b530549a21e8748b09b3ae48c0f9e08d54bbe311eff3963 -0xfcf3c8dc6a717c3a8e3184ac8c0d74970f0867237d654ba9a83099eb61472642 -0xebac43ee23f86a15ae3f1502450268a92ff8d0a03091417c4d25d14bd8fdc15e -0xc69266d4e1f724fe8e7af31c4af53cbba3180a8ac83da974811fd54675f2a06c -0x8d6e8a09102dddb18bbd532dbd9762137c7fa6f4026824a4186ee69532c0b22b -0x8890f158b0fb16bc1e6614cc707c1a48627abce1dba4bddede0a597d3285c859 -0x95bbd0f46bdaad530dabea7314fd138c3d2fcd7e73f76dcbc94fdf8274be959e -0xf8f67c73c2a00527897c778af2d282c2293b7b4e783d9c7c7720493872d9e32c -0xd795b9b05e616fa7a6b13681ccac5e4cee05022f70bb848a8da673ae6445a7f4 -0xef39ccf744d54aae31fc7407255c3dd0d47b3b5bbeb07f9172840db5f77d79df -0xb654c19644aac00482d8b5c6bedf661fbc378098f037076e1bf03c7770fdb584 -0xd7bb29038e8d8153f1529c4e777181c80de27ff32803db3cef13715027809e6f -0x42b4a54203e9ee793792b6d8730bc7ff45c13e6e94ab5880a94713e191e4b3b3 -0x592ba65f20dfcc79021c237340c9e291fb19ceea2d2f77fb6feb035aa7e5f30e -0x94e3e92e9b6c0baf8ac7a4630ec90d2cf31561e07f759d6b596a9898bfea93be -0xe25ab57294e5bf62e3da9bc2de4d9dbb943e6b0f42ced5a48c0e50fc2828f462 -0x43df22e8b9ee7bd4d7631bf096183054d29d18a8faaa9e5805eba9b0eedaf531 -0xc6c5b50b72385006d4339a342c53ea258abf4127dfa893996cf14307a8362265 -0x0502bb62490684a17ef013ebd7e91a1821ef87ccfa89d82eaa581bc9bf0b6085 -0x9eb2295c7a5c20d085ecbcf5fa72a53ddd6a10c53a2f351d12d540e0f03531cc -0x00df6b49b2446ae44d22526a19167654dfc579764ee9d594417a503cd2e15f4a -0xd76bad636743937bf184cb16832167d715538b823559abe72bb1b59cc3437ff4 -0x4237817ab81fc1fd1cc546903aea437d5dc06522883266a6876130e6d50a7787 -0x4cea806f27730a1f0f5d1722eb0b9c74e82102c5e39b96f0226944485fdf49c9 -0x6732c44c1423115ea7a2e3cc14118822db93c6c5e3585c76c6a80899981781ea -0x7f0f75ab03c234c9ecbe6d9e8a11f8b270318c403845cc444b720f7e25f2af39 -0x2ddf57c69e1bb1f75291eb29776e67df4a8368c78866e09ecaeb8a677738242c -0x5f06ccb7cbd648e0b600d4c7c8eeef731b1eddcf519579750e6ddc1a2468ac04 -0x88f06854bf943fb42441fc862ddd9790e20638f520b5ef3397e63c88950836cc -0xc3fb57f8e1dc27b20e19656dfcaba8f27f310f065134987522a2b54848dd0c80 -0xa1573a7f20ea77771663972c9efdb6b5f1beb964e5592795535611f197c1ffb6 -0xc2bc5645d5a94ea97178c7cca1159e70682a26302af1c72e9f161b98d9aa4c8e -0x6388312c31d4d517829c01007693e6cafdcf0bb49052e1851e9c4e4cbb8bd186 -0x509bd6d55d66b6f06b54c7d7170ae11529b638e10fbc80917436aed02f03a8e2 -0xf179219d4e75cdc97c7102f579d8ddad272d9292a04622af0e3138d7ca618b5a -0x064c74e0cd40be2ace1f6892b99650ead7d31cbdec955777d9c2c23f979971f9 -0xe7b7b7639e7161fafc3c6e1fbe95bf3b28990e220b95c30ed2063e3acd082904 -0x77412461e422f84bc639700be50d72306394ffdcde861efedfba396313fe0a4d -0x1e4680d6e62a2620503b1f4a7bb4de99f1ba3955a56490661af0d318bbf16ee8 -0x55b15c924c469eb7c800f056984bd672d04159a5ad2a0ba0cda2596e225da327 -0x4db9b0afd2b14d29a5fc995c508a48e2d8725218366c5aad0527242147b381bd -0x810859269b4455f339d99ea1aa1414312c6ea5531863c4ee59b3c8f831445bb5 -0x00f05525f856a01cdde1c5af24c5327b9d1a673d4ec815fea802116e66d3e13c -0xedd093e425ad1e36e35780a281e9a7c9dd34c2bc5d8fc1ff82c6d7bd0f86b723 -0xe4b9510c1767570e8b27dc5d971d6718dd5efdd2322694ed8aac6a67cee2b537 -0xbe75ae37aca8b59fa83c228d3e6c04619eed839aebbd085c97225998e11f16e2 -0x21dcbb5d2d35be408bcbfd28daa640963185bf87b68130e7e6c3a05ca8f4dd91 -0x61807b4aa9b2e0b7d2c7e7b2fc2abe63f75a295a32c6ff8032ca80dd7b612a64 -0xb6a250be28a0c3f605aa23f7a527c20428331292882590421eba4b3c4f47cf4d -0x2d7aaf17d5ac037a8a13e1645c11ca7fa9fd3bef366bee258d24413175f060d9 -0xe6fc39f80a0ed08c7620301fa9b812a374e1bdce10af382ec823a53eba8ff125 -0x338550dd4d4172e1710ee73390b6f3519ffd7645da254e46e72d284cb7d24f48 -0x109a84422403f101f59673f103c4c3f066ec673575a094e1adf63222deb2404e -0x0b532412a9be31f64bdc7caa63f1c12df1863966fe1e9518c1efa7a0419bdf3c -0x6718d3b4f5479a6ff66d8da64d623420ceb23f599320c6b2c8ef2a948f31b396 -0x4277fb804c34f67ccc426707c8a6a6794e037937dddc08ed6638e3c485c7b3f9 -0x5de8cb78ea5aae7736bd92c1162333dabbc622c19324d82c015cf023fc4ece9f -0x15bc9feb956a448dab562bb24531fe949f8b6a87150ba25114f8bdf1670efb8f -0x97f56b34fea840875cb6aae5301caf986694dfb42b19cba952dc13144a9f1365 -0xfaf05a838ad7979cd134f0e18129c589b27b026418f236a34cb71344733a6c3e -0x3421244caa2ac31dc7942d9cf58cbaca665fced0c395df872fde9aa0b0635f6b -0x95ea9ae8a48338cb270d3e64bb134ee661218cc493ee6a3c36b1da4f0ab20a9e -0x6b35f965ba04e3c88eb72f27e182e05173f723e4921ed7efe60446a371ee9aea -0x53ddfdd1e333f7adaa99b466d133198e84d4d3e371a55d5ed13e7b18cad3995d -0xa617c251ed500d3e2c1bc1c62784b49ff2e9070a696440dec16b9a5771be9c19 -0xda313f6ebf0f8fd13ced407121e70aa6cfa19a694ce33b10734548d0cfdebe2f -0xeb25963fd576be9f42dccc8bfbd8a525081138923d164dee7c39fabdc1c2ec3d -0xa0143578f6ff9ed0dda9da6e91797beb190d16c23914f96722121a7b83adacf6 -0x0361d30eff52a8381c4514f0c6f84607ef86df7d4418b57a2063c0a448f5d179 -0x84164f8bc9328a4ae68f91755f15f8088e37215ec65deb3f5eb4865b897cd950 -0xf6ea6cb24040a11e160622f93299e93e7ddd6bfe90ff148e91ced6cf277d35a4 -0xcb59ec08f081dad1336bf4c50e2bb50773f5f5b997efd2eb5b9590ce0719a1d0 -0x53cdb8bf09fba97e5e5c9a5f4f7925433dcc7a870ace9c21789d84d4798b3ecc -0xff7f3a8faf88b46d6b63fde46185c560942d3cbdbe1526da9e48b9eb600fbf7f -0xa49f66c4fc90a571958b898f0f839726aea658841f265727d288cf75c2b4b9f9 -0x887206909b82d5127c5eb3e58b57a3cae14243ab74ccf233fb94d96fced4e3a8 -0x30e84774fda1f09c953107f87af2c2db09090e199ac121b133acad747f073718 -0xab67ae4008770193c29a3bf0b31357fce8f20aaeec455ea2b384ea08e7d4cbc7 -0xa23aa59cf08b5de3edc2ed1b377552b6e5bf5c1335644ab8225e8c9a802c7acf -0x4858b0397fd8bb14d633997eb845d3e45933e20424e888676d551f31776c8760 -0x2533af0eec23e40377b98e8d105f32b2486ace2ef7e99d92c59bec35657efc01 -0x8e34cb71bacc61e22648c6ee28f7ad7cdd1492402e0f995cd5a07c1c526abcb6 -0xe6fd120a6731dafb98110698c96b3ee3ff417be521035a0a432b069e8fe7b40f -0x7841c5824fe33d4f6d2352a94c3c60cf4c9bc2abce4a22db302c0423a03ae9ed -0xb7a58dfd446ee3ded280488e50d13ac189eb7cc03bb7ec6506d3dd571712d8db -0x8314a33ce1d97cc65fe6f6ccad084b60faf4aa5836ecb95be9c4707fb352da7b -0x849ffa1e3ade2975620fe963b15681a003f250c59541f744b224552d4da61eea -0x5b06b61612e736cdf2493c73eebb6f6a10977a7991cb2ba7685ec938c0c40863 -0x1799c1630c3b0a297749c6a1eccfc5e88461b254e8464f4c183a6f98e6e5d08e -0x42260c2047d9fd275fe1a6a0504b897f44a14eb9484ffa729e1d7ab84100f001 -0x6b6e8adf4d6f8a52567f8dc1d68b6146bad1c3aa30006ee0d47679f7754f3969 -0xa00e4c3e5d458550e521ea140c84e227157ce1b0a556eb64f4fed0c75123d455 -0x9782b25b18edc4e1ef4219d09528aea55564ced7a88350da4dcdfbc68a2a547e -0xc173a4a28078d46f2af928e08ffe4b26c68761a8a09e536f4ed17dae3124d6dd -0x8caae21fc7e6900d2a7e2e446aae834f1ee3a152393aefe9a5566111916eb6f5 -0xc135939ce4d37ad8c64004f4030d5c63165c928645130abe61ddd69612353f62 -0x728aedc1795b4ea4d965d14f98c70e5c758be98e4c78736c6f52e4a8162a16f3 -0x640d565e51ac0d95a49994caed71e730bcc78f173513661c852e7bc647dca83e -0x1414dde5edc373f9c40088bc7c65c2983424a81ae6541e941d38d84567651259 -0x61a6bd55eb4f97a280ba9c33dd337b6006617212944f714af6a6d32bd64bbfdb -0x01f615c8db6f062911c3af6f33da678d03617ce598440f0611dd6a65a250f28e -0x6604082593d07f0e2d93df66aaab41176413f4a624cbc60fd47082348f79b146 -0xa51e806b8d1f7a72cb4cedcb91ea41361ec7f4987e24d7547111313b830f2b03 -0x03715e949d955fbb259dceabb398d2fda20e13eb3634918d5d838e5844fa83a1 -0x36fae3bbf3134b18ef63b597192bc9c10138d30edfe3fa78b37cb45839dc8eda -0xf8f91ce487599bde0eeee9005270f1fd3f8e8a647271156941ec26356ace96a1 -0x81ee04fde498d4922dcf321b5b9bced87fa881e15b5b8ff7781f37f05e87f40a -0xc9fc5eda2e2cb4a1be8c28a88308561d191c2f15c3d28cd864a614d292412644 -0x0ccda14b618cfa77ec3430723b1723d4264b432c1a8866d38c5268925b963b75 -0xf850f0511174d10a0ee31cd380d339617f26e7dd1b40e3b633092d1d7daf9a07 -0x178963e03490be25133e1c24682e1bce4b4ec05183517bbf1deccb3c9fee71ae -0xad60b8c9d5db0b5a23b94e27bbb806401644211c6fdbaca24a8ca09e8e5e04d4 -0x49070754d45da7ed44917d03b560cebef69ec30a7a64b7862d6be74939fff7c7 -0x30ac7aedc41db8050cb8c7411b9e8e1ae27a2a564bb9302bd7e2b41be1024ce9 -0x28890f312744dafc7f0063cb48eb7ce4b324874ebfda4a87219c73f53a8db36b -0x3e937c1e3eedfa43f2cc247b3d47e56742ef6d8e4ebc2dd249d4a1f42dbd5a2b -0xeabb3b276099621d2821888719638161c62d9d13b8fa3f626727c21b30364343 -0x773ac79c69357941ff86fdf90506853e1bd3b2616a00242c15b7dc6da3240d60 -0xbef0204672e0ef2cefd323a8d18262837fe2044d340b6629578a17bb9b6b21a3 -0x2247872292d6b235dbdb28a4a8477c37b6fb6799fffa9d178d16c7b17ab21ca8 -0xd552ee308e39a89984196ea4e7c7ef3a98408b579dea771f2a3fe348c388cb02 -0x0f09501da9289bebbc805b3905b77be408ddead6c6a29788cd554b4741394d3a -0xd93ebfd0b9e51c3dd2de1eb51f4969e9f5ff8ebb28188c0cab9eaa9fbdecabc7 -0x961687802960d162311dac951fd195f743eb55c6e1d2214e34a364aac32d3d78 -0x6938d824e0fd845a1c64fc7ab4a86b81044f79bbb5dc46f046fb579c100712a2 -0x8bd32c7ce5255e5ac29c495a7ecf5e17bdd9a910063eacb73347dda059f83707 -0x600b325b48a6f7cf42d38162c70b92e3d36843d84e9df4fb1e3746f28fbb7cb0 -0xdd98348721d9769a8cb6a30923fd0700aaa473aa4908c0702557b74f78061938 -0x544f0391dae589d5579db00e8e822eaf837a29fab26a82777f1b36c10a9ee4f1 -0x5baa612599ddbda0cf6adb512e9e79a5ecd159dd981f2a6b4d10f596710b6cc4 -0x7d149cb7bf7512f6ab775aed92ad8e8d012056fe2248e1d56629f4b9f97c1ceb -0x702361904794243b288f08fa719d544f8410652faad1f9fd5c2832eff7a89a21 -0x9f303d8f1511aca6c1724414a3990b54977c64cc92eaeddd2c78867f706bdd65 -0x49aec6cb2ccf750d4e83b449483631c98edec90409597bc816563f5942ec5a2e -0x3bf5bfad28e9e3df904891a1419260f11838502f6a08b7244eee353f284b60fd -0xe7b53670cb8af8f8cb88736496a143e619a8c9656e896162c8b138ca18a20344 -0xd2786f03512439618ac68bb75266c875d5152edbbd5e3ba75f5c329b5ac7e48b -0x3dd25b2895d86d56eda9aa276060981d4c79395b81d5d5cdbe9328ffeeb7549d -0x1cae88f30341161ad2c764ffbf68b229c81469cb2724c436ed15d31366762d06 -0x88727f7ef9ed7cab2a77f813b64fddb0508c6888e3810eb1b6f17054810004b1 -0xdfc4cc0cd4a55131b91f393deb28d99468de8fd608de8ad6c69d72c967385da4 -0xb06fc8e0c8eea1ff7b821f3d7aae21c13f480a55c5192947be6a1f4f5eb0c011 -0xff405379e077b38c820a1df45b2d3ab1844de29123ad23725e804ace9c3ecc8d -0xe7f66c85b62a4d5447dc2245da85289c4eace51511c59e093171782e96793abe -0x9b3a098f692707d9d41b70e96c183577bc9d614e0afad7385e43803962e1222e -0x471f5c38f344bc4ddbb44e52338bcb456a4244d167f889d991b582ee36cacd2a -0xb48f7e9c14b77e48807416ac749d1c1fbae43196d10260cf63e7496d9732569c -0x230d4a75647d9d6c181ee76292b4089f8501618f4e7f5d067de4dfe965a5764e -0xce58d1c6d7adf737baff93cf620fe9068c9655d08f5b9996a472b4feee0b62b4 -0x3ee6fb6d8b2b119db8dfcfcd11b387354f0138aa15489d710f931084398825c7 -0x012cef9397d0d817b6059a4005aaad39b97819605ef1b5407332f308168bd955 -0x9c31a6f38c9b7fdcf06f75c37c10003743a3bb9228d0726428667d884fc48b41 -0x0785b4abd73cf6cce07cdb6fc39043109237883713ee2fbd5e34d5904d1cbcbc -0x8388ab0b491bf9f70de5b6bcb7dc391664b9226228c7523b184251551d1512e7 -0x5901822f0daeb76e485ed8a8b8b922bd924280d2abe8016239c759396bc5ea99 -0x336418ef4f876240ad67ff8a111e6b96f8c5ad51c0671451b48a5a13f29f3566 -0xb6ee16cbcfa5a541b011e311d6d79dddd1d752ea3ddba3d546cefd7a7cb5c17c -0x24a9aaaac74df2eca460674940463ec8184fc2ae5caea0a336dafcf0d630071e -0x5921238ee50153dba3e2ec8f15b08fc80073db7802b9f0676106414320401e30 -0x0ce7e4122a254015d736af8694f9443a9dc174167528ccad6ff112d90f1c47fb -0xaaf58b7bdce4d511526ef946f1e51be3ab1a86542fdbd0ed21ab63308b6f461d -0x81e30f5a43132d95e9d51004ada4fbbb18b9a6ab6e391df2bc030c7a79a0c6b8 -0xe8b3f6f1d1bb28b30a5fb69de9176955ee98d2832aaf88fbaf2425ec09ae9ffd -0x50d2b3a0363a800a666beb00ac48efb666c146bb0a8224cac363af5b82e81423 -0x22b17171bd8736aece9fd3c2ab04daaf060e8e780804dddc2208ff6b766dde50 -0xb218c0124fb962d5cfe6fd79a8e37d80300154087c530c7f6232efe815b9c31e -0x60a25de2cb6910edddec9b05ff4a4870bc4a0ba6ce20fa419b8effcc256f425c -0xa81fbf95fa72881094847a4a20264674294d728e4073731b00b0ca37e75698d0 -0x28f51498801382a2578050e52940093e286a55283e4f3470bdce951c97d4d79d -0x1ce8170efe2d3f6a5046f3106d9477e6fc3cb9954b82e9d36b2ae792e3a01308 -0x4e4d70dfb40f58310e3d93e87db5851f3842bd9ff323da3b94ffbc9f9ce119b7 -0xf296efedb0f97911f36a4cb0a8e678ea340fd749351a303856d12527b4679388 -0x129393e1732abf1f764ca3c7452d22d16d86249328f009299ea7cf3f55486486 -0x9dd7574e8cb43dfc7ff07e8ed35da7a9c21e204f374f9468122f4d96c1869d73 -0xdf011bc4a77af2ebb4be51c3259a6a3a28f6d080d2874fdbe5390ffed63c3fcf -0x37dbd84dbb5d4705de9da40a3c4285b8d7da194e3db1c08119524065d07942e5 -0x5384d057f8634740fc332f3f2e99a992c3338e177a85ce8e074495295d337ada -0xc5c6b461cd22c87da094f7b94e2a490a25527062cb6c6d7e5a6a57ab920f297a -0x0b04dad7256a9c446fb321e95d846b0b1a2bd93ffcf6f124d0a5ac049d466ad2 -0x6f0b926eb56451a0690e86bd0892774493beb387ca08de9fd9d8b31b8ebfe5f9 -0xc678b566ebfcffcf732479c00babc52cb514e068cd19e451c76823fbd0809eca -0x40c430a4d58bc62e079fca137f5c48c5bf83b9d838c3257cd48f0a2ac6d07c2c -0xec6008ac3eb9ae77ee846d20b18ded09027cf54785db9d217064ace2a9110887 -0x47375852f2c7733fcea9d14290ad8833a9a007e2b3d3fcec43b59337c599b08e -0x64a67f72d3a493ae79fb3e38a42aaf26f7d15747f2e4acd48b90ef28cd30616c -0x47fa14f223f300ed5d3c4b24ae8a9f39172257dc208a6819d15ac78c60122a8e -0x68dd96f48b68ed2197cfbda46d7205957bf4c404b63ee817482d5781899704de -0x95febb1f7c40569e3d27328c8037d4e2998a48decf3123b750e0b021930d3024 -0x64db5742186ce027ab1c945644247b23975b41a2c8a8018feca13e2cd56403c2 -0xa77b4db9df3d85f860f5247cfa737989e85e524d6a68e4b70ae4b6c8f42f7577 -0xeb7d90805a542847d774a2d3657332d5f7a1b2147eadd483f73b01aeb4156c0e -0x010ee034ee5834508ad0fb85c38b40a5105243ac81c6dc9630ea093b94153043 -0x94b009f62113c9aaf30475c976d8dbe2e8a02238e6741e43b2c54d3d2374e5cf -0x7c4fcfc3992c61e5b1f79225ebd46f2e53086ac5670305b9ee018fc8721a06b4 -0x72dd8ebf8b4cd82310241548433aba8f5d25a44b46afb3b0260fc901e6d9217b -0x3689b69468e0eb01243867d8964408e218982acf84713ac1bc2fd0820f908910 -0x41673cc599ee082674a22374bd374a1168d412a3e765522abef332911af899df -0xc0b82e16511f7c7f856075349d9fb64958c1088ddcae79a052c0c42b3fbb3bc0 -0x1416b0617ea39f232a6e4c2a488498de86cc8e57e7dd708fc4568225e59f2dbe -0x37c8caf43a6746254547ee99fd283bbcc4e88c160191b5105b9bca23295b5691 -0xabc643f8ee9f0c46fc822b6349f0124262f295e51a15c698733841c6f6163684 -0x1dd20e49952b9ec65ccee48f8c7bee17f621e6493eaacaeca3179638551a18d4 -0x6528f702d8309860d3ab58febf3e000b88f4182d839ff04f37bbcefc5cecb238 -0x5c06dbfeaf470a2b1e19b3d03811bda4a8ae6752a181d4e4615cdd8648baa43a -0x0602ca6118301b4419add21fee9cb3b86089466778cf224083b70b479e995c06 -0x046b72def53e822b7f7c6d1d388aed158ed263d1a0617d934ddd65cbc33fd305 -0xca858ae56cc8b4dc317b44b7347b38556ce4ebf1035ef002d0ad3766b5e83515 -0x1c9c098a880a40754509ebdda194184acf114705d24493972b091620784c7045 -0x62fd20ead1e2630a25c4079ba0e6519e4b4214839cf1a7b10fc410a49c8e0cf8 -0xcf1fd10081e210282d05f528e9673a159773f4a7c1190e8413ec2582d95325ec -0xa2047c4f3a16aaf8fd73d21de7612ea42c8fda74c5a402ae3f7f457828d39b4f -0xc8b7312371599d9f5c685e5744e29cddd415b7623a26dc02bb54e7fa97c3a35b -0xb559703e895e3955704d8c72e3719a47ef358cb33ff748a694f426f3217a562e -0xb8b2a9ed742817f2b8d4bd44e1a4576354872046dde1a85be65d3ed469f266b8 -0xbc614172652c20400f62820d7ad72d05cd4892c28a16276e3aa6ca8b28ab7ea0 -0x6806855d5e791d1f2e01f88cad3c66a3d4ebaa15fbbf3c8f83bae3a0d8072b9b -0x5c1e631686b274be85865b39c89afdd1bdf58a74d0a4030e9821266d7726db9f -0x76e3ed796f22e25f33e1c58f62d036bd4962d933f86c6d632418d40f49aefc9e -0xbd99aad0885e4b15f9f8c5a68eabf27567d65ea4e1c75de8eebe4ec505dee507 -0x16ea2d9efe065836d17c8833fdc1525808060c2081246948ae52af651f38887f -0x3cb71dfaa7aaf045775be74ad8fdc45c85affffffc2a9767141281e8ebd5d85f -0x6fae55ea4deae991570c88d3d9131d3bae073714d833d4ab9127330e43adbe34 -0xd5ad4ca9ab68e619056f82c560f8b98af78006c2d2c41e76fc41ce21eab9dd70 -0x4b066c4dd1b9342e192570ea510d2975ffd46a25672dfde5376aca1abc1ada82 -0x083895423ab1b0d07e22edbf5d4ed812fc70ac5d5225fa93d279ed1cf7f25382 -0x5fe71a77ebb82dff485099e6807a6d69680a8e5b5500f1675a78f9cf067cd4ca -0x2805ad1e69c17358b0a429bd45408b8f52f7dd174fb2beb830acf365c89a1187 -0x81cf9711d25fb2731f0fb3e94cac2c9f121d73d78edfcef889c6e136ab8f7b4f -0xfa3372629441d3ab05873bc253a9f863d571a941da049a935bd274bf5d4ca2f5 -0x459f6d58b9a54b14ce90c47703420ed72f36e060276b2d458acf26f163d87ba1 -0x41ddc4263de552cbcd051b9e5b4d0fbfe08099c14178e91f76dac76326fbc6e7 -0x2b7cb0987e7b7efbdb790551ce81414244d41ebcbe5265e06f30277840eabab0 -0xa82b22290d4dabdc9e4e46e4cdd5c9f84fc1b96a89add9985856d7c909884b00 -0xa4e82de66722d54f7badae459028be62c71647c61f960db438dac36b2f743eff -0x7b951912fdea0ba10f0c89b6f969fb00ac99d4770d52224afb5db018b0fafd17 -0xf783cd521af0e6346f4dc27eafdc8d07b88cd70165319036173064703c8ba5de -0x7d71bc272bdb850596b5003da38998f917a41c3be106d9b19fe00e3dedc7eb9e -0xedaefc0c6c5178cb1035386738189aeb35dd9bc7c9834ebf2b633bd98829505e -0x5e15d7225e60bd3d5a4b5012d59c17b11fb72af69ce6b853b831da3efb556e5b -0xf77a69e1233db125ecd95743bdbd22f41c0ace587cf3a1b1d663f5c39221a502 -0xf974506a469065f4b70435e2c83f4c7c6a104ebb227edeba9e00f0d3ecdd0b3d -0x0b5d47e958c656bceb8edef87ee222e5f16518e874b3d387be0aa08ed79b2a5f -0xaf30c82537fa2a50dbda74d5a134f51e64329f89b9e58278d22614792d51065a -0xd5c115233287841bf5d59d1afe6b2ef23f19ccd1713ac070703b0f8af25fdadd -0x11ecdc53c51fdcf8d4990bec618308e31ff77e60d76e844b3fc84710616e8582 -0x04d75eac425013ec2ece398fc0b8e49ff25e7ba76ccff7d26dc60088304e2bbb -0x72b1489b383f4e8f5bcbf40528255cc4486ed0928f9e8fce8bbad2796667679d -0x90058df8d491dc824701947845905140f091bdab79b830ea672b0cd2fb82a4c6 -0xd51c2b4aeb17ef40505f7d3aad71d356a3ea9bde82877c5fa130f7fa9e24d881 -0x01ad6fb0f7c9e6599817314a086bb1cf36368d01e44cf168b534b6976f6708e1 -0x94351f671301e30a59b959836670c2638ca6233547d75c95cb0a90d0479c8609 -0xd4a40c13d42fc238dac45191adc9f33ef0cef163e927122f95a6ffd04675364f -0x1a65ced72e4422af886862d2e9f98ec3537e07d6010c6b3f028276fd196f1057 -0xc86387c6965a0d511daddd9f7432672bcfd1d0ec10a0b4448616b19a2d47cbb5 -0xa22cb1035e15cd69cbf1455df00a93b04882db9f7d21a05b4a87499091858cbb -0xf5ffa91a4273c70c70d423709917b785064006bb5027e387702ec3f8af1ae818 -0x4735205e35a2dd9b79cc70126d5f52050f89f05f652863b3ddd92b6c2b740d47 -0xb474ef07ccfafacdabacd3ac5d4dee0de446b3cc82fd28e63658b1f6b215885e -0x491d6f4121c98e48f75d780f84bc75bef0ff5f7ffe02d7f34d44a7615a6723f1 -0xb54be784f3de2e0d645f29d118b88f4d13926b005e477468dc104b96a22f276f -0xeb123896c0e7a3367820400a73d77bf567dbde08c9aa27cc52da84b672d54493 -0x44af57f92a864f0273523e27000550ea33b5abb98a8e12fcebe721bcccbba64f -0x48140d5f4d9ddad7ce3dca52e68cccbdfba344697061121e12950f17e195b0b0 -0xc08e9325c40ca08cfbd0634bbd5e2eaaa3e8c6e089ffae161f6d55e5b266a03b -0x056e5764457ba67ce6cd8a58c322598b368f0a2e88e6377686e20b57cc1cb5d8 -0xeb15e7a5390ade6ee5e51523f919c1ab0d80c3e847a6ca7b6395ab649f6ae61d -0x3c4e6a656472f594bf8d7cfae69382089bd3baf32701ba03986835d5e2da6cc4 -0x009444de34d2d4b931938fb479d9756fd8550e61111564efc266ba8167ca5808 -0xf9b2ee57602d293c1403cbbdac6fd8373e46df7182b1c1c70a372bbb7727d402 -0x9c906a9b6055295bbf0b39ea764886c7ec9664095b5403dfe106f837212ee79f -0x4a75635f069b068763d8fa2d7d2925ce072c6cdd8404bff9a9c909a3de09f8d4 -0x843542900afb9f63516f9ebb8a6f0e12948ff8d212a200a2356194a1b8f3edfe -0x3db279716b39181d23a4312658b3dd7284bdbd7a78fe8240d0464890c618348b -0xc0236beaeff77da61159cf62662629c3cbd4550c13a5ba37ab3c049066b8a260 -0x4737981c30e345272c34b084437ce36ec1882e52c9eac42ba6505cc8f073bd6f -0x407e6f83812de6ed5cfcf52b72d5274e9cd52fc04872bf3662644a834d80d0e6 -0x1ea1805cfdd7927b1d9f016bb9a7eb61574a0811a9d8d4165ce1c9d93187dd72 -0xd9409ee572313ee5346a70b5b647dc42e7b8e4d4e59d6d44b34b50581f3a5f29 -0xb2e883416a288495eea1cdcba268a963be7737bdd078cec38c1e2f5a08b23aac -0x0805d7292f0bd99009f65e083587ed0af23546de84a23bf496958a9e857e51f0 -0x01a105d0868e0a77e6c7f2e96e871fc52eebee18564a159540ff72841f62a2c9 -0x4828fb8560a0dfb8edb839c164cd36c06db1576974821783999f8208a6209e37 -0xba2f93cb1adb471711aa10ac7a6b826df20b8a26f5949064175e9386cf48770a -0xe0a08be559c15d3c5ebe73b3c4610d27aba18e756a48e480a7e43021504610d5 -0x458f3c0a8a7be52fbed895a9ee75945c6780573e24e72804d94d2e656f9109a7 -0xd5044f60e57d77c14c6539dcf55c4b4290005427307b4a6c1c0e6dbf47ff076c -0x86c0b51e88b803683076e8cfec793b5f56b832023d5ba4776cc6ef161efbe0ee -0x41f0cb28bfe2c207ff8f05a124f204c65cd1e2ef43d72f17eddf63dcca9034e0 -0x21b9389e4cd13aa756a896e498751f760c6bdc3e1723afe7039a6b3e0aba281c -0xedeb80e5ad1327bf54ee9debc3735abbab01d35bbdacd07284fce9d055dd99ae -0x349372b51d7a5e50589f46346e2a1a85885a62f77a38b71ea030ab7bb344bc39 -0xe4da287f20793b2db95e8466baf0b8f4631093f85f07bb66cdd5616675bd4047 -0x5e3ad91fea9bf4da4036f22af90686dc3ec7b8572edce8ed6222882111b64313 -0x124ee7913d3ef784692a2e703f59471165b5b3ff0af7b671ad50118d12eddd0c -0x457eee49f12994504374031ea8ee35b3190a4e0e85ad9960225c5e6523717cb4 -0x697af907855df08fa7b851da81db8ab7a7b62eefef9f960ad155a1321862333c -0x7c8bf1100d7ecf7a397cc8906a9d9844e2dedc68164a318c09254ee9b0b57c52 -0x9851995e0a53bd0a88ab1e15f6eec04a660f47bf79cf4b1f0b7b532fd91e8375 -0xc46e3c079b555118a759c80a5ef105b2355564d748c62cca73a42708f445bd8d -0x19bcb5cb89f397b4d878dcaac08cec8500300d1b437ac567e85933e1a68742ab -0x50b951fd39e220c74469b933d6f66cd6c3b23b039242c4ebbab90ad33865ec9b -0x3af3725c4dfe6bfdae6499f1e1f54cb69e8181b4736209ad92c667ce9969eb22 -0x70a338ab48d4b8fa9175dccd67a778ca1d3eaebb07675c62cd5eac9986022970 -0xfd8d6a06385087d5e23b8fdf86d58526a12302fdd22f0909f2373e054300ca5f -0x61ddd311b4cd6717074e77b1435cdab380a9cc66fe2da8503c096f4cf4559b1c -0x53469166a3baea760a3b407b4c7cfc4a60843a7ce04bc20083ced853f33d46f3 -0xb5899532383140eb400fe5293ee20592aefb650bad62128725b0cd5138627b75 -0x586192f49eab06c83da684ef8903133c738c233f2ff4d9a23309a6fa41592771 -0x6f25854ec498e9cb69dc8a7b70c7873a115d6298c5fe12551da16141fad2c42b -0xec5678c1d584788625e43823882290ef49286e76b84ea52ea3b81c262b71d99f -0x2e56600b9489c9ed70c2f5bf7986c62ed1c989939c76102de0aa2e77f552a4ba -0x91d02737ca2dcfbd8e5ba793a4c24d3ac7d4e4559a672c83cd40d6d8fd003979 -0x31a001c0b9b8b7a9b3bd09890a8ec5bdf0b3740ce8819e17e2b3f8b3f5b4a2cc -0x18e570c784b235eaec23ed66b93737876b34452375720d95e15ceda5ef65da52 -0x43dc77ae757d51158c978262ee96122e1294f838dda79cfd0012913328978e7f -0x024d154ae1cfab551dfb9ac77f5317212f7116dd1421d22c6c269e31518a84b0 -0x419ed5570da9c315bc303b6c7e1caf936517c3cfc8f9a3e1066ad6ecd091458d -0x46851e84f8c679d861198a59a52754e1e5507c1f13136bf3e5aee0f76f10cedf -0x8a29fb2d4555252581f4decd7b9d7540d793e696b3ebb128a1070b7961e5beec -0xe1d3c07780ab671e94c676c9324ec65792f9f802fe9d2f9ccc33936f0151cc0c -0x87f0849e5792c65ca0032df0796a4776cf1a9a03609475087bc26f49352999d6 -0xb550d82ca9177fd0971dd1e952537f420541b8105e7173d4416f35cdfdfcb600 -0x5ad9c77b3e909735fafbbb20d8cc2120b3a29faf77997ff6fd3802124a8d499f -0x185f496398707dab0fe59131476af2a42d5c12db99ec879e34759b7c1f0ba6b4 -0xa54e0cb79c03cc763797b47c4f24c4869b5b1964b3622e11c532a46bae9d63d8 -0x74aade65a08ea8fba6ce0a4871d684a3068fa5c0202d41ab305180d980c4ed18 -0x11f60cb3675a77a4278827bf37b561f7b646a1e7b7ad3f4ebf0d0eb527006a77 -0xd79812a5b396e90fbf170d2295be6aa4edbe57e85ab984cbef2bec30c877c555 -0x71372612c8f285ba2918e0f40c50d1fe626c507dee71bd80117eeec47299d3b8 -0x108d67c15358c84b512ca9eea206a9343fc99759da0ce7177c44ce3aef49d8c2 -0x0b84a46eed1c1966fc032f550d2b4abbbed5d327456f42ca3fb77f3e7a00cf94 -0x1f71a854d5f350bfd277e6d7cae49d11d3e2e64a52ffd69d767445f8e7bd3459 -0x435c5a541473e9415b1537f16aa4601ab63da7991b5d2d2e94399a32a901e8ce -0x5ae71d028706d459a48f4d65a0bf4643a2fe9cfb4d64696c7dcf6e2ff5ea9157 -0xbbd0b21e563376212c309556b79f59b662295c86fc8cf5d9c15d3c989dcc7ed1 -0xc7998beca3995520d84110be1ca5ee2600d2892c1bfddaf75969b46c61175f3d -0xa78fb644e08eff5ce62582624c177659ff7bb707cabcb92206952fbe7f210b79 -0x8241993465315653bb7daa147d5bc2d6d2a0d1d0bfd77882eef9414da31ecd06 -0xc3302f91f227092956ad3d778fe624df3bd5049da46766d12bf0e3350a328305 -0xae77a1a1f417219f9db79d29e8bed067713bd196ece95f76b55ac532708703a1 -0xd8a6358af202431245e0d620ca624a24116aab31cc5eb9f92203be128992df24 -0x6bb6264ee21749a85d6a290c87a0ab5126cd17960f98dd8b40c49c70212acc9f -0x8eeea447be3f6702eddc64b4eeaa0afafc1d013452e388cd39be3e542e8186f2 -0xcbb8d3caded3b238380fe48fabba0038b7c4181de547cdebcd99e28eec83eb9d -0x3ccbf543d52cf1533b3b8cf767bdb4bcbf70d11be07d862890f13a39adb8f751 -0x5677a5f8e52fd1c9c2dc55d8a460261f27840a7bc883da7e10e730251bb8ee9c -0x7a2653080bc43412f447d20d939104ddaefbc9a2aedaf02204d5efae7948192d -0x0edcc3f7d0e3409518ae6e43914fc81da6275c432ea65994b611049e691c9b6d -0x4c2beab1c01a8f8a86fd7da469a1def6b21f1344d1137bbb8013dc98042d8d37 -0x3eb7316696733a9b4fcdf2eb3921b02b5ddf2718f8659b9f02673eb6cb5bf79f -0x8059317c27b2e8561f3407b0dad5d1fde077c13827b7717c80f9b28842026b49 -0xd04b7b4afc3c852848e0d2a9c6e117f07c6f4967a4220a297eae092d3393396a -0x4bcdbb2c82fe52aef7ccbd88d027da099364077c744266beec1b495dafb2b359 -0x43a7ee85a9b5e8759356e81437a43096917c152a8eba412894d2249ad5a81174 -0xdf5a444e5f59e14e395065d24b7369ea6f092b025453b19fa05a513c3e7e0da7 -0xc053a3e8e4d93339f3dff6325b899911880781c53ec1634dbd584370d971a157 -0x65c6eea1b7a20c88e48b2abff1db9800fdd622264d347abcdd719294d7d0e87b -0x93f1a00d7401dbc9d811abeea2573502c199842db302be0fda1a0dc99f1d00b9 -0x865585b11287a9f171e35754ee4c9b7326ca992941e47b74b883dbdc34d46732 -0xb12f0e01cce04941597a22808dddf0c81279340c933ba90c359ec954795b3407 -0x0bfa162940f7302a34c3c18904f39b36502b8bdde3495d765fef26d60db95dbb -0x7f7eae532a104d34b6926bf3779103da58696fe78c87bd2c370b8e11ef2e7637 -0xec7a7c195ee524cd2f854701bf20b94817e2f450bc62a55827574dcd968818ba -0xec7b4574e967b144cffca2ec60ead2c6e733ae39604e9a46f61350cd20f50fa9 -0x74514daab4b442ca74ca1facaaefee3f854b13647871057322d32de1cee790bf -0x6b6d9375623b3b802d82e9fefd78c5303abd587739f878f28da933d943c2cdea -0x3ca7bebb3131cc3c5b08f736651c8db22743e1edb5a630b7207872b3cbf1e322 -0x4dbf829b78bff22a8c72717f6e60a405b5d8a1a6e04d6e66c27dbaaa4b0f1542 -0x4b8fc5c9ca45898cf5f0abbd9d56836f28b26b6120ec2349a75bcf0c824db8d2 -0x8de3ad0b180ed959e5b302a01628c713d737eb1f0e237ff368570488af3acbc9 -0x626835919db04c7b36d2aba7344668114d1c92543d08fdfca2bb3fb0d03ae30c -0x0b5e439c3c546cfba4850f939385b7b6cda3cd727f2fa0a8462b98b81baf2339 -0x38ea579d72ede35a240259b0c690bfb09c8aaafe98322073868e88b6d3833b35 -0xa36ca37008b8b5b2b07a6be103197ab8293b5e6ffd0290c576a594565a6fca8f -0x2ffadac73195efbe12fc31fda5e06ed52afb9bc265a3aed0d64d3b6444001fc0 -0xc5790c08d8afe4f267883188134f0ff8badffe4e8eaaa69be0ef9afda54a85a0 -0xd9b158f88db596c555ed0b6e6b46966734850a4b9ceab27f98d2af0c49306dc3 -0x2f5e4c407dd112075f81b9f562c5a8d36b3eb6cd1aaed75b899dbcc51945f152 -0xaafdf98466ff4fbca4d38b675c947f2e229bd42b6005b1f7af3738a172c6460b -0x7bdd521d05f485314a931efe61d4fe72807d43322fd223bfa6d1727d3b4a1335 -0x4bee7ca11e81a629a8d757999c5f5ff3b5b7636740c23456c3d3b3bd6f757d8e -0x8731c33b7484c07b1aef942e606490f81861ae43393303a91d8576225eadc4ae -0x38900b0ec0ba028c7f0f7921c2ff3d66a5717e839afaefc51c3fff9629dbb973 -0x59daa68a8ede83d1786bcd785ce9d27b6bd01ea0dddbb8b6ac37afdd5f4bb996 -0x7a9e9e9f8d7a8e533b1e2c617597fc8517be3a0f46aea1ce7a8149e4a7df0d4b -0x5e749cc83c64ebb33df5134bab53b3746c3f2c43e3e6ab258183906dc0d22d46 -0xd945a38083c9e385d08621e10bd974e5c2100a9c4bd7b2d797471c8485406bf1 -0xd17d10d45103f146382132781cfe20b8f1c8b995b57f7516745cc0de9809f85a -0x27660ef607fd168813dc2dd7f1cf485fe4685be53f628403faa2a35881396e63 -0x82d5d67857d91ef137245d24d51272ea47655396ce3f3b192281f979e799bd1d -0x9c4744be489420e91783d4fcc28650ee5980d4ed623a5062aba7df21b620187e -0xb5c842a8d66376a36614de736c04afc7267e1b01f0dc4ad24bd7bd1b3a639a28 -0x99fc916cd4f0281357fafc8ef4cf3629b62bfaf3b14c728c12ab225fa61a4672 -0x6968ffd08aef82919c0bd74341106bea8d84f86a75ae08ba9208068704dd4622 -0x8e06278b9b70abd320d02ac753a4cd2a6fedf0129c04ffb6d5ac8570d1f038ac -0xc4f104982b2a28e65dd8048efa430ece2554f73ae4aaf06ee79d7d32c0a5e68a -0xfaccf5df99a781e2a0aa2e09d48431f72273ab5400e6ddadc1a7d935175ff560 -0x66e01596ddaf91ce02905bf755ac32777cebc3a2536e3ef9f87bf9d72350ebfb -0xdb44f87d0b3d79ca3b10821e942fcb0ca592284e71ff7eabb10e6b0ae98d13e7 -0x2baf79bec298aba8be9c009ec34608a8fe1863d027a1274969f764d18c45008f -0x3b85e515a7f18ea0e1841957e0b5737b55ebebdbe20da47e7d26b2db392fc0ed -0xf3ea84626bb1b7c705a2f159d55c48870fa2af9af3d9147ce75ecae8e416312c -0x501be5fb4310da906ab44110b01a531cda720f706ceb007569ad24411a983ca4 -0x92312d8e397150256be7c7dc68bd4751d44fa4519744c30dcb719bfb69bfc4a5 -0x3e8459a973363abe1fac7af0e9f38048f7e4b591603089f39427e1de9dc91c05 -0x5c8ca004e53095346e087e684f9f002d5e02b3ea0ec3b713da5566d9c0ee3fa5 -0x278a80b7bc97d0128978beab45ec69b6553be6dd8c534b33be063dec016ccf8b -0xa75c2604a9af2c2f29f32ed7339dcb405a308ad1731e2045abeb5e3e7799fcdb -0x2374cd835d9c6d04d46b83bb7f5edfa1408a14cf0f5a67c6f4d47c9d02696de7 -0xe5b27b99b8832d4daba0bbe76960b861a37ae154a9fbeffcac5b5e41c69ce809 -0x6817f866d81dc141078f0f1b570bbb08c5e5fb71cabc2301b087c9604407833d -0xad30ba0de35db7bec6d9ac2da596e4283177e140018c83e57b590f7166b38f79 -0x9c0408f5bdbf8491568b32343cb8e4d0981f10149d81bb003f8428b98ab98f9c -0xea0eb5a6ef2c6652e7f9dbd9ef26793c1261b404206e14912dd636638dfc6f00 -0xb9b75b00004f0bc4bf72ff0dccd81da6479cb0671fefb598f31bf26eb29fd7f1 -0x34fba5935cf5e43d67bc9fc83ae3535a0633dab2d551d18ee90739da94002ff5 -0xb43b0a927b7c3e61ca07c57f74d675ee0ad7991c54eb952528b58ccc4f4a81d0 -0x8d9501fe59b6f5ccc941f970387fbf16e87ec63513182562bb58204fbfcb0b59 -0x69796780004ab4d9c1cb655b93fc8622cc4f108ab4d884f1eabc5dbb6e3c4160 -0x237025421c7942567642ffa87ed08079c6febd3b93bc1d6ad7e6404a3eb4b458 -0xf40d026000dfb3632f8da77119d7b37e2cb523681a781de19cd6dc70408d8557 -0x7b7201718cfa852f460bd3ad9b772b775bc49f907fdd121aae6569864d9e68b9 -0xff9f16334a4b5cf162ccf53328f399cba4a29522343697f9006bef433b9372f5 -0x3cfbca70ae3ae05e40eba83af1df40ef2e94005435c1ed6ac4088bc2d7ca1716 -0x720979e108f249dae83a070bb81ee89fa9b362a0b255815b8f951bfbb977257f -0x1cecd04e2b0dcaf303be2fa7b2a61a5184f91cb2551468f6f640296a2f1738bb -0x4ed26761f95f7bb3bffc009001809b792b6135f08830c0ab17c7ab72d2f2e720 -0x29a3c44b16e225a6cc91d7394156a17783007acdb963e48c46f5df5063a7a009 -0x0d0ea94918ecb7429a8e7ba694c0e4dc8f4cc8d7a6ef38ca52ef5ac89c90a316 -0x5d015233f79202ddb15606ebeedc1edf70d4cae247a43d870759d944e522ef9c -0x63e2cbc744ee73738156028f11c1de30a00a91373aaa4f6848cbdee954c0cb15 -0x5dc61c9a85c1ee68138036a4889767768bf0f8b6549bb9dca4f5079ed60f7a88 -0xd93b388416b03580b74393df02737e2223670333d0f4a5f31452b0da41607da3 -0xa6806411a46ca14a51e6a6c6e63bd77634a25cb65be0b1e404dff92638b1264c -0x0f38e5aff3f5cc2f270c930c9462326bf22dc4817a303a782bcd9d9c36c4d20d -0x494820f01cae0d426a476ece0af0e9ce9be6fa00c32628c7de04cbd2cb286f76 -0x7a6ab2e5a5a36b6e7ec75e3f069e77424b4edb7b72fbf78ec5bfe30fd5fd62a6 -0x67e4fe4564e611f447794b640f48230cbeb9597770a776397b56ddba02eceaa7 -0x61e40dbf66a4b7ebf4f9850bf1d5e0642a09c4b68e7264a4daa3a5f06214f7fb -0x594f3f1dc4a440c422acc9f29133d54cb7cb9f9e951a7f362f5a6237dbc339a8 -0x42bf6bb22a0febf0bdde975d537fc4cb805f68535a6ecc2bcbab555f318e5d45 -0x1ed03c774e8e2afd64bbef017243ec56f31abdbd785ca4de9abf585d669bd2ed -0x920d7bdb82afe37de96fa1b978499c855a26cda083fcd186109f33e217a1026c -0xa61838f1c653473f8773650431f97eb657a1bec6c7969e8880d0e31f1e15cb03 -0x42d5844b55c8761066a729d41202767ca1ef81df5057ba21969321c11b15ba1c -0x237e388a70541b0882e043c0b1260b86562fa58cccb631fae905666aee402822 -0x369152b4331b1cda29460f73338c409c832cd1e722c08d26bf719d22484b4632 -0xfdf45e52de6c6f5ed767622c0ec2a19d75af8fff02773961f1ea5a6795c96eea -0x2e0ff3f50878f52d96ab93c7d26cc1382373d0e2ac6bd97ab1f91241b2c609cf -0x84a32828a7c5e1d0638669b308bd94a80de4d01ccca90fe803407207baa5adde -0x5a3fbdf38aee73396b3b60d98c01741406bab246c14592910dd6c29dfdf16240 -0x0230fd63f1483e3c46e287cd309aca85d6601c63e4326f026fff6f48c3c214a6 -0x0f11cf28070457d93f112e0e8d5b780402d01cf674db2c45791a6ada52f45bd4 -0xf0b1f3be2ea92ac38c770709e0dd0d346d194cdda71638a4eda40fabe9774d89 -0x7d590ad3712e69d5e48f56cb0a1ba75b852ff352777254936a5cdba9e9a6ad5b -0x069825383ca1f14c21628185065cbc5299297aecaae93caeb782cfb15138271b -0x5946bed016673f30b50fe162d0369941a8bdb327786c1340cdf77f4d5fd0f387 -0x9ffc71dca68f97577065aa1791a11a5df8488de0cbbfbc1d7e74c5af814dd3a1 -0x34b30de776ce1a0d4d1d0ad059afb1019ea4944222c571edd8db68b0b4299865 -0x76a36b89686b84d64f15ec2be6b5bb8296d35f7c432a431ec4dbd4860ac10b53 -0xe5011fee9049e16b457db2cdbedc8db1afefadc3f963761d41e58c74b49677a9 -0x436be820af13f4c396ecfe0b0289ec2fd7ee4e88eba8ea97459e243183657dd9 -0xe3b2722e2677cad577fedb9168845f8205b9f85071ab40d1f6adfe5c1f18472e -0x59e425a2068a4babcaa35454e2de4a186d9ec4eb6a5095fa251952d64665b4d2 -0x0b42b7d9dbecb28924fdea7a79442960db68205aeb47acae8056efa4827c1387 -0x48e9ebb1bfffc6e172c32c32eca877c1b8d4940d878e161e18c6b4bb881e9f4f -0x7dbd5d203a9d27788176cebfe95e364129c6d3d0d4e49554ea64b10f10f68562 -0x2b09e7a5bf1888e027b365343d5c5047a670559755944dd243e60e7c83e7e2ae -0xe90b3b10235b5ac5d76eb270bc7b8b1d5e0c278aab02877bc95f535f9f6d295c -0xa174535f4adb6419817161b43b281b1f660064ae30245f15beb3f17a575563a0 -0xb9c122e0072b145d5fc7a141e7c9b686d9ccdf0459c8e9f3a80cb3363f224adc -0x15d2f39775034215299e2ab1885e45d19df0a1b60e64d6a416a48fb9746255c7 -0xefbc7e92aff438fc42556ae5f46aa224467db39048c3be1021f7fff09a2cb319 -0xd94838c7f3927f31cf1b10decfee9bc88609460c75f6049ce40204544c0712fa -0x7a79fcee621857f775d559f1be8550a7b2bd0ec2b7494a97e029a509cf63d128 -0x2378b9550374d8c4e2ac0db369e73395beac74d520fff9e95f582bf92697756c -0xc88a0daff35fa3d5c2094c8170727e5a73049df311747db56ea4575117703a2e -0xba12e9ae6927ddf556f20286cdd71c0aee9b2cf537824381fd4042a31acc217f -0x509c45a198548a281835a8c84f231e27c53848d57452fb67a9f2d5d42e32d7e5 -0x404540edc7b39ba3580621d36f690f12d069700b4dec59ec81577009f7efc84a -0xa8f6063b357d69674189ea2af267151db3a7d3fa77ea8757ae2ee87efd5df75c -0x909eb11b365040f398adbc68e228bf30bc1f43060dce302e4832edde41467f77 -0xa7a16aa23808203c4ca3c994e848345a49d93d2f5c0ac9e3b05816e85b46190e -0x4204d35fed20fb084e2d154540a52bdc38c8cdade6c4dc4368e94de0fe65ec41 -0xc894bbefa83ee964b2863063c15d96289f8247eb00cdcebbd37f026288b85df4 -0x380cfe97b2a81ddd61b58b7f8ef7c316fdc4f07a48220fc1753926e8208071ed -0xf3a7c92191d9b29c82e1ed592242770732d14980262bf6e321569e5a406850c7 -0x51cb870398ae7776f666f247ce44076a2396cad8870501d8b723222f3482e1d1 -0x4b6f0a2fa3543dcb98ba49ec9416830316421f055235abb923945da7da2a541b -0x06eb2debe0642cf360ed19e63b8751fa7267bee1d4c6c5844e90c9a54a95c6e1 -0xaee6eb7c625237e655b4666c06dbf048481acd6ec65378fe457819f6a30d4af4 -0x650beb755ba1cd538639cf2d0b3dbcfdb15360fc82ff3338b2e3a34a23604c83 -0x858f073c7a48e81c0bdd8dbb0317addbfb897d69ebf3e888dd529f722f270cfd -0x90ab7193eb07ea7cafda48096d77c0c4ce5d14a7f795558ffc37a8be3b15e101 -0x1a41bbcf30a890d8813c2c6a20cc886d7eb99f90984b066adf120b3df341597f -0x069c6ae9e86fb603f089788ad12c143f3f2f68d89d6eafbb92b7d30ff5dd18d0 -0x15bacc2247559586208af2f6aa0360b4d9a50783787a8b95b95683837718629a -0x84b5630f1675eef57b00d8b7db58c635d9ed85e8826b06d8faa3e0c6d796ee00 -0x08ac1eedd1eb1d753e51d9506a0be992a9e0dd000376ae1bfacc6398f852135a -0x47caf354430de5d9fbd0749ff9a5539b4652fb402575bca787faed9df749da32 -0xb3b57df536d7ce2286201bcdbf417a713fd34db3eff52477cd2cbd1e30578920 -0x5242b180f2098d3fea2bac4d0aa135a6f0f3009a3213cab03db5e9a6d0110bb4 -0x7e7c61b736ab11ef757657e0b431822ecd102791f3db0dfda5c033ac6e2f408a -0x64a0231f1b09b86a90f48ded8f72011603d6d9e189c49486a576e167aff0a85c -0xe5afce61dcc032eb1f301aa1e131bb799665ffd52d245014558e6a1ab5a4b3d0 -0xd6f9c5cffe79957ba28eaf2bef65913543dd3d8616cff3c5aaa171c74bc5adcb -0x902d593345cfa52d7b5d737f0ff7db5f2f33b7608f26c71fdac2f0f06e1d9c23 -0x985fbcd09d98a77a2decc981cf7843ee7fb4295a2aa7c0ffaebc2e52437775c0 -0xf8519e31f11de14ada0ba41dd9d070199406368a292662faf10d51f4edc8423d -0x35b862f7147b9d40322c7e0d444854ec285456dacd59a446417e789f3a2e8a4c -0x3b288ee4fe158ef39feeb2561f72ddeae0eb9800e366f48d3526fe766e52a3d2 -0xd2c813eea1f3d5f5b65b56b41b6a4c23cf8b3a431cb38e977fbd00ceb9c1245f -0xe6de08bd5b50224f9d64043942caef429ba7a2c7a2d0fe86f6058a829de84b93 -0xc8fdb3d95cb3ccdcba89e41e7ecc75808e26db42e83bef9324bc2c9e7ec1c8b3 -0x3e8314972793d0aec966c325a1b39484c948bf6591b43fa3d3418b65ae548951 -0x8d292f77f2fa2e8bf5ad5f6d943762f7ae139419897479c83cc58d07f16626ac -0x020c01b5e3e1ea0cb5825bf6fd6ef88001acfaf6d187b84706bdf45db7bd81b5 -0x97ad9527198d734cec65f85056892ff406b6ade2645ed6fa4cc57bf39aa6752a -0x07c6d712ecebab733a077796bc77443f7357030e1d828a1d3a4707bdb6f11271 -0x6f985149709e42150e30ecde0c2aff9ba6b188f0c8899b47d634046925d80773 -0xdcd408674e189ef4fd9b4f080d624ec18ccedacf118e031a93df0f924e64b622 -0x804ab24f2e979e17a20c104f9760693e7fb9d3ce9e6bd90763cd4e698dd18211 -0xdcc7f1c8823072eceb482df36f41588af3712a2416094c590d98e126348b4246 -0x70ac090a5642d57cd1db5679411dc6d4ac294283374291e493a531ab23c3e44a -0xff3bd44e051d4317de13a0a88e0be43600cef53c260308e7c3c166f1a05146aa -0x7c832224c90087b3665390e51f0d7b826b7f92ecad5b21d851e4fbd718a87e12 -0x7f7ff504743f56d98d80463ec45555fcd7404a2c7cf6e061d5c86bc6671d8df1 -0x611e170592d3ebe713a90188f4b99f7161c8dd54b155d7c0760cc647fe70be03 -0x41f84a913aadccbcd91dce2bf569a97675bbf3203c753b5542ff973446f34b04 -0x42ff1de7fc913572ac8185557ac31bcdf42ed83d4731d22884bdf88612dce385 -0xa8a295d9b42dccf798c6c93f46cd3c19984a4cd091c1302a5e5d2795e1a30393 -0x7b06c79af87b6b8ce34a96213185beed403c8cd82cd799493dbe8a8881103350 -0x9cd34e3296f7d9dd133db49852e46520f0b00a659003d7f94de8976b86d06e87 -0x07ebb35c1e8bcf4cd5764f3aa92d21a48e2a49c8012e9c329f74a40710e5b7f3 -0xfc18b59f90c81a0a2fb1549b918ae4bc1f190c2f260bf585fbad34d4c7d26ec9 -0xe53f2fbeeac82df56e043212a73d27e3494bdf1489200e9e08cb8142c28537cd -0xf42fba6a163336eb30c95dd4f89d6f43aa097a5489035227fd71760671a81c69 -0x2359cdc68d1467061d9fb5e7a31f22322b2ead513c1f54d106be6be21aeb06b4 -0x59e08828a420518e3e8660fff83c6b6a08a127f649121ec61cd4db7e0bdddf5e -0x2655c939b96c18f0b60805389724636d0be603659eec11622b7701623a0df1d6 -0xda91d7f20d87432afdd2ef092d74a1ecbefdbcb6502cc8ea8c2bbc29bdfa7152 -0x4e6702600b7a6b8f9977fffe0ed7e2158682c877ae3ab0044ce229a7f4e42e41 -0x8da9dba6ffef645d44323a92428a8a45bbf0139cad886fdba6284085fbb730bc -0xf2c6907954ba48cc6f907d2f9849774a843d20dd10318dc3425c25199964621e -0x7433d15b801840d5f5aae98b86e0bade9cefb05eab477db89b62bf7f7f5e0450 -0xdcf14b9142f0b92e665df8ed280233eaf16dbff072d76a88b693b65ad7d00672 -0xfbccfdd10224c86d9a7d47965b23615777e9fb31976a5d140bc906df518b1698 -0xbd616c546c8d42d19214fb338021cf2993ed9b1bfcbf485627011147ef944a12 -0xba0a00c98e403b307b94cdceb9dc4ed420d95e0da96a14ec5ca3e8c82a1d36e2 -0x38bc00f33bd806a003e530b03d2d76e6d0f7850df2cf4b0280b6fa03c7cb7708 -0xb90648a905a2c6732a12721873c1506c19626b29146b9f0149d58c9c3afcb2ad -0x32f2fca55f468fcb1e89edb5cadc0ba79cb6b37f53683421ce02590b7bc6451e -0x4a79141181836ad6fe0253f8632be4db67b50a30c330463eb6d7f47dec9d0f01 -0x54a983fe9dbbceadd10ffe7226c73241354caf538b4c5843d82b8f1913602128 -0x83f5c9bce09d950d9f65cc3d93364bf394d98ed32323722c47ae3ed575f29663 -0x6e4da6665aa8342b52d3391fffbb73cda63c8689cba8e604b52178dd0be8549f -0xfd077aa7779e632045703f0447eeb64f1f57a14968323ef9337fd8a09ff899f5 -0x7423568322c5cad17052a8b496297ba5f1f3085e90dc52a805d66bfe0d178c12 -0x09148a5fd163e464eca62c95b22ebeba6df38cfc9212d923524f8d213aacb62f -0x70dc78389b20ac2eb51dfd4ce120c1f245401ba94459c3ebe8d214e44ca02316 -0xf33bbfcd88a5727c453f9172061067af85aad792eb154e5d8ac06493c00a640a -0x0ec2a0de837cf23690e45753caa92fe88b6c1036f7b51ddd5d312f595423361b -0x2b438a5056aa726c9c52f34223972cf0eb71d14425401d03d6c9e555ccf61ced -0x96f0e31834be565540bc996203d2597004ef65cee2c3176be3a790bce7ec6230 -0xe11ec5a75d8bb0b4c76b7410d814c40747020526a6aa37f7c304785813f76e30 -0x0c884207660bae6ef92a08533d281b1e9b5f198471c71bc0a29f21fa34aa9a09 -0x6162e2b5064be1a0b33d3e09e6ced6881e488b957cf923af032eb58b96e04a22 -0x775ff505e1c661e8a37060705277a5588eb4a3ea5869c9c371454182723f35c9 -0xc7d1b0923cefdf29acb6cdd5c79f0c90d46f33e835d948303754e342a3895970 -0xec0f357a207bb4796559ea0ff4dea5bbf070958a36d67fe46ee147a5f320ab5c -0xc3fe4d4719bf323005c60d4dc5fc320154fde57ec12c29bcd72a13c06a1b7972 -0x400f1481b00fb40eb406457554448adca55c06656f38ef5b265f2253224693ad -0xd57882a8120e804f3394e5c0a9b6e537373506b22ebb4ac6679f538b61f45d2a -0xf9206e5d080eda6a6f7a1f876446242bd1b3d13b3af0b986caca339e03f804df -0x47959fd3d1ffdac732aa2a0738f20c4852873e8b09f27424501477ead9bf8fb5 -0xf1c4791afc6140d989a79df9c723a20f859c873ca1ddd2c18993d01f0c3381fc -0xd9b92407b5e29f747d118c407ea7d08e66a2e36b18e5d97d78db3a162d56f4a3 -0x76c26b4ac6817eb56bb5b08efe03f3b420f9fcfac967ebe02b391c34f59564f7 -0xfdbac373abafc3e6a6abe29882fb9340fcbb45b69496b3e4c8b5b85c2f350a2b -0x29b8c515fc1093b24da4cff0e177a262d1024eff4a2e10d36db97066aad7590d -0xfbf216869a819ef98dd51b42195f1d47b089f10b75108f41ccefa823355ed702 -0xdacfab83e39908fe1512298ce27b5e5a551e3c5cf2f0c358bc761952a26d3915 -0x3c58312a64675ad52249a97b77dec506d545c5a57e8359e91368a3ec996074a8 -0x3d22a40d3756c17c455d98485a74b8e98746fc4a3ff2251986206dc230ab399c -0x64106ad982203b6f57557e55d8a05703a90eb93c825d6104596b2b47c0936bcb -0x76c05b6b4aa822e8155cafc9c1bdbf2e46fe88c80f72c31264ce8d4dcd990184 -0xa49765f850f8a8b85b54774611bed4be8bcd858d03f8669e8320827533b22ab5 -0x089683cd0722a107f6e2d89184eb37440be6e6248bd8b2e5336116d8411943a4 -0x2d89a0c6e18c99aa4510f498da820052ade176d114a668d8188461bae39d7f51 -0x61074ff285057167b71e3a4ad819346bb5d1258991513022bb82650767298042 -0xdb9011a4c7546e75960f4fac739126609bdb28e633bb8a0642680b1ab0da7625 -0xeba90ad45add49570c1aeffa3762dda8f32d8264fbb04d35051aa6df48038096 -0xf8de7a5d267f967197e7386160ec7851b42e5771cca134dc5752320e27fe79ae -0x2205abca6bb62b55bee14035c28de2482e9b391261d07e67f03dc136e838b7af -0x4934dd090b3d4cfaccd85fb3b73b1c1243b972f63f364fbac6ce381f307ecf9d -0x8b6630f66e2e3fc7d68318061de12c017354b8d19a47602963730ef0f342085a -0xc58dd08b7365e839faf65431f10a61c548938dd7b43464506ed1343472b74a32 -0x786dbc42a79a8097b0b9e25af5fa31afc84d255b635695f25edf65146c99ef01 -0xb2c2d7b47ba42bb3fc51ccaac64a5971647fb868458f3c6fb7a07051b8d73a44 -0x9ed2775d0ea84921d80e1cc6a7e2085fdadb687f73f66c62c11b2d96ea768b6f -0xf6e0128b0d0e6118da2ea22359f840af6bd6dae7338646afda47c51a068725c0 -0x50acf216b63182fba46f63fc69910149ce1d9776325701990c177552c8a249bb -0xaa08068cfcd58d9adf9b51312ac6b9cd76a36e5a2c51883c66abe8175a4d0f82 -0x240b43ccbbc6698eafcc973dd6a55d48d08e5a39eb11e3386d8b1d7ed2f08dc2 -0x69a50b03a1ce301f205564fad547279b368fd07838449f39035047014194296a -0xe6ec76f813a44fb8ed687c2fdf52b4ab8763a765969d779c2fea8bc38abe6227 -0x39e1db5eef81e62cf44525867137fabdcf17747f9b1337ec206f8d0cbd01ba00 -0x808b427edcbd136d531af3ab66c088986286d9f9a9ac420286cb8d506c2a03b5 -0x475b34b2c67e10bd5a21d1b35815a2b1bfcff93fec73ad4a173cb7350e268506 -0x5b425f025eef2fa1418eda3e8924caa88a664d744e7024901368f420aed16afb -0xde4824d82de13243d90670321fdd82672b406a5b11e1d084fbcd7b5bcd062f7c -0xcdafe474adcd07fe0d3217ac6d47d6a0830658f0d7587ddf3d1223184df1a74a -0xa57b38861b2ccdae2701b10e62e7d54c69d354c9e63f9cba452eddd15725707b -0xb2b0133b83ee236f8c29a59ec256365635d0dc869da37f850596fc151cf66940 -0x2cf5f4128863fba2f55bfeee183d71faf59f44b069782e013e7a134d30637e1c -0x302e68d9c70a952ed3812e015394db2638f4e24519a8a8a116f6cc23714d071c -0x8f9e6f87a9e736225f8cdd6520bf9932118b052c056fe425d82bca9665266a41 -0xabda71da375c26fd3270748b3aa9f768775362c2b34b72ed7954804d2efd813c -0x47e6cbd27cdadc23633fa456a7aed0be82514f23e69993a109397104c3be4e23 -0x388830f83a07d8bbbc65471ebaa7d5bd0967999e96f4e6fc2bdf56e2a11cf684 -0x07f31f7c458740ee5033f6fa94b40b0cecba72e24f1fc40710a01128f733d6be -0xf8fe4ae15ff0c4df612b4dd1ffe941429f10f8e9717007aeb5e82fee98b52df8 -0xe80890580d2cc6e9612f1fa6e292615a67ddbf3117fef1ef863e6b5d9f354038 -0xab61f9fc69f808a5d3b17a9b352b88a1f7f274ad096a247bf6cfd9a0cd0020c0 -0x9277cb766e85d3000774f2bca9dc491e12eab1ab725b4bf6bca987118478bf07 -0x0fdcf5b34a7bd5374137745be7d4ebc58d8bed9d7b0d707c10969b322569b72f -0xd0fce1132111940ddfb9846d58a304ad35af0a6bd8c3b76f6ac81a40fb86815c -0xc031758526d0fada13eea29212bafb59c1dcae580446bd2a86bfaa94340ed3e4 -0xdf2b8ba7ecfbffe9f2855d3aa6bcad4efce401406c54082b1915b84d6e5ddc82 -0xf783491ff5922d7953053d286440e67074acf39cd10b4330efa7ec9cc99dbddc -0xb6a622e2f7c7cfa091e0efec139993700be1098b9b857cf14dd22ea577ee0da4 -0xd97fb5daec346cc333afeab576bea6571dbea2893e352493eff94fed58386fbf -0x19816c7a8bbdef3a06e719e5564184f7c3efc3336e07ab82cd602f4e94cbcfb7 -0x1b7d7c85f7cdd349ab86d249b9c03c62d05c504f1f0f170747c7a70a2c1674cd -0xbb48e516c9dedd24e52e6fdc07c3ae3b1c0b7e83a9c6c5af0d854e3c3230ec73 -0xb39453096371f7524530422bdc8b15745318a11597e2d9b037708874374d283c -0x1d2017c24ea0ce04370fb7563a4d8eef09786e7e98d9039aaa29b5e0994149d7 -0x3deac292a4bf19262b9f7a94e0077c033ac3de76884beb83c97b0af21f784a33 -0x283ac79e62deb1da48dd8f079bccefce84d8e013710cf333109292b0412708c3 -0x4854cf72cf625c09ca86717e6efc47d8d70558a17a0992c59f3547db8c2a559f -0x2612cf011053abc464f1e7795657a6d15bc5c27b6901b5d316bb269e124cddf9 -0xcf07bbaaf7f7c14551c90301ff5f9c7eac3ff93e0505951b54c8ce6d66a4f525 -0xa5ca3568fabb993712ff0001e268c8534ea9dd45362757bc375b973ab2f1aca0 -0x4f2dde9274f8206bcb9072eabb0113f8c12bb987a3a09e5237d9d5a88fc1c572 -0x84c66b0edf5a8c6d238cc8a6a4295d82598b520d54e4c29fe1db04b45e04e8dc -0x8c9c47be415bd21a91fe20f2c65fe438cfc5789b58123e2285d61c6527a2bbf9 -0x20ba84d2d7331fbc18b0c34fb1d4d744c72d3c3de851bdb7787e46df3cf2523a -0x75fc10c34fc65007c7dc4e1fef8c17e9fba358d8d2ddb0313c4d21b079fe8e4b -0xd30411ddccf3e8b26ef6d02eee5a723f3a982ca2a83555bd6a7415a0293da06d -0x01ff1cd1e9bf4acc672d8b9bf7145dc740c1590a9ab36a716d406dc1d9f7a4c3 -0x7a04e2b5b124eb51843e3b4fa7e2caccf9d4bca50d6d57c39e493ee0be7d5ee7 -0x93cf761a0a486ef323427c73613cae0f345a0417ffd33d8f15416f6afa00e010 -0x82ee8cb76742537f769344df4d697ea086c199ec3fb643f18014222e68ca0838 -0x15dceb5fdb813b8807866bce595da7dad1a3185b08918bf62525cb4b67c4caed -0xf090877277710b1d8f3e7550ba47cf46ef5422ce68b2c45c19302c2525864beb -0xa7a63345f985b72172c882b2289b1a4f2875e1db152490e1d47ce203d9ee3214 -0xfe390cc41cbcea3820d0074da3d22fb15596d412d1cccca888c77197447390ad -0xe37c602d4de68781542461d591e35a94e0836b52c9b4c380e060829be62c0f6f -0x0fe16ef3fedc1e77af2e487fe397eb2b965fc45caf70879a94b202adc8e97934 -0x8103ea81b96803e92f2aa8f54377fd0edbc34d4965c9fe5f1553e1d14d5a421d -0xd6e36cde3afacd0648ba2d2b45bfdd8b130c743fa2592a1cf0b2d8f0272d3640 -0xf0693912869c26c50f475345765bf72ba3f3cbe7f6b1ff29c157afda3a25f973 -0x5e080e9e06c8c81e7eaee35032a3445d6a293532165db48c686b09348ef4cb3d -0x932caa034f46381cdf905f73fab0a0ebb38bbe10959e7f07398073c4d88ec753 -0x6c82168db98aa39e4452c10bc2058d2d79b6c77a9331d14575fe5fe6d4cdc8e9 -0xbe006cf056932b1ff833577f80413f35a1b21cb5001b2a2a8383f514b5451e5e -0xf53dbc586e4ec1fc93704907c7bf27f1c13568d26eff8bfc6bf2db13f54c07d8 -0x3fa39c244b9eff9ce83153122def6507c9217c0565f92162c1541f33ca08b199 -0x75998cdd9f1b05062efa6e3d18820af0cbd19536ecd9d2721ca85637a0b45572 -0xc9a253389f334453bbd3488cc29993127ca656f9216e3519c9825527a5e0f27a -0x18bbb0920816e68ebe81d6e125d1ab4e41f5003da44ea815e0d4aec5d8ac7a9f -0x1cf8299b1731db875a2569df031024dc8895a4826a29b807a5db484ef6151ae3 -0x0f6d6085bb9be165785cdbf1ebf1b2daa8e19c734a02a3feb441dd239b46cda9 -0xe3c618b82c9705ff313d57995132f90efd6fa7b59cf28ecc427109737757db3e -0x26f368d2140278354363fbfef8e6f6173c89ff7526d8bf68006926e28b603df8 -0x46aa40ef06aaa843903a690ae863482d6d874752f9fc41fcc53c65449a7f02c2 -0xc1853b3ca6e21169334a0aed2394ffdd7e4b9a5b7f000e167f67cfd78b225a8b -0x57068fdb83e412f9782979a4390fa34ff8038a82b7edc4472b8f77084cf5ad8e -0x8e42655447470dbcd7f474b674128e144ff63d16b57af246c786e907c94bbfdd -0x523d0c7e2daf121facb58e9a1c7987a5b8efcd51eb19ee7bef101c1d8dc9cf87 -0x479bdc35219e18f3fa757693bf1564ffff3524dee4a3ca13a8bdbcfe3cc9219b -0x16c21a3e7d1daeaa74567c72fedb27136f2475e5f946d672ba7eaf8d8a5e5308 -0xfaededd229240674d2476bc601ebf4b8a78c9a60370c589dd9214c995362b55a -0x1c661c45071c264156d4f875f02b9dc1e6c595c6b80f15cb2c916db8696f17de -0x2eca18c751e46302e77df74aaa4b24594fd5282d72c4b9953e811f27cf4f9d5e -0xb499303f526a39585f8d3ab09521348374aee612c3f5dcdc5cfc30a5ad834b19 -0x1b929065d0ed49f265ec7e7f49a42d490c188a5363838ec17125e961a953f5eb -0xeea5cf72a5c8ab2d011a3706752913f19b12b6d1c47c6c8102d1c48d78bb2baa -0xc26769b08a4c1ee1a8e6097b981e26d4693765a9ad98547b3d722d3ba0bd55c0 -0x829862a19b4d5511d6f415a1ed8a607a4e5148a139c50ceec13ad811d2f1438e -0x174e1b976be5d3a18b5d681a74ac9c07a04910795e2a1014d2f30cc77d67d1f6 -0x04e9376f712bfd213a33be0ef1c2d4b311b8c7f502bab90e5403242e39f8e822 -0x598f5dd081542b12ed481b06b9c1895d4abad2652e9bd1c0200e4998473b8f63 -0x38ecbcfea85e7fc6829418318569924527c564073b379709f10fe18fc322eb7d -0xbfcd0a630029f68017a3db023bae02b1459de2f307e5ba7f917427d9877b61bb -0x5519a9375194186ed253d43d2df07f273be0696a90756d55ca21c8dec12fb296 -0x502594407dabd4eba89dc138b28f7532e018ead44cb22f6e7b6023ba3588c762 -0x3d393376721f421d7ba17824b97089b73d9039d75795042004d915c4009e13ec -0xfb0c730942cce0d5b246d55484d82d5c7a912234a009cdccc783ad697e97f787 -0xb868e87c25e5a4d29d94cdcd31cca93dee745f08537d292d64c17c0b8fd925ff -0x911390ea91912702f5c2cfbf58911b7def95e338e47934cbc4d6bce38a3590ca -0x69b486619505dcdc7b61f73c47a92ed37ecdf978db3a79fa4e3f68cb2f71714a -0x03d8c15bb054f6c86092d98a6807571102ee33c6d4d29aabf19a496082cdfb54 -0xe8898ab71165da6556386ca7d464191c03d6d46b9039f5f732d5ee3269a57e2c -0x8ddd83dc76329f5102371553b54ea0e600c1da4053da31058adcd05560ba7c1e -0x3bb2fa0a13ea9155d2f7f4cf8d9665224fca067bcb623ed47354f68dc4affbba -0x869522cb77d933116912c71831ab513b06f3818fa4b0ced2ff8d748053678254 -0x594d9fba6c2b0777631487e231ba5a7fb2d806fd3596cb55cf335211f2e27539 -0x21d82a44d0a3d495facd42a426ce5b7e6d1e80275b39e10ad0906deb8f9ba528 -0xddd34fe5febec8df008b4d1930fec3546df837c42b6463d362e03028fba0090d -0x93ac90d4e1086263e295dfd1467c9f53dddccf1a329f0e7d82814644db937fc0 -0x91aba97253a682975dcf122ef455c1a9f32b93faad8289bf9c27fc3df2a60742 -0x36dccf279f51a446211744f05ab31481e041213427e0bd150ae103cf233dedc5 -0x3f7f7147685a2e26b650424116463c793d8f39d49eb9cf1cdbfa91bd89c99d66 -0x6716a9fa86985fccbe3f543da267eda37a835aa733fc66142892a8a46e4d58d2 -0xe484d4a8dc0a7619223d0728b0bd6cffa197da84f7a2bb77225748f0d492a809 -0xef9d345aca0123f94501d8582960b8c4466c25e0d386697837f451ad39c659fd -0xc921a77b1351a10e8bb0394bd7f8c7ad9fb419620c48bcaff90490334f9cd7b6 -0x580e4ca07a983f290a92cbb6b22bb55e859192e98fa2308cd7f5a6de03d84f70 -0xc6afe61a85760666a44e89e2dc11e7ff942caf45cd748d95021683ee8377b064 -0x74571addcd5a5469ef7c46103936133c12529aca3dd25719fe97b0092031b741 -0x9aed03371d52d74b2050a263ef9e89975aecb7683b0da7cd116b5e2cff9facd8 -0x2dab226f5bdbd117a867fe0296598eecc877753b24100670d8cbe9a4110c8577 -0x85c71e1d17449b8126b0fa1861f5f13265acc55d16320326429e553b1e556253 -0x6e044c9e70226eaa9b3b5c1218baef5c3753ad285a45eb03f8038712ce9f7960 -0xd025075a0a20deaf221fdbad05ae31a74f3e030c522b4d721f1a3dabe20826c6 -0x6e73d4cd072cf1d23072611da01baf0861ecff77c89434dfd0aa7cd4b82d605e -0x4c78523ba955b3498a258c7e9574640a0183cdf40368eca7ed4fdd71e921905d -0x76ecf1d8246504565a49b4de07fcd5340e65851029881d1cd55de3006b29e59e -0x1836521c173547ba0a62fee88cdfe72caef4c46f8411e4a8371a5268857d5ce5 -0xf98a92bef23ccc7e1eb0fb14bbc37c1a605567f759f0a7c0867ef0342c4f13f7 -0x6875d4b94d2b3d5274c860725d8c0bdf55bff6e2449fb5fe5d21432df1c980d0 -0xb193ec8fc8cb5d8abe9cb7043b0afee0b900b31959def51d0c970341900e9f5e -0x78a464bc0b72dc5e6681a656a93b30baba8b4839522cc9b05d7e25a0e48444b1 -0x013c72cf061e33d4eabb85980535c76377e95ea7309b37a22e02d983d09c36bd -0x102333020255cafdb2016942851e71cfba3dfef0da3d6dc7648890fe7c1f22f7 -0xb3e48c2d8ec1a8679c409de6c3cbf50b2a627947ac3249b1419dd6a642ed9d2e -0xbd16cb5fd5b5bbabd5637cbfa39d96894fb11082d008b8a25cadd74967593198 -0x23615c345d42b68b3567f9e04d6c032dd8a8e023ac4de3106ac0b094b372a5af -0x8fb5690d1fc003e1207c99079fb359507a5d7e58da49d97c9b0cba3fabcd6ad3 -0xe94bca8fec58ed98fcfd779ac44ae3947ee26f1610c32ed9ef94a1861d652b12 -0xbb317bf977a06a39f801be45bae94ceff04a5562f64c363cadc31063aa03c74b -0x84be89625d0d32fe0e81851648d3b337eac1eee1e7fb1ebbd1ed0b9c332a0352 -0xe94b4530d367714c3d6b0bf1a48ff11ae8a45d8fb6de5996a04c86b198b974b3 -0xf5d850bc74a68773127b8c658d9bc6e19e898e465d4c5e08c5b7dd057ece02f4 -0xa3ad7454ba79b821a0a4ac3214b54eb79c4b47280357833e2837bfcf5e6a6c36 -0x5bbb9d390eaa8dde3392305a2563784859f5d8cee04022671419cbf6322ab73a -0xcd3c0c625ae3a55b5108da633270e7fa682323172a113a5180f7cc7bfb1748fd -0x68b5e83004a89248a279aedf07bfda5ea394bb09efbb3b81982cf6c762ca20ae -0xb4837cc29f6fa4cea89103553779e4a5d42307ed42ea2d76f3fdefd37ba7107b -0x27140efc401941612666d9fc5ff7d69032d7ede2ae0a3e66479d963ddd8026eb -0x9929d2e77aedd53e3f35927108cf8b8f7c6609cc0c04fafae3e66d55f05383fe -0xc46dcd9b13c7ddeedc85699aa35197b59a6e4bfee49305dc7226904a6f94d789 -0xe46cdee24f8e768579e4e9e7cc7f264ec976cabd36709d566db3d5442abaa820 -0x03715f3194667aec7af94859cf6061d9d6bda2a4af67b258e8347f8792f71613 -0x706614ac4e420c51f159755392724003cb9be4d15f01f65090d243101047a8fb -0x775e6869fed713f3bbdcc587934a82c962721f7b47ec49f2bb36b106ac59cc79 -0xbbb16d7ebaae7aed50f147b6b5e5125b8735972d110f61f88fcfe46bd363d4eb -0x14edf0d22afe460d525b654d54c5c6c62079f0d93b1b0dcc55fd48e533f99162 -0x14bd26fc34103ddfedd4b6755c5d0ad7255b74f3d13114518a779cb51769b083 -0xa3ff66a5698163429fc9eebebbb63156d31dff0a143bdede1c783eb14b7ff8b1 -0x60e7424197c208ef1a4ebbab11eb23e1f760dae5d3efb4c8793a2e7a7d89587d -0x84309a22ef0321c36c0286633d1d3df7793f30cd5851f325248b1bd9107220af -0xfcdea0b82562c91a6ae38f9976d30c21092503323438d5387dfa3cb5c3c2e565 -0xe91e82c91ce97444eaf313cb234353bc50f035e8ff932b4a2546ddde2c2dd908 -0x360fc24e727f663786bc7e7e1e84b9c26859e9834e85168dde3a7a85ab1b002f -0x98d639621dc6f01a74088c43c365324aab82285bbc859548c2784f6b822cc2ac -0xe636abcd6eadb2b2dbaec51b54276fcfcaf65dff135414b079357d14ec449222 -0x471ec73ce87e120462da33dc897f859498a9bd52ff6c78bcf52fd5643e5c20a6 -0x52b26e9e6500e540d5d524c8b70c28f6692ae6c16400d380e1874c1704fb0f1f -0xc7159359ebbb24fc7537e368e3c11ba6e861c3f4d7c62f32d51cf20307cfcb98 -0xd557b468e46f4a4dbf117edd2680cd84fc1d21b1dbb162aeef51c73755315daf -0xcd42373b81f3dca42157c74b252e8c5a7e2f6fbf5fcc6f7b4fec6ca972e9fe53 -0xcfc40979276f2702dfc5233ce87ce0a3a08c145b0e9bd50e117d0f18f9613547 -0x6f8e6d01389101500f4bb6368f69b917cdcf67423f3cca106007a5248181164b -0xb46417272dfe1878cfa0676805f241a054ae8b2cf5458f1fd6f6f8f1cebef7e9 -0xc0c4e4c1d4974e29a4211f740254cb5113e863e4c3d9f45a15678cdf05cd494b -0x11014748cba93109f5e3a7a5036960d579b1ab4910f44316c4fe364248593af0 -0x99ebeac0177be75d6e200a1dffd33f436b85ab50fbaf75476d3676d869d28032 -0xe1a83bae1901724128d5e6ac53d96031906d0cd580e831940713c9f5664c3ebb -0x46f9c0a798bfdf268ec85482127032678176ea336c8915371a903dee77aa6b0f -0x9e082d517f09e015c7997b1210b860ba647c5850c192881ccacd167ed3b14270 -0x9c4c3a3c1d93327d522bfc0b0523b25a122edaacea1d9200129dd56d9b95c5df -0x064b66ccc0fdddd9307c7b736af0cb6400e72839df7bf5c4b830bf5b11622518 -0x907c93caf43e172457ffffffaf58efb64c15184c8cdfe0366aef94dae2929cf8 -0x79541949d59bfbb1c34bf269d5e3eb84740704fe9f5a43421d372752fef7317c -0xe16ec73c5070234feb1656951470308b4e24d1bc2e90516bfaf733ca0336a3e0 -0xac51ba9c59121e4f7ff32e4065309501797b8ec7b8acb3527242e2cd893867b4 -0xa56e07387344c73d40f31e2ad74e59f56498d91a5540ba9c31eb00ff2c206023 -0xba210f185ada44cd2cef06667fb21ec008dc8512fd0b601c49a3201527e0755e -0x2d32d66d2c4e95fa20e1247389c7e309885600fa1349f841903306099541ecbf -0x75a5f1e58b04e906ce76d26724de96abc340f9fbfaabcee5230f47d8d363fd93 -0xd0f394c7557028a66c22df45b5e19da608bb8db9684e0398def0b3dbca45c9e9 -0xec402c6782e4c5c6e86a12a6d6ae8205413c26312c43bc546f3d1e068c51c835 -0x95839fad3d670175d36b8f501e1f67f711207f16b30ee3158479de2980d42b09 -0xd7c7e30ab23eb9ffdcdb3ee5c489cdf2283d77f802024f4b22af20fbdc0be5c2 -0xb6dfdf2614f7310604d3fed4c8934d1d21b7fe5be646f88e1b05f356f4375f5d -0xe713979ddd88b0e332ed49dfddda9c6e5a1791299047c6b07c07b1fcb4b35052 -0x69e2333dd5929f33dc500cf600e7f096021144e226ac6aeec00a5091a150a584 -0xea0a6f7506e7bb6f0c16f720bc49d0053b87eae2c9142894422d162c7d3471b7 -0xe310d62ed21399b0edbf9d5f38dd2af859a75420a08fa58025e9695477eeaaf5 -0xe7f0135170f6ac81981dda101f714af05d248ecd4589da4f75014e7e77bd8120 -0xff42e27d4b93349f9d4cad396b799dccd41ba21ca2e9a0017cc7852dfd0dbbe1 -0x484e7d1d5c885310e37fbf3de19bc63146d210b2f897c9263114cf636f2e84b1 -0x1e92f2979974ae1e22adacad427c7bb3fae7155dd5f983e96a80a7e3aa657f5e -0xc5ed895699ff3d7ec7a04dd7d283b784940476205cb90641b70b989c7183cb13 -0x7dc63b23bc71df1f519d2cd5a7798742e8adf11eb339635e7be75612be2ed36f -0x2642df9368975ae0dc862e0b376a99a01433f47d4ec6d8de52c5b76966e921d2 -0x14539b5e237eeab228b90de4f6fcabf02c16c834a33a0adc4e52d70b0ecc4ebe -0x8496b6d32419be684eb19455b6e87f03d6d2d846f6b9b0c1b6853dee21198781 -0x97f7032fb4ed4b2c29a97980b0473b4415786468abfa89703fe28b1b0aeab6d6 -0xcb853bbe0ae59d0456fc9414052a57f093de2853ed6eee0bb5bfb8f857027b7b -0xed3eb22be555cf54ae7ba6f9f6620c68261a5589393d4f7a991359f0b85ada3c -0xa92933e245e17b1d925140dd8a4855a472d39dbd0edda3a5b08ecc6df797545a -0xf7878030e8337a893729a769900c4e6abab416f561120b6cf5d2cd0d7f4c3bb7 -0x4752036782e2c093dcc2f65efcf1f90bacbb736cf9953ac4229cc04eb3cce63c -0x4ab4d7893f8b1576a421a2101cd80729b60458c2a6dd1d1036f04f47ec9e86ae -0x2ae4f1820f7109bae52358bc4ed0a6a46e22851f110a6a62434c09ad114999db -0xeb17f5e9e8a1fc1679d38c44a8fa80e63370b8d024ae0dec45392c1a23df3e7b -0xd655f31d9b7a84f1dab0da0397b7101b304e3a87a0a2ebce004a2f92fa61c7be -0xa63a12d5d5cafb57e29647e27aa39c76147196fa3bf67235a7926f4ff8003907 -0x2a87ae3c6a87244c49e045a925a4a7891b0b9e7eb913f8e69fad937355ce78a0 -0xdb4c30ef12edab52d813b2f57f9ee1acb4adb2bc0c42153c52bf13fa2422a013 -0x0c3f9324d3df72d36997c7879fff273c98df5d29acbe4f6923baa460d9336da7 -0x9af4ee6e869d67a3cd6f5cf565f3731f27a7979982667b09ae8072849305fe5e -0x333f9f9d387dde9743ed074255f88c5166677d319a154c13145a41bfc24eb100 -0x24dde7a46dab99afe713c1c7ffa4713090bb60aa2030c16b3c940ffc7d13960c -0xe829e77a250593c31e172fa997689be52e74dabf59bfd3a5871528fb514cd8e8 -0xd67a88f16f27b9cdc7a7964a6e78ff636ff349760fd4542d6a47dbd5cf3dff48 -0xfaf8567800d294ab6959fa69179a2e228bfc8332501e00544a397b3318835884 -0x48f0e94a4395893c0223f6bc55e8fd029552b8500c6f6bc80587b895a7f5978b -0x597a6c0325f6f1bcc64126933130a5f405ea6df4cf1e9efd0108a99939d98481 -0x06c308130edb9c7084ac77258c2cb8294f10c8375cd4854d6912c90f0f4ae558 -0x20505b1c8555500b263932f49758aeb8bdbd23a98d1fe582e5bda0a8890b55b9 -0xfaf17d3fc1f6444f8c2e65273eb82faca679252c169d2da63487cfc7086e9766 -0xecd9a0c6a68799a8aa53235ed1d8a541d4e4541ff44cd046b2efc535f01e263e -0x0bed081e6fc4a48f447dd72309a9cebad30625759cc0c479a3ef44c9c583d450 -0xbf9c36fe8a271ab7cfe6ca3fec168a7295e4864d9589b529601568474ece57a6 -0xc34f2733ec425736ee5e7d812a939fd335102199c65f8f8fa4b9d5b22ff6e189 -0xe3cbf09c3e22b5c189c901362e8a98205abb0d73e56e0b76e274deb8fc9b753e -0x6cf8713a9d9636ab5860f66272ee452771eb7e56679a42bfe31101fc699e0de7 -0x09c18ffc3b618578e238b396172b3a4fa7d81212825df78dff5a2446c507a76f -0x9ca0f9e5103b687f36925d4c27e9fb1b13869354d910461acfae3ed1b343250f -0x5da67bba16380783799f361730db492329bbc3efde8fadcc609909585c1cc228 -0x36072a8bfeb887714630068b1759b006d3c627fcaeb1e451c6be180cd5c26a84 -0x1130671d0f096d576e0f553c1444f937f5c3ec2c0d3ec10dc793e677f37b92aa -0xf574e02e74f3df52605e2be8e9731013c37d124846ea082a575afc28bd2a0339 -0x2852909585198ad25f3829606cdbffbfba6e1867b2ee0cccef77d69257e1099e -0x06736ce5448fcdc8a572707b334bce02ad99c4bbed2c45404ffdf06caef823f8 -0xf700291ddbfbfcb553fd4c7ed377a0ed23f2931eec654b8f68fc1497a0d602da -0x937b21e97db572b6fcca0306bc3b876c54f110498ee1ccd2047ea5a8fcbedc28 -0x7216a6acacd226042a5a456c5468f5320dcf9769ba6251ffc74023748b207217 -0x671bf6383cfe4f2d4b3f30da0ffb5c28f29833ad35c669a90588f866979be239 -0x388502cb4c3c4164e6f0d0f3d04a49182a0e9f207b8e124b015e5446744414ce -0x9949a1aaa4f29b2a486c21c23b1da1adb85e8b9e904fcc5cf853ad2efdcc5005 -0x6005ae0c6310241989360e3c4376b248350393af1b25b61a63c4cf721c61299b -0xa64a359c505f0306649d4d97d40c203cc3ee5ef8ca322ff8e3f541525c53e112 -0xf86165c664f91c14df24c86005790d907d799e3dfbeae42391f96538b8660dba -0x0a60630dc2bf5fbd3d3ceaa4fb47184909a2a4cfb76113feb07597de27492ae6 -0x1f51dc7c9b1eaecf04d299a069966f360c4c7690d7a3553bf63cf979ca027fe0 -0xe7c5f288ecbb7d5b1267cfd60ee65e694418803bd64465ededc14eb32ab9971f -0x6be2527df298dd5d376dd986c2270699f27f0425198e482e0ce42e94453421ed -0x3ab47fad99de0924857d54fbaadabc41303c298652014410eddcfb115382cabf -0x22f43d4dfab270494c5541711fa8f7f74002bdd316d150071aaa6a95012a78ea -0x7bea52794c4f55c1ae9c4b85739097271c405837aa989a071a0d9325d5eb90ac -0x435c328415c6009b94e29c2cb6db94403dabe392f6330bf4cc22200172324405 -0x505aa130ff6b0a787aa59d91520a02d44e34af5d906904738a1520c40fb81cc9 -0x63fd91436152ca2cabcc6ce76a75e857ab1443971aef5f8ac80adad74761054b -0x463bfac17a3f6bb3115dad62c39bbb72bf58fb7362c36756eb5b3622f0e72eac -0x4da6febb25dd250226b8016a011a18e96463233c0eff8f7fbc1670e4f6e65f4f -0x21605ebf72859ed13c782059561e4e997b82885c3a219ea869b564a879310074 -0x542ed825dcb3e449ced5992b281037591f90b3c65afc9488e10ff649ac229b0d -0xec46bae3ab0cdb3864ba400e887230409e24cc0fe7f2d29e762b8b595a986832 -0x6ed3f07397702b0dc2406a60735c237f3581fd4427cab116b023c7477b340ec2 -0x872f9c925780e9e0670ad058e6c94f3458cdcfd81655d02b9c7d849033a1133b -0x7f2a80a080a621bb7905a0c89e99094f5074861abd50d93fdf18b5c863c85860 -0x4b72ffa14b54a6e8388e14d52db0cead0a7aa4b35d95418ff99806b4218651d0 -0x6db15f35bde309408fe61cdf32dc5ef0497cc3c8cdc2339d83047ca67b4576b3 -0x9ef796610a4b01e661aa85cb03fc855db99071eb4f5693c463cc50f3f73eb88a -0x6fbe34accbe88f2d82784b9241f01002a284f681828c50cf1bcbbce75e5e93d1 -0xa059c0d53c2a2bf11f0e6a43a28b494367d56a25a85ce42770216d01bb82729d -0x60955b0b96d11cdb400c4e81807ab36fc7ac36d07f204d3678e793dd04feafbb -0x1af4e91b8bf241441d2203bebe4a09c81b3dd442fe7ca8efbca8199eba1b7d62 -0x3670651f4afdde28501f2153faf38baef2b6b47969eed7089f0d6fe6b364df7b -0x3279139d51a61d97882f1f9881b8e43398d1b19edaf238cae1d84d0e30685e7b -0x6515a54d65349c56049d6bfd326805637aea677a113a25be9d0f6cf1f7ca0259 -0x04ae665cafef9f3a5ef5c340ae06e64f65511c9fa57c6b7aab40d64af1dc61b8 -0x2e30d629039ad108a22d8c8728cf7357b929d66052740209c09703354db42b8d -0xb49d180d75c8eff7fef8a1cb6aed1f35ef97c0582e287379ce356eb352f2f497 -0x76efd0822514d76e2dd60c2da2ef06f3b9324df367f14e6c0ec7dcedc99eca8b -0xffd3226d320e916610d63379930104b5b58e50a082dffb5bfa4514b7723a4a5c -0xc834bb99ae238fd21a9e573b04f890ffcc82e69266c7cf16bd836be066dc5e9f -0xdc13ac094733bf6b678783ac135a94f22512fd2a9cf3c7152e63d36f18289e76 -0x9c1506b9b21cf7f65a687ab07e1295010bf8b939b72adf8407ce6c5120511ab4 -0x28d327f9dc5fae4ff53d63e6ab54429eb5ca7844d6f55c00bfd2873f09789217 -0x76816042e0a6ba7ee9d1595f31d401ed3b06fadc54beb8ad736e6c4c648f63a5 -0x6ca689c9187bef4f9def1d9d0156514a4405475c7f282f2aec48e54479e3b404 -0xc53172fadc76a4bc4eadf3c64a673c8aa2a7d2e4467db07d85f10333de893e35 -0xe5397dd5cff7d80e4216d89706030beeac968648e7dfbab9466cd61ac0b6712d -0xd7bc57326d5f349ce91f63d12c766149243be0f7001657adf1cedb49d5ee6c31 -0xf4431d503040ebd4557ad2a6703e30d914c89ecb85c355de9bcd8fd88f46a5bc -0x87aefad0ce8b531ea8665b08121b3605ccd8a6daba8f16025fc9377230480dea -0xe043e16f37616e2e13e0b57161128171e87bd172abbd3dcea3f59cc2fa3166d8 -0x799f734057a010f466fdd355521d6bc9005eeaf03d20053b409b31f7e1bed663 -0x1b4e24115b79b38154828f2cf4afbf0979855f6faac0191d0c9f2d6fc1e1a563 -0x4d28136258c970a4e0924e93c6801a45348d62b3bd23e7684b29082d27e4bf35 -0xc4d7d1bfb5ebc333059eb120dbd773c16cae2f70da819cf178cbb059196b61d5 -0x99c84ca886990af15e6c78a16218a03c8bd15a4e9b4b9fbf23c9387f323d4dc7 -0xf20f374fe9d7147f9a434b6d176a6b797887f4716830ff67e4e52d482ffff034 -0x2b4d4064746f4acc7a3d48bc18d68b6f253c211c018e797195b00bf535b9ff43 -0xf4f46ad71afdef59a891d171b9e02da6aa1c9058bc16b0e8e463b24f0a2ff01c -0x35e57f8a86b893cd6e983d557573187804b71ba7253134099c4a733c8e2abe29 -0x76d3859dd9044f6845d09f944f698dc8479eb3a2274a056eba9d5dde0cfbcf30 -0x701fb064337b70d07c62224d1259f63baec130280a52d90ee601e99180cae26c -0x90ae33be6b94f352008a39e556be5874141b13e817dbeeeb3547842455b795d0 -0x866d75bc39a3e2096a8d2c469b3fb28c80a44d767c3751af1259c2e40607dede -0x07179070c63e1999e817b598113c5b44f4272fb9da278c22e9610d5248a8c708 -0x8ca3444b3459dbefa205abf2aa67d8eeb311c67d2d277e1e33dbfb2b679ee06b -0x1d9972cfc544c85f0a6c8672c81308764afe9996bec6b8d7bc23ece39197cc2f -0x815577257b97ae7d378b4704d7921459e1edfd5a8e6609f99a359518839b0637 -0x52da594257f860d5145343da8f0f749f613f3d2398f9aecc19c565a64f4abcee -0x768a9fa5f0a99c3135254155327fd5882a5a17fec57d38e8c77265ab57dd8e42 -0xa3e37a3da5f9bddc159e06b1dec98fd165c3e9e69f9777dd33536ff4cb81706c -0x2825b44cbb3b6b374116bf26e787fe890bfc68e41033207b6a355f26adc078e1 -0xbf12098396430490c368498c9220ec6f0c1941e0856278ce6da02521047ba205 -0x51b27a6cd76418b0461ac823ad372d1a051b06db79af051c591b293c1ef31299 -0x9faaf843b47cc38bdae15ba04903518a2dba6d8d154ff078d71a0bc3264d695e -0x2f123845d5653ad3a0fca56dc434fe79937c566776dd2e10c54044c5d1d67482 -0xbc3565e4d0f3e430bad7f9490ee5a8896548cf897aa0bf7fce75144832925518 -0x65cd67418acbf9bf48eef4993a0ebc2320be3126932b8df157a2b9b5b587a470 -0x75cc8a93c493d7a6407f98c41d0008d3e5c84e51880c722ad7646b7e83e07b7e -0xb1925be93295ae54bad1c1684c6dc20d2a2ba4119b90f70b2ef325d633a0d50d -0x41ac427f7706bee4de41773e20bcb6399be41ba77888840247536fed786307e1 -0xd3ce04b5c9d6f496eaaa10b34ecb3d7c887d149fb4c23d8db44b18ac017eae20 -0x4482b48aef6b13343e3971fe702cce8956c68a8fb9382bcbef1293ceb72ae6a7 -0x0aa9506a57d7375945e2f906a707ccb4d458a4bb1f8a3c7757b51937c971e488 -0xf206f1a82b6c423321f32c832eb4561846e0e550b2650b232b5476eefed4db9a -0xae467450807233bd6dfe43257a0f6c4dc570ba8d8628beacd7f73d3fef4f005f -0x0ac4d28b892567247be2185eaea7009098ae82174cc00156b300d18282d0e361 -0x89c236971c4d53a73d140e57fb3dd71b38f01cdb9980e31cc0ce07b96496aa82 -0xa4580ec76a60f63c4084a4818221588aab633e7f253e5c5a313c0a96134fac8d -0xd8c29b5d95b6ece56c884fb5053731905b1648d8fde306a95063997a8cb00208 -0x79de2a15516f8911499123389d2b7a36261d417ef85a6e223a4df7327f30ab4f -0x4bdee57994f1656453c3e8198dbd189887e50bc7fddbfa786a1a17b0825baf65 -0xc68bc0c9b464292de80e08c2cf130e76f427f31cdfbc39cd8e0380c8175a2f94 -0x5f7ee094c483597204ea165198e2d32a14956763367ab691b78777f829be84ca -0x0490340c3bb6f05d729fc37ecda815f699f61fefabac12092c17640559a5f3f4 -0xf1cd60636bb4d75fb24f91a53bbadfadfece998db0f6a4a1c389d10017556de8 -0x966bf1f6dc12cc32820e050ab84442891f8a4d2d2f073828963eac607865c6b8 -0x047bc64b4bcf8c0007ba07712ad4d91501b55507cc41910d6463c495afee5400 -0x5720d542da476ccf1ee22f67b07ff14e348b662252079f8fc640dd14a961c65b -0x16bcbb1b3ea39aad1edc79a8bc2b21c4732326cc776b0b7f0de439465a3e2270 -0xc12b2c0dd4b4c1387d2de3693c4b328c464db54f7350ceadf87f84bc8ec1dfd2 -0xdddddd60987c9cd8ea3af6e87cdfdb6c094e006247045a1298554e11d2347799 -0x6989cd746f041820a7b47d30dd263b7704a57b8b6dc22c6cac583c2ad1d41e74 -0xb4f78844dcf1d06f154419f273226c4e6a8da78943431bd76f6e2da5ad8a61c3 -0x6d380167c2410315e4930c25232682ef2ccb88fd426438ec894ea669fc23cd95 -0x2f5ead9baa41f282c53ce705ffe8c6be9673c966be8290bf72bf3852836118d5 -0x6fa3ed52ec3c5a7cfd7de9a5917514730a562370fabab23d5c43c2227711572e -0x17da4d81dc9a8c56aa3158e17d325c24b9cb2719b96687765517a7549ef9d3bc -0x4046e1dd9f14cdcf243946540d202b71e43e4980afb30347d7e18e864fda8907 -0xdf1ab55013ed85d9ee68f32f3e4d5a260b406e0a0b9639363fcb62306596798a -0x57d6f63453b0300c479cdd45d87db49ec403173a447fd89d3f6bd6deac970019 -0xf088b20afde1397a3de338585c00f460f00572a66378ae3c1869df8612008bbb -0x410c637689a7324bb6912ed365a4497175e136d32db50e10b957c5de0c8291e4 -0x5457e5dc13d0d14105e334598a9394013e46eabfde65940537831b7b08965aea -0x7d20614e1bcfaf60d7689d3a50148c9ef3d032a764d3c8d566a7d64594740867 -0x0779a489f1087bdd83d239e1ccc079d9f9e0c1c7ad3abdfb4463ead49bb899d5 -0x3324914954e802af2896fcde861e3cbb8f5db635b1517f9aeccbd02b6d92a14a -0x9b99f39a4c161f4cf3e42fccd24ce8cbfe4ea472aab9232ed8a9ed2330819734 -0xe08040b4fc45543f56146d89857b3d8313a4ccd67fea290ba78b2f7bcff26473 -0x4ee1dc7560484cf9d525ae0ca524f948568cf65a22ea6940dc5b81d1b781b429 -0xfe8e53ed31092f60d2dbd9d99a1d74dedf1fd68682730e77712d2e1e7e35cb7f -0xc9cfab1da84243495926747ea3a1b9c335440d6fe9b45366a8a1737ac98fe02e -0x5ed8eb644e3f4a71a00be813d7b40e9f616851853107b53ee067ef96f2d49eae -0xea582a5b8ba2a872703db000cbb40b59527091e6c26f9784e768cbc8cfaeb945 -0x74bcdc2c4891458cb4304fa6c8a1440490a80fb92d3ff20bcebc7fd9d4e33992 -0xb2fcf5719910bfbb09fdbccf407964bb733a618cd80a5af7e57a096fb1150759 -0x0c6076a77e2e4d63868ea1e47d5762d1c668f80d12cfd35bbd9e3925a3462ce7 -0xe34287c7469e76477bafd7fdefb514feb6b3f92af2e17b9f7485f529d6888d1f -0xa73b01e4387db6c115649a9bcd4bea8be19d8ed82b8da9854527f01528091b6e -0x852baa765f80fc72c7a291f48fda44c959fdec28a5b486416602dc0288ee6f25 -0xf8617f22f3592b2dfd30b26f313a48333f652454e968ec627d14c9a5de269013 -0x123f072074374b4ca897ac05acc29154155cac9a5920915dd5663d3fe3c3f0b3 -0x0f1c9a409fe03de5f9f1b94ca955a2b7483165b858d407fcfde6c9172a9a3371 -0x528bb31423f33febeacf2da399c09fe995761ff237a105e6209c665a92b6fe20 -0xd7ce7848765ef1b1cef9cd90be50219d2a2628c044040de5da4973e99218cc23 -0x19d92ea082cb526b46eaa2459f7271a4dcbbeb73f0f104faf07fccc36c7ecd0f -0x340b64397d73a33346d4488fcfcf778292f8ec712fb6e53b977a50b949dd5119 -0xe7149b16b3ac053b87c11ae2f9c6602f15834dadf6575040a12f4b0c52f791ab -0x44803cc13d2445d418f20e00e42aba5e98ce682aa11ff1109fcf40b1df1c7168 -0xe5bb39d506ff86d0c81967eb94586c62100ed89649386d27856d94a9ab3577cc -0x3b70d99f648992adc3e9cb82b72a28402605ac6ce76531c9ee1d504f988cba25 -0x0a3ebf90617d25d4463aabaffc77a6ad59374a40c0e85f53d1d2a17c7b03a0fd -0xae03b86df1b33f6a23561c025dddc8701e7a0435ab75bfae4642acf56c717ad9 -0x24258d23f66b512051c485cd86ed5f4faad3416a5ca64fdeadbd97234c978b07 -0x14581ba9902e54e5bff4a59f1c48173b561710301d9914c40fc4ed3699cd0944 -0x876972eddd80d8039dd5e56d0cc95739de4234a5f6aa30de08ace63bf403ce7e -0x7cddce0220170c13e9c4e88a426db6fef98070ba24381b2a36f50981925f1c67 -0x931af5e3a3c008df00a74c566c4844d013e975a31f982b88100e7d390ef9e7f9 -0xfab58525274f31a0ce3c8582cfa66a2ec685c36683aae2875d817dcc06a30825 -0xe3a341e7045b6086f7e3f79bccc5955c4d5fc25f8f50550d7aabc0fb1fcac279 -0xbeaa023dc4fed883f9e54421bf5bfe6f2b071459252e5658dcfd4e4b5d817791 -0x3040f116a11aa6d2f58a53ba4818b6adc8ac65853284e8ad61a27cc07293e8a7 -0xaf5b331424c165a181218b8dfd4605a02fb6d179f9f019895cd01f3d25687914 -0xf258766e69e3e368a9f4c22c441adfe7fa9ec6a67e1de85f560ce31160f19eb3 -0xad074b31bd67f0b2984a2b35f9ef05c26c4f831e43fcfd7fd3f71b3aeb99c51a -0x99bf34df1c05ea9381464a3ecd0df95a71069f26912295e341475dc6b0d408c5 -0xa58ef56cedc6375a1b5585fc0c4a84270277716c7ed2af48e3d1b9bb78abb1d9 -0xd909a1a673bf2fcf3e97901fd005b35db014b24fe790ca44950f9ec56874cb7a -0x69ac3e2f3f8f54b25c460085e96e14aea6655b13030f64c9dcddab9c0286d876 -0xfbb6ee1f2efe2a9a1d85f34a8ba28925739919aaaaa257f96c1aa5f6bb262e7b -0x7ff5dc1444c4125b0965b77664f24f699ce624381cb71e55734e6131e8dc5bb2 -0x6357679d03197e4f6ad6c6e46e902d158dafd099d876f00a1dba8e3ba3c8dcdb -0xc2ddb69cafe1f90bccddee7f6fbe3919d048903545e75e7147e37434671dbd3e -0xff9a1f9ea2caf00f929591929a6e8a17f0ce5d49839aa3871c449c3da77f8c74 -0x4febc5edffd238d9618396bf4e1d04278d5e17f59c6ad8128c613b43e0659219 -0x3095a2c6385a446de316ea7de1231e05c0b2d2af09bb8885bfa68d2c65236bb6 -0x462404278d3de6fa8cfa1632d719929ba5e61f828129344250df29b1ae6e89f8 -0x7eb3d2115ccb1b1b1f2e37339032c5bec3e6ccfdebeb76f882a962f030b38ef7 -0x86b5711c49ea723ae82872b320c30fb0816a253522955477261215b2e85cdcd4 -0xda734868a5b711124c24b3102253c1b058880526c2627312d7beefb43b668b1f -0x50e7280f17f6d6b0442163ee4b4a736853b873360bd5ef1050a9cbe0bb6a2086 -0x0f4f1a0ee4fa25ae952c58193d1c4a57cc3db5c519f30aaf7ab8ac7369366f8b -0x82ccb17a508f816aa77d97350a2c60abad40a8b7a376cecf5df55393729a6cf2 -0xda5806572dd7375990c6922b120199bbd83da7043a46b228d7de2ad4d4f2ba8d -0x2dbdd94a4baa7c982e442c2291297161ce865165fc6086b74d9a0847adeff102 -0x587bf50b571a00510a997cc596a91e386f85ab38f605fe50d9ce026428a49940 -0x2c820ae7a1e85d2f8a973670918ed55e46a49e8553b37ea5f78b15018b5ea7c5 -0x1d427fcb6d4f392928c614ed42a69275d80194a1a6fbf76b6f33b1e0ea9a30e9 -0xa4d971d5a2c9b97209d495e9d5a41aed8717d6c24e7d9283d847b66d55a1cf40 -0xc3bb3657ceeb88352432b87ab015f1eac7c00e8b2fe9a06c297c473b400741d4 -0x09a45775e85cabc76331a0d657ba2a3002805c4a7477ecf663b7ad571de779c5 -0x6eb085e89d7f94e2c81233765eef2fadf1c0ea01a0620d2ee76beffd888bed4f -0xc19a73f62e7df7887e04925eb3b41b0ae45955f0c27acea43ba3ee957f10ad39 -0xb2fcd376d91f5f5a27632595dd01753aafbdc2117afd5adfd1d46730ab2d1d4c -0x4c507ddd5eca264a7eac1eef58634ccfa374726ca47090beb7d8e85425fbfa9c -0xdedfca2e0aadfea50ce6aa19bb4a6e00911dad8d0cdbf0524a0847143f5f95cb -0xcb2e5dc5659de66e57d5546b5c4f5420fa7c5ea5c82b9e16b4765d5cb4f2d01c -0xcb2b46e16af2907ae46c64c80fde5dc55d321d29d4b7a7a6a65c6ecacdbe5b1a -0xb5bb7d6dd4c400876ba6cb30374fa5b3e1432fdacf03973da229f0a7b0a54635 -0xbad23975fc85e7bff5e86ca222e0ca09c8ee65d3ec5b4c8b09261487b7473dab -0xafd99536b55e662204db21765ddad297f1d1c1ebbd3190be277ac0ebe2601c20 -0x22b7e7841500af6436c20d44eb43abc62a2e33cc9eba23a969d088cae5fe8ed4 -0xb18080fedc84ffa2945a35d3cf846a6e1bfa781e5fdd4d4e72e2ccdb38a006b9 -0x995a10c80f9d11d7dbbaa076dadb082895f0ee72490ce6eb34e45edb20e40e84 -0xf9a026a1fd64b40cb05b7bd5fa608b753ad528542c17cf9aef78c286e08ff09d -0x2684bb555850ff3134e92942d00ed250944dcb0909d6f6a4e3b8821372ec024b -0x9dd68128d9414cd8963ea3426695a2226b6e08f80e4865d33660a86306041629 -0xbec57096093989689a63ee10a25bf9638266f3cfb9a238b984919ffd9a64f091 -0x08d0fee2064555f82d6b49eb68f41d998283b7878c04b10f96f7f7423da549a1 -0x63c9f93ceb418d9176559de928677311e5e9e28e9b3eb9b5e67b51f157339ef9 -0x37b4096d7f31d034a740fe4c7f99f093a6dea53d2f5906566b99fab14756b7a7 -0x2d3c46b11529f05be63a36270aa68b0e0b0935aacfaa621dbda1d9f3ca2af54c -0x97650dc3a19168ff9eb1a9e560d8f5ce300a3b2f8a9bfa45b7ef7f5945b746c3 -0xb9dfff2ddd25ee8f83112ad225875558b2972a74cbc437e7096e8c477e68e12d -0x94b5600a6d138f414550bcf179367bb62d876a622e5baca75dc86a907b250994 -0x14f3c8ed09cb5d983c966a5ee329e086164676ee16a2b86fa7c58a86fc88fcae -0xb839d0353b76017abc0bd30cdac58fd68dac9174cf210f83e0fbc4ad308cde3c -0x061a27d58c1edd83fdd233b9a4fdcb50972865589bb8de6245330ed02ebfe521 -0xf613f414ffcdb06bbedecbb15ce89c1c88bcfb1048e038400e8f0f9a9cd125ee -0x808ed80827c38c1c477df329a88de19f0588dae68d58526bd61e33b2c3dd1c2f -0x3c4657a77eaf241d140146d75cea8351ea3d3f08b70f90c04b89c1356433cfca -0x3f27a1e85a35ee6dc854d7ca32fb6f2ea39c994654c34a9bb51b46de2f60e269 -0x739dfb291894f889b215e7955c1f0442ed04bd02b65bc48f4724edc84326de53 -0x9af80dc5f1cbc277c21fa568035aee0d409c22eb937ada70d8de0179f9924697 -0xde1e4fbfe60ed75024ccdc210a9c24ff7484323e106beca85ac8ea464fbd6c7a -0x6f66efbc7e277dc23392852645ff69cb5b2305369cfc9128261546046d759d88 -0xbb2ecdb1c20e74ffacc0669d45d7b8c8a8830d048c83d7a26d338d6df43c6c15 -0x99c0f367c824d2e7163672a5e0f45e35f097b8f5c23d981d959c7181c15cb5c9 -0xfb8ea67d638281ee53ca31642de727591c7e2bfa0e3facee09d7888dc35a5fe6 -0x0680c70b32e7618b6eed3ebe902eca087668afa0ca789f3237c97ea1c9875554 -0x3b557325e72e054d3e632caaff09367a167991b4c362e238e887444ee8684c47 -0xef8685e10373ae28b5cf15506e168fd0091a540dc6be5edf473baba7a818994a -0x556112b2af13cc76eac3592159103f20d3f9fb2357c41f5844be409637a1208a -0x0db41c755c0ac8e76478fc72623ad51217c87983a2a3f7a5f69af78ba1e7741f -0x5af95d64da1e3063734713d96ba38e7e1cbf25f54290276828bf11f60b7aff27 -0x5a4ecd1815f4bc2adb0dde0e308f2bc70d69bb2e999f65be9a9c6e0847fb94b8 -0x05a9f78e5958a3ba570287510c6ed1615acc826605222080795b1401f480d270 -0xbe381dde0e49b207a7a9948ca3389e9b6f84717c61ddf5b15a63d6b9ac8b8812 -0xa26d1a538c4109dcde20390554b2da96d68ddd2e4efae529f3c77b1ad7f4bece -0x9468b951c445bdc588beb4fd96be885da3347f1a1237e689c1704653ec5ce0a4 -0x8c99dfb8056434cdffd8709b0999257972972b281e018e242e8355930bec892c -0x13bb2b582a926e07a416f33ce5f77808186ca78a2f9d77ffe57ea54ec3a98d37 -0xbc2c78d72c22472079e53d86b4da373413de3c60905ebf53e0a39da6b9d81895 -0x7b837bb954997e5676b4c9a246e65f4548bd0abf8ac1e742a33a9283cdbd1428 -0x45423b2990dc64d519f1d240f8c3ad260c429ba73372d1dafa866866ebe98017 -0xefa8cf33c0a00e23e756a8234b9fafbe183ca3086279095891651ef469ec7bdd -0xdcc6300d352836e6f0bd1e288d8c813a64ba7024ef01fb11ba51076efc50333f -0xcf8ea26d57547743d54a078786e9ac63756e819d56a823f46002f99d3a31ba5e -0xf61516bad18a4b885142f301712295eba7f0028bc3efcf6f44a78c820ed44fcf -0xf346fc7408fadf7d09faaa2cf7ca58873effa9e4537297933db9aa7a33190331 -0xf752a23433c759b2324299f25b2289bb33395b4b43b7993cec50a2472e72fb0c -0x4368eecd5b57ee6164342b79e6ba44aff52489ce026b3488dd48382ecf5a7efe -0xffc653f23c4e226fda0b7846cebeb70ba88d8968b3fcab256b52744c2a2e09cf -0xe4a9a04652852622272fce45c7936b6638d374b2aac39990096199445d80ab79 -0x7c592d99685c6baf5086c1645346946d80aa7386f2d1c0ce98117b3a6bbc6acb -0x559284c3034cae4efd3da05306b1450dbba8129479f2673a07f6226b223c2e29 -0x6ba79087b4de4f77faef3a6199bb09e520620e1a976f157abab2765510635397 -0xd2bc30005563b50637712e6f5cbd1ab0b3bfe6c2591306f164071a6e76d8d69e -0xf5e8bbd825ec6e34fd7d3423127767d6ccf2cfd495c9a40d1d7fc057c603239e -0x2c417bad18ef74eda3573dc91a0a5c406e8190dd2d8784492d1fe3c870b3a340 -0xe6a997729de741fd93cd1fb671c2557fd2a4003e48c1beb2d8de6ef51d573784 -0xa0fcc1f134b99d34d8ce58242a2eea42c0614d1da252af3559b00a975f090bde -0x8634ee9c941fc0f7c7546adac377a7338c46f83bed958508f9f49648c4ae9c7e -0xfb092e72b6fb4a001e6450ae4624b9ef1b716dcfba24c524f81404cb18de5ffa -0x2a6bf8800c4747adbf4779b4e079ea19a32e860a7762418dfb79c99259dee0b3 -0x0010b5cc2efe59bc7fc37d7788a197bd4f9a8cab4b23e533c5b2260ea7f56705 -0x6978e3ec06ff5dc3206709055c3aced90db07e351c8544205e6972569b167c88 -0xf0988bf41a23b0230bcadedad65d7c733e74a4f10f52205cc37329695183aefc -0x867045972b420da2ae35311d43d973068e8fd708b69ce18aecb0f0a582a7aee0 -0x1348eea65d66e6f0a48e4867f1e6dd2548467c61405b59b1713d4c37fcd6d0ca -0x8568e798055bd8a30a376883fb45c0e3be420f3916e1240f5ee60f25b7d8e6de -0x012a54179cd6b1035e795947cc7f5dc346b51d990496748800d2b95c9c8f894c -0x5065a8fc34e593a1d47b2e2f1c41f835bd91cdcabf5e0e67fb142b74a0b5d2b7 -0x2e8a86b63ab5342f59f5cbc0834c9973b32fcb15d5d15d009ea0035e23315ae9 -0x7cc3a6d3ba6f36917525c72660a7a05b151718421bf805cf0435e1a05a48b186 -0xaedd7d4429e39282204be29aa240a9a5bdf4074fc81a6c99fd3ae6df5ba31a86 -0xf67b7424d9f4bccc8c96b55b8876e645d473826870ea89475a63202f6a508324 -0x1f10561faa5579d738d4b9826b72110152b107e134db3255fb1763e4c015ef2a -0x3e9940f494a49ed18820fc7c0034969c9e1be39cb18c8c63838e7e46eba3c257 -0xbe022f18ad75382d1bb11c719105ad3ecbc1399671d857d61c4b2a905cee9a76 -0x96aab526de282c590e1623cd3f72d1fa849acef3f34e9456486770921c613f5f -0x9a32c69bce14dbb3d07f0eee366d0515cfdd321575553fc33fb448a9d3576189 -0x2cf958c77d6ddca357872a4d36e66c0e4db4f104da0f9eca1ace8a366966b0c2 -0x4001669747f7a03bedddb442cc70621b6ce39aff71393ea46dc452ea44ba15ea -0x6c5d986e79906b1dd80dbd00c04f2376dbf0b78a0c9476381a6904497bcd5079 -0x83d7f280907d018696547924309cce2bfb8a1546635a8b1d81d9701041f505cf -0xfbecc480653a6317da086e5ccf97987c4beb3f32e54f3907bb014be75e63ffb7 -0xd508e3cff9d47f26ef51dc10a18385e1f786916cc6b6f96e1582098d8213c661 -0xa20ca6b4d5cc07e4771e6e3664f79236892deffee23206e51ba86d693e810097 -0x29143e86e25aecdf70d3cac7e961eba08c2e69e54dec932aeb32685080006bf3 -0x557e48795f90a03f66994db8c25fb8d77c3115f51646818693c60dfde8b0c070 -0x76f263ed6d0611b6da8298c2d39764b4e5e692e5d04f85cc1e084b7a9631830a -0xf2534e6c9f7b9709323bfe65f963313a610445d89219a10f7379a1bdd10ed8d7 -0xcfb11adc7602a0480e4f0c8a6e0820eae493dbb0a39786ac731271ca7277c17b -0xdf4d96083d0e800087b2774a8c54cb2cff95bfffd766d67d0cd887c824aeb613 -0xb120725c465690925c62d5d22d3f21a34ca39b9bc577602ddb7db3bd177256a0 -0x44ac771009274a8a6294ee3790b5c7e0339066197bc05daf238cdb34dcf09a6e -0xb1f87ac4b3d04abfc3cb14190ff9019272abb18c4c73ca88ad44a99f23043b3c -0x709780613593189e93afb9941d3000ac2eda6e87b349ec431cec6e21902bb3bc -0x39de29635a324e749ce4b634d9fc0aac4bd96accf512116519d77ec8b1730b53 -0x17ff6428670b127bf9af62a954baac0e69e198cd96155ea7a46148f88e2f15e1 -0x6cad40743fcb278db423c531d5acfdf6f08ebd66ed6c5e663887db122f888136 -0xf5d79fdd5344f58f12dd9f7e5e8801f491058b04907268a3a87949b3c8f6b131 -0xfec0b14b090ac391ea5f9f3bae33971d454fc06fc375c9a2d41c2efa6d1c524b -0x4f00dd6f509bf05f35c6e8c56d01ea97be6a4d306c5696e782874a59e591ab9f -0x624bf2641a24718aacc1d30df78796397ca574db934cfc013fa0f1a78b57bec5 -0x536b9a31c5e3a57dd391e8336b1773c83b9ca7b741519f3483831c5e85693571 -0xf8704751f3d9163dba51c2a4426d58340d2bdebb3284dd63d6448860f10e9b02 -0xe07a4a916f0767c0677cb3774092b11a375b6ece49275d96c0adaa460f2761c3 -0xa0d3454f4e094fddcbf0fbdf7727e88f672f0141cc7c99474cddfdb38c81f7f3 -0xeeb6cb0b3161671c3563df2828b6d1744f61318881cf1bba288549ee8fb0f1d9 -0x67dd107b6ddedda101ac4b60d43ead4eb63ad9877ac122062897a86e4c8c109a -0x623538b9de5988549005c9f4eead804a08bb1a76f98f9336e578a69e26f3cacd -0x033daf2e84652ff39bd417d0d3cb11ff10bdaa2028152f726844ebeee15019d6 -0xee1ba9c2b562895afd239038be3df26ab466a82a159707af79d9bae3933bac55 -0x98438ff9f9a569ee0e4b41796d08bbac6c7c400ef0d7bec895bea4059748292f -0xbaf97a6dc8437b6964df1d913608fd5c6eeccbb6d67df880bd0f0c3032fbf8f0 -0xe6cfe68803f855379670bcef14a47139938aec19d0d7c16159ad719416de6add -0x9cdc86a7df0ea3bcf8d264027dc398dc16ab046bbed3ef5947444cdf1c090de9 -0x86cedee7288c70081f5f49a5624b65bcddbf2a92b732d9732f537e345e9d8133 -0xa616c86ed751156292b70abf89284f2f0558aca0c95d0a66f6be7fc40b7009fc -0xbc2b10aed142013722dd8f9ec61c842e3eb3079115e027547df35716f5ff05e0 -0xea2f28149839a3f4c0f9893f1e9dddd1109937277997dc4af1c206b059480b8a -0xcb6aa50bb13a72b4b6a6a80aa0bc7f9bf2b75238133a1bafc31e88b369928fa3 -0xd0d2fbd97320b9bbbc9f04eadebef40a4014b51d9cbe7cdabc2d3d4f5add9a4a -0xca9f8a058b19e01307cd9cb24da446f48b33205751b5d7568f6ce3cdd93c097c -0x7b4fd6fb4b53a8b7230ccde8fc4ff5cc735f8d45ba080131a6b26f67f6e8a886 -0x4046a30202af6adc5c663904b1ca0905c66be49cbf82c1bc7a2e8634845bda80 -0xd4c9b9947784728ee8feb0d08d949efd634412a4bf38c7332962134e140bfb62 -0x342c67a5e38768b7d38efbff042deb2784bf17bd4cfa931bfe92d8a5838b4a0f -0x4af98ff8f5bfcc1454c8618fbf005debfff437912345676bc4bcb9cf9a7e84d6 -0xa6328122335a9523e5cedb0263abad3b2b0175d3d99fd25e67131174310be354 -0x416182616cfc112aa283a189b9f7f7092a52dba9dae1e523b8d0e37aa78491a6 -0xbc31905d46473aeff120c623c8130c61e9fe6e933bd88b04e182b94097abee64 -0xbb2e2e03574e5cc031c09dcc2257364e5f0d2ab1f91f97e4cd81c0e3e869ef6e -0x4377d059ecfefea387418db4426f095aae48cb0b59e75f1d9c97124461f61757 -0x9ca96b23b2fd736b9c41ce1ae95438fd4adbf6aaa2f0a74a73110593975ce377 -0x21b9e6c9a847bf9ddd5d350d5798b757ba7c08f1ce7c700c04c2c96b17781409 -0xc19f1806f655847889055e37339673f9c64f32e87d7e59b9165df9f107c53612 -0x525f82dbe95a41a144121d6da445bfb396b30ee4973419e431bfa119e109161c -0x765b828ec4077b4afac26e9abc9dbe71061e0b5d213b2df5956fceb94ae63af9 -0x6433bf12bdfcb3aefcac1f177878cff9c41bfa53a179b424f7bc5a81fd366565 -0xb497f9b5497c954cbf833a7afe74a0dc37802dad01eba6054dc30f5625e42dad -0x927d1ee5b156a8059935a2cbd0d02ea8581c53e7ad92569e3af3b5d3cb61f1b5 -0xe4013d803b5987bef21f7a2a5985e20f0074ab6887adea980a326e828b623634 -0xebbfd3a63e22fc9a8ad68f29da631e6fd6d57a8f61ec6827ec4d6490863ab110 -0x5c9b23deaa8ab091b00d9d348871d289678822493e07d6aad4cfb94a89b4c2d2 -0x43683217225ae5cfc613da375fdfe747e5e12d0f4b6818706b024956f89bf89f -0x7c0fc86b50d9a43ec24b5a0732f683453e94b44b6c4e1aeb26481d5026e2dbc0 -0x2d3b87683d6d2ec1136817549ab7f317859271d93026c770718968101b316dc3 -0xee844a0e389a6a42f15beee2c0d6639882fc3a9c71780b0acab45c6a4159302d -0x22e072355b7594a89184b311846fcd2007c18af22d7ca498133d60df16727cb9 -0xd280311a2774a8cfc4111e41a417af9a5e7bc21a8bbbc72507fe9c64458177b2 -0xc21b08555a34d613fba88854356f0da5b35f262d9b457be007d7fb039a030a23 -0x5270011f346eb55de484ec363738ca24ed988d31a6e8f4f48ca3dbf6f2734c5c -0xbd6a10bbee7dca97b138e2f1c8bd53ed2a0eb03923bd603dec606399578c7054 -0x98a792391cf80b8f003c16173f8ea09d86ab151596b234e1387a483cf10bab39 -0xf6e34c4d558863e9edf9cc06af89803ba3179f6ba6b070aab77d8cf30ae78e9d -0xe78e272671855a56cb3123bfb2246b416b1d84a55f95db58ddbcb24f14a03636 -0x320dc4013ee0a17009345a373bfa22597074bd068166d9df87503630fcc6ad10 -0xb94fc90a02993d0675fb82ef4a066e6047a33b4a344fe650e7cab89bf0452982 -0x8c5ed42e7b2f8e806f0ae44efb09ec78d41500a1b454830d8b04d6bb3b9df632 -0x9644cc76b4f5203853b23e8529774edaca7c67512084a21b0860252fbd620c2d -0xa8b73ad5baa2c56ff58c040c776cc1779d2da6709d2a6acf800fcd70034fc2fe -0x97eca88ca6bc0e3731d949df6c9db05f0a7b7c1753c01fd3708ce66dde8271d0 -0xb34691fa900bcc183b18d7cb2992f99971f21f19de755a122b1c71da6fce307a -0x044484721b712c70b9d502f450845394ba49c844c7ab923c1940ad12d77db456 -0x5e0ea4746019afef6e388a20285f881a407426e43eda645805c2baa08cf2a463 -0xc2a82d0c3c8d76ad6a2a0970fa2e2b57b4c83cef091d807e4446f460658822f0 -0x1042c7fc07dafe6f2ab4bfe36d8426c637bbf0761df4727e76fe75eefe90d31c -0xb4ffbf08837488053f46c709ea9394ecfbd8fc5a83037744878be4288f2d3d8f -0xd2c46746d6ce8488cfa66651f02e1df70219efd8d255b49e390f38fa36c8308f -0x6bf171c50a1666838b9f80f695732d472484af69ad324703f81a02cd6adb69fd -0xd770592d2571d8442625d758ca2eadfe46abdc13a03d35d2c9e0530e34fd7803 -0x3d4a2eef9644373130ff4501dca522d3e7fb670ade4cd42e6d591b8182042a83 -0x9ca1b7fe0ac9c10cbf43d36f7d051705daa3b753d4cff4715b44a895dc6f355b -0x010be29863c97aba545a8d99b8aaf01fcd1e010cdab64c4bc9251f22e7b6c67c -0x6939505e776c863404c2334ce8b6f78bf3956a7cdaf6ab6724e7b161d3453277 -0x3b3d40ad22d3072bb4056737edeecdfa8dc1b4cb8d0c8b928eefe2785b3f975c -0x17c08bedf9c3876695dfb6d906e79f0b0dafaebbdf4ffb63adb4fd29f621d919 -0x3d6f00ac8ab312ab534eb0e29a98788a96548568af8d9f2c3267d48ba2da2abe -0x38b343c8edc06edef5fd5f60336ddf4d7b3719dfa8dfa3b22a0b3ebc62d0e340 -0xb43598c5b549a6f9acda2844bc863c27addf2f3628c06939e7f7eb1c32e1c880 -0x1fa941f1ca054b6e15c6524a36cc41670c3b14b131a842af4b3fb1fda8c51949 -0x32d42514a347927930fbfc9b19bb83e0f9f0b37bda7393ef7656c53455f6682f -0x7ef0305bde574a4d10f1c8f0d8a0068944be741f100837a67c905edc8898f868 -0x125be67b5b5d5576fb4299a538f2189692ccec4b6b0b548374e904741d8a1fdc -0xc43e159f132a215623f0ab7d17c535371964a14558ecb874929fdce50151109f -0x6389d747b4ac49881c2bb6b4ddf25fd56794efd0391130297f4ff64a39ef9e90 -0x4b02ac5825b05d1b043fadf9273cb8af718078337c54e76e8a0bed059a51c1e6 -0xc76b651fd8d582776b6d09f4a431cb287923b82f14a6e0f7f2b71d876fc9ad37 -0xda2e288fc92b0bb05a642ab73d3e3ca151d24ef8f0bb170dc6ad63c382b144ad -0xf019c3f806fe882189a0948bf560d4fa22a066a1753f3e8ad2ebb3408800cd09 -0x7e27554da558508f449f457f5049d7b73b664c9da5415caf1131c6dacb76f810 -0x8ff7d293d48f2af1db8e48f488324f4ce4fab09693321758a2bd6e8692f1acca -0x8e2bd40cde37eb7131f5b636e4526f64def6a68c0d6a8d703330973ddbd1906f -0xe0f7993baa1772b4da6a38a1b3b0cf8f1b23907d04b5bbe3fb18de17e7bb60cc -0xf97337be552f76af58659efe2c3566d9040f288cdd9c35035aa75a3fcb1d48e7 -0x2e88b2780e8c545620118ade3cefc156333bd7eb8701706811263049902fdf93 -0x3a01d2ef63eaee5b167490d03463261b2fe1a9a90ee63ed934698f8ae5254e84 -0x94f27b883a2b56b4ef07fc544be57a6ee45eb99cbe5a799d80ddeca0dab3c076 -0x69074049ebdd34a9af7cbbacf2a2e6dbc00d4cba6c18442c578fc7b30edeb986 -0xf207a0cf31c82141f96e40b1b6ab3053f4c883010fa3618aea5bb9f12733a2c8 -0x253a479411cebc825b9fec160fd9f47f3aa64711bbfdb1a4b9076c082282f783 -0xcbacdc7b6fb0ba4ce116040ae319cc2ef779140c09cf84feb6f5727c270128bb -0x35a1a53e0469a3239a998fc0558e060862e1e59aa5f2ec39b8f26955ef15f8b4 -0x7a039baf228ab48cb3228b0b462b56bc47673091d34585e93841db8b6670b41d -0xc19308def91733863f1802f05965da535b49e9afef383fe74d49801546ed433d -0x9dd6cba66a78e892075b21e2e1faa8b26dbec387d926da2d5c1188f023ea49ae -0xa83da9eae2d00288539f18b9d8d1b144cf0fca365434d4cf21b5755f2c88ec51 -0xa56e69fb95a4522aaa5fc4d9121b840fc3fb1f5f75ddf22f7acc2397ec2ce5bd -0x31dff8d7db59aede45e45f6c6b06e23ad01f21e9cf85c495dcce896ba1021912 -0x3ecd5f3216995144ebcd0aff1a83ee395bddc29ef3b1dfd60810afbab622da8c -0xb58c9833d3dd15e7bdbfd04ba8de0760336078dd9afeadafc273d2c964de8efd -0xbb4ba500b9da0806a6a02752d3c2b4cfe1542ba90a2ba1d407f95619c4129f8e -0x61d65952b62ac468ac9ba67040204631ba516c7fb0b120675ab248a75d2a469a -0xa468a1ce96f7de9a859458ac9df097e8950f6b6920903346c435227d0923d1e5 -0x64fbf9ca80517d986e1c74e06456e8befa904c318a6c948c62184942ad3209d3 -0x2b3f4f838235eeaab3c8130be0466cc2f644dc4fd87d7d60a98d5ce0868309e9 -0x6bb826ecb94d4e52b1dfff129bd777a4a5fa823d5474bbc04fe49ce970c42867 -0xf1e893bf425d5401ea00146ca10fae37e0864b0a999c4d6b8ce832f4f6b70d2e -0x56c19beab1dc7dea851324e482f29be13490bc07277bb006b2a8fb828b54b1ab -0x8c4e4d8ede6755aaf0be7806cd15afe38b9dc39eca4e535772943c7d23725eaf -0x5cc9c8aa55d9da2eefdb6fb5a97fab4fe05333e614567e7067a23cc594a9501c -0xe5a7ef24901c22633bff9c8edb117dc1a319d43075a0ff4847960d67c25f75f5 -0x0b614bb83cedc30181bb2c7d8a4fd409764c39d011f052eb56b637534535f576 -0x1b274a4ea9e9f4093b2a0d2ccf71f6348086e2589f3ed1cf3912c32e9b47e205 -0x5765f846527263d8c20b5a49d8c17148b22ba47f4514f56c823be17857b61288 -0x4160762c822825020d2176aef4d37c8519c47d292402f3e11b2c362dabea7ff0 -0x81b7d11aa401a3141e831e456164b9ffe6fcaadf83987c734f2855031219a2f1 -0xda6fc3533dd09522d15ee1d165f47b2c067021dfccc13f3ed470b587890b0d9c -0x49dbff87c7bde1e0d7fd85e1bcdc5621802bca6805a64fcf3a629ed6b2f095bd -0x1a01ce73245a36f1392f716d2bc3481bf5837669e3d36bddc208077da63b855d -0x0786e9ab82c87de5cbd686a9965fdd7fb8fee07407656ddd68af6ff8bb1dfbbe -0xec08bfe61e2dcd06b042fec0dbb6310e2aec278d0f109f06b6f1e304b6e7b63d -0x6358217edcb109122ec9e40a2d4fe0189007916815026f452e2118e35b0aee55 -0x41cbed0270d483e0e57addb45816b66ea0b05d00c1a3b6df517e1cc3b1bf61af -0x942b3415c6aecbbff9920b2734ce1a9f1b67da6e3e98017044b0706daed6a83f -0xef00401c0f59ce0247c69da330abfb6164d05ef2823942a8f27308a41c7e7976 -0x457a3ba9d1db7f18cd80c8937d457d358a6a91f26784146d843af41ec057fad1 -0x580fc96d2ea6a69b5e68249477286ef36d2e8d98b2ef02277ea135e7c5f5aeb5 -0x1803c10ffc433764b0c619dac7cefa662859504087944d76be9ff98387491c98 -0xcfc7ad0af7728d4f5abe1f6f62a222e5e96de6cd427cb78b81875ba0f973d824 -0x24025cc8a9d2dcdcbb0b06ea3b8154a8ac570789b0956a48217eb27c6e2401d8 -0x71e2f57ab0e114986f74049162694e11ba2c50a980afc24aed830d4af9500c2a -0x2352f784fa4596af289fe2a6e737161078345dd16a766884e2d30ab58b74bdd0 -0x73d33069f6723677e1d4f55538d1d38a61e214561f2fc819b29fc7f11e81ec04 -0x5b45345db543f4470a9643c3838b836f88e859e0ab97f4ec0212203102a40c42 -0x043f23a427e42b8d12c2a5196480e8cfff3165033574fc10cebb5e0d692b0232 -0x9038ac7162f78fcee12c82db6258491b210a1a864af3ed3d54ffcaa58469f980 -0xdba8565433074cf279ad832f98e4e1d701dc0cff563f3aac6939a12d9f54acfc -0x9d4e0658546888615cb40fc9537078d70fe68cd5bf88986fb286968848fd96a1 -0xf3d2a1a75e0232101c9723e88741c606d2c050028ca9398f748a7718f10bf495 -0x4f6b28b3f9dda5af6c7e3a0b5e85ea920102e1b7602bbee855fa4f28d3dccf6e -0xde2b8c8c62e20ad8660149657e306bab7ba082fae88154c3567cdeb7034867a9 -0xd3da2a7bc761b61f94b56ded215f5f237fbe76861d02195a145717fd8f613733 -0x24881e603b73143e2524d6f539520478859b49123dd98f4a465d79131346af15 -0x087fafc3a89ebc65acbceb82f46383a9b908e6bb67440091d1551de2f05bdd22 -0x781b06bd921e4024681dd75b969b8c7a9f3fc9bbeaeeb12d8e264fd13799c7f0 -0xbebe957f9acc45a0e9f7f4b268efa546d1726d1c0fd6fabeff0a9d285ebbf476 -0x10ebf8a99061e590daa48edae3083c962565b989093c156bb20a3f8f8f48e42f -0x928c1c675455b7ac469625b199fac5805bf079ed3bcaa9ba3702143f23e8921f -0x6d0d9e6f6705b99c0d20b8161fd96e89abe466e9aaf7b5e8242623026d0751c4 -0x7d6e47458daae2bcdf6e45e9204bb0dd398e1c16020a366b4a065b3e32716923 -0x0c04d724d6af349c0c5dc485d19217d7a27d6107b4073d4213bf226f83ce24e4 -0x33f432ff7691d8cb3fe8f1db577933d5f86f4574d27921109268e59242ebe219 -0x767b9c98c605fd53190740140a7c683e460a69adbbc0f22ccb8a54fa37ef8a45 -0xf293c3a77a405f1433ac2067d0c2eeb15c864cbf4d128f1200465a6176047c16 -0xc4170c038c656eeaaedb2583eb861ce1e5674f87d8e725fa18bd2a6e40f3b222 -0x0c783faae87760d6f73839101f205832f6ba69521b9bf082fadc360718e08c47 -0x2f6ba8809984c331673ca69b054666b3bbd3f4be47352d19354cbefaf739ec36 -0x899342f5691f38809de4a06254d4d89f61ed541a73abe3aa5a51fc6dc47d9bf6 -0x6ef1b02e2914eeff444c29492a3949645e8bc4d78c8043727fa2b536350e0d23 -0x369efe4a946a7fc4b22cdf5c6730b108aa0be18f3566876063b282a4e173d4b7 -0xa47bb528ee16fce27e65e11f36605be69562028a6285b8101b137be2b8ee377f -0x940a2490b031cf6f0cdfc07448183027c3a3787cdaf3c80c692c7ef19a507375 -0x35d73f6d6abe8d1b6cfcd232346e923e389e0760b5ca3862a43c87bbdafd8921 -0x90620ec86eb13fd577bd1bcbe23a61c6f9abac6d698568218e38f03f93ccc900 -0x8229cd9a4a1583ea3fdb37dbc9b0c82fa9db62d99593ac54955c51d031c638e3 -0x2145c498be0196864f6644a7a08d92fb25d4b1299175ea4a10875a53a37f00bb -0x0d657b41b8914e4173114b827d79d7c30810628d9807f462cd6466b90e9c22e7 -0xfe394ee42c66f4b5bbc7c3997ea725a03a4a13a59db1c12cbb11216bd479c55e -0x0a3c4c937ed1523255cec6e01023dc5245d212ed67212d698abd46992b8b3e23 -0xbe56b8cbd147098827e014f14052654789c6cc47b1db8655401aaef1bb01af67 -0x659db4d7badb3a876117f57a469e0e65457a92b5c66eb88e5c92ecc65617dab7 -0xd0d1bbb81d5f2a492a7f8136bc91e3f07b3907021108f5d8e8d1363cd6440335 -0x8b9f0bb3a22673d684c4d204642df52d4af4566b6ac3fd44f6e3b354d5f1e87f -0xf7976cf5685f417636adf722ef0348a24a6ca0cbc284c5f6d56a11e0b3898c44 -0xc22488264788d5ef35a80954e81f20156a24b561b9d6d8cf02ef5d7f6b9ff16a -0x0e11745dfef6ef747ad84aea5ff8bb31e04c6b686937ee8de92fb398719d4c9d -0x0a6dcc0ee26d92cc287b3ad8e1bae8f13006b55fc6643b08f39c5817243129b3 -0x6af5f7b3a2b86f97391edc41e227ce39bab346c4439002b00eae542a3a3ae6df -0x60adb282dc6a08c0e98409d40b66ce95c38db361836bfd0cf903369d44ca203f -0xc02f3e5b4d3439bed6b0a92eb1368f44ef4ccade2d6c03dabb9e9cdd625ddcca -0x4e470b78e622c99c866d2f3b8f6d0741ed755a3e5b371606e38021f237605d4e -0x6ed13d94b198e5b570e1c0326e8be83c2c36ab4d21bddc91b9a0bea2b8acf315 -0x167fd094f36babf8f2f8e447c43b0e66bac3340d6518fb324c87e6e05623a9c9 -0x87234e6b2dcc65091ac34e7618467487d1291935dbf73f0cb398535d8d29eec9 -0xe6a29a1e4180b6a33468d35090d05b64dcee16bc0c2494653f8b48e7542d1ec8 -0x9d9d6996e2506cb3584ceb13071661eba59e2b2bb61d67c4a5f752b3b5bbefd6 -0xa6b1201a537b14d86b12c77e2d5ad2ed854351c6fd1805befe26ca5b5253953a -0x4ae52d27ba2cbf15dc564ed08737c6082c03e43b1fafa466f538b3c72c155a41 -0xa471b87c02325202102c613f7c0e16d6379f5d6b90043859d15302be8012839b -0x51c66a385578e20c3393861bb134ac72cdf69eb7d97075614283eb467b462b9e -0x3b9500fa5f05238c7ede3bcd008ff01955332afe1378eba88012ce7cb5fd8b44 -0x689fa8fabd21ef82e58be834f5450ce4d841935d954c25461c33c6222afd0d63 -0xb8bb893649d97226bd0069e2fd70c8d661e7fe2ddb9ed281639a75a01e027b5b -0x4bde187c21cc476acf480d5ca834333488caf84dfcaca673823f8673bd5d54a3 -0x83d23394f03f274e9718cb857fd5e4c322c1ef445998b47ab87f494397c2a8ca -0xfe78613359290561c7f33ae84c7b8b8f3893a875457fa61aff45a99c56a3f7df -0x413277528201026cdc748664aeb5724ffd5b381f7880f63c655f0001618841d9 -0x3d851ec8524133f93417e9ef73b00b0d0f43611933278aca60d689823a7f3c4b -0x727b4192036573a8dbc3b2607355c07ffa3b0f8fed83032bd1b68ce0e86a0519 -0x8ee22d60a2d0f4d62bc7c24bac5444fc609d163dac6f3b09550690fcc1c4e232 -0x026b7bf1e7b20887ca8c89f7fd8e6f9b08dc18464ec7f346aea849a647cfc38e -0x606294eb7d73263463771a390d102c6c5d0ca445dac19c9c5b32196e9071c5dc -0x0b76c8dc71563d71ce70936d9498cd715d83bdaf01f701626b427d04a417e7f1 -0xdc7e85f4e52ca90858005942286dcdb4bac42bcccebfbacf168493a2c00a8786 -0x6bc85bdb187d2e4889d3d5a359d1e8fa3283610af1706df128c13da0f6a05e37 -0x4b77fc19253055ae2965866ae3e51bdb5f53d8820a0ad8d216a14581e2cbee5e -0x939a4383ea42cf935dabb2d07ad8c49a9455b85a798072a7d82f7a160cdb0eb3 -0x3ee7a021699256e4fa3717e17d8a8b3f4566bfe748f7c9837736d50d7bdc54a5 -0xd2802a405ee88439578a7fe874eb758b4bb58c613fd2e02194e836127da5edaf -0x4a811ed7b2d8c42059cfea3ac0a71368590254997b19731f0df0290bed09f915 -0xf47bb42d988a86e9189e4157e4df4c8da4bb8eb86f36edf528add65707c8a59a -0xa141bd6f738b79e5ae609cc87a55100cf43952fbcc4e0e494866e5dd8c81dfc7 -0x7abf54e8ef1be7ea6907fd4a84aa8c11bc6799acdf39a212ff8f5fc2452b11f6 -0xbf1793a588a5be79ddbfd54b7d4b2896afa5c434572a28b44b31649f5bd0004f -0x5e006c3792427e1f4dcf8449bd003f532b70a2e39005822a80a62053f348c0e4 -0x71e29ab13e203762d8113a2bdcc2a0baa37ddb7e1301d83834650250a47acd04 -0xf44bf5159b857f13952cf9522a10ce6880c479ec2ee541e0a284ef344eb41f63 -0x8ba3825c276cd0faf226953b7d8a1def2a7080521752f92006bda36e32475bcf -0xf9abe16c9d3ca73120628ba15ad0028ff78ca54d3ab417fdbf8a49f356673276 -0x081701ea227879e6c4868011983b8ba6bd57f4c7fd066d8c9733467e907e78ee -0x4e5fd3700c234e335e430641c8c328d9dc485edbccf4d78452a649a420888f6e -0x3179c1950baba3d42022bc14f0c807d30ce64740f4b49e4c28fd34330eb1da23 -0x673df4d5d2910ff5ed5ecddb80466b4b1a4c30d25141c11a36042b49e0ab760c -0xd00760b3b2845f270759c2a7915e24d74210fdc3c1d3e8dca2c894961aaf4022 -0x25358f43057be6e4663caa9ec3825e7d7768d3950c91a145501198730ae14992 -0x462b44300a9710175b0226c2976bddcb5843239087447a7b84b8189ba3642d04 -0xb5eebcdcd2fee3c26ac327623ff468ea24ed68e30d5d66daad1dc0ee5a3c4fed -0x93a33bbb25ff0483571a80351f10b89ee58b20e88251756ae11fd1f8afa12b14 -0x2951b20b3342232fb2e5039ebf91db5bd2bd6f717ff61e544be2c861cea024cd -0x3c382bd739dc7a90860cc6dee6f28128c0d4e995b5d0a16456f9964a2f42b04d -0xe54751bfba755097f379d173c7cc519968d5c01f57d164bfbf55da60c1b6741f -0x9620bdfd0255acc03cc111e43bee9559393fdb2db6cc00bb5bc5e6bacd4a9afa -0x344ff2fb2f15f57c4bc2c127b8e1614f3823879523971e2a812b8c33b89a5729 -0x8f9e5e5c59c9c88f6fa476eaaf934b3a2312612e8f9e6dde7e5650cd1566fd3d -0x1db4efcac5608802049195b684909dafd2e5a0961d1127ac4e1a8e959a623b23 -0xf1489bf7a08c5379c4e473ef2cf48431951b960617232dbc0a143c58389eb802 -0x2f48bda5a16b0274c77aa551ede3e9bbdd8e4426f1bc2b9420d2ecaff42b6bab -0x2ae9c92445ce5ad6f3c4e6975249acec51f9454aee532844f0d77fafa12d400f -0xd6d6ef5c06704281b00976b36f7252186cf114bd0050913aefecb6a969c254a2 -0x416350b2bbf9073f9da428908a84fd665a4ce30d0355b4f6ffc0dc7b5a093ab0 -0x84aa246ce183a89b3d6769170c1f6a1bbeb707a0fdd7e9fe3da0b898261304c5 -0x5a13782f8c160866cd8c8b0b1e1fb2fb5ec3a6870a810e330a0c88c1b1826183 -0x388fcdf328476fecb819848df260b8a50fa2e26af198e5a92387ad6d9af472d0 -0x7e4c16f5fd95cd5065cd0e9f5476d3abd5e09d7e9190d3f46ef10db9b2e34622 -0x8feac9dd9d9c9964410e26b6968d99a9db431e71062828a40cce3ab5c2737b5e -0x6a82a0a56608c57edd7f4ce0dcd75aa86f88c29f108ddf63e139a898e1df82c2 -0x02193b8b7294d4dcd9753160bfd146cea64ae24b969d3d438fda11d039a0d2f8 -0xf1d7163b941196d3d6487c1a6b8b568c022d4127bf4c094537cfc3c3c2b66b05 -0x0bcd5138be2b337e4d6b713bc7586de3df80e0fc4a6eadddda5fd566164d46a8 -0x728d8c95d38cea52b4f0ec0a055aa599dc8fea853e8dab9ad75413cb59573f35 -0xe0e3e0e6f0d9076f63f9c75262c756ff7081ef5f82112c6b7f5a1539a05852c2 -0xfa0d4a9288a614f4317561628d7ab3aca1409982994944663ac5a33dfb58f7d8 -0x8441351e8558350be5c13f2c33f7fae3658f9150b7dc542326f6472392bacfd9 -0x5a35f98e2f739f4b87c905561742de1cbf722bd76bcae9fbed0c1a1cee3d10f6 -0x5a6f6644ab5ee04dbddb6bb094375326e578851152313df188647f7ff04a0e99 -0xca9c272984a9dba1cfdf0900b751677a4968099218ccbca976ddd30b1482e055 -0x13807b6aa1c24607851b5e09a35f384b24dc53aa09651481dc2f37ec21e09850 -0xab02e6ba32a244c741c03e6681e8652eec2a212db3390b0e779c01d1f4c0a2f7 -0x7ac6ae8f27a6fbe9e182c22267c418468e04a54c5f4592c7af5613241ee00ca0 -0x0ff804eb569255f07ed4836a0e26a4b7066e47f62143920a587bfe8358ed2e2b -0x89f53601940831aa6b34ba8a4ebda70ae50add96f131cdfe67b8e933ce154666 -0x9ec75d2dec26a4c935356351f5c59dd14f08525c1c03fb153a8ee0d39cb8897e -0xd23606858f6df9e78e198b454f54a4168de305ce33520bb5868fd6b383fbccce -0x2b8e8f211291448186b2d63d49e2aa4cd90c81f32bae8b5b4bd2a3aa1b80e3bc -0x97fd0c151fd0ba1c420d7548b3c73e03b0b2b06bec36fd420525fcee824fcb97 -0x1ec96049c98d8cd1d30e96b2b2526e465aadb95916f97415191af6f12dd047f6 -0x28cdc5d7d47d49268adde0ed6acf1ea9e639609e6ee35794583e6e763da84963 -0x6bc10ad2816fb08f47b306524bfc4565461158a22e329b2705cfa3722285c1ec -0x0d129a78913413893725ef41b03caa7d162433b26e29eed41e3bac37b541a40d -0x7fff83db9cff0e202c310164a880b7a7a5c7c5b2d69f885abe605657271e54d0 -0xa9864b7f2d29df5a56004dc4c1a8b810905f404003b63ec2fee7ab2556b0ca94 -0xb6a05883baeac49633c84cc2b43cad4662bd4d552a315a267a38294d0e004ee0 -0x18c67c3d0a69f33154196a31de586b910ef465247c3c5d6c9c94edcfdba33bad -0x704faf091047c428fe67d02d4626061e11e9890610a8e261d5b8908127655fca -0xcfc7dd11ded94706d70a9cd901ee6108f1529653586d3d6365be67ded928d9fd -0x8c67addae4747c171eac9039768d9c413e1f4816d37c440e33f7b1a8958dfae9 -0x0d1024fa1d1c6005a45024ebb8b606d71056ae6e3c658f7e03c4ac114948950a -0x6cc2ad4380c2f7e4a2b7f280be361c24974271bc633c633928c430900d9a9d2a -0x4115828bb98c4eb5bd4b883503e35d41bcb773dc350f9ca89b8dca91dfe554df -0x9013784a4abf2727860fc4e6aaca660001a808dd0a1c1675b13a9b7bc8ebc31a -0x442324639cf611deb2e1a7204cb35cf17760e05762aab6598c6239b3401eda67 -0x200e83f2c21a89e3d18cd75565a9bc7f0c0e46a66780f746e17b746c59d320d7 -0x2edad42afe78b992b2903be815327b992defe0422883580a73f34e727c9678f6 -0xe97d05fb7e9845964791647cd04a25fa7cf876d8a93b3f1b83164d08d8c460e3 -0x24b2a43cec326724eb4aa267b02cd657b99c3a6027ec2dc012a917c16f31a4f7 -0x80199dcb519a9f6bb76692ac78c7721b4f5ea4112ab86e42b06043e36cc08506 -0x41e39270c7850429d37ffbe3cc7b693e071201002000129de5204171fdd2678d -0x6235b80e910c3325d6cc8e177cc24d8e0ecfbe7d5d6297af6f8d3c7549af139f -0x7a9718a2d109e324e37b3a74a36dddf34781d9e21d81adc0a4d6068e9fd7fd94 -0x395c23aae591f01cb32ebfe9abc010475ae034c645b2b580b02964636325140a -0x5c340e9af9ab210cfef82e6c1670c259b199cbd62c6229fa6c9138ac2a190114 -0x098e8d85ddf3c59daa7797cff1d4878b1477e94da689ee05b33721a3ccdfe4c0 -0xaa0b8c907b05cfe79589fe53b9a9a517f723f0b03a10b15d5e0a96bef1480984 -0x789768fff6d3feef097cdf9c23d046565697c65ac9e94d86164cdfc71d872be4 -0x08ff4b01223c3cc130491452f1dc68f10441b9c778690004c9945a155ba798b2 -0xd077a55b84d98683a6d81d7fd66eb8d6e2374134cf11c4360b7053b2bcbdb521 -0x266ec29c2742e10fae34bc2653ad1df1aeb492cb6801a70f037982feae9ea28e -0xd7fa76e8861d46bcd264e533eed2e1e66962c31c3ad794dcf611b172dc2879a7 -0x957dd045517af6d8c64542119afd6299bf6a1f33879839f9d11ee1ca9161b437 -0x396db4cdbc3701bbfbd553c5cc3d7d7261c98a29237e26d988a44cf97c3de1b7 -0x38fbe78571f5e2b14ec74d43d605387b0b6fca1b99d0e751b48852a18727d824 -0x293e547399ff8963919b4853d3741574406e55d6bb8a8e9990fbee8f66f5e808 -0x82a610a56b97ab2324cb63f45f007940de70487afadb6627530a470e669c8bb1 -0x27d1b10d1df3158ba184145460bd35721c02175471f6bef5d96764d5b2c6cc25 -0x323a4ae6fcbe145bf995273af82126d71a4a584f17cdcac4e9d1f5f07c014978 -0x18082101360446f58ab17d5e2f2ec392202458a6d3bb96e3b02510010b2aa2e1 -0x83e6de96b452c894b960f652183d8a12890c8ea9d648eb1bbe8339645805dec8 -0x12616e2239387f5176d94d97cdccc86a7af74f3e5251f13d9781785fc676c785 -0xf41ff7fc3db8309e2de32c07c828ef59e3db12545aa0c8f586780660d46e3b5a -0x0a09039382eb36a75bb2ba458733eacaf543bc452c780fe40d31eaa5d429d078 -0x2c06f143904d691d82270a94de1ba462119d11802036299093ff9f8a64535f79 -0x6093af7125d0eb8184ebadbe2d9b9c6fc3dcf78868cfd1f4cc892855d57abc6d -0xe9e3a35856522c972587ab39aeb93c40ce98d94d21ed6155aa92d0c4c2d8a731 -0xa21c37bd4103c39eb83fafa8dc8f0d49a0d7382722581422e130401dd0f0c34d -0x0082e013e2c1d5f7f60fe94cff495027fd8aa24cbdff32dcff9814fde4732eb9 -0x0161dfa0884d65074c028340daa3afaf40ce30a5bd902ae9f18847e958fe4b4a -0x06578e37b8cb9ef59ece43d2e7b3cb3a3e4d9edcb81190d19dbb3c2d231d15d6 -0x05c0c11641423cfb9a77b2d714ebcc535c08c14ea873ccf111faef8cf79d7d4a -0x24225beb245dcca7ff2401680d2c183a6a7401d5372dcbc532c6cff78ebb760d -0x7a1d391483a9c79ceb5579e1e133c62d2a3f0ce517dc3632dcd39ae92ef18737 -0x79f77a273d1a09ea3af42452890baae86c7118aab9ebf1321664a3e6ca0555fa -0xd6bb5c013fd6ef5cd509ae117076db3a001e8ac99ca24dd9dcc02b596984c55b -0xd42f32ddbb82dfb12a0e081209d1a81c2c26da0214b7134e32ad934d606f722e -0x0a2498fe81ef35939b1ef990afb585c5635e3160724cd68c7836babbdb9a3e85 -0x8d8796b2a8b78065adeeaca55798f18fcf3ee9f606714868e3df77629bfe33e7 -0xb0e5897283618ee58cb31aad8805eac61006daac9834c234452ac8727b2eba36 -0x7cf6d42ec4e20d04e784dcb4fd4d779dc3bbb966b8b689ef6a707ebb504811b8 -0xd9bfafa911b3f64e89a674913d5f81376d9d420e0f41dc64e1bb69c06cd316e7 -0xdaba901a4e206ff2f61c224c2397de67961a4bb412e074aacbf04d1db6da197e -0x35d6dfa3478223fade46986428282d6f3f10a90fa12d0090c5f810d90ecfde46 -0x1d426cefbaf977f9d69abbcdea3bc3bcb768bc9b4bbe5aa6a51157ba148de2fc -0x12712bee9569cacc626f8c26b23cbe2613333af9cbd547f57a6a1a9bffce26b4 -0xf0f0b7747d82f062fe02536dcec534df2ecca9040ccadf8c20edfe76b0dbede5 -0x15e2a94d5378942974fdc5f4d8250ddb9490cd9a942d034541cb6330cfd57aae -0x9fb5cadc7161f63c9b8a3bba6bb4f8f0cfb884f5031837a1f83dd5bf04866c11 -0xb49884b202228ed2748185a4c0b1d88261724b667c34694e07fddb8078f5305e -0x9e3a216ec8be1d9a8004b98b836e00c4571876216d8da70b40a4af269686b31b -0x93c6e61313ef4e85db001b3dfa2c35c8933de4ad06ed4ae401f7297a7758cc07 -0xa995bf1db0752c81734463caf3adeb24969912fd67ec379a4c1312e8ae899ebc -0x31cf41cf41148a7318d4c6cccee067451823c8c0d715ffff61f08a72a1cad3fb -0x5e130ef5fcfdc0c7937b42f24abe19bd73725faaf73bba85ada1fab63093e793 -0x7161a864f88a72b35159d2dcf984981a3b0868bc2fe7ac897f5ccd7e352df73c -0x4880f276c349f47280336dfc230d75af372a4e9629f4b3a1e3c978ca5d0ffdf6 -0x43169817f8446cb20b2cde7dd696a8ecdf2be0ad205ec9274cc496abfa96fd65 -0xf66a69c99d35defeeb46c1b6484f212daf384f5582c04d47d65f5ef56cb01888 -0xcd2d803f5d7066a6107c59bd39a4b4e626f9d26c4d31a0a1bbed5469e6e170bf -0x4a8328f646f077a2d5c7b8930ef15efc75a882c3e37275f2b6bdce560ce71871 -0x57bbf9839d848ff8d13d0b77556aea1b8382f5c871a74bab968849cc56c82625 -0xcd8a07ebc6d5a52ead68b827569ecf6671b50f1080ac6315c1b55ab00370012b -0x162a5dc88110edf835e7d666dece04a99a8aa9838eef53c1cd2a189e72a59bb9 -0xd602a7509eddf0bcfa327f65d837fc5889a31d8b227e12df2ad20676bf89635d -0x6eae892adaa05894a5ec4d0a72d383759f313e0a0cc665297d35fcab7e5da66b -0xf54e29584957cdc370ac319082d696c628b4ef1993fb4e8f68ec063b8a14f241 -0x55917a62f6290a481317e6cf929ba1cfcc016bede962e93d1ebc8183cdae7db3 -0xe8e3c43ea73b4e81942e0988086c11974bd308bc638251226a94b4b7ce6f6e3a -0xbddd3e2d01dd1ce13c14c311f1441d8a3891838515e2d57bc70eb8fedc08c1b9 -0x44400cb1e928efedce6683604c862c23d6e302ebea95ffc46a154a39a388dbd2 -0xf0498b041cac5a39b070aef4f9907572242d5d95d030dfcf880cc670804be78f -0x1b0a72693db866ca838186237ad578e58e024c546b6111adc95dc94efe34ac47 -0x92852e717d662b7d7b3277aba802d9ab5cd9cbf8b8b67e9ef3d47abca6836cf8 -0xebd23806d3aae047a8daa9dd59922d760f12a1a0a535587574343a265ee7430b -0xdecc517ed0d5ec1fd4e026b2fec1802015943e384b8ebf8211104046ba6c88e2 -0xc6cee7ad4d72a25812f8ac1978d5ac433e7fa9d8bba2f2664e4a1bfecec3cb17 -0x2c72b51fd3c8266120b65ea12034ebae41498689dc59ca8df66f83893441175b -0x39f36685af42998055e4ee33fcaf9c1d5e962171f089bbddbb080991d6cac7d3 -0x7dac2d3484b7a3150cf5bd55bcce1c854d03207c03652b6cdfff915b09c56efc -0x0fbeb7bd21a6a37c80bdf12d165514f760a9216ed40a5e2c01d480e712023949 -0x50b7b1908a1cfb63cc8c720817bacd5b272ada8fdad869ec04bf3d03f3352051 -0x0a5806a9a08fd794060283e4c058c5f89e435c1d655dbee64d3631d070a59104 -0x90fef7149c064f204b633403307630c144cdbd16fe8809dffe386ca603c71439 -0x6c1f40a28386aceb47bd3b33d9cd642b4ad9084a0e08ed409fcb9a1ad68e92a3 -0xd5ea289c61569e356f978fa98aa3ee052b95d0c2471febc59746adf537f55f81 -0xbfa671acc35149101c280cdac4199fe6ca7b3c0623f92065f3743ff6eed9d15e -0xecfa64e874a68723a0ca6df133e636939e9d9d3f525707be5b9441cef66d824a -0x833ba36e676c6fa0d4ed865735a3ed266ab37dbd652ab059fca416d795acd7a6 -0x76e3160d9d5022300674d1bfae28aedb71001182f8ea4f6bd472c87300827c1d -0x809c917d1b5f4d4f0a8b1a125092accc4a1c3b232c710850af72c3bb02c7e25d -0xb2e430e808e6e5b3d515c1c192e96465da299690344c81ebe90f1b232968f420 -0x969bdedf3b52ca93dd267b789be05447c2f55921556a87298b9bb97038bcce6c -0xa2c4fb18e2bf9e3fec944d85899c0b41371c13eb93dbf0cfa68d5dee2ab8e890 -0x625dc6d5d85b860b26967f34d106cd57da2b427f5e7167038b54a70027df4b8c -0x72c248052b4bc7f888cb8789d44954cdd10f1efc8b0d98780e33c0795fb25d40 -0xcc6fd4459c0c18ac1f768a81e3467dbb82d5e364d2024f4b93257a612c7e77b7 -0x3108fdd05fecd97ef7f9185882b6a1dccc9a988525cb3d50e9fbd7d496886d78 -0xa0fade9bc09c674bfc33ab6b49404a1a21f83992388a7181b2bb3fc202b8c5a3 -0xa94fa1d9e540ea164180c312a474b39b75ba49ad1402844ab238e7e424d63424 -0x8449e275998a896fb4f29e49b3c3c87f2f7ea3494eee986128492693a5470a21 -0x29ba2a52edca8bc51298518d3aeb346d240fe452126dc838d991c1b8a03d07c4 -0x055165bd101dbfb28511bf15320b1b80a2d92974510c28ab1b6e3020f3c3a15b -0x3bb3305947afa37af2a9394ff7e2a2b048c71573a37624b56ceac059ca17e8bb -0x236e55680b039369169b00969556c5fb32d5e88a092fc5d1304699a672a032cf -0x82fb0575869b0ec89bf42df9c055f8a1e3b218109535c0bcb02a4f3faa7f69c0 -0x60c30cacedf8b42044438849ecc42cc76c8f39319bfb876bd0f933480499f8f1 -0xac63ea0bfde32ecdf4670ea4b9fc2506b91ec93c2131d66b432e66fc93bcd0ff -0x45a45e47a18d5ca4b2bbed53980a0a66e72ef30ec30d21cd7e188547d811a24e -0x854cfe7df448fc274ba2a9d3759580f952bb66e93a87eea1d8422c8dcf9b4e17 -0x115e45690ba1377b09bd3986e3e13b74c4a43913069bd547069490f9bac86747 -0x014f43ee7b4aeda0e545b91d5387758209298a8a5daf17f8c7ecd015451235a3 -0x0841aeeaedd990a28122ffacec497ed3eb58e9bfb8deafcd1e472057f614d65b -0x0dc6ccaade8f970314cdef06edac6736a9a704183b009fe5a28487dd21519bac -0xd104f1283e81cd507731e4090d3a12b660166e6430256f0f92157566fccf6eba -0x732e5da3ef22257e6d5ad33931f06eb695452fa03171e4067e717117630caced -0xc029c6c35b34f2eb540c4348ded850ac97e040ed2bca36fec85b28b20fb8208e -0x0c0697e63d9185499cc96b4016c73f40c0e488beaa2caa1f6e28d4c5d91ea81c -0xbe52bba5b593161369c2317db6f4bd306def5161e1f2cdd1eecd8b4909e73ac3 -0xbb6137725a0a5ae38d671581470bf80b7108d5182d4ce3c7c56e025c74a3d306 -0xa5d3ebb33597685c1730febe83b9ee72ca99f29ff893e25fe88109de1d2869e1 -0x82e8cf5852085e21cfcb1c02f6955242391290afa936ecef029c3ac07f435ee4 -0x3e3c630e378400883e8b0ac028c91576d8e65968b62007fce8d6034d6a2412fe -0x70427f053b4469e65d5e71f1eefa855d56c23216cb5ae96a10a44399bab8c165 -0x4bf89141ed583eeb558eada95db871e80bf6b8cb94805dc2921d2656d37f0d00 -0x5ae78cfeaa5cef178d00c0c31de7ca273f23ed6231587600774360ed6d938074 -0x79ea7dde91bbba75e7ff73d743ddc7aebda0d1499dcdfd113fbdca558b8b940a -0xd334f4a861394b44c040a570660433eb72ab0d07cc4a83e01aecb714b4f87ffb -0x653914d02d296201201b02b5a7f580e6754c18b5c66bdb0a340c149e1cf5f16f -0xd3752924ac9c5f50f6917984aa319543a0d4a1234a116be814f225dea88985b3 -0xa3d34bf3e6a1c3afa397d8b19a97805fbf2260f89810c7bb9660aee6a0a17956 -0xec87b49e1395d9b459b51df5a7612df31a68935bc4e5127f3cb8e772e5ef763c -0xf5685820cc21cc701c43e712669fc7a1ca1dc2a6731458d4b6104cfdd00e988b -0x6aa1f00346692bcf612a907a2f7693bc739968f246a2b4f3e599d33544ad012f -0x23cae4b359403c6648695c98b66aa70cd6be217eb62f096857f3e26e92764553 -0x3abb7e409c08a6e77e02e89a30a5f6b32e18252dc149161628f45dba45d2b816 -0xc93ba8d0c9571210e240d29b75027eac9435be7d8ba06cdafa12e0a6342f63f9 -0x0c83f1d0e4ca6776f5b3bb1931c53d7cc954f821686cb325ddb8dc525a56ad05 -0x473a469d5a1038778e187e2405c57d68a335a136aaac98b7753d91564263b8f8 -0x87b26feb1c2355a81fd2c69649821c3e6ea15395e1569e9dc63ab73456e77c9f -0xe913e40b393f12fa8ce5034740ee334bec0b63100ee96dc01afad02835c18337 -0x131f0d076bc96de1341deeb320c11ebbd89b9af2a7fd9b069cbcd03d2edf01be -0xae3e15c3600a0adc5581a46d7e7b73a070a7059cd05aa1fa4dcdf4212e3bcabd -0x2be396aa2a014bfd0922686822d7cd1156737405d6662cdeeedf469f0d264bda -0xa28d3cd433088eca1757bbc68991f1f7ebf16ed1fb9ec5ec03c2b3ac4b34403e -0xac12baebba405e734572f5ab46c2ebae6e0aceeec0305edcbcbe0f0256daf188 -0x6a4ec00b1466e670de3e1dfc59c3cbbf19bca19cf8ffc1a51faf222917c23180 -0x2b3e36a9215413d2c32e3ee4d5aedbecbf8ba48c5c7e42318913a84a8329b82d -0xcd7aaece865248f44f8908e5a6144e2c1aee61158ae74fa4af5dff5db025816d -0xa9fcc4cabb9ad03d3b5c96271c3cde1d3a87f1b58f0beb13f13304b74f7f20f9 -0x40dfb7a7ff98d78ebdfb5ed1b37e8ca9fdbe839471a389a0e08cf68bf4e9eabc -0x531903aa65ed5a52f0d4422c3ca9c8c365710610bab0058a2d8413a17935ee2e -0xb2f5fbaf6459bee3530fef9d95b22426d892057c4b16c07760a7a69b353c55f9 -0xa6c58f2f12c05fddaaf0078827c55faff09087b9164e5c29463485bc5bb920cd -0x5a13f5b5a6368d4ea3edd396eda36cfd1b75862385e4b3c301d1f593439fd1fa -0xe8671aa14cf3620e0ae0309fe2e08761af816153e30efc357440fbe9fefab69d -0x3782a05e871cae0f18b9961449ddf57645c9bde543791d6b68514ae7172d5e03 -0xe2615dc7c2b1b221d229f6f6e0524b3c4a3c327d2579cf31d2c4ffad85ee8ed6 -0x53ea1041925bcbf6ce3845a5e82d829a4c1f8c2f83220ac20278e490313eb219 -0xdad5a6e37ed43c43bd0c80238dfa409d5ac9c5a859ec7ab5a9ade73b4e489964 -0xac8323247dba264a2830a0a60e3868f09cf097a7b15628cc36e411f880202fc9 -0x22ee6bee5480069043613432424e0430dcf1e2c5e07a6ee5e9df92aaa80ce142 -0x61834431f23a68b79f32c60eb445287b3e9e69a5e67674ca6ed074616093d7b9 -0x61892e030ffc09c738a29c629cf588c77bb8936d1a42a7b0d56220cad716b919 -0x8d57e6cd09452aa1ba8b1b0892db9acb7347ca411408a9a16d58bbab349bd5a2 -0x23d56b100454fb0df5c2e01076d232fe8aede44a8544de234043431e4e8d27e7 -0x3ee862aeec1da9a55025f71988d143af2a1a0d41eb6da8d558f2ee68261484bf -0x48feb3bd460bda0d967092c12d0a0144a3dbda1adbcc92f9233b88aaee5060e9 -0x590bf33e1301d55f424579aa3fdf7b9db580c031318495627e408e283cc70d27 -0xf78380eb241761eadb5788576fce74f8fed2d978bef0031131eb89386bb253fc -0xfd68d14999c6c969e4811b5ada4c1634ef5b8b4254126df00e7a0c815a9b2524 -0xb6cc5c23a127d4967ca4a46cb10fe221f35a8e9464e582cf259e643c1113345b -0xae8f8a11a5c4a42d3316850c8b04c435843c073ef36b9c132aea4e27e4359365 -0x7130c29bb4a21f7d88e66b75fd4d90fdf93d8fca07f8363a7de9f710dbbdb53a -0xff828a106b4f6c43de45b5ddd1fdb6b94c13811e69b2b871f0adb07897dc7e0b -0x47f9a2c62e8e7959d23b6072d6b8b90cc742cabe6b19241070fee674cdb8d1c5 -0x5912c31017c0ed149247729323196daa5412995599172cdd9bf32dbf9239b757 -0x81359b820a4f4a77c3a56c3374c33478a32e832ee0fa5789db26a51655d0da4a -0x331d2e5b13725db0e5e05a0b7542082f5d0015533fd0281264e15ac4c658f8cf -0x2ea730880b5db4f7eae3bbe11d5be98f3dc7606b0d2e45905359ac133e830921 -0x26195ed0895491deefb299342cc93a5bc8cfdce705be0c83c2dd8f00b1fb1e17 -0x028ccca06693770d5febde06c24aecb7829683ea95803a38d6aaa0ca4163f931 -0x0c6558e95f84b64b6ef400c82e614e5c9baf8d67c6568464f835dc3be25663fc -0xc1b3ca7c07628830b76c52edf33807ae6ec6790299582794774175250a3b397f -0x0ce19b24b89e1fc015aadc64300b5b14fbf5f4cbb8fb2cf7e0f82f1928f858cb -0x8c6dcac9139f4e55201c6b1f71a4b419df8ab870ce0ae5f7cf14a7cebe718f48 -0x48065e834d2eac2985d53a3fa8c8586b57267d4ebffc820f1be46e64a5d9e30e -0x8f70982694927812a2658098baeb473860e5f405a5643f0df1aa78293f0628f8 -0x5f96a278ca08af53a9d964a181b05b8b4b8c89e191c5b0ae65d96430e8724a3e -0xff64b7a38ab483307c782843408d5f8a50f98bfc2c06c5c195548b154397b1bc -0xcca16e6f09164579f33fdc6dcec3b52cc8c188e409e6eb47c9d04217f4e3b9a5 -0xaf3e1af62ee9d917d82e48ccd4caef26d4ce0e32c88dc288563c714c68a9e1bf -0xa8ffc59a17a88c567b6a98d58a6cc93a1524c9c8e3ea6b5ac300a53b8b58d390 -0x11308b35e97312cc1f1cd68176364deb52cef21d58ac875b0f56bddad180d98f -0x1911c47c9a419a07a600c9fac0fe680e039d03e939ccbdb1f1ab07f53ec3b11a -0xe96c4811e6bb7d4af78220975adebc303e4edb6a6502d95d93763d574912f9d8 -0x5a09181ab92cbc7f7df21580ba0440cf00a30dc967f33275c92981d3f0fdfb3b -0xbea002c0f6cefb47ecd7f42530457e058f49747fbae223a33cdd4b41db486237 -0x7cd5e6a5c76bf40c2a5bccb92bba7db76b6287e7cc38b878e9246434733b69b4 -0xfdb2d0585d2109e72bdc681c66df3349beff09cd88505bf2a1d01640d7fd228c -0x3d34431401d158cc1dd5e8f7354e60a403c337a2277c175a4f2821a596c63e43 -0x273187ed167ba3c8761fa23f312917e620ff1f7e80d402b553793ab860e622a3 -0x370593b5444cf23464ebf02949951edb85f891cd3a1093cf5c7a5083a1ec502c -0x451068677141d9aab21036f624c55deaf5c7a0eaa99b2461e3d6740113344dc7 -0xd3cd73964962c7911166d72f2ae2d116b273fde6258c76253acb6a12b01278e9 -0x0f94be4ecbd5cf75c77110fd0b3c72163886b1461ec4f1b18ba06387f33a5485 -0x1af462d4713f827c07fbe4db00f02981cb6e04f147476b4f00c47477745517eb -0xf8e544a2433b7fe421ec2a4edc14d974e6e60f234561fd797992e0117cc701d6 -0xbafc9e408ffa20d495d824a054c16362f49f186bf2bcfd486d9bb671889aa6da -0xb2f25ae1bbcfda4eee8a2a90176ca9564f0c050998bbb4df9e59b6b01c2aa096 -0x44742c6ba278ffcebb95fb79c5270e77febf715c0d85f7100ef4addb67ffa355 -0x3b30cd3c2527ac34a1311114bb133117089c90ef9cc7127a4065763100b23b93 -0xc1f9dd250808e818dfeafad0bcd06605ed948fca309a1494969d797fb153e437 -0x7ff813f2a58a6fa2e6179da322d5e533b1e77a81291256a13a16cc2449a8bd12 -0x38c635f22a286b3a81d705c00207d02eb5ce6b3575adb6d767c7d3e9fe84baeb -0xca950a69b6750cc4dbccf9d7a48cf13446d375712750c05974c90d6b7b7abea2 -0x9a1338dbf84390493d76757fec00d3b427168eda06664ff802a95b1f0146aa9f -0xed58924c829b1bfead6247160b98ee3f85e3652e0c131cc35f48c585a649f115 -0x4589f782c54678a7d981fa8903e62dd9e251c9f1d539307048c2de48b1c55357 -0x390571e8c0ac74d7db24c5c087f655d23e0c4df753f9905a5938a436cf7bc59d -0xd20e0dc86dbd5ebc8e9d2947f0a4716fd532c0d638658d493642b30113732e70 -0x7a596b9c3838b6150731dedaf7a2b75fd19c45e28fc96ccae33598dcd9b7fc90 -0x4c8a9eeb9c6aba978dde1aaa91091501fa3027745153134abcd4b5f09dc477f8 -0x10b2f520fc0f242ef2074a414972ddf7f152774ae00968563ff897f57ac66038 -0x2a005d9aa1156bb02c1a73719f074cd70206e4ea6c481ee2c0f011ee0ad73fc8 -0x0f2aac6726662ad0d0302e0a0ecb3b55794818e8ac7f787437583dda8650012d -0xbc1597a058841ce11779ae1b4f13b233f927d620df90623b97d77993632dcaf1 -0x949e5d6d5d543c326e7ed5c27fc2d17ec4e91c303dc4f93b37c77e0b5eafae24 -0x3077933c8656098693be1fc3d5c2e6211950e62cecad7303eb97d5b20de6ae5d -0x1cae110e73d78df25d0079dadd68c0ab971733389ddd05a3f5bfa5332e78f8c5 -0x6791c6944a1619f9525d679be29395019338cdf6d724b81db132857d2ebfcb0a -0x62abef6712e7234faefbeef219f9e0b4db3189bc552ff03e9bb2b9509bd8ce7d -0x4e1f6726877bc2a147cd7ee2daa3fdadcf6dbc820e01482ae56504464a839ef6 -0x74990dea8961b099562e71817a9aa7165aa43d1158ce66cc657f05bcecc62484 -0x6272e60e49e34660b4d170c76d9983d011c1235ce8a147b786394167b2c540ec -0xbba645e70b7219fe48ee5d393f41dd298facf3ad33240dd11284acaaa83d78a0 -0x27016d4148c4d66a9274fa6858f5fc7c8504e4f41acd4d1fc456d95d2018e6ed -0xe95e3f2d755618cffb018dfc8ce22528c488158b888f72dc92eb3fee11086e75 -0xbcaff622a2d01b14c3462657716beadff57ab4c6b08dfbff013f949b5eec8aae -0x20e515121a6576bae1161ab713218b9bbbc754516cdd36cfe96aa9f5cbd5af79 -0xc2ddfd80c7dd5c1cddf879aea9e565f06922646b07956e8f3007d0849b3537f9 -0x17a1a52758b498a258e79afeb3f1025f71567cfde2b38bb8de422f340aace4fb -0xf1b0c8f759efabc22da90f485df2f8c4bad5e08d2771d8dccfae704fd4fe59da -0xf374bc8f92c7629f920f6e65647cc4be9982d42eeeee545b7a4574879b6de0af -0x0de1a477f6708d5722b8cc6139cf1b1f0434e14437b0a503582a6c1e99492de5 -0x0f9edcb398e61eaced97ce3014abf807ecc590997e8baa641d454cfa28285636 -0x82a88b79de8d95e656555c19c6a3ffc38db242c3a555ace5a4244100f4aa8f59 -0xe488ab1d19bdd362582d14ffd968801d4547bc268609bb44a920d0af2887d438 -0x0ecda1ac78a7b287368371a1ce5c5f46f575149034c15ae67729ebec5ab53730 -0x556b481f87e6b60b122a35fb070de4de918d8d3d3c6ac21713589560ceb6b8f6 -0xfaa14ccfd5211b0fbefb23b0a91da1ed91fa1f098112402a59526c82fe714355 -0x6ddd9348f986964bf13f67ad1561ac387fd3fa65fe6a9a0ba54e0431c2478ff9 -0xe5d1580fa9c402fbdce30776ac01484345d9df2bbbf9d0e14be3832ccc265b73 -0x6bb16120d9857598cb3285425aeb23edbd081d8493c6ac6b7e60d2199d912303 -0x4ab61cd3ed67616b05acb6ccaba23376d958499e2be8b87f23ef4fa2a9128c49 -0xc052d5cd7f2e7989f7c6c3a95bf951410c4f26149cc524e31ff5b8ef62e7a776 -0xd68cf109351e5b7279b391c90818ea7fb876e86b06e96d4dac6b2484771abf39 -0x8313dea9999b65e44c41028e477df91992984772fa752b772ed9fd70ef17950d -0x94e8b908d1c9a50e0af4e634caa28241217d77bc1013939fe24c5e2b0ec7bc07 -0x58c5e502c983048ebe87de329c9277425fa9e35bdd801746c1bc0a4eb9acfa51 -0xfceb9f99865980808886838848d3ba52cc1a5d21fb17745ac6ea1a1140eb47e1 -0x132cc8f3cc78fcc28f983df9647c53a5bbbddba55187ed92cee8494d69ecce24 -0x2480fd51acb4e3b06b41654984cc02f9a4f0167c4b528b4767c8d3e40fe71c3f -0xe504e18c16c417b10a96198e981c304d4eef73b84760d30e51c02bfa00e3efbe -0xab21033b96cdc07902d4b2dce79f0c3a1578896926cbd8acbf1f5e80a2bedbdc -0x132e9a0c19d950d98752441a4d440fc163312c3633d816b348735013f5ab4776 -0x9bd8bfb41a5eba0f73375ef6371ca64a29996b52deb01918adb2675a5cd98d61 -0xf8b91dd1fe50d14f6c491ba374ed1595a53044e47e059261ea055f7c5d476f62 -0x415960a60b45c9ce3252fa515d1b1b0afdcdd81541ce5ec0997d3b528430f6f2 -0xc7d8fa08dd3713e1a322f3fc8ed62879e0f647cedb48738b4af580bb92c9e8a6 -0x38e51f328556c5b9ffffb7855aad36a857d223448447cf8d051ffc46664ea765 -0x362d5dea0365f9d32b3a455108437b6557b2bf03c29afe6ad3968fc4c9059efe -0x5f7bbff33f40bccb3fca6443861df4222452924a974c7f3cc938b63a2f833fe5 -0xb26e37ba6bdbb37b3eb71d99e5630664ddcd87198dcaadf60e3f5c61e226636c -0xafe7bb0940aca69ec883e0f184f6b3dca099eb9683869d0b9a71f4f1f3ebe016 -0x57bf6eb1357d7eba119bb22c3c8d11929b4e6207030606e411ea4705355979a4 -0x8e1ca072836fa1638955c5390800b89fc887e99051d10ad9b422db5ae7861944 -0x2f1124f6fd78fc5263a5b9893e9225b509a70ec05d1f01b2282f35e9c14225b9 -0xaeba0284a86b53653af82bf1e92a10e92aaa7ef8fd32525ecf6c8a9ad131560f -0xc88a69b2c4297f0a8c507a4e24cb0dfa6d9498cb37ff2d6b985536ced9029f38 -0x667262b578bf8b388193160c8ec5fc491921ff9a4d63c083adc05e71e1b795e5 -0xbfa679f073d09e1e3e578f026513a78f6c3f64dc8c19278a67c595bd82964e26 -0x3c17cd7d6860bdde9139279c9d3fa1b2868355076270938eb0fb715cc62db474 -0xe8c4eec25c1806248fbfe5cba93dff930c9dbb5dffd6c902ae5b2d92808c7ca6 -0xe278036425a17eb2fea6661cce4b7d54d3e45e060e709c7478e373126fb2d4cd -0x9dd62e0df05708c5af5c4ac633b397c9ebe48a21e92d9732bff37afd870e5ef8 -0x0c9e7d766e48bef30819965ae404ed5f30757e891a22d007fed63911b50579c1 -0x9ff072e7a5df57e3bece722e42cc637ca8892c061ba6a1ff2122f8c2cce72800 -0x8826d3c42c1fdb43c7c449da613df633ba828925d7c93dfc4388529cb152c1a3 -0x2cd554cc600e78d3069c7da7fbd124558343073655026f743415e040d29ac030 -0xa17db302ecd30273fe02927d9261e7a4289fa1b9a92bebdef453d49f85a38018 -0x65241950aef378a0707d2552f34f901e9b3c14c30cc8a0821f3369e55c9ece8c -0x7b4be0d99dc27d26da6baaca4182167de61cf01518e92e61c00dbd058d0e3278 -0xa6e6be4ce73e240951df4800891322553052eea6e3a2ba5c24246b435bf65d40 -0xb0009f1b0a83d398489d74251c5d69212fefa11cb0cfcd66cde4c39882ef8b11 -0x07d3e9fb021f1012f905a9652fecfbd11bed2021556c253d3fbbe12f1ba726ea -0x8051ce8cae3d395a34b67c970d8b3bec833d236621b5ab1bf62e8355594be573 -0x51c605a4ed33910bd78551f10f98ce5283ce56af4a944d0732d5871f0538f534 -0x82691a78ce27438543d4d3c3d1361def4fdf6bd3ff42e15a85910c31bebdfff1 -0x43c6b361f61a47c9ee4776b13b12cc2e9efb066eec29313b80c02a3dd4cd62f8 -0x88dd0553b4b45cc6a785432746480547856ee5da17e4a73b5b654d8eabbf59e9 -0xfa8380168cbcd5ba5b9644d461e545f708e925beec053721cda0d1b393eae169 -0xce9c11571f55075bdea43360ff1f9fda8f6e436a5e0c13ec55c60e3bca4c5de8 -0xb809a427d557adc24062b627658b0fd415c03f9b939ea2c3995d36e3ce043ea5 -0x784ea0ca3ae637378f12c88db89b8e624d31471099656f401db3c0838ef011f6 -0x779f2ae5ae3aaa5e12141073967981ea11523da680518577e42f957309c02ea5 -0x7cc6008f57b4ff878915eaf03b22eb5babace27b9e3ed6550f98e0195db7f8f4 -0xbb096b15fc75ec9c7b99508f7a2662bc16a92353c8a54b5e8fcc139fb67886e4 -0x9b3310f9e80d718d6ba11a115793596593a15f9561c37cdd1aa42a4af340bbc1 -0xb634cc921be10f7eec99e5a379aabc504eab609b041747e507d74bb494d7d273 -0xf69d652666b10ede10481ba522db2ed602b6723fa8ae28cc10510905d1ac6b27 -0xcb44ef586d99aadcf42de8f4ca7d4a6bc47406ffc2a6aa7725a45e63efadf52b -0xcec33663c690baaea0b73165485167cada205b0873db1e540862d4d3460c2b6d -0x8ec5dfc0928d314f628960eab5481abe75d50ed5fe955438084cdf0fadaf56e6 -0xafb879d586b9b07b846f72ddda5060f9cd7505c169938a0263652a5ad1e808cb -0xa90f96b706cdec35a02bad693f487ba8989d460beb83ef6d29779fb806a4b2c1 -0x735d66380d78725032cbbbc54d961a8541ee3fdd6cddc14ef091d8679f34901e -0x8b39b3dc38c7fbcaeb730560f924b7c139b9a26c24c7f6887e8d84b5961cbde0 -0xe39b59716127b4ab401b0a8c59e2523c809e62d14b1e95cbb4d4a41f2802bd7b -0xaa2b30b85617f398fbea4edaf91bfe6aea09edf5acba44d03da5174cb16d88e1 -0x44fa77d77f5e3fec29dea8d40ba8064562f98cb5550ca2ffe86b66892a4decf4 -0x26216810db6465027d785a5ea0f760b78f793cec43c76dd4bbbe05f1422213be -0x3839edf961828865aabc49388908603234ff67ca6e4fb1d3865c285dd1788709 -0x49b5200642500f1e5708a22a45fc852aebb141eb3c0d5d38c8a4cc2b5c041a9d -0xf0cc3b3b5c6ace7207ce983e87e3cb7080c3c19a4d0c88de823e8aa1050a264a -0xa134b91fcdc8c342e9a698a6bdc3d43c751608037b35ad6ca8dbd6a8ff6e7c89 -0xa37392d053d3ee7fed89dbbb9a800c48bfd03446f604e0259e57e090d0dc690b -0x00ae5fd3f2059e54d30ca0e8d378bb9252aec0fb5981c5a45eba450eef643997 -0xe1fae4984242b461977c86e4d3dfd7c87d4f446545e3ed350a1a638b9829f7ac -0x8209848998e7b844062585fddbd2a9de0cb075d7b3340af94ec41d34086a59ed -0x3c334d0abd4dc4a38aacbaba0ec69f50007c6c9d1b7194fb9e39696e9d276cbc -0x9c387bf56d4d90ad97ef5c4807f0cd97094c2e522f98d499cdf6fb158dcab371 -0x856c609e07f4a4b4ac82e4bef8196de34809647f573021da4caa7579e43de116 -0x32f326d1bc393361925683bae23bbf0e872d2bd040522cf3d2813b9d652b3c9c -0x8fbee2003ff1812f80143de593ec76bc79494897fe088a05e15f6f4dbe9e5ba0 -0xe2c09b3d72cdb0a543fd290d3e791b77e5cff1c7cee8a3adf7659448ce970660 -0xeaabea9808c8b37fd4e1af07af8406ca81a634552eabc3c3bb378fbf142cd36a -0x29559e86752558d6a0a8eff6154dc411bf3774da1c0888b6036b905fdbb61262 -0x6d0c4ebca3e312dc6df146ff15226d5bf2bf93ecb0d29eb8489a33da8ec5e6b6 -0x662b7c5675bac813e8854d607bcecaf5da6e53af8ddfdd66ee154ee87afd53f4 -0x0ce90800085235f311d57f51b018d5c05ceda53308b64f275c9b9b2a16542f14 -0x089ab7769c2651d204863966c024853946855f5ae820aead2082ad91574ea02e -0xcddd6220369967605b27a1155f592cf2cbf661fbc5d7470d08f46037bf66e3f6 -0x88727897db7351e9ca83cd4662931a977c03fdf16caba398205cc7cd2c3d80f9 -0xa03b86bcd4ca5939dbaa4d42161ad47caa6dda488792b1632574e1a76921ad48 -0x7f15771a2cdc03923cdd55913e508bd9cb45902a6f2e7de78db5db8b610fbc80 -0x48e531c192bc18297c4c7662bce04c2b76dcc3d00747872dd5a9952c38a01846 -0x750795f86a846cc96cd2cd81f20aa40b8072ec6f26fa366ecbb94bb96217b713 -0x8ea0e656ce33caf5e606e25f87bd26d21468e2d4552559d220756e6d82d7ea09 -0x3ef8e2b4d6d3630f6e90cfb7dc7043e02362276d14b572912c36f75a3d3f3517 -0x754b187f0f48f2e751e5fdfb0b81f6bc10b2a55eaffedc93d304e900bdc7cf4d -0xd612232cf79ae4d7c5b6458826f2fccdd23a27da9edc987f0f6a01025ed027c1 -0x997862d2dfef57bf233e5ee1fb847b51cd84ab9214c0f8953ae0e2120329de38 -0x0e67f1aaaa33370fece09661d71ac9815b09e9fbaaeb7d252cdc38b014e3df56 -0x80aa2fd53f89d5d1bee3366027fd4bb7b8631b4a9b3d6b675af140027c381351 -0xdf97b294a03803f0b8925f75465187d2d06879214543f3083f7fc4cd244c7f63 -0x1dca983cfaa177b6c1c832e78a5e6f47a77c2aef611da8d5bd701b6db8c46598 -0xfc13a424e69f6571f4f9ff7a79ffbed79cfdf611395138ae2272a927c738f15e -0x13ff33b32f999b23b3dda81a068ae43d2bb96d94550ef5dea01f5c158ab5ff6d -0x17400aaaa59917e022393b785909c99633dfe05574f2f040deec4ed3325595e9 -0x57e4dcbce3827957c95121e560112da85c03279dbe2a2df3c7ac99ad6e28b02e -0x95628523905d71b26438cdeec599d984233701de7569c3e2dcb3888c6f387a99 -0x1b93dce74cfabe08b1dccea7615e71281a9e8f3bf4b78d1b4dbff6e12cde29d9 -0xfba9ec70b630ae53a9f4c7036d6a12965bc3af5abf97268c0681d0aa831dc3c5 -0x2778a0fc771ef2fd9b7be6836593ddf23077981c707bbf54fc3c570afd1a647b -0xd4a429e699aa5b0bb5c6f2796f38e1af9b898e800d7b690d1ea40ef6d675273a -0xe74c99158370dd51e7f700871ccfcaf2d9efc0f710686d87357c8557287c6688 -0xbaf96f9ed7f0331a726aa8086590877659c37150378057a5a1a7dc526f8ba04c -0xa325797481a5bf7edd31cae65ebeef5bddbb4863989b0e49cd242259263a75b6 -0x30f2205174258f3200bf6225c6fe6caee1fc679e5a169a5916eb5aa7a98ee889 -0x3b321de5ed1599517627658646f9f023d018f2a354cc11dd99ec33398145d6e7 -0x519a777cb0390ffac9a9272fb7d102132e1a2a570f11b95a31375326d1d9140a -0x6ad950418ebec484eb63db70ef3551cdec1715d5611967b3d02472f38902c4c2 -0x64f9006ddfd9318f6929ead8d107d3299a97987e3625e999192cfec8d7b652ad -0x30c46189982bb069ad02d8c1d0239c09b4d182fd8199bcca777f942ee9aaab44 -0x93046e5a04cf1d07404801f461a56f56ee6b9b572ca656ca2696d1259b39a52c -0xf68f462b9f39ebc3ee6c38681fd1a502711bda9722d6fbfa970e73e37e14b78d -0xf8a25d59505544bf2d8080c642a78e30f818a7e99fbd7e2dfd624916f02a3424 -0x873b82846cf1f336c668bb7baf3a9bf4620663348732d55d9b35ab825948099a -0x77e57a2180e02b37c39eb9d6f41a0d5a811edfb9baf4ed9d57207635293ba058 -0x3fdf2966a87512b1ee4d13e37db06b37c8cc8fe46028bb31c094a4f2eeb3a10c -0xeb8dfb5a85013e24024450b128bc496a13289075b62a3509e13fc04fbe518ec6 -0xa44eec12d8236105e32daae8f763e3751c0fc346815a93505054330b394bffc2 -0x8bd9afb0bb9c35d8aab4bb3423871ad4b1583671bce7c23c421878af173ae076 -0x00227839123befc2a5140aa1f3e6df57c3c784555f502f64302a4789b01f6ba1 -0xca19c20bec8f25bc15e26d7721395beb9c59e6af9c30f647994b2fde891f7b6c -0xef26d99699f5fa0ead3adbd1554094736967e1fe481ea30cf40d80788a9da768 -0x829f8be2edef836d041243741d2b620b551639a0cee41883c92989beee4d4a8f -0x4fb33f9a0861929a90409a97c35f73b32e9c8c1deac828d28833612c521d959e -0x1f0627b5f7b09387aff73fad6e1c79d6b634787fb40d92fe2cadd92ed9d04db7 -0xd19b604082e72e551e73965c34065159174ef32f341e28099e3f17dd31300125 -0x5f108b43090ffa09ee3f3fb23f8d9324fc54eb97029e29f6c4ae0741337f9ecf -0x39fb584972cb8808f83e2367c9efc2d10ec28cff815561e59bcfb4ec6d15556a -0xccd60ef90b75770b5a98f431af14f5b4f7efc4153aef9cdf55a09ec4ab6f4e68 -0x11e99397df312d4dbbadd11313e1c17f2673cfcc8c6ce20dcc49e6f092bf4c9f -0x4e1eb1b9a6887c2b94068a899ec0c6b99518008ed5c488e982fe66240df838a6 -0xd24b51b3dc329424c9a64dea4b94430c0f4c2743c4bba13963ffea02750ad583 -0xf7e4c32a103337c60dee5cf17e7a7196c47149aac76f3650adf35cbc99ea5c33 -0x9e07ef9cde82e5c613c98302572e0e0a03a974876c618a27777d77c5dacc0e56 -0xb5f46210e7c075a75ac7b631316f2a9e6c4608efca94c48e2c0f99e39b193722 -0xa274798801a5e908870a0235f96e75ec309174a51f446911f3b8880ba123238f -0xbf4245dc23910c13f06453b55b5fde1940934c2bf44013a03f5419fe2f89c898 -0xb3f49627b4d911003fc83c0a51c1999db51e33c78f261118ed8accb6030d6ff1 -0x55e88e1e6646395adafe2e2d7c1d6b0173d908c750a5f03b7f5725b01c0731ca -0xaeae28cb8a32cc8cc7da9d9fd7ea880594403fcdf9c8e7d9ac26d43cdecac342 -0x592f3a3b2eb24a463c1eb6f464b79d8134c8f0d4d362374ec35c0532d2a0ed77 -0xa22b168950e974062b1e8e823505764bd48f79da5792f3b4f828a72a6c875766 -0x902459c88203cf4415820355ea65584c75a05ea2b2a49d2e15e62f6f778df77a -0x2e969df38add36c51ba17543a7f25498916f7633fb18f96da1324359f1af2411 -0x755c5ed8fe99d19dddd5a5e7f06baf2af70939062f8bd1d3b4f32d8c2f84e7f5 -0x60f97242b044c843963d2a2d247c67c905c91c7bae22bcbb309e40786c0697c9 -0x3c7bafb782ee9573db796ea2947d4402267d9a8730ae5284881e94c43f76b1f7 -0xaa04a8feccd3cd3f67ffdf153bf98605f347ee7c8889f8256e9e57f531c42ece -0x252e49e7328b2c8df44626bd04d22a642748c53200bc9efb8196779698ca7865 -0x9682efc7f86b5326b72fd63f4e7d7b3d4fb1735b6dbd95c5f40f7ac9681c4b37 -0x1a73b1a41444a84bfd04ef9b8400f3fdd4e35fa271319a9ed8163af9aaad15fb -0x4ce70e2a3af822e3061766d2c97b632904de12a3053c1362b0d4c8499be3a6ed -0xbc1e0e50918fc75fba7294eda93f76da308d45e7af5ff0a83b3972ca93cc17a5 -0x9638d991daef784593e17d4b2a1449b0f497abdc89629bbc2757e8fd01b48a42 -0x522ec25b0d450adb7d37dc65cada4d7d6eddecc04aee598b6160db86768740b5 -0x96c9a64f999ce4cbb315c85f1d6757f74e58fe4557031d410baadf3b482cbf59 -0xa9f350557fb6c516f7d83727dcb9c7de7aaed0c10259b03f295a9d20e3ccbe50 -0x964d63450971e816cbc75eba3ceb2d5b5eb4849127b7b2fc828b18b09fcadf1f -0x37f0acbadeaed3e04991cac2817d93289c1a6e368676c9740a8fcd5cf543869c -0x4cf57a3ff2e0fdb1fbd0e0885587649871ffd60cc446d1e4d774256d448e2637 -0x1095faad44ddd7a1cf4ecaa051f1b57cb6baeaa1cdf66aaf5c57c0455e250a0c -0x3cd6877628c86f6ac84a923b1e7adb85d2487cd36f27051abc6f81fccb178bf7 -0x408c31bea49fbe07a840c334cb08ddd431dc62f6741ff4092891ea0e5bf2f468 -0x2fa67c4c18bbfc8fdfab2c1a60d919e0cce801ec310b3b0c35f65ddc73f6c492 -0xc2ca63dcaa91cc4b45dff45c254407f2527482d048b970ba2e1c231f35a0afb9 -0xff93c6d00229e584512952c7480770404b6d9eedc1bc29f278e64ce325573fd7 -0x92a02e719732065f6f2c8d45fa24343667161d678cbc9be963dc8b5d032b67a8 -0x4a60f55e2f45763d55fa13e2c7d3aeed851fccdb1972052ba1a4e1b6dd54413d -0x86ad8a71fa20e7f99e893a59bc06332fb7e5e23226f5769c1a3a2cef6538b1ea -0x6ef87c0affce0d42da4a4ef2336fcfe56930de61e17f0f318cf7ffffbae7f414 -0x9a635c5a792f3b53919499a266550915c788538fa62dfe7bb2c077eb9bcb386d -0x800325a6bb9d1ad13e5915e941b2dd909494e547cf5080525432b85e95a8768d -0x5e539b39ef9203c6f0c4d6a5b15b8c29d4db2d15eadf3ca2bd3f0023ade3b487 -0x9bb373361298ce83a86d7ce012bfb2509a43321e074831d87fd20f77758bbd3a -0x3bd233cc0bc282c42be0551c53c97609de3f69409e70d2a34ede538a2ff129b6 -0x7788b63234578e3a40fae085528517304475ecc8e03067fcec7acd69233f577f -0xc6fb1099b654e55563d9b539a758af63c3f1dba3c001d889c125a2b116a3e8b0 -0x044463f5ab7953fe83460575a752a1af09d01b44cf32d751e7dcdb3f814ef7d1 -0x467a303aeda21649ca5989532a6f757a587ba63e064402e6f72c4b057e358fbf -0xc00286b1f4fd1087c77cbdacc3b8731385944a75096d360405e99775481e73e5 -0xc26bb5c4aade9e29503d64cbf3624c7ff3368317bf6c2ac7276117c510015521 -0xfb3c32f95cf9310a3727df0463cdae84748420732cd02e04f83acda9bca3db7d -0x2e6bef6424845391c01be94eab7702a4533a8023a3216c5a31b6379d0d48f2c2 -0x083f300c11f78a1e68f5a170e30100267da3d84f2947cf4b0d2c0f5151ce3453 -0x3ff07ba4c1432c488e7916c23cd249c48707d647fd99345c7b656ec8279f6339 -0x31a971bfeea6e48f333a095bada1a666454718120e1d72d37b7ddba6bb2b489e -0x47c62bc3b48fa80b81ad11c70bfd8ed67e7e0ea78599afd4c5e6ef7cba4f018f -0x1aee27270e0d8298f00c9aa7c767bee93d11b0958e4f01b98bd584babebdc058 -0x349833f732d8354398231ad10d94512ada246f9f2197ad5fb4b369d5eb887277 -0x8c0fee4e10804c63cb8814b5bf1f48ac11d038f5c24dc76e54f4043aadf5d002 -0xc9bca5e46e20a2f86d81ab620473adeaa0619083b19f718a80af5fb0b398800e -0x5393464777b0f3c7aeea11d2d3b12239395542634c625176fb15d3459b5a2746 -0x2ee7714e11847f4b777bf9223818b0ca5d4601da94d67ac6b920c6787178c2de -0xb39beaa1c7fa1227ac7d624d7d1e9030afa9bca3a6f633297bfa75a1ea11f051 -0x56b7f24a6fe148773ec90d297bfb38521eecb84717f3331bc1488bc75b8cde4b -0x3f2bd465a3c92636d28344184d22d801697e9c18786ca9379d31b4e7a132e7cc -0x88972c1ad22c293667b4a3b86d0bd1b6c27f4627a72284b5f5ff4503ad37b77f -0x708b8962169f9c6f32618a4a84c855f7a2ed4042916559426f45674c10217305 -0xb88dd1570523b6536517cc3284f1386cdb0e99a44d37d5c471182da86fa2442e -0x8b5df777db0aefc86a09037214d63015a0920ab38ed1c1de337be242b48d5edf -0x782368def9244ba535c18ed4547a406270c86dbf0680ec2ec9a1a24812b22422 -0x9380ca5b1341155c93d3d5ba1480639512f7e17afca723ff161384812df8fe93 -0x4f0a29be8dc4eea35721f72c5357e1a5ce3eeb3fc7e26e4a458c764305ca387d -0x068d337d09d2bce07a8944f954df52cb70359639a7acb8663289dbf5f4af4ab9 -0x6223d690af15faeddeffa4e950b15112194e018af1b76cc8e11eaef41462c14a -0xea604d4329d1047624bb99241ec226feccaa527cb511c52e2bddddfeb328f3e5 -0x96b4373927506ba2aaa1e74ea68950ce4c85b3c5dcc5edbb6a94ee65c97197b2 -0x5f16b6244b9773e3ff6ebde9e5407f61dd54e78ec553ddda1e1a3a2b4c9ab58d -0xbe474a78b84a34e32fa398b2583afa5623c594f8e722b4f9e4c7670aae048352 -0xfccc3f963fbe43df01bdff48957e291ca2ef493e197da536071396c6d5698301 -0x9962b239e97eed083bc5a0829872eab56d8c1e2b432f0e58a17ec6b38b0b3c9b -0xabbd2434db60d32ba7ead39e224558e939c95144a7b314bc503b000612867bbe -0x5925e89b779732b7de4cf52b986347b8b31531583176f79f57fd6aae069e99e1 -0x1853bed645f2b90c2b1be4af7b53eae5f99bd8f491f0e8e482ce084456ea4d06 -0x387337ea03a210adddc38595438d6a9a424c7902e4b6428596ddcceb5e4efd51 -0x1f15ffad95d644053d67d67a0c428b66441987b5b1cd80ce0f4f1255e0ebdbea -0x37e51e80bb250c085726f754771992b4093550ee91130fb0000f6aa7da911910 -0x5e5aa868af257229357906112482633f1e4998641ee049f32fe6ab8ec0ff52c5 -0x60e7c448b270690a30f57a04e18f7e3debc12fd0f8888a9cbc2b9961a0c129fe -0xfedeb7ffe56519561c514bb1ebe923175b7e43f61c28facb8c05fe98f3537472 -0xa997328a30a2785caa62f0c4bf1cddec688812e3b07620e485e3a4640ac93005 -0x9896c945fd6daa37bc271eea892fa0cf10dc51bc0118e182b94ecafa8103778c -0xcc1fc9fb63c56ea3cb46d948356c734f8690a3faa420625e83fba8b0ef724c6b -0x7c5babbb2398d3403dce54bbcaf8e5735b0e752f4c0a6f632ade9317488515ba -0xc7c422087a184188b503e576409433b55fea19886bd9cd6dc770c40fa1e92e39 -0xf79c81e3bc379f0f62ef9ce3098bfe336b209bfb610739bc6dd28a9aa9e965f2 -0x785bf2ff19faeb0b35963d9d111764f9b359a5fa373adab11a3e6170e0285891 -0x0ac05ebd37475844dbb09f1cde776aeb6c42411cd81ab72ae9e68235e10b8b6f -0x862e3dae3e3fa88df79f149702763a36045fd8620e75163f1573c35a6f293e20 -0xe376deb349dff73d5e90d789feff8c8de9b02be95bbd118129e00ca172095878 -0x9be0f9e0dd1b55f0a6e55411b208b58ccfc88996a2507b5597b2b54b8a22d849 -0x7c25e179859f5b4a5282ebf84e4d78ba37bbb7247744f1ae13f1610644b78f47 -0x770ae7da8bffdf3e9e88a0a36ea11378322d75b1621ed5a3678b6ffddff31ee4 -0xb0c7aa3e92cc20e5017485b3d79061d13dba59b0d1ce730affaf827a6827b6ae -0x3c23ee9b7b55fb7a10fb73d6e965ad140eef6440fa62a01c2788677a3da99f2b -0x702253458088e4238c51cb7afd57435458dc03a7330509cf3a978626a54aa00c -0x588db297e261d8f631d7c73e9fe9f81ead27ac4d8e37e95f0292e6d6b36f542e -0x50af6d6b8ee6b0c354625d538ddeb0e89e84840523e743ae11bee3de38605042 -0x6b147faf4b88d6b200554647612ab86a5b07409504f54106d6a7f5bc8ca9f9eb -0x7ff79b2084c3ea250723a54eb9eb3d2fdc269fa0d0bbe75b1c2c0845c9220525 -0x2ee8c3d243221abb0bc2511eaf4c4fe192e076f6417dc7a6da9a03ab4c243193 -0x3eaacc842b8d4e95232011a59ccaed6262f8b2e61270b8cd223d5f34380835d6 -0x176a56c7036e247562fb8b7b675ab65252a9674a3912679989298882ce536303 -0x9b07ee269cbd22b0c7b23cf6e5b55de042a98ac1c9ae630e98542bbfd90f168c -0x3b5bb0f227cc900b60023356d13ec05f0c6c91732b1b1244b817b12e50554262 -0xa6eb93a73dc4f69f2db0fa8dcb8c4a568dfc087d86cafff456caebe1c2e4842b -0x6537308635ef99a8608f0d8989f9bad60c80e91d7dd5f38e6e6e163f316876b4 -0xafa8c28ed69fdc04427828019cadf62242cf9f5c02e437b79af2333debee238f -0x32aa1f0051cef75b205745aa37f594b19adf29106fe648ed8e6f5b6bb64022b9 -0xdac47f572e5b6085ed0674bea534e65693d2ef3c027e28be3cbb3d3468bc195a -0x430d62d3546baae07015ccc8493c556e5a69c076b6fd12f8e16f4c20d2e9295b -0x34fb368339490ffdab993c519987f288a1bc20e56e49a5c8992f4aeb2ae794d0 -0x2837f6ea60adf076ee818c71a771bc1a9c0f89962183fbcda7e058ec0c3bb43d -0x4a5a51e2f29da20e3acfb3fa2d972dba7cfafcbf57d5134abad40feffd908c3d -0x2e744af45c42c1127167d90fd3a4d30c8c8275ebb0afdb59cbcfa5d1e4a18de5 -0x853263646b949d7060d921149bf827b743c0ffbfb09731bbf373941718429827 -0xbab2c37b69244cdc609c5cfc3e3bf9b2e2e35262b58eea40ef3b9e4ed474a1d2 -0x4a8ce1c5e5934b24f12930f46f46d7e6994f6fe53005684a73c276b0cc73f7d0 -0xfb956fcb84b98b1848fc7de8755cc5bce540d57b14beddfafe4d654f8926ccf7 -0x03aa1bec8e4da3e4116ea4c2b0e9fb2a3cf98f80c017ddbbc70cc8c325acd676 -0x913e23c5c75bba5a4a038b1610d6caf56f9e341802fcb5ebc38b65643c8fb572 -0xe7f1dfe013d14856f7ba5e8db8eedf13c04ca853458babbc202b115bee1c2ba2 -0x65f1fc3cf4dce59c615399908a479c5facb807db97d7b6af9aee66d9e4fe2e1c -0xb5353926bc46e1ebbe0c1c9361a37da730c1e40ddf62db60ee0c51d080a7891d -0x7bf16a2d0fb74c354f828408e1cb767115d59652db2ac57098b8e3ab81f6ac0f -0xa85b32034fcad66d5ef9f61c6030f18ee4eaba89a432c7aa42cd132830afb0f2 -0x49ef6a6c6f6b9b9977f54ab3b65271126e8a550b5877d871faf9711298d6ac2f -0xd20421ebec97cde249ff847f44baead0f2ec67e97b9ad8937ab538df2900a90f -0xd48b99028fceed2a7e44159413ce094e319577c7622a4d5fb8c4659c5cd0a1c3 -0x67f480575f7abe45dac32dd6dc9bd2b85697f5b09885b2b3a1582882229c7450 -0x734a5d8fb35900c1f1290105eabd21d47e1a5bbe2ef74ec8942034faa9d89ad4 -0x6e8bfcd26f80a401f9a5a52ba9267384b00068e44028b1d25f56a5efee4fdbce -0x7c6c70b9bb85a244f513595cb8ff58eaeb959b5463e907fab981462267a4b514 -0xeae7feeffea778dacf5d34e80a8e67a85e1174b5eb941893adcb94071e4eebc9 -0xa1ad817291eaaacbea963f83791b889ba23482305813f07e689425c254079942 -0xa07e1e8a6725acc732d9899810ad311a4a4f3816d03274c27b5b9a18836307b4 -0x314fbe9ea4261df5e930563b6d62cd857470d190668650ba3e7b18d530a13be3 -0x0808ed98c8fab83bc2a2f4f41b22d9ad1da197a0e004804b2048f4f5ce6fc34a -0x01440cf266ce52cef856f362e8875f3a46c4e7900babb27c086c2a1c6180fbe0 -0x0daf087e9c57bb97a272341dea2b33c4e6818d0d2163f5445df51a5e87b210a6 -0xe0cc7a9f73cd05bbd0911e0c81a52a78435e984ecac9c73074b388713405b2b0 -0xa5bb41c0f2bd24988de6a78752da0439e7d0d8f7299eedfb4d27d7d301197066 -0x762863e28a35e0c221626145d428a5539207bc7d6a45efff65a11ee81885f3aa -0x674d25ecf5d34cb094b9812c8f9be39e3433f81a5b236cd843b703bca0b5d35c -0xb4d542a492cfb1458592aa71549ed967553134421aaa58bbbcd0f64b6a77e605 -0x67c42226bb51bf6ae0dfa35be37194faeff219c6355eb820a5f08998a2985153 -0x72c662dc81e5b59cad3b5bacd35f62e85a349e579375e5ab6d766a3e6609340a -0xd8501470421034db9e97775305bfea1dd1913deba4b59b5211b3358c8e807055 -0xe761778f1fc4249d6bf046cb17288182bb9ca57a1a48502d5bc30f5939df34ea -0xfb02ac34ded75fc1b7b0c81cf72ee2f7d6d18a9502324e8bffcd9a4009cdc12c -0x5ec6d6b6f509e5982860b931309a6fda63c4dd494d004a9adf3b97ef13afc1fe -0xaffee15e6f159634ba1f26180f639033bc614905b83a506bf7302da3917c2412 -0x3c3a0d51aa29d053cc5129e7596bb301fe31128ab672bd2f3aeec0703d84a18c -0x630eb7318fe5bd58d1c380395252c82cdea58744e33ad0fa351ba46ba2c16b11 -0xd341f57e36225620f52eb76c66e9c72aa63081f05d9c6cb152f041b9b27a9cbb -0x65da4c5f2696ad7896c6466c443163e0ff858bc17d8f2b5f51ab7dc63f6f90e4 -0x71cf4b2b78b9ef4f5188027d1f41ce09a63193951b841c4899507ed41eec6bd8 -0xbbb45c14096a7f2016fce44dae9faf75be29a45304aff08605eef3038cc1a7af -0xf86933ee7dbdaa51f5d0a664be2e53e12cf45047004135eacfa19f8eae50560a -0x187c5f35f6ed73f053ce8d2ecb7f45e1dee08f032b009a15bd9e2f4523d01f21 -0xc447b721377b5aa2be085442dbf000a95c94ee3b72945a30e80c1cdfdb3557f8 -0x42c400e5a567518a4a606ab0e9409d5b03696bbf3f51f2d8f3b09e00ed85b2d2 -0x0ebc5ac5c6e124a420fc956b322e684a435db464ad3c51ef33f05fc96f3bae12 -0x8a7f24524cdb499c607f3d7e7a30204f6bdc6e6e495c3aa6947cd6d623337df5 -0x60437ba7c82b16cff45207e83f3cb909100402b759448d3bff02859c0ce8d1cb -0x9d98a32462e3f438bcf5b88616418c5f0fd958a45cec3abd7b853dd0e4b3c87a -0xc8faa8bc55b40df98902e66a0b56dd5bde826c888b7c6796b6d4cd2dca0fcdb0 -0xf465fc9b041906e9ac768c8fd8951c2d16710d4ab00fb96a0658085d9d096979 -0xaca5d9cc66aa8533f48db4173d07653ffb0fb019db63f7242d689aeb6664c71b -0xecaaaceaa33dc6cce4b34aafb8d56d9637100b06ef036c449f21bbd1d2675601 -0x459c3ee0bdab8b22839fc24c96d43064531986b4e48bcb51bd0e84cec3ce3e01 -0xab88ee5195a79397b55a80e22f25b7b9adb5739139cd45915e2adac8c95f9e91 -0x2ce6111a467031f67eca5467dd14c94560ce848c9895a82ded42b68e8389e882 -0x090a89c55987dea359bb2d945202a4bd4a6a7070828c74418e8952bd8bf28493 -0x0b4539dd5ab04240efbc0344871a946973aba58982f5dc8fd8663829d868d9e1 -0x4023d526130c82c340d5853857f9aae8badbd232cb9da5124fadcdcc52ae5b73 -0xaf9493a68b7537ea21bfc50a33afa2a42ba7237984b9a1fd1e04d7681db5e890 -0x8b7b23025168289714dbf8ccbb8d6cad9dbf3c03ac07d60b31262ec496dcccda -0xde2931d15c2d35814f90780f0989a66ba4af5f8c0390d5e05baa607eabaff5d9 -0xb4691e2735e5a290e11cd74f662a7ec1a0f16f10e1f39de1a0c8eb24663a0969 -0xe7824adfb5e2295de760d710771f309f0bd4c205384b2d4f744f6978c5718779 -0xf98585f82cbc5acbf1d22e11e776b435564ce44ba24e3fcdfe58f6800d7f96f6 -0x4b77abd3885eaf1f3c2e6175068b963e2ab9c5b6ab5f888acccd2b3578eb488a -0x335eb55a4ae7951a0e01d9dcd891755a28abc15ad40c7d95ff6cc10ecad6a0b5 -0x9edef415706acd53d046b9856a541b516d781b4bf4649969d8f1738defa57b73 -0x8f6d51345b343785a9969ec484e47562ca559b8bd73578521177509564c91bc1 -0x59fb10085c8b071d1898c4bee0488a8fa65b69edec1996f24e3bc83b80ee2cd8 -0x3170b3cd818fcb677725db89576485a54b34deee56eee02dc7098b24bdb59a59 -0x72c3ba939a934a7c04e9d4040ab6e3ccf8bfcb770f9378acf484de2e76437c5b -0xca0f1574c9e7f74b43d2535f3ac2030115a11085e99b3dffa5c355b07873073f -0x32b512d209d11d6e3c76f86e805dcd5fa7461b4944e9387248c7b22e48fbc0e0 -0x77974fad8e5f2217f34d4d53a10687e44d3792a159021d150488714fe7818e9f -0x9aff9e4d47c8b41ca326320ae0ce766484a2321ed58dedecea3ab55935fe61f9 -0x7ea3740495767a06355e72f8e7c1e8d3edd30bbe3c2676301cd72bba50209dba -0x5b166546709e25d8c2461195c39f0eb601a71910edd05e2725b609529fc29464 -0x025628212bfabb76565968132cec025c8eecef9939f03bca7b77c14808e5fb3e -0xe63b6f5ad615d0f0523f64b853af195076a81926c095e6b973f56ba6220bc8df -0x97dca42005d05f91a4f1005abf2a39e3bb24ba494e166a26568dcb4c90b67d37 -0xe3a0b926cff397667cec1ac2b91ec10c640b916bfd892a384ae3a665b5f55912 -0x6138dab503dacdca014f186e7ecdd200207fd771f83e0428a406324f8fd4c091 -0xf7b9e696fc7bbefcc885cb364d3fe8943f29405d542e3d2a73bce95fca643c42 -0x2d818dd0bc47684b6d0a5a993ff2563ec43c8df3e6e27e598265d630b5db7483 -0x369e19f60b27cbebeb3f1e4201778d0d747757a0906d56f63cadf638853f50dd -0x4b8e896f5e3d930e34ff7caf0d0d3db0331c6e6f8fdad342e484da2f4973f1f7 -0x70fa2f4f31dd1122fc4ac24a5ed1eaa6e7ffd9ba5ae29a4c315ebfe47f9891f2 -0x99d6a05de2b3dc0b792404e3841517e25698cb4595ae001160f4b6aebf36717c -0xa1efc8c4d6aba1c2fc0aea84c3e463c49cc4c39dd9c5e1a14740950c2e155790 -0x8613b81d99c4f1bc82698f4e2a1951703969eef76961350885a2867c70df3a3c -0xce1a885238ae0dadb3fe610aadc8b1b1fee0409db2163665b714733c85fc9cb0 -0x87eaf6ae4264f6681fb75db1441ec2718a76baed6f180c4c727fddd4a0cae257 -0x9fe2b1e67b7b2c2ce9a56d693864ad4806062cb646ee73a324f343b917fa9365 -0x35bfe4d80a27853062f05419ebee6155cd57ceb2b8690f064bb1772523780a18 -0xb3a62e94bd06de01c60500ef907f4f7cda7f1cd506667e3f786e61ad1e08bfe6 -0x5708047c74321a8a07ccb9bee7e109627af0238f6a869e32abbb8c099deecf7c -0xa91075a47a74126a0fd73d58d29a4c8ef15e0e2d2dfaf46b19e69669eb83abdc -0x3be11f14d2507ba3fbdc58c3b6b5877a465c447c54bd82bf2778ddb9801686ef -0x63af07f3601ed0758d2b58c2b0eb1e396d65d1b2988f7d05531d201a86b7de19 -0x7d8f96981b2b06e56c6fd8034f5d7b6b68167e18a3f53d629240aa18f1db25ff -0xdebf79d3a5d8ed9e119f907b28e6a0f3684e79bcc4284ae9d23a2f326bd15334 -0x99f149501bae0ffca49cf80f9e3d51a3eeef72fcb81bed6be5c3697363cf0bf0 -0xc3a2ddb251630cf5f3222640474f54cf8cfc0cd66242c5df8ce73525568ab795 -0xf552694ed99bb79e37f57d3ef0b0ec9c805334ced9acf1b8f21772da38996d95 -0xe511645a854d08ab2b6a0790a45183aa4e49d0ca8e109a9306a33231ee9b0c14 -0x82b4d274ff6ae336403ed6af2ad6e5b8f5865c190c83415855f46193c700bb7d -0x187c3cbb21cee8accab71b9520047bd01a6faf07e4f950141f82f927ca1d8c2d -0xf8e8dc1833b43167648794e48fe53afd07f57f5230f51821aea3fac006902f7c -0x7050b126d594654b92e2b3c4561c15a79e15dcb2b539327db84f5324fc88302f -0x9bc24c280e6d81062c139132004d6a037bcba9ebcb8f790d9cdbb85348002208 -0x96da095493dbeeabb1fea2c3419b96f70fdfb32d47de7716eeb0a449b004383c -0xf7eeac2d66ca5329cc32faa7a9cdfcd3a20ad45de11c6236da1ecc1eeb3a9fe0 -0x85b91a1c2b77ebb266c70f184dd10d410c9c7445583482e484b44ff5a4188711 -0x5c3c6766e88b2e35bb181192b381598a36ef5c09be31b6e454d92fe173c341d3 -0xe5f84c58d3770075ad207ba3954918bc9b369e263773af75f5113db34acb3e7d -0x96451789adb8264ee12fdcce030fa3fb255c288145f2841445aa342857c49347 -0x280f78075842d986ecbfbe8686ea1d6bee10747b6f96b67cff29f6ff73531f1e -0xa70ea297108b7e88695c97f1ac53a6cd0f05cde24911a9783dc1afe3c66d7841 -0x32dfc62deeecef2cb6a6615c8d7fee1cc6e57d6486f862fe83c0c8204da0bcfd -0x3c12e339b8b7ae55d02b193dfdf009c029f2107c9f05ae06c934017d1480786c -0x040358b52eb1c22d5ae2b4e1d900365faa2f560a6c3994307734d52903adc821 -0x94c80d1b10fdf5cad54e79a2725a6e268a8e76756dfec478494071b18c781cd7 -0x185914aff31344a0e6f2c2bd86e67933596964930295555670ce73f8fd75d7b1 -0x2a6ec38e21252073a7cec588f85ed53f1544d3c0fbcb189489fbb8ac7fc231b3 -0xd4b95e521e42fc31df1770727be1fb1b4ba05141c5fb8ee121ae59bea3b714e2 -0x6ef58124861bb70d4ff09c926f4c4bd6fd7a8258195461c57c6b8705a5b94ccc -0x41332cb35150ea06d791eed9c581cda86c0d55f0f5cb6186bcacd2b0f5172620 -0x752bbe603c192d74adc297872bee29186b148184775039a5682b27316d47a68f -0xb298c207a2374dbff741fd966e6bcc3ed8fde3686901cab7f2bb50754d3bbeaa -0xa3016fec43c9aaa9648d7c2811871660fc41a3744172cf4e0aabcd7aef328fc5 -0xdcdbdd5dc14326b50d49f4bfcd2dffcba4c3d7b03070432d58f9e16194d17779 -0xd7a594f6f01b069a1d6af263426a8506056cd37905e6c09196987824e2ca171a -0xc8d3e0a0f1d1300bae1b75d45285343ce48d3dbf06b94c86e42f94516538cf35 -0xc602ed483ef66d8bbf3be6ef04e01ee1f08ca7b08e2d521ae1593f27a5c9c919 -0xd6968c4fd9e70d3eba0302257c7b47e1df8728d03180f61717f397860de57f95 -0x580a57e39658c5260173554370f2360e11f32fd95b54cbfa30b157512c606fa5 -0xdd1bcec50a09eefaf6fe357f773303d7c9ad1ad478469f2ac90b17d716858838 -0x691d5dd790dd34cf97f3209f8f28c09b04312a762b40aae549b07fed6c25eaf2 -0x0f0029ff07ae441d4c38249c7d14d6307c1cbb4c25ed2c075d53a6ed15597708 -0x807ef8613244a9ca28309f2a63c8234556756c305dc1c472769b1bbf8824c5ce -0xfeaf11db30fe4b28d654999ab64da0f6803d1c733f178fd9e8aa095cc0351e75 -0xc0b7f93f2936bb83000e8b1733983af00975688189919fe57dfebeaac0b57d81 -0x94a83a70dd93c231ae6ce580b625bbcdd55a5f3c40cd976a7827305e5743ba87 -0x3badb2fc7b04ca6fe253ea00cde9f27475fe1de545cbb1ef734dd8e3ddb715bf -0x213002143fbe1a2b40b0eb914258c7af50b31b90f597dc7b30c087129c6d7506 -0xd57f7bbdaede34290b91bec52df0c8930bc034bd94bc8ab69b5447ec2303d22a -0x457b18dfe7471a4bd3a80935ef0f20eb8b49e04661575f1f0b8a9e8eab9effaf -0x55030a05f2e4fcf0f41f9be0ab3a5d6de7a24499e18e997a0e74fb67f63fc526 -0xf8c9f447bf99814a3089e2a3f9e58d4f3795727e2f41ad61b417be367d0f76f5 -0xf5f59c9739ed8df8a5698f22eb82fb71d48b41c4d460eba1d329092a3f219a0a -0x31dd7ef21b9d52c27b999e4eaaf8f25b5f9a1b9c4912857ae340cf1440fda473 -0x048d0fad8fc81fd3fc9dbac55b80591dd2643bd322975537ff5679314624a12f -0xe518ad9d0c07bd8afca6221fccc77eba606b1b21604f1c4dce117813e0bdb0bd -0x302cce0d53a2b1fcc6c599c64c11693d38a801fd92a9c459cdc7c243f05f6eb6 -0x32f7df1ed88b62ca51a9aa8529f7a0ea7f6c229331a347f67de06951e7b61af4 -0x9fe095c5f6685751e2ba53cf8f681320872f63d0b093c3b27a31445c5d1859b9 -0x209bff5b366c47c64d4d51d0881c4375a9da765ea6084197e4304a741b2dc7af -0xfc55b3d2559e3329e2f32955c04f372c30649ab74a92edead6dfc349f4be6d72 -0x6fcd9c3272aa030d944608b639c6110150c6a1c015e34f1682a36e10b0ea5edc -0xe50c141e3230f8492e0ee4524b2a498a214ec22df4b2ba0d40d23a9360aa7bea -0x4d431bf9033fb6bd1e799451199668e23a2ad166940f0708f5073836c1396ba1 -0x3bdf33d849695769845a8d70d401d98ab465dda9c8daeaa858d3292f80ce3d39 -0xa911204e522934cbcb30ac1e143573fd2b1b8042a3d71870d440d06c427b673a -0xd89ec9ab6569fca024df12bce7460bbeba346811b975021cdb5fd974e8d1ca81 -0xbffde909b4949676b83e4078410ec7bd17ec079d2cbb09b199c9da4bc168aa83 -0x930195465268728a276bc51039e62260a116a6cae005bdbcaf614f7176174431 -0xf3d1cc48b6665e591fad2ffb998dd02722ce3da4ef38bf4ad50308633d2c30ce -0x9dd5fb95f66faf52a84593c2fdc297716f80ed9db8c5f8922d81b13dd1ec6899 -0x26db24dc5e05fd1ccc46628bbda9a0d1179cee460bc6205a64ecddcfd4baa6dc -0x8e7605adeb77336ba7c4f3b2b890c52cfac575674fdef3d7bd6d356d5a5c4120 -0x2920fb976508179cea69520a0a8dbd847280dab52cf40bf08e6902ffaed03128 -0xad704170bdea4a4ebe92235720bdd19532786436d0aea60f805fc5bd60add026 -0x383fed9d93957dd1b6975e388249f70c2faf91ec94caf60c923c2d9d23820494 -0x1b193efc0b594c0e36e05be4ada08168820b0163733c6d11082069091570a377 -0x58b07007d37be289cb00e0ee16f9b4ec9dd40526d340f5f312f814cf8a6201da -0xdbdefc0e6871b633a9debddd6714f50362a10092c55d8ea5ea39250bf379dbc9 -0x903874bd0a099695429a29f63b465d830fe99b4b2fae9eb097a6c6f9a40a47a2 -0xef920139f4cdea82da826a274ef95bbf19f146440c494173ec0871150862f928 -0x39b78212b219aca6e6b80c523fe1562c8a23f78ade94a8cc8c26d671bf6c594c -0x75e8ccbeb85cf7013ff547a7f5a5022da345e48412df1ce64c48b48db2ee7779 -0x62ece0497e3cabcc3b0cec19f8c300aaf0b7ab7df5687999cd7e72fd5b255595 -0x0faded064fcd1cdd43642e8c50d3a0732a15a71a46b332c22f240b44defd9f23 -0x8ec75a2045639ad94027144e7faab7329de19c30b22f79697dfcbaa58ea27b33 -0x3b9a2be8406a1c336ada0ab14647d3fbd123fe1273e2d440a95655666afaa703 -0xd3f9b8307eb1bf27a0124da4945cd3cecdc71a62d418d4ea492489389dfd4b61 -0xbe18b9334a861edb63844435e4528aadf887785c61d6a9ecbc7fdbb78641035e -0x57b5e2f1cbd694859048039bbd18f994d974af6008fb7fd9dfd5a12bd0892a4a -0x76e90769be2d059a5abc0f3fc93c29115468646da8a1d5af259da92553d93d9e -0x43e7009ee054095b4b9a5b06a2146eee2f1ba2949bf7da983ae5c605d192c79a -0x574cbf35118f9168dfb8f493c9c7a7cb7434b8a1d1cdf26489241ae91f002cf1 -0x7a925589c4a7ff643a90d5aec18be65bfb237f1d17e94ebf3e200efb7d024aeb -0x57105f32c17c4a260699fe158a916c44cbcc69d07b6a6fc6cd7f6978ccb56969 -0x0d87105c33ff8c6d0dd7aab163b66c3f06fa088ce64c8379e99d699fb3d3ab08 -0xdb1c877ea459d3b969eba67a7b655e03cf7b2c3d0e7755f5db1fd546e3c78af2 -0xde10489749633a77e023d0f3ff6e203205efe4ca74e39fc24f53ce3f1bd76a01 -0xf809520055a113128902077f95f672a7f43057cea4ea6569f4addb4d9d73d5cd -0x3bdb1041b9ccb510e845382e928bb3d57579e15743db712d6b9ee94b7dde0f87 -0xec2458a1ca57fb3d9b88ace121b0feb08905f85a45fc130034f519fa259c00ed -0x2901a2711032284bf3399d43e8542171ed2164065844efcac4baee5c1b63e786 -0x2261634d2794bb0e5efa6c3e52611b261f14e2370c4ff08f6dc5cc1f2b1677b7 -0x88267d059a0e5beb535fce46b42b9e611a8bb65738acc20f7827dae6b8222fe1 -0x9b5726bef013c63c6514c488f354fb33634fc2afa955e180b55d428c3da76a1e -0x8f032a44fb3701018700c9dd78f1b9862f5ded46bca971111070491cab95f5e2 -0x948c8800b9210d6c53ee09cee077c6be1f472d48cc7c6a2d540c1cb812c1bda2 -0x379a368eddcb37bc15f74b61f9f5b11fbe887467790290cc8272305ae48744e0 -0x4a901e5c5f1cff6fa3b03ffd0c562361ee48844db530abf9adabc37c2fe48cd4 -0x5623ecb6bd8fab0d68935c354592d92ccf17e0a52970d472a7e000958e3b0fcd -0xa8ba6fb888e262345704954763054782a22e635852daa0faae43454b4e5025ff -0x978ce1cd9d4b7322fcea63761a1aad1d5f0eeb0bdf84086fdf2d66068486d0d2 -0x3983e35b764a2061e85e33f91eff633e5163f104fe848254267b36e682012f11 -0xb7ee5b3f3752674ca5eaad7c6d60f119551fc7583847ad2c07ada1129a2cc75c -0xcb402c7e7bf7155839ca9a07f5b0ce3942ad1f814d15482aa18ca231985f23ac -0xc574b2c455ba4aab06884e7e6db817f554b4cec0f203c07b4d455d06488280d2 -0x187a47e8741441fe2197dfb300c9ad3b23f26d94d07d6c9357d8edc7afe7ceac -0x53959dbf789ebf6bc52eecd912f1b49b6dac2661598d5c0e06d8966f8befa5de -0x4736a951ab3b28d6832e8341ad418c2c4c624596d913b47074caefa3920cd7cb -0xc9cfc2a1c0773fcbe79c6064e3e45b8d38d2ff113fa797b8b2bcaa29bc0bab75 -0x529b31af2594b66c29edd70fe9f5c4eabb5bb0288ec014f2bd6f415b924127dd -0x5ec8a1677fe07b6180ffba39767cdc0716c072ba4edd3215516653ada6d9b7a1 -0xca90d1bceafb6782a02f82a220e6910b823b083c6c2548b0b35c9ca3383bf031 -0x7c256658fd17f739b1fbae9e024288bd3150a1779d0f80fca467f8a8d9b4a43f -0x10ffcc8006e83b2ea9868b45cf483b4a8e373ffa2ff202f91525a8a15c116216 -0xf4168f9d1321e12bafb00a3a4b8e9177a1d23dcf58a6f1ba4c11530141804404 -0x7352b6a13fc0e4c7ed8244a51d168c11888676f33c35eb79787007a085bdf885 -0x3c8882df8cd3514ef99f250520b04a6f414e265262bf2c635700b1f74fa2c598 -0x5e72aa6d4cf542334dd57babd1dcd95797313c4723c16b4c353a5e83731583ed -0x63e008bb493f40259c802ddbf9229a43926b29012564109479f5c8d5e5eae260 -0x122247a369a1cea73c1353e6af1d7d78b95a13ebbf4c99179c8a95c6a47930e0 -0x3d00273e44295054b94b5d330afee40eeadb4e9b239a9e802ef5bf1ea2a53e84 -0x7cdd674d1acaff330cf9401d4cf92ea861fb2203d0e95a57e7e74994dee76c9e -0x920d8a8507496300ffbe36d826744f676bb30b331a006df624e2949f0f0d7e5d -0x2ebd0a218990ac3876c0b6ca870cfd0daac1610083d43289211aa61fbdce9374 -0x3ea78641a12f598a675277f1cd27c8604940c9b52b9ab1dab853bc06231d6ded -0x179be5187aa915abcb68a33bcb09e9992cc8acf6c3ee3cdbf9b5ed67ef76e67b -0x4b64aaf3cc85d9247c51f25db1b990a0248cd262f835fc493a4e15bf0c8091b1 -0xc6377c27c8241e9ab9459c064eed5f7880d87379ac01d20e364093b0960478b5 -0x0df78a0071feec70a698066230ebd8ec5cd29c73fc1f5c827b79026416544914 -0x63b3155d2807a6b90544a94de3c216a5c853e04dba9ab0cc0e6b7560c49c7be3 -0x5344d8f6a7871dc77751355f18c6494bd685d512716233af17f40647438b7ebb -0x255edcd4922707be092eed0c810004d01b5674558da63e9fedfeea6dd5bdfab2 -0xe77f70a8cc07f89c507293832c999667d06b3a0dbd4cf482c04d561eed46a4ae -0x67e86abfa736887b4c3cc51826025a3426718af7177daeef5775befe409d534f -0x3cb39d1e75de7765250f7cbfde71946ba9af828d8c6b5def47c7ec80a7d94409 -0x09cf4ef4045907322ea811de9052ec7f3daed6ee3b962624dcabef751a51bd74 -0xee4b3256b9b85287be98553a3b3eb38eae3756d4229f3165ada1e018b896b194 -0xc82609080d27cbee5743ebd2ee4daf4cccd584fa2b362699d5ca2ac8dd42a9cb -0xb65f1e32530833ce297d3f8cf80c97fed1e6eabba951f58e97342e46be47409a -0x411810a36c61adbb8f187493a9ec3da2a6eb8b94cd7de3c97e69cba480dc6bc5 -0x9cb0a58f617478ea938521683175f615ed4cb5fc0dde1247b5b50098782a5385 -0xbc55d8ee7ab9ee4f84a05d8dee32634bc670f980c1a1f3f00b8c0993c32545fd -0xaaf31cb1720127d585d24670c89163823f41ca426137fd1896e4d7a4b68e7607 -0xd77d7338ce90e9c6cd51f09ca1ff71e136095bc4629c56798e2479bdb0d83cd8 -0x7a073385927dc7a7665bfe05f49bc2a2c363a7306404ee5efa5ee5fe02cef878 -0xc1d6981a92b5a4898ab2b481b916b5b3d7c74d55e7be218d5ae53e18aaf0a4c3 -0x225609351fb158590c546dcd31d63cc9190af3073b139e0800abda16165f7fb9 -0xba66aa44a8262f855d2344d9f2dbf695d7337287468867525f67363c1e9b2ee5 -0x51fbffc73d6b2f84f0fd429f8b0581bffc71a8ffe3b9c37b4c52565910734092 -0x3f56fed13e6f9b64f7ad823f027d11b68b10d431f8c43d69daa7e20547dece24 -0x1c0000bead63221a5fbdd67d7f8b7cc1e7bfc39c2bcd9b2dd45a2c065545d3bc -0xd07803ef2065c19b18e2b3ff6d0dec7276df5e2fe936be74f5ba6e2c2ccf74da -0xdfa918a8865842a825eb656fc49e26cbe37666865be3758127f080e8904a9e3e -0x11d333b8d74d7335aee51388a789f2ae59f35e11e15c43e9997231779993b5d4 -0x2d2511b571ff61608dedd35e9e143cf056c0f28aca242e5908accde20ffe1468 -0xb8b33d26bde4b324f1c72cd7709f7e44e6f48a5a11d1ef294a9a5c2345958fb9 -0x1bf5385ed7cc90a71d3ff903ad549066fec275979e4fa6cb4fdba681286a854c -0xdb8c22f8c2f660663316ab177a2e78027e13153480be79d96d20ae93a6e45450 -0xe924a76467ef27be6e6c95764b30bd6fab9b78fe7b352385fc2eda5604d43e3f -0xd3eb2dc9dfbd91339bea012fd25f5eea530aba66b0308255d0992c20ea08241e -0x3412ab76e0829b40a58f04980cffbda6a281200225c269cb0ffb7c3ef77e716b -0xdc3366252d9912fe451fa9c5d1105c974923b07bf458a7b8be6715a1798360a5 -0x885310ee47cc4263d7a809dda09fafb9137b3f79d2042bd6ee0cc396717f48a7 -0x2c017c98db2a89feec23e08433caa8eec4b0d7a900244baf309962b53ae7aabe -0xdd5cf02cf6b1bca0b3397a0c38531bcc0adeaa9efc2a86c3ce092fc3513b5bd8 -0xa3d85ed78c4f2a75fb151a8d59e043b1fcc18049bc43ffd5b8e267d74a6914b6 -0x995509d88f5a3367341a3e4ed72d19a759950345289cf044fa1c29442d962bd8 -0xff4898765a99f09c885db9cf91769adb166546991b597d614be1a42e03d973dc -0x0d624a98f17c90e69f0bce3c46d4d871585e4a85075f183d5976920f7ceeb93b -0x2f9eff58479d580caec281370da19314b83312ce7db94c7912fc9a5d0435cb2a -0xf0e33cae0e375487555f0a43fb15123e675995cf9fbde11c4c3b55b37e0eb8c8 -0x61cd898568b9a21c96fd3fe1cef44e77b4e75524bb90559f30bbc37738ffdd46 -0xcc67beb45b27dbd68c77fffb46a0b06e36815baf93e7eb094ffb17ba0dccf9b2 -0xe54fca96a76f308a00a51ab1b11be290692d6b7df1f78907f1ed1c94560bf5d7 -0x24ee1769132b846c13270e8db3bc8bfb4a884b2ef18660edba8d448439cc25f6 -0xc4ae654121bcc824ee79220c1135a87b9a862ec18f02ccbc99f1047b95cff0f3 -0x7540a97740a180097835e3819a4df16e6a825afad0c5ac5a8de32fc02a1e78c5 -0x4cda34e74fc0ddcbfc800d5cd9707b220118bdad05b4f553d1ef27607fa7b7b9 -0x548a72fdf60e43b1caae7a6829b75ed6ec78b17aa4c5fb1f882981bdef916d31 -0x01f70b763ce5e5f7ad9e27a0b87a9ef7aa281b1ff7dc34a2b7b3491ae10f4f93 -0xd6d3e1f9c268a3b1984701a0975e3113d84d0c098cb162e49b95af386fe3f501 -0xcff2cbb98c0ad01774e3c6458ab465dc03118545aa5a851c96788dd46395bb62 -0xd223194730e326081e9663dbd79dc7fc6499de6daf1d3869456dcc362723e1dc -0x7e752247863e03a1108f8a114decf70f3919aa91bbda0edb66d9c932e5f6ba5c -0xd9c3d6e00a20e61a0774160de494a151fcc3a081164cee2507401c42a49fa50e -0x360368bda764d3cba33e5ba3a0baa83cbf9c1c09c82372d5d959cdd46015771e -0xe8111607a8ac0d4a523c180901097ecbd33cce6c3d9578f794d36c211a2582c0 -0xa08b3be83b6917aaeeb7e9ed9b550e57c185b4d9318c7308fbeb38efc8b4c1e7 -0x757528d33a92030190ac50730797c30f99840e94b09cda3891297178e21acf4e -0xc581a46fabdb3459f18a33ab0397709b3fc1a9dfe86409930e2ac919fc486210 -0x2b7bad3d4279ab251d3d9fd3b7be5c846bb6ac84b04d415bf87d8f76f2df3052 -0x0e3dc697561233a095385b0e566ef42dae5cfa7e4f673e92554e4aa49c900eac -0x04c50c71766a6c9923531f0b585250e0cb3cb320b6b7fe87d3499cabf2ad152f -0xc1ab45890c0de1bd50312ba8500a7f8811e1cf5ea434dc5a53d61e9c811c43a9 -0x1487ed9f37a74f7cce5aade899a6728fe1d28cccfabe6e6967193bcbd2b722d6 -0xa3ee6adb28b6079c28ec60195bbcb56b129b93bfbd6fb7615b35c3e0dbd4ad79 -0xc1049f2c639a7ad38a9a01ad94b14cb55193196cfc8f5150de0393b3b1035971 -0xfb81c531ead2058f9be49476299ff78caac0e1fc8234e6b7359f75a63a5c82bc -0xc4e3524ee7c7b08f245b7694fede1408290a7f4dca05517122c4aec7363b7c3c -0x52272cf093a8a66a8ed2483847300f5a88abd867238a570c38aa9172f7db73cb -0x8b3474f07c9f0c76c94bd21dfb801bd0574129ce5dcc11025cab70be1fa55279 -0x66d374d8b42ffdf9f9a5b85c51ebe55b741f62bf1903eabc886f8b6f48ac72b8 -0x1a192fab2b3349938a79d7f73cc5dbfec837ba0bce41e68c741dcbc510629003 -0xf33c1ac3fe453bdc7fd17d23d12580e649fb03cb0c12f61c880496af290e3cbf -0xfcf6bf39b2a72310325f16b962d285d09b93b4fea8d48c44e294683cea68e04c -0xe2a101951d9687de011de0360f7c05fbf71d00b24383da8910b06672107e1648 -0x9234f01f68d2c11ffbda7cb08edf730d185dad3ffc2ec59d365d7c328d39631e -0xd6c01b126d33397726f16ebe73da9be11237a639118e7c241e7bcf31e5737366 -0x098504add2a48600dc611870e0186ce6912c43a4cda6b3ca96d7efb2e91a3f05 -0xe7cb67752e58fd56124e8ed47b3fdfeaef08446b7bf72bcce969ed19deac1646 -0x9a5062b54fcdafcf8e0e820ba7fe25ce30d82e17bb145f517e010775fc54bb0f -0xd34380261887ebf1d9b171a5f4115ebfa01eb515cef4a628d07832f66a58c6d3 -0xe7939d1eef30822b84578a8c1d6e8f00194ffa720f693f10a7fcd2196623578f -0xd7bd005a4912dab3912fad60e9860581efdac2697cc831e5c8c19445a9c37f31 -0x81dffaf50374f8d585bed61e9d092937db99518e9752cb2fa259090b32b14f07 -0xec21302040abd76bd4411494596269cc1d25aa682561cd07c7ba08da4ad6f7cd -0x6fe61d0f79cb35dfe50e35e14a4e1a843e78993759003907df69a90138a5e37a -0xccc094eee4db958cc0b0c86b25d8846868634e228da7f4af707b8806d67413f0 -0xef6fa3cfe6ae5e5d36b741f1c69b6fd83e60d4383a00577fd09a7476707443c0 -0x5ddccce572c4f848dda99fcf868edd97ffc2682123551f6a95838d44986e1c62 -0x98fa3028fa71ccce0a9f64a66b53a6beb37996045b57ef217b763ca65fbd7de5 -0x3ecf70a2f023834dff489e9d2ddd673e707fa16da4268f8490c50146a411aba9 -0xfdda4211f87064ca0177e361167ad30076a57604e7c989b1680ef232611d2187 -0x9667a40ff0b599985b8f9a6981186c21b58a5a82cc212bbe27c0e4d77c33a381 -0xddf0e46c3d61a58eb0bea1c853dfbb629aa8103ae24ff627ca08c617d16396a0 -0x8ba06801095add7d9b8321f16387b54ddb45c47d97ce75e205e431a313af2af6 -0x3fb42ec82b37483ff08ac03857d7f6c595ee1944a894f031af8cfd9c4d96b961 -0xd62264fc3c9c99d4bc5fab727f5dc699bcb7b5f4a10107baee20c63b3ccde2a4 -0x3af84142e6bd19e411da7aecbd41aad6e00d0c028e9df5dc5ba18063959e0815 -0x084c28c3f4041a08397c848e5a4bb97f1d3ab4befc99d0138d4dc25140f1b8b9 -0x1cebe3ef7494f9489c8fad56815fc56061d39d71fbedc4deea6b989f9e05e275 -0xb7e0d2f53130b17080e8849afcf7f3287a35eeacc0ba56719f294fb83d369178 -0xfe8808e50e5b907d7cd3e04ca7a99af2b42ce2450908867f9ab48e4dce4a7c31 -0xeed88fdbd07ff2e33cb8ee341098485d9debbf56e68014400b49732d3a426ba2 -0x071ff87072c1faede98dd0f05721fffdc6738973c7715cd9e5ac749af6793450 -0x3549311dce1aaf65334313391b995c7bd086e1aabe989fd15e9e23febc3e9cd1 -0x150c2386a271f253e92795eb5bae4afe4bd8c94b663ebcf2e4ad891f03ba9b0b -0x9284dca971e5889fef35fd42b5be2c4b4c1fcbb8be8e6453388199b64bfc6a87 -0xd4de8708dfe6c9e22c8ff3e4c45531ba2cf8a9ce1ac3d356c74e22f4e9eb327e -0x86ee69c8d7158690146cae50ca962e495c1bf821155d26cae424ddedfc482e1c -0x13950eb420807954c77ff771d891551925d8d37cab2ac02f849a9c4d62d364e7 -0xf99a6c0c132bff4f5f1fa253f148064510a4b90ffbb682be91dbc19d58794a17 -0xeda6404a1faadd5809d130e24ce307e3570609e43da801e5d0ffdb56cc44f094 -0x8240ef1b6f59ff4b9210efdd39a2e7db383bb6796a21ed4c872280634da199c2 -0x23f9c108064731c2467eb4c959af90ea9ebaea29abb31d40eee1e7baa964479e -0x06004cd208988afea74d8037456eee03c43f92e8568772989fbae5b54c33fe5c -0x2136ebc5918d882988534757c92ebf1546691568064f47b98f4694c03cf0f60a -0x1df1a6cd6fcc99b0fc049043a744a7750f48361519f505f77c459b10eed5aa32 -0x4697e14dfeda8f4ecf6aff835d09f0671f6b36271d12ad8bb542df727d8f5f53 -0xbb17f3149b066695bd3c7c950a52a811f8d08a960adafe4f0b942058edbe925e -0x2e4538e1327220a275a122afe30dcfc1cf6cc526bd127bea0156483c6c4fc3f2 -0xdfbb787866fba5241cf009f122c79cdf3178d2c9f52cf876d50ba30a09768618 -0x448c2dccc4efa6b2856edb76923bb7a527f35aa1d1a9c4137223e3ad4e2af340 -0xa2bbff01349823246d5f2a641170b3e2b935c5a5b3f606ddfabbe5df9dd98abc -0xabb6318088bc28fcb2cd03a35ca3a5180958c83975b966baa3f53306529618ab -0x3fab7b73daf744c35c256030dd45487a63babcc7d12b5e76b69d08a36a5f0fe2 -0xa136f15d6cdbb219e658833ae64bddf9cb9bcb1ebe47fbad58d492c9b5d1869c -0xb9e9844e7aef75ce804715512889d8f5d6b28d909aa0ace0bd46a20ffab87e50 -0xa85888c290c56b32bc7b15033ff2844c08f807343eeb804bd30f35b0e998557b -0x3085273d01c85679cacc783880aacb94b450340ca2ba01d10891b582dd16a013 -0xa6cd319ec4ec12cf0e55d15f3b8c94c5a3b1c6f7834b659f86d9c6853af97ce0 -0xc06134b106b70398ff5c5a662cd7e2b2a8052ccdfbe61f3878350880465fc1e6 -0x411ff01b7dbd14219c485e474549c4f48b04e1cb779cf7d0bb1cdf6d6f607246 -0x4ce470660ebf74cb75cc214daee9d9915ae5fa5093dad0b2e786ba04e4197b6e -0x276640ab8951cd9df257d5e348ac49365ce77c7bbd348da1dbc0b2e9b7558fee -0x7b30390d852a66f675565087ad8c60132f87ea2cc2f69cdfe5832f3c6b4a6862 -0xd24dd960e8a9c29343380e6791003be59659045883618d6778165bb2ec8921ca -0x8886e63aed5240b1b3fa24be0176f9dcace19f507654a098c4a2d14b308ba4d7 -0x3213847910f5e72e508c43f47bd14b5cd4195c337014dfcf6007a450ae02d7e4 -0x8aeb5c0b82e08375c8f2b0769a6aa29924d0b369b16852650b38d07afd229277 -0xbf65aad5169cbc17ad20fee2b22cba16af31194ec5f9c4e2e0df4035630afea3 -0x594a3dc283a36cca200256786f5e73fe346313743b146ca12c0226bcd896c5b1 -0x436ab97f78c2a52552e33aa21f42c72cf7a18e2b583cafbe25a6b1ec3a246595 -0xca7e43135456a55448e3898e75bd2cfa9dc7dcf6143351b9d79bf82c1c6fe58b -0xbc7df46914990da6b88361b9fc11a62b2ab27dd87cdef0733fd3a19e5beb11a0 -0x054f17df5449a15209dbae76f60aa41ebeb56c5a6f1d70cdb72b0e520855f177 -0x27e91c4c36d5ae125aa72fe2a8d498851307803fe823dd2f270860d274934662 -0x201b44f575c820ee5887ff1a3a0563fc6b1fa2d2d8d4805e48a36d954cfc2c98 -0xa28866e119f1cf3531b43bdd36bfdf0c5d2383c4394f60e12d93added4230620 -0xeff8819ab38607f0f7e467f1bfab7bc4814242662f58bcf1b0d2eb85da423683 -0xe4ddc6df3f0f4eb0d40b7237fe1632ef2fda992d8a8c4b683fc517384a7b1bac -0xd5d0ef695b483b96d535cf6fff0ebcf5b01bca9ae34c74e0e17527e9ee666464 -0xc13b2111e56612d67c6310cdc52ac3628a3da6099f11953e34f8b9dbec453f50 -0xb2065ad486dbb5dceb0afff25903a69f3ac9ce302042328ffe38f41a5649d339 -0x7dfc5ffc47fd2a78b660737705d047f90a2da70ce3f00e150587c3bba1bb09da -0xc7f589fc484fdeb0cb91c7c5445767c66a804bc6a489e038dd354644ddc8c902 -0x80f9591eb3422f8b4da772ff68d839ccbf37a3c80bdec6a04316cd9a9642131e -0x9716039ec163d99a8339231665da82a8cb215e9662ebf426b186970998f0a7ec -0xa5a73249f6c27c79c60b621f73fb4eda041df63ed4c9e0f3e0dae02419e02e59 -0x305426d83969610d8bd4e43e58306bac269c656e226b949b9d62c51d1470eef1 -0xdd5183424a41618d5823f0712e6db778e04ef3417400a9adf09077db9d40fff5 -0x93aadcd793585d5e53640a5766c0bc826be6227c705115d9ca645fa4c3b2b52d -0x96b082bfbac05c7f7f41cde4a2cdd61e14599adcbe5a0d3e6b5c12dd9b7c616b -0x150f03f730e69c59bc1a380f56edc3e7948cdf631848b797a2c7c4de50002063 -0x8d68f7ea487d0e259bcf8304f169d9f8c8bdcb34225b454d118363064e0b1f74 -0x39eb1e82b6fa25232aee055675d1b982988a734e56fff531d3ebde7e24dc3b11 -0x2d9acf03007423c686c21c3a137f0922dfb2c6c4cd1e79f700b80511bcf6b49a -0xe567bb06dba4211bdd21b8efc6cccbd67fa2f16fe580835216c5229ec87c1d82 -0x081c41d9de14445382d7892724ace4fa0ea56b3803b5725f7728b76ff103d426 -0x2a65c909982fd20709a08ec75f69e1687addfee86bb80a4adc5ddd0bbd921fd0 -0x41322649eca0960f5712004be4e92fedbdab6dee12875126b0785c4409dd052f -0xc0c0f514558d0d1bed89e67fe5ccba6b7483e3f1b61bf5efe069d246820e7d52 -0x9b63f5f03e5ebc92d86b0e19d0fd35c3d3bbe8a8fb00a106b0e8ec0c14440b59 -0x544dd7611b1bffeac6e649bfa8c8dab79c8bf3675c561ade7d7ba7e3f6a63793 -0x3695faae153749a10d8c4012edc50c6ab2a9a88b352e0c5beb03f0cb4f4bafb2 -0x3186f6f6544d642328267d13b58cd548ef7da36800fc6c4b5fb50ca24f8c9206 -0xac847355ed678bf3714c079722af3332c5b91c8e71696b2dda1b17bedbaf8a6f -0x8ce5be0ad867782448ca3892b39d5df8bdbfc0686cc9be860698c9577de1ce33 -0x5be7ba553a7dd5fccf038de92db5bb0aa2774e07185d626e2b4bb6ffd79b9414 -0x7859ab7301fcaae3f0d691bc34583e6094c29bd56069a5b383b1e97345fc8fa9 -0xd833af79c4717143275fd66beb178563aa89c6dc8a758dc38b16212454ec5906 -0xe261870f6451aad403b70717c714acf738f9b30b91d7a5d8da712c31544fd78a -0x0062c890defdb192817945cc49e2e93000708ce835cb22ca054f64c51e53be01 -0xe0d9c1a592f2df4f915f0bad3a4534607b4d0c955d4ab7978cf29fc78f1897d4 -0x5e9c55e36a8d6ade95cef94d85003b2e302d2cf2b69ecbd189a687d9095de9e4 -0xf4407fc3fe84d3dafcfc926792f04c5e3a46ea4cfa6d1e591d7e9948fffe5700 -0xdaca7bd3b6cd6472adb4e3c7c27ec0d65e2a0d5e62648708ecae47181ba27e90 -0xe449463f90aa9aab15ba1a41ba602617035dc798584d33622eab855b681d703b -0x82e642c069d2edb72ffea5525bf543dc6fe04cec6872a8d837e6ad8cb263bf7b -0x6582dbb415b3ea2d4901cc6a0232b9d2f58458596148d3456aec65e8ce2ebc7a -0x51329b9120d826867b25a2f65ca2a44a99646c512293942f67f236aaa739d287 -0x326f7430e866a1fca5fbb8fe43ae745ebd080a19415bcd213fd293c3af3124fb -0x6708012292414dbc3a23f5dccaefccfd23198d5a185e4b540a580152a04b761d -0x5c35dd732627d2a35f45979d2ba3a6edc1bf845e91678714c4bcc122ef1de073 -0xb1dc69daae04dfe4d3c4c1b5ba5cec57af6ea342b8a52a1b1ef68dbea8a32124 -0x7c19e337c8b847c2e8e566423c363a2542d393a9525afd8810f74dc236eb3637 -0x40251b162b8797f8ee01abc7cc95792011a06a12350e0110f14488e308719100 -0x71afd18467f2c71bcea7b7f15c4094bf769c98a6dd2210203833ea0b8dedcac4 -0xe80d96e6d3d892a73795f8a42ebad828e73bba92b2d8f5e561e214abab29598c -0xb35655f8a31c918403bf2d80d0923d022c6c041cad2f6e0522a3e086ec939659 -0xa01a29264863efc74a26d8c67d1a1316c4d134a5c300ce2c7eccb0f1fd92e325 -0xba8da08a8cc496cd8a92dad92148598c3f7cfa56bd32043b4b8a79691e166545 -0x235bdffc30dda1209ad00059e59b62871f7602254331224e79db3c4acf607e0b -0xd82d2a7d1a62ed66db5c9998453427ddef506edd36678e3e1c00b93a8b5791f5 -0xa00706e2515f1ec08ce9be526cb11543dc5e29837b91980877557a9823c4f35c -0x875fa1f91318889d8af8e64a87984a9e67942fe918e6c7fe95057be96fccf0c8 -0xdc6c911b3e5c8d226b58ebb85338085687dc9551b730f4d269b0942eb1d849f7 -0xa136bc2ea54f1e74066da729470d3c91d5aa5defff9c683ca0ac06664d326807 -0x353306baa11de32c99761999437b382794e6ad7721852fa2e335c21f55f95de8 -0x6f87db67be4c2aa259018f59c5e8b23119b88b779f65bf206903d5bb17442c6d -0xea14dcf714e6c89e2bfc0a0c8d03b0153a9940898049e5c9717e94fb800f6d71 -0x72f76bb6b84307d56f4e1418392e0303ba41e6d91e591c92fee4f63a85a3e908 -0x847af45e3fba4f503c109348f68610724b387f03e1f975d232526de09a5daefc -0x420799435ef8aa8c62b7f16b6df45c6d5f99c17f3e6018e8989e71328f0be94b -0xe496ee278862143d5203e3b7ea635d60ba79af53ab35bb79cb472e846d75c455 -0x55fc435267b9a4696fe725aa3307979e5e50cfee19f7caa15b695210a4af5474 -0xcb022118ef52c4c06629e837e41a7ac7749f2f4585e88d9c7932da46bf8a267b -0x3fad7bc78e0b6a5d15e02f5284e7642668d752e8fba900a1fad1bb83571cc758 -0x3017438fe0f612a18a4b3b433a32d33582b112065c231248c293e950fec80040 -0x9e6a9616bb4dd57de5287fb473e9eea05b75ec83c607bcf9e80908776ffe7110 -0xbb8fbf4a423f43230e29db900c34cc0bbf54050cd447e699ac783ebe05f37237 -0xb8517ac4b8f7f467397fb4bf18ac358a65554a05647e06ef0f53fec141435ea3 -0xd05322171199ee05cfbc3bfcc5613614d0b541b1249e870a248c4ca7b87538ea -0x3bb72237b5fc924ad616c8d56c4a25afa9e1ad727696b81bae9e0322f0cca8e3 -0x65160b4a6f358ae7da7890af7b7f466fbf216bf8961ac1bb9a2a00b62366ea90 -0x624781f11dbd96b95b9ca75d4dc0420a6cf1e9f2dcfa5daf3c841b392d212ae7 -0x1e3af314cafad931a5e0c9ce762fdb9ae1ef9bef71ca0b9dca771ceb5d69b1df -0x476c9d55b3a4b0dd84e8b0b6e94b8c80808b768781d2fb93d976bba58f37c269 -0x2b840831e6ba2ac467ad686b6c061f73b71276b57b8bd39f3de8f5979176e0be -0x686551265ef69929a8dc08bd82a12326f9f2076ac2509fa1c8546cac780f98f2 -0x0ef99d44a48851572ef94f732a85cb9599257be75b97550745eb99166e3066bb -0xa237cde972a44f134f9b60076b81cb1ef96cc4c11ae20c53cb6ea1eeec5cfd03 -0x09ae14d3c895abee6fefa434a86c5f875b02dd6b6a6705c1ac62537cb8f7f3e9 -0x79c7f7ffb36dd21d3801717a84d2ea873dcab319ccd14a8dcb97eba11317c998 -0xefb24c31b09f0ed82120efe3586de1a174761475b8bfa9dab7f109463cca6757 -0x800712d47fdf6c3a63b47358a555ac81b11b6de14cc154933c862cc23743184c -0x3e901c546ca41831fdb2ccc16658d9ac8ab439775675087d49ec989e0b7e0979 -0xe62e7d2fd434e1bec9ead75e82af740451f0224fbb414119f1a936e304e96d19 -0x4bb720472632b5ba13be83a93254cad4bcf4458ba271294886df0af7f8758d62 -0x5e5344a0aae3378336ff8ccde722a8acbb3754767540dfe896f9d6c791a11742 -0xb7806dec60c4645009914682aa8970b2aefc0cd83fef92eaac349e6b00ba7023 -0xb76be98d28f6742779f28f14d7b19ce4ca31233acf2b6f291f22c21001b3c2e4 -0x67a8fcabf9f4dc0a03a7605765ae04608eaba1e3fb1d199c4b76d477a1953efa -0x58eb6d8611c768f7209a821149618f2ad8988a5c179969348ca2d1c5eefa08a2 -0x843979de5943a9db94c63e39bbf7464eae9d47bad2b6067052eee952aa417c99 -0xf76a144cbd5b8a833b8b97a78f736bb0efc0825de78419ffb132fc95aa5767c3 -0x661d45dc16f4c844702860c73f9423b1be4cf61f78bd16004ad3fbe34cc21ce1 -0xa0e0981533f2f8055ba53876f26f7266429c9e1502d30b734d57a26261bb3238 -0xb5b1e199234282e8589e384f4662ee5175c58c00f94c82a5b45d5f7b0e80fa06 -0xbc920572cd9a7d9840610fa5809789fee3cc9ea046c587590e4868e9c3d69e32 -0x9145b0fa2488fc6e01e17f803f117ed47509a62993dee12d3de79a040bc3384f -0x12e476ea48a2397c92f5d7239c2d5238343570ed7acbfe6f6d19049366c8c75c -0x5f6206fed83ae78c7bf2b52897f5051ab693435579d07bdffde73bc684c9c33d -0x6734f69964d7e27cd851097ba191da822e215b1ca8b148e25ae9d46a8fe1ac44 -0x03b528959e17057cdb5164846e46a2c41d23e7b795ccb2e8bc56fc0094434ae6 -0x9e657c30121451471840fe4435a046544bb68a3206cd9b5ea7fb1b549cb59f6e -0xa19037f7d68cc1d71cdbec9dbf22bcaeeaf77ee49d744fde1be74c481f94d847 -0x593321e69cb1817b25691adea012f07c7904b090ed4b022a1d62c83ec6e81af1 -0x9b4e3a88c805fa6d76d8be96114507b7c4d5c26acc042aad70bbcbc7bc997926 -0xc41a9ba7e94de28977cd93571668b8f5070e22139925338a52647d479c366d60 -0xa0afed90ad48ee82bde044cbffa1e9ad3b0f3bdf056ee4e3145018b8dfd1d414 -0x04402faf617097ef79dde3dc4d9b18057bd528f3382f41518a50b9851c216413 -0xd747b8ea5db911aef1c37674246ad5cae9bd67b668f6f4c0005179bf5d7e093f -0xf404f6d8bd1910378ff43667824768f999fe1a94135fc34d96dae1efc11aaf94 -0xd218f48fb786623bff601394790454c2aea46b4d45b5d6fd1674f842fb0b0b0d -0xf5515690d22785cfb9960e7ab6c63416e24616975a72cd468cb5ae8fdbacc8a9 -0xba5af8e17fb384e806cf53e90b308b7f4880847e73b64266f7d7cc7459dc63c3 -0xce278412bf3a53a723d2950816e52db037497755ab3fad3df67fe1c9314257b5 -0x58d0bd22a69b4f45e3b6c9d3b23c8ddd5aab7ce0b415047f72bddad33fd9d163 -0x33726e05d180edbe501af9b5b235a4869481b0b4b061696dfae2bf31563f9e30 -0x5b78010d7b4f96589974235277f6215a155ed79616d10320ed0f9a2b3fe0cd12 -0xc3efd94a0129bd4441220b5ec405e5b12119e0401253b188fdf911f82bda534e -0xc7057cfe26b59fd745b19ff127aadabfcd4bc84aab40a295349ed0aecf79ea97 -0x937243d61c84eea0c6c4e06449df71412793168d57d3b5cc87a80e3b7e600ed7 -0xfc3d532c390181e34c98d374e0a7e5e0286c5083e53dd98ee81c8af59956eed9 -0x50b61f8baee4d33a47271174dd887e3f150f5f07162d6ba75954171dfe3089ea -0xfec42f6494d24554d51d8dc0b3fca1f4aeafc648b401297191676dcf56c728f0 -0xb27689bfe1ec4a3d5479275a0fee89f184b5e02789eef57e8a2f6881f012295c -0x4380704d7e50bb33cd8769e572589a8c545ac9ac2d7a99e97233451c7b7fecab -0xcafabb6c6e3e6860287429ed2b38a3a9862fcb4e19db92026964d0bf0d83a61a -0xe8a1153cf56a100fe93699a3b0b4af2cb45720bd392a85eb7adba38e18860708 -0xa18d1b3dc8305914e7dd39b379706dbb809d8b3b97479fd08ca306d4cd18a815 -0x741eb8aa636e51a8d64137e8e214258c0b39fa65084aa24b2eb8d6383050750d -0x4fa4ca51473588e60529d3e06c7996e73341adca090cf0f114be2d045e1c467b -0x815370f2715f64e6bb68a133171b48d23cd610fede92b58ffec32e533f456f28 -0x2680a28c1af04fb518669796d0212ad183886a22c4817eb44a3bdc712cd86222 -0x6f16bc4ec80a786110814016725967629b2a5032c00fa4f7b384f26e71549686 -0x0458faf031cd9907ff46f04dea07af83ddd29e4af7bc21751d11f14721ab3a55 -0xcfb4c31766086119b6965c655ef85b2295c7de2f88d826ce6afdab220fbc96e7 -0xe4471fc7faedecf487d93c295f5a4bd1f85a60fa03779524344204e88ae1960c -0x2e7c387c1ed5ff872df7d1025c47b2baf96f9fd7c3c0a61c0b67abb05770ba78 -0xbc5341a6481d6d1c8050e36474d112c2af6f7b14125e67fe3570f8ab615dda97 -0xac0944501d4466d93c6201685d52322e7a89052b76091fa188572112cb0976c1 -0xe31f622f56792c38be4b12b1a562b2b5c97c9cbc26bab7a60c79b1da9733d585 -0x6c591667419c5a88a359d406f765c3f383b8d8c5d4f3d643054fa042339994dc -0x4f5ead8a71425bd97348d813c922ffc8151443f84ec624c638f3266c952eb494 -0x4049ccc337862856e3a7a5e595d7f85ceb7f6fe7c89c64cbb6a6d56694fcfc81 -0xceea8dde150ce748ad510fdba4e84cab91c82fbb16461c06946a7d264115e1d6 -0x5df7fcac077bee58c43654e92987aa1dda9074e391fadf63f861cc8fd32d8b37 -0xd743d20ecf718ebe1f62a1e56fa359eb3aebc373c0b6480f3932ebb262bb62da -0xaf7fc34876f71451b7e03c7eb8a0cfc66596e9ef8cc2d56fac7e94710d962c3a -0x255c34500a9c7d5f94c50f045186015ef4a7be6727bd28cdeae91f1d54438c45 -0xf85e45a72263b28d302014e57132da7c6f88851e556832b470c93576d483e635 -0xc54c83447bd76b13fd6e498e3a85217eebc68061de35d1789409aa2960e4ca84 -0x70c3713ba7361623aebd50abf4e11d5eca7c981e4f8d60bf50fbe8b9b4681920 -0x416ca5aaf62c4dc3975af9691c606a29d740d7b2f40169ebb8b524477e9a35fc -0xc3608efe8bb1b42a213cc6a8c39df4bbfe405df336b95b6249c29d31277d8319 -0x3eaa1e9b6902e41275192236cd2fbcf3822a7e33d1d322a05becf3aa6aeee178 -0x477893d2e41e554f055294432e08a431b03ba0aa876a6879bb91e9dc7642d97e -0xd48b388d75ee057a21e69c64a804091416424dda232c063ef5e2f7c507265aad -0x382c6460249e135af3b48817ef6f3709cb98392307382f9bed9f3c61aba543b3 -0xfea976a3f7db19c259f0dbe4bfe61a8bf6865f5a4250b2a9b814a767ec28a2d8 -0x64c7caf9b146e506096f035d87d1181bb051e42bce6d8d7ff10ca1491a3ae72f -0x8798025dde002bd0a91ba21293f7653269a4c5c15cf130f4e2dea9816e191552 -0xa2c1df71952e952e89fa4e0988b022c833fe68557be431b90d7e52d35993429c -0x655f3089503b5a5ae4b9058b4ea916010dbb4140d11de9f44295334eb3abd4ef -0x0662400ee024d75b9aa94b7bad708a48c8f3ea930b92c6d613c2054a36249c9f -0xd1799154336a3b239d04acd6b1dae168fa09e53483080d63119ae68064926f3e -0xf024563ec404d3b8f5c39bc4ccafcec9660884eb5e0135b7784c43cd5c88f116 -0xb2fa769dd94abf6235b4ed76da210d05ea07a2ba4cb9048e3b2ec0cecb63d55c -0xb179f16b12eecf2e364766d8a949da5ccf140242acdd9deb40871ada86a71507 -0x52247681cf20873e44adcc825c4c7117a9c6772d59b91c888936cc4e508e175d -0xeff9d1723ff736e751b1d93a81092cec769f6d9e174cd6f14601094ac64fd9d4 -0xbcdcf1e6a478fe622c89eefc0376328e6ca3fc5dcdbc504cc6ac167f215e69b5 -0x525de88c26461cb6e313251ffd81580d2c9afeff9e991160fa310286239f036e -0x25b6c1954591916fe5228d87705a9baad5df24fc68038ffe8dee7055a1c2166f -0x1da01101f5a9c36918c3103959acc4c5c0098cea2c541eebcd19ac8fcdd33c13 -0x5fec423375391b62bf080ed29c0188cd4e0493fb18a48c4a5f53e5fcc93376a7 -0x9ebd897467b76e7251a13b36bf9451f6bf9a37adf91fea2327f7d4d0f860d9bc -0x4507da9ca7a58e25ce3faa3b0d007b022d771896949e285a72d3e97d7a9650d7 -0x24efe4d447d5e84cd5f51a0c3ccf82df9d517bb5a9d5dcfe5efcab204105bd35 -0x1c12c54c5c673f1f6acd557791c99b96c9cb99900600f908a2f2a701776cca8b -0xa79ff1780bdea456f405b4dc9f116e750ea3ca82d84703e58623ce3ad0336157 -0x458eb86a4e392622c9c8425d4d9b84cdd2115cd957c362528164f40760d64c12 -0x6a170bb02913360403bbb427951842a8de42d747bdcc3b0323d7aed7fb2ec5e4 -0xb7e7e8a28dc1dd592cf271f1c954db6dffc8fc22d6e2ae1409de13f5db390cfc -0x7be24f61550912e97dae903d3e39321ca546b4f9a67bf4377aca300c7dff6208 -0x0d14be224916cfea8181e590963e94592b9f4dc2bcc5abd7d1c91bcbb11148f6 -0xb4dee85f093870a38eee9b011579f489d63af830081ee294e069a2413ba5a678 -0x10dd3c20ec5b1534c6da2656663d637fb3864a9200ed04be865dff488135554c -0x643f53738c57e69553b8ca6753bd73146209a91a15a3f3bc0c8793067de91cf7 -0x2c6d2914cdfa463ea131318abbf0e0e9b79970212b71cdd36bc7fd343c8a97d9 -0x41e4034ba15cfae899b5c902a681158f684433f5450f98ab679a00de34720dc7 -0xbcdd62e3d1ba88559c1bb8d32b7905d5db9e214f78910241bd29a355bd2c95db -0x307bfd03f1515c2eeb974bc9fd0c0aa3c29b3444630bbf96c4a453c632d208ab -0x5b6b548598d68982df57f6ab151def82ab8c44a8d0ddc2c921cfc64e43259a83 -0x89b8b2df7c6336017e1bbb70571fa1427fd18656b5883f07caf0d51924377bdc -0xe44d57106d9615b9cc1850734a258ba95ff2dfae7f195bcd228ac144dc7d2aeb -0xe9fc78d60cde92db79ee770df17d4df617337a05aa4ed6e60820d7db89eafc40 -0x8e1a12cf11ec37a98b79a613566ef07d381f6e6af9d4530184d3ce478d1c5ed8 -0xeb01431811e1cc41d0d7e68563d447e430e5a13db516f52b944a85c93c50be7b -0x6320202560d7e80645ea0ebe7a7c3ad94d65d1df3457a8fdd46f8f5f87f712a7 -0xed5b3a374ac6cd2caf7ab28c1640320af3e37027739dd4f00c5438d9f612063b -0xe76913e8ebd4e6cd3f8b722d71618b502bf2309a20d61f24e0482c5d74877754 -0xb22c852bec3eb36de159260cac1bf183bca3752efd44c9bcc8e83d59c8e07984 -0xe1036c26c38c66cf4c7b27d29e25c65dc58252fbcda57a14991602dfa398ee21 -0x66e350d544bf814ea5219b159614f99460333855d0c2d7446b304c66ebc1cae8 -0xe231530aaa394e078434da2109026cc908d1e4ac8637f3cf86fdaa89bfb4fb3b -0x49ae9ac399eddabd94a6c25e560de6d1ca8e66570cda8bfd6d48010b0c622df1 -0x1e98adf06b67e3a897fff92900dd44870ebea4923eceb3b70696c09c3faae0e5 -0x8cae60b4f4c95a19662bc24b0322f57efbf39c1e633861dd5dbb31c4d8705c16 -0x4d5d4e322c30bcf13e92f056da61239020149abaacd99b66ac89a76822e4e85a -0x817ef1042809ca9d611294faa5a285fe9a6b4938438c59956564e68a6c0231e5 -0xad839cfa7a06617eafcb283289c71b23e02b40c379183640fbb746d409a7789b -0x054836d20f759465d505c225b37967b1448ba6cadc9c757167f9ad5693709878 -0x3e4742472f67374933e346b85828edc110a993863d703a296411f0bda14b3e71 -0xeee76a3d2e4e8fdc26056202b26b025e7012f9a5d07a9cf15f427cf892c77098 -0x3bd7bdc4557f933970ade4d5dc1d74f38c9dbc6aaff086aa116d73dab55a8124 -0x05aeeb4ca6905c11944c2d6f193c6c938b063ad15469d4829d00d3859b092dab -0xb33c8726162c00fe09bb2e4c99731e23e259318128bbc3a17275381386f4d6c1 -0x58c988727e2340a255689b91883b5e9456ade7c289547c979632d98d6189a6a4 -0x91a365326e12b48147dcf941f610f2971790e09a2eac059f496e85177087a9b3 -0x93697f39680283ef886b93ebbd18ca795d307b3ed9415d8eb5dd0c850f855a73 -0xdbd4e4a05013bba0b2a9bce5b889fdbdc7446f6453ff0bd0bef0f9c2242b61e1 -0x53d4bc5595d27b5b45f2e94c75d69121f414e3a1cf6bea98273790e8484299ef -0x83094c4ad3dcc54c60a5d4789b271e89c6b65e0a7cabd659dc30383d806e2d53 -0x97b9c7cb604a9c68c6e15b73d9fc3d5349d470b50ad80548f702d22cf331b860 -0x84299dcf5cd6def81a2d1296601aa510cf77dd4ba7638ba7d670a12345d6ba6c -0x37e23a8d2ede9746f04f4d1efb388862c8dd1fc5f98e893d585145cc12dacc0d -0x70ad9e2fe54c171b29d47980ca9b05fd2b56e9fa8c50055cc2b01f3ba232918f -0x159fb55cf80a99f8351a9b610b9054ccc45fbf9eccba7707d40d6417a04cc425 -0x97da1743ee66b572af7560697337c9c28d2313240f06d15e9753dfc121f8c4c1 -0x2af6ecb17f40d893652a6909eafbe1faaa0f540afc7d6ef19ac69fafe9a130b3 -0x575d4409a40e723d1a56121d8af93626d3d7f5fc71492fbe5ff5e8035df01906 -0x270896adda48cf8b9fc01c7409fe06735d2af487378b2a55e3225f8c409bb441 -0xe9c3b32fb21538b8b5461e5a252b7d4b57d7d6ac4a21546025fdaf8ffe4c0765 -0x904904dfc0296b15206a1a4b37d06aad7410c9ba4221b9db39d505b2279c51dc -0x35b5a0c16e41d78203dd9432d2342f15c9997df32fd09c02da2e1ae822a69fae -0x04bfa563f6aa220c0b92a15271cf0c5d353175fb890208b0b0ff183aec7c1e0e -0xa319477064b675bdce0ece1af8bd2f40a723cdbc11217244197f972c54430864 -0x957393b223e719dd9b2068bf59e84e05ee7d5424a132b0bc16e357e0e4fb816e -0x518345ae47fa9f481a5edb9fedad3270ca76ce72293197badd1f2e8a43df09b6 -0xcad458305a735c20b0eb111a616821b523db7b63d8993b45c5d47d58c55b137f -0xc2da683d1d1f7cae95cb51c00df8bd24232c653d423c1a56ab0368ea7d79e8e8 -0x193e1ab4418dd42ffa88fec037be2df4a1a1ce58ba7a194110ffc765815de533 -0x018dea5f1d55b2eda1ed21f8f9b5b7ecce1611d7370c633ad8a2986961f403a8 -0xd7536967c4c7ae46ba35f91e91f20888bb2989d5346ad92b0e6ba8765001b6c8 -0x585ec63d62d813a9fd15053a5001d02b468598b68d22aadf3a82d9dd7213c66f -0xe1f62e9b12d4e051cddb642d36ab37d00db80e338e8ee430ebe36c57e9790631 -0x81e57566141ca98449c34bdf17262dbee2a2db8e480f07aa749b47018a8765bb -0x58a377fcb4b82d81af879d8c4cca9eea63a2cc1b5c75f131b93f9415d1af4dd6 -0xb2c11128774f9299e44b90b97d120197afb09751da21c159ac776f418fd11456 -0x71fb39192d87cd93e89c117f93c0050d324ae97e5889f2c0e00a59387c4d0aef -0x0bc05017a7ae11afdcb0b798b853cf8cf77062ad580c6a94646ea52eb5e6b64c -0x3a3237168483166d04e4ae94c1cea1b4edfee40e8cbf71135059613a5fbf2128 -0xc5fc997ef5bb67b9bcc79130092599be7d8037a201e6cb713864c12cbb43adcc -0x4520ffb6112874d83af15f13bed58fc49aad0583b7e1963bf5248ede07135a35 -0x9cc4b6672ccdbcdcef94239b0439350e821ee03077ea1a85abe40d84376df7eb -0xd949e3d266e69055e015e1a8bd88a3cd4f781bff6028fd926be1440727b25c5d -0xdc45b4cf0bc7d5d4f9850c60e56f13d9dc909d7bdc00127148cbbad5af61b68b -0xa6bb40fa424341c526c98edc49e68416a95088700ed8bb90904191eda38b222d -0xb3fcf1de4378328feb2ab967e9a6df99bfaf30ac01e578d99dbff8cbb7ce5a02 -0x19d520a46c081b47e9e5332a2e3554eddc7376fc86ea9a192d130a2f03aec44c -0x215606ce94b0740d134d71759da43e55637f1b8828c3fcf2972b839ac4820836 -0x33d44142ab5acb74bde2e4b289330cb2ebeb3eea98ce20fc892dfaf1d57673d3 -0xe0b757551a8688666dacdaa39ca95dd5f9cef1527c9907a548944dcf05eeb45a -0xee813ae643a7f2bafddb70454def2c4cc0f68178117e4d32d59312d2ff50e497 -0xbefed35266c6bd07f86d9940e887f677a06b7d7075878daba41a372422c38ee2 -0x1d65b1aa0c4d24530bc1cf99c03a49ac47eb036cb79f4ce13c8422ea6e0d4e2c -0xe11452354a20676d54dc777bb1f41ee5e8a967f84185fb4d805287908c215503 -0x12cce9bc40af4e553fb2b62fc9793a2a1b9b2e7d119bce71923051b709ce34ac -0x9e7ca1dea120c735431d4093435cb75f2d4fc96f094abe6d20f940d0a1f9d5a4 -0x6ceaeb09f2fa0e2d9332ba99babef59cea2efc2ae2ae5f2dbab10d61cba339ec -0xeb7a25b02bf177addc954cf6d4ae88bd2d2af285fbe1e03f9d75c32050386abf -0x469c1eaaebddd3a78a2e6d5f118f8ff6f5a178df9621b6624ed81d229d946c9f -0xbb3920ee622bc6fa62cc6fe9746011e9dd52cd5b2c2ce94f4c554dac65758aa7 -0x153b9fb22e83eea3eb50f51cda7cdb06790e6d576eb6da6234e1874d72c44ccc -0xd3d3c114ceb90f84ee1b7e398d34f7f793637869d1247f03b4ec953a28fbaa94 -0xbfb52058645ceca1daa2cfbd20ac9b5eb0dad77e19c243f3157a99d8369b2d31 -0xaf1d7f9b3b224e14ff4b6048a956deac905905ea610d78337f2588015a3da246 -0x2da19dab46089eb8c9a2f9de1508f77f778f68bc41d1a404e3b672a52d2e4103 -0x95f81dc445b36a34e2a095337662e658abdafa937e9e0c2ca4c197dc2a4d062d -0x28181210ec92c8337b73b4ecf1c379699eda32c17a317ca9e3c9eec26d427b5d -0x5387942158ceb7f3bdec94c095c6ad7433fec1ae80814be30453922bf50894bb -0x8204b9fe8a634c2f1f3895c28cfb6659067059c97792cbf5a8fc34da0e3da755 -0xa344155196d775f4c905e8217cd0377e24320e6f91374a908e33523c53e3c35a -0x0577df7fc9af809e7be6eede4a3ccd1c1606aedfa5c80a66ddb6e8b0790e5af9 -0xf315093d074a2a68bf1ef5dfe81b462a1499491ee64f8fa6c8a5d4ec7cc6bef1 -0xd85d7be70ac34652ccf0b5c2adf4de0c54c885832bb907a58b19d4398900f937 -0xf1e8271c7349c66a5ea6c285266193e478720049960f0e7b0079369a5ae791e2 -0x53356cdb446cf26791dbac0ba9dab9789037164b7c5ee239cae5cff8b43baffa -0x228fc6e80b141ba64b4a5893481d137fc925d40909a0ac1c85a2bd2f34da7c57 -0x45b4a451b5f387560788982bd073ad3900a21deb4f23cb3c15cdb04781638570 -0xd84efb95b4fb8d00d95d88e4bbadc21f6cc9f7d3fc4fc93210bcc31ae4476cdf -0xe46710ccb43925f919466560acfb161fe014513d97cb14dc7720c10d136bd240 -0x5d9a042b231bee9d2c9ba17d3bbe2604de667430235167760316e31cd90e5fbc -0x4f59409fdf8713091bec0837fd743f204725725a6960a54d2bdb914871dc29fe -0xc4253d19496a99f270cc3224f27d9165f22914f241fa9ae15cc6a0722c7bebf1 -0xd50d02a32ba61b47516380662c50c7a2e622979e5d57cad0d1ef69e579962d14 -0x173e24ec4347488cd69bd472c7318dd5d56d820a1bfbbe521c2aed60ce9cb025 -0x5e3da1ff321e76088cec30b71592a31382ca864753e11e5aee881b4f67a88690 -0xa299a1b5d32815cb02ab13f0481b33298d10472d002585fd6feb52b6c1836099 -0xc0e1c6aeb886316256cf8d8d1e0fe63efd1f41c8772f4ef104b412ea1054d9b1 -0xcf2334c8cd48493c68550bac1e61360bb551c0634751121a7383e8bfdeddb38c -0x5f4af27ca440812ab4e08014be414ed5d468e6284d4d5d8de6aa310b838213a2 -0x6c292a1377c8691f06b172187861039979724126597c35fce69cf157c550af2a -0x6cb203b9b508b8396e1ced4681d51aaeacffc15d2d4ad39c558acbc12f63c8bb -0xf1ee060248c6afed87d6dbc098bc9d09df26360c2cf725bf6ce0284a83c637fd -0x663747421682132ba0c11580aab4ddc2f2275fce352173512e4b2d61a6f5f3c0 -0x1ccd2ed6621396f1c188b05bccd47096d80fb1560ee7443824d27f88ed2d0789 -0x20b0962ab2de235665c9d211df9148f7eceb05e80f867678f43a39248b1767df -0xecbf25abfcc04836b166746378e67e088810f00289d0c90257a5c720a04daa21 -0x2880d8bef6126f1efb688f8163e3f9f66bb03b20a1db6497a9c5552792487db5 -0x64e8f8c803b2ccb08ae90016175f0e70c2119451c7a8523e187be5b57efb5de2 -0xc8fed90eac599bf89045cb922278d77a76a61d19df49bd6db3791fb3ab0774cc -0x6ad778f35a5ae205e9912eb19db4459ea3d9eca064311ee1f5dcc7747a3cdf82 -0x766af9e251d01080a16c3375b5ed4e3ff2162d4b19fb53ef952ed8d70b690864 -0x7aa98668678e88e773ceda0d93041126daf89a29ae9e6d6ca4ac7b4b5c5126d6 -0x1d0446d66ae91d2fab9bea6aac730e82693c1bfbfe8843dbaabb6451ab2f85e0 -0xde27d8e0837bf5fa8c704a9036f0de5bd7060fb6767bb8044cf5ce861d2bbf9e -0x57370bb9f6ec9a8ab6be4f84bc07ce572b5fe8d76d76e0283a640261f5d171b9 -0x6dc9e49d77a2204f66d34b4f3295d63216e43fbfa3ea7d1fafbba8b70dceff57 -0xf127f72fe9a4d6011c3811efaf29321e6ce0b738a18fc4e731e93609fad2b50a -0xc4ed12919bc44b560f3d446a5083589060a73b36da7783dabfabc584821e8736 -0x67b9410198be2a16a47d1b4f865052182c8eaec2e0f458a5a49441be9bf0aa15 -0x43efc961286ea7c140d6e639b9d8b23bf1b6b910384bf143934b082de53b1ac3 -0xec03147b0ec87a5b27572399426e418e7fa75167c89f04058c8299681f32e0d2 -0xb20b0db5418dcef849d0628764ff96bd3831e164a4c1f458efb522cb014bf450 -0xe2316ff9a0671f0a4d46f69edcadc5330bc81446321ec22dfec8a1168b607c18 -0xcd41d5dc1f10d8f1411157adcd95c0fe861255d4d5a5cfda1d37b77037645e98 -0x479bfc211eaafb7a22626817adc96646633d441fddac0366a85f86ab5dbc6614 -0xb614c0c7be97ec6c257560dff9010deddb9c46ee73c876445baa07d2719b00a1 -0x09d8064213e3869de34d26a177ea5b808f98864d99fb6a5010c169efff1c38a4 -0xfd4172d22b640405d755b6f52755599722386c3cee79978120c6e07371ee3036 -0x4f53c472df08c5db0f7e8faf4f0b377f4361f01f95fbc565a8c690c819010bf7 -0x00d31251d5ce2138da3c63d0e02211dee08ce2747dcd0f90b0ad2628387d2668 -0x9f419c8d613c92e4772bc74381cacc51558278c4d1643aeb4aa2660d2c7bfa37 -0x69e8c5beac84922f562c160828da22168afa8e29829cbcdd067e8b52a26029e9 -0x8d1874a3b2b32b8c7242e166bb0ec95971fb4ccae5be4b9357154cfc711a63e2 -0x3d102b20c3f292efaface52b0d058a7a617c48a8e36a0fad0ba047d5abfbbee4 -0x872c73e5b4c026a9f9fa3287f67fb7257e40296462599723f064960e5dee9837 -0xd8cbdf2136229a32182eda8312ae21926f560606eb78d656c51a18e78f8be432 -0x52271b4dd60e6375f921a822b10e86af33c5576e7886f96ed6cb4a337f11af8e -0xccee360b78c0cefc0c26836d9de037f181cb356ef9c002e9fff5181c40730bcc -0x132ac23b32eea85d5ee3952884cd7bbe020e486dff7a8076105d8e23329ba270 -0x382262080412dc5c8b9f0a94bd7b7cfe19ff4050adc81b213de8bea4a9cb4e3f -0xfd243419574c27b3e0fbe0b36e83dbf183c4d62bf38d4a68a7d154a62b9d280b -0xdc71e9a9d75a0908a22b80ae0ed89d4d746ccee1f3ca269a0c65f1b39f8caacb -0x6a11cd4e61d0ede0f389db7d604a855107315e39a93f5dee8ceb0d0f2d7ae522 -0xc26701d9f15a5e8d2069cd5a13b55208dd8f6df85be5c6c74241d774cf8747ee -0x8e63b5247c7f60d98127a969c7d6806001467fdd1b3a49dc02ce18351756c8ca -0xbb099c59af46502a7006b316ff867f6a5cb1c7e1ed2f4a8bd92739c48d084861 -0x07d0b6e5a35576290f44c81ff92ed82718b15fe759c275d548f52fc799104f61 -0xb923ed5d03e78a589b436f99aea31c2952737b7f7ebe937046b500eec8bed6b4 -0xf04f3508ed027ad81f3f5846c039c63a387c670ccbc124f5221035290d0cd28a -0xc727c528133d9e765bdbdae1d2ce96e775dfe7c4b1c56cf6e0f0d0bcafbb2767 -0xeb8db2e5d89216dc36365aaf6c681ee018bb9be2d4a51cfecaa5720edd78e59a -0x4f772b2a909fffb90c17bfee49cd904899b265888f08ca0b992110a3e0c9b054 -0x5a89a057b1a3e4bf4c8cd4e8590c8f989323b66f29bab56b9b11c1165b5a2826 -0xb2a3d1c3a7d4c0811fd64de64670d55d88d7111651b86dad4778cf1839f0e854 -0x3a4c020b81c5d50283de3999d1cbb01bd20b368691c75380c7b575d256181382 -0x069b5361779bce914d3c0178bd3f763a374dc0f00a7eaacedc484eb0bb116abb -0xd44db055a4d84021037a60762847fcc0cf1b680ecc400480758bae435d148389 -0x5e238f3daf447a5f28acd6623216eb4bf68657d16b805b49d769015c26fe7fc8 -0x7a6be9134f9f027d3b064c2a4c9e457b2f7346ed874d78ddf9a88a425900347a -0x5398995d9f6928da20adbcedb95275f65bbc56373d7772bc53fae759b73d626a -0x1c18eb461bca9624d89fc5e87adcf3e9dc948b029ffaf11aaaeea0eb47ff381a -0x8cc42e5b7677e2a618a7fd388c3d5e2c2ae7d6208733e24f1290ae8ccfa758aa -0x01764436a34732029bde72ea9ef162f24c7a102c358c49c01069704d47caa3ae -0x595f242f5c3277cd0c27b29aa8eafe0af560ecdc1259d33098499a6465c4c78a -0x04c5dac0d8b4c7e0a3832e8eef26345b2c830e8be8850fbfbea61137372354d3 -0x668a6109215c36bc7439f77a6727d14349cca4f324f209bfc24c3587d3ce1b31 -0x89c53f8f5d5e55b70d80540b84561ac1a70262a9ed44b9aeb6526920ac971cf4 -0xe9c13a6a3d37d1299187b05488bed8543c20b34f951e146deebd279c7cd3b86f -0xf8e043ce38527d593a5cae0976ad736defab0cd2663df5c87b060fb008cb2fbe -0xbfc52bd815efb663b108657747d6b529c2fc98a517ac1495ac8e2838413533a3 -0x1ff332f90643c4ff6f640bbc4667512e4da336d63363e6f4fb0999979e5d53fd -0x08d8bd7f9b4ab2ee62af605e300295f1a40cea070985bcf8cb64d94db2509647 -0x5f53b164ab07759903d0efcaec8a9006bd56f79ddb6a9b5b2e63d4aebf92f37f -0xfda54003162d0357689c120519299d2a2412d8b937ad96e273054af391c15419 -0x7c9c1199afb067de83c6784b872e791c512a6cffb9fda06a4d54a425d289ff6f -0xb0f16609f2b3ee510ff623ef720146618c073ba17f946b819c62b2fa57c6537c -0x34190c06ced2119a360c0e214e805c036a9d7045f02f8d61dbdfddf42e81d0cb -0xc311be5da13c7b02f3f06b63f1453e87d8156f974325c3715750f604ce7bc77a -0xe9b22f8fb85b69f505e0dcaa86772a237c76233ff9250f542d8a4d079fd5a468 -0x0d99e77f8ad7b901a2ce84cf63145e75ad56ad3931b9de2b9bb4044c58e81fdf -0x620b25d0bfc0ed9619b9eb7f308ec3921986a8e6225ec78937d14f6faa87c0f9 -0x20582e558cfe2fa69456f73483ec3373162a08bfa81cf41f11a9e96f3338f31d -0x517cbd326173e59ac070b6fc9f4ce16f31aa81ba1767e84522735cb805800a1b -0xcb1f2ecc17195c04155820a1bbd69badf37a9410cabcb6b6742084bfb5c7c7a3 -0xa724933304f514a13fa95a1314a3102041a976f486cba64b892f423cd771e358 -0x3520a2ffd4f12da7d586e22f8ebb191ec9b9cf951a4d94d343c2f82ad8dc18e7 -0x5ee4a0f1afdaa272cd252cdb8193cfae45303718af45542b00fe643c5d7ff1da -0x11b95069af701bddccb0b731af85b01957303d0529da52501f99bb6096b5eef6 -0x94f32d75d19727d459976baff8768858c781f34e064778ddf1d34951831dd739 -0xbd53b9474c6b52533b6bec46634cdd789b1d9698dade6a6ff91f05a121f79d80 -0xa652f0b9ae9f568a6c4add08102fde5858349f6da63d6b24840046262aeda6bd -0x70620ddb6a4fd3e9a6da050dba5e3304ec774017e8192226c314e53703bd0c75 -0x050d4f0cac1b402d237ce162def35a406f241c206d6776746aef72f5961ddd3e -0x6f6cb9f7ca1a21f55e91c97092d0c759d8d7b22d31a60de2d3760f2419e6e0db -0xba7ab29bdeb1579bfacbb65ecfde460725345fd95e7bbac241f13771515b7d7d -0x733177f7a913be97a2733b44bed5b0e517107334473f3fcb9184aafc39bed083 -0x3b509738296e011279bfd35b1ce65ac9f3fe836d086525c05c217935d8f4e2d9 -0xfc87fb5eb4c6012ef0261bf0b51c2d4e19ef50254c08516140e3b2f202daae77 -0x26bbe9d016dd21b76f11a3840ada90b626af0d3b8b6f8ba127859ab31788edc5 -0x6517f802b6f6f80fee8d13b302c5baa3cca9da532570dd7848ad54377e3c5407 -0x225d072f99ba19331846d75d5d78691912a75b0cd3ad09bd6aecf26e9cee3e32 -0xaad1edb806cfcddaa41243aae676df24228de8cf74054208be7d5b20eda31bde -0x5f4eb728fea77f6cbbb7923abe31c60781577334f0a6422f618e1cbb04f8d242 -0x0f69ca8da6271e252c7f170c05402769ae908f1186b95ec39de43230e528b141 -0xb92921f4299f24d855291fae5ff9ab3387cca2f3d554cc31f5eaeb98815ee23d -0x507914f59230ffdb41b32eb7878848eed711ed4f6e2e7400070d6e5072030164 -0xe8f99d41c4e736b8680b516691d2859dac554d1aea9383d457fc0c8d08e21594 -0xdb2bf3f2dba853ea9e841ac3469d3aafe4ac835e595a86aa26cbb9a5d00f1a5e -0x5fa29b3d7ab29d6e702d069d7cf644fcb228e3e809c321ac5c9d86df541fafb9 -0x94d576015a891ead44d41c41227f6b68e4597b218130a044b62ae9452f736323 -0x9a75eb170c4029a9ded5a7fb6a95e57e66f32d96f7a4714976bae793c1b30452 -0x6d856fa3205fcd7379f7d756fed24fbeccbe32d47a0ae221654a593998f60d07 -0x426cb04052a2784d95498257063442ee0f5c8182883a9f25494b6661eb516363 -0xc68c3bbf1ec34f4d6988dc6792d271e787d8d851cace434017cdbd3349afdc87 -0xf56385bbcd0e64a53e87ca676037d40ebc152b0e4d59eb5bd6a3472e989674a5 -0x3a4fae8150448ee0a5db4753a2a7add8e6b8b07c5d176ece77fa6085abb33a80 -0x05cc4ec73446f918c4628397f70acb98e8dbda4862a9752f8eda96af5eaac469 -0x8ad547bafcaa6ad56cbbc7d6a2a473ba75b56a1c02c4a7232b7f492be4f5a672 -0xaa9dd02c4c9f33296a3628bb254e8a89933485612e8d4aa3cf71302caf71aafd -0x2a02127c5d235b204422bb8571126ae4a44703faa5df92432179f1e8a2f61d81 -0x794c4b1ed68c016b889e8a9a3eb0934088a2a766ac827bc5abfb0bcc7b97f02f -0x20a00341ded4c949be03a58e543442d9fca13e2b07ccb5046cbe3c0533a70b83 -0xf33baa50632d0112461e1ac9d4dac032a6c07c9521c39c2fe307cf65b5e63ac7 -0xc054fada4c143a6de606e2e30c49ce5c303c0f6aec2b59fac0d485438a09871c -0x9bbfef693c19d4ccc80b699be6a9be841818ab9d38394c3d2ec41acf57555b2c -0x61a645ced49ff4abd098663f26ab4cae189421be27d938b4d51ff74494603b1c -0xda544a0bcd2bc33d7f5e74393530f9b03464f756dedd858796f789ca5ebc522f -0x83ea4a6a887dc2893f578ef75d96bb58940e0243ea8ded9d5142bfa764b96b4c -0xe2f70d009df666a3b180848ae3281f3e37e13cee01f3bfbd1c165072d4027f8e -0x02ae1d41dd181f81ae5c28464dbcfdfa2e41861a54693df54d3f9a866a027039 -0xb975280db122485a37b35ed5a60364d3264a119a759dd4082323f9084a2a70f0 -0xea5256e4fced821bfdf5c27bab4b99ea2fc1bbca3179f64f26a2d6c3859f3bfa -0x723274ffc9799ba65e2bbce2dacd0679338bf751a672bcddb9bf8a5e082df5e8 -0xffb1b87f2e2448a1b7f854b7173f52beeee5675e862511f7b51cb2de6e69a02a -0x022c15fe37f97894901cdc9e55ced61997054d01a0f6e16d01884bd212fcb7ec -0x4d25560c5c3bb5b99aa34133ab9fd30b5413d3fd387b38e1c8ae234081314acb -0x3a6bd1f9412fd1b89134656016beb8dffcbe34cac4470fc978c808a8fed7e4ab -0xad3e6df719894d7996b6a59558eec65155fba5f31253df2f7ed23d9756a7be30 -0x77750c308be921ad00af3962ea2416370a76ffeeec1bd9a1b79e8c789d7977a0 -0xfb0c06f0b307c73f4eb09b6e1ab7b67ae972db15053f04ed1be2fcf32b9b322a -0x76909c1cdc613e3f2ca318d9c8be7f79517b5483796063b939ae2d054bc2bc1c -0x750317094e1ce119f3499a89b26a2f097f292ebaad9aee42590366eae3b2ccdc -0xa5074efece268e19e53e00454c09c2e8ac675fbc0cab447b76748d0338ce1820 -0x51367a82d117ac055a9eaa148692846ad70dce5a8c8797c74a09354fd56cbaf8 -0x0810430e3db7ee1063c45921a917060dd1dda7560583307db12d8470276b082c -0xf572cf38599c3d22227f4a0e45f13ad966e414c1086fb428884fdfdab0779a59 -0xc8e4cf09068c61dac39cbfa63708d901bdda5449251c8dc57deb8450f16da975 -0x336363cfe535d4894c0a1d916eb4bed04d5135ffd67d046a93e4e38c8e9c0aab -0x80d7ec7bca9a69a8470840d03c4fdf74e904591f338ee41d65cd73970447674d -0x6b0840a63b26893900de2dabccf1f42d48dca217e47da125ecc457a12ae8aafa -0x5e0e0dec4e0d1ff6d8c377a243a874993814f103e1f0ba6f6b0887c38175a8b1 -0x90d78bddbc8dd88dd872399dd2d8e68cba8d73e5b8c693069dd0311a066089da -0xe5cb769b90dfaa7789a6d63e5295aa7f4c37c808b5646dbaf701850ee9c9eb4d -0xf9c275c3badb23e554d2e96c93dfa5d9dc5f262d3cf7f227de492e2108712263 -0xb77622f1ff916092b61e65ca03d7edcd7c5a66b278308558a5396a4a11f8e73a -0xf9a822056f0b29ff92062a6ede30d1cd4fddf1cfac922d80c7491da737604e79 -0xa3229d8bc8d27f16f2595a597461a8221421d3b631d858fff8328511e5b47f28 -0x8e0c7421f2df7755e19ea27296dea2dcbc8067f18ba9b9c372a19b579ec6ee8c -0xb9ee69f8f7c94a875d6f58f83d7b126ca65bfbc96de0d497c960dca1a3a0d9d6 -0x2468500ac1705e3522a7caae442ae7c5cdfe33cf4b2f29e8c35f19c4de0c0b6a -0x494700dfc47a7d0b5498eaa7463ac9a640b3abdcd9f72d6fc8e5cd44d8e71d8c -0x4adaa62ea173e3d07003ff4b546a84f90054022beaae74a249ef3d0b9a13ba52 -0x8bfab96adf2ce1a68c5626bbc2702df9b04e3d183bce5a7fb395eef528004b38 -0x7b3c0d847158c06a9f6640a6c6bc214946454b11bc76855d4f5844db2fc16740 -0x218969d6ed46dff2ef8b45d3fc342dbe71aec88f88c4cdc311f6e27f05820e80 -0x45d6517d9fb5ede49b4d132e212c8a33ca7f033d82e905f5632b7192972d2ab7 -0x292014b974e96a890d8ff6e31233e1f68489ec5e5eee70e44a83acd4b976dcf3 -0x395f5d8dff2e5c21b745f2692e6ef07db95389e422caa4cdb56946fdc772ffa6 -0x71ea938dd363e8eeac58c00c2b35ccd9f5e14d4b181f525f2589cd3be685064a -0x647afd588090dae49d9c1b13c53088ee234112d1bfbfbf9e15676c4c1b34b3c0 -0xaf9226e3c65a30dfe49471239ee11673bfe76c5a67708d049d94a4a2d2e68103 -0xf234aa0dc4abb98ca289c954f7707322c2be7cf19c8bc97acde3707af87d0d7f -0x69be6d7b2e307f7f95bedd0cf5f7845c1042a34ef990d08771d5766d1b5f72ec -0xd163be1c4cb0693bc7a2d168e859b42313d4089ef6c42c6093743c79f3ae1bf5 -0xfb5c2c8794187e95af9a679848e42a4838638adc13ee24369c1755d9ccd894ee -0x51379106d905dce13e4d9f755169808cd3887c7239f68f1ce3990760da5f0399 -0x9d6086425c01cce9375d4b2574e8656a7c840aab69956ffa0bfce8176621631c -0x1abcf77108caf3425b08692dab8450fd9482e3f74719642ae7ada7745b757c3e -0xfaa15641c2aa160fb523e1a6c1d0c4228130830e1e486267e659f05e2858dfa7 -0xd3cb102936a87290e9e857482a2dcc39389754fb99aec1148e25eeb4fe78137b -0xbb598c501de6e20f45c9aa0d563f9acbd76dc156836730cd0128977b8ffcec33 -0x2f5ec922b294035722b3d188b92e6001e5f61371dc4f83747d398f37a0c221f2 -0xf46919640fd513177fa85025cde848724ab6bb7c511684f9cbcd844934a42b33 -0x34d05433a6c566294be253f0db60b489044a0ec51e2ec903effd6df67cd3ee76 -0x047f7c57938f29ffb13fb8fcf4265e55d69d3c96350bbbfa6961468eb2fe5a99 -0xc73f08ce979c10c322e2892df5e56f22c5b624461e39c13f77425c540625407c -0xf763e1ce6e09613e84f95a24f1a1db5a9c45a3e6ad101f9156fa84f5f1ac0233 -0x16a7ba8d25e1146e32f445efcc15c19e568ccfbc8b609d4cff226a4972155c24 -0xd9b3d07bbf090642f730c2aee0564b6639e88d4b21cc20aabda69258aef67ce5 -0x97b80a93b79f5a25f1ece7e8838d97037ddf18812eaadb17be58c1e600906edb -0x78fb5e4d05c8b6cfc858c43cc5ff959985687002d7d21276c08b757595e02934 -0x051c9fbb24b4e164e7fffbad64463334010c674f087c2aba7ba6bf7680de31f5 -0x0db0ba63b6059e06cabf90e439aaac8f711fd42e1b3254e90c7dc4d96a4d2187 -0x6e46d72368ce758122881fa217fc6edbc0d7100426e0389d6c08b8c0c0b6cded -0xe22497edaff36947b718f74ca16479a94d939f52e11f4e6dd010f9a39472adff -0xd1f318ebd5731ca9161c1e9c7796d9cd7ec898108cb7b51ef18bec24f75c3bc8 -0x6f712039813550818640410e95603ee8966a0d6dd26c80ad7d43fb23b5acf074 -0x5f4d554457a1705cf77366e0e4b6cdea0a8e7b90b031243e30adc09758b43acd -0x422133411db81db19f64f48b8474553af459731e82192055f9ede8f1eb81386d -0x1d60f9ab06170c7969156627b4c1356b187d1192d09da20fbcbab991e2f79167 -0x4be722b81325db952af6fbc9dd6ffd02bb9ba588a039e47c8a342628ae30e8d8 -0xa81cc88a9eb6ea77b2b9555528557238e59d948119180e51a3f22cfa973b382b -0x38aba5d9d33afc1865c7de2132f97c4faf2af84a7aa8090a795c99fd885bac1c -0x112e3e13ffdbac33a6ae66207f24f07b22b19c1706899f23d6f0682875ee14ca -0xe92f687157c2dec60a36487cf51d9c6dfdf1157e4faaa3071234c2d2121bece6 -0x6d9d0482cf7d08a6ed45c17b20ea2d03c7fa12ef37b7059e8cb2c7b01e61cf92 -0x1c74d8665b816db93794972a48814848e985f04cb268b3c4152c862d90fd6010 -0xba027dbd64569a746ee508677915b24e7017b90656e3ae58072698e1cb70c850 -0x8fdab160eae69b7d2dc88e180372e76fe8c5197ff00e8400a5bf72f6495141c9 -0x8a78e0b743a045df5aadce04238901ac935b90c37ae1d574d1673064373d4cf3 -0xf8b9f583b217bc8e787244ea801c6b170a76dc793dfa6892d56650bb0e57bc2b -0x7ec9848658b3d443a69df93855435dad7a1ac94521dc5d32dae114fd7342bcbf -0x8673654e720be05367bcdf5162d36805255d5092a3722145f3efcd116f92155f -0xdf1154c1c5bc61d93374a70510dc76a43386f894e4ed82bcef2632157d2b5671 -0x6f2452aaec50e89e36fb91c35162e619684dcfad522dd19e1dcd6ca32ff2b926 -0xcfa1f684c62da893426e236d0e3ba45b2e59a46090801c1a9dde3fa282f60a52 -0xa4364781bdb2fed812c56a79138e6315b33068f2ae9ddb12ec60ce2975ed8fcc -0xc2df5d1e8c098b3814be11ffee22b3c30481e3925ce4493dd59e7a0fb17856fe -0xe4b43c2519e7aaff1568183078bf4c995fd82110ee50232144dc99312c085384 -0xcd5b261a557dc7aa0ab14a49b37e9233d4b86110976f4c451db6fe96af6ae148 -0x2f23506519726f0463264a5c9e0a44df629eeff7b2b801b35ecdfbcfb8183dbb -0xc523745f69ca7ce3aaec9d223b836b089a44641ddcc67ffa853a627e7cf76d59 -0xe2c15024673e87ac6c2766dfa62786bf34821534e7e77d4a3113912cd88fd1d1 -0xbede9e9d6c7239f6deb11a56d0b125b0409e1c02af2a670b0fab86c81a39ef3d -0x367607b634126722fe87bb6322108539642ccabaeff97ffc21155db0af095c17 -0x062caca6a0efffd4857b15dc6a8c368de0e996e2e7226a3a15fe03c39cac92ec -0x02ae43a535bcb0f2bafcacb7896cdef39d31231912debb9c774cca7daf99fe98 -0xaa2ebfbc8bdac2b7af99ec275a359dbd6c282c69a5d02838664794ea9eaeab2e -0xf290477180ca8f0da0849bd0d6475617bde0489a6f6c1eb0e373309e9a8a9d1b -0xf15b1eeec2d31fc9f26ad262876f026a2c9edf3bc1afe59cb87d1d2acaab6f4f -0x392e9e4ab76d914a3fc6667fc5179f893b4251c34012e0dbca19e24edb80b6e7 -0x6e34af8fe62268c77779209ce1e9e2b067859f542501fc328c2fb04aab7f6166 -0xf392bf4751883a6cbcd24568508e9c2d37baa67e1598553f8a36b74145716ab9 -0x2881009524ef7ae6788d7974c800aae851e1a75ab86a70b970a79e6aafb61f75 -0xc9a8e760cf8819601ec86af2eaad900a499f65e25db4c20fedf24fac32b89647 -0x5c24df0ab9f1ad4fd89e7b62609fa478cfb1e3dfe93328a038d8c393fd5e8f25 -0x11e8dd4073f6cc4f4b7a2331c5b2041a8bda48d55538901884e3ae0f6324d43a -0xb4a6f94efc1e5f1e402051e150a4654ce507eace7cbe064fd29215f0f14fe5ac -0xadc9947054f2328dbb8f8020f6813437b041012e8510302849b8fb6c7fe1e6e3 -0xe733bf6c5c6f068ccf9e5a2deb31048fc172ba49efeb2d993d565153530e4785 -0x067be8a21ed7433abc288a5e3a9a2818e5d2e0c2feb278c2c47303954c0118b1 -0x19cd05ccca0f42680fb96949ce4c004f0d60cb9e4d8d032842f62b7fae96529d -0xc8d4773b2147ac941f03398949a37937413d38201071e646639924aa66cb7add -0xbfdbbb65ce3a84a0882647ac6c0508893152b745931771fde0fae5b075589e1a -0x878447e2fd7300071c5baaf361e94c95d1e0c912c3c29cbaac7d5ab6d191c280 -0xa89a8507a95cfd216ccf1d3643bb511ee10440966fbaa2f70f580f25ff998b1f -0xfa50ba53fdf31e7f48d93897b53188f6e1be9439aa947686add2bdd9529c8a23 -0xb3abd712b347b21892062773b28cc09efc979d91386abd4e84ad582b56013555 -0xf690f65687ef6ac9f4dbe0083bcd3f68d73cf0d602ab2c820b40f7dd5a7733a6 -0xbdaeea63f0a17820bb96a87bdf8b19cb6d2a08e571c13f58a4a3f2adb03b6074 -0x7519197224ae8e00f5408b63dc403591401de80b541985247a6480aca43e526e -0x743697c4c95337111e913b095aefcbdb52c7086b47f607307b44bb59aac82607 -0x20e9f2e8d9204914670e00ac136d9dd4495ae1413bca87d7973ac0cbf0bd5843 -0x029cff09de95f5d5d6c55e1c55c5f8bd1e3d5db00aefa35aa6767496e0953ec2 -0xb2082a6555e68790de869164d26409f5a146322df3c0db88303f8ad77d217681 -0xc3ba6372a6f7f1da7812360b201ca200ef7432a7520bf40b3a3465284665b8f1 -0xa465e0e48ec254143145126496c8b739358e8898d71c97feecaa6eea19a0eda1 -0x6ac1373072315d5268a4aad70859b5d29821c481a01db4ccf223b36c43aac70c -0xf2c2a0c54ce138b0a77a8b017fe2fe7a59c82389a6b3dbf02809ff66d28629c5 -0x52386a5093a3ec1b549077295c2619f37cdde329a549360fbe76d92b4d9ecfc6 -0xbad93874b0a30e42f11bf9076a72b0113af31551b49717bc1148726e1e1a19c3 -0x6746b7193ce483d7edc36c8965185110cd5fb69b05dc85eb0f6de5f5706c3a83 -0x631c407a08b6169a1b71f6b5243d5cf9f67f73bc2a3f8e89f82fe50dbb4fc465 -0x3515ef4b26fd46c0a0d53b1dbe28b99e9474dc387afa3f079b54568017fa3577 -0x20c2a337d92d332f0537879d6db97eb993150a7f19a4faf44e141eb005b2b692 -0x6eae864d9b642ab99bed31dd7e4de0b212a4be6a62092706733ebe74d9e7eb61 -0x0af1953df0df310221baba9dcb592c4da4c6f7a5427b4add4af078cfb67efb67 -0x124ad52497a806269878d922e7373ee9f4b9b90ab13713bafdc180f6b6e79601 -0xb3235583a5d490aab693f1b1f66362784155e0262f8139d80a106f7ac87f9705 -0x6e535e3c963257d4bf1fbc624a33ff719afef55d02a2ab988211b620d3d3bd5d -0xb355ca33454efa2ff673103b779e1ab12b9ba002477c359dee3a21c104b59f50 -0x02b4e0966bb003d0be26421fd74a8968ab5577ba3ee8677f2766658f04ada947 -0xac78872f90495626e06abd63c03e2c1e5ffe557d840e11505c46f5f0b7494d8d -0x04aab044a52d856d9d745d0cbeb7ef0374bbd1e6c54061c37920aaf55fbbb9a8 -0xe8aee01d9ba3f10c51b50d922b11d5c7370b5e97e3ae89e5534cafd767ca02b5 -0x69febd1dd7e0c787c94bb87240d6019fac36a5892cb506b7c947579a50061890 -0x0834f5c80c8206cd50d22452c9a30e08bb08767dd93c1df586addcc8f6b8c8c5 -0x8b5cedef3d792d0df03bea28c921a8edc26be0d37547439ebe8e75ca8f659d7d -0x05dd54ad3efbd5f0711f206ac333c485851c230e8598d4bccd16f2f8193de304 -0xd6cca5c3597603d9a3537d40cf12f596bcd14575890bbb3aaf0542de88fad131 -0x0f9f38fb113bb135eacaf15a90dd873072e36d4fba72df0b6f25b8aef559891f -0x5dfe928d2ffc2a332556994b31a9bbb702d6f93311f39c8fd9e9e04ae233a41e -0xba94898b885656c9f2f681645e45883837ce6b6273b3d97de0c7a1045fc164e4 -0xef0abf3741eeb3f65a826087a102c649f0c200df677128de8c12adfb56502566 -0xffc6da896a7204038b9ad8d43a8f01976e6fb97a9176e2f36e7280a7f2295df7 -0xd0f431d860c40240cd5a020ebccb8ec84a236217ea922b6425af415f038b53b5 -0x579a24f53c21718d055cff3131de6b4ceee0a3d91ac07e40d03b2f0ef5f656a8 -0xb78ad4de5959744846ca7e9a107df8f0464ea99507d6407c85ba10ff1594e480 -0xc329e03dbb6e69c6b5d5572f4b5add44bf451a25daf3854b2d7c7be7dfa50986 -0x2120253b604f2a6da128e77142f26c95819c45198e4e6c74906826c7ac5b6b0a -0x6274561467db55fc06e9c41ce813e38230ae9e5ee53298b0a06ddc48dc39f96a -0xe4615c50c78746b7021036d42f7a2b438f4556eb7b0ce5af3b3a86c0c51c9592 -0x5619d97621d51ad294e0409b2fed4bb72acaa34999e35eecb1e9a2227eec50c6 -0x6110e06e4ffa2ece8da82e8341b7fa292d4d023f86e37afb4288e0e6f35970fc -0x0da01927617be61124e5cf5b4a352801142df4ebd09cade0fded3df96b63c8bb -0xe3367697e3eaa0f5b10b6b52a4e1ed5935ad43e3558f769210842ec84762e37c -0xbf476adf9309f7b76b774423fe90c132dcdec8c0f79edeefe1f715152e644483 -0x97166e22977a130daf9d4a6a9b95c11c7298a150aacb513f408c15afe96b51ed -0x021e857cad2cbcf82fde6be8b4f24f1fb33c09b864c6909bec67880a389485d3 -0x5be8fb24476121e0e6760cdb4b2616279a93b3dec1e0d2b68980fa3e1767d56f -0x5f52211153159e8c75f2b64d4a9ada88993d07499ba0902a385beabcb026fac4 -0x3e8393e47ea62254697520dce92232648279b73a4f528c8f0f1132aea4e75e1b -0xad81e1a6c631189365cb568ff5da2f455e717ef73f1f321d8e80eb75e7c09bec -0x1ce2317aee0114828d27f1bf8f87b5ce77f0957ca04bfaaccfed7bfb6d082157 -0xde945e1e082e289e42fbc4614718001124e83562198d89c6610b95f26f74f722 -0x663badf8e8e3f8aab6d9c720be089127eb2115cd3959df66612664680707a61e -0x3f610c6ec965d8558886d47e77fa932598cb84abf7a6a65f69f13885a3701d58 -0x12e571ae294421c2596c5fcfc469d6405352a32bbdabc9cc384fd64d47d407dd -0x76b347bdad3cd9160336df25b48a456a91edbc5f8586f618c44d654fbc0e1834 -0x3323b633147899109ed7635d6d7c374623d75f153355e2677cd476a1ae7049ab -0x8c89ea01a18d9adc70902d3c2ed6c215be6d24615f547afad75436e5ed1d9dcb -0x79eb18ef079cf5cf6e2d81dd683e30f6cfbc3ebe3eb09462cff28abe715520f8 -0xa2f857a3cfb1850ec42510b710707640d585de0354fbf249176371b208b14524 -0x097e2b78b5ee0dc51c6754427569df71c1ae759f170cb72e2ed3a302ae27e7f0 -0x496ca7424e7525cb61c62a612b485d1ec82295d59adb741440b4d332d6d48d3b -0x5983d1b29ed040df35f776345a86c854c9b80364290f34630683795a8e81ad56 -0x963dd758450af20b323415f8ec5b9464629b6ccc8c68b3bad8a746fc0af536e5 -0x542a4069bd9d3cfbaf5b7fff016065691cbda85c2e3cddb67a946337369bc776 -0xc56609ac4ff0087f3adf4918bc362741efa063d88583219df49a41b9ce85e592 -0x8fc126c32c38b912297b8491161ea79d141f587042329a02fc0efb9a8b54ef00 -0x4fa68534ee308976017e85e48f3c988b376892230b32bcf47cc4e3144f7215d8 -0x35b6e6c1459ab511480a67a86b7f0bbb4c6e0bb0ad1db44f6c50b868e2756c82 -0x59889056fcfd50f0df32d01c79f2e3540814a9c8958da72ed2403f5fcfc74130 -0x10a2aacf879cfad9fd791137bdf3493f97115ac8afcf3385335755b7449f3d9b -0xe75af8dee4b9d3bc2070be267ebc65d699a942422e2a28298005115d305de40f -0x1375dc80918706dbf2cbef774b8a2fe0e7dff512d695013d66fa735602eceeab -0x0d7a314ca5b9ff90bb66357d38a05ad94483dd4cc507709952ad07eccc05cc93 -0x3b07107c4c8200e611c14cdcbe8e8c73304e0f981165d1352ca2d270400ee494 -0x3d75118dbc3c23a38bbff28c0a5f2a8edf0167f37aff3f1d7a6d325aaf4446cd -0x0600fcd51423c703d62604de2c290b4c42e6fdf5885577bcc6b2784ef9c361f7 -0xb8f69162db71e51ee0161fd3f357268e12533d06d49c399c659e04f3ebedc8d2 -0xf31c07ecba20e45edc792cf62b5bafcc7556ab4874f3d51677ad0d07ebd390bb -0x3cb4236a00ae1b4fc1bacb9d6adee83a45ded129209ccb9332e7c9959c847703 -0xfaea3de745945b0d62d1a29a3229508ad2d625e4e873ef89304ee37c87940c56 -0xa283e0d22d08e3f68c9cef63be921aa72e18926e0b75e13dec835bcfb0ade65e -0x7d30f8dbf750038bc2afe62852959022fa52d7c74187d8a639c8558f4e331177 -0x884066bfbb92a9f83f1de97c33d8d525c4679324b4b929f4648363aa02033b1a -0x0a6cddcd3917f48600072b0fda4e4b36ed584717300218f1aeda41cfb9706781 -0xd237e38cf1104227f614f4b05afcf0d89160215bfa40ffd4bcc56f8449c4205e -0x1a5a226e3e7b34bc1032000ed20aca6984e295225ec6e80c225c375fca3d886c -0x0f453be41f61a8e42cbd01acd5631f5214da2785c29578d5d9ae66769c2fb9a5 -0xff1a729fce6d0024b9f4d7d1acaab20eb1d855f55d102f9aaf3dc24d21f95f06 -0x451342557fa9cbb1e31a9f165321df372fe56044573375f23d25e4e229df9f28 -0xb1ff4c739ed8aca2c73849dfe98ac162cff265577239d8971f4c9f37feb45bf8 -0x80b1b4b2b8f18a70bd19ad235348ac45c8114da20469fac378c4e398daa98b3f -0x8bf265d6666576a98c76da19b6cbff23a6556f579be4cdac8f05d6a891eb12c9 -0x222de0398d1aafdc06d3e6da42bae8cd88a643be3feeb3ff8b5d68f31fcea8be -0xca68f526335db1bac5fca2950a46989477215dcc330c092d3f4cf025eca3bbb9 -0x3a62c4931bbda865130e523cd334d451057938028303641ab72f23f6c6444c32 -0xb084f64356c5a2cd7c827ae4f238f40ec6ad1a5b85306c5763a49dc75b54cb9d -0xd5648c635baefc044505393aab0fb035a62c96c679b8fda8c41619ed6e685d7a -0x9c21cfe38f48e75608f5a159d6c8e817550bdb211b24673b487fc8f7cf0bc4c4 -0x148ae64d6435c4bdcf14ca30a871e4f00f410a40c4fdcd07b444c88aa4208506 -0xe9256cb0d5ec9cc00fb0ba37223f6dd6fd71d4c92058d5c2e744b46f91e0d52f -0x293c98661d6e82d4d577bb4870cdbdbf38823f78ef976d978ea6f2d5a5cff331 -0x6b8cc4a518d3a4fbcc290de7707128a690bdbcbfa667d911abeec36f08a7087e -0xe2a4d20c83a24334fca8f08bfabd0688a5644c7f33b7e4b2c534f1b611906463 -0xbe1dc6e3430a8d0b17dc8b1490b2116f8f261d730f401ce82007203698aba0cd -0xe42362717ec8d9acab3a44899ed168e9b79c52d68d7ea21a87693da4377e1243 -0x8557007d66c240ba8e6064bfdb51ccdce293ef7160b91bcb1866f21a0a9f8be5 -0x0081569dce78f99fdbf57a6d982cfd5bad15029ea1aa5b051e301c62b5a77a9a -0xdd9f00b548bb493b9657834d1924d00a8574bc79368e928b73b12d7a9e30eba2 -0x64fc4c3bce0a0351659b53521423c6ab6990a678727abe9586af1ae9224cc682 -0x0f1ca209f69b0af495a01c99ea1dfd0fe11376ea696c4d4dd12d20fccdd88ed1 -0x7bd6648b8b373c2e90a578d32fc399119a5b2a3dda194c98e318f0f6709fa8db -0x08f3c03b75c7806a9203781192e7bb74529e22d8453176a6e44bd68f1cdfa799 -0xb8d7201c2eb21d36f3c09f89070dd07a04c14b76f1ef89dfdf247e55a482f92c -0x3802ee32131a70584323b72af030ca54627ba29782eba3a3ccdad0770aab7442 -0x2e20c3a1f8c38fdc7831e3800f890fcd816a865cf0a110d5c4316fd396bb3ff5 -0x142b3e4b08a9246ab7be0f3c00cb0af2b471e6eff05ddc237a8d3d18619da580 -0x9935a68f0ea9da05df70cebdf505fdef64ae629861e0f73f6531699df25c1409 -0x6f19eebefb281657ad00b4a0341911e95a86f5fa209b73b4aa3c974713731e2e -0xa3c9218b23b22037ac1b266677e6fc7579f1405ce33ca97b67fb6b1471f5527d -0x5784e0bf4ac074e4894a1dc719dcbdef0804cbeddb89b62f2ab7f282622d6c78 -0x59f1bbe0c34700f3f7377a91e1520399876897ee73212e0bbd0dd21ed755ea4b -0x9df3d84335adf329ccca51297d445c8078eef1fc294c19c1d26fa5bb0ff75061 -0x0334de27929daf839ff77e0477b93187b62b22bbf3ae66bd7a3c53e3458a6133 -0x5aaf3ab1a9a70d2e2a272c3e633f996180a3b081663a08691e2ad4275dec8008 -0xd877cd369aa21db3fb886ed3a96d26929881c8c9700ba1b7ac9801e1e959010b -0xbd3df1052d7142f194672a8f16c935e49f7f3d926d94346d26531b0deff3b821 -0xa2fba5adf39afa6e33ca118e538dae6dbf344d5d71caebb5a41990c8b4d9bec2 -0x39fca1bd2f8e4758483cc9546ded16e6a32f8aeea7c6adfdf184cd08f3d4ff93 -0x32026500333c8fab7c4f599fb994565f2a6ba4ea37b397f33a1bfea551e82912 -0xcd4e0e75f1b0fec3b0e320c1a997ee5830fcefe83287918ab453d4997bda21f3 -0x1fe3323c6a613bafd649d8617628305f108085551f298affdc90d64e6839430c -0xb7651a8c85b557f5e34ac3f32ec4260d69f205153b20355b2a30750fd9e8f6fb -0x4744a5420c9bc2f069da295e51099445f4cd47cb6b876bb688574dcaaa140b0d -0xc743d63b58fc70c57d79aae0099e42e0f7749ee8a4d3fe5031776ae87198fc50 -0x8b4c9afd5a7d575fb121fab7435c17052ff17ff8d47168cd6530545d63265803 -0xafe1b79acb5a743fca96012955f94da8fe80b493b1391309b5eca20230350e1f -0x01df16156aa0f59238103ea33271f9342fd897066cd64f11fd6ea9638af74aa3 -0x9af4cbb45e2acced62e5384f2926f3f32736b0bc34d2a55ae3832dd5381f5f45 -0x60c2ce05217467b29d923e0b9ada046fed338e19bbcdac802e96480d7938c7af -0x4b646146647dc9ab4192ce95773e0a2e5f885035ef93dd7033a7ff1e151bd972 -0x7a6c0ebf1bb9ad3829f929a0a1a15c8a7021cd340091a0bc482cf2e66144852f -0xdff723a9cfc8bd742a403020cd69a8146dd61590dce335d2c9e2b6df5de243d1 -0xb040f32b568d2f3d2f6a806f0949cea0e7735d766956fca0d6a5d936abe6b6bd -0x8c1241f188901cae62c4b754280f53f78c3bfc41b4854d1934f1d98f5a565207 -0x86edd7567f8b5f42dd81338d905260ac2accea8f80f59175a1832fcf1b7e4c2a -0xe27cd0e6b57105cc156b059421ecb18877969b2e34f7a321694625ea68e72125 -0x0a1576577dcb9b06ba76fe10cfda33aab022f05d193b6f76e71ecedf37929af1 -0x566e8993ebcd6c6c7a85f6925cbc2d4dbec3158d5f783e2d1ddf70ae698bea4a -0xf2c6bc1f303025d96c95cd5086951252b4f92149dca2dd0513d3d7e41c090bba -0x420847607d0ab70b3b9182b8159947dececab884cd3e9f732226fd6f9cb68958 -0xbb27cd6dd144ea14449ac32f44bc2573a654e6cfb886a1195e192314f2ab221c -0x9fa9ea94c6d0d756079a4d746680dcfca971469697a159818901945547e8c387 -0xbee27b1fe9b65de3e49e9de3d2b3cee639625d3bbf62208fb38d1ddc7b79b538 -0x7abe016593f818e765e580cf46ec1fb75311971f5724a047d278047dc6d91c1c -0x85a19453d688b16d90d543ebd39cc55049aca088a1558598864413e0f3d35fd0 -0xf78ff1033372937f24fa3bb05b58a62da830642671b161a1e2c9079226a619c8 -0x3270e972b03aacf5af3f987e81e93936ea066f4b134a57d4baf5216371c218a2 -0x8895d0d2cd63cde92edfa3ee555f6be0e978dabcdf80e2d3754cd0ff9883f29d -0x73aa5a8e417a89dfb5898dd121a44071150456f94bb231d7353ddc06ee7a7345 -0x31d4afd4190ca2894b4591aed6394cf2df0610ce2b650410448c4b6199007661 -0x8c1350abe820d737186b1e1b56c7348a55356d02b79b7b1d497f4a3527720584 -0xa3f337e3214498d1ccfa4510740ef57dc74a09002a4bbc1eaecffd09d14bd878 -0xa5c4f97831c5fc9e807275e209b3d957beb4b589a7b074f0d6323a8694e8ef37 -0x648d8a3da96eaeaee44a0bff9938fe1cbb0f83cbd14ae21f49a4cd32a2d89933 -0x8bcff0c065a5d10001fa4af5e04c5ae2f478779233b5f11a8c204eadefa69806 -0xfaee59a94873b85d03fe8cc68f127d881cc6686dfc309e6e2e71b21df4ce025d -0x7b9e2d8019fa9d9d24e54c62044611ad6add01b01492585cab6b8f53c345edc9 -0x140ffb4fcf54d26ce42f51fe55eb44cd8c695cbce479a148d1c573de1819adbd -0x3852fddb52f1e04c5de408c120f0522d3e2494d8bc52bf1443747f218f565823 -0x2f313d29c0f8497189da14564381b9822b467181502aa6a7b09d1b3eb92ee03b -0x00f33ea472f56abdb1c64a39b3c1e55dfccb30aac26b61c2888860d2392d5ddd -0x3b12ed2c727eeeda91d5283ec57f5b78d0c1484a42d3476f07bd310893dc87c7 -0xe703919df10561bf0645ddbcee19f1f36d0d0fe4f590df46ce112a1f7b59b689 -0xcc0717cb162b8d0fd16a8b91a675a69afe6a9c6eb3c8b7c92ae716a9a361216d -0x8ba2c763bfbea065e7b771d134d5a6973079989f0bcd3166fcbe60687213b466 -0x0aa275172e04dbee7645a02a5a968fb700feca02bae682e7a3015a20bec98992 -0x78a78da190ee2564a8f8cc02b208b4e02fd7a8874c7cf6297663ef61dc5d127c -0xa10a30b80dae995d4b2a23330c95526f3004f0f607a9980ebff91982dfb718f3 -0x1ad49bb5765ec54ee233a038d6eeee79fdf7ebe27bf26e36bb4725f6ee909481 -0xa9ec7c652388a98096e2e1ddb8fddac6e7e199549f200d324f8c93a29ef5a24b -0x68e3945992cad40ff931e95165ea682f329300380a446bd6693ed3e41a4a4896 -0xa904ffb1984f3e720324d07ad63ef16eec520c340a4cdf110f3c1d3616ae02cb -0x8cbb995b19b9a81cc34b459fff8358bc48bc3109c48def17b48d69482e6114ac -0xd7e6245762da7b3f1d6be07ad973604e94ecd702d1c8130f77e23b5b8a63b6b5 -0x07c1a4f85acbb1006bc81e739b09cb5eb284ad600fec258809c318bcc003dd88 -0x78340a5a19fd9838f738d8b45ef7e22c24d1d3a5d3f9b7417e13303da70fed8f -0x779ef3cc353abaa79071050e454ac476dae1e1139546f444fd65afe1b62ff7c0 -0x98d80b012bcd816dad678bfa43eda5d1ffeb0a6dbb9e434c29ec2f3a4bc9347f -0x98aed3ae3bcafcd3472c911090679817c4f5be046e26d80a920f4ae99a7642a3 -0x5ce02777144eb5cdf1ad09c8bd8542c1013304d85fdddeb4f009e91f878bba96 -0xe7eb3c5ea67af4c89a2085002181f1a08a86922ebf664ad4e64e805d81421912 -0x9957fe32a11e42a9129b30015cf0e77c74abd05b77db1577e6de18d4c4c2a1a4 -0xbec4e61316cbac0916e21d7b2c8c894783a8ddf17b796f4fb2a4d36d501f193c -0x70b2354396281c8640f9a083631b2f5629b58aef6ec624bc8444ede149995e44 -0x6a98cd017050500a7b06d38c13455027b5cd9271ee987b1bbedcb1595f917b88 -0xe2e9b07d7ec86c8992e30676d3bba82338892e0954eadad234e343d501376fd0 -0x71077f1dd88dc87516a8ac78ed812f0a207ad9253f6268e64ebac83d7d174e98 -0xba383f8c56cb418109d1072419a34b3cab5b52b460b7c0e2053b695cfbc8c8f7 -0x7bf51131044c78c5ac031d805ef5c9731ab7ed3914c53dbdcbc887ff45ab40f9 -0x4d5fddfbe583df88f373b823a681a035d6014773ae5914365c97e15733f4280f -0x1368df87c43e46887193866bfaf8aec5699fd1551fb6ce573b69b0783ab64a9f -0x9d2a7657cd674c04412be5fc64eff470cd1a60411ba816a39ac891ed60c00f7f -0x14889e338ea26d7cdb0469f883240d4ed487ae1de407caabac923464e330dcbc -0x3b7bda0ee96b61008f3a124ce19b42709530632d13ae73e7affe7a474a1cbafa -0x4cd3aa779f2dd0372e9fb5b8cd01cd0ec53956745f0be0756d1fb1aa23c2a623 -0x527e4bcb48a72320391575b135bad5520d5defe2711bb4f3d2afa45f92e91b9f -0x244cb55643e313321414f78705ed7faebe55762a211c095a22d2b1ae614d17f4 -0xca5c696b06822b57d4044704952b0eca800a9be7299c87dc86e76ef163ae4237 -0xa37f75085105b5f728414899097eaa10c8eeb15276b13b415262274bffc7ab33 -0x32e833918ade7710bdf2e58eb3fe9caa819a75642dc64f03a75c389fc37f87f5 -0xd7ca0078639f3cff857b2cd5b7e004c377a7ec6fdac3c15050ca71eb7ce1c213 -0xce16e840c2d7ceea85b009ae1c91c04d63bc5970f2d53bd59fafe09971a22d26 -0x0871bdf83b05ddb64346021ea07c5079345b9757e9a194a83767aaa55f6253f8 -0x1c8ec3fcc8511a6704938f104d6154bb2f0d4202d80d027e625144e1b60aa7d1 -0x6f32e0780a59880ff6d965a78d372e3cbbc80435c7b731aa52e1aafb5fecf8dd -0x9834685a015082cbcd544d6b3adb94db105ca95751202be92ebee8b0a30f9a51 -0xc8cdc98197fc91f04941a7b27ba59ba88393666876ab3f2d99b3fe475ea2c4b1 -0x81724290a1db0d038ccd118d4d7eba0ce32ac9534c2bbf4c110d129b14f1ae75 -0xe30381a0370562dec6ad761d85fc6df39de648fbfc2268bba5f78bda13731d31 -0x7f2259305ee17cb14d8646a673af49e02651f68b8cff93cced90162fb989e343 -0xcf40455e72da5c5d01148db989007ed3cb0e52e69b34181d6ab6cb5ffa4f29be -0x71c2e4c8c7b2e28e8d17f65d426b69ec2429221fa226d146ae3faac45b930c43 -0xd50235bb0a3f8a6749f233b5ae1ad9dd98877ea4948a07270f611b4417ca7722 -0xbeecfafadc4db693dd64de742998572c20e258ef4b790483ce8a18dcaea27d44 -0xf9b7d9514ddfd5f258cdbff1e1c6a700d0f1a1649e7615c8737fe689e4dd703a -0x1b9ae07c8fcd2d4cb4e7b8c1a5e3933fde3bce11c0970a849315235940ff355c -0xf6d39380ec13e7056d6250451cbea447e2008f312dca9e641e0e64a3bb85518b -0xc431fcce6ea943b73a63ea9209dc276394725eded509d8a520165d079cf6c7f7 -0x2d5b59e70c168968b80577264e68e7e3c44311c4af37da9140f280f0d8429a31 -0xd359dcf05b3b62a92dc7d31f5b01c902951bdf2c2c4e30fa25f2a946fc62edfb -0x82681c74253e45e3234c089c374c2517188cb1c9cec10870b7f437151b10f4e4 -0x4324df4378d6a5e74ddd30b160b2d5403b91005648102f3b15015668d035b053 -0x3a2276ca6829bc5580fda7ecfa8b9ff14b2a64faef3047bb4be9eecff78deada -0x4d8ee6500d2cd5e46fed5c3f88d2bfdcb4a5bc5ebfdae067b8b4096dbf180f2c -0x27201950376c6c24fb02ad38c4e5e1d5fc5bc6268759c6df3ccba50ce40bfa81 -0x55a00f2089b5ab94c9eda4ce3ec0920a668e3890675c62ca8ea612aaece44dd4 -0x4d0762c8a8cb66b15b4e2331b1299a96531c9e7202d3f6af1f7220dc6b5ba9d7 -0xa5961120c6a7b114f022a84424b93e6541f45251c8252f3b6c81e793e149a44d -0x2a9cfb18db443edb09623fd0992e15661feda861e5c4f39493966dc8bc12a648 -0x52e135e40fec60b60680e5bd57dd896cad0db63b0f2b38de9ae51f271b6244b4 -0x9453cd3e3f09ccba1b1fdd034d31046313251a4870988d3ed632b27f4372d254 -0xb8f5a4729c150e963f19b09c9cf9f11a6627c7a452ebb078fdc70baf7739ef6c -0x8256e3bd3e6159b0d0ba2ad2b5227ae0ade346f13f7934c10a767f93f3055e2b -0x12064829d3b613b0edea4f42f68cb135c4f92de46b517e2406a2e9bdffb09860 -0xa49c9629d0c024317347f78095e613eb533b464a881427ae7dab1d6fda839ff9 -0x98485889987d8961f3fa3c2de1527d9e48e2af45f3c524dd6c49f752beefd731 -0xc29621eeb9d1e34bd6235013a6863fce247a0c8aa7ff13eebc51859fd1bfc87f -0x2053b4d65ef26704149b2c19f47b4d08b9625b169ef5353ae54260fa6c5c4571 -0x452adc5c019d42f8f137377c25ab6b48a31212d2a0576c5be52fc6293b491bd2 -0x461632ebf1939205705d8f37bb6e00ccdcd4db2c56540a17dfd4f521e16902d0 -0x11195faea1f4caca7f81dcdc690ad6fd33328ec699b0af70d4046252e3b0f66f -0x7ae4a20a3486cfa97bea12306a48a1874aa65cca4a3dd5fa6b6d130610dd2620 -0xfaf9b0723e412175e134ebb3b1bbf905406c8b006ed67d6d1f5680d8e70a44f0 -0x3e707c5b62f604382600f59adfa35395c32f85e369428732fba79058aebb9af0 -0xe50495eeec2a187d44c3b6b033d949157a0545700178bff802c007b52708409a -0xc67c6ef0f79256b5447b3d93d69c7cb8d21e60bc00990b0b15fa7044abba03c0 -0x5078b0aa6d93ba19d3cf51f20055a0d3fa97f1b0ddfeaba005ea1de51599631a -0xe5ecb30a9090d0901b84a5f650cd86069671dbaa12003d282854c67f9bbb5c10 -0x22659ace8c0a5e6ce266f88fbf68f7efc38c991c231c5723c6f69c3ce67033a9 -0x762baacbbd1ef609b44cdf0e2d3f7dff556d177b631637daa612b2b515a0a7b9 -0x743767346c73e2a70ba4f296df8044930406f87fa964b55501556d6a45807575 -0x0250584cac332292855b870b04bac0917cd2822ae49861d7f84929c0ef1cad2b -0xfe905c3a652b390fc966eec15e3a46e639cd82e5af05d0025f6a7b5e8bf84d51 -0xb78e36a3ad4fc279e99abab75a7596056f7c9ab8407a21a12a43e3fd1d9773a8 -0xe02446400c2cf47fa8e5f132765bec7150419b20c5530980a63b953e899074d6 -0x3e88d95d206e35d8699738935a7a64f09ab65613d70dec7a47c4e2ac72d178e6 -0xf82fa7afa92bf832dc8e9c0ac3a92e564957ea201c0fc95281826d8585879392 -0xc83ec00da98bc040a34db0e39d50719fbd6dbda55399b760c91b4ad7ce0ef95c -0xbeee44fd85856adfd0fe75a7be3b4aa4e389624b2928dcb6f811eba8feb6a900 -0xd4a5132a531fcbed2a9a2217cc22618814a73ab6b76584992d308ae680da366c -0x50f9a58dc483ea972a595c1b4d936b3b7f9297997a104b500111874c18b86761 -0x006433d45bc9a83ea15970559d95c05cbd65f0a5b11d33c44636bdfe1df5d9a1 -0x9b3c1bc1f20a25f22e2d3d02115ef0bee133872d185fc8099bc92090435e3a4c -0xc8486a516dd18f0e4795419ef2b2b6cd82291d0b832f7997f7dccec83b2d8678 -0x9f2a369e28a9061f2b49148ebb403262f7cd56fcf3fdcbd77db5ab249ac69b69 -0xf6ec93656d7b8aa70ccdb60786dc4d012ff415104c261d32d28fd2df2defa4f4 -0x161fe9f84a4e419f0510c4617a08eaa163b72c9b9b5145aabc88ed6fe1e959a9 -0x603b966905f809d71c60f09e931059c658f2760fae4a600889667d7f9e4ba679 -0xc637eb5f7a7f741f40b7bbf2263983a058ac4c1023596f2a976726abe29fd229 -0x847b82bde8ef58fa01e275b1980f45e57ed5b89bcc088f9065ddbd54e9b82588 -0x1f55934582047e527ac4e7f4b7bb96d03a33a50744838f1ac11407cbe52e22e1 -0x7258d2ab27e33c1ac2bc434d5dfce4be2fa3e7057b7342ad2143b1ed3886c9f6 -0x8596e4a738a58e526acf62e93a96f2bb6bb52c99790456f7e675fdf7e6c3e296 -0x7308b901c3f5779c33f10d6ade168b267f24a43feab84f0f511d244436241aea -0xd0402d362fa9922bdd7572d2d1ce1225b6dad669fc176414d4b6511e76cdb3fe -0x88fc4dfe44fcd59b97e5c131db439226d58affc98a7cfd0957a7048e9f162b5f -0x0fc62efd46f76d8a9093e58fd689ec89657c86a747677f9150985a20442c577c -0x4a52e98806cb1ac3faa0bb3b9761db1d95a6bf2ee36e3364969e0fa792f5a29a -0x7e276d86b68bed3bf6da44e7a341f815bb250f3c8e7e5efca50e2f901dc198c7 -0x55fd613ddfc773faeb02c446d2da4aae1ca6ac4e0b3d5ccfe4e6454313769a1e -0x57df88d645328522d898e0f6134c5ca1fe3faa4012084961f5589f29c5c94337 -0xe252be2b72a53600124c097fb7a1e838fe76c3c010524219c1c3a2249a973bd5 -0x808f6dcc954e952a3d368c33fac3ee260ddcbaa3cb641b713b5dc70bfda6cd28 -0x9b4e71f4155a7c73817611476d9e9d6cbbae06e971d193ecb8096a685bee7a62 -0xca9305921b6534fa2b8cf1736a772383f586cc8a4f522827659f15ee909155b7 -0x2611f3d32b656ec4011655c5c4f9c3afe9783fa3d4c583efb13a0a04020a27f6 -0xba9bd7c425b4c7686356da816b88ae4b46bf4c804f8835c1015b51de2fbd89f9 -0xe56f8a5797bfa5ec1ba6f71ca688e1e6e3756c6b0da2f7bb06193fecd288b3b5 -0xe62f64bade476b68b5e17cad0e4ce3a1b352a52f84ca6d9cf0dda315b06da614 -0x5121fab474d9e84fd0341a9ebb475e5d5d034e50802061b4f7e00e05fb84a9a5 -0xeefe3eb83024b2068d7260f7951f2e2a9809c64ccb6c6948bdc021f989e38b16 -0xb49c86aaf3fe5e53ab316bb6dcbb9a6aefced38abe3e2b9d63363853802b4656 -0x92c19713c20536ce0c3d11015622f8a7edc820712ba9f32ccda49d7a16175b0e -0x680d6713a71d09f49ec73e0580ccbd0f4060d2995cdeb21c8d8db7cc4b4fca1b -0x8d7c05663b64d1b0da2da077a835454c7a135f5fb4050c8e57e2c76921aff2b7 -0x5436c59b3b642da15b3aef0608207adf89d442bed057afbf41aa60152a08a2b1 -0x547f1d5ed90344b1ad394ddd3830830dfd7cf7d1ef26c724c97b6037500dfda4 -0xe42cc7aa52dbbb72e1ad7307b7f9e643db550606e99117ce2d8ed90de19dbadc -0x7b8c2942e025c7b70a019afe43ede7a6bd3aa4c6565d39480573080061e79051 -0x047c61cb9d3c329e9660d5db9ae99298dd8a32b126f1c1fd631cf9ad33ca1bd8 -0x6f01193bb915df6762acd952f66bf57b76f36a0e093c9328b399d09fa90d80dc -0xa92c5f57e2b709c982c5b54a6ed38b350e54a9a23fba163773426dcd6e0f529c -0xa6e4b159e8af8d5ba9ecf8248b8876fad3712571d82f618fa0dde1f2b846d3c8 -0x047a04b5fe87102c40ab8f533a0bd58d266525c41aeef3add25b3d867a4e11f8 -0x7bab776e80ff95eabe98a8769f8df959811fa1474dcde6fc2c9e46011d11c3ce -0x266249ef6a2faa4c7781cd07fb2b2a573b5d542659ccf4d0fbec1aa66c9d50f8 -0x27cf17eb581e5e76f12f68ccc190db9294364ae79f8f0c2c7846a63e678cb4b6 -0x6a3f15042d58fa60984d7ade5b6eab2871c2a0a39678806b57079cf2ad9f811f -0xc1017600521dcf8eb45bc34d9029fe9a16bad1b9ba885c58012d009deb738fb3 -0x467b32f849d7e31c20365ca5368a2816bba2805c1b8b6512a90c422fa8f072b2 -0x81dd298b23515cdad25152242b8a726ca97f842cefb8711dec6effc33e4af021 -0xc368ffb073ac0bfbe45369244a8c3f7329e2b47fbdbebc0a44c73c943ac92a35 -0xc7ee9f97fc3bb59b221157678e7ca8eaac3811e7095b5f2d403676de8a3fa3e1 -0xa8299822fcef9ffd41f36d73ca99628788de436bae1931a79e856ad4ebc09d89 -0x3e0316e92453cced7d4e81343326307255eaf55e82230d671dba8e54791c7dd3 -0x7e08aa561f828490efd38bdfe1e5147267b9ff3f18dd2638ea1f103cb20a48e2 -0xf8cc3b5abeb79eaacc918716511e518b7c4cbe7b58d0e92acf26e46d60e6ec68 -0xf0c5a4f60fe8f3f851398065cd099b120f32da551727357c10b0629105741f8c -0x0538a16871922fc02a67e198f3404e028e69ee500a50bfd05e17491489d7d682 -0xd40194832999a63689924830f2c0b41eeb321021fbf8201e1979ec2b201fbc29 -0x46ca59db5afec726e0b21c656445b07d83a76076a4be6ddb0412374fb68ca6e1 -0xf881e96104dae5498b5564e2150f1047b4b3266500e55d97d1c2731aee007286 -0x768725d780ba8b67ad377edf1ea9b0f662cdcc2140ed57c951e29e13aa71d95e -0x50c1039f1a942b482703a2cc2f77ccedc2c4713664929fbd5da60141bd86bd7e -0xec67093b1c2381d1776d02b8b7aea4060cd5af2f08d7d788af4aea085760441f -0xed3860d8eca3de59a4ce1c0ab64e93f83e21f282897af0421bf3147a208ea217 -0x02afe372497e51a9143002a20360e937cab6fa8cb47d54b8b27a77dfbe79557c -0xc2a86f62e0a2155ba61b34b204fd75060b50e2e05d159f6b726ea3b1e2e6097e -0x856ef7babd6ac8beaee6988eec198b894c2524ea97c8e29e5c47c24afc534134 -0x0001f2826a9291f883016bab74f8cfc16cb761f3e18fd2c7be0d4c0f389c4404 -0x2fdf61ee0033b0ce4d251a8b33877d6662997fea9b59786bdf0e61b9e4171f92 -0xc70638e55b86ca891a35f50e83d401793ceedfef6dcbc94dfb04e32f0478a9e2 -0xd667d177d6551657bcdd1b0fc0d22b10784b7f42f82c6623dcb2e36c782a79f6 -0xa9c483ebc5b4d000cf824f6fad5657e78aeeb1c13c68507133246abfe9086c4e -0x3186ab54ae633182f5ae3fbf39238c4fe053010b46b8ccb9e14dc6e5c9b17227 -0x4580ce97898f5d66212e45d20325a8dbad43a9e564b857e33b2fc63f5d9f549d -0xfcdf3e4a07bbe2bcc6b89314d72271f45d7c91b90df71c35272cb5ade9a56e36 -0xef5d1e526a8b20b48fbabec42c66839ccc1136427871c90640714d80154791d7 -0xf1b1ccaeb169b7bc4b8f02fe8eb49006fa6cb1289adfdcbf550665c77e31bb8e -0x08565b28dc66296631c7a8064543da23c158dcc7dd56ea8dc80a8d5c6ca95c0e -0x03812171131715be789ca6522d158b1ea01cd6717d0e46f4dd2e4164563fc3b9 -0xe79154c29174c3cb734c803ec7a71ccb987e81a7a2211f5356fda251b90c4cec -0xfa2a917483b0561a89c6c76101695b050695a637af8d0f3d50e6a89c4c3c8b70 -0x6f16878c8a50e50a1c2d28eb201b0dc579843d13a364aa731606ac8ddd3ea838 -0xc3d0f98a267dd3a3cc5ec288ce5762a47c43cb419cb38bce7c932ed565236a44 -0xaddba11e26184b3a9282cbea86b0f9d505e1c8e1314f49d99722224fa3c716a6 -0x51d2b3792b7f153282c564ea21d40918bbd80137956c5f7a985995fda3cf81c7 -0xd4492ffabf59ada3594a2f7abe0d4b5f4b7cd034532393aab7f4771b9b97acdc -0x6fb8cdc88ed7b5d74f76f2d06cf417e46f53988d618c9594a7dee858dd71a7c6 -0x54d82a92bc1bdaf038495fffdc681b8f6da828f82919d54b153f401697cd7d4a -0x09c670155cb1e2c1c624ff2c642601b12e5b5d34ffa6ec174b4dca97baa2e5ee -0xea52584781a3fc58cf0c7b9cff08ced793527b95f7312a9b12f3df175e700fa1 -0xa15076bc86e86a5b943324ddb24d0cde623f1e47d0b123ffb9fceb1f59dad2b8 -0xe3013b4a850f9fe465814f15e27dd370bf8ce0aee49a7950b435aa51d94d39cf -0x2549141b7eca2ac2ff2e056affc039417181f8f8388a3f8758be0adedf9244db -0x00f48e134204cfaeebd2eb2ac16dd6d23b23aa80bf5b559fda0c1fb4cab02fba -0xadd2092937a8955732010f5588d1e60adf8803b82b656202769e703a4c8503e6 -0x050a28e6c07da157c227120738fed2e2daff5b5847e13bb608ce15316a1d5b81 -0xa155477ab5fbbec6444e66a4ec00d6d0323c0fa65b6b6f4ae40c5426693482ef -0x4012ca5d25a2d2099828db228cc7fcd0591d4662ce861cee470bd08264f59e98 -0xbcf233624116eef3cac59d7f0171715d34077db245d6f9d533488aed1fb63c4a -0x28c9dbbdbb3446a34aced187ec0e2cfb953d630e839273643d713c4471653081 -0x16dfa68f8318ba44b35e8f6d88068715d9f7cc757a217718d873b259bd31f7d3 -0x66674ef3ae335fb3787a08410ed4a18f2e32690e4a5444d8d3adc019cd8a882f -0x73477f3acf20578069561957d19b4fc0c6a347f4c3e8d44ed6ff6825ebfeecd9 -0xe6800102c4cbb28daa77725a163bc1cedde9e5e36ffac91f0c40a480a059d408 -0x635aab60d2dfaf5065c77a0ffcb12fa4570b26888956c011978a46b2eeac0b23 -0xd3437dbec98af35a9ad3bee21d1853877f717d55499e0550c11962a67abbb8c7 -0xab243c017b4753de0656f700f7b309b6869e4af22406c85eba760f26537e54cb -0x24aeff656e95f3b56a40a43e1f425b97ec7e752b57d1642c1242b38261d2a5f6 -0xace365becdd3117c2e727726b751cefbf69557ae939db91f68700e80d00c14c2 -0x17f78bcd4011ee12d5514e92bd80a44a301949dca59b980728264881fb3b7817 -0x84e0c5221a4b51a0eb1912c0437110c5b877af02c9238bee9cafef32477e273c -0xa603f9ba0a3e455f657120b29f76f1a20f7555f63f08d163afe61070f630cd6a -0x30a13d330c3532cbfc6af164fc937522c8aaa60fea5c4c7f42b9230804e78d86 -0xc8558aa093af422b3aac295f16ec43e29577a12e2f118971e38afa4bf1eef459 -0x2e7f2c4ed9bd385e8c7bcd9d9037c9c5947339e7758ea47f71d65ea2ca695ba3 -0x1532951c7f2a611ce075f8f1f4c1c438c368f16aacdef86e4e9c507546c89788 -0x9bdd18c42a2324e8bf605599634f00efe67f6e5d4e0008d7b1e8cb87ac66f660 -0x4347ed8c727dfcac78a48c2a6f029598c117f3fd3305c3c8d67cabf3b06866a2 -0xbe459984b64202254a4509bebef502f75ae2103352212d136fd51d986eace4ea -0x0d44cad779c31e4167a0d36c48d88ed0ae8436315bf4c2921e0bebfae3e26b6e -0xd6ca23182eabd84f995b461328ee85714e9f86e1ba62309a12201bc5113ecf3f -0x4ac6f3ddee03e4a23f917d2f3612f601d88e3ed8358ece2e340d9d75342b3b34 -0x6f0a56f0be3bbd5264b9222046ca24b02346a21351d383c894c89396724d87b5 -0x86862c6ba118724f41a7652162c402f79b2bbd14b7e77bf9ec1fd57cd008021e -0x9e67afb2cdbc7b755e295b234b14223f85f73b5789db35e093348c0d71c5956b -0xbe9c5646cd8254dfe2e32e31947aa8a79c9d35685a5daf9d9cd07db3015a70a0 -0xc2a8a72a0a12734e6bbf1cb3d06d48f35bbae9c1a11fb9c31d6133b88046ef2e -0x1710ea0485650e8e507d927b8f7b0c794f02d90cccaad3b2835b55edfcb89629 -0xe30b2e644a60773e5b8a89c51d89ed8024948383676852d71c408dd9f8f53695 -0x59c676ecada47910e1269c001fa3e681aba6b793278d05baa09bdd02b7274af9 -0x3b4ac2da7b393c086d58dd77d633a63d1ca0fa1da763257ec344d10c5002239f -0x5801c045664248a0324b4c640a27a54d1a0d93c97acc3a9ca63e6a31af5fdce5 -0x3de3136cc667b8a22c79084d440a940215fecb8daff86c34171e02c9f3c07278 -0x77fd8ee759e29db2e551f13ca627648351dd637937339e962d0365cde906df73 -0xf39e4377e22f380a9d6be3be286ac4a4e94c30e33eaf66a0815008fe1c68651a -0xdc4e2ffb9bbee0dbc948b4bdb01ee73af26b6aed475792abe65716f6501e05ab -0x926bc8daecf49d03489301e116524980c0f34217cb0771684e2d7aa64acf7b95 -0x53b93e740789014c7812bcb9954e4bd0ae7a61289096e6a00fb991d8fcb81eb2 -0x4afb477a5a5e6215ffff6b2998bf3837bf4a022a96a1420a11e18e4cf9081709 -0x7c6e3073b3e35a0a1848f8c264e1f04147acc233c855ecdef17c98a6309ed8bf -0x60e5eb68a5e00c3f6ef62da6d3c9fa8c0fd461b8ff982dfbb9fc75ee2c03df78 -0x9338997ec3d4d3fb667d68c86768b372de1ce5af2c735b8d80a8f089a711ce23 -0x96c06d30a9c776147fdb502d99411c041afad200f5027c4ec9aed6651ebbd4e1 -0x58134d8880be6f7f0fd1c91c570cb648c569f6c41aac828ac8c4950f4b07856c -0x65b2a5e28dfe984f5bd67028045229e3c84cb861fc520518ddea28e2cb8d9325 -0xad025f0c0d924bd231db4199d24332f4fbb5601ca7902efab8fe1c09950afd30 -0xb52b483242b13751c137c38f0ad19e5de76c11bd9baf1815f5b69b438866fb66 -0xb66b841b3c4b6d52bf26869d8fddca0ccd21730495d4988ef4f7abc440165e8a -0x0506105676c95bd967985b816f63bd08b3c766b882a2d2b634b672633f183e3d -0x51c8122b5cfd30caace772bd785dbc366b500b20165101b892a7aec10d4ddef0 -0x41663831708a848625371ca250c1c78c45b9bcce6a4673216afbae882908d2c9 -0x4eefbc4ee82ac9aafeb3e6eb64f2eb834591cbe6e081cbd0a4818a086adcc62b -0x6b480cbc1ef0708f915d86031d03ee36c78039e30f63f01ee616d625efc908c1 -0x4ea44532c0efdfe88a044be20b8c5522eb70a0fa4d0253eda58bebdf8037d69b -0xa55928c76082dcdf1c8e89803c9102fa30de33f0171dce15b7a3020571964d73 -0xa768f278c97d058649a4da1e86bb68b6b566be2aee309384d2397f603cacf923 -0x8803f63662f95d0c47bbbb716872b84a69522f293b5f1e0cc08085cbc14b2a78 -0x20adcb4319c0a1c8ff01662155b1aa72147578c98377037ac13f672fbb2cc892 -0x4b812c201773209832fc5122c7b6faf625d6b6874f6aa7eb156768d4ab17332c -0xf19de28d0150014a3f4eb25b8a90699d2ee7eda9c3ab8f7e22c37335a483f7a3 -0xcbe5ec699fd885d47795eadcb5a461a1177e602f874363557d3062edd29f4f24 -0x516f847d7111d1ee6227f9514c5d81947118275e623c7b2026f4ec5963813216 -0x792631b10aebe5045f99af088ef7e199811da83739c0439d64718eb260fb1880 -0x565f61d246541aea6fa86ca035a8601a5a89ff63c26c7f6da1e03fd9b1b85e37 -0xc726e36336a819f6d3d0fa07e6605630e2d29726303d2af9d69bf5205cb3e293 -0xe9dc3848f164d03e8c755f3f657210180d97678d11175ee54634be93b516851b -0xa51891d7139a95220ab1147e782ffd7407c4be76017844a52227c36889784672 -0x8296df9693a1e2db8f303fa947660f50157971d85a3e116d9cf1a318c1c7f0a4 -0xe241d71c068309c6ba91f6a366593cd7c27a80768f0d6754052cb925a809eea6 -0x93df242de4b85016200e62372ae048efe250f02c97ac75986af6a98795554ae4 -0xa15c95261cb87aa335ba4ce3a2761cdee17b85c44f187e4e987cc5032ec4463d -0xecf039be0b5523e80cd0e508f0419bc9138f94f14148d9013d72390e8564d68c -0x522242a190f8dfea0e0d18d231783b58cec196cd424b0b59e1454bbd6203f14a -0xef62a4dce115063520b126db98a1fdc77681babd93a1d6da08a7b7f7b76b482b -0x06eb2a2d28391776ef6995a585c87a250b3e4e80df9a3ac78fa07dae7068f33a -0xd5c7bf9a8cc353a075c87c58b8750953b89d0b7098464306385472b5507e12d5 -0xf6474e91d8c7301009d9e6327171ddf4b4e4bfa415e12c237c5a6ba582ff2443 -0x9cf913b2199558cae773b6205f199b468d5c5b1043e6addd195cda3b6d7d9e11 -0xaa4a90461a382d87e43b3e9914b8e7cd92d2816c3730860c3c9c6eb992141b82 -0x0dda3c5b39573155337d50daafec5ad39e440a0ef6abde5ac4187b4484a2a821 -0x3d9e0e3743241e9c2bc51505a30be6ad1ccfbe8cc542d255c785ce13cb31f63a -0xa7ce0248bda03072014b77eda2f4d869f5d781a3e364d6be4241f555c8c7176f -0x674ee5b0afa3f7ce5fdf0c08500e45d260b13791e890983b425b69c90619c76e -0x8381adf26d8738ae6f96f6571dd98b56a2e0050f1c8dc2f6632a9f9b0d53c21a -0xb1378d0d24b81014c5530dfd5fc67839ba3e9461d22721729f50869e8e616a1f -0x892ece18bf65ed66d036dd064681663cef253dd5c46a6130772235e300af00c3 -0xa99dd53badc08fc74fdf1f7c7eaada0042f3addd9483935879419d693a22f97f -0x8cbd5d8516f0b19c42ad694a919f492b9f073e7fe8f56606e881c6eb8046c3cf -0x70de936cbe2c29741a546182b1c9c4441c48d83ac1534c9fb69c6237e9bd6cb8 -0x074c2f21ed1bd135e87137bfbe96793088b168ce231175f6ffeaa87755089c63 -0x0a33c940307fa5b087938148a19dca59e489e61d7f556436851325d7189d8c68 -0xcea1cc8b38de8d14147601341c263e4c2cfd20c97e224577af0f74c542806301 -0xa09d989f6cdeba05ac9e2bc8bc7b5ad9b167ce4b837bfa4f3398e8e7deac08c1 -0x0ed476b9c6cf3c758676230ffddaee36a6aa2d44f8111e693fda1e5e42357ae5 -0xaa6bc102b484116d98822cca2ff9f1d7465ea8cd5b664c5725b6759d900538f6 -0x02915b3ba6ec09cc1516b7c0747fd095a2e604497dafdc265b35c8d5d5603596 -0x92be6cefca329aa1fb391c4e8c3dbc338810a0cf9cfebeb1bd279428326aac36 -0x27e00a6c16a02cb98118bc56e84253e90aaed789ae0321c36ad184e910073412 -0xe0b82a9f8860cc07dbd4b9b157b28f3ef73a04fc0c26e70faf1c3a8898ab8d48 -0x55e24856a139ccf62010a9860415719d77b7df8ab6a7f56e18388a0ea7668af1 -0xa7e6d93d3e8de91480cfa00dfefe02cc2f92c89d8c5979c6d7ad026f9ccc73c7 -0x67f0f07018b15240800b20e2f2f1001a892553c0b4ce9fd1973a8103486a494b -0x4da87c88b806be705c2f8f614283d1a54681bdd93b5e6bf15513231dd4e2d20a -0x683083878ea67139d883b468ba7a15c3470ff7b4ccf8dc89e9ba0624bf4b678b -0x2975a44106868d3b01be6c23aa2d8e2eda5a3f4d89457ed16aaedaada4d5a4d7 -0x05224db7a90e48685d257816f570a8f6ca35a21666fa25406c94d21a9f86f40e -0xfb77c73d979cbc43148fc7a37bde3627c81e102ea1356e6b28ce48fdee5c868d -0x22190a45a7ce3b37115f8ba9151569745431459c340882f5c65359a2386de10d -0x1d45b0aaa16a4ad16542b3485dcc2d21d039556c10f7116ec9723d790c2413a7 -0xcec3b96480bbff8c77b5785a81051fc081497f640f9a31f570529aa99aa2d3ed -0xf07b6c1ff7456011151610d8ddad7d49eee7e2b568b3ddcb1f1bbfa98b13073c -0x65e89f375e4e97f65ac2467d0464438397aee7c9cc2e3560665ba3a1fb971724 -0xec4094cc02a638bdb1c1cf839736d08d584e97ea100ec364ab1d5cb03dc28605 -0x7f88da473950aa11de48932a6b5b08bd3092a94257b19f99f0dd8a3d66ca01e9 -0xb405766b4334a9f04e903fb06cbda3aedb1428fa04241280ca16c82f434b2c17 -0xd37a7977842bd8d86b93830eecb9abeb954c206f0b79e09463f6c6748b63eb8c -0x914da49a076a7e40f9933ccdc532faa4e7484303b40faca28560f68f13bcc192 -0x571d115e1c3a9fcc0f26281bda75d337a84a788753ea3c77a7ce3feacce37ceb -0xca28a463dfc39bf2c3b586e3f40a2ce087d799e314a98cc169e74ab76da1cf2a -0x535834b4337fee0076226d9b8e96c1515753c0cc86377baa682997b81f9097bb -0x1ac179a11ee2cb45f4e4d5d4a3cad1f99116edcec09c7a96bf52a6faf10faa00 -0x41ecf75d0785757b5e8867e2479ea4c0062377099e5fa08921684ab56f224180 -0x058219f328ede72883a0636636ac76db8bc39235707ac1c58b38b7df3539f2e1 -0xca81526b300e50af667f54039072772b2f4bbc972470f1ea99b6bc1932e82055 -0xf72caf2af5ef38b6da5733acbbdef7597a12d484456769a13fec9ddbcba0a676 -0x18df1139984907e06df7b4e2c72d40742b7198e1c6a17056546d54ce1a6a66d4 -0x75a2167e9978011c0a71c526211b3e0a17c315bba39961560dfbae21b23047b8 -0x2154ed91dbdce50cefc45e8f98203fb975672e7c24e11bdb7b5a7ac6af948bc4 -0xe68ca0402de217393e2d01e7bae2cc1a6f9a50b1501de3b5eb9644e71ef02351 -0x863c2e3aa138f3fb3ad96a916c3187052c3b2d012b8bae55f506352304b29697 -0xdd11250d1db6854c712c9b2ad4709a71c1e5032f19361fc072131b0d07ecbbe8 -0x7fe79c307b2cc8fd717c0a7df9a1b643a198500161812e5d2f0ea657b1e87ff6 -0x0a9b623e150379eafca527209a9120bcc9c9677ead31a27ac1a58444d0a5392d -0xf36746271eb19280d2a6f2423243a8d794a89702fe3708fe9ef4dd06d9b2785c -0x9e2fbb4a368f24d7e5e4b716639e6b34e0fb841a7126879804164a609304f573 -0x2ee716721a406ee7a3436fdb3d0957a0f2a27e67b518439e6bfe7bc04f85e7da -0xdf2e47878ce2c1a71a2754a12549f056caaac5bf2d95a20346f8970a41b4efaa -0x3f38cd950217fcc403ecf6f3cb04c4e93097d0f801f47de12afc08135b35ffe3 -0x86f9576f1901c9f0d9be4737dcb3f3877ab02259aa672cf7233033d9f5fb3d28 -0x89a96a00cb9b154c6fe4ef4019e91c6d151210eeae5f2c0e7f2efee460274f48 -0x6998ebd66133a1d898e18e8cad4fb047659683925518ac0dd74a32518af86a00 -0x45849149503be989ed63c7ede216b3e4ef044c9b8b78eac0c0372b164895a3f6 -0xa05071ff14a1094c3b48a9c44681093d5af2aa8017b1b84d278b9720d6decc9f -0xe3f12ae7fda6e933c7a07f9da42103bb76db6950258e3d9048e399f85b28a295 -0x25c8d4bb65cc5e904c2d164c64b94596fc95b362c49f897834f6f37316d2e968 -0x1f5850be3ae28d7ceca3d6d4ba399bfcde416324f6852bc7597f5caeaef4aa83 -0xf986df8cf4233b2cfcddda5a4b7a545e1cada67ed075111a4c37562b4ffc3371 -0xb5b686f0b2582df33cdce1f6dc7a4022b4d8d2255f72089258351267adf0e514 -0xbbcda10037e64fa2703541645d21c5bb090bb1c7464fda9580688b03c1c618f9 -0xa03d0e485a37d3f2df0c216dba077f3d8002d9a2b5d2462944dfeb790e7e2b8d -0xdbca8a61c1b5b99b37c5e6a0287151cb63c007d354e5ad6b1307bcc69abd6137 -0x44667432772779195672369dd0d8b2b1c925577d01a2c79d7267c4dc421968cf -0xa4722ea54ee26b9532245dc857c681f1f02735f1f60a45a8a016075e42297403 -0x4473e987b53214ee70c73457a593b79d0dc596e7800a403a4a4524165eca4875 -0x616c0f713af2f2804128ee3c35b660a9b90ed974e7c4ca5daae4883f5cb77c74 -0xc2ef955797711967d08c81b5fdf2b24b9d1a08c91a8b9dc0b7fa48514345ed9f -0x73523743780cd74e9a9806ab1f97db197b1acd73c5a67e0a3692e74805e8fcc5 -0x13aeb0ff4ce95ddbacf571626f3499c15d419194f83dd6116135394165c79955 -0xc89a5abec939ed59053f8749d1fa5d848bb0307e6f8c4f0eba512f37a0a379ab -0x753588d4af241e7178b67dded1b2506237630a8314c7d507e927c25b83abee38 -0xfd37125046144a14aec7bb170fbd1c966c702b85fa2d834288c7c4716c6e1450 -0xdaa4ae80c73c6657c163a802fc628c278f6ead69fe4cea642267467b0fffbc12 -0x6c96feb68a787b3ece7508d67048d11827f1ad5fda68edcbeccf7b72ffb22e86 -0x4c53d525c442edbf24d367a4fe06a1cac2a900ed33391ffca4da4a6772b028c9 -0x3eb7b83cd8bef0907fdde3d12297c5318916d9fd2d4e1fa6941b4b2c76b0424a -0x6da95f2b0010a5bd193f34861714e4ad2b87208154dce31a06e1d412569fc0e1 -0x5e6689480c0bd403805ddf8f00d2d6b4051ce53aa0726a5c38e3213db98b7e78 -0xf7746e12b285f2cc0a3887fb0341dd12d14f1bee57a8375f180be3f2842532e5 -0xd632f85ce6b7f9c5e15231cc47ccf3b21e7c28561d4140cee455c16cded44fae -0x027db03563e8b3478300a1052a0c4604fe80117e7f3691594dc8aa1244beaed6 -0x747b840b5a32a35ac293adaaf5654583b748f25bd71a36bdee7a602a2b908d35 -0x9bb7323a4a7828f28bff3802ef3fed414455c2672eff31cf25d43ee3cdb53aaf -0x55fe2563e809add898fabab292e3879384e071c0add2cd7ccc3236ff241a89a2 -0xe4218833fbd1142106f63c92c219f5ac909440d075eae1015baa97b5bbaf9e5a -0x51977d259ff2c1798a48f34dd32e494efd80ba04ffc3be9bd56b520e71130597 -0xe57bd4e735e5aed4028f4d84c6ab3c1a481a44a926d8346d7f93f014cea42e52 -0xd03a2bd5c994ca9d98d09301e2429236fd4dba7a006a6f02cd3cc0f5244fb4d9 -0x5f35c61241928391b1119e89db52fd26f8b140520c3412545cc05bbe2a96d960 -0x2d62d2aef83b722559c9b6224b3266529d8458d31bfa6ab218bb0213a9b1b830 -0x9097da942b7e83416e0ac817e18d6b1e4f6b8754ed2ea39a118375e24f1d33d6 -0xfd7704e18f81504b4da535549c478484489e18089bcc3637e5fd0c6854ecfb92 -0xeb19735d206ab910709675e231dffb2f9f87a65e1ba9308b1c2b167195e24d3a -0xa8aeee02b2ee7e4ea6c3b46fcd4a0d679fcd081ef2259dfc212f5e31f6955541 -0xfba08514fcc6c6fb2b5449709575ae909cf4da6caf94dc9cd89ffdf8eeabf48c -0x1a7bd2ea4da583d333af84da000bf2c98bd81a0466d3e48138665be5c227910f -0xb16ace5f58556bc87eaabb5b3492448364ec623a29e39b2a73b02633baed0e4f -0x5d49620d64879f0c9711978c95c73eb53d7284cf34e462cb6835d44e1814d67d -0xde97a962d5d2c9f789ff5ce24e39e427d7788a83ca438cb1172cf505357b1dac -0x41189f19c8ccfa2336856ee8e43cb2c8601577d46d30f9cc5be50da7904b59f7 -0xae6894af58ae152d7c623adcd202818f3cbbcc51588d9340f966d9a6e1438c01 -0xb47188c1838c7902345fb93814928e80b57778fb587dab93256567fdc817bc50 -0xecdded0b24ae03729911ebed789b6423d52bbc8f8ac8e6e9d6b5d272f5b39361 -0x11c44e607eaa0251d0cfd1edf2a919fbf27d9722e2b277c3bee5d662c71ca6ae -0xee9db6954f41d45b0f517912da19d56e665fbe0c5409f63e00bfc5ca19d2f394 -0x74f087d90a2395c575d4008680f8e6ba6db0521f7689dd20acbadc9fef9652a6 -0xde23a03b1d69197d104194c74e5776e135c7e2159d71ee2ff9664232796fa978 -0xa22a1ce8142ceaa4750f3f1f6949ab70d583df11c5ab126ecc09ff3872e9b0ef -0x0c1af97b6f524d7cb6474310816a55f23fc7f0d2f972078bceb7cff082749c1a -0xfcc2c59fc7a51ffe88bcd8538061c77ac32ae594c4b5b71fae988c47c6614d2a -0xe1c4bb147ab2dac93108c10ddc6c3d820d229088b7f3b04e17b0bce06e8c2bbd -0x4e684a5545394e54b34fe3f8f9603cd6b167a00f84792210515b8054da6a4754 -0xe80a97f4a2855cf3548db7a120cc590983b759c8d733b62ba5f0ab797adbaec9 -0x3a8e87d264b32e885db7ed2f6fac1aef9c11ab0b738ec27abd63c64b7c2f47c9 -0xad4aec0a3b06087f1dd3852b487b2312ca391e78e0008738f61f92cd2cd20433 -0xa09b60ec399ba703dadbf4230c5d4cb3924be883bcfdd58fcaba438afc3bdb22 -0xec1fd5c395ca2a9c1587f76878d222e7cbd3341ae7097f3fb66e031948de4726 -0x85540c812cb8864c6b8682894c7c35386b50b13f46847625266a4191a2754b6f -0xc27e3e8ee08a7ca859c05df3fd79bf6f507fe07cf7407ecd53f8cbb3c23e7c81 -0x1ff7dac1ada4d933b1e7120d46b7d2055047dcdfbd012a4913a8e33dcdc9c82e -0xe7cd99db2fca68e9340adb38ac88a36be19f774dc33d4f5fabaa55823cb4cdc5 -0x3232cf0995c26f27d72155ea479b34d5bf4632ed24fddcf71306a88d04162733 -0x0971d9ec5d3ec8c4cbb61bf7daee5bc1265a89b453072d2d3ae50c7cc1b6f2f4 -0xf940b3dddd9f42c7e57d8837de68d096fd13bcf83d88c18b531aa85f907df952 -0x03b5564f6a2020f296db4bcec74115e61dd6179f571ba79d76dbafc3125485f8 -0x670fed9412e6cf81a0a6f8f90cbf13bdab7cd27575dbc17ea509463be3a3c6a7 -0x10d57ebb2faf5e10c10bdcacfc78bbf86eb34fdf2290c623845c5984b326d470 -0x75a36b938652be81c1ebf204f51196c39904f9b777e6c82be3923cf970a4a4a5 -0x7f14f9a9ff2d7047f8ffe7fd555c952a7df219d9cab5bc82f211b37893f3e1b5 -0x99259c601e1e4d51e010b941e263cbcac1265928dc4619a6ea291b18ac0acc73 -0x8a26dd96d7ad7ed927eaa8f56534adef6970d12d97b3ca6f19a016e3982d2595 -0xd34e7895fa6edd0990abfe4301ff0495641d85f8382cfcb758268a956cff4cc8 -0xf5ca544de5ca3ff64a457a2b7e171546297a764ed286e585203f7eb069411757 -0x1f616b319f6adacdaeeddbf5448048cd53772d66f37e5751c2c836c53b5dd3f1 -0x2cc2cacc8755cee84b7d157b4700ae1d709bba23e4fa4eac6f79e32d943201a8 -0x6535e52d2941990421e1efcd5f9c48b9530619d2a96ef800f1c73269f7bcd475 -0x0114ad9f3f22acdaa2d2debc51ab5a04c9c229d3492758c5617b4ca8fd68984d -0xc23c5b0575050749a342dda12d43ac1bc05f506f933e2242aa03e2d398a335d6 -0x110b55d035e80a5de115a53d5a4d6932ff11bc8d180709eaa356c2b47523ede3 -0x03746044bd1a96eb5e82e7d4e4117151edc31c6486ba17b7bf243b4e0d30a378 -0x24fab6fe33f080cfccaf8d421fad97a3fd9d196df54bb1b94901fbba54dec2b8 -0x3bac67e33e2d9bdd29c95204ca5a1f408e48f57808b9f3b944ce04f2740694f2 -0x5a61abc38bb94cd0c610a326a4e74f2ded1fbdef8d77d368ba35661f77196794 -0x007816bdef5292d4eda2f570311050cd1365cf3188d4e7fc23c6d33e7c9b84f4 -0x1c18748b094f6422a4733b957a903b759d26824454dc94dcfced7213da59e35d -0x31d1cce8f11e7a42be73a26d2470815a52dcf3713273556c4a58eec7db36fb67 -0x952422b6f5117133eeeaff2477d637372e6b672cccd97ffff9e7b95e9dcda1d8 -0x5bb03bf1dda4cc22d65a0aa732f3966faf81c0b830efd6f4a29459a482167f05 -0xd8a4f26a0d316c4f67fc5095d9690895615bdf124ef6ea0599ea84b3b6d56b92 -0x7d3b36d078dd7a316bf2660ba2a7f652bb6c7f9e89f5aec2bfcda7771e1f16a3 -0x42d09add8e8955bbc65b2a2d4e9918d177244fbab34c470ef45dd442628f4cbf -0x03657380f71c5e5164a04c98a4ee412cd70cdef193e49accedd6e59423e0cce0 -0xd8ce80dd2f8c91f6f4021a3228b1bc29da0f3451075a14e8ae1f3f1e9bd51ceb -0x03feae23408451a9c9406a0d7c75c196180d7d71bee549ab9f7ed15985e01efe -0xea0089bf91a1002d54fae95fc78f4ab33638baa6948d23640e867ee52790dc10 -0x64de86b4672c879bff172b4242eb4943aa9124202ea6210417e3f090d7c2c37f -0xf924a7bd371c1c0097ed7282372e89e1db3a1bb53c9cdd9d556999e98b292c72 -0x70e363db9f30160d140663141ce1dfb85631f646cb66c49bd6c7cbb376344d5c -0x9bd8bdae159d866c7392d4d07280ffb6dd4d7ed4b6bc74d81724f5eff15c03b1 -0x031321cb80186837c808aa081fbfd18dd4100cf9f6dccbd7d37d84006a575a04 -0x28413a1230e6e9d2491e07373422ee53a3d9f338c49d57b6ac1157a3fca5ff9c -0xfff253142d69280bf161af3d08aaf7385c7ebcc5b7f2d1641052ba0867f8a69d -0xf960f2bd3f25753b31c7c1494e7f911ebacd28b50f8ff97d51f18957e3e42ac6 -0x6f319c19f8b6728c5819fa97b9ee6cc67e39294c3280218b1d6ed93c353f1fea -0x569a896f4c2a7381ec9a20f67a14f33600c64f88e030f6ace4c58a2624d922ef -0xb44435334ad828e598042fb06c2c8251ce552d3a4448de6935f4584827d820c5 -0xf0cb51afcb21e335894d8ad17885bcfff1328f5a8666caa1841a41d12252965a -0x0ab18ee6126179b666b3f06fc0347af88a6f0fd7367088233d6ccc4dc2bb41d7 -0x5fb8565b479f73e811b6707678c157f2cd84ad8ca666c74e8936511b3ec85bde -0xfdee8c5c0ed27f76695312dfcb851122b52edf5662d95aa19815ded2ab52d4de -0x389b51de8fe576d907fe0c4527f9df98ef4a256778a1d2fb5bcf0e384de25d11 -0x0e3fef5e840ff4dd28f2b8d50dc4f80e93be95eff04a40038517aa6c0f4f3840 -0xaff9e705481186f793b5ea3827178c6a8cec5a0fae8a87337b63e1bc117eddfe -0x7b53a6f6508650a6955c6866ccd0ce56c0c979b52333e171ac00c1916a25fdb6 -0x45a0d1eddf05a64a0d6285417af6012764c6877b3d5e8accbc57690e53a32ed2 -0x51ca66334f7a3a96482d4da2d5927c229f0cedecd6ee29ffee4b541a51c75b6b -0xd7c2e38792cd15295f1dbd900dfc231ad548b3e4b499fcc2641d35f25e4f4b98 -0xe20cfd8cb26d1c917c641b2a34fffd7e8c23f6b2bd9d0bc57d4b8153a601a0c7 -0xe109b638fe9683b4dbe1d29510bd549bb24b743f11cb9fd185a301200c5dd64d -0x02950efcee4b35854ec3be5657875feb6a4ff0454b9cc642f0baad6ca16fafa3 -0x78b17e3d060293d89443598d0d99e61c5de06ed3b29fd3961e433bd53298afc2 -0xc8f585aa735ad59457bbe0e9cbd3c866be0fcbedc03feef1ebf7415a2e524c4f -0xf6f99ca799dee24052faa8d62beeb745bee60ad67f1d819f342661bfcda6591a -0x565ff01f4241938e3d1f3d573812bce10b9d251a43127ec1966d08c632f646b6 -0xe10fe55c8f0368f41d8383f553fec2a0e11cc6f3b1c5764c645361fb5d0a296a -0x1dcaf2be1accc2e63cc068936fbbf8b86954afff78ee082b46de2b80ca73adbd -0xc9b62ef37d6ca7db4aa8bbdef45dddc22c146e8e492f5c8453488e1f9e7eebed -0x849cbadcf29948e3eeb0a17ec5ba30f014e7befb500410a381952432f20242d2 -0xfecb2cca0c56d890c4b948867951c57851115fb1b55a0a2d741702e26b92b35f -0x07b21fcd419b01d1a4fbd164d8678a8345b1159f0f3e097a6b5fcce4f4d82d59 -0x6e26d1974230f276bd6732f1b5365f0732ec0a5fb401c1d29d821173bc91391b -0x6204f243aa349735019d0b0a6ba481978e3a72273c7ed945703a0e0256779af8 -0xabb2141fcd87fea1f077cd801e9c3f9fedc39f0293bb111752b042b773ee21b1 -0x59a8083fb93f104000cd0412134949f8b0dda94ae21e7fa7e822d5df3d5370f9 -0x2033b11c6071e54ab6199f9ad7ef7938c1b33b2c07393b224f5e42698153cd47 -0x3d2b2235444acbd90106b0f0386a798b926f50776913ae681f01fbf5e05ad21e -0xf5cc71cf2c26fa03b055b36ebdb5146286993557754bd7ccbdb5a6d67acd0619 -0x7ba6f5960e70f734f6abdf95b4c51b98d7e11bbbd80fa2e70ae2e9779714bec3 -0x2d7d4cccc82d539843e4c2a4c4aedb91d9aaeeda5e15e93255d7d63952d738ea -0xeda4dd315bd51c002e1561ff1d3842c23178df4fba438e5d960021103557c8bc -0xd41376d89d235a1d1875916328d352653d7e1ad3cfeb4cb2a9aeba221f95fc59 -0x66061a109a3ad06e805a212c07dd7c729931dc1d82f2d97c86e05d337ebd4227 -0x4bf70f300cb484f63c0c0cb055710b8309b2385949885aa8ee0e8e47edd8d2fd -0xb005fc42efd18aa0d408d6c25d735a688ac3ac7b56b45a98476a442594e31fe7 -0x7230f276bddf14da80ed6c70fb60bf16d98c31ecf35395d93ec7d639019b8192 -0xc055869b1613a9fa142ac00070e212e7607b55b7457a05676ab34ee0febfcf23 -0x94445e4b6dc3e8ae82828f849d307eb217acc4f378911dfdf416231a74c079fc -0x2bee1f8896f93b518adf9d2a80311241e248356c2d277982a787d6a66a8c78b6 -0x1643da674ee590e769f8daf95829a94994dcfe3b0967348fbe3458c3b478338a -0x0c62b1e179c94c3902cb7acef450eba4e5215475911621a731243b837819d17c -0x666b64be1d54db4c7704f405302dc8faea3f1f2050db275a9d34efa447eeaa95 -0x3687aaaa7a5b1820e93ab09fbac29b11dc864756d7876e029d835d48f94efc90 -0xde76990abddf49f4e64a0b920682bd7073444f135cb4c8f30764bfe2399ab486 -0x18715297345184d18283fdf4c32a7ffe9297ddc460b83f5c7208276bd841809f -0x471be8c1d8b699dbc0160a58924886be57eb610ef105ac3aa8550751d3ec0cd0 -0x5ca3a6999a89b30e412eb7baaadc471869e3eaf8be5b6220d1b213dc22cca035 -0x244c21ae5b023d728c5f2f75fe1a39af458d61675803a84aefbd8c049103b8ae -0x4b3a6da98127fb2ae57eeebf2b3c7dd36605a91085f121bbc8c62ee92d1938dc -0x3aa25c0ecfee1a4d77b8e33f6a16fcf9bbac264736fb76b65c00b33d15893f0c -0x7df0d2cd94a27b19c65cb8fc730ac73f9b30406085bb57cfc337a49680ae9ca8 -0xefe413e4d9330cc0b2ba9d64d5bcb5520ac71fb032dfb0ba369783ca9e3b1974 -0x0f4b7eed10a853f306e21084f78f91f499abf9779f13d31765f5833b847137f0 -0x6169d910e19db37f2295d24a4aaba24e5c68c5ce8a67b2ee1c8d72e3020790ec -0x8b191791df22b8b8346cf10e5d4f43f6d15ffe540ff7d711d5df6cb3a1faa350 -0x638e5e24b20fd5c83e027d726dbe87398e956cfabd6ca69ab1863305f118503b -0xa30599e6ab449712f32d359ea606fd7e54a1145f1b7468ffd0a51a4af37bc002 -0xb303c48231741f352ff036cf9b817d8e31eef6923d1650c78062aab049dea422 -0x0068fa061cc668a47d6ae7654ffde38611e656a0ab02f441542ad6e069ca2c24 -0x91de7eff15e9d2822933c93afbcf3af0fec9c6fa03d1524ac973582d0d1e8d0a -0x9e3c99bed8e1bf5cd0e75b322d56be301aa838492ebea4c619d4614a07b9940b -0x2042b9932f0368d77dc3fc60bc2f022d3f38c4fa3c03933df6f5af6e31bd1008 -0xf0542ed7512c5a7a5a0790e263704f92cd0a02b36e0762d3590019d654b6a8b0 -0xcb734666397ca766b81ca8ca80cc69e22bb2ad682f67fce7978b72f1d3c0eb20 -0x5231abbae14621af2093313d58cbb575231a843cf76e8a8e3745c8ef4d03ffe0 -0xf0e26a98efe5abeb705541fb2f54f3cf87a6114bbc86eff319ba16aefe027238 -0xdd5311f752781be23824b10de25ba7c02aaebe04c6f1cc1340772fc139ac73fd -0x050254ea511c8ac66481f44fb7f87c19af6090ba013de4e80c75edeee0e605e8 -0xd6afd7fb5f1c3fbca9bcce84a6fadbfec44b0fd4342bfc48aae77eebbd3b3663 -0x1d2943d3de18cc7f8564919ee594bbb51e018eac394bea7e90eb9555497b6ac3 -0xb7c15e2c246434bbb4dfb9a8d461d3320ba3c4b283a51f69d465d79ace548a6a -0x5cf25bd7d72e7375132106147fe8fb1bc4b5729f64247334e2dd0ac4b4eaa92d -0x8efabcdb580acb124e3a892306a5ca8eb590b6d2ed611343b88630cf99a7c235 -0x323aa788341aae652fc0aba4c07d8e8466284dcf33b5427ad9e5e5dd8e835378 -0xc4ca932a7b31ddf6363ef039de49ba722d274ff03984f3bc74f7eab63f9dbca4 -0x7fd93ed5f152b05ef02275a689201cccdb06e98995fed8ed10a339588570b464 -0x14b516e00b5af955018a17d31a8a342a6682b663981f931b8cb3438c9b55e76d -0x07306caeb831e9a93bed16cb52ef0749cc9169c02c0d717c9a0b7554da7058ac -0x01e61cf6d1e839f66d64cbab180275a2507824e61e14bd547c1fb70f09947032 -0x341ff9517e6e0286731e88edfebcc7513428ac6618417adb95af8407170beea9 -0xace5da15b6e1be1a6c5ab72e0c972fe89c687a59c386ab2cd4f49d6a55daa106 -0x3665e69251cc31b5677f1058813bf8057994080dd513558c2e48683e6d762343 -0xfe380a81763147542a2e2e0b423c033f1375719f3a87e4cb21dbb92283ff154b -0x7a98095f2bef36dd1a1f8bfd101e190fba5f2ae58d567b14f264daaeb05bb9ee -0x121047409b4bb76dd1a5d5170eb939a1d9d63d85dbc790a4765424a88a95be52 -0xb22cda4d8b8d7521b5be52fb766012fba221e51135c316dec71d7625ce7c6a11 -0x4c5c4866832c08e2de6023ebf860df64ee9c311886d5e996d000b890a0efe456 -0x702800e1cc2e9280911955a387258ba213267f28b44131bd251eba2b1c8ee847 -0xe3b7b80800d3debdebb5c28e29150127e8f76600e0c0f998b0190515bd3d34c0 -0x2bcd995bfd0b1e88cd57ca5e5b77be233637e3b704690140ff0f3fa7b56fe37b -0xe9d4420daf307b5c8e2fdd0924265fbdcf1317aecce5b51f44233e5869e0581e -0x910cc7ca2c2a52fb592a03c0bc250f5066291124d76f39ca4873673889b743d6 -0x3ac27b89b42196f1bf06afcbe6011a9f5b36dde7ca816b19f81d73bf45229d5a -0xaf41062f450ae5ae9b9ed18366e8a4f9b2bb3d544f792b8c10c3de931ed59dcf -0x81da95dcbe5443c6646a2da336788c5ef080885f0338c1518d3d240591fe4981 -0xe673bfcb1443849243a9de979f793b7b3a4b244c7faf635659be3a26f37fd4f7 -0xe5527a78a2f040d649736cf50c050ea5c07b6edf05628c958b83b5501fff65de -0xd95676e7b2488fb9f59624bc9a96ce72bb2f18a552a3af297e7552a2eaaa80c4 -0xae6e01192cf2f782beae3dda71ba20a80c232e3567cc76c326a32194d0239906 -0x49495e6ba92a9c8e907c2d74ed3a9a53d4ee4b19ad1a4cb79fc698fe64f007fb -0xe8aa98af90bddd1e0c3ecce8505fcb926f4c70ac030c7eacbed44c021145cc29 -0x018f28c7160b44370ca8f95551c1e0ff6586fbd7256b6ab976e7fd157d312886 -0x8b63321940b1e1f1591689f06eda22d0e8bafd82a1bd080a7637ff6818aee49a -0x5c414bdf6f20d781087a301b5cc40102c3a254c434a24b4751ac3f9cd1959b09 -0x34db4a39f31daadc5a51a875aa6040bf781653c032e12572fb14c48ee6d82e82 -0xdbd8b5c880c6d994640cd5f486f8a64debfd7a6a786656cb702308f7d1af1cad -0x68d2e2c89f7ac92266e3ac99df84c539316e0a7090a8d32b2f8a86c92c8fab43 -0xb97d0046793777a66113198a30678ff8f5005757b9fe5777ee90d4779df44c28 -0x079d49b8d586da86c068df360f68d1267af104eefdbc05665ae6df7aa815609e -0xf089b1512f8360affcdf9fca68c9b20da10f9f1ccd3bb0290350bb477c45f06e -0x830b47252d084b40b8945e80f787a87ada30d98d78df5e950225ab1160adfc8b -0x0c154b576bff445debeeef5cb1beddc73eaa1adb913cedfa8c69bf1120e76b31 -0x8f872be92ba973fc7107aa6d45c2fe6d2ed66ed9aa5c4f66b23cb20b488950fb -0x08ad2976d31a97ff20ad3488028469efd36230a59f37203879c0b6acbf81c2b3 -0x7fd385f7176dea28338cb7afff0b93d962f73c858e9516e1f648f3fcf0e98f37 -0xc5741489f12617f54d4964950812003b1586800af9d1f07a4f4828ae3d1a996b -0xdb2f4dd4a210c51601176e80caa052c4f7f7dddd56249a3b460558c189dffb57 -0x14d5ef0cd000aa8fa1c053913a2456103791911e336e4f0f20b36f166fe98bb8 -0xba8952b381371efa7410a379ec30c2fce69d9e1ec8b36e595270c557f0c177a4 -0x7ef55c094c196202f24bfdc2cb7c95da81d6d1a2261429a1d350e80d3ae58022 -0xfd25d40de8902fbd5cf45d1eb9117b7aa0da6891e14d3ff6cb80522cb328b15e -0x526de9d8f23c14077f58aa820334477d5cbf7cbd96e66ba695d1458487ed90b2 -0x174a9db2730625f32396a1c4b9f8c23481f5f8a4da9137399b2fcef83dd98a3c -0xa41261a8a110e8bd1bc3a50d7545d6bda6dbcf405316a32c145d0de3ae52db46 -0xe7a7c29751d2c55daa116606c50958cf700ebee2ab073271c8bf3e16514272e9 -0xab0f5bf9b30499d4321b070e9825ceaaf6e018d43500eb6fb839969cb6db078e -0x94a796736d073599512c7b04a7033fc0ddebe9733cca2129dce7a59b8beecd92 -0x6f21bf713ac1be082e8ef2c27db99a4521db9e7bd4184784833a8ede4237b1f2 -0xfe8afb7fcd6ee6ca0f21048768f9a3b389532b76d2138dca48e41fe4374efe88 -0xdbc07a7648dca95f13775d61478571d233505b55f8435cfea6b07f635e437af7 -0x856421af99fc73a37c82ca2f68bf0819dca5193e7fcba3382f273ed6d3338f41 -0xeb942a322bdd85d340d40d0eeec5ab81b89241dd05c69448f8ad7dcb5da99ed3 -0x430562ac2458b55e596611fcd84c7ee4a0b26e7ae1500bf222d5479944da7b1c -0xcd080fb93aadd271c13c2e5d96c04d1c7e10f9a3bd862705c4fa08c0ab0cfa39 -0x49b8f73140caf4c6bb92db067248e518dcdedb81517d3f20b3de397070ab1327 -0x1c702abdf71a7fc45890cc980a8b737be4f3243c8e1da07f10cb6c8975819f36 -0xf71bd9304a99871faf0f000a7a28edfc489847f5b5dd8b89ff4f2b97e5652ba2 -0x4039acfbf9508ffe44382ef0ec23c3f044870f2567333d98cb9a1604f74e960e -0xce3e81f237c13476f2592134e9c097f0100bd90c6d587c05645f97598ec17af3 -0xe689d04ae8729ae5d5bc2b2901870d63c8e585c41177102c12880dfdd1d2f9d7 -0x7ed0dcab423a02d25a77b5983b7fdb5aace2c7ea77bbe86e121f18f92b38cdab -0xe269980249dc4d9d0f871127615b038225c07887c13f55ec8fe89533d3f11141 -0x6309ba24fe3b549d786f2eaeea60464184eb14be389e8aefab22ed8cdd2a6f3b -0xe0c0ed7f4eaaccb30d5fe3dd7b2985fb60f07af934e40fe903c2478c30747a82 -0xbf5687afd4ca81542644509c14b801422e23920e4900fd591819ec6863c4f2f1 -0x74ed872f17e3a436e840e4f05afb1da11e496526aafe5e8a9c215f8d0fd883a8 -0xef40c21678ac31b1d3a31a710f62cccb19ba9335a87cb2b72c01d598dde0dc1c -0xe9938d0b8578f4ab184a808a9db3d21c12dd6e8e8b1cc779ce596c493a80ab70 -0x3fb356281b198b6d1778a68ad75ec5aa2c01a19b57459766132f0c22432b9d5f -0x2c3aae58b35a7e0d6b9ef04aa9bd7644e13a87c7b9f37febad24fc80434d66a2 -0xf3de93191ed702750bd57eeedc0df6530f1fc5943d9c33c6b8082afe82c3fc9f -0x30634da0eee9e34b4de453eece09793150a9d432f079e769a8d6c661452866b6 -0xf9631fe41f632f84a4fee17869aeb728ad5179bab4e3fde8e4250db976ba7649 -0xc7a72db95335709aa822f19bd919a45ccc0d9caee010657d3e125a1d31a2a64d -0x9e05367ac91ecfd2871d422d47c66693cdfa12369c7cc133c0db41fc40c620dc -0x330f7601e74c8274b026ea2f3f05ef479075662a9c97d6710feb0ae54d3fd36d -0x84b2de149449a1ee9f4a31a7bc820c175aa81b290a763a813f9e9c5397fd05c0 -0x5537440215e4ce55419d5d174f90f1a71aca63a5e5f74e25e1bc755183664d47 -0x397ab0c097ac37378a55292b81ad5c6c7c98b16541314ebdd9280e862c176f9a -0xcec6de15d77e05278d20495f574c6edea602d52986aae433a6bb856f7eb1152b -0x6009e7d4610343933c176bcc347e12dcee55a4285ad652519eb7af9e2c72123e -0x5e55a372e4f92e664ef249862dbe52efc4f49d5e8d7cc87dc67b21f5121824ff -0x8aa894605cd12299dbcb70375ac1d2d0e3fc06416f1f0f3c04b8d0c426636e43 -0x21667fa52f2ab6580b341662d2e5e20553b91f78eb1d99c32aed4feb7cbeb642 -0x29e3bc1e44b9ec851ff1c9d0f5ce41bea955e2661b39f10b17fc8e88e8f04dca -0x2de0f948a2491f3c2bb0c75034060712a0414b2efbe629f7ee8436e351050971 -0x41a1dfb3f47aeeb796682a28c3a7c2a4bee6a8a338df10da9f90fb507518a59b -0x7ef6b4573e47213fa58680fc7c7200d2ec49c725da62b8a26256d4512d3309ed -0x32001ca367fd34d949be8323f2c7be24b9da69ab3c138a000723b8d142dca57e -0xb553594f56462bd7ee36ca62076217eaaab0cc920644d5c2ea99e816213903b0 -0x5471533abd16fc667aa7b7eaf8010320f5a9fe1504442cc7b5fe388dac5020bf -0xbe6950baa3c86437f4e1c8374b2ab4da43a50258c2deff2d5b072f1897b312d1 -0xf9d11de7e1acf0e49dd4074d9af57a2b20add2896d2bd9e9ae120c7de8f0b817 -0x1acfbc22834d2de93a7d6781f834bbca42b5384119b64b9b7ca210918c2a6d5c -0x78886a22c5cfb82e9e3d3c85bac6294db777210e37d7689be076107a7a636622 -0x89f783a4166d908a794f7b09b78e54590f755ef2a8e7b313a6561d6182be7742 -0x8acfc821f1a01d4b06468c2495b3c0ce3fecffa139fc0a3d2764b9a6fbbdf9ed -0x7b21eb0f265fd586b426d923a59ab9ab1130cb42fc40ccf037bd4dcbdc14d73d -0x1866921a6064f23a45792be5fecab3edf0e509913290c3d206c4e0d1c7857111 -0x1b1136d4a63641b8e0465e92471d43ecaff6ed9f9184cd62ad5035b2b18ef170 -0xeba2de11b8ab2c6d347b11c55bab8e21a63ea9993083ff235be1102fcb6c3f80 -0x75ddcdf292bb047027235ef9606e97a551a72b3c85be80eecc4252f3194eebbb -0xbe4fe9e2eed3f413a45b4f9be36cc2d1e907e911a2516d73c776ee0d65cd4718 -0xbbb850f22ca562a35495be164835c02791dd9c696a6137f881cb5a65f96223fc -0xcb58e09f0fa174017b70ac0605ddd7425abec7054ea02087629f5a447744d376 -0x48f93f5316f7bd0de7b36787d5d9cbcfd9c8bf81b1dc8f02557cb18bf945296f -0xf2ec5d8eb8a1636b32e37473086cfc019b0d14dd3c1d7a93cf61358ee88b9d35 -0x9df2ce76686ae01d8a8e730aaa7ab70a2cb5f1d6451b159803649b4b25bf0af4 -0x6953de621d8d49ee2a87e70ed9b69d521fcc6c76dca5b5cf21f952d2535d4d97 -0xb63e31d67a711a4959e51e8386dcfc3b0446fc092949e068aaaa89d8166e45aa -0x97d7167e07217a841063ad043aa40ae465211e8eb21093e3c076d570cdbcca94 -0x2c22c025b7b78c43f314c3ba08f9e8ddc645e64648605d3bbfd7f89d57b3f8ab -0x06a2feff50c281fe5252f4b44ef7e169217ffab513729e250d98fb9685fd153e -0x7264ace7441707d30f81e03eb44a5f98852505f5c46847f71d9616917262dac5 -0x0b217cac4e0cb0bf1c98acf7b2f22dfa7b494e349e783da62a395f6905a8bb18 -0x49eaabc12c57a1261bdcea8c06ce27995c8e80b5d1ee253193d77c9d64cc3ee6 -0x623d1c9489ead6b9ed453a1cc7ed3a3b131906e5d9b29cca3edd2f586b41ccee -0x88d941335e8de2e2bdd26ac65b63da6dc5298b235066277e77f6fbad2c5a9d7e -0x32a4dda50aafa87dc4f3d474f9a47a0a4b591700079a3e4bd5105d98b7013362 -0x3fdce9fcb4966cb3828b34f4c5878a181eb464eedbbbb1a2fee024b903826a31 -0xe37dbca2381c1506f4ebc736c71c78266358bd2426922f0d22e624fe0e82b91d -0xa63662befc46a07e8d24aa9541ad57188830211352addf72b03849c825e8dcef -0x59b40cb93183f4acbf3120d8f6cfc157251628fded8548f0ff5ae28e6517f00e -0x6835d0288b0b736ff85bd51a83fcfa7a45ef354d7427ef0122b3b3e10ff72882 -0xee3145e0ed1c08826a0f18e48649207932a69a1a79f2776bdfb6f99ffcc96eea -0x4eacd908d01b6525ac4e9285416a9948b401bd38e718baf9cbd142ab5f7a3650 -0xe7a00c45a9203058e2e8f0345807751d699a47d87d8d56a5a8d197b386a946b8 -0xb48a1a970333682f783c1622252173ae22188c3eae0f0ff32b6f875c80e6d189 -0x24f060457f7e98807cf25ae62fa4ca9846484ab4e2c853e5783017374b7930b0 -0xaef6516f54405297967f271382a4407f5d69f9daa4599b1619973f207708edee -0xe15480007905694b06e04f93fe0f3dfc967f145f26ed5829b260c07708634ebf -0xff721f81ca481b9cfef16ca44a1764b0c41770791c99ac3baff4fc2e3ea7bce0 -0xaa9db95b342893ae47c3c7e892c0e9a2595d563af00c0f4d3e164dd4700fe381 -0x9caa57c9c5c393c14079abde5ecdf4471dfe7fd61f15a91fb7e1efa9e8f700ac -0x1f1cba8d14c86fea0fc830bc958d1992920bbab8019fd19c4e89259bdce40695 -0xeb9f99f452c3cf6717d128ce836328e05a7ba22d77743c1843dbe3085c31d53f -0x4b71b15427fa7c39d461d3a36b0e4000f759aafa46b760e6156ed7326dedb1ab -0x52ab16be191b18cf23f4929d2bcf8c42d3d52e2f8664a558fc3d291aaa37766f -0xbebb5813b97ec54907ee8bf3e3e2c756ad8a0c4a4edb3d2ce35305e09aed9fbf -0x0cc54770b86f112738fb5d27ad4d9155afdc8bc65eabedfd416fdb179875095c -0x46d7da1271ab809a5af6b91283e5c449fafab930b5eda4c7ebeca7b238cecade -0xdac5c4a9c8e3faf07d10da2ca8744fec27792e4d09fd5d65b11d7ba01c606eb6 -0x3c77538981f8edc91301a84e4d72058d4b2b338717811f77bafa43cc00d32901 -0x418905ef2d59f2b2e23e7e265ed4a6cb162c2d6080beca025ea7ff8659782e5a -0x2cf6bf7d9dc35f1f95a500f75a34a182a70cd849f9113e73f5521f7499607d9b -0x01d9d2333006f53e58a0248d23137457d469f99d660072bbefc2b257cab33f3e -0xc5bcb86e0c8cc6e474fead003d2fa4ab2f7f8f92a1001cd332f921f9dec46ba6 -0x64ba0d41d2a572f191ab926348240bf14a8f45dc28fda1a88521d2076b39545d -0x67d4da34ff170ca9e5a7efb366198d90d2d92a2353351abf555f9f0e57a3b2eb -0xc2ce1c17370ea10353712af12260d3242e1b856ede8debefa3f84b826784cf36 -0x54259028b9b7b7b386132d8cc0a7f4f2eefe8661799e9dfe10f6de2d04a8fc21 -0x7e306843bfb68073a3b4db3f951100254ea685ddc202cc59b07b9daa905f9cd4 -0x887ee98c75c0e4de7d0655bfcfd2d0e4537e4bf08075c6670b0608cc9101b557 -0xc0b5f084a2af4329550585d41c2b8562838cf83e7d4213fb1822c340415d354a -0xe09d0a000e20a942a0c8d2e1263e99e248b19534f316c5fd94b3290613c40c93 -0x97f75055b99496a9eeead8cdb0333c9926fb50ae81de0468ab978ea5e8c7153f -0xff19ec1d97f6ae3e6b425962bc3e7d5eaa95db8f83b05a44e74a0797f2c76bc9 -0x33ad5523329a04060d948783f9d7e9054e4241a49d02560a6d0ce380fcd9dcaa -0x67e3d314e6d46d6740f4b3eec246c51f8efabb7ce82d1be5300c83a886b41897 -0xa5b741d88f6618cb4032abd9cb58dce2f7e2bc624794207dcdb8e6e4ea34232c -0xe656fd76bc859e26aaaf02f659d5c1ed43b45268f48a4f0b6c8aa1b5b3d3d6fa -0x592bbf2a7a3c6eddb9a50d8382c9ba8d48e83a8f2422ed53d5e68d5f6aee2038 -0x43f69b589f69408ad6413de9c7c84a6b7ad0faef8918931ef41cbb99faf0c5c6 -0xd8140f16b6e7be4d60e565ad58b4dc0d55ff7a0a08dae032490b8842d304caf4 -0x725a9fb3cd44c018a5dd06e7351fb32b6a3cf7ee259deceefcdb6adc5aa46726 -0x01423326e897d2481bc2c44970bf84cd1effbf57f491afa55b0a6770acdee73f -0xeb5923bbb020beca83926ddab1790888bc9d61cff85d32e1a247552686b8cbb9 -0x60c7cd65870bc2b107b56d92aae64160900a43d3808c24f133d094e51901e6b4 -0x817ca4e5c3b97e81b13f149375b6cb1d498f02c5e2832d41b111f20c05265500 -0x007dd3ee5c76e6dbd61a340e672759f7858671f03774a5fd51b446540e8e5085 -0x8a2010188f89935a132c10ba58f6bcd564732e025ed65fd6af8f63b564395e6d -0xf5d4552c77a70c809ace5485962d2e0fbcb754ae2400052e0deee3c90e0d37d2 -0x8e0161f2b928a8607e4db8126a6308de7f602416e709e8745bbb66fe5e6a9fbc -0x7f490bc9102153ef9b2cd6154c85fa7aa112577bc0ef2c5c82c027caeb3e6fe5 -0x56cabfb6fc7b098eeab8d509e394de3f4cd479e6e19fc0878252f89bd211207c -0x3859e06926e5d54e6118057bcb793c94f6139a8382e8c4640fc23f9b0ac40178 -0xa657e070c019a443dd183059cd5407429b6a348e38a9ab47cbfa094d03f8443c -0xdd7ab8db7451f453707ff1805e15a3885274404cad78c4d7ead4786eb0d90475 -0xcf88c7aab62f956d8c44a481f2481fe0cde9b35d5c5bb38b07257252fd7ac145 -0x122d9a46453fd1f5c17367f6b736344149a2a82440ee0d46df1c05c3aa7c9109 -0xeaed043df82ca906676ae2a95fe10b838f34353a638282d070eb5d3d52c7861e -0xa57dbd477222ac6245f0d501304d06f445107f497b8e63ab01b4f0769163c5d1 -0x162df6fce1f26fdf84927b01085b098b2ad5e2952282574464ee1be4a1ceb024 -0x4bb87a4704968037c7035b5b45ad177c201911cfa2bd7434ffd4642634c868d9 -0x455a1fa269adac6611b77da38fa312a4cb9f3b0dd84c967ee43b2becacf7ce50 -0x7f5d5b72181a831bb173398d856de256002b40afc738d2623b3a7c0d3effe7d8 -0x24f43b1c425cd4dd1b5bdeccd68dbafdaa0a33abe327244122e8c243c752b8d5 -0x59f5679a41e11f9c3e8d0f74e01121289f638682d07d6260fbb2c74033982a70 -0x8bcd025cd742c07ef525555cf17d43172da5fda283d29f2789dd66cef5ebdb40 -0xcb5bfb5d7860f1553e041b3d91352f6c090297a073ac4aefec76f5f26db6cc54 -0x99db0f89cf9243bfadd0f758793c78ad93ee9b000f17705ff2f7f0cdc7285d92 -0x5f837f75cc08897e8017c9ebb20e6c2379df258400f500a13c68f91eb43059a0 -0x62da5b43fdbf0d75c5eff791a732d4ada7a5a4d3a24d49328df05ee3ad6a199b -0xefdf5985b83d48d91abc1dc4aeb9cd1abd18f248c6d7ba8836cd394e2aadb1ff -0x061dca19ab5add8c14c5021741984c042f5f504823db744b98ee320826dc19be -0x0692c16d54e00015d8afb8d33127d489bf5ff26c6892c6d25777e86d54bd6723 -0x8f2b5314ad6ba06104503a847d6e902ab91c7148f1e1b50aff2ed5ea2bdc6cf2 -0x9c0b1df56ca77791574490dbc32f6c19df712496b67f9945e1b96a16c580d5a6 -0xcc36d14814e2c14fb8a6caa80d4a332386d399adc57a521fb900947e50aa3f29 -0x5848e19cb2626266a227442d960f21c648eb36185ee9ec2b9ebe93b39c7f2f51 -0x0e4108521e7bfbed6b73b0c15a01e07c0f7be52f9a9fb75518ee48aeedc17dda -0x62383010f3fa16ab9f91d1d82ca15c83e96f8503566bd23fa1b7466414fab0f4 -0x69c18add81ef464f252dc20d8cd816d0c14cb9baf12a747b072426f7711380c4 -0x113f13ae0a8d5c8be94bd893298f8c16d63dc6828e5290eed614593da207257b -0x3707a35697505ad5b0c1bf5fd1d7c4a08e48514f26b45a8991f0d2f1f70a5a4b -0x2e8416da15fe238eb3065db6cc6d1acfa16efeab85726be2188688a1bdcd5aca -0x5210a910fbde2928beca3fc9f86ce2068216075b80f681ad0e6f7062b6938c66 -0xce3bb537d9ef7db0a467111bbd948e73f7be3a9f8d1c14c5c6ab2d3a1831e4ab -0x8fa3cf1dc685d9b112be7430074d75ceda8c736f90c53c20b1f6d280961a4081 -0xb4710e3f8c77761664f07295d770993bfbdf857bfd43a1d907d1f03f30e0fecf -0x7c156a9747dc767a0a7ec8a439dcac14f40aef784c1ad8fa81f67e3948d61322 -0x02ac05268460dc1bbc978b903bf04fe19096ba737c8cf66dca0200ca2961fcd2 -0x76be6d7928cc4baf24d0d0c7f85a854916c6d44eebaac0ceb069fae343987116 -0xeaa762cae034125ce5a89d0d0ec6d253ab9ff0549b65b8f99749ee20082e9563 -0xf1b6012465d55c69cc574adf562e3309d8c56fb1b6e198589fea07f46a239b87 -0x29de2973512b15369aeb94753ce63f34a657b166cdc3b546eb253c012bf6c08b -0x4d6782cd92278e1104122fa34e32fef00f1ea93d93d9ce32ab93655e37ee6628 -0xa7bb5ba29d74fc20dc747e71dee738dec35ec920ce0744fe316d096c3df443b3 -0x1c127289b7d73fee17767f07cfab1329f3aaf1849a576a4ee8833b95ee2071af -0x0fd2c59c8b0348b0c590f67feda34d24800fbf6d0044d9c2cf73268e5cd6261e -0x24ed3657e412ed7c573afcea012bcb1c20def6de75fb91e4a92bed9f6d768716 -0x96ae7b26b176a8f6350d6b09fb2f4b29a642f44f760c0086f00b707072d8f3de -0x2f88eb9712bca1159b72af633cba38785d7fa74d880350f20358db734801ae83 -0xab21703e89e56ea9356198da4dc308bdb9e59e9a86c66304ee5c46a486c55f47 -0xd5dfa68d33b512a4c45849f9b7c5c52263747277de8853237f3183ad016f8a96 -0x144ef890c77c979c508b2e650841432314bab34af2a51b9993c70a3fd7767be7 -0x3cb5a3d2737d324cb314a08aa4bd8f1c9fd08081154994f81c919e53c6889d2f -0x6f18c5d7810421646b90100e97acdc573fd2f1777cce7b580cb8802636369353 -0xbb662484fcacf7f3c54f248a61a7f62c536a8954b12bbdfe70a1e7abcdeae759 -0x0b64b510d0f4eef3d028069386fee2b10f1c0342aa125c9cc0e95988959fcbeb -0x607466d736817ecb5f592e439338b86be67974eb2674d2f72eeae91ca501be39 -0xc724c2073dc4ad8f574c4faeacff563d62a586d46caed1aea75ebc0f62c753c4 -0x62c64ae40ac292d9c589e297bd5100a9cbd5a04397bdf480321c2b71a2e91d21 -0x57608d7b5b16043f861aea2851555e4b0456d8a3fad154f9ef9c614e2c703fd2 -0x69b7b2ceebf5fd71d0d527c1f228b6c8672c8c2c39eb752e52ec729ca1030a0c -0x6e803420d35612c10f632166d9436f948104240a3304ab950891f65b89529e13 -0x46d683dc03a4a44cff4cac7422ce4b75c26ea1722c20f3b03f13989accb32a1d -0x4f65b3b152f1d80d18d12a39b84c3118b3ced002ec545f56f4534757b0576c90 -0x74b30d9816de1e2c2b13a6993fac8a9606ea30b5ce2fdc86a5925e74dddb1634 -0x1717f66a2aac29102fe47a84c9cbbcbe80d7f2ae2165aa89cbbe265a767686a6 -0x46777e0ae42a5a476192549ed0e4b817aefa91033c08be379fc3ddaf758373a0 -0x2853a2a7f5cc7c1bf1bf62e1851e65aac4f51c63a7cb51d0187c437eae2b0d16 -0xb3ad01fcbc83aea65c0a672e0ed2adeebdda4d43a7965a1af9bf9ea8ff5d6c46 -0x4762229f27398303f3e0338569ff8db4ac554902eb1bdd47e231e7a11a08628b -0xcf4cae239e43b692811c08f9216e2bda3981447cbfd7bd97012945007d1324d7 -0x0b7fffe21b10dd77cd395eb94b08ba4c3e54b2bcad672102c4ff4236497487f6 -0x0f5042b2afde2f475399aa863115fdc9ebae3d417c9ece923e412caa1ae84040 -0x6029cf5f1e424e891d49f8a672196402d5895812850f28ee3e70b933904d36ee -0xacbea1b5476e2372c0e928152a34b27b9083f45a0974427c3f73a39edf87ff26 -0xa2c980df4b0f00fadab6eecb629d115549aafb76543751b1bc58340c856f7138 -0x261686140e84d3364ce88aaa67932687876d8e2bcf1052c33cd17dc1df6e9f1e -0xffde0ddbf93f7cfa4709b31a9e574a68a16472d7cfd379e9ddaf890965dcc072 -0x219d80bb4035b1a8095b2ccb2d9608b36743833d924d7f3a83f6ea62a878e88c -0xc7bbceb12529b5c00621412feca88e25243daa560b451ee26e3fb93a60e069ba -0xd1dd2983c1b58e08489d1b2231afefa7b806d79afcf8b34c0be58bd7c6259df5 -0xfabb5f18381ac5974176f7dcac3bd5e60e56dc9edd169772dd1a584beeef1fc4 -0xe10c9811068d06f4040a086026f2c5c09d82e86d02c82b652c40737c964a695d -0x4043123a9f5695f89f1e40e9ec96c1d96d727f563001df6e2c85ac387e2ddd05 -0x29ff344ac0adb87f0fb9e725f27ed4ed8ccecd16e07641003d2fa098bd83c43d -0xf02573828dfbcce8f0a793447459b7a7f5552a0fda0bd334424965666424cf26 -0x831394407dceb95e041e54ce103132a3406c0ad784e72d4cc36fb613cbfb8454 -0xd5a2a214bd04316534315b7dcbcfeaa7c2c869417fddda419f0fb734d77221d2 -0x0ddf96692d23b77a77dcab1a7c9b4081ece7e6b13ae9dacfaa6a7f62dd7a6334 -0xbb68911af6adc99d0e7ffb823e1e38a4bb442d691f157867058d72597c3ce132 -0x1a872aeefe8f685f4deffe825607a33edfb331f6cc2877abae273bc074205c16 -0x0684f14652f382bf99df991a2aa39c775216d6e59fb3dc3f1eebaddd5b0d36c6 -0x2998c71870593723cb629f8809169604189f27b2193b6276e7e845f265f2f971 -0xaf5db7e9949bccf74e0a5f480c96b444989e7ebfa1dbf3f76e169cd7aad38c88 -0x3df15db7bcb0d5aa9478e8fc669127a549d545d72f3a55d2f6f4932d87cff836 -0xf79ed487364ee264aa9d47cea4379cb6beb0d726d222b9df3f43d181971c7bea -0x0687ed441b8b486bbd920390c29af309d873f1f42a450e847181b3c7df73fc0c -0x5e00c978e02e26ef5701b63d63c9821a3522b4ddbfa5bf3dc4da8a0a7656c8e3 -0x3cde5640d6566876ad0b73bc5d0c293f57a90e3633be3a2831e974daa2f4eb5e -0x5bc83062d0d859d03dc4e41e37807bba215f2eca49677d452ea289e961d11b0e -0x130b9c17a0807f3860e41a895d1a7c3501308d98fdf297feb703e99285559243 -0x6df792437d9caeed7449ee4f0cf4af44bfda5c2898e84725bda9cdca262adb78 -0x559d0f14e97360599f05ebfbb2f8cce78a65f4b08cf5b2111460ba07be1ba05d -0xea16fcc9c6683716bee115443b43987bc21a1ef59dad69e7521538e1f7c25715 -0x511042f6e3572a97967cf39e44a17f6652d4ed09e5d9bcc761cfa8b1050e57bf -0xbd44fec8ef97ff1a50039fbc96e8943d2027cb2c5e92bca52ce1696b5a1149d3 -0xafe2cd5b15916ad0271154645c75782d098e7a5b4497a51d9d21e694e422e20c -0x7b892dff1365e42f3756cb29a6121e48079c5dd537402f61d7aadc04eab33d4c -0xde1c3e6df418f0ae77adaa489640aa958526a301f954ffa2489e68dd462ded49 -0xbde112cc251def63862e200598f0a6cc7c85ae5457baaf452a78ae417e585d39 -0x38ffac2d9a3e77a3779834668f533a2fafdc00eed908524e688a342341e296e8 -0x53441247298800cf850c4178fa7e95d3ae45d96f7ae9a26fb29675bcce8d3cd2 -0x63c0d0c6a4ab1a3b2e27ae763f76970b6340171666b4c5092abacb2458ca7162 -0xbbd8fa025a0cd70f74f0cda15588a51a9b5d0941c98eabc7f160bd5fbe9b71a5 -0xc083fec8722b8a2347456a141f9cd988800de7336063969a534f2ef75ac7f09c -0x940e80ebad214d60694796070e5557d3bf2030a337f800569a47cecb2fd1c7cf -0x836968949c0e5004babdd16c625dbd752bdd8062be778377139ae8876f0fd98d -0x091f719741b83e6e352c487735e41993b88ab4a2177363a9063d36482f41c2da -0x6943f89041f81506f6f433804872980ba6bff13a8cae88286fe07d3c50059fc6 -0xb2cba46be3344f837bd3f270cb0abe36028fda570947d57a0c63bdf900c374ca -0x5a6c3e9129c57117f57f2941abd697ffffc691877dc443ba0589977d0f9f33f3 -0x5da2f56a7c5444cfd90df6979289f50e172f5ba3b965505182bc77fbf33ca01e -0xe58e1c46d0f739db819a9bab48baf36fb5cc9705b2e1a810fc53ae5f1aa6dc9f -0x32291b69b56f36dcaab20020b9ff16d3671465a853e269e50048eab4abc504e6 -0x01b0bce41b25e72d0d985f134971959a918464dc8e3d43f143c7456d5f7d593a -0x839a4c720f1e79854d649b83b122ed6048b8ce337dc0930379df082ceb6cefe9 -0x9f325dd4fcb69e346de279a4e9b7f2c4bad815d6dff87b8986092bb557729024 -0xd872f8fe6ced0109c07e6d5a1875f341709aa7049ef7c7122aca9e983a6fdd39 -0x24affcb6f9321f7d17769d7cf56409c6d3be36e5f4e5c73fbcbc2ba4d17f6055 -0x4c33d9ae3c65fc51bc253f4a594d1e4bb16ff0e6c7ca5127fd3023dc0ad82505 -0x160acdfea2c658276414441064ca1a2039a243bf552a927c5757cf836c493591 -0x2b8973ed4cfbc3f0cc06288cc1f5a52656ffc8edf1d8ea8df8e88e9fdeb660bb -0x4ae8977291754a66148df1173896ed8a2730a9ea644d2ab92713dfbef5da3020 -0xd742ec7b1a2b1e031e0150a4d86e83866da3f7ab99496bc6e52a68b78b769267 -0xf6a94ff5b4c3a9848b47196f02b9512d9856782ae6df431a6671b26b51dd14f2 -0x47f28240884c1166e5b17a9f1f7dde8f3f1a3466f35e5f8d22407b1ecf0a3e2d -0x6e58ef21667d265e1c9eca06959d5896fafc7bc8c8584dbd009fa419a17a550e -0x4208040124d8054f8d4cbcb61b2a37109eecdd00dffb909f72a10bc1de56108d -0xed53686b2f06c8787b764f6ca9d2168a3ca14428aa2429d8bb62ec5dfa0f6ff5 -0x6b51afd2c4856266cf2c3079676da809e72e3cac42e10588d4d8c9bf1c328fe6 -0xc51001549d74c98ad4d68f90d3b4a32ab308efa1b9b0ff2194a4b4a2527a1c5c -0x5354f4b090cbfe05b2f1dd4389d7bcd09907fd60b915dc5b98ee0fe312568449 -0x19904d79676020f3cdc2440d5daff2eac3f98bf63facfe7d8469a21e6b166333 -0x0e3f152df88b04c67c4b67d91deeb37178cfd37b2fe8b08ef827425acb5276f2 -0x1c6ee37e37682130e8f152424ceaab8d4c0b6c109f91066531e118e72ed7a65b -0x6b7c1eb8848c883047dd8c28c32cb548013bfb362c149a6d7f1b97c062ba2556 -0xf8424a996d1bd22063ca066c9bf641bb0c5aa894588448087639d872cf56265e -0xcdb2e791c28c03ebc6b0a0a0a6e44a9d302eae0ac27df86461a119157c1356bd -0xda5399e45267795e1ffbf45eddb93ccd4afdbee701c45123fb0d89bdba76901e -0x042ceb5e1f40dab3894056747c56b862c95b79cebfd5a443a187b7be24285d69 -0xe2d02d2210f0926716a605a55a37958277347827f56c31b3293c81151362f8cb -0xc335fb3a01a592a0143d03f3a77f224b30f46e590daf6c98ef440fb83b60fb33 -0x709e7603a68fcfe33c73f3711b1f6aeceb2371943adca1b35eb025aedba9e2cb -0xcd2eeb005080417d60a09ea43c3bae3721b2c21ed91ad28f421ef4b82c11fc90 -0x99df3d9db634b5623302c1a340fa196e3aefe6368cf691b821691e5b125fa3b9 -0x2255f56216473fa70d8e4be85f66d8707caf5ff5be9c1a2a0657dc60be3aae51 -0x37500feccdb8e97dc9019786d93c3dd7824e23dbfd316e3036264c76ee033a0f -0x2a3b335ecd2ffd25bd3cbb9faa7f9b9215ff91aeb766eb997f18bcdc9e628dbb -0xbc8a16806fda081342ecd9222cc0ed31bc109dcdccfb1edef403a7f8e81a7117 -0x35eef88222e7603ad65a1d4d3d95e33badc6e649fe99c9e5f85bb516d3fef86d -0xac02967f863ca905597cd63e8b91ab7e74db3ecefe010da367e8ab35840984f8 -0x793c17618d1834bf90c6cc92e466321afc7836942c9dcdeb5f2a2c7ad575da03 -0x38f21681f00319ea2d4a8bd49b0a92892c741df96f483f7e954179eb84438d72 -0x8b515416f88f57f2a1688a64fb4fda29f270912d9cbf6edfa8f1806951087ba0 -0x409e67d309b4a61b81d78ccd39f7884eb2bec1392d239fc7d297a65ac8964140 -0x1c5dd04be9f698fd1658a73160b0de491bfc05efc96f0d3d401323dbda2a4dad -0x7c6bfb51f97a6d021f11709899147b7f9de29cfff1d6a0f76d76654697b9fabe -0x5bebdcbdf0a6412842c7dff8231dd86293a76169ba0b29e6626cc7be6fb55f9c -0x207303a5038232c85ef3f5aaf0177cbd5872a984f30c5eeb0305d730d35c5b48 -0x6e25940adb23cfc5ddfc9482cefa7a2f71377bb8bed77835c3480489cbc7311b -0x385b74bffb02f3e130760865d7503c427facae5dfd77ca1af26a187043a1bf2a -0x53413d87f797f41d6189e3c3d6aa174b4a2b643d29dfc658d63227cfd05dc453 -0x766bb2ea15e4fcf765c3ac895db235c4a7b4844c76f9b0ec63bccf28352d81a9 -0x5f033599881c90a8aaca519d06626f0f8334827db06bc2d5f07e767bc3deef7c -0x4cc93646c6651ccca95bd34c4eeddaac9f2b30d0ad6bb4d759628bc2815b9bbf -0xdf2b42b0dfd3a24f0daaffbfd76acd55d6c1db89af1ce3f6dbd3a2a71fdac870 -0xf99dd6847674a33beb1ff47728a621af87a670ff62ba50bb8d5900cc44d45d27 -0x5ae70c141edfddef35bdaabdfe0b31590aa260f392b883fff958cc081e730f60 -0x9a843cfd16aff67408b6b6b9518ea570712678e647541603550a893f463d0131 -0xa8bb062ede3111983474e18a9f9f5ddffb1b3dd7376f59729e8398e216300321 -0x45d332007b682c0a5d0090eeb046b434b84e220dae58b4adb78730c95e8a246c -0x6691b34fe39a0e4d4297f008e50e420ba7947552534e4463ab731e87653e5c16 -0x8cc7800319fb651fe0ac0271cad9c6524fc6291c362334b19419a1a60fe64fc9 -0x9c19c4b3781e9324ef3b1232f2d29ed9edae980c47bdbe3114dc69f8db5eb934 -0x6bb580dd981fe03f9852c44815a1bdc3382b5726f342ec39c92c811c10d1b485 -0x529723b2d891decd44bb6aa487d5c8ad4b62e50a4d211cdc3162a799c9d42f01 -0x08deed52baada93f18000daabac0b35e290677fb06409c84598dd45f87f3fd9a -0x99ac5d99066e91c8a95977ccbf61aa17d686ec666b34ea9a7936db8fd3e948a6 -0x3e50635aaf3550348519bb289d39dfcb252ffd972e6a82b874463d17914a4e80 -0x334a53cfdc4bc8993deb066bff0091554f73fdfc62a1a5f3a3499d7c76c9b205 -0xd07d3d1dc0063670d7c35a739f20ec65afc8da8b93410132737952efe9dc25f9 -0x356fccab1ebf0dffd54206770d45ad2b7e2079a6830131cae88a885978146566 -0xede76dfaea9caec1fef67dd66481864a98a2d2168d5b45161d49c8ee05c047e7 -0x54a06ebe7ae5314393429cd5dcf00e6539f4522e31947c0cc6ee3a8b44abac27 -0x36d80c0632937f3bf1d3f4f5bc2066c0096ef5d27d549b48a4e1594dfefc4bff -0xf391da1885ff4970b228eab46577c56bee96f654fbee5ac178b94e12e15bb6b8 -0x6fed4d957de1e97853372fbff9e3f50f67d976eff2316ace2f6789cc7b0fc915 -0xa034db77c1b17390b9950aa2ba595916a7e8ecefad52bc8010c73e27b7a2369f -0xe56682a4e2e636420d46272132686062cf820de4efd7e550f58a691ff30a150d -0x5ebc97a0415e5a2b0b5d35d40f974bd20999cbcfaa2d33e83ba3ae785b7f24f7 -0x55a8b7db5ef442dd9eaae1d5ccdf6dc0897e6f675f7050cdcc1a56294a9227fd -0x4cfece38924c498cb6bd1d27eb4b9f9117a4f9600d5def87bbc59005ee11309d -0xeb96482fccd4579d16f3d746ecd4f0f973844faa693856476291c98ced9424a5 -0x2294dc92ed5fab4a4b52aefea8ff15db3149084b6d5a5e109b946c60d9e5d0c0 -0x58b9eec5b0ac171339001fb1b5dabb2dc327e55db46def4c409045c807f93710 -0xcd88bfc72a3e7494575deb42ba302563b5852912e389bcab0270a3fc9e833dd0 -0x3a2b94f9c13a22995943079ed048e3b7f8fcb913bc362aee2c8af17e0735c27a -0xfee73ab02c133259c55f2e8335696fc67ca60aef2d6a77dfd7aab76e9d38990f -0xae868ec32f428a04690c91840bd46b94c7cbda2259fce6317383d4cd410183ca -0x4ffbf67cf199cc2ef55f15e161fb343be09974c770abbaf9da3e1f8c7fef5466 -0x0f9fd8468f385f5408b3dfd3c404ce86912810118c039945b1a90176b8a9f272 -0x5b979824653bf7ac1218fccbd296682df8400f1c2bef52a4fc3f71613367e988 -0xa484dd0e2728c5dcc6de50c129a5a8f23dfd3ee00f61c9cc2330d28a722d0429 -0xde61860a2aad20f20e16462476463806139b4c0c5e73c82282c738c32a38fc0f -0x08d6468e1f3e8f90ea14ddc26acbfcd264707e22fc16fc617df76f2a351b1a10 -0x26d9cb288623dab00e40f665ee5a8e7581c015cbe581bca159d9caf27c513a27 -0xbe2352f8e5ab5a34fd28691483068f282e02e0dc253a687b4e9e61be549a4479 -0xe1a5caaa105c5d2174b59ff311e9fa70452682239c26c345c48913c72f913073 -0x5755fb786f1ffc4199657fb41869734fac6a93822430f554a81d8f629e9cdb63 -0xa3e7eff00a0c7c1be18ab23a77007914674be10273bca04e4c195c838da15ee6 -0xeee8d1b51388b19121b82e4392088622169d995c8eeaf4033d58c0bde036ba60 -0x84a6840ac10f4bc264f4f5799f60397635ea496ffe9124c778249dc2d0bac169 -0x4c385f67ef704989f3076b56129a79d2ceeacb8415ba1cd5cc156568af196357 -0x3b6e1b9c4fa95542129b2d37046083ea973ead9e8deb527a65bc81571da839fb -0x14b31985b113b4e68ba55fb828f900677dbcb5cc855ee4a48e9ce78a0182e168 -0x82712e5290a02e1b9eb9da65fefea2fbb74f7c5753eb8db184595d5d9c3b8d53 -0x4dd26763b1273dbcfb8546eff04d2c07a0e55461a0a83c0d0bbba21cc4706497 -0x8acdad781e9f2196b3a87fd26a7b7d2f8920879271ed167b0c7789ce28594c2a -0x58a258965c835abaa3de13298acaa9782bc1520f0c4e7b7da05c5a6b00980393 -0xb62ae253856bc31699d50676c05013efcd6aae2a407e21bc934ef68dffa2a37c -0xeebd1c8f6e6692d24db543c68ebb9ec7477aeb7b46466e4cb9a55d2c3dd7e0c7 -0x919c9b4dd52cd564e6c727e59189d085040f08f09587a09cce92c9d952c24402 -0xbaee2a7a2fbe20138061408ba9916acb2286ea2b19df5f2088ff5e3245d8b844 -0x0b7e3fb0bf58533b9de55b35b87348e591e12003315cf0c6f37e81f02882c579 -0x6220e7a5ec3682f62bda8e8df558e41a92a73ee78ae3a563d8ba0146932e9d22 -0xa287ef5c493e4538c3f7d8c7b803e4ebf4c6e1b8ddf230171fe90d6a1ae3e6b8 -0x14c69d33d3ea1d24ce8cc7347304f4905a6cb2c3a355f07074ecdbd58a28dfd5 -0x35e28a1bd9ed548d67acd285df41d15d28359fd43f6f9aeabe0dacef3997dc8b -0x023ca6d064d2731dd954d3b9cca7838e756602a9911bf99ce8d9bc5b7bc47d29 -0x51bd33aa369244a2e8e6e4e243f38d7133ea0e03b94e6b3b1c94c79cf721d73c -0xc38fe1e43d0cb4d2b64f67adb6dcb2742e405150692e2e6cccffdca566d93b1f -0x92e397fa8f21e9e26de217c4d40b17d003d7aac48a52fb834dbbaac56c8f418f -0x2242f957ee054bad62249320ff108bc927bbd8bdb60a610ad801b6b95258c895 -0xaa16a1ed73e98d1d69da97a838006ea88239b249f0de511c2a13565537830441 -0xc9b731330bab400add29aa7ec13693ab69f9d8fb91782cf529334cddd25c074d -0x51d56e05a22e783445016bc38d92b3829f6fa0d8d0b12fd99c90e790d5c87cbb -0x1f0011f9ccf34f29a199c59e4adce0d18caf8894a0ba960914dae7dba2a0c57d -0x92fd130b9f33bcd1e73724efd855aaadaacf0481f283a18b91b39ada042806a2 -0x7b1e97697dc553d28661a6e84ae24b160fc674201acce6dc665d1086b026eb29 -0xeb93021c085b8135f54f87debc7cda491265607f4f1aaec55eaf7b6d332c5a54 -0xb87123f03f1092768cc33e595375565dd592caab7af9201851a334c1542eedf5 -0x9170022cff9cf62dd1f25ac91c57a3cf3cd0c2f707da3e86fa19a10ef0cf7673 -0xa5626127b8c251e4dae1daf621c18c1803b80a49b2a1047de24db2256b739346 -0x73adcbe6709e3c35aaf112cd32517111c5db7338107111e474b568cff64d6053 -0xdacfe275bc505bb469f7360fdeee41cdd0768334a27b38f5ca02a12c3a8673c3 -0xdb67fdae919f17d3beb08d35e71e08221e47280f5d43fcd88cdcd66d539d1a80 -0x8954cb688647352cfbbe9dc2ff33eeff5e3175a23df6429380ef88e3de85dbf3 -0x122991bec8b56acf375504d8a4ae1de88832d98a74873962af72aa1958bb6eba -0xad1962a735273ff3d05a635f0b8d917b186a76e221ded5e0547ac75446fd4dbd -0xd4c0ca7324d1546bb922f703b945e2f7089f8b1ddae9d3d5c5e1b4e042a20ebb -0xa489668ac7d396b4c21ff723a2273b7e4f09c548b6a23bb94a4736773a29e3d7 -0x8c7a0304c5c5fed7e7148a35cb913d4b18bc7f98d445db2e499976f2dae7d89e -0xd713f9ef86fba72b1ab6886ca5340af4832cf91d373cb0895e22a1fbe6b6287d -0x91e15b712f3db8716016f58ab367ed64b6340c06f75a69ef6ec2171ed22fd7af -0x02f9bf24bba2bd9efe05d91680cafb411f19cb17f78074c1b27e22ee7e31e229 -0x2a3705de51b6138575ae03888a88b1e55849662494799bbf5895263dfc1041c1 -0x8a74a07e28d6bb55ea2302bdbfc2e5942b3a9f0e5638cfaadfbe58bccffa5c67 -0x12092556b7f586bca447366ef972087c17183c2dcdb47fdc0e15ae6ce3db186d -0x76739d2d4e58ec248eaad65f8023315e291a6ee6a919a7abab466a112986b857 -0xd625efdfeba13c3dc32a7943c3c4c354fe878ec3f45f1d79c69ced64bd9b6f6d -0xd3e9724337f9a76699254a5d654d9d3106a69ca0bf941bd01f7987abcc392030 -0x5f5251b5cd346dcf69a2aa588f6447aca79297b284ad66f28746b61970051fe8 -0xc3d6edfba5a6164fc229b781636c9fcda01ae70c18ba08f6646e5cdc1070ecef -0xc5431712fca64aecc36f6419b96d92f96b1bee952e62f1ac04fec39f160113f2 -0xe8b9e3621113f02fc137fe623278a3e30d6b71aa6e55e7a194a6e8d112bb6ccd -0xbfa09635f42687c1b3d95d5c9d1beb94a0f6e0ff785ecd179e074aca7cc79eea -0xe70bb6b1a7e972403be0a96c5581b121bdcc139985667b4751d1325c636990bf -0x663a6c5f9b21a60c0ded708b4a959fb84ff3f24966a00a7168a12745bd3a937a -0x1a4d92cfbe7258ea4ced6a30d69ad517f0a2d8bb80dacb78338414dad212c8ce -0xa978ed4346f2eddc975f2e614b11e54e90b67996fecc1351b9cf8d969a52eca9 -0x39bcbb56a95894dbbf8855fe48c11cc3b7108b5ce2a5de7792490283b2fe2dfa -0x376dc1a4c2b16e822edcec3b5c072583d4011f342882368a92df4d6d8edd0910 -0x6d302c1a460c54a79d4e283f84406b77af108a783ed72aabad5202302a6073dc -0xa2f04e02312762b38ab8d3d6ce99b3b02506703ccdad6f332443ba9ad9bd450a -0xb410b1e18fe5c97885cf6685ae99357205cba00448a05a912f0a9bc5b19fabd9 -0xe8880495827db05bcebd661e82c75cade73b3c4db9537e99ba4895645c258c40 -0x273700a214ca1c37c01c6125c623b2247650cd070d94c5ee7fa49df8465d4d90 -0x6016143f2de38e245f24e79c597e0b34eda5bc3397f3e05db12c9b31f5d27d0e -0x552df770bcb017318b1745c0fb1929b91ecb7e2db322d4af344adc9da3a081c9 -0x048aab4d40ea8b6de9aee8cc050e8fc6162e9044ab0abc4ae93b5fa77142f0c4 -0xe7a6dc9210e9618c3257867f8c200f16606c34091c5320c9092ac3cb7c7a954c -0xdc2ad4a0f3708696ec5b134c6ef9ddbd1eebd3ed22ee1c35d5598c4d29d45869 -0x44653253cd097dd9f46d1af078e180465a6255258f1e3e02ac8327827d50a18e -0xbfe291174162b96c24347bd5e9f80d8d4ce1c0d4e0173a7b2f60f20e215963c3 -0xccd9a7666a11273500fa29ce44278c3b6dd3b44a83e50994fb1579db8c2ab734 -0x34f2d2befbb48365726f8873c78b03849e4dc1cfde18975319a12348583b1f02 -0x99bc6d4866433d70ef712509758e1937d2a23e6ba7270d13301090df4d213314 -0xea340f09e69a304c44305375a6daf391a58ce05965795d57807b49ccd926b4ee -0x352f4c40c3c4fa11e616ed8c5a2df2f6306f534f47edadc0781a858d20d5a5bb -0xfd77c004c5574452e7b3c08e90275cc84047b59e77da8251a3716862f594cea4 -0x556419053c2ce7d02fb0a222ab13e4e8c095585fc3c16bbdb3209313dc24b0fa -0xc9bdc4514a6dec50fbea143dcf7b3ea58416ad7e3a8915adedf00dbbfb329532 -0xf4a4c9b0e43d8a6eb080eff50ec4952969d40a6f55dd5550d8678aaced7e2243 -0x1160f58e0daa2dd3a01a6db44b87def8187c0b9dd0799896f623662a45130e8c -0x85aa7adf7c07ec252aed016335e7cf452bafbf39ce903b90451ffb2cb58658d6 -0x9d100163856afb1e0e8de4742f1e53709b1bbf9a1b50dbb038875d5cb6626423 -0xeca850500a382a2a6b771a0bd2d8f60d3120453f99c3122fbf024fe0bbe4aab9 -0x4f6906c4f00ef1cef99e6a2e830f67996622bba2edec286684f819e6f71938b6 -0x7d9b1f3143161dd0c9d9f1a6e5f112152b80a0efb9f997cdbf2198e96fecc44f -0x8156798b4b0aeed34c0bcd751a53a2064643e0732aae270b263c5c0716c9b331 -0x64f3158ef921ce1161d9978e2403e96d15e8dbb72f8ef02f3913758abdf608f4 -0x8b25c19f782debe0e7087d3f48fe783589d154acd62fa759a6cf77e3752761ea -0xee2cc6ba31a8e089e5302a9091a49adba7ea3de0060bf223e1a571a0065535ff -0x52c864576044f9ca2a3998bfc147501131178fb44de5761f87cc2d1128fbe96b -0x3fb2c183118f8e45ae0659c2b41083b5982b3caf594d2c6d6850ca845535e77e -0xa80bd76a2bce5126afff96e097f55796bb049585d8e3f0333750f8b03c41fc1a -0x4fa186e4dc12b9a8523c783f3f545f829832e515ec138087b83b2e379d80656e -0xafe1445a19972bf965c5a96576d4f0380f2a84ee358c8a08849428fc2983d794 -0xb43e484782df4962f2ed6f3582b5574d8c1d7ecc5e29ce9f0cb43515a07bdc66 -0xc4707bbd4197f65eb29d9b230101def9875450c1bb33e340768a5052b75d5c80 -0x85c13bfd36da33a5b7be2f09b8d8f3f0d9be5be035efc2d0307d762d694a3502 -0xbc56fd0acd5d37263fd29128e59c4616e72278254d1144f61a056a03c73b033b -0x15db4ef9ddb30988796d74b213a84614fd2cac2121797d7671c5970c8f42d8e3 -0x0e730bbde69765e11823021ab34d4e263c4ad497e5052e1d2cba4390b0e1e9fb -0x8484f14e6e81919136550edbc23e1a524e9671a2d00882c2b41df61ec4cad822 -0x2f23de25a255158fc7d708aa3a8d11be3501fe9451c28ebe558158c2a2938993 -0x3b4f4a46637f8d1d4db3cee6b474594195264cf734aba66570e3ccfeca8c31eb -0x1f86713b46bee1d518f4b3076c646b5f0dfa8a1c87b7fc1a7d54237be1ce1887 -0xd38e4d2f3d473c7f0718e596c7e11baaad68f07f9d47f07b6aa1d6cd1a0ec361 -0xbbe635aa12fb647665397a384d417d9a292085501ca43e130995b110369f7d68 -0x028464e01fec9a44a07622c82de56330a2648569da7e35a936fcfcb7bda47b27 -0x0b91dfa1f806f310255c0122bb520d9e68364b8bb4cd49812d4d42c9da3cffe8 -0x95aa5645aaac7f1fad2ae665474537ac30726a4fff64b201707da88c34630209 -0xa442c0ff4a00a5403d64ca05dffe2beb0c081fb3fffa368558c035870340ed64 -0xffbbd500187453911629e26b20a32b00dde63ec8cad4b32baa6a89f447990790 -0xb31a21701e08a07e7b6ab18d9016fe7a917fccf5ce1f6e6a3b953b48296bfe75 -0x0dc98037d71b9ce6c74ca3cf2284f3bafd538bca719a0d272310bc8b9c4dae59 -0xb07d0110c7acd1f073c29113db1d05b879d7fb311cfa31cbfc1c1cdcf9825bf1 -0xdcefa9fe433267b0fb5200938241308b2212c4ff0e35d64d2dbf50ef6dc588b8 -0x322c1e2b9d910e541832bb923d0d82d60a7ac3f853dda1f6db54098c89b82b85 -0x12c6665866f5bbd30beeed0955aff1d64e078ff28f3e0596119346be53a10baa -0xe5c02f83051e20c0d76087e75b05811691427f73ef9fc1f579422f73840163bb -0x03c37339eea50fce0358f201de16a2b37ed764af67caa662087a0b97094aeb3c -0xd45a3d1f3ef82e2755383b7821fd1f391ecd83f0cfb1e0e74bb7441c935d27d3 -0x6b19e7553cb42ae2d1d2c0be0ef2833b99c1e2466f4a329659563f03e3b21749 -0xe82cb7c2bfef3200db9b819c2abaebabd636e1d6abd3bbebdca67d32d3748032 -0x5d6ef3640c7702ba2a12c0b86985ce9941462800e808d425bec742dd4d44045c -0x15aa179f5bb39778b36c5f23da19b8286c55e3e3e81886964144f4548f13d144 -0xe992915d4957af0af5fcb315f56d448814675e359de1c2e695bf81e30d698718 -0x30e555eff2dcf9e4ca844e89dc93a1efa155656602a8434878d89a934a2eea37 -0x1895d54e230723c074999530462b8dc495fdeb85fb44a3f8bd292e743939d6c1 -0x63128b067b74e88442b9eebc1d847a8e8892fdabbd8aa67e1a68772e95d54324 -0xda5d2583603de8a16360ad638d22d72fbad57956da2c8c5d57bf455e2266ddbb -0x655490424b18647c6e7c25412bddac2d3441c4fa1d904f57c400b7e74de14a01 -0x919f4b9424837a553a2fdfb809a59341809db0eb26f3a1ef4d1598313eba39a1 -0x6f6761ad27e0ea6403471c7d8cd26ac44f7a275f29b435d11432d615355550a6 -0x2eb1a4c0881809e9ae5b68c9dc9da568d22f6c7e91322e943c1a8346c43d4211 -0xb0d6330fef0e5990e8eea716cc4b009468ab66672d1119f4638ec462102b41a7 -0xfbe0d10a2dbc150a2b36746e3c63725cf358ab1333613d62c6a5fff806facb9c -0xb85d4e43359c8435ad31fbeb37a7001f8af88fa019bc403f45780d69a42d12e4 -0xc4085b7d546f256df5ca069d234336995484f202962db7938a5ddff8fdff3efc -0x4567b33dd0530c0ad8cc541030ace4ec2f62b1cdc5be04550d424e284af73b0f -0x61447f3be6449cf1c1121f1733e5fb46e2f47a69c41b51ad38b929fc330a4266 -0x6de4be21b297897d80eeaaf769106bef0c644dca8aed08d50e4971c40dee75d0 -0x6d2a36c71c4b60b7a72f1927976a67fe236441dd80742465d4d6faf435fe62ab -0x87e3ff5fc757335ae514d900cdd90ba800d0ab48766886c6e49298fb8f95b776 -0xebf5f54b97eec1bb5305d992a3e14c21da377c0f81078c747366c1fcdefe6854 -0x22371bb319b19bbba3cc3e59ab497bd11c1f2583e2a3ec09398cc63e99f584a9 -0x806dae3135ae1b2d68a8eb93ab6aab83ad1eb866e2de772563e0e672b173ad91 -0x2b0cad262421e5a9762050a330fe9cf7ec1d62abe8d9c5628bf7df8fc03c4069 -0xb04550657ca90af031d82597fbd3bd183bbc11b9fa6df7c1138ef4b37e0004ff -0xfc9dff4afc628d46f8ab5ad4bc14df47f55b0a7e27f458830a5837d93fcf32c8 -0x42e2e56311e0cdc1e062263828424fdadcc130b71f56be931ae16492bbed1134 -0xb7fef32a34c6d1eae49628a44371debb56bdab8ba3b05b504535078c28e7ff0b -0x44966eb8226e518bf326215293ed642ffb70f35a5e0d7e49ba2fe10dd7130350 -0x3fae21ea42ac89496620d15a74473c51c143f5f977f57a72a92c5505e12393c0 -0xf92586a1fd2f5fa0a333c6c74536b0519683ea55dc699858d69e5bfdaa871feb -0x3feeaaa30d8446f9d60e5559b863211c46d63fe57bbad8464396300cb374559f -0x8bb89411db88fd700c7a526b7cd5a82ea5ae40227a6f66dc5d6aab54b1683df9 -0x6def40bda80967ebad964a6f3c0cb2c5be7b63759e5c1a4aec14309836ba988f -0x5ff4b86c00b71e4943be910aeffb8862532f29baa986c324ae1f35e2ac11901e -0xe715ee4cb0281e7a1ba50e3f26f095ec533be53a613f3a6caadba6dbabb646bc -0xa7c19c65a5a283758de1f66f03273ca8ecd01cef607dc939d3e7b882333a62b0 -0xebe6db1ed2b27bdcf0455db26e38d920dc949b02c909129eff25293a2227f61f -0xd58562a03ed3c3d6956532568956a6ecf5acc5c87da0d5a03c125c1036419ca3 -0xa10b749c3f3d5ac7fcd86ab1881b5cb59e9e770d0d60f3fd0efc4bf5573c8db1 -0x60dedacffbeb34c30426282cdfcf7129684831c24ae0bbe3f00f1f9e62e39e42 -0x83b4719abc608d5314d4a97de4d93d090344d5637af78e0e95db7dd564218111 -0x615b78fa2cc042d407fec8fbbdaee12bb8a21579898ce197c7aa3fef4f0f1ac5 -0x77da5744f5ab07f062790bf2a5bd70f7c41bcaa96f46dd9aafb48b5ae8c8d67a -0x1228d7c898e8b9cc1406c47800fd65cd6ca091ad76e8c940ac95119436f1ca6c -0xfebe5e56bacdb987dd45adb530e06324a2ac9262169279a436c7ea9a3892fee2 -0x1047c5b4830d0a57ee46634ede0c09529c683822a4ce842c577efc60402f24f9 -0xaae294149c705114fcaf37cdd6026404f5f7b657165b2fbc857b7dcf269b1dcd -0xa266ad30fbcd699815ae8606b4c6e2629b8fc7308646fc036afc3ba4e4c63824 -0x16630703d5b8082a8170a1128a144165bc0ac373da6d71194e9297bf404faeab -0xb9215d1a627b7c2457340821dbf4d8d711df214622eba7377008a0de2ff7f9d4 -0x8f1ef2d6f67b46da17791d730e513991162f153b5d8b852a6b9f4ec2627b403c -0x3c64405ff39c7073570b434ec48b55b048dcb4d05be9f4478e79abd78148ab31 -0x6b9f661c536aea56afe8e108104787c4a8d6bf1f1d16c4755824f962d62aaeca -0xa13df6ef7a43126f0c64b0760cd3786b1c5050253d206d380dfdce3cd0284fdd -0xff66b2b78b162b9e943c90bb4318f4944b82cd42e35baf806dccff3361b353d8 -0x3d1a324b4e47ce0a0284cfdee1522a44a92a2cf79f7ae2c401537a0bb51863ba -0x468b72d0584c10ea4add7816937a9333751f28cf8f483a929fed1eb267df399e -0xb1dd8d56909361184b91b23bfabe026e1c2c576057ff185df46464ca27b5b0ad -0x093f6e97e719d8ad7d6074fb5f61078bc62020115370d09b74d60d3149d2efc2 -0x9bfbd9893d83d36d3554510aabc8d32b87a7157a3cf988fada95d9a5fb2e5c80 -0xbac4500cd8614cdc5da93620e023b154ae88a4b98a4dc0ae615476d482866d5e -0x1d6ddfc6b662cbdd40ee7a2c8ceb7002d74a4e5351053c21b481da2f5d444ce2 -0x6c44e467ce743750db16325c6fe96f292da2e2aa3e7ee2213ac674feb2ad3021 -0x7673711771204eb68f1051c659d4db927636a01b765aa024c6a1ef713e1ccff7 -0x1bf442621d297086165b6f7401991f0bb6746559d127c2e4bb65c7fe7404a7b3 -0x07762af6d9e4b0d997940286f5b070f6f0056cac58f30c451d3f6ae7f97c6970 -0x986d3a4a558cf6e05528570cfe7084f4877524c99e05176d912dcc176637d635 -0xa50dbc472dae5954ba1f0e79dcbbcd22514756266f966fd7e53558cdad333872 -0x6bb336afb24c0344e8f584aa20a079872af44f5fcf2a02374cf329b0a812ca20 -0xe19697f481088286cbd5944ca8a725c33aac216684c70ed70b4aad3ef61c9e7b -0xe20e4814276a2fb1c3d4bc8522a656a3600de7d0af01eb6d86fd53cbc374a287 -0x39d8455f2297d4d5a5b3298e449d6e9676a866290eb9335a3fb168c322b0e00e -0x638928bc47082555790c975cd84f4a6edc5da165ccaf6e910bbb678656c12d39 -0x8bd4527dc3784e4c4ff4eab5daa41476dbfddf3e4246e1504f80a05a32d984e8 -0x2052495b0726b78c47c1009e895564168f092d91ffa9ced4b03a277ae6bf3345 -0x945a2f2f302ff1fb73b0fa5680141eb6e2fe52be83aa4dc8424ce226dc440bbd -0xcf21d3dc913afead3d7e414eaa4cf2cb15d42849f1dcec6453abec1f6359edd7 -0x9f1caf62d535145295508fe4e30ec394115dd19e7267192600646d741267a482 -0x9bbd0f840bb637588871e732a0a6e501915f8d1b82a375174d4144b9cabe0748 -0x1c5451ae0db9f4c6ec527284047d72b8e299fe65e24cd35cc5292b7fcba6d449 -0xd6fbb740d156ca473bc3c8c7e17a2bf35b38955418f5580cca8c7e25f2ce029f -0xf3417aba66427b30ea26ac968550091f2fe72e52f8e16696a8bf75df3aca607e -0x1eeef5c9be70fdb0ac1f04c575a3341fc74f4cc79e5aaef5ebaf8bf713ef8925 -0x7d2fd8e1b927b8ccaa1490214f6f7e083ac74b91a2e646c4e6139208baca696a -0xfee709139a773dd969b44b9dfe5f860dd5aa08c19a88395e129bbecf9d59b257 -0x530f79bd26e8b2f48d14b19bbefddb9f9228cc5c235ac000ef1e98672367bf6b -0x2ab4a84e80c9cf0caf3dc99d3bf36d859460b1e1986a086f30e32746aac4bbd5 -0xab19bd6dcaecd3112bc6a51b75dad822374d2a4f2459ce4d591e296c60153de7 -0xfd785538b2877d64510cddb13136478b602bd0061bc01be29671a675737b7e93 -0xc850a55bc6599faf3d8e1ae10ac2243da55306eb0c18ce500ac41c9b2a53372d -0x72c6da364d7414f0b518461f13cbf91a1defc29557f421e8b64c7de82ece3d73 -0x6200ee96d9ae28eb6addaa7a40ea149faa7d870c92a9db7c973e99121e2de8ee -0x4b5fd322e29ee18b4d0637cf75d68be22dcf975971a8574c69c0a039fdb73337 -0xdace9a1b4fee8c9475b9cbcc2fac8e7f8bd1d06e3a910c59feb52bbd56dc7d0a -0x1f9ad5dbc4488e542abea618af7396f1c284c71cf7d2c2d582f329e170fe5e28 -0xbd6b535813a9dcd1675549968d82920bbad8c2b6c26f4efcb084dae8875a4942 -0xb50ddf2d53e1d43cd463e8b7dd288b76a4556531aa084422f5b6b8e047e33ead -0x4291655a95bd83ddd29a6419afc211b81f81c4d4009c1139b6a395687f70feb1 -0x09924cf2290ed44a111af23530c4a35b48b742470e3cbbc75cd7e789453c228a -0x7b79bf5f9bc4231613bfda72d47a0e06cbe6d1d25f9fca05da4f3eba889b8e2f -0x1400f4b04482c73eed69abef5994887383d072f008bcef4cf1ff456c07ffbbcc -0xa053af63cfaf1c2ae671c8c14a256e6b3a0558422994698a0bdd0ff1329e744d -0x2cd0ab328791be18d6123e1ff161af4cd601c3b4f845c041c843716c620845e9 -0x1972bdd2f5c3a1e6a5ea0008c294f6975b0c1e8e6728fc7ba8fcb945909f33c4 -0x5fe914e1a8ce1f9b239d6e62888d4feb75ce79eaeb4534cfccd668e788063fa3 -0x9945dd067e071304ab56c113fd0d215ece1ce84e388a73d83f47ed405ec17d6b -0x583e00750ee8b18b6ef615f6f32dacefa1307f1722e735908a5cc3388368d046 -0xba2e56e742b7ac838dcb16d62ff56f05e177756f93f627dd9515927beacddd15 -0x5207dac1affe91bfa4646cfd9757a16236b1185c856d8ad99439b725bcbe8ad4 -0x08ae8300286ea9bf07c0ceb63cf5eaaff0952c3bdb885be0c7eb8749815a72dd -0x8e0b91e34fd5b6b619caeb47bd12c609c0b3feeee1d9c3574f75a94b6155df43 -0xaba2bb7455fd654b55256c6bdd02b1b9c787cde08a8f3e4dcd08a7747f8748a6 -0x801f7860c2d9fb98c532bda05428969ecee7ed74203d6b48f8d7be135efad4d9 -0xe138d7ddc42b1c15924c952bbea8764ea18e472dd52629ab1953c1fec43f03b1 -0x864dbd32810bd04a5351cd7d88192ef316567610150d1c6c1020409f111249d4 -0xb9cf1b860a2acb84a73538e1596537afbfe20a4d46d68a7ba4b0ca6c19694327 -0x3ba3d15a8fccd94d8eb9ac181aa222501eef604e6b55697e81b8cd748d4aab12 -0x61496e9c5a034aa718dd03ed739b21e04a6013f27388fd6a4af7a7b5454268e5 -0xca761c37d1e60a5f3a2e636b0dbe7574ec24d8b81708de53ed48a015c3ff2ab8 -0xe8b9af87f58556cd934d8b1759045bc4c5cfddb3196a705cd35e247123c25757 -0x56a6bf7e5112fef0c328637e389a821c21b5b7046f9204361d82aead95cf3b36 -0x4a380b71a0d148165f2a0426b7466ad51d6f18b5a6d530c711f52a222ce2c00c -0x5b41bbb9025e1fa31b2c2e58950c3bb44581bfde98c07d01242de76b28e35014 -0x5d9ea913f1890c005899bd0fd49a1422a1d107249e42b9994f5a911b5b05ae95 -0x6673186cd4d31579004956f00abb11fe5052d576bcd8ee0fca4068a0ed4d44d6 -0xeac0b7d763bfa7203a71fe54e9c0fc890bdeef5fab7f981509c86c68001d5260 -0xe92e5ec4867234e1cd6384e85bfffeffd6165e02b97ed43d8f5e252c127ba84a -0xb1c7dc727efcc8662103c220d8e0e4d1f4aac4bdb02262a1f92c2bff8b65ba13 -0xef68cf74d2bd9d1fc6f1043cfbd114d5cbffb1aac119ce9a3db4567f4c0afb16 -0x6a01e7d25dc2f02c07c00654d73acc58c3574b7840a996d94fad00b5b18bf3b6 -0x138667577c1e776556f16f152554d4b5bd17ca3821f1dbd93a984ce8098c2746 -0x65093e3ed4f712035bb0f35d308dab5b2aa51e668e4e62621d06df658bbc7336 -0x9bcb4fb7f7f26d1a75c312570cc90fbe6afe151e4c89eb1536bf6e399b3da7af -0xd6ffe491795d7ca953e9affb08390536a030e1edbb69b280e3b81384b6cb1859 -0x676c46268b65008398e03f5416ea76dcd9fc37b66477a6b17c10a6a4220097a5 -0x2fce152c8b3bb89a194d5ff11072468298f26b80016deee3c62bcdf3e4ea9af0 -0x73a84fbd4d45f87ad73ac8b2837e8b75c14a096251bfd9c97e985e5ffd2c1947 -0x84df80a6eaec2fc9b75330418d8e9761a96b04bf736be3134120a432ff1d819a -0x77032304fd5af36270cbcad8297778cadbcec342d902d1d390c0a57957e2d79a -0xafc3ce7850b48b973646a5cee966570e8d0667c06d7cb769bbdad4adec0b4490 -0xc98b49fdfff06d8f4eea5d78c5681dda472221d5b6b23bda48e8e32f8956d046 -0x3a9728872a83d9e17473380a4b18496f5a2986ce08537864896010a46f30ae64 -0xb5fa840ab0bac4d92c8c154cbac6cea62c680b261e9b7737529901e859b6c791 -0xd479621bd80e43874eb82293336989503bb603aad7bc9620e1f65aea8a4b6751 -0xae81017bf2aeb127274b360357243f2409c30ee94f3acc59a3e767d26468bf05 -0xaedb94d59ff99d408dff7d0a374fe4c95889ec80d7eb03d32266df13230ac546 -0xb19e80212671be714cd4142e64e75c7c9c2b05d6682b41f6b3d322ca00b54a82 -0xe3321fed9949a3e91537e8598655e010bd1419b75d428ca9de8caa224e3d89bb -0x819fd85b3d32659c57d92fb02d196dd2b9561380f335f5ce954fc7e8b0696567 -0x919c9fd2922fe1664ef6ab00b3af71ca69619589d232eb880fe51e32c9cc6cc8 -0x07edd1fd2f1ed859499b04fb79d325de58650b69387430c6ecc33635914cbeb6 -0x2571b73719d8c558bb7ddc0faad13e1020fd2a073147ef96604e86ada5bc716c -0x5c7a897f50b2bba0b91115fe2a9ad7e9dcb2d8bfab5dca7c6befbc432f1c1ca6 -0x6d2d4cd599868cfe3ca11ce230c94099151854cd166d9decc60cc8d29b2b1cc8 -0x1f5ef2f733eeb93f7424770a1d5d9e916f344d98e446339b2c2d530b526dff26 -0xd849f618b1c39bc7ffdb10c216c3ae9ea3758002c4ca151dca07c5b97d4c566f -0xa6e368d4fb49c7fc1a4c3b9037defd3619d571fb23baa8f92d3a4142a8935d7d -0x96531e7402cf4b7c5ba80b0bdff0345e15bdcf5b304d9091a862af2e2679f826 -0x393dcc56b4e648da81855b13223de9438e833ccafa1ceb8e6e4a4b32ede02b54 -0x81189b8d37e49b596a223473b9a6d71d17a4589c738f86c3a0041b3f73eef280 -0x2c09007d5d4190a16bcd26e92b7d95420fb5d9e8ff60dfc52d022e86b493a711 -0x79aabf7eaaa1285320cad3e5e924c55958022c6dc2e8c3f7bb9ecabc2660b54b -0x7148a03b13d94894b087ef9af4817534931185d42f851abe25265c9e2b31f093 -0xcea31da0980b9515dac7e0063da9195a46f59d0c14715d63bca88ae065a20ba4 -0x95d249f4c8dff895a93f10d0f695ece0de82cdecac5b8908eca376d7397c4084 -0x5cc2c3cf302d92f4d46faedf4fbb827934bc6792aa453b23d3d0c0bf49cdc738 -0xeb996a5e2fdb9968edc96cccdd4ed1cb890451b0bb7f8d84bf7ae8e8ab702f7d -0xef6e8942abd5c108fb36b30af103f492508f5af803034ab088cd3a4bace6fe72 -0x27521fef9bb7d58fc13d8a47da4a734e8c90de3dbb94745014469cf87339542d -0x1f904ead62bba06fe2ee1bb7db3c6db974c9f97ed42c7008bf385c4b9e66f7f6 -0xcc8415b253328876af281e1886801b1068efc91c7f21df74bf4b6042c2c0e726 -0x1e297724fdb278304db735ddc2bc186c3652ba3d56653dfcfbd343b26992a784 -0x6a25b5421c59bf5f3e989559a6a2f09badbba355f0f378aec57156d3504012d9 -0xc85fa12564e487c1a2cb2ce1038cc3724d39fa3e6275141b27769182b89875e2 -0x14286d6079b9be510d73cf69756caa66a70de0db280e8552c780378f4a1135dd -0x10e9cb3bf8ad3733641c87cd47c2184ce4ac22b12e73d9cd56f9d141e1354f9c -0xde368add4e4ce541fa06073dd8b985912320559dfe49b24d06069ff2a4ac3844 -0x7884d4bc4fcf5e8d48bbc30f9ac05b7a91f82c05de7cd7e7cdfb2eec3b706db6 -0x8ba6ff81fb463af758905e161a7b7b0751820fe1bca9bb863ab0b87a8799ebc6 -0xe3263c09a7ceedb2c340a3e1003fd9e87c14feaede6818c4dfac44aa6bf719c9 -0x535dba3f72b4b56e652ce4caa30abacfe308bf63193e894dd7bcb20d502061f2 -0x24499d487d1f67204401dd67acf3a312f4c6d1027611b53dc8e44963a9547e23 -0xdc2e503d8bc6f73357b89a703495fe43d725059d730feada15a615534fa54553 -0x79936a11f2254919dd614047aa33176112972130297d0c77949583b7ea745ee7 -0xe9655e92c0b5c1eb0482a566b7763c0ee7d3474476ac629c670fd364c117ca1f -0x888dd035ead9b873cde2ec7f89cbc58faf7480454bbef8b64e3d5611596512cd -0x96aa252142607f13a1fbb9f8f7aa43fd0784e7c12da148c7722afce5795c354e -0xa165af7f4ef67fa0861978df3b646227b5a0a92cbe165c9b7ac122c80be7eb8d -0xfcb88a6a1f803ed85efdf636aec6fab3470267c771a47c75878d53590bb07f4f -0xf339865966b11215b3e81ff1b8796bf35f075eeec303ff6ac65ee879c08f1982 -0x8ba3061396de4c17c797a257f963cb236eae55db6f32c27fdeedd51f8e2ff8b6 -0x1c7cc8550819d1549870d862f8de6e743d7dbf83e53290f2ca30cdf5667c1abe -0x6ca3cc36edb1109e2ad5605900ff1e93768c45e3f501679067b404879e1f46b9 -0xa841f27eefa8f9cf52b3e5064d93808b01667e74c74b3c63d6b530be73699b7b -0xf6fd43bce2db7731af16321f39e71eb0f5d1ec441140bcb798b6b242ab5ce5b2 -0x72f33ec8dfc1cf1109afc16f159d4215353b5493ded0d70ee204fd6d63a1fa40 -0x8cf24d5fefc5f19f18c53650a27dd0ebf3ad2458f49a19f48ae11409d0e0ef86 -0x87d91f9e748cf469ba0713b92ef15a52fcf8e49a7b044beddd99c116b517da56 -0x4d6a765fe5b2ce83441052a389ee27a3d73f5ea31275768d21b9d286e083352e -0xa7076e17370a7ce967d78c201e9ca16feda995c7704c8ff8a2e5f4f1e4e3f66f -0xd1892a695d56d2730fdec13ec1e3ff941cab730ab87763b70d94b09e307544bd -0x3948384af5df9edd990f64e3b21a9d61f0c47aaf558fd38f2b40bc779bc4e7d9 -0x3ad219841c415d7a5d0556245df359139e56bc28ae74dbd7daed377bcc63d96b -0xefb22430fb810b3922e0fc02b91ac9fb5062034e2f0b3aab6024840070f07f9e -0xfd163f1f88ea93d8f0b7d4939f6757fb803bb8637230e1f33adf926a35679884 -0x34e1173b0c5155c03a7964c24c73a5bbe19437df62ac784ad4fd04a9cf07e74d -0xac5de8cc2b4c0fd72579acfde9941627e8615764e06066b999cfb3aedeb9c391 -0xdc1abcb3c0d0df1eea106988303789b5203981b2acc04b9c28d0185ce5eb4fe9 -0x6c0f102402330b8d6af95f59986396e93325df7e280d8f0f15bf839128eaa305 -0x699a5a3af0a1b1bf407f960d3a9e21b4b90cf8a15ea7dbb0f823a4270ceb437d -0x8bbfe7af0711dfec9e8f3ddefb074bb20e12a5e9953ca744f6b4d60dd86344c4 -0x26591022b3b37a9b7144cbc8a249884a3684d678a0ca2c085d7a025676ca5fd1 -0x0d2de358a4c075a0ae3a173691fa8d1d238cdaccba9729e9fcda79c3d466597a -0x5104f3d34e2d4fb2029608573a2a3b6db5c17cf26d0595529e1f0a0ef32029ad -0xd63d891e0e515eadc566aec711d91077832aba3b8d9e6496e14448741c311d60 -0x85945aef24df37a533ccca59db2cd064fb6ddd01191077b2ce7d2432f058b55a -0xf594e9a53f286e13bbcd500740b8c7a070541262178799a96431d76591001c0f -0xa43a7a4c96cdc850465611ce87dbd11b684dfdddcdde14b3808f66155605074b -0x25868098d7d9ec135e73a79173050f97366689c2c0d64a0762ab2e6d5a2fad1a -0x3e097ee2dde4e0a400e993472694b7292a48a75c8818b0c52ad6c05a8c414969 -0xfc78377bbf424dbc5165f1fee402e0c6124401c92eb05a7237e5b9f39917ce18 -0x8d65ae9001816057a6f982312163cfe6ec94d14805cc6cf31e6120f26415effc -0xe7488adb53e2671eb2e2537708a61da298a8abdb5955645137418582a4546743 -0x5845c9d8ed0ebe357b01e07b1a287ac661c0a029f464b954d66acafedf5dd3c0 -0xb5339ae2905729003a087a0872696df5bebfc932345270da04db76234517d614 -0x031017e04de50b6b4f3cf133d741c6ad8eaec65f96784d465fc9c945182c581d -0x878f85a2d933e166b3b1ae28862da57dc66f755f0199670356bfacba481c954f -0x36bb97fcd15bdf60271a847e530af91e7f0e9ae75ce13d3f78ee4e58ad3c1805 -0x419d20ec15a2be39bdc1ed0290575770dcc178cce56b31f86e0da00025cfddda -0xe2858a345ae3c12e18b0dd827d4834c11dfc657bfa5b4b5d3bead384cbdee446 -0x93fb10a0e59f32059bf75d76fa1c42ef7d1e6e2c04b0da7f812df17fc60c1470 -0x0866cd8af16cc9f417dc3e913deec552c2e167d701fd6495794644ce878b2ae0 -0x3adcdf93918a81e3ae891bcfc62b12d9444bd4f513d76c953982eeebd7e7d83d -0x951ed2dbffdd94fd32875bbdbe1b30dd40948cd7d9312eaf35e74383f137c914 -0x2b9a21baa1b448950714b6681a46d533ffc692f6ad55ce7b49d78a15fbf2ee7a -0xe245e0a4e0377f8dda30b0bbf7ef49e3c20801b2fad56167deab5a63b2155744 -0x4f7856cb105aa51479dec03b5e323a9aac22ee7b24f2ada1b6bef7cc1709ccd6 -0xe65de69cd276812da8db280a9669fadbf7af1f98679b22ec188e3332bce5f49f -0x63f6cfd578e8c0976d58636a769c078da23ec653aceccc51e5745aecd6bf2958 -0x7d2864df7f25fe507721cdcff9e414f460e4ceff2767d71c736e51083f912715 -0xd77b9439f835023d4c26184479368e7746a080b216dcbfb74e1ade516eb6ccc6 -0x2b08f86f272c5b074c6c2dd6c391e6e968b475eca38cbca382d64e5927c1980d -0x42bbe08c73a0a526e6cf5a58c3b79b59902764f183061a0160fa87dab644c5ed -0x40b0d4e5ab4e1f6b0c4eb8f2ab9bdbe17c6500deb81507d9046219acffd0aa3e -0x37ec69d512ea106fc6e22210d5976ec348e8d9369eaf0d825ce2db5a04caba5a -0x8bc3e34fdab56bf6bf6a64ae9acefe92b32c02ed3af4c1d2929555cc1112b00d -0xd16b47e04b1afe4d726abc4f006ede5979de17e8edf7cab11a05ef5d3b6ab23f -0xd7c3045b13d346b44dc2c544a52e7be33127eec70a2c6963bac2886d3da3dcf3 -0x351bbda8037ad7df3e88b00944143f71935a2d97ceb986e54dbda31bd9d5fffa -0x699bc2df3884f4e4f8097b0c39e307d09d51c19613f8c896056591aebc58e175 -0x226277aef8eca3f73b4e8f28248dd8b131967735ffd62a29226fb06379558fca -0x5db5afae77e16ae15f9d78d85506a381b1f5102479b153aef6d5048d8500d9da -0xe86434c04b75e2840868e9900b7acb31caf644842b1f785422a6e3dcab322003 -0xf0dca3387c2043e9a93137ba71c0b1a5a4c5158514ac50af3df4439c550f90f3 -0x24499b2e138b4c47106882a2c63439176051fb0ff3cb56e245f816a428f44258 -0x864759a1d6484c68129d84e3a60d0397300b0049ffb838df10b20c6e86f97812 -0x50710f460d1cf8205c348696a9c58bd2a0efbaa630f635c26c8b788a5515da15 -0x9a0ae75863bf1b9032f13d2de74b4137c4021c6cdc991e91267e2b235e9ebe60 -0x1e6d0027a16cdf2c556b36e185ef5e0ddd381de9bd90d99a1677ad71d0bef984 -0x21170ab362d99085ebfd881a58f63bd9de1f4023e06f086487183d63a291e57d -0xac0ff594e68e50ee8fc037111568a98fbdfae15e99b0955c1a72f946a5be1e83 -0x3435c876fa085e3855545fef800b7bf2b5e5dff16ba7848392a48df01a54efbf -0x52c56854ba867a5124a5e68abbc6c812d3e95d15874e7b822f8eb9ed0059d6a8 -0x45220e2a8f30e5e34100d45048d8dd27391a6943267a28e3f6ed047774c141b2 -0x8000223a72b7cf6f228171dac274da27cf14b5f26786ceed06065b3bd99dbbed -0xa9e53c67255354e7a098ce4fa900f2a619a23694f3f1c55238454ac714930003 -0xf11817b5876806da8f3a2da2e31b2ba698aad2dc9544b3d59b9167ff1f03bda1 -0x374812084e1f0c2c76d657af66abc7fe9c7dd706d9868865a4067630cc714152 -0x446d009399bb50a50dfaa76ce757c147a0519df8a62a198071c7b54c6862d681 -0xe433d15fa85721daa27ed574995c2f09327cd064dda74ba5d79269f1992677f3 -0x6fd627442e1055b14a019534da4c2f5fc0a3550c23d85c487f52999101a6dcc6 -0x5887763b5685b611e0ec0559d44126123d059e2f570be6dbc1e5e6910f9b8981 -0x9f2009ff4701550cfafb589d8b7913711843fe36cf83e8b77c11d3a1789529d7 -0x731ff1b54ba71a4dcba1c72ab435d487341dbce3fba138721e45aa25bd1e6e13 -0x1c188066d3afb1e134a04beb23d653c161b87183d262234ec0f48693d95ca1cf -0xaa28c4655362c2e2b2c5c0e711048c5d7b821ff5ae173d57f41f0edafe47f886 -0x600f249ff5e81299aad97c5bf0559aa11bed61874c916130836e31a9d9fa62de -0x7b9a997f01f03beecfd369f7413503cb8a8ff1b2223b7e377880df8a5aac7d90 -0x9846decfd3876dd2daf62a6199c8a5aecece4253d8db69724140aa7f43e7d030 -0xb7a457470802193cebd22b699b813f1fa043f092fb790d2675ec5180b6aef58a -0x99c08c355b2afa748cb3514ecd9c2a27a3979e57e3153098b51224c94f23238a -0xe793749fb5fca757f2ff2305b0dab093a44a6588487c731af2f4232553587607 -0x1cbb8c435b1a275a3a9d5a64a2fd76b532e3afc712fd597ebb5390d88ea5d23d -0x51e92456c01f036cea425a15c78244d5833dc47908c4b46f1a59067a37cb6fd1 -0x171e596bb285b1a8d9fc8bb8d0c504c1153c58104a80bda9907bcd8352bd2da2 -0x3923695382097a3b5b68baa26e00e5c43643383c768dcbe96d394e0baad60ada -0xbad770eea865f0af8c943d0ffa09dbef6f9e0e7ac5633eadd39507de10121fc0 -0xbb184f9fbbbe2c4c3a0d27df8f192be6f97f93d90c27fc8bb312c1c1b5e46a31 -0xe092f9fc71047693a6445c51c14a3a270471b6549dc2c3f600514c8702430437 -0xa8f49b018694c609c5b99d8a781e01bbe5cb9cb33b9025c00b2df9dc9fc6b9a9 -0x5dad63b77e29e6f5faa4cc19f732efcd9c0b9e71a4724b0b828fa6fcbfdae3d2 -0x7fe734c0941f63bd434692db2141e72333a397675294c35175ec33cfa4daaecd -0xbde9e62b3b4a181694fd4894167b6bae3794b46548c82d54ed4e9b1719c6dac7 -0x1e43dd4af344ffd688b018d6a81408adb12d803cc80d984552510f2b68d572f9 -0xd34e35951ce8c8817cb8dca24ce3cf4a3e4bc5f45ed864c4060e77f47a864160 -0x7638976fba048884c0984492b6c66301d0668e1c437ca2900d566808389d1205 -0x9224832f184fc7ed96834abc20589bbc40b84bfb61c9280f291d656bc8977dd8 -0xe74ad81bbab360f0c20e434cd49d0d4417c6e9b2d7835b18e86c4504f5f31c4c -0x24ec9ae93ab16b724d3dc877b51f853295c28191673e2e327283a6b129291fd2 -0x5acb97a329a4bbca9bbb1f8cbcd30315687660c867c2e94bf1e503ca1bd3d140 -0xb16bfeffc509189220e20b3a0611258c5501ab6094f0e6932ce031dae880bce2 -0x69bf09b2e845d0c20fdd67ca93326eab6d3eea1f592fe570f6d5eccc3202047b -0xca03f27aa5aab865df925ff791bcb53a4b93ea67b9fc6ae7dd8745949cecb0e4 -0x09b5594a0f773f7bcac828db4f64d0137508fc0ce8f9e71860e4a95d9c607eb6 -0x9f8fe5899f59cd603caab796465e952df1c456ecc7894e2e71ca1630f5f0ea81 -0x6dc2156a3b59bf6417e841c9a9f5b957821a62e277f887ed75f8addf9e5fefcc -0xefc8a4519bdd2f42b3d629478efcbb99fe8881b7c986667cc288408d9af8170e -0x98f377b428dd6e0c21f64de3170b1b7037a0d82dfb5a332eb6c489aba4ec46b9 -0xd1624f41ca5774856366705565538e83cb78c4822f4939f14eb7deba03069b25 -0x2624752fa242cd6b57d9f691440145952b0fe643e808dee61e8ef703bd365eb8 -0x2c72cf9c80f26463a06631d345b82e2a2a07376efbfa6409214a71098a743408 -0xd62ec87e9243aa6454a19da1f751d4c9a0b06c2860df6eec3797512b4cdefd3b -0x280811c96e9cbeacd047647ff6d249e1218502e081644d70a6daaf2944bfe012 -0x0a947dd33e4d72f93707c808e69b5d3b28065f5a59f33949b35833769c9aaf0f -0x92c7ac0b6e14000d54f88ab576a236d612820ccc49ae1dfc3ced19bb485f0be9 -0xfe6f01d79ca0fcd287e18fc3acf58d7b55e8b497b5a73c1b933dcc6342d0bcc9 -0xe9cdc60bb1390cb88e69176d535173523db05d03329c059e1a0742f39378d42d -0x1d1b762657c5f5197981ec79771522cbeb4ad67547a9a7836795a2fe36d9f48e -0x2ea6fc83f91dd3873bc9fc8db44679361f76919f4f750949443c97d303afa2d4 -0x1c353223010e9d2b172f620439b04a010c43f70a0acaaa971df9ccbe7d6d91fc -0x6e161d4207332caad9bb08bcacef8a4ea19644e4d1509a66b60fc1f6a7f66fba -0x548fc22b7f397ce464b7098ef5ecc3ff637cd85bd04ae636d803a333935f75c9 -0x0d8a199f84b7f3b50ff6523b5217cf4d3d3a356faf3daba69e159b09744e0a9f -0x5ee82ac0fd1d7809f95dcd774867157fd2869b7ffc2cfcbe9585ca7c3b84b6c9 -0xc4333622ed0769fd5669c27e69998c7e0b13fd909f89a5010a5dd7ce910588bc -0xb51db33055de9933003ed17e9c2f8b119c760cc665a5cdaddbec0c48879eeee1 -0x381fc9cb3bbcab9bc6cb7f8c002479fefb9b3208651a4171729b7824b091a2e9 -0xf6a640afbeea9385e7f9b32268f1f5b988899fe2edfcc5c91c729871ff7f0835 -0xf82e3a88a039618774c78d79031132be73b120577750b5e840c1e429d525bb50 -0xd8d6aa6fd2ae8328a7ee601fd207def75b9bd6da4f9f08780b4f81b7551e2f0a -0x279faa5cd25a733af2a8ba4ad9d8089861ba114bf59bc65a359280919ba47372 -0xb09c2e147056e0394f95bf0a9ea7ff072ea30588bee9e9cd50425c254ad44415 -0x853032abd3e66011467931a25ad997a456532f35a6b34242c62f223501804b93 -0xc4709444e02e79900b17ebc3194de14341407a93c70dab8945ffedb63190418b -0x31a91bff3e4296cb9a98d8a0e1aadf2363d6a2926e96aaadc37cfcb6d7b84823 -0xd29e1ab67073cef58120085fcbfa7a07f52b4f4e12a4d3b7029f247740e55b80 -0xcd44a7ad14ccda8249bb3a8aeecba44b48c2ca6c2ec093c97e2ce07e7cc3ac49 -0xe4abdc702f67e63d02521bc6c72de88094ef8cd4b65bc4391087622842725584 -0x40fae1f63077a8377c3f352c5f8fb0961de5f53ee35a91684b3f5c6e3c445bab -0x34288d544e66ce6e723b66c7c78d1ab4079b4e724853a27c2a72eb67f8b2c1f6 -0xda97a4a76b52a8dbe9c464245f790600fd0fd701345c8b9fefbdd44e4db4a669 -0x701aea235afb53e9321da2a2f28d5b218abeedc72170d03a2c92d34f47a375d9 -0xe50abd3018ef4ea486bf7406eb2908cc5d7f5a3fd1ad6dd33db8768dc7490628 -0xb4dadefa0c9fb0c7d446a109de3de95aa83664c14c7e3cb899b7cb8c7146d30b -0x9ee526f35b2ff44ecc8a0008fe3a42b260cacb0cdf6afdd849601c196a88f1c0 -0xd8e3899361f9d01707268062aaead0f94b8297849f6c67e9a6bc5424af35ae51 -0xdf44a1bf89d371a912ab2653599e2553f74930f3edf39c8fe0b2f210ee1a471d -0x2a3e53613659ef1cf56c002eaf576a3d07df107257f7686bc96c2ee093ee3b0d -0x13e29b180bbac36f0f3453c419576862eb51bba3fa44117b7e035a15f90d60a5 -0x334003cb410d8d722f2a9f727f4333bece1804f9fb5d1a64198de0ea06c6efb3 -0xe1c82977a34bfd93bdcc8df29fb146d5f59b6bd74f158150e399fc49f70c8b4f -0x96337ba46b941f7152f32ff7043fe40bd8d774db1d6cef7886dca0116c7e653c -0x6becc4667872440c694f90399cbd361cf3203742d8935823f2d233a6d2ae98bd -0x1a24c953436154981505a105e38b5a0fc4f68c60e3770e3283103c4b7366db52 -0x49ac26c751150a710bf0db11d21a0aa3b0dec9751be3f44d02b23b870813d892 -0x0cb6b1aa3dddef44cd7a9b8dead6cb7c34690db42ba8fd705ac2155d4646c3cf -0xcf5476545e2bd673f9f2b41d1f73ef5b775432a7a09d4b192e2a857710ac9887 -0xa1b361c1db7e035369fd23773058f539e3bdd8c423420deb623f48df02ebbfa2 -0x74008179dd68a8e4b3e907e779f9a51023320e4c864c3ba4463864d1c7fe683b -0x295cb0748fc220b38ec93c10ab386a16f4324037af87522c5415f7f1df80005c -0xe7efdea79fb0f959171a11b3c4395e75e193b3348cb93319b495ff4839cd93d9 -0x32f7002ee7eab98f017b9ae8fe216eee8aa319f40f8062f5d9da94e8ec46980a -0xbbcbee1b4ad8817a0fbb08be99a40bc04b24a2deb23f39340537c6f8c1722700 -0x61a777c25a337e3cc61d63b4bd54f3e9a5f1748ddddbcb4ce6546753788175c5 -0x18aef8431b5b7c27e657be36acca9188cf70d047fda55f07f9b648c0727a1ac6 -0x00ffb2a486fbf24bd79d5da1da30f82e5ef726e4813f2d754af809b38715542c -0xe20833a4ad1c5ec3c578127f2defa094a3609444e6c76b6698801553da27ba6d -0x2b44aa9a1632f28fb567b3419b010d06393a3dfe2c94ce4da9d30b6a7521aa28 -0xf70d913d33e53e344d176b5b7fff95f63cab004569793d6e109e99087ed8d931 -0xcc07f0e92d7c4865c435bd90ae89a57413df2e4a42f531e88ecc4750ba5bfe21 -0xdbaf6ed113db84a6165c18f939ef8ef21a2abdb06efb3c48d49c9fa75c6bd202 -0x6179b75f3280821ff24b439b0245dedf93ce33e9e77abe948338efd99a70142f -0xd8f63926e1c4b4c890a3c6caecb728f0a39bc8b36272a2ccf2c953f4f07cd2f7 -0xfe3318b9c4d4bf6be087baac6ebd57865ae42bc8c6f731dbe657ead901270f77 -0xcb3ef3184260d7d3c869486f9a29f30845ebbe382c94ff0a0c13ec6f52e1e0bf -0x0b321fabe7ef2ecdcfeba288fd226b25ac9856d45964ab4d45afdb70e02e83b6 -0x63010d6e4e6df3f6a39b8538fb55f9eee4772026852eaf018ba25dd98e90b48c -0x651a2d87e957dc4447f090d9d617a0f35a555ea64b414134b5fb88ffdbf1f8c0 -0x694ad67166b1a78a045860b2226c0af8faf939140b663b2ad897bb5d38d11bc3 -0x096605ed801fa5db21176ec5e6681aa5793f724aa16a3c704445bda1ecddeb72 -0x0b8000c474e94cae45bc1ee72a603a9f96e93e4f9b667e0c54004a6fbcc49946 -0xc63af8afc96b8271965e58072f0873fd2307278131111cef2d079125ebbd1518 -0x524240b560a83d490c051a1adb04e8f3004d52146b7ee912767264229dd608d7 -0x5a8b0862529d7161424774592f5a113b974153912918060969a3b92cb43bfb4f -0x8f37c44738914c96115e8c116684045daa9ba64c9e1e98cad1529f80af4d1a44 -0x5943cfcf770f160b40a7ab190e79ea96c8337f2f75b5e53d3c33c8653e876e05 -0xe470cbb22e46ca941daf264828d83c397bc756e9391f362efb991c605ebb3836 -0xc3e8a881a2eacbb1211d83320611c6cda6ab1e2ef1844bb11072b1d47367b4cf -0xa10e14100f3544103f0b8799e3f9a3b3e702557e045183a0206e165496e0ee1d -0xcce537d9c5dcafdf90ae3d73c664ba70704571ec83396ea44e3e073beea06a0d -0x15e437557f09bb546bcabe26a9b505a2d4b3fe6f30b370e419693a04e5f7bee7 -0x7d05fd87dbbcfda98abd46cd6c4c14bb39eaef1225a869cd991bf8b003111dd7 -0x1fa0d1e663cf2e410d4f0cd1c9bd6d18ee46a70cce22ea2f07de9f4b4187d470 -0x0bb6580b1b4c4e67a1f5d536cc2ada2d33b0a62bfcea86b544eca5be31527b42 -0x69d17bef42daf15676d78710256e4eb192b4eaab3ef4fe46ab446d224f153b2e -0x9ab22bd7b15851ea6d542735d0a7ca93eb7e51e8b75cc0bc684abb70bab70cf6 -0x35cb590d71721c115b90bba831f2f015da80f46f6377ec7b6bbe2d0fd604ff29 -0x07cb056f76e7cfbac26ad0023c50ef7685f0db5b9f52f18194772e7e90844e42 -0x6330fedd07f1d5f6359130fddd60423782b0d993ab2aec71026918e56dc3a51c -0x021ce7b07f5c8af82afa905e72d051343148d1a99abff827f5b6b17cdebf9521 -0x37ece83607523f6bf1a46d5389b19d71b2507d9d953597215d4f2b82032d274c -0x247732fd7c9f22be17f862b2638ebdc159eae606d025149d539d5d8553707b53 -0xe71eb5bbfd124005fd2eeec750cf173fbe16d12b58046532cbe0916ca2613136 -0xcdd1fe7a83c659dcd35ce9119d8edae891dcb5a55e0b11aa85febf3d2b3cd289 -0x7ed37112166345dce4a960caa555b38d4084fdf5a4da940ee6e32b6f7be35d48 -0xcc685914e97d32d59cf5636906096e59a4c53dd27ecda7e748b766ae0e0460c4 -0xf5c5488ea3b554d9bf9416783abf9180998bb78de0b2ad6a425d6a157695ab11 -0xbb5b6c4a2ec696fb930c5c67e0e93a4f8b2e9b38189c7fb198dc3e6708dbbdaf -0x0dcf86db17914db10d6ea73ea9fdcd4ebf1447ea0b1a0cb28eaa9783577f269d -0x6c2cee97ea4f1dc70ef70ad6c7a621ea0219b93dd51df1e6f643c887ba5b2b4a -0x6fb44884397dd22200845d96f94f716ab4b0ba26bb32806782ac535c1a88e3d0 -0x1fa7a38069da0d0dce2606094ae85addebb1a596cafb6de2e965d5e0e545f73a -0x847516324d6e88822274e0185f94896534fe3fe14c5a6ae1088f6e37bd2e88cc -0x79ea21e8d734b59902a2b99612f27214250a20cc2d19c844375e43cb87db4003 -0x19e1321336dfb0edad6b2f49d70aad991004ae56c893e33afdbd69207f23257b -0x1ca4f425b1ec116a8aa61bc995971a25c67d280bd7fe029de51664533e665a75 -0x4c57b6a652cefdbcd02957a3be990538e9fcaec2c3bbd791d80931023a611715 -0x34f37d4c21076b4e0ba613bae5e4875732daff8c2492e46ad3dd24cd8aec1e89 -0x195d64edcdcb63fa6d5b97e5f560fd557e4feab1aa0add039ba720e5ff1f9942 -0x19bed36eaa79bd548f7e32bad0d09abc16f5a68fd01fceefb04f54a120b9c7cb -0x48267b56669d22d8517a228e080735ffeccef8249d138423213e390f80df7b70 -0x0a1918c5a0f52593b1ad7810d95d156c761e2578292b918d4df7747d5bcbae46 -0x6e1ed177dba0a47a8990b2f598cbc4d7523912c2d7ccfa7b9177e426bcc61bfb -0x5dc6985bed9d2d3908ccd09f20c6fd052e560a74d631a05094d6a9f0663e02c0 -0x51bbc3e5aebbbb0e01c9bb6806593cac5b8d3672276b7fac9aa4250bd425516f -0xd58bc74215e86783007a077a9eaa8cd9bd98b9e9044c669369b41e5a615802af -0xa9d60d1ca25ef0e7a0444f2cd59067cfee297cd0332bec74c9a2e214c67647fe -0x201dbd1a26531e1ab2691bc867c215fa6e67c2bae719c98cfa77e9225a23a587 -0xd70909fc6861d569503e63d6462681a379f18e54bfeab3ac6008d28d9c53ac75 -0x7bd58862977cee5fc058d4fdffea14c5d6c3f80c374ea9973bdaa2f94d8c2de4 -0x920329d2d40dee5417d21dde02c290028b588c0fc1d3e6f59f946fb8b7572660 -0x64d198e0c2f5339fc997842346ec73bcf2858f52886655e5cfdb018aedccdbb2 -0x57b660814f2ccfe615df6768aed6eae5359b5e8eb9eae3c2220539e4aacfc855 -0xc009b03073a5bbd1e94b59eef1f1a5cd3e66b0745695260d95dbfb3c06139731 -0xffef85676dda3cbb54def93be4c86694ea250f998d2c954bf7a2dc1295f29460 -0xccf75289fea8bf4e757d12518d640229f45276eff8fb685809c6a868694dfa82 -0x8d2396a88a0640b99854693c0d20ce6179a21d6230d8e9e1cd1b5029c74ef319 -0x5b2e1f26d29a1c4cb86bda81ec79bf6f5f95aa1651be92940489b81d18baa900 -0x9b0846b948c7fbc9a728614f9ee40d0d3c51dcd1bcefc8c5ee0860f663a23203 -0x9d3616103bf339aff73cda7eec861b2e4b17905b4195149dde3ff9b7e5fc300a -0xa61e9f9570d8ecce6358ae801f24659f0e11e5978e2ce16316efac3e4129b971 -0x432d030be0a26ca9adf2ca3cf4c86b68936a27fd4d6c69e2ede6a9c0106e8d86 -0x1336013c27ef739c2394d56c6a5787c127edf197a7eecd3f89d9ba70ac744dab -0x213cad8137a4d6ad9ef1620e25024b5eb8ae0f300e8d169e9ed409eb3ccb90b9 -0xc271ce72b280d6093da3319d5c8292a1d58fd40a538aa6bc6a72b6975fa6a3e6 -0x298c7ce7ba6d4a6756db5350c035c05ac885bab1082ec01f14a70f544647cdd2 -0xb73fee92ecf6fef16eabef838371eff15c3c7921b5da41b10bfa3d21aa8169f4 -0xd5883a9f3c12838160ceefc58261ec64dd0e98774bcdbef4350c9951c35486dc -0x82f3690cff2463fe71f28a5bc5375363a44871a4c3c65278f3886ddc3e6e8493 -0x4b038386b62d738791b70455434bd86fdc48b7b8eb94452f1ee297ded235dfda -0xe550e2ef3f088c8b603aba5cead1c4deb50d1728a8d282a4f13b2178a16e8269 -0xbf2489407dd9eeb87f5dc7f57308733037e28d011677c3235c252f3c81635b99 -0x118e59cb0c131e37c4db42645afd69fa4932e597a766b28df1410b78578afa6a -0x8a801233ba55c47bbf50a801f26a8b8c51e906eb49c2d341e515b2519a66e459 -0xb7311987027591eae6be8f271b05e0a2219332ace979d04952c5fec82afdba37 -0x8b136a2109dc24d10c290612c33fce54057aeae73ea608f7e766c62873545f4c -0x8791eb338390b0ebdc858108acdee3c7d1e6183c80a9d78ec5014d273e55c000 -0xe08169ed106f476e0f7a39744b6ef81174a8f3af2a7993ddbe48eb9e8e712bfc -0xb48e615927bf8e44031643658178cfee15d27a1883908f7aedb0e0e8292359c5 -0xdec6eb77a6946bddb8b7a011113704e76b861feaed422f089e6512ebde1868f5 -0xd8d1cc1d9cd87d036bee7ce0df4977500da3e17860a82b3f38e5065ad0eeff9c -0xc32156b8f50ba20bcf8428e3668a6e833ba4269c8400425201708f93ea1daada -0x1248abbd0b5f7eed772b0da478c604718ddeb3fbacb38e75f9a7cc34eb9121f7 -0x1b8fe959f44ec1648f15d3f0efbec6a27811981737d6415778562fe7ed38cec5 -0x000807b563491b795651253862da6dea75f43985d102d4f74e27028ef2450f68 -0x229e2465f9607de823a409d9d6f235180a8acbd7c0de67440ff8916ae01c151d -0xaf9c435ab824d0ebbc8e284931b912aa8ebf658475242f8a27b64f10e777edda -0xa0ff9ff337e72c4203db8b2df3a623f4576923b89f2d2f94921c007b8331acc1 -0x0eab8cce4f350e5d986031b639996476814e35a51b5951c3456a6c86f5d7705e -0x951425f19560320cc901d291f7ae0c6a13d9b915e8e95a5fe6bb7653776bb70e -0x5b1c96ed3b914284426bcdeecbbe27154b2db43597e27b63007dc9ad9a399123 -0x20fec21e9f37596185d3c3bb02e567f3ffcf5be78f2e70957476e20c7ba27623 -0xa2b7453f961633d697a60893d033d1a1847e94990685e3adb456aba9f6748c2a -0x35b32fc9eba9e5bec22543f2391bac6e19fdd5d0c84047c709013fff8c594ad8 -0x40cce1a0e79a9385c0b77dffb3dcc7fc7f1c4c2cdafac351637844172fbebe27 -0x42aa3604426aaa467f8ef4bef2033d281ada43adf1be0c8134c1dc83744d3a20 -0xd2ba067bbcdfd34986e7f3afea9871918fbe1f68715229eb3a2d5563241693ef -0xd953170b6ba4045335fec42d605e094d36c06d6d3a269388f90c7316f4993d09 -0xd9b55415695fdb0b9c5853694d258b8943f787bc2b05d16a0cc4472f8ca6b8fa -0xd251c21035eb58e4202733f3255c35ba8eb4e20db1b2d9cff1276ad1505f8c2d -0x23996d7f8832ae214facea61dbf16717b04491a5f5e154f60593668e484f8b4e -0x5aeb51d46210defd6d52ad39c31470c24068b4aaf67746f432fe1fc735d369b6 -0x45158b6a0ec2c48fdfa4860190cc2672cc47ff0778061e6a16da320500c98057 -0x4bfe7d1686240f4655191855aa1e0934086d10db7f2c55bbd644a0c3c857bf8f -0x09b57532b0f2c7602d50b587842083c5ae29050ea301c98a4f9b28c965e84ec4 -0x16dadd204ce39afd0a328a9d60e7f5b295ccd9048fc4bca0cd83a1954a05886c -0x73c024c528544103db4e50896d8c2192733af69518be08b4fefe437aafa41684 -0x1745d16368e77a79677b7d36491fa1b71b882684342dc5684f2bfdbac6ba5def -0xc954d00006ffac5543ed21505bb2ef2cc279422911d4cd2b049edc7c99876f69 -0xc0b8390a508e135f5fef65fbc7036f462029ee438e010b947bb69d2442172091 -0x231514e105efd74f8134f0410d8a756a8b7d68ca8ba3546a729c9538057d1870 -0x2381952533b5ba81e26912998679717b3316664f3b23ee3d5c6507b735d7f064 -0xce14ac616384f842d9713ffbeab47e38235a6d3a29f04e6b9ee6cd8833ef0d5c -0x3b6c50ad0021a34242c79256430293681a32b71f54cbb1ad1f106a8d437c2091 -0x307153c6c1d6e1f564bcdbed4fd78b0ab93deca56f90255368bde853c50413bb -0xf8aac35c83e8f5246e4b19f05c8f8384aefb8302f3a2ebb65c0d4794c1961dbf -0x659eb9f18782b5385efbd854df381dc13923d39fd5c9373ea93e3f0c7c7403d9 -0x6f66879f08b2372d0ab44dc242959b9f4356b84c52cc90c40db1a1186b8633f2 -0x6591e6425b1667c3e4fa6b854bcb2c6086b5a90f4d9f21b783bd9aed86b3ad87 -0xe72305a2b29fc2d5da51d70b40fb458c9dd1cb236a07f84a57fc018fc8a7b9f8 -0x629ace4ff1a8587e5de2ffeac8de9d2c8486c82f1a1cc9a1eaeb499d0a7554bc -0x1965521859216252824ecf825deb2278c5f5023ed8e0dd7dc067a573c5fcbcbb -0x154b4aed9b6aa3517711beaecd16a7cb9b7167fc6ab051f901dcda68ffe704ed -0x800da1d09da3ee1042146953eb4097aa778f5c55cfa5f6571a1dd98e44a3a587 -0x5aff1c70670f30e524b7d3be8617499eb099a8a4fa4909ba0c6028c35d0af96f -0xe2c1e9b2a6cef8ef05bd7cf323a1c87f02586c1a3916d1cf7be94b8a283ae8eb -0x15517ec1269b58123de6421a1245567dcfa58e4de4416eca2328aa3f7b3b7d77 -0x56f86fecce259846306afb0cb5456ba1d49959f48030bcff2d0561235945f9c1 -0x365cb7fde3ef0debdb770be43e7413c15ab525730eef53457074e44df4e8ca6b -0x4c606b31cf754e736984808b630074b278f077a7a18044d629d29ec244136d89 -0x3602b5beeea1a383c34dba327a9253fde0d8963e6459b54461ca9507d9bc63b4 -0xcd4ccdf1d6b7b7366ca2bb9c57e1a727df4975502625140b6480e3ba6dae6f97 -0xbdcfa604d2e4774a3cad4a67ae27b6411bb219f659e13b7b57fa80c6442a8ec2 -0x394886d2de49ba603b71909719d9b3b031273f085f0c20d5c9166376bb3c4d1a -0xc655b55e40a53be3a837262659d75dd05071568269fa7685750b3e5b09d600c6 -0x845e16eec94903328b18688969d30dfcdaccb443aa1f85f49b3966071196c4da -0x59c82503cca2b8f883ecb5e8f00f075d9e6f5a4fcdbecd97291c7958fa28b67b -0x73a9eb8801ef60b76021b1bcff008918f9d371040931918bb3f17ddca39c1a61 -0x833f5c342dbc9e8486afae398ffbd246a254e51415b21aebe33bfff83b8642c9 -0xdf3287a51d27293e94d405a3d28178ee0839ef28862811847c7bc0d33bf026b0 -0xf9e04d8f5842341e8717d777e417aabcc49e3c04026b72324c556a18ddbc8253 -0x591a5853e8853745d09ac1b73d4e5a74dccb9551f9228f701520135ed1adaa94 -0x46004384fbe1a8d899c7f24bf0da29ca8021138765c38800c8acf6a5e34aaa2c -0x2210c7792e630ffeb8b2b3b89ddbb372fd79c870ba86438ef075f6de1e814c23 -0x12d19ec2c3c33d50b1f58b5f53ea9a4f4a0d7f85f6f329ba52ea6f5c5835db87 -0x35a800085c81fb148a00244ccece625a3cc074e80c303c6e7eeb27455e0434c0 -0x6a4e9a1306b83c25758537b6a19c475d1cd2a1e9c9d1e9c1166010b0b9e39aad -0x7835a0de0f22ea3ccb90032b3c0e0e94042a6d9253f619cb2dcd5a4d39501710 -0x11bd0b8bf6e07766b7f75f80091c071e8fab42aa60bbf16a428ba26fc7d1f402 -0x4b9ccf001c4bc7fa5bfe38f36f15eb115a1b0286dfa80638de3d1752db91254f -0xc713d0c16af69940b5bf1c22558aadd00d1e57c7008b8aab7d3025b29bf2df4d -0x87f471a8bf5228c966ee5d1772abb9b38f2856076071738b4b27988ab9705ec9 -0x852890945c233930cf069b987eec21ebf5c8961ccd32a9fb2e869b73722bd928 -0xeac53b5018ee22d9ea06455d92c159c6ceed9c1ad4d3584676933f87b40f671e -0x7a49cd0fd5f9e8ae37171582b284d3302ebb8981fe2c11c3962693cda4d525c0 -0xd63a6cf3a01f949de3a5f0b3bb93fa710e1123f285ef3b34538ded04b0ce812f -0x3e5a3453682c2b05f065c3caf6e9688b9fcd0d344b0beb2a01adf0176cf11ecc -0x75f654f123c02e5116d4b5c6849f40cd812ce39babb512395b32c71d7b722cd8 -0x3289dc658b2983e510387dda80413bde91e61e1c1e25f0becb81d1c8beccc9a8 -0x44c95edd7940ce483ac77ec919dd42490423181ccd4907cb118601efe9772dda -0x7e96fa68f3499ecb75d68ecfd406ccba732b390239ea1377104b5c4fa16df9b3 -0x251f8dff8e3080cfd0a3dc9c7db77fdc47e7dd7e59de08207bb7be80c224b9b4 -0xddabd57b90d635889d9f9c22fcef47663f9b2ecd5aa643db60dbe2194cb9b5c2 -0xf5ce7b5865be2bb2cb13927db619c758fc7c958319c2af7af99b0eaaca81d530 -0xf2d3e750f11889a960d2c64f73ee4f2c902daeef42fba10e4ab1498ca988d71b -0xd8096fd40b84a73ff38349b8ab20ab982e1bb4aba3472e5a234bfb63227f0023 -0x698c43bcd18b325bf91dff966b063277913370ba33f1be6fb782bc24943bd971 -0x654847e4934f2b657640d00ef5283b41f048709bb15faca881db71d1b98f8b90 -0xcdd0c63af4e592c774828be27612bd577acbe6d79a4bbf41609f6d356371ca5e -0x7deb865b8e272d1c840dfe46d320f3574d2b7308e59d96b782554560fe47f0b6 -0x33599c41b33c2cefbb155dc5c40b4a335db8b1e62000a2ec685195f09862d706 -0xde1ea72f94909ed219c463681e47cedc68c336049daf0f3734b0d396b1865d13 -0xa3ad6cd5304f3419d524c64e5d8971eed410068918d123f0e4fc93a8eaa0e3c8 -0x9d6f437ea5f99f1c3d7aa3bc49190b4a905567bce98e892a364385aaeca23e34 -0x2ca5f38b8c3b6a8319c26d9b33380850c50b6539780ef3aa9e568aa886f701b2 -0x650e93f1fa593e2cfaaa8fed98dd541e51ab1f36f582da2ea73c7bf969d0670b -0x299aa4088618f96a3a9f0dd12556398655a2be03656b3d227627c1ccf81f1eae -0x1cd687957fb41172ba0f99fefa08b77d41a3062c8d0538acf3f42668a116faf1 -0x7dbfbe13b69d95b0b9b0029a83059fe4517f93ea60810f0a91e48da4b0d49d57 -0xfb30f033dccfa3e0fad4c3224e3d25f4e34f4d34ce0a9e1eb44468a26bb69412 -0xd1f4f1f7f41287a3ad0cf4a119c8392eaf2c577cb286979b449b1248449302f4 -0x71add325fa657a7de23b49172f6c2f1092075e7934b0cd5b81d1fdfdca5094f5 -0x2a8dca6e81900991f87237757c7accda8030375576bc996a3dcc6ebbf5358257 -0x2f49097fc98a7bffb90420e3136558f341e77c3383c82e31ae1fadafc5163a57 -0x5a297b552fa494bfa9d970c59eedefcc72f8568cbae369678ae50ed1fb4c71cc -0x3fd25c48e15068d9b765f8e363052a5526a79c813031039b6475199f6e4383d4 -0x974c49a88c65bbcd02946ab79c0df7a854aa3a048503980bc8c58dabddba2f61 -0x8b5c17fbf5a282d265483ed39779c5686c039e86629ee3f987a0455120cadc33 -0xffd3504b20476da88715c68d611b2be77c1ef5079565ac9bd043cff00b351b97 -0x462821ff059af43c7d1d2e066c2279adae80dd9482979fa4eac5222536341a5f -0xa78429a1f0deace453e213783dca628803d6f987d1c9a5e776a05b30e3caafc5 -0xf9ca18dc7b2fb55032120eb236c1bf5fe61a6fd9fed5ba4ab1c1058fd86c77c4 -0xaf4ebffc78f9668fe8e93641392186834043bd03f9775ae54983df4c0ce042bb -0x4b0f6d50aa802a11d449d3299cf4f5a0e9d18d47bb5ce9ccc0e281e8e876615d -0x469067f3e955175642533f30da202e678ea7982dac51d71c2243c7bc31f5537e -0xab1b7a5384e18f4cb4b5799121c4f265452e009d029af40e735e106761e97d97 -0x87fa401332fd0636562a47f787ce63c9e58de47bda826d75d377460171e1d062 -0x2365cfdcd84faaa739ef2850c180ce25189805169bd4eaa3e9b70e3948a54631 -0x2e427ac9f572378b270c797e038604e5bda2239e41384659282639740718a88f -0x9c1c977e756ad9e55d6f0d90e7a67db9928d92805994860d8d7119bd01a7739b -0x27e141d3f7afe565e36b978a6b90fbf14175f7274d665251e5502be30079022a -0xef701299ad7b91c38fb4dc64cc88d6ef123dc6bf91663723f9b6788cae3643c1 -0x4f36c68e30c1160c6ec9f6c8177579b31485ca37ecdb52441a5023de3b26a22d -0x31ee5083bd26af96ae1666d07e0c556c2b1904149456628c6d21993e260299c1 -0xd73e5f617cf9b00ba88dce3a078209667647f9ad76fb117cdbab4c4200412176 -0x707ca21bbb135212d80f741472e0cb00c6eb9d8408387aa92ac1077dfb9bfdfb -0x86b951d54b8dff0157b7879271f8415e116dc8efbee16027a4b0860b40c6e90f -0xaee670c331f6d74028e27086e4cb2fbea278b27f21132044b4c8ebc4a133fcb7 -0x9a6fa9266f7095051b464bbd665a22a9b58399fbf5e4f3e6cbe2d21756483d62 -0x3fe0f082fe517469ebfe4ca1522a822adba8053cc192ea235ccd3f694742ace2 -0xc38097fc3f634b12085dae5cf9cc95ddfedda215a134628680e4367f8aa12909 -0x8dea3cc523501683c82a9ed45436c1e38ac43c1f3ae7fa93e5dbc8afc9e95efe -0x9b92600f5290ad7a6369d956562e761f0b59c6c91c6454bde1de53199fb12937 -0x7623d28d60b4c857aeae96abdb0e7d1d120c2eefbda4c0424aa7ed51da7defc6 -0x078c2c0b15d47b9a12cdb31a00febce76c1997f4cc511a801351e5aab58a4630 -0x4e8161b7e3a7619dfdefe5c2b348705185b7657996142746df8f3133c435160f -0x096f435978a028f1a1a95e3b2a3e8ddd7bdb7ee9debc8a1b265ed3bb241f8d5e -0xa2b8aa27b3a527c10c3f2b9ef6fccf7f11534a02ac6cbdbf667922709c11afa5 -0x99f2d8c6eab02dfa2936cc22fa5f6b11b458765ce6a5d3ba05bd74e557b393c6 -0x88f468aef811438475d19de15947eca3a48f5e614b2ff92e0317a9d2c9d3197e -0x2f303be33b5ac2eaa689d332a2c64190b415e7cc00425f0d1bddf8c11c040690 -0x4bfe0a5d34cf44a45d5f857834041766ac0300a63f7e7c15a86c1f058568bf08 -0x6f20d67851e9b17499b9a2e5c73d0476822d0b4f7ef2e964e998208f8143695d -0x5cee30078f70c69530cc11101a260b9c52ab6764700157722cccf7c0b19aaef6 -0x84bb3bb0ba769cf265afe4f4e19fbf33cf23390f311ac072739127af7ad5d300 -0xa30dc600e8587f30c4fdc121ab61eb1aa5aaa0815b0573fc6e330c006dd861bd -0xe9f10fca7dacc549d45cce7b88f97c2fa8d83a27a7479acb1021368c8a697dd3 -0x59163c35fec16bab78a9fe859fed92d70ca100043435fe8fd5c60a7c81baa1b3 -0x8194fed9fc4b5f7371a13460176ae17dcd2e25b2c936bbd57767567d01709d64 -0x77e11431ea9422d91f9a4f62ebbc933f43e5a8e2253704fa44f9715f4d502f35 -0xec98ea43d5c6f1a93bc2459abd1ff0a517401855064e7d0b1bdcd927d25c7f7d -0xf6c4403018eace13354ec83f6ebc4b301eae23df937f863b3891e5d0bfb2bdcc -0xb970aeb8975576baf1052e3961ef50d5a40b2a445862462dec31e5f0d0cd9de0 -0x4a4adf7703fa4e25ced2dc7efe7f73116ae57a1a977c4cd55796b6874dc8eb9c -0xac44aefb540d1a070a5e2df317d40ddad53dbd1f95ab3265dca07564f3183a61 -0x40ab27a75e7a8f19b419e7dd5f558b88f940ff45ab0910f76f0414f9376fe5d6 -0x641b538c9fc7976f6ba6733cbdd01a53cae1709fe431dbff3aed350ad923df47 -0x469045ae4dc6ee476aaa124e12e3763f436a876f152ec7a2e2c2d9d000d55641 -0x15fc5af5029ff0825cd7e1ff30ef8610c0c4bc042530e9678a16265ea272ff56 -0x260bb166bff045c5cccb6bd661f0e6d7f263e656f862edacab7513768520b3db -0xbff9199c4e5f1fc9bb5d3c56ea7389724d6cb5b4e69bde56be4b7b3375bbcb75 -0x3e56c0153d3d597a081c9ae49c0eba279b7e949dca2520f027bcbf28d1051faf -0x153e9f451783f9407d6a0d363226d68ed0c807a66049855f9fe6694827e2bb3d -0xe561e5e5b608b723a8b04f6797ab689b82a9544c582ffb61520ae403e2bed8d8 -0x21aa381a2480cc1be5e8fae7dca8692dddc93cd83164a95074afa77b6428248c -0x5445972698ea01f5ec7e0c045de9a78d9c8e27e7307b0b0e2938cbdbf029a68c -0x06ef91e7c66b589f57a76837ceec6246edc37f303371b60859a47d9266458b3c -0x64946e137e65e8ac05fb865756c599ab021a797dabed45a8c05e79dc27caba5d -0x8eb25a624b51f136fe2a586560cc49031b1cda6fa5334d60f970b6a488d662c9 -0x00cec8009b7f46be2c8f8c10fadf9f9f6b6aafa42cbd5d5fd6ddb33e0b6361ce -0x107bbdebb98316310069a5a59f2bd6744d7810bb4b25e3967fb2b782122fb0bb -0x45acca8ada5a7dc688d42a4a47ef2d3ab22fbe32928e8dde4fa8e859c8256ae2 -0xd7f2d207239659aa0c2c95318e59c838b264b4ed5aa6d2dd0dd45bd550183a29 -0x472dd68b3cbef8dc99ad23f17bc699287aedc17e38b6b69ca155f9837273b56c -0xaa51c9364b02ff97ca5a61529a597408ec0aa8f8d12128e70760e0cbf997e7b6 -0x26bf5ea18492a79ed70e66297ad79cb11fb694fc41b4bd9c536db0c0015b5ab0 -0xccb79317a91fbf116e74c876b607962fec2f418734ab09d8edd029c52595ed9c -0x3157fe6da25875c4b4ecc5c19bb7fd86c3d6a60436cca267f32d66ba397d0c86 -0x61c6442e90fcf158b5480cea7d912392b5b2a807a2e0550286c24a30450cf9ea -0xc1ab71bf892aa7da94605caa46b363dd90e70457ffeae562d7a8915f75e2931a -0x6fb3c6fe199b01f91848b79a1459bfd819aa007637d82e0a04a1b9d154a92e9d -0xe125e51333b9021b2c5b0fe80066c949c33c9d32fdfd8c95f8e4496f197ec7f1 -0x1f49072285bef557c1b15d36a99a180ae292e6f6ab54847398b16ad56e79f53d -0x5b83a4837cf20ab493ada7fe57f09a8df3edd2b7a3be88a238c3a0c311d484f9 -0xbba863bd26a0994f3490d02b61fdc8492e391b28ce4afee24a84ef5e0585096b -0x86ab2a6145521ce566af10d6674a43f7eebdfd440b5d230d8456fc36be18e944 -0x8cc9f063d1bd09c09ca8911cb6ae1d0e2acb62ddb412f50d8161fc9be224360a -0x91c4ee037b8e3467ce1bd9638b481ecb02630ce6e165edcd91f86fc60972d465 -0xae257249fc6123a0cd48c768a9f246cd8aea3d5f47f28a00ecb8a79085259692 -0x85a8e248d08fffbe8b5d96c499f48f8930863f9d2d0833f083b652ddf2e076a7 -0x1a3cd170f3f4bdcea8e18b9ea3bcf5d6ebe9afd851a3de05ccc325d16197f28e -0xd06caf9041d2a6ac4bfc7dec8492823e8896bd6e3069f11e402cebf847400a16 -0xa9e7cb4a109ee953a9cf34d8459d7e6a08be922792bde15b2612058616a6921f -0x1154b56ed7adae27e450b0ec2c8ee6982c0b58dda2e07967130cb23206c6c20a -0x18910d80c0c9b657f3ef0e751d6808d455a2d7c6eae7444276af296c1b04d2ed -0xaac8a525a886969dd2474888fa0e5890a606f9d8fc2c38d16bb0ef6c22055d0a -0x888661a973060bf121f275e124cbf71f56df53bc8e9efb6e2530d013034e9f45 -0x34b629ce6342a74d45960ca5bba5f18fc886cdd9ae862f52ba5d63246d2f4324 -0x593d20bbaec46be678a6ab970e8c8408a873b80d25bdfaa7ca7aecdab84aee8d -0xce75624ac1ea8c72ef35fa1d73f4db3c195211ac8f35d4c6ea804fba84076f2f -0x8757011178c9d2f930728e5ecf45350b0bedad783250a9ea4762f0667c2b7d8a -0x3035fdd730f854dd37719a91767046fe7714eed917ea8f5d23bb1ab5cdb6f65e -0x85a4ce6b2a0904db26d34bff35d44654b70ae79794c32a5c3aa89a117a1e116c -0xc0c3fa69e34984b8698f33fcaaa733d3edf71311401bd71b69b11dccad7d1119 -0xbe1926b28d4b36c59a1ffe097f2262631b6cd04fbb5953a4b638a0f7d3e3e43c -0x1f41f358c2d1c380b7a27793052d48f936d9b975f658b6d726582cde33db9c2a -0x4e45b2fa097d397e0b22836f68bf9ae9a38edf63f38296f34aa9c967a5a4addf -0xb85313a6d3fe8876932ede87608b68b5fb214a50fda3219acfe671b2edcfaefe -0xdb09f963afe7a20efa298b4218ae8b95a9e63099a68a1f9bf3931c833d341d46 -0x8248f13570dd073bc85c1ab99841221f26342463178cffaadacf2700c971b34a -0x997c84186141f0565c38105463a8ed022862907916eb96a3f53942088a5208e0 -0x12396e49204e8d2cbbd9290de0974a97032ed11cf2ca6b121925c22815990394 -0x2d6f694ca07521d6d08771e17a7206d19b8975627bbec9f9f5070d672cf2399e -0x7c47a7055c1098283d86d0f1a154493ed5883b762ba683e4e6417b1244220d09 -0xc0f9293c727d6346fc454944f2ded9b5b9bb788b09f9bc951f87a020ca60f93e -0xa6b34e5325e82a93d4fe443ae14cf640866481a7393cbf92d1c09287df17fa26 -0x797ba3429c2b848993dc4ffd63a8c97966a0b290ba55649683a9a41fa2431ffc -0x3b4560e7ec36ba8226088008069ced502974b85893abbc9f9d7c7b4143d21d7b -0xfd13edbac8671b7195f60af87e0693a06c626ae000ee45747da0d1a12f6e1c5e -0x72334af99b4e9864727f1c8da196db3de8c78531d4b7936da9a5d353cd1e3271 -0xee1b1795f110da42e31f713f2ac530edd905bec3ce5a46e76ba82735e367b9bb -0xe52e8e937907393a5adddbfa0a206f08dedd02322277fa587f2845211955fb6e -0x6868736fe1a6f81cd5c66f856dbbf14ce87f0208d31423172c29e4748b807d65 -0x3e5b7dcb074d36c698577ba40c822305b6ef93efe872908d4e32dda90254db21 -0x8d75a318f2706a59c5e23b4d184fa9026a6c44370f5c49ab4e548d935e87e965 -0x2c4b42f3d7743c9fb8fd4cfd96da8c7b7b3a1a04dad9c2833e222ef37d3c4b18 -0x1e8bf556d596634cc7df384518bc8d63b3def3f28b8d8a5c2aad9052696dfa01 -0xc9fcb0a2ea13c2acffa5c9de0ef8a41fec265aaf2c2adf559107caf58505b91d -0xf4882324707ca8ec4c2276634cc04db15e47be8f04147991f1ebc32da5f9363e -0xe2651c8dbdb83ce60f61baa206fcc73ec0d0c148dcdfa359460fbfa716982f4b -0x1371d90567e37749af63c33b95de578c3172ce854c89f92ce19cd5dd84206d9b -0x6fc1d535453b505773e3dfd598fb6a0d7066d9691183d97da428b09f7c8a1100 -0x23167be26878439d7254ed4c67029ffa3e44da7fd2da371ed41482b18043b534 -0xb6497ee9945e5abbf39b7566e9bd754b18de5459e15110bb4ebdaf9ac546697d -0x2e813419a45200cd9d25c00e2af3bbf60d22898e35139f3561e01c7b087f7f2c -0xa84c7588547db49e718e9f019054a46840b22e3bcad5649b078fa4a51a0042d0 -0x54d907c8bd2eb37bc8b2708da45383ee87a61bb4d35d1734ddb78f2e560d7f3e -0xcfe12091fc398e0bbb9e9f759b845e02fb4bf6bedaa897d94fed118a2a41eeeb -0xa972086bb8a3e44e8cc9d5485c7bf7d134247be557caf5459afcc0e42cc9fd45 -0xdc20cffe4bb3219d9623963976c45d9ce8a29fa520f19f577f307a8864352333 -0x0b25b693e47e478758fe64cc517d682f0215fe4251effb0a668dfbee5eac2fe8 -0xd177edbdc9767762ae6ab77a581047ee15a8d07fa0982cff6339714314342060 -0x9fa40d0c54c1bf46671c84338b20bd1ddfedcefd6aa6927de1c0557ecc68a282 -0xc2afce921da89b4bd3cf5a8be0cdb6bf21ab60fae1c346f03490df35bebbbe7c -0x29d1fdde985ae411e6e79cfe0c1c0ddeba440ac8357c3c45f13e2b16560a756c -0x1d06d264ff12e008b97692c0ce21ad7b7d94c0810bb73eff8c346afba39b2c0d -0x9771634d98b65c57cbe3e14b5e7b1b1e74d44c0f3a1371b2eb7ac8074d6f64c7 -0x0fc8e0452c4647770728b65eaaa80803b1655bc0d9f4f0ae13fe0774bd972085 -0xcaf6244dc5520ad65cb11862e736f85231bd28facfba182029bfee2d3c2347cd -0x6aea877367b4471eb3e6d866585c6d5ca16cf34a2ed8fee0c7a621d026e2c892 -0x3539913e9ffea6ff33f4b8166305d53f01e72b272125d08b2d0164cf488ee947 -0x3c11cb0b73febeafdb1010b8f7c6f5ec638b88a7152c8b9d4df6bb62c17a5114 -0x2aa018dec67310fe02103f01a227f37caac3fcd5f5953e324b10257a047e34a3 -0x4dd7ea1ea7c0676c0b46daa91fe7ba61ba55308feb94c3060330e4aed9e6ed6a -0x00490e5863cb66b1d9229b651b6c9b9be6630b3ddecbd82c5e82ec36cf437b1c -0x63a1ff1f4de7e77bb80f046d08967fa8b628402b684e44a4f10b8796d4ca437d -0xffa032497cf918f3922f4eb0ee25a484af3c0d43c99e3fad30416ccbb921e311 -0xc3cd8d0a3e32b52357e275f36fd7d665d53cffddc25e045a0e0fab310c109567 -0x5d3f92121ef61c2dc191488f498749d9b59f0d373fb4d523a6565bf8f3cfef22 -0x60ebc98d3e2e34b0f67006009f29bec97db43982153ec0345e2209e08dc44c11 -0xd7a91769d15ef61ed69ef5ab3d936af9e5e2d757d39f31effcb62091f38427ee -0xd929398e109645d7c4e174507f5a975a7fcb556ab5b6db06f688d9c1cd511426 -0xc93ca15ab74290116caed6a66a8f2bf8bbf15ff3cb0aff90e2bbc8a3bad58396 -0xc3f2b221dc5bdd8387c41cd9bd7750d7b6cb3565686aaa7cd4ec249c88b145a4 -0x65101e88fd6d7240bf0130211cc187ba2f3ac228f8e28d6093f41949c2ea8efe -0xf4cbbd57ba57ae1348b79db3bb80c368b66642c4cf34ed17cb8c62d857c5f3cd -0x4617f6146fe01f9ad625f8658ed5ac65f75ac57662d2afa2721448279983016c -0x5877f0f2cd5ccca2bbea07b65a6252078702cfd7dd4c79ebed51ddc0964c35ec -0x4b7676e8ece91430bc0246db63e9d5ef11e2fb0c591e68875a5449f249e98cd7 -0x5323b1561fff98479e82c509e34e0c636969e2e4869b52802bdd5b1a7fc8e796 -0x1937c67cdb0150530f5e2abe0f3bbc3394329fe9c32d856ce33f015df397bfc7 -0x3b36761ebf9f9de06f06258562ab697d8602b13a58401e7d98a4dfe18d2aa0bd -0xb8179d6cdb9001ca439b7582edc3a7c3298b89caa8a9029b95d262312eebff81 -0x10db4f416d4311b16a9dfb44897e3cb8caaa9ef3f8510a77c1b168aeccf661eb -0x41c88f08c1b417590706f7e5b8929351014d2c7848e68412c1ad017601e4dd09 -0x6c78d58dc3c6aaa2e67e5343a7b427a459bbdbd87e53bdb65d05d61f3d101a52 -0x6319cfe61fe9afea653058a9892ebc80224db02ff57eaf71dd02f8080ef5d430 -0x6971cd0e25d56db880c4bf1b058e1fa4427273b5da6cf64d8935a04202f843c2 -0xf61d0aa9f32dccfdd7644998f390d8e1b19ff2eebeaef4ef5719247b5bea4e80 -0x680087dcaac54106c46de692874d015fa0ec15ff8c69b572a4149c1d4d30f9fd -0x00689f4cfc67971859d6482d4edae69b30ec7f3aec57673ed229879f3d4ee383 -0x4804bb4c492d6f15dd50d7ace24cccadf1580b746c193a35769f3917206e5b07 -0x548cb315aecb6e5fcf28007a8e737c94f436ae6b8d66619d4edc19a285dbbac5 -0x434e5732d2708284ba00a00379fa130abb6f5aa38c5623b700fb0af85370a441 -0x4f9bc642219f3e42939ff6f3bfbb0df13518cfe59b8fe2c506004311d011b0ce -0x7f824b18e78f6eaa3895ce2ce5b9c3b2461d92f512d82afe77ce863eb682474d -0x3ba2029394ef0bae2b1c428119fa450566e28a3af07ff02ab1fbc77df076089f -0x10dde04f57d493f11e6e176b7aca893ff387559dc1ad9e0e6ea7b83992d8d061 -0x01573293b5b621d22735cffeba2f10d2364a34a9905854c1bccec7552cd6baa1 -0xf6afbbd019169e3d6ab718ba2800f1c2e696a4be8a7c43e65e6c2ef56b424aa1 -0x05b02a74a77e720287c696d298c84218ebdfea25a33abbb5e5f9c385bdcb962d -0xbedf215ba615ecc151d1fc627d06f6e3f33548cace6f8c8a9eeb3896751712d5 -0x1021dc278a47ea41cc4af5a8d053d557168e3ec02fa7408a9cd59a287a485819 -0xf9db69323f40fe9fd136777944bcf0ed9ca01c819543dda3333d95b51186ce0f -0x6f74a55310d6143c82577fca9bb5bfcb52bfca916e1bc81f3e0fbf69b18c9f1f -0x65b33b5f57bd0c95050bafbc39d511eada51601027d28e4ba7b644576b32f19d -0xf4ab2cfc5d3feec12709106ffa4eebb5d5dabec0bd3e6dbfd836ee987947b032 -0x65a70719f1f833c10aa62ebddd3de3e73dccfee9d00ecdf13a2ac65fdb6bf661 -0x3ef9665026c1755571f5008cb8ef211a532f2e9bc3d856370f4d2c2c6032b25c -0x3f1cd12183f18616293dcc10e2a25d258e9df98480cfa74911d5a4c453b2a2c2 -0xef613134c54aabb563bc2ca44ed4d55c4994d084be8b1247080bcdccd8db6b3d -0x11b8b09a79e3a3f655699b4cd6c0d3a9fc1333bb9d52cc9db142be4edd28201f -0xc38da40f81781f17988a6015f9361ee98556e951c38e86ca5b9603e6e32756ac -0xe4c9c5bf8f954451ca1ab1197d90392af41e3b385fcf84757b6629f5fd4947f5 -0xf114fae501f18680466852f910bc26446592dc1b28fd9b90519ce8f3a4f5a312 -0xaafe10f4ef5473747cda5833edcbbf4f1cb524bcdde103ce410c8e859ce97658 -0xacbb6895d9e397a9f5b0bb654ad51466f15408b7bec8bc3b2261e57717ba40a3 -0xd7ffaf80dcd5dca153328146c68eccaba981b23e08f1aa952661550031cf226e -0x3bccfce91b69f7fb8667d3f71c9249defcd92f85fc2ab86fd02dd2e3a9bc7796 -0xd250d53aaaacc3157d8ade3f10734e85bc524f12f5ae37590b36abb4ac5719ac -0x3fc538e65dbae94f29af7952362175e19d86675db621a128e7897ea4155796bc -0x66699461c57e839dd9f111e019d9adf517959c524a2ac16158d675701d1d4e74 -0xc84a3eb7c747577a873540f5f6961688efe4cebc84d52ae3fa59d8e6f2aa447b -0x2df54f9cccc9f79d0d47dd43f2151e20059a6a75a1985515fd7f2cddfefa6c80 -0x349e305a868b1b07d85e9f1120a177ece4d04f883d375f68114f4b4d7dc4d1b9 -0x62ebda157c92f50207e1a58c1b825b21b891c693b734bc4654e765b66f177d43 -0x2369eab774dc50474e624abe7c85ac57560e52f277a465a85bac654b95de7651 -0x793cfed380c634cacbb9025b6b7c29d84397aecae99419387199e98bc96007b2 -0x894f174b23107de2b676b40ba1b6dbae1d025fc26cd84345d8d77905480f42a4 -0x8e51c9714721e1d823822c605eb4455463fa1b546e316adca9e00330ccc02031 -0x6ecfde9e4df18aae605f41392af00f27706ca5eb73b74d44296a8e128972c933 -0x652360aaf25fcd8e8f9bb70a85ccdb1a946225f61b1e4da1b7691ccff5e303d1 -0x650bf27145e3a38c845524d3bb72ee6cd4cea4eb20516b93215cc926c627ee5c -0xf6ce4ec4f71a38f86a263cab963e641419b99857193bd23039cd572f0afedcbb -0x95ce10a8c74a74617e6d234f95906e0ca2acb474b8a57f6b7c7db170071149c0 -0xe275ae2857aafb6ff9a3cbd5f1e60bb6c238c593d1d8a872de4ecb6dbab7316d -0x2f4fd6926df6a217f6ceeafc1d7e39f20a903d4b1644f0d0d7ca7864c72fbff3 -0x3bb4a5c197dafb0aa95da212afd26cf8e313c7b720b049dd3f5a068287c3f14c -0x0c48146860110788da71e0138de4c2b386320973f8d216f86dbcb8a3a65987b3 -0x4f3cde965cd9e3dd32d305cd0d9c3319f9d6b7281ae4a5e84c70b0aa1a43e152 -0x2d435bf925015a41eb7b8982e1d49fc791f5f9f178eef4c6693dcdc6975da49e -0x2df7da604b748dba7ffb4a8a4b1fc5d0035ba74ddffd4c163db3245b97277ad9 -0x0c608a0f0d12a309f870f7a6f32ef5ba7c3a5ac91fc07108b35048ad7654049c -0x266675333815ea1b4ec8d8ff9615ec553eb123cdaa7efa4f7358eb48deacdcf3 -0x9cf44ab28ec4b7e0d80c70909c42dd595257816ea078399cad624bb997846c33 -0xec7bbf4c8bfcea1f717d6b5492ec9fc2e775147283703330a8fc800d93a18766 -0xe30a6c81ddb0fcd05bf0a54b3aba5790dd0122d20afa6e56451af825175b9ab7 -0xabf782d1dd6bbca1d9501203e22f06b737c7c88261aee3aed75b6353b5dfa03b -0x55326cc46b715220b741e92a031b2eec0d7d59cedcafbe46a54269e338fd0f4b -0x33a08c98976690a582446381c82cc25ffaf81858518914548610d7690560aed2 -0xf3626409e2c889f5d2111bc9aaa3baa44e9cb374142e43d5a0444232e62a62f3 -0xd4d9e65172259e4613ebee86b285a4426fdb489cfac251ea00e84fd0c5cc11ed -0xe167cce9a093e8e46d7cd1ffc4467e1dfe7705e4f4a7b95be5640e7017063fa4 -0x4b6d85d6d2f9532e885173ae32273773b39c463439b8ae5d0eafb5d8d96726ea -0xdff13ca35eed9be82180dbe7389c349e0557c42653a248bec2c828d901b9e36e -0x9c531c9a94e0fc1d0c00fb4fd829755ced5fa16a6769e66003e201674ac93488 -0xc8f7ecb6bddc00d638f0975d6f6a51363c020630631b708454944a96cfb346d8 -0x8fde0c363a8e739cd66404b2db9a9025ab209560addeb9afe4968cd859c4726a -0x3a7329e8221bbef1d485b5f128acc6e133d15f85d3d5d97ee108a7bdd73b070b -0xc54b473065b5bffedf86f054a28d005fb1e3312703989137571f8bdc0b878ad6 -0x645f93cd287153e25397ea916b4fde231df0065c111153c70d442307fd43e430 -0x8d79cb533d6596925498b0689756335e1a94c236dc29e4fdd23bfdf81c2360f7 -0xd7003ab4cf6ff79e3afbf8f17059b4735e357fb1dbc394e9e4b326ef299f2b10 -0x590b29d5cda089befec0a0af0ce4fcdc9ce24566f7f257a7fcecbaa1337c623c -0x799df734871625f5462451757f4589787dc830fee7ab7738da8b90457ed6fc41 -0xec9ab444bdbcdf5c422b4765327590cd0b2492e7e192a8b4ebb24f13a03befa2 -0x6ab60278b346dd4dfdb16290a6f49e69ffd5c401b1b227b883c1dcde4107070b -0x7783acd5cdead0e3d85c5a1f9c82246e9234a664ef1cc0e374be22c7f496d49e -0x1b2dbbad8895f752e7157648293c03f568f6112953aee77cd9e7f5dabe6ade01 -0x785f9dcdafa6e86a2ae61d148e704235266e960d9918ab60a6079b782cbab8af -0x8d91642963244b4a5e8aa9aed4298383e823d362a4c85b77262dfa19c9fb6a10 -0xf6e6d93cc3ccedcba8a4887bf87c42ab28ee702da3128b36db1645ee53e5c440 -0xcf3c7507f2e77b01c49408dd91dbde5a04cf56ea4190c676794389edec7a9157 -0xc55575e962992867d7908296ab038885b12c86e06e14dc79d7c966528e06bdb0 -0x6797cd42545f7432f18b5b80a7c4e55c94fd85008802b5c9d0621f61b6f14091 -0x48c8aae3f20ff140fe48ba838b568c75f97e180d54469783aeee017c43d0df8b -0x870a0662266df2409e9582192bde642dd7aaff46fe679df8966dd062f614563d -0x9bd8c1207423663e31565f5c10ba407564f1a6e5ee6bc741324de8fbd1793aee -0xcb6c07145b20712c46e4fd3885d76540b4b8c2d37286fbbe3101e0b8176ac302 -0xb8ea007f665e48a42e9ecd0ebe348b51289b4d77c044724ec843265687771c44 -0xe1519920c620a94009cbc8a64a67406445596b5f7eb0501f9a392cdecf42d81d -0xaa411ef86c397ca4cdeec01b6fb0788f1ec2601e1f0d075b172cbf4ccc0434a6 -0x5684f8282443cf5176d64a88157cb9afd3742974d2655a081bcca461949e3d75 -0x88ad7694f753de8df4af398860bf7a9af3599ce052c5cd2a8ca134726ad96085 -0xb4f9cd44f5960f56b1fe1e043104584d4d128cf8f39299bd8654e56f58e3fc09 -0xa3ff5b323a77aeb45c9e804e09f2ff3dd01793beee6d61d2a23e063a74acc517 -0xf041cf9e6a65fa277814f62ee82e11979f41a9aa49fa632a0e9ae27f4f5522f5 -0x6e427f17de09f6baf6a68c513b149ae0ba2698a82b03341038767d78ad13d540 -0x252ab105ce8bcd73240a8df32047feb72cb79005ec4407326ee9f343baee6b79 -0x8f7e32dfcfe961dbc30e7fe52ec37d721041c9ddc801fb4f971a3643345d4ef1 -0xbf3fd5570c3e80426baebfbb98d7291d0472475e426e2717262ef735568bd6f8 -0xe561d2ac2ab6f79756cc32d22b95a57c01c69d55b0bf4c5262bf690a6224f621 -0xaa0673326cc5359f3b9fcb41f8cec4ba32872db43f82eced7cfd8dab329f893d -0xe28d025a9e8ef538930551a1090e92b724ede071dffa64cca906acf8d107f5b8 -0x0af8709bf24fe9a959a42fb7c3a86b649a9d4a81a2371d32c2dc1b7ea6477877 -0x200c289fbf54308b100de10b813b96516e0fe2b4692079e4bfc37c65760f7106 -0xb8340fb4ff328cc9e4b0f124a26ff92c25cd6c9b247f6eafe811950dae5c5c1b -0x26492e9dec8a37476f1d2176e4cdbaa47486d2344de5b21d988fb4460ed25962 -0x07c7fd367998f6234da40e1acd451cc65329198300f36bcefb0aaf1479594dd8 -0xe042bff41510a2961793347e40f1a2636f0f79715417ddb8fc5cabe02403d675 -0x447aed61033f9845d78df6da2f39cd74c0717f5cf4b2f249b01549a6eb18fbed -0x8ff733f933fc29cd44dd1492a63dca87f04376fc44f6acef28f8e2dd3d4b85f3 -0xae27048912732f980742870699e2f7ee275d511a31a22dc2d3d98fe671276a17 -0x7ba82ce7d4ad31bc0c3275fea43445e4c1bf635ed98b2aff794518ab35ac4468 -0x1d36533255fca5cebc7e08eb4183a9eaa362bd86d9f58ed147d3ce84512b9978 -0x57e7b0e88f724e4687caecc0aacb708c348515b2e24522941a0f1a78988f9674 -0x3860f3a1f66916b38552a033d634ef29e7e92706093108eb63ba6bc85a9d6a81 -0x41d0fd6d5fe5f13dff7eb55af353856304f373b384c9719f4121bc59eabd68d9 -0x17b308eaeb01b572835016f36f54bd8c03b76dbb3b5a804da096df87d7e21c56 -0x8c3248dc20deef722bac05f850d597d70c5fa16c04e0e7c239b3adbfd1fe6595 -0x4cd21a811e35da5405eb0e50731afa6e4066a500c9c761a794c3dacb1101afa5 -0x7986a3a3f4613c8e431a371f9bf499fbd3aa2eb25cb9677dc1813fb7e2c1f2a2 -0x4ce6be9d4dde7d5a7fedbf9d49d68c4ca567651900f3790dcd244fb86fe0a62a -0x026177667bab86ebce451e0dd4c1b3d047f2e5f2d6ec5d5081986c9e668e5f15 -0xc7c59601970d0b055a443c9e10a709e56de3c6e9f5ba86f28e8e4ca30afb0cfc -0x63141496a92d880d86f4d1f4ca85f1e7c6cf2bd4149cbe7ccbfa1150475f112d -0xa2ffd1d3af51470b19a8aa0b3ffe3ee073a96aea55c9ab4f73d60479f479f1ea -0x999c0c3ba8fbf17d2438f45c00c935ba0ccf5350f574ae0fd1c1ae540a7eafad -0x41a6b396e82284198c5c53123836dd0b1b6d95db5c42fb77d5f11ec7a6e4433b -0x06afcda6aa5d6c24cf002ceb8f90b4d3280b260e39e812e8562645c4ef98b373 -0xc2a769ca2673972b05ccc1e8d8e099ffdc65491651c59cc5647e54698dd11ec3 -0xdb9c2806dfffcf820b9a7e571c8b232d3050c30e2baf0edd822a3408148a68c7 -0x492002e18528760cffaa13e2193c77784f658be3a42220f1d44c4f286cc30051 -0x4ccebd17d9084c0a276b04a428dd1f37fcec00e571065eb21928beb42864bb91 -0xa7630cef92a46f012580a685f6eec74d3546546b2cf54e03ae5a9a9c20ea4dfc -0x7a56bfaa995a052ed9a968e471c3bfe2c2af516ff026b348dd42a2748fc2d983 -0xd8fa5a142b05730cee404c9d5b921df5db086ba8b9050baa5711671fdd1175b9 -0xd3e0f934967e83b40a9fcfe4139b33038636bb4890ec0b9ca28f934e62fd495a -0x1b99f52148a6527bb17f947c0b3bec6c64c5364c528102f45ad793219cc1c43b -0x858629f53563baa0b17ece0acbfa7cb9b32860bcb850d9cb7489d600f69d17d9 -0x87a069edfa2e385fc73ab631c4a5060f9b4930676fc8d0a2f8f853cbca9bf83f -0xc73e5afb38e9185d83da8cccbd02d47bd88d85490c2b38e60cbc4902e5fbbefb -0x00c71ecb691477743446f2bba3d0138a0bb6f2e1e4a665722143c18fa9f2d548 -0x7a5d386e2fef7d816f34f8f19bd4a63bf8b72c5c043f06eb5a46e8f01039fe2c -0xf0b55e1aab317d782a82b86182840ba238ebeafc202ec993ea51446ae149c01d -0x0e8653db116232bc5800c000ff4b3ace35a35f4c761625e3cc854600d1cec0fa -0x277ec825e9ac3ee5bc45198c10fadebffd9711aab150bbf10102b1ccd0f62eca -0xc987e3d5c9b6ee465a10da7b244a8044fa4705049532b577425997877c5f9d86 -0x4f3d0b451022ad370ae4e6ed0d64058e2a245780c511baa917c0ed3b8ab4fc2a -0xe22fbe18ace0c3deaa5293528d0fb4e0d826adf4353dec597163f589a6453d45 -0xfdb3229ac6b4552b04f1a8e1f9b10fd20425c5267de43e4718efc653886153fb -0x50300529b321a4dab28c87ffe172c1ac56dae9708fe5631c0dc90b4ca5e32b13 -0xc7f078865794f9724c0f3623b0d3bcc272928aff7b692d2411ca8bc8237f9fe0 -0xfa85904425d51a7c4a6aa858a858d8ce11c95a19eafd51630777257c1ef52151 -0x98f5cfafb94903703902183fafd2a70606889b83866e847e5c4f878c1ba2c421 -0x4dd4b2dcdae7d11bfed6e16cb18c82022e91eedd01be553238f78d33ee6b39c2 -0x551eac8508dc4b6b087edef59a2106c714b375f739cdbebf2c27dc753b32b0f8 -0x253ca3f254ba044ebc29802a5a0f2e50c15d723f29aeba91dc5855d8711e9d56 -0xcbb8eeb562dce93f760f76fe7a584c1d8310739542879bc98122d8d5abc59ab9 -0x0a8c9305b000033f1384b46690dabfbafdaaedcdbafbd275ecadb3ddfa5eeb42 -0xbc311d9330b3fc64647f5766adf15b155d5abaed3cb7bfbeb2874c93c00436a7 -0x99cc6ec1b1c73e238ae545621809f398e9418b9b1e6bf18afd803cbfb0fa0353 -0xf5511a7455ce95d900f25d367a2de52bfdc50d280af8a69c8b902bdcf821c5c7 -0xe6b35379194ce0179c48661b811047d5229d104e4a1164c7f96a7261bd01543a -0x83a1c7c4cd02957721ee109263715a9595a0cfb991a8efdbbc1bcd5d2a4217f9 -0xc2ddcc830ba1559f54c310f4ccc94175a5bde0070a501b6b3bd8bbfb2976f671 -0xa454679f2d064f7edde25c97ef3389938cfc2573d5534874a9b15edf6bcc24c9 -0x3e32d662843298479a501cd5210a1130fd434730a9bfa00aa022b16108ae0dee -0xd5f3ca9836cca393e0661e0c8a19fdaa22d3975b3156bffe98e146937f2d44fd -0x39e08f691dab7dee3f6a66dc79de4d9d462e1a30c343947005669a17cb9d4380 -0xb25309b96114358d0a8666746b77b763578df3a55665c94570f0617673a33572 -0xf3ab58b9285557156171a700b00b656e4cb6f03c2a36c80d08ff1faf0975d608 -0x80754c9147dab4684f48bd19f3ebe9798f583a34b6f735bcf9836af208ff2a31 -0x9db7ea6360f5928681d8bb9e0f59a225ed65a894d09c5140c625ebf01f2799c3 -0x78cd3b8363278690f8aeaee7afc90af0bab74320198ccb91dcfa9ac21815e25f -0xedcfaad934d4b8c39f099688caa93f28f4f22dc089298c5f384be1e1414ec3ce -0xd8ac027113f876ff2dc777af8872a1d3c79c8107f14dadacd0e4c7d24ab2bafd -0xce85ca1ae5f117d39fa4c4ae388e0ac402d6b6821a78a7632d43560474059ca3 -0x1eca8d65b075ec0bc2c6ea509a21c8ad2e0ff13ea09b954535ee06faf670e547 -0xee95f1b798d1866863890829ace567c67ea2994a273b74f66e3394ca3d668f30 -0x3af1872ce73bb5f7812628f06fe82562ef2f26f364f46365db135233edb76e56 -0x7020d97f71cb942ec2d59f2cc3c14145b103b610cdd65ac7fb018020a309158c -0xfea03156e16b9c1d20111197479a0babf0c6be61bed79a74e3f698ce063509ff -0x994698e2957a03cd81b51276912feeec39ff7ba46d3baf4f55a9be472756eb23 -0xf8b520bea0b01b3f553f11c5ec60fa513f2938734a539e386006a2ca5d50c6c4 -0xa3f92dc616363c111320dd83dfc75829026e3114dd830ba68fcf822e69e4bdcb -0xa5180be0410b44eb59cc5d281f43b233d1350b72eedafaacc8ff2de7785d13c6 -0x5339211280a0cd7f052ccac563b437f7c1256a9800061b3abb3b9f00e104ef67 -0x71441ce7edeea10fe51a7cd04d00cbaed5c4305ba7f0ec08554079be86687707 -0xb66bacd20c616b51d504a5e1da5626799dd225d118ffb53aef1a640436fe144b -0x9c9064ce9974db541eb1c8a2d47db7132890d31773f39ed156f7a1cff98fc615 -0xfe26d5967c441aca3e87e6c920e1828c83ca8284e695741358fdb936d1803cea -0x1af4428c5a29b8786f3ae9873adbaa11e14db51c080cfddd19c265acbaf446d7 -0xe2037c86787e2064e48de85f9f75a746a6aa0c483808566d2c29d424941db72c -0x8ed0191285ec027fd53ca4550c15bfc8297c9cea9b6f9459a8361d98af37f4e5 -0x82bf7db2531aea60e4104474db587f3eddc893b4f436d841b367e8a8a1bf2407 -0xc5c8c73e51e4818caf42ac1fec61daca1fa116b8d04002828bbefbcfd52a485d -0x329585f8c526bdf1b07ee47466ece3b531e54f8c082159233d54695dc6264e11 -0x2fc9f8e86f42f5740cddf73405aea2b3ace56076ccb42662d0fce9e6eb649379 -0x9cb0b408fdaffe62989d8dc662d904a804c2c188445907f5f679cd32a0d738f4 -0x136224b747f053b1e309ad41e888d94119e436143982ee43d10c28c3cb0f1ca8 -0xa994a501ceda15c903bce8e99c0016656af23bf2f9b90406c3ecdee761736861 -0x781be8366d774c5ca2cecec75a3f09ac7b9b2c49974eace1901d44bc9b37620e -0xe5e112e0593e3c01b0ce4852d92e8a0e85a18c039b0da1054e6d4bcae0a52d9b -0xac4554cdf18dd2d57ac1c4efc57b69e8e463c2a2214540b4af34fc1299359dd3 -0x2b99b52aaf83cfe1a4abd7941592d763143774dc03b3ecd43148836d253ec251 -0x4af08a069126c3c02fa74f2c1e67d7dde0c43e1591cb2f9301cc76ef5ed3966d -0x2d74f52a9c63c7f15751c0d2089cb357bc60906bdced61b0b6120af51f719a00 -0xa49f176ffa274cfd9f10030db53c759d257fec1ccca863e6a20a6e850504e88a -0x5a46d9a66bd3b92f95509a107ac5f15baacf62bdde4f75cabacd32604acf34e6 -0xfb740d03493f893a1d9b7370fdc2260980d03e20ef49ec7905ca8ac70580fdaf -0xda5730f82edcd8f47bdb09a87c255f407eff755cf85a103b7d85288c748577aa -0xbc3b60a8e3d1e6958c2ae43fcedd19715de2b20d89c873087fe96acc167856a7 -0x06338ea35b6a76e11dbac71c8fd50862fb5a101768f61d49399ed01ec13d5b61 -0x4d8df77b0fc329a1bebdc08b207cf2017b5df78c457cb0bd35df8f5b0f61c1ff -0xd8f212e7778b4fe020d6ee682c48f9fc1bb758849799a9b5b5b3115e73a5bf5a -0xf0a1b15cfd533e68327f878d900116e34d71a66fbb9cc5b4bb5415e25d0e133f -0x34b824f14e51e60bfc015cc1d05275c151e4c7794a810a9450a88ebcb9b20f8f -0xeed074c931c29c18cf434425db13987d3537d047f214af3270b196dea0a3c564 -0x5b4f0f488eebf1de021a7bc89333f99507f3b6cb2b339803b4c2ed9ec0f55d05 -0x61df9a038394a220a7cc0a0fc4b85bf32f0face75a55707887f39c11ac2674a7 -0x8d93d353423d3f1ddf0cc150470bf2f6fa60d54218ceeae7edd691df902f52e8 -0xf37cfb7858fe761425715faf71435038d67fd18d1b201421041a1104933cae2e -0x21b2658d9ea379e6fe9456a048106553e99a522155928744101c6b111ae5f095 -0xd38bb4baeaa8af34874fad77716c38b062165ccc4df3149624562c33b03bd8b4 -0x2431a25cd2e377f128dc5fec065efec36ee3d5191e3bd206496b2da2873e6ea1 -0x368371f83f5a3a3265d1a55824def02aed1057c44e49d864b78b7e6b95af7b37 -0xd1a2dbdbd1bc792d5ad3950a1b6b6cfeffdebc98aab038471b34190c97dc33e9 -0x0fd441c650a54567e14b52dbc4336d53c96a93303bb543b74c623214f0a5ec46 -0x86ed8653100543e9aac5d73ed20c575f37064eee37ee3cb9e3dc6d931e93b771 -0xb05bd438277322d5345b143729ad074b104617b49578667f8e1fdf2e14f2de7a -0x8790b36589488700c8e3565605ed14d679c5302a10eb25767d8afcdbc6af028a -0x4979318ec77ecb7c96b1256c0d31cc347364916787192cbf3a1da35f8f026701 -0xc7ead5f5e4283b67485050ccd9bb1a9691e7c34a02cf37eedefb813b35e546c5 -0x7535947eb7b326a5fa43460a91e7c9c1330b8bbce27affe43002ac6de8cc1bc9 -0xff01d7f85f1fddcd7d86033fc859d98ab717f30943c288ded72569e5e79aec9d -0x804dd39409668ba8b5ca25ec407d2d66ee60ded1f14a2d3629b8925a0ab9e7c7 -0x8bc83062a0ca8aa0d22e9099ec8949cb7f89089bd83e1e1383272be3bd8fd672 -0x6f9a68295ba511509b1c0f846cc6318715f9e1975342e44e1ded109baa405203 -0xfd19a7e3cfa05d52d606d091f4ffa0908acc3e7dc794a60c6e1e67de35e5e8b2 -0x7c7d8063725693b86a4ef10e2fca4b837616e2ca027099d41ddaac0b08a9e5a2 -0x998fa4db2f669e73c6d20195305314f647e509aa3c55b817456334dd6f34ba11 -0xe7c1c5dd802e0ed320eacbaf0e3c2fb736b732254a09884595737557c901c56a -0x6cee1396a2183faee6b6d4444aa2026280cfed78a8956b035e986556b1b7b775 -0x33ace4515e803f4c6bc5a8b57125fc7609a6b6af1e01c06ee86f7021fe4dacc9 -0xa904016850cdf421a5d2395c758a59e4cc0b9e16e5c69e6c837542635c99cc80 -0xc8d3d996f357e376a30bd2e31c29fde9dffe5220706ca1e135cf3fe7bd99444b -0x9e9f5981a457a843e3d15bfd134df91a68d3c56fbfc4528e6645e34ff0f2514c -0x36a5795fe27e1fe7be1abc254e967a340fdea1992223946f0ba1be5c01b98841 -0x1ce65c02380c63264916d8650fe4fb0e1f4071504723608318adad4b835124f8 -0x0d932640854c2717fba00d0d33c4a0611f080beea70c493f679268f8ce36c0e1 -0x977419c8a63079837cace704eb48cc98939fdf24bc980d0b9a8089b8aba0abf8 -0x41fbb5b2937a3ad42cb6ddb344834eef4ff94f5f0f2bcc009f54af62b6aab5c5 -0x51ec0d486933c1bbfb539dfa1fdc3303ad5047b25bc939675a035d9cc65234c1 -0xd1432f5eb4f7eb012939287448d8bdaf016662f9a194a8eb6f9bf92ae2df768f -0xeb97fd3d4ce259ea004db31918b65cb11687708e71f3f69842fde22320158f5f -0x8010e7485c11a2e4b89a0b84009d6d8416d4d94048a50b8a00d66d243de55efb -0x0f366c31bc0adc1322a6933b49ff4d05c7f51431c49f3a38a2b32e26d91cd47e -0x0c3c3da2adde3e0e33906fbec31b3c49f8e199457f660a23fda5dcb0820b5ba5 -0x343a91c8ca7e488cc268de9977aabbf5a2e0feb65694b25aee0ce35604b9fa0f -0x110b1ca30082452d4b864f308f2bab744264835408575c0777821fd1cfe47744 -0xe4ae7573942167ce0999c66a64e11813dcc7e1407efff465b548b00ca970af44 -0xe375e94015b960a102c9e1509d92ab95b8c8ea471c2fae8dca482f70addedf12 -0x8b05c472ec8fe226f14d364c2c011e599839be8fcf18f9227c0c91ca66b18a9a -0x424ea4739b05bfaa70173a3643e5aea936589776a1297c2c64a73e58b9fa9a51 -0x31d3ea8e82f48d7881370a60be8e70985c43f8b0f005795abdb010d97ad11487 -0xf0cf4708963eb97e5f75102d59d4a9e0ca7167d00701e9fb65069b6914ebf354 -0xc6f06103ea910452343f0410838b1d8ce361f5f9449a28095dfadad291741354 -0x18b305a87e2114514a6e9f425f5a1af46445da2349912929489d5259eff8f9a9 -0xda6b9d2b77731a98ebefdd1d30916d38d8601a45ad3f93b869e28838644e480d -0xd06e6ef212c488cdc52f7688507f7433fea5049fe9561f4d1130b937baf6fd49 -0x4e731e02aa1ad6405faf22b0bc6701503af5b4d85fbecd0ad378e1d507f47c6c -0xb9f51274bdcfeb3152b427f62e3b968ff78ec636363d2613cbd09bf8b3fa4d3b -0x1ab8ecf058a1872b7eaebfaa0d36ee9cd60c204e8ce7f64ac6be0dfa0f836788 -0x643b0da0a56aad5eaed6984dc17dd8f2c9641b42b86c4b95e6f5d8eacc928242 -0x4828ff5d361c604c277959db7fdca44a6aadd632b1cea748344acb4ec35bea15 -0x0d5f342e65b1a7ccdedf2b442743cee1cc1431b3fb7378de0190c14cf22384f8 -0x2d349cdbcc29d0830ac1622219188c19774a8983307f087fc5ce9e627006761d -0x0e5b04f022235a8c2a55873a45d905b22134496cfc8deda8aca7fab263d8c266 -0xdf5e8f097fb9b46e8a90b0347c86a1aacbce0458f9ae328d9d073e90cf4796be -0xdc0e0138f51fc801ae60052855d8cdf630130baa0c59f7f03ff6e1325b8af3a7 -0x9f0c1de5668f43ac407e12cdd3f1c1d978b5bd77376dbd62d0453f59c3711774 -0xd2d041c02d891710ed400d5c3633672043f58ee41b421d210859cc1750e66e5b -0x4a2b35c86d4bcb11f5a72b45665ce953cc103180248fe3b404be3c0266836180 -0x363c036d66a23264030ccc07821922436e9ea836c984469477789ad508f52005 -0x3c22252954f3b038252b494cbcdbb27f2146ede0a24863d077761d278aa7a571 -0xa6926670b5870d72a8c24f4fd25190f185f2ab6d67b7e619f4c8ec0f99377fc4 -0x62e31da069ecd3775d449c1917b298a890d1fe4d75446fc1d68fed2e5fbee181 -0xa3ce96bce2bbb5540aaf4f2eaa92630a0031d43793bf4e50c85d8d5935468499 -0xf4a9a86a96c03845ef49ddaa847ccbc2803cd56fb7375e0301dc19aa8552dd6c -0x93031db4417a7e3abd091adb6cac983118b106c040ae032765d10afbc113e505 -0xe3955603a9ef7be1205354ff5f6e58143b96889b64668b351f4c18cada8e943b -0xf638b8906d0a947d567025c5afe4a28e9d28e5c620936b631e07aedd3b24d7c8 -0x99facd7606b23a73ff6499853e3e36a33ce42a3d50282fe5ef2b003e5c7d3df2 -0x80615023c59271296bffbc2d3691ec1526090596431e8d8fccb730ea6d4f522f -0xd6669623b750228a988c6089620662b369d004c7f2117728dd903bd2c7793bed -0xca1f81f2e3c2e8dd8d1d86d8e89b4680baf70757c33256e91d1552add34bc0d0 -0x0b6744ee2b9745fbc19de2147442bf7577cbf46c4e8df30f1c30e5c1f4289fa7 -0x5c3d3bedc52896e6f599e3efb48a8392961c1ef100be70bd8940edc5c704fb0b -0x8b48c8ef497cc9364d7a2195c08df9bde3cc29ca810a239dd613df8351059ece -0x2742d8dfd86514b8dbdead44fa11261a510b974c3c3d393b545c6730ccb38918 -0xd361d7ec4e535c64284940fbfea9c193cfb583976c8bd6a83e3f0b1f75857c33 -0x235869294b80d01b634ebbdeb474d284915e713ad09d9a803d0c6c6eddde99af -0xaf7ffe735ba99d3695058dbf27b7dc2d16ab1f30e79ca2e574737e0b03f233c3 -0xaa6d79bb318d49803f1c4bc711306f24edb78900d1d26ada98c73ac7dd10f948 -0x0e757e75cb436c18a20572b1295c50d0aa3f69985f89220c00a53e9b0bc6b283 -0xb65beadda572119416a37dbd591ed20acf036022d3ba3e8a5d2842d07c6a8526 -0xce9556d79e238c7256440c21bf16def726184ef3b3478008d407ed205af6379e -0x94b17a314dc0a2169b85f82554b3cdf3b5eff59e3cf96d7038e91523f03d5f7f -0xcbc3f3f58f0d712f958ce631d10e18448088dd3199d7a96374697f93bca8ef52 -0x18b37107ac6d148afe01b0d3d4e11f98c6ba154023324a60d2a7e4b45ac9104a -0x335624ab95eac58ef0e2851af553dda85c029b3c7edbbf01ee00d4599673c021 -0xabc5b7719b023392efa2f1338dc8830e67cc5854b8bd472ba33dfbf2c9594818 -0x4465207854487a6e310d2e7b3d44d52902bcb4a5756ff1a757565a0f8529dce7 -0x7fd94f1755c195740f6f0b28f072dd2863072f2eb6da5df50016c2de43f33308 -0xa6b27f078c923b73bcbc5c88053f59ff86a3026a2c29f26328dfa41d5135444c -0x86526b77eed459832d7a70569ca690cea826c947b552a3e8b584fb53b209572e -0xff98ee350cf9f2ca2dbcfe405787824d7f6b71094c99ed2054db1fde334a9332 -0x6a7cf04c2204f1a70398d332ac4615e4b9faaad6eb8a84e3e0ac285c43c7efb9 -0xc248ebbea5d387c67a108a005eeab055fb7e3471a62811e5b5a0217c3ace9a58 -0x4f9c59723d2f2ab07a76ba8f1de3860f9f1da0aa3c07b8975858ff26f64cb2c6 -0x62f9ddb9d5ab9c315563757a91853cd2fe978f1f29207bcf997fdf7f31aff2ce -0x2f5b1162487ee8a0a14efc12dcce3138d8d9bf301d9ad114260992c0580755aa -0x53809cb0bc4c771e8830559afb166d0ada0404de3da8d103f7ffab2e7edae187 -0x4b4a4f4e8501477d61a64da3517b4a097c58b50424eb528ef98500101fd29644 -0x1f3ec0b60b80ea9dc63a8a0128deec739224aafac7b6c0f02c27db5d61b06d16 -0x7857be3b42ad5221ee0c79a98b38a9efa6c4c01964016da1fab128d478ae615d -0x4058076147f0088891b2805885159cec31d01480609691623674f17b8267151b -0x06e973cc15278023e25f96f60e8b5f19628a92896a31ba21efbd0d6fee4a4208 -0xadd45159377673f2b22730cc6e8f4b5714ca94c253205338e6d0a8dadb8ec907 -0xd0d8205907d9eb574a061ec9313e400c32ad42ffd144e78dbd711989ecd901b3 -0x86434495df475b950c962b729042b84f7873b77b9d850a053881571b241dede9 -0x9db6fb3903fc8c1fb2688c6f6748886e28d4d25ca2b1bb88c6f1fd5f547876d0 -0xd359e17b29bc74d3b928ad5de900342801350e385c81ddea90cf436e86c0d50d -0x5eaafcb253de211967f511fde9652787c8fb93482bec43f36777c39e5b271418 -0x2707b52e2ff27b96b6fac5a2a909884e52552785eafdd0aae17100c71707b958 -0xb1016551315147166009d37090f8a6e64bcfd080690a92887da5484416c2aa24 -0xfa137696efce28131fb6c79877007356dcf6b6ccebe4686f5518e60a25139836 -0x6ac98594355022cd988409793e5feb01133367484ef4438498ef1c55a5ffcb85 -0x4c3ddd5775915668585e04f7750d5ad62a41c8724910a5f6c146ebc802f87553 -0xbaf0252db87e68baccba895b57c2819d4062ed3141ee97675bd8ca4f87989632 -0x0301caf08157e52cf8d8863f4accaecd0991b03529f25c44c7048a7a70eee29a -0x4473dba3f0b4910282ac9fb56566b6dbd46a47bc12b592eb34f69dc1eaf1eda3 -0xfb2fd27d4fdd223bc6480468d362853b375ec7bfe8a55782ae66fced83d5c63a -0x9d3bd06fbf21b8ac3c74defa6fbb6262b571d054c1740b18377deff38e51cedb -0x4931a89f25c54d9f4059856530a1ae9bcfed2442f4343fdcd2dee9aac4c8a731 -0x4ef011f4c4a69aff81a2d7306f60021bcfa0c202ffe4f2ac2e7d849c9eeaa5dc -0x5240380d0c87d9c44899541c742ea4cd5d5e4c3ed866692f6fdcaa29f6f3d9ee -0xf7cefcac2bf68fe560d873e6082764b1a8ae5fff73f6a345743765f49911a4d2 -0xf6022a193ba883cec6d53ce44319ddd828268193ae654dad459ddba218387872 -0x61c4d9f42c7cfff571c6b2a486987a85d3d8dabaaf5dcaf028471d8397c98725 -0x92ce6edb48c8110fd6da22edf896731b946ee1e9ede006f787d5a60284240cb2 -0xb478d0fe44042316ac2b17e8044cca7bfcdda2ea8418a9da79ff4a99a973e305 -0x9f5cff55e5ea0b1595a34c16280c8c06215025f320611638599cae5b93640cdb -0xeb703bee3a0df95f63793de0f9a41070c93df48f000c2a78568e2293c7a0aae2 -0x945724e0696bd7bd62f7da85c2aba14e4c80e356c55bf0295588afc8a7fc7179 -0xd06def07e96c1e2455f6a7a9c65822f1c2fde6c7919799e8a3865d14e92d03ca -0xa28fc6cfafdc1eac4da1826280ba989890e6b666d5a4db499a6b500091e77475 -0xa705049ca7c8b08a01eea120d79d4a8d4dcfcfc889b6eefb35b19053f5189548 -0xa0e6ca49fe23e9ee17930a3a5e44283f3944337b4c147e2b0c9a5e7e7810fa87 -0x0111721f37c05d0025889167e54cfc2105f1543fb9f487581d2fd2f2b99f2fde -0x4f1405dbcd3b99ebc98d7c7d093d1166c18faa161265f9e4b07dfba0017053a5 -0x3d24c5481fa6a1cef853ef3ea4d0a4c7839d9261779f2adbdbbb8feedc1c93da -0x009aefeea425b10fd15d92074328d7347ad6d4d8fd7f04b25425bba0828d105f -0xe64578786c07835821a462b24d0c2f7b3bd05280452f0d04379028609720cfd2 -0x67eff8e48f89e7b69e7aa3d6698bac212cb5769bfecc56964a8fc2b0f932bc87 -0x06a9b6333960a0cae6377e3115d33a5fcf3f2f6e264ed7b5117321e2ea50eda1 -0xbdbd1336f8eb62e2167ce672578be6c6e7c227f72c7852b598cc85b4b790115a -0xe8f348d148634be910a80f2a2282f8a6f2cea671a7547ca5d6f0a86888342e7f -0x8bded2a3cfef3c5709280ee74a8b3c02840bd760ca397b016d4b8116b8a99ef3 -0x093f2002b56210941d52b701b87c4ba932bcef316851c9e6c5a4c70e7bb1c176 -0x7e7338c61bc52a010e1000215bc1bcf3f01ebbf339e8efec26e91705f590c247 -0x656bd610c871984ca12dfbafa663952e8c0e421b939cd818d6920cdd3021c02f -0xba8b0a0db72846bb4f12686a9294d3a8f1308e29cb72a12f6ff08dffd1963133 -0xc11ad37f15c556106c785289f8b55e339b298fd90b8e4c751b0b0aaf947b4e6d -0x3436eba42557890414372a2d6f54bb43151fa8e49e2d748e8f4420bf22df7455 -0x6e272262d5c94a085b3a06598f7945a90687750bb58d732efbc076e547aa927f -0x53e6ae1dacb104cc168dec38e48b8f3edd4a8361347ff8c9ca5c83b455c61575 -0x4ae7aff5c44493fe9abc4d92233652e15fd7add42e482a4cc83abb4613959603 -0xb07ee85267474df03fc99073a764e752c0f112ac0e3928d3f486cb2070be210e -0x88e8614c9f2afc0caa3efd47b6ded05a5fb5696ceb38755026b9f66be0ba2b6b -0x5abda7cb71665f3c77ba59799078b07ffd90c39d424292bfc13b948213bd6ac4 -0x124f7448bac9768122711d151cd7ddbb3515967fedebd61a55b01f13d1b918f1 -0x802ed2d06f3990ae33b7835198a233fe42d3066e4f713411ae0f6846058dba05 -0x3b2204fda6f44e98c9e0b6773b457721a5164e323b819b323658cda6a0ea0507 -0x5ee9157229082b7b56e8410a963b4eb53035161bf69fcace7a3e4f477342d319 -0x963ac0e61f4a235f3eee2012d300fdc0e4347f137c74f8de7ee5feef923f2bf9 -0x1468d277c1bd83d3b9bf556e51e7ff8e7e3a10273a8462c5d205d104e29b7e07 -0xc73c5278e56d160c8624e9c3838a2d2de242a72dc366e9ce0fd977949b05acf8 -0x76896b44a13af5fd951df3d6f1c6874c743bcabc42fa76f55224f29967cadaf4 -0x219557dcf9f7f7775ae774e6013eb4c998b568fbdc4e065fdda8cd613402c46f -0x2940223039a14552c65cbfce3e5f013cfac6fcd91572d019a8c269b509395821 -0xb2f53b57f8d10aa6f9502ddf866af00a5443c2cd4d553c2fb51a9c62a432648e -0x5fedce4be022e29600ac37d19a06e2ac901d233ada5bbc059877f1437f087e77 -0x6e30940c159d1557db310a89328e9032bf659f4f6d025b3bd26208dac5e0bf3b -0xc680cd13da203b138fa66dee36e6562f85dfb99dbff2714a72b253e664e24ea0 -0x8f3d0e08cc71e9083ef6210920c390a0b54fbabcefe94f9d97f5f8765e562c2b -0x3fc159364f0ceca76e713b4a4d8942241231e6b678de76f269dc50b745d0779f -0x8577cf5b01bed398f209636797a1959d47ab81c4951b7d3df756835bb31d4c95 -0x590f77caf5a7b151a23c22b62c6a884fbb63a0d89a04842378e736825e41c764 -0x8267e43831ed796a945128ce0ca4ba5bebd189adc1f7eee3c77f2a67d44f590d -0x2b35a2f7d69fa0e9c7d4a84595793d020bb151af42640335174ebb5ddf4e5f61 -0x53fe5771da61a471b8acb5b8e4cbdbb0423e027ec319fdbe29a61d9b64236f02 -0x0abb98131c535260847e6dad622ca35c357e93cc150fdaf671ce10552437d27e -0x20f2d105f956d7bdec29c1bc965eea6894b49d91237e8329667f5a1ab43aa296 -0x125363027cf40744345575447730f3f0315dae2fea02e8d966bc3779d4cd4ca2 -0x029a67c88fe037efc404e53d9140d91a2f243ace9d1b67846a1f47f9a3eb5793 -0xaef6ffe73bac892bd8a0b3df7f240c7ebdf1f46bcfecb5dd566303b06cea7cd5 -0x9790ec3d69dd3f4a77b48de11df44de65a0fee98e5a8d3436d2cba8faa154b36 -0x76ff0326f82e24d6d14b6d4db4b267add0bcfe3842d7e681cae49987a1a6c965 -0xfcf24345d6f68ec42eca72a1f12a89a7ca2dedc333bdf899313a40c602b2fab7 -0x1cf7ef81da1028c7aea802fa24e7c21eca64803fee672ea8dc39f9003b5c356e -0xd241b012a26df245ed5930614689d476e9a3d64f30b90e86e8d80edb2a8a2d95 -0x48baa4c50facc31f75b69573ab68b1ac86d72ebe5b5333b9f353781b492ca78f -0xd987b9f8664a515f316a0ead10b44e50fdde97086eb5635ce3404a697dfc3766 -0x7b2e8f4a9d535e9ab57e92f2cde60e994af15bc2013fc4b1da203a277bc0a7c8 -0xbe59a22264ca8802a4b85a0512e95e81bd8ea3297bbd7c69c194e5a3d7f34e4f -0x4d08caef9595f010bbc53300a853dbcde4e7c1985060164c7633dac1497018c2 -0xe8fb4ef37295fccd492179993a6bd05fd8764c1cb9f18d0821f3fe41c9dfe034 -0xc25701fc2a8481d3b2e63a6a5e95503f386d14d5b3d147f0c608b27df5100a26 -0xdf5f899bb9f65d536e2ffbaca0fb5d8416e7049b3068d8b4eb86bdd789acb43e -0x41f00b52fad6f41b187c2f843bac98a147a7a5def5d136edd81c3efa161db3cd -0x212687e5ea3a4278e690a111801aa53da242597c4027e7ae49c6f843ad7ff6ba -0x83a4411cb0acc2016f4c8ebf664040611eced2d20d1a60743b455f3c61580a3d -0xa3cf9ec7d70bff94d0fd6068eea17d574d8a24ea97418eb8498bbdb2665cb049 -0xba796e9729de7a5bd9c89a9bd64f221750cb2167b4c6e96656f6ccb4d2885d52 -0x99134055ec466582449803130f3ab300e19f36b882428bd24ba889f4478218dd -0x3d3655965a5a964cb590a4b1084853fa718477b462caf98aff83a4456a5a2551 -0x7d02235454f26f483a8d3d1eb3a9006707145191e5f2f29a5ad20967512c137f -0x928348bcd3e5edfe25eaac8e554c8e849f856d0c2da1ac28da3b11fba6756bbd -0x75a8f3fff187f8922b90070a25d23b02a903fdf0b7440b662291c24117628a7e -0x6af5bbbc86b6fb6ca7edaa393928c0ec2c094e830a14b8f56890b17219685c4c -0x7c94bcc79fcf4286afe1470a3c47f3b77750a3c49d6b32ad2f8ceceeaf176be9 -0xb2282b29b50683269601a2e6d52098f09e96fd35be0e50f5619026eb99b7eb00 -0x364b334da4a04d8d7ea8a7f0292afe72f88ba0044f331d66cbcd8a7893e66683 -0x92ad24b066d1f3ead395c38959d5c98d52d8ed86354fe4bf553ac56a6137e37d -0x11aa47ae4a2acd3d2809a09252d7e92915873283371a6d4231a4658b5523e780 -0x7b3d17e4516a2a136c73d84d45045c03adc5ff170fb65555dcfefcd923190d61 -0xda56e89ecc9815ba2001f8f1166d604c5e95e683b5f29c827e23547ccffce7d3 -0x6e529d84c20e07a4c0d25cfa27065d3d95b73ede59fa98f99e70880f205be9ed -0xe1baaa523fc8e6e9b342e3fc547f883fc20291f71ecf0ae3d61c2b78d6f3717a -0xf1ab736d01e69c1662adee48f01978b6b0f66d9c86ae2b4552cd260dacb7f771 -0x198c931f4b31b45a848c5b61c745ca95681e5ec21ae9bacaa439964737b1d636 -0x0592aea7f69e7b313fb735bd504f3c9812321fbcbc99056ee2ee47d3f0a5c6b1 -0x9513e22ef48a2b3bef326a5f276fde8cfab264af84cc2c3dd5ed722b4fc857cc -0x0f3410359dac494007d80c006ce5c346044bf4ab9adaccf74d38bc5f4f8a9dfc -0xae4458e82849f86f8307886308b4b05ad2863a32c3c62ed3be98041459ee85eb -0x1ee2047ab2183eaa11b64d84017cc7d6ba7c7cce84a41e128dc77aa2e099258f -0x4c78fad928665a75ec1fd2e5379031fe52613debbfd39902087b31def0b86e02 -0x3aa17114163a77d8168c7079605bfbb19cbce7c737669aa3cca6390e10fe8c15 -0xee10de0d4f415f0395a9034a364f5728209f6e95b3f8ae7d2c8a034c2abda4fb -0xe74f4cd91ca4df51865cf53882204600f4dea975a0dd3c52866177fa44b36b32 -0xb64a6351c46f1c877407063ad65d655fcaccb12f437d928aa79614eb7688334b -0xcce2af4adb6cc61441cdb5457cb00c2d4cdf2ba8e34512f73873875b0d82da0a -0x536c8cee417bdde262a26e91a80901fd4a249dbd29e875f2cfb220943acb2f6e -0x83ca7a57e7a83f4d8169b9d68d464f91acc1d8ed0b4931de3b430f26ed3409e8 -0xbfbcd9937b8e1386d108b10aa0042601c2ba4aad5cd3c6efa9a5e16c84d8c788 -0x2b582e38db2e51729c97a8d4d2c011d5f9fe49c16f89e64657e44025f2de327a -0x5fbcc9dd20b8408f236058fd8ff7a717c15c786e96c452916a7ef4ae07e4f5d9 -0x989af2da20980695020dd2fd1810017d3b7d735951eb2b39a9bef9e4db3d6ec1 -0x80440bbc160752bd28b88966d7fbf22cc43ae56db83afc0b469986d8d61c3d10 -0x263e6b08aaab4491e08945939dbc6801a04fd648f0bf7edd754db7532ac5f26b -0x92f2d34970566040f140d4e9e4198c2cffcd54de53c26e007c22844662055164 -0xbc9128ecd67822956cf3d5daf1237e3911edd376645d6d3f7a1c75d5b6bafe24 -0x04b07e4b73d645356ca50cb263f090155e236f41e369e5c2ed047132e3475fdc -0x00678e8d88f343cdeb55dcddd7580d18e94d6631b5b86bff102f45093889d7e6 -0xbcb3f3373a3d08941dc7de6c8b480e2c8661e3ff7877b6f2b44bc43d76d1e37a -0x4b3ccb72285b1392453772de53126f0c0b6bf1465ff6e315fe808fd72d478546 -0x75812ddf797dc25eb6b7ef887ed15cf06baa5cedb27292871ef53f352b0175f4 -0x31db43d7d00436cca881915ebb9c35f99bfb7fb0a493d59d8812ec16d9e1d92d -0xdd4d9558840694e2d2b9aa5003b3920ffc80e11fd556c24fc3aca5e6de54ea4d -0x3e19868481a8a24e312d0c3239fb7cda435b4004b40003229d0803d222e40049 -0xc47556d8b1c87d35f1d6e8e605a841d5978066872a3d3e449abe295ffcc9713a -0x7041536835766efa1af56e3902cac98560d0181395d01d7792cb0ee707249961 -0xe81d7e5ca363357877284ed2427533fb9f0ba84964023ab226a906b78d73d879 -0xf06c29e050b8fac7e76fbe1c5c9c4eff59071a35d109e5a5661cde76a1579f14 -0x1ef43712a557df22cbf9003078a7fd433bb03b88b676df8c40eed46268fdd56f -0xb478024fa0d3c507a5f7c6869a4c6c689547baf2818820a6b5abbcc4c9acff38 -0x0447fafedf18b689f66a1c176148ce3b6b3b65324403112963dea671a2e53d14 -0x30738b69183716d54915300cf819c6e7fe448093ed1ef766c49c34529bc076fa -0xf4b211ed0f2222ff2473ea0090eeb62d6fa7b5b1fd8b256ec9a79e4b4fbd5180 -0x6d567f1e7542f5d1fbdbb5d23689feff4080e24555f7a2f385e9b7fafb1acdad -0x503a474c851150fd988f015f13811d59d390a5e4623ad76f80385a5ca4b3380c -0xce688e39009cf5d5010058b95bf15a41d75495fa5a5aeb7d4725380c94d92f55 -0x1a148a17fa51e2ca218e6c4955e241759292ded0e7e5e9524c4e8ff4d2d564ed -0xee0e1225c3dc81c3ae27bfb9c7d725fe09af7624bfdf9f95f4cde718d6fe9f67 -0xb14765052c03480181ade39bfa7857709a59dd99fa4ee86da757f212683eca18 -0x2ae3a14fb83f636727fb22b83ffb5a2803db3a9dfbb39cd2745b465343990055 -0x9f5459c9a11f43cf1c2290efe578045c689524ef3046d83082eda34f242d6bf1 -0x2318d1572e9fe8b7929f8e2f95d0daf7826e3f621573be6189548603118d2669 -0xb4d59d00142f54c637bb9a930a035abbe2d0e97a684090193698362819c31e14 -0x493c879026f8f2751e0e78a61736a8ef12818c8eedf1348afaf0222da557af35 -0xce8de90af4ed1efa91bb9fd2d0348f70f5ed0071f027d752df358cb93273f745 -0x5bfe5239a0244fb05c42eb8f780f168877c6ae994563833adedf90a5101732a1 -0x6b61bf42511e9ce1f39180f97b1e9b37cb32ac05e46b5abab54714d47dfb1bec -0x016269fab944ee1413d33e8814c1acd10ad214ade915d20458e406105f1d1d58 -0xcd963ee17bfb2040cadd6a7b9cc8975c2d2dda1389ed7788c33705cbb8f84138 -0x1114eca5e8887e2e0a5fc30b32712d6dc432e3f347aba70f92dc0280086be9f3 -0x15c61b75ec0758b75e10235856a5fbe3628b6306ee8e8b5be806f612bd5c520d -0x5e7bcb34ee6f338bdba34e33833860125287e3a941c0f1e5259b3eb36e8857a8 -0x1771628945678f7510642d3fba9df0069f0680f49b71335cebf41be794f27209 -0x76beb090d391b8444e0b00c4c28dd8642c48f0fde80091f9ed2dbe798e4f5698 -0x5ae91d5aa35da2ff2c3d14532d1f8c0c085f33d356b8976e5087e3a2cce12825 -0x16e36042752b1939693cc6943f742a3d5503fefbd935ca14688676d96339cef1 -0x8c644688441d778f6910891af8c3b5e591db1c7db8f75b0553b2c0994543d56d -0x19998dfb4f6839d576e52b646bc355606a9121953d03208fed32372747517e62 -0x274dd5054f7e6305c9b5709db11c36f664fa7145f7910b89e1ea9ea9883dac04 -0x96c274014f2c8760787bd7aaf24745f297c7eb898eb7cdd01dbb44c652883b54 -0xdd415c7421e820604a9f70b501a772ec4371986e4f9a538617e3599a8145d7e6 -0x3386eb718f7d3e1aa594df211cd92287f3732e08dc41831f3d8d531e9172557b -0xad38ccdb3d452989ce97c7ec5d67fbd93f68f759a93fda465e7b06b36eef869c -0xcc1597432d63355441b176283d0fc51af6a0db6b59b7ea773be039d67b70cd36 -0xeb909a770e53baabcf5a8efbfc1e8c1cf3f4e89a27e798d1f168da996525efc9 -0x47633e4b3cf1f3c807f8a77a95a88688b062e935d9be962551d22b32e4f58835 -0x5b543e651092f70b37bff345b4871ee92c5e713368b4f02260cbdfb37255c4b9 -0x31d144d306acb06b60932f1f0c8290d380e75fb0184ed01936c8eeb7d3446554 -0xaf5b90f390ddd1966f66004e43a3a1a881e534fa17aa8db59a2ab55df9872190 -0x36cd52596dee5f5bb2731712e898d7c35c7b77fdbb0dd0e13187aef500f1e706 -0x3fe893ddf5af2dcac96ad7b2794498fe8a08705f2dbc54925fc266a792316f50 -0x6e0b9b04056b8fef20c4ad29e508deaa1957d4d91648ce771906abeb901d8f8c -0xd2b283cc4123cef142dabdfc7b5dbb601009cacc31e51320da7ee91b216fb30b -0xbb9993231bee90179f134fce22e16fc1c5a5836c53ba1a90d510438e1a2baf5d -0xc631841dcea4e2b08da0fbf96b11156bba7d6e25034202d1de341979f48eb3fd -0xda9a0f0579966272705a1d69e693df6fdb841849527d72d41ff09565bf8245fe -0x4fc766e441a4c3f72805c9e669d49dedb1af56c0df204568c97e4dbd3df4521b -0x738a1e723a377eba16e735ee0e92d7c82118d0453b3171c9c63ae9dcde904816 -0x8b337436be9258b7a89dbda3ca61bab3733f0103f5a1fdaba1db6d0e42f53e06 -0x82d29b33ef0bf53962e414e4f182f79185256ae57579e89301bd4840acb8cb0f -0xed463db1025e44f7668b919c4515e6f226a7e2f0d7b6dde3b3f53a56c486007a -0x52db2fb95a8e8bb2ab074772e41e73f1db278b0e73924348b2b6036f7b0fcd62 -0xe144372ed418710d75c88944acfb52bf644192b581dabbbca2dc8311690a4bf8 -0x090959c807e8f6b84dc6d51b7824edf7929e03c66b921b38cb93ecd408a06460 -0x9a5bd31b684ec94f3b1f8dc446b6ea1a8c66503f6b92c3298feb7fd1bc12679a -0x61fd38388d175afb655801f423e095cfe10cc518dab65927e994cf7eb82a3d31 -0xd121a0ada344dd2384c3e744993ccd406c0fb65ec1a87c1426e7835c356d9c39 -0x30284ac3a555e38e526829c6afbc7e2790c2613088630aabe3f9a557bf9db0d3 -0x6b0e0843799494a322835e18e87770e3d7c980e3a0253a52e4829165b4e16a29 -0xecf48c5702366087f4ee1a21bc0007eba89a126e635b583caa76389cee2d8269 -0x95ff9c2233a07ece9746dadb540243c2dabf8ec6496cba729edd6c563756955f -0xfd0e31e9b524f78215c0ab7023f8d163ff48959a7d3eba95d8096409d18ba0c0 -0x7a5325b8af514eaa0de548fb64073b49e16486952ccd3ecb44fa63bfd900accf -0x351715103fd5d9cdac18188e5ea4f2ab109944a1e4539d529b2901c8a62e9383 -0x0c0612973d4cfdc15cbd321a72af06852806deeccfc61b9a5c0c9504717da913 -0x7b66292474d97deb36bbf33ac011dff73f9c52431370206c190e9e3c53da451a -0xdd1f85090ee6c5f80d388b9f1ed0632008f5d580e7ab8469a57993d684dd4c54 -0x54dd36f93d81ed0ec081d7105917505a1d8c122662b9c9c35df56a9bae90621a -0xbde9c4672ce006d72af96c7b763c14a865673367ae331ab8b8840659508067a4 -0x7dd7ea716c6e0655e0624db552eb939a62174f1c8342d8e3673b13aaa36c8735 -0x0266272516c96045965aaa569b0a85fe6f5e16709991a21b861d059cbb4b3ac4 -0x92bb76b340df1e890678b1799e4817418087f84692e5e96bd9943867f8e44252 -0x7d7cf5fdf899e976e8304058881a1cec65a76888fb528f0c6a16742b0c7a7de4 -0x95ade21f161b9c8eafe4ad36fc0a383a48e4507c67d532665747d82fb5888978 -0x9b545c3e1823deac5012f11537add13122b840b0be9f12a31bf0be504b1c9750 -0xd2dac6bebfb7bcc92465a75c44e7845e97b7b28887efa04d7003a4d93f778c7d -0x96cedb5421d59b354a00441d7c51cb075b1bb68ecca7fe620940e5e48d47e1e9 -0x2b0c4307800db39b7599651ca9d3d9b2fa68292fdc21f9c86d01d4c26aad007e -0xca249141da2e2b747173a57c2e740c06934bd0fe3e36cfe98aab404d2c8f6165 -0x8cce6eda3f08e7e7d79b25535de0a228a0a9c593f1f38e8b68415f7433a504c4 -0x48d23430a2b16ef3150d9678560d1c5c8705463002abd21d0e0a3a1a66bfdcaa -0xd97c34ae0d2e99132ddd8cb7a323282da4ddc7145dffdda76825e126c4850e21 -0xad7f1ef7feca5ea6f45af7b928b4c3ece97cf140e21a0dd3e7b1917a7f924330 -0x77002f6fab3c9ae309d6de00f5f84f6f95fad15152fd33e1811bdaa61744d2ab -0x9b40c11d57623dc175f3ac439040dbace6b572fc9adf6a44a126e7b88e2c2f79 -0x46252fd2ff14f98bdd39184635981234e299d7885ab575550c6a1401048d1d37 -0x443071ca1963abaaf9d595c306d62b620de05bcb1e0b8406d88b8c0251c8a112 -0xefcf2acadc154fa4193f7318cdd57d9909875915007f2eff3f147a897de60b32 -0x22a30e9d3fc03c50482c7db9516383a2371403b471caf03496a5a5ae9223c573 -0xc7798c9ddfe3ee7ef90f23a3f4f15d50202d271f94f73cbbb46eb95d2627d3b7 -0xd2cbc6f0408883d1568c617d2c12a210dd4c03253f9c6efccf9e7bf57493e587 -0x6fb7dac070fe272b18277b14d0cdbc212380878f5a6027b55e7f6c1b2a883fa9 -0x009430e369db8cbe26da3a0759e9dfcebdb3bdcd4b20b4523cb2d81b4cf9c7a6 -0xa5a89b0ae54c5ffa80e573f80103e39879768aefd88d4ec1171ddf76041bde58 -0xebc19220f8731759755b5f9a015c0bf2bfa0d6ca8d6c0d330f7e3aa1809a7c0b -0x11b4ea5bf2e83b7708a439cc047113ce372e2b17b4f3d5543f96ad04e05b9519 -0x0ce2a2e9e2313625d425dc74331eec428abafbeabc82e1aade939eb17b9b87c0 -0x2e513e1255be761dd588f96e2c478e762659a83853c8055fe769e4adc319462d -0xc059b5940c8144a02420073e1d979111adb9b11397eeac4744a0eedf60d47c5d -0x810d628476fb432d11d98e6613805189c4ef5e2f0773f3c1fd146c20737bcb6c -0xce505c8dfa3d7f4d7dca9922d0ab530f6783e87d8ec22ce421079e2704c9096c -0x412ac8c459af9145c911c80df4feeb77f5b08e0bffc5c47456061da3adf4b723 -0x32bdb50b53491dea6d3445be220e15f38332f37d6e3c0a796af94ab629408900 -0x49b76ba57c9549cb7b6ebe7455640c1b63aaa8a0ca9daf50972d8b91f77238b6 -0x8c34b334c761de64e25e30fd0da05189d8c443989025491c37ece4c14bcefbd8 -0x1929e5be0d152492d87df078d2f759c912f11905725c7420c314cfe3c6fb25eb -0x60df3f862d320079826f819d8d31489d3af95f1e18081864c01e7ede12f0aa99 -0x5fec9ad14429fb12606a7af8815ffee1c6cbf25579ad8aed5c46c4bf3b676b89 -0x13c7e5d5eeb5c0d4b0872473f3aefab7f2fe2c7faf54eef01ee513b57395dfc7 -0xb181436f0914972801d9b8257e7a8ce27b9ad7bad155734762a0312f4396fbce -0xea1039bf59149940b8506c8f2f69bc25311eb44b34a1038deaba96a859f3d3a6 -0x2d4ef75bc342a0bf21a6a63ea6f56a9937cb45485530bb2973325146421974d5 -0x831a1219cf96baf625f1836dbe5eaf84eb2d0476fa9ae0cc9fb8d09b927ee951 -0x8ba1ed7924be4910a33e1a82776457a4f9286ef591249ab9add86c9d2f65a78a -0x63a7cf2a3fa8fb48ad96f1a8cb09ab94294826119ad1d1ea4cee2b12e6cbe5f4 -0x0746b851767f094ec389eaafb00fbf9562a9410743db1026e18930636244ab25 -0x9e799e79047d57b7a80fbe27dae5c18abf999004eff5b8ffad16aad625b272e9 -0x2bd9889dc32135eabaf9ab0492137037e79e840962ecc788677218e8d5ff8859 -0x7865ac3297ccc1a549aa523b768609f97b5b2d2b335a8914c8abfeb4863db937 -0x2927355ab1c1a7fb87d4f18cb3c7577a7fbc97b2e3ed2e71f23498f5616d018f -0xa5cdbf053ec744be7d5a490c1cbfab421820dfcf520030d5c8594843a46482e1 -0xc17e82e9f86254d29485a558a32a4675cfe1417427995f773f981ce89f57ad9e -0x1e93acd9ce63d69bd797667234e17c544f8310bc6a31ed6b9ed346a28a5736bb -0xdf18850de5d867608f97e2def95d42a3a9d8e8a06ccbddf30a3e5ce0bcec3acd -0xaf4c93ff29819c1fe66faceedc5a93927e66cbcfebe313c017e62f78724bbdda -0xc5d7c00621187b9097ac0f2862627504272fc4ec877b41f64a08f08d448efc38 -0x8798ac3de423c2e780c740567d8e5035198d80aae4087ad784f00878fc7edc14 -0x8f6f4a04419f3cb5398f46790dbf96fe98697b0ada812b8c92c76859b9848788 -0x96e4d9fb410c07f462d668360e63fb9015225a9c342e7b0411ae30f9f69e192f -0xde4c7d556e68cd10d281027df8826c663b24b9f2fa26a5d671f341a962e74df8 -0x167d13127dbce4255ab349ea2bd4cfd5f184f46e811003c815669ae09baa6193 -0x5f74a0694ac0dfbfda34e638b1c02dc3d4ceb3482f14be196a1208e14d7777e7 -0xcc372f470eedc52c1ed88e4bd240fe8bd999447e58a20a1b20dc5a76b64328b7 -0x7cb25262cf733d5de68d15ec44797dd99a0604e523826bcc9b725e033bab12e7 -0x037c065b450b11f2718c090625a767c32b32e711a7a21280e7f5ba23a808ad5e -0x3c31f4328673eea1b52a4f715d089c97d3f141d383ca937aaa8b515646a612f7 -0xbbcda736a8ee0c9560651495cc2ecddebe200116c3124c0d9228c4b4ddb0403a -0x3a424b4cb118ebc712eee983f2818a195f4d940638f4c202ef549ae6d1a7a942 -0x703fdb8d2343c3f8e0d621c643c0009585a9d242b2f87417cdb3b9cd26479ed4 -0xbde2afb1681c2e2ddbfaf1483e5b6b45896eee289ed62265f6c3441c6b4a232f -0x91a9fa4606418995031332f4de9266489b5ecb062cfd246b73f9de3a326e2c40 -0x9825c22f10b56083328c420f21906f65393747b7a3b4859b0220a8c1dc1cc1ba -0x78f821a0261bb0ff13923beb1cc13ceac0dddde347c002f633e3879862ee553e -0x1d36d547a37b848bfcdcb774ce64fa24d7155aa78570befeca3d56734ae91e5b -0x798296034897e28b2727960a69b90c75af390a58c31584de11e48e4d385e87b1 -0x7c10f6743b8b49065af73a1bf9e5c74cf344e16b284af10a9cdbf2c8cb8abde9 -0x6803228f1351d8a1e2b5c7d0612926a13e7d8f9f98e946ee54cbe34b25e5fad0 -0x6c6822fb1e9eceb3c0a1157b6c4d65757df44db0af2a1f26e09c97b3f0beb330 -0xddc66f915e00d94d5717dbd8534cde6a48cc40a6ed4889ed4c02a2d7b8f4e612 -0x67ac3f36fef97859065088996ce1642b0f9a17305bbe0079643485a1c1ea52a7 -0x2823e3fd2a01d533fdf9c380346a4418538937f1bdee85618975aa335e304c89 -0xced0b5db9bdf5567476504e47d297fcfd5c788513e1452e517eb035ed2eabfac -0xb0a987afe7f1e90ce0ea5e4a499edf2a5aa8d1006548ca5343b7e11dd10097c2 -0x07d8505ce5a15cb2f5457f86254f1aaff70756e289c5582eca456cd366e328a0 -0x9833ab19becfde5117c7f3faf17ffe4d66a463e2cbc517c8b65a46e266ac273e -0x8826260f976f7eec6c57e429249c98fbc106615517a5c0500aa96a93363e363a -0xdd9c613836b87abfe99c5519ab42d8d2f2a4f33d11d186c2c59f5620716f74ff -0xf9f966849af33f7ca07181629a9a7b79b37d653b70dcce06bd1c6661a8c37d79 -0x912570cd81de4d68c7f545c64d389db35d1fae38634bcfc9c00d18e959a15be9 -0xb61842e3c5a5622a252395b3ec1e125a2ad5fde7e4bf0fb4e4616a1161283ff8 -0x926409fa3157532c85c287b1a8384e6c5a5b9fbccbe432ceccfac9f424a3faa7 -0x45864acb46e34be45bfc4c1c1158f105bb2619cbbb9a32571101088fb989e529 -0xb85e114d861b32695927580a2e643916d41eb487a30338191396fc36fe2a760a -0xfb20961b3eeee331522ab810f03d741fbdb0bf8c40bfb1f02697bbbd049659ed -0x9479830f90a29bbe469e4ce74cbf1674d86afabf29d9119eefa70dffeabefd72 -0x06ad4b31ed349c3bff70dd3293a6633500388aaafcc7e1021d353a5c2a9afcd4 -0x53b54e4265352ea5ab3ba2363a31c44023c43c658b53926acdcd13a2da5d2bea -0x2a6a8f385e42b31b3a579736a88255d336f4c56f5c5465fd31a5d09f251111a0 -0x6c1d834283eccf030eff6e866d9e033bc8f148c22faf25fe678fe3af11ddb0b8 -0xb053bf737cc87cfaf150e0736553377250e7a0b1332c312a6a495113440e03f4 -0x9fea9faf91a3512d41025b3871425ac6617ebb80182813bad34e5395e71123bc -0xcca634344dd4c331ae693bf4863e5915823d22a5a0407778babea8c5706f9af0 -0x60b492d600d23ef99b270c049dbc98db6c536837f3cb46209321224da3901b7f -0xb9e3519cf117f6566f390b3d5594869e8117d15823bdc052c00129bb96b5f313 -0x0a2dc443eac4dd8974aa53ff38c47eb6f4d1c1466f7f047dfbc09c5feffb2af9 -0x74e5007f91d841e6fc830d7d039255d69d836c488fbd2112dbbc49cd28dcf1da -0x29be630ff22a356f8ec6cfa7bd4e8c9791e5bc8f56f3493d12415757aadb9ec6 -0x28136aa1555cd66e435061fb8691830e65221a57a036174b7954d99cebc7b7f3 -0xbd101fdd14bdf837104484745a435a8c30383bfb545a9773ccd9b66bef3c6f6f -0xa26750bb483ba750bfb7fc565ebd5e2d6a5b0d70d8a11b78a974c49c6d65518d -0x77cb450dd7ec2ea71134e512c2ee16b43b8d0583775ff18deef40bf9d8e88807 -0x5e67fd092c3e817786a03d879afe76f855cc0a99427c675bcad6d63d9a266afc -0x11c24d1839a9ee7216d37d588e9136ff8145fe3abab0fc5ae11c2b7432796f22 -0x14ff75b0fb1415a8a9b5d6aa4dfb684ec1a133e5dff6eaf6424403c6008ffe1c -0x1deea836874fa1aed1dd9d20a59f2a63b6d9df2847232aff873c102d89c5a551 -0x193c68cced90ee6cdfd9a0924e8ce300bc4c8ad4255c3570ea8153e0feb33885 -0x934b656b18cdc99ce4f25403e8a651df28516d0004770f99513330a1454440a7 -0x37173b7d38cf9a77a434370e83ed8a9aad533b2f87edf7f08ad4fa2c5aa537c4 -0x152922f4f0c26dee9de58df336bc5a13348e9c72b5bf9282f26ef5639f80151f -0x479d2cdd83f70484463924d572ea4f704bc19de7d61becf0cfae4ed62ee795e9 -0xfeb5ff367206d57ece4dd203e4ca9e8a5e2526c47fd385c4079cc5ac4b62aa5d -0x50ab8400f3ee16cfe5db02b2d16fcc5760e1a38263c935f78e92a81c8a5c780b -0xc69cf6700f8c7ee87b6ce68da2154fe677eb8528c0d2f02dd8de9cafb7b1e48c -0xcc46c4ad2f9e4110b780147b6de484e403d1af2507f761ca27e7991578b6ee06 -0xab838f5fc187c796a38d08588cee96dee100649b83cb74fcdb2a412ec9544621 -0xd105b22978949b0086719bf43f42ee89e4dde7ad8fb031e144e5599e3aad513e -0x532d8619b99c6a251aa12921d5694134c414d77a40e36335bc539e601acd1f57 -0x05f2e5855bb50b53b258170300e5c756064b7b0b7e698da168a4e62e4fba54fb -0x8e8c20ec84137d12d21f498e523f08fabb12ae6607fd1f9d05aba6acb0b1e053 -0x24473524fe9b0e0da0a58ce7990460c62adfff57e76bc062a8c02a755ea687d9 -0xce828c6735d57d61eaab45748a129d0ee28e84d048cf79cbac638999ae4859e7 -0xa9d494b7a6ec1bbb170e5e0612fdc6b87ee754f8b518e0d8f383360bc377f921 -0xec2cbcb1cb923852a7965681f550f81e0dea6ea039663253ec8a47742c8c6d92 -0x6db792f30db24f0a9309ca6bb5557143bd0d745c4e93ce88b40bb8ff86227b47 -0xc2844ef311495a2502a549ba1d274a8709090a80e850b8334c644b2411918957 -0x90aafaae0428cd78bf4dae7c8e5192f1e040abe71f4ee0867dad670c51742fb4 -0x967b69becf486838237673c0e4aa0861339edd3a2ee1c8bdc82a08b7ba60af7c -0xa66e1f1fc04c133f1d5ab3d23227343066d4c3cc8330e1e520cdaf25a805c911 -0xcf1800b9f0d549e8323334c45f9347a9239cd554642f725faa7517667803cd5a -0xa87dc44135a702342b7fd3f04287326fc9fee8eb78c03d12b8117dcdbbfb98e9 -0x5df4057c2b97d77d2e7be007cc26f4afbdc172422cde65584c511b6223dc1e4d -0xfab74475d5a3842f02f52ba9bac6fdb6e4f324b948e971973363c8f490bb0172 -0x01dbdb0548fbec1062e311e8e7cfcf4e3f9d3ce4d209580059114bac5eaa165c -0xb730c5a6baf173ad2ad1fbe44e8e3d2e7de6c1f4251db011b91f0a274d365653 -0x4fdb38e06700a88424b765e9a82fbca692bb639cf7b4b597b7953d8747ba4f61 -0x9b88e75b2974a65f66d43d74b203bbb542581bb13236bb81c254dd3e0c177f3c -0xfe2edee73dfbe258355d8609a572a10d90038f6b15e9cb816ebdfdfeb8f819ae -0x04bf20c5abce72d1f4a970ba1d54370b4b8a882e4936a66c788362bdbbdbc89d -0xdced47654ea6bc4eb15df745e21890dd63e7568b62ca9586ac1c4bf4283b2de1 -0x59d52b2c2e569fbbf7ff796562d24db0e2cbcc34982d23c1f04a0bf63d6fc88f -0xdecd4cfe2dcb7dc4baea1c06a2da44163f1fb5422b955bb49f628ad9c5748405 -0x9935c9ff26d086851138a40d1b8c18ad6588495ea634e44b9f3b90b2d032cbfe -0x382f00e3f155037f66d3716c254ffeaed4ead774878aa316d7d0c55fe5a8ff86 -0xf8879dcf9eb2099936e3976cf66166154e3a07cf094d0a5c2b4f5cc80a4b8c32 -0xfe94cd5d2fab76006f810b27996de3eec080eb7c591f133e3a566075644cb11e -0x563be7dadbbc9b81b719cb542e68c9a14a446b7d530b9e5c097be58c15201227 -0xc8197a98730998a4a63bd5e1d75e309a24d7009efb203e84a69dbe61c45f39d8 -0x5d62f206f66fb283847650cb71f699588ef0178a2fc6db7e7b48064c2117e30e -0x8af43752ea352ac464a12c1c958ced2ed20deeb7e44ee48099d4f92258bd372f -0x00b7d953d8d2f1a177d8d4c043b306d3647872f7ff851f3e28f3d783ec726648 -0x70e15980f81d8d272e1465748786d4d5cedacc17be134870f8a710cd172bb8bb -0xc622152ad86ae170eb04d184737dc296f5305579d4de0542983f5d16de4007bc -0x5f7ce0f3036e313ca5b7a84827603f032ca63de7f39c98b5470480506583797d -0xbf6127ab2d766c6818b720582281763dde2fc066d9ec3d1a9579cd0a78c4989a -0xd7f9b886ef9b605e553ca94ea191633082766e4f533354911157ea2dd93269e9 -0x3fb9012ee59071cbae8cd128db831dafc28caab75482947da7396e6cb8dba852 -0x8d5ded3e8ea09db1126d995d0cd93ce3a51e02b7749915bfcc8956b6964e2280 -0x41046b2e84b54697168f8612d7a59f20c0d160cee17f62c0e4f0eacacca2cdae -0x06d27ae128498bea318d11517218c3529214347cd56b2ce64e404a5767f93797 -0xdb9a38a31d46fd132f1f5b85426f405d1cbba8e5176a9771c20b38835b4b92fc -0xd943a33c9a10113672e4c817e05c022327772c91bdea91665992e82d638065c6 -0x2dbd77e0f6dd21a0ba11f79b7d20d16826f452ea45b962412c5f53dab611e0eb -0x9d0b3c2c63985dc4ebfdbb2351ea176d1a1fb36175912366b7a100811312cc4f -0xbc7ce6c587bb0e77d088476b6ea54d0a9138a0dba4c3827feef0d2bec232a7db -0x4400bbe36dc1fdcae1fa0363a31e2942f8bbc5abb901979c6dc45026301c6272 -0x2cd5b7613abb6cf32416119fc375375226e080d95ffaff9ba6d0db042cf69be2 -0x99afb41af413291a7843ceb4f5e0166d4db09090ef351f25f6697acf4706aa31 -0xa292c031ee938e7842d23d342b89960506f23a7f55892b13fb30808b5aea556c -0x1bdb97d76f9c20ffb66f2b480823837765fef0bd1fc8921d1b568398597b6454 -0x81bad47de5de164cae6208b17fa009bb731816d3808fb77ab0cdfdb5b712945a -0x2361ea2aaba4c35883d9a5e77c4f5db20f91c14a81555287eb8d48586267dfed -0x7db7e5359ea7506498df55eb283bfc1173a0c8a2f6ece3f30c296fb1fa8350cc -0xf80287d073be1c53ab71e3994bcfc7930cedfc7d4a187d6ac3c459beecee4bca -0xf5a9dd3b22a997553932eec3676e99e78659e2ce3ed4daf8a803ce7db7b12865 -0x2a8649b684b703553358fed45a5bd44dcdd31f61d9f687b7c700c209cc3e796e -0x191288defb5ab7949b7ba9bf7374a9b1f4563ec98d8f86272decc9fdb0dadb94 -0x90080638416d7740777b132732d9988df2299eebd1746ca713c2cc7967a0457d -0x9d16f0fd80cb8b6943bf8b12a4b31b0aedd692108fd943d8ef164b32b18761f4 -0xf96816e09b0ee0f2a490142d4659d304c0bc41f108a29353380fa805bf767387 -0x2ed9118875dc40ea68a485e0b58afc4de96e51bf7ff4c82db9124453e2b235ec -0x95d4277f6a4d59cea8d732c2b6cc47c8bcf031d3848dc04ee5aee53f7cd702e3 -0xe2eb059f4a6467d3b7522584545bb0aab8fe4959b49c91b6d61e4b6fe33dac5b -0x85c0eb0ad9982a3826ca45651631934eb55b3f6f3040bff8ea5707675a2def32 -0x9f4b76742aae7c5c05b65dc9fdb5a6825e33af304d8a0343026a1c925e26ffe1 -0x8686ca2464527c1406ea008fd918f26970f836400919568d68f0e08fdf3fad7b -0x681d71dfa263aa0ab8a486eeb40db451271c5ed598ea53d9f9955b2d1eee7042 -0x2aa6721b47571acb70c39273f93daae76375feccfe36709aff0003fba1c6d07b -0x4707f6e62e2841a5f8004872cf1bf0fb78279dc4b59eeaa3f3575c0b3c66bd73 -0xe6c248d3cea271ce6725a1abb600f35fdf9510eb661fe915856fc125cdc04993 -0xcd96acb53679c62401599e84e3e63af7702e88c1cc308f921702315537936ef0 -0xe0293c3f8057efd3949cf6463667592728c41fd28e6ba6f5de5fbc76caad3733 -0xbddc9fcccd53c315e8b40d23f57b70902a2511b359e8fca39a7c8275febf9f08 -0x084e145b908b7039959d033fe611afd113e70772802e1d827fba2e58157e86d7 -0x0f2808ec7d0e0f9450d433c3c68f7f2e1ab778f5021c789498e3b4bf7e149e75 -0xf97f5c7effff156e45f35d44ef8defbd96242903bfea1e5601467bebfe9843e2 -0x40945255352c294a225f3152e2f8183199ffeebcaa87f3a47717cec07358e92d -0xe3126a7c9ea34123b8e4dbf1f0d630e35f98a88d749eba88d9b9f944068ecd5d -0x20bdeecc7967460da386a3afb663ddc04fbcf71be7ab9cefcb6988c792b6437c -0x0acb9464cc8bba144d74007c8b2ced86b1a8837ecc245352eb6d61e0d63ed806 -0x2151797452f3372497f902540f4d844469b26c599e68788cf73ccb5b0a112cf3 -0xb565c838bec19d2843843d8ad040c02756958cc19501793d30886cdc7cf12bb7 -0xb9df7a136dab98cb45f0dbaf57193a31c17e728c01b091545d50d1cc4f96a126 -0x0d89963427d794ddacba0f39b4d512ff80396ddc8b162d57dc3f4d58d8e977f8 -0x3ddd791d59d13032ca2c5605c2fa988ac132ac34c183511f832b48937e9842ca -0x6158f1a1cc2f982df02afc0c67dea13ea0b1a37fc655a2f350ff516167219478 -0xecd4d6f83f71f70d5f1b7ac0cfe723f408f6bccf22f626400b36f6f49cf6eff4 -0x4aa5ef490bb9958c3734113a558551d9b70f54bd535c76942b4fcbca0ae3201d -0x33b6dda5aabb783fd72c6b360d6d1473e25a2b9f9e0c3cd855d1126947e091af -0x8e0e7719cc65fbb7f642915fac37e2a12deb8c891f84cea4427937280b531184 -0x80d80dbccda4cde6ad6d91de2d4761e9b0ee1163b8ed3497ef216dc4b8d9f076 -0x6f396741b75fd69590c029359090d3db9a25380252ac2927dc1dbc7ab45fc8d9 -0x4efc942a701e525a0c1c17cff3a477a397d1c9513203f069bba5fe78193f00c5 -0xa391b34043b2345c1ec091462aa1ac932f3bbeceb96c1781a3833ee4f3808eed -0x70deb15949f9c8035aead7aef7b0fddb6eb5ad1175d92e23d013068c4db208bd -0x645ebd6448e2479448bddfadf2aa3bcbfa0be5aef873a4ba9270cc746ea68ed2 -0x4180e381998e66e990876acf8be647a403e241c1694fb0fb11c45988bcad6714 -0x954b98c03f8c4de338d28ddec6c8c93963ddad94b81ac862db44a27dee9b1cb2 -0x5269c76c9d01e86340fc985a0becf6e1465410f70ca73cc1202e038724bfb685 -0xaf29962af0a80ed977268bc4562a0bcf55509c5018aeedf855d4dc592517095c -0x431f081975fc45f93ddb3594af081ded4047ecb90c7c95903a57836bf7de40d2 -0xe4b7c98d5c6e564f06b70846041114876027ea9aec5d0fd6a40189c83959cabe -0xfcfe61707a79a0190bb36adc77396df163402607cf1f25c7f48012138243dfe3 -0x4bc7482c170c3783db6452a8aba5fdb24f50ea58bb92727c8c7a35fb243dc60f -0xa833ba333eb0a234e1011788d26d8e5e6ef0089365539d22b7ab45f651413243 -0x9cee8586f2e4d1a317deb048d9578ed030b76c42cabd1c1905863f44fd774ed4 -0xb75568914f48eeb29c7f6eed4da84a96b23935c1c4c0614c8d93fc01e1e5e237 -0x8b83bd38006d949fc5c676a68760e71e7bbfa00a86ea89149fa2f4d0e4a08828 -0x43439f51eaf49c75bab23a4e025428f52da676fbefa1b8be37fc57a52faf916b -0x680f0614b65088aec6a9c9030b8d8f4b736236f5125041df5a68b57c7ea5917b -0x88127df4a5778739df741a7a505d31de373e3d2f8e2dbc193b32b4cf3825bbe5 -0xe726201ea1450d84cc6b31b36604a68818af3e4dc828950076dc476caecaa270 -0xd9308eab894ceb14cbe1870faff2b370269f1d16dfdbca4c6bf468594f8c0b4a -0x03bd40734480d515d3eb367c87f28572c6a8cf092b312869cda6a483a0389c4d -0x1f5aced4a528748c902e4c091bc17d94c1836dfe7b8d60f5ade1e6a976b3133e -0x4cb01dbfcf4ea75825079aaf8d791bc4a0bad99f2527a60de9aaede1fc8d19a0 -0x6528b97194411e2b80c1751842055692d62bbd607638f1b062610d53a27fb091 -0x1e43ac213da72956601b291fc72bbe962c7bc194aba9d51bdfdb5ea648a63742 -0xa5e5dbcd62ee9e7b41940ee6c8f545823061e0766469b5d873623ddd290dac00 -0xff23f16af2d85204ece091b60a80e33b16437ab829cfdc2def87643184887524 -0xe15c5fdb6a40a5ee2c6428c97e03c48a1e19921d168db232309e2b12dbb2ec9d -0xe19df20b597c966ba36ab2585d526f6279848c1c43116467e84554707b16377f -0xdbe5bfa7774e202ca4d6a6b6dd20e7cb611a28ff1795bf0e1f37f1fe3852fef3 -0x04353bbafdf0700261ff3bb0ef24d0cf064cf78046829b201622d8d21f5b0ace -0x1fc27f802ce8fc00aabe47c19689783b837b273fad20e260aec59f55ff848019 -0xaf0d4992180fe1424af28771ea57b0e0073ffb94f7a215c52a231a22947f6d3e -0x3c5c6163398270f92f807944906fab1fa32bc6c16e5e84c74323b1c6fa8030a2 -0xbf1dc18014219234f2fd034b3b49e4e089ae32500f37952b4cb5e33b6ebbcf08 -0x3ce8188597f4d0fc80f1bdc8da6f46e0cb6b7f007d8b051beb85e22620eca308 -0xc4584ccdb499cc8d6fb080b064dfbd472e10791f53fdeda66ecb52a07e38cfae -0xd5d0883d310483ba9c7663eead5ecdfb44f358040abefecaf56f63fffb104390 -0x4a104526998c47c083e8cc42002cd0524806c2726fd7d2f46bace54fb43d1d48 -0xffd11900f760044df0bf143968b2bb0a1836de8fb6ca59200e9fe76281c26809 -0x3c919de5146194f7548d14237bcb0f3a328fb968580f903954a4cab66d1cc71c -0x3d1a3846d8a1cd17f20e99e84efc219b9d91dbc99a06c34478bc202bc53ee3cf -0x9170c08ed0daf0043716cbfd12bf6c6b167dfc0051b7d26a49dc69c61997401a -0x29b6ad3d70937bb585ca61dddfc7f909a4b706eb053c45eac80faa9374282387 -0x311c222573dfb9daecf6edb1aba214fb6c0271c3f25fa56ffb9ff8eb9524f51d -0x80c3a5944e112d02dc2e7295f3892cf4415aabc82cb5313b49db98c6c8f444ea -0xc7eb9b55a58cbeea6dbb7831c9a5177ce37ce3f7264da94795386753991bf209 -0xac9400c2aded184400f27aac428afd4719e13d3ae969172a52c8d8c1931df143 -0xdf83543447b0a77c48639244084840745eb36e48ce30d436461bc11823b5a27e -0x996576fddc0d9444ef97a2d738ff1fdc5214919776f0896d2bb83524772daf42 -0x5d8a36e9ad171148473494214e9ee2497e4950d5809cfee5185bbb581645ef12 -0x1993a740ae4fc8606ebd10530e289439542818e5868761789a7eb1f02ad2ef49 -0x528af1d8228dce2685fccd0273aed9e5cfa89f5b1d0e2673da90ef65c1894c07 -0xbacf8df237cad198b5af5413549e2f60b0b360afbc28a9666b69ad9058476b2b -0xfd6d3952b5b78b4b08f1be2bfa8529877ebf2c121ab74a1a9262103ec8a6544f -0xbd5780fc3100eb5934006cf04f3eeb34e4b2d2b03770d2be0ddf029905e5e506 -0xa9d429353fa2d9edd395c8d9406e8472c564877887c7043460fd0a489e34bd54 -0x1174b0fbe4a7216b334096db7774cd32b7c047c521b6566e811d4684f45fe2a5 -0x491bea9b8cdd43ad50acf8dfeba4cad60aee210e2e32860ffc686e48ceb0d77b -0x33eb136ad5039b61f066630b1c17dbcfc9a60134bf06888dd9b1f5054f51e18d -0x751fa29c1f7bbf460ec39e9e15abc57caef166c1c6adaed4b3807223a47d76c5 -0x6f3f57e849e6c971d22c9095c315d9db5a15a475a6c99ffa2c23faabd5c65c52 -0x53091c53dbf863a99636087f161e41d79f9e27ea57b95d1f7682dd2d5bf6f641 -0xb96d077f6fe4940ec5717a900926853f324da536efeed328d28f0e7f85cdd183 -0xe94a2c1a3f6bfbe0cab2229ff18a8e3b09450787eab3b2fdc26d178be8802c04 -0x6030d5a00b4101f531227cae6d2556cc6158f1507c244a9d54c2dc63351355f9 -0xf48e520dee0fc90194029b345765841a3d827c23ac099def6936aab23c4cb34d -0x165df12d7ce184c8f3f672535bbaf16b95c26a0f85c16056be918deb1b36f8f1 -0xeb7f1af5910c8b58f1ab0eae666b15099c676fa670519486d44cbc97988c9d66 -0xd0b71dba7befc3c3b818bca19d2ee1a7b78b75e21157539bb2388822d9d6748a -0xbbf93b1ce1f985f7ed25fe09206ec8362c84c61c28f518577f821e2bb6c78527 -0xa3e205a8fceedf691ce50eb65dc5cefa00dffb59b44813375c008e4dcf4d9931 -0xb1e24d5472e1f83c027c801c325a9d15b766cb25a6d14af4be47ef5db4b205a1 -0x585b2925d3d7d023045da2d5c974c2eb10a5390219d59c1c336df1a376339ab4 -0x61acb0c45fd5fc1359849ff7385c1540ed558a664601d4542336bce4902ddcb1 -0x3484c7a088012c705b6830d989e45d25e6d5d658f450a45061b07bea52750f73 -0xbe8973dfc2e997b1d377ea33b86a7bb7226c437efc3773507b5b28e27263f153 -0xb8e602c7c4d9293f7a7d66583efcf1f19653885d5ffb5dadc5c0a616fe2b837f -0x48ede4572f2c50d71f439d09b9e84365227a8c23f80bfcf6d586b1daaa7e00c4 -0x493c549e395bc30f6600c16269596477540be4a966f12b12f98c0f71105cd0cb -0xf60450b43589f85d28c87c42737047de868cdf20a1fd99a803e65f81b8c8191f -0x9e068b69acfb5482177c8f9fdb116c4d4569976f859fadc1b4f4e2399e533275 -0x8871579d14cea50366ded53ed24398318e363a923afad0ce018eafb0f9c77abc -0xdac3b3f551627319dcfdf3367cc520564f328c74830955f93c8ca22c6bdbb46c -0x1bf3c1fff63f2596ed3c7e524f24b962d91f3cf8437b26fcefb918ec5014a751 -0x8d9ffaa9be06b58ceacfa9cf53a89c5d0527bc53ca0480caacd71c86455b7b9c -0x1d560fb8695b39b28d0e9293e1ec8f1badf9165b030e21371065c6d732f891d7 -0x7bce522bd8be95f58b48b1a5d05f5ec7d20e9b0e0e7a384c054b736a41cb26b8 -0x8af3d5e06ad0cc8878e79404cec6290619b451bac385507eb1100714be7d87ea -0x3b37158c126f4b40ae000f3eaba5f362e17f06b41c173c21ec214cac212dea6f -0x6cf5f238801ba1088700dc78f8c31924c12aedd8ddeaf5695c41fae5e7dc2b61 -0x8385b03dded54cd1b25f7a034ccd4d65216a75ee78adecefc0e9a3c2884f113f -0xd78329b913d5349d5899ad5cc57b2bcd158318ea18343a00c469b6faeda4568b -0x944e4fdfcb0f69743df1fb173251484268fffbe74422e1f1c3925d0796bed3f0 -0xbf01bd95958103ccbf201c6729ae621ad5335d36e231bcfbeda6b514d01385bf -0xbbf03ca268ce60ac9719255079dbaa6ba1aa8fae8d6217c5a4cbac69c07c2434 -0x067c61c50803bd7fc38dc6a84b9605d79de367f11128d4e2d5316fbe5b864da7 -0xa68583cd914357eff810f4573fb9dacc2ffbbba83583cf85049891aa405d6d88 -0x2cb47973fc1e6d1bd5ef723597ff3d55a24c2ec09cfbdd191fd97245a5d7a8fa -0x665dcc14ef0f5f21f6f82050de21959976bb31d671c735f58e04a27690fe635e -0x25334d2175a19f635607e82b6ff7a932468f5d044a029c226541fdeb0a4e5c66 -0x7ff166f2081e30a64c8662a9510289de35104c201e3340d57afd7b9e3f1bc4ac -0x0061ca8772d51cb155d19e162d18594a2c675f2703523a1fe18576b905c35a71 -0x632cec4d022864994aba7e63d98c1cbb5dd71f5b68fc9e8f5a848b125e4088dd -0xa8237f9eb41dd6484e89184137caee9a55c8be81b90404257adcd6c1f92b5b75 -0x15e9b08b7eefad1c3c5bb29b11b17adf6d6b1bdf0a5f1fc9eb0bcb34e42ae921 -0xde7504e240763edf8e63f6dac17bcac6171e8904edb87b7f568698654a670ecd -0xc9481c045dcf81c569cc4c5ee840f4206e010dd24209a5ba289beaf62eff7630 -0xf3a301c261aad72437829d6ef04bc4933027e34ea886afc071e0902b687bf29a -0xc7bdd0c9b09f2fca9af4efb4ced60c440434b9c7bbe4b76636b859635b473434 -0xb03af69eac48b4d9df0b8807e4d735346947107a1e6568c8123ed95d9a3acbfe -0x3562ccabde4675e71d5ae74d9c7619476c64cfcbcf8a3a97ef23697561e164f8 -0x5c04378a1c1150855613e95363eaa4368ea6b72d059baebe784ffc044650bf40 -0xab5a5f3364406640b02b6e267c26c89f5073e517a2ca391872aedd563f7003ea -0x03f4c90439d20d36ce9d1199dd2ab1145be819bdd4428ab587a9c68d19ae2e8b -0x88951e8a2c8bb5fdc6858bad7f89edbcfe893c28d522ff4669f205eef1ed1a9e -0x562f292e076dee7446966e74ff98c0bb779473ddf0ceb8a12067adb21a0edb7a -0xea8d273ac4524ce80a86dc7c987ffe75ee169e516f3fb8da27475c848515d375 -0x65659bad03989815ab41622d05851761720811ff4e33a4e37cb1fd85e8e2f69a -0xcfd169338759ac8f88f0bd6b8d80fc44cecbcdc100ccacd81a1e97adc1661f08 -0x319d93db6d3aa28b0f0fad2b22cf95613739897c129a9cddb91d204c5d2d562b -0x05265246f3294ea4354fcafb78396f1f3b1e999c809886319ab3a1d8fb1a860b -0x11c7ef7cfc0798346771032e45a029da4c88a99fd4460eb928cd6ab12e481ae9 -0xeb42584d9e5586b6f0ae89f48a9899715a10caa4cfa297e2e625607327438652 -0xb385985b42c6325ea3055b33e3abdd78f05a5756b3bbe31ded6e0779ab1e41af -0x4add153322178e8fc82877377c740c1605c458cbf349ba14ff4e5223d742ccf3 -0x80b7b17f967fb8e367237b661722c3d2b49758f2bef320ee7a6183c5f8efdd8d -0x7c86ca4da54e8df9b0f93f7607a1a65f89dd19f0d330df6c0b1e87f4c6bb82d1 -0x3a1dec75b9ace4445e4f77cfba2704dd7b951db331fb3f4c28352225e574be22 -0x457b7de94dd59ec5c4424b584e8849aab2a107ef8b9ed0c2e96dbc5299cc6a5f -0x365fa7f551f309dec94cd6d9d21a2ceabc29b011c93d86681a98fe831847a43c -0xf2744038effc9e7bf77b60b2dd002bc991bd60406a45d1625a404ebb98e70fd1 -0x2e137556909d61c2c6d6ef10a599cca8c9e0a55460f74081cd768144aefdb897 -0x8015017b05874e171549af1fd223ba40ec7d67bf447eb6d21a1efdcfa8bcbfe2 -0xd960d36d20febe00f283c856ae1bbb4080ff63c824b40dd93416c90658de798f -0x11621618cb08b9ab8a12c2e4f19561ea1b04e6b7a12ae0b4a73ef6c169fd9191 -0x71612ded81962c1bd5425329229a968f609f4fccf4774d675100169bcad7570e -0xcc47111bb81ca2329e5a983a2713afb9be0e6ddb4d61df28db0f2c2598af675f -0x6eddd483fea1b31d3dbd24768f4ee08169353afcc3f5b276072cb251e2befdc2 -0x25f026359578cf9ab5537c186e4f7b55f4c143e1a2f77c68984f00208e9e148d -0xaa71096f69798ea9fdf067fd659cf963132e6c8327a4c96d3cb251dd2ca626b6 -0xe6011b5ff2b99e86dddc98483cd3a132dff407e472a1ffc3d3272c4c863fcb2c -0x60a70bf8288dbebd1d4d8f09105a5b2fa320b67e2e6afa12ea2fcdfad8a6355a -0x3d010e5eb2e422fc322f5193632e47880ccf1b78e589634bf6ad399481c5416e -0xba9f41e0222bbff5881082fd802a6173eb916e9d7bda34b3734e533058f30a79 -0x72a2f36083e71bb2afbe861418c1a4a403401d1f698f7de708e65a11b9fe44d0 -0xd5fba50ab633c25c72fc7823be09a5007207e18601f8cf06b41005305895f62c -0x46bf596a36c27b189a66e1c022eafd05e59a87282209730302ef931288f8ff9a -0x3d2a19068dac04dc4d6fd87422078500d1b43f13fa5bf421e41f2e99b0da39c6 -0xe57acad45c93dd18fb603a5bba925488d0cba9a0da2f2903e309c33096105592 -0x65b87381f1dc9d34f998ead769b5e9903250ff7396182cc0b066f6aed4ae7a23 -0x89031f6c65337877b59b05b027ccc7d7921cfc3aab6d99341e7df804d5bdff4d -0x5220163bdfda093fbcf0c7223d023ef9454038caa9132b5ce6cca503d78d43d2 -0x75102e18962c8515e802f20ccf7bb45cccb6d2b12b775089448cda7506401b7c -0xc1850fedf37edfdc34f46250cf60952387234614eae248db4b3ef44efe3cfeb1 -0x39d6389fae12e2f99b34530a4e40bfe922b85789834a88c21a941451033f364f -0xd88d90c6b58f1bec8a9d55ccba8eeebc0b212afcff27c919f7d56662922afaa7 -0x160cb227d1ff6e5ab3183949f40fd6833f78f39646b66e518e83643463fa480d -0xe1f064b3b06c50eb9d81991e6df37b1e551c1a05c70797b9c5ce6d771876af7c -0xbd67c38ae6304f123a87b3028531bb53539c767adfcbb2caba5b3f02b4e26901 -0x6923359232d1bb6c43743881686339878f8862d6e3474dab452fe0f8956a1f6a -0xe4128b53671a842e37b5edab9c465cfb2e0d5cfb7b744c759f728331e413a698 -0xcf2be0ef1328ca1b408cca81838bd566acebcef090cc97b40231eacd1a9ff34a -0xa3bf9e6c85ed063d49559a56be2b569e5e10e665bd4519c29c87901994f5dca9 -0xf3510561c7da9f5fab9a04a972ba9dea017a82f9403041d62a06de844bc8aecd -0x8297361847fc5ecc802b50888fabc6c5e4608075586c3be7bd1659970187ab6d -0x6f962a2d7a3cf85bc2c5d6927db09f380d98d759c21c8cb21eec294824dc2452 -0xb1b3e244b041730d964e0a3d88596304e2a5faa20cb8a63351fab0bab5cd4790 -0xd149def7006444c77db39f9a1a8e668a8186e4e3e92b3d8d1c0c2057eac9c4e5 -0xc12b57e7207ba0235fe314c89b5bceec377031920327e974e347ca0e4706bb4a -0xe6aa9f7abbcf9de03fd616393286e91b9fb630cad0576053d1caf0e5e9b1d57b -0xbda8e2eefcfad8ca7e5d5d0c26f37d0f30ce4cb90e94e69defed5953fb45763b -0x46c0a42cc2183b7e00231752c81a764fc3377ee3bcd9b6cc3643af7ce58e8a57 -0x101df1195ad828a4d15b56e1c01da484ab461fc6c64c835035cc60084b50654c -0x514b084de73dcd5b230c99c09c22bcbdf9b5921cbeba01000c422e08e2e46d8c -0xf153082569aa30e7304815fe951ce0a71ed14ffa8c710bfe70e4eb6dc0a278b1 -0x73fc7c5785bfd5d7048039a7f2e17684eb9cde7d9a332b9d21ae50a971607d8d -0xee4765a24f1ee3c8714ed70e161493b05cc44f3218a76b0ef1e364558bb3055b -0x5fab2d0b52bb700ab4958fee6314dc103f630e613b6c05f5b3526d1edc365ff5 -0xc34344e82ab48c5b692599fd7a2db3ee46619c1f770b88b48fb76cd9632e668f -0xf804b15e8e8009400f2ee458f1595ad14a500d00c4c7ad93fd0b7248fdef36ca -0x3699e0ac6734acbc24dd329630b6901ec96b15dac46705ce129ac5a8b525ee64 -0x21947fa03dc4e14c76076494369e2987b209adb030d86474351e7ec34f1aada0 -0xe9c87b093431bd6f1b214b6b7e9d880863eadf3a47e4556226c2e42583adb08f -0xe6d02ac8d09c36799c08886cfc72f9044a368bf40d733bd185aced7aa128f5f3 -0xd176b6fdf6d39a5d94d338fca1276a11edf569ebcba35d91d480f33990762cb0 -0x5e6ea849f04f80cf796cd1e720c65a043d1646b593a9b6598d9f306b62f1d865 -0x2f3add2ff909eb663fbd5ae8cafeb158efe44d3265ea80a93e11d39aa7f3ba50 -0x82ea5fdf352722363e914ae782f98144bd7c97457fc66d7e04cf1f8201a93c81 -0x982165861f1b7cf921cebb98ce57d1df2c98584ae7f1cce84b063a60ff1fa19e -0x366af1ec744fe4cb8c74fd0116d1926aa88c0e1cef13702fed3272fa4bc32260 -0xf28e12dd66c1a73aa5bffd4d912fcccc2a05b70718b90c2f46b09aadbee320ee -0x5ec1599cec36ab436a305fdcb745c128dec94e83ec6206755094b7ec32ba38f3 -0xb4f246a7ae599763b41b5af2c35e5ab05b94bf545b23717f5d081b3784e2a215 -0x6696f93293a33bded04442f28f7f10a99ca36afb49eb74d72a81210a3062876b -0xbaec53fa7bcb271fe83040564b9c2546a1c464f242a43b68aad1cd3817054fa0 -0x65a2eae92fa842739d5ed22e00cdc9d13d8dde8f682db1baedc9dd4ee90a3b87 -0x729ec39c64b944aa78947bb2b7dad975ab12ffb1a7b27884ab0938287148c134 -0x3c27042e54bf64865a7624d871032bc5adb260a8e7656edcc9f7f99c67b8ca88 -0x88dc4185b937da0b74c0af887e4a34f9ef7c685216d194e38585243ae0e28043 -0x0a08686d616ac32a3da737cb7c3aeccedf1accba5d59ad4c8d49cdc4089d1829 -0x032d67c85e3cfc78cd769cc0926a631231568011d323e42d1594fed9f914465f -0xe957b016fb7404dbc44e1ec2cf9a297e18079972af956e41edc5f1140bd00af1 -0xd231d545a0596ffabdeaf62b65d3a17c2654a67b1e7b44a545b57455a93e9868 -0x0268d595833ccfe80bfaa3710104bc557d0242a89c60de8c49ed6f950ba2b60b -0x6e56828c3d495827f90de45fcf09bc5dd3476f68245ae584ef01965a4e968dca -0xe50c33481b5aa59a1fcdc337017f8e49b131645dfd14a5bf4d717a53a7f27b24 -0x4c1da5b9a33854e86246727bfaa23a731eb1114eeb184229fe48260e2d0011f1 -0xb513d5832c1b4fefc127b583fd78d6495e9d985b43ff16fd2d631ccb4cb0ed90 -0xc72d31581791be440404bc036eb96422c673cfb194d6ea44f89b32ef96a8de60 -0xf25af97cbe5a14a9a91467ede17cb3727521c6667287915daaa54bb8cef5ec7d -0xa2334dc4904594c64b41f5aedf5717da30f742546f388272f74fff779e6fbd8f -0xef9733041f616b254504f00ff2ac11b2d3eb9eefd056c3cf6c3f8f641842b7f2 -0x3bcf94f69f231ba983027cb1dc648315f49f88c334c422278100cc71f56a23c9 -0x6123508474b8256af03cf611956f9ab80acb93bc9b938f80c05b1334920f187b -0x99e66eaa001c0e7afa2d7b4a71acc3fab3718310531e41124efaa1d5c311a418 -0xefdd704c68341f61ee92c0ee4434520c3576c73e8ca9b3cb9fca10f791739e47 -0x34d1737e15db59c3d0d915bd44fab9b73b49eab0cbed2fe926aa5bd2e27d0a79 -0xd75cec8863ac97e3df661f8a9104147dfbdbd353a27aa54d043eb1e8a439cb5e -0xd4df3b234ce8655247a9e555c7ae871bef59ab735acd9ea89a6cb39431d0e2a8 -0x86babc180bf6b6dcaad3bb6d4aa0de151428eaf75212831d66bf908f6dd976ef -0xa2c3e8446b298f8b8c165e2dfb0925bf2bc4c83b332139166c20d5151b1b15c3 -0x8221f560a05f894ce828a9fd0ef0d662ea535a5fcc4c563a4fc396dceaff4c81 -0x124fb23d16f2b26fd2083b6b2736daa3d20a6178ceb02fe12f86581b099a6a69 -0x1d8274ba204dab55c58e009bfbb6e70ef97a1f050d0b7c2ef5fdbf236d40163f -0xfd546b5dabd8a400301f394c6b45098ab6153498509d93664ffda688653010ee -0xbb748a94f36d39e348ba5db56ce591772fc1c894dc9d9b7b900684736adf7990 -0x041c616df09c04e0fb961d1069680a2a0e70dfc00578e258047386f16cd1bdcc -0x0bd3f1d4b3dd2f31eb31f6d633c6dd135d35cdf570c2f8cb0a1bd73d3ace6c85 -0x12cb510e2f72e0eb50be5350d7fd0aaf50347a5e4d4863b528ade4f11ddc31e2 -0x813b8ff20032d5ff8fcd5c1060191e40f2a1fcdc9728c0cee9dd6cf70fb802a6 -0x44612a08e58bb949cf520cdb310360dbc45a27434777f146ff583acd44948748 -0x64df7aef02357c7e61fe3e76aeefe91125c80efba4737a7c47f0ae71e50a60c7 -0xe4879b467ebc75867cca52b18571f81d00aa7ae1640bae3496bfeec604289cfc -0x1ff992103aa84e4e4987114c924d02cd9d74a07594364cddda8962a1801e66f1 -0x88b1dd9713c87411b05391c26029118a7ceb25235c194db39435899f35f1426c -0x975e9442b4b6f11ce027d85993ee9acd0d3df51590bf1342b4a73a803506f174 -0xaa34a8dac9902b97e04facdb50ed33a6e0491e3bb3cf3e1a978da7e5f8214092 -0xe997fe28cfb54cc575c26449e72953dcbdbeb130a39feacc111facc504089e7b -0x54537f63a689af68a6c74836235eb0c8a7afb626ddf542df78c3cb6cb0d313b7 -0x02a677bb88170939cb5ea29811067ef15eb2d346a920c429aca9bb56f467dcd8 -0x984c5e024bb24b88601fc06a9a658e7135ce5c58a54b3ab4b6a8f1d11e2d9e1d -0xc9fe2b4c8dbdcb6efb4f9258eaeb412c0c70f63e56b7c7708d84ba6c0c47a113 -0x5f10c59228dc880e924b5daa49fc93b82cec3619a1a2789caf8d28edd95d40ed -0xce4c573c4f49ce7d44436058374ed2106100f6ca9dd68f862fbd25e51dfddeb1 -0xe06d9ef81599e0d94d4dc5c8730bec7c4a6db6e8c03265c14efa2442a3580625 -0x7a0a18e15519f75736f13fd56e93098037228ed2d6bcf94ad7a0178a524c3ff8 -0x5666900bc883b0a862660e5b935855d2dd774bd626a1e116624710dba7cabdec -0x5821319ec2f5ab08ed57e1c0b41947eb76f47a15d2b1234c27a9b8d7dcdebbea -0x1c9f10bc9fc42ec715039a8594522b8853fafc0b6be6050b93620f7b9245c7fc -0xb2bcc0ff26cf16911dea552e117ca907aad22daed6b294215c0946bea46de18d -0xde14c49a3e04331d486bd8de5528f4914a6275753bb1476aa4af6276d8b62f7f -0x21a2a71db70422f79da00f821228db9d26429e16606e3a65b69c4c8f3f35f096 -0x41bfe9da13ee19efedcc7bcc6b20b064f1c467fc238bc9ce48899ca728599599 -0xa4a87098e0fc2f0f3be5e05b2950d5d9c57dca7bde578ab5573790caaad608f1 -0x1baad7d0dfcdac4baec91a0f7d59469804c182b745a201cbdb40dd6107f4a0d7 -0x74d22e52e16d109cf24ae456507d982ca6c5dfee605452ad603ad0a6beec2181 -0x50e299c59ad87723018afb0f1cea39453f3443bdd42b294ae7c29d2ecdf8e837 -0x70977da01957bbb5f42dc8ff799b722d7bfe4e83b26694687a3773a603b066f9 -0xf08915d9472b9cd4b7a0f1d5123f1cb077d55979908ce55fdc1af6f4d6b040d6 -0xb9878dbeb0202af765bf798ab6202589156894144ea7ffedfc0e9851712444c4 -0x366c745f9ae2bd497bf9919ac23a45c0799c8c8b267541a7dc4728f7eed8549f -0x1b851aaa3c6fecf5b77771a82a326a9eea2e37ebb349028ab736c3c47322f06b -0x74b86f6dde1620502fe54cab2b6a33d3191556c8b75d89dcefa7907233ff54ba -0x182103d873eef20a8739002654cda17b18bd0bfaf8dd8ff203683655e25b76b1 -0x84d736ed49e89c718c701e9361b98e006b7900315244318771e626b8320f9747 -0xdc811674f9be289d95a41a4ae28f704d5760aa73de047d869b05da15ddf75603 -0x76c931150cc68ba8bc73bcb45d806bca28d9d939b6af4883cabd9a344c16521f -0x22dee1765ba71c66361914de0a375e57259bf7ad1ca54186b7fbce293f3d8d23 -0x8edc85356fd847d85421e97dadfb8629a6fc21cd513783cebc74088c2d37d98b -0x3bf37ad6e83bfc57b77d4f16a136b4a36f44cd6662a208236df7ab28dd112997 -0x3613b3915f073c75f1a832436b88210e130b874bd032b9d893f80b7395a0066f -0xc8b301505e6846fa36042edf6410d45862ac63a5a78bad43d53bb1fd9c6b5028 -0xa1648c8b93c163185704bec9da771757d116d69ce21cc78fc3af8b9ef60c80fc -0xf56006a5484d6834770baa08ef7039791b5b2e762d0fdb52dcdcbc0830dbf80d -0x801afb2bd062ad52bab7e2a122e50a4fa5a02f249f109b888590420ce91898f1 -0x6ffbd7d295eb3bb04353802e51718a55c11d669ea087586fae096526fc6366aa -0x531de1d0592a9bf2e0cb343c009f9b10a8a7402414fdc8fb800ca21b190d2d1f -0x41fc29d765d13741fc37c4687c55784848d54d043d55400622ed29d3ac723152 -0xefd5ba6fd456371dc3dd85164777557a684231f10aba17aa6afba6d34a49a386 -0x5a35b2fbd64bae5c9665eb16b35305fb8643107e0cbd4326ce459eb685e7a8b9 -0x9b759916a3e4797e76bb12a87a23a20bd4997fe5edafacc9deec17166fbe8649 -0xa38711cdd21821f0925c2d766898753f91ac319d448b64c84b0a40f774f3a96b -0x554acded32b2d152eb581edd55939b8f746abbd1c094b2ec6e32023580ca1149 -0xa20b8a782cd2ed72cc81a797b0ddd06685059767a04acc9a20906aac73df8e08 -0x2301f143efd718f2d2731e1352cc4e1dc354c42625e6df5ec423e0b0104cbec6 -0xf9fbc08c2e6ce12672c37ec6a9b6536529c967c2954ac4464089edfa7c6dc912 -0xa5a3027c2ae254a2dc6e4927941f285830c17487094a5f952a897a581d26bdbf -0xb57d4670d5ba201012a9bfae8ccc09d18c1069613235c181fd398e67983e855f -0x870fb0490459c7b3c7e1851d61993bad2518d2da8eb566413312900348f545cc -0x74782f2c517dd07185d6867749a4596a625fb4034e0e831bc15e16f02fc2bb21 -0x350bec23a09eb80b50dccf19a74b02a96dd34342522f6c98ef96394bcf255657 -0x12f89c538bed892f1d8bbc0fcb9660aefcf22b871d8dfa1002d212a9ae95adfc -0x809b0ee4c7051f724e5383c559c6e9858d4adca180f59efbf0cb0fcdb4093723 -0xc18ffc88646c7579767d849d650ea4d5fbb8315b330606f2120a08f213e8c857 -0xbc3b585e558c3c3592837031196790b66d65962bf44c5cf5f0157e6cc1999cd4 -0x5ee038be2c83db0501eebd7ec7b0cbc4ee843ffa364ac35944583e7ee7de9fb0 -0x0a1a2d4b69d7d24fdeb4fe34d439ccbbaf5b6c277f4953b4cb56caeff8bca7e5 -0x5526c9aea10267e98a485ed0bd974491b52f0d6433471ceefb42c0b8c87a3066 -0xd12f005199f7be73f891d8230ca7e06cd78ae7557c9149fe993ff6bee0760b77 -0xa5482d889923ec6017b13969f85e6b23c96f2ecd3abad1e27fe37e56a5437a65 -0x99008a353bae02c30c601dabba49d89c515209c0aae5ee7824e89767dd8e760f -0x8d80bcad6438746b8b14b184a9879a3d01bcd0012b6ead97bf3270870bff071f -0xf7dc1a6a67d4bd48d0876e655f4feb73c295865492cff4ad7bad50c6fa21a46b -0x1dcc55df7bde0463a5f9434ffb877413fd2f740744195da076d919b7269f0927 -0x5b097a001093b55ee2697d2afb269e8a94c9caee9240f6322335f99bea0fcf07 -0xd0a671990aab0bfb03f65b3ec68cc472252d97922d790cf9cb4e66225f57e84e -0xc9d785ecd6ce3e6452eec8ac1f94d29701fbcc80c31863b1a5e46682e78ec1ba -0xace6fca342737a0467b72e5030a7a7c6b4756bad6b3a70868f493f89d29b83d2 -0xf21a04844d68a6b361c30ef76182e70ebeca748ac47f86f072d62695c26ed121 -0xf5429b523714828aeb1494b18d1ced17d422a40f423c8a4499986aa40e2f44f9 -0x95f0d70a3a1fd4174689a255eb31db4f24e8e42b73ca33ef301621c33b1c4790 -0xc1c12caed9e71573bda93e67e81a07e142013200422cc174bb266de66fc84adc -0x08000d287db5c2deded483d6eb874672855d052c0b6e4812ace6bfe823697297 -0x695833ffda5c077f2eae9b60f1466e9a99cd1669b9e20214a5b7c22d10161c1c -0x2064fdeace2e6c599c3a615b1ca39acbfa12f504295d82b8d9dbf2dfe2a795e7 -0x2aa468953c26ce8b75c2a12cb256097463cc0c8c701a39c9ddd5cba07e952330 -0xbba900616edd50574e0fa81af4893db154da59f48521e5a937a7d432c7e21b1d -0x7c38850612ca1dee8cc5272b7eb291fa3527cb8bd87c1e27d65bcb8d1615bfa4 -0xaf2dc4640d62834ef75db90733d5f2062399f8be39f8f04c1ded650bb7f92a60 -0xdd1f67dd67648aae3274cefef909d743c845d0d0107a2cfb4f5dc27253256e43 -0x92857e857e588858389a30ddc167a11bc735a873bcd7abc6f159f683f9781bea -0x9e8a3ad8717390342e7ad297d74a9be83abe37add36acd96091a508144695820 -0x5b4bf57e61e867a1055879727b44027cef6d1a18cd76bcaf27c744c1d37bdc4c -0x7c64d6cc724a0fc008ab56e22ddab387835d08544eb781c61ffabb24763b5b6b -0x396af2bad0664c616ab0649f1530342bec7c603ed485fa3eccb3f1ca0d5dbf58 -0x04a3d2fd7414350f161927baaa925fad25dea356312cdbb880c857c241916807 -0xb420baed7f116c5f23db19147f059d142fee8e93f2ab0931c58bc14d7b990bbc -0x75b412f855d90a025f3d0b4f6b6eb4eab62c5e269acab07a12f01cf642c28fe2 -0xea56945f00f9b4e085a11c2f718d80bc8ac150fac93145b18b2e951d8d1d8be1 -0x17b8082dfcdc00617b531f6ba7deaee904ac10ce78ce664e9c7ebeb42d1d400c -0x5ac2a2d5e80c5d62744f0a2d4c628536bef346e2b077d66c79f258047db55bcf -0xa98a4489f9cd8092e643a691e60459e7f323b39ed55e6a91bd559009134c90ae -0x181644e0506b760dfdbfa2058590e62a3cfa9afd23527315990c88555566ad67 -0x8331fafc97ffa59eca40657e8f17470d1fa46ccaf7f5b22a532b731c3027a028 -0x15e9dfddfcd1a645d8500545ac97a18d3e0d4cb66af320aaaa088ac3c6fabce5 -0x0ba7c2066e1be5ad2bcb683603737d6bfb02eb7a73cf1421584466c3ac696582 -0x9f99a8902752f1256d75f6afcb249b8879fb1db1f43c81ea60418ff0bf5a596a -0xb824e228587d9be1f3180af27afdd83e96df2dccdf904d91683634b4824c3d87 -0xd092bd90b7345a70dc5ae30f18cc1ddd554e02be153832fd49bd3c442fb8a5ca -0x49f136b7779221067cecf9b91ec0cd5c9cd6d2b1a19a9958e4a8118ad93d6068 -0x12b8262a9e1a782cd3de124f0fda73726a7339d2876240e9091fa1c22ef2f1fa -0xce3f0bdc662b96252fdfa17e0543a6776ca1bf3cb952f2827df1e079fc6b6a26 -0xbeeb2a182ff986014de0cd01bb558e57ea0775791600f3ad2150fb79545d1419 -0x29d34875f65fbfc6d564481338949f2963cc3fcf4c40b2ee353f33991df50c9b -0x45f010a9d0ebc1a85f2dc250accbec26244bb1259539ba9b86464341a92c735b -0xe8592dbe9a2f778eaace0c9ff343b0bc643b4a210047d718192aebe27d843ca7 -0x45b365c49f40753ed2f0c7640617c8dc97d8b8ad70fc0c324744305c2ed6d967 -0x42095bbdb9389f162dad26a683fac05cf29c4aa9ca448dfdc49b8a4676fda6cc -0x626ec3138521990b2982036def6ea61732ab396ae3fb6a5e70b34e6c1ec2441a -0x696efec65b3045ad1000d85f513b528354dac2ac40dd10afa22332206647b612 -0x6892ba2fb8439aaae1c4af1a25dc27ffdec37f1092f96504ad8bee611e58abe4 -0xfba91d1af78d1d80bbbedcab99174d1220f383bcf7588ac01cbf05d31df55e8c -0x50381544e021986fb669be5625e9a939a87c88d575fef39650fc3661091b9935 -0xf52122c59a5b80701530d8e3681e4596903b19fbaf3a05d4c8fcb2ae1396cf1b -0xbc382c5b7c236fdd96ae99fb32c9b5d31afc67012c6d149597ad688a0847316d -0x81190d5f445ddad2ed4f8d2b27345c737985ac7e72dcd5e2df7267bb9343dd58 -0xd70e6f79178a868dcdce002d33d6e37dd5aafe1241344c1e7f7032a64f394d7d -0x8ea9545e5e80ea4ecf979b17cf0853f8cff47facdc74cb10a5ce621ed227666a -0x0f559db328fdd1cdab2306aa88d0c5ebe475aff093687b56d184dd8117c74c8d -0x047d5e21e535c8212c794b2f7ecb0373db2e82d284e900a598f82a0f4b77c789 -0x222c65cb5c9d16d46cf64ac07a16c3a3809d740727d7506d96e06104de402beb -0x87dcb2a57855a5d27f8219f0f6bbc9198f1662ca2d3641d8405ae50db75ad683 -0xffebdc0e7fbc87b046b2c48d151f66d86dd2fabc053f7579282d3bdbf75eebcb -0x52b8bbc34f7d94a0d3650894df0ef60503b3bb6138e715567abfbeb55cc4bce6 -0x5c66033dfedd30ca9bb94ffbbac31c0af1e59b819efb951840912e2dc07b11d8 -0x2c0a039b1096f56abf51c5d84e4127d45140cd54c670633c79c933b70dafd107 -0x20df1b6a6d59addd03401b181f56e4e409b090967d0f61a6f4cc7ac2bb890409 -0x6e8dad5c7bcb0b06191c2fd98765ce1ecfeac079caedd7b33506312d9dc9c0c2 -0x77606d4482db85c4f7992165ad2380127fdc1bd1a355d933669fbdbfac189102 -0xf834765b1c58c31bcea58639981bf3b313f3a600fff88b4d7b0eb68a3e1bb70e -0xd865d47d16cd334184526b108821b0660e0056f7abbf3b7f76a55455b00a8e4d -0xd8a6bf39ee2d1be8aa6ea34570698470c84f1126b0ba13559803e1a73caae8d2 -0x34e9f42ba1271aadf27a496ef0e55bf81577338001bdb532839102ba417d59ec -0x0c96d5876163a788851153987bcbe595c182515e9b5c2423211a9f5e4b6942a1 -0xfebb52ac3a082ba87c1f9e30c60fb01a47a8bb7d908694998b4b6a371af757a9 -0x1539d21a31433da718c78941bd9a57b3bf4bf1b3065b509998cb4d69c7c39197 -0x76820bcc2c9fc4c6a0165e98603d6a65567d4c40368d2fb64b71ba33717fe1ca -0x7bf63004b5659d7848caad2f492aedde49fc220904ce380998cd416eabab4481 -0xe2452fc14da354ddc6beab535cd7133e1a8474b464725673a527fdc00d8a0e2f -0xd331348dec7268ccf056f17de7fb9cee8838bc7fe1e5c59cf482591c06039159 -0x75413c8f1cecc7293f67559ccf8bd88223af9e57a02cdfca365b79bc00bc565d -0x0918c7eadaade3dc1b26dbf1cf75cf0f16c20727ae1da14a3254c37a5a2c7b54 -0x8eefd8ab8e9a2d016104ea895efb542054b972e1cbbae444cd1e9b2dcc084197 -0xa3279136bb9a397b5f5d00757f6e0b9570dcffc327435980df7822b60ffd14a9 -0x73a33640dc9b8443b9863c296d6ab3df6996e91e82300fa9c49baba131fc2e32 -0x5f28a342e2608d06765a7dd54b57ee46b177d9b83a513bfe0f87d4167bc260cb -0x77d6e3ca22e7c27fac56391dae078572be5cbc72ab7c68b5436a1de0f5d1cf11 -0x5f440bca34cfc25f1ca99ad69db580e9b907b241ccaa40897482d0ccc7e69f40 -0xd53cb323764b39e825dcdc2a494bef027f3145e8bd71def8c91c8a2400863344 -0xcc472aca6b27a5c3213c6c7184d01c2395d4fe09d6cec48302a0844718e455d8 -0x11d1176e1e8b990ec944e2f6708fda2cd50848485611ad6fdb62b8ce9b9b13fd -0xdb0e6c5108c2f1b3a3b82b4aa264eb2934b8455fdd0d94ac2b027a05c7793f13 -0x7c1c79da8f87f29152921c95a4251122ca5edd15fae522e352255fdca604b250 -0xd419f3f01ca6b78d784abbb45fab2fb4879c5d0a6c7b8ac2090d6b47f9a3c099 -0xa0e7b13415a887a0b7aa0510676572afba317917351a379968860eaa1b38136d -0x50faceb60cdbffb1e4e1be82ef59009145ccfea96c6bf42ceb7380617d4c41ae -0x64952c7eeae688c19c9a9b87349ec40a06363aaff220f0ff4529a27994fec68c -0x79d54caaee6882b8ca6fdbf1d504d8c00910190f13eee4e9b02c537f832100e4 -0xdd80134e4994a27241774749ca1c928484c92e35cc6cd18c34e120a8a6dc1010 -0xb69a06b1600f4e6999817d83cba61301d48164717128466820a30ed722c882c2 -0x384fbdc8fd78d9069721e95c0dab8516203750205c4b085ad2259cdb4acd28cb -0x1ae25e49be8204e527d6f0302f08c1a264c8d21079da9faba7c423f1e124dd36 -0x9b0778674a7be4a42b9bef60693479e453eddf2146eff88cf021a05cce8e34fd -0x8e6644228610e5e5411e077c8483a1b0e9be3f5496c7bfbca4f469c474564900 -0xba0dc8c983b9e3f3075ba018db317450bfb40b969f226faa8d0a5dd2d0832091 -0xed3f0c2f764aad694ae58735e2191c7c16e4539b32cb5b15e5d93d3e802531ef -0xd0a6fb5ff0db6ff42902d0e882454997ea3c033ead749662b11a7a461ab841d6 -0x5d3d0b503cb9df4a44acb7fa51f8a6637d35d3e0ea2336ca1cc1f1b5ccbe9bc7 -0x40da9c1c19dfcc28b8d942c6463a801020319dc77b84c2da291ea9aff8974b66 -0xbd0c5e78d0a43dae51b616eecffcda444e2e4e32b86dd293c302d5f5ad3e5c0b -0x0eed17c55ae3b4ea33797b5a4004d77d59c5234836d8a9624cc67aa50ce77bc0 -0x07f4974106369ffd77a10dd1b96377d381318a0deb802ab546e7b05ab8407a5a -0x36ee5dfa77a36dcfffab1abae1ed49f5c7ae595cd05f321913ad6c38db57f069 -0x9dd027a83a0ac115c313af3acf14afd3eab9324f77f4ef8c77c0b948ffe42ba1 -0x9e29b534ccbd4093ab8ad9d4cf0ff488a8bd2fe033cdadcc223e4c4a11e9dede -0xf4b27cdba9b822ca38262cfa7551ac42c5859ae604e670f963079e4357411977 -0xed27db18c25ac6604115bece7192153df53237c317dfa001ddbb3914c36b3940 -0x6d38759f1b782b9c9f1f0ecd966bfa35ee7924bd94a713ae7096730a7f032677 -0x4e253f736be3baee91bfc36ac983aadc68c60b0e6a4c722048ebc18463239a8f -0x36c3893d91d402de9082c30dd727d4384ad5132922b692d88ebc243f21164562 -0x34087b7ed7695f467b26928a10840cfac7c61fa547affdb8df1e1f3eca50a395 -0x9fec7d9650d805d0ff5f7a0b9ec623ed63c542519e06d78093501c78adaf5bfe -0xfcac491ca4730cf89d384cbe35808a08d70e8b803aab05c18b52783878ec80ce -0x8dac23a644e26baf5c1a198848996266cd682796089abb62291f6048aba820f6 -0x47787ab70576820aa8c6b6d1ccc45155d5c30559bf9c7ef5efc37660cecd3d91 -0xe1ee4c867f50447deeee69d6f7bd4e46846a3fc2f6042269586048b72202154f -0xed97b8c0440169d1f72d760f08988e75959a9efab985444bb53720b2d3fcd8d9 -0x99110c4ff4c3040a4e23426c2877287c15c7be3291cfdabef6fe43843393718e -0x446bcf5c5f1b8663034312b859429bb4cfcb6d5cb2e3fba4b7da6f76f1246add -0x09b34c373afe1d813a14832bad5194dcbc635893b4c5535bd323c96ed3ad883b -0x47f4b1934a976ad99367a4a8484c6093c82bd9e23459196258f432172b0da4dd -0x021ae475b6fe19266a8d62712dd93dd172bc54921605cbe56253194f8d29852c -0x926e7ee6c9d311ee16384560b12e5354e860d0e227b5d7b24e2751f5b51d25d8 -0xec5bb9e3885f294c95e4e05321715c6a7571c6fa62f3a856c6ac780966ac6402 -0x116f948e0680f3cd23df7dd2224f77e57e25cdd554289fdf43e0d7c2c286affe -0x08b243ea6120ddc3a2885deb4e5def11b0aac7441096590064df553a5cc4c378 -0x5564f86521af5cd2c4791792941bcbee154f0eca6693980d24fa7a41205576b5 -0x1502ff991bedaaeb738b08be6b7b50e33c5bc36251ff2a5e37d95da5008feccc -0x99783dfdcb9e87efef27966d98eda8530d4b3172c291b56216f79177147c73e5 -0x04169a12318871630dd55036e6beef13026be2ee05ff5f93d0df6b44e2bb58ee -0xcc27630ec203c91dda59b4f4baa931d75e1f0960d25af3cdc49c410c12c956e4 -0x733b6be5c698eb88d43dcee4323d6b019993d9b68422f714fbeeeccad3ed3479 -0xdfccb71877fda943ba4a5dabce5a37bbc7d922d0a657c854ecca1e676a6a6671 -0xe4a523eb747044ef6a4f89397691e8fed0e7a8f727bf5b50a78abda99b96bb2b -0x98243d244f7fac29cdd81cf82e4bfe4c90ecf2a28687b25e18afb5e105281d68 -0xe8e1b7a9bbf8e474a7d042ec09d97bf77ff3a3b743f2fcc9e55dc805875316d4 -0x6abf4c35164dfe6be64bd8e30d0be66501c8d7387302f0f0f665f4b068a6c707 -0x6224be6a2be6b8069560f6478a54da262574f4e820271ace0268c92a9e3dc9ed -0x180205122b7946e323beb2e5cf396417ae1920b3cf22896e876b67064d49820e -0x478f54f3728e55e04a81590a7696e95614274bd11c8a39403c2b32aa86987077 -0xd6ce0ef6bb40f0c0af0d826ff2cfcf791040632314bea5c7b214ecf506a75bc2 -0x14c043b9b227e7938057e3e1ae4155a5fefb43552b6422505b1bfecff554e733 -0x4fb39b6037e4545815f9fcf008fff6d735eee1e02863fb0e11fe5491a034395f -0x59791ac3d33c5aed680d6f4acaa712c490d0af4b2f247fe8d1e2a85b64885b86 -0xc3ead2b3f58cfc880f8b7aa899d8a84595c1050a2bb5feaa6394d73dd11fc039 -0x2ffcdde44dd3ce7f2041d473bd9519c164967f3f3c398b9996bb3a4770956a13 -0x8c4d4f5ae7616339de8a02bf316cf29c3e3a83b577a00e2a77a4f62ed81b23a8 -0xbb388e32728464aa094f363e1aed44ac713ad950d46983edcfd30068a6d7a54d -0x82bde062dfde41f39fd2678aa8d2b7985c970f3ae6b9f0fd65ab970cfe5b5d14 -0xa3320c660a3e2dbafab3dc89796849e0422e1f5e09f7102f68c1de4d27a3c7cf -0xe2704818f738b307b7a0891e7881b3953bb3e0b3bab14bbb4ec6e29e6b675550 -0x2589272327c78a7f8a25ea79fe5b5be0959266481549f54e39afeb1b5c0dd37c -0x91b4092ae7ca9a12cebfe9addd91e93ad85446877e19f7051ac2f37e68da6fbe -0xa946ccf273832532a69449fa455849052d291cdb827111d1a1637eb2e03b15aa -0xc7c1552160eea31ae2b6b97b2540f35da9482080b960e691b739b3aa84eec685 -0x1953b0712e8a243c634e4ea0050fbe028cc39fae7a2d1e1dc6646b0392cca8ed -0xca74e8f65174b547a7afaae7d3e83573bc236f6f4f0ec45a4d87ed10ebb46e11 -0xf16ce7138b3bb67ef789241640ed62bf85860fc1fd67d312de595a516db5ed31 -0x8025909ad679c34dc9fcdc25946bc10deac4746156a042cb2f25b84f02f2408d -0xf3b5dfbb2fe885b4d5251dcc396a15229846a973fadef6efe0ee57cd86e6561b -0x7046aa07f0ca0cc982ed8ae57765bbdba96bc601566206b2ab46a7b76c9c73b8 -0x0bb45f20bd43d9e768f2c17a671265c30b96331b81cf8f4565febcec4951cebc -0x343236ee7df4d2f378a6b768b407558c57caa6f32b0618ec656796d910e50634 -0x80d0dcec6accba1368eaf4a638e150337b83243e80d37cd99bcc47b77683b60e -0xd21ced242cd7522a2eae7cb4e26ddf775c1accd000256999d506a9d01df825b6 -0x68ef94ee6a572492b97bb23111653a74aacd8b51ec42ce7e845e8b754d1589b8 -0x4b0dae785cadfc2278c2c571c6b2e5d91230ad301dd5ae51ff12a3563afdb72a -0xd7b61a981e8abc87ff40063ccada32a324863ac801c0db1762a3d87e641bf370 -0xc676cd663dee5c681f73868b9f4581f5c8a698d2eca421658031e803fb0aeef7 -0x88a766ce27498fc9080588f5ff03a91a204f4ad34d9ad572d4e25ae84bfa1aee -0x089a24c9a203f8e4a68622c7469113df857039cf893cc4d50418c8cf308d2e67 -0x0027b2275132d7462699e0c4c342a017b5dda0147feba6b30dc4f67e1d47d80c -0x7c6ba6b0335d6ddb9bfc1721e0a4b4fc1a8e333d5015e0a50f24d072feda736b -0x745cb8ea14a9e3bb180d4033fba437c4c6d6de8190660a5ade1c97f8fb1658b0 -0x2d67dcdbec6d558365f35148013bcd69f85cec26a50a0b7317d8f553b884adc2 -0x36948682e882e5b932fa029935b3c5a55fbf88050681a36559a08cf5e6415de9 -0xf41ab893a10414d5e276092cad094e553c552af98552b3771adb0d7b258c47eb -0xb1dde7ffb12e5a66bddb2d25e00cc2c99aad79655e9a5a1775c57dff2308007e -0xcaa81b00d4f2d06389fe837ec5c1782bc51b41f5b0404044b4e491a575fecac7 -0x931babd0e2ba8bfabb6bbd62db0aaf48f4b1b37b2890979befc260bc6e75a029 -0xdca986df11be883cbbc7035f6bec1111e20cb395c04ecd5b2ea1bf2bee246429 -0x7a739fec2601d187de0c64adf819fd6a90c26ea635750a86fca60063170ea0ed -0x50c11762508ddfcdc2059a8ae36eb47d6916229c774ef2aa5c1a69380fb8c1fd -0xf91fc47d1a1eddc41f3650cbd46a8273f6f3e694ba3d85dfbbbb2a6e355e2c9e -0xe5e69892e677b4a5e0b4d5d3c6fecc494374e5ca92ca7c6d4993622ec68d2c2e -0x35b96641f107b574205380244f74b3d9e092e38d15473e6c7463339cc2e26f29 -0x8707fb7c0927eb9e75d710b7ff28f9cd69c3488bb8b2e14b19d8a7c8d41d56ed -0x982cdadf1342272c91fdedfcef2dc699e58583d531a4533ef98ed3a17a98857e -0xbeac341b5a4424ff2a7e90f9975ee65b8fe149e08c5e8c10de642f87469278a6 -0x311df03a81bcf9b5b02ef6b13b02f8f99891e8f67415d8dbe699e9db3c9f0ffa -0x2b5b47426e4509d0ac636f765e236d9ad7f6c72cc43281bb25fb11c9c38083ce -0xeb35694de6bb0c8264faed574fd09ed9978e706503508438f61abebb8731fb74 -0xd2d07efdae1af65b762fa3f2876b52b21d76475b72925d241480a0d20cdfedce -0x39c528169327ba93ecf157bf0e5462b57e7e141c59ef693a7e6a69a275e89824 -0xce727100cfab987d6073b8bb7fde447e850c593c69252724939a2e7a0e9ec2b7 -0xef5e072482d45c3d3c72692135afc63c78151747e1ea8f5d07188f223dec7a47 -0xeab819d93bb81fd9fabcde1453f7d0700a0fcb8c542476e556330e147ead15ba -0xc1c7eacf55c4c4d5a5d3bab1e5415894c580268b59ec314400778d75c80e20fb -0xeebf1138fb54aa1a2b6372f88b01a42155f1cd19113f7c761194d4a59a95e7dd -0x64be608e67db136d39cda0d6b2b00f29a56076a2ed9e8d0a8aad9ae9f536f377 -0xb54c51f39aacd219ad4d1ce2304b641c2354acba49a426a145178520fa3e0b44 -0x6dee084dd79d3d1d1613647020e354f6f6c23eb1e0cd104b249e38db6c3f9350 -0xb74f275431b4aae2bc7c1eccc1073acec6e4261a66a384d0e72cd3dc85ee0840 -0x2e9730ee9462679651cebb2ab4615b34d4e6fef4169159465a1977fb5fe53691 -0xbd7e59dc3dcee45ba6170cd2e3d973fa7e15c1430e1352affb20f35ae44d7c32 -0x4051b31326248ce60e59eb404f2c25e5b1275c123c6a9fd4d59ccd48619e96c4 -0x4ab9247ca972267902140559e0e13dcdc6eb22762388afa4277f213e9d27d74b -0x6c5028ea92f3b4eae42b2218e881c60b8e3de3e1c97b7e7eeeeba10b47623fec -0xffdea5d83dfa00abc4d7e186d09c2c444fcc1d3e29dc41018699b701cda9abc2 -0x1bbebd41b3844c89547832416456515c3a6e7870cd9949280449e75fcb975259 -0x36d9f59143bbdbe2c8792ddff047545bced766decbc6c9edfd58076550554a23 -0x805d7cf4b36643fbc94460e4740ecda51158d973803f133a943fe87da430b220 -0x89780a4e7734b5c525ab896948dbd1459a4519303d35dafc1cb8316cac0248a1 -0x013290b0d6339d2414d20ede384a43eed15eb272b7c984db1fd1d1b324e250cd -0x087884b3e79df8d13a9bb0b9b335342e712e99c4d2ab7ca53c4920024239a10a -0xe364b5ce93c4b7dfad93fcdd01d9dcbaad9abbc6f931407ab7b10641cc95bdd8 -0x4ec26faddf7a4905294ccba87e14a70ca9664e2bc48acd1700d4e63d2ad8bed4 -0x0c236272e488208a094ef9048146393248284ce35b6ba830faa53ef473a7d513 -0x4a75d4affa4242e1e56de6730ce91db21c656468d850f7d4e324224dcebfdc12 -0xbe0a573336b0db6a38e9d9c9bfc98b414b60510fc4988841e9038a32dad93576 -0xfa61d25289a157233dbddb17321eef1d9d8eef63bcf5aae75798bbbb903cde18 -0x34c2f4a7dc1172b009cac6ccbbebb1965d99947b5e1909414a9f1917ad24a7f9 -0x14f3a30a7d57b44782040dc66ba23786a6deebae3b1b90e3b8c312aea413ff3d -0xe0fa6fce0f86df3674812c7d696512675d819c02b4dec8175b4c52807c655f7a -0x0700da5844e548073993e4ed825e973e70c60d5e0015c8e796062320ca155a5a -0xb81fee8d6b0f15624ab386f573faa38bd4b9731d149ea7f4ba0e4b9644f2f5b6 -0x5ef587e33ddf263156c34af6bce4ddb1770ded526038940db64619ce8b79c945 -0x1ee5db15ff125a3675f9ac3c250ac03965a94397b4898e8e2183d5ff1bf86db6 -0xd950b5f44ab33270f8a3ba5d477107869e9fb21c60dfc1ebc8d3adbe428b819e -0xc2a55bb7cbd7ffd9ebaee81499ce07edfce10cfc538f2f2cdf902e08ecef8a06 -0x2cbd45ef2aa731c49ca4462fdb903e003b79b67f802739317aca277fc919b080 -0xaa22e298fd9e1d05ce1845888ce7c1309423423cf97854afd29312a4b421779f -0xe7cdea3988c13492d7f8d9b38666d0de741e7069f41a6f0d2ea4b99a97ff6879 -0xe9f57b102c55192c8abcc1ee1e21e879782170b1d5ed8f51d7f8db41f5a3e1ed -0x10a3857b4fde9e0b28e06fbf330553ccb4f9bf8992ec3e1a98f6b9d81a78e8d0 -0x019500c2a754ec118399e39f737929a585b5394240fb287b975c70001b929f17 -0x80eb82290cfd5e398a9d791b2d7e321f4fe5dce586049f382de19b1712e009fc -0x550a0eb167b20f9940a4e0812b38ec94558a761f60dc591eb2489adc21852a37 -0xb78438d3df6124ec5ac49989eb3ba5063bf0ff161f4c5fe013fd3c0149976ef1 -0x075af1a95fe1281d7d229c19339a046ad9624bf859e16f187e3433d98d71b036 -0xeb860c6349c05a4f3a8fc0167d91c2f8c86b17bac6e2c44ed077bf5885a35be3 -0x0da76a885d9e6519195f6f95dac46f8a8e6cda3068c213c602bbcdbba18eea1e -0x21151bb6d4dfda3c68559be31a2b2f2cee95afdb9ff740053fdf5ea96a74b8ce -0xc311121a4df5ad7ec87fd13d0cf6aecf9f60f54b50f6d0db5c1990344c750440 -0xcf03679d99532b328b68465dc7237e773d91245af8f4527331b093e3d2459fee -0xa6ad917ef5d0839d883e392575d5205d3425a093808c8d901787a54f8c2af64d -0xf35e9e23a6949dfa0c69f39c12e284e02d8d439070bef7da0366db4f328180f3 -0xb4513d0403d3c7218b4246a527a347c6411b49575deb3fdf73211f14a5dfd1f2 -0xe08ce409a4d502577b8ff37708b2ae5af69fc9998916829e2a15e6a6c0a5cd12 -0xc52a2046f26b8e041e8036c1b0eed66bdef7133a4ad21658b97fe65584406177 -0xb104e73ab4d9c88d0bb34cfe2d8bb9d383d7ff39de47b9adc60066fe52ec0661 -0x89d459774ed96a918e0cfed49b5df6da66f86b431abf95047f73e02300aebdcc -0x13c74333fcb63b59273699a276704b603e838889268193aa5c08c61496f2438d -0xd3d612cfbd6578e59799bbde06f18b50c677040b4c29f1906a93eea9c091b105 -0x5db6fb7eb644bbaef43d4a74b7f16827af1e5cc266dce005698509cbc09fd767 -0x8b29ff0d39241422ffa8e43fa40789e5b07fc64b48073d752070cfc719600977 -0x4a1868afeae77f5d999925065fb0039e407ccf7bf1030309631c7ecfb1eb681a -0x2c7038a4256397c3c866af6e2287d2aa1eb6bb6cf958a3c034628e8223b1f42a -0x226b6e142022b9d05545da1e3d7eb81693297b1b7c94bb0c10eb629395335f7a -0xf5c37aa2dd6641d4448f38daacee9a70a22c36159676a4ba78a99bb16ef5b082 -0x9bea2cc64116ece236cc71bb16b4a3dee5a08f6dfd19afa4fc03498d0a001ced -0xb4679a07dc7a5de179851e5afe923379683ee0d3ebcf518f38f1e83f5bc35acf -0x8ad5e642b7525431bb29e497398ecc5974ea367dc79ecafd73802389050ea309 -0x2ddd45d64a3390394e07e474944cce01cb75f33b98773c2af14416d8b3ae3949 -0x98e033a223b2421577499976202b94ba35241d2b4ae9aff54925c658ecc85236 -0x033dcf80be73636eb013d09fe96178f98d60d5ddcf5680d5069d4bf99ef43b24 -0xdd36ff78b8c85b731f8c2cb2ada5f4ffcf153272bd30f2dea715725994e7b725 -0xfdc55fbde641784f1cb7c90a2e0255b8ad49203c0da78dca83ea1306a7585555 -0xfa63adbbae9ed1e19edace350c60850eb86fff6584f91ae4683347ec98120193 -0x10ef47570d946ea8b02858b637166bc0b3705575ff27c7d7d146fb4969f2ab72 -0xd074b8a2efb6cb126f7abff70ca74f7ed2d769c0e1622211e9456f2f31f05366 -0xa19223326021f3c10125900326987e2acd73342b97b933608b8faee27befa5de -0x64cac6bbfd03363c77b2d845d30d2172fb66c94e2f8287569de1d0206a6ed1e1 -0x41bbc3b99e4566078d45694128aba592ff76a7541a4e0185b8a5799d733d4cb4 -0x5b4d7307972d381fbceeb8d2e371833a089cc78c74280a00bb22ccc9f8c3ecf3 -0xbcad6b5d7686a5c5f6e551443ce74fb324b0f7a4202f6aafae786d8989f7b7ec -0x3d3d890fb0c83990ceaf600d0eac247c3901f28803b2a951dcb3f6d06a1b5dde -0x32ecc8df46477aca880795685499dfd303878ddf22a8843932ff268114895525 -0xf95f43f09d2b724ee464bc7cc6867d9aa5061b9698690b83040e33385b99368d -0x402d0bf964830b776f41e10a35260d452c2ce1fb1435ef5b9ddf5a2be4d98451 -0x956af529aa713f92d26836ace64df16dbdb17a9bbc8a502a8c9654f1c0007687 -0x522a4e861cba9ac25d23fc73f765d7d3912ae53aa4df6283bece43f014b9909c -0xcd2fca37ead7c7dc4137b460d56615cc4707e9295efc9d70c8313d6895d5701d -0x29d9440c6c0e9f4985fa55f48fc8bddd19f88ad372fb4aa31446109ca68677f1 -0x4ae98cf808ab1fc8374e6bf6953cef185728c6cabd177359a5cd3191e9d5a075 -0xf0a86393674d1b4fb25af419f79663d52ea880a07d699fec9e004c338188b8a5 -0x19f6a5a77b680203df4105b79000238abda1aa3f3c4c8ce10ebe219b6bf9c16f -0x6d9c21aef488dce0f50fdf2da99e2154e27875ce8d141e3ddf3d5cde82b41831 -0xfba9243a6baf24192f31f6b260fb934e27b5503fda1fea3934ae734341c299a3 -0xaaa8b5841b70b1135116fd2e41c7735bc7d0cc87e12d79f92204cc93a05dee64 -0x043ef84ccc48ddc419c01368624e06f59e78c214330f93adbc9104a4ca4fdb03 -0xf4cef8a32755c23a6f96747bd59417e71de385be67b36b524064d2dfcf6e89db -0x80bf87913737ca3575084b1028b91f6b2e2d0cf327564dc454ea40f528f858e8 -0x0349017ef70216ae8be3518de43c38aee32bd490a1bbd18dbae7ade679b16280 -0xcb418a58cb8137ea3e7f50692ddfb6337450f548474a1bab822393402639ecd3 -0x5637e38137c1b477d8b81a0fe77e8261f741d2d39a459210bc8c1fab6dd38cba -0xf526b367cbedc55f87d3fc0a5d6d6d57e34bada7fcefc6ce7de9e2aec2fd7fbb -0x7920361dbedff8342816e81b16882cce1b4db47d56812b9cab575f6dc81be5f8 -0xe724a78617f6b4bae65c2ae7d1c29eb777d1dea6a981e09acc1e94075dfb94c7 -0x9b80330a92eb6d8a422c16510311f5680912751ab0240a2a9563a6a46cb35e92 -0x66ee5459c638892e06e874ffb5206b8621a0a404ed6d4616a3100ba33f63050c -0xd9ae746b6761fb47bc8b1f117e4b49883140b53a282be073fec36e13b3b27747 -0xa5896542932d293b5f945269097c8a0ca0f3e241fe5a3a497e1e179eba99dfbb -0xf5442d0bfec8306580b3c7d22f1badb22e71f3cec3c7d1d0af07a9c74b3257a8 -0x18b6f7f1066efdb73c49a2a01a9286946414dbf9b952dc0ac1cb4872152b9bbd -0x8e2a0c09f591482df8fd33ad0da0ef4491dfa825b03fc3b894b3e7db425bda97 -0x3711accb0fc6dbb7b182049e2c4cf3c436881f536b0a867731b73f2816f26ec5 -0x4b25aee391b531c53e99aba740e39da40943540bfb20ac5454b0f6c526065445 -0xf6367b051ef5d489ae992e3a56dd751dc9ea686a255547ad5236699fee775363 -0xba949f25ab56edb28d5b6b6fbc7fd5f6919bc6714514c59e1c3934cf8ced6b7d -0x4f4d54ee314894ade65fa0d55edaf932eadc79637202dde975c45a6116c92053 -0x174ca9bb2fe92d90bc9280ec3bec790bced8b599dd9b552ff474289465aadb46 -0x7151f3a0b455421ef6662e4295308ce98baac238a2ffe9f01d1edacc3a6505dd -0x9e9572efe8fc76ccc8ec4bfadcfd50bee73ddef334a30ce8088b714b79982af1 -0x6895d3ceb873cc4d3ac11f4508dbe942e7a7e41f38738d9adbacd0b5722dd619 -0x73d6dc9d2e48eda7d4bcf06504ca39a2c1ac08c91b8cfa422436e11d1ee539cb -0x1d41d78a0187a47f99b82a5a687dd2877f1618bf15795214ca61eaa30448b7ce -0x5ff279e2d1685253b98da900951f3b347a7d2f3172069a7ab89db6c10a176392 -0xbc43c156eb6bd8d2cd85cfc92c6bbd94dae359ab101255189021dceaf2be4688 -0xc7786d42fce0e8f18842d63ba272325eefb9512edf4be2f7048c49453c41ecf0 -0xa92f3310d39281e1c6786518a6f711af3a8b3829dcb293e16fc30e3cce0e56a4 -0xbf64ad65da8aba925ec225893d5d1aed7821ef7b7194252786bb2288bb93464d -0x174482e4bb26dd8dc1d506cdcc82eda93aec12f574030985cbc488fd0a5a9578 -0x82543fe80e2ef56e46215088b58c9729104640b13cd0db131a19d985f7f69fb5 -0x1870ab17a453fb3824bd0c4e7f85cba99a2dbe57e05abd9b159c080f6105df64 -0x36eee7e3206fd1778b1755b18626a873a743e993d7531e524c22946c2184038e -0xebb3dcff22e050b9d37e124650a184d437f4779cb2620c424cb3af6532b40825 -0xcad7f34a88232201ea85a7fbc9cdef2a2d52bb473b6b9ce66ca87690ed30fbb9 -0x4c8ee5d884bb399797e0ca666dc80950b7a6b801393cef8fe685a85ec0aa0a5f -0x1cffd1c877c4dc92444f30249de6fdb33ad23f76f999fe876be1742236f6cbac -0x0e39aab7b7dce652314425c5400ce10aca88b9a28f7f9f33d71469a88159d31a -0x4fda113aaea47d076c68ac19ec0010e105500655dc003dfe37ee97cc52feb7eb -0xa212eb85a12e3355a7ac4b59c9a024862beba3844092aeee63df032832dd08ec -0xa0d1c6ff0e71a47753d9afebcde3a5bcb68463b8509fa2e5e1910c166e5fa488 -0xd783a4efdb79c2acbfdcfacc39b5776c0610f91ab593a7875f8361fd33951bb6 -0x888bb3ff48b7ccd63135afd95eea89974a5b50f322274c18bab97b16501c21d4 -0x2e1d676827918b057fc204c382ff292bc21b5b1211c7544d34caa0740b906e02 -0x9a7d40ca1e44aa4656b42bfd631550f36b02ed6443b4713e396aa0e77b377cb1 -0xc5557c70fb254e18e4fddc291391dbd267503b3e34cd76eacffa3a23be9f7914 -0xcb0e8bae16bb00a89080f43ed289c2b673d54bd095b860de9e2807aedb0903b1 -0xc466b9974875ce302e93885bf86c3e85f9012dee4eb4ef3a61ae003c42084ede -0x157fae06f9b44b365d021f75a23d9409f88e09fb0d8624918ec8ee7733313381 -0xe9c63c11c9416f23f9e106795318a58aaa35a99461efac7ba81ee35b4fe60435 -0xc30c705b443b01df4691ac35a32b538c259d722becf248f47d1c44b9116dc8d9 -0x4f557286575f30da5fc18edc904b2cbbf18b77639d8596fb9fc8d9fb338b8b17 -0xa602a27400ac2debb264a1ba3499a40cc91671d5a4edde4fb711a72ad38991fb -0xda3b5e7fe6cc2146c3ce7a97d7127a448a1f9b837622b95922f52084f23fa284 -0x9db9af65265c4fb102fbf93936813ebdb4d407c30e8f79b6a2cd321683b0601f -0x1b85f98774e536fad87a2f6b9200d3e0cea799c435344eb561acd3d2101a3aca -0xafdeb5a29ea68498b23ffa8707ab66d22411c4f80465f47db26014bf031717a3 -0x1a285ad6e5f4600c6b09096ce5b1f602271c3b4326ea845ecccf157f23c3cb57 -0x387d8cc0754752e7fd48139df1c5803f9ffe524b295c93ba61e8e88eecdd248c -0xbe1879741b72d0289d48678b1cc8692c32a76e707dfbf111544e199fd44ee193 -0xcf61009cdb174f1e64a0ef1be1ccce5d50935ebccfc6746e6ca54f5b2e73f238 -0x3faa4888e1bf13aeda349d9779f8cab57ae09e43916a977ae162fe53fc7749d9 -0x80a0540a5b5986df66c82daaaf101b9aa104cd47c8234f805b081dff3b5ecba7 -0x5846109a9a587d226373e2190edf6d89a9955334b04a830d70290b354e8ef4e2 -0x71c982139d8cbc92fa5958e3e11c88da1fbb0aa3947059443e3da6de95627934 -0x5756fd35661a0c4dd2ceea63dd04ef09bf020d084ae39bb0335dee5a51a575f6 -0xe88d5f667bf32050315e1c25478c190db60ecfeeb1ee90b239e8193edbcc1fd6 -0x9658bcefd60857240275b86a61ba90623ff0c8d6f6a3fc5b5ab8368617f0165e -0x9d4bbb8cb4e31923c5756152c006b2ecdac71516db4106c7de12acbf6903f1b6 -0xd8e17af0b87787451836e34a55a29cb61b009bb554128a1c98b1a319b14351ff -0x008c130c9d5c907dd61bea8390c4f6738cf2fedc4395324c2acab6f0c2ac380e -0xc676cdb6265b6cd9321677ca261a314fd58de1ea1539f4de15eb59c8d71f6ec8 -0xbba8ec16d5a1ad53c80778a9c30f2427b28bdeae5dbbc8e031f7aaecee5c86a6 -0x2e7f8ca381b7dc8eb7ec2eeb7f78f8f6db76d75db7dadd42ef3dff67da681bda -0x2c585cb9db584acda5410f5955a3041ec2c5913edb5c645f4a48baf1698e3176 -0xb75704b96e75b4e6cf6ed8b0c6ca926b0e59e4b82e47e1b32bc9a1f41c4e3cc9 -0xb15de520a0892bd6a9f686b127e35e0b53b40c22bfe01270378e2c60d6d30137 -0x5fd10f0673974fba6169b310024cb1ff258e1ad90d3a70bad2c188bb7a070338 -0xc5c31c4f9626bb8094f5195be564ed964031403247f5f110bc9e30dc1af88b2a -0xd3aa5e418e73d626afec94a5dccbd83929639ff204677c1100d06ba8541c2e2a -0x88c3b274017f3d7d1051d5e12f537fd47aee3ba2fb5b936dec99b52bae672ed2 -0x558301a28a275d524d391efa4a52b28a37d8aad3c00d381da4ca9d5e2b2e01c3 -0x09ab7ad7d0349e693096f39921b9895d8a8eb918c4a82596cda3e4722dbad03b -0x5f36c8c0a17f302d4979b76bb778134f6c6de9703f697c928ac7d8bbe52037db -0x738978f4f71ef440a36fc244e0a2a65742056153104fe04eb96d3858fda726fe -0x14b015abb2caf8b1813bbf735fe4405b4c4affc0019271672f4dd3df7cf98722 -0x01efc6ee3b91f5ca7558c8fe278a8945188b5b068d0bc2c5b1952305039db5d0 -0x21c3e6fec38936a2e6b25eec8c62e7751872925bb4f86775da592090c9e6c1c2 -0xb9fd4c44073f83d80e81d46c435ab0f86bb530a6ae9b17795831a9f5f4e406cf -0xce3d08459d081c0ccc60b7dcec8ab33d22dd6ff2692c459938a719dec3b020ff -0xf3a687987078398851f23fb60f1fec32bfa22528d35bccce9fe161baf6039ac8 -0x78c07f1a5a5d2eb8749e26371b622aea15a129a60202923736a6705cf5af4b00 -0xf79e442f9a1077d5f7f85319ff2b87bb474eb3a96a12e0ceb4e6eaec4f2c8738 -0x0a67fc9b8aab734d1240879f7747d2a75287a521e144605fa2c1438773f88560 -0x1e546d543137d7e5037f5d70144db54e2e82a93936d863f3a1c68f6b418032ad -0xcf2041bfb31dc285280351fbe6194a1fff5bca630730d6bc7f8ce482b9735d82 -0xebf322b1a5576c93acd91d941102ee0d70c5a8a52a83463becf1192a9179e681 -0x01d0ad272df65b2b495bfb3e748dfde6358cf046373e89702e42367ecdc318d1 -0x3cc3ca2b915f5842063955d18c3739e136c9354704471be001e95501a4314c28 -0x287cce99a5d571e8d5ceb1272680311e7e8829790f7855240031d7519e4c4dbc -0xe4fddc4cb87c32b3404e6aaa4032f351ab2726851d0f44ef9c8c165708a664cc -0x64e6866ab8be9f69113ec6c9f577c280781ce1ad38ee5792df9501def09e746b -0xd61390a5274f48f03c1e1dd243828cee3a03f0eb1e119168febeb056c20098b7 -0x71dda00ec1e90253322d743db69eecc9238891b533055d32f0a254d36bb2b5b8 -0xdab40f71c5e4c4659e5bae087b4142f1204c394de429b95d668a019dfab6ff24 -0x3ecfe9e1bbb1c46a195413352ff2a7fe79d92123058523986ee4b09b0f1085e5 -0xf4d270b4bb90c9a78ed674e8774248e6f9b6333c3a051c5847470329dd61a854 -0x612340444358fc0f9d6eb5def78f4acd93422fc35713b9e62ea8f1fa62189500 -0x50b7f850bee629dfec0143e3aea744a11bf033b73fe33078bb395319f7a73d11 -0xac4c722527588aad50e55321be301a0b69d3273a8b2a701b61f8112ba0faf86c -0xbfffad292a6ca57a10c0f6d2d4be16dd3fa7fa4290c6d0597a001c9c8424bf65 -0xe7943d922194569cd1e16bd1d5ff5c8f930d5bdf1fc84e60f97c54eb35ad7d1c -0x3ece96db7c6327091a48fb2de8814a4b0df7a95ce7cec2be24268e706bd6e3b0 -0x8a7b25afe12958e332d8a0defd90272c6bf04a6b3107fbcd6c72282860d12155 -0x48c9611317fd58e133d834e429d57af2dca4feeab8d9c436c3313bf0c101211c -0x8d474035d7628c3af65a95467753921c2c36fb0a4f4401bbcc554972ea798df9 -0x07ff2f758df1b95801e3e44b9fa644ce1b0e590bdde1892e1bb9630267a2ee9e -0x19e150f7dffd8cb441d261af0107c51bfb7f56446a201de78e1a75c54bc3bbbf -0x2db5ddd762f139f3be2a8386f3adad025397b3c28134de4182f9efc8f3f83f75 -0x512843f494e6aefe817305a19f7aa3c275ca224baeb321f1fec4c658e1f2d688 -0x22278662aa95e7bbe1329b3e19c42e959b202f5fe23f9b739c0ec886e000e311 -0x2c3f5381c489e056602eb19b6ad93d4004666a3dc49abc33ebe39c5e235dc1ad -0xcdc2801d9a5cb558025ffa6771753b4eb8b3208d6bfee7ddac7943c1de63c2b3 -0xc3d74a33e92c94682eb3e42c59fcce719756c71746eb1da2f6f8568415daad7a -0xe4d5bec0e19e120afed762b1bcabb667e72331a3ccd6fd5739562a155a849560 -0xeba417587842b72962f1802eaa35d09adeb38dea4a1c6bb3dd5fe468576fa974 -0xec93ec16b5861da1d16d5dfdac52e7c306dacb533fe5c2947c7da71fba9724c9 -0xb3f3ae3fe3316ad7a5c761abd7378749060c94085aadb7721cfea2d0a5f9ec06 -0xbf70ac03b1a161aeb6a7f5b843e3e39ba680f3c307658f1a8cb10542e5fd76ef -0x1d198f66218bf828960b1742faac7eb17b85abb1239e8bbf52f5e2043c0531cc -0x20a695a1dad4fea7b15b8b50dc57959c042fa0306dc5d9022ab5dd0223a3bfc4 -0xebd57ef0339a1ca3dc16b6f9dc8de6e6f314a420c4368129b8fe8491416878be -0xb0ae5c9c70221fe0c373b4d94478a12b48fb42abe885151e22e431558bac13de -0x3d9e05660ba452b7bafbe2ebad8be89bfe0b9eafc133cfe0bcf14d933776401d -0x82e88dd1184e1d3e5ef67aacf28cd5fbf6fbc2f56e99fe49d7d01b84178ddb0b -0x8c1f28d9b829afbd102283d64e53f351beea1208a5515dfdd7a2ac299ab55087 -0x02ebeea732049ac9440d4f2bd34d387a49ab2390b46ae27dc8637357c5404c95 -0xf5624360891757f1a21a1625d39ef0717344862402e9565503f326b60bb406ee -0xae2562da80ed7fb1194ff9b005286a08fc532b547bdf3e81f29560b5cff732e5 -0x0551c8be4ca83d3296a721b29b4d8c4c7eb146c361fcea627b729b0146322f31 -0x989f52bc5f8db9f634263aa5fed3864fe44f65a823f6002010a6e7fb8bb9dad7 -0xcbf3316e8f99de168cef0c549e949c1c9e3f5aabdf8ac6de4f765de54e5894e0 -0x76793bf302a676e6b77566bf946297c06d6a1dac6963096730d7c11f30094469 -0xb657e0c2f3f6545ef84bb97836ba02853f20498a8856edcd5261160c64814a1e -0x36bf166d9eeff74fbeedb44bc36d517868ed9edf44756f2f660a38a29b4f49d7 -0x23f2c025afff773c86d32e21a8dd469490035d6c26cbd7250528074472e1e2b6 -0x46e810ceedff66fa6402dba62a4875331b322bb1eaacda1ea33019bc62dcf5d7 -0x9909abff17add2092b87dae8d0cd8aadcdd238630842e4bb9a36523763a5a23c -0x5c767888e88993677be88a9a0a9567ff95d13797ecee1c502dd45d10e6c11bfe -0x774eb2b60fed8177d82790fcf51df767ebf67b43e81df291ba59bd4b8bfd9eff -0xb0171ece36258af9754471cea093379d7530ee1a2ed39ad54c0f8634bee63f99 -0xf617c2b59be977fdf1326c6fecfbc8ccebf3061dce637e0aa780b856550ca3f8 -0x60625cbdfeaab731fcb69da8c17534dfb6ff0a7c5449eca001996c75ab241f8d -0x0a7190eaf0c2b67dc7f9ab100270af06216e9a193ad0d1af079857ca23b1d439 -0xaf0472f468b2d3dc7825b4bf0073190abb4a2cfedf5c10bc4920d58af6de4a9c -0xef5d92f692c15b749189746b4d9c201c62c4ac4319c6fe2f84cb990c4c3fa3a5 -0x5cc94dbe376a84abf49ecb723a5c08709fd2456191b1187d53bbd0a9e64ca4d2 -0xd8d39458a96b6e088e10b1311977d2519560c1953d02f22aa1ed08a1b5c3f794 -0x902ea048c7271ee99eadfdaa389c36c3b1eaae501fc90d403721fdd644ab1efa -0xd86690c28c60454f67f92dcd66375f0512eb1ef27e966a3e9a7f058b67e87e81 -0xc8d337f70fab7378ee6976a6213ad3685b5d189cffad8e264cb9f7d10ee20782 -0xeb908f612f67c40367526faeb4779897a08c0b048aac5da806bb4f0103d8c061 -0xd62843e798bf8e8af928610404eb75fcd968735705edbe36253b79ed053270f8 -0x53cf5a4e1b8bb5087b2e555fc3e3fb0961f986e7cc17c713a5743eaaadbe7323 -0x93965e4d2a654733c2fe9025c8a910b5e604d59023401c04acbb0905368b31b2 -0x5264818935e2d1abd912cca0825b544b1ec3315f01d2884573eea30651deb58a -0xa462890c83bec68f788357778802b055afb2e88f1d19d6a67012eca58e438807 -0xfb90ad6fd5b20b7d0902ac3d7881a7c250c35cafaf430a8f14a3e32bd589cb72 -0x242bf24575cbd1610144fcb45362f69508e74aaa00b2e262b06a2f54c9b70ac1 -0xb4ead6c5dfd6d3102dfa8102b5bce165c05966d6c6471c6ce75f617d21037052 -0x8e9ab5367698e0fcbbdcbe74dd820d56b16d02d5181d1676250c6f0715cacda4 -0x7da5242eb7eced3d8d82deaa1f66ff8127168391a2e12d9599d3631ba7b9e014 -0x216e35447fc36b5dd81e0de585bc4e3565ad1d295fc1eab92b3931cdc379bba8 -0xad04e364f25c5d5d3fc1fa904a95f457d9b4c5834b98795ddd981614450a468e -0xe5da839ed320f81ae94bf119216502e1b38730c83203387cff648aebb468780f -0x9b6784ed85c8af4312d11bd12c40af708870cff5f406191b9fa12b3e9a46206d -0x9d44a5548e0832adddb9215f973b79519b21912dcd94ebcf7852aa33ca53d938 -0xdc263ff9480e235eedeb86a6aa9073c404786aaf9ecd7e027116d9dbde700016 -0x738d1fc994689c728126d2fa17a1f2dad764c4f6e8af6f3571496f9f785a49c6 -0xdf43d589a9537e69b553d9d66a84bf162487398fc92f6e9df3f0f380a6fba2c9 -0xc391396511d32d0b3d4b59feef8b9ef709a99d9226941acd0da60f1d302bc7f9 -0x1d1c57b402fbc3333a8718abe4e24abc47dfbf7741cb1e9713e972eed1cb4d24 -0x3fb45af8f2440ab5e9cd24525c54e27534f6b77c022c850ed3ec9203ab9699bd -0x1374d1141700aed9a983743a1d0720d9b1338035535b776caaf1e2e13dff0024 -0xea42498cb823509f6c6955621fa2d0fd333c9f73b69b0dc013c1261dfe37113b -0x5cfb8b26fb78d739ebbb6626e86109b3ac35bde330da07475d7efb1e245e95cf -0x5fa524ae7867a9a3e1f8934c5ee56222a437d00f74d98b47ccee32d6f4c77996 -0x2186667ba321ddb87029a0e1fb949ccb643e5d8f7efeb63f11c95cf76bfa9439 -0x26e72b3cd96a15003574ca9f2bfd26d4ac5b292af4260a32b50dfbb13c1d1edc -0xf71f22628999a7f4124f86ea7063d27d5906952a58f48149604082cba84f7dce -0xb393e7973c3aeb7c7ff9b4a568f12d753cdac0aea359c8ae03d68d277425419b -0xdde215af6a4b01095cce23dad389b4f9211fdc7f28f22a6c2d4bdfd593aa43a3 -0x9011b101e1fad98bf009c4bdd05d97fc7749502db663f1bd7ac7395a5621e097 -0xf1876884b3406f3546375d85f9b0c3df3ea553b671acbac3b8be9b2c800f3232 -0x606c82ccf060e61ca18bf92473fa8c7408bb87c85c68f7dce2e6b8d83ba5d0f7 -0xd1cc135501ad29444654363ef2b8ad962852f53f6d6f6e3e9462741f0477c0df -0x638e1e490b4faf9ce2cd7c32d9c6ad1e5104bd156b586e177957937b15aec25d -0xce626b12b272b6da3db9559faac0a0c502f307e3d291fb80405d0f1b286bee0d -0x5b822fb41cd74b56ec7e429164ebc6e5a337d32c1632f24240e5f71aee2b2368 -0x033cddb254a02e941319f9130bd22ccfb8814717a406a0e05a6e0e8954488022 -0xeab110258747fac18a629ff454ccd227c132c093722e39140087485f43b6ad73 -0x380759471d4b9f08a613e7e38de217a287d6637475dca9da004d33131ccaf7e4 -0xb09393e7f79f62a5998469a289584df9df69ca8a3f73a58b160f52c435409eb9 -0xb2b4036bfbd7d7ddf09817eae465ef5a05b25dba4b6f3fd593c856fb92c86d5c -0x5b538ca19e74961804319eee1e23cd35e79a3347916e5a7ae5dc04ccd7f60a8d -0x749aba596dc26205f3008d56f08d01bd6e083e7de8d487e92f58f618e89c9f8c -0xadba274f322d68958318a6c10ee66e19ba33bc255a20c34aacaf100571883fb9 -0x59f55ea261836b597c471b63c557cad4c4f7621bfa16faac7711d598bd4f98ae -0xc0578bf3fbe3d04fe7a9a2f19588556ba455bbc92c5dd3a09424b9d661f8833f -0x47f4d26132e835725709ac07c60dd715d3a9d6cdf518c692103d94e2385982f6 -0xa208ab04a8abb65fb8d9fdf8a40eb79a3d4dd97a07a3f1b9d57e8b479724ea16 -0x1d9a4330d364b8ad72de4e75a398307808982bc9e13534d2022720a171ff904f -0x0afde8b843497f6e0114eab44100f6c3276f57d67f746802d49262add7d0d9a3 -0x697ed733ce3ed70aeea064a014d7e150aa887202f92b34ff2dfad12e5c6b30d0 -0xf520a743415ce94217073ecc086846f7924f316d512544fa1a019826503d2305 -0xda6030a71d75c0aba160093f23b00b6a133c4b5cf77f545f927cf1d43a662a62 -0x6c7a7b1974b6c03eb803ef6264f9201eed59518227cde221ac0b7bfe1ffac4eb -0xfe6467829cfec8b0b3aeaad4bd1183b3979f7c5fa8cc527eb2d62193d9ab7911 -0xc8c2cf58f3d735aa7bb70fa6736210defd56eaf5ff650c4914068cc296687ed6 -0xba50ca7d3e22b523dd2ad5c49c9e4b30cbf0bb7c15013f8d5fb0960b5488030e -0x65f254cc435d506509d9d0090dbaa88a403046fcfa017bc37a53dd908669c9bd -0x96baa5ab6b69008c27e20bce4ad1df0e3e905135a904e06115d5adf9cce7b456 -0x0b713d5c010b7305d995539e5eb97b6c457da54d62de2001c5dc56fa96b34082 -0x7545d13e59eed40f69800181280ad58dfe5f15ebebb829aeaf163fbda4b427fa -0x09166d23273e55d108a876ca275e9ae38ae9d71ba55db992ab558035189b8581 -0xd02c677e6b2b84014135b8fc7e10f6a065a10e3b3f3c7af826a3f85df2b11a90 -0xa0815d8b5eca86601ea8f822f64b9cce6d4525eb8be6aee77eb31c5df603a23f -0xe2b4667909ddad637e622296c0f21a9d4dd623c9ec3440e28ab23f400dab86d8 -0x5d62f7a5f72e055e380f3196f12025a4fcf048e06d8c665603bb859ff71ec489 -0x9494acf90c5175f891ffff5abeb6d7589a2aee5834e8a2700ab38f1ba7c7e1ba -0xa3f49034830370358ecbe50c843c9e5e3e69e3449a1c967b0aad994baaae3c9d -0x477c31410bc56a30e03858eeadb907d45fe6ba4fa6b528ce800efa6d66ed1747 -0x1dba7a254d685e6c033397062d8c542ed6633e7151b8b280c5b5dbf1aba1af47 -0x57e7a755a042082da8d922a3f0fdde69ddc09f7ca137068f714b784db36a7d59 -0x70391db8ea249534cd7ae99808f1720dd62c9de1d07291e694fede72e0812df1 -0xcf7388cdc58e58eae2a48447e64feed1938a746d56fe277cbfd90d951cfb957a -0xb2c13a7a1160035606c2a9586590c4d18d49e39566a5a5f77718347c159d7264 -0xee9f217e479d74d2e41d37d284bb5134329e20d2262519d9fab4278b62b82092 -0x969752c4b216b4e940e0d79ed4cdb0310511fdba0f2e9026770935f34a231ab1 -0x60ec16d0c89197edf85ecaf573f7d5f844c3571d5bcd31397407959fde783503 -0x4497a8969b53bae4f506003761cbe2b7bcc234f8c2883db87a84c76dcc843022 -0xff59ababe151cc82a5be6669faf5ea48d1198b4cfe3992cc8852a787b2427f76 -0x13fddb8e5dd3629608237f4bd58a223ebcbb9cf4806774cf148a94a7834e10f4 -0x4405206ff1c6da6ee733438a6a211e4711109678815311c919669e9d7487946d -0x02a3f5e9c2ef6815e429215c744abb85b6038752a85f95876663018fbc40ed3d -0xd6fbb3eb74d9c030740769b32c906a7b6cc0bf641354d57ae99c6a189a5fe866 -0x5f1093328109403e380197146490de6568ee3803b40385e94243484cfd48e847 -0x0a4434aaa0096f9482759701064c6b34faf8e72f1ed3a5df5bcc0b82c466294a -0x503714a69feb43f43a391bd6c32c72b25bac3737920bf1649c0cbcc6c6e71c4a -0xab4340f26d1e4af97947b18f1e3c5ac1aa62abe8699925022e76d339c4a523be -0x71625d8de5c90ad8107626c4ceda4a6ad470cc98bdb56436efdf69a06699e039 -0x4277dc47b87e225ff3b925a74c4bca49ef873aa737463b48fc2320d028aee8e6 -0xe8ee8fedf8d22c6660d32d9474d1b6b4fbd18ab1af6f902b300a0107a8a3cacb -0x35d32f408d46eb40df79a55b90eb0b87df91f4036f59ab5c632ef9a4c6e96c89 -0xb6a122ebf9f98b8dda831753e53a07f140f66b94730ddd3a5d052babcf20b31e -0xadbc8e488475e310521457cd2ce4dbd81cef790dae5430de1b019b4055ed0941 -0xc8231515150e255ae475305935d161966618ffd1d4895f1ca78d9ee7fae11c26 -0x3eaa47fc3c6a21af320f8fca0d449580c937786b0344b70bed567efaac9dbe74 -0x9f92fcadcf37a62b418309e7addc3354a5e9130723c5d51e3a3b64815a6154d0 -0x8b44e8f9b6675ebc23e0908d586da9022f0e2f0693539e67e8181071e443ec6a -0x54c51bb24545150dc6513f3c1b19139c8cbe1d584a0d654a92ca2104ea815775 -0xd27f93bd6ce06cc299d371841950bb8d58b42b05c7fd2dcec8b5caebdc60bc7a -0x6a9b0d06422137ef1be8388a161bde6c147a69d706eab12b30acd516214a1f68 -0x9148a67b1a367ee2719a0f8d16601c38d9334ac02c6705084c8ec2e3a05ccd0d -0xe94f257c5b7bfc402782c41e014db74c9967948d39fd42f928c51bc0544f7a04 -0x2d24706fbc6cb318590932d1fbcbf6711236bfe3b4b8d0fce3d71d48321df3a9 -0x74a14a6b663be564aacf0f7af52334787dc07c7b2cd770b05dfbe8224563bd38 -0xb5b19305c338633e9e8361dd1570d6ed7367faf04cb739b46d13e8ce3008aa18 -0x43e9c771111d4f41821cf52df953f20a1723e92045e4b4e295b09b981d1a433c -0xb40eb9d169147e22d382ed78acabaf810efbdd1ad4f22cb73f84482e5e156d88 -0x35b58ca8463bead6b8b19b03a3059a452f34c4f66308a3cd9a2966ecd41f041c -0x3ea0fb0aa0356e66ca9fa04bf51fc6eb052842b9be91ef86b7619e70e931396e -0xaa96cf57e02bc2a7bcf6d793d13f2f46ae3f29bedf6f6478fc8e1da1e158ec0d -0x4ac2b9e2a3537a90ca613e977c0a38d8733d90c72fd28016ebf56826adcf2d99 -0xe0bcc7fc393e1f619808350fd7a46a830c63114a8bb13e4c5f0bba992cef8459 -0x0b2ae61f31f100a45bf406ac4af26a63cc26318913090b3017f5b7033d4e034f -0x4beed2be11c05d61532f24de5d0396f4570701a16c1eaf364342b6f1f1717d98 -0x51a4465612e057dc9bb8b1a09c86f6010029a4b4c6825e68a42b7bc1d96e8ada -0x3b511b292188e8d932cc1e682e1ba27cc75a72c041f98f8742817a8ef2771fff -0xf0b2264b9cc2ea56cd9d6ac7a47fbe6a1026c0d50e1a8be733f4570b5a2b91fc -0x2d4b8ecbdb8b76d2c8c9e8d2b6fded8a02dfa9ff8fbde676ed25cf1272962703 -0xab8fdd4860cbded0689dbfac95dee26fb8b8d1189a04f5d1549e42b75fcee3da -0x00ee1064bd0a8e4a56e97d785630492a6e44473b46bbed618c2caa5d06c445af -0xcf6396df04a53fc8375f5c7285220f731812dcef3eb4af3a1186336603f1e22d -0xe49a01d0b17314833d84f5b7886743f883929678345465cde1fdadc0def3581a -0x78f6d07dc63b9e89deae685690ae8bb95f413101c7cfdf7ea1f79d530f33b917 -0x7cb74450e5962e5123e20152f36677addd0d520ae53267deb017be5b18476d9f -0xd6591b78c4e0b00b637bdfd60a4b88c012c0833fedb986247acd97e6b8da5eac -0x84c505aa3a42596a7fc90f8c5f992fd27ba7dae79c6a27a26d823450cf566c3c -0xa64ac110ab4ff63649f8b063348fd8657170266610000ec569cc3e16287a5993 -0x84a265d644db3a50d8ae50eff7196083489614bae8a6ff21422c32c7b4a9c026 -0x6a1e94fb84919575b0fce9c4f6ac963b3ffd2f9ef1fd70c37131ce4fc9f317d2 -0x524bae8b1a79983e5a74aaf57476e2b1bce24bf645ec5a90ad2c5dc83be8a115 -0xc651149405fa09ddbc7a207110f1ae83c19ca04af978d7694dc4129641ae531c -0x915e71a4e6d62303f29cbe51aa2027784d0bcc104206617455f4eb8e4669efac -0x8ab046988ba417147e484c5fd3896e69d29788e3b27f86f79da5823da9021c95 -0x4206f09ddc93094dddf2d6590cb4eca78970fd205571076930de31370c5c4ac2 -0x6abadc898cd4c2694704f955700979a800b7cd8abfc4a2a0e374c322734525d2 -0xb7a19bbdee8dd46b1f1a85aca43e5580b9968e445c61296f3f4ed443e58e3731 -0xc36901b8dc3e215c114f0e75be7007a2c37fbfaa7e77a95a1a6a66a249e61325 -0x68513e161518bec3e4db91bfa0cfc83711611576f1b13e2198c5391e9805d556 -0xd197ac4405eb69b31fcfc21bed5e0e35d48ce77ba70b6154bdb399d9805debd1 -0x0d548e7d4a1ea7bbff4c9f164be7147830d08f271fe2e0f25900f96253bcf1ea -0x0af0c65e59c88814a62cea5a6037ac04c00ba1b22185497b622fd187d6586363 -0x7b3fa404201fca713b0c42686cc1977828db155800fdbaef9cbd4a6b86e30ccb -0x277f9da8e957485263fa156c3b74bea2e6e4ca3391069f04820c36c412272b48 -0x0b7dd43d2ebe09346338ba88026074fac58f43ca50bba0c8564534e9a0a8507d -0x901061d59c3127bca8b7137c101f5f286f4f5bb24b7c6c61ef3cc8ba3b0797d6 -0x0ff4dbf971c260ccd5c0d14b4a96650f0e5af9441ca5e0b3429fbb04be405d54 -0x3966b643f9678f54d4a0e67b665440743ad16b8fb2210f8c02cd5dcd1bfb6aaa -0x16e477e0b6bddbcf990996f807481f4a80666872558e50814390a0076f04aa96 -0x6e59a56cd10a457e2815b77969c0c259e786cbe9134ecdc230b6cebafcc824fd -0xb68d014ea13a989017af50a76929b72d09804fce0dc43f5623fe4c509660f540 -0x0fbde85d9731fc90fc4afdaf1bddffd956cbe508fc6dfbd4e9576dfcad28c2af -0x65080632134f88b840c8bb2a60fac4c9b551c468bd0813e1126f90ca0c075f79 -0xe0f078b319f29b01814eaa1323c2e30bd8a2eccc1541692f82a796b9b36cc467 -0xa0da2e2108002bfd8fd53fa4db3d5d208cd39bdec9a1c4bde28345a5fdaef88a -0x80f210c59c29efedd180db0ca50a0b69cc8135b8a7b3b9b08b680096b5489bf3 -0xaf1e85c7caa366abf50d364e84b764818ac8edb498061483acd65853aa3f5d4a -0xa74a5707ec280a9596920972445f9bea3cfbd74794d8a9983006156e353f92be -0xd1c32bcb9a413161c826e8449ca792f306470dd78d2b4b2e570435f8114b64fb -0x040278f3501b3db058b4d67ad5e4613e588c6dd6e62e01c23c2fd9f16dfd572f -0x1b1639babe5856a73577b63fd2426421c1220c741c1aa7f3379d0ea02082c7e8 -0x323b63f617948f73f7b4a81456919102cf4e8f8bd38992f63134d7c14d688e94 -0xeec2e48ba16c4f25d0be5623e53b20a51e892d9f1c184aa3886160a3b7733c4d -0x480e9a85b52e496ce92e835ffe9d105f5541a3e1911d92805cf7a206498e99a8 -0xcedae7f4d44558524255b8b85972ae75ad952147683ebc2f9ddd89d7a3d43685 -0x3f8033aabb85b9de632b71d7ca16774a8abed67b985637e03e597c0295501ad5 -0x726dd97da56fd317106a7b5af519d7b51295a1821ad7094c908f81e7c7f80444 -0x7566dac3181312b1c77cdc77cfb62308f71b1bcdde7fe99bcc3df0d1b7d4a75e -0x2cf69ae89dbe070b61426486184a797a30346b5c90a65f4438ae87d8341ae0da -0xe0a5deb78dd5637ec2dd6e05f250bc4b6b036130618695699b5265fab9e42180 -0x709a01636db5f68d3285d2e596d6aeadc147fa2e50e9a564526b0cf0bd818727 -0x3e96affa6d3cac24f6bae3e676d10e49c9fe48093422de2b2942618ad492336d -0x7220d8b925b9f7e7096774576722a650dc858014d5e464a125dbe9ed9d8fd612 -0xdff5a9f1f64338a963db6237f2be2161e9d894187994eb88c7094c75cb12f67b -0x8b0819d23dcfad63c7480639d8eb111292b9a93072021b8955b6962be808a14b -0x0ec52e025ed20571339bec3c6dfd45f863a626cb5672d096008f5e6705159756 -0x3c5aee22a0ada243b87fc492c35e9f2eac1434f422095a7f828b279366924d27 -0xe6c00343ad51ba432e8efb547bd41a1f3ae19c9106da047770640a054e24c69a -0x63285884a74c1254c010f5a951b12217b0ca42714ff3504f513ba1eeeab65b9b -0xdc8662d76c7c99dd313185b23960017559ce38c83b8321b237a30ce6c1e841e3 -0x620ae41b297920156cbeea115c5b50b2216c4de143e7c427fce324a00389eb03 -0x61163dcd5beac7fe1a1521701d66e6216c8814c3ae03158bd808de006d9ac230 -0x834a4706bcb675bcede21d27daf2ffcd89a3ea7095c0fd2501652f28d4417c20 -0xfb3822acdf5b8606eb526f148d96542552dfceeb6eece96c2f89924618c2294c -0x3de77ce0d9dd7c9c9236d265714be193ea652765534ab1c0f3d6fd6bb4d6ff84 -0x9a032f71ec5d6cfed58812acbc028df07e7078c9728d0fccea049276dc95ff85 -0xa0b0aac240c61187108d678538844e13ce22d77a3b4e6a986cc1ed6993b4e71e -0xd9620b29646f1858b6f50adc4d792cc6ca1398a4066e8dad503f4e25030df548 -0xc7da30b745bd44448a8ad65065a125c31f088e5ada419629d6e9b72db05956e9 -0x09e1f1129fa26770aab78348e2d06d0d0908e0dd26dc8bd29a195a97925ad87f -0xb748c76da215197386cea3681d24df2f748f607146403623c57ce349708a9fb0 -0x432e97fe4a2b38288ee1b2840b68968ec1c312e5ea8c3fd673b0368978513fd1 -0x5e30e766a065f70abf36984999074d3a7de5f5d68d938ad6d910f4ad3a8b5450 -0x85c3335067ed5a69cae2fa56a84d2b541afbbcb212d40117c53a53fc945c38b3 -0xfc7d9367cf266ff559821115fab5798f60e20192a50e17d86bf0ab2ef4a6f5a6 -0x6c78e60aaf0966017a28b1c8b45e4977356e001927485c44fe93bb9e8e150022 -0xa9d842fe784f3f765750a89454547524d0f87d9078f44982e00e76cd8c6d39fe -0x1e08aaeb1a2b90b3ec5b06895b6de167ca734601b0973663db422d1ae8938612 -0x441fc02bcfdcdb22727df953b86f6dc5353e92fd68945539d082aa91ce2e31ce -0xca1a1e05025a0d8cd76a9a5d72463b796209798079bb51c2c7357474dd30c7b7 -0xa122dcaa71cf3d413f4719bca81897421c5db5b5fb248ee6202fc3d034af1219 -0x5fa4009e2c3849a37ac1206f05c62b5b13b9eec41c71fdb6c39e0cc4e3ce14e3 -0x20988743c2e1bb7e493833c04afe3d11b4fe96d26b65684ddbdbe3b32c916512 -0xad1980e3f65af9d09f0d45debe232f6334c5d31970c6378ff92d905261c32935 -0xddddbc76b164711b28033608d0f831653d8f5d3670d99ad97a2958baaeeadb5a -0x0ef8cd9551cdb2b77e06b6b30d8eb08353cfcd1d4692459c53f7528d3547a7a4 -0x086893f4ffbfee84c5d6cff472ec892fe31a94e83f429ecb32d7797e8d17fd3b -0xa35f9bf10925bf33aa6be412967aeb60dc87ddc6e47ae5afc6c4d00f2a9f24cc -0xb989792da9cb0bfd2c64d6a438857bdfa5c30e33acb917dee0fd9ce58076230d -0x43d272f17c92f8e24755e5770017bffcf1dd2c32b21001dae70c67a4858048b4 -0xcdfc4d3fd34ebc98fc561a33e49b39cb4599d022a0517dcc61ab9f24179931bb -0x926bd722e104dedf57b6065b758ed36d5a761739f6accdc0f62ccc283b717ed4 -0x12e382d28f67372cbbd4770497995d5766e240e827b2a02b74c63545036d23a7 -0x9ce4131e3c3e9a9899391518803db771c8d729940599fd7139e87664f53e9f9b -0x8b873d6a5836d7aa9998019c16d58bbea0533428783a3899da94ba7a75a2a321 -0x2f3a040735646151b6ed4acadf7b8f60f6520a33c0d1779917f193d6b3018a14 -0x34287357be5eefca621d30b3db46fc44fe34dc018d29595f26057ebd99866c67 -0x506316c905f05f28f0eac25433ffa2e2b628868a7fffad4dd09c42adba8e2e17 -0x17fe67fa5b3a560b29c4cc3d679862d3dc1d9a5197bee03ffb3cdeec4d2b0b9c -0x179f6677343c370a866ebe5f9aa4fe2acdf945486d55405e7ad4bbc1aa3900b9 -0xf1750c93efd9c03ef1b116c71867f432056aec42ed70e6426b4adbce8e6d7b59 -0x033b4941b0ccd713b758dd25fd584af24efd7b07029d88b90545ada3b945f718 -0x2663f3d6339a466f3cf76a8910dbb05f29272678cb191c5938c9a77d061a39d8 -0x83b14aef8d1da44961c272a0e75af4782b307a988fbceb6d7fef8096e95aaee3 -0xa036ab381d8e33a8491df9212706cefdefdb85c42c69795ac2638db53f4beea8 -0xc64301d62bdf0ec7496154db6273d27e3cc83b8d73a8f613b889327c5000992e -0x3064f0f2e7492c9c835b86fe6cd036866e4cd0a28bb7bfa85952556779c8dd35 -0x3d9e9d5a21141a4c119ca8a04faf539031a34e6a9cd4791b0bcddae0974d376e -0x353a251f95f4034875d56cbe48008f9e50f755b3a52f7b4d2ad1dd966d6cdef2 -0x49b43dded838eaecbea84c25e01f48bda3333783fbf6fbebee6f01cd573f8a6f -0xd480a389fe9a828fb8009fb2767f1152d5cceaf1453f052243d07fb2f56a4fc8 -0xc0449ec69f19ce46840c2ef25b8c977914e5f18330f25c4c7a7d6052af554afe -0xeada1e612394726398628e09a35f91adfb578cef6f2dd5cf6fe5801a5f871953 -0xb2b04097cae0618b3d44a57a059cfe3270be923fed5d2dad932aee2fa13aad6c -0xbf2b8a05f7b8d23c2ac1b94595933be9587c26bd45be3d19828985c9d3a2ed4a -0x3d212b340ff2c57d2bc371df0083d252a49de921087e2823ed754a0e5bb625e8 -0xaa74a687a5deccb9790607a8b2d5685bdaf97db6c54325c40f540899e596fa95 -0x3483ded58789ed41a359348768b51e8a3738d7a17cc9eba32e21d75fc3e9aeed -0x0ffa3130f498372183a973d6c2e8ff7d8bc62d205ba17d19e90894273439cd1f -0x8a54ed11d36f7cfc25ae59888365c3e6b617a80e180f60db395f047aedb4ad90 -0x5a168ea1193ef8cb8a2fd8cc4ea079afd9eedab3ecd7756413aa6c161f2801f2 -0x0750a5eb623f98d24163e1c383eb05ad57575545e85f040f8c30de603e6357c6 -0x886fff51fa6703e1f9ce7980205f9eb33199140375fc28c5f4a7e387632fdd53 -0x97287923a4da36d4f0238964c74fd66a5f09be05c2a58b36f171b9e7e078986d -0xd463abcef7e4447cc1c72af370e23a7f5f83c6c32da6a5659c7ddf70b39ea1af -0xfa50c2acedd349af8f0fceda87125a764cc3889e7742ffbed29ffbf08a0bcc3f -0xa3bd639aada598368b9541c7406840be4786e75ada125418e3a1beaf75d14d24 -0x5990bae52aa35c9ea50762e4bd068835f9343f2b979184c594d7f4d3507e2606 -0x99cf0b8b7a16bebf8083c3948256ea4ffec2a1efb10b21a4981015f7e8ea7489 -0x2182712a9fcd698daa6055eb3b490262b4b9832f3a382811b6074c2146890c15 -0x39dba3b3bf9d44fcc2dfd654ac5ce7aa7b56efd5206738b15c0dad1ec1e41128 -0x59fd183eb333e241a3048c4ffcf101e51d0ba23cf87d988845a1af36c1348a20 -0xdbbdcba28d42daeb5577f11be046d6308b08f1bb4493299dd571a2af710475cd -0x113c72b4a44756e5e18c23234459a04429807d189e4f84ec99a04ff2cdae74c7 -0x64ea608d4b1552079ce59e897a52a818c6d20ae2dcd9797d8f9d65b010c640c2 -0x5af5429c4812a214b236e5e9c9b8abc4467cbbd599285864167405e92c3580db -0xb69298961ed5c57e24eb4bbd9461df46a0f8b07fee0f1be115091ecee5385a95 -0xb0b74e921f5fbb29a6315b980276e1266aa910111ca700f4d35f21506d443a4a -0xf6f8829d44c351882197424d23a80ef867e2cc7d58e12a95cc642b21f9ee402d -0xeb05ee844139e4890afadf8b1f9f9fc249b76bcaf4f99d6206b1db66f68d78e5 -0x187878e829b46ea7b934c3e54ea0cb104726007bfc15eaddc55a8f27914c8b5d -0xa500496338145c6b066af143dad5a1caf54488ac41d91d233f6260b4b25ec783 -0xb7d06c3b07f3ca36e78bdb6a2eca1b9ce409f5516342d7aa5b3bd345cfc9ebb6 -0xfbdb1c01cc04dae6eb1b9eaefcfb1069d86fd9754f61762150421adf6fb58b0d -0x64a38dbbc98363c5c5ea2347dc64be189acd35b8a8dd95a79db2b7a3cfda9236 -0x9378a2ef7eeb203ef200eb50a23a3c5828cb669b199f310923c67d6e40cce27c -0xd4d562b4dcd61ad881d40948632d3bd3c14e2a0d65c923e624215782be3f28e5 -0xc8b53ad14c084f43980319d0f64ec3dad9580926432bd296e1622b7b1ea1344f -0x7598e0ef464c2867593c9761e35de47b4148d3a5aee68e68cab0ba0ed30711e5 -0x8010ac44e3354f9fdbdcd5724d11662b09f78d898a260d05558cdb67aa19155e -0x60543179fe0661d32e19b2ebf6d4018b19da7190c736b190ee0eb1f6692a67f9 -0x9bf50bd6941dabf483a840155a3ff6745789009df42845e1127893fae44910dc -0xf082ad0ab785669ccbad1b519cd42a70af160215cfd2860e196a9a03b8856089 -0x01483648a90be39705ecb075a1dc989237bbd51b7b0dea2171a1f6376ffcfd5e -0x70152be36bcbd0cceadda2ba0f91113381fcc04226a0d856a3bde9df210e6e7c -0x6d7bb118aaa407636f77127ea6afb5cbe801502cfe21fde48390fc964a0e2ea9 -0x760e692751200b13fa829d91bd1ba45556c1de86c6668ca1380219a75749babc -0x22db9eac01a64bead421dd3c330f3a8d625cab6dad635ead2b150a9a3d670bbe -0x77481d4b6db1af83c980c2c2a8e4f89c9f2bea94ff8e2bd018906dc957951640 -0x6cb342347c1d956011b905caf20ca0476f0698a903ec29b30bab604322673ebf -0x6cdda30a0368cd1076482ce52fdceffe90db73001d01b73060d2ba5b699f2f49 -0x39099fe3740c52a8aeeeb865ce7c1b44545521b8029a239df2dccc67109175fe -0x3cba98b4ef85a244fbb0701248d9e2bb660d54dbc8585847529c7b4980d72c1c -0x2ed35dfbc01f0e85f706eba6bb7685ab77f0f2c32e0662b2ec5c0c9674ba3f62 -0x4894502042366fabe390dc0d5002616f3d98b1cca74e01bda6bdadd5b3dc7a12 -0xdc22db056a9476bf1df5f701f920c7a80276d298afa5802f3258a610083f2390 -0xb1e291a56315e3690a1fe6a096e5c2179fec5b97f914236cd0c8454c50cd579e -0x579e047fa8c2eb84b7d12c8f3079df99d77f48d23661703f4619df46cd560a74 -0x0314e334104d83c01feef6334c37100e45f300e8f1f03382f41086da22fdfa29 -0x8baea7440a7840b4a34606cdad978d6a25141b9eea7e001593bebd95456bf5a7 -0x1a7b0e319fb9583d14d9f863c668d39ef8552a5440b2c254788724ce88530978 -0xb282114a5d8e5a7bd9196bb92c136e80727ca4a743d63f70172338004e8de62c -0x4b16bdce59a6d8efa1a294f438fed08efb72c794da62e468495b556f450a54ee -0x787caef52d43348cbe477f3af0666a0c04bac261e033d259733fe3ee9745fae1 -0x0a4c2d85f058afad1fb6b993afea0c30e707230f8b20d2b1733e3f02b960095b -0x78c990b41c11cd219ed7c95b5d0e7be6e0915a960a015f39affaea6441ea791f -0x9a74bf2a49e01185a8f5485a6ffedf4586719f4d8bcaf0f39b3d0f2f8321bce1 -0x9f764c3867cfa3f0418c2a6cc16ef9e566fb3ce725bd39b71e53a751e4628818 -0x372cb7fe9d97f20c7c4471148f914e6535e52e45689bad9feaf449f7e43bac4f -0x4fe39b27d303ae3492e13df9012a7267304643f6e44b3431970e42fc5e717466 -0xf082a9264c2c8ebe5311c17d0484dcde2575769c10b07505b38229b0af44e339 -0xd1b76c4a7e146f7005791adde108492e74f704e4f72949782226ad4588c46ceb -0x86e5b3ec5d949497327d059fae8bdc173b5cda35452049af51cbcb88e2ca25a6 -0x1b8cd86d5c783aecb834400756a39ae0dda78c9a4414f72338db4fac561f8e23 -0x71af34da73b529396ffa405f3d002577024413dad05d824ee59281c3ab8123d8 -0x894473807edd3bc753816f8a62938158dcdb489eaab34ba82dcbfa5010aea9d2 -0x5e4f7069d1deb490214c2fb40dbb824ffbc46af9eefc0fa6ee53714860c70397 -0x303a97c60ede0b3258c36ef27395c0bc6eac7b251629d357e9d48a9719970198 -0xbc92bc97b86149d1b8f30c68e52d08dc9f8b7d2578890cbdb1e319b1e1f112d0 -0x443ef6632fbb6f5339041191502991504997bb007ac3e5388e8699680add58d4 -0xb3b6b4cb1371be1cd45fe24ef69a2507c2aa4a34935e5f31b570fa44ebd9bfb2 -0x66970ac76bfba6aade6dc0407bb778b543d00f035574bb072ae8d20f19a78320 -0x54302d57f44bcee1014e5a5b24c71c20b7d7f6cf49bcf8afe67e6a48fc98558d -0xa7d1676b158167993e67228b424ac6a140644a6c7926d4170de8f839af7470d1 -0x79ae71b0913f3bdbd973c7b5b5420db469baa12e41db4e2eef032f42d08eb1e9 -0x62c238e9beeed1badf6a65c8124929ad7e54b9bf85ba628ec25410afdf6b249c -0xde0fe1476fe40dd943200f5ba6ba724f5b14d1e93cda3d6885a129d5112d75b7 -0x2ca46c3d129160185d635eeedd75fc5037f4b5a4266d5efe803227797107739a -0x626aa35af0269eca989fdd8c05d8c42acd96ce2edd1fdc3062c99b2059ce9d46 -0x0c724529ff8d883a1fc75a06df00bbd7708e7956efeceed3bce3ef3516979547 -0xdd309a6f35b183508056a911a9864a032813a364974306ba9c958df54f6475ae -0x2acdbd5b0218ccd7a2a541914e80f72fe38674f3e378503d5a1cd9b94c497442 -0x9e6b5ab911d7cf80cc753a8d5710a654d75abc2d35f4fbf9e4202c86e31f2f09 -0x83225c191f90d61f9e296262b6be8504b62a9c329acb350b62fe78abcea1301c -0x6aaddb478224520d2cd7f740ae303a7a740d2327a4ab532c7f51c81b0663d094 -0x843133baca375f091521754843abd4fe51004778583c076f32225b8a3cbdf431 -0xea5279066df54400e10976b9303210cb18e72c72ed319a9ffcc37fcba613f55b -0x3b69bbda0535ff1b73afe0d21888c8848d36d8bfb169c54d5b63ed1aa9c527f2 -0x17e93e4ac5a027b3173fafebac73e04f52701bba0251ffb9499cc6c88fb890c9 -0xadc729cfe6f4a3d7170aaf4f7c37e7a1384a8aef0a6a8a5bd7cabf94584e37c0 -0x097d7cc72e6d82feacfdf9fad6d898a0dcbf698cbc3f5f5e56975c1dadee5961 -0xf1e20b63504a91ae20bdffead863312eca069fa6b00448e1e91dbddcd3c07a19 -0xc345f912102cb6ab2273e70389b63e88e52f4796c005766d82e64333e786d034 -0xd9e4951d1d1c60dbd0c66909c46cd94c9ae60cc96b2f4891a6e9d688e4f8c8e3 -0x6f1495323b6726d0a38d01b076ca9ce1d392a9215cb54ba6e4626bf5c3c2ed54 -0x9be4480401d98470f4e0a059ec7906c3aac6cc9241fc15ba0b60397a448bf661 -0x438faec58217c5215dee9b849bc7808044c0810c4878c2b1893390f22e82bc17 -0x43cb46d887bbc6635176978ef77a5467bbb463322718b2a4c0446d209f0db5be -0x3d7a997060bd6db88db6c09d7be3666ebacae738444ed58a6b7f2a6eba0b65e4 -0x5e15605ac32fa3015e0b8f9c856020bfb978824564d8964f188ac51cc9a32e7f -0x91bbe5e9c427d4ef646e7abb93d06d04eee0addd3fe1db74c473f3fa0bc3dcef -0xd243f02028649a975791c524aefb465a4221ee94918b59e05dcf73193962946e -0x6c3751056861bcf033ccc267a3f5d9706c61eae87d589773a026bd88de5124a1 -0xa0d639d08f073c2687d2e539b894d83a057b31d4faf6887e0e0d102822f03b2a -0x748bb6973c5596b262ba18bb5873bb26c9b8c669729c75b7add7b7e9f8b0f763 -0x4ee67abca87ffd2e3ef2aeda43bd2c563c27ae2b38a50168ca4e69673cc3071d -0xf12224f7d4cbe7dadd08d89d94ff91945c35383ca17b3b6ea0ad004ccddfa311 -0x61cc2365629a35646138ca5fb9c69524f7690c30437fe66bda530832436fdb33 -0x14c3201a9bac3082196a092f915d1d7e7cc6123ba66a0ccbe1d9c1c9c0a2d2b5 -0x070b53c2ff476d23a9042776147ba5d180cfcc818486d897f42ff80cb252f508 -0x411793a3632cc0e39ca4f0341edfab5418981ccf8fbd855e5ad245e6d66a867f -0xf5615f4b94450773f0d1fac71b76ed06582a311e568eba9193b879503f922ca0 -0x146c374ab910d41fa696a78efa5cddb44ba60a93c3bf1ff78d17c1e3bc275ca6 -0x0087760f028bdca39f9e00cca182037e23e121797558deab784bc28408dce8c0 -0xb1025eff48bcc292cff7292b52477b1f51771329d44057c6425bdb65e586a937 -0xbc9940589258fc05c9ea6774f2f505265bce371b4a999f8b0cdb82c8ff95c32b -0x32db29eb16e709788c0d3c9b3bbca95f08d14051e7cfcce340828b70560e049a -0x11781bbbee1fd5ea6486b50e32c14501e72fd512b4d8b34b6dd9cec4b5b21608 -0x74807a1c35a071f11e85fcccf507cc86f8a046052536f40c0e1e785d529ade69 -0x2f7c493041862ca3d5295d55b00918b10dd6db1e0c1a4d1524492c907a8aae95 -0x423a49b548918e75213378d1c3aa77044bd750a1db6eea071ae74f18f9e69753 -0xb1ec791b4dbcc4f7b91f7f05ce2290f428ce0a79f908964e70babddf72086b57 -0x6dd304b2599ab42410d58a573a894d3cde30b97ddb2279b8e90143fff09a6ebd -0x53dc5cc978418e324bfe7d7a4785fc3d5d9f25a410e6b5935dab6437da1ad031 -0x49d65105d3b3fbafdbb8cfb1be0cd5f8f9346cbe8403cae91a97afc31179a13d -0xf3d62cdd3711bbce415b1c26c3583749147f21c1256b92b952cee345af84a821 -0x5dab45218521a5c4f7a7788dba3ccfdf632d61cefa32bbcb3a56c9aa7a41a8eb -0xe325ea26148ff399d698a2a32304ac34b70f47114c05d45cbcbcf329797649f6 -0x19351bb0d1867de6710ea13980c907d90ea7a7945d352aa887f9d600cec93b20 -0xc9f7468064aee33c95d093af458cdca9faba748598411fd4b3c37ea36f30a06f -0x131c525ea6af8efe51abaa22a8b57c3ac6006064a19ab04cc93b54d35b66d770 -0xbc595ff387996aa46fa6af8cde0dfc2d1fffb623eb1b37471ca96226c457da85 -0x47be3321bc628d4c7c43eba1ee0f62639269149bb7142edb4aff836d1bb82611 -0x445d9482d98505d662a314caba71f9e6e08b4fab3aa4c46b7e4732e4697e8c21 -0x9223cff71a33bc30518acae6551920cafd09a8734a2099f3f1e88b6e3ddc010f -0x2856dbbb15017706f916c2fbc52ba47c212ad4a8ea9a786b0c288cf247e5e960 -0x61601cc99a00bd4543859fa31046c0e9ee8e8bb001098fcb8ddf69a52e20c9b0 -0xb272093205db8b7c26cde09392d961a84bc681a8e10c0f287b79497547b2d2ea -0xf6cbacc1fb2b36f510f753cfcbe1fc836d6ff16f475e5a42b9e5d4631d4b907b -0x5941be3f789d5528bd3a7614b581da63465a208ac19b746d29d76fe05fa77904 -0x23eb4ec2f05f19f213a9848ffa3e709ff74b2b131beadc2af79969cceb8e21a2 -0x705972a7e8ce093539c945c3ecf38934a92a433d1781af8b2c80743d058c8a26 -0xd6b9b5381654db0a37e7f371b91f0d4e7d299f34e093ad02dd9288447d819a5c -0xb9ad3d103dca64e8d0bc1e574ea5518a948dc70dd1c2084a88ebfb9efa41c7fe -0x496a007d464d1a6fab551510e870bcdd87e9150182a3b603ae1a6841dc140479 -0x5bf1e94f27071f6cb15e3d05ca99105ee3f305ff7e764995f9de80fa78a79c4f -0x92aafa29601bdb0a792379ed6a4f020f0420de3543b3ca5f38e02c1869a7ac93 -0xc8349e25a4354c8973ac58700b36f81b2d6a63c4d040f23142f0034e705973bb -0x2c9ffd7ebe9790c5d7c11f5bf909fb3babbe7b225e689618bd2139ae2d1ce819 -0xe2d3355a9ef656aa99b7b9a4d8b1d37f3404cae6729e8e1991735df8ec075ec9 -0x58e3037a93214ac5f84fed08be5d345dacc61294438fee765633b4f5093a216e -0x500f9e2bba5daca7cee39f29a501ff88c9dae1e39266dd96919359ffe5412ec2 -0x0ca7704d5713e8a557af358e64d38beb9fe28930e363c5262a2eb428fd0427e4 -0x5dc47bc3da3b1e0c305b27eb9eb3fc11a151b66ea96d719cf7bac57dbee676f1 -0x8457ef913dd5ff7de782a09bfa54dbb701294f2e5c2571180ce84ab704ae02a5 -0x26c4e982ae92714da18511db4bafdbdd6e2fd30b7a918a713b28f61970150550 -0xe33a3fc8f5622ad4669abea33f5bcf3261a0feb0c01b621dab0171ab2b81c3aa -0x5fd48f2a31215d190b32c9c9e4f4c83cdf79e5779545a999a64db38a42d71d3c -0xf905684460dbf9cf22e9fe8d0d5e85ec601c8027e5a85aaa07303ea19e2c56da -0xe125b0eae0b70a4722c55229925136707d8fe9e120ae84d132a91ccaef4a0907 -0x8307348930344439c40740784be1a47baf1ef4ade86386c255b84bccda497f05 -0x03aa056318daa181adacd36c3b4a292431972736f79d2e98c8bfdde642f90384 -0xcdac267486a0fdb3561e3bf53b9029cb4be04bc4eb1a5bdded4195723ba88510 -0xb3baa5db84220d38b9bc2a30fab03e362989669de2c9099b801b20e32098dd30 -0x7e281a12030732f0cc6b6fe218b6d3f0f92f2bf1a79063d3d5f1099f69a7b10b -0x60442d8ca65d661a7604a587cc7aebc1845a1dadeb942e3ac425c26543385f05 -0x72551a615483ebcff4f9b359aaaf49336228e218eda4729b84a91295733c4a58 -0x34a00e8e3c183e1ef6d6f1bf717d12a65ba38fe78ffb53abbcd39f26b93e118e -0x510e616088718b8ae189153e144dda6c6351392de9483c4479e8225f7bc76a60 -0x55e4f6e597f7a69608b6f5ab76bb3970efc8346c9a95df4b2b2f02bffb02274a -0xf7f6c91155196b3f1fae865f10afaaeb85bcdf24609aa220a3e3d5d0c040eebe -0x463d731cac94052a2a55642bab64b6db682b4b0be1e5e7c5afd5e49808297360 -0x1bbc62f21d594f8155d7e2366aabca1d92ca9ff2f5a1d4cf6016c753596dde3a -0x01003e64b6ad3da8ce09da8b0c8ac4a62cb478bb282c857ce54fcdf4e486d027 -0x562abca6fc05a51e92c2ac1c64b0868f3bf9188b62790284bfe69f91d7add2e2 -0x34194d7354a1ffcf40fddda3ce54583f974d7746a8d9194b76ed11d860774ee4 -0xd9d3d0a0db204d3f594e51a8c5b414c3f01b3eb490a1b71cbd5486f7e9d4c0e1 -0x23bc8dfb7cb6fecd0e2a2b4aa7c35569331b3cb1f621e838347247559c5764fc -0x8c805ced9acf12109dd680720b3f85188228dc9407f9c5c3d38702902d98fe35 -0x6d8cd4a90c4620290db9247ee7bd2637cdcb50f1420e646caf8e532a2997ac02 -0x7e05aae38db06a3521bde9ea408ceeb0b922065747e7750a4ae021ec5e651f88 -0x04bbdc3530aa2fa7a6dbf74c69211d40a4dd2ff7a3e940a67d57e13fe6acf6f3 -0xb324466155ddd0a67744191797db9275c7bdfd6a9206d130b9b7a0523a03d923 -0x9d52f595140149c7dccec38d58a7b1b388e8d7854cbc3244a231fca64803b2b7 -0x1892636f521f017c9f845b2b2de5615e4ca7b6d1bed24021d57fe246203aae2b -0xa3848ada66f510c896de290379c9a773c9e1960862f68f55c539a71d5bc652fe -0xeb5a34e03bbe2fe4396b6547872ec2ad055639a78f4ddf57197076f9ce35f918 -0x8b1c3c21f9ced2e35bbc56df155fb28a8470025525d301e555ce770fc0f9b9a3 -0xaf7231c49826388e4d4b1f80d2338d07f127d96334b3c47a02ae8915c29d8fe0 -0x7be7d5e3042ca9cc88e4e9d1122162894c2177e1235d1e64b7b982ce8093ae9c -0x1d245336a3edbdc916598dcd8dc6386bed501a0d22cc5572a66556fd18af2310 -0xd41145a14943c3e02e1c4b7c86a2abee8fa796b0b1a874e4493153c6e9f0d978 -0xb0aae626b3395612ec25c42207ebd0efe937255d928b1526a4cc3d6cf43f26af -0xcd25f7b548e9657f5b116e6c3f249fda8f0dbddb9ff744afe4fe137cb485ded9 -0xeeb139bfed5f01d593c1dd2ed06cf5d6429426c1a85a42dddd0cdb20372bde41 -0x06d58eb6a4c4b0ee4f6e883638ce8572b2aef7c55f84700c4fa645e89024bf14 -0x0c90f0d549c83134e49ffd971c54d4e2f9bed94033e57a4bc00b8004c0a04d4c -0x4d2c8345db5c917bd8d7e9d697ebfb84c7cc5ca677334c37351fb89446f23e99 -0x8cfc7f20b3ab24a5ba4e2e8d180819fc0a5dfd309e1c416dda47f4004b8fc4d2 -0xfabc31ad14c01fcd47a2cee9b20bcf767adc55e84e53623aa72a53317819e3fc -0x6f399a386de2fc34fbc177ca36a24a40e7a49c9e2d88087ab966e5ac043a129a -0xd3371bfd4630090a3c950d91b42484b5da316d2a28942b0d4018d73867dcf9ad -0x78534ed3945f46b34f96318fd2d98edc2158a4486febc178c716632e89a0ff54 -0x7f827aeff7ace066018c536c6630c1d3c5457b85a162291a149fa25427debc90 -0xe9f693634a12ee0f98c8e08e87ef6f176eb09a56ae2ccc61b908cb3cb3d1a7ee -0xb2d0d3dab28b4a51bdc8d11f16dc1a640822702aed69a81301222dbf3466ffd5 -0x3366dec0cfd49439f37fbbd14096a4a5239e1d642c6829ca32699f840313ee3c -0x9aab51c7e773ec430d2bc649328a36b6597d565796de55d6176958187d44b2fe -0xb565a9a03ac27095b540f70a9c8be5d4722a5decbf6b76be1448dc326d7805bf -0x5dac095cdf67bd05ee0c91a48fe29cd1015da9de6c6efafe7fe61a7916e732f6 -0xf8941bdf853f8d52eb4ce4d5a5b9003bb960a11b408bec75dbdc094432259e44 -0xd5a9de23f2dd04d3544a42e10ef6e759e0f79025dad9a40e0fe6817a8011cacd -0xdb09ba66d9ca84a8f096ba84b13c9945b2d116ff4bcaa5642bd386ae748c3a3c -0xa4dff49a59e2f26d349064aad26f3af841f995f931024be1b14597197c24fe48 -0x1b9d1f5034f393ae3f9cb514ecc02c4872bba2561dd0ffdc1743436d3abd6b18 -0xbc27f465ea7d15d62d6989f3124a907e966d25fff7cc789bb03b9f31374b286c -0xf24e96f06eb028d9be8232f82ce063a25a6a3cc5637030dd3709ad74d6bb55a6 -0xb72c3bf3b3436f0a8967fe50bc4acc3b57a1d410ec649a4f65f72cddb270fa81 -0x8dc8533db63fcea22e4df4d56747caebca6bb2935762ea5c096f8d2b746d4533 -0x0997ddb8dc50d5152e1885a8da267792bd0479658f8b60f638d6405776150083 -0x7d9424c77fcb3c964b439d6f354bd5ffca8e3f175f37d64ffa0307793ea9c59c -0x84bd7cdc4cb6183b0244525185c19f40aeaa99f560bcb7d87e11d0d989a6ded7 -0x29e42e092cf8fca592fee73261f5d40b57bb9762086044a28211a0346102a33d -0x4d0ddf44a193a597f058cbfc0dc00502051b371e986338872f6a27a25a994689 -0x406eac2e5c422bff6db7e9a5332f5d85341a56d54b2661d924fa5c3d20da80e9 -0xa7c7864a351df981a40a9d497d5d87c0fa23462311eee44f442d2482e4d54127 -0x9d8010393fe8b06d77a4a620c61723f892ccd997f54aa822e78b0487a52b6ed8 -0x02d881fe3bb513893b109df46785f83468154695184c290e0edd6650f37ca7cf -0xb49eab2d1865039642acd04a4c8be4e12eaa440848ca17473cda4f1f51c2d8be -0x4ff25b8849b952eb2335a14132abccf737fe39ecc3213e6066f86dcc135a3657 -0xdd40b992d8746c3dff7b479ec75cbac6f8ff3756887b7da713dc7304ea5479f5 -0x95f2b12d75d71871b524c6c22b656449ec5726779bd73969384a6e29414aee31 -0xa898e74f6ccefc3a08119842137392500615dacd6c67696cd655568fb7332e1a -0xbab0affe08ab26bee80e6f3f440b03beda8f7f0e1057cb6ed4ee7941bf95600e -0x8c6f7815f320ef04ee7c85a951c9208bf5c3fca2bb2e13bb54a7c6afbbef20bd -0x71f14a238dfacd500eb9b563bfb0792d271d679d03d82622a0dd5259fd69afc9 -0x0f83f41192a87e9c7c1083231a1adb206af76cde47c4adbe3f831fb1d591695d -0x3795ae6fb812cd96b14cd2f39ef4e72be0192143530fb72f026a8023d502ea54 -0x21b125efd3a4871075559ca207346396a4e9b4e8b416f0ace5c7661b93625242 -0x55d96a5fa250f873ee4a21b820f3d20ba7c9f9ec205d484e87657b6feba446cb -0xe46ef7d6fdbe5df86a6645cac899ca69d50cdf6c1f663581601b8eb09c54a019 -0x11507e5e636c98d1ec14fd75b939efddf1ab2c74695ceb1945d796a93fc6d5b9 -0xf9a368d96d7a1c87962b1ba2e693597cb9bb6d8bbbac97b77a9480deb2bbbe5f -0xd797b7f333f549d8085a0a35548770ae64e39a544a17be4f3f695ad50cc4c6c6 -0xc63eef0394e20c125682d31049dc8600296975ccb2e038f553af139d2716f6ef -0xc40f81b4ccaeef7fdf248cfc8bf7fd86c89b0e3c0d7fdb410407ccc67586db04 -0x9aa00d500a3dc46c3efdf43beed052830fd4121f398daa9829eba268ef7058a9 -0x25df051db20523a9bc9e40ba734c76f46171e232f23670d0684f8100c0f3b45a -0xa3f40e63cac550c273a0acf8cd017d694e0a1b97ea6555eb93024caf7a2d2426 -0x8c6cead31ff77da415b07198a3635e8fbc93904f8b39a337a45f751caddc9c62 -0xec8256214cc3aa8b5972d99cc5bfae70d5415cbca760d27eb3f2f1ac32cdec0a -0x7ee73fbf2c3a250324efa1e6c2d90c0bfa7325918c57f3fb11ccb117d767b2e7 -0x7eefbe1beeb966c4ee43616e78ce87b4bdcf711bdd67fd9be42d82c223a776cb -0x01c3942691c4fc9222cd77fe6483be9260d70b50e308246bcc0d23949258034e -0xa030c634fab32579df42ef4989f0c8ccbe6fbdbc32d7e5586e4d86f921c81979 -0x11125f97eed8e20492854d9845230782eeadf821a5154347dd86de2a45f18abe -0xd64042f886c97ea719bc0f20b7aebd3d68453148cbc21bc6dcb7ed825fa00fc3 -0x25fe2c1395b9ef9f8562dbd32424f238de82deb7348a2e3d768dce3fe82d5d55 -0x248378cafe9a951bc816bb39658aac37bca6a4282a5aa0f6a347ef7337ad6b97 -0x26f62c0fed0f370799d13a4e71d471a2fc990a8fb4d70d473fdb901afd2cc6a3 -0x53803afb533198749608de13676ec304f4e60b2f6fab130d21bc9d7d61b870e1 -0x1ff0843c12fc46d6ababe508d35eea97b434b0ab004b56f899178264c424e3c2 -0xcf442d01a14f280b5752c0f1e19572b400fdf47045df0641acc6178f31a6258e -0xdb6241b6f1bd457b0c9d450091163f53905d3e04f2240a8f8a14df1a9f9635bc -0xfeb448b5396d4f165987c7c867ab405f4aa9096bb4527b2014b09bdb5b014b62 -0xe91312282be749fa82c4efabac87eafc08102b6f89821ec3472da45e50fad3ea -0x9329e631ce6f308d2e99cdf1d8d2b00acf200d2a41defeb25bd47d1f34bbb30f -0x0bc0954646d529a2d2d4c2604e5a9fd267c77b720dc40c0fd504c9e0e363fdbc -0x733f95ae63f34d5d39cf1e91a706dbb5a810010d99f5f64adc7ba6ebb343146a -0x536c27eaa94721f1d91e7716f1ed76b793a0d6f3250fcd5357a45dea6016d458 -0x9bd1e8a8a5b82eaccf0a150028e458148eeb669bc5ce0d6de6495d0b290c16f1 -0x8522c2b9fe9a6d36b2c20d8941e00a3a01c68503c194222cb50834b3f2453815 -0xf22b3248fa91b26a0f3c001fc5b54dbacde3c5be808d8bab0296a0bc7fece52e -0x44c545edf4a0446a3f6e2d437fbf1d01ad51110b8d2b345ccb846c330ea04799 -0xf1c3dbd94b55403316fcaed0b32e2ca66fd89d2d3601d119c8a0591f4d180320 -0x033f79b4c68f4688df72c5482fdd709fcc02a6ccf1db6d3c4433c043483e8ffd -0x17e385e30e58a80ec4fd89e618833d4def85705a5e4dacf873a2edb1969aa50c -0x6e5541e3bf2689061f68d658b2ed1e3b6514decaa4623925606936687cef95fb -0x94cdcac0b4c1d23e19aedcad430a54c6b30b87e21ea2b965528016b619f260b1 -0x594f0b93edb2990204bb4db601a511a35d145fc99b427f73654ac82520e93e05 -0x5b76146cc61c22c0cbd6ad4627600d48b4907a4d44e1a2b5e8d4bf9613275e44 -0xe3514d3d9cb5eec5a1f8314a2bfc621d0f60fed05c3e72877176084e040309c9 -0xaaf0b0f70daaa57483263454e1e2887253f474578f3f05b112360410be84508a -0x1519f3973bb0e53dceade5e277e36d02e8ead8bdd8479c3d48417776eaf6c1d1 -0x8e43471a6c0c1a1253b6634f3a81e80c622014c746674046baef135800bdde4e -0x4f0a6460b7e798b70d4e68102ea2e2ce71e59994cc4c8e12c6a5a85a2c633640 -0x4de76a8b9d85f2b79fdf94cd4449826f342a25396cfb0d1b3f044f1f263da32a -0xa74a8f159cd34810456743d6de1f7782a5acf2d690844dfc8bbf8f88cbceb131 -0xfe2ef4a5ebc1455dd5c6ef093c7ef549f5bb92b7006daed54739c446be0876fe -0x4f23515ffee6f6b9a73617d54c2f9f2e5a4194a7b7e74f8d3a26ea474b00482b -0x585108b99909b678338e9025bcae6819588e8f45244458536292286677f53aff -0xf4ef0fe0ea37512a8911d7980791bdd6c6e8cc5e14d384fd4b9af8876c508cb2 -0x116d95db76f026d611aaf870cff0c7735340fb03d181e4c58f069ef4cd99faca -0x011973b89970edff4560f287ebd880c33bd7f44bb78efb55d1ef6f88d001d74d -0x24ee5448d94a129328950651a1b51e2a0d1c15a835411b2e59f9b86de2a7a911 -0x01f628c29a5f0a207b5aaed6ff345d9bd77c309d2c24784a7b34f31ad1791753 -0x8130e664cc0d1ea12158e867b6638eb69873e3176ef32072051af01a13f02fc8 -0x929656cfa317067e24ab3b55e59429efde34f858db75a461c610499e3eed1f64 -0xff4c762fc4b4e4d04d26cdf167f510d65b48b85a7cd2f4e0cd0c36ee2433be02 -0x689b6df1f84c09cc819adf21a5e52b25325e8d131336a264a105ca77675b45f0 -0x48cb1dd41e4ae886d8fba861393cf19829863a33d1ec5d3b973466ed2dcd58c1 -0x7d3be937e432f21a04f6a48d2dac2d31bcf2dd8afe5ef88ffa283ef31abcc265 -0xce904b6b4802100b604f1ec3c6710fff27060079c58214806e191d79c93c4bbf -0xb77825a11d1d82ea6ef61774a54e3a72bc0b90daf6a75eee43b8736d40d6ad9d -0xd9a0090d5b9e7d2a2fa5c433b60c19e47a184d43db3d4ae7ecdab91d8e3db24a -0x3d59dfb406a9b16d67e51c2f4023bc6f56edf26f14581e6dc325758bf4d56a96 -0x407b288e30d3ea1a41b36c75fe524c4f7f0b225f9f8c99ab4a132f24db67eb0e -0x53861bd3fa087f8b2678acfb01042f47b97395f6b15dc3a4f37dac7a01e001ab -0x6760907834ec5a7dbfcfc9be627805ffbb5075ee6a710d85003cd8b3d2711b89 -0x06525ba95682b1c975e9ccc15839657f514e27a78950c9f37ebec4ab79e82728 -0x3828bf805fc3ea125c0a10783013ec9aec5342911569f77aee7df588eef4f489 -0x8753f290decf17b2582cc2cb9d76124f4980badf44e6202780de759edc31ba31 -0xaabdae375c69714361677e61211a992b646c7750947cc935255c0b130feccebc -0x54e128176f641e9ae538b90a8e42125d9bd5e95d7e118ed002e2f036fbb43903 -0xfaaa92161b7c86778ca97e8397897939c89310227a4ce23a659b190111b1498c -0xa33bfd21b0aa450e1ef81442ebaeac504b5c3b43f4f3526fff9733b9b5b46749 -0x51fb2871d0f8a1ac93a13aaa79762fc5dafa46f80cefb58917bed2252f564cf3 -0x0e1fa6082997021fa25cc9c8a571016541c3d24367eeb262561b28c71c801a87 -0x47aa56448ae0da1d0416a5f8c986e247f88bff80c97e85a6070cccc04a97671a -0xd16e812d2ce47f4911d56e5c6de9e2ee3de97d52863976a7760aec164dc5e15b -0x6b1cab060d7c564d414e99c1c23795c97b74fa4f1f5b22e8de4e3c6101251261 -0x30e09883e5dbd925a877a0eb8c0e342ffea9cd6a57b0235bcae84d2613f37421 -0xe796986e0b7f4a6aaaf74548d4cbcb44053fc93e6cbb23014faab317261c01d5 -0xa9c13d4b45aa41ca3e73878b3077be2b443d1a4d8fc741c2fca98205df7281b1 -0x6d1d1f7f64c64c032b32b4de2d2e17b5a5b2a0bded322f300de949a0f4ece7a9 -0x82fe91c0b8dd99ae5c78b1f948f2a7cb5c0a8eaab81e80c0f4f9622a329f4b0c -0xcfd08534d3a517c1c684fa298fe744abdc73989d2bf8b1a0f17ce821aac75e46 -0x5e5eb0ff5e17468f714079166f3a6d92541957a14e39bed766845397a6baa44b -0x02c48093a0e3c8607092b1d676189b3dc560e189ef3ec9f4ad5074f9cfd94f6c -0xd3c4bb181d0d35fa0dc744884b668f0b5b719145990c847ab74c26b36e67d5d0 -0x39db9271905d4ebff4f7170ed1bf0721bb0ffff525e82cfec85165351aaf3499 -0x482fd12e6bc1dd2e3cae192f85393472f5d60f5542c1fcdb043e777fc18b6883 -0xf8b3401476405d10596edb2377f43fa27ca0212589f515813951a6dee8312369 -0x825264e6f85529f1c0ee85f3e846daec7bee47c9c90f3bd3c2fd7409fc77ec61 -0xdb78321967ea9609ec9e8f7fc1556cf31bd1050ef179ebd332b33bc702d7b662 -0x9497047e05fb59c24d355e794448247d5137db95060fc28606147b3367b125ff -0x61fce1c30699538edd87d79ec34147013daf315619c1058bf00dc07ec2262d6f -0x74edb9a56b72e02d79f0e5491c1e09b48a47ca2e572d4d97b7b6c5d62713a4ea -0x8ac521820b0714a5efee96d615556bb2b09bda73ce49f48d27e48f16f478c457 -0x82f026a847998e2753a85fed4ddeb188244a1f56b4cdce7d3472fab1524c2c29 -0x19fb165659e966a986e6074d9d2a2aae235d93c613c9523659aad655e7c2f59c -0x3cd4fe00b16fd0ba9c2fa7f97a41350d44f30a9b16e59d7c2663716b8bd56cba -0x75c034173578c5ee6caeb37583fb03875cba5f5abfd5d42380f6bef6607d68c2 -0xbd198265b904cec50cc7e6f7e60e19871042ded5894d56d21e24093307f5de53 -0x5cadc5ddf0c8cfb79a7831ba656f8d6ef2ab0c02b08ce427fd77145420fbd176 -0xd0911cf81e37010ad78c1d8a12529be4b9226f93cf7e501225562d8a310cc310 -0x877cf46d8410f695d96f6612d4570f59cde576388402bd57a3befb872ccf758d -0x623be71d098461e6de684bb4527ae4674630dcc83ea9929a5d729ff3d0f58b20 -0xe6aca5b0f7b3600827572aaaeb7e1a25fb02261bf24e533f4a4a7c88d79f443b -0xca72b352ca9c91cdce04ed28d3a4abd1a26cebd5bfdd8f153e6bde5981424535 -0x78a5c42de2aad26faa82f529a04b20373aa6d22aa3db273800f511518422bbd8 -0x5daf652d5661dbc19b7e7c6281a6a778697f72657f7cd5de6668737acc61ad3e -0x3f9e50f0a72fb7e042bf2871277d83b19a513c3e67f0baba11f136baebad196e -0x440d1694b02ffe991e0739af77a7b17a2228b2ef5ba468e2d48f21e9a328c166 -0x61a99374305c50d0aba25694c2af3d1995496f430c4bb651623711f387fc4207 -0xc727d3d30d510e25ef21daffc26a3d611ca393f76f3b399ffcfbe3f8faaf1a3d -0xf76e27376ea4eab3cdb4bdd2e8dfe4aa1291760605cdd35aa761501dcb29a321 -0x135a5fb67891023c7aa92e2c7ee576e5a958a1bff2f624d9117a21d9531b12fe -0xa1ce47c67b594883e2bd7b74308d8653471270b6a486c22c02b7663c5390ced1 -0xde8750a380041c34c3169d094e81c41d8b3ca3b37826a56ab719752fd01567b7 -0x1d0514c02d05aa67c0df5f7df833a55a5e81411c75dbfdddd36e47d41575f6d7 -0x125d21e2f5dda4a80b314cd8a5919af5319c392695a8ab90aa367b43b7be3deb -0x95d88feb400500bed2a5c7e75d9b94bc7e223d36590c1a9ac443d203da59e7fb -0xf63432e24ca0dcff2a719bfc8f19108dc82f0cd262ad90a52ec55eefa7e06ea7 -0x27dce7fb80f0a6df3be1e234803ed8f480ea75ee76ede6f4fe369029f3189b1b -0x9421d0239f241d3e7984d5ef118dd657fa0e7834bb4b28e4e35646104d836996 -0x9505ead1f5bb5fd155415c231fbbbca6516290630d3d438cecf55b4c3ce4d867 -0xc08871beec66f922b088bb106687076b248c1aee91dec0291fc53effcd704742 -0xa66306a6683ee68ab6097d4518ef9f7cd7a42730c9377aacc03daeb9a91057ed -0xac9b77c3948e26cc6e35a5c09a59e94a019d20635f8c563974c7510188471be8 -0x73b68f74d18e9fe103941b44c1515909c6440e0079f36d6587bcdf19eb3b09ea -0xfdf04d6e60b157597c797bfb1ada4e49693ca55d27231300d53905815923311e -0x7181e55d8084f4c53d35ba02658b9a94fed930e592f2f148373f8427c1ac8b20 -0xb03bb8d0ff185152ea3109df1bbbfcd56faad38be378b3fdd47c8819d3a74056 -0x355c17eb536dcf00902a4e5fc9e51c3f5fd25e9c89bbfa95c8c33aa583e2e677 -0x6477b72b551d09e70805e2953d5042a939852f7e9ae6f0e1a3bfc6c3d619dac7 -0x8a6e49c1d13470c7f4cc5489ff4c51669b2ab73c790001dba729a16b40dcbbf7 -0xd8058122f4321b590e656f79467cfdf8ae48a3d01d93b2517926998fc53b2bff -0xb1493b5d3a982019a33a77aaf2d7f05679ec829f3a3e68a5f7a1b820786f363c -0x3e7ec400e9f30442637eb56909c7a7c1d6cdec267c907d54ecae9869d4e5e81b -0xd1f00c5fb36c0bc5fe96b90cb02f5a08e64dfa2cd9dbeebae624275b8f61c05c -0x80998c48a4c392cbc0a8e87b55a29964195a1b30a8cb8be15215320a51e3066a -0x6bf709b0415f3618a5bc46bc2bd4509f6eb748ddd6c2723fed7367543e813798 -0x624d807a8c6136826db0b40680f570f541e9def86379e3a18549ab9afbd0ca55 -0x785cd1b3e53a0bf22a2f6a696c2e1324c825c47c1f87da33c7f3773e4d96d98d -0x6c40efab38c2ffc51381cb4419ddb0b50a874ebf6123971b874b3efc1b5c4e49 -0x7d53ace9c3d3d7bf8e8875a34b6fe72c3b5ec6dae88f55ab91b1faf212cf8b35 -0x02fb5bb440aa141bb96a7fcc8ed8e35e7843d30edfdf673fc2237627ef0a9771 -0xa36fcf6ce399e9e9fc0e6c992b440b4b4d456914b1e7d708be9a925f4bb25ef8 -0x053bf9b6d0272c476c2d51239260d1a282c7909cf9fd15abb4ec5beb8cedf91c -0x2f8d173bdb5d88a15cc4df600789502ed09150c0c9a1fc1b9528d126fc0cd878 -0xc0784b1599d629c0762ff36de9eb095e50ed57f09940f9727bb9b64cdfd44975 -0x07f06a37495f009409d4d99bea331ace8c0275fc7a4471d4c62e870d3ae06a94 -0x7a811dca802c99f6140b3080b9455b734fbdad3a10f641d2f9298cae264f3efc -0xb0bb5ef54af219d50cc500b72d3c06d29ff68a3fc62d1d05d556f5995c632013 -0xb53eb148dd0f7d955d02e2e467a1215721d17fec72c8bfc9f028e4cd01084ee3 -0xdc80339d4cd5ce451d38cef3f516925a6c7ba926a669cd562c3060fc9996bd63 -0x42bbd9e30dcf8e7b5be3193c6c6dcc85c2ec74258e02ba223afd61c311b1c540 -0x57c7a77a29b32decdf2552ec823edfeb710cf2cd334a8400bd8089e95ab07b58 -0x07b07df3e86e6c3fdda6425a4260b17e8cd18ced3c308a0dc86cc30ef86d52d5 -0x20a3a606936b78eabd77ef0b1a75d887ddf9d60aa7356827b1abfd6937f77af1 -0xee24a90effda2e25c954f8c264cbb7cc3ce3053b7c6de2330b48da98efd49563 -0x9243ab0ca73570d663c6d99862176e34693e73367e839d15f284450244efd1bd -0xd6f576e332fa7a61b66b693f68b7e67cd607272f9004ae0cb06cd91348630bf3 -0xb5854ef173973013988c4e1d143b3da91bc1829bf84ae8bddf9c3b772b670daf -0x493338d620fc292e808ad6429fd3ccdbab7d17f21715bb84a431a9ff346118c9 -0x2271cf129d0d8250e9736cf0bd26a3aac38e504a9d79c62b7eafdc9fdab4eefd -0x681e758826b07dbbafb259a8c82326c41d0f2575dcdd7eca55316bb5be72e56b -0xbeda2ee27f615b2eab1c55763f15f5dcd87432ce63e36a8240027459a654880a -0xa2323ef0cfa2fd39f3da5a2d0c02c72d7ea4cbf63a45d08a0f5ee52fab40d2b1 -0x7bcd8e4ef2b6f86f2b1a03eb6586fe07761b4f5dd146572014d42eebe0c01dfe -0xfe40a0750803eecb9d427eb67230019e48eed45315e7965a71c9f413594e3822 -0x9dfd09c086f2e4129b7b5f6894f12d02a877da2439849fe3d8aaec751d454d03 -0x8993a88cf5f01beccb1fed4d73c3ecbbfe98a6f8c80be59358fccc667a070de8 -0xa2e149d9d4322a64e9aad1d2b3b83629714fd42546972101074fd50df2ed4886 -0xcc5b5cd55307b01fc1e6f9a70aea3d9c1ed74e9b4cf33d2fc285868213e76171 -0xdf865f379edff92602e9391324585f9b309289d4dbae0fe36802e20a8093154e -0x1b76b0412ae456ffc2b0a7c2f124e998e4329d3e6e3ab08bd3f7886cd5242177 -0xed392106a96add9ea26a5a9388c0748239b7e914f6abc6ba7f131923c3fcfff9 -0x87bd562c6dbede3f8e2e6c65ecbe2f25be8e641296700991f54a76de15f76b24 -0xe8d00ac4dedf6100dab71da2cfd2bcad7117b6dd14afbd6bf8d8ab009212c7d9 -0xbea14a90c7075f9a33f4ece7ce8142c80e35b6a3d0f5a0b061388be860571967 -0x5e2b7b34d4fc09150fd88e235840c04b03ec52353712a765794af04774ca105e -0xf2e425e55270ffbf666a9320852247672a10860f4b31d734d43030682ed45d97 -0x44cf4d639bf3f423fd5381b5d6233e149a39d7f697bf30cfafcfefb32dc3677d -0x98cf33a1ff8d74bdf2487928e29292a368d92b202bb99fb5fe95ddfc7b614815 -0xcec2ba6791b5197d7e842e20b5819f46eb8149d0ebf1f8cb4617e81d36b0353e -0xda95dfdbee50b979639939277d6d70dbd6f237148eb9d31f870eb595b86812e4 -0x1239a8852639b89865de4350de783b72d10470da94b23cf662f3cbb038e73ab5 -0xfaa3d4eb971c983949ca4eb2c1ca40dedf145fcea545de3727cd6774fa183385 -0x688eda3e20f9aa10f6dcfc97f6bdc56dda790584fa7d6152b3f168e2fdc5b77a -0x472882607cd8486d40705afce4241fc69b775817d99f2e87ef4d52127b865e04 -0x0224851698c6ae233e5ead3bba4bcc9195608ad74d82dd0d99aa25bc488d2fc4 -0xf49db7c781124a356f867ef6c746c5d312f2b3f352685abfebfabfaca31e2c90 -0x50c8934c673fff67dd6b47f24c02455b7f1980f97207da22e851093117b9c237 -0x438b5160ee2e98ef6275be3c8066418510d3c8e559cfe8519edcd3db4890fbc4 -0x619441bbd2325df8fc41ed5dab0fac5227274f9ea066592e4c9455c4dc7f4aa7 -0x4dd524a9f6438890ac6a46eac177e1a0dee1b0119d9d44a160460df2d49b1b9a -0x626bed006787ef0721327646ed5f2e00e08a62f847af100142446b8bec41e347 -0x38f6dceb28d20d76c774dd4787e3ccd7e083d98f6eb8458527f287362af56c1e -0x21498b85a22f534047a3b75862b62534b354c760f8cd2fb81d36444b1bdc5393 -0x7e1abdf1c05cd17c9f39358ec4d9aa6cd7f1bd63f6d4cba660c4f22d4d614f6f -0x5d4ed4f716c018cbfe96a3ff1294d990601ea13235fb4b09c10cace9d991751b -0x54f84ad542824a61cd5c7b9116d8bacbdfb48bf16120429aadf78b21f6304193 -0x2fbe17fcacd4ac7dcbdab227e6390cc67c6404c4eb92b531299f783fb7f6d914 -0x09c84bf22c1c3c1b5217e8147f63b64c255067b6f44bdc97b2c231087ce1285e -0x6b666be368eee23af1faaf0945e7bc7eccb7e3a0b9635945a713aae4308c57f8 -0x125c984ed8e26224273df342b83202760050f2ceac6baefe1a62f1392108afaa -0x5320cd50569abde00865a6e297fa7e43e42afbf9e377512cc057bff3a6e85d08 -0xcc51c3328997eabfe625aa63a7d54c10eda74ecf074a89bc7fdade2069a0ddd0 -0x5af2761ffe0a633941164f6777d003a8077fb63fa2c64b5fd6d56eed71a2908b -0xa3b17917e8a163ff8d33158ebf9455b6dbc7e0f80aeb9a76c4ffd7ac80e5ee07 -0x54b67b5e0ec92d03579a4c2d09ff166057f88634cdcaa5aa41a99582638561db -0xd21ed793a373fb6be0e7a20861f83228a1cadf3e563f5116ab7742d4e69cb4fe -0x4c8ee1f85cf6f16e14238e20e8449528aa085e2d2633292afdd744f1dc6eb7db -0xb68df3409bdef2137383f790da116d2cac96c30c3e30b1c59bb5e8f13955800b -0x3c3d864dc30a34e5d9bf4321bd7b2918252f9e67e6945ccba67f5eeb30b6a048 -0xb126cceb56b790a38313a48208514af6ac896738922fefe6d34ea50a1826660e -0xd9edb72ce511ea98ebb38c8071493ce65c4c9218efdf597b2951189f151b6376 -0x5d78b39b4c23ad3093c3ac405594c8260c67fb945e835b6fc8d42a8db7877878 -0x24a4946e4bba7c0dd964a9204997584ebdaeb77b8f32fa7470cb7dd6944a1260 -0x640b903aa9fc108e26c22cade4908c78b4687fa83530f424e3ecc656b7a211a9 -0x7e0cbdcbb4460943f93303747bf1a31cf6ff7850d2a56c8bbcafa7d4de23003a -0x4743774b09801cfac85cfdc8315f9a24c42f7ee8f5d2cf90918f1c484195285e -0x8e6bb593ffce3bd2d76f95def4420de39f3c390fbc34b2165452608596458c42 -0x21dc1b45901a09a61ae25df24975cc03d243bcaa8e5863dd8e904e0b726f6200 -0x8b283f78ab85fbbe61141a8e1f27fcb971c366540226c3415383ff57d02834da -0x07cabab962fe59ffd2e1951caa8b35a4ea3ed025657679d5450f4bd18c932fa3 -0x70d42c1c4f5baba7f2c68aea17b92a01b9ad308a22015fa74a7031008a51a8fa -0x21a486ead417a4004a4dbe5074c47c68ff1feb3ce5881f406335650253b29868 -0x065dadc815c0a3da83b6ad3663d9861042739d113b675925fcadb9c4ad17fc2f -0xfe088a54914daf753f7a867c373b519cc4f1926aeef50e46bd42affcd2cbe4b8 -0x2f4c6ebf7cf9cf6ab826c9eacafb9f2413f3420d99604fe3014c0f3608034c9d -0xde12ce4e95d5f9d3b66d65d3076d46b35668af83b77bf13c15da564a4b5b9510 -0x226bd960b64ff9c9315fb52aa61d529903b9a5b320b4254ff9ecd279fbce8947 -0x2476f373bb48729e0d9a94ecbf85178d40ff1de6c2e7fbc04083ce562f45337c -0x7e8b7efd46996e2c9c1147fbc50b185bc75a3dc985d99b941066d9e15690df38 -0x5f65ba7c49e75e98251a669d2921aed287abba6d9cfd5ba24dce2b9974146536 -0x327a566387e92ed408c05d2e6c11ae22f1be6e29d90ee760db03512b8e6faafa -0x7ee1377a3cafec9b276778056c01b99fd4d811c4a50573fbc58e05f48cf270ac -0x993e0411958fb2fa88876ca67f528b9411e3a9012a7d090ccc70f31d1a690ff9 -0x09ed8e6f261f060975b51eba4631fb9d7c64e6dbaff07b9623d8a6134bddfc1a -0x29e64eb047f54aa6822ed85f363c94788786b51c2d14f0b3e85feaea75f9956c -0x31e86cf3063b592f15b6b1abff12fee4c6f54bd4ebd5384836fbc759a414bbaf -0xe11bafed74dfb1b7e2cf56813c573fcab901033afe6ebd3e7bf3a1d056669679 -0x4956fc51dcd617c70e08e3960088be35d8de725b6e798153fa66f2aa9e6d5342 -0x2233ee1f13737910f82d876fc18d4ba03ce4e3b9ec3598ed71cf838fef03837a -0xb4ebc9a482faf573043ba0227fb65e66bb282745a57a55e9e3cce51f03baa68d -0xb126ec207450c701e28a52c2577cbed545566068f6853220e2289c8568e1c406 -0xc2fb223d87e8be166a26bd6e9e3229558ed2f27f5e8d76236a5ba47f74e8a356 -0xbd95b243bb5dfcea971c33d06357a1348a11c186b22e68e5fcdf9d5fde08b202 -0x9fb749b61a5d0b5c27fe1c5d51c4e9094841f555b219f13820e7357f0e26085f -0x52c865752ad51f98e53e125507bcc7b7591b61de44c30024f4670e0e5aa90c68 -0xc54ba35e6555e9a6f9ae97693c59110df6dbc58d4795134621d6c14984bfcdcb -0x5d2dd36ca69dcbf9560e615394a46a95e661d7ab00bf7e9dd6734b57fdb3648c -0x6ed22fa737d30ddb128f7ef22e9208be6b4c795cc504fd664f525eeb6026edfe -0x286ad8841c3c4a5dd2e486eb7a935a44f680c8b73c3ab96093ca38136fad0dd7 -0x9780f32bea03b991551bd6eddbfcc3ba24c2c8100c91a8cc043202ba4601c8f6 -0xdb1a833b6a1f31e517e0d93647aad0208fb9a1e1ffdb4d838973a3674c53d8fe -0x6c4c72ad5ee472bd33065ddca14f05f14765ee0a26aed79941e0f3ff9821c93d -0x02c347ce60f645098b8e3a1d1aa7d6cda43b92cdfe5115b031ab0bcd9486a553 -0xd2588c8d9cfe9ed5dbc05469a76904084f8d88e6c5ee91dfa6232e33f176c418 -0x964d112a02da115ded966fc687a0752db860948ad5b815376c85e7049e8eb3de -0xe6ea332cfcd32900a79ffd909262cabf26622efd6dd10860817a9d24cd2804b8 -0xe51e7a9db22e91534992d6d0bdd17a9334dd06d3797e536fba814aaa2b1169c3 -0x55888834bf25ba06a2730972bb499bfbc9d8b2bbe2ee98d802355873ac1eac72 -0x031f28cd2b1418332c433b8ce997a15911cb64ef9e3eff6d9303885b654b79cd -0xc3031aed6fadc234ee276e3dad0adaf52c431698f42248ecc9d88674b2edc595 -0xee3c66fabd9c2c9280c0c0d54461e5a79b9b634ffefb127fef5e688ef19e9b42 -0xd3e59b40578cafc290e8bbd4bdfa8fdebef0d322f398d45e2b64e6a9906ec074 -0xeee0cc9aff0ef7280f9b3d8753a997f759eba10e4a100a3d567e094303c8b857 -0x12df931399a50174a6f427a7495a072f59163f20e36045e08e65ef7e8aa98ba4 -0x3a85d2b63edfb3aa8d872301b91b98d3ff9175ee94d2eabb3c026305262916d3 -0xac1d8e0d3b33855d3e30fbed16b76d1fe114726aa5bb92a03b76d586d9e1361a -0x81a54b553e655d3773f8a2322ec4ac207954697dd46ccd3884fed3441975c55e -0xe5e5331d1c3c553fa1b24731db9a5f89e1b19763beb080b0f51c866caad73a78 -0x788c31a77dfaffabd85e5b9e239060d2a145306e6645b6cefcc3b71e9c8efa03 -0x2d55d902a3e5ff7ea4729cd18e74cdbc73b8aaa897838268a7ae97d68f0bfd3f -0xce251fc5f452d454556365f357979d5aa96284b2186a88acdc3185f4c6b4f6de -0x25877e9b86fa3720a5a267f82f0520f00ec29908b246243f4ef3a9eb0fd0d098 -0x05ec0e1a8c7aae7d35a6914ebe4f1ebeffbe619c51e419816ec07fe267a0ab29 -0xb23dd17cbb266a95dbd854803916851253dc6413d57aba8fd4b0ac4559a95eeb -0xc46298659775333c218d0efa06b1757ffeafafaabc765ebf8cd3eb4411ecd789 -0xa44ba497cb0622055ebe90a1c68b2c30bd4ed089c3acb44211bbc69c9bd16d93 -0xd51b045eb7bb164b7528e29f5995e700036c3b7a861a3ff68f4979faad9c712a -0x07415ec7787924445356d0bdd6497a49b4695a5f666930a471a1adf156d31ba6 -0x30e050331c9d9cc66cea0d8a04da402997df21f67a80780cf65d0f0aa24fecae -0xe720e5c977e84d1c8891c1f1ace84515420b53ee2d404371262ce8628a399f12 -0xe4344d3f2994e9eb2beaafca495a9a48b5442a202f61083bac899ceb04a01f41 -0x3c088500ac1570cab947ebaa6928d4ee80906bac42de0eeb0f63e8cb27f1d8c4 -0x94c8aace8be2784ace0f656e5cc21c6a8247da9e015b92f29201c717af85a3ad -0xf28da70a49f79bb4438eef5fbaed3a2c957501f62a818b99dacb225b116f4877 -0x3b23af6fabb7ed2b45441137c4276f6759b77298ef294214101ff44dc4ec94d0 -0xa39e9a70e2f4c8b299a7a12a54008402968c5d8f8f1a77c0dbd346fe4ada0ab6 -0xe88da312b144429bd17c0923899de07591ac5fbffa1ea2a67c576b8ecad0c653 -0x98322ca78635562ff69c1499824d257087d38988997e50228b29a951f97cdeda -0x2966a5b6497f72dc2decda8966e72e5e90beb1b920fcf517074ec1c01af640ef -0x9f13ad6d92c3b895dc562dcac252dcce868ed903197600cdbb9c3697fe43b0ba -0xc1ce1ee832a923db6b7bc130f0ede627710ff0a4c267d1d6cb3e37908d80710d -0xb415b565d99ba3aab0772971fc27a8e668233ee03560678a06b57ff08a811b0d -0x22f642ffe83fdaa3a5b7f0c5f6f0616000c5e4c460ea420ffed6143f68bac30e -0xc58b43e2d2143c79d752c3ed576a3f6cae12c0df3a1d9effda02926306b0dadf -0x1c10020066f540a18d303637342907425c5f003169786a30ae1898a313d3d789 -0xa9d7f40f2e147a8b3b7255da502aad28e42f359beb5ce9066c9c408cfbacfaaa -0x2cdc92ffcf154137a468609ab9408c72617e607ce37b1040e3619f266b43706c -0x4f5af85899ac1efd15ba6be8c96b602ec023cffc2848431d78c0954533320536 -0x896818ee1ea08ebe3295d49784be4078d85a7a7d1c14dfd2fb2a5da7456ae770 -0x415c13ab70f96f42614e77b5670095da6a9ea9ec4862d698cd582c88884841e5 -0x3253eb2bb7f5145e82ea161e56b69eccb4203f2e1f9a90063baae9cd7ebc71e2 -0x029be6a54c2c18406b0e6c93736a200f5d2fe8793a255731c673ba32996119d8 -0x7db719406ffb82ebf4e23c61cb5626b7954156f4172ad57c73a3cdca96f75ef2 -0x55fd2a00a15544dcee39f53e0039dba1266428176afbc7c5a935e7244bb07b9c -0xba2bf102785cda1a3c281b66aa7ffdd1a0a87d62a22b2974607395a619e49732 -0xc1356ff2e5055631c614552ac0ecc36d57ddd3991a40466e47f8d031c0070c59 -0x140a571f34dfda6f6ee1278df7c65448edf5b91c313e57fc4f7322aca540f050 -0x758383e415a3ef52104e9e54aaeb32aa65fab450643b30a324b21ad997eec07a -0xfdccd153889e221edffb2d925187fef925db143a39b145cda13e333e52416852 -0x7492802b4302e4a2aea166fabb3b24f83ded09fa901d46438e45204f50e9af11 -0x9d3ee3792951a88e58e2571e6c37d9b6951407da037c2fb9e6bcac2394c2f674 -0xbdd443809079aaa467493a7ba02a3a55d6b7f01c6824e341eefce0764c640c5a -0x8052f4756c58a1bc74040bfbb4d5d650df8e33eda2c3b461ce482b4a7891c996 -0xfd203e6bc4f29541eb71b2335978e9eabf5e9ae9da552ac808df08f986959632 -0x92e75a1a1dd04b36aa991d3970522cf0d104be4a4153cdbb9a70d86e4a84208a -0x3773251f56c8548cc8a041ef49b97197f028247285075d28f241278daf308750 -0xf34c646da6c3821504c7c7a018ff625814d391677f6835eef03f1d9949668868 -0x08df4ebd9ecb22633df7b3d0ff9a34f3a3a927f965ccf07b8f3bb67674169fd3 -0xba38d3d408c9cd91c77081d5cb39cda1304fc0a737e3c48898da27b59651ddfd -0x97e9f8b29fb9d5573a0d14f5e94ef4f12a30b1606e7ab0a462bf71488f3f0eae -0xd0316cf5140970eaa92f55de3deb61965ef6a2d3b44c5d19f95fa527a92e05d3 -0xf8ecf7e3f7f3bf1ebdf290f7c2d8c76282f1f9e2a0099a8e847e28d020b4e724 -0x0f9683415882c120585bf52d9d47957b135ef87a9c4f39ecfb19f3b333638666 -0x4feb869e4b223a3a8494b6cc05aef89622700fdcdb02a47022b63b9df15c9ca1 -0xd10eadefa0d998db6922df69b4bb47d7de7313cfa244debcf9811438fd24dec4 -0x58c6c308cae79c2f169ed7ed9969af9018cda0208c065113f543e5aeff5e60eb -0x07a90ccdedf87c9a8548d3284ab34e791e0d6f23964b8fb2ebf8c9e842218f8f -0x9bbcbd4f0d8c436d2c10ffa8f71268e43185adbb93e37ff69d9f88af92a6b295 -0xee2291cda22a1a8a5d51a155766e1051ed5e67aead8a7449d8245d3298c30db7 -0x324d4df99144677422340db3aae366d3391644e435841a52bc8e0af73c622227 -0x97184f31cf87561083812a348c9d9113a57e1021a786393ec91764e5cde94caa -0x859f7e0b20710b8de74c15c0a4ebf585f9ba1c1dcb7d12463334cb5572566ad6 -0x721cb0cc202904f81475489ae09f12811c621cb9cacc8c2405eeb17605c4dce8 -0xf592b523eaa9e278005e8358a374cbfab2038c2eb33af70ca1debc7a3df993f1 -0x97e5cc4f4386cd53bc39e816ad4c0e6691022d40e52f6642562ba0d904bc66ae -0xb257fd71075719eefbb7793808ca6b4e2aff86c0eb1da2c92c4d5d9efbd6ef8f -0xa38ced0ce40e51a4cdf0362eaa59b6d6838bc7cd5c535c8cd705a25522e2a897 -0x9ab076b006fe3b9edcaf10e874eab53aaad711e948ddfa5cb24f5233c2dd8efc -0xf3b2733eb4e9b0d9f9ffaf370b8929cfeef457b18660382cf86a78eb612f5058 -0x3473bee203b87e90fdef5ecd6768391a143c0fb7029e2295d44425bfa4fc2bfe -0xdfa3e05644cbb71786bb63cc11778999ff11a71c7444a13f4bb6cc7aca6a6685 -0x8683b54cfb2e575131d8e24d8f503e5ab1ec5a1196f880ca2c5b13f317fb99e7 -0x595c2561e2a5ce98a432080b0cb9a904cd841b4b97d6f8d740f0fbcb4f09c291 -0x2ee4befbfa52fd242213dab99aae43f2846440e6f4b6f5d134c7f30be0ce230b -0xee8bf2ff81dab6a74c7b354a4b122809d5c9c01a2215c3d99a9fae1b8f82df6f -0xddf68b481f629bd9568ccf9a760ca79724b545386815a632b58d8f1e08395499 -0xc1ba475b2bb91b2066eef6d91bf9e1c89227d836d6979128620e0efabc9bad3e -0x486d1c6ecd315be6abdb76d05bdfd6de6802a8c9af3cabf1b2346296765395b0 -0x3a685319e9494127c69afa6b9fd4ef2a81777fe83450e8a18eb7b8797926068a -0x0cf3f6ccc089deed8d6470fa6e4dfce9b71a2bbd22f9377ffe1daafca8420913 -0x456edf757f9caba10397f8c8fe3a8310713396ba688d2445caed70a6218dc698 -0xbf5f4e29dea632e25852cd0ae6aa2c7e136188f2932d594ea57a38646c9f01b7 -0xb942867a2a9ef67983cd10fd3bd64de06fde80059d107ac04f1bc81269b341c0 -0x06b451ac092879eedcebc4ce7560e3e38fa8ab0f8a55417d485cf9ce1e280698 -0x18f46ae93cab0363edd11f8d2acf326c4439438966ff71ff803a646b069b0f86 -0x76b4c285dbfc9b1404b7e389213dad0e7f8ece6ea87d44f4e41c69c795c25cca -0xbfa51843ba3640d656a645c3d0f7035cfc9cc5d8390814f4c5ab03a1247952b4 -0x495f4dc98b9c1b43aac8c717eecb734138160fed5369c03f859d679a2b663527 -0xd341e9f6d0ee3f1eb8d87f4b32a9790e00e52e3e3e76c607929cb12c2a190d05 -0xea607865f7fcc8e52dbdf3bd2f98455acbbb63d0cc1e5c440b2f6d747c3bf57d -0x965b068c8bb61deb99e5b9a300b05af5dbf5627def08417c41db22cbf71b5532 -0x30aaba95b7c216cbeda4eba117d5968acc90b33a2aec20a8d82b1ffe6fced79f -0x94d28a88dc666f671ad7fa951801a56368b2d608bdee4cc80a58e56bb7288d87 -0x40f0099961a4516a1b251484b88d1b49fbecf773d2b26654a161a57a75b1bd0f -0x61615e0c5a5e5a3c9be9277131987ee4b037f2cfe161314c5bf1cb0a546b62be -0xdfc4d8559c4135f83fe2da68a49477e6a7213eef621670053765f94a498e1f92 -0x85bbde5c7b5f01a7dece07df6f0aa6fc35d0cd0cecf9addac928209773999322 -0x82f852589af7c1332a7c98b9f57790e1bc866149047acff44724cadea0fb1d62 -0x937253650239028263ea703dcc602fde986b130a2d506006f12c36336208fdd6 -0xb7a0e2068c63da0666608789c6978af0c7df8f3d14bc32ac490d1b266c5936bc -0xda0fc9d21046a86a27b3ca3131c4ea59e5d51a73788a3838485b367468dc0b12 -0x81759003b5588afeff51ba6d045930b0db7b6420ea7936d6dc4979a7ed137a11 -0x0a5a0853065a688fe4e7b0ae904dfe15b44392af72ac709eb0f2b423b7e51132 -0x39987b304f4fca2063ac0a4553e3f2db30d903bbe4eca80e29da10cf94170887 -0x1a6100a4032bc88402408c4d5bc1805989d30f3628ceff7d63f536d1bb965ebe -0xa9d5bf312885c0bd07f2411ac52c0a2ef1ea2ea20609e03215a7541b61d0ce9f -0x72a2ba8409ca960a826a3cf16fd97a8ed13fc70619afa9602a8df75346fb472d -0xed865da06f060d1b70c7e7b280418be5f48eefe26aabde077729a7da00020001 -0x6f6ce5252b943a35e1aa7f667bd29be39d6c364402c4439d3786d369c735dfb2 -0x2b26d96f5136ba63614dd9f2acd3b34d9ee5b49abe4292b9bee37c4a9ad74f74 -0x2937799b9a97d0e812fc4da67a272ff172becc51607c16fccf2595ae436c49d8 -0x786aedaf2c6bf33ad2c390146f5b73aea256a10e5dbfa641638fac2c2c2a09f2 -0xfe99aeb8c7ef8c6298fcc29d53bece79e8c1e13dc3cf9f363f0170098d014bd0 -0xa30358e038dcb3e395caa738fc21c82993a18c752175c25b0a67cc796b1d9df8 -0xd1ef9ace7fee55c2aeb2ab580f316af0b3a56c7a835962794caf927dd33cd046 -0x3d8c52e72cc243fae28f980e62d537aaa036cf70df9fc43a5e8e083659f55be5 -0x270576941c387a7701bb1e42b004afed9e7920d26ae6567d78215c86c5f686d6 -0x3661df8779e3439644f23598f9dab44440646433c8cf379c7a8666d4c91f3ea2 -0x5eb3aaabd41bdc7756b48574bc86b7cd1e2bbb6fb07bad2188d0bebb3f12ef32 -0x6891b52fb15c7590ca3c5aba65d4d9483de2fbd783852400d984631e0613ca93 -0x0945ac61dfd1eeb99f734c7587ba65f709ab9a34b427c8bfbdcdf296bc16351c -0xa8bc2ac4fbdd584d2be87a6829c298ef5976ac5a344fdaa7ff63a12bce1b321b -0xff5d7e2bb0bb4da176abe8d1d82a37beeeb3cf750fe392798fe247a635d3d0cc -0xc05a999bc357b328b727e99fb0ac1fe2f440305ab9500cfa4a94625177c9fc38 -0xd0d8db9ad750a5a56d764954883a6426a18ad4dda72e011484bc01f54c4d61a0 -0xa0690404c7a3e49c5036a127bf7f93fcf2b8c5413fc71b3563bda1c9843c953d -0x62bfd66ae9b939726def1e5ab40942d353308ff884f4682da661116312a47375 -0x4277c5e181c19f44adeab359ef3e647ebc0fd4cca1c90da1433ede247eef730c -0x5d754b60d9ccb1a9ca813715e1d688b0c2e88af9d5e67d5bd95878b4390b66e4 -0x5737bb2207909ebfc9f1fc6e4d51b158ae5b13aabd9217bfdfa54fbf99f64a38 -0xb87e54c358a1a5353319c1e54eafa1db50141401c67ec52be0a00f6608503a45 -0x03c0b6810ec7ef6b6dff16978f2ac46cd35bf64ac2251e11298438d7a98fd591 -0x92150f73dfcf124a480a2a55be57175338c442580d5d7bd42dadda3afd21d82f -0xfc395fe918f68db592be5258b89f450e409bcd2953cab4e8d370f167cef0bba7 -0xfd1b0e156e617db32ff855e4ba2bb4e1897707e72416b31d1536546c144832d4 -0xa7c5b0280ed127e11a97bb3090138aff53d773cc820e927f9533e35065c331da -0x71b0ee2bc60f6e7a2c5e17b7227928db8bee308a0d5ef3b2ab9e72f6f8bec21b -0x5f2c96d4b285ca779e8d144502489553b9dacaf4efabbdd63a72ebf6ef1fe2a6 -0x0bd2a00064f320a09211f2cb4ab2b3862ef4c3b35f7ff75166e5b0c9f52b76da -0x462a5cb81c1e2465297def0007f32571c1a053a4cbc9ac9eccc6440e9e034039 -0xad8c2c357e20596bae2b5683bacf5f692ccfe29e9a296aaa0939e8c944fabff4 -0x9b1134318933cb2de47c10f0b6f5ba3fc815c2bdaea4d74f56cbb5f20d859a9e -0xd1d983ac6fc0c59650467c41efd3a417c4017878701a929eb127b1b11e11079c -0x5a8518cfb1d47627216b3d3ed290124ef17c5afead527cef970811f077a36d28 -0x7ad1fc74cb7d9fc9d8d9fd97de791daf15428b8bbe0875699d90628e87d4faab -0xfee060fe199003e0a29149ebef4df941e74276152ea2018cdc7853998c1bcb07 -0xb6cffb637adf0915c814764609a40e7cb94c85bd8735479e69051d8baa85be27 -0x2bea7077b9ed6689595ebed3079929378393c680cf8fb76846c8c062b0e7a447 -0xcb8f3747abd9b999a85146b1e60e951045483c30335652f109689dc9b68526cc -0xd18d113693ac5d59756d29b31c5a8edaa4a5250999f620e19613fe119b9bbf73 -0x4faab5b75ba09f8681f9c91a1adf9df41ffa417677bcf18e86b3de40c93bae7a -0xa41bf286b4841d05ae1f871690b3d1409c51b4efc549891e659ac0177f8128db -0xeb70fbbf2bfbab6cb1f5ae3b715c290eda3c944725d3eac2bb69f5cfdb486517 -0xc5044007eb915e0221be5b52db335a0722a129340eb7b4feea731454b0a199e1 -0xecf607007dedf5a2eb038dc66670774e74e8b750f6497000fb62710fc0886755 -0x43255510667ed97c19b28467aee393f5f6664af6eb7fac1b4eb4feb4701af8ec -0x6005110a56a186da02ae08c06c4d59c3356eab7cd1282d8a1cb686aa06fad6ff -0xeb7d40a0fa0489386f43ce85866573f1a2b3b142f082d83f3f4c407017edfe5f -0x402549de3dd612a10330b85acbe953737ebf86d5003a509b4f36849772890c34 -0xadf369b4f1b7b79df4a162cb538a1b93b197e5d7f0f02f49275e1a1368207c59 -0xd8fda777c3ea9ab4cab7d17ec9301a9859898a4a5fd784fd403c03a9dfb5774e -0x873581faaf094f7e92294ef212cdaf1a3e86f0c8d6e4ffcdd72bdcb5b01174b4 -0xfb5717c81cc815173e04592ddbdd6c970fe796b74338845fe1a9f712f54e55a8 -0x79ba83799f1acb5bb6fc28768276c4509ff57c7ec4a6ee19f388ae525da4f96f -0x7e4963f36e257856a5b10728689a976a5a293e97ad4e386b2aa07bb63180e702 -0x0532fe572c7bcc698076448b8a2c5023ba9ea251a2467a3cf4efcf9219730599 -0x5b821d0334bd0f8ca2091154b5b01420af521313dec4f85f0c8d0aeb665e2e49 -0xdc6f245567871c844371b86c7301aed9f1679e63bbaf0a89880d19481c8340e2 -0x9c0f61e15d82a1e77c806f4237f93aa3225685bc5a1b5a32cfa86ecaf6808044 -0x86a33b1df84330c001e85c00986c222a249fddfa719a2c07838fb13278aed12f -0xedf9d75f6431ed9ecdb087e3e1461e40e08856102ffbe2276b0271c6d2c1f423 -0x7cfee2ffb3bfb66d06a572b3697ffacc8654709e3b10a60c52bb2c2ec430072e -0xf989f44b22e32810ebfe626545cfca1a97c3cdc08fcbdb0c690bd60583f9bdcc -0x67133efc6cc85b8e37aa5a8dccb5aed6039d9a21bdaaa8a62ba0ad1ae3736fa5 -0xd1c70af7e46465d17339e6a3d2ec4ead4bfaad2b81a104a5b559bfad8e9ccbe0 -0x2615f141ebadc47accbbccbedcf34c4c1eb2d7462e839a7417366f1e171e4b1d -0x847024ceeb08d3a4ad27faa35356105c96bc569a8c373bd00b3566233c448692 -0x2c4fee340915471b5730147fc63f88661a814a5a26d1a51cc26976130b299432 -0x4f7a11214ac6fb93c566fdd15752ffa155d77a8596d94466f70354c0b3563e4a -0x92008cf40a32048c020c080c2d82d294c2c47dbb04914ff5526929def49c417b -0x696769a6daeb1ed7b1eed79dacb7d61b9ff88044f1a7c959f9a79dd6c6671888 -0xda2b2eb3017e27e4d2369f29d0755c2db689541c77f81c6745c357b3f4352d40 -0x1336b55ee89f7b5a0003095928c144689cef216be970d83b2b748a0e07b0e913 -0xcb9e8d0d3e2aa675406594de452e325d2554c7b8792e2a5b80ee34d8f0a79d0b -0x18f0662af5e382e4f72cf3c8cf03a8934ff05e9974e315976ec4601592ffa0fe -0x77159f97ad4879d5846d86fef6e8478da1ea448f5c34453eb947e7b03abcf57d -0xcf949cd61546362f7f3862be28ff049ba1b21bc748d81ca0db287b03cd29339e -0xd7a7f8870feaa50edfe66abc717390cebe4845d972f31362efa97987a9f75758 -0x374c8f710e0e81cdd930c7ff5a538384451646da52bb087a90768fa06b2a7078 -0x4d95c06c3ecb979e7c24fc522607164a5fff50eed3f6607efbf7473daad563e6 -0x3c96b134a546f9b20063057d9342e362e1e843f62c8204c9fec5e1683c8abc19 -0x0a97abadb787aeb3ceedbb4f54917c5130f47083f3b905de578916dc1bf85d36 -0x1bee9c5ae8023aca041c1fedf1f52666d44556a0a31bf950fca5d6d32bee1641 -0xd3b5344f8487031df21fe77b60cb855e9802fe7044e0b56d82bc35fa32f19849 -0x65394c584e3d606e49264f10a3e6981224a64f9532899599e900e630b70ad065 -0x8b3566977a1a8f52a2fbeebcf8a539b5a8f517f5cb836f053b483070269e2a4a -0xc842f4ef573178d172d77c27f048b470e34dd6dda5940b50801b139b0c9ec92e -0x8c2b600b92ae7e1954b6646a4e3770e75b54e7057de1d87ad9a8e64b0fa77897 -0x8f5c371f3cdee7e7ae74a38fd832a4962a5dfcff4a6dda2542e407afba804a7a -0xd2a86b7d08e5da11001ff4628ca717decbffd2c08446f5a2d03fb3daeb83fe34 -0xdf51031734227005fdaf540a77a411de8c350af9caa2e1ce5e140a804a6fa131 -0x9b6b8ddc6d32c038dae7f8ddf99126c0de2cf0542c42d2f89f4b3e7ca6739e88 -0x90bcb6b2105cdc9734ff165eef157ec3d4ca05eac21d1b8ce84e3531b5d385b2 -0xe0f9a0e35d798bc973a272a0c310046580a105f455fd5aaca530eff9769ac14f -0xa822f3eca20c5fb5b15ddc07296844db761c8baa4f43c0697b6c7d847125c5e8 -0x5ddbbdeb666ee819feaf0b831bcaba829f402c9f3234c0ac5f485b94e68ddc39 -0xc60d882dabb0d25b1efa531900c3a8a618da6e71039c214fafead646178e611f -0xe8be11512d6117928988ea7b9d54ef2f0cdd003766c8f0a9b21672d2c7db96c1 -0x28b0a77474477b9248ec4b5d8b70d06f2c81de2ead23db24c3d48f8ffd77a95c -0x92430101bfa0cfc5abcd84971a9496f0c0750155754d89ee78371c9adfc98e5a -0x426aa056ad9972eecfcffb9a5b421b96026b5ea7225cea119b0cca8fafe883cf -0x95e2d93b190bfb97c82f14cd411696bbf72b28d996f874a40c162aed1d8afe48 -0xf990c895d43185918c7bc4581dd736738b6d5ff9c0a54abb1996da9789ad94e3 -0x5f80f80726b45d474fa971ef2e5446bce98a95f77c644070d7724326f594247d -0xb7b798d22008f19c37262795a040955c6edd12a8c574282a279a6157ae203436 -0x7cc52698821d8eb805fe76ee9188825251834f0a26280efe80996b4f4256daf8 -0x92a86f1575c22fb9f51eb1eca50d8e1caf8b720c6a886b3e1582f28b99043ba6 -0xd65927596c18a7c7597a2f367941464ddce82310101548d70101bd7bb83e64b9 -0x9a2a8b98df5b80fbf0620a06dea980867e41d5611bc10c4ffdd664ec74e342c2 -0x99bedf0d2df85b13d3c1355bc96ceedcacd675567bfa9d693922f72bedf42b05 -0x1e972766e7a698d47ca2fda19d0fbb90bc02fa8ecff3c663937b938a538474be -0xac46f840cabd75c41ed7a36895c9f08f07e471706b5785337e0bc6ea68be51ce -0x12d53726d1fd27cf50d72033c930ae1509bb0c8521c2fb996d8ce9bd1178aac4 -0x3f92a5efe5ea5e8150149a2a1e4db646323f6fcc04fbfbd111f98353825b0a0e -0x01725c6973d1d101c32cb40e26e7594333c4cfad2e4ab09a92033e649260a5f2 -0x7406320d4a40fea57ed025b96d8b686b86a6f80bbd2c3a48e0363f5a96935a5b -0xa9f402e95d65d4818df65bc8e2eaf425c3951084bf3d48cbb79e98b1614eac57 -0xd8dff87bee0102078a34023176a3ea7e5bfb67aff219e0485efba9a68a2efe1f -0x4b673bfaeb3ffce07321c9159f40edc488466924ef7936f3c000ae71951c8453 -0x2030b597c6ab5e8ae6615a09d6789c2d27e395bad3e8b92326d4f6400fee2d63 -0x136d547fb57b6d154f668cb6a38e8b166e805998021a6b2de2722c86bd9ceac0 -0xcc3b82a4d6d38a0fcf19a1e149b2558e7abd3db2ac05341fb74dbee751f05cb4 -0xc8c59d9a32bf2ef5a5ec886dcebec957655545641b2caca3062db07a3d80c55c -0xedfaffc397a2cf9091a0e0cec362c4c73810542d77619a6682b4afa634f6ddc3 -0x7f74dc29580a8af12e5a5b0e730d8af6c80f66470d85277fde2b07c0272e0188 -0xf2fdb043e8bdde07201276262598ec1190c5753fb16b29d436371767950ed6e8 -0x588bdc2e35e0fccdaf68143b5d670d507deb575a5f996abebf7337907863358b -0xd20173826f93d2d047f3db485cdd0d5089cbed3e9aa4c0e4a085a7b85d4fa3eb -0x3b12e67a2c410a4fb42f78df92356e0b731b97b5b19315f805fdabbdea7dc3d8 -0x9042bd64e7100c656ddcb7b1dda208a78a597787d3e723a663bf75922144ed3e -0x87477fe9798b640e9e2c22528d3a2ec33c7f091aa4dd92409a5e59b6bfed800d -0x1d31b950890173ab16a7b64f577ba88fec551402acf7d682bb6f6fd68bb65029 -0x6217645e120ec594a1b441c5fbc0e6618801c5bd2859ec9162bc155ddf923897 -0x39f5f7765e9418605c3bf0d533965ff75d54e91558ca3c6efb5e747234e5e7f7 -0x1acb2007a5db1e7cb25378ddf6fec8d068e6bd17e478d23c4261456500b2c2a7 -0xcd0d2c1d54df8e81b2a78f6d18afe6a8a8eacc010e1249d8949d24c3d0b4e3c5 -0x2b74243b686765e0d2f279b23950dc05ca17764ec7ef90f624fc8cc51d702e19 -0x72e275ea295f51585f734183aaaa2f846d6ec66a6d1cab35cb0f0af2aee6fea6 -0xd8a6c752857aeb51459e076a5bc479d57b7054b4475ba07e5c3bf32695e6b584 -0xc7d51bfb0084cd0c577017f482cfcfa724311b85df7df54d40b6f98e1ea303a4 -0x4c22d2ad1a90d03ce01018e49998f054260a2cfe10510e445e46ab9f72a8a4aa -0xa1f73d43fd65b4ed8f984657ef4b3ecddccc0084b8aa1a1cb43c4f70e08a034b -0x79877cb9d15a15f6fa484d99e563dcbf3f5eb06c63f096d1b3836d7a89114b29 -0x13bff5c28f75e3f43ab9d746d3cd0258894679c880ddfe688342be99c652a381 -0xa460b9265f0d631b5d2cf71957f8a45ea3dec62b74150772c9431ed8d88d8245 -0xc7c396fe6392378a8bdd6998e231f9fc05966f1d992b74eaafa36849e2cb7d20 -0x94c47f6adfb8a294028384c0196c006ab76fa0df2b0a6ea30e6b501d1b6c7874 -0xe1645e6e145d280e24e81070cadf730e34a5ad22aa36743037ea3f3848eb3d75 -0x040cff4525c60f74d01ca934418ee75347a7458f445d972f2a27d01532f8b21a -0x61803d974760081e251f16d7e9b2d9a9ce3a506fc1c9e79bf6f4c1b56d956199 -0x40f2467163b836306882da32ec47ebc81ae8795b5198b79c3e86f1acefa369e6 -0xdf8585c6f296e02ba336f32fff3e5b8cdcea3bf3c073f562f1b073c86183b1f9 -0x9f02b201141bbef4cd63eee9c731c08f592053c464e41d668081e699aa60b742 -0x8e2dd7f6f803a7519b0955b4d84817cc25756363bfe57c03745b1488b5d2c4f9 -0x6f57e2323f2083af32d99930e074a6871d458c13b67693c5c11c6851dda42382 -0xaddff9620290092cdd7df9a727bd13638fe1b630412726b485b9b4cd625a9e8e -0x398ba9675bbca04d23f4da2ffb24b04a04f0b0f21d7fd31429bbb8d48e8918dc -0xa23d91e01ca62adcaaa57e2cb6eaf402f3a857ac10c6b217f215538e5e1d2ab6 -0xcf7adfe492ac11b989fc71c3b5406e63862cd73a74a95b46fb4578c508030d26 -0x866eac63b3be5fad93bb292a3b61eed3f319d673e027ad6316329b7189993a76 -0xf475eef2ae906a652475ac52fc93d226868d02297e964c6b5178a51291a26d4b -0xeb14c828182c0bfc2dae5db18b52490247f227493bbf9c638006d70f4ed9b928 -0x1610f44e4cbc4c1bd1cb73607ee78fc68fbe5ac11b8ed814754dd5f0f1a5dc2c -0x9d2deb8c08df5e1721f9e2e018202f742c51ca6ddbe215f5d8b48c019f7fc765 -0xcd6993bdb8da63cada061cca4aaad283b5fbb59b4b24823f2b3b3382b462ea35 -0x5c70ae08ef4710a3a239eb4701d1faf81ff03aa45a173cd4ee51a72c8d170f1d -0xf6fc64ab693c87ccd91dd0635fc6a57388d34067c763f13033619804d6e677cc -0x0af53030e6c706af610e725a25d6d4b65d2c1bcb2ba3a7a0be518f258c1939be -0xbccb2aa439f51d35a2c0bd27458ff0dc1293c8fca10f0f81e6a7b6d710cdeddf -0xc84cf9fc268717e389343c455e23e0dd74347f802ff7ed17f31056cd9c353b79 -0xb2c4f8db68dc4dcbcb89d839b87b7356c270ffc7b7633904b0d716a5f60a9331 -0xf1455528180b9efb81b2ad12ce14dbe18168a82397233798a28615aaeaf33fc2 -0xc92e2ae6ead546ebd4142063d0ea52e08a2ccc66af65ce15db29269be6902666 -0xb0f7072ff0cb05c38cd5ee25b9c204fabeee781a1b69bd0ea9cff534123aed37 -0x55450849408878b2b40251f7b8cf2ea05b07c8a7367a6990185e2838d6f5a266 -0x1ad3907985d1b5249a957a0a9cc4a5983a0d2afa923bb3035852db1a55d2d003 -0x8628c596596fb91024e584a892b35c3a8e4238bdf8909e6bff4c01f8069a8716 -0xeb744a8845f24e17bb102fea36fd9e32cb0c4dbcfcc6fe35d023e9dd033b1d78 -0xbfeb0b1edf7d0370c6a2ca47d4c9892e1b0e1fb8875c512cb2ef3c86554ad4d4 -0x2e0aa821201ca7c2331fa237a59a2b412ebd09a67626f2a97736caf6900d8e06 -0x9b8bef83453e2fc9bb867fb156336316c2b41efbe5abba3bd3a1a8ad43e64f4e -0xfcca1cbf7a21e4e249b3bb652f4aff4bb6d3722c8860520d8680c66a3769b904 -0xacb031380ff80c706ed9a2a7c1a6666eb66f4422d36c63adc8a16828fb15f47f -0xfdad393500156166849adf0425f6478e2d40f31816446bf46c9a3403eb2949a3 -0x61f9c5551fdcf554fdf5b452aaa89fc264200a5a2e25c15232cc27402913aedc -0xce2b8528ba0e6573ad9d2a211f927718e7ea11c0966bd21b986ec6ce37bce1dc -0x49ad94ba2f750dbdf9fb35b6c9ef3d392316877539a3680537d379e3107e3a1b -0x39e3af7c8c38876e221caf26badb0ffbd029917e9acae555ad26ad1dcc7e297f -0x58f5c1fd56034e79040e67e92ffedad99409b9d498f502fb85afd4cafbca1b90 -0x6359d2ad77b8a52e3f6b12a0c560c25bae7adc36aa0e1d3f673a07869d4bc62b -0xc52f898305f240f882167766d8ecf25f6da7fc7d3b9203a8f21935e7b97fb909 -0x92598e2b5985626e7e17989bc39d824a23c73eea843bef1bcc5fbc1e5683e4a0 -0xf09e5c00a6c25c4164a3a440f482c50c7d48d6f08b581b890255462f2a915ab7 -0xaac0bd047b09282bfedbea55f133d31d2489cfbb2f99c159baff372f788433ea -0xd1715c10e356026ea6b08c2e701e8c62fb1895a6c05ed9aa4b01d10552d8bff5 -0x2b5d7c6f331c060126646a89f93e4fca1d8afee7c22ebf108547c32cc52fe718 -0xdf6f1b2b01fd574d4d2c823757dff010dd8833a719d3ae02a29339c7b01fbe8f -0x4e88880dfacca4c50d442a4b6f107533046bfaf1f91d258753cfeda98547c58c -0x00b85c005b8665cb749ee34b40e1cd80564f23b53099d536e6b45e204d0c6c82 -0xc1787b289887938b22d1d5939daea93432beeeb861ff9ffe4cd2f8a7514614a5 -0x308e8446846c580671bc4e0708d661986f7119e40ed573a3f3ebe386c7d12a3c -0xcd657a08de18992b6961ecb8425b3463b6bc27853316d69771395e905d3c3824 -0xea1be8ab9549a55f29a0b5f116887092038b54dd1d3f2999c37ffc6a99050f60 -0x9f4fe3e2f814c6160147d0e9af674b69a9ec3f16856a167dbb0d15318edbdaa5 -0x8bc1862b15e20fee6b2879f97f27aa96228422959840b8eeb4ff2220cf2ba445 -0xb3b1f7278809bafe70b88e7cf5ccf531737d2bcc2c109b94c35afc6c60378d16 -0xbde0721d63928c36a641a676d7c7d0172fe080bf9b78be315ce99d3d2261a7b7 -0xda3b286b73ef477649fcc5bbbb089b60cae8ccb793b1c276bbab660499626317 -0xb147e00bbf63b6f2799ef7427392c411979a2e6789fc7d6ce1284763aa9045ce -0x989e312831db435d25b8f3d0c03eecdf0585a5cf2d70b6b2f92912a022784371 -0xee820659458449632b6316adc59ca6f40c9962c5098abf5053aaef0f75a800f5 -0x469db795f7699bb8fe39f728324d9d96cbc365b1ca9b19adf84ae237bd56d08a -0x8d34c61e735ef2d2eec892f190ab502ead799cc0e1257a3ebc4e01db6393844f -0x110798de15c987f68cd8babbbad12aed5d52cbf97b9185fab83b7418d36b13b8 -0xd63481a732e95236e1832fb90744f7fb3b24e8ddfa3064398839ccfc5840c90a -0x9b1f5d760e34393d8b1cdf402bea63f2337365011b32d32270af55a12dbc20ab -0x7ef9c78c0ad529ff8c9ee66737e6f12710d6c3090aaee87d1663a85d86fb0afc -0x3dc2d772551c8947dd030fb12c3f7087624b127ab576c86199a40e0c18b740db -0x1814495a97c186e608bc2fe3dbb2ca5236aa78fdf482d0661933231e3bdb1db2 -0x7cb67575f3c4cc72be96d077b7c6a6c8fb8cfd2aad56ded6a9d6b51fd8250796 -0x7926474cd97ed47c9f9c41f9b2dd94a3da2964a6d71fc1716c35656946dc0349 -0x6929b22bbaa3a0910fd3f1b21c91c7a1f5852461761c83e60c9b3ad7cf5c0cc5 -0x3166938334ca1fd4a36d74d53a18fbd99b9b49e3d26c96e9cb41185b6166771e -0x175b21df1b12416dead7d5a654cb9dfa4df2f7f1dbac07ce5bded7b431b984f8 -0xba51344f335e21f59aee2501c5d151415dfdc6b494e3e81781d2a0c40128044b -0x588ababbd0d8bdc85baa950ed7f7135206717e0479e21d83ec8fce0135b4d332 -0x19f86b83aa4580b930956773f2ce77efb6ae6fbde9ff3861de3c67c988b9d8c0 -0x4ba3b98f7bca4e1051983844b4a1c4a5d38fd3cd8ff81494d064bc7cc104ee10 -0x57ac6730bd541df6b0ef20881faa862b3f44ade596ab776cfcdd968821a34550 -0xbc4e832554abb9c8b03e930cdedd962add62eb84945560c77a75591d15cf0daa -0x11b0f168ab4254f92a20b1d63be97861a852930b27947732aea8725e01c6469a -0x47f01acef6bb5db2334e7c54a19b09108e9ae41754d676505eda1d02f774ff02 -0xd56fa455e81ab0561f5cc665576a3cbca224df5fd0cb532574b8620a173d3ccb -0x9059775b70d290fd7e66032c6a62d946dfa96483fe9b099386dcede367685f7d -0x72a26ab8c666e6f25e228ecb3032aeeb090fab5c90b1c19fb8d075a0cb05b885 -0xcc14ceb26c658d55c9e61c6f9afb8c51dde5f1d2080ab6e195292295ee09d779 -0xdb89b46bb150961577125c6a86c24fc7d15a97084ade95ccc74ed2802b19fc78 -0x179b315028f1e24f3b0e993e9ae33feee7c65edd179aeff70481f57770851784 -0xb1fbbe4e5a150ddfe1cefc96e992cc3c49ec4d783d5294c053d9cfd8fb5fdcad -0xa5094903c36a68986b4633a1ded51a8b7bd02bee8b9a2244a0c28a2837df802e -0xcf7c4fd11af7e9965ff45435fbbcaea24f8fd2a4f201e72a35d8e2f4ed65fa5d -0x34417331d2ed1389b306375106bf0d9c32bf86dc12564b8935c90e49f4aa68c0 -0x5f264fcd876216b86fcdbb005c364e9662ca6ef437e35d54d80acd8d433cc800 -0x020cdeef4725ad9c05ce3aed1706f7c09149b898d1d7f2c3ba9bd28c5a81f8f1 -0xcd44d11575fe71ad1b97905cbe8b8e1ef3f2c9d9ce6ce0b82fce76c972b5e048 -0x4c8384d9b35fa07e5a6c3b7498b587cbfb395410abe317f97062ae0ce89e7551 -0x58e2054fa77d43fccc068ad56dc1b96aa24b268c7e7b07f7312a5d3090d1cc10 -0xb5ff71ada045e989b3217b44c4e3248619e96e38000b7adc8fe8bac5888e14b7 -0x3716f50148e8dfc595ed93d6fae7efe81b0fa5e1508912c5325b6f62451c2cc6 -0x24295bff67bd9bc0b475fe46d14e9486341354dcde8dfe837ace26f1f6f21dfd -0xe1e74ff4a9a0c1d69f511218ed5b784fb6880324552b5450d9c5df9324bf03b2 -0x276adfdca382194086465bca7ef65764931c329c5b5bd6d51b9d039474a98176 -0xabf755b394640d8e52d620e3eb2e495c23036bb24282f450bc0a1a452f7a1745 -0x53115142a2e01471b69c1ed5ce444b7029cb5e723ea654d1890612d744f345b0 -0x027274f8367e92729e515eeaf50c16bd21c738556eacd283941eb5349c04dad1 -0xa18149f09591e0f52d5f6a28185da698c84b0350127e1e6176ec0f413507bb3c -0x95bc56741d783e8191684590710fe9001914975f2342c5d801f288c6c7eb3211 -0xc084218348cdb533534397143997a814dc8801c08a55765d5f4c4d0048269b1a -0x8d9d49f149f8b6e2e4b746630518b7d2b088e47da630c7512be44e1d6c886829 -0x7feaf127ae9855f7966f0e6c0c080d19a84a63ca646ef8476da60ba86b9219b9 -0x2025b3bfccbb02fdb7c2663aa5430e55d22ce8ddcceb75e43a3acb0b2cb94cf0 -0x1fa15716eb23ce149b675ff9e1bf7c2d2fff3db25245f1cd185144ed55ee7565 -0xc28db0aef8f931446863231e93edb79abf1b772b9d3af2b0cfcfa470f7ecd591 -0x66bc94a5bd2f79039dd6fda61c121237d67a5e0ddc4e23c30b1580f88fa32b79 -0x01733a2f18885c8f19425087c83029705ad9b71ed29568570ebca46dd5fbb84d -0x777cfe00bf2355bdd35131d2b66db7989492a187dee48916970a2533f7ec5794 -0x7f874d6249ff268b151d74aff1bc2fedac78028bdb5fa758c770a4131d568dd9 -0xbd0001916fd42f6ab8c4863c12333224daff293f125dfa5feb58335005a786c0 -0xa941c111a690b8b34668d4a16c248731e9c173c928b7fa44df83a8cd8a842091 -0xad083f22ecba5e359d1a33ac7da8832137772392127f84b33df6525b12641759 -0xeb69c8bb030f794911c33df6be383587d87502a5039c1eac641abc745daa1909 -0x18dc5c33cba08a4c7c7546531634bf37e91784352832e55e2bbcb3fc4ad4d739 -0xd82837a2a15c1f247bf84010cad27a0efc36ad0e1be48c7b2709fcbf30f55d9f -0xa383c3458677bfebe0caf8198d4276e6d3929fc8e1fc32e88f520e76f1b36ff6 -0x0c8e72ee8854e3db78f1661a23e7c2a17127e910aec309f53d928fde8c36fb75 -0x1c012e88333dd80c819714e5f78520c5ae96ccc56e54ad9ff3afc5e8cb96af75 -0xac4e0cd05d77d74fca00ad7336e66b54634d1f7e9b8f8159e6c6c655e190e487 -0xd863075b3c85ce625ae5beb16fa470af672d97a1ae3812f9dcc7d4417c4efaee -0xfd5640677e1f0f4256c76b18bac603a0bfa00dab2b8f3718275c0e6c93aba384 -0x8a634f1072605791b067861a557fd00576d483df8b2afb4625a53e8759e846af -0x4a14d43885d405296bb8fe723292c5a6e6917c032ec97bbc64223cb903e84821 -0x38142b74a1f37adfc144f9eb8f678e8f5b7fb282b29bf74591982706554a5f7e -0xa6eb9cf57e20b5c818cdd59342a980a6c9ced463abc5251b9509d69e0bbe808b -0xd570c30e8a39ec2cc3fc9d9ddf4623d2bcc995cbb94d7f3fdbefa81c80152d06 -0x7498c3a1d98400caa9b7129e63e65a314b19804a9701276f24e79f1cfc045520 -0x7a8c5aec2350a2e0921b2c5a4909221c38e5299f1f06b9f7e6aa421f28d1faf2 -0x92246f15e23f694440bf12591162637b25780113d90470c319cb8fce8630c944 -0xf373b5f32d5693c422f46483a2358b2cfd10abe9fc9217c8c359c508cb16fd09 -0x94e44ef162e124d55fcf0e3a8049212fb5d7fd04ebfd7c1288dfc54d7d53fc91 -0x26f8d2cd3822c48f4e77f1c3fd275f45d808656c46b176432de70cd176d0e031 -0x2b2344b0cc12c6a80ec121ebd9d05ca4856a0be6ef24cf5daebc5f5a603fdea2 -0xebc9d0aed8773e8bcf68b7e70d54c9b0d46584e7b4b4f62ac16d23f99dc27f9b -0x68e218b817ca045013222c678d6b7683210c87853d7e85bfa5e31b59a80492d0 -0xd0e90aea2f6c0d1cdab7fcccff501f1c114dad6ef23487fea01057cecddb7d11 -0xcb0db5c1bc0b00c9b09205b4b86d4538be38a6a53bbd602c3cec8088120de7cb -0xf4ac876015882e907bac91c4f791b24c837812870c8ff3652f8576f6cb8af805 -0xb4577de6437e89baeb68c60d111decf3544f5c2610890c2ac715af6ee881f776 -0x202bfcc698db4708d317fff68fefd924e15e044d6baedd431fb93e22d1a10086 -0xcafeba55bc34d9998d051ca54e2c2bb66feba2b89e1f8c4999a46a2b117f7af3 -0x77bfcfdc74d02add1a0302d0d054bdfdea5e2a48b66afef4cb6352131810dc13 -0xfe8d1684b75aff56bee140e4e85522e1cf3bcb92e5ae67a880b20508ddd31d82 -0xfaa8c17b193146df35c91f49d8b55d77f5af65317c26d7477ac4509791a93ccc -0xa5fda6f89a5e6d1dddfa7889a0c1a121cd65f5cb7a993c4569fb3086d6f6174f -0x0c71c0101fd74ea81dac65bc84554cf3567f09489d232f0aef8589d3fe000190 -0x9e2f8332d5fbe4e855ca93a13b66e1c18c2c9cc3556580945905e01945ba2488 -0x4558ec86e871703447d3d961900d0a9f81aa2552f3c431c231f835f7cb73b0d9 -0x17695e82c858a80c08d04b8e225e8de70b870ce39d4e5a2ef656519834313369 -0x148daa4a30457135ac20ac2c01aa2aa7a95c3a381c2eee6b9760c10685625df6 -0xcc65176aec5ef0b9e766488f3313b1104a736b064239955ffefc64a09f74e171 -0x5691544f7f0ff4a01bbcad68bb25ed3e0bd36ca56e8742f65287d6d06c666b6d -0xe9432f0f7421a43a432e5fc60dcefcf221285b059299870fa9fcd8d3ca6f4322 -0xc20cbb7a5092c93ecb9fb6b539f9e3c69fa2a4960fb73b22c62e860ad49b0aa4 -0xb7878f0ce1cde8fdf006e720eab5078d1e538520c17b059e3bca3da126a9c15f -0x99348e1ce6febc546624902590fdd5c121cd38e42a23f719a3dd3e623b4fc305 -0x898e6d2c1b7cb6ea2fb7f5981a49c356c5500b5234336f3dd5f3dc6464e63934 -0x9bd48cdfd2ff8bf8093c684dfc0dfef87691636d39d5f78eb054e9350f52a6af -0x69ae52a7c973a4236453ee4c69705e8432c34493460750e844cbd7da1db6958c -0x3ba9f621da023b5cc2d1c014f91167de5db8571ae2230af8a91e5c1d0ec08eb8 -0xda73f1105b07c86c83bd84dca2e22689927e9989a8c462f1abd183f007fdda3c -0x17a7ac65cfa86e28dd5a4bb2f801e63a8e0d19908d60f724b56c381f984ab30b -0x756ae89360f30e56a1c946e0e130d8bd6dbd391966693ba59d53bde18a55dc06 -0xbf684b102073fb240211d907c1778cc87293edc437fb5a67ef866c0e11214d47 -0x4dec6a493dc4a3361bd93804a11808c8134a9325eb4a35543dd872b262c52527 -0xbec59e1e1e38d60997057d3f26c946717a09e645b36a97e9cd32330c0e8892bd -0xf8b8f266528ebd117599e68f87dfdbe66cba41c4724a8f5cce0bbdcaa2bd65b6 -0x9260dc397772e1882e67012a8260f65c60f3661490ad939aa6863ef240a9e321 -0x7de26f7fe7c5b5154f7dfcb6b3e32dba28668122f012072902de6429b3ab6f8c -0x0ee9a468bc43e1963bebf962a7c19de4b2d8d95b2f3efc5a7421046a2f21217c -0xd14c457d649b362261a262afe283152bf60341de4d9dea43cdac4d7cdcf2fab9 -0x946655aae9760a2c8b4fe3e90763824111346b0949bcda2bc98176add3989db3 -0x2ae69d35123583ffed53b37244cc2482b603b23224db0cf8a8faf5fce51819fb -0x8cfdc325c95ad4690de1c0e0a4a5af38bdfa5cc8f0e148d148bc5dbc6d038063 -0x8f5dd31d7971639ff1ffa3834259bb6168e716aa193d42ae412091797d4e830d -0xba53cf0b505ce869ab644145ffc4b94d2d7dba7f4cef1263f6cea9c083e3b17b -0x15bff0f202a63a18b3c9ec3d5767c0d2ae487cd67a5e1c87118c212cc7401e36 -0x59764cc60f1a4551c09a997c202617cf50ef0f9c57f7ebc5e634663fd5623a29 -0xd96c25af2a2c75a318a036f5e90946cc49f29ce24435e326674d442a355a9181 -0xb7d86d0a05fb38a1b1e619fc323d9d095da833ad477552f86a1e324a931caebe -0x7f5bf78aedaabcc666a448e32e8be213644f4e9ce34314c997b9422ab8829707 -0x2ac31ecce67c4669f9b608cc6ac3ae4e77b80bf30fcb18ce2f26f5bf1fe25ff4 -0x8bd86d794886b54f2aa3ad4507f2bdf56904525b9ec23a86eb1ee90ee629a58b -0x8084a5f74eb7a9ca49033df5e1e2ff3067ac3780e26dac8d09267af3e6964b01 -0x4351097f49194eb14f4b42eb1b82c520757fa874dbf793c22b3f6821dce1b78d -0xa775d93b54366a6e6d7aec608e86ebeb7ddf25448e8c5846f391c7461a4a4769 -0x2d5e75d68edfb93d4cca4ac52539e96e7eb230a730c30d324f03542c0b331112 -0xd5f6225531e8b86d42839c1202bb247c847b2a90ab297f6ce02480f9ccca7694 -0xbab7bf40e25aaa8799ad2e5ae07f4e98eebcb758eabd12d4954deb37326b4302 -0x5a1b857f8b6c8f7cc94a4ecfceae7bd7e2cd1bba3d5cc48fdbf51748091d1d72 -0x0b6dbd48b1c1f6aa826e60d0ccfffba9b3348ea1bbcc76be3455955c177a00cd -0xd9f0dc6bce2dc6ca709218c2b472833ff9c76ec7daa076cd2f1a98fce9a12e6e -0x6501af50636c5dcb8b7108c0def472188e31fa13e478931e4b34a22efdac8eda -0x31d36983ff90a91b837f6b897f7ede46f07e83b4a6f6c4ef3369c1dd4c6d871b -0x90d0ed4ed365438565b38a9254892f39d40795a1fdb6e1a62444849df17dfb9c -0x67ab18e55ebade5c70854c199561932aa9be3fc3c9dc4513512900a8273b004f -0xa87f5813b1db729452f5210e9ded7a94de2113e668aed5a38dc2b1bd7b1abf89 -0xa4b2d91579b49cb01d0690f02c050af2076f09d3b7008d0a1bb00b884784a6a5 -0x615394df77f0d84c05f9eb39a7459630dcdfedaa59cfabffda7fb4e52cbe89a9 -0x5f7695b281e25bc95d75775b3d733b8ae38082c9102cbdaaca9ad2de60e9bb0c -0xcf55575617ffac73646044febab107d00c6cd554d53ad849b3b032d767ef52ba -0x321f1a04d38bfcf012b5f255400bcb7ed427cafc46429a192e5756608f5cf30b -0x047dcd9e78a52393c83497e1d1fe30b0eee8f802a011017127a256ad0b107839 -0xf93d30a846ba26ad69d239e52d5017ef6ff8b448de935fea57e80e66041bf8a5 -0xd8b3ba8eb5585837039ce57b360e1c563a9e6cc9d1552d1876fc5e69b4d294ce -0xad87eb58a0a63e90d17efadf7f0465e4043a0478157b486c29b1e63627040f30 -0x6fc5dc15c71a0657fce9dd261eafb5997b281a671dc9f93f66093e38fd9d60bd -0x065dd7015aaffac1f88c8fac91b105194ccb5500f61e9d6c23eed7226bbf58d4 -0xeb699e112347fef0049175a9174c2039b06d0dad8c558e6b43c41cf6d9e4c351 -0x8cfa251a3d1f5c3d7e4dfd231a9dde143db8be19949f9aeb3b3b05d3ac4bf98d -0xd1fc58811885fee7f71902a71f7606d0fcb63bec2f01e7edbc7c9f230810d9ae -0x1e8ef236012a935e4b0cb2938805e17084be23dce9894b342c6c29f98042d021 -0x9c70fdb521c4f3948d687c3baecbb0c0ba73d0ca99b12d4b8e741a42ee76537b -0xb2a253844fb39ec4fed981361a7c279ab9be751d9d4082574e546dcf9214edaf -0xf84d267eedf57db62a93279219e81034ceac6a2afff740032c61066508982038 -0x8f40d653dd85e14c54be5cddcef0b6045b159c42b403ad28d3a56874deecddbc -0x5982967b2fd77642848b710c60a4aec1050b72ed3522b382f0fefa1924471ff9 -0x7f98594a725d950b64867947247855770dc3adc6ba7c0bc11b251121e78fef19 -0xa13b3916a773d6e8a6a7e6798b47e838c4f8f8e0430c3a456aef6d6c6614fba3 -0x3e65089b6ef5ffd7255516f037b86b874ecd424c1769b0a47ab8a2cd5e515afd -0x302f5069a81da9b68f3d403d0fdb4fab63e923f335c97242bc70fa39b511fc1b -0x608bd532e4e2e92175a3f45c4fc69a2a28dd9a55e06b3823af8e1abe626b245e -0xf0521d89b96679c027726606da3616e515954d1d0fc36f0db8d873f1bb418b07 -0xd7a58dcae681671806a7b39e16049a3710235cd29d1590f003db43c87ae572b4 -0x0d7fa1a57ccf01fd69329ed9faa9775c13c710d6f4f9052ec8dba3dd8cf469cf -0x6cd8f532d32a641c820ad3f3483bd24d944b9b334ea5293368efec80d364c0d8 -0x82db1386d011195b81d613bbbde16e66ecd9b127cda74dba5eca43e6227f82a5 -0x92c6985408f4563122b3ee90c43eef5d2b08f0e985d0bb5599ed70e582f8788f -0xc25cfc775589f3f910e352b891f6d186bc0296344c9b5775e0571c8aa6a0123b -0x2075410748ac4a5d5c97b32b44fc00fd7110a7da5738f1ae7c77311a7b67c6d4 -0x33fcc940264f1341dee90f7d86e95ee4faa13eb517a7b037313912fbf41ab9f1 -0x435430ecef2c2385b3e6632ed8c6d8cf821b4f742806c7914963c0a398b3aa34 -0x898ed8659eaa859ad4849dbb9eed54f0b9e69df1e7dd32d6b1fa0997574bbb0d -0xb5423523810340af49113aeeab572ee72bc5858e835d9f5b3e57dfcf3d3061c4 -0x5b294c2098334a9aa8e1fb20709e574e2d449becc0f98232c1c5897df34d2650 -0xc1a6e09348ea2a6a44b4d9cd1dcd0a89a52f631a234482fa53a000a647a966ef -0x3c3b86c3c875f9211801689e67f74f5e1eb854b2be878a4976c8a710390d9995 -0x31e3ac266b8f9d8f9c991714bc49f3d34c260b60fa13a2b85e4d82396dc979c0 -0x77af2c2b83bd651adceb5893c803a02a24f976a4d10610685305280ded3d6655 -0x6dc1d10f3d399e6eea9a965861951b29065d478337c80a7f5e99b4666048e0eb -0x4bc697a799ebb95403923b5d6b680c2e3b739f519f3bd4d3357447f76a40ca8c -0x077d86368146fc9f4d415d0ab6a4de79191656de9bd043209582f8b7f77546fa -0x50140301784ca857e5518cc0ab3bcf1b3344d597bafe8a78f791083b85863774 -0x955304c279d5c096531cba08ef10725f49f04cefce545a87283ab27084b87fc2 -0x30baf71866e3296ad5f8cab61e40b7457c4fa1b7b1acf9531f78e77af0b49686 -0x2c7eb203c154a60e7fec94f626cd44f82b8061595c6e4b9c72d6cae404d9a66f -0xf5c5e430b97d194e8f3f50f012b1ac6c471399244291bd46cf8b8b31667bfa8d -0x9421ec6c953d2bf98de21cace06986593a318c8b04fb0d6ecf84075eedd0fb3b -0x187495afdffd2378ddc0e4ec7e76d2a8e8e33348b0e87c29e02850dfc3e6c444 -0x6c9e8481bc003d2bb591febbe0e03c7c552e0e7f13a7541f8628b1afd3d3d5fe -0xe8c6e174f82392c46c065485be17dd0942b437565d559061a8156129ccbf81e0 -0x07095c7118b5945c9cede077160f358a620f9f6b1d6d726ee2cccde073bc05c3 -0x58f0d57a6ebd98018376a85005df38000bde7a99c085f99ffdec2e8496201453 -0x068691f5c9f465a00028e36652ef96dc656b31e8ecb3b0a5f67fff84e4c3c4d6 -0x41167d5c0ee296c64d801ac5d554e6299557cf4d306d9cb19c024bef4637fbb1 -0xc8b2b06e6af02c9dfb511c605da065a5ffe06265672cfecb6278f7ab2fea1d44 -0x20d14b1b9e948a094fa18f2a3aaf661cc221cfc567211b6355fb9c762d9c47fc -0xfb8085f881ded578e747ba7c13b485e4880d44f3ccbf936cda4d19f31b3de196 -0x9cf6551b71f705bfe3f5a4af8e873bc0104d67a1ce89422f27421e7549cef4aa -0x078ee15baaa15437e70111a0da669c44b38f9a2cf001b6ea242304fd9b3c779b -0xe40aebfec62dc9b2026901fbf91d9a97e2663f252f4842bfd00c91ec2ec34d2b -0x302f4626390f409293f4d0b6e83ef3c78b758d0516c720a6ec1d9f5b85f66e75 -0xcffe8ab71f54b11f51a5e6e59447064ee093d3287be014413ef2e6d68b12711d -0xe5f17c65c92506a43326b5b9049d410fbfc5b4ac2df0d07911aee4911797b31c -0x51b5d0f1f4b0a3347107dad74661ca696bcd04c17d96cdb2241f78d75f85f1d5 -0x12a6192bea15a6c676366fc475619c2e9c57b0472de8c6d8a1879b4b86900e72 -0x225485bad8884155cec7b295e7f901dab0b4298addc3d8793ebab6281eabf541 -0x58337d5fa2f46b25598ee1d756a90ad72ba7f1a1cc05d16fe0b1e7b614af5e6f -0x259d04d88979430091c1297c0fd5f9ab0097bc96cc508ac08aef6e92cce8519e -0x5e8461ad1daa16adae18a46e64150c8ec74c07a54345e93f16953b5cde25d0c9 -0x9d688cb23409cf806b82ad31c84f2834f9f151e86090434c07867a9755cd568d -0x3b195ee89c6e9b5820e35c5a888115b0429279f8720e81342818a8b28423507f -0x0ccbdd3c538bfb36c470cb0a802d7cfbc5eccd387e4feb271dfa2ff2460cbc82 -0xda559de1adf14237fcd09257bdb013edb764c630907f7f933842df9b4922626d -0xb7cf644417b61d8317b9ad8c30a480d4e245a6887d6ad24966fad2ca8d659fa4 -0xf4a9412cce7ac945df810b5aff2dc71d80219cb8b50233ea421a139917f7bba3 -0x186bce03bbeb4e29c5cf8d2d2a36648b8f62fb6ff58b7278cf2f5fa3da1682ac -0x6c35c7d68ba4e675706389e507019e7b609d47b9fbb7fa2429f222ef19b9889f -0x17a419bd457521dd1673c054142b2c4144720516be2243e79c986ecb39ea8773 -0x4599b75d494c326b5d6ea62316dc6e5f0b4b72b312798815cc988fbccfcd4c2c -0xf527582db69490e3123ab6b9d00faa08b7829c7c04384a32b8b1dd0116d5556e -0xb4f193d1bc91bab889d65381e89234065bf158c740a0f02908070a9ac93205d9 -0xdaad624990edefa82fd467d23c6a73c0e1c7e15d0c39c718e3fc270b153cda16 -0xe656f44a75cb6d641f93059d26939832e237a6e5a6ff8b1bacc81d11d5cddc6f -0x8ef7748e5f6ba0639dca151061a44a591b4bed18250a1d54d826be72bf4ba651 -0x2dcac41723ed447d4e2ace5f57757a9b86abe11421005217d5dec0cf2bdefdc3 -0xfd4ec6abd824b3b72ba619976cf928732d0836c9a70468a814ab5b0d42a718d3 -0xa04b11b43ede9de005cd25cc620c651b642295952265d44da9299e3f0c8bc191 -0x592247c4fc352be2a348a970ea6107a321e6d2500a489d0d7c2238eb67174c81 -0x7c549a455748ef6e50edb81f4f51eb8cd0a1df6933f8ff15a679d551d7dce4ae -0x4607163f9671165e6c8a61eaf52468b40ce16aca1709a1e0472f8e9d0d426c6d -0xfec66d1578a42614f35c62b471cc6333a5e410db9683e8af5d094823b48f043a -0x0cd0ec0f6429e372619866a81460e5e94f162b974735414f5b86e50a15b7d49f -0x47d41e138a609e1b6c79d4dc451475a3cc8be637cf01120b15a127f50b4ba8fe -0x2ad29dabbd7f5934294303d20a021a7ad9af117cfde5b0068332630d903648e7 -0x6f59f1f57418002605ebfcd32acacc89e007a964a928ca5b94f26e81b23dbc88 -0x83ba296f5f7023c961dbd37720e2dcff8915065e8c9ff52f0f52e3498d5067cd -0xe8dcbd742af3d8ce7cd473b80526b122c6c903e6601b2f889e5f5f8e64b09c80 -0x51781e2da5da5a73561a09ccbfbd8fddfecf17a832c433c3662d119f55fbead5 -0xe50958c46fc90835d111b6bb9599c4ce67d2c312e130c0fe30b98fa573518b72 -0x198904d0ca2097801cee7cf85fb62712ce0e50254b0b3ca15468a688461858c2 -0xd56d5c1a771a8e365bb1bc816766c2d41587e56935691d1b4d4a2df6443865bc -0xbe8b2b627e344fe9cb56de67df9fdc5c9da317a91ee970ab6dbe2cc09db0e2d6 -0xb7307556d1a53e92cadfbf6708677d35dcfc65b2a89fa2dda70ec776face3669 -0x92da59d8032447085b43ced84f5f9e365f577c0273c36a4b8ac3f71739b9cb34 -0xa0efcbb3cdc67f5d93eb0495f7e336cb1b50dc4a7263621937dbb4825e04fffc -0x53e95cc167bc4faa073ba7bcc6cfdc75d0143bcaa00d177814318a67cbb17b47 -0xcc17da61e8352cc9f1c554de5ddadf0dc166ee89cf3a1b1fcd7962a6cef84973 -0xdd191fcd8c3e41729e0bc09420e93131ea6845cde151cadeaf185cbaa2679f46 -0xf05a967c0c78cac92bd2e712b663e33a25d2f827182342c8628458553abd044a -0x4789feef183b892e86dcfbc733dd91c561c9b7c51673e2975d8761ec687c8013 -0xc4cd60af245fbffa32678bee51353548641f155695227be39b58c887071198fc -0x54a0116bad535e26b0a0552488f31e760600d61b88f6cffbd017c67f3d84c37e -0xddb584554e49c8c7ac8883b6704ce3e601ccf42fa590a713865579c496ca2aa9 -0x60c3b3d04a7caf5bfa8bc55d4a11aa44460a6df68ec87e027959735cc0b88084 -0x12cfa3a84c8ce86aa67f3af1721540c3c6dbdc26fa3568cd67bce95c7211ab39 -0x0bf667ed7500db2a28a9e6dd2b60d7730e449aa7f605e40cfb7c270300120cbb -0x6b433fa787a5ce1c4320a07a233af6c2d3e0251ac026e2b40caa9f4349e4c539 -0x7095c0bcd13bf1ef17b74c1bd648b6d99d3d521365723f8f2b907b49053f68aa -0xc0b9507273a13261d3a4e320c8c765a1b8087a1ac72e242412bce19e67b93988 -0xb2893acf31b2fd3dac48d0688546f3f1652d0796498ccd4c16d0e4f4c554ce29 -0xc7719640a094565fb0d30e0ab46b7d095986c70d70f9f5e90c54fef358828918 -0xdecdf123337ea6cc2bdf231812cf445cbb5569cbe75021fb7b2a6130cf1c92c0 -0x247e4644445b7d3a13abca8312c98c918d0a3ddac32dbd7b0711d634317ab3f7 -0x578f7f199b1e5a537e71ea9982eaabb82b42986e3c16722dac3af7a495698f50 -0xea4d9e88480973c3325208eb02ff0276a54c8a4011b48e66cb5cfac0e2bd17af -0x12fccd87937de990536a4ef25639fd6499e003d15400c6a78a5de016b5c49634 -0x0163c9deacf41d7356fa3ad44d1243deb3479491516f5a7a0f37fc8c577b14a1 -0xebb03bd4905fadac4ab75bdeee696e6a6d429ba47c22b159344b48439741dbd2 -0xe18b071f0250b65b6e0247b324884116b577b285d2cff7d65b489ac43cb28e3d -0x7a7714813c76bd33c2d61f3bcfdee7958333c6bcf872c9606d65116bcf8fb2d5 -0xc63e0eb9d7af4ecafd3180190fbd01104b78c6f5e56b42bbd9dc4a7f0a3152a9 -0x7bda65cfa861cddec38f046e1656454a6ddb5703d6b4cf388690f68ddb8b5d54 -0xc7b8925c8ebb2fce9fadb0f298333cdda57ea42869f9fbd1e6d5a6958d018224 -0x82d44f9c027cdc0ebc2697fc727ffa89bd1677891a0ec2246bb4b20afbe43ef8 -0x703e86fca25d0133d0a739e0cb311f242e3d0be28adc167bc8cbf1869face4d8 -0xd4fbd05916d6937d00eeda6d963cd7e1f759ffe0add7dcfaa50a8c649ce23eaf -0x706e41bd28c19d7e9bc5b5add4eac2f69be4ad44b7ee839db44fae5916c00f40 -0xd6b024c370511b1f4377cfe0329abe6f997eebfa93a1fa4337f28c22657a6b80 -0xbc4e7ba20184ff10a02494ffc98d8a8a43a7b7411d2cc6d3074d5183d995469c -0x555f45294fdae6ca76ceb9c5e9bd2905ea78a81c10b540d7f0cf3a70b567e60f -0xf6ac1b108a6fe1cb3d6d81cded2ff37e51c1ad199ff69f128d6c9a2e84fca7cb -0x84b021a717fa21ada2bf76b24bab1239eb4a47fbfbaed9d4dfbe36ff754ea60d -0xf52747c93b09b12a7c7bc9570d48ad1aa54cbd684858f5593f50192862ee530b -0x89f79606f9b552e6d84e2943b7293987b4cc69bfa3e2083840bde5ca7a24f5ed -0x296256c1d277efc5e5501cfa8563b5a6c88ac26fac0df21f44f28d004a5c8e81 -0x0522a10b030668558e89731a30f40ba05d73194c8cb2fc810af9cc8d0a181ad3 -0x7ff31f764a32839aaa37949831b7fbb8028b102dad963749f07480e88b897ecd -0xc0e865c8badbe6b6a2d923c9f89b00320c77229b572e1edfbc4ea616daed9828 -0x717901f5d25c577c71363ab192500f3241201e90d8ffb0bd923f0517baeaaa5d -0x93c8bead4c64b1ab7c3eeab6206b4fbe9c22ea28409a5b3d2a57c643cd3c7b6e -0x23f830f9723b8f6aa8b5d7432e5161cff898da07acc0130d1ff759c32e78800f -0x5b2292ecb1b3b5a1e5e627f6a9c80ece166eb3420923a2860a778643defe9843 -0x6ff960aaf2d8df8d59deafb5efaa0aae4534ec2725a74f5c484888e7bcd64860 -0xcc77cbe7e704e6ecf971b15a3b4f95b409c7eb7cde26e487fc2996567421a956 -0x9f44461c05f9a80c2b48a76a652dcdfc375b6c1a4f194d5541ed2c16036c379e -0xfe25cd698eed79add3e5a2ba98de5a21f441324b0098cd11bd346d057eba2563 -0x292357a038382b41d2a9f56723b1464b2ef6ace28aa85c79ad8cccb41d275cd7 -0x10034a68f115e434375bf0ce0ce6440bc14eb7a7471a3c23a2c8aff367f0bdb4 -0xc25c633c1f58911fda7b31b4fb5707d5c0218d461be2b3b73510a16a874f196b -0x572a3d062179b437e64c1f02a8ba6292cfa60392f79bb6af6d69f2d2415d8e06 -0x0c5a8f0b2d564332bc82da0253178862ae3ed442a7a468440c8cbef3b7d491aa -0xb9688a70086a8786f0dbd3fbc98d8f2fc8ce19a55d56345249a94ca80ad4a31c -0x643aa42d2fafc00b6d2ae36d7df6a6073aaf2e2db2dd7c93add6764b1611f227 -0x820e0a1ab7b41343da0057b74eb88017f8080c8a9d8a430bdd811d4331d948ef -0x4b041a07d52ca6a1327d065dfee3a18d312a3f1f0dd138f8616515fffe309773 -0x4b0bfd9f703ec4895bf768709f967f908c1fbb379d29aed602a07242775436a7 -0xff3645755b63ac89719d7e32f49952c37c3979e0bdf1061b2fe97708b5bb4db4 -0xd17d591294428ac33be643b0bb54d7551bcd9ad18d1ffdd7b912153000d2c809 -0xb0881b78f3571af4c064d4a70ce358e7f9446817f6994d1d26e19259e664d897 -0xab6bdb8515ad625bf5b098982879d2594209be0a210c18a29a403c9cb3a22f22 -0xb0a797d0a4299f1d951840121f6debd9cc0752b4fff2b82efa403dc1220a4888 -0xd51bb3befc2a518635a809dd4608da1b20efc98dba640d1e356d23558f9dc637 -0xbc6636f03b1c85b8d9ba25f1d53889ba645bf74b17f68989f60f7d48abd7f788 -0xd4262d17f8860bf25da7c6120e61f9986fd9a1128a6b7ec43b89fa00995e893b -0x8636b413a1351fcad9e75b1368cd3177eac3c8c46cbb8a8e02a4b6a7cff5fa39 -0x8c227420bc512f1cf6ed166587ed4858e430b160e6276ebea286cce880f7077a -0xbfc1ea2da5116783fce45e1ea1b56144f5f0ea43978c49b75c7cb7ec0e08f9c4 -0xae774e7a00f8fc4218dea596ab021b9e789ca40396a473fb149ac6dc87ca1f50 -0x7441364b83cb4aa5d081101be0165072d7989dc537c7e75de292d3300e1a332a -0xa20e40154f4aee25e716d499a16c5f1465f049db3749641923930786092dbba2 -0xd8328016e52c67573b4d083479a16c7054f372996793318bc2d1459e375c6d77 -0x828566e3a0d02ad5f9726c4c61c4654f43e7c7da4ebf4b18226854ff5a6095ba -0xe0682167d9a3a600d6a8203b837b76eaa9fd3042417c6777e97fc2a8b06d89e8 -0x25b9d0435a2603eed73d4fc40ac94fca04fab44ba5e9ec7ec0d250bd02afd7f4 -0xf53a6b8d36ff81d01313148398e225b1c51fb51daf4bc324b5b1ee0876e5ffcb -0x70b7d46583f76891459dabae9d0804c3b64920291cbc0d29a7c618e8f3cffb2b -0x440f650e9955291d9157a3752fc3b3e9361e2ffd1ed7bbae965ba4cc49233e9f -0xec640d97b473c9240498af628554f15fada5e619f90ac2dbb7f1037371fb48d8 -0x805450e5ab5cea6cc198ce348d32358ced1792fa59b590898ea2220b0c385ee8 -0x4a65d250c1e8299fd862360f173b423144f42c59e609de5829b2a59b8348ed5b -0xf28cd3758c035e61b85a6b95e031e922541efc4a2aed2a36e8ea89cb9c8f38f2 -0x7f1b5f138e3680184c52fd292631651c162c3377ace194ca87e1915826e66244 -0x0f1c46d03861359d0ec5574a6c23b4d71358af37320444a8a4b56ee5b864136d -0x8ab46b8f81499ddcd1c2293d666f7cc16aa1ed7e05860e341dc6617c7a70f136 -0x6b12cfe1b8db4bf389a2156520620005597056d256831eec53e17a2a7e31278c -0x93afba7b51b03da166b3f6a777dcf72a9da15807c131425afd28217e9cf3667f -0x4edf44c6fb9f368564a71f12a6c30ae6d3e183e14d91ea045f977660c0cbbb35 -0xc963af788388e3f43cb06684a5ca81b2a216690b3df98fedf313ad4393305411 -0x30b62f34153c1e2171aa0374355f0f9181f09f1e791e785d1521475eaa80ba9e -0xce4e8c99504bf729d3b2d10c2f53deb3c17e067ef5f0b739e90e06e72e97405d -0xff1a3595bd24faadda53a3762eeb716533b02c9a58046cfcd6f65e7d3783321d -0x29f14bb91e22284e2d7f55cc61e8668fb13441ec6838bc9136610f3e64b63fda -0x6edf723911c5500be3898fd68625637e99e26f72b29f0d2c7f86780296e08f6b -0x28d58e19dc2252ac7d0861dd6a092a9f28faf5b56a4576285eefa6cc25d46e6b -0x6c9593266cb9df804f319cbc4dc9920bbc9bf5d79bb3c8692f0c00e8d0311471 -0x9380e7e2a3ccbc89beb44bac074100fbfe690245949a76ad1a7b945d6e7fb088 -0x0870c54ca00bd547c635e435fb4d8abf9521bf269377220805bf83e586eefb2c -0xd9f54a1df7c21ddca5f3631327900cf74af7fa2ed12f3be6787f3d85c229d75d -0xf42c8c954a78a6bd03d1e33edf56b131b757c1314c926e5bfaeeea537d422d2f -0xbdf4fc8dd6989d81f10b71b023be3333089f9144a19d6079ab7731a60e530f7f -0x8dba44ba8b2dd32d6679bdcde29c6b3f6f733ecad76579c214ea7f804d56a38a -0x7a5557edeb2a5ff35eecefd7acb775630e7caeefee2d1e234759e4ad5f82a230 -0x3460be735f00a013b256f0cd879b1d49200fbb3b2119267f30d280ddf8197544 -0x70186901ce7d271dc99ec08fc88c67a785552f766474dfc50b2cce927e0e12ea -0x9b0fdcab444044efa14b00fb9666e58453cb75825b4dc5bd19a3767ae963cabe -0x462e0e4da8c5ea2afb9cc2b3a72a25fb19cfd2e80b8a3342537e63628a84fc90 -0x4d2f837021425414a2c9e0fa6ab6855e32538a9f421e782a7d9b58b7437bc1bb -0xca8b612524b97e816ce166f17cdfdc5a75a5b9b39e71feb5854726cdedaf96c9 -0xda7bbee9664193f5961b97894e2c93d6a7d4f522c0d7b293005c19b77f5a19c3 -0x44bdeabcbbf80f5631a0e56faa220997bdf4aca3de59073cd455cb8bfde092ac -0xf279c0986808fe7f155b818335aa7cdea660585e860fa17e52e38d2fc58457a0 -0x6b2e3068a3126d89dbec15ed3e82fd89499de53e2eb8385925b4ee40e42a05c8 -0x29057faa6573eca8ca177fef035ad00e629259875521adbf7a9f69a655110c03 -0x717e0c27a2cca2cf6d4a5c84b1289d7cef921883fdf531cc5ca351480658834d -0xa0cf20764ea93f34bf4d3155767e051c3eada5c76149d9d4754aaaee7fa07fea -0x543c11413c7aed14b14ccab4a18d6fe06dcd9d091695a87383d5216f6bf26923 -0xd8d6a73498c3b17e5ead5a4d31ef736da8a31a02ea1a406f32d4815aa05f837b -0x138ac2dda16a7424f1042db155a3dc744eb8d77780bd0b039196bde6217596d6 -0xbc45398dc63ea4ef777c17c684cf836f16c77a044127bfd2d5ccf52d659030d0 -0x7fca3afea414271dc91ed25bb15f709f74b5984de57af06b438212dcf1c9cd32 -0x0c52791256d7b5063cd3e9bff341e1ef84e5cbe26e97c1d87ad6d625d32e09b0 -0x2bf49591aad1c33647c347660907fe090990e18e35cb3851bd2f8ad96b69ff3d -0xe98600880f6e41727128629346f3e1e0756fdd61ae29973bd29e7c63dd883ce8 -0x214c7c4745c72b6caa4a109442bbb6ba9a7f4dfb3765be4c8207f286139b688c -0x421e21d912e2a4f0138b635332eba18b5380b81830225d78276c46b9c16057ef -0x6a82c6bf92801f47b72e736782de9a051696b3b1b8c1eaba584f8fa86f16ae6c -0x12e82f84ee7969ec6cf87e4587958a02a45a3e4c536f768f2cd5def413f1901b -0x37d297e76870a9d5651f72243407838986481d16c80ea6c6fac1fac6ff74c89b -0xc914fcced7cd9545390d9012a049cdf1ec43e4b7e4e27927b0704f40f7ca0a0a -0x67b026dfef408fc6817df4f295519394b1df00fe5e1b3b870d01c9a8f385ea1a -0x031cc599acae1abfe355b680869d3f636d2b3a9e32a44a8c0771b2f470aa5fee -0xdd5c9da0b3e96e32302eb3fdc4fd8fe577d15aaa29ca5d3020946b96ec644fa8 -0xcc205f22df621f09d7a41ca9bcdeecca25f191c643da4f8b8598dc19a1323428 -0xc2b9778e427fd04277d763e4e64802ed7c4dc26e31b376166e4da14669e3895e -0xa0bd05d4fa37c222b0b3f8f6be62af9401f9efdac1aa99955672373c4573bb4a -0x6ffa0ead1db0d6bb12ecf00f2b3198e2eda2620e61303b98c536e19bec660556 -0x11e21e8814f107fc673f6ba4f58ac2b6ea42f7561d9580feda0f26a7462cb014 -0x1d8e9b021d6b8ed9bf69cd4bdc94b0fa37cafa6e079c6ba8f8b2b2b95cb90a7d -0xda1e766d159f1cef4727bc8e266fd5d1c9b37c524da1aa632dab856664dfc51f -0xb167f0646d7bca2ba790544a6801e4ef4ce200d4e7feb704d08191274826f921 -0x1c6905fcae923b5704f2f531e6dda29be5fb373921dfa16bfad0b7450e612fe2 -0xe1ef42d65b3c9347ec01fcb0a85ba3814caada7cd7f8fedd43891acba556ae8b -0xa4e2c075af3c506e66d0515c7cc6a54ce1083eed563e5f69810ea6c0c80cc064 -0xc36ac9fb58158a1e5247eb87fde2f608a010a6dfb0b25b02900e1e3ac858205a -0x4964c4fbd9e226ffee01ca3ed36716c094b825555abc20c7bb9ced55e07a161c -0x2b15363e5be3dfeb78bf3216a25c5453aa716e9a8e0036b3de10717ae10b577c -0xa381a05e6e7b26f9954258098a38d23357b3698802b1bec7034454d21c19ac52 -0x22db319d0710f3ea002819efdb424a0eb6a220bc0f6eff21535a96b5ca548e5a -0xd0daf0d260f8a11f2bb922bcdb27e08faab179e2c9fb6fe3da781a6f1c4a22c8 -0xa343b1f78070d8c56e095dfb93ce4a7e68c853548382c7aea99836584111d6fd -0xa5512db57b786879fe1a1f8b08758365c86eb9753122cd0c65a70f6948a83154 -0xb390ffc27234852d5fd4dd712beb22bcbe5870bf1948fba368a952a3fd39f2da -0xc03be834aae84cc47213cc655f3f53ae766812144950344f3358db5f09c0d30b -0xa108e6ad6e79b7d19877d60bc02232cf950e6954dc00db7edfae05ad0f94ae39 -0xd186b9137d0d45a19353073c6700e14aa4496e9a7a099eee0c469ae7a195f22d -0x035700da23c849075f0cb30a3cd6b6adc529c59b9376234b0d4ea92bf90e96e3 -0x32d1fa40c701f07a3ca62d2631aeae6d92305af6f401f99df44b639606efd0ee -0xe4eb07f5be7430415bbbca8291d9f8ffb18a915481e01df912d417dc26b6d5c9 -0xdda875e6c1a81bd50403ce96ff2fdf1684887e379efdbf3554804f023c2cf369 -0x52f473591695975d5a0cdd53ac13359eb1bad58a26189c7a61819c3196087743 -0x7ca6ca7b6a46da1e706b8bb6bf192ab353016a70a1bb474032389727ba097de4 -0x7ebeb91c3d2058bee2daf34a4e7ccb2019d6de9466713f6dce01dc3c76ae296a -0xcc1595c18150c1b5852b28f1d510ea1e4215d9521e33c4424d9ba6f79cbd1cbe -0xbb5cad892caee6199dbf7d99aa6ae949ab394dedfc6e5f23ecdf994bb9edcdbf -0xc351c6e2f620c6f0538e3fecb757c632730abff1b759794098509ba1b6397580 -0x1a7cdbc05e4ea15a5d9c6d98a6b10f24e24d211ceb31969a12ad47af1831b943 -0xedc4e9af6862327cd4c76942b15580a0f76dbdcc8249f43a7e447d8af64de17b -0xe09d613a5bf3aa24fa22b5f8668f606f7627b7566dd9d1968f724677a3051027 -0x90d012dad3cb6bcb2c7ada846b9835b74b37bb59364f029fcb216a35d350b2e4 -0x7f6bac6ce69d67827a56eadbfc400e0c22603682df832760b007fda7d558d819 -0x30db7d0fced0537a5dd5af2c819ba51685fd38d451a0d69ada1244a385b046bf -0xc090e904c01cbe21d16bf8642c162d055edcda4143f86b5c6a51cbb134b1507a -0xf20f13dc5da7ec42dfee50395aee0f32618a2d5dd31c492a8e1ad0a9c016d292 -0x1d3f54e6c24714add3cc9c29f82611231d7cb898c86734c57747cc45e872ef95 -0x0837dae819e533148f0ae8fc01c3fb93e5fdef8f40a3240407722fbcbd0a1b65 -0x434e6e221a910eb9523f066ba2920c9239e65bcda2e388b75e5135b093c0e112 -0xc38388f90e65db1652b966fe8283251889e43e717fc77921dfd1e28ab46cc799 -0x10c50b4fc7cd2d330aac1b4c4b882263a2ff31dfdfcd80117777221bb0b4792c -0x18691bbcf0bf8b2f9e23c3a3d3fcd44147a32c86a478ee0e6a95e20d8474c1b8 -0x94787158e8bf3ce1e300834e733853c3db193c55cdf94d36ec285c86549452c7 -0xd22ad42ef746b96a0a73f023bb8dc42559f94465311add2d2aece5553b403336 -0x31bff450663541b6a05c3757acfb50a6e980dac429db9bbf1f6f04c72994f50a -0x4a4d92b0d5e4da7236d726b53a29bfb48bb8f07d2bac66c5c38afa3fd6fd803f -0xe2561b4efa62faf5732b8f44f183a0e0a7745834783c1f3eff47167148915bae -0x500982dd4e719c0075a078139526a73f6252934b536fb7b87d96bef219c53e8e -0xc237148121cb8a8a2a55dba2f156f1131a681eaedc697bf5df3c67f21d420ff1 -0x0c28f1a1bb9017b786893681b8836a6adb3706d459ab858c6b4dd46489c022a8 -0x0078e668f45792b3a4448318b968ee3c5e7abcaa16d4da9f6b95208815c23a15 -0x61d1398c9e8998095cb15ba237469c94a0cdde78c7238d9f38193af6ecb65a58 -0x8066a54b8e4d4e0f75039773025e75874808dbbc43a6a6ea6472cb8f9184d690 -0xca9ece3eae70642eabd50dacef543d5f21a0130dcc326533f4dabaa0385e8543 -0x28c8717beef653fe7bc9165540782a7ba5e4f64fb0e34df59983ad7b9e7a9213 -0xfe3666b5498b07c34452b4ddb9a188bb9cff3f9ef96a11497b34d16ad1c6e0b0 -0x6300db1fe02153b39206306fec88f032489ec85d479b32704d484fc0af4d4cec -0x70d5830b6f329d750f90ffa5f02c04b1191320455df38d6a013c51e521f4b968 -0x98727b1dd406ff56f0f1304cc6cd68455d914694b2c14d670fa978bc54c39b1d -0x57806bf3d2788aa3d886501b34e4a4b936572034011b14af0c70e9e51b9cac63 -0x9fd6a1d6e3b192276db5da09a76fd39e35a52578743958951185b62a6e713f7e -0x257c3ef0c6773bb88ef5cf4a616df002356b1dd9cc73510c75eb6aa7d122b995 -0x3f3cbcfe03224b827843662af114aa545a4c857ad6c32651a23eb0f9c020e43c -0x4c1c0bd065672d21473bdfa8457f9aa15dbfe39dde80ed5bff9248cd8974294d -0xb3e3160003a60bfeffa944d2f109ae33e8512c58645f229fc8d5aa5df48c6e55 -0x1c2611f546332a07c811a81ec0f3a4ba4457d1cf4d6ad9b1d8f525743aa2b1b0 -0x193116b7b881b2649fc81d065690b9fd23f7ff7dd9d7ec4d40c4789f3bd3dddd -0xf5e516d0629f2c0667eb6d244e96890107cb775bd3a53dab620587b79d809e6f -0x12d2335860ff8d6a9df64ed3f47a99fb58cbcb207eca2252bddc996ce5446b0c -0x0be03a9b9b4bc0c2c3915b3be739083831dcf28a829111bce02dbf15428adedb -0xf96b7a00698238a8cc8c57ee7d38e804c3313678db51eea3b0275f91d251b82e -0x7404412f55e751d738ec94d0d342a7c5402d4ab6b0211423dadf2d099d858bb0 -0xa41f272633b78a871b43f82f6f60f1ee135f038257c940fb36d6d1329e07aa23 -0x223c4bd43e58394a155086c348ca56c94726c96514f9c73947549bb6a55d3695 -0x5e4a60fa60697ef6ff89009f1c4280b1c939f6901286f3f2e0b4679622a19585 -0x1578f47f99652f636bcff5f0435b4637cd3a890ad0d34989c8485858ddd0928c -0xe4f234cbde7211a6709e5a730804d165cf3dfa830930bdf22848793c1048580e -0x4d5af1282eb0bda9c11d65051a84b67e82ad70f17cc2bb69256201aed94298e7 -0xea10b66ba7baf932f6f0b6876838cf49cca52a45cf798fbf427aba9bb22baab5 -0xf6390db43c25036ad272553b392289beb7b707998af73299e2c606be068f1b9b -0x7f25b7469a91df1555618d7b5605873b60e9408c316b11f8bb971e617b8f6db3 -0xb263a90ad057b6dc920381a91041743a1f2d300ad46df4c2f01ffbff09d4b629 -0xf59d7f79a3125624b0c03479cf46fa290de218defc7e47f4aef82146554090e8 -0x7a9dde58416939c2bbe98c0f16e766e3c1652ce485faa3a4063d3166fcc61923 -0x02dbf8da79ad4d271362500c1e35a2709b767733d9cf3d45b669767e47abb4ed -0x3a5d93b9da4d7b46aa6939087e08628ce924d30526bb3bc76a349cae28b5cd5e -0xacb9554dd81a797ef18f8124345f4861c684e139b473ca6456c9847158470952 -0xba36659a334e9b50f35fe27279bbdc9e48fc15ce0ec304127f942d848a4c16e1 -0x82806ca6e5dc1109bdbbb9856b3488f259b6bb6159f701178e8d51429c479c91 -0x868a71e87cbffe5ba9783bda32e8fa52e09646eed66aabaffde6584f14cec548 -0xc826f3b70dda8837d80e33f25a6fd53e316b71cc111ebb874cada0cda61fa92b -0x97eebc523b6b251c1bcebf35775b2f4f54e41ea4a4a37ca38d68c16bec741502 -0x5b8df840946452e3483fd514f5a34dd7ce623fe528757eb40d5bfb5a46f9858c -0x79faf17d548be69502a271c6bb95a99cb06b6b1b3223f4b8b1eb8680bc046da6 -0x268e9d1f99c5981232f6ad279fa1278e471752f2433c6440c98aac7b38d58e52 -0x75c8c6602d4f278c516690c9c16a22fd95421e6952e28499fce23f75ad794426 -0x4083572b064f5395e1e1394a70d11238c02172f66d993e69974ad1201e26394a -0x6b41a670107d15e17031477145e57f25be3083423c14548927076dd640df8f11 -0xeed366a47369cfa1a8c9d92b3ebd2bef824117dbd643a24997aff6570478ca5f -0x413e277614d9bb029e06ee573be0315f16c100a91ff2a9b4286028dbbdf9f955 -0xc2fac9d6e121e317bd7145db3032036031f99c2aa8607cf136f51b2aea26754c -0xf1f665643fcbeb6588754356d42fae3605105f3e803e38271c253a043f782552 -0xc16985bd65ac14cca9ee29f36d34ee0ceb9ee775e0d5ad713cec5d4af7bb906f -0x2b9c4e6215cbf8d0fc0d768b0c0a95ac9c05f14b441c4b5c9ab463393933f9d6 -0xa5b11b636069c6f3c058174ea63b93a3e483d2dae91272f91e4241c399283e61 -0xe63cc50f4ebac13edf5a019662e8dc7c76c1d437437a38dcf6e3e5a5b198d8ad -0xa2c1d4591477d2d7eff825807e9e4dc756a7e9748b7a3ebbdc57c04a1ab7cf05 -0x0be7c8c66fd209aff7c63589ebbbe00a1a20a36fc9bcb2f5c6037c0848f2db9d -0xd4868217a7bdd05542be24a74841cf64eb8791b4e9b132318d0c58a5c59738e3 -0x2393db543c2478bbfe679cc5b7c69c3632e6f3db677b9388ee44d468f51a63bb -0x1462debcf5e72b4acdaa99a52c28ff9dfc1e55ba8dacc9300d78abd35a13cbd2 -0x746eade478ac2f8f9dacfd11d3aedab377a00077b8ef7444d3e4d8569762ae76 -0xdbffa0dce3557bb1651e1db0a1193e200069b31c0bebd7e0d299c05819804ac8 -0x940cdb50fb7fbb88b4d2ef5a4e0cb8321e5c6237cb89fec6b2354f243745b4bf -0xa7f17bf52443bd7b956484d4008849a845f676bf683fd549a4b3008bb83537bb -0x78888c3a04dd8bbbfc42e964a9465d2b83cc950898782590957db53d0195ec51 -0x5276e76d77be595e819b4413d0eb72ed2317c399dacd0900986d44c6ed6971b9 -0x772fb4633b21a6142789396a382d9b7e0d0b4a3787ce051c06db53182745a1bc -0x95f8626d16613e01b9f809b84d9d2bc60ee6856d578dc4c23ee2df5cf782dee6 -0xddd5a5a2fa9a62e576a9aafa8c4cda92218f45481efd4dceab36757c240f9f43 -0x27f9be922d0a3783edd7ae9b495875fe537702499025bc3f4f969ab5e43184e8 -0xe522878afb62a80faf17ebbe1d6ab7d0862b5a646a15d26240b2f78570144be4 -0x8c3830acdbb62d5e9f0f182c87b0b1d843b11a3869def8ec43f6b13ecb070ac5 -0x84c3d65a3490786d0ba62431d08f1e422b3cc6ff1b16808efe28d5a9c40b52a9 -0xe93316b0d9e2cb0bd3bdfffdbbca629b480de2d9c723a29c0c7acc6e86ab6fd4 -0x1b2a0c858801b60f70c925e932348f5c22c2074ed49cccfff1d5f0a3905ce5cd -0x0ef99fb1bf81c1222946481d6f1fa2a41b7b032e54868e4142a1074061d30e19 -0x4aa4e25a9b396b7f3a2f4e8f7f79e729487f366a588b09761983b2946a16eb7c -0xb867ed83f6d5a377c518911131b618e9885f4c177d41bbc9ddaf79745b7481a2 -0x981921c9508d94f9393016ebf4aedfe59a32ddc823a6d57604a2afebf08e7c10 -0xe62016b5be4c23b25e8388e713b580ab2d9f84d8b4360de5f64f1cb760e6bc91 -0x01a41befe4ed7557f9ba76eb954362e662005549aa19ed5016e313e0ad323792 -0x1b8590a7da90db924779f73e16e8ffc68895cfdd31a764afbb63f06922bdbd66 -0x50e901cdd835274bccaed6911177ff02a01556ddc3de11b611c4203dee5e598c -0x266aad7c51872d1134ce1d6bcdc6a534f8c58ad2eedd76ca7af62331a75cdf04 -0x8f6c4f0bae7c111b45e4053973fb7c41675f0d72296f3be374b8f9f32cec4f19 -0x93135345ef63a81a88120b8f2057746b0eb20907815df05a257773777ef7acac -0xd539d2a2c9f1aef3f88c5ab9f94dde060346060985d4ad51005715747a716c71 -0x84fe5fe2152eb48ebeaa9dcde881a8f261b5601369f719d1a619daa9d71a8467 -0x56c31fa495a98ff2d417ae369fe2e1c3da8dfca2ab94ca7e1f939252b108f18a -0x40b40e174a97b6f04b6747578145e8138b02430f7d4edc14c224fc4460cc35ab -0xcfa3586c16a31e4938de3da6e24b21fa1aca3e719392e1f404a6cebb3022bcfb -0xf97a2739c861da2effffd82dcebb03769b83de971862fe4397c1d93498952e5f -0x3ba9016d85783823d2145a0ba2b6a18e52601bec5f30b6563da22d46fc5c055b -0xfedfd87d2911b015ac13f33074dc57ad157d186303d67a3116f67e7d2ef0fb95 -0xe23ef2cbc5057034ea495fd45c25e2e9bbda6f83f539f45430f4d286dd17ce6d -0x4c5ac7a0b7e3ba34119e8dad09ebdafe6629723b43ddac9098ab177823ff64f5 -0x61ffb129083f038ea392ef1f239cc4e5110f9d89b21b1bc732afc23de771bfa4 -0x8830956eb32be7534d1d6ca863ad7a489f015baf0ef6e2239e0004b9a439b04c -0xc13948caefcd25e449d0b8e30b8bcd4edffaf3c43042cc9a654c9c25d2cb9fdb -0xd05c532627b50add3325944f4acfc101764168a3ff539a8d5b9355fc04723843 -0xd2c53e50a67a29ffc5285cc0a0fcd2059b89999efd15634f6e2c99500c381569 -0x99ba9b1bac09fc8a8b0cee540b8c7c5be1a61508041a181bf6778c4808d0df8f -0x66158cd0c022d3a6a9b9036778b3760af44e65cd76faf6b356562d32cb5a25b1 -0x33921b4a407d481552991c46cadf4d465ed5db3a2fdf2607999245433f9b6367 -0xc6f2ef6629d4329ba8a81cb605ca914f0a16ac7a5bdf7d764b4cf04c58875b40 -0x4f9461f46c46705ede3944989a02156bb08269e6e857934372802aaeee84bcd4 -0x1d97249b0a9139810dee706e9d5f536cf7cdae07f3147a9fa8f1ddf3031eb463 -0xe5cace6c8d7255f5497c8570c9c192d27e2c6892870517376678616228ed1cb5 -0xfed35509ac085d70f4b9c83f5e3d98138edd9ddfe1ad59cf877f230f00fe5e06 -0x469f9f8a6f80140e5323b2292dd15011963274cdbbe38f52505c3ca028c1bdc8 -0x8ed6465da3afb0aed78b4e9c599ae63fc381fc230636cc22d1a1fd3c72355b67 -0x033c02e0fc0c7437ae1185bd769c832543928c18e472b86443dea82646dbae58 -0xad1187f77caa4f99a74e17605162a479b7f15028adc64e8e0351927a688422f3 -0xd76515e9ac3f77221c775532a0a8ec6086f63c309bae8f320d4ff07f16eea169 -0xc901d0be4941fc55ee56e51ba50bf62e39208eab8509a2dfddbb79f8698ddb38 -0xa335d42112376ac6a9c18b641fa4dfe0dab0d9446760a98cc2646846938c33a4 -0x456d98836deab7e88a8ba7fe6ea6af0839695c46fa30e6f8fea87452c8032093 -0xe3190d17986e5088a0dfe4872c03de96fbb1d50fdd2ef59ce019bb624b273592 -0x468ff94e9897a543f55617ec575c7773207c486a935642d73aa8df8789ee4d21 -0x6a927d17c5010e2f391a0d6ebc9aa4b3163b06d0d4b6a47753e2858f58261633 -0x6655e63a6ec4484bd96b0dfb513a5c64ea0d788e2af35949a9d58cf4998cea2c -0xd842432e3eb4c6b01d64edd827f3e5950daf903fb754e4957b4148e22581c8ba -0xaf9420fcca1d31b930d9973f5813d6580af3964a23a6cb543a205f98a7da36c3 -0x8ea8577a9840fbad1a0b5bba4bc84e51f2e11b9945b0b1fa0640f989f967819e -0x9306d143e8ecc491628a380b7dffac27d15a0552a5887b5f06b6f790b2aa4917 -0x5a888923597ae7badf71a4389760ff102ac0f0ae5ff4ffef03d4b39410899a0e -0x5ddc5660be9d4f7d757fcf51e3ea2ba7bcae76c7acbe094741ac81353922f4f3 -0x8aac1a29d4de6e8d780f2b2dfdcadc671aa2273ecefc6f956f3b2cc5c4f33eea -0x77454c7aea58f6718c4cc892d9a26c84729cd7d01140c3c225a2e00df7bc7ff8 -0x2e8078834d8940a5112b9a8770b1487b1b4766b36769920dff80d60a1568df70 -0x28a0f7a74ad46944b97d6b079e20069f7dcaaeffb9da2cf6168620b79c05c33a -0x7fe1c387c86cfdf998027f9b9b1b0fbe2e3afe79d630b508b737a01a48eddebb -0xa6658a17e860cc1a13dc88325781ddc5295ce3e85de29696a6381b035488cdf4 -0xc74c756eec2cea2e447eeb28bf5116dacaed0a2b4f0e492f55d553309b37449d -0xe079ff1c338f7e48961cdd12675b0a853751a6ef6baeac7f364fa6928d99a837 -0x5f259df756eb4efe111ecafa04f53367ce9872526ecb352daa4e5fd010feea29 -0x6e2ae61d1f87efa7c941255e233a349c7f59db7a12d6056832cbf11256b86b66 -0xa8f1583713b589361fad79b8a0912bd137d6199bf1e1278a67964344b9cdfda4 -0x997a69dee1dc7d12cb638bfc8170266242be4f005a7a8c8860a3d6953a84e157 -0x31a476680e25175497696f532c9885bef07691188ba38179509621412272760c -0x3965cd0009a4eb8cd6e393a91194219d191dca4485b5bf371fc8d2cce3aa3438 -0xa7e123d38a41d9c8f63fb9e0718ac6b4ec0abb7c7635c7580d8254c85e12f058 -0x03d80e1f6ded248895be50f7e34f99f76bffd216a137bab8e969f81a5974e370 -0x3fffd6105c4c4601ff25e4064528ed8a0f457539a1d0f4bb04ad530d087ce2b8 -0xd0f9297edabb234fd9ffe0978c5b3c81a1a97824647a8721d7842aa0da930a83 -0x0931a825be155deacb5c57a2c2123f89f2559c273d994133fba0b7b97fe02499 -0xa689306afe4e44d2cc6fc8f88942b693e05e36cf23aac3dbe4612888114b6bb7 -0xe0b79d53488db07a2c24883d253f4333fe0b555e02176bfc95221eb054155219 -0xdccceaf99089227ae65b43aa7d475559f548deb6e35c2ff1470ee4bb5bbb4872 -0xa5b759a270769b790fe3b73bfc45bd00172e8a394796bdec2cdd733a27d3338c -0xf1bd46ffb8122eded0a982fdb37f3af48028fc8811f7cfc73b2cdb6691fd2ff2 -0xfd9727481974ae514411239b223722c25047af09e71bb1daa854eaa31389c005 -0x8966243250f0e80310ee8708a07fe33e9d8bed5ba838b42b58dfee2578d789c0 -0xc83b9bb5b5f9e6b8699cf4c7ed54a77e642d5db3dbb90583a0ac640419dd97bb -0x2161f44b964add1b070cdd0eca2b6694c3dfb1d7f5264f3ae419624b146f5563 -0x1ead85b1538d2952e6826e62fd947e5f3ea86c7ed9ca9a752f3569d649b334eb -0x565ae07265b5b217b951f559bb6ff6096440adb19ae088c80bd25d19a3c526c3 -0x4e1bdd332483d67ab814b7d0c5fff04b25ed74179251f7e6ebd09fcdc908f1bf -0x2f6e8e426e269a1e32a09658ef977c97e76322fe93450dbd7abe8a79cf40d0f6 -0x372aab8f5b5c3c93af6c881bbfdfc6c41e8373f3a38aef74523b803aa558bc6b -0x5da964f13004363eea33629e0b1f91abc081eec5260bf0edb1e04afe356f7604 -0x8b231ab6a934f506d187d150d51099be9d864488a04051d139704a52076072f1 -0x5def54197b5ee4e4228e9d9cdc932c3d15e86d120eeb91533813aad61058fb12 -0x0eb3d429382bd15867ed8ef049d879990924abcebfa5ecd30f83eb3cf1c3a101 -0x5fc79e668c0e042839f48c821416e3bdd74e9c5c516205e1c4efa821c4afa7ba -0x38ef29d7d70237d7e70bd4f95c280062450dff1ff661d779bdc42b77ecedc274 -0x0f96e56d53d7ba433bc515408c26babb4ce47f04cce7b79b9d8c81ed08e029d9 -0xff75b8407a6d3f4e0c4d99b92dc1a726058287a1906cbbba2e5aaca25ad489b5 -0xbca2f1d35e37f93d36d29f11045ed69851777ab8391dc113963522b090938f3e -0xb857afd66942a56310191c6a60f8b91bd2f459783555bbcbcdc264409f16b09b -0xe8396bacb6832bd9c9748106a579a9df9b08acbfdca8b92d97982c9f65817c03 -0x4514c43ae6974dc91f1de69c1308e046b24badba37c04a8651d2257ba543f684 -0x83d6c11294b8caa6087edb1fef7455e922c836cadac3854ab301a5b250abee06 -0xf625db8e7c4ebba6b54b3311a83f0387acfdd6546738bef3cfe70a2006a8eafd -0x7425163fbed9c6ff4c9796f1564d0eeba01b8845d512ada77c37092612f9335c -0xc201cb61393a48cd9787666124252e74bc7e0e00364203a229cb9307bda60c18 -0x2168dceef91dfbbf1e70683013391daaf21b08296dfb17c98b664feab2092c53 -0x86ef415561bf395beb1832f9d815f4cfdb624548704986469bb9c9740a723699 -0xfe2e0ed8793478db381ab187e07797f83b3e5f19f6ec07e2f332100ca29dd71d -0xa76c8b2c7a8ea517309301163e382c9596056a1cd800c00bc5e71d5717fbe6aa -0xfcaf766e64e36543742e1fe05eb63ff40f84dfc10b5780d1c0eca36d6dc50107 -0x5dcf9c5663196f2fb2bac698355906a952177ac289bee818c3ed60b1eee4e4a2 -0x3db1c2e13549fa476cc83ac886db5361c911b8c342caae079d52ce3b3990c1eb -0x96d135044788e937b2613e77a9230d7dc96a0cd4d41b6a9f56325573f0fdd6fc -0x57669feda12e876647ccb9f140a70025feaacec217b05a7d62ff4c143e4fc691 -0xd5912c77c1930bab7ecd53c8efa4687cc55411cb9e4620469c2932b5cb0f6246 -0xa1630c04c4b371d1f7965449008be8250bdf8e98a60e454c2c0f7a4581033dda -0x3768fc1648bc5861ba5821203536479c595dd3ab9e70a78aea9a926462f2c229 -0x11029160f8c5db74bce9244acfe8c92619b77f3c36dba9ac7db7866d7d18727e -0xaa405f320487b25720e97748cc623ec8ae15840ffe9b8280ecb5f96a5399de33 -0xb64030e01ba7ddcb41fe85fee271b55857ed4bab0037aef9d75315d9128fded3 -0x8c8afeb2df7b8521d89d28f04f7eca47864d1b2a517253fe29546891c00f7f3f -0x7d6a6211512386968df10b5cb63a420287343ad1bd9588dd8b290f9b6cbb2afa -0x1f8b7cc607f51af0d70e2c46c7728f72d54818bb1dbe6ace0eda423ce86fdc9c -0xcd6c78a3a1a64abdec4f7291962ae394e63a887c4ebc4f0bbbd3c40ef60459d6 -0x0ee74f9c340d6688dd5ecbbd77e5f4c9af7fec271c5ff650444aee0c21c75fa8 -0x4cf588c270167ce12aa863d2e7c0b3cb0022ef5320c12e5c6b1506d913e92c53 -0x5b3840aa855cf6579d5ce957b79bbeab79fd3b8be80de3c6d366854fd202dd02 -0xcf70a3b8734d750d81023a1799c4dbbba5252ffa755ce79b89bfc560ca213a13 -0xd037e7bc5d8b8b355ead7f5cc8e474d5c3fb547077d6626eeeb8d87e0845f87f -0x351409e911a6a6df134068891a0af4b2e299f21720f065fec4e06eff425cac18 -0x9007afe7e9faf241f455e20e472fa17eb5a831ba2b76e8230f4a89edf6311181 -0x3fe7900c2f44c174fb2d138052f1ffa8b997c130d9e1a98cc35ceefa65cacf44 -0x9bb67f60cca0e1f77469e8cd3a747d4a7ed77de996bb9c88e9cfcbb91a8cddcb -0xcee7932fb877c38b71a5102920b085c74c9adf191ff38af3b366378010dd238f -0xb5392c647211bc7d99af6332abd37f4dea082c9bbb44ed407736decd3ce5fad9 -0x9232b724423c246ed98f9d55086d3c0c90f9f3b92efe95e2beed8348930c4dd6 -0xa4c139ee90fc1bb768108882a8a9a6c358643af2da7da19abb5dd7b0198a8724 -0xdff0990bf3f108b84a1ff8fc9e52ec19aad49170f7da09aea7a458ceefb524cb -0x51b4611d236cbaca308277e4f0b7b80de80d71dc9993ff5808995abed28ae12a -0x6fa789e2be0aab35b281066808f1081f9ea11f813e1b229c30c90dafaceba371 -0xe39629c91870fd07b954dc396f08f4234c87e7282cf60fc6e0d52ef9a073aed2 -0xef7d6ca71fd223381a4203b4459f40a47a1f42f47de7fdf37df92a46dc57e18f -0xf38d1a525c6f4f4c0c436cb32e731d7a34a71639e457f919bcca849bea144e28 -0xf765e6e7cb893d027de7817ca74c17d5bd35ad6e6bddbc369f3c14c136ff349a -0x9995febf789615e8cef64fd22945749513163fb168ef7bc3ebdd2d246f3eae25 -0xb692baff790a70ce919d5ff7c88c68b33938d60a061c01aff6918a4179e108f1 -0x098a35773deb5ed18793cb9bd0fd382ae47e1c8e8820992a8a1746119df86f4a -0x2015b2fbe9a229e0fdea000e4b78dc7fbe7124c00f21169decd41eee0638a081 -0x1bc5a2f39dd389f9591e3d2f209b526bad53b5c682dc303b7daf9deefe1ea2e8 -0x49f962517ff65d1e72f65fd8e7a9601247d1963f796a108d10d6f5e345ac34d1 -0x4fedc8b90b936213a494cb82d5fedb6c4c1c6c1ccec275e09c8d565f32578d06 -0xbac0314d6f28bef3b20aa94eefec192c93bf2c4ac891a11df16981764a0a0222 -0x30612a0ec3dc2ef515a9d68105e513fe6c4865cd2fd6513a319ae6ac7f65c1ee -0x16f6aa668d25c12089a6f372d7284395bb77aabf36ec20cd5643f714fe0befc7 -0x0e7ed1cff5420e155ea218ac441257f79b06e74d05113b04b1ade0698b4a56a1 -0x2cb11ae1707d505fdbca6ca79e277742c1951ada4e5f8044c0af925f5252c098 -0x4018ec154703f67609cf47ae284250e336ab8dc9ff116054644a2410e86f8c23 -0x5d1fac57bd17b2bbf183e1584e00454c4953c9fe3f772ce9d87b610d3f3e9554 -0x9b001c2bbd8fa4896010e3af5cc45221dfd114ed8d0672908e72d7aa74ba3562 -0x1ad5b684cb06b51929e89f8be0d6b96832b2a59e5b314b81576fd2504a21416b -0xe9f4203c4b452996cf4180ab1390835a331c766342e892c6c0a6e25a033fd24b -0xe41a52e913902d5e6ecf215233ffa7b7fe763716d653ef0adb465f12d7563072 -0x905205782a04968f81f28fcaa6b3486130abdbf9e570d3c402b873f77c31fe20 -0xd4e8141c430662538e25f8042122f7cd5536f868b0f57ccd0bf5a376bb946ba1 -0xec9c5af3f3be249c3c4d582da7d9298df6ab70aa5845a7751e34b34fc10c590a -0x92ded97f0c6b2a83ca156933e0ac84db8de67add9a5a553d2852c0819b64d5be -0xa674b673b0c8492dad81b73b3e4eb100fca30643341026a81b87391eb6081db3 -0x4f854f4fa6bd0f22717f82d267fcd1662f44ead71a15cb5d30f8eb46543e6a9f -0xeb3102244a9c76e4239d0a634cab21327b415d1709ad5dcbb942eb3ff335531f -0x245be1e3a7aea764e386e3a5321d927c4e359a56c98800efa967cfaa463734f5 -0xcb597b3a04c3f7da46dbf5d539630714a6c2aad186add2bc1ef0b233e2561946 -0x05f638e26472b19148290d5bbf149e10aef558e6186f65c5af5f8b3ce4135aa9 -0x69f3127d5debdcecdc065212db3278ede403142749eac5099ab7d5f4666e7afc -0x62da1cc029e5e11c5de86d04b3a31ae114aaff9713aa168891c5d2b170ebc4fd -0xf8c5adec5c756caad8b5ffbb2df4f833173ceb0af7c03bd26313af853588f1f3 -0xeea04bda6ec01e71b425a819616b565a898c9e11d50b3ac9e7668a26e45825ef -0xcaa4ccf280dff82238a47337b472fbce121c00678f675d22ede2e012f1786744 -0xbeacfc8164d5e08e635bb1b6ec7aaaf46ab23144e19fd9c34e6b6747208d42dd -0xb37071aab6cc1d553343b5a865c2099c9f13799ac777bb79aa9de6e7195930e7 -0xcc11430508892f96a520a6f599cf8b442616f5c06c773199a66e95095fdba5ce -0x432ce092c94c54cfdd479c1bf82a7fe7fcfce166ea5c06f29d5618b3698d882d -0xbe9fe340a350d500b706f819e40644c35b23f3e334901da79e965c6554f89d0e -0xead5700ed7ef93a3219b9388e71bf55da5628b49fea3f435163616b3fb7be500 -0xca2c6a3ad9ae528fd96ec1a58d85ff6aedaf96031b3e6a1ecc88f70fcaeed7f4 -0x23f677c7d5acbe4335874a7bd37af70d3abfe5d6342bbd6ee846bf8c769be9f7 -0x3517881a06a5e8d0e8f0c8f1de5f2bb130a50eb98f8725260df9083716a1db76 -0xaf9c6b3d8a98a9175743a14d032cc6fe6d1ad600bd0fa727300f023807be5d29 -0x24faea06f8dcf78450758e500a6939544089620df04a0a9aea6bf70ec28b1c6e -0x9353d54f4f54a57443dcc0620ff41c681c79138196c14512d0f6e67a62381030 -0xe542cf8c34271461dface87f95460c12274c08bfe8103f368483dc4e4c18fd64 -0x4ef1fd00da58945b1b77fdf769e7c349024d0824744f5a4cb2b0af973ebd0a9b -0xffcefcec381e3de648f6ef771eab94732fc3bb1c60254c69fa85696c586b42a1 -0xf1a785188ad490066a839fc09dd23fb40bfad04c202dd73604347b624a316114 -0x22b0c54221bb42fc291515efe8df04e0fa15a2626df8cce088e1041f6924a98b -0xd8cd26fcbbd573c084d8c6ad76cb44b0b9d4a4b399c24a529d1475a9d2661201 -0x68eab0d3c2c075cbbcd12ec386a221c5100a092f0151d999936ef1440d62adc8 -0xa76bb0ecc4921c362cb63a90e619960dbfcceab3ae919f207da7e2a8e7f171d8 -0xd631ad14636523adecb6dca084df915dc916c103bae5f519e0f2678504ed97df -0x552e626aebeaea1f6ecf043e8f695fae7dcde9686336bbca0cf1f6087040ca8c -0xeb76f08fa5a43b6086e0cf5d4e879d876a43399ff98ad55c3f5ad1face9eb15c -0xd1c17b78a9cfc118473d5361e73a5964949956712293c1fccb10aa3ecffd0b9a -0x27776df40bd0dd06edb47f411851fb40f0a002176ac74b4ed324a83e16e44ec2 -0x9ae037a7f0bed3a25a5330d62818297c21db65a7e06d00d7c25fc997c8aa72a1 -0xfc7e153e2f52db7f83c4b22bbb315877a3f7f9b74b7dea55a4b03b4ecb6d765c -0x2f9888e50f271e57217c99e84fb8ce48035df97b07331c8268b121a83cec5ca9 -0xd72de390e3d814d153605d70923394731726e5caed922811d86b560fd982dda9 -0x38beb5e3ccc30f020a85b8918d0dfad026de47f5acd94855ba09e03e9361842b -0x3d5d2e9d8b6a6a5b0aab49121ebd57afe1ee19eb1304eaa2b6a372a1d8f9484f -0x6e6bf2e1ee6ca0a644b2545c986c704069ab90a46d3a907f89418f3a779d46fd -0xa1261a6adb82151f7077f6fe1917d2b54e02e4b68949ac9ed7f4d7ab51d7ed3d -0x16f71455f3aa8cad1dd5d519b31ed7bed754ead5fb86a58cfb7291936dc02d0a -0x096a98e119f6abfc83be0495e773476a1b1ba271a4815213f2f0df88c2894b64 -0x11b54cb853813f91e9a207fd2a7ebdbcfbc600e527dcb1200a07a735dbf76988 -0x64176c2054db01f3cbe9b357c871f8f4b3ad4623d104f0171a7fb5e1514c4947 -0x67bb73aedabe2dfd5f53ad3ac3792ab4374c21fa381911dda397a2c15684a385 -0x53b8b33acac490bc626595d897fd2194a11ea232992c6100002db93835139e0b -0xfad6886d1702b7166a8fefac2d3b53af232f585898dfbc47cd441ecd2c1b78e5 -0x4819203125d61c53ebe5f3ab158f7a8345b9e41956c007924def4253fd896c6d -0x29d0226ebec00a6016c2934b5ec85fcda3d08a8b39e700ce7106f0469f119739 -0x7f6ea152a6ace6631ed44bad8b1bbae7f8d24fa1bcc838723f4c4cac4d40fb4f -0x984bc965c1626f104752552dab81f2fd14b123cc62b9bf5b16d706d236df1d43 -0x85c02db68df81a7d961c437fdcf5009996ccc221d52d36535dbcc875ef9ec824 -0xe6befcb243d6eb99e51d701197202ccd947654c1602cba1c6c1065b061602198 -0x1c737fd1e87264d458cc19d1ea1df4bfd276d4a83d0f95dde32af7bc538d5beb -0x3a0ee3ee1c466a93ab4184d908303003314cc0f9db334701ebbb9bc6b54c0187 -0xe6b49e6a7ac19ba519aeeb7ce1e934a1c791ff35db9fe393b67bdfe563355248 -0x5c575c637c4ee5a1d1969f8039a28ff3705cb01494173186fb22c7c667598faa -0x193d239ea2532ed19644491e497839c2f16563bfd53f85d7ead180d64dd6d1de -0x6ede072edc0ebb014a6878fbb9936780e22b7aaf87848ad8fa7cbb5d142037a2 -0xccfbe96d99027a10e6fa9aeb2f3b193a60b1a55c27aee842c68d631e369dc75d -0x864bac99d6350b1366de930e2426d13cac2e87b197b81071f2d0e13c49fba017 -0x7dc8362d3df02af7e6e630655eaee9007208ada4c10e01e9c545f48a30efc9b6 -0xd77ccdab102b3e840646f814bf3a948f5c4909bc062123d576df8aa2de050366 -0x3934827f475cef867c48878e24cca41fab9e41bd6aca0c6ec3ac3ed2aa26d166 -0x8ff44688eb15710b18c0e48c96daee822db087d07aa606c007d24e7857d8ffc3 -0x041b6edb6248a3560ce9ff164f4cfc478b8ac35f1cec0f64a1bdf51861defa5d -0xd946aa73acc3af0efe159ef34a080a975462a3e8e3994d2bb384b7a7be8f183d -0x7534a69550f60a5046221d7652a892066070ea2bae3b6673545e9d163322a2d4 -0x4c34fddb4dad17f1dc661337dd7aac19d70f006fc76d651429c4a950c2bb19bc -0x5a119a6c4b16d5ed74257e2b81289724fadfd4811b1434c8127765cf798252aa -0xe7c1a1c8ff9d8d104d489f4d1e572b7e0fe7f1ae7240877a947ca074ff6c69f0 -0xec5db4fa1c87e7861283b7f98bda9285fffa36754b432d84a84647b7f8c39042 -0xad4c1f5b2e37adcaffc0f5fa399b09a2d07c83070624e0821973dcc7e0bca2d2 -0x61e3b03a6ad2b933605087c1023792c56712f85234f7ae6df248647014fbf448 -0x10f7e2e11c2aa43458173b7593b47188f615f2381f6f93729a5d3a4d0c70327d -0xb26db8cb4f6151c3a5475ecc179bbb4b637025e9b73ff6227b3802141243fd5c -0x0a1e7644c634861d0e689ecf6d9844fc5b07a6c555e339f6d2b332ec40327c7f -0x84a5eee6c95e8bfdc70ab518f61e01e47ec35d05380d62aa540da014ce4765f3 -0xd86c8f92641a130cd75d5d0cf7a01f3db4262dc896c1bc98d1a2a1938c8b423d -0x47988d5519fab66c44672978b27496978a21d69e27ca6f66f6b716c48f31d412 -0x277b71e652835019af7f75ff61b77da09d089b98cadb7f72a7cfab0574df6d44 -0xdad6022f9f0eb5a194a26539647fbfda70963e5b0bbc6081398e1db1583b2a50 -0x5a837b49d42f924ede7e7a8e4c86b937e2d269edad7bcf997de3be8a558ea292 -0x4d52351de73462e1fb9b9b5078ef86f9518e1a724911a43b30ebbb0e5442c29c -0x5c5778dd97241ddeaa43a9e07ff9c8ad7e0b734c2877d6e459d1536f032da496 -0x9d5b2b6fc1c5606e576a1cb0bcafbcc23cf86bebdda256a0ff713f8cc1457f29 -0x297c6bcf46932073dd83631aac96382ccc8c1497907d3de2869c86f34afe9b9c -0xd5b3ba12394b2a9add342e7c7b516b77fd47b03ab2e9d2e3a9f028f7de7c51fd -0x00c90e9e603924e3da4b63f166e1916535c5ff59761441fc05c07f80e3acc618 -0x44a9199db46ffdb1dc4f007bc494d9b72c3e2393d65155040b28960b22adc536 -0x854d88499e17d5ae521547401ddeecebb6cad694e0be7457eb34cdf7db71afec -0xd44a3275d9511e83d755c86f376c3d09748d5788f9ada9a738d07f482847c29b -0xb501a0a0764081d1c9a368309711b602b6f76da5417d4af36b691a6a4646edef -0x373ac3479c0ec5561eeebf0db4a1fc828d871625df939822df6df5741ec8bbb0 -0xc74e72ca3f9d5d599545964830b18e39fbf77a76f4b5a1bd0b2aa1f239e7a18e -0x0eaf819ece7f411ca90413211fdeb5bc6820504cf0a82ff6f169e2cc4259d417 -0x869778424c5999418330038b813fd408f37ffb2925f744c3ff791dd7cee57635 -0x8de0f81f57e665efa2290117e183304d3d28ff6f13a9c981ab911c369922dc7a -0x73139c50594fab99529f49c86670c827c42f1ed61a269a25547863c7da3e7be9 -0xd8876ea49a30c21f7379e87691d051f7c88537e4bd5c09732a84b520160b588d -0x03cadf8c1f2b30ae4934ddd10d2bd0f4625846584755e397e29c6ca400842823 -0x6011e4ba70b979b1d4c68fd3472804dfc2f152dbe4622ee05438b61e872941a7 -0x70f5a5b036e34e17f76ad8802de4dba95d036b0ee0fb1b793e13e29d688839b7 -0x10425cdc7783823daacbb9e61905bfe673cf3f3ea1184ab932a3499a545df304 -0x6b01107f258adbd182ff47b647710b64ff1cf8043533f392cb802baa51b040bb -0x7d89f40107d860d7f2acc4b00f7112c55e9226640e542126adaf8d90d2676fe5 -0xe7d28f43fdfdc0a296f24df81021857d11dedb203f667e1f27bffdcd0a6a29b5 -0x18ca6a11ddf809d2544d23bd41cb93532dcb8b43cb155d92171830a2a1e06028 -0x4f998bffc1d7161b089a6685cdba081b586f946408d63dc1d0ab183113b1221e -0x304ccfcf0acf8b19287df35c5bc6249265111d76c0aa47c021013e3e593a173b -0x87ebadd42cf3d98ea3e86ce29260c7f53be4f068c61773d1aaab5bfb4406ea7b -0x39854f4f3e8ab5a2740e1405b37dad2a075478b90d5da28c5b067941c4b2caf1 -0x7b9104387e2c70f3e03600b565ec0758cf26a4455a5649b5bd1a771e52b9cfca -0x03117476da32f6ac5648f883fd49ecf43399fba518c2db0f316d91b75bdd9a4b -0xa0431b82202f4e1e7294b19383ba0853f1bc14d55873dd7b65519ee112f1380e -0x31942ddc4b65ad3627f9f679c952e850806d1a01ce2fac3599e43417aa983585 -0xaa36cfbe1273c7f448cef3d5fdda6b2c6f2c4277c7f72717229dcc5c3417e860 -0x2de3211b9e5ba8fffe7afbcb22bae903d51915abaf3c60a8cf9f4bdadf89ddf5 -0xfd9fb30829eef7ef681c8902bbac5a60c740c18125336624713130910ee66d3f -0xea22fbb5e2705f59204632969e7405889cc9248c766aa7391b14462f251cc96f -0x8c261229f5468b72fa07f670b6a5a0147d39ff818baa35a25a7d3d405685ecb9 -0x5acf98653b205ed6bd988fc2c863f878e71bd0f19a715533eafab577ade77db4 -0x39acfc31b8bd564055c705cf33a922d36a96f30f2661764234eebc8ce8362680 -0x5e930f7806b4acbb15fa21ea21684e2053ffcfa85e4d7882105c474e215f8eef -0x296c1c665a7e984d1ad552a4282010ece2b4ddd9a248ce60705166fda206e208 -0x27dd3f2ab76eb353ddfa55f63bf459e0f47745a40fc2b29175366b455a90d692 -0x46868f723f34bc4b7735fad960958173a3a1ffd48397f2949c0bb9ee01be4030 -0x294409ba2dd5ba15fb2b395a52712d2c4d1aa80a0d206fac67f007ac23eeec88 -0x0be7da6752cc2b5d07128f138b4475ef722448742ca1801ed37bedf61085aa73 -0x0f41c8954e2929c7bec18e48576de133a89edc817976eb4960e44d4f9e0b1f37 -0x24d8ea16a53df662ea9ecdbc4a9bd61cfcff5220654b1d0e08fb73caa9c93097 -0x683033695cb14ebfd6aee0ee1d1f45ebad528b91a810890789b6e481c9ec04d6 -0x95416db41c3655afbe329a7e3760ab1b62585a7444a9e77deacd53234fd10a57 -0x1e87aea7a7d06db2e4bff327615be307ad0c9705acb51e705eef2b7752b434aa -0x2688551d62850fcb2b56b337486b5c08cd82552d2de51d78a7c1a9c6255ade76 -0xfc805f2c2d1fa52d7846c2b881ddcc53de68a953e7d381d2c61dabaa6f470135 -0x92cf7e8a568885c9fdfb8c5ce0728d79032e692b93a4c2030f9a069d6dc8d799 -0x9e995ec5bc323ac1bad1bd41c34b5a0d7ce3c808202369db2b949e911cf5c52e -0xf4f7e082abe3f6ceeb15b1e433ed15f1490e5b55de24096a914175451b4db027 -0x4af89ef5fbd903d9b07f24827dab18d8a686b7b5d12fd83562a4eda46c2c9748 -0x79c122fc36f733cec3933a08c66b18d37b6db57fa10d534ed996832bb3952960 -0x3797896ff25f04b823dc05741ed5f5647e600369729fba033773f01b3798bb65 -0xfc7ce92298f329c5afb4d4bc51e9706536da2fc766ce0528a22d63e66718c95f -0xf0afb8a0051c742e4cd65bc67bc97bc3deb10d8d020d03ddc7d4f65ad680db36 -0x66ac4ee7a0aa7a918e6c678284fe8260c5a8c37e7a7ae812c04db6b270b0e84a -0xae22bb69664f69ee7d268ef5607dbb481207126135c8a1df15288671d8f1bb88 -0x35a44663f807026797f7c9f3b18a8eddfcd0f339c093d07c828508d728d4d092 -0xa312deef1add0eda7ca02d3876bd0680f2387ece9c6d7eeadcceda4c24aa8929 -0x3fdc5673d6a27f651bcb64024d551de65f550446e1d2286df2437038baec81f2 -0x796457330c3d5e61bd58d9e07518ec715a1c9fd633ff172836b0f028f3233780 -0x4d1a64895f77d36544a755ee987976bc672d63e89f368a880583787df58e6b28 -0xffa626d9c6f34455e54ac2ca1178ed588eeee7b47ae29fd2065ca973d93f6f47 -0x50adffc35177ffcd21e55e2a13ae3b1148cd55f6dd6860f605952f4ec4a2503d -0x6cfdee7c936ca9ba9f4d48463e81eb3c727dd02a9e4540e3ddeaae526ad01c20 -0xa1b1b24298d367d08cc3a89a8d3163d01d30c4e0feccd74d7fdfe96e06c38094 -0x2403fc14281d6b615d5fe5c3d676001298c18ecd578f470d4c99b7f49d7d9423 -0xc58106815ece3a991daca6147c0aa090fa37b6712d198d2df55b74a0d462f426 -0x0a16cac0b458d31e14cb203ed6d336987168b1593938052097ef63d5decf610f -0xb0aa7ae5335ba282afd4f033fb39b0d25c052c8ef48cd99990dce93ae91aed9e -0xefd9448a59be98982150b65b5d985f8498b12bfdbba8f28b1c152c5b234282bc -0x69f6e0ee397821c1484e6ed7bb9f08b6a73b205ca1e9820412e8b7a933c7a569 -0x30378c3719f8bff848ae3c7e3ed2fca6dead73fd6d8c8f92413014720e9e0594 -0x30e1c03d0a78e2771b5020f51537377092a464257243aacec3b31281cfdb0413 -0x3930eda8839a42042c1afca48e70fd1d80e7238445be0e336c48715825a98552 -0x1eb532037853d56d5e0adaea026006d2ac689c9f04cba379d371391ed1f0d791 -0x06cbf21b7c86f09b5b14b41dc4f6f702c850c110c0604be407f4ca702131a17a -0xa1b539201065334a388fc07fd9dbf8f4f79bdc5589b85c7f45c1d02d20d4f424 -0x87077512ef0f8e47637f350d58a60113dd05a743f84955349abb6fe3f6ed9c79 -0xcc26303c97ab67255f98c339d390cac262487c16b519787d84d90b16f44e82a5 -0x1551b5a6ea2843b45123331eeccf26643568d702a9b41f72a4fcbc8ba2d439c5 -0xdef0289a2e4ec369c7c97fe662d5652becd82c1ad07782a2a9c19d8989d9fecc -0x44b2314beb087359548665dcd563f131c94500bfc645677997271fca4c741b80 -0x21359415d166cffc097242c63994dae8dec143013e0871cf7a342bf3699cfbc0 -0xb5f4c931ae131edc13a6a1e9604bebbede14aad31e78a7d0204ae2d281829e4f -0xe4c508a77108b61c0d9bb074a0ab01869fe7a4092ea15af39f2c7f26704fd2c3 -0xe9f1feb9544bf5ba248210248049f14695d7551e57a972ef6344164a4b046a56 -0x301af480d27ef27d25440dbc79302891bca04a7d089c0813f68c020315d155c8 -0xdbc2bc246dd8a5cf08a252ab6c286e071e5f1328b1cf3f3f0a8730ef9bc0aabc -0x9ca984b8bbb74f20ce9276a0e079f3b15caaab0ab821a9e94f5eb73c0f67180e -0x8b841445661da83dcd9f601dc11313d47d707dd001fde1be8fcd1de1be040ba3 -0xaac4351b14c4ab88520ede260365b4c449366799130a0b7ef81eb25083967ef5 -0x905aeb74cfe65d766c6f6050af1675c4e49270fe5358fdb2f91589ab0b26a64b -0xbd853376a5b4ab623b81dd6fde0d93a18a2ca94153913164f769d2fe4769c73d -0x20a798442e4b15980540642633460f04d143bad4ae88e4b034c77de2f287d8de -0x3f6a7f2c7bc065bb77a66a8be4e76742d36bb598683a5a0793b2255c9e25de1e -0x5f7e53c80823b3d4e973a81431b68c41b0cb888f344dc56d6b4eb1475702d4a9 -0x8c3b2709bd15370a4576697f4083a4a31c4ba8ec2e3690cb35a0865b60ec535b -0x5c8cc705fd3dfa2237b5ac279b57c8a83ad16966ac408a185d6905488f60d86f -0x15d34edb6b4b384982c962ff1e2e7dd8be68124bb74f8fd28dfb58bedf939408 -0x24533c860d62b85bc6b4101886394aec6401dd4f530ffdada3402eb1461918a9 -0x2c59f55afd1e2336525dc823055fd0674c4b5f7c699e3a8db3c11974c0e995a9 -0x1b47508db261cfde07fa2352a201673ce444391118083591119a46fbe19f6cd5 -0x11575de9fd952bd8782b5823ef3ddf0966b334eeab1153573e203cc02ad626f8 -0x9df16d536658e0069919b5c9bf141eee4e3d6c2accd6aae941461cee8b5d5c0f -0xaacc962e9c2f9dc3b45286f67f7c78c39d1bd08aba50d9135523d8a67eb3f1fb -0xb40f6a430241bc8d2ee3ae9e409ec9b17df3ed68ec6aa9d474e09cc970b4d489 -0x7b9a8d277b19768478844e678e7ddf7c35da35c08587b09c1c62e6412c599b94 -0x02576de1d368719f3e60b51735e2fe6567dadc52b8d5fb303bfbf6c17e0d10b2 -0x51c43b4097f458ffe981b666f0f2f5ee27c3c73fcd6d28309a88a673583fa8bf -0x63c332e425dc038938a6cd4add5a7a23d96ba096e5d2209cbb4582f2ffdf9187 -0x4946c97c22cb9ec5af76eeb720dd3bc36f09236facd821797f4c1efc92651b47 -0x252a75b20c8c9871aee5122e876946451fccc0b24cb478d921fe1e88e4c2543e -0xbcaf29dbff76115ea4677ae1b0e4a27ce4e34371190985e717fe591ba261c0a2 -0x53f91c5f7e37c15e3a2d450501d957e917aac4f60042c5618a97b326761706f3 -0xc0b6445abf391e01233b2f8721b829f7e45defe434514e396187cc26e29fc98a -0x785f221b06e78653f36b95a419ec6f7674d64eb8f18267bfd5dfb6f591649968 -0x73a643b5eff6150134050b8319ef88bff9f54c90e1f39bdf4f9e2eb1f39be698 -0xbada7b6c133653678d65dface396b65dba3616b8ef914357b0a76390dff113ba -0x91bc99637b9dde506716b25a64b42e771b77466708a18f2d1ff858426d64048d -0x037dcc9c3e1052f9ace27e2a553900a998d8c312fe11e896f5d837bda0576a7b -0xe22946c39ef921e7b34713754be3c4030389f0577d39991cf990a5bffc0c9174 -0x3b77786c421b1d1b77e9b0ad609e159beb2746f4156520f60c34e8fb21c4537d -0xb1920c4563eea67f91244d81233ca79c0750326fca2bdb5148777364337e4ef0 -0x914499e4a873c865120f6bbe032b8d1a358c212a97f04bc4491ab3f0951fed65 -0xe9a3ada58c16f4fc59ab3ea166c9b6553bf455c7602ba5b4997a5681a33947e9 -0x91e2aec95054fcaec2a22066e31eb9fef0cc15e1fa1fe1ead6964ac6d9434989 -0x8bc13d4dfe1c74785db5cf2b3e73809593f783ebc8b7d9d2c59458eb30f406a8 -0x216edfc28751bee851ba26dd82cd9b481c5db38742a21d7675f56d4b528311af -0x59ef2f10fa6a0aa34ad6e1a6a4f218f51ba35364f9e96cdcd1258df011004b46 -0x3c2236eb17bf37b05f4d9e8370e93cde8b5fc147f09a35859cdaf921992475ce -0xd89fea3a34a00af5d3a6bf224356ead82a53152aca938c3a12a4f97a4dc1435b -0xb7a2a31db3fd93836a17e112706c7531773696e3d0d272f0cad0f2d77b6859bb -0x763abf39032d2d727d46279f796f15a7a354a8fac7b2497ecee2bd62471208f7 -0xc4b4e585f5577e5c10dfaad63179137b6e79b4ad0dd716f33a73a7b04474a366 -0x895c8d2c6c3012c74c9ba5b4dc183134a54f3bbc1589824123576180c9783f03 -0x375515bf41089716b46b5958f80c7e6b2006b5dfc1abfea1a30fe55e313b3969 -0xde05cf8308e7b96e5958db6d6ef10be81aeaa99f3dd687c23303c850cc56574f -0x05c76fdd3ac2eae23bb6a50f1d280f7575ebfb70edd400906f9cb6dc06b2906e -0x720f30c53685ac99e3d63770fe2c4c1fe3c891adccb47675a009df482ba09e9a -0xa864441633776c0ec26d80bbc791ae4c18b9b8cef1ac38d4f7eaa031d6767e8d -0x90094faee4e1dbe92f39926fd8d61400c729c5650d6643867034df0512dc5597 -0x47a0cd0121c65d6ac701a7a555c8e09ba93dcdf5cac8ca166e56a5740616d856 -0x355e12d58e7e5c7c909de45f3bd4b0929afd8e8587e0b099a0c93444713565c2 -0x8de34c2d1a21c0b90aeb66ead60c50ce040ed392c6524ac772776f249e7990ba -0xa5eb0ad6834dd263059d290be892c4c8167dd148e6ac9f5f65f210704ef5b658 -0xecac63306ae191b742f084fa5bf5d4aa130ef37b9d081a3be69643f7fb03e888 -0x26abe2ffafcba6c80bbc5b1d37dfc1bc72e400fc76b1dcacdcc4db2644e71fbf -0x53bc3dffc6a47fdaa51f9318e65297f945d97afbc45b8a4724354460c7cfabd0 -0x9069290dd7aecf8b2f92f852c2ce6f41071c4d38fefa156b6406547270f5fe3f -0x095876dc52ac53aa94902f01f499df07d651751fb2e01c720fb44097b328a2e2 -0x87becbc817f414a53d89128cdad3165cdf9cdf8d743a7040ae6dd20ff5adb512 -0x3e1d54ed8db5c50c732b94c68f48a9b7027daf6ddfef0bc06afc486245664684 -0x24d4b935110ca1a16ded45aee60b2f3ce49dac77e3ea9f0b5a2c5857e71d94b7 -0x9cbbb5a2b41d76d8f704e194c2a70978d88e486cc9c1825e58a30bf0648f0137 -0x034e77813c54605a896a7459cfb53011f9aa64a1276eda5b390bc1497d8d3201 -0x87dfe4e00625eb8b8b58354530a50e8fd31add74fb72f518c9233894b28a6f30 -0xc4a85405dc14fb548e52bf66442764e037e3e2be344ecc4beee4d6135974a001 -0x1829258e7f164ada63b6e0c08957b5e26b64e2bdc098864a72d4b145271607cd -0x7aeff1ad83cfd617d8641df994d497733dbfc86d537408e161168178216a8f03 -0x9cd36c5034fb27216a46a4da69e24e803f4054e563079ab09cfde7368fae7790 -0xf80d35ddc87d5b69209fd852800336d5acc4230c8891fe30d248f03447faa218 -0x7d2515bfd51c541c3a581f82128bca733d4183a2464e3527e33d4667f790b692 -0x8eccd11ebaff2b62232f82cb9522f2dcbaf2b84b6518507631f831b7b2463be9 -0xe4360180d9753c3bd75d2425613c1b1db2697f452cdf4f217b325996e8835cbe -0x75b66257b195f3c595f8966123240dd211fb771dec85096a3c965a62c38f6c98 -0xa89a2d8bdde399057a7627eb0d4f2c9ac69741e301dd8426265c74fb41488450 -0x9201c9f323b0e63431768756a0b5d26224707007329f4dd9b055036953d0bf93 -0x9ec485952a11a4af8bc3010c31b1d6e855459c76a1966e3989f3404c1debafd1 -0x970905e5c43f23691ae25a0beef764baa05b0cf1272653d52febb73436f09e2d -0x9bc8ae1604f8b56ef7c0bcca67e1c148211e02ec0609af9f380b72e7aa517b9c -0x7810353c5d29ab7849adfac394ea3edab7bf1997c934315e26acde85fbfe9300 -0x23491b3e1fde2c04043bc4e40efeedfe9034b7e3e505cad5bf5eb1802f815861 -0x61edcc8cc6e363339053d3680e66ff53d837c3c288ce67aefef5cfca6525d497 -0xf2453507822afda79d4877ce1a94906db4eb57006cf043728c6a527326d31c87 -0x8b0feb2269d17757dd335bc4ae916ca3653d3e77ff94de636bbaf5fe973de249 -0xc3a7500134ceb8213f01b0c6a5c9aea2abca3bd38a0e342be230e85ecea2d80c -0x0fa5f88d7111d7b6fc8ca5b594e8e625b896e64e52dbbb93f87acb630267c11a -0xd25d52c6a4bce0e0441a07601d838ea5cbbd16429037a37817e2cc3681168497 -0xc1b4e45c17d3806a371b88ef120f3a279725f33a469b42759e4c5968a93a8955 -0xb3cdf1237792ca63a5920fa0f7217dbb98b0173224a5f899b62f62bd0f55276f -0xe34da85e9a1b848a3c3c8dfa50d54fb17546bdfb12c9c48eb1279fae2bf64600 -0x5a988563b2fa3dbb74acab81170d26ba3101c43e3d0ec592b4640ff77276a988 -0x4836d1776ba95524c77c39ae43d05670885300eba2729c423607a22bafac9dd5 -0xaa37780580d43f68f92024e7ea6d4cd1d6877f917c981702614590fa354b03c0 -0x0946d15002868502988abefb429d2189f684eb0c205734a9a0f122950897b5d6 -0xbf9c5e04016bfaddf84c48c13885e3cf443cda2e64536870d71dd2c8914e938f -0x89ab5d197f2a67efb4eb799165fb27492b13a64670d624bdcb7e42dbfca18ba5 -0xc2372cfe3a1837b5d4084748ec3796c297b0b4773811d16d391bd726e8a61b5d -0x029b599ebbdf639b425cd3f8358003c7a43cd98c449140397c914f3212e99fd7 -0x3d32ca2f63326364351b38638fbf582fa871b97507b2a6259faf9feac3663e00 -0xdaf4edaa7e954bd53976a39bb340a6e7889ba011c354e26cd069a96999ae891e -0xe50b8a4991ee9527908f20e2bb4068b1dd40c28d82de94c4619cbf400dcec23b -0x6e6120ba155362fbf899a0de63c75625517ba04736861619885996cfb1e20245 -0xd8ab03c73899ab3ed43a5547e9ae386958b842be3f62dff6e6cb6c1040d1226c -0xa36f29bb17c52ae13d41a4d17c85aed01116ee382e879846d090903db2acc839 -0xa11e988b29edc0d94fe24c2435213045901bb6e5aa5c452ec15b2b0d693e33ab -0x8560f845d12003be4c2b4ea0c5257f13f6d1872644c905cef7117ef61f91d755 -0xd920e12af777773fd07cc114463202e28c65cf6b8c801be918372ec8327636a6 -0xed89fbe8878cda92915d41cc9f53cae5248080af33c1430ba54ef9171df69efb -0xcc379e10f992dac62f300280bfb0fb95ed9f7fce7302d525edd11ca17470b7d9 -0x50c5ab985a84af5fd4cce657dcbbc69a64d4ee8a7dd818e9728bb5e2c1d7c206 -0x83adaf8f50ad5848719c4a01e0987fc1b9cd87e56966bf272f86fba72e2eaf7e -0xf18021d115f1ffed7b3b0cff6600b85b75ccc74394a6a895a288f31e0f489d6d -0x82b466dcc0b22aa5d6e468b3e6868f2aa354edd374f0559c0624c1495e7469ca -0x9a58ea56f92fcd46c2cf3ac9efce59dfc15270fa91bd37eaff0bf38ee7d8d78e -0x9d131373c6e03cfcd3c3ccc6d66ad924f775b01fb0a57d9ab9a96fc53e637b3a -0x416e9ea8fb090f235ac44d52aac400e5d4e2b107dbb6494274557979e39c346b -0x4036ad141cfde075d63bedb69185157dc6e66b82b9618fb770f1f5b90889ff27 -0xe8b909a13a57f561e0a31d0fa1c3f07d01cb80c54f7b533db094a64d3fc86e94 -0x7dfdb2346ed4da9404af9358f334704e8b0f0b0e12687416e00f695e4d937fde -0xa1707330d712ae8dd1786ce05c85738343ddafcc26ada5e8f0dbd9b063261289 -0x32b0c0bcf2b57b9007e5d42fa0f5dcc06bec51a80e81f478c063e87546325ae2 -0x7798b17d854033abd3482232cea8a3a2bf77694c1e9ca21b8f9add08761dcfa0 -0xe7e34c1812a3e01fe00235633c8fcf3fbe3c4a176a45316c1bdd372f7491ab3e -0x534e1790db91f080cd0c1ea9505bb5c64cdf3c01697956bff588175858f78721 -0xb555342d50dd0340ed5ca262904deb274a8af8c2f003d2db406e4b9111bc4074 -0x1e2874c44b7110514551ac0e67a73246d514e78448609884489a55acb35b8cbd -0x2b6234e28bf969d4a4dad4631712229e567ce66c5475546325b9d7dabb3d65ec -0xbb96f09d107e0f9489482d5e124731e4a34c317fbb098ef6ae9932f0bbb5181a -0xa388bcd3f7d3f390948ad715763480a40487a7939f908087af6b2c6cba0f4186 -0x17eb0ce3d16680d105926e6d24c7ac68943fb099c56aa804875b4767aff5335e -0xe8d5168ff4aafa57f6db0ac12888fc9a1d1f4915699e54bd56ac05bf790b7a53 -0xba000bc65b847dccbebf721aa4bcc709cb33b51339677a654e60776798c15445 -0x9bfd113a0b700ca88f333bef401486c23099036d4d4e028431af7c91221de07f -0xf6d12fa8d02e568d8cda30c765effb9f6dbeffff348e71cdc8e45d6cdaa8e574 -0x24f9481c924411fa5c5672266033e26bc65041c578ac047a8206e1cc721ec91d -0x16fe793f89d1ef968b892df0080c89af6bf72384a1ba8f3ff187a5e00997cd7c -0xe78f7de7ef973b82f3dfcf9200d4333287aa2506ced5beb968d443a55adad684 -0x63f947e18d64f0b7d3af9dc05f4a6a9f9e036125be7e0f17220ba1cb1e141e67 -0x543879752352ae2e5c6dc2e6374c0ce199abeab2b93db4599e9b37658f8625a0 -0x0633f1a5fea22b6b5184e4dcfd07f67a407190a483445827f6eccafccaf18ff7 -0x3e82a617073d5daeecf9364dac2189aee6abb91378505b51ffcf93a9d48293a0 -0xb5f5deef906dac8f88ba9a7fe36fa5bcf471e9ca79fbba9f1b81664325bab635 -0xc31e3f233306992a82346be7ab8c42e9f48a19c46c44ace9ae3a0d261a8aa2af -0x4590d20cbe714a26305a91ab81150d3d32b4ad90760396cac204812168175fa2 -0xdc2b50abf25073a49187691e23ce53d5c25c119d913e83ee1af67a822a875683 -0x408df1db6d21ef795137539f44ad0d527254ba62e0d6627150fbaeb9b07c4a51 -0xcdf124e50c6c31837201d5657246e6842d46c9624c673702a9cde8b5165efb67 -0xb23fbf9f71d7c9d7aef8be2f9bcce4c420d3f25364e1baf8bf3fae294a589e91 -0xa13d41f67631ab673af51ea1912f941c9a31eddd6ca581f57655a18a6fa28746 -0x099cb25cb1f1d78cdc51ef99a6d1806ec441ace0f700bd3b6a218efff431eb21 -0x269cd9e3c89916fc1a3f2371543163357fb2682e6efb13e0ca6a4939f17d1b43 -0xbf0963dc246f3b2b003841f579b23cfc94e6f182c5a98758186c2c49615d1e7d -0x65cc98028fc600aae8bd3c672a879fd67edeb0a4d5af42c9d0daec816657c456 -0x9561a21cfe95c1c8c4d6cd4039afe9d064eee0ced9599fc04870a307dbc273e5 -0x509a9d8d84c680f6429b4922ae1c7fd40e9c92a36fb9bf9bde85a15f57e45ec8 -0x2e9333ffeb87c944017db6c7dde17a6d0e2a3e6eea7c3b61db353ca46f859a78 -0xde350ee70fae74eff70479f411bdbe8da8cac3e331df4a53c87ebb63ddbd5e17 -0x1d56cff1637baecd47b0fa1419ab3a873727baa156942b34a3150390204ca88c -0xb8960d19c062404c9640e1795be30df752b2c41c18bb2052d8889d0b0783efd5 -0x2c4d2dee10bfb7d52b2fb2826b24d24d482978131386bb63196978e279efc622 -0x228777eca341db4a6fbd4213986b5be0d931acf567e25309ba1b4f2f3004c7f3 -0x30af5a3574c25116994e88231c10242a405d1fb815b60f4ef13d9ae8f306c4a7 -0x4f582fbfde8123799bf63db4f544de740c0acff789c219c6a0a8d3bda4216b12 -0xefa8ee9ebb0fe605f602c9acc716239490bf425575285dfddc208901f77abac9 -0xbddb0271d745948153644e86b2ff71c4d68583556acee5b1d284bda01e831369 -0x5cd8d6f6738fd60917759da1f9559c282d83107bf3e189c1a5755fb0efa0a3a6 -0x9fbc87ae7f4d7e6094bd64bb33ade9775145a3ebb4150263d20b7a5a48ee31f8 -0x3358e1a1d171f2b65ded7ddb6a71c347dc025d5754f6701de412d66f02869f42 -0xeb4b1f25ccde8fe2d84cfceba26cd0888bf968cbb96f8b263899ffd9a09cd7fe -0xd1b54acf9419adfca58d6300614f7b059414f45254a1b7b72e5169d0db8625a7 -0xd5b355a2fccd838cdb14256caa06a1b172a52b1ec52cfde52417fd13995bc064 -0xdab36ef18870ac1e06877de5e4a34360e44ac59cbbcc814ccd6f771273aad76c -0x1217de45e4f2b647c8758b646e69a56143bb259c5e0953ad98dbc3d9f70f02d0 -0xc9a0454322db621ca32c8db10538b0e94d7fdae513a3a5b65a25f330784ef06a -0x42f4da7f2905e3fd754f0f40da527537d24b5dcae5f40ecd288a9406acda1e90 -0x6bf76a8dcc298818a666d64c6525ab3771d1905157b7719aef1afb303ce7da48 -0xa2dbb4756ffa93a5cccd2dc23a3fb4a12f0d10e5cfaf8730863109a6e2a9fd8f -0xd43bc01e11c06ef8234a18a5ae37b5cad3f23f20ff364b4f85929cbeb0765748 -0xad85f6ea2c4c075b0d8d28c167df45d3974a36a758c3df4a2bf8676387996eb7 -0x0a5da8b9873b675db2156af351744504eea9ea6c6ee0ab9c3b8ee93f714dba25 -0xdbb9f90b7415b6bacc2c551b128a670f05e6eff53d2007722ca87b947ed838df -0xb87c1042c0ef7d90be40ccc99401bee792c4d4d55031731aaac25919527feb42 -0x5f5060f49c9d972a7a05907bdd038815451ded527f167ccd45820cc3bf173bae -0x186a657558181b982d2a44b74d8c9b8efc7d9a25e0078f07c02fca389f6b15f4 -0xddc0f562104ade6f462b3529c2c629262bef4ed3f9be1a34412b09f1ebf66082 -0xa24de70490cc1cc16c324444374b40a9728b518844593bc102243689577fd29f -0x607a241a3b070824a0f545a6231404eb38a71217ef783d63bba188064e17e4a8 -0x718c2659ed8de68f77143a928e0ad7d0ba45c649d8595afbdc2dccc021985c39 -0xe605c9f89f53b69685d4834600d62df4e5c04fe379c0b713dd8577ef47e3db82 -0x3441289ca3eb5881719597bf42734020c58bcce23774fc3906b234cc9f4dcf49 -0x405d63b10f61bbc3d5fba2f9fdbec582dc6a5327bd68f87aa8c3500fe36489ff -0x9b35d00cd6bce51b7cbc70f3f385af07af9df43b944289e3065cc280aeaf75ff -0x781e0dd15e53e53f88370b09a8aac58c40fbcef68d45c894fb0c21885b196aa3 -0x4691d198ea0912bcc5c4ba4bcf46dc61dd0daa01fa8883cee8de3cf946b7823c -0x75f4d196561e54d1c0fbe10f231705596656a22b35282b4bb2b9ff962e11f57c -0x1e170078ca8d5b5b0210cfc95fca818715dbedf7b216bed72e31114a65cda4a5 -0x2bf536cf5a5ddaa3a48b9097281266948da8ff83e6a9bda5503024facab7fcbf -0x1dab83d9b63b8b2cc97d0bc48b95f5ababd0fabdca2f8a7630e6784cba6b600f -0x67bb05edb775ae844a0a7911b5ae236fcd5232fe7fc422c01357c26efdb7d73e -0x348b15d335f62824d2495d4b7af6b0b948a7f624a785a28fc2abe1449761861d -0xaa079ab782b7141956cae757a1f428b1fd77ac5b27ba67701b7f90ed4a29896c -0x212194f3345b6ca905081aa4de7da69837ca59ada280d826e4603fd0b6b302d2 -0xfcffd2ef7a45e5656add0ec2e257e45ae1f1df4e31b23caa084c8b315367242f -0xd82c002b1b34b8ca4593b80387e4f4be0d3d7bd171d6f4c5319519f5fa0303df -0xe3876f5fafe64a3fc6a971481b50266211ec35813698ce331a9033f767af00bb -0x3deae6512f0a1cac9a1fb5a65a0f87524278ec38f5b6d591536ba1f15fb62715 -0x6e17ed19e4406c8994285769828f7e66bfa16fd3c711a0d31231b3bdbdfd3c00 -0x338948bdf42b3a4fe82276910ebb93720dee10261e52a0b11677c95883ec3468 -0x2cf3e9f4cfa775cac259ee2afc73ccf5cde3cd39e7835aee8933c87504f69fc9 -0x3add4ff385c0432b4718493aabb2d8b058f39d205cadf79feca4143775061d30 -0x1f7cb0aa9a134602e3a0c6075fbd188874dd2d66f19ba69df3253da4446adeb8 -0x01b8cf29a6320e2b8e78e878e1e4abc9fd6bf707f8e5de8356601a451c2f6040 -0x534fad54a62b88ccf9941b176def1e54e4b44a253ce152696f6a77493fc77e1c -0x8708231930c7daf2ca3e721ffdebeae53fb14ca7306ebda3da3cf5707cf9dfa0 -0xac84a8873a03a90cd0e356a9c3d1d5d0dbe4bb95499daba606d9cc15474149cb -0xba9dc00ed2430b5aa8008cfcd14408d9adbff2dcd2493c6ba077bcdbed403c81 -0xd37fad56df28f383c3524e85d80c6801a2adf646021cac7a3dbb84d96d80fb2d -0x4ccc0bba705f94366817f51c2d632971d028391657956988dc84e2ea0893ce16 -0x5cb543e2a4813be3ed49a7c122fa3a48551916eca1a4505cff43b837165d183c -0x90ab7791a0dbb888240212db9bf07735c9bb6e0d1500f48d3445fdb4b6995d41 -0xa6480c7310e19e149ec6baaf3edb818169e2c5dff5f8c50115b30d02a25f4bcf -0x94df144780db5cbd9bf2113f61f30419feefe53d4ce7b6a2608306ef6f012d89 -0xbcc1f2acf37a726889b4a772cc2f9b512134d507283ab7a91add6308f260102c -0xfd35ab7900c3c4ca9c1141b05c17cdd6e88cace3f269906b1b658604acbba35f -0xa6914c6046a5513306725bf67447f0294444449aefc4d7381b72eb5cd40d0492 -0xf945d9e8f0fd2e964dfc0271f41316a6d1f5636b3a5726d6fb6ae0adf150b317 -0xcc5d1a9dbbb75be5e8028eaf4be8fa1c85e8a1eaf65cc1ed83de12d95894c43e -0x458a378e93aa6ad71c2819e11fc30818195aabf9d8256e4f024b34d9e992ba6e -0xce4cd983f3e40017710ed878dea022c49029e4544e712c4694277d6d5d3cfd38 -0xbabb76b1835a627abb59a6b41e4404821e7520d87ace59fdd1e7e58e58235982 -0x6c1c2bcf98359367ba775003f2620301c4d605e1944f28360b267a692d16c607 -0xa8320378befe9c10b281d64a3fbc6e624b8de512df11ebf6fcdcc10465d1afec -0xc0e08fccb4d66f582bd9f07cf5a39c2f25846779313130c77602f42c85ecb2de -0x6576eac19a6f8b2be84089bdcade506dad19ed6c70693485a99b26c737c4b8ba -0x7f9f759c0655f3fd872d35c4ea10ed13b5a91976d15b13feeebe280c6fc62da0 -0x1434b3c01acc3071df6620197d1b9e578dce993d3fa97122ee31c25ef174307c -0x85142f339b59df497ba3f4c698075f60e6cb2f247745e677218b6dad5bb6fbba -0x2c8dd0593a20548f44126e492a9da3cc25abd06598d1cf7fb2c763996b9e317e -0xfe80ca860fe767d3c631634783ae26254f416d3efbc0c89288a7e0579550bef1 -0xd5a46de72fa23b8ab887afda0383b67d1dcaec6c4347a793ee2e381229bd2f53 -0x35a43dff4d29131a8c3172b5cba0b7a1dee786d94e01d08cb71e4d4115181d24 -0xfae69d1d50717d480d9ce8a3c44c4ab217699481b2f3bfffbaf01d13214cb86d -0x7c0ac890d12ca48a9ce0b9fc05817cccff797ab9be46c05d5cf5ca7b57b48b81 -0x06f6f8ab37e6b04ac477fcf8bbdae39537cdba1d1bae567827daeb38f4002742 -0xc184343c193a3bd671710fbb1e7f362ec8de5e6390d76cdee2f3d79b98fd24b6 -0xebf975e767830a975f1aeb64d0ce68e31b1f61b007ef318ee87ff426306ebde5 -0x6fc77c464ed5130175c4c86c4b5db7a700ff9ad0fe75af763099aaae001e7d46 -0xa4a0f4e2f1c8bd4e251d8d94c1da8b0b8ed4b02fa299640edc07078eb195c463 -0xe1d04775f967d5afc6bc3a7a9d7c0746118d15d274d23f782d689813569f0267 -0x6af0b95731c2a655f16f64ab6da9b79cbe35ee901b4a90a46bea33842a2f9b35 -0x81a7687e749c36428d25a402dbf7049736f1964e6f2819bedca2dadf6f943cb8 -0xc6bf42466a21dde9aae1154cd7675d285e5e73ec603910778980b0db45487b77 -0xb4d8684d2a36793127293001d1dc7bc9fb4dc1d7115765014005d0dab50488a3 -0x51972f7aae4747b140285c33e98a558e1e6d43e71a88a04f90d02f416048db62 -0x05b838998aedda5e35ef14e7e21fa98f9c3ab87762559415a3bfe05cbd059673 -0xf2da1a2caad56e5a58a4db852d8aa39bef82b1bd741784c3cfcdb0deb4c22837 -0x3d46ae0da13f777c3c54c022ed2226086b733e121914d2e35ae46b612ac9b20d -0x352ca855b65a9373d3aebec053d80d679524eb9b75c1c02968174d140a4cfe8e -0x4c7784c369205cc58c4a2a24dc02e6098536ae0f0e30b95cbb0e30086c593f95 -0xa4119f9e59c1fadedae20701edf7a415deaa20c771c2033a7986de0bf645400f -0x1fd35787bd756c7f5ad82fc1ff99eab77aafaa7f08089c3a614f80a17c0a20cb -0xae580cd6db16ced7c030747847b93a835b304968d8429c62b30625e8e760d43d -0x171ef36adaa268225a0783269f57c42d46028b435d9852f6191878e3dcc5eedb -0x0bcd5749dddf44bb463fc2eeb1bf549c4a1227bc8fd89ef1873f71b755711885 -0x950b641d8675d97b9aa56457c8d39ea6f8a960df4cf5802eefe7cf2dfa93d9d7 -0xe4718d9dcd9cf1620bdfc3de05e20ba586645f2e84fc331c9770ca68b530198a -0x72a4eef8c9c30d9248a62691705760462393923a3e2da42566eed9cddd35fbdd -0x8aeb2848b41f8e4eaff3f514b2aca77496495e4e19d8ad2cce04be86859617d0 -0x01a58eae4bc102bdc7a7d2c39560052f21c1352cc629d4e4f53663b61dabd8a8 -0xdc3f9eeef0164e2aac212cb41962ecb538a7fe1ea18db7393963a704b71c68eb -0x597fe1c87fdd84af0747181809350146b86787b89bd004b29c66b467724c6831 -0xc182d52ff367ee1ff91269aeb4a4077b972be56d1900265ee287231cbb949863 -0x93a8353576e0970812016e76394b3b6c7ba802b1d1e334fea8ce9975856e4557 -0x753984dc9472761a08a61675d8a05cd6c476f71fb3bd23fbe8e91cab2bdc3e6f -0xcd37a71de1bef875cac8e0ef2ff2229d27a634f197e47c8a23e38f986f8d9a15 -0x0b85ed6dddd13a410073f2aa4e0fe4b5cd54d0f00c10d5d1c3033302606f1eed -0x2eeb051eae04ea7dd1b421d2b0f74f7836fad511408f0d587da53530682daf98 -0x025f96964b995d72fc759876564cce966751433d9f85f84ebc5d3151932a9cdf -0xec169214439bb22787c266815c0707d201334c30ec1c7fc6ddfe6dd374f1c63c -0x964ae972088ddabf9d8bf8df57c614d42060943f534e4febc2cdfc4e78a4d099 -0x3072ff687be817d2a308c4f6be4e56f0c50b173a899173b226260cde6e0d0ad3 -0x843fc733b1209fe94780d0300a317d396428c945cb46a928219c95b0d8d0ed63 -0x26a427e8c0c1b8bca9a7f14a6bf108abf925f17d7d608c9c4e635363ba101ce0 -0xc066cc716216ac673f2cdd1e8a1926e8d53b72a35ec1c7f76ec8a002f587aac5 -0x085862fa9d7e99ce2eb0169cb8b05cc551fc5d786046af146309aa6e4fb2ef53 -0x5a5da43f73abf2cf376e6e3df1b7138acb23c64a98744b9d0c42a80d2e06a351 -0x33105bcd843631f0bb164335c296f3e03fe06546d1966ffde8479a4074db6a62 -0x7f09941683ca7342d29fdc7a7864d0ed685376e873af68389339a2ecb4b53647 -0xe34574104e6ee0643f217a33eaf66d3d7cc85643281cba213be9fff877271a67 -0x0b70e6ae46947d73c29bc2b88f265ef0ec954d48f48c1c55a50264c9bddc8c14 -0x7129824ba213eabd3a36c2113ed82f187a474e2cfc4bbac0bcbbbce81c6f999c -0x089635555b5ebe7d1411dca79cc084c671edb85b05f57ef756bbc0b76193b575 -0x4eb2f205d171e5d29ced3e33e2f52ad5ad2648510c5b6b3c6c6229e1cb00f091 -0xb7933d2ef99677effcfd0010af9c6345cf5ec979f9ee1b440b4024132826257d -0x2481ae81a3babf2ad2abd953afea62939f6f0c04bac7367838b5d4827efef743 -0x589286f9a9135b11b73f35e12213da80a0c7fa35e13efe6aed4587183bb50e0c -0x0ff35cef876d1aea724237dda428170c3382ca7eee4a1c310460a700ac1c2e23 -0xd944ee3523854cc4b66c4853a89e449c212d90ce732b7b9186dce1d029f20cfc -0x8281e713b4c53fde5031449e3297b27fc1796fd977546edeeefe837458f95cf0 -0x19cda45b456b279f8007ae5b98916ad3d4375b9eb14263649e84a1ce71a19fcd -0x20ebaacf77b5e5509b7a8a62e3123fd3a1e3c8513f7c876424ba86b2b43d78bc -0x52d9458e5343f202610e07723f9482692ed7112a75efa57394af4c475ec7efa1 -0x0c8662e42281b91a30c3235311e58e1a7b7954c19e2a0c0d6633c5ab168c97a7 -0x96f1164bde24cd19b8c6c811a0c803680139cf05b9f0ec66def4c3e6a2fd2697 -0xccd49cefc850651be5286453aa59f61564f2993122ad3718fd7f7383f0816554 -0xffe173e0cb70fb7b8768554f25707b3ed4f3216d690d5482f7f4c6db5290b07c -0x93872ced08a35380a31cfe7fc993703cdfe69711366f21891bc6b7a91be333cb -0x0670c439e3c6b4f0b345ff60305d7595dcae0ccf20ebfa306b3cf63256dd36e7 -0x04dc43e038503dcd41d88f1a2d1bb6bd6d08169c1ba5362e21a6f0ef8f731754 -0xf14088cdac395315fb60cafe9afd924e3ef2e0768567e9004592375faca78da5 -0xb0ff858d96d6f0821e37f58a11ad69b2f8ada9fb77aabc8b6c5f596a482f0ef1 -0x20734a91deb9dc8f9282ab840d65b26f2c09a0856b53427a3631433000f4fd2e -0xcc7ca9855474a08b4a462b2ac417048e759bb20de20c9bd9074b9401bb8eff34 -0x913d83537c0012c64d75c083318d3c3c8087ed779104d6a948330abb7aa2c2ba -0x40994230af2fb8c9349e8c81d9e6c4d7bf02a35125e369945e1ab11154d07c53 -0xb9b746efdc87ba1688964c4b72bfae08e070e748e7d037d22aee343b7f71167f -0x4625f1d936b3bcab8c1566e5a3db59aa4d68f7075ea2fd4823968d20548a4889 -0xa6d7872d51abfed7077c4ba580546441814782f12df4d5b1bb44757bd38c7050 -0x12455e6ad644e7c128d8023680093f01fe55c7058a3836bc3a526434abdbb4e1 -0x32da21fbff2c292cb79a639f698a471034f2eb50da03ed9ddbeffdc7a3116711 -0xc0eae24c722aceb21211462ec0ba77736dd0db4261854397e2b21ca8d0ebbe28 -0x38d790de308f5871ba2c3e684432b30f40c02d09e75af1be935e5936b71f6b50 -0xed99754aed3a5070c59437c3ef38de5d6022ab4d16eabb054863bf18527e749d -0x5de0e1bc7369cc0ed4479154ce6e38588ecda8cb765819dca93dd5bda51c7a30 -0xa7ff1e00f7da127f2390be1da0a611abcf8bac7571d8b69ef2f2f99f335583a8 -0x4c7584522615b8f97b1ff9f290a7268c1df0ce85a3b4794b0482f6d4d295fc17 -0xdbf1deb759c8bc782845bd58872ccbd4379a795028c10789b2b2b44f22914c9a -0x8c29214d934d5fbb9194fede484e3943f6dce11eaeaab34d4e446ea1df3e0487 -0x14e4759cc4cce00b4fbbe1d4fded03168055795fbc0593e7f11d8e1a65d30ca7 -0xd4f7f130887983e9f2977d7afabae657ff1bc2012902d1159d9b1e32146aebf2 -0xc135f85f3f019a739a29757a7210031d11834d497204237118cd297895ee63e6 -0xf0f98ad2603da44d7b096390947e9b4316b01efa843b59a0e59252a845ab8b7f -0xfe217e63dd6c52f40b3d8a4d539784aa329b9651177d09dfd46de80e6807755b -0x2bc5215062bd160f995004291405cfaaba9245158e43a07f86a4c4b4c1af8613 -0xc0604a64a4f25d7b5f0d4b2fac76e9fa041c7eccb8eec8280b55bc3a9298b7db -0xc235150efd8ffa57b76cdea1de6ec4fcef04a4a0ee15c6a9c85488e2b7c3627d -0xff9333688e267897c5b1be89ca88b1cb6a8b8764d056bbb56ba9c1890d5f15f1 -0x1c190aac12c91fe11f35c6365edaeb503215b64c2795d07cc7df1840276a10f4 -0x58125ed74a31b657f7010652d94ebde9df7fbc4ff3cc14a9e69a9994be7b3c5f -0x03cea6d624aed1e98512eed869ef8c48258fb61cc3eef372ef70d2ceb602ca3f -0xb959303d745d3d4c7836fa631396d0fe70f22b9a490db54832b342da6e72cd74 -0x0bbdc2200384b8b064d4810ed674bc788b347558f598a019c466c99398d8a44a -0xd7f4e49cb83a5513e78fdeedd033cceadcd97967f1a9f7039d0f7adb5ad5fdd8 -0xc79a7b3ca2e046422351b03701d09cad6d7a57f273d071c98136ea14315a6229 -0x875e6751e9c2e0d1a35d4c54217c8d16286a98b488d3fa72e833881caf2fd155 -0x34e3f55aae8f7e61df4ae9c4176165844c500ba02ae75588ae100f6c27eeff4b -0xcded96355aa9ab3f696fa6caccf436d3599fd2860b3f1c7e3c75ae537293781d -0xdded8edd3653ba806a59a25390070e003f094f5e8ad3799e45910509129e9d63 -0x263cc9431d403115ff92a07bd0a9a86f9eea82f1a0e1dd4df5104324e79339c4 -0x498ac3c8b34e73e38a76f7eea5486d44d80ae399c3fc35c476ee9e7a1d4b2519 -0xa2afb20bde8dbf5db8e3540e4fbf298acfebcd3998bb4c78f04626ca082bf1cf -0x799b1a00c1a56e85b8f346cd62ec9573a5e1a0b6f0a53b7984d2b3b0c316b60b -0xe450a3b3c15162fc5db42bcf814cbfc0afcc9f28f2dd3a3eb2169426f3be2041 -0x1957144c7a2a1047e3fcd07bbea7499694c9527be3c656df814e61ba09525e0c -0x06f2b58e87e6940ee3aaf738487e007b3bd1857949613ca3cf71a234f1a4199c -0xff62acd3c7b2320725a700a6e80664adf2337a75ad4122275a00254e1c52128e -0xdf597228f084c36bd575d9c30ff2c3eb864439e3d728e35de2c236ca72ceba9b -0xb76651980dedc8bed033e265acc6c7b58558172937618270bfe1513c1572f529 -0x2ce7bf8ef2c983dc77a2be462ec06c417570a8a24e47f9a6c6d7814df97a6e5a -0x855bfa2018de898243bbe9e64747d8f95983b9874902ef1c092cf628f0494b00 -0xfb319187111caab8e36838b76881611398efaa715bff72d99d98ae3c3cb6f126 -0x08bf236aa89d7aaf935dcae63f6aaa61fe2d2b11697eba5e5f703ea140248c2c -0x278bb97c392a25c010474f106cc1893b5a3e84c688fc217649404a3cc4ab8e22 -0x4b705b7d1b261af80208dde1a06e8dc9058e198b71095ac11da3277e4e62cd28 -0x9d1e4e4d9eda835e08f378f082c4acdb9466172a2b546a7a95d41158697eebea -0xe4ee0c8d70b2401dd2b1c08e398afb1d0f87764cb27cd44157b9a8639b86203a -0x33898e46da47983223abfd7e2b9b602d25fdc9f2fb52ae0720d1cb8d019bdde4 -0x92cc8ab0d47fe6d0e3d8ceb4c734465d6df2effbf79bc1689220b53b515ec0ac -0x1a999c7540b3d62b11edf9b97a4485594208cdef1639d8a6389eebd1cc13d6e1 -0x548387431fd58124c408a70816962004121a12f0fe981580d98d9349a450f87f -0x531e80bd9a2f58b99723e9ecb5e89eebdb243e1c01350d8d11cae6b8cf09bc0b -0xc975eee262d880ed255ad0167fec3d5504e01a3700bf906b95a208bcce4d9d62 -0x2f3e9e703bef6e6d24409d893898d098bad2db6dd2e9e9a6bb682f40acc9a290 -0x8e00e71c16772262613c7f602864ed81dd866454933fe815444cdb3a94c38a8a -0x2057247ab5ce6e9405c8bedce804a098127cfed5df3432490b3c9ee0de2b0722 -0x9b7e80096740ef3d0ebec6f6dfb99eccd7e80a27319afd3c6ff21bc96ea8ba2a -0xc44f3fedfe5108f7d9e939657ce3fa8fa1061eeaa585140138f43664dbdc80ac -0x28a1b683b0ac215710a17150288815a863165d972a83715a3d3ac1df90138813 -0x6a859a5737473f0f0fc691896c88ebf7c6611ec3b5db1621e1f97934e158396a -0x3adad37fcabdfeeef0006ac880cbc40592f7189c2021cedf9b503c5cbac80611 -0x84911256bedcdd2d27c8040fb50f4fa03ff0cfce40c96654be9bfc859b31d17a -0x978f2cf8afb44cea1e4150bda2f33ea428d9829fda51a9e6f58d9fdb396b73e6 -0x15e0bf1d5754fb50e38c10d52991580714e10a7d68d9b299b5c2f09aba20e8a2 -0x0cb557ea7bce2ccf1dbd3b0a3da31f90a931920e53b773d1a25df155cee61fd4 -0x9e1b9bc92278eac9b1f3b0c78c0f3e4003786f422dadbf29b6bb201f0f97c921 -0xb10c640ff9286ec5bb6d9ab9176689baef6e54f6d65ad42785b72365dc6626ff -0xaf08ae5cab9278f064f033a510a1cb1728f209bdb44b4154bfd503ddd6d02e92 -0xd08d1d9ea42c657f6eab7c0eb158ea189164c2d68ea4d1d731a02656efb67cda -0x6f3a4105be656b0da4e26185df2937bdff0540ab7945d4f6eab779eca1a25a6d -0xf13732b2f45c23bc33a7e7ae11406bcfd4c63482796d9ac73a1363734987b4b9 -0x41f1e860ce7107d207f7c486b55c8b5bde43fcd841e9d6888e210aadcf0f66dc -0x5801082d387ff471858389127c0092a8a9d27ecf875eed0718832c70412badaa -0x53ae3a003c79ce6bb0da5f2c3818ff5c8955b3aa8f63316374f886a12defbc46 -0xcaf44661aae11821ea14d00155c74fb8ca82419f53abbb46348b22f707d2236e -0x30fde078beca63860e67c1b246877abdab79d700617864377ee96ea537bec924 -0x7aa49d553f49f6effda29d140de9dd85d715275ed0b4072c5c887a25ac9556a4 -0x0df8302b6530037e4c8b6793f23748de4aa2c50ebe38ba262e3b298b10f00b95 -0x5a2ae3b43d1c560a64d3fe90f89f5c0f5e368a17494eaa340cf25faac71b9fbb -0x602a4cf67e86ebf2e4b064619e4e88ed0e18567a203e4405adf460511ec1aaa8 -0x525bc3bd8db4baa7257d5d071717ab6b5e19bfe7d5d2d4eabd66625f83690f53 -0x55251f9deae22366ced7f9277e548f7a5acaff5f2cf8279d4cf8d1426ee6249d -0xdbb557e3ec5416df41d8a2fef854e8758d5e485a7e6d77a0408bb1fc6168cf6c -0xa7f69f03a48f6f3fb6efe9e0191de33115e7ceda921e5f33386875fdb49d0674 -0xdee1f3a0215922d0f835a1e94300ae4325381e63e20df3442b100a3fce7def9a -0x8442d61e99a2b9e73811b49cbf469c1ac10ba9e5948c72bc59d14c2e929ec29d -0xb0e6ca840c22769d93ab10782b9689d6e17602ef07907179e0b04cfe65050562 -0xf257bcacc38c84a9b7363704e9a1a670b1a124e9210e7997c9b9d14715938793 -0xfd2df932b037b44c0df36db74ce15100efa1171415fbf0a101a124c4689a2024 -0xf31e1d8ad9ecbe3782b986c829becdf19257173157f2e21e3c6192eebf4d27f9 -0xc8079252674e0b156b486ed21604018f38a3e45ffadd60f34e3e6d7aae977afb -0x172d49cd93525a01dfaac1ff7d8c9d1f2f9809cfd8d512a200e25022c7fb7b1c -0x0539d566adc0c5bceab5a92cec774a15bd69b41b848f0571fc04711a6b436525 -0x85b92d0b249664b8954c5763c159f9f11863c8ae59a1cef7407b7afb180ea9c6 -0x4b4fc4ffbca2118c56f2ea1f89e6878477a8402e9997893de12f0c9f15a71505 -0x8bbdcb67c47067a47981d62273cb6be3554f44dba52110061d5652199f66d7cd -0x0b490a32c71edaeb24832a771f177ac12929b46690e7cf67d725b3184dc4d0d1 -0x5ebbf3eafc4718a265ec24ab6e5a93f13a815679f8a06b24cc8f51c803cebc3b -0x923e253b44bbe31cab756caec9b9a72d3e63597dd08d2030fb9ab2bb6201edc7 -0x4379fe5040a023093dbb4971f9370a25aa6fc790fa685d3ea86fd2894304c1d3 -0x642ee97a5a4765a73c7fb8e0ff671523f8d33a424ef709fb2d8ce1d93344d734 -0xc2da728e8a3e794112f003e88493792797cd8d8433aac0631d8b0484a0870c9d -0xc4f2e47062ff01d353e1223b739195967be204317af99e525e16fae4cf3cc452 -0x2996859605095162e4343cd27e8fc9167ec6aac98e864c6b44fa9e433b572f99 -0x76754f1de4db0b58a4c9aa3972b895098b2f7041e014b393f61b66d76ce562cd -0x9381c63d9c9267328cf3836a3ccf1a24cf74da6d6fa552b50826823380fafd83 -0xc84bba9acd93df8802a663c7294c5c4e321cf4fd22107f9def52f565b04effe7 -0x14ad4a50eacf3b9ced1fe03fddd0210a00bb6643f6c24e4e728832417712f427 -0xf0b77c00cbd6c88d1fd1fa74232f43b5238f8bf010f71c395d670b0047124516 -0xa40b08b21cb292d61e022ddc5f7498cc6277be3416ee3c7e7c92818e79102001 -0x5bfcb8cd2a4ad56b39fe8326d889ff5a5a0391b1cceae160bf1fe62b5bea657a -0x3ec970f1053008c1a0141fe65f50b8935173c57cf32226ba9d34bd62a2f106db -0x76f58011df5d5ed6754ff6ebc63704e3570c4787c40a57c9e8056a2559d74023 -0x87dbef1a9f482350084e623f0173d23cd69d0a937f762d6334f800cb60b57c37 -0xbb159d28adda2cc7adbbb1cdb674626c17bf2c2ba3dbb8ed61fd61ec3bb8e9e9 -0x472a7f275e8a3d6345fdd7341a5b16507858f2771a1ad57fc721652e505db86e -0x804134b02f5a0a7bd2654d887e0c9da8c80e346836cfeef14e85bdc3624f4cef -0x82dee6db83a2ae0c4bfd91e9d6221a462cbd36ef4fc92ae4d8b3c7e218e4dcaa -0x76f2dfa114cfe972a214c23675eb4eff8fc2f653f408fdfba15b2711be8c38ff -0x5c2f98c630753324325a71cb9d7abe1823dceae594c0566e656d0a2d9f4d5437 -0xd01484e845a049c22823d6da80b5218342ea65acca83b68dd7d279563880b370 -0x72dc9729003ce4c411cda42fa6c7da8b4f5738c9c412de6135be366ec17a083d -0x2e8a00f44f763f17314b111420b27197783de812ee621f904e2fe8314026903f -0xf5e92a0edccd3fe7765d37f8154625866b20c3f7d41e3ad9fc803528a01bfdc6 -0x51431976f684b61622f7775b1a5db11e563476de90b5f479402f3a48e233047e -0x116abbda3441462187dce99df297dbf0388ec10d2a5170eaae34f5c5664ca57e -0xfa4e4667ecaa2389a60d21715cfa05fa28c1beed9cef0da9837cc9bf9d2a2186 -0xcb239210b26fc17c0fed0aeb217f634573ccd8db68051322f5ba9896a9e1977f -0xa384b8dd5e29058f1193a873eef98574c1c5837462b444d6cdc3a731771ee8be -0x95444d0fc4ab8ccf71aac8f33b4a256acb635d459e58fa7a5910d70cf201117d -0x01d597883baaf16ee1bcf63fe6fad466247ef48a3fdca2c80fc481aac7facfec -0xfe141c789e28eb5de1ebcb3fe8e5442a5e4e5ea0313078d6db96e117b4bdb14d -0x62e21e7b999b47303fe840c33200d9bc938c481e7bd8964a825e909b3153e898 -0x3ab07e13670f8dd21dfa4c2e99a4459e9304cdb0a542a66577d12a955aefcb95 -0xb60ce80d1bf819fd0967fc8ac7131c98ba6ee9849ee31c1f5a39e64350df251d -0x439b62002f0ab0cdc075c079551c0f2fb15c17778d0469403d731ab63b1cf483 -0x65a8d3b4e59c2529d388ee736d029e2b69d751629a00b63ae19ece0cb5f441f4 -0xdfcba270d20e24c77040062b3ac59c4eb51bfbd154a1e6b6992ee1b8fcdcb79c -0x9d616eb6a09242fc6526b0f19f353a26ecbfc04141621b6b85a5228c97816d70 -0x8c4e281ce6ff47be20a8075a3dd72a25ecc08de5361aee46606fe8ff6cdaa042 -0x1150b03e054f98cbcb4dc291c4e0e4e6cd634916eec838b95876e799da71248d -0x642d72492cc2b812af782e2809ad3a2e2227bb4b48a7e3931fded1ec14ddeb4c -0x0ecafe0e8a51efe8347f94f012bbfb646dc0fa5b612a7341e3994513ff32115d -0x3659047ddc423662887a74a94aeefa56054ffe949d247e592050761b99ede0ee -0x0f5a972b32021747f20ba7936ecb08a7df46cf94b428b568f6bfbf17f0795129 -0xed053e5d1579471132e8ea3efbf5606f2026b50f75a8c6b1198646234c80ccf9 -0xec762b8bcfe67790ca35118fd207d4b80ae4094040ae1dde0f82a0c1351ba60f -0x7d9909420624bbe665ec7724007b8ad60f1f36479cb242739f12cf1d00d6c8ab -0x1dd0b77adefd576164729c9e1f04f9e10d2aff3cbc839864d707afc8279899d8 -0x787b4718ba25ae751d1cf37dc734e245924110787727eb8c72120ffba7d3ff62 -0x6eeaca4808fcc7e00f919168d1a6738a2c8876fd5835bc931d396ca7d08e325b -0x92b0f9bcfdccee096af3067a744078b7e09e69727a7f292ad59ddd67b9f68805 -0x446eb2efcece7364c494eb48538df0d7be2dda1037c84b68b0cab18b06e57ca7 -0x3141875d53406973cb85e568926255fd66305ba8177186e70b90b9f5ed160743 -0x90f6414d8132d9b47dfb794065a8474208a8261eadd11e94fbc4efab69f912cf -0x91c72664c49298aefc54d389c55f84b1067bd839c87c9ab0eed78724d3839e8e -0x830121867e794710f7c54e6a8449cdeef5c71d974ec3d6fabc0e90dbf9b5f057 -0x730e4360b4a78c548a849c90ea87d5a21dc1e5a3afd6a68db54ad4c68adaa2e7 -0x5fda52bbdc9ca66878b8e54994e91b9bc725e8daa447cc9c717ea9bdfbd9a4de -0x525c378db76a7f1040621003c00cadd9f225e21f432095f276a13d689430b7c6 -0x82d6da4211dbcd9d24edc1cdcd8850f1b9af5d8b006396e612ecdaafc029d2ad -0xbc682d7d099b60a58cf6a0bac8922fc5830526166e178816685c0fc28d620463 -0x6275fc4b24210d5bca15b5c2e0427aa3e2bbcf75fe4a5d9e5481f93c80937718 -0xd16c62f9f85aaba00d7f1bdc8f6bec99f3679dfe7dbeef2a1051d8483518f584 -0x1192116af873a6aec18b172daf00f18220e37ce3458448bef0ea8bffc641eafb -0x1aa961b611371b56830cde3cb9107bedc5fc790306d23e6cec28220217db73d3 -0x790ad9cf083c9f35d337c2edbf21e27c44cbf978081c0b1f6dce385c8619c461 -0xd8d1198178c994b53635ecb9d8e8deae064073ba36330933a371aa8c99321358 -0xa4c8829303d4a642cbcb2198e8d810d1c47ecb5c1432769ec91852c87408e9ed -0x337633b6edc5993649972367d9c63d0ac869ca781ba77ce233c3a2565cc0766e -0x80fce37abc096a529d9b65d9c3d4a7717b8a8aa5f37a8f0788614b6b38fe7077 -0x9ca69d9b28418962e608eab08fb7fd91a0c7bf78ebf2e6f443680cf8991ed591 -0x5dbbc45ef3f089039ab702fb5323fcee71cd429820257f368b43825c831b2fcc -0x661a4458b45f03bfae6cdf4a5fa8c7648bbacd703d78d58bac253b6785e941e9 -0x2ad1bd2231dbdc49e3266792f7c63cdba0a8d77794a5b3336d5e4950dd48c4e8 -0x38203aa9c0b2bc972107d2a4e563ba246854bca33f822461d4e16a2bc89ae8ee -0x7b7603a4acccedc460b1c85870cac83d3c3687f6adb49a123da957c7f507513a -0x22083a32efe8ab9cc3125c6d7ea6d5ae6b8788236d545d92afad82e5610627cc -0xd15555de9bc9593333bd9f686bbc5a8d06d3c03c25cb4cb0b9b4057d02ee833b -0x4e88f203cd4b99a1f372519ec59f74138cb3262ec84426f171050d5c5eaf2321 -0x7b9601b164659e36aa475c5757002711b14241b00ce0180a6be2728d046f3f40 -0x4bf738ed2f0a53545acdbe69a01aa88642c8ba0c419b27c7e3a51d5f554a4087 -0x68d9c4e864a06e3cd808fdb3f01649fbfe6b9bfff391c217e9a21db9462c8e52 -0x1310a3a635e410b3980f50aca3eeb9ff70070475bc85538c6bcab4865a0ae749 -0x4de4d80bd7df440e95d36d557a83f119902bf615527b812ce007ce876a0871ce -0xbe3b9c06e5bedf7c91563723913e1a926c19b68f34582f1c0a164f32e1c09dac -0xc9fd15c3abe7c05c5ae04dbd8401ccd2b7a5acfa6b3f993f6fb96ea76bb82ddc -0xe3633d248ba626573af26f1f04df829272f12ebddef663fe60199efd344a6497 -0xf71b906947fec8baa73b6e8f5597eba775ae0280f582a70aa1b073b5b04ebc16 -0xa682ad44f38c6cca641adbb94e78b97cc454d00b349e9b1ad0bd24541f22b8c9 -0xea75a341929ede928e9741a4d9c6684f60a289a31a1002bf368e96e5dae34463 -0xf5f27117536e01ecf02d4b9c7e71eda6e57255b0a83cc8a2780543c348c41fcc -0xab30ac4ad1155e5dd9ada9cd0fb8ace5c04eda426a832d8c09ef72b6cdf2b40c -0x71f9232dc8c0e2d6a01587b66db5738c016cbbb6fce0ed77602bfec01f0c063d -0x08889749c3f8f1f2bbcbe524751a86b3be200c53bc9f33575b6b6d75a76b7301 -0x98e40c5dfaa2c7894a49775811ce2829fe5c7cb4a857b9f176c90cfb47be9ec3 -0x3eb5d3e29f21779616fa4c94f5ac0f07d917516277bc2a593c8d00cb55fd7f19 -0xfef714f9745e3d901ea1881d40c7e8bea9275dd81417f8b83bb1ac1caf123b79 -0x28d5326866ddceb6888d25c94412554a58b05cc2fd12064dd5a7f722f62ac7e5 -0xb9e875b3ec240092a0ed9437610fe27cf6d2014d7ec21ca9c87bd04afee2fd57 -0x095e6375ce6dcf722bb3cc8eced363aec25a79eb13fbf52acf60fc66c3702cf1 -0xb880c13ad1d96d8804bf57ef68be4b58c22dbe4b343f283399242b1db7add9e7 -0x4c7a1f211c622cf00c309067049f9f01b8f7e9bbc3a70de15862f9acd5858dc4 -0xecb0f31e5fad0a2ce9ec06baec9f19e49c60ab3f8ab190b6e308e69449390295 -0x2d83953960af7ede1d4381bfcf0a16e09206f6e79b358da0ce31fa8ee843d469 -0x87f4ef7aa7c8c0e8ae311eb08c9a87d0ae58ff09b5dcb3b787c2837f57a0fc43 -0xd8ea02ac59b282c7b0cfdd4f8d7860c29cafdccb744245af76183e130673b1c4 -0x5d42f30da503bd5b08aece25726b58c03203b20a73d2789c62acc94877a35aca -0x90db0e451b7b56383494ab764b911cc883ea5c74d491c91f3d903d4cc016916e -0x7d23e8ef92544fc6653f785cad97b07886b8fc4c587a24385b20db548faba125 -0xc8f8049616dbb21637a109652facf286db944ed48a684b3be059f64b53dff180 -0xe053ff4a9009c2765c85a0704ba2168c9d9f82be5cfb0ff60e4539c4be2cdf42 -0x2da3be2ed0d68cf471a361ee3a3856ea22669c298ddbeadf6a47eabcca0f1d33 -0x53b70ed4145d513ebd046dba38eeb5197c4b0a30971eb2cb5cfa913b7fcbfc7c -0x4ae6bb4de0587bffd68760c1912694a198058a54b705e2afa9841411de504ba9 -0x4a4df56d6b8ea74a7e117ceb65a2af5e75282920f7ad6dcdafaccaedb87bdd9e -0xa2cbf5393e547ad8601bdf40072e49e1d96ddc0af2f34a341f79777f46fc4546 -0xed836ab8b2865c03925cd1b0c46f2d37b7821a6fad5a9b7fe629db2554e5caef -0x9939e4a387ed25d37281f3e0a4928c3f3bb14989c4df02627047a8eae6404737 -0x2b806b7f9f5364079708abf092ac57d7416a95224fcdec2d91a15a285a8e44b2 -0xe6008f27709c926d63f1646fae66a8ab5d1e87d8d12e714954429a0530725031 -0xf45d912a7d7cee8a6d5b656afdaeb0c5b16e303b59c1d39bdf27bbdb5acf194d -0x25c512edc8b905806474abdea783606b3bf825c0b5a581a528183944dd177acb -0xda0fc7235bf76549e30b0b9ca982ee9fa0dba7ba15bc306b43b46ca842e663b5 -0x9b03fc9f20752c5fb508b645ba4e49c4b4acf0c638a403c16778e3425e486dc8 -0xd6b32336b72ec85d258ac5bc1b6c14b5823b9447642880803c0753bad918951f -0x83d18f1a4507477ad2941e2bba0ad75783ebd6a760adfd609eb5688d08abd87b -0x36cd63c813609eb55e061265bd2f43e7ed91d65625338c0b4f435865d19310b9 -0x0d04aa9a7fe45f1bf5b69fe502980e871005f79b265ddb1c130e48da334928db -0x9a511fe036247b585616ab2218eddc3261c73c3f0764d45bad555cf8cf302e8a -0x78881de4cab8a5235639a36fbbde6b8be472d3f0d94dc27f51b14c5a07bd09cc -0xa557097aeeeba0c91e892087d718744d121247ac5e5bfe69bad78154784ad8de -0x209bb8090ea9cdae56d7547ea63f526d49df60f2d3ec25a31787a3667adf7ed0 -0x7d47d2b4b866c26b9199c0617b69b95db851a6513ae29b363bda18a995006992 -0x4560b91355461eaa3f2c4dc3866e90b6ff5903751b8d85fad784cdb292d319e7 -0xc6b523425444a78f26c7b8daf6248e36463b384e35ba430670b0b54234858ab8 -0x171a44aee1488b52fa6629263810d63e3d4c3ad04ca349deac317d4578d03494 -0x549cd7cc95b4dd2d25867c11624eb235e9cefddf02ec63f4e21eb817093ee2f0 -0xe1c5e54fe034f80a86c301da0e6c6bce117c7bda60424b993f68dbdd0cd05135 -0x577a54243b30c997f9256e3042f63721f0a4ee402688ea85acf4e6b599e35d4e -0x758a14f60a97c3b4f22cbba63051ab5803a05e8e030bc59f66c7b1e9e7626f94 -0x0b16adc84d1a91f4479ae871ecfa3108ffda61ad56eeeb34a0f0d4cc9f8ff0c9 -0xd346dc5e54bc3b1c1342ade6b28e8213cfeeca39e3f47aa2387eb436ba760ae6 -0xe662dd4e8c44d8a2ade344dac7a4e3cde805ee12cbdf32c4497edaa37f7cc3a7 -0x7193a8b213cf46f8fa950e3b82b399643266e2adefc500557b02c4287fdba06c -0xbee2d02fe7f7625d8d4d77d4f6e9d390253b3e50290ad36bd80ef28daeffbebd -0x5c614055aa95c19c6bd15fc7206d0e410f4200632f11315d420ab5f9e70fc281 -0x6f66c31deac9b035417834d22e60485c7b3820f9c7eff0adb0eee61ddd0cc0e3 -0x6a9edfdd6095a27b3495f505541d71ad2db9836757aae15162458d6863d986d8 -0xd8c978761d22c6b12389d8494d2daa5d586950081ce1a9a66f54b6964759b104 -0xd6290b4362ee8fea8f5e495b3fe16eba75da6951b650deeadf5944e1bbe3b8a8 -0xaa7bf3d161f05a43fc4bfc6f9135daa4aa616e50df3846599c8c99b2122a8c73 -0x0bbdf2739717b1ccd745edbb5765dd32b722334c6d2dec55f4af982247ddc536 -0x7af3994456fdf7b225407aebd44dada1d00e6c638c8a1df4002f7368c0de3d6e -0x023c50aacb09bc2801c67bf550d6f66d8d6fd36ca5e4e0579a52570b64ba476f -0x1c8357805408f0507f161de407258c1ee96569bb501290e291ae93ec63642e6d -0xe200810c3314e8aaf995b6559034bd2886ab6b3b15416804fea18947b6aeafc4 -0xccce98894844c6a9735345d26d9071e00c6a00c680916f5f9b62baa382d5b068 -0x5dc8796ae62f2aad1f423497969f70cd4ce2db6f141fd937e9d47211d819ad17 -0x49c91eda751ecdf2122c10829f092281cc2dd5beaf4b20249b306a6be14c1a6d -0xe7df5ae1343c56c77a8349a003b29091702f490c877a79ae2d3030d25b1b3694 -0xba9c65794609a61e2c151ae7ba760e5679b289ccb41ea18ac3974b772c2bc729 -0x9ad8943146df25047eaf57fbf60e56288ed6c36f0a3869bbfdee5eb274d5a880 -0x13b42d276f5bc7c0d5fa1c7c74ca641ea8ffaecdd5731969760f247ceabc54bd -0x6d69708311966b8941f3927e04915abd63a120d49071a75f98de1dd44599c972 -0xcd1916ee514998e595815a7f6caa09f66c438b2deb1834892c3d2da3c04a962e -0xd50bc15ec270b170d4bf40ca8229f3b1660311d367b9c031f606d0ae7f3d4cf5 -0xe6faac2aa2771e2ddbb3d29b70817b58255f7a010f538f6583a6254d515d85f9 -0x9cf61f1f9c2a1040019b872723f441ceeb055c2f955159fa8598599acd1d841d -0x2012c3d83faadcda8e0fa8ee0f5cc218f4b21114c8e8b3aedd6b53fbad65697a -0x0a55be4da28f439ed6ec1c29549e5f2de82c4af596dd670dee9d17a4f130f8e6 -0x8f5e41372e700d16c7c9a848e95abfcd84bad1d03399d911e6368e40028859df -0xd411c1406a990bcc44a303991fc60fec4d2aa6c95ef9f070b099f300ab87b3e2 -0x380d4073a5acee67aece56a07f118d0052f1cd1a103d896a8f16a8a1a2224f86 -0x060f3a672bcf21c7ce3fccbc165f5b89dd6f3490c551fbb8c6b64bfc5aa28a79 -0x9ad99a3019deedf579062a141eb3e4808079963234a5432a349bdb830e198430 -0x24b95693d69ffd1d662c573d2006cc6c83f263d7da9e019077ecc0ddbc661228 -0x9afc58c588308073595739063e221f062503abf8e02881c4ceeb8db92183ac44 -0x2961794fec6e1c6aa77ef1ef9f106e2462a26f14921708cd270f387d0f1912f4 -0x19a3fc93be2c40b1f91d78d835c3823a9045399a6b795f2adfa3aa358e8f05fe -0x8f68b2b4ccf80abb4accbcfa3a0609e31d1ae3eacc5d910a781364a9d98e235f -0x4df74e47f1f22639aa86d02dacaa0da770759a3486967c29a0153b6a58db0762 -0x65e2f6738de3b7582fd4a9523575876f69be7dc7c677ca6399f9177e68f2b8c5 -0x1fdf0f7e8f11081e2be29b2b07ec7eafbf564d0c0151f4ff9150e65b8c9d5bf3 -0x3e17146ce0af1a0a2186d36098ac0379c5d7930b2f031b09336ae75ab28a3f41 -0x22a3a3eccaef478a31798e6db2927b7dcbbb4b7dff0c1922fe8a990a31fded31 -0x904fb9a241f2b15f08ffbcdcbd2d0cd018ccab2d436461e2b1627dc166664a5d -0x9056693e2902542101ee5797086e16b4fceea018e9218616375b8db348e66406 -0xcb287d7d6bc48476350180b4b021300688075f704ea81f3a618c3dd410e1f151 -0x09021a14ff419fb37f966229e482b448ff8126ef3590d0a25f7d989f58ae4d8a -0x7c6800c908e9bfa0b69115fd564e08467f80c50de473930a300df0adf79a8301 -0xb80b3a69173677be6a999257c4f5f62e216f9be2acf0773fa40fa9f3cf1136f0 -0xacbf52ee5e0e164239358cc21cbc141ad91a6f87688378e164e0731b0e937bb2 -0x65a23d82569b4f89f04282da46b91c6704c3cb094c207cdc8f2112e189365a60 -0x54769a9adea2ec84a7626b83f7dbedcb2a047fa550ae67e21c0d0b108fa9d594 -0x91ecb7b91886c1620f1f0d7c86ea8305417ada96666b2dcafc223dcda3eed4a9 -0x85842eddc7742919b9ff2cbc6d707f4c1a911aa7c20a84a4ea6055fca3cae2c0 -0xede9a2e937c801de680375999040dce44cc787f4a901bc905f06253481cb46ac -0x472599acabf9ac7d5186c233ab7e2e195618daafb883566237c1af416c96e29b -0xaff150d19fda2e8784221b86187ce4c2e2ce949149bb1ca871ee77f554a475ac -0x28177fbb4ef69125460e655331dbde48b2e9a378bef2f26e930683946e11b7ad -0xeb8ce309239b8e6a27dadf2dfb2fe02b5a01b9ac569e688123e4809921225116 -0x6c650ca3a85b3e5417ac77e1aceafcebb2fe73fb78d73fe7cced6dff220a6e2b -0x913176c7d65097d703639b821da38820e411ab04fd379c13e15a8e57a8c9af44 -0xeda614a33701bc68ad84542733d72496c16654171669a1726b405635528763dc -0xcca60ae9db30b4bbe532e18b85a8c8b811aa9933dd8e8878b4eb775f8626dd86 -0x114a2e8d45de5ea20d72723c3160ed0608bc85738a4f223b9d0953ae12112c05 -0xc012e60aab5f84167a2cf53c53a3b710dc7118be7368e15d86cbecea4dbd349d -0x9b0ac312e01c61ea2ec88b068154f65349c746f13904f47de1fb6a4fa68846d4 -0xfd790226b3b13f7ea2cf99d38550b24114ffa8908d6a172aa6dbe27c54a9aa04 -0x7ee8867570d16c1d5948550f5ca7c45cf25d23deaa01d20d6f78233e21c7328f -0x95f5df3b65e72d035d7fdca017f2bfa16587ec02cfa16a5c7cbfee4c09d98d00 -0xf45351c3b355b2ca7ffb05a525dd108064940b33df93775e9444cfb3bcfc25a3 -0x96c9c582519a49a3b892f7cd69adfd96894bc704a9b8ac74fe823de831ba580e -0x9aa714251aeb58252baea1fd3ca226d0adb95135850e34378bf14db50a19f2bc -0x029ee58ed10b2c0d58d3323cf39eda6d41608f571455fb47bd67d5165d7d0889 -0xbc3921af47fa8e44e2576396b634719601ec4689821a64152e551c4c4c7f01af -0xaf388bd05f5c1f516eddfe6b81840f016e3323c91ed7e2d765f099fde2ec4dac -0x837bded4a24e51b6e9cfa8cc7305174535d56c7e47790405203d6c945c6fc27c -0xd7830c0074f821de4afe10646721be8e7db71d0ee32c0f52965156998c11ae82 -0x7f74e9c4090255e8aebd85c2f09f1a68d7f42246c47b01a32a845140cf1bdcdb -0x4a50543ce87c9264af3f324c3ce114a17597fa17ead1de31f3504646e0787438 -0x2bc4bfc4eaaa9cd76c1f5084334611b89fa25891f3c8498cb9299fd525553fb2 -0xb726fbd76846bf23e4b4cb3aee94e808be827ebb61119ad978c865d1a62838ac -0x48028eba066f337be1395a6cebd88fe23ec81c594cbe22c8faaac507293ec8a6 -0x2f8808cdcb76432df96949da96759ea1b75a80e438b4363b29c6007e5aa8625f -0xdbbf39030a390253ab473f662eb5b833935d5f37204b4f0b6061913b268a49c2 -0xeb7cf1ef68d22832cb6d41d43bdd35f57eddcbb9e6d41a63c1b1fd0bbb97ca7a -0x7d81ad8080f9c472ba6c0128854e896eacd2024aed120f49788d0d8e004341a1 -0xdcae721dc39693ce55054b65cad8dfabfb870b11c42a0be04a2b0ebbc68cf891 -0xbef72ed1dd042f7d7365bc2d8bd90c820f68251193dcacb48d07e34befb68241 -0x8e08f40e25dc2c2384577ce29a4843357c9711ac4b2dac1c8845b48ab6c1fcfd -0x3c908bc501585ee714c05f8668984ac55c8b33b2a992585f639e09591d382144 -0x7e92390749782605ceb020bf6dc11de4add6153e725e29807d6685b447158c9c -0xd57a7ef90c90d304baf0ee03122629e67b3d775353365a228977854ccd8fba8a -0xa0f6e049070c3feece2da75b0ec0e3e854282269fe258d5d2d92056be106129b -0x1644908cce7536563d270da552b1a60d75681e464b6a19bb4e23e7f714bb4c9d -0x1b8dc0f38ba41bd3a7c14f25892847b40fe5bb6ece035a60fe60c266d2273d1d -0x9daa9f898b1262e5d2e014b2fca0829b702cd461166825ae322441afc2af30bd -0xdc090acceea0e432014c16714a69f54333d1a88ec0cb444e5cb8cf8e1f870b8f -0xd2e938f556d8aa5cd1fcb4fb61bdb4d239f60cb1215a4325bded82dacb021036 -0xcc2b13a8497e06342007f7b51645320a479ba963f36fa8a5bba67744ef35a77c -0x6c66c7ff55c40db4ca723cd129d061f7311faab425b15fcea6da3ad394d0c4e2 -0x17e531cd3fd657a83fce7217f6d11a1af31ea42a0ad92ae2e6b700307a00e446 -0x18431e185787c6f1bca32f5d1753d0360729a54e3b5898d5d63345d216ac38cb -0x424c89739e63ff1f3c132a3ab9528728b9191975599ecc3ed802ee8f3d02af51 -0x5ff96cf0ebcc54d840c7077847245755a5e6c1a81e887131818a8793e8b02130 -0x1f8289dd4d0074b382d170cb872edc079551a476c82515b97f7736e47f5d18cb -0x54883e483eb5ddb93dc2e6069735290e84ecf9dc7094edabe7ccf3ef2716fa8d -0x53d29d2d7c5f417d4f4ce09c5424fa65d83eeb43cdfcffdedcdd9ba454b47cef -0xd0c25d33dd7ce4693fa002cd331968e7f0b7a17b4b762be403914064bba4c390 -0x991cb5e1fe64432bd1764a723f1fc803daba928945837b01b0a58cbc38fbe267 -0xaa1fbe4c9c019218140a63993c838410d387e9057fc010109294d6c8502dde7c -0x692298a421d0c793236e46e1b292c068752c5889d09f8ac837907739be3073e8 -0xda4a0138f5ddf2bbffcaad7cf22dcbc1a894eda7dc9b888962a2f62bdb90a69a -0xc374b494b118605a951025fc5ae2fdba69e8878524ee66a5ff702b4f235904a9 -0x301736273bf233253e8b87ec958caf195c29530a51482b002995c9c65ce33f1b -0xcd894a67dae9077e3df455f29d172f4b4c79890e3ee1fa44cc728e4a086a32b1 -0xf45643d59d0a33a8c14c08decfd01c62f12d5083ff6ee6f59da9de032c4e4fec -0xa11ffb98a441b39ac97aff9ca495783f2e9dfcf1d01ad929a9bd2b1f02651c93 -0x710aad3c33759c0bf3960c1be60bf34acfbbaf451cd39a682979b3679b4db4c6 -0x3e37428d52c278f59b0a4992685a86fd556721ec88383bd5203c84811c4b6089 -0xa26cb46c124756b1371292d49365ecd97d92ceb445651ad26b3f3a20b2ae7b76 -0xf5a2465394b4a335dff03b4c9bc449d51987b163d7b8b1536542c3eeac2eeb6f -0xd6eacbd444b10621d28c12251c4fe555a653e5e32bfd2d171b9f109ba73c66e9 -0x33bf36f53553991e5d03c031d3a374f6dd4ebb5a26eb11946a5cba1fe4b3261b -0x20d238a9a26d3b0354ffefdee30ba1eb564044b579ccd601cdc038c2177ccc36 -0x4cec247684f818f67a2e3fb4437e12a7b2eb3610a4ab2f96b0b6c4424e537399 -0x83e8c45a8fec0722ee5b881a7ad0e78f19854500d19a1135aa8d716cf576b6a6 -0x3151884e933edd88e08cad50568028951815ab9e7d9c17d169048ed665350938 -0xe7bb1dcebed26edabc307c78862c76602d5de9da3c253b7af53118238bbe6270 -0x2a4ece55ed762f7fe3d3615190e61c5fc9899f9f621daee840e6fb28d7b82ec1 -0xe3890ed04e27091737068fe489274e25eb56b996c92d0ca27390b017c68134f9 -0x0187de45024fde9deecb72776eab6450e06b91c555e2968b5d24bca08913f5b1 -0xe585bbca500830339a0e27afcffae7849ae9817830116d78661875112937dbb0 -0x7e173166196d95f6db434b1d8152bb17755dc342b102b0cda6fc2de22e2bf5a3 -0x1a5099dc98f9c3fa0561a95944831273760b6092c29242f20716e837bde9396a -0x16c99e28b22b4d80503846b819ffec3571633e9c2c9d76543809cb4de7d68c55 -0x0038f6f208dd1aef21fe1340960cba00b3417bdf811b23ff6b9ede57d1b16970 -0x339469534d276fbeeea347d611eb2e9e731179e0f7b1b44fffbe7819743f6deb -0xa17f96f346bbfd017f8f264d8bf1b2ba0bf56d7c76560db70a69993f6e5f7fc7 -0x10310f0825353bc00cbd66725b124e5e757a1c4159f043711b6baa0f9d4874c0 -0xcecf59524ed22a9d7dce636f438378a49176231a4dba838dcca61760bc9839bd -0x2a516e28d6184139db94e75ebb986e4927c488671cf742e2cde84c32d11fb2a9 -0x5b69752b365fb8a50cb215874bcf9449db140c774719ade0bb6f56be3b728e82 -0xd661e6b3a036673abaee5de3c412e77f05ee0b9e4ec6d418a111c2aac5b51364 -0x8d1e1adcabb57f309a7f19210e68ec3fba4b090a384bbd50dbb663fce3795e32 -0xa68e0f3a41dcb756ba73a8994faac7deecc8e3f87e36a12cd1380b41587921bd -0x179f9a2c59b90bf8228c9e80344e9d9c24d698a298d64de9db64668ff55ece8c -0x090342af9feffbd5584fe823ee7f6b0194ded385422fe0d4af48c5eb80f71c73 -0x41165b147633487a83abd00da4e7d3a967849cde864aca02c87d83eeb8e782ed -0x0252cb3229dd8113f2fbe70aa642b38d6644360ef1f97ed931c48caa9da30fc9 -0xb350c4aeb2881cbfd098f1a6b0d62194e74c061e4b39ce2eca1278b34f7b210a -0x55dbb464e04ac13b8f58005268c4e4a2fefffce39bc5af5411391c41c5792ae8 -0x288d5c899df36c538c9f7a02b3a0f852fec09c0550d5962a6b83a84a15e5995f -0xb45b80b91e545a762ed9fb63cb6ed271a7b314276c2cd94566b64b17d45991c0 -0xbae76ad682c233ed0853a935ff7ecf47128a031392d7eab79af79515285f19c0 -0x1da8d2b70420f1c12b92a7c37ba6f993efcb04df6014936b7fdce84c463529d3 -0x3997ba2a4d73a0f32d45a5015956437c959861d4d2af16beefb8b9032591edce -0xbb47612ae99b23307b3b5de5fe5d0b400a61e0917af188b2943e56b7ca521825 -0xe55c005d30e3a0976bd9e86c8a192e7f71c2be5c0fc387414d2314105ac3a2b4 -0x794710a010dce4595fc5ae5bfa65c83fb7f680b6557aa588ec29273ab62c4398 -0x6b69e30066b4c928487ed241d48414372547da3b1fa0431cb13ae2e8a8cde5ed -0x47d81352b483c54a06bce2dee1fd3cad0f250187dc279a84f2766e6772300556 -0x981c8f811ac3a1b1a667fb8bf3286ac6b2ed098b37ac9995c5833f7a99c38107 -0x923e71491db8557753c016e3c2973c0905ddc35380f8c270c44c8e742c51f7a7 -0xd10f3b1cf142eb144e0578ca7580c8ed1ff1c1c23d70b6c32c21a0ec9ea57f5c -0x126ff91db1e5d628961e044e48544cb3cedc9648cf0a6776969dd8685d701587 -0xd79985b4523361187c386489803adda01f265d2244af956b1bb8539701152b47 -0x7b1e1556a82ae0a1b6540e0345b5484797191602ea802d3b74bc7f7262a0cf5b -0x0036e9f92ac642dc1187ab907906118ef64e4c3e7e217ef2e33e576bb9e5f45f -0x14cf75b8d1e0f15e181705c81e4b843e3ded2371dc20602210fa4ce0025a2873 -0x285e873bc541c8c78b3039a2fedc3f730cd516b01fc5ce064a164c289af9f08f -0x285e238c8896dc5ca493891a9ecd192583c65f682efe1dbc4e00e1dc8b6b765c -0xa69fc54a97be73784826dd02ca92661b1b830cadab97074d9feefa4d69bc6db6 -0x72e4dd54ae157f44dc99664cd8b85d5fa860a96cb250606484697fbd7f041cf8 -0x873bb61c29b62cc70c53beb472a44ba40e07bac2a698c47a3d6e12316a553e5a -0xa8666e1ff68d0826935307bc56ac53761023690db9cb9ab2f628cf68839109f7 -0xdcf1e7b71cd9c06a77ecb7196781cdecb9750d1def878c64a22c83e25ac60c76 -0x167c9e2f25bea36126fd72532022b10555689c16afc496eb1e99076c4aa68919 -0xe4ab679e6c0000eba677e11caebb717ba4ec75e629731f455a5cf35502f01b5f -0x8be0015f67731731fe83ea5b36535ce8d23084d1305d1bc3e91376377f6ae354 -0xa9b5b61824beaf7471450f39a05b561433ba5cf5f1584a4bec9bd25df5626913 -0x996f77eba3380bd43949a83e0874b2a870936b621a0111a9d813c1787ae461a6 -0xc431fec617d65c28838aa981cf23fe6cb135c0e570406f687c28c46e2728acf4 -0x78052e9f6d88cb990bce9446eac5982371ee2ad15ad6a7797d6ce4e52e41b1d2 -0x7290569e6343592cb7596b5f35878bdf2fedb68ac6267f068f67141801fa914c -0x0706bec2485a9f8ea660d86ed9a941fadca36d1b2743f7583c625c4d458d9be8 -0x7afa34f201001594da71fae9751a8ed5c45ed5c478bfc5e73e7e97a5563901fa -0x20a117f191cc78019b8ecbd916ae9aea7eaa72148af700197aeb04208f014acc -0x44f3fd2db246234fc28a92f918a0e40d252d888fd48b88140a2c939e51fb09c6 -0xb30c874acede9e879bae4f4e327cef81d1e64d45bbfcfe327059c7c7f65f9ead -0x4e4fbe05992fe7596edd0893689e9e61950dfbae8866e0f7b395373af5ce36df -0xa596c87a92894a3136d567b6fe8118ca0178b52e7e87038829b380b64b1d55f5 -0x71d753964ea7748aa3231cc41892b0af89069c4c5b796ded5b228275bd1c507a -0x24a1852776d6f7bd434ea190896ac31c1f64b8893f41ef624f536fdb61da48bd -0xbca89137cd08f9b5884fdd547502bcdb9fa5764f599c418da5d69ce069f6efb1 -0xf412ac7e3b9a84f8016a7728c51e8dd3b7df6906db3b1bda47f5f4aff0269a44 -0x6d4df7e0fd43c6d9b64048cc6ef66b43614021cdd9b730c48cae5925017d4795 -0x992e7e21df9c371013ea7ae445fdf86e681ed944d9a3f355a2dcfeefd6c9c945 -0xef41bd9f2a3681411f4ca6b4a8edd953ed249cece00f3807360c6fd40eaf4876 -0x0538857d0ad322d7d11a28968c2cc1d88246131a1969fc97ce7cd5b0eb0574ee -0x8de9453cff814b0537eee84cf4729602ea1d1f45d6ea791b47447aeaed94292e -0xa98628dbe5182fe277f2ae4420c511647bfc3f0e0d568feba9b8828e1deb1290 -0x390f3c3f97cb4a9ed6133917e69bd9f1a80adb51d97fc6b1461486b9375bf210 -0xee0b241a190193bc7f2532db3c274fd3f32a0ca6584081a6fbaccbe66b5943a7 -0x0c40562feebd5bae6045deb94a29a559efa99bd2395a7edf5b688769e91306f4 -0x93a956d96eb226ddf841bbd1db3275bf7638623fd289b41ea79bdcdce060a668 -0x963759e4e04d0db92b23bb83b398f55e90b806475c9ef5e130d378a127d132f1 -0x1a2119346c8eb0d4c298c25b2b7c559bfbdbe68dea088b7888b5547835c02fcc -0x6b2e25059991f5a585af419834a63091535ee6e01f37dafb2f2b738c30111225 -0xf3388793da3ab7e413d2bb8a91bf73e04199cdc4eb270df7f9afe6f9b32f5265 -0xef4add79062703a404437f0214c676b243d0bfb3167594a79bc3a8c5afe936b3 -0x3322984e8762a9891978009653c7cd5384c7ebff6ff0d6f32f7aa1d3ca1f1068 -0x454f2797ae0ebb74d0a841cda6ab6c0226b50ff245cd57fad21fff58efc3afc9 -0x75d11347f3b27e169de56b74356780f9a18289d544abade356f6ab78945ffff1 -0xacf072075442c20f6402baa0fd97755eb3c1c82e7cb18092ae97627a9684ef14 -0x6c4bade4b6217b2dc9e21365d2da77e2849c5220cf9f46a671b412b61d4cd73d -0x26905feec9b829edd26cce95dcb9eee419bdeab8fd3b23c8cee021006062960e -0xbe3c340d8a7b72efa8aa946091f5b2ff8bad28c1621e8054f2b8a9d99a07512a -0xeb9463c15bec3d551faa06c3694eda8245002935c45670494fe4f302dd05805c -0x0bdd123c64f3be3e8bfe12dda56680f8e3e1e39f62b5bcd0902ba17aa8bfbd3b -0x59eb9df9604043c01b7ac9b3a5e9fc714cef13053f960ecc21310cb41235336d -0xd4eacd7b580e50d0f4d61cbceb0d450709f8434813b2e9edfe92c1fb41dcf0bb -0xb15c816d63137e538f66b9955a071c2d926a39ad025250cd3c6f77b4bade50b9 -0x8f3537b4a1692963f759a5133192606c605d236566ac78ac37525ffab6ee47df -0x50a6ccb936cd268b8c5243bcb58b3b189720416825ccb57f963df1149bc482ed -0x5b22605788c2dc37000328b11d6dbc05470027b40042200f5d83ab5620fc4091 -0x9220ac70ae5f91e9d87f940c9651ba85b058a5adc4cd39c37120622a667ab91b -0x17ad38c52ae4f97c91b0bc5fab8fd0b2ba88a5bfba294d33f76a4b72c9cba9e9 -0x0895deac900e9b493dc3f85b0070385ebbda41f350d3cc54a5b184efb6f02408 -0x4943f58dc8911235ad178bb8462a80f09a2bbafa97fe421676909e9984a6b175 -0x37086eb7dfd279ce4c191403078db0f67676437b6d14c9f9dbac292517e8a834 -0x827ce983dc17846e973a1c75c8434e998c97199d7026cc4d73538e479a181e32 -0x221c23e7d88ab6320a545e9133199984e041b08627124843a52995e0cbb353d2 -0x1479c83bb202a98e712b3a9b083851f6c088f36dc4ea5f536d439deafec5cfaa -0x7d6ed0b1287a81471dd9d903e285819c8de4ea3b9ea5df6192e7f29a70b6a59d -0x958fa31a84b6bd8e4f4209db6395db450f51efbe3db61c8e2ad37ae73ac31b63 -0x64a816e560387b6857f681379b6ec159a6d58623816e4389d19a047b8a2af763 -0x4c07b0afa91dfae8ab77939115c6c4fc7a8faaa4c81a18c83c3eda9b163bfc13 -0x77494a452eefe41052cb2cbd21965c92af412d5d4a1de4a71eff5b5bcec044cb -0x230e95972ca353c5f1fcb8163808c6220a4f0ad5c7fe1698906d2a7577557ebb -0x39a8c1499185137e4adf73c23b546d307e0a58bf3202766788bd881dab487255 -0xe0f14937139931db1d2e0a26a5a7b3d41fee1cea261fd60b2a62537ce809903d -0x58e759978e36d17bdb5c764de926370643ef47ceda025d19a2739bc252d8f5ef -0x785e55c576ed81e04c891f057153e2b387f88d1fcd146090e8a9036136ddc9b0 -0x56d34ff6afb37f3afa27fb05806dfd668d0ef32d5292fa03ae129df34c9593ab -0x565db4f56fd1e7349f7dd4a335c1c6a0a5f9081e774d49b56ab91b73856364c9 -0xce377c43d61405b081acc3339a519597d8f32cc6c912d1f7f9a99737117a3087 -0xf8bff8c1bc3054f34aa2d7e9ec87dfc9453133bd83cb2dc8af8c78ac85e892dd -0x02b9fe8da0e8cf66074462d7b2cd983cbe5e431fc9521b1d019e8df9313556c3 -0x3876b6a7b15627d94c43117dda4235343871bdc8675009fa6742a6417d4a82f1 -0x32bd80f9b6467f2ba55a9673a8b98c80d2d0d8d5629cfdc1088836ce13e7a9b2 -0xa2ee0dbd0269cfcb6e298bae585ce5373f5201285f0c1174470cca3fdcd67698 -0xc2423a5650a2bc155c1a4f46b7c10e86e5484f431e3ebd346d259c83ac902839 -0x46a168a9e1b484813014f7b5a6ce4ed8e8e04c2f626603ca7a8ef79011efe9d9 -0xcbaa89c43b90bdb30c5b005bee1368f93e79d4d3283b76d85b4bc1e8d8efe882 -0x1f39a296818f9f0531bd92518874238155169743ad9119535ed101a8c818782d -0x8bef2396f82a38ea40c67a12b664f1a7de583a8f25965603d3d75bd11f51a588 -0x7550bee8a90b827231039af7130bfd902811c09a51be228573921605f405f11f -0x5b50988074f0034727ca7446c0aa959df6d92d5c0bcfd805ae555d7258e01021 -0x84604b997b513e9fd054a273dfe67034303e165f1e404a09d003ea2345af16b1 -0x709e52f14357473282dd73ad1f02f27f08a08eecd3d34b020869c4686a10327c -0x68842f0c86fcaed87de70f7e71d32db19894179a45a9811042186127ff75bc2e -0x7e13dea70853cf22c359932405d18fa857a63fce2d3767428cb9191fc6190b86 -0x18764178754e8daa1f84c7ee1e085852609f7b4ba508681ad2b5a1e1d3513381 -0x1f98c1eeb1c3cb982e31d752538b32afbc5df958022d0e410c598d9c9e2a1b9c -0xe12a981f763904a58354291bf6c5f851dd954e19794306fbb5bdb8d981e26a10 -0xe6bb92d557971ee6fecb2a45f52870d7ba30f335e30b29ae9bf9f9f954a49b6c -0xd7ce75f00a2d2b6ec66e629fd619b7abd275d4544c3feb552844119bafd4b449 -0x6c52e965ec5953dd1d4c561623fcd4964003853a0f7321ee3ee992dfe421d1de -0xe73d1d9d8accd9119d38a60200b95f10249dd75fa62dd9c435df49174a5a226c -0x0e8c051c802574192ddfb4870297d2607f950c718b9f09f5b694ad498405182d -0x499a77135f46dca44ec5d1580b8eba4850035155b4a16f1b22d6431f6b869aa9 -0xcc2b30340a5e07e7d8a22a2e17e76e552104e07aa876f66e6feee5af423df8e3 -0x99ffe912266b436832b853ffd2796464af989c51d921aa6c2fc02ffc37370a8f -0x0a6c7708d3fcdb7c8b3f5de5a1e68ddbbc2204601798ca3e423b83e8fc31f619 -0x7137770f51cfb6f1110757940a14fc352a157b9707494eef883ee75445272bce -0x56635ea2c5c201ddc553511d57a93b3c0546680ccd8d0504a114a1c98adb5689 -0x9d1ba37c833b693f063fd6227c70b3e0a5fc2472bf439d9fa1974188a83b92cc -0xed5622f85c723179a3933ae7f46bbe8707366fae2c8c663780defd40e24d6cbb -0xa8ddee8b26e7c0888d2f20d8bc283541d5c435e4f633a835f15a7b3d32c7fc49 -0xbc8c08635df83dca8cdad133bdad31cbc3c9acd05a0c9f94ae1b7ca07d8401e3 -0x36e9a22950c4bd23fe595656f363eb0b0799b1927ae21d962bb27a7b9876d01d -0x9016f8ab86dbe7c467e89f20a461c8a1d9e24df444b38408f924b644978bc2f0 -0x76f82e767576e2a4da980a3b0f5d921183207524e32256b1a6b2c77bf0a03ec1 -0x9e334d03e8be7321b6eb4217f7a54047d1ba15a3184a9205d20e78531af49f8d -0xecb9f2614f75509d46c0825d3cdc619d98d524e3d1eee218c549da24edacc70a -0x3e88e71cb4bb98dc36a9e3cc2a268bffa6befc95c59b10260c1c27880c54b6e5 -0xfb37e74602d2d1544e327925efd1470d6308323cdae4a8716c01cbaea0d9099e -0x35ad07a69a7574389488b39867aa6f372566a18fc3436ebbb107bad7e3980cf4 -0x975fc78ee6ac077d7adadf14cc529a777971b896c4b07a9333a0f120570a7407 -0x3c3753d2d27d955a14f2daa6b8e4971db215b924c0ea6e6ebed7534a3b7aa373 -0xb97af81c02dc27b9c33ced2f4d50540d789f27bf85c521b9da896e66b1be4e80 -0x33733bb825811814f97cd3e33ed1575721af2944d698c65686d9ec7aa495e876 -0xdeecba7c51d478247f03a78c423caaffe208ae76fe0e73f407a99053975cf097 -0x51d8495356701223e55de86af5bed8a5b038eaacc082714a5d6dff639c0549ef -0xfdf03353fbf06ccee4f533f21a19148de264ed529775b7c35463c66a457d6ca0 -0x96ae2d291aa7b8e76525f6452f9e927a141e3682d5f5c96aa47e9344cbb8b2d6 -0x14a1d55750f6e0177c539f88e66a1bcd867eddc66810e08820d5227b7bb95b6a -0xcbfe2d18bff8eafa5328230a637ee798725253d9ceb66dc2007b5f6b5a642ff2 -0x5c690f5c54bfbcf32ba084eee1d26eda6ddb3a739fcdc769a4852dbbd94fcdc0 -0x1c512257f93ede2c59625699b652a829c9d32e816826147b2bd45423078573f1 -0x34b69eb973f0df96626a4633bb934cc8079df48f9756d59861947888057809ea -0x78791fcf414d4f9fa144797928adf96d71791db73a1d392c9b8cb4e850e10a25 -0xce51209dc311af8fc331352abc706ec489c85a647bc74c6a6a3330acdec44139 -0x8f78d3440861a6de33366846a8133a44e074cdd45078ee1324da06f41f334263 -0xeb01d879a626a90519a10ce81e8e01c6f7533176d664884290fd7b521a018b7e -0x24edc3f5c2f6e0273b4a03a58ff381685d7a5688e5b03934be37c4e531917df6 -0x79d78d4fc992f483c5c0d2a7f6472602abdd9df13f6dab9929caa42a09b09be2 -0x7adc647423bbb4a039b0e76bb5d3388710ff2e81511f645c1fec573011c8e80f -0x25bd250db9af4d0d13c5d84e43bdb2d5d282dcf1d38534ea2eac1d22a787fc2e -0x2f3540539c115dca220ee473148de06b4c1cc9ae17ebbc9c9589f16fec239b2c -0x7a305e72020b0f42eba17b476b660d2a96f820806f77f10bc0085534abd7e0c7 -0xade926aff448e20223184e9620ab3331d86bacde7f0f50017b39e7566032caad -0x49b934e08e9d25a80d6a965996657a93b676f7d8464fe23535a8bab19cffb310 -0x0569a7ec1ca8ac4bc26b82db8a398fc2fa832c8b0202bda84193ad7c58d87b21 -0xcc66534477fed1dd7f37861613dcd16f5fd5178e1fc4826856700cf04d15fabf -0xd7c70b559ab314187d8ee35fecf6ccf2e60ad0a00163da41bacac2fc031f1e5d -0xfc1ddb16df3f03f8624678312959cfdb76b087dcc623d6fbdf5f500c366fe277 -0x95ccf69153239cf46e6c32dc0a0a28b38a4c83e2b1bd78d3d22ed3518bfc4629 -0x3fc82ef6bd80560074f563d58d7ee67ce83a3b45985e2186fad78ea4d1005e7d -0xbad9f705d78d136c80a5054433a89c6a5d7cd5f5625048fef5b1b36af1fa521e -0x5e90bd215b1008c9edcd6e65a7c9b51a70d79c195b469d52bfefac5ea7ffd9c2 -0xa35de70cd4f99dce54708307ab2cd777b688ba4651716219b1423062a1efafe0 -0xd7b278f7f58398e075cde9a9bbd8303884275dde2eb0c430ec10d3f943c1a3e8 -0x15131ea23b637dc89388bca940bbd75a278b2814aabffbb36be629ac21136fc3 -0xbf1c389d1def5b1c97199166713b817721635afcc5d25887c9694416d1d0b8c9 -0x93a641f869a5b167469fe5856d0d3ce111565d45674ba0896adc40cd79d7786e -0xf90244aca544aa357845b9da3f1de64fca1ae5dbe581f2be8429b0caccfb4113 -0xbed6da2941d4eddd43cad1c87a966086a4a59f51f729d140ecabea9753f9b468 -0x6ad8e8b730197c31c6eeb59145ebd033bd3dad94fb929ec35e91e88385a76f9a -0x504931ad80732941e360b9c40a95e6cb1c6c4185d33d9d7c424d3e82b5cd630f -0x6afc08c101987b50f49e738343363cf7cff404f60306c1b0e719c804955957b4 -0x07d27c9c7b04b9417aaaa53fe1cca6c9d83a26b11753d43e4723eafefafc4381 -0xb3db8c52f8907dcc3ded48677f1203af28dda9a954317825e29ba8149eda18a4 -0x0070f65b49603b9261c01eb6eaef01a34e6e28afc598ba834e87b39b41dd4089 -0x62ca91eac49c42da40a4af82653cedd59f874c82f735bcf7e8d54c341b767bef -0xe4254bd9b7374b5b9df4d6a4344338e6788bdb55ecb06749f5a49fffba99875d -0x993a82bf071fc7e00197652425d0d0b312ddf766531e03dbb1af09a278740021 -0xf6dac401b47df981609cb417d17d6909650ff70ec738be4f76861cc717faa98e -0x4f13a36c77469471711db8605d02e2fc77f6ecb87f6fea6aed1a41ca208c80b3 -0x926afa56b4aaff08fdb5f0eedd7f58882a797f40528b744bf2f2b279636024b7 -0xb4ee695d1a53cf45e9c83cbf17e654b078e749628b4a7faa18aa7346e850e0b2 -0xe16365ab2d1443bc9771117ec5aa7bcbaa069d599c007e1a8ef61980131478b4 -0x6911cb353cb2691332ed578c4fe7b6574acd25352f7558b35b88bb985c1c2480 -0x5cd6b3edbf609110a9970a165276d7485cfe3827e01bc7bf1e4d56eea23506a3 -0x609eeff74bb36235c154df7b187540767324761fb1a7ff65bc975a1d011dff0c -0x4ecc2f8dafce56bfd2886f9fef3d723aab51e946870973838e6d7b169e3d7b82 -0x85fb95c7a91704f1183d485637895dfad4a5a19fd77973dada213391a6784006 -0x6023e5ce133e593f7833b23cb32819870bfe70f2d437b0b0be20bd935519d771 -0xeffc4be4e6a4d5d32ab811a0bb7edc372568355605cae0220ce30b94405d8373 -0x9155e891fe613ebe00e4cdc25c41e7a297c776dd1db3f259be844461d594f3f9 -0x3698f4035cf0079cfb71985fd6244f89eb667d4bcf54754541a88a9f1d34efe5 -0x323a99eb81db0826991944e707ecd0ee002cc9c150b5854fe761ba6c707cf1aa -0xf79e5301189af4133f7e2aaf33ceb4fbd2647674be3abc6d12968e3f0f614211 -0xe25e82d32603117b2f1da801b90dee57577d1a31eeaf2e8457753e50d4dbf9c7 -0x4cfc591d294a7da6905e3226c6396096dd62d5f1e58d17c89c85b2c43c6106c5 -0x19fb1882dadc3235d0326635cba8b61c5d4901bd077eeacea2416cae3276ab36 -0xd6849a54c07652da0291645cf00b72cac0ec1669c94819cc0526ed9ec3e89cc7 -0x6e4563fe506be48667f0aa3eeaeca6bbee83f986a10ed08c4c9389334dbce858 -0x760027efb54a0f2192e7c1b8c4ce00eaadb0ff4c59ab38c65a15a0fc3cd5dfbd -0x55bd50df1936eaad1a9760b1972326ee62dcc3f97186f5260bae0617f5acf2d5 -0xecd0e2f51a8aed0f5d700f30f3a9312547436147efe0037cb4c15f7bc060e916 -0xf67fde4c197fb244dd672ffc941587fef0b2836f80f0e10ef3236df7d92291d4 -0x2e5e3a6418810a56dfbbea1f4b13b1417cc18281cc809caf9e18ae6717b33dad -0xd0b95f468885291a35b9e5bca0bec3d77cc6dd68177aa3c338ed6bc56c423e04 -0x0d86cfadf5a3e597362ae452c632d5688761066d52b2c3afc77b823068d87d2e -0x7e8b0c2b989358c6cc276ff879a9c40540d7191e66734ca6949eba95ae07de7e -0x2dec23492ca1629add4de685fa071cbc7dc7063728b912c714d874a923d6480b -0x766384271b4c5a7eed908dfff03d901e58a422be1372b088edfe1b192984ffaf -0x47c28327a3c7a430a789291d05d5a78078e62447a37d6c24b20c36057c7ba333 -0x3bd464679597e217d24154bf42c4aae8f29e5de19326d28a029274d42c2b7a93 -0xb1042c5b36bd4b10c894cb8ef2aea564264a5c9632274f7999a63a30dcd83522 -0x5a1b8def1771616b7346ab9f68ddcf23cbb0c4bb38339eccf2a445076a3b0ede -0x4597290a16eddf6d9d271e3f55f8cca13122475345f433d8fff29778d012cea4 -0x9d904dccfa8be7d06359ee5eb1942c3a4c664c579d2ce4826c412081242a8f7f -0x8f06fbed526050782430114790ba6013884e8bb20ddea54765433e1ce469d20e -0x884a2e641af4c81bf31e727edcf1a7a1ac25e8798b20f854385c08a7edb689bd -0x7607c65e7a9866589365639db81fa68e39fafcb7e3d2269a54b97e01a7dcd029 -0xd62f11e7e4cf3065365e8fc8029ea73b4d256ba953394e5a12acc50f00d23d14 -0xa60219d61791e9e42852689e8cd912b5b60f0e6b6ab64dfdbd5022be5d11f12e -0x0dd2b9fe8698c91fda0e2597bca5b5d27b850c6eca9ba9ca07bde18a2d833332 -0x113383154dfe3a239b69251f4c3a041721d5b4c2c1ed15307abbb67af3896b22 -0x4ab5d14edeccf7be318c083abab1e4139b2b144fa63db13f560d002dfdea3ccf -0x3aff4cd840fe97202fe9edf1e847dcce1268118b62a939eb2784eaf707504023 -0xb1a614c293a2d36bc276b6181333fb79bc37f1ca2ebd2baaac0da402e378deed -0x0a5cb8bd0a60cba7ea35039a7cacc1d75637b35cec917a5ed1a55f2f3cb86db9 -0x30f669aa4707db79fc9bf8f04f90d4a77d1e0439d1ec4c125aa599d11e5b6e8c -0x432eadbe3adb9e0ec73849023018f34e0694b30e3eb7b9c04f7631755b01388a -0x8635eb1d59a98aa0f438f8fff7a0f5d84acb787e60e94841dab3170c1c6ab985 -0xe325648e5e8d4b8fccafcf766190e6d05551cf45c47a791135372c71c276a1bd -0x821e3f58ce90228efe8cf3706e9c24b0b448a58f51ef9a91088c9337332929e3 -0x813cbc2d57acffb9bfded40868205be7566b65a08d049590d19cbd1da41bdc12 -0x38aa7ca0ca69f7ecece199c5c7687437a6bc9dc86aa8734d1725f1e058d0fe2c -0xdac199a3d09eaf021cd0b8cabf45cf804db6de2153ca83d771c56b4782d3aba5 -0x8b49870e3150ac9a84c0d7388db6a9f6835309bb2cb9ffb8df9fc28117c246a0 -0x95dbc41ec5981de1590bd55a13005334da4c4005fcf95b5a03c718eea7e07371 -0xac07435dc358fbb46bca8be8559f237291271afe5011946e8d732dc8910da528 -0xe960e87b43b6beb371915b526fc3849c1207d1b5f191fb45a04dc062eaac6b86 -0x2fa43a79c5e55ecdcf38b156fbf97c2dd7c5f26162271eef382c0ec306c45134 -0x49f82ae55ca62c2d088393258a41fc0d6642e4c824f4144628d3f7404ce20f11 -0x1dc48ff3bcd45ffe770d4202a661c8dc56be0a04ee211a82b63da0d172dae16f -0xb448d5b34698b9ea134a8d5e58dcd1c707a103389d488a345bf2ee1f7039b261 -0x84439629f3c0774810c8129301b3596151d332807ebf3809970a7bedfe023ee1 -0x5d5cd01546b7ee78cd5fa1ed722afd406758d2e77bdbf4b78af57a2562475872 -0x83b35967705bca37c07579611d34856188aca151de490b49809bea053a33c419 -0x72a0572202dfca97c5b45c2f21d1a4862b0840bd75749b1ee9c97079708a9c0a -0xa0d5c134ec5e1f48a2df6f3d92da79a33a78f9674c20714244babc6cf887a65b -0x2dbef1ed40e2ec0250996456a1a11c15eebcee47bd2678744f0f53fdf4347b3a -0xcf4c33287319ab580b4c6ee74492b05e5c3849e92122bb0ec9dfe3a82f8d4cee -0x031e0e5902a4a81d7c0348880a6d118a71fd7a8656321b2dc49a7fb950b8e12e -0xa110b12937cd5a1c06bf8c042bba61e427bfbd372b9c0120841e03986cf4cd13 -0x81e580fb5a78d7f22b86527578b19c33e7777c21a1a7d416b840949bb41ed712 -0xc5607a6ad5b8ae5033983f7fa53b725a3cfad057eb2ceb116bd5c106bc798d5b -0x748b0f3b111ad92844efa38a4b3c7d57a5f33a027f57947e60a3bd7634539340 -0x72ad46802f0e31a4f58250b6254c90a776358b9aea3e403ff7fb48a2bd9a007e -0x84d43d660dc157de82fa4b0d9fa1063447ad59eac5e42fc191b6d1d7574ef12c -0xfd7197dead00b05504bbc9b7293db0ac1010d0ca7253f9733f8ae34a291391c1 -0xd2990be7320ed83467894a10244cb38689f84d3c06587d98c1f7e0edec63cfbc -0x66febd27338a0eb637cd84cbddea813c21b9e6f69c4ddd5c8347237ed4260f1a -0x8ddcaecf56c37c242af236ec2401a460da32ffb4898e8dbf5aa0c79776458d4b -0x173296dde3713917cbeee40785082eeb1acbb58975a99e5418f486731019f2b2 -0x772c5bfd4a2d0a4fd9e7510e4df2b2f2cbab9924ac5a46ebedc918f4da455b93 -0x924f66a51fbd0be812845f1d4c801798c0e47a1b166350bd0a7922873ea542d7 -0x3ce185f5722e80973984f3e1904668ea06f9822a28094dbea2f0cb2d549e5226 -0x7600a682e6a07b794dd010f92f3d15d129ad024edba8e6275ea4448e3064803e -0xd5587b55625f64e344432877449bae677bf42d2c2091280c0088148fdb69b848 -0x6c8920c1131f9be0ebcee77d6cc7d9a77aded70b6eb3702d1ab14ca45abd1486 -0x132adab57c167dd97f0907105550e4f73ad35f52c9b1a94240103a6fb05d20ba -0x67175cf0c5d2f7bd3e9cf988d66d5c28f2c5d53e922f412d52f0160ea7bd78b2 -0x84f0518499f0b6d22f3fe890759b64314f4e045bf6f6d273bf94de4f533741d2 -0xee7a8c7d6936a9f0c5348f33dfc6076c5e12b78922a5b794a14fd4105b33cad6 -0xc31a4c4ff4095ac01151ea63ff0ea1af321137c8d4de8ec67d7c753855a12cbb -0x902672ab1dcc6f12fb43d115103609c39005e194b65662d2a6e9cd659e58fe05 -0xc9d09ed8ae2941e1a9595f1dc2a22146622e3ceb1bd57a9dec00593606015f40 -0xcda52dbab087209d19cb13fb283edd30d788dc108ebba931971e566142c5e863 -0xd81ac9973a723d98e634a5ca954016a8371950682d5054cfa2cefa4892859429 -0xf6fb592bf07341c79a3a90e1cce8e48f543074227eb41b83ce555a48c428fcee -0x6e8a8243d6f409556ff50adc19b50fc845c429d864201c909b60b1a3d86f72be -0x0db64ce9a4732f6abcfd2f24a4749f54f009756d045a4df0e4ef33a759ccecb9 -0x4f4a765df29c8f6329a74bef64638e01da55550a346ad86d9285d7fd00e30f54 -0xcc8cddf193092477f156f72375fa6afcf1b581af56e7e6367da1b7c0b60c3c4f -0xf9b6cf8edaa2be7699c71ced0e5980f725ce46c82e02044184114b3e0ba8df3d -0xcc53804cd42cc90dfe32ed79951744970e30e79f45c6ba281fb1b3880cfc467a -0x5f27b3c92fac637a06526a310c0c1aaafc3a5faa4c960eb57d023bc0e7fe03c5 -0xbc5037256a31922e52d08c545a4592aecbf1b1c43b9be00ddfaf67a42b6214b0 -0x0b49f33996b9892df42a1be0fc97c109556cc2613a19a2e5406f65cd78f9ab46 -0x6b55e9dfd34e725b257689af9fad7c2c52ece0c7344e85fe1544c4807c5ae311 -0xf101d02d2c84cc3c8dd6eeaab14c3ec3e80feeb83416ac54c27814b83f91858b -0x00e8a11584cc02a1208a603c28deb9c5e8b9a70921a9bc400074f349e9a40642 -0xf44914681671179d44661df464539de8d60acd6736ab8476643e78e069182b79 -0x4ad3cff0c1890f7dc40d4209adf1e1ccf10fb1a721ab2d4e7931b4680bbe0e63 -0x538a2ea0eed1d9cf786395dd93101da7159baa74321d2014f9af558a6bd14bd7 -0x259fcac9ecd85bf914c8e6abde19304d89657200ce2ad5f8a13391ab06a0e105 -0x7f572b48217bb029a7f880621013caa0b0e8c0a3467c326f43420baba8224c4e -0x3f80d1faa2801fff27a138f58ee7de19873cb5ea92c993fddfa9ae9735759272 -0x561026578f40c02cff0d03e2e1bb9463619b1b658c02b42bcdb9eb70fa686ba5 -0x066a39f9b7871979c69de714f0fca55eab9f68d1c30687f5a40bf2d59a8b1d91 -0xcd19503ca178d4106b1f4e3cbc5f5e25675158ea43675dfb78280bcf456e630d -0xa0a75e1e847512b4aab01731ca5731174d59c543973239fb4721bab21d626f25 -0x5b1dbba97b43e0160f5d556dee58c6b15cb15ec07691f9abf0a1fe2066900b87 -0xd88daab432e7a5215d3113da0a19da89c969a1396c0c1f8c5a389bb34ee8b87e -0xa22ded0ddea418ec1b59f8607ad3b8022f93e5cba4b4e1a33c2f84260877b689 -0x67d017ea3218e4d47ed7c8b139ed12674cb73099a1647f999a115d28e32079b1 -0x8ab58c2bf807f3f0231bbb700582a2bc7fadd849f90b6eb1e155583407dfa38c -0x4af2b443fb7681e4269146c1e31a095ff4487f49544b2c4b48585fd666f0e617 -0xfac31c6b2fbabaa22b5a3105f061a49582d5e4c2b28130c2ff96a00784cc8ce8 -0x65ab15d919603736cbfaea34265e91da2494e13dbf18f7b311bce27f0826e6da -0xce280325595dbfa6ab37ef086048e07b9d5b3f9376aec9cf1000b19a68a8b89e -0xc7e9f1cfbb10993d8e3d78cbc00070d777834dbff3b35518d228f3decddd33c7 -0x9bdb3bcdccbbfb69debdbaba39484522afa23555954929b5e8563937981b6eac -0xf79ac6bcf01c43fe597317d7e8cac3bfd378b6ca442a7353657d452e0eedcd4b -0x97cff3604c84a015993d38e5c33797ba020979e509ecc7a26641b948fa8ae9ff -0x5717d50747dc7177934b578e2bf0697138e9b4ff2236ecabcf517610a1f2d5c2 -0x528b5b77a47d9af34db0dbb6bf50902da106aad441bbd12739a2d7060a14df77 -0xd0ffd89094d965181d690885a0843f7cb81f4337a15817a658081fb332bd4c36 -0x3343a23eafbdaea1b007ddde57c7ce2b161fc9cc0c5cc9a92165bd55a11e6a04 -0x66c84d338a4c409a8fd3a1c5718db598728958241d597c5d1a0c582d3eb4d2a3 -0x7fa8808cdae8f1187996249eefafa0e946966ad3be0a53c5b0860051a4b15232 -0x612f667d8167ecacf971292bbcdac9e223204af5006931622503dc29d72441f3 -0x6667e24692f679a992cbc18594469f7c2753948e91d7e7fb604bab3d70108987 -0x7d0a59984b2513fd7fdc222cc0878cb5153f15fbc962967e21168e8e4c370fbf -0x899dc2b223b2d3ed1ad6ce001c74fbdc9c88928f5fcc1b8f20ec98e782bdf80e -0x5af73f60e3341ea166f1f2fb7469120e38fc12539647d4275fa5bf9dc9ee274a -0xdf9b9255475a2e1018b7744f841e4353d84bb3533f5f2572569e904285981b8d -0x2b710aac2873991859c0e34e66bf95f51b74da3363b946b260b1fdc5fbceabea -0x172390f7f7bad286aef3f2ef6e49014ec7634477d8f18fe9d0849e78e5712c3e -0xf5c67864e0ed8af36926960a74966e2d34aafe36a85af5acb5ab7c6b8f39a745 -0xd8ebe5c48bd14242c30defcad0083a733afadd2e9c06a119a53243ab7dea8e1d -0x3b88ec4b27dd7f0f1c802622a0276197355c0baa7bf1b8479393b9f130b9306d -0xaf270fe7a091ed3ad2c01d585c6c7eb60e6ad50d7442f1897c9d32eed0480cbb -0x1a0002b565fc1abce88d3b97311ec631d8874f4596882e8aae2268af7afb4c31 -0x9b8880a6a4c67687548fe9c38a9e11446cc3f1872dcea4fe67380a235e7c8010 -0xf3d6290308baad65c98e4a430babca682bf5feec69d6c586634afa415538c370 -0x7239241e36e0ae5941f7cb3aee186e5f3de68dbad8f9a1730031be7172fe3162 -0x8a87b89a8a1db8d0efb5517f47abf95e43d42450000949a8eb5560342b23bc72 -0x2d0c17009d92addd656908493261a79ad19f8221718bdcea117e55c1047a4aa2 -0x836d5921d0f5240a38da05627c3a4ffd28cc3a16fb89fcb08788841b81a2595a -0x451d99b4de20d2acb5e68e2041506f3d646af4fb7c5e5ddc41c365776438d7f3 -0xb969ca50e7107cc87814513505efa7e849decf64ed416d6094cc8ea27b16c03a -0x3924065211a50b1921f7eacdf456ab126d00fbbc440c0f1a5245d32b14d6fe36 -0xfd07d933841dd4f5a06090cee166318419d6bd1d7c0ceccdd3c436b35ab7e849 -0xf4e9aefafb8e7b715df9bdee296c4b56d29b7c7c61ed065e2fbe24eb3fb9d606 -0xbfc9e3aa5166163336a01d082bd59dccc62fbdb22ad8b0c517c60b832b6166dc -0x097fbe2fdca0ca2dfcabb6c561436c911adda36fa41c20a89565da369eb83209 -0xea05793e561d766dd9fd4b0c0b745287a6b64c49f517e70b61ab63406eb8e848 -0x1a348f14184da6330cbecfb0ec040a4259c0ad98d71ae6b431cc7599ab1f9665 -0xe88cb8983e2f136218d4b52adb956309dc58728ed779b4fcba1890b0988cd021 -0x6578331fa82a91128bfc812d8fb574c162d5ee88bb3ab298e44beabfd7c1355c -0x2b3927fd6d90fe1ab0fea2947da9a69075c7ff69d145ea3f0567e8dafa01d719 -0xc60af1295a2c18e8ec054a531953f8cc74ed2669532e3a889376d21978f04387 -0xb15ccfe23d160ece6ff38eed2a45e33a0f2d6b01ce87aea16290e26f0690a46c -0x9c9e79c2e0df281f504e235e074117c13338cb12d414037d5395a19ba40722a4 -0xbe21280314e09200ab6af6a47cfe94b95c6a085fad30f5f2b5138711d371dda6 -0x014031cb197968259cc224fcf139698173aa59cf33e6754947d295134a5c23fb -0xedf0733fde87127392a10a8bdb0322f8520eb220a369dad031a3d006ae3d326d -0x9cbbcf7c58b81cec6ab2a8af9827a32e75e89e79802a18480352acf082d4df09 -0x6ec92d54cc28c0d4d94e88685231317a13c05eb65278c271ebc363b5ae1aa8f4 -0x9e65865b0a22930e41a5c5352bc06680f269f7660c6151252b70b0363cfd80c4 -0x0fbe1efaff4bb845844bd975dcc6037c3f2270dd708e8d651b0dc5551c5ec91a -0xe8ab19fa7dc0230d1f05eb157fa94de343125124db0c7686a38af78bb4c15f2c -0x8c43781c3e25f65a9a50222253e19b6e62e62eaf9462a8bfcd3e10bf7d19bff0 -0xc169781ca1ff408592b02143502be409c35c90ca1e0f941f870fa9ae2f5c1d64 -0x7dae731291f983bf9f632597bc09e19a1cc2a745df89ad63f922e7ab3e140fc2 -0x71f722ac55be135529b2078dd3c2935784f8745912f670b49b5d791d4a3ea1f9 -0x9f192ffe41f23d8b118aeb9e9b82efa8f86247d24593875ec67f8a8b319d2b49 -0x0f663a142091168056148779244ce70e03643d7aa4e6a379b74483edeb778619 -0xbb8f95b23de6c14985b809a2bc7d7bb12120b7461039661552ba69fdd1040cad -0x7ffec76cf230b85058763f59e966f43151c49780fc6a5ce04ad882cc154fe264 -0xe722903402c86962c20dfcedaeaeb0919ac2d40a5cf983c6ca68a70f7f9a0d03 -0x01bb7c3a24df48e9ac16ff3fc286c22d71c1da0e64ab82f5da3896049d8fa183 -0x1d5880034af077bd8f039963bfa082af3a8bae84c566c078b669ac8f9463473f -0xc0c2b56e6d3ecb9bfb55578d526989234903dde3104ea0326b93bde92d9719df -0x5a8b885059c554cb5ad2a82035a15b4ef6e338d7e9ee58d280c16a9f893f52cc -0x6567ea0eae1bea1d26e6171cbad23f27ccf9fb0cbaa07c6b2461fb6e3dcb8ee0 -0x5a2241f662ff871416f3284372c4b3f85c7da371a833b8d708747cd34475a944 -0x8c893669677a53336aca9fb0760ae6d8fdf312cc3e37a1665ec6e2220f3e03a3 -0x23ab2e3c03bdc1a16a235fe7abfc76eea038ab94f65038d2533dd575ccf23cc9 -0xe8e03408743adbbb06174e701e51e1266fddcfdcf82e961722a9875e4a810168 -0xef10cf3e40b4c9fc35443ae72c68e4eb5d752dde659e3c6e950c923221c98cab -0x4a266a39f8e8b4a3618607592ae1f8862282b7864db5f437c9dc8dcff2d39362 -0xf42778176d34241231ecbc40cd772d3c6dd05637494bf1e18c12215b569d2c5b -0x603cc125d03eec7effec60f0e9292f6cc095f90deb04a1d0524da4c0f8a5db35 -0xd9b9277e4acb26535ba1f3b19b320dc4babe3a7913bbf287e106edc81873218c -0xd9e7c7bfb4ae223b6092a6d755ced4e954a7a70406f2ab5543ba3ef4b0f535e4 -0x96e00753d76415639cc5a727f6759e5475799e4b13c8a48dfdb1f2a545bf6df8 -0x3d0b86332ab41b911ae280985d6b36e2e09bce0d6b457b9e8a0c87dd071b5938 -0x9f9bab60289ae6fb67c9fdd8ca07b4c698256629997ccb6b2d39cd645a5b054a -0xe46e0faae325c138efe4211ed3119bb150b25c40b39b8347d0968a06a98c9891 -0xf1e54af0f6292554875c47a9114b0d4c60f0152527f5a86f77098f56d7910960 -0x0cd7adfd2384a5060a525e8e5e1309a2d68746960f53d636a68546f708a47557 -0xe1cbe39fb5678907b20e37baf69fbe08075461af86047b3c9f87522e3f15e344 -0xf395f02300e1b8fb0a114b2c24c4c07cadf0376b72c998a27ef80fb76d6de0be -0x4720a842ffdb99dd878d146961bc9ee294e44b0e9774da54851a4ffc96a2c190 -0x1efad233e73737dd9207663ecb5b895d83be50e7c35e61742c63929340c24387 -0xbebc04d4d274a032920bf808afb890c172089c63dba34f0f084d32159b8ac815 -0xd4bf78766d94a033c673443a7059ab9a4caf15f9e88b72140f93c73d370e8488 -0x0c6bdadf3f4d9f1e76a545c47ca276ce2aa91252e3d2819ec7c597c80c6b238d -0x0030edcc2917fc0c737386e9186bb27edc1d8eabca03c57732b3aee6972f7439 -0xe5b439a64d371e403531ba909a0b2fbad87dd2088cc25f9c4fbe16eeefffb7c3 -0xf4f397f6145b021e74440b099775da7689416724f9f19c2c5f5714c12507f83e -0x77b6446de3a708cac48a250c407cce8df95bcf81c088ae743c198bc70682fdac -0xe1c139eca258390da2c749e27d0313902d5367f1de59d9a24357c525d0378380 -0xc2609864d4230950ff5869bc1996adad346d7937c57c53d960b0669e6ed87286 -0x5599086c2211dbde7e301fb840b0885fbef7a01a90c4bd4da438cc8e1ca203cd -0xc1a599135cdcfa69f2d65d6f760e64cf56e55bc35a3df043a508c95f1aef85c9 -0x7c69f983a446ccef64f4a7ba67d1282ee41ff09110dc12fb08005d28a966786f -0x8986bfc1c6f326435bc458bf6bba65ef3764b3cb91638d2b02911661b70037fc -0x399e789b6b9b63ee2b307190b58f3bac770d87d8ace86f14fda84fd80ddeb4e9 -0x7823f387b2a3b06b2e6f8588e94b523abf9694294e71ae119356d7dc9e63b814 -0x92028b7b76bfb8e47029c9951e1c357f66ccb2a92a52d1d36395664750398960 -0xb4268e05043dcbd874b4db923d4a34a2ff57346b9e8af8fc241ba36c86639879 -0xf72113739703689c5769c969db94b0eee9eb1cbd09349458fad078528235d562 -0x2fd7bb80704c2fc6435640632cef50b6ad9b964d74617d2785a6f5ea6202aa08 -0xe1b4648d84f66982d777a2dea4fb7b8203dcafe7246c89faf7e245e3529968f1 -0xc5e65f1b08349720ef73c84881fe8cc97196d775f6f25c34f5e5202faed8a8b2 -0xb96cac5716f8776b3506327409345a8547576d932b020dc161b202ec9edd1bb3 -0xa4c89915497fd63e6dec82b589190b910bc47efdf073770169c05a0b42977d63 -0x7c720b22f8935612db39d94c09c73c48de8609549e006dbdeca4fefaddf152e1 -0x26477691b74df0816a8b124754f8c7371724f674f857062f1b93dd27c69b2b64 -0x09fcb80a929b175adf0657ef5fd22056a302af1d8ee957ad7fb6e82eb6a8bd5b -0x73b98ec0bb27c7719687dd0b66808c23840d846041baa9ca4c807106eed31381 -0x3ed0ef2a09aa2b13b44d4909c8cc2de9242d62bdb78d35014c56e875fecc2234 -0x8d93f3354cb465f985f4733820872c2bf436b81856718658bc1fa1ffcad5a67e -0xa723d99aa60554402f5a03a0120accf73ccfcbac38e6b559b90c27ed60267970 -0x486a93d3c61f04c1112c95d50691ddabe17ac2eed54aab01938a16bd1eed6384 -0xc8b61491db8ddfd5b46c34fb630d922bb18d5044bf38effb3896aeae1b4b5875 -0x1d68203d685c71e13749ff05fa1f093c47dfb4ea17d8948adcaabe6c5ca1b622 -0xfcb40a3568c300235bf7e435872e9f8651303fef0f1a78bf5851a5673ce8ecad -0x5316b5ad7f69949e17840df8a6f0ecb8c96d92fc0e64eff25084283d7121d79a -0x6c421cdc6b98fe2a56bb188f464298640ce0451c36902a9a32df31137638cce1 -0x32c70e182b257d114dba65c9a66eaa0af12f55b99bc32978b15d560604f7d214 -0xf9a90c82e787d69d690c31467c2094ee0ad675af9248be1aa4290d32b49496db -0xffdf807ecfc7c1fdb1e17289436cd3789c6d5d680372b97313801f6777b1b18d -0xdadb196c1a918d13a62cf55020329ebbc3ef891916bde87fd085bf6e3ffa2c22 -0x89a5d8ccf94a8e1d45aadb06c82cf25086b732a8faede0529c07c166e523b539 -0x4b77b005a4efbca8a50789de70973ca418dd0c02f92e09d13890af4fbad6c7fb -0xd01d992c20349655ed928f625973661e29cbdb51501b85a064ae3afcdb950adb -0x524a8a4fc781cbf1360f69dc65f2b340283e95a3f47abd9f74d8444c9633cc81 -0xc0260167353c795562e2d25738d574a78d45bb247ea9163d29e67b7517839489 -0x25d0b6d00a99117d4ee95c41874891c14fc4b3fa52ddf2830c948f52fd6e4a73 -0x37bd7a7bb6e0f9e50484ceddb9e38b24f5348ce8d2c0fcbf4c26daaf67b1813e -0xf7d268754c6678d1cf6675ad81763c7051a595dcfbcf06f1b41b9cc739cfe198 -0xe76b2a1754ba3f6665278b82219b8cc66aa8203a9946f3d2fe39077e632f41b2 -0x200d32d31a9e721c3dea74a509526fa38e633e1125a8d27d592e98c341a93799 -0xcb9ac3208bb41e45abff7ac8f3e326ecee69d66e3675a48186f8631e114ab1ce -0x4966095148d25b7380292e764bacd763029b333c0c7013aac21526b80e689449 -0xde7fd06ab6f6e62275624116fbd12c06b63654bff1cab50b957ed38d34950e15 -0x92c37023e231ade685d29a9838a2eb7a34c7cbada2f8e1975694bc97e3a8d12e -0x947ac8d8931e13afb9e1ee86d8576ad15ca24a3ae2d66e9b6c0d7c8c486af252 -0x43470dd4aaabee55b80976b6b7aca6727e64b50853ab0efef1c43db7620dc893 -0xb8c5b94faeb2edc1d2a5c8d8d7bc4035a7808e3c22260196961fbd7509d71ead -0xf27cc87e4c5d2bb4656610a24f7c24a5084df09c29bc3196a012d31f25bed64d -0x84b961b6cc4c5aedea80839f86f2d4dc5b00498979865d39c5e34d15e74e123b -0xaafd6d753d6fc7568ca35edeb4df0628fae11fa3833d4a0fd2e37d26fe131290 -0x5846a5a255699cef49f4ae59273b1e90bd13c87d3adc721a8255ee7efc83dc86 -0x04bf7e00e75ba90f70ba36cf1a1dd01c3f4151056021f645bec31edd062fcac3 -0x8c32a21bb31c4fdceae21c1c0573f10b47328c16e4f101395ea0b4fe3587b534 -0x5dd3e2f5f0597a5b77befd7d1db1a7dc25b8e0cfc174f52a66f6a7162382762c -0x159f221a84d5b6dc596818cf9406ccbe14c23b5315912dbfb974599e9aaa45f5 -0x12982f1e370b662298e08185b4c54750a5a9b8c6568d0bef8317999e0c227678 -0xf85904f8cd464da5be7d38195810f7ed1aeb63f9f5eaaa8f9178e5811dd3c38f -0x94b55bd8414a3ac7eaf1b3037255bb373c11c9ba6bc02a55a37a4028a20af979 -0x9de9707037e375db132b1acd9039a079fd7694f3dc5e021e8be35e15482ece86 -0x70e0891061cb878f8dc5505fea8b10d30526100e5df549fbb6175396f1dc4a5f -0x62ee3ea8b392dea0610b7e03320602e8f542af73f441786c74748682318d3733 -0x9b54f03580dfa48a3c2d3919affb57505319b404347a38b82499dbc50527fad3 -0x6e5fcd8ec0d0019a535ebb3b3cb8814a39ee8ded69466a971b5d207d0124deb4 -0x77e20394f82f266bc7ef9d15be18e6f8917220e137756724acdeb15a5cd80fe4 -0x2f011815e4a62df7572cce7b20ab4a31cfb73cb368ee788a00782d4967851bdf -0x776112abc07426d6d1fcb74bc415debaf9cf9298f1b4c77339b9a209bd6e4ac8 -0xdc459fe7c1c2f88a72a2eeffee9024a05dfe21b5e7696e22700e627dac9cf9b1 -0x6d51818c9082b53146d2e376b0a6e34fba3d209307180a43ae0842f4adfb9ec5 -0xf00b0de2e92bd60cf86df9f2a3f7da372fba9a6d9cab65447a9d000f32fbd1a9 -0xc3c07be4798a289d00f2d2445364232bfac94d8bf9dd6acf8496c04da31f14c3 -0x7ee903402ab64f2bf108ac130f2d55a85a61d3a12429a7f38181257e47ea3d1e -0x7fc65487476a2832d0292d4862b7bccc5bed9fb0464187d7f817f776a0aaba6a -0x4f279c34bc84ffc135f49c52f77f38f2ffb92b149effdd7d4fd68b347411a121 -0xfec82977af5b52700e34ba3d2c58b1b4f1cc60ab03143fd039bb08657f70cad5 -0x47557de8617207ba37f6f6456b2db9455184c4c9accc2ece3afc70c8b90bf918 -0xe79e5418fc22dec0c3a91cf1e5d4ec4530ee708d37d1562e1fb3765ab43cdf6d -0xfc4c99831dbbfa13254a9c6b434126a03b531cf550ecd274e712630709f462c8 -0x0582fa86f4414801e3957d2c2555b1c4d4543bcacf97098d8b8ad703856c44aa -0xf28340f748e18a2460b4e0b4a961b6d3bfed8bbc2cf432fff151bd27a9f795b2 -0x5843cd6a8d58d3a18b0d5f5ff9c3668c2e68a58ac05bbc5ac0218ecabaa9d61d -0xf3110a8fdf7078418de083b0c51080b29f57662e0e3768bf7a38110f487fe447 -0xa7f62637ba807d1821cdef8e88b9d7563e1691e85cbc3059cba52fc4c0fc3cd5 -0x73ad47c72ab12baa3f233dc3864ab7e1f30481cdaaaa1e0a546c20a556f741ec -0x655fdc3a118b3c0f67f1f0a94db37b52bba236cfc8f9cde9f9dd6b9c5e10a002 -0x979166775bb5e9e0312c2bc93d092e7cbe96fd86342cfb496ec45a68eccbd971 -0x21838ea4cb49f312aafb5fdebff5da2b7dc64e0ca8b2fc051b74f69f9d2b3a64 -0xda823c31de3dcbc90c93701f6ea4f23b791af7f3ffc797450403e73b11bb4af5 -0x94a6b48477fbcb28bdf1ec66fc7d0a96f2555b7c88938f2bc80ec9c0db648b1e -0x1714c28cfef2f183655a064df97581656d97c5d9eeac3f037c02955a69cb2b8e -0xcd515794c5b939be587b2ab6f0f719a4d69e78466771531733fbe7cf8c29afbe -0x2d5c44e268eeb578e73e29963b6a627fe89980cfcbe623d7cca7a19c39f9e746 -0xe4a94742040357fe636918deecc9406d3b0a1d5c7e8eabfcbb42c8740340b5fa -0x43b8cb6ccfcc18ead09334eda096806c87014a8b13a1cbf54010a3e3c55d1c6a -0xe29c67e3a27065ea94b70b69ee02e93364af0a128841df7daaadb68d27a08489 -0xd0ea3a94347e569893a0defe6a296cf8c6b20e5b49f559e309e57fb9fb9a2b10 -0x28022b75121ca152f389a826556844cb363dfcd37ebf7fd92ee587ec19c0284b -0x5c2d5ec3ab2ecc03c37f09f77bba2dea8f7ffd0c1398ae8cc972c78cced1eaef -0xa3905f5594e29e7e74f9f2b4aed51f7d464feb58c494ceb4b235a9bc4786f24d -0x697edefbe5d205f04ff37cd603a2f1cfa5bdb456b9df94704ed5fb0c92088f97 -0x4090c82ca432bac03bda720492f78b902f36529848b8e797c91a8a29c2e9d84d -0x6162d184ed50e94e918d4a148f747debd0d2eccd2ba09e8de6534255879d237d -0xb8b0692fef2957e182d182087cd7d32f6b7057b4cbeb4dba8fba60e601637e1e -0xeb169272a1606bd0ea877fe48e853fbe8187be4cf35f88f85108fcf00bbae01f -0xbc62f6e01a841fa7cb83754ef69f7da2aefd2a70905d34e0fb5fde5dc18f2408 -0xa6bb33147995102987e2da802fb25e3d4432581653c09a86179495b4b8ffc716 -0x993fa7b5969b4631c0781144ee8e55ca379308a48bee84c08d0eec725f606af2 -0x3108677fa8856f56bd5dcef3c1e1e9aed95831778be853d7388e17ddc1a4fe81 -0x883d50c24d05a1bfc29cbbd54340fdd454537e0a993ffa78b87fdf5ed283e1b0 -0xd512a9e1d487656aed6321c13e091972dbd5a07f2cdaf5fd274aad45a7d594d7 -0x7fff37ebb8b0cbec9e015391877e3b73469b2313d14ab2dd4e8ee43fe5c25316 -0x3add41e6aee858c94e239e5e9211a6e73fbfae2aa57899d70d98554a4077675f -0xb328be0568f040f880d9da3acfac86f3d95d75f437219777bf637acbd5bb3f34 -0x1c0ce818dff22b7a1e3836989fbd9198f43d1f1443cd96729060588575ccff51 -0x70fcaa334c977c42450c80c85905e3ef8fdb04e5a994fb7af4e630b801f6b1a8 -0x8ee9421464219d4c825e95da23529a9ef26e5f6f3662163fa2ba23656516bb9c -0x5ca287d848b3beb0c04dff9fb79a90d387fc8cba5f9a4f20582490dd17e659d7 -0x1d6ac1a49de9786e9b3f087ef091e4bd917254459734a279835db780b73d0c7d -0xac5ba9174bbae0b14214930742aee1c984c7691f6b0b5e5e838ab7cf7725946d -0x05a95a914ab49cf82afd58c3a73b7cb61d1106803455b3e8eb1cc3506c1776b8 -0x6c09ecaf367861289668034155739433ae017a73e55bc05210ed8d02fff5741d -0xe485903203efa67d9336f8f334d5cb58e3c74c3c5b844887b8bcf07077364038 -0xa8e4d209230d771301ab2e92843977ef9416fb461b7099a2eec9b1dc5d7fc211 -0x6a4c777b1adb640d362cf66ca57b3d80b206835a4f8b381e32f52bf13657b048 -0xaec6b6c7f49e6210d274c3738bce30858798007ee934ceac728d3233b1172741 -0xae880bf1e76912316c8a2f5a1da228f905aea76ef69a922e6bc35e02bcfebd81 -0x49a39da0ff863e1f760118648a60796f4fe24818a4fa0f77f9dbb56fec06406b -0x35d3c0881e62fdd84947d3cd1b12a4934fdb6c1d726fce291269fd07a90d7b1e -0x43b8ef8b6020773d9c0e7f39b91b422db1c6447f5a176a846b5593d3d33909d7 -0xf08df9f29d927c18dfe5ded4ae4d0a5ec7104b5af2fbe42bea3ab0612f50457e -0x00b7845fcb71be28b27ed7271132279fbc9ad9b8ff77ac77a0e908b23a0b7c0e -0x36faf11aab636a20a706f692799c8ce390e99844805e767ed357f688bb888370 -0x10f34b958ae8048fad9365525eb8e8503870de0b20c28d2298db05a0fa3d943b -0x6dce743f0c9fcb1866ff30e4f7b11f30e463496ae2726e6d22e41242dff096e0 -0xa5a808da03a9d071b7a0610210dfc40ac6e92c49ec9a11064cc5c1cef6f43cb5 -0x47cd1e9e56c7bbf42d244e948d9714b5811ff1f39e296f17abcd2a443dbfcb6d -0xf2732c9babcd4f0254394ddf573667bfc3d63ed0c4d338b8ad29a75769ec8031 -0x01ac2d78013f4831c7875ccc570bdc91cf1944cc06bb486317bc90b3178d6b07 -0x6510f28792e7f46d91abcaba3a1e2a2b340036a671b848267cbb64e4b0b6884d -0x15fd190c20348e1c7e09fb3f9d075e81fb71d6d6c7a1c3572d3d0f2d5d73c20e -0x6a7c861a67efabf595196ef0832d0deb5f8f7c2166f52ef5e6f14c52f811eed7 -0x3b4bb36bec39f296da0437e9c9f04766a314b1388fc2eb344866c802d186fc40 -0xc2ebd6cec8a083bba9c510612cd7e03558a5e8cad8d310b3b5c1c2fdc4117c07 -0xc4575afe496c8e721422ea639136f5be7e96741b4db0377aea366200027cc275 -0x4f8115b587f3adca9490bd48f42eb39599607c8d0cb7ff54a96e3a2bc958138f -0x2590e9341fe29f05915bd683237e6f6685b4c1ee87e8d5489120d5503ae710cc -0x54bc9d98652b78cb1aa74e4a308f319bcb462b4c4d2d52d64d47396d254a9719 -0x48b7c405a2758f2afa6dcadeeee0047be565997dafc8fad207e4049aa6768a2a -0x40b6ae946e55c228c78d106b9483f48fa6e560a60f6530c783d7ce0051ca45f9 -0x917f65eee874cbef3a8b27bb826e00a2606494a42d7727170271810852435107 -0x7ac478c21b05340232a5a3d37c892297636071aeeb4dd537fdd21decbc103386 -0x7f99e0a0211b30c4bb823c832d36cd79faaf239bc1f9da7656a1e746b9f06721 -0x88668c75cc57e174f50de16630ab4ea4da55712e5d13b09c4cebfbba07487d5c -0x48fbe53d387b1511586736f4dd20d394b0bec94857212b13d010b4950354efe9 -0x688df26bd2a29f24ca49481f585f9df5a67249b79cd68fe3ff948840e518b75e -0xdec1d04e851680747e106f45d3afa16de0ebdb4f56eb11ad12f77f74aa7040cf -0x0f784ad8f3d6bd9a1a633622f773f106ac191e301a7c9e9aff5e4925fcfb6e7c -0x8a3f8296f913c012e200842de61e59e655362a481ac7a0eba6cfbb3332d5557c -0xc24aeca5d32fd71f59a3c7fef247ee745fa735f3b00186f0c04dfc8af30acc77 -0x45456dfac7f5a8437a89b74b074f9060ed1c0622e2f93c5cf70c487b6f624642 -0x50d446b1970ebc2aa699b8ad9e8cb0b357423bed716a494e2bdd45631f3a9eab -0xc36c6e98ced4d5c4cd92e388632fda348039644277cdcd4994bdee5778fd5c64 -0x39fc14cd65bcf99be9cc6b08c71a3aa7b9fe4058edaec7241733528243bf12d4 -0x3a9760a64978d67e818a2950dbe399f7a4d67870ad99f3af31d8766084fedc46 -0x69a4834129763efca8707fb9766f456dd14d6829d14f1f3dea8228ba601aec2b -0x78809f3ddd11bdd8be4f97e36d0e556f6a2a80364cf1bd2b77733baa3a1dd453 -0x8927c599463fa1704bd68528cb7c05536b13479a041fe7c540b3c5b5dca2b31b -0xde6c7bfcae479e0f53ebaa918bebcc9abf21ac9dcc26a689794a983b25f61148 -0x87e611a4e1aca88b2a3a65ced60ae0639a9faaa8311c65a501d253477b457a57 -0xc60476c04a6d5da603ccd1f134d06e97c7a1d197ffe97192a235426e979019fc -0x4472c314e4f3d8293196d7b0a651a99cd8e285f6eb1f5a77c3245c254d207e30 -0x9040622319e6278437937b32d646e21ed3c87a3ba0d25100112a084bcc743b68 -0xc25ebc3e8dd12d1ecf9d6af5a22f41921bb5c98ce37ff0913f17e99f6832ce3d -0xe420b3cd259f1a6e3c92c47649d7efcb6dedc80e87ddbd632a812ed27a0b2edb -0x6168c03d6733aa03c6959422ea30e97cd133ee47ee903753a4aec45bd1a2d0e0 -0x9f7f1339ce1ac8c023b1c2e454b7f14e3f25e9ff7f0a4ad49593325ecf0465be -0xd22a54bd6204859baff3010dbc0d4f0b4e38331e7b7e55fd41aa0e51cb5d63a1 -0x7cca5e8d76769a2aa9e82fc2deeeae6c86167c4e3aab828d3ceac22216fb9f02 -0x3befc1a7312b42a60796609b626e33dada209d22578887d630f8ccf7ffba4c41 -0xb3f4ae45d0649c7166e410fc1c3461f7c710ff71c9be6721557c0cb893c0fb0e -0xbbd1ed32f925efac9f49da21984e4d47f48c6cea1a0084ec3d5f6ce0f860936f -0xe11a9fe0bdb083ddf2d2d12610ed6b81860f652dbb4e377e70943744f9711ba2 -0xf7d91ef5cb04cdf0e9c90e2d3c6a1bf757c519b439b2070ca0141a67dc7b53b7 -0x57dcd0b4f83bf7dabdd856af5e727b6941395ce5ff26c4c9c606223d288b6eef -0x55ae2aba393d26dad36bad1ea80b6a84f2ec718638be0c67259fe20f2dfd72b4 -0xa8228defc58c286edc714f45c8e49682b20a5dad9fc83454c3d3fd973fdb2df7 -0x37f824757639544973303f23c218c32c9dbfa70f8d16ed3c2c199d35852d5004 -0x4d547c3d6c50441fd0a692dc12873902b9a5de89954c6490bda347ba64fd8ca1 -0x01230edcf21e4fffcb5c6f372030ab8ad03d5b5d4947da35597e6f3ec9e4cdf8 -0xc8be9cf321c01dd4c6843c335e5efa4e2e7f172ecb917c772a1e767803bf9d28 -0x0d3472e8121784e5b05184ad839005bfd2d0cd236af35d8dd59e2eb3a49b5014 -0xe5c69699c160189e986e77f31876f59a61f251fd7b8620081406df993665c6ed -0xe48068d7763cb080f8a86ac1d36945a03c4aa09b42eb3ff0d29df96bc24f7ff2 -0x87f2d7ac93dfa0df8d54ae4ccc8e46b77c30a7057499d104cfcf895fcb823af2 -0x27cdbfb984c953ba901d6e9ac80ceb4f80d3076d31a9b87aef3057d1e454f2b7 -0xd2207b1990e26da7a2a01248b10a7f9f3939e8c4d00efecb2a5a6cf9c66c4d96 -0x8c069951cce8cf6dfa28b8b58fd4f015b2ac70f54c51b9bd5ef340e419c6ecf3 -0xef2a43f0f1539d25973916eaf6ad8d70df29635bc2a70bed08d7cd905b2e7005 -0x314fc6dff993d6bcf66c3f03d7159e3d74452a7883a339d00dc751247c9bfa62 -0xf94b33fe91863a97999a9c7056f4c2ff808c526d62326651383d3527f89fe538 -0x09261279d61266c955086efcd9c3a343f63efa90fd3c03dadfd8fe8236f2975b -0x570bb66f8af4943aaf9aad45129101cfdc6496d78bdd18ab00ed3fd2553775e6 -0x22fcab56f6a2eb4f6e0cce45c63cb88f5b77e5f6d9777a02d8fd3b3dc93cc6a0 -0x19100891defd71014414fc203f1a20cbf92b2f1808042723aeac447c19239439 -0x241fd4bfac55795be8dd44fb41b5479e6a39b1eac86bfb3173d43210e49b58d6 -0x7507829ae4715eab7bf755bc61b4c3543a6e83e8b8d4108dea86604391e7d8ca -0x0c3acfdd9f815a8c7b0711235c61fea4e46448788498a18263b69a4e57b847d5 -0xf5792944d5642a9b2d14bc2906bf21dbeff5bd016351e018e54ae959cbb23f90 -0x87157b80a8759cebdf48180a2daeff2383f8a6f252926d7118b6d012f38598dd -0x636272d429c35b72a58d9317339866d9b2a9faf01f65a8e369dc78dbe1a6b0ad -0xbb858de8ccc4b81a56055e3e5f4281ed3a10672a92e5418247ca191d4fa8e538 -0x4fc1ebb838495a8f5877864f023b9031ff102fb899597d62c278e890b708fc7c -0x125e7c09720fc53f4a3cd205ea457bb3b77f371b030623d56bf2cdc99bb13324 -0x1aebd1b4997d291828008de3de61925b55923ab962ac641013660a5c4417f373 -0xc44b243c63218a619e63eba8e3cbd042c6d9fe91d89fe8ea42bc00d4e2d3482b -0xe0bd877acf354d8811d8f214813ab38da1b6adab8816d9bcbd8d267448a26b4d -0xce8adf58ebedf4f733b4fa39189014a5f261a69b309285f7656bff6c2d3c1a0b -0xd0338191c28bfe874c2c20f967b97ad270153a58449bee6f5a6c31f2fc38db26 -0x946ffc97397c029df700dedcf968530e11f7703f70e9a2017130f579713a1d6b -0xcb2c49d55d4e3859bbf77596b0d977f6ed8a74c83097cd6d85f16957473c1dec -0x329ea994e94743692cc533006695cda8cbdb56aba8225d6c3baa4a662e402edf -0x6c9c76cf0979117366b258d332695c078a376adb80de15b34021521e37aa6cc9 -0x387e49ead141458b3c0149762b404acf5489111d2a943a5ace2c44df5f44c0f7 -0x4c43dca8392c982b05f2a581e778dca947c9d8a8c6e5537f62f7bc5983845856 -0xa2a0a7766326050c3639cc1b68d0dbce317bdb46006b79f3db9b4731fafe1e9d -0xf30f43da9af7af4ede6bdc6de5f8ec7008824cc19e5912436f80b5482f00d314 -0x0255fdb8ca807a60d6668307850769d0df3e38b5e3d9dc63e4acee7d5bec72ea -0x22666515a085d8c9468290c1d466cffb2ea3b40358eb42ee4082b4b5f97eb2c8 -0xa784445e47039d737dc89599a668b314d24ac609da9c5efed01a3252d41a053f -0x5876d2e21d5651dcc43363bce946881b093f9604d36a9bec993cad8fdb55db82 -0x85fc2353abe608ef950736e13810c880f93b44eaf5986fd0cfd180269e31e559 -0x91cde95f33f36c50cb4fea9a9d770eb402ae220b17428492df26ea8136b2b542 -0x4e773f65c86095315ce2ecf7a9ee6b38b522ee5d456ec1d653be97e26c8195b2 -0xad3a7ea8e10b74fee6f457d9495381075d2ef654007613e25fd2c1e5b7049c4d -0x063babb723850d25bd919757f431a55af4e31e813dff9341345a19d73f9675a6 -0xdd06bd857c083fdbe497ba45ccab55022d6a102b50329e2c5e82ea656f50751e -0x11f27fdce7974dbe372d75fa5cab002c1b8d0c2d487860979c4954ebe9fc1ff1 -0x821d4c204b213011bbca9bdb7e878cc63d36dbe3c185ddb3d22cc61f83792936 -0x405af85db24dbad45437158e481832d65983e808846c90ffd366669f5b449739 -0xdc48fc050f038859385bb8e277d51cb888d20d436c4ce9c17b89f3b6485183ea -0xe9d1b04410c68ad20537651178b352c2ec5734da555e1ffe14d577c45ddf3ece -0x6e808ab1dc9a89370cead20fec33d2001052a026e75f7ea738ea90959b71495b -0x13a5b163ea5746d65c5073f393d9d203f54426f3e05ed96748eace10aa960311 -0x4b3bab5780dcf487414b95d9435380106b64edeaae546550231322c93368faba -0x4a5694a933a1cd8c7f8ac499217b3f15731a79159ff1b9122de705f84a05de29 -0xa8a00e4c26ae6d7079accdd84b21f36f2586f8ece718ef037d6dd88346ecbd55 -0x21db503176f3a618543117db6a08c564ad8e0c3236244ab0a6e60898fba358be -0xe877940d3a9daddfbeca0962600105b077a4de94a15d95f314255dc50b0fdd1b -0x2509468682a6a7904f7d4c70d37cc8a46200a241ae1d76c6dbd03ca3df3f73cc -0xf7776df3611d5dbb05f1a4fe464aa78936db7d110392a18245a01d1e60e14511 -0xe6477406bad252e5329db245346ea90ee1b029ebd348ddfb825cf82bc9fff554 -0x3dc5d7441f6046b59f97b2cedeb110d612c445a04eb0b761d951b2acb72c644e -0xfdb7e801e710d0625911920bc36a72f03cb5879e6dc29ceb2747c284ec5d1d14 -0x2dd496dbde116ec8acf5c73f453ebbe4cb7344683e52f6a3ac33d91a27d385eb -0xeac1d17bda2d9dd9dbff624e0f0de7fd78372a5cba7e1896a1f8701bcfc07a02 -0x89f30ef29415cc6f5e2c4724d5e33dab74f38e86a49d077bf0b2594e1cd94a34 -0x6f8eb8735b26a3529315a8c5859afe6ba843391de8c304e3180ca6613d59ae1d -0x67430a0348f85946706b3ea9a8adc851eb696e4a2a609dd11031abc4ca29c776 -0x7b1e39714a6d006552ed3487e1fec442d26488507a4a7aaf7f74ae05348933a9 -0x8d50cdd453ba5326aec97d6de59384fe8c99ae62ffa2f6831031f4a9a3bffce8 -0xd80f264f476361c618f33170dc6ca7a7fa382505907d59d378ec2079516415b2 -0x9140103163d0767882ff193cd0cf288e24633d6981ab672f8e26366cb90044f2 -0xd5c25ec13a349d39c3e85a579c2f690143cea96502624a000d6a95093caea508 -0x7926b0f713b6ea235dcf8dd6c9d5f16408701666a7630cb955e02d2ffa95c843 -0x21638de827eb8c179838d865e2c26648f92608b6f1b52235891dfd274da9bc45 -0xa03cc45988b7e0828bf138aa54e770fbfa6ac7a3454e31189b22a1600f8addda -0x00507f8b017fe9d41af30285774718d8bd74b2acdcfe9a830c9e5d614b309fd2 -0xe1868b0e6b7e2b86f83abd93583a58d7f012798150db7d5f88ac57db338f8339 -0xcc3e4809d0df42695537f6974b4511512ecbd884ff99995b4711edf54f0cf833 -0x2124f8fabc40b7d6a5ca50fedb9e22496508176cd9388f1a57c85a18accc927a -0xde6ab12ce29ef5d9e10f16e52f49f484eb3a5d3625d384948345fa6f229417a4 -0xc0c1667c493abfcc253ca8c916987d6641a54c73b2495cc4e755ce061bbaae09 -0xe488f0dbd62eed2fc6d6e88d4348a0e92d948d70749ac2fb5cb126c0a81c902e -0x159d5042d66e6373795841226a66c1a28102e1102332a15c18a6c12a6a5a470e -0x6a7e439f8efde8863869087820d2a3819469f296c5f35eab23d260792776e22f -0x398c7a86f68cb66cab937a5de644db4fbc4cbf2c766b1bf5d9436f22d831a843 -0x03d0391644164b1c072f615daa621cccfe84dfdf70908de5b192e4241965070c -0xc8935baa000ebec6a91e1a2bf8c628366c05226873255fcb89505da2e7fc8660 -0x6d187548770ba17e904154e909b1ca7cf741a8ce8dafbc71b4ab88e88a837c50 -0x23364daca764ab345b9191b8ba19da73a7c0d4987f48d62ae15f5533959563ab -0xf607c30e93a188d1343dd2048d19d96051339cdcf5bd6aba6a344019e433371a -0xafd705b3b7e7832ed955cfde5b3238768c94109ccba54cec764c4c80b40be8f8 -0x06e8cf58adea3e5fdc0c2daf00ced56bd18402f814d63a431bb70256865839ff -0x0c1924553459d694e3f55538a8e96759f1d7caaa1ecf074b67d1bacaa3cdc00d -0x74aaf96a02717581d03d067f456db51b8659c8e197cb57adf7a072e989a72b8d -0x5ae444a812f31c6fc03a4c1a364784afd853c5099b619c440d0ddcb5b14d3219 -0x569a066ee7ec988ea6692ded0f84ab2745e0b611063d2b3a2a3b4c701b7c906d -0x6bcb9d4e108538baab0da9889d26d79a63e979acb5eafffd0ca6508d19c0ccb2 -0x1497a545d5396e24c61527d54bb29aa437149f3df656f251c480d6fe04eefc88 -0x07f68d4cd41db0b789013200d6b581f23b3f987f5cdaed312cb9ac09bb63b89c -0xe258497edfa3eab92f3508e3bbd76e813de26e8c918e0f5eeb57807e637765e5 -0x35b8e02b0e5e1e9bd5c15a98184043b31f2484c9759055ce8899b64a54cfbb86 -0x9c07ef55e8ff554708f913f17d8428aa88f3d46c5f2b476a42cd3aff28fb924f -0x3d853a123c730b44ef4dcfe2b0f5ff88675953966c40927238d2327f74abb20a -0x7a86db03c27f856a6d338779ac63f4029f3e8add62c2bd0d498e4c4f19e4a223 -0x0f3aa23b06af805adcd4dcf3ba4677f6fb724a75784fdbd97771c692e1a2e465 -0x6903d62845bb890be92592064bc09601fc4e2a93889bc19f5cd3366e88de754f -0xdd3c851a354e0102e17c6f7ea32ed17a74d41811d7d67752c63780806c101b5f -0xb1c5d5fbc7f1257fcab691ad737481ac24db29b2bea4df0126f88137a78ea683 -0xb6e54a9363e32770697cc31643676a61d907d238e5347dd13254bc935bc5a443 -0xf2e872f37ea80600a159beee04e89b9f4495ecb524f7b2a1f9105c72c86d29a9 -0x7ac6bcb6cf27275131b7f5ed26eac1cdd1a22afa8c31c593c4a8c30d57fdb688 -0xfba94298d1a83369b6143061897e25ae106a1f9ce675aae4481d3cb586047798 -0xdec2782bf00f690dd1e8cec7df5a04c5ecb28403308e00e723f603340503ed37 -0xcefe58540e5fc1d0c2faa46f27dbcd40f97101d963d54d6acd941d1520c9afdb -0x64be534557f1634cb38a687d1d4465eda892ef23380d1debd2ef28da19edb5cb -0xd60f9a59a14447045e3c4f34b64d2cd72ad57bfb5dff9700f9f8934096757c85 -0x6d86e3fa7f6e9aaa080fa9a242df7f45990869b0942ee8cd988c1ca578975fbd -0x502403f002c763da1a4910b032de78f5906c8394a43c7609726da3e017d78f60 -0x066dd8ca7973c2c6e2cbb54cd6887e25a9eceb86bb209a04c5c6b12add809aa2 -0xced51fd2bc3c65bb618239b323c9f42d61439f3e9c0446ddaecb037b380d65b2 -0x22cc0d99f29c423f20e032819ee23a00e28fc4d70afa93720614d2881822258d -0x0835bc611bdd2c3bc643beeb727ba79d402677ba7b212a49076f6bd826a15adb -0x71e35763777487cb0ea74d79cb09b78c5cf0c6006d118f89db14acf80888b11b -0x91ffcf4e18336002fb3804c0daa8ce9e5661972518330eb7f59b2c0bff767102 -0x6523cb762edd37f3d4b630825991f2a9796552e3eebcae7aec75e5e9e07ebf33 -0x94e20edc5a27cc0f8123e4fe6e43410c51841034df8c28dc4eac5e268a65aed7 -0xfd07c5432e04bd48683a1a7db60b82f3ba42885c91de6a084324a5aef766e53e -0x69f3496f1985942b682533ab34089fd2dbb7add7d3f00d223290867aa0a13e42 -0xb9f303ef8ba2043e4926104d04097b9428cb29fa418b7924432c449db4f1c7bb -0x5c00a029e0b390e4c3f82a8c09d56bc818c4ee216a87993113bfbb7a60d83cc3 -0xe1c04b92d78b0e5f7b352bd64277d942c7a50f84575251eb492242e2833d4fa6 -0x2162a049dcabe5f955841aadb7de1e39effbb5b0d97ba0d06edab402e9ad4c6f -0x40ff8a6adc225f9fc37984f289112508baf31046e90b927a7e3d0f93e096682d -0x623f7cc26a83e3653247e38ec3dc0dd681247e6fd4c50d29cf82c643209d55df -0x5f5c17240e427cea7e4bd6128276e633aa500009785efd5b5f010b6fc85ba5a1 -0x89f18eca602eb3f3015b0486360ef85b5be8c4b56b2c30b76def6ea3d05d35f9 -0x51da83fac6d03f193910282cbcbf973f59ffb193f40622465989066159f0b0e4 -0x71612fb0f7fad63e37d87c77128b1a498d2b8b5caef9a96ae98ffe1c2ca9aadd -0xe8b75783612eb2e3e09927e2e06a69d52626fabdbc181320002cb60424135b22 -0x517c0e9992fae6f8e3838662eeed8dab80ec597d3a578b2fdf03df491039d43c -0x5867c7813fd920f515cd5ef3a6c8c6c55a9662dbd5cad6c69749c00441181e98 -0x81f86aca91a383cd76705dd0a5aa76333bfd8c2bfd22bf8dd05dcbb60700a670 -0x57cd7a86787af7c0ab0439b5f7b813e4360846c62ffa9b5a659f4e4d8cb7c7de -0xdb46a23b41600a925d329544251f61302e57c748b96f5bf29d2c13353bb97d48 -0xd0b11f66fad603f1fa17213f3eddecb91dc23da1464fe13333e2696d3ea5d538 -0xcc8ea296e926c44f96d0dd6197b556647c8a2db9a8803fdbe5e75365036cce0b -0x8684e5d957ec912a5753cb921314185b487d518d1f6c1b2197156ae0fed93541 -0x0895de3a61700768a198e009b80cb5c419c637509f478b6ea52c7877ec392d89 -0x98837368770b94601274a90ff959a01ca520ec89a2412a2c77d475baedbeb16a -0x55e9d255feffef12c364b5ef1ae564748da70ec787de51453e53aa367cde2c72 -0x8185a01f01ab7e1e416eea15938e4d1d3f7d387af1023d7fb4045db1759b36b5 -0xfcb0de211cf8dc1dbff959dc28b84658d166188cd1f9b1b6b9ec3408ff5e92a7 -0x55020293105f57425251c6f28e8c6e02ce9e89b477ed551714b9643a028fdaec -0x200cccdae2c9ca7ebe6d21b006b31c046114231f11318c6541484ec08d88ce7d -0xc2ac49b204e2259dd7799b13878bfebc07ff01447f2de9bc761ae2a78367eafa -0x67d45178b4a46c323f48fe066aa8a61cd80e3d93acfb37cd784c08c88aa22845 -0x1f67a982e29a24177bfc00c5dcaf70a1d79d5886da1124826c30185bd0bb659d -0xfc805459f48375d3728dc1401583de7430e0baec32da0ba4ee3f72e31a483268 -0x83aca2d3543e33e12e1e5a0d28682b3ca867024902da3f7a76541de1c0a958a6 -0x06906f0139233c78d063ee0eea8436898ef82a4f1be9860ca1592a36292db996 -0x85a662acc36b33ee82e16a114844ee8c2ce0e489424f7b8b51586df2dbbff4d7 -0xe24a18c3e68d52a5d928f548080f517bfabbf38ba69a2281a0a4d06ff6f230ec -0x8c0bbfaaed75d666f9d9801a1dac1322c78f904fb17c0a2f30ef8e526238d5b7 -0x3c7f25c2128e8b2fdb638dc4d5b727bdf52ae3979526e2164a8b7ac2b9abc800 -0x27988aa736156993735276885b14e58959f3988cd6f085b2bb3a9453a4cef562 -0x4f8142d4d6ea33766f55717d18b849f199366a8c040552899431221dbfca1ce2 -0x57c122bd26e48865367559ea0efa986fefdc2bde8014623ace2637b62243a7b7 -0x4a2529ab9293665e32c47189c9c07febefe24fe6a0668974ddd6c87365436b3b -0x5cccde5c1a64dde2f7b57dba1f3034882589f605e2e498c616b3bead2cb1b873 -0x204a51073c5f7ae2fee8a5f92de58e350bb685efbfd8269fea92c6c8395eaccb -0xef2c46058447454d0e15c3aa0d0b1eaf1c9e4848d4540bf13fcef8f289bbbe22 -0xc5f0d1b4462a33e921307507ca6b5a547fc5ed82bf38957ab99654e033c98a5d -0x1de696fb47920b0a6a271827c14a3bd200b05333aa0233fa7680763b697a5085 -0x2f4edd5fa0fc8eb932a9706c82acb251be5dc88e4efb4f4f2137887e773bfd02 -0x27db6e310a0f980720358c7cdf566015ca4b4ff94d46664564268e6a5a8a5416 -0x14a47eda68b9606578de02c8f7d9d84c4f0cfad1da7d71ab0ed4bf1ba8e70422 -0xa9beddb6ae63b145bca9d0040676347e574eab8cfaa8d75dd946305d4cfde585 -0x6c953ccac56267ac7ad6b5f97fe06377ba39535086eca50ca5ebc27db23f171d -0xa289c569f4f15be97bd0f45797a88f88d16b3e758626513f3732c00ece542246 -0x31a6634a8b05b0babb49b90cd05c03ab6a80a9b98d4592d9c692cfa8a975d39d -0xfcf0d1ca88a417cb07192408d15c00a9ef77570b50409f6cbaed59a1c4729740 -0xe67f0473dd034cdc814872e7e4d8b05e92f155c4620c43a253db336bef6a9c9d -0x5e19df6d1f4627a018f19bce848787c83f1de271585491c1037c890f871afa12 -0x9f31f28f7a11426731e32b4b56e5eb220513aff9499466137fd203371b08c077 -0x624662c2593270b154fb1568615be3984f9bf27be30ccb35b49637a26de4049a -0xe434632951000b4a218b582945bd11a3c5a9a8ec4a31f50d2f3a3ce47c5289c6 -0x73408e41c4b77d711a741029cc4871be65cadb1b1b61a0e8978fb4d982ddf222 -0x22fa68c54dc4df97bc539d61136a430b79ec559581b4b4e13da6f904a918be3f -0x7d88ac53a9e3db925c7d9f834c071e6f1b002c4d4523e8dbe71f7f87494e2736 -0x5fcbde2b67e19d8d7a19659c5613487b1ec5e2ad2d0d16efad779d5d92353afb -0x05715ef1faf77f42eda39b685cff7875c12116bbd6bdfcd605dd34cfd5b7d369 -0x1b3eadcba5f5d77dfc77c9eeab9a0821561633c7f6d33d57f6f9ab8435901bef -0xdbfefb2a611202fd544a9e9e1d76fa47575f3fc03bab1774455fc28670ca3c32 -0x487861eb780c93ffa69743e84ae8a2012c0727f6d5c40e536fc8d0a43080a12b -0x0b190d46c41b36e5ee4228f98cbf78736329683627e4fec8ad42172bd549b637 -0xa8dcc848f35a5b5d1087426625a84850e54b518e71b9cfb26fb145d90a76278b -0x355c94ab94ed5432a50a96c491b8b2795e59c839d507baf6b5c2cacd0d4eee04 -0x227acb6bc03e1a0e3ddcece55133dcfff1860e55314973442e31f8ad355a7ba0 -0x3a6faaffc5d0067734dd216eb80562af1e63dd9d17e41b466ef66d8390304d0c -0xd4d5e3af669332499af77f2e89dc05477b7f4f87804d3935f10a59df5e3356e1 -0xba44195037922f27182410d93b82c315bcd94112bb9226db4c7d16f1445f8c7f -0x6ed647bf137c2ea339d4e709cffd180c836a635fb92267fb669925c2c9f265c0 -0xc717ab5467ea9d58f91767733f44e4062d9b9e51726367870ed1338ddaaa75b2 -0xca4c3b9111a2271e77be9ed1bc23996fef9d9e8974a90c7e44da060008c5cd5d -0x64f7f2bc42fdfd81ef01641b61873843bff2590e63759433f0371714b7b1dcd8 -0x9733883a931424f935522847eba9dd85557711bde792dbca70e3f57aaf8ead6b -0x951e80562a13921b9bf5d34a6d374148a040626450dc11ecd6eb1cad148628ea -0x25ee5c12f60e4447635b663ee31bbff928804cf0e17c11f326014044d8a35186 -0x592df368b9271747637c27f8da00a964b893c9db494993c5e4b1b569c8c50bd0 -0xd897bbf193cf08456dfc4f6534a4c51bb46cb95d7c272655050ef45afbd08e24 -0xfd611d85472fe1dd2cfba67baea0a69a775deed0d6e49dc769afbc94ac21e872 -0x5a83067f6b3fb53a0c22b6a353e1101ab92e02d648c25d69acec3ecf88a491cb -0x64e6637d794d0fcfc40ddc4167dfdeb1b481db1738aa44022b84da2d5c6233e7 -0x3da7ddd47e75ffa2f4119abce9e54bc6c4124b704b13cef4aff88aa4e55e6df0 -0xb0745b63ac230ce3b2d680f77f08be93ce9b4c39ac43a7ea878ff6aff1405f5a -0xbcdcc2f66118bbf0ff463fccd08f478d899f73045ecf3de77a625bee7d17cbb6 -0x57f0e477b1642a4092481e6619ecc1cef23852745d532b3c4217204589987dd4 -0xd7fe0ee222fdbff50ff2d5fd47d56e5b54bca3f88e6e27714868b1879f3327f6 -0xa2900cd1477b1f3f2caff964780b8b09606d9eaac580c16447abfc664221d1cb -0x5c938797383330c986006c23c454096e25639b947ac6c5020b52f0ec09cd74ef -0x0bda526e7ff906647f712d793af25c6f0bf43861c4acef60057b56201d8982e1 -0x827dface836da4b5c558b26547d3695cda17b8196e052fa0fe6e0c5b79f250d8 -0xf65e2b83696c3b01775b80328679c4ef1d8179a9dee6cb6999c7c7e41611bd86 -0xf87218b29d0e24f8e6bee93e4918f73fe919fc2ef5cba31bc5715c798d3a393f -0x4e88daeb461e628fd4ad1601334ff498c0d02f2c551bd5e9a353527d4100afc0 -0xdb8faef5b12467eb1856e4859027ed675b49d025b1d75ef72419efaf832cf864 -0x499e459b6f23e0dd274c29d76dc2a1a2c2a8f5d8e3ed0fb27d0a372f11c31027 -0x1e1d98a2187493c7f81a9daf2fe07124be70d9cb4fe749558ee23c32f993eb8e -0x506aa771b0ef5dcd5b5f7d1c5f6b24adba4235d94b4e8a75e118f1b524f70130 -0xe25668a873317fb67e19f618fc5a4a0cff331252cfcce45d6b2e008338ec3e89 -0x0a6ecab3b70872f1613270cc92ccf34afcd872e935733cf697a87fd19ab5cf2f -0xfdfcd710b71396ffdfbaac6299df1f72e1befe7dfc2be0cfa521ac545f110025 -0xfd24179b3e68c9236fcab3a0671e6cbc8f52db8172303059523fdc038cd0374c -0x2d03ac24c96f1bbbf211670112c7391833c1e4e995045d4440f73d89346fee7f -0x424a284dd1cd85397ece37a3f266e9c21cf7e7097272800ee3505f9f1df92cd7 -0x24fe087d2bc937ba7ccc0f0773384d121b18c8a147316ad6d8ddc85ab416c3d0 -0xfefa4d2485a8615c027a3bb9591420d688af746896186b87456f48537ac2796e -0xfe1156cb021d7a5a896cd91bcbcdbb70aea7ca3255b48839b465e8efc3f6c12e -0x2dfd8e74374bb2d339adb5bd4e15c9342053a5e9fa22e76611eb351fedb0e1e4 -0xb045a0785ecbaedf19832e3f97b8cc9706c3c1900fb0c429822e015434b2d2be -0x90b1cb90416513a8ee7882455b556990dc13254405ed1af0d42e3807a4c334b3 -0x670fc59cc9d3c3f89aaf47e0253778db54ed70758988105af9480f2482884f97 -0xbaacc87f44566c20000ae777b79270cb3afe1129802981c476842842282cbf50 -0x8ab5872ec643bbff2d458c1e52f4acba8f89ef1cf15cbec2e763ebc7c6877f94 -0x98ae27972e2f8faad8f4b2b8b5b7702bca68f43b6f23e0503f88b0bcdb0a1577 -0x4cf2d70dc8d701ed2b76211443b98784e2d390eabe99138fb5c14066bc529e7d -0xd9992a5e3fdc56198f8c5de142013cea1933a0d7e5b07814b6ccb5323ad8d4f8 -0xfa9c2416e9bf55ca919d5bd48c80f9e8b6964b968ebb9ca8e42a25c716b5c3ff -0x3af63e58dd49e3a81df05567344677e9862afd60f7c96be1861b360fffba6136 -0x96aa9953e9ad4e988404b68485a9cc3e46087f8f6bc29fcc41ba2f7d5d951d21 -0x06a38c37caa35d97bcacda29d8b208c660c736945e138c9814be284a64ad1ae6 -0x2c9425117d6dba047fe86c36528bf9091ee6f69f5510942a059232b9e2db088b -0x3d9aa4369d62d621243956cc88144b4d543b06166f34f01deb86d1c5d6efe3fe -0xb88b6f2e61913f9cccee24883f381e6e2e8b541a69124c0393fcce8fe5707d8e -0xb23297a14c022949438c4078960d5ba84545fdfe9adc4db490ba4e9e59bb6a9e -0x36f589087d77a2efc83b5432df3f17ba1b7e5c828ed777020ae4f1abc4d62731 -0x213272370223a4e9ea7d48f662b8adaa70c070e7d48112684fda1900682b0f22 -0x2d9d32a85490a091a80a10d6cfc7d0b7bca7a8c69dd546b40b616d8f524a0d37 -0x93d54cc9b0f35b8020dd6e6c3044e817cc6c22ea9a5ab99845ab08e339b4b421 -0x2424e0a286013bcce59da40627a7a548e3bac9b7056d7eb20a3cae532a37082c -0xc205b2408e0096fd7840e6439739df402f48efe2a95aee061fdcb672465cc3f6 -0xe496f37a4e0dd474af8fad35058b392a0f7bb909881630dbde927c16ce16c620 -0x2e9a8bf3b00899cf2a0a58339bda57c8abfb86fb2259f2c7bc569c411f55570e -0xece10363d355dd2065c7114dbc4b020d26b9007fa9dc04525fa100421a250ac5 -0xe83d979a7b04a16bea85a5ca36c1561d3c90de8fe76d352eb48a2f536a2afd94 -0x8aa2880e0aa7030465f40965f67345e1e03d562b08177afeaa963eb21d6a60bf -0xa44eb36f66ca5efa7f1ade6e2c838ea0988670a8ea073386a318b3290fb40976 -0xadd1106467288e3e29944e4624da639acfffa0593aa5aaad504f170999e41278 -0xd87f3617416a7f39fb5242f15d5c60251a0b93e1914c6dafa621930776c9bdac -0x80d4584b3c25bdc2bf43df4b40e66324d129e30958a5a815643cde8c83c722ff -0x31ad951d8bf4c7f2107cc001fe4afff5e2b68c68d5c6f61fe56fd83a1e774ec1 -0x2b0a0d2ab5cfdf43f4d8246fa9245321ba18f78e4135d133801fbc1e373674f6 -0xe12e6f66ed1f39112bce06bd540e025a96717f7e24308084570650a78e3f29e8 -0x6b66ffce370c99b8fbc60f72056a6a9579b50474dbeabf6ac7c32c1d9ddba365 -0xd6657927ab62617d25c52e43ca448663388a7cb972ebb2aa3b659c219dc0ff43 -0xaa63eefc16ee8420701a65a31e784da86e78bca5ff7145ce839f08fb5f1e05a6 -0xd36911f33043be8c20c09b4daedbce0df6f0f02568ecdf8f7fce483cfef36650 -0x3911ac211f54257c572146b45fb0aafe6a243e0a725c534172495c8219cd6b6b -0x12289c2976c1bb5bb7fb419acb6515221bafdcfaef7946387356edc2ecb629ed -0xf6c1c99a719411629c1739fdc1651650d166c7aacdad8cb2e1a952ba0d8b8616 -0xa2e08584b555bb9d2db22aa33d78eae78c261025519fe44377805d4c1723056a -0x57c0a63ff80f96d1f9b2fb0d918ae239b3a95aa7c0f88725a3e57979b266d17a -0x7147da121a588a0b02335b972ce7d2714f3bbdd9cdd0c16f4fe8b438125b69f6 -0x6ac81afab88aa53d359227434e6ae63d664f96900b8f42ff57b3d489753dc0a1 -0x265191b8e8002bda96a8123e31d6925dcc9469f8b962e37868315b884647e179 -0x113e927b2d89c071f7004ec5cda3023f29cda358fb32fd0ce675ad52a6dacb70 -0xfdcce092a014053b570668923bc81bd90974c11679cd00629a996aa88d0ad983 -0xe75d1cb57c4efc6db1b277a20b5ab004b6e7ae09a56f29a6828a4fc853b23298 -0x44949d7e17e0b818fc9b0f4df5657914e28166de0239b7df381a4053f5e1de77 -0x6ca929d01614ce20be4f86f9629743ec803b411f9ff5c85df5713833df7cf62b -0x6d1dbcd7e974d4cd6b978838e39018e578535cd548e1d1002cb5c91115fb3202 -0xeb928bb84e96ee7e82a108960f6e58a238ea7defa564d52614ac81a0835bac60 -0xa03f4ad91712448f7ae5e05a00dbc70f02102c20179426fed15f780cb70bde95 -0x0808ee707b8d0913c08da3bc050354beb7fb13deba972a7083217272e7f50ac7 -0xa5e8d7df109d03c247bb064ea51d66c831c03043c89449066e8e6c9f2cf828ce -0x5c378cc3bc5d97bae6f88124873aea5d9a4d402b4bc57875203328f3b9e13fe2 -0xc19dcabe7aaf414e1dcf1f7e4868e0208f9e719fcc19a1de7dda1c48ccfab7b0 -0xe5923245e74571a415ec1d6e94118521d059a6c62deb76d27983b8c94d46011d -0x56e70c8bce2476212ede769b716480947a5028cdd73f9d92dd855610dac98136 -0x445be2882dcab5523d7f49be7bee172ba3e05ffd3ebf44a589562fc62bc1ddbf -0x96086decf5ce8550ec901d8ba991bdebbd2d3c8be8d50a780f244cbdde97e0c9 -0xd84da3b3d8271d15937a84bf54f21b056d969e6fd512f33d3b2203a845638e94 -0xd3fc1b437e5098423829cef4377555726d14b6b9588d4fadb371c00f4a72435b -0x614ddab7c7bab596343f8b6e91058ac95f713e224a148f697136208a6083cb2e -0x3e5ad2b0828bd650dc1a3e382e00f4aed00d8fba30ac53830b7534fb930a0cbf -0x05f3f5db32df8abd1b5669f1a2ba2a37f1b57c04b5771849dfdf0d2a0f889605 -0x7955f767ed7b23d44ac95be83e1cdda29e2c8c83a97e712e9e0c49315536bb89 -0xf80759c7bfaa537538247c593eaea7b627c994681de877c5b93b8a89351b17b6 -0xe168ba4a6cff5b54a24fa627c4d6f13a7d5cc2524273fc7f5d90edff569f1b80 -0x5ad8c1b5b1941e67aa3d7c86ff1325d8cddb5168957cf8db84084d74ca22917a -0x530f80d3fa7966c62b518a2363be2c5fd84495068c02c6b610e8ae3e3a31047e -0x036b61cbcc625496eb85e24b538ef36a1d356c445a93a9c5ba9aebec064eba3f -0x5f5d741ae843f72127932f98ea33d82287892e90d0c4ec684fd50dca816e23b8 -0xe68765f479afefa8231e907712e973fb4ad9f12aa27246e9a79bbe440c8b57c6 -0xc4b97fd73c42bcc023713686926b5e87f715d5b2df07458454d6ab0a9238e7f8 -0xbe16607e65d6b098c5d8c61584846705bfd7d92c43e31c969a41653327869603 -0x45827cdf5f25963f471b516d73c9597cc6a1b3f70ff3544a1b6e22b08cf7b5e7 -0xf1e1581030dcc644f4f3e67dae1c3a96147eabd5f9512b97da9b13140ef41d29 -0x4713a887d6af63916d629112d698c70e5fb7c3ea55fb535e62447402b2d3dba9 -0xd4be3c25379f3490849bcb00194ece6ebf85b7f3376b3d490e19211114545376 -0xaf9bd608fc814310ead2e6a101f48fbf1714d1db0d241598cb9461f86b748478 -0xdb722e5d5798af834417f05d0b6e8d2c177864786791e27b54e5d78cd1bb3dda -0x00dd78bbd3156e3e3057cfaf8002869ff70d69a81845d72ed450efad6e31156a -0x45b53971e14275253a49ca882847c1ae7a48dfad7fe2691e05bd30b5e2d5f377 -0x6806939581e0dbbbefb26e5c6610865084da28029f6055274fe8af00dc9e5bdd -0x9c3470322dbf4100412f310e2fcc33f6b0d589804906f5bc38ff03f50d715975 -0xf4178ee18a3e249127dc5b22eea20ce507a9c249b244d5d20bc5f3188275ac7a -0xc0d94e84c16ce0a8f77983de1536076c9cc4d6f42f593e8906ad14487d31dd88 -0x451456eac88ba8ec1c6ee49c7bdaf8fd904dc1bc51b0c8137f4af8af7a792875 -0xc7ee6708db7517e7119444c086d7cc1828726d659dff255ab0d571c09b947617 -0x82621830ed368099cd73764322ca0132569cff4ef52ce567b0512436a0f8a901 -0xd76d936a910c2807a06c4b4e6851b92f62243f11866f8fbc80adb6f46cc5b301 -0xada524298ba8d5a81302c51a37d2d55d98fc5ba7bb4888e78bc05eab39eb2a5d -0xddea10cb31241ad7cf20e63c05ac6e42c170cadeb86b95af82e085ffe9a3ec76 -0x7c62c4dfe0c1e805583408ea1850d4462f5a9076973ddd806fdb799ac7131ee0 -0xbe876cb6c035748d2c1ab3f631945e0c884f93041c9839927891a051c641d235 -0x9a430dfcc1f23d266be6142cb0c448df6f92b3c36b6130e7615c30620c80a6f7 -0x1cc07bfd383d73df54c4cfd5217d5de14505964ece69438ae93121d74f1c7a8d -0x6f03aa1dbead3ac68d05e0cc45dab9b6a3d7703bd21f239da56ed183b404448a -0x5db01702335af5e3d42cf7fe52aa81bc8057642eb5591d51c440d2fdab6b6c8a -0x26705d9cb7c8f1ce650c03c285b465a1ef16a21c9df8dd7f1b46893d8ebbd891 -0x9b8b344d9ebc4ae6b2ac70149075d3f6751b95858ba50bd8e65602277b9e91e4 -0x41fd2a3cf3e2298135e6fd7e944f160d57ef560761219b736f5ac181b8f4a134 -0x215b2b5d29b643133eee007ed43eb59920bbf915ced345d21d9bdeaefd98ebc4 -0xa0ae5d4ba9b058ef846e246a0a27ffcec01cf3a506950c3640c3928aa02fee3d -0x4609ae4c4c8bd1d097efa6437b04f082658e70b981514007740754429e2f3678 -0xaccf6caacb037ea71d3a03350e7d52e002d33770b503419131f290483d57695b -0x0a30406b2c8330895b670816c789fc2c7598fdd95abe72bcf059cc2e41981e88 -0x7c3a00552d349fe3374a4275a77e2a762710403ea26a6cb4482e47e548a4c765 -0x9f51aa2c1061a03169353d9fd0fe1d8200fe270efafa1d992c98d8f2d73b2b6b -0x4feed7e419d42a9c9c52adeb6e98782ff29b78628c3b4c49d522d4a4959a8bf9 -0x02e2a40c5c37a4242ffe9deb382ed3752c6583f252e44ee73fccd83422308994 -0x965d53a168d2c58d5dbe147a31b7c5a785ac5775b0f06797ab994f7655f946d8 -0x8d4ed174cda556c32c748652b8146be34774f71558856f00eb9420e075e2ab02 -0xd13a614d0ea2f53e514f768074b5090d72cdd1d92aa74ce8d140c7aa711290e3 -0x3cea623dfc39256797c343c68acf8a60ccd4cc0e367337f7f533f880d4e69754 -0xe2d3140678295a32d98eb17fee51ccc39da4e8b47fd7112f1c2ddc8820d52078 -0xf968252840ba5a595430561602fc896db8c035f7e9ed7a1d53b7dda3bc0a0642 -0x77568b8815e6fb6f64ff1674769f587977761dd4b3f64d68927b6b30a309c5fb -0x48fc1130c6adf6a145f2d31c1f12c8d7a8a953674dae532ffc6c67a59ba69359 -0x242b7a75aa485d8a0d0deb25453cf1f5ac4bbab1e469808f916355255b4a2ef2 -0xf88856303d252b66a264908eaf0743ce943e853fd0571dcd4f3d0ab18cd03190 -0xd557cb80fd25cfcbc3a3613e86274dbf81141730165347ae89e0f57cd3274320 -0xb2d4ea830db17e0bb4fff652071a99ca1be536a797dae8888f960fac84bf3397 -0xe837d858f21784523b1fcd908e0de9cbb47ec452a3cb19018324aa0e2a58d2a9 -0x9b84959a8d8704b499a66ca0bcea520ebdcf14a7a69e418c3e2a2f33a6e06563 -0x5462552ab7e069b415c978a87ef5f3ec964911785371bb4021f60440501a8f0d -0x469a4ed4984c7b11b180c3678a489b56332410720180b84cae0517280a52bd33 -0x9cb2d7e4b5f9a8573b183c04240af00c807683f700196c35ee3bc123d32a72ca -0xd20799a065f690042d663324ecc508f3aeef44b8fe7b23a30ea1f873fc44ca30 -0x23ee1e8af777e3433ac240ae3f4e4a78285718bf41f255ae1f42cda6c44c8163 -0x073d3da2c2074c54278a2ea79ea439823771aa8dd10333206c04e1a96d53646a -0x0c49905e0dc1fc5ceb761275108aa67151ebd3a8d67e38e2b69b29ce42c38924 -0x354b022fa95335f5d7909cf4f67f8ceea6883100bb772a6126740bf901ca2fc0 -0x53ab1dcba0b53fc3f8e78386c4c07615cb6ab271f64d610023e770fcf7259684 -0xea0a1e28c959685bd78f8c47ae26683d8a2a77e5a2d928a20c73abbc89a54270 -0x12c08b6550938c6e86074e1d9e25c49d27c3ec1c34a8e7020869130d442c7b39 -0x05d7a604b7c05a22e8d18417d95270f4a974f538d659dfae5bad43ebe9652ee7 -0xaaf0d5799a0d2453f2a20cf8943bbb445deae23e2be16e8f2c064b2b862a6849 -0xe238b4cd34448421c8cdf5e9c0caa695ad6daa080c333f79acf3df88fd6138ba -0xbb2f179e109c9da4055ad2e410283351511e167a954e8425a421f5c20d49a272 -0x0bdcc18a8710b253f0014201174d7f0961872847cdab214bacfcf126c2154d91 -0x96077072fc87d9d4e745ea3b23313cbeb27f65dd083edba76119d7d0d470d7b6 -0x0efb574d8d186fdde88e2f8aa38ee2989a9c749af7f9c8e68763b5d36a94d7d8 -0xf111628a0a6368f240f0df6fb2340b2f8c9b1ea58b00de09390fe950b4831d10 -0x8a95ee51892c7431d1c0014ebb597caccf98ca370efaf6b5f0c391fd29f9dcea -0x194800d9dec85362d3f16f71d204ba0f5dce288bb092bf692538c8a6d53f658a -0x20e692c3b3cf3df430fa8c70a0653655ed60cb5cd9ac43117a0982b3563341fc -0x74a69ddd98ebee71de6c21332ec688039fbdec3e789fb2f7b4b01b5c4ca89394 -0x6efc567ac4f2a2ad0bd8f167b40d22c0ebff720dc2fe42a259f4fb741442e0f8 -0x2da69bbb108e44e9b18b197ef432ebe90b286db0ab5f7e3e04f3f052fde6a2d4 -0xc07166173e171eb468bc002f345202d353b7665833d29945f1d8f7cfa3b64f37 -0x9e3e1cff524b42398f4901cbf60640694b2f53116fe4f6a766d981e269a74397 -0x441373d41d1702d99ed946bae53cc4e67e8e4cbd90448d92d7df61e2c3e3cf42 -0x155d62c917e2072a877512db69994367fe66e846759c4c677e05689174aec8fa -0xb4f213306299b4f5003cf29f335697cade3b59e2de4035cd197ade12459df868 -0x4433a4f9d2058dfeb8239999a0333c877c56e506e1377efbc761c0b4b45a1c7c -0xf89c776341474fae545d643371444b5a9a9ea321150c666e3bea9bb32c611ae8 -0x8b8f1db4361704a72da50e3b64c6556d51fb927eb4107fae61a126730f96716e -0xc84abd36f98575d9f4f9485c142fcf2bec449013d07491d75e079dab1afb0cdf -0x957a4618e32305b56d8b0d80b276384f828ec2aaea929e3819921379f94dc291 -0x708c34245e46edd0de9ad52431d119794898b82ef8e649434bc93deb6c468d9b -0x525d90229ae69030977ddb4e0ea4f34985f428c430ebe65609eecf25cd85eae8 -0xbabda4a118f2100689de1c38fad6a3d38538e0cf15c89b56b1a9d24238e8b275 -0x6ae994e13abee8806e35bd0189f1e06b7d57af115c184cc18887e97d67a91e28 -0x9d842a66693590c05851f4e7f41d9d3c6f86bed558d5106456da9de4ee6fa7c0 -0x51631fa5f0b708e803ab924e51198b9f303d1a0937f4ae2483614b56d415fc92 -0x873844963425816ba5ccc6d60022e8ab82513073db7c8f59ce3c6a87b73b5496 -0xbcbae1ae85259abc9387c675c69363d689e54308359fa5282afd0f8df7cec419 -0x40a42df2f1b1c494514a9483b464ab55bb565a5de702961be7a83c5b4b0e9c44 -0x5a21462e3db06a9dc45c1aefc34e7ff2aa146370dd59cd907a2f024ef813418d -0x0edb01401168d14eeb30e51165d6b467d1b06c97d4bec031d4fd5bb5c58f74ce -0xe28d440306b4146fbe3ebf5dc7e5c90169f2ab161d148748ff27f3d484b62f6f -0x10545c48ecddc29b20517081ac4a75e99154dd3c9ea7d30dc43ecbb4ac48f81f -0x92956bc6f067514b33f63c4db3382ce6f800557e58c921f7a93660912083292b -0x37ee0302b2bb09e799e3bfaee6221866b7b427e99fa1ee50c49eedf463b0cbe8 -0xbc527e3b7a1c66987b05dc8826ea8985f384c15a90b25e068d403972c65acb58 -0x3a74986b1fd4f69b44a05fa04359b969ee49853b63bf1fc3ef855c84c77c300f -0x196b044472e6b181878fe6935fbaefe6e4c1d57028855d443e8e5718794f3304 -0xbe7295bcd64c62bd6ca33d55f579e86a756fc098e1cbb83dc7701ac6c43a8d95 -0x575e42df60f682bc72702198c76a8c15af0abbce87ef1863fd6883769c074312 -0x26d804c64902857e7b41da4ac387604ceabd7e5f30cad07357835693403a5c66 -0x9bcb846758d19e72d928a6a58012452fa5a4c405a03916e27429e2eb1436a61f -0x054efce716bf4850cc3c8fc88d77851d953119789abc3b82eb76626a81800be8 -0xdbaaa7875624034550a999312b0fe48ebd23e420bb02b5da26d62043da8eff29 -0x0af74d78dfb1cfa19471d4e44550cfe2ac2ce2492ec6ea9d37a7da21016c9e19 -0xa558d75588ad8ce5d368f4356b737736fe82e02cd7df1be9fc4e2356bab3447a -0xe8bc7a69043233eb1709cf5ba85db185edd44f561b3f6d07d19a443cdf163b33 -0x1a95cf1e9b9cb39302cf872c1c357f688c13ba3db570a12cb9a0abbf9957584c -0x1492073720f6e5ab0989e56c193b8b0417eed52f508717cb94b06ef5fd985b2f -0xae2e5ccbdcbe6488bdf05dd45c050ff133b4e2979a5ce59f650c98780d92b32f -0xb64d9dbf2069ce921b5fef46d3c4df4f42d98ab21a6a67ead11390305ee9da23 -0xbeb3369c5321faebca8aa1d7ae3d3d8a031aef34a46a574d74389032e54117a3 -0x98e13b1ef02806b3dbd08724cfd510a18a8546967058c57afeef9b0ada09fd69 -0xbb14e5330fcc68f72d0bacf4e1596cd227b696f12d97d4cf38918c0c30bd635d -0xbf412f421a307c9f831a76575e6336901643ee708dd3fb08fbdf00082f29cd32 -0xe60ae837720321b26d479d1ad96a7a6db1686754d70c1d7ada341bbffe6a28f0 -0xa2c05165c2a96239e5cfc427bd0175b4d7281a43e2740688bd3c042410851970 -0x8091a27c302eb7d9685053185dd72f4c8f8cdf33292fe039053e5e5a7362c91b -0x53788aeb1921e9560369237f2ace50ba2a4012cba58e3c6e10b4ee0a3eb72b00 -0xe197b32a2fe21f36d80a75dfa68c570b819771712a2a24ed2b2f8e50e048961f -0x70cd8124cc953645a62ac4785a0a0e9e7dc7fcc364faca6862f17dc1d4ca03a7 -0xcc97b46afcc2973fec071069cf338108729652da5bf04357d07b3172d024e82a -0x35b3b0c295baffdc3c0780cba273b1f308c2c668c50e2f03f55fd7b0aef1413c -0x666c0b29390891d7620dee9bb3565081358b6fedbb056c9fc9632db7eb60c362 -0xd0aeba318ecd5a6221448b432b52d5c1d84d323b76237766e6255ca7db1cd866 -0xf38e66d32a6e94487d465c675e9a6e231a944abb74e1a9c271700fada72e1cb2 -0x18b106768f49eebd195596d870cae77efcdb73db86c570b6692f87c7de82956e -0x75d6b215228fc13a07091fcb649976e59c260f8bf4650ba779e5c8b0be8cad23 -0x6253abc322265f4172495c3ffb0c5fee2e7652174a560c809ee70db1f6022230 -0x1d944ecfd02c857950729747ab47195d2bb15606501f97c957bfea3ef1ce1a73 -0x2a10389328ae9391e975bdfb22690cd0dbb3bee4d2835b54da75d56a3e39dd71 -0xcf65fb4f69e061b4485940726bb6c111feffc8379566e4fe571f6aed9d83d7e5 -0x385c0f3b7d7145e7f8cafb1907f87ee790b9d6c30eab9755f68289aacc41d62a -0x8954ef75a8886015f8c61cbc7f3092ee2e2644fb89881a67a251eb04479ca67f -0x82f6d364f04664591c4c865a7333c527439b5426fd76008bc29815cdb1f68002 -0xf42e8b4b38f98cd1ba886b5f6541c668a1f5e9f729229a6a0918d26d2feca82e -0x1bd043d0a2856decf3cc4729f74a9b28d938314084ea617044732773fb3fba5a -0x2af9584e353c3b3479cbe6d8f269371261f70a5e26dc1e075d9fa44f8eb4dcee -0x30af6c9b323191991ce37334cc0f37f2075c8ff18889bf3b9e9ec0d3fa549dc1 -0x46530abc3099e4d52770fddc91d6f105881d2d05e38e760f563eec3fed5fa040 -0xddc9ffaa0356b3c31dce90fb1a2b36510697fe35f9073c0fe8e529e52f4f3d7f -0x8cfa157a7b812e4d5ebd80a553a5d169d0e84b1aa514f3c22e3b2dd24b889aca -0xb366de631acc60621584baa9de48fbcc19a23f1eab28ad2dbb636c69d59532ac -0x647dc2a856bf4bccd83cef649a536424a01b93f4fa5455395b4e703784e8f1ec -0x71fef85aa5b823f27b2146c1f058ebc87b2fe3b2a761686fead7e815ec967dc0 -0xbd56682a9a3770e9a90d46b5f0d9622dced6a94f67f775ad9aa5c5866872db2d -0xf2d5ee206801d560524edc007b47a535d3d279879438587e358fdce99cdefe26 -0x4f121462867f53322dca922d458af15fa9e74c0867612aaa0d7eb06bd0f59ef1 -0xc5a962e6a49176ac132c3b6d504956d2bfd981be7038301736f38bc6ddbd99ab -0x28c9de5836311551f3a5a946c87a8a48febdd761ad230886472db2f1d3389f54 -0xee9118592ddab5d29b8107c77082e61ad8ae8de7ab71b38b7f45e34a7c8039b5 -0x51c5335e37056a5c93ade65df7f61f5ac76775d24caed07140a1daabf6d97b13 -0x812f927c4a4a513e5974f08ac27a8ed630ccf6a10aee415db0232e3db97f7ad8 -0xe62a88f41726e759071c4df5171dc1aa83ab8bcbf79c594faa2921b7cc0488c9 -0x21460af7099cd1ef2685b4c0ebb4fc7a0b75e815c0bbed36f2e39b17b19120b2 -0xe024d8eb8a40a1d41d79d25dc5bcc4e3cc562cfa71a79d0c125c498f07e48654 -0xeb82e64b4e2f8651a51c5764240b5f2c1d5fa5975775b4952d652809b4066754 -0x21b6c6ff4c8b5cd172428ea464b665fc48b7c99233df58e0ba1363d00b45c898 -0xdbf96cfc5bae35f46007849b9670e02c0bb4627381ffc883e59e586def722348 -0xd83544aa4574c3cad7efa7ba0c491420250fc3d5b85b49da9090aaa2b0ef7f55 -0x1d7da78f6823441c3e0c660925946347177b7f1f1d54f9a95538d94f8019a9dd -0xa30e0822e8dc861b5b9885e7eb23413ca7e0e8f3d21f58255f4f62ae6481304f -0xd47c43cdcfefc5657ee4a7291effbc294438b2859a7b718a8c991d3ce2676d44 -0x965e3972a8aeda54a756ad22e763415b3ba2394f18936a41c8d538b4b97f29cd -0x55888fa0a0b7a8b2676231bb8b309c3e7c3e14569b26f4a08f4a221c57d3dab5 -0xa1f4c20b9d41cec0e4e314488f4e428c73a01869cd0861d56dfbee03e8653a98 -0x32ce43ef17e660fb3339f7ee9ae0747472ad6095ffa208bf0d68f2c76739f183 -0x9901d60ec6052d3fd777803e51c62670be24cd3b786e54faef7dfd77192685a1 -0xb92385917fd2aaac10234fdd9115ecf32ca44f36dc39011e346c09865a69e277 -0x28f284fe3d4e75b917d27442bfe99982cea2415d4f29c6c544f99aabce14bba3 -0x3068d65c0a815c59b7ec99baebcf5230962d38c8fe001b116ce5743e2e475db3 -0x0a3294f0a60b3b349b56a6dac783d977bcd34927ccde52cc1982e484903a0f37 -0x8cb81ee36a06251be9a8a74c8716a6175e499f65f98240466b5cf6dcf4aae02a -0x3a06143a8cd3e6057ea0806e516e334d83e6fa380e6395c2e821269040f7fe2d -0xd525705e9864b58c319fbca5d4c9a23de50f2b8e766893bcd5e4d342d335d865 -0xd5e27e18498b17982922e8f0c80921c7a77d86a9b290505dcc38f01f9ca18bfe -0x7bf0e0e29947905630c6d67d3bc98cc8d0dc4ec8041ba6dd82c200cefa87f7c2 -0xe2f8a93b0f8403273d0c23008d88995a9866895892aeee10229f912379544f5f -0xdcbd0915610d4836c9280d050394ec4ae1b43958544c95b776d231259db81f8c -0xda654de133ecf22cf6c92a5d462bf7513e98d45d4055c86b030905508af8605d -0x2d3decf76ee79e0cf4c2ba5684cf8eb352143fbdc845f65f236dc8bad4dfbdff -0x3abacb007844159da2b06c5d2101388e66d84eb16cf3f088754d9fadb15d7013 -0x4caed5aade52510cc2e6137f086738a3ec27be981af3580a8c2494a70c7cebc3 -0xe61949136e3a1eb19fd457490f89d85592d91f0ff74bc513fabeb648ed34bb76 -0x64230e917ca9066e410903f1bbbaa259a69cad90eef0ee9d779dd3f0b3362ea4 -0x4131d7d6e918319a94af223345eeccbc0dd16cc399827ce20a867db7185fb20e -0xd075a59e78e402c9194bdf2d0b29bcf7240f39624f99fcdc43f4d9e9d69dcd21 -0xdecf7e77faea50caf5de057cc0d9372619ca6fbb90f573ba3dbdc281e923dc94 -0xfdec6d44cd0e9ae323913c1bba5f4a2031cdf48950352d7932023fb89984c070 -0xa0d3bcfc6176013c23fa6e72b7dfaa9193c4364a764b4cd9e7fc332c6355a8cb -0x02adb497feb714ff2f024bcb36d5a9a79b88e78b0bd7d32ed1598dede22287be -0x5958f4b7ce90ee6a422a432a8461fc7e28f2f9dca5cf2abc086a50ab6286dae0 -0xcc36067ebb99889f3c62635341a38134b972b707a86885d1be412476d41e679b -0x1d76d98b429447772782e4a5d6146ee1ebfae6cca8207cf868d0657b9b7008e2 -0x0a1dd7b4ead494b6010f4bb9e3a04879ca63e9280c4d050fb6b6dadc49757de6 -0x513fd0512fb758de908633d7b63d27060ae750aa8d84b20256782e39a9a3587d -0x035b063546ea1cb5f1dc33a32850978d88e8631198e3586adf4aacbbe1c63367 -0x76c4b374fc3a8271c3b1485b1961f575bc03bba6f131d47fbc94608c73d04a3d -0x71260f8cda55a44a9f7d2a49a9a48cc62de01e9cd9430283f6c6cb477bdad456 -0x98d473c94c34cfe960df5e0b9c120f47e41123435ab6dcb3be100b421af76d83 -0x51a1c27d54c60cd1caa8b423c3e565af149f1abe7c8535f14ae039d3c2fed518 -0x2b8ec4b3e6d2015b0c626a1e4e8eb05890a6cfe65de8c8b8f84c6474561bfa45 -0x628ec89c575a956aefab4955fb42da5549b755273ee535f3fe171b0d971583cb -0x1cc32f1a27071e2bb94eac7970c4b0d7bf14f0005b21ff3a2f20173db6caf18e -0xf47ed190c422cdd1d54595d76df3e2958a8a2485760c175e245243d29deb764c -0xea3a5a0940c6062c4c8303d54f379e27308314745189e9c8ce0cbdad9aeaba72 -0xd3ee707779571601fe751a089d096e84f274bfb84249b8c4cf8002b8bc25459f -0x545669125e0426e31ee642327aa9b588f77631ac45f3b3841837f395fae0604b -0xb7e664cb09ab5777cbc9bc00b46f7d4d8a291b70b9353a28f025dc502fdc2d39 -0xf7ace4514d397f3d7145a5972e7cb995b11d0e233e2632d24a54cd26e2df2a57 -0xa390e1eff52e46f0973e29a258f58b05d2f9996d2b91ed6e068af32e449e8b93 -0x06d86627993362851ac0e9d1b1ceac6a032141b40d3d490e502edd7356ec34a1 -0x34d0e2444ce2863f3a692cd80143473c679bccc5636d307b02154f9189b01706 -0x963a4cc84eca75eeaf92e0b21347e7b8f27b05603988789bf0608eb788c1ea37 -0x0827d1faef2e2506f597bee244a8f8a3d4d7c0d52c2b99cbf00c6837cbad5487 -0xd48dffb703a2d92d01dc2441a81836a9f7fa03d5a0f9678e08389547d429fdba -0x98fbb4fabdd37de2bd4127657a84bccd643914591b3d0fa6ca7882dc4a26f80e -0x84387157947bfa609b93c67851b1c1ebdec63734bb212109044ee81cf14b2ec3 -0x0c0edfeda95e1025facd1b61f57e7fa89252c33757c7d2ab572b430221508e29 -0xa71e9f8484d128ec183d547cdc803d70f2fb4b9bd3f5bb8ee17db941f0c87a10 -0xc6877febe22ba68d45dbaf9daa6b28bca322e2bdb0824e5210ddb567c579c961 -0xdeaee27aa64c206317fad24b21a96ca791bbad67345e968bf03f110afaae0db5 -0x664b1cd8f0ae85df0245e2024358c241bd3f94b47700de9d2db18535be3626e1 -0x4509888ae6c07ee582619800166a92eb00a4cd112f11086e3b5db5a26081d404 -0xec27410b3a2e5cd3ed72b37037d8565b19c18746dc8773bae925648a9f0be576 -0x482ca71bc182226a071d081b055addf8eb94f8b95bc2fa6b90de21130a41d9f1 -0x83d00122fe6717b13b1d5be83aedfd218eb572917899455a55db31f8eb535340 -0x966a7972449b40ce5c22830696b567ccc78cd68ae6170839efe670e1d7020200 -0xf78bae9084cc41a7d0cc3a4cffe5e8c7b7597bd096584e7a472bdd1e44e46b79 -0xdab46924f9aa3e3abcc051a35197335512978458c54cca1b9b7d0de8043dc882 -0xb90d092588236b25091c350df6324fcdbb347ced984c399d2ff1515e6de6ae8d -0xad4917d07f28f39738edac74295a54e9bff1230e38b0bbf9734dbe3c02e9204c -0xe682699f3ed53b0db44d46896f605bf905b5a59eb585efe752c7c97bf51ff356 -0x82ec4c7ee30b11fb4c374af9121cc9a5a2eaadcc5bbfa763ba4ecb957800262f -0x9ec26812778405aab6de3c45bfdb48d1379feabebec46421e01194ab56e1bb30 -0xce73f6b43ba74f4b9ddb34dea711d8b2cfda36a7cb4f8292565ea50e82d9a3b8 -0x55d5957640e79103a8369ff1a6d3ef27920fc95b26bbe988676eb537ab095b2e -0xcce523a593992e6a34eefd930175bb839c19c4bd1ac7a132bdc912796f3055e9 -0xf6a7497a5a6254e05ebfbb52ae4585cd3eaa1802f595eba1b343cd728f487b05 -0xd7614542967203f1b70fee1d23e99c2a88cf2eea9673493bce48807ef02b490b -0xce6fb711b7f8782f27f5393f6e1c2c0244c2b15c28a2f78d65a9bd49b006441c -0x1580f7bdf25503d37c19c5f48b85bd2496b2738d905b9d6166c9ab7066fbcded -0xc243dd287f793c33a1e47cadf20b0275e8272ca641cb89908a3d7ee198cb9326 -0x5e3b3d8678e2dfc3bb950550c8c12324f7e3e69e77affc446532ae5633aa300e -0x30892e9dfb58ae23bb1f5f8fb9d2294804162697ff48e1b1a804461325b8ff2b -0x7be69db4bc9b3fa28d20eaffe7cc601925c8e9cfa36a9be4667d19a0270154da -0x88855aa69d7e72ff69cfbce66cc46b8c4fd146e7d42b2920ec87b8f378f8e349 -0xa52757fe8acfcc3def6fec8d40444b6700b857a316cdb0dede589559aaf71dfb -0x87ef66a1e97697f26e8d317b6e7d3fd40038b1c84d0dbd6c1cef384722d71d87 -0x9165f0f35a1ba916239ad1765c834d0ab423cf859719a760f529c4aa86d2adea -0x6afc5ab2363f298722cb423057160e002d5a4b0feda159b6c7aa3289f84b22ca -0x2a71bb2a32ef5f4e47219cdb42873e2fab57e4acf68caa8fedf0348d1623e182 -0xebba1cd0d7901bcaff72bda464f1c941e85462c933284019d6e34c9d5a1862ce -0x128f26d874034d4bc6276017f74843f0441c92018b66341dadf6e2e60990a9e8 -0x28bbe4b9b6361da6729ff2b0fd2661f7e9757862bf120093ba7e8563e23e1f20 -0x5b7c27e1cc601168109017fcd208f97866f516d64a5bdb8fa0da5015f3a99054 -0x74d595cc9f251a5c2367d702a1c216987370473f9ca5475576c9ac326c537513 -0xbd8ebb75ef86bda3cd33c6a82794b47fc7fe0828fe0108cf3e50edebe5b152f4 -0x542b7df419ba6739651497cbdacead40c3b99a984ef884d0d39693595756fbd4 -0x780eb8da3ce0880f87fd17a56519b076ef2985afae1dcbf2612c4b643fb8de69 -0x95af6050ca00fb147e0e245da6ba09b8bc2511e7c4ec1b072cc18e493f3174c3 -0xbe61d70597c0cea08508d7fed0b0e30ae3868f07998b1eabba4093be25e16363 -0x9a68f2b3259d9ad5d38efb5423fd5d5701213c68d822da0dd4aae3082c5e8c4f -0x156776a23c279e9e7c39762d5d07d21bc4617ea9ee841f080d446fc761c48b4a -0xd787ea831449eebbf0c12b7c09918c8a5f57969ec6d9c1592731d77e0951abd6 -0x4fe30152868a12fef8749768ee9b22e907429e132af3696033e55cc528e03db9 -0xa6528653a2c0ba631f0b1732a550c93206902a3a0fa707123fceec54edb66d0a -0xa2308efa904282b8041328710bf8c993f9f13be125eee4d467296dc3df9043fe -0x76e0917fab79a762b1e15f42cac0df598679fcfabc6cb86d87d4c281e244fd1e -0x7c35a1059b7204acf4d4b1818b29020daf29fb1f9d461fb98149bb7afc7aca47 -0x84d2e1edbb02d937b809f0b8e81395f06a469ed8599c6b7aecc2688336cc9af2 -0xcb2cf8ea18876bac1bf6d3626ce417e4db18f313e6c75aa525b201f7173cb981 -0x6c29df62113b22dcd208287d9a75c015e80092a8a09ba47fe5a9f41aae85c848 -0xd465e0eae8537d6467c16c6fa64c19018fcb464c578b3312e963677e4276fc24 -0xa059a4d80d7a382b52a7668ee1146c89737c0fae23189bc4e09b1cd75e79544d -0x498eb41114c81e8f86d20b1716bbc0a8a5671da9152aa95ef0ccbef74d19bca9 -0x13fd44403e3f69ea534fab789101ba0f61b75b4bd8b1b40e9cfca325c252f0c5 -0x1169c9e1d983fa58532fd4d0e06abfdbd16c79bd8708cecfbf6a602dab32a865 -0x9d06d0a669814a1e16404bec74817c4c08a37176c1b19abc3a901b8c785386fb -0x88c7791f74d4444c806b0ea502f2c462a14f7a13a7746e20f2a99f32ffa712ed -0x039421a7042c9ca68c36146f5ef39088796db6c5a00a6ba67dbcef68115fa91d -0xf87cc343069720cbe2ad7022a7db26ff714f29856bf6c8062b7f3c73cf47e48b -0xab56d9e0f56b0ccda8bd3edf9544f006d8cd817fde9a963efae5101092fd63ea -0xdca234f185ee3643543f970c61e1feaa7cbbf6f7ebd82fd191b0bbf91c2c486f -0xa6098314e020f6935b9a60d0b54685a71ed3edced9240e3a4afa34d9ce987214 -0x9ec6a8baea5e2fa3207f6a0b810a5427071b5374f1215b3d18ac8cfeabb3af1b -0xca3bc1eddec2f38e1db5cc4cb39f0cf6c4e981a8a77621205d396427ef20e104 -0x6765c36998cb42b761178ab2b33f7d89184bf9e987bc9dce98e8b4a5765a49ac -0xf73afbcc7d36fe7a9cc0f9cbc54a2afda22b9fb291f2ed279f3624b66bfb1a92 -0x7967bb7ccc66461b70ddb587a7ffe06eb7c1b411e474e2dfc3301f4bebb7d6ff -0xbad942c936ba3c31f7664896f4e7bb6c8edd49ea2389f3cefad7d852e4d9fe70 -0xf86898c8f9e8ada52a9e8943a1b33b4fbb12ba257a8f5c92bb54b0d5a21b502c -0x5ffb2ef96a600560b34195b09da4fbbef5276601cabe236b4f8ebb2878c4d699 -0x8b207e7feccdc3a4ab00697aa9c5c8673b41d529f31db72e0d18133bc97453ab -0xde056e6ac1c4b34e4decf4ef4ea37449f1e408dc052e4fd3ddfef270afd95220 -0x717e16d3cad921006a25ea725852d0ca175058913cffdbb22b49a64fb24cc7b9 -0x5105b526d0054c8d1c528a0ca8bc6dc5ffa1a630555ae49c6e9ec1f21d132af0 -0x1fa2b6f658e57970f40c69881adea198e086fcaaafaee873638602444b6d40b1 -0x87a8e29bef8c94f9033de9d89e64132e7392fde47672489f6376ad539413b05e -0x8ba5933356fc171b338094816fb8a6135b8052cd3018032e61d1d0f69929bca3 -0xc28726550a40ec22b513628388289c8c4b008bb7d3fb3982579971e69a2d048c -0x3c19d16b6ca6a84cb640d73b9c8a79bb01ef06ac3fbb91e646d6e5cb43a2afed -0x29659c03990d5e6832e074200566167a9913b8671ade0c2a5ca2c5577c8b893f -0xbd96730b3fd2b81e8aca61f6290ba89277579c997784622bed5af0b636e0cd49 -0x3dfa351c7661790c832e992bbe4304548f06f29d033b1143878f85c007aaa60b -0x4008e63c5b99a82ee8224d7d9904b25ea38f643f92a4e7d147d8864c15d43295 -0xb1dc573a712d904b659f6449174a3458a3b78692c0e0b35fc34ca1d9a2152665 -0x77026cc939eb2fc885a8a9b3993f94097aaf8e11dd43bbd622e50d75aae2d5fc -0x8354d3285d8226bb888488f61bb27945ef88ac6924078d7e0eb41fea3a7f16c2 -0xb1e59aa2cab930723e523595f8e389636beedd70948a3988db02ffae987f2a9c -0xcb758d93ba76020d39400f113b1b7f191a33f3029cd29eb07202a8637c71288d -0x73a7d4fba5df6d5ed293fc4461e95aaaa02e2b1eb927bcf42bd4e65831372d69 -0xcfd9a3c4773bf969d9bdcb9ca8c9d3e01c2ab9daebf680c63e300a5cdda0cdae -0x837168628230ddd2a308adfd852f9328b5ae4ff5cd7349aeeea62b06569ecfef -0x712692b4c4234c3fd9514f63fe52d2fe2e5b05a65c4c3e41cadba512e85144fb -0xe7609102d9006cd5b99c61e8ceecd7b947037531446537181a64a4d973a6aae1 -0xe576736958949b0d2b6b5a808a2ff6a9285d1b80049b55f25119c7a173ba5106 -0x3a97b780815640e8f9569cea67bc7a7537257440d6458cc29984a4a493770c8e -0xa43a53495b075e5fa52f330bcfeb90a71eab7b5991865a9f04a12da58c645fa5 -0x5865f438ad5c037ad489b84880b332df4ad659aae6403fea5508db561c070d79 -0x7ea8481941689aa569c5a225b4ced64c98033ba1eff4cecf77a0ac9d3985f8e3 -0x9126f9c71ab1022a3353a003c190bd30a1fd2782667193ba5f23030383f43061 -0xf1a9318bdf0dd700cfccb3cdc207fd6996f771b76d0925505c45b11e6f1680c3 -0xaf4e1b8dec350214be8f2534b713decdfdd7c718b562d861c09fc9a996211b02 -0x9a011e269ea19694c350c7d6b54f47ad72a274c951f4aae51a0af1b282acf8a9 -0xffaa2e3e032d872609a96ef502736f9aa7e3e2f9eed4146e2473884f262684eb -0x2f7b7b8987a27fffa14431e5496c00b2c1a9bfeb7f2dbf9c790dcb79b0833b6f -0x62c8c412ebfac5e62f8e42472e7a4bb409437e7a9bac405871d12b9ad5fbef3d -0xe5686ee8d6ce791b27fdfb65f4ec3ecd45d147b35a23dd52cd43ec941e4e3c4d -0x37aab297aca40af0dde010106a44e81d58ce042ef5e29ed3d44590acc279d186 -0xa6afa09c7408485f5c1cd0408658bb8c2a069ed18687109e76e9df10fc289cd7 -0xdb29a1b5991a0df795e9a094bb15237bd1b7955207e8475a46e5097392d70946 -0x899d8eed44f1b0f9d0e883d39de3245e1a6b26bd7dc1a59133c0835fed33e915 -0x41928bec8b396082b0bb6dadc17409b3e7fd0b3fa54da044744f66949839bd7b -0x16e80e9381eb423736d41908286aadf335dd6141730e378ca15538f59ad562e6 -0x99ca5d00f06df9a2783fb4c2e06e3a950607dfbbca1e8f5703f5099b690e5fde -0x41bfcf96b96dde4b963920582ed6f1ed8abfa97d59ae26e3ae1ce235caec6b99 -0x21c98d01dad8d47517e5e41b86a887e3a4dcc9d538e2239e4f0b6b1cabc8cf6d -0x6170b06dbfc3e49eeb287cc4816a81ae6757f130e9f7944292031cac6cb54e4b -0xccc5182c4f8905f0a56748030ff930fbca486763c8f3599a74aa7ea42221c9e2 -0x0aa5e7b3597f0aab75e57f2b8b210e75c583c055a6a54d2e9c294a85881e5a7d -0xb29e33c07cf738f6cc6c69a7c420893a0896d3e7e2ee793e37bfc38bfe5a0272 -0x39421f6a1e6df2119a42903d82a0156e37b0f861f3feca2e04d15a9c93ddad92 -0x0ca78635150ae9261631b2893a20c38726584f5568026132c1e6222f88a055dc -0x6ac42b96f84fe7551b0741ee025c099e5a3a8402a5be373564fafa3927b273e9 -0x63fea2f00c26511cc7fb26f2a0eb5203fde6df403028caa8fb62052e270acfe7 -0xfbc7da6debc200db855b6483ec2d79da5a6535e510d2c6d5e850023124f92020 -0x7dfd0b6e03369c4ad0af28832551f50c839adc7d6564d6f2969adbd8385b47ea -0x2aab4b71b925feff6b1e2975e5f5d2c7014748dd3b0197cdd8dd60807d9c0f54 -0xf615a748f9b1d6ca03d341ba8b03d61f84e167841744d45395b9189ced1ef5e7 -0x25f9545484c62d7b177669bc84dd4949e6252412829193e350373f43fd40f56f -0x27f32b85580f2f419d1afc11d29975854b835649c5281c1b91742bc7c77069ea -0x8a065f5cc3d77c214989ac9f176490efc10fb09b19623b5b76ab30106ba10679 -0xfbc78455f77a59ce5034fb3f1e71bb324feec174fa229f362d18c7a1a1371619 -0xb9d4515014ea613c9ca156b48beae5a1dbce13281b63a59156c3735560ef8a05 -0x3bbe6f43cb6724fb353967bfbbc15efda3f0599b646263a69a616282fedfbee7 -0xb0b92b8d550d0b50896c4baccd8f7d162bd46d91144a7505d8f4bfd887e32064 -0x3edbdb683f36cb757858fa8eee000dd390d99f56b020912f802b0f15a6219e90 -0xc9d736eaa7a8ca3ff18f840155619d7d78a0019d678d0ca8c2b77b406fd3b174 -0x0103fcce8b45f85c9462d9099e5ea4a93fb00bf50cfcd806827ce0407cb87b49 -0x106a7bc5b61ec4e6aa30662a69126b814daf7204ffc4a9056d56faf28745db08 -0x1b92a63864a9383e197f59abedfd759193799f6a56d847dc6b1dd2279b43b4a6 -0xefad313da91dae127d312ce49236015a927a03cc1edcae62396f9514886fbc58 -0xa206ed8d7a093c9e27bee8088b41b9ae35dd59c2f6861c2d0c12737877739c44 -0x8b7f3536f529b11c7fe5da2ca2b6c75f5e100ba2da519007e8ff76cae7058e60 -0x383c5248758610fb3fe54e7d6bde679e3948ee2d640217b7bf2f0ec7c3ecfd4f -0xc28b0f034c5275a8391374d3c51a3cdc2b01305bb11a3f46f5fed6b1f021b5e3 -0x1e2b46a75346db375d328e4bfc22943933e160363511e67f09380117f6765672 -0x64b2108bd5c6efa31f8e1082b92b63c43a93cc62306a0835e2abb6f00482d57a -0x52c5163bcc67645deb6b3a3bbb51ac32f44a8523d42f9ee482bacd9efdb83329 -0xc764a31032c557af14169ec0f718e08cda3b063e64568e55b87f9234f346fcdc -0x96b7cdc813232b52b9660f6976f326bf232fae1e79f5efaaace7e2398c340ba0 -0x2bf7a5bb940c03c6fa07ee0d0d7ce4bac0dfece4d4bfc3fd2b28709ce86fd0d4 -0x316b7006adb53df7ad00dc6bda07f83d9c67356d74d92bcc2355c6d6f82f70d9 -0x1555e106e55172253fcc48be1570c56d2f96a6ebb8a46feb479cd6fdbf14a16a -0xbe9d791ce71efe27b5de24a0a2a9e59ca9b3345e5e549231c9798834bdc5824a -0xd5878fd80f9dece1e3a2da3ff51548b0260dc283ea9f4ff5bf59c3ed8f5d9b18 -0x0a90cb9a247e6d62ecabae631bb480b3bb1f43eb9d850e9e67e99dcbc265318d -0xfb6e48214627e99a0a39abcabf94c84c463e4014f957501701ef3b112da04a4b -0xd4758dc44812c7d36b8c31407a21508f44d650158378b936dc30c7c0d74f51d5 -0x47cf999da8d1045d62cbdd0e71bf64bfec977bfbd313085d0e2f51ebfd61cc38 -0xbabaf09c597aa48733942d03dccd7670a98888c5125a430222f76a839c2dc767 -0xd93bfdb5cca06d383d23433fd8e109ca77f5a08214bf187e771d1c34173ae80c -0x7bbde64c8ef9a667dfa0a3bded4247c36fe356b497b245d3f2208a7537caddde -0x0c391680b4f6e1b84e3b8f3a92787e28afa8182c6f31993afe61e1ffb3011b19 -0xdd44d054ee67096af59935b9931d83c20b50ccf0da740b0089c1b727ccf95129 -0x0b71bc00a7a7b455c4ebfa065741d9b29ec3d0aa02cab05aad1682d2ffc02756 -0x83e684c2c3f400f9db77fbe8452dfc83f2e5b6c23b9cbaccaf9518150afa5df3 -0xfd1ca83d3c71a8aeb1bf9d0d5598605676ca9cfab8e89ac6fa377e1a63e8d93c -0x642abb8598f63e250872283a52e91cf4d5d37ce975f70f2856cc3be856860d6f -0x46915fe7de8a693ddc883402f4194b50e92f9e3dda7183c11853498125005abe -0x6a1a3f07de3c21449ccdc8411464895516bf2c58ad94211180b612fb7bf6156e -0xfd95cba3e711a7f6b9ce7485f3930a3679052191c26fb9d8a097d2c1df9d68d1 -0x1866cd4d31252c8b08f3a7bd98384c2cc88b52af3ab6c3155791c8ba726ac713 -0xff6182aae037bb9e9cca20e885ca001e5e09708d94538e49e845d6ded890e3d2 -0x51494b5d017da8b97f9dc40e11436e045cb84461e4efde2012b724c984dfb74c -0xc910da6d35a0372fa604445cdaf667bcf3ebd7a0f184c5e1f3c2fa0ddae37e77 -0xa141576c46c4342d38acf31ed1694f820534a4107e1cd60b68d600f16a9f1072 -0x8f4ec4487e64c94890ea0d749f62e02ceb0f86e16beac14bb207239cd5bdfd2d -0xaf6e4ce6eb00a1b3baa2ef33a473a2a5746149b7a17f8184d1262139ce532ca1 -0x740c17a92cf157e50df208f03c4f6b59790918aaee2799724bf20f89bbfa0294 -0x533b2b73e2e02912ced6f149cf48f28fd8a1a9b8fff41a86c2603010a339bb05 -0xca14a35d37806d2413c6ab62fcf700f7139f903a57672d082a44214653930b8b -0x17e1ff4a1050e762d65c5e4139ca00eab04dab943a583ee9f805574b7ec346e8 -0xe5b8549a751fc85cb861fe31c701981a7a478dfaf5a4e22b180a28dd15b48d5b -0xf208c37d681316601caec8688d859769fc8fdbdf37383e06a22cbd29c0af4c9d -0xbd98f4949d1bde425171e66779c907e58f9ea14d6ba9bdcbf8fbbfb4167fa1a7 -0x250dbc46cac93813d5832194ca07ac7fd424437726631271dab11548af61721f -0xb9c2fe9703f64a8dd5f37a364e787a56b5c1e48787e8bc59814b9d577765b053 -0x7281e8badd33c7c8470e961b2458a1e6baf6d5de8c89f02bd73b86d2f1d132c2 -0xb64e06701d00ab34bf634c6c60b2c626db6607be0d75f3167f086c89d04a7c3f -0xb461868296389fbe5f13e4a6bb194f6d0970d43006374261e612dd78fff57100 -0xddb56dec7379f8002a7de59530067dfd61e5752a3b993b23d03e0898207a4bd8 -0xdaba2cbfb553946756e6fe738073a1e4098d5e74d55519fa5b8e202783418499 -0xa9ee1121b1daa75b1fb8c0eb108ea700719f4769705e9671f99ae790dea8c43f -0x6066705c1abaf77e1f2431f81b9c5ef5a5e2eaa5f4b0dc5257e7815ecc9d9c1a -0xdd8f52c5eb098d100f8040a447ccb13411ee375252843995579842aa94b1e735 -0x774aa5eb845d185d398c8b9f0ec0cefd099a2271b16aaddc0904c9d6afcf53f5 -0xd3d2a284e2dbe5c86c61c27e83b89d659d9149821c904fa2177325e6cb0a2a97 -0x9ca9a2804783f13e9ce0a6d944718343b76a3a5e203bf354b907923aa959227c -0x9b226f8167af27367822c855ded285bc508b7e22d856e3230b6a6bbf414f6fba -0x8ab3756e74e1db3fc4f017461b2fb9f04a18e63c0161f9f704ab2618dc623e71 -0x9d575f20f1c8bc37b0a56095b7fc580bd7e4b2398ea1a6b900b1346146487e1e -0x8bc7a2f2d4634495cba0c7b3783330d2bd125334f6ec048fe0fa511df9c6eabd -0xcff32726267ee4046603aab79c0c3c45a78d5da36a780e13e608ecc87f630ce9 -0x4f86f048283b6fcbbe9419f685d94c6bb486f54ce077e26257abc6b8854b54bb -0x73e3738bbbe41c73b31d164c3afb4a647327e03f6ec5541a1a0301a9e38b91bd -0x8c1a27a69c699bc9d6e8315788e259622b03adddc21067b8a795278f299e83b5 -0x862b23bedf1bbd4bdb2c9282c5f7ad869fe3275d8ea696aef182ed4207e32088 -0xf020d711f383e87368be1b99384170975c0b6deebb467dc27edc79e80f032682 -0xc302c421e72d6f603714a1820140c7b6569ca8db488e7d3ce6685fcd769ba780 -0xab9d3fe2c5a8dd54b030ef26a6846b9707c56bb6e8f9c63a9ab9356bf09de433 -0xb126ae887f3e59f1a82ceb8c03834991bb87e1b3843b30176d900ed8dbfbcfb3 -0xe976d2b2f154a1c09539d934ed155fa60c2da43dfe613beeb3f625192e6a259b -0x0aa7ff9a17b5bce6bff2227621c4e9c8051d35c96d139ad7ad80b4d410c43e0f -0xe55148e1e95216bd1e550a22dc1fc0cd7e2c9630a5cc76658de477dbf34b6bcc -0xb1c1b493ee81f6499ccbaffc78f435b7b4ea789bcb3e2e4a4955aba6c3b6fe49 -0x1a5b5c928ba11783f9b2d8929461f6c3fd977530bc2383331241e142c138f2d7 -0xbfa0f77bee9781e9669cbc6b87ebd04148e6899820f843786f3785c86a20b576 -0xb4322de16b03487d103da8a53bfbec6f145825a656c252bd2c0bb5807891143e -0xb3f2f9fa8066bff185d0a03a8e222592a91e55ac90740808a3f0d5b41462e329 -0x704cbc8c7212390d511e8ea827b547fb11edc0f9fa19d91c8507ef015393d3e1 -0x2e36545ea98e67a392aa04b777184155e30d6cc1d259733b1e3ffc24037f6904 -0xdc7297c3d99e2c9b495360b52b5bc3fc6b1d28084e2c0200cca8c4668f220695 -0x75b4f14f57cc59820a4554b97765a5924f79961b92fd0b7bfaed44b60b5679ee -0x17323c10cbd1a1ef785541988fcdb9871b21dcae07bdfbce3519170264be31bf -0x94381dec0cbe816b65e154ca0a6fd81ad8cc11027fb1f43b33edff4fff79fb54 -0xda2faceb566bfe5345a9b79cbfc42b14867904849aa8d9cd2c1f969586643a0e -0x4ac3c7942e5dc4add226fc97adeb34ee5dbce68039f26549dafa806969faa67d -0xce3039ef6f66c26358b79afb2efeb05cb6f1c07802d49f533f32a87ec5efca2c -0x42db32417acdc630622574936d7de308d7bdb0d0640fff535b9b19bbfacb58a2 -0x8cb1c3fe76e4b29d25c15ef4cf524cb8dac4f3009519883abbbb3ff499fe47f6 -0xcc515e41739618425dbc7d1fb11434cf2de5f05bd5eab4c8a4def0ae2066b06a -0x2cf53a761e954bc1fcc04d856fe0fe485e8f7f99425cc74f84f14d5823f47317 -0xa1192f37b9b83ab322a3e80eebb0e32fbdbc85c604af1e669421889888d1d936 -0x5c856009a09be5b7fb5daa1657256d0d11be258ef943e727badd5f5d7d741636 -0x1fdfff0cc67281a2a4c71b059e6d0dc5766f26dc9a3678e409e80f49cf15defd -0x1d03cba7a3ecb653e17800b200b3801c83d4d256ac1e52a0351b43d3897e5820 -0x24cabb918826ca34d9114ade07de8b8ea064b15c7a5d1aa6fd9f04a3e23805dd -0xf0bf3b33f5582f56db8b8fe3fd31446ca8fc50f55986ccae36fc61ddf1fdf6a5 -0xdef2a34dbb77e97d665c21d7eef5d1eebefd76da305805a322d8bdf4d0e04b52 -0x85555ce582c5ea288ac9351f7d9366e38ed0cc83c34d78d73243e695710552ff -0x9c11915d515509d3251e3993f66847e9903a61dd3cc7e58c3d21078d9b2d15c0 -0xd6947dbc8fa33dd8baafdc68e8946aecbc0b724f68ab2754204b5ba825e070e5 -0xa3ba842cc72edba0494b49d83779fd458582564b4069761004df09bdc0b59c42 -0xc01be34d82a59e59e42eaadd14542ae28248c37fa812705e79dd64d8b651e01f -0x3756d97ee5b8a0f5d23b3236072c53a36d6aeb28bca06f469dbba94a4cf0520a -0x0921791324ade7560dbeb1d27b14358326dafa84edc0787ff9141e71ab351e42 -0xab521f38479490bb5f027f8426aab0f08f83ace36ad8901577716fd97f3772c4 -0xd11b5fedcef8ef9f4e29f09f5e6c38e3de7e99dd41f9876c12106cecb8177500 -0xb8d642f2bfdcb56ba2ccfdf53c3824e313414cd36cd8eb67926d5c727684bc93 -0xade8d4be9957bdc2e3c590c740cfe17160ea2e53045b1a16836c8f6bd2976402 -0x115ae62bd67680811b47dddeb551ae68de2e07caed411c0e0ce0352d1fc3b7c4 -0x327704d887fd4d89907db55146d69f299df972882ce1d966c7127b341f02e8fa -0x8ddcfd5db148fd9f5e1d19b6792ff6ed56c0d1c8a1b30b53d05a786d55cd9337 -0xbdb625ff46c9064bffd85061f4d912e382af988b4924c011e922c4e6991682c4 -0x9c17f9374dc37a89aede105a95f311f932deefb1e96a07eb49d1d23bc5291406 -0x31e7beeabc7fd5c0b4dbec039ce8a21524cbf2055c6afb1ba264bce341a2597a -0x7f0d0dd2c22e9825e64a5e7a29ff65c130d19045eae2d50fd7cec1ba9b7072ef -0xfef8ef8d699cfd9aa22c48023f821bfb47ff2d07e332cdf5a6047df91abcec4c -0x429e8b65167f18e3d3dca62b8e386428b160d987250fb048db282a4bedfe277a -0x31f9c177d8c7d937f84f90354fc4f2a2a80925d3dfccdfa08161da26811d9d6c -0x0391fe03f0514ac2a01abf7de85447ee1aea8c09cce07830a7a169e9d7d1d165 -0xf83e3f4769528dd589a0a92e53d46a9b2328fb13812eb91b07e16af0b6a9ba29 -0xfc3378a64563f9ec6bcf690c60fa28afd38df9fde4c75f141acdb98fd975b9c0 -0x162df4761e47eaeea92abde5e816091c61c8e855815e3f6ae9b95ce67cd70cc2 -0x7989e7ab964537eae939ae01dddd2ce99b5f7119f2941d5ce66ff0211e0c5c17 -0x591841558c403355b1b778030b30d20f8778f19508c7f8df48b73b27de471de9 -0x9e897439a25f625c092eb6f8b6258391810c34214e75ee5cca73180e826c693b -0xece0159760ac2b0d85b8a3f395efedb5ffed90bc9a8849ff600dada1df243866 -0x2166132d87aa16d49bc93c3e3898b7ec442875b90c0bdddae2de6c50ea9e8289 -0x5f81727fb3b67b750f528585ae58e79207ec85fb929a60aa23fb32c3efd09f9b -0xcde2fc608f918a6a3a228e139a302d2306cb19e400f0f7bfa589d2b9567440d8 -0xa3b396eceb4b5be3cafd9a3e8de75e70e08a7bc2cf9d17b1e865ebb2ebd5b9f8 -0x1a940d0f66dc55412ddbcfdd205e43fe2ae9dcbf469f5ffd9c5d92b4137452e7 -0x64f91c22fa6752c6491cd89d8e8440b52603aef82bba894985a247c95a761175 -0xaaeb34d3053c283829840edf9003abc162cd7128be1554f5e6e4d64a3d6baee4 -0x6cc80d2b490e6b3901892661a492837fde2f4244376d7e6bb43eb7538b09e840 -0x43a8e7d5288a3732ae4261083b708e78a2d3b305a99558b84e4ad127a2da0f97 -0x80065c496e9ab3001745d08db8bbf7d737c17824715b7c7562b499baae5a8d35 -0xce3645f8c83439e71b2eb807d811acc4dd47ed6b8463bbf4ea646b5458fd44d6 -0xac5a84ac1f34c406ae60ffe0ba7634c6f9fe3b83cf341cde2120eb8be3ea23a2 -0x90247a15844a1f8dc2a03a9dd5064189eb08cd22b3969c193cdb15cb75e20157 -0x6f56ca51c0afcf81b943d45e5835e5f0a950613ef1ea2f750b1aa8e4dddba167 -0x899740c85e06a7285c7b002315c13256ce55b5f3969022ef034f82ec2886bee8 -0xd89e14453288db92104905246d08b5cedcffcefc9201a1f248a40be3531d4a7a -0x71b4bf7e04e826ee9c27ad65e49fcb6dcbeb7a5343658d8f4acabbe4f76eaedd -0xd37eb0367c0fc88fee5a0b38f82aae0a9cce8952d481a458f87eb64617c07540 -0x25dfc5dc797997b40d9e7875c476dc736cd54dab6db7e900b7d3dfba9faa9c2e -0xbe7ae9cc46d3dc13eba65f0310e0e00483ebe9344e7d11cec27f3f6263885bbc -0xd8b75834ff18e6f922baf57dfbeba81d0d0b21c294c41584455d40790762d653 -0x468e5ca9e364c6f1f048de40aa581bf3a5de118431e201afd1655e0b4bac5b77 -0x093b0bb815611360352a2678827b1bba0db749ed586df9e21735b38494d142bb -0x0603a667dfd20f2dfdb731518f51a09c2fd768f3176d152572bbda54ecad08e4 -0xb692115bd68a465cdef5308304d60dcc27e3437f8de64355b4ac486f0334de88 -0xf1fda13dd0ab26c514d601ac5bd51d235bc6a167cdcaa3762d4d059b2f96cf13 -0xb196bec14892de44817d86adf74cae69307e45b8b2e7d00074a183ad199e5c70 -0x05faec858c565aa75b8b598ca59f664888160adf4eedc3bb8fd836a28f73969c -0x843278b674758ed693e93d9ee0d0bb7558e3b0d0c4b1113ee519636c4291859e -0xa4262a0c3dba69c86b7f4f6bf5edcc5b96dc800d64d30b443d1d1d7e5a4acc14 -0x5dee0f9df41ec4c265a704fa0c4525cef2e8fcb7f14280468d5bf901e195a98a -0xeee5bceb55dd7c94a32a7e1e36b846d48254513b341d46c66e37125ec9dca9c0 -0x9529f99b1562892005d1e3c2cf28a7646f4790ca567ed883cfe9ead63d5fbb83 -0x024a55f809dbb911d48cca7b204fb5d37b4f7e700a14e7fc3dbce9ca1ade6ea6 -0x413dc2dd61bfebb28c72a35f0966492d96443906d0411bb7b722fdf42532133d -0x698dd79bf2f7b5006c8ad7b899b399480cf668ed45ba995738cdffcd9b5a6988 -0x1aa18a39ba8800b8f9ce87e6e1e1d1c9397d19925875cb7e454edfe75e9e9661 -0x5df4ea958adce650341edb25f64880b1849d3951a4357bc0e330ed236cc64008 -0xd60e1e983f4dbc9f7181612e844a019df109116a8d26c1025ca981e6c1ed7bf5 -0x3001f67c0b81d9b6a1dab3f8012afc67feb39a3bc13b5a2085a4ce52314241c7 -0xa582c005b59f1bbcba68b10604668819510c2127ff06408a79f5f1045eecd2c5 -0xe6860702481af5cc7d8913a653a10c0befac6bc5c5f13f0676a8ebcb65b1d153 -0x0947a4179c43a814ca43fd2ec52999f6203f10c703eb32fbf2a685db734d38e9 -0x0b98d70a6672e91e8b57cc4cccc66e3b4c88afa86c7ac99e1237f89ad07ca5d6 -0x423c6c073ddc5ca9d79ccabb2448eab5346e29da937ef1b71f33d6857dcbe399 -0x3ddbd37b8e0aa644f3f98c6732d8c9b8664431af6b4a2d454e8844ba49a989ac -0xdf79f661f6cb1aeaaf4a4d7d98e454882cbf1fbf2fcc5deff3c1b649a0c5fcf9 -0x21336c8b1bb6485dfb339e356bb2b47dcaf75d0ecab5f53af6519b387d9d7d82 -0xf8bf3e6084175f902253c774618f0af68633fc327e01ba1244cab9bdbe544e64 -0x5f20c4cfddb9552685610e3388aa4150443ec3b19765d181bc7a8b81b06d1a9c -0x6776e8eca7460ca878970e2e1dccfb52a1745243bb1741d4e94653392b6c2a83 -0xd51c6a2e302e2cddea408b40ba446b247a6cec5ba70c3ea449d056485dc0bf17 -0xb40fe3e353ecae6d7e1d4e8fef7e7f6185a6fb40d231279dd027e2383c9e349f -0xcdb0b11138707fa23926e65c78dcfa181f677423d0db2b2520248e9345f7896a -0x5f4b67bce6c92dc63c7958e21f514559f962b6705343bc4e47484a2b487fa537 -0x7463ecb7873e2ee088f3193b15f2303ca03d80d84c472e746bf3b3cbc86f5b2a -0x22369a99083b8aa8e108abebfadd05f13525f6357465429e4f19ff90ae587965 -0x2fcd4987298ce105e1321e6b51c878464ab218cd7b4ec7c781206e70365c7096 -0x355997b2d202f869b145b3e9b1c2acc630214298c8238b72e3d481bbd28bb991 -0x6b2151e9f54a4eed4a189456c5eee268846038c9e412d441b4a51e808b584309 -0xc2f4cee2cfdffded14ab80e4247c6ae579d5665be570dc95eefd42c27d5e358e -0xc10c50b9c978e156067db39e745ad7cb0af6eafc1635248fbc7ffa64d6b78bfd -0x4c804e07653c79f9abeb44cb5dfc87adc5ae255085feb8da246256fab4b3af55 -0x226b5869055dbd3c5abeb6a2346af9d634066a4e72751cf0157a2ac70c21c6b8 -0x48354012733c69727f84476590f7c4584bf0562af7437799775934df0bf39dee -0x8f92824f363b908eac92223db5ce4211221d7470d14630c88246453d2c672251 -0x9efbfc0056d45c356dffba4422c5eb2e7991cb442cef008a0ce6c9f7dab9773d -0xee83966d42356b951d7267044089b40a0d36164f933ad2ba203fb0886ec4eb16 -0xb3b50b2cd2b3a6952e473316cc3d665ede6beae49fb39dd2acf3c5138d326141 -0xfc20d2e22b627bdb950b98d0f74b732765ef3c0d1424466ceaf123266f328187 -0x0bca5ff6b77d7d5ba6b20faec57cd42788834c150f9e0f73ed673079914c58c7 -0x3dc08eed79ec46d1f11beede1a89ed3db336ba37f7d56daad79e6bf91d7a6182 -0xf28809400ae4b844e4cefe52916e500e2649bb3c5a28e053e4b6dbcaeb1c178d -0x99fd8cdab81ca572de5b9021a38ecd3b184ec28ee926d556aea7d4699c0ed3e3 -0xc7b7af18f261738df07176ff0b87dd9a549c086aa0bf6cdd31d394f7b315f3e2 -0x12f0212d2a0c22da775b073fa198d8c0807984e80e4be418c9d3b66a01a78198 -0x6b81323fdf540d6f9f4d276df809d195275edbcd81e5a33567ae4ed5ece39f32 -0x8a2162427a7fccbabc88c6209c73c4112518c6d6fa9493c00646ddd04eb9af6e -0x4c9c53a097fe62868186a9d6dbe7683fe58252b48171771b52ba37e651c4c25c -0xa032e7ea824ed8881be3f0387c0423c1df0a130a92755825d2be7df82bb3a9c5 -0xbb2001c930a5714c867eccca443a2571e7fa9e209b2b13739c3ab78f84c3426e -0x00f89960ccdcf31f70991c008a5c7ad7d94e11bb51477744184d8bea6cc628b3 -0x40a489973da69aca71bdf0fabca375886bb9d3d4f4cbc7dad5ced40c9080bca7 -0x8c00b0f84648004f27eb55457333c9763d81519b90b2c933c50ed1ed95cbf35d -0x5bd5dc37739acc4593b187bd7f275b8db5613d7a8a2e6a0ea150d5ecd628c8bb -0x38ee535dda66d3ada0a642c959c89359626465858a1235b0899f621faa45c686 -0x79b70350a412e9af544b3f0df98faa8fe2d68d2707c4571aeaa98ab7f12905a2 -0x4f9a9b80f995bf19bbd04481a5a32af17d618a3e02611b1a1049456889e25f85 -0xc9cc90db0cf7da77307973c430ba4f40ca10ddd3ca3d029be50af91ee217809a -0xfff3709c3222f6a5a28ffad88139f1864f28604c567c25a588c2b6e8003efb79 -0xe282271ed81994010d3263ee99e06244aec7f04df985f3d2aca84caff30b59ac -0x9e42d6c0984211603983e48957e50615888cfe407ff4a37af3072b6d0d8521c8 -0x34035eb57ab056ac7159f45ee40bdc90c59390615c525f2537e8b386bc9f8c5d -0x2d87d940b7e5482b541580cc0d9622814372048331f7ed6d0b20e4c59bc52ae3 -0x32449ecc5065e1fce6e9b3fbe33a1f7950dfd6836ee99e71329fbd3337a7de19 -0xbd95acd1288b19ba50238f8687cc27dbd5dffc4873b76929d5462b9ac42aeefa -0x8450ce2f9a3cdb6e9964555ae32bbde504c08fc83dd275dccb7bdb9905a42a9e -0xfe940c856d38b128fff1e14e445b94214fcc681758653ebb49ce861fe5f4b0ec -0xa181aac5101c3e9bac4a69f967b17ea0a171c6230780dfc2081cd72cd000dabd -0xf7c356bbf3c09b2b93ade48439277c84659d9c8f85d44611db426635154f973d -0x53b04e182c0ad9ec7a40f886f9edc273ad3c68e95baa49eab1d68b2405e10522 -0xdc2cca6696ac326284f20ff8f020edf166b15ba8e2a3c7ae78ba8dcd6d4b65d8 -0x2d8a0b5cf5f3490062237e990174d1bd88cf2319701c80539c6ea36d3ce3f660 -0xc0ede055964c1f7a6f8d6981d0250426230affe260c7b9abaec96a4651db66a2 -0xc9175439fed7ad3b3f764de739acceb873e4108d0da678d95b25c8b6795d2097 -0x0be834b85442f7b3304acaa401119d9af079bc89da89ea66cc79cfc922361f17 -0xc21f19fbe2b1480230257861c35d84dd17e0977464ceeedc47a3345db8b37120 -0x485f5e34bd64cc9442aad139fbd06354ecb5a241e819ca0d2c5b3a9e7754d7af -0x84bf208de90007276111b968a294c575e6c4ff0706985d17687d615ab4e444a4 -0x0263b181463d70704392a3ee1a4f14d10011ddfca4f1b7b367c1e814a0bd47ba -0x992b2ad1ce1fbe9f99cce09309ac1ee53f38099df892f86a224f9ac52b1a7f5b -0x2317e980621f620560414c9a2788653cd5f122ae75af4912e641bb509113fbe4 -0xfc3e5680ffc5d8a1f0fdb837292cebdd145f84bf849fb032a0ab34011e238547 -0xfc2ca9d678ee69583eb79d09d77ef233b532091ed8f24be51cc07e9fffd017c7 -0xe08e1b3c8a111ea83d5c99da7fc4f0d238755ae843e136bc2ea7f1e11f87d238 -0x03940c58859b7aa97acd14a5a2a94d64c26f87da0d7fff188b1946983ffc8ce9 -0x8433b0ae1ef580d58038bab5e3c024940033b7378e0cddb9eedbef3e0617b5cd -0x21efd5fbb43eef6a88411e04be9cadaa363537b0c81a81470cea25bb07e0cc7f -0xcf07c79dac928abffafd17cade5dac2700f83988acc43bfd4af4f9f1a40a3d6c -0xdeb454f45cf83dfe1231f750ae78ae8bdac0c16ee9659e5c5cd511134850d4f7 -0x4b93d13bd9181ac365ee4a3d0e1ceba53b2e2c2e7a2199ca58ac01870c558f2d -0xc62a21d16ee474d175c34e35f3ac0126df15dc6a0852386fca8199aaec83c3d4 -0xbf6fbaf075a224dfeaf6fc254e1022a53ef2717fa11d04662227dfd7d9fb0851 -0x668e756c57fc7909e003c66717ec18e807e59c1997ee7b5a5a75ea8b1fafc647 -0xba22278e9c94bb10e6b922cdd9ba2442d16b97d51e06dd2d72fd616ead5601dc -0x594e50625aa9bdb52d570534dbc3733b7cf6a3be43abbb80bf6109d771d3ad83 -0x2c35bb66c8ebd065224672c08dffa9a8c1fa42eec42d437c1fc0e8d36022049f -0x56e10e10196d337def7d951726d0bb0b6a825242e44f429cd65809eb3364f430 -0xb8b230c5a36e6660d591d6a71d197af596184260d93270906842509076359164 -0xaaf7ba17ebc2977a4e9cbf49f1182398cbea0a04d680af0d92c0030f34f0e889 -0xf8be301edadfb8eb7181693803c2790a85839843e375c156500a45919e5e7451 -0x20dd72f789575bf28a1af9ed46b29e99e5cf34ce745be9ab8df6496bb75e41b4 -0x758af28aa0d86179037fcb983aa3035cf78d9a5ec0a43e481c322e6b8b7a9f12 -0xb393d9101aa2446e4d88ad42d25979a9b2d202c80425f1c36df6c533e7f7e4ce -0x89b8f33cc192509d6f3a1717e1ccb9745d9d35c6449bacfe26c174dbafcb092e -0x8e2155bd6197965bcf7a612a3ad95bead82082f9936d545ee17bed4742837af6 -0x0d91cc47e5fa89d71fc9168abb4e912474eec3526817b1445e94adb90ff0a0b1 -0x1910b1962b2c730e9614dae0b7e07b902e4e61b07426727cbb713f07aea72e71 -0xf8134e1cc0e65316b98c4377135146220e8cb154b7a321795a52422b77376dd2 -0x7f7c5c0ae26cc46d908f2391b91d1900ddaa96cabcd0195a4bb985d7c6f2d39a -0x8fba5561362c8f2dc339fb75fdff9a9a22af27beb630be43f71acf75cccfb3d0 -0x582243133a6a3693857664357a985ebd786bbe7b994d3b041074a7ed79564dc1 -0xe3dd8434a78c22fd46b3fb9743fa1b265938323f9f19c3867d62f90d3844e333 -0x15ee805770df67b75d9c09867caf49f67fa34b56ea8f58a8fbdb6dd65ce5ab73 -0x374f582c4d178de02590fa71e8eca67dd9caeeaa6133267a8df349f7cabb7b4b -0xeddd11d8eda53a670e108c4a86b5b606014245f30c48c5c05494e8364cdbf668 -0xdbec63171d69f5ade9dfa3d212cb889dbbfcc390ec1f86aae553b2caac0042ef -0x083dd22050f9fad7d1c73eb2008b38cbf9c42f99a38959d424782559c80ac940 -0x0635a0393f9145d416b0895845f452b4bf9cd8001c7f7d0b73362031b39917e4 -0x38f5e467246591cbb03a66e1ad7d10ea973a6d6a5ebc20f547675ee76ec6e234 -0xb646b447c935bcfcf0b1a9d644d24422a3663fc4fe9de560ca26cd65e9884d85 -0xc8c42d2202f6df8f1462d79dfe65f17e0cb64284397374e6f82eedcf162e6501 -0x7e5f9e40f98421403344924491ca8d2458b703b4d7c75402a79255561e13841a -0xb1c693516664909cc44ba365bfc99286e56725fba5ed2570af86246ff5898f2c -0x2ba85fb65bff5ed16a12f812259096b48cca359ee3b39513a4407450772b6474 -0x057b459b664347c8edd98d3d1e8c0eafe2a2068a7a41d3ba8ad2f0854843ce4b -0xdbc95d3f215359e9cccccbeff9469005c8707cd53dea0d6627e295e32b63b782 -0xa75a71b54c5e0b017e29e8966738d5b647ec7e3b1f2e16b61718f2c5709b4bfe -0xe13c674b1e15e98b52b59f4bf4484c1dcdee1e741748c3616f5e194473280b70 -0xafb88f173e4a39605cbad6bcdb50148b791087cef4017e503b77b2e4c72e251c -0xb34ef990aa0d6b7243187eca9ce31493530f4e184e7ce3ad08beb0c8be076473 -0x94dc20a46bbb532abf74fb5c7ef4fa8959f9c499fb0ee7cf4271010600be0015 -0x6b2b825af7d0078480cbbf27e2560c576599a3a5b7eae5a1bb51a3a54d41c13b -0x6a920d066c57edd68ff41b0ada7a86002440943ea16be5b01d967399895863ea -0x77fb5d7d7add4c79a4f3ddd706e7244490910a80e89ebcf40b683eb66ae64a07 -0xe5144710daebfafa4b9100d1b62da947a37fe9085417488063320fe82b212a96 -0xac229153e08106f7af43747d1f5736c1d9630d9aa30511aad6007df4d3ac0166 -0x72dcdacf6e3648f6a2227b1849792ac03e5da6f22aca20655479358eabb20f39 -0xf99fbffbf15cd5f6dafbc18583478995958f9c0d38e8523a1c5981e8e2d28c66 -0x437ae1ff220b05ec649852cb5a9ee3464d938ed9008a60977299bbcfb9a282db -0x2e6aae948c876d62a569e565c499c5c1b9e291676941aa331d91fb6565b125fe -0xa78e0a4ed23dca01d599502f8c493a8f0237384bcd5c4b87460b4e3d8049d6d0 -0x583645c5f4fd7088a05f6ac62b5eaa8b8bc96913f262f88b9a697b3cd51e6f49 -0xf5c8d06f87492d26acb4e11a6ed10e28e0e30fcdb8e9b65a812ec289e949cd15 -0x9f0cb2e4aabe724779fa098614275c36fd3a6c68c840d7d10f8f3d5aaf2f5b37 -0x04a317a08d6a7eba7c0c205dc6d751ee5a16491144f9d2de9dc15416a3c747e4 -0x4b96bff34314544de47eea4cba7fdce43658d6d880536b4eb5bb0096833cd0df -0x41ec80174f5e6f59a11089d6a1a9553884b7727350a8fb72785340dd9fed80e6 -0x0d8db597840bbb8e81361cdb4392f4fd577acf84735578b07bf7018d11656525 -0x5b7c4d78b705d2566d570c6c6516e9988373f38166e6184b69b94b12fc099f91 -0x7f532f395fb2c4cf8232e5b8eb8f42cbc53831f6951f2421db0a5f40d301a460 -0x7c6208c99ce23a80265e5f32908633e5d4ea387817ae628e870778d10e794f21 -0x0826bf2044353fc92f554e2c938754b43250306cf11dcda75b7d934267509ae1 -0x436c34f05427cd870ae9ac7adc5b6669b9d0088e7e185fae320af34f68a8a4e9 -0xc07213686319214b09682589051d5a86417e0fb13646b57dd34e68e76b7dbd31 -0x6ab53301dbb95ecc623af092d2dc1ead61ac75c5c5874703a8af50bc26d21565 -0x800f00b32a946a4f410ae549dfcff55878c89dd3bec1bf474693bae2713d5448 -0x735087569681d2e74a69f55b815430b4c99a452994c411bfcf6c9f65781bc7e6 -0xf456746cfed7d5167035aabd98f191f6d5f9e2d26cda5e690732584864960de0 -0x130e3cf3e43f1098e76daa5dab704a090057c5de84bb520afc89a0b1a2ef81c2 -0xf5334a4bcfb6fec485f0919ee6247ced02fb74337c2c8f5ee46900247bd44239 -0x3e04af3f3912066c11fdb93e2903a7b341fbea0447fd8b2c98c9a63d02eb89fb -0x57df2fa463c0fcdf3db7d0d4038dcdb200ee6c8ee2e188522a42dc6300318809 -0x3e6e5241000a084c898f3cc29f994cb34b3cbd0a722df891cbc3751944479378 -0x651335f0585105c7d7c90aedeac8fc2bbc6d50e1c8be7a16490f616b6d8f1bee -0x22e9cbb0a5ee8a35a854499db108f8ff9c9ad7729bc411ffcb77ecf7064d78c8 -0xee32b72bea826c621d1c5102e682b0721f5ce4d40ba296cd6e6477f841b97b9c -0x5155363e1b62650f849000ba70630133555947af99cbf8eb2ac451cebe10eb0c -0xb6f058eef922e5f8fadab0fde59f04259813ca238f3b4ef3102ca1f3638169ca -0x2cffa4d6dcb43c9c8741211e0d43de3ea625d0f47f737cfa99e4f948ba62e005 -0x56dbd340f69a80d590438b1b47b9a31c07e1d22c307c68ee5f94b3976f2accee -0x5a1c827f3cc3e5b78a80b13c00ca49c950d12c44ae1d662fea1223d176cf03c3 -0x233833438db40b3f5a1abe79a88fa18e4b2154ddc9d396cd8f9b55101a80324a -0x0c3c17138edd1d14b50d4c733ba912c1d561b4c8ba14f68ad790bb0c567539b8 -0x00cdfb6b00a8a86f430484fb5c9cd22ea8a0f910756e5e9a3225ea8162e33508 -0x1cc01bcbdc68e0af5979b08e14058ed83a0b6b6d126d1d69e4ec3072433c880b -0xab17da6b712268c1f3e44c16b0199621f2c02373a90dc75705108ee7afb02e0c -0x4923b39ab05335e7e27f85e636203e140b5799aa1683c31a3da3af1905253e23 -0xc301de667927fe549effe78e87d2f1b82ce61a2aa38e5ce8e0674c39f5163c8d -0x9e8b2c4a70889606ee55e18f99cdbed10d6434c607cb15079088e54e87860e9c -0x586fcc9b27749a52bd8ef81973fcaa16b3a07d2124a843506c8d0dae9c58d2f6 -0x053c87cc0ce0b966aec4b4486339d44e3afa2ff885aa034cb3f6c28104043bdb -0x601c3af4a42aca08269807578bfd3aa580c5e077eec5f5abfbfe2fbc7c5cadf1 -0x064fe96772dca9443103079ff47b3c38426078cb5eadfbe5cbdf53b8ec8417c3 -0x44f337e836df31b5c677118743b660545378c3939204af4d2b2b5f17c50ea2a1 -0x4ec981ace0c0f453a9c64f905b6ac187d14956b5beb9e1bbd13d40f2a2f631f3 -0x341a165906a52bfde20ff788688adccd81666e2af04b62e4e2d1d5f3e0847d90 -0xdc9ab68b30db1a8b7eb2932acbe4447bb71a537dbb5329ac01c966f939b3c706 -0xbe86cdd26f1621209ba7f6319a63efffff91bf5f30c9196b8a6d85a037c5588c -0xab054e5ec16600a007f867895438e6ec677b66fe494fdab53f4ca7db4a931df8 -0x9d10e6748549e1467f559325ca1bb436cc0bef64a27b528fb0ed509d51c92fd2 -0xe42e594203acfaa0f79ef4b3d295fd258e2103d41f55882f688de0e67062094e -0x9b95cd548ab8f6a039e7742905b7500394a6353b0f55dc2facaef9b80368654d -0xf2a64b7957ce456fa71c1f86f49a8a7ba5e4846663a8677da1db96510c95bcaa -0xe60fdf64d8b55cc076c9c379eb3bd2506b8cbac1a7bd1adc4f68fe41fc690889 -0x2fad605f9d11d8187c8270b0944cc4ba1bbebf231a4affb111f746075bdfbe49 -0x496f773c88e6df4e2d758dad8c9d2c2b4060728b6064aaefe8e855a26902c85f -0x1879256cd0f9d483ea31884d31fc366a53076c6af5c2deb27404b599199ae1ba -0xd6a2cba6611ce1283b154fa4822822dbfa73662711f2ff98b3be9feb7152dd75 -0x20611d57ff892b086bfe65f84fdb5c4244f5ba5b2e34d012914c82137dace968 -0xa4116690589744329e25e7a44fbeb6798cc4919e0ee79b9eadce09b618e6de8f -0x237bda8f4253f54be3edf7c95d756d095848c37b40e259875e029d10282bb0c2 -0x02637641d60875920da23aa59454b3e40375c97dce38cd0cc30b7c1b8506b13c -0xafcd59c81dbfd5ab188dea64e3e5479a385b4b3bbd5e4d3b00bc52fff840164e -0x21c8f4883dfe189c391d71e57a1aab363029e592d0cc429d9f1e35480c2d134e -0x6ca286174035925353553a27433f2ba27ceaa7c8f2e5ed0b604487a09d226533 -0x375063da006166c42758e97516cc27b9a9bde6c7870d75596868e887caa91d57 -0x012bd7065571d4482337d6eab7ce3fab1bbdd074b3d487e42b759cdc8a381f8f -0x0643940be173ebd97c17eaac90fabf9aecee28db63339832480fe1b96b4ae25e -0xdea3cb6425c667fbd88c58cb3f50ac94916505c246fb8fbfc358c4f6b07f2abc -0x2bddc4bd372b2ef87f64992eea0f0626fc3f533475d91aa4ac4713bddf91f385 -0xfd98c1d5e6a973fb528b79ff6876781e9e36a88a1c500b6e5a7a4ae57d1aa2d4 -0x7b71696ca7318329667c169667c7ca352804ad9e66f986dd99ce89023cdb77b9 -0x4ba5fb1d1a3ef4e9545da44ef1c38ba6730904003fef73d6355a0a3e9da2d76f -0x7a9936b751c1ec6feadf5b5a28e8eb2784579700f24e2935a9fb91cf3eb854ab -0x2cbcbde3f0992478b6b7959bd6e11aabc42a2b931ab7612de89eb1d269fb2112 -0x26ff1ec7833a4506fe897de3c8f89ca5325a9b32804b588b0849ab27dd2d1057 -0x0c71b81c8564f407f9080ad6c3099694a518a9dfae6510ab0c29ef171df2d14c -0x9b2425745d493d403f781993d6a2493f3f74af93a6b3bbfffcfaac0edb832ec7 -0x669fc3f19c3cf9bb9a244f31445e32d4647cacbf4c218d203c3d54ffb36aa2c0 -0xe90a948df3009e45b58297f63bfe185d6c9759dd2bd77540cea631969903062c -0xeeaa5de8f9e50e68787829f0f26420b7755464a1f0376890f214c0994309db5d -0x8a2ed0dacb7afc6da7766dd4dec957e40a050af216aaaac9194bffd5c90ee61c -0x19f2c8ee26b5ecb9cda0dab8aad031ef54f63cd3cc3947ee82f19dcde80b16b2 -0xb490c89dc9c106e6a213aa99ef7fb61b4b58dd5b5ba3ed9184914609a473408e -0xbd16084d3935c459182ebd5d8ddd4a0964d386a1c8c29463358415887601a435 -0x6960fc47d1e8a97f128a76203e82b3da4a8bdf0d1230a626894539a4150ff955 -0x932ca06fbc902fc910d99b24d045c72ae0bc8f433bf49a545ce05c878c70303d -0xbb4523931b22d35e8104867609d83d8de8024020167f89940f3fea60c072ea82 -0x9d0cc7d56bbb0e2fe5e176e3a8910ab5f819a55deb92eea9741da4ab0ab50845 -0xacc366df00ed978bdb9a4e0bde1ebed1612e980a9b6c6aa0eb765a36726515af -0xe2306dc7427df6533af12951f5bdcaf525220625789cc9d4646d20f65348c290 -0x9fd9e332fc6bb059c54d1e4315cc3f9826163655c42a8e4fb42fc2bd9805549b -0xe3e2fef128554a06f7bc36218679197e36dfaa4e2e064749d1cedc8d87264808 -0x56961d5d20697b6f69efd998ce74f1c8092499ddfdef5aaa4c497aa906a9e6ab -0x8eb24469ada2b53c6859b8f11fcfbb75e822806c9931e46b81482e90a4861928 -0x7b6aecde94edfecbbeb475b9138ace44d165b45c57b464ffdc0e0f6b9c462b55 -0xbe464f39a1fbf034459d7d653ef60f928504e177f3233c9faacb7010dadffbe6 -0x82fe64a16416081de74eae783a559f95e267c7082bccbeae8435a98b40f25f7c -0xe6ce51aa0a03796f3b767336922db03744ef82d5bccabc875233c64ef0d579c3 -0xf76b968fda83964026c8db00812aa8d6d9d2133692a5d2474d35cad98eea8447 -0xf060ba1de7c6aa5b94dd054138f04cc9d2ca5d8e7c1535d8d32abe77ba4c3325 -0x32d8ddc4b7685eeafcc0f82f4f808a37519121fc44f44f56f4528ffb29918382 -0x561e3eebfb792bfa37f08c4cf6dadf4c88da3a16d2cdcc33b388118fccfd1773 -0x982f390fb7be271aa8001ad311e4ef02cd033ac2bc98caf4dc81aed083c525a3 -0x2df1adf69d5a446b0bfbced12942c129d1c84eaeb9fa4ab40d2cc7710d5bbefe -0xae8bd6df761b7c4a475b46b0e2457ab9a38697aadb11a13e556dfa81d87244ff -0xb6ef1e5ec78acdc9cf13bd4dfaa41e902e7176cfb22b3f0af2782d22522d356d -0x3705c24210ab9d66215b99287cbe2ddec5216ab96fe3c8c2ac507e584c9fb028 -0x771e93b093d05f4dbddc94f5f5620c7148cbe3ef3d8b7d45a313d2058362846d -0xe6c3c8b8b5b0a1f964845d46d16c776e5af2ee77125f1d3ee49d771d6384a3f1 -0x1eb2c9fb63dfba15d3704f17dd8c1e2b68ce2a3f03a75c3261a0eef90412374a -0x2cab1d81ac0e73a346990fe36dea381351ff1a4e6a246fee5d0a1381cc63daab -0x314387dc0bab58e456b2ee58a6cc46640e7dc8de04c1148cc3205eff045dca2e -0xae90cef5a709d26faf430123ba0fe18232f35967c2f628159e098bb9c94a518d -0x5263c74ed86ae62ec16209232040e703a3b053aa6eb0b17f7bba94b26e06cd29 -0x16010ef395d510b19bf60b4b2f79a82b60be50799eab119893a36c74e8437a9f -0x53cba70f695199f14d4cac5ff978def32b7ae569056cd1ed1db1b2b525f7fb36 -0x81fe755484909afb8d669c16ba1b471c8551aba7781f44a81ef9e2f7bd9384e7 -0xfc0193957dfa0f0d5f391f5cca70adc80c392523f66bae9ca02aa8c1c0408d95 -0x966a6d20334baeb25406cc3fc099fbf790c0fcf6ee03c7828f342b0e64a92d64 -0xd4a7c0e088f6da00fabe186fbfc138802646a834604be3a2e14dadb5090b79ae -0xa69db1e57f6ad431b640fc75b3cfc88bd094a005026c68a62d725915909ff71c -0xaba96e4e156a19f36d96676510165576c0f7856896d76c8c36551eb510547db6 -0x3cd9f8c664e755d0cfed2b86f4ad7c01ceccdb9e305939f2c6219e349a8c2645 -0x55c300abd956efa91cccfec7f0c3d481601b5e3975d9a778f7a9d1efa301d9bc -0x08d01658f342ff401fa22f9490077a47a1f69a6fe5c82b33b3539fb7f666eab3 -0x3a3c490ed7e2abac83b99ae0bcaa2df0fe3df11a883231378442bef3cfabdbea -0x545fe4bedfdcc4dc35a18c3f69f263ec0df45fbff4e033c8a2a339def1bc1b4d -0x28421177b64c6d1089021f788fc5968e1b87f644d9fc5ffaa4e59828bbe6788a -0x357460c7492762f8e0d6fb969fcdfe4b7d602a0cc2b2a84b9fbb24b1dce3374d -0x112d7030927e26368a1c6d7d21221ccc6c41be71ae4730a4f8a554f065362602 -0x79d1701ff688939687722977813e715bc4acb94235087107eab6186028f9d3a7 -0x2743ee435adfe901c61b6bd2dfd5b8096e3a334bff31ea1bf569ab03d379b85c -0x7db81af6e8c83cd1f53fe6e3dba2859596ee906109cd2e22f83cf74dbe853563 -0x19b47fd37ac5989e979f276cc6e3d26ae496b0962e43e31287b3b91edc086a4a -0xade9f96e58f3c2df280b50e41d1363c20da87fe0f5e50fa151941250ff952717 -0x361a6c3a22290b59cd6f9fe796450aefe9efdc6be6296195c75bbd31b0acd352 -0x7b77841e98881b3931b720384ab2a924f0027aac4f4f68e583075e5f16dca4f4 -0xc627e8808e5a46b07b4d0d07c8e4a0f9ebf70df17fcfc0d78dff248d09a03f1c -0xe6fd853e8ae71acfa454bb931667818eaccfa83f876c2bf418b3cb5dd37ae23b -0xff3bb5080937e5b6b5bd43b77e9a37cce3a91228434f700594713ce733d282c5 -0xa3666cf29006409d7a7effd188a0a7d07f7576d09253b64e50d6688a390e2e39 -0x5a7005d7964a87dab2e44bac5731ece467cae43f4ef37139439c5e2d0d220ab5 -0x3c0233d422898cc25cd460aa91e48752c7a8e4a35d73078848078fcc33de1775 -0x8daff806832321b2002737e1fd0838e93d4a2992efdf699fb3e559dc0971a888 -0xcec424fb6cbffef9725e980d3837373bd460860710b579fb3fd16cfc49fd7c9e -0x281a07e44fab30d33d88cd64615ccdd214f5e65e866205ca7beebf80083b4146 -0x4a4784edaf0c81950e290598ea9f1c192777fc9546288d1b9751e67604210cf5 -0x9ab147d73ab8e996a4d8fd60c29017d99a01d015f888413639a5ef46e4272d78 -0x50ccb81a148f4c010fb6ca4630ea8ca1168a843cfd76fdd784dd934f1a8160cf -0xf3d6dcd5ebb9e35a0abd9835bb2437faaec0940de09cfd9272a03eefe777b25a -0xf5e57a8d97c1b039c6afbadee5d09afcd95348f3435cd9a6f7e37433a7f737ed -0xd2c9275cd709d12395ee812178070da98a57c87db1436f231fc8d58335dde2ee -0x1dbb78745b1dc6393c7bf784a7f6f8e15d3fccc46d79c90fdbedd4102351c5e8 -0x40c011a6aa715389b35bd6b6f21ec649a6971c6629660a9572cbb27bdc661bf6 -0x165f30ea56f8b6c1ef2b9447c9cefd540baa048a147991436bdaf01223a9f024 -0x1cddf90047c44a07aeca84fc70f6291ce656128e19e0ba423e2b8985754d3049 -0xf38eba17d59d40cdd14a7f7b7a49830f4ca531e1f35222b3fdbbad8f4a89d266 -0x2861c91ffaf15dfe7abb6bf73e87e2d307c02139d46482c1b7dbce106408f17e -0x60c445ac485a459d1870ce09a15daa4970c30432b32eb3e866c2ed8c20fd7da6 -0x3176d03b089cc15438cd97437cbabb0add0c4829607d95e113a13056607b2e9d -0x0187bed0e850f640b66c4bfa02b4bfc80bdca7f115f08341fc707b4a87cb1bab -0x314bb62949076ffc431a099f5f3592f89f624934edfc98c23345ec46c5e5dd72 -0xc8fac914fba960fd95e76abdfb094a32a8aa017c599bbcb1c065e3b3bf511ddc -0x6a61cbd2d264e714f92257ae7e1165fcfaf8d08a795fac1b765a43c900961b2a -0xd92915e86f3bca5b52678551ee9d4894fea37d69fb5bf825e14c4e10c92c44ab -0x4d86938d612de060940f6143850d2b838d6ed031486442e448b708056f6e1700 -0x70f38239e29f13aff51da545b7330399636a3c8f255ce81bd58129aec05f1750 -0x44daca024d1b8b1efce7b1153dd8e40268b22d744f764e068fdcc63210161bbf -0x84e0d05e494ba51b7449230fefde0d141ab3f007dd1dc86494c282950ec9a999 -0x5e9da8b657b4ddb5b8dd00ee90a108f26d8a2d33b28a9cccb81ab828327e1664 -0x2405b5ecfbc791c32963baf3251c9715607a8542cc33e7f0f44ac29495a537df -0xd99c8fdc759b1b95ed0f6837754ec52632d0e329139da2d0ec772c473164f051 -0x991594d0fa1baacbc28175691cfbd2fa4b224fdbc22ebb2a1e028b77b53b38bc -0x0db3760262f0243f82333f84475a2437dcc126dd2df23651c27d58e588070c0e -0x519eb2c17da2332115a47aba40e43035a163340d775370b84014ad3ac094036a -0x583e7c053ff5ef944fb320a1d2b93d81560c722d5492f1e12092c9a9e0b98823 -0x0c4aba4ff135b4a9e3000d7fee2be4a3dbb5c3002914176c1b6899b133be2400 -0x69f436d059e4ed8dd243a1cba069ca613bd7cfab8ac2a39c24f558c018e1b78f -0x203d894549bfe4de9ee27ac7e170ec15704458cd5b7185ff3c65a3bc884aa82d -0x9449e9163010ad173d9a9e7a7412476fee2746a875dca4b466c9847414f22f38 -0x22c8bc816ea72cbfe3b4cf3d129e9615d6becd79115c9fa7a867ce61bd2e192f -0xa9348985ffa81789111cd45f2822bd493d4975a742dade4decf7d4e45bc83eb4 -0xf1e66e1e3e96c40fc862cbd98f0977290bf63aa7c6e20511a5f92271742e5081 -0xaf831ac4a594605b11be22c122272516836af6328158b2db5189858c6719284c -0x1786771893b8d5fca3d615ad31e1c0fc380946b3e5b8eb50023eff83ed928ba9 -0x4e26e9f6a8abb77fc90004e21facdeb51a25cabf1f55b65075daf09ee9437e53 -0x11e9943b660c49fed9060951d8f195cd6346ae80d73017bbabc0ac92ae1f589b -0x8fb979d76b2c5f16a5cf33a9d7840bf8e5b61c306b3cb4d4bdc92e7d9ca8fd0c -0xaad1308b3c3ddb25560d3c32b57301cfb1f827cdba763ee17f0d1e59c6555856 -0xae77a15241205cda7322c92edebc5848ef7f86a5c8878d8613674c2ac8fd8ba0 -0xc68dc934f19985ffe4d86852c21d8323f5ce8252f0f43382471ebf21413669e3 -0x7e456732601df9e13c0f00b548bb81b91f962f1deef55ef17a1d45a5bddc1017 -0x7168a2bbbf4e895bfeb1149f2c6430ea99b69b74316adae93f75e2f4007a06b7 -0x9880b12e4de392cd23f533ea77600cf868ca32e0c6fbb32be97ebeda6088626a -0x19cc879fd5ba3825e0841eab599ded1ea812da418effba5c4fc0e271a155185a -0xf9a6b4fe92829d780236b21847e8f1c66f3a3eb782ed5aa5ab5f309d46dc6e02 -0xf513fc204649850755d20f6f799aac095c9b5c343d625fbdc731841e6d4d2b5d -0xf6c6a10368e63b3e16ec78938cdf130c3d7c892e6cc6992840c0b8146739d323 -0x92e934abbf282ede266cc81906ddd4e0cf6f9e68c9f4e766e4361fb831bcb9a3 -0x51cf3791273b05bde1d329b1b7779bbd07e2f7f4eb7b9b058bca3423dcdde315 -0x010227de45935e6bf4efc41623fe91996ff40d01d75aa0b43fbcac9b2588b0a4 -0x3847f916f959408594e7acefa355d7e53d8f92a4dda3547fe09b965ee5a3db06 -0x4086d6aa8088cf7a69b5a9205f0d9757a9600c375078c6276404f0945637ec0e -0xef5b0b26d1f91367c73a483af9455d39907ff711032034125547eefa4f2108eb -0x5c33a5dea8957af937ffdac29b619b35fbc763ffc2f604722ec905738c3cd5d6 -0x6d96a78f297556fb3c227f9271fdc6dd88822524e94d2d433d8220a6349e8ba6 -0x08de392ede421b1251ba5d0fb6c5396cfeda82bf2a12e7cb145de9ace122f928 -0x13eb84304616decbf023f16f66df39d49cea042a691958bd1307b94cb70cfa5c -0x71222fdac76eb9b47478ca3f7bbb6a0cd2434a6ffeb66fed293eb83f824c9ba1 -0x39679b63bb599fa8fbccef74c36c02de6a129c00b13a0a95c35b1fb9d1e52355 -0xf45a79d43e580c679f0e73023bb4d6a5e053c3d80a1398bea6591e1c9e0af63d -0xa7732a05be96b4f70305281bc1a00c693ca088d4d8b184313bd3f38f9759c753 -0x4be69d5adda8037a5dc579616427ee6abbcb90ef54123885cde81c977c5247bd -0x99d1eaf30c3731ba572c58cbd6ebc4949dd8ee4366ff3e6ae34947e0c670c056 -0x179ea6b8933b7d5d3796460391707ff6802052599f141a246ad9e9abbb888b6f -0x3ec2ed30f07ac261925a61ce0b396a30a2db3905c0f4b29b6fc1eb0e0c5a4a81 -0x530534abbdc095353773adf1a8e60388340ea1419d04be742f934d3b1d0a6f26 -0x914a6e85640bdcb9cc63c18720bcfa7a2e29e95a6e82706b1c47d74fc9434406 -0x1563fc6cdb58ed8fd54143627922ee102cf97057fd01d8af4f195de455f154a4 -0xc9e1cba154cb6f9290d61fd63c2db2505c9bdd431d4fd10f6c854e58560c94ab -0x40020fad6b9e15f434a5618b0faec22eeb344ac23593b7bf24503ae27772dd74 -0x2c7189babb257560f9725bc59b89e59c178abd9c7a92b72f08208add4d2e229e -0x703d0b0f5b30ec266cba0c0afd635031cdf6476392fb89c5749d4cdd56a200bc -0x21fef1993a9160ebaa499b21a0c16f91fb1e98e4a7156ba8e35f0353d731cc46 -0x3fd06f4a531feb6f0bdc98254595ae7a484557730f2c1644625ddf90fa37fe8d -0xe2c8b5ccc8f35dda491e2a1a66fb9e8f181827abef73df61e9c067c4bb897451 -0x4d734c3558f8edb873360aa6f46b7f46101868d0a078bc029c9c632873b673a1 -0xfa15667f81174695cbd3ad55ca6727832aba4ca7f56e1f2a7d60733fb0a43bcb -0x1c031da94ec246c6864791cfdd82ce69f2e6ae4eb53c009e96d6581a24523319 -0xf60c58382b30787a4ddfa83d5d838e0e93607685abf3400560b2724914df887f -0xdff6b1dba3d8bf2f003feaaf167545dead052cb2ec2ba038d48cf1ace5fdb410 -0xaa52244be469c84d4670a177384163ee8220771b57e7930b71120b470c3c618c -0xb9afab09e24d3049d2613aff629623b380825ed00461ed56c0b0c9fa99a12132 -0xa6e98a6156cb1b993a95ebcf145eec1b1057f3b80d80e6c95fb404922d5af51a -0xf6c954fdd35a01cdc7e4612bbb017857cfd371335c1c2efbcc3ca44a4cbe4bee -0x34d32b18802fc8b36679695915ef62512d2080a9a8a1a06b4e3af7fad17fd3a4 -0x1fd863efd1d6f918b5b2c302b163bfbf16c070db10c6805238c677eaf882cb21 -0x344978fbebc009615a8f6a055fce3e4c54121ade4a4d5cdb7a98e8f0130feb5c -0x628d0ac408435a5a4d6348e24197458bf66e807e3a4fa70d1b463a06b98447e6 -0x4b699a11c07fa2aff6da228747e48c83b95b730e032b2422b1d654ba29bddba9 -0xb2e2404a2e14d8feb0b6944fcd13472c7dfd750da237142d4547750957963c19 -0x079c930469f28526290c456a79c8e3379d76db73fc9df97dd7fd0c9b50afea3d -0x6e13c910c7b920587c94a80db7b0f56b4fdceb2a1145b828e03550cac2165109 -0x9f635901a2868afd6cce584fdaecb6c9ad5a5c779555fa1094c54347f11cf83e -0x04bf31c715cf890fe3c46f44be0dfa5188dce8bd166e78117140d5a2162a1959 -0x0954393b537d8272ad44eb9acb67c4b758564c5d733d8a10e9fe63eb5b17ed33 -0x56a97a528bcbe879bfd3099b0f905d3f1bfd22c496cacabeee6a59528378dde0 -0xb562b3dca931a83c187e61382c4c76a9faf37dfaa0ecf1a0f1125ff10ff37ebe -0xaf2bc871d222e25da131550bce3f57184e7b66293c9f9b6ec424c55b93a842f3 -0xd527189f859770cc9d2503dec1ca9ac7102246ee864d7560a73150ff68546f49 -0x4b32ff296305638c201a658b8a334af29c39ecfc252ee668bfd425d773cbcfa5 -0xd817fd7a8d0017c392cd8995c994f3c0e51c62b26120c1b995b3e283465a744b -0xb3b28b2dc251a0266dae17a85e6a9b0059b5ef67455e419cfc2c58612236f0e8 -0x21da16da23b2b5be873a7b6cf538f8600871e5421554d0fecbce611dc6be9ccf -0x0824fb1ec64a17b3b5f6a2c60477e29beaf1eb294921bb92183e29d389d7de79 -0xde0d7be49c832f1284d4570e450f4fe13ec0bec75e79f89bb3a374d8ddb23f92 -0x6cae45face6300fdd3757e9e8daf633e51a7e0a747fd5e473c740194f92983b3 -0xcb6e88b94c47caffe56a26fd71ee76f8f340a93a980c2c773dd372bb3fa43aa8 -0x13a976ec7a35544c974f907401d90c01b18244f51fe6a305142a42a8265babc6 -0x6d36d103727be3534e745e2b3e21a3f6b3c93624dc8d88f063d39f732fe28159 -0xb236f33d52b754cb5f4b46b0d540800b91dd80046ef3458efc97f5eee8414102 -0xd8b0c74e81e305be8994f5a4b1459a6f32c0dc712ac4d379336c99e6c3e3934e -0x871270476d6d8adaa3a529fb5a6cc7d37d76535d8385a5e7f866c1d79822489c -0x442d4dc7d95ea8e8c58b6d03fd6043e778cf7afeed25d58cdcad572151e1be22 -0x6a5b3c92bc038895e33f6aa79b9f176d8f7303cbd92a4410f70931f5c45be0ce -0x2d0706239278f67691d6cc6d37b3e583002f03c3eedc6a2fe0ad083a9d059ddf -0xa80fab2c899905687b63939548f9d4edcc4622d6dd32fc9cc1321196304235e8 -0x8971b3ee3e68818255cb152a7c1d25cb96d553542646b93e8fab79663670e5b3 -0x06d18e207c2138d1830d3d0772c84f7eb2a24f8d43c10636702d68f4434de64b -0x6ffd3df4a86f8bd47f2b39f8799a13ba262e69443a40ed5505d7eb086ccb3fd1 -0x48fcda961d78b85074e1143e002ccc3e11564384a952bc4a60596cac83dd9265 -0xc59303304ea28b7a42799c886258371fa421be14d2d0fdcbedfd1075a42515d8 -0x3b24a048fb472da5446ec56b33eb0b82b3627fd3bbd28f188808efbdaf7c5341 -0xbba626cdce4ad1e2ef63146b0dc56da84e5c2c4f340a7811595711a69d0ec6d5 -0x5d1c6d0c211a06e103594ce041832c7565471ddf55d1537a351d5775d22d402e -0x465a0a612683812341e4b903c7066dda12e4e6d4871be675bb546a4e2dbd6299 -0xd2afa12a1a69aa1d564f9ac042aeccd507a364276c76b5b973087e6393186cd6 -0x8bfa5b7142bc9ab2643b864af599736093f97591a06148a1ad38ffe713f78b0e -0xdc338ba0cf0da5ae36a7d1480f93d8e9b313b9238ded75db74f3bb317316c9ea -0x709371e7d451a5d36395b45adbd150e7c5f5cb8ddc919f658ea79c8ba942852e -0xce5530cb64f8a3f2d9bb322893c2505d8ce11f11b414c4faefcf61b29856bd1b -0x1362cd0aaa7d402910b91c25c40717fe4d650ebe60e9625470eb0dcc8527cdb9 -0xe635b503087ab4b5f334ed87c901dffea1f4571fba8fe6a21dcf8cec7cd14803 -0x56510920af0404e32ead2b1656906bdbdf866c9ad5aa7d4c0c7a3d559ceccedd -0xc922bea22c2b46a8589726cdf0bb6ca7f71e6e07c105616d2346c8523de6c5bc -0x62d64e8d6ae3cbb61dad6512fe1d5acb6bdf8fe803c84d322f50229a3faffcb3 -0x30faf97dc330768098c1a77c4f7edbfeef01d5b173fcd66dbfcdd1be4866bdcb -0xfefcea675545f2829d185fcf1751d92f6b29e54121c5fa626053e58b45623a92 -0xfb3d64fb6851a7c56a8acc9349a711918da92d9a5e56d8765e7d9415d6baca30 -0x10e476da65a9edd27cc3f672d2f1cfed30ee934bcaa5e4acc7df1e156a0ea69b -0xad1018f46f6f6d2b40181cf63a81ae1d94e0bb4eafdb3db3e35e3ec765423b2c -0x21a958a80fa85e2d7422bd7efc1488985d235136e4b19fcc5233c7f7227ac9fc -0x23a4b9be9c6c9b9b5368b4ec7b138773c7c2235f4bf990868a7e427482001a35 -0x95cf60f62a2047c7952d73936e629ff35b9d2e989d1849732c044429bebdb422 -0xcf47e78ff1cc102e938184ebde7771381921bba6aa28a4f52340db0677d87fb6 -0x39001ad088408cb84bd349d257ee3785262a07912695a9c9e75cad48a09f12ae -0xfecd157b668a2632aec36a0664799551ce9527016a924b159cda5768d2bcb393 -0xa55239d16e6fdab76219968e2134c3d3878d19ebdc3f0e3cef0a5f9c3e7d84af -0x689f5860faf1066483df7bdc232bba0dfb92cdaf06a669978a4fe4a0299edfbf -0xb9a31ff65bda22f9fc063e4f70f145a6d33ff55a2f23ffcd5accee4702d1be77 -0x81deb645228bf48bc555fb4f95ff527b0e5ec145538955e162532f5536a75e04 -0x1e5a9e3668ce85388f3c443de60e290ceba453b3fe908dd973e9526780e4e6d0 -0xc2e75b52ec9a7e1095b821c3a33a869700fb66dc3c2658bef08f79c35d827a99 -0xd9f8b3da37d748524bf45feedaa05d7d0d2bc332e81e2a15ef9aa7892b671697 -0xc6f505eca8687c767e9bedfa90229749c07d9363e35db37246f9aa3d02e872bc -0xbeca9d17cbc243be4eb166fc85c1170de5a71272f6d731860ed556d17f4493ce -0xa2a959d4b24ee7b0286cc68e2cb3a4f730a885231cc759704ead948ce73a901a -0x9dad504d5221b8422d2491580a73a586cd4217c6dcc198fbf8704eef8fbbe216 -0x3c31c16dd44e52cd3d719e88e8ec2d847936c316a7356acd50a490c8b85ecb35 -0x66be33403871d52393a13ad1146104d69d86ae78c134eace1b5233ae45aa5a6e -0x7600264017d2ade2dea0cee7a5ad36fd92e5d98bc58be1d44124192531968845 -0x41aaea2f70dfd1fade83231bac57b79cac315f2e501d63c069b72f46f74d6fcc -0xcb020cd08835cae16db31ecf43ea6ba23c0b136ca99b1601cd36e0eed2f6b547 -0x56131d85dcf949f56f69eee59016e9b2c817dd1d0b682ff22450b2fe50e1619f -0xfed272cb759103c3d64ed86247b1a11bb4f2580cd9bf6aa355efcb40a915d5b8 -0xca7cc57ccda5fe9dcea168a28fac2aef974f29dd2ec7a974784689ac2789f24e -0x8b1593b4665f777e82e59b214644b8b0731bd7e3fff077e5f54fd2ccece1e572 -0xa28b74e8b01f36a50957bdbcac689c5eafaa7457a288e0adee4230b2237be6b4 -0xacc5f829a873ff302471b86e6034036af03bae93590f367c845a24d8cec7f543 -0x04224150f187154fb6877514c686ebe13a6c271bc3a9058df2c3a7ad102af393 -0x6d5c25e0fc28819dcf97e07f4ccbb7ba7c74e99de2068a251f7d5f0a81fae2d6 -0x12b6b387d6c9b49f472dfc7981f2780402c8a7c7a2ecdbf132b01301f3b42a34 -0xd6b0576f9916766b07a1e423dfb652b89194433162a79e7d9c80597d2b6f85f8 -0x9bcef1a05e7c89b82955f39377705baf7691dd5647efe2d362f44aad9af075ef -0x4113a2f7d942104fe45c7622f1de2c587c8a412f2d35071be2b7a5a94f828081 -0x1a289d33c9efed1718f0930228ac9e1b5ab456b5031e9dbc8aab4bf4ee49f186 -0xf938ecf7fe0e327b9a3c2d9b92d990cfceef1e998b121f9b0ee655863e0328a4 -0x571dbd741a0471abff7e0a7f07d033e93b195f3070ed463c463e8d89230a2b18 -0x2a74a437fcb81293b978cf1379bb19ab9ece24ade82c684e6fd3050749ceebc8 -0xaed3a838a4a7537800254466791fe58db895e25a6fbc4afda7f5e4565a80f4b3 -0x7b61965d4836367143b38a6a11d81a37ae4f6d298e55c5363de6bdcad9841213 -0x2ac0eaa3a83bbe09d5d8f72e30ad7ea1678c12d80f5c4b69538a756570cdc32e -0x1a01e044e187e9812a1b53788b5343673a97190203683d8c8b5258abb5739643 -0xbd2ffb4dfb80a86c2026e88c0bc219f360302c4916731fcc454e483dc8a841a7 -0xb2dbe79cc1c47a487b5e0ea2675004f88166e7eeefa710c8a2421645d395adcc -0x5f4a7925f94d0b4eb7df8d2318d95f8662a05dc775a57c5c28344a5919c7a80b -0x68f20d900badc0c1829b46874366fe7ff6b5c48566eded59f81c15c71a3b3a5e -0x0eb65cf8f546be0fa92db88bdab3347a0ce1c17896bd5a206d5ffb65bb92076b -0xc2a21c50b67ae13d23245e78dc3690ac3ec5358698abdda63df65e8afb3ed9b5 -0x9ee7e2b2424509d2d31294e086e21db2b032cbe6dbd73b3d0cb12635096f9428 -0xfa8f712483dda0876ada737acb3e09c5b82c7e400d8ad965bb9109a67afb3d59 -0xe88f7b38cff60e558a1f3a54483d52cef67162fefdc272a8790fa7b4d53588c8 -0xc25fade93d32de47a1f13cde65fe94e57f664fdd1f35f522af75230a4ae7868b -0x10f67c5d9b166074752df64a01e853c594174df9ab149bdfe669b76ff997cf1f -0x3a7c16655c241d76c70a265719033f679c7b379553275d5e06098f9d3dd24268 -0x95f89e58fad402411b136751a205cc744708d7714409ea8cb5fae661a3e2a278 -0x298da2f7dee472a2f0b2d4b3e94cf5c07630234d2963f3f715fa4491664c8b2e -0xf96960c537677567c54bfa3f042c8b6fdaa91e345e98fbe59a3625e30fb2b6e2 -0x294c2e28912613e837c95674dd3c7f3d29e14e9b0fcfb241a6d433e2b5aefb7c -0xaee58c05b59bbb59ab33c04afccded8daec8b23abdf2d8b0dc4584026fe5d625 -0x2448f16a327f0563e2a12c2fce2d5818da925044b2a98887ee3011f2d6493a8a -0xe1648e58d1f091e8301bd3473184c4a48e225125c83d0ca43818875caf449c1a -0x579c40dc59deaba807e8c0b67ee1cb6284edb9fd9be09707581ec95f4d005601 -0x4b90ef20a6f5657e929ef8a58ffff5d7a90450daac9bcfd0ee3e727fe5c69a6b -0x4e4c53918dddc6978b3aa7ef42a8eae4bf0db5d23acf67f168487ac27787106d -0xdaa0ad108a7652359fd2b3c0fcc1d8a214ad7a36581a7248514d30c94090ab33 -0x8f56084e98beb157a476553fceba225cb67d2b7d2a2511d8eed037bc445b1ffd -0x331e09cbeff77ac03bcf36b487f0967ba55c3369f693a0ba54ebf2b0a482edbd -0xf8bd60563e0b43e46553d7669091b6c5198dd813883538173f074723a0f8f00f -0x54a78d53dce402f9933534691dac58b8a6276d4327d550755281d563ae60b7d5 -0x604966365370bcd78d9044986a739260d6359a33cca6d7f1ac5ec8ccd29e91f9 -0xcf0e872f4e4d7720996babd4b9b9a8a1b79430259a2f527e29c35ccdfc996b60 -0x2cdc51289b1a500d20f74d34eae84226d1e654ed1c5100ab824ecdc7cf948a33 -0xf60fc4908286ec47df602912b633a610475bac92adbfdd4d7e99c23e14a0a2f1 -0x6be5e1216a8111b4cb4823965c7cbb497f0a11d6d8651ca4c59e65855fd20857 -0x354e0f8a9d1959a2f7e4a642a13f1e3a75c614e4094913cef039920f82140ddc -0x2d2da11ff0101c18b96a74e3c06719214787580bad0166fe1eb2162211d9b302 -0x241ae7c5740d82402b38d234108c6e8430b4b4841903bef46314080fb6166eda -0xe198f2a8f2bfe25af7c82b53b51522a30e271759fb7edd73a9ab9f3402fb311b -0x5ce61c844da9429dd5f867577c85082fd65282d673a3b906b1bd05f55e6b8197 -0xded513defa152fb22eca201d7f438ca3190576cc6bfd79cb03cc32c63bc3ab78 -0xff54f4fab93dd9a43057669289a44dda5a1dae666ae0ff3aaf25edf187d51d76 -0xaf86c3bdee0531240e3a040f7a830124cbedcf8a20ffbdf646a29905a8961c87 -0x2171ad99d9b4471211f049e5a759e86ca59dc35e89ddf5c1a6678ed67a96fe3d -0x267aa081cc3bc9b7ecd31f7553924efa3495dcd83f22eb6358f2ea251589b02d -0x5425bcdbad2dfc5d7ca38fa6340cfb2556fc660483b25ee2820366cee7467a80 -0xc98df292f411a47b79e68b9b93b8fdaf566d0700359af76b23db16d76f96ffd4 -0x13eab87811f9ec0a6ab2a5bc2d245c3df0906a68af50b02afb40247e6e5dba2a -0x3520e795fa4927c01044e060271323fc4e857b5611d715b38dce1262185ee4a2 -0x1bb3fc571cbcab08ddb4e1e23741ca0740ba12d674ed010d0d35de320f8aeec0 -0x21e1ddcc51187ec1ee0da9121dcf4a38fce503255d034290e204123b042930a4 -0x5b6a00b724eeaac3c163d9b884f377a310d86821f3f9cdd54d268f442d4d9e0f -0x367e445f6953bd5eefeb5e876d0ce5167a86a99e96736cad3367cebe9048b113 -0xc9bc20e0029b5387cb22699cb9fbe59a11b1241f70575d8cbeac400d97830b54 -0xe906aeb9766d1b697e130efff3743d3accdbdb06b5518daf964b1dc65fd36de0 -0x28045bb83891a2b10350acbcfe2731bb1edf7fabae2b7fbcc6e1edc093742dc6 -0x9cc9006d329b9cdcf292a5dd5ffdbe4fc0dd184b91cdaa4cae462485e493e07a -0xe0d055af9ba7ae573c331fbe0d4e0b0be23202b1d16eb26a75e46be4cba0a209 -0xd258885c5b46afd85e4fe8c7abd3eca36678f6dd68992fbd78fbc3958f853bf1 -0x98018eedca704272951630163abbd29019c6b28d9fb4f53082366f3321f949ef -0xf5b439a64ed8cdba240eadafaf73edc05098ef5144c75b749859331f7d2a5dfd -0x83fd0450f1bb2a9a508bb2ea4e554b033322f77e79ae1f75d703d87a6a9e581a -0x3c6bb7183130863ff51527514a7c28dda84f347c1b28df4e2f2103b0646dc54d -0x91fe39d01415f2bcfb93a0dbfc44effb34cd88140d4a97eef4a5cdf979ae0de0 -0xa1856201dd97b9222ae7a52bd67c53abcbb10e4c2b279f05362937ab80f0e647 -0x4bc2f67fe01887b4910be308a199a37a5812eacaa3957ec1d4afa5b754f7c29b -0x09994e56ef23def16ae971728c3ebb06f828b6080a5810caefae2a976b3f7d05 -0xa3ba47ecf19905da43a07df3365696128303b7da5b9509b28aca5ecef64c5407 -0x5455bfb419c5be7dc03d3dafcd4ca2d3158ce4aabe199c20876f5a6ab310578d -0x21cd94a49aaccf5e8fa3cb7bd7c0f269a83e56492025194a0504fed34c9c0779 -0x773eda00aeae13700e58cd4752c3d60a626ec1a014d79ee486b1fded37a9aad8 -0x2b4d284b07b46818f24ac907fc7c5a0a0716c7599d51345e51dc9b2c1e7bf127 -0x9daa9be957408dc667e8aab2001d0ac722f9b9cd061b1aaedb26efcfb4dc7714 -0xf9f066cf9d7197a580c0b0aa3ed0de87f12845573f7baae1363920348a479333 -0x0b67f672dbe1cceed953456d17d1f20b859c4b79ee90b56795b58ee5dac5f10d -0x44ced360f2a27cdb15132f0213941f2154a102a70823b96852c1f26d0c5f3182 -0x53371f9b68c09765941fd1ec410e0fd00949e148af4aefcb832804d05dacde68 -0xd7a68f164856cc261d9fb5cf54b656c5f6be62a053e2e0e61342b550d8832b5c -0xe8706848ac5c2c51b0c6012747e554de1b4359bdb9aa593f5709c12a2aa1c148 -0xbcc183e44e5480bc03057bd949230d494cdd904ffe99ccb3f3cb5c1036a0f7b5 -0x758396aef92841dd4e66e744c33a897debecf3fd7ea87e231aad52757b432eda -0xf37dd714ddc70f5bdbd1e4c450a479f203a07ca2491bb09430df69538837d48e -0xb03b0c299c5a5912d017d8effcf051c0b8ed830873f4dc485a2d0bec0f8a8500 -0x40332ffdad6b6ad611f3840e27bf83344942708d05ecd07b551e934774abe496 -0x9c911493de4d3dacec8f4fb532890cca7d35f52cd6031cae2bc10b1a1ec5a443 -0x662914f8344a63fd994dfa88f9066664785a94835652c6458fe24dea6dbf1ec6 -0x77250661eb05b0bd40fd6ba1beb41a7214b6f6ce5cb064d8806fbdda27e8134d -0x9b3f1b2f862375e44bb7f4f2cab82ec92047fdc92b4a4c7d0979e3af7bd18f58 -0x3a9a00ce08016ca0747e1b0df39e220290fadfdb233cb858e31e435b1e6e20a6 -0x313cc2d3346bf8d3aa0e74e961d19c26a76d67c431a5a2ec7541f3b8e55a58d6 -0xa06d2478af0e95e5e3d5d4c9f9c6577aa54d49085699da099b80feee0555be7e -0xd456535b967b1ae71a55f2fc90c2ca447d92c44939386d1f9bbd8f0770aeb017 -0x171609a1f19b72f5db7d9d0fd437a4197bc3a9250d1c89e249b6459e074f968c -0x02ae5994251372a3df96d318db8bc00deba982a8ac9ab89186a7958800db5515 -0x5c042bd060cc6c0aae15dd07f5370de4302d742c7a2193dfa12276d371ff1657 -0x18523cd9d64c817ca92f52b30f45bf720718cbd1fdb0f452885a40a63565eafe -0x79b65e6610f674f5b3b32c3c9ddd449a1ea1fe2594aa0e5cf69ed0e5c6594c72 -0x50ec1dffb1ad548e7e571d7bc628153289d3075bd5f1d62e0fab90465f21bf83 -0x1832e27e8724656b38a47b003ed97c3e82d5f1c45d85d030de5d845f6d95a539 -0x5eb0e9a3445982fd5a8bbebffccb9befc7d0ce3acae16b0725c07870adfeac5b -0xc27bdde30ccbdae574c77547380377d4f9888cecd23b1850b05c0f08b8ae6329 -0x415a8d1aee95fd32c94ceddcadc53c97cd2b98d45a3357ec05976c9fa41cb745 -0xe3f4f89e67e8d4c25c098b22035414fb9040672d66b3a2a45017944370609804 -0x3c076b0fdfc9252c1815f1423450562e1b3bf8434d9afe5620590d284644375f -0x569922f916a1987cf3fa7afdf5b72afb7419fe5d2b8caa1f43c99bb93a6c446c -0x0b8b9ed05261fa5f49da00585789e0b3dcec2fc82b5b82c167f3396c610cac14 -0x5083efd656325000b04ace7ec4d4b45a9fbeba8a338e886b620f99d7b5ca2b02 -0x165bc3a84ba7c1e2b2df5e6781923ff40bfb61062f78de2bed86194b38edec30 -0xae23f66a3e6488995a9b02a211ac9b770e61b12619fb874493fbc6acdebaeab6 -0x51d74cc2929d608f1cbef99cebe463dd332f214abc5ca8eba4a0838d08e4dc22 -0xea82661b9e6ad771e1038f603e5a88ee9f8a67314f67a7a33cae484fa69fa507 -0x3d735c45d557aa5f9e2a77bb9416404d2638a6ddb604b0a7a288c67529fb37a3 -0xa8055012d5912542a133f43ca1155a2d6714988ad773e002a29e08c5200a6985 -0xd3e0c8d4869f5137a43a0acb96bfd16651690a34fd98bb06cfd9c6fc18088bd0 -0xf93d6ca102d856b3a81a5fc210c2a291697e71aca70cebfcb84da0622e7721a4 -0x0ffcb215e831d17409035a8c8aa8d68a4d91129fa939375bb9828ff690d75373 -0x104903d8924fb91db5a401ab2c13cc6edf12b86e93d9c477e3b6bbc46053d315 -0x9597e2ff278f643a8efad8fb4a117d4325b85d6bbb2ea58b9a3d1bdd8ad5445d -0xa2d66e1667849e7a173434974cede6c14d478f733b86468d4025037388c99f30 -0x66a8710d441c1e7f4ec54aa2ae2a22b6525b8bb5202c9470b5e4264092088288 -0x15802a806092fcf60fadb74b29be0b14d45833fd515cdd55ab8c54d8a135a2e6 -0x063e8900950ebcc2fee1d2b794d051c62355ca4af5352f6aa06077a7a2280823 -0xe7afe4693ea377f31c3720958027bacad57fc2596429bcf2903277e2bc6dd7cd -0xa754beb4124efa04bb2d15e2e6504d2bde4fc38132cc8ee15edfb244a3c8e300 -0xcba7ec9dc3cf1a0da38a246d8811f4ba687bc14e721124b023a19b10089f5bd4 -0x5c2cb7b2ac5f1d05dad031bfb7839ea08ef6333de280e410d98d5fb467bc7433 -0xddaff98e8a3fcbc8ffdecc03d2b05f88352486408df5c06784fa5ef5a6798e73 -0x89e4375f9abc98063d4af73c23f1ad469b735b3b43005f58898c1c278e43f61a -0x81239674c01f4e1d6740ebd12ded99223fabd2ec24e0bd0efc5cfa2d789328b6 -0x95fb9fed354223b73bffc331823e064a76014d926bac9ca80561324fbd82e823 -0x09deb9a7a35a10ab500097993c98eb486d59404a4abbcef5a10d565662df72a4 -0x35add79c98d1d456d100418bcc6c3ed80b0a12eaff928eb7536e068b7c53976f -0x59bce21e05a21616ca49d57448abea1f37d83661ddeb3222fa767f8aa686bad8 -0x91676c5956b3f1f9cf47437296b24ac166041549556e4741bb3afa5e7308eb50 -0x3e5ba3ff5e5ad6e98e3b8dc510ba5636e92ad34ee917115e95f310ded3a02c96 -0xa44ac7634ce9ee987901f62ed19b1d0827ea2cb824f8bbcc3228e528ef833fda -0xde92edd9f1efdc9f88a0c76ca9af89817afa035fe2ab387e125ad5997b9df6f9 -0x91dbc2e02c2b38389eecc926a0b3b01e2d29164ac80ba44ca06f219113a7024c -0x8333822dca67002af8f49c517eeabe39384dd35d1f490d0e1ac3ed1b21630328 -0x418f3f2681a5180151777b112ee6dc8dce830a50c1b4be0717f0772897356a1e -0xadf8d4abbad7dd64d060afd520b29bdd9ebc7b2850388b78c201831b03f01c9f -0x636d0922f4142c0b1b556c607a876da43090b5363935d0be40a1424d129a0066 -0xa4a6583fbdd805ae791bbda05cbc151e11e9f7965d2a56db2122346f5975707c -0x4f8e5bbb87b6a4cd58227c63ac4f9babaa857eb9f9561464b95b57709fcd80c6 -0x95ecc6b7c07fc531cf49f2dfe8eb4c4481fbba5ddf79b7c895c670704a18f015 -0xfbca09a20ef34c1124ac8c1a6239f94defe2174b53c9e2e53ec99a1010098073 -0xdc9bea1362fb309d666e0639769e8c911985298865a84850e8dc2ba3b9cc88dd -0x59297ebb892fd97b26b971d302a2e52bb5a145ec8e6587d8227785596143123b -0x06c185c0e526c67d065bfc6863260b20d62d95f5affdd6c50eb638a2b9ebbc1e -0x132ec51e82eead7ffbc7f18ae499c8af32a1373d819fa5015b868f5a05029023 -0xb6f4ef8c20915d3719099acf87c0a7ac46b0c0654e434f2df80bb9de2c2845e2 -0x1d106dbd47a07e5da858b7b8e9494236a0eb3c4831ba6802e32fa9dd38f518e3 -0x126f3b342973f9d88a6a7ba183b917aa0fa2c3965052ec0a06a415a6066655b3 -0xd71deee5682a03fc332df622fbbf753b22b6de2bf6b963c9d65f7f84e1ad3332 -0x7c83d66a23a09ec25318288b96fbaaab77f95bd60f7fd089dbb07e6ee3e88015 -0x53b48bd59ef19e45ee95c117ff205d5455b7c25641c887580f386c74f267f02a -0x2db67d8ce91c7efa435555b0224f7f56da518eb0842fce60c8a53e2d22c0afa5 -0x13884001982385c2320dcd858167069624e33c71dc06d2828891cac5fa5094ec -0xe44f06478ceb8a0936c914df366bb687f38a9cc08da24f09a165fc3a0269d32b -0x01de2409cd0ecd436f7d066d42d54f9614d2feabe96998197cf97f39905f8743 -0xdd997022d8bea82b1883d83b9da3f3686e402ef4c8bab6f233e7512abb970b79 -0x750b166b4e563456d8212fd1cdd1f84b3e76e0d6502acbd72c90f8205539a6da -0xbe80d0af0906052030da0d8e3df2dac54803d1a967d359da8bd38e6e98b13363 -0x1d26b877ffe822cab2621e3a880ec8239911d1d0b78b41320bc35a1d156fa0d1 -0x5b0a00a27c0e9818cceab697b5dca8106c610911e79a5bb7c5bcee355535fb9d -0xeca2b4fab8f701dfe94de01b7a60ef94de323476bc832f0411c8192c675cfbd6 -0xa724dc9c9e8c7457585bb875b9d9b98956954ae5d9d41cc8b75e4f4b3a9972a0 -0x08667c4cbe33f06dad79dc50c97994c41f23cf835fdece9182147ee534722293 -0x6632614b4f6f70a493a09f58ca204737faa262f2dd96e0e28572acaa591eb18c -0x82f07842814a91af9fdbe4ffd6da0db807596c9dbe5ba00808b123c46ac03d71 -0xe5d641f7177112528cdf456ee579ac3c54345312b6baf28956c364b47212e40c -0xed8479a79e5452332b2e82453da87edb388dd29c69205ff05239c0ee08e7bf4e -0x0e22c110614e6c22c93227c9115660d699fbeac411d8aa30507563707078da43 -0x90685242263f4ab5441e58df9e8c49fc346079ee5dfdc675663f681a9349a4cd -0x3e0150767067a790e80fc8da609b97efc370b65072bde8e03030078660b0a0dc -0xccc00202d7d2482b8b1018b2b71838a1badaab17c405cf7535e58756cafff65f -0x2721aa372babf1bed211b37cf6871667473ea238053dce50ebb6e320e8c89b71 -0xae8e074b04dc810e4c23ca708ebc132eef037d864bb4aaba165cedb4b90272b1 -0x1a2d2dacd9cd80115caa9c873cb3c7a67bd64f181cceeac36e8eb450a1fb09c5 -0xc6e44800f9d3076d2843e8863b9672e95652767932ad0655e9b504e752715f27 -0x37ff0fcbaa5255ece3553d29d835cb8c6bdcbe2ff808454d6f89807e07438a67 -0x85596091c52d2834f7578e8b1cc13b14fb14ed3ca0b7a91896c23a8149e59df1 -0x3b68b37009691558f90eaf636381959a7e1bfdfbedeb973e60a1d47910f5b6c3 -0xf14cf96e71662cb9f4fb6ad1a23fd5e4964704e38df158ae7c6c79096ed45fac -0x9ff76e1acbebd75c4f8f5bfbf307d136ed45111c16bd11659eb3ae55d3f2f526 -0xedb6d5861e07214d00d072a53375d37d719c900c433426be4d3fb78dee353a45 -0x115efb148824a007348b380af9029a2d6a2d7e2748f6bbd77a763d9bb259007f -0x4c67623532cfeb00530afdaef337cebdac87954071106ca700ed73f5267225fe -0xde0938e02c1f3b5fb6ca7d93d18573e247f4c04a1442e21215a835eef014ecfe -0xca5415f26db3b6b71b511312d13cc74b82f7017e69d488b7cfcaad05396517e4 -0xd8181a94dbae10095485166a5db0185703e3400602c4755d95801b14af44e4ed -0xa5a8ded5a5daf1390ef74e002002b55b8658037332e8c047866055a1f23843da -0x9bc02f4a613a1d760edf6c2dc0a7de9bcc299ad186dd56dd4f248d6b9cccabab -0x8268977a1ef012a49a3db322c80fe44b4aae765f12d92479a6ed05e5b01a02b5 -0xec48fdecaa9cd818db9e26b0e4a881f8c2e2c5dca2bb952805d705fcd1042a7f -0x16a4caa7f2e8ba905a226d71f9d1d4e1afabddfd719a60131260f634ac85e99b -0x67a6d7c2d7b88b4e49f6e4ef6e4d7ec39e2821b128383c32638acc6c206115e1 -0x3bb239f99e41fce0a5edc47fd63ad55cfda31dcb491a03e1e2e0f0091a005cc0 -0x30aa1e7f811b34e8944ee6eb9eeec26e956e967eaf333d5f3ad6b0e72097c479 -0x4035cdfef0a56a18e663c6e7c70250134fcb52e77b10b7c915d8be787ca3744e -0x2cfef9d5f0eb69a86215a817b8c496827ec4d63e87cfb608b8f6a7010a9ae2a3 -0x744f486a9754b5ab8683fd246b665f11b94ae981ad351e52e6087f8d317bfb35 -0x415d9fe2c26dc581f9bfb9081127c476d12fb9dbc5cc122558d3f914ea06118d -0x4a46db832d551871749cccab5d1aaca589818e4d447a71dadbdaf95bb94dc525 -0xf3e3b5c7bf4650c3a23111b887a6450ad23bab67dd3b43fc879fa94d5765bede -0x34d4f204ca4df132d3f73aea8b6c06a7d7ceafdb29feb6a071761d5b1e6772fe -0xc466cec75803855de62d7ae8eac411541629572daed3300f5cac0f4c4cbee86f -0x41ab7a7f5be9955861f8531973532633a0f1d50852cfc48220e14ec5210e4ec9 -0x4bea8c29e26c7def7191a86226149932460f1c1c4766636120ba43936d968b66 -0xf6d532da140b86e618f714eefd789c4d7023f62bc099487d87869726ef184380 -0xf2a754d9528de2c57807edd9cd1051e2c24e02d6898b53f43c169402e3a90557 -0x37c81b744a28a38e821a4219e3f76cbaf24e53c3cd560d0ef31d391d5fd7d86b -0x6fdce29c70c7fe489a434ded5b459c450cdca862ed27058eeb39fb46717bdcbe -0x8f3a60b5e8e976d9029b23012892f6d8b1d4f66cf4be8729434939db86b5a052 -0xbfdc96556c0b6a521dbb5b38701d61c63606d8677302b9344bfbe1b13d75e0e1 -0xd30bf6f4847b5e0880b7ba5918c6a5946f974e8a8a5dd8b2a25355616b084adc -0x0f7a29a127294cf56a2a65e7d0cd85cd19c594b3e733bb800f556dca62ccd854 -0x1aee590e5e4a450c1c1f4672a1ba32b50289286b4d527aa3ec9944892bb1261d -0x02601256b1b05250932013c8c718776dfcf530d504f9565a00acaa213c79997e -0xbb4a3c2c549c47f0628fb9047d98236cead6ac723a97f347ac505f9b800f753f -0x3cb14cdf70096ae60e1a8c7e3777722c3b405c5134408709716ff33b5e4b2003 -0xef334f14c16f724e7161ee2c5f91c79f2305f19c03380084b5808b1f7499632d -0x93cc35f89bc89d32ca11d4f447d2d2986ecfa92d80b3b23fdc17ef11f5a1793e -0x70d6dd4a98803df89e00f0ceba7489bf59f3738ee28a23dc38aad17eb0c3115b -0x9af3aaaac885be4829324191500d09b849f3b5ea10b8657f12f48f060c64ef06 -0xf190c256c290079e347630fb54a3b4cb0f50959b3092ad9aa16a1f011516fc4b -0xb4691725bacd0b49688443bbd3be753a7c682b5ebc1347e5b0af6fee60539c04 -0x43b3be1c87b08addb94850b38ffca9e205c74a6f2a0004a6771349da45764f57 -0xf782cd2a87fc2e35dd45de85634fe181746a9c82268075ef3bcbc46c46eb9cd9 -0x442e305bdf5db94188f9b7a358febe6703f8fc0a2e860a2c717f4ffedbe1b78e -0xafb22697e2365d16c4284a8bb4cf55ba9b29cde40a9c5f655db56c676ec45247 -0x73706e0fadfa838c9586c9fbcec52948046f08f91ea6fa3d3c963873f7052705 -0x469025b2637f3dadbad630227dafe4908c077d8dea6d466b4a728d64025a3c35 -0x02d98b488a51c48d1972775dd32a46cb20f41a3ff7e3084f6fb0212bb2503755 -0xbeae8cb483054ff20a7e855a26812f5080abc421916c94e337d2af05316d32b3 -0xdfbc517a38fb915550892ba557cc9573076bc0de99719d60d53764bd8af1805a -0xcffa11a31ed9ee7eb257b2a2b8b6730baeefbbd6394732c3cb8f2b41e1993a43 -0x068b7b904d8f06fb726aee4dc73f4ea1448593d6ea266f0f0ea0e1616bc3ed31 -0x4cc8ac84bad0e48851a50b14530bc67f52d0304a827fbe77b109a7cda215f2ca -0x67cda8cd37fe84e030a08d1c80f399dc3c78a9c0e8b02d51727fe1b354c499d0 -0x2b3813b4e1d8886bd863eb9a9c15578a427ad1b1eea84bd747ed8e4ebb1a40c9 -0x0bfbd17eee53fe1e5dd1403a9183023ba7501b963cac3687561c08a5efe67bee -0xa81fb39d019f0cc6bd6ea37470f17d0b03e05d4dd6f16751000d964027a5aec8 -0x6544eda1083bf31ca215b7e1333a54b39f7a055642ff72b28651e19d13e074e3 -0xb12aa78183e34728c7df6ef1a3c0ec4372462a558e1fd5acd5e5c0ab075714b0 -0xb5b9ca80ff360b59d8aec18d0c5b4e170f8e802401defb178b27578746f971e5 -0x88a9a490ec06f8612104b8395887c792bf22b5cfb4ec6d387269a99f8490855f -0x0489465c0af635c13e975556eb45ae2c5046565820b59d20e95f8fb0b84f4107 -0xd697192250cad37eb85d41a0906d3187029325ac9c92f9c39d0f15d1cf6f566c -0x714c73ce3a4b351a6fd9dc046741adb567a405eba47965219426f99d315d2c16 -0x2d012feb7e1292a01837b87cf65dacba2cab7e67eacbac3e2c5af18ec7c30e27 -0x6763cb36cf75e268ee779ed2d3f6ab501b8eaacbf06d33790fe0615c0fb94037 -0x15220a13acf9e7e111abfdc43428d9b3cca875c7611b55654fd15b22b5b24eee -0x368fbb291c50e90f4bc45a53f365bb2f67efe9aa99a3d33b2719c02fa6c4e026 -0x35b2cfe5ed1aef3dc66d7da91944ca3607332a0428726ead92764dabf4d3c626 -0x1a80fcbbae8d051202a7578ea267183376b2bf2cdbc2264f5022674914256e3c -0x97fb6f9675e0de48672c8225a5d51d4ef1fac791489a8b828e442786a543c556 -0x3f5d460a622a11c45fe121df85d656f77080bf5fd056d16813604be871fdc02f -0xd02b883099619124aa5af2921dfb6350db417229e67d90e87e3d39e3ce6b2b28 -0x7be54590561bec6234c25febbc0e1ba677e76c3753fb346a4884189f97bb36ab -0x546560add769f491a512c786415205c7db1c837f43704c20ac6034bc30d7bf44 -0x4bde4a621a67260911957a2d88283dd3ea7ab54383428b16983464c21d054d99 -0xf3a9872501ff363f7b5ccb6faecbf47329f994219fb8fb72855c39ab4d1e86a6 -0x9c09aad11d91926eab9ebb0ccb1f4a36b3b94ef58acb9fbf22df5cbf9b4b6956 -0x351b525c7b12c3510153368606461f70ab8c40ac56e4212de10b73bdb2dafb04 -0xac78196b2f55e9adcc1d5b4e4dcfbd58c553bb73f6004dbfb8fed4b27d13623e -0x62f26827c71d4e6925d64ffd9dda75ddf6ce4cdd4701058b2e764d612784727b -0x7e815d1f7864281894cb584e54c4f5b0d25b612cd03a52a0066e275d3662af84 -0x80176fc43d3a3c6e9a288fd3305e79f91e3d6fd3352baccaf352a4934abf09ce -0xb09583dd4f2a3a1b14ab4b5275f81d05fc7f0f52f952c529e1fd8139d6928b6b -0xbeb4725cb45eba9232468571d032305c1258761750045b29271c51691f052b39 -0x2da5bf38eadc6fc0156a011746dff625abaa54ccef8813ef349bab8b471a20bd -0xcad492ad56e471484d1e3f2cbdf3373963090f83a9fc233143ec1e0aab7ee4ec -0x3c8e3a3f34a004467195e403ae65fe8311ba8b55deb17703ee3a63374b849022 -0xcfce6546832da7a0cb74a1ea7dc5b80e643bbd9988b847840d72f768dddb75a3 -0x28c56b34a0faad7ffda8f727679f19e20454701858d8a0021d9fbb144caf7cb4 -0x1ce30fbc2caf0ad41455556b12f653b39c4de05669c04920ffd815dd1aae2d1c -0x2eedc8d4b0f98dbdc2d583bff51dfcd5740a32ce60b7668e97467293ddc6dfaf -0x637073e0c938a3bbf248c8bd7a0fecfc7c0439d07fe940fed0c7a9b30713bc5f -0xad06921376f7ace5107a6600a693936f44ebb377bdcea512030f520dfa9652e4 -0xc25e5a4b40f7b0019e77a658b5ebc2d15c9e03bde2a0694b263139d63876d0bf -0xb034c3470dc82aa5155bef61ca498f8c2996260b89e45fff311312d8a0b11218 -0x8d732afffd835bed6a0b06ab864746a0ed3930a3675d7b2e79885a51c77f64ec -0x1976e0a293a54388dc9132a0fce1e9e21caa6033b23a2b43c29674890feab1f6 -0x373f43b9fd9df21b3ae5d7a266c3f3d992810f71d726a303a148417a67b901b8 -0x08e8b326f6d7a50d81afec4ebf0238195e2ad3d144cd8c78ac8df8463fde4795 -0x5efd17aac0a79bfd2aeb0a1ca40b8c4206e07229a7276d8ec0b19c2367c73244 -0x2bc10d8ac2fa13668e8909445dfea6ce69bc1be35037a44425a9d2b707f92781 -0x127bbada4e2674aa043a091442d2c8d252b1023928bd51f2d4daf6532fc08ed7 -0x359f69c76940ef1d334615019e17f45f342370b373f78bf446c1f1cd3b410164 -0x5dd5adc8cfab3667f83d011829ad57ae2553a05616053386b8fa1f5b04eb36ce -0x4a66df08ce8764fc0b8a40539dbae83076d265a39972b55d80c4f2aa8cbd1995 -0xb7d152a7b1a62017ab2b9933f5e1ce1f27209a38419a3fcbfad025d793da3453 -0x707df411f6e190b53b12c19d7c95f9be1d556641efa131d01586042a57c5bea7 -0x4c973bab2b0b653a517836b5af248174cd52a601ef92a3a0e362a056203d5103 -0x9bea7057404fc3231dc04b6fe231b9e1b2013668630b453151a8a67e4b2fbdf2 -0x00b71249633ea449fce183828569ec550d25dd651b663fe99edb22206b06076d -0xd3794fc3ea901d4385fccfb973d01a3fd7a32d326b8fde53ff605a199796ce2c -0x59276d5c8d6fc625e65c3c56c21df31b90fedfb0876cb38b8ef537d2952a7045 -0x0ca1e6c9f82d6eafbecebc9bb31c772714d7bb51abb46b52b07eee9833e39af3 -0x9f658a229c0ee2b31a5e480cbb1348170998603a78fdd40cf8122fb2be5b0d99 -0xc2705dd8dcec465e2041a136808743e10b450df3524250c7d2883bd6817ab25f -0x36da0f3aaa80e671f6230a536d41e6b57dcc82a73190aaa3d2721c8f0612516a -0x3083f22c6f45ba4b5243ec3b91dcc42a72ddd15cf529ee4210d0f34a7b7432e4 -0xb104e10de0300b8851fb9f03650d8261f210ad665f3f31a5848d8c161d0c3334 -0xdbb5d8d35a3b1211cf9c65643fa18384b9014963e0a0dfcd236e07d2cabe43b5 -0x9d12100137cb2bb6afbfe9fac9e9f4f6bf5bf999cd4e0afd46b41eb63303b8f9 -0x9b35c2e00222d4606e7523a8dc4455ecd1fda134e1f4a22b714c17a9089e174d -0x9578fdc5c68759e40f6a0357e712c0b1a78ccb52b79c184d3c3c78b04c00d9a2 -0xb552a5cfc8f9cc1d87e0c6e6dbc7941845f1aa916b74c9097ffe643d473a04a0 -0x5fdadf257e493075e7a5f9a82838d129b75fb796976eb83175f3dce465ed7582 -0xb66745495f7c2f441b3504025885fabcf75e8709d6ebbc117cc6d41cff064e2e -0xfa4914130dd53fedc9b3d15d1c44270e8f94a43490a5b7d9983bc43cde30f534 -0x3b2ab148a473937bb28d65af368e0937b6d4a4a85c7f893fd6fe5e10f89d050c -0x157db2d8688547d9a8a5ee75fe707e7e731831f7674937948104c59c4f6c287d -0x7dac82abd8fb684327641e06342821b73c893aea0dff25825a36431736406056 -0x2df32133916f70d9212e726a40f45f8192e05a7ee84a3499b1d749e9b5d09b1b -0xc91d1ca2969ab7c632a37f48da2b01861ddc8df221efc0b8aa0bea4e82a5c499 -0xa92cffdd45c313f97e468af98c29d68742c9518d24283897ad5365386e9fbe2f -0x29c7a4d1bfa4bef521622c4ce0a1196f5a01daaed4842c6be11840f7d3c8d28b -0x08da1a875d5f37335d1c2e569249fda7eeaf9b047dab109ce6881d24ecaaf667 -0xa5ad73d3c8cd1626c070ee7c1734847636015e9ea05c0fe62221a66b65131010 -0xac3c9dccc88d4ac8eadccff18da4b3dfb52b9f7973df2bd0835e279be5a31462 -0x942bae7a88b3c8ff06b757e93063e4c3a68c4d742caae3eb05dc3a6425ae4da2 -0xf9fc7f29596cb4350d15206302bf22176039fe5028b81c38721b7335f7e2fccf -0x394c223e1985280fedb42fcd7a85afdbe146457572fade6e918042bafb831906 -0xaff4144387543da9dec11a3738f05d28015132a75d59f9f9631f5caf4c90df46 -0x8e043e04003ecb7434e1bd4157e1956121496e4003b809a775792d33c5d79b43 -0x1e7eb222f65753bc7e74c21d0546f0cabed2c9c75a42e1e806eaec9eeeb0b639 -0x869e298f003a17df9bc25c3aa2860ca3bdb3ff6e7b257d63d478e8c261fa2e29 -0xdc6eacedc9b1de33461fd19a7a521af66f130caeffff44eefac4ffddc66ec55e -0x3e8ab5c30b1b3a46943d290ad19a3e7a549337dc8b10e38f963164f95578fb2b -0xd00c6e04e051fb88df703170071a1d6a1a820368be4a3e8c89f491052b20401f -0x91c68bccf6658249ff98e30274ad7ad4b29d9e07df7285dd550fda40f8eb1c53 -0x2905e3fdb7ace0f82b9106de824dbe5bca94ea76b9e2a02edc087d72e6218e6f -0x338618429576ea48097cdfbbf69ad6958705d5b84e28407ec1c765e6ef47d9eb -0xcab3e05adcd8b6dd16dc268f4e5c92870b21827f88c11707c1f65b7f3de979de -0xec2777e5df65f06a42d8c8835aa0a63e8f83fa6db7f9b0f081e847877a79e8f7 -0x4f51081336ef8e53abc1d9355836eedb01f5472a31f0901a351fbf4e4a8ff3d7 -0xd68cff6544e3f965accd5bb41603dac22d3a5551bff383aaa4fdecf09bb130c6 -0x58a1ba6c6baa723786e1d530aa1dfed6e83f91c111996c6635a6843a09240f30 -0xdde43c45506b8ff9bb2dd6c45445f64ba7ab4e71c5a747594941b50311dc1a8b -0x142656d243676e857e110dff3d308282e9be378037a41dca923826ce7b5816aa -0x37ed5c779464e0e998aa27aa47bdc70fb632936248ef4b9b3294173a613cb186 -0x59ce60b12b40241fdb241832d7c60b2b63233de0232d80a00cab93587a12c75f -0xce89a81cd5bec722ce2a9a9e9f9179a3a5e073db2587cb1ff03693f99b348031 -0x76f15c8fcfae93df8f2ef27d48f46e2b2e531eba38c628ac9c09df7c4059a2dc -0x5c819b0c2f32e84ed108160943a27119d3f5f76be94991e2f7eaf81ada1bc78d -0xda4e44d614851fbc81dfa70e5597fd80ec356dfc11792278ac5d0534466dbfe9 -0xfd829b3a9474bc5ce06ae55240a0cf4e2b01c0246aa9bbc7858d893caea903bb -0x8c4ac6bd59696eb58b330c4ed993ab3d925e7e8112d0eb13135b63d8bf1e3381 -0x5ea0cf52d9c17e252ab532a0650fbc26b0843a31019cdc62660cd5c4d4b97abc -0xdae54cbb04fce9405e70b8e958a11e0339333130b316e8323899629d4214594a -0x83869bcdeabba8704cbb5e7f4e52d5055c55761bec00c6988aa2eb539cb489b0 -0x15c9ce5d98cf5df2fd68574c48ec89fb553ee6434f8b499d0d3fd3edf1ab7019 -0x42385d5399c92c7b13af81bfcedf378034d53a669a3e912bee0419a02c139ecd -0xe7595e4a3b37418923541ccd69f9e72b85063fd0ceea79fff9d01221dd2d83dd -0x551be7bd15bd3e1c8e5495a0b470c38b2040ca2f95c8a4ad74be53620066a49c -0x054476dbc51cc4240b98dde432720d017678827d8d0e27a43dc7cadef946ed08 -0xbd22fbce4f6ff0a794469ae1dc5a4d776340e490204b4c131124d2ce6e046d37 -0x02ce58c58cdb4b275fcee4cc178280e70345bc5eb325e4998ed8aa1b4b7386ab -0x2a906ddca859f48a17d2b10fd0a8f50491e8135afd3c8532b3bfd5176a2142c4 -0xa635685a5fc946ae0dcc9ee048e9f1ce8358f2d5f8a0f03657510384ebb4dd2a -0xf0150a9bd7ce2cbe9d7517f13114dcaf4da5e49016c5fc804d6ce866fddd4067 -0x907d649df767a2c299dd49ac4a2b38e22c9ed976fb8b5eda708633bb3e764f69 -0x0bd9dfef84f9a8f596c8b0704f8af0c78f00364ed154a3d9f520ab829d8c1137 -0x8dbb3faa4550976b61d39a38d202e68f0d406f6891345a504e86c2fc4ba68325 -0xc48597911aefae9684176a2a3e29c1932c2f1f8eca9dde6da12e23b4f422beb0 -0xb5b8ce0def1a9d1b77543aef8741a67afd2793000db365e6db50763dd3c267d2 -0x16ecf23a255cbac22349104d5ee29e9f9f25c76bf169b42f71e43516f9bd2099 -0x2bf4f4a9ca810e03f291ef11b324802960fec4408f0278956568ce7ca5f44338 -0x67790ae8d2d3b78ee03da6b81a57d337cad67901475ed40d0ebd1db9f0415168 -0xbe72ca2f1acd6172e4aaa5d793773933c74ddb27e28c19cfe8b8255391d5d54e -0x06a92dbac51a7aff587d54e9b085a6afd081cabe4cf60a7bc0ad3f534f662237 -0x03665b21d195472ee0a3ac1d3cc221ae93c11570380911ad5fbf57db2e811ade -0xc8d603fcaa8e6705ad5b2841a5bb33b7c9a086147ba669b74294ce1b76b3a0dc -0xe7a09375aaf3cab6c169489d30086a5be8b3148103202b9ef883bba3de42922a -0xa2965c416b4186d082fdab220844b9bab2dbf2b64792b6aa7104afd971c00449 -0xf72624090a2e11a957db74ed78a6c4514b607015f278a78803d267a9e9348c1b -0xcfa24b33034a43b795ad7eede95ed0ffffbd57b3ad6b76822ed90f877683492b -0xfe3d7e60f7a2474e23846235782467dc99a1a765ec5d4e90c0451eee3dec50e6 -0x7ab482300208ed5412d61dee35f398283dfc6d9e1e75396ee9b5f80c9d8026f1 -0xe96236cae2e13794bdaa5d1656e1206e0947559f4764c6a9efe8e19d7895b2db -0xc71c419d1aa52e556f6718ab1a7887abdfe141d023e9e32a551674601bc0f242 -0x349b2d64959342c2df3c10120bc18e7980570ab6452db645c64d633e60067fa9 -0x86dc5caa3598c0d2bcd0d6f9c4ae6a6159429a18501b2994fe9891370e50173c -0x94fa3786d9df10e57f4f2f5ba460324a8360a572182e3a7e6e9fd0efe1a476a9 -0x42ab7bd70968e00bcea0bbce392154f16488eeb8d1b3f9795655cd6f2e4b76cc -0x88a28b68ea1fad67afa7b1c806f72d1ed209b2b7ff3e9879d39c8d5c427e81e4 -0xc8938ef6d2f7274a7654d52da018a248f8938165d8de84bc2805539349cd1687 -0x82634d667a70ba6649433d69610388804ecfd53f683086457654a2b957ac5d5e -0x1cc50d9beb6542bb669d4189bd9b88e45e2132c2277ae4bc740286991e8e262a -0x857777bc6db93f918d5f4266db0cb40b0a5dd1f461db266b47bfe14a2912ca1c -0xce399c1742d4abdf165947159c5cfb6d6f3ffd0c0a769d6028ea152add41b027 -0x6c328b1b8d1a8bed9f5ef3f5ab9f2a781e9add9c8695c03bd72782927227ebb8 -0xf6f94fb611f21e72b4a99d4493a6cb9a71a879ceb2951abc8bd2e337a564ea87 -0x65bd43d6ad2d1ec40901e5817304a51b760c174ec0a46345120eda54687f5501 -0xa2a4162e163c9d02f54ec49751fc299f3b19dffd9046c0a6105bccc3c6e03421 -0x2f1660de897dbda1b800ddbfa7131a1c6c553c46fb9491e9347c7401d9718526 -0x3eb13a7db263aa573192dee32c8cefa954d42ff3f5eb31d5770c9f54c7d8dcd2 -0x47be4cdade69400c71b809bc34c42cf414b82fe9cf36fdb90a08f5b4317fd251 -0x910df1909537de81ae2e28ce75b3b9b634e29410267fd6bb0a34c73c2edeb5b3 -0x1cd2bc327fdd0594d4e47692d2ce6273bf17a9c59a1973b06b50ed977c7f6a97 -0xf62e0a64a50dcdb082b44c2fa9cc5a1bf63591ff4d1654d8162ad7f62d7166dc -0x5e95a3c882cc2366f934bbb5050f5f21a95abf8d971cbf7507cd766e6bef08ec -0x6607618589fd2bfb888f6776a3136958002d0968dd2b9f4a40bf7467027574a8 -0x05da2c579d74333665a0a88b945e07260f1f354c0b572da8679812194bdc0d64 -0xd9cb8ad28221a5d4ada501471d75a259574b87252c23f256da66cc222578067d -0x20f99e795874ed99066b83d7885526abfcb590872888078af2a9deb128c01006 -0x6b03c6b770df53087e99d20a47df7e723c2d82a890de56568e0bc6289d548b33 -0x65875579d08c0eea60e465a6c9f20c1a89b0d5e44389c8efc3b8d3f6a22230ef -0xe434022fe5f4be315857e2b393cc0c92c33e85f85946984db4b5e7aede541411 -0x5c9614755b9a4ef46bff07b5fe1269852e8c9a51a3aed59fc5332a6a457ad9b4 -0xbe5fad72a7556767530dd02ca4d745031dfd8940e55cb66db294403bf9817fd3 -0x65afed97758a489e5bfb29a97e0b1e68f7952f1f521e7d2d7b0c3eae29b5b27d -0x5471f01a6317e1defd8f767a33cb70d8dfa293e3a736243c0c004d0aaa1a9676 -0x87ad9d2e4abc5cf10e6b8a388a16a638f20ddac0cea3a76af2cd83ba032daa7f -0xad679dde4b81811af17a48853c553954b879143fc0f2d06036c3d0091e9d8bbb -0xc236e1c8b6d92a9577fd6f01c6563361ed5f340597966e49fd7115b26cda853e -0x3a1d92e286e9455572b6c163f1af0eb1ef807bece6ffe3cd77e8a006e38fecba -0x95893534cb356d25dfcc0cbd9967c3eaf2f5eaa9314e001d69599b10c3a84502 -0xed4924526c408b011460bc224a494429dbc6237d58a10276cde3a0ad90fa4cfe -0x3ecdedf39fff5974a71d8c0b6f16af814add4e8be9c7aca1cebb10fb40168fb4 -0x9ff4adaf4287ffb20f70989f5f4b09ab52f98c326ddecea7c03281b04da311ae -0xd89fe75e6fa22b002fbce8736f54d7fdabae746a8df421887da657795b6939ae -0x621ff9fd5ba9d5b65c997e9fb696f41b4b1fd7f6c88d88ffd149dcf4f0d7ad48 -0x217c4da1789b68d60a2aa801296f0a25d647bc1ff6ba84a401240a4095912ed5 -0x610dd09f002115828061708788cbe5c74f9ba30e95a96bd6bf4bf7cbadf3f5fd -0xef5daabc0962f5be36c72f48cc661e07ef3508fd5248402d4b9e27bbce1ef58b -0x2df1e43c370f840e7b00853c6af360e61d6fb13afd9a87990d57c7ce01cdee13 -0xdf8ed8f0ee55851baf2548841a31a5f519a37eee6a3a136aab4b591490346c50 -0xa5f24c0e6e5bc42ab341fcbd7b44844f7437f6e5dbfb3a78967053f81659cf5a -0xddab50549c33401a5bd9e26b8b080d869b9d981895451055fb98bf422335a02e -0xd1a86fe58b7d788464ed3c3812e6daea0fe6e1a06cab585683c6f4fe99237d4c -0x403175c14460ad27297e6fe76d31d3eee39746e4fb937adadb4e1cea6e0cc80a -0x428566e14f536de1f72b834b77e5acfaed5be78bd323be416a4276ba64b1c8e7 -0xb4270b535689b8227f3d08bf882885ebd3d553fba2e6b32361bef6eca58099d9 -0x81101ad7e3bd2d4f4776d4ec325268705202840ac8867e5d564d638cead5115d -0x29dc74bbb543c01d97a5da9f57c86f7d47cb2718a40728d8995512d36cbb81dd -0x8afa090fe49aa109c256cf85951d6b579d95f1c2b2fd7a541708ab9775142afc -0x849ea520e13dde1f62aa40c5f010030afdfea7e6becb1fd09cce51fc04cc05ca -0x7545adc2c97873dbef2379e18c4d49b9db3087997896ff2c3699d0f739025096 -0x99636fef8fd6689ca3087969e632115d9c47428cd2cdd3d3b83ca80658c8a696 -0xc30949bcdd8a4f9d70cbadc0151d5639e55f6e6298bf4b45ab19939fd1d3922f -0x713cf3f3aea10346b0de8191bfe4c5c928f4a367fec058e3aceeb427570bd9e9 -0x1651e103e88e199a0907cc2daac16aa1e6a93414334626aa17e7bedde0aea7a5 -0x23fa5957154687bc52cfe4b885d7667e98d3a7fd6653e7562dc7f41abf5d166f -0xe0e2ac96763620fb1d4a45598877b7fcec0b2e102a9e291c8b782e9cb43eb63a -0x754f041e823697699c06d88fb12157e0005ec8a1967f70c5fc24da3be9475cc7 -0xbe3be2f1db4be1fa6a2a5cbd60b1ae191a6466045143b19b466b9f8b7a9aacc9 -0xf404bf98c513e7afdab9ed87ee792553470e1e62b929caf34cca45f136f1f5a9 -0x865f7f2d665fb56c1763ce055c847ca64856f9ea1bf715c29c93921da8034d69 -0xde74c2ea732f785c7385ce88b018bfc94e379af59d0537a360fc2d771fa8b441 -0x84e52c8fd9b7c814e09ee5c3c36397568a230af60d6c26e40b126f04cb9ed8ea -0xae83a9031cc73ea920f19d3cd9bfce2554b1516fda3e17cd3c2c512e5cc11c11 -0xacbcc6422f3bc35bc35dce3088856f56860339a1edaa75e620d834f8a3093d47 -0x5c8ffea5c38c16f8c32602b6ffc34665678052a9409a2043eb8cbe00b5748685 -0xa9805b04a8baa794ccb56a54f2fd41a8e5d53eb6b6137a84bcd94c7f1670b515 -0xad3981653be836a3dfe8222f03fecd5ffc0a92d3e7e0b9ac9b05aabf9bcd3a81 -0xfcedb168b45044f0076c9bd133e2130ccf58307e8fd24716ee41f41842e4ed0f -0x4d6c1c8ec50bbb267a979397dfbd513bef8cae5af7a264adfba6285599d74318 -0x5b0e801fcbc667e16cfd822006aec1c10505839de07bcf43ce572d8847eef85b -0xe1603602215c5bed1aa796025ad6e532f81ed8f87040b8f94e1e9d60cd0ff83e -0xc8848aa12fe54b9bf38e1b407e82d02c9ac571518b588c80ed8fc250ecad6c7f -0x12d91af4fd2b7943064ab6d7bc99a0d3b580fd75c6c1ad00464f2d41ca091e61 -0xd943996fd943544cf9deb04edff10f4b71230265b237adaaa7e6884b82b03f55 -0xb81c997ab70b49cdeeb92eb3df6d7c1bc17dbd9f8425b887a6692ca093189280 -0x84e812f53cf11b19791bd44d826cd8533d400bf748866c72057544bdaf22caf3 -0xa4c89d0221bb7554c705be9dfafda27aa60301f84618394a69f66e58495a3590 -0x162e7c9f886daebe4d516918ffef95d052915eb48b657645861d03f69f93a3cc -0x552f50657c4d76f7cf4ecbbd7bae73b9e6e7d90f0b156c932fbfd4568b16d5a3 -0x1122c291a183bfc8a42d4b37f04dd96ba067dd1612696bdf167e729025c29a36 -0x224e991400e41b903c38ca4154fe81abfd54e3479c5a442b4ea2dfcde5c0b935 -0xe70bff5fd9a99190f47f99af5d5254cdb50207f84c0275e733ee28a91cce577d -0x76fd4092a76e10dfae059a78aa7d0c20e424bb9f0cc19e4f33a627910147c9f2 -0x8d894a7ae19ed507aaf5e3b10eadc0e1f355b687e15d1fcf5c75e13aab99639a -0x37599a5991c94f00fcbc2c4a8d8e967d917cdc26af8cecd96b0fe0c707fa78d4 -0x81a1d93e1156d0f9e6ddb91ca69fce5945dcf7b7a0bdbe5f29154c823f48c10c -0x693e4dfbc03397b6b5cf4f1ea18b27a527c01c758a8a7e1befdfe5e4987ec79e -0x91d5e3cbb8bfc9a955cf45f545e3a6870980201ae2459a61d43ea052a6dfe6b1 -0xfee2f4b038617ae0f6435b6f45e6d023316a37f2f286a95d771476cf4169b188 -0x9c43bad0e0f4593f07345768b7cd7bb1299f3cf69ed5a3f0a39338f63456807d -0x7b94628cf2c1e20b1e5dd2c312f9c62dea5d0a7f8ad08abeb5578cb7059c94c0 -0x892f0734f506ae218ea5fb9f6960beacccd5140ea8d1d06d508dd0b653c7bbd3 -0xe51db98300226ffe5d2771baa51fc8eb997733b14c824e874910e5982491aaa8 -0x79cbfafc3bf890eba8ddfc78c6d5f03c5c9e80b8b953efba7cf3aefd7330f2f1 -0x6a4ec1251768ddebf89e1c68b9e9bde4cc6af644dd35ff824d9f9aeb464f9b42 -0x7319fbf1151056f36449f6ef3d1f30740b20b45ba5cd1989e3933f841a8b2748 -0x0cf5e02841f6143211988ac7b6969c06f9c1edeee69a419ed5f976eb3ee5ba09 -0xfc8f2841283fa2c5a2572ee1a743a6121658f139dc3f82a08e5b59b6f596f2ce -0x040e9ed8636a3c6a1d107edfa51e78f5f7a4203df359278fd501e077feedd73c -0xd893d0dd728ffe628a0e0bb42f98b13d2cb8edcd0732993c4df35829e98d3c64 -0xbf96c920c1526f159b9eb7424869efe093f4929178e0df373eebb95837b2c2f0 -0x629975e17566a6fa466986d423b3c377a893c951bac838bb8c8c181271691aa1 -0xdd741ca0b60457361657e3c1c18cd91806f17aff091b26613a513d1a49a1978f -0xeede1ca9f7e2d6d71bfaccf7aad2f47fd0d4ecb6930bdb1b7d7e479e07e090c2 -0xec1350d49192217d9fa024e30958e390106e1436714268cdd9a091e2c78634cc -0xd2013ec72a9ef6687540729c4a5f3b370abc551d72797bd849b6fa6890d6d3a1 -0xeacbd497055539d2698095d8474d412b8df65f6861296919f083c772878b1185 -0x099696056b74d92d15f0dc9e83beaba3cb36f9ad77203eb3989003a6eeb691f9 -0xb84b45778c8ebe6eceda65771943e5b99df6da809e66953f811e689ed16caac8 -0xf52f3eecb0a46204b553976d38115b9c7be51604a3a05a5dc37a12779528b985 -0x5ac6f23eda5109230b61d67dd497d0d22fa2b783650e81647f42a65c4adf937a -0xc9bc9d73d514ffba2d5922ae7e5133af1349a0424e065cb1df31fa0a5bedc675 -0x8533d2092b31293897029d106ca774d534ff113efd126495fa516c4777e5f704 -0xb34aedefbe1f23f90669fcedeae705a300a4e3c4ff81587fbfbcadb5d4bee9bd -0x45b2702b397a62c50a819c5eef1d5bdbce03d2c4f4e1bd47538069ac578b4c32 -0xd125da83e588bbd53275b3fa4759701299ee50934b15ba9110edf29874acadd3 -0x8c0eacdde05f3a457730c8c9366d64a0f362e7d5505bf6e0fe94d2edf2e197e7 -0x1a332b60c769eb064e75d6f1bebdaef3ac3ef61cf625f8fee59f9396a92efa4e -0x1ddc744e17d066c06fb464fbfd8125015c97cefc2e1129518736ee3a5f58c696 -0xd4771d2cfe9192e4abfcea951593bcd5ba73bc870f3fc266501bf7ef1e0581e0 -0x5af4f4c9bb248b2b3b40625a2c14c3a02b0d0f3c4f364d15fe81af16360cbed7 -0x79c7f8f3f48a58298f5e2089296e761b50240ab134b4590b0f5f29e9d3bc772f -0x9593360657a79bedac8596f51c168c8a31258867354475fe352594c206e40817 -0xf41771e154b11797a6c0f2898364f3f81284405d155662767048924a67e4cfbf -0x246235bf2c8ffe563fc1644f78d8eb41da961a8f73130433c96f9f3f7014ca39 -0x8600d125d8e0fd81d04d7e4a20000dbfb41bd218f9628b1e7ab5faae526b3405 -0x19e8a69a2ed65a4c413ad81bc3bdc6e8c2590b074cd8ad95c0441b5671781f55 -0x34e29dc2686cc07873db42be8cab81d557c91c5e6a3572f0dd68ffa3183cb503 -0xe8e912316cb2f0c48df29aa9817d4a0d9a50c729e577818d49495a99ecaf57dd -0x3871dde0cedd8ebb2463d1503d401a79f2136c91c7747f3207f8a1d27e3dbefb -0x07ce3aac41d69a9be5426430388be6649df2e33b255539846cac0ee9d216d28c -0xd8849500c287265e0645a228a0fe442482a0ecb097fcfe52a0b4ef4df9b2b7ad -0x836028f96c2b6636706b6f68604c91f1a3d92187d13d2dc49dfaa624cb836b3e -0x500e1a39ec78d79005f6c31ebd37e7071e94809d855ea0f3296a64fff0e1a451 -0x121826c4f3d492c89456bb0309f7c658780a781273295c071051ef561b31e9b4 -0x7a895ee9f60291f92e0f7d7be139ff6aebf59c70bcf4656903fe74cddf16f6bc -0xfd2de1cccb9ed7eb6adced083b2617d129c6e23ee1e276353ecdf745301f7203 -0x1cd02518818026c9c4a9fd64adb3a55ed990223ba177cd15f162066f36ac2783 -0xfd39f41f2e3b89375cc02e56062decfd0ef386012823654e3f58d1c7181e4d81 -0xd225596e65ca2d96475c78f57f47917992c5c1a19a167c542ea42abde0d1c69c -0xa858e1a9381f5f0b96b2e8e97445aaf1dc85d83d880aa656fe4f00b410e6939b -0x4c90abb078d851caf3e8f646e458a7e4c0f7c13ff2f74784412c01fbddd06c2d -0x42d8443115564ed1a83566e2acf7bd7a5d4cf18b6c8119062172afac30b3b77e -0x815125a816b76a321c24c9c27d5037951df87bd6b5d70fd15028062d94638a0e -0xf3e8be6100ffdfc0f3716708168f662adc92b4569fecf7023ff1268818384070 -0xd69b80031e5ac586fad9a947a94786e94927973c9aa7fe21bc3fa3dda4c5b526 -0x3ed8955eed446afd8943128b71eae729ce16b66375bc52366555def64235afc1 -0x66b28d7ce9a48f20f189a6a00b653f34f8b92bb0e6c67893bd6592e550744ed4 -0xb6d4f4d1c3a567e15b041848bd2f090d5fb7f20a3102929212b57be5358ccb79 -0x30a56bf3b03956ea9aa27f645a7d55bb5f3420749781220a6839674874ed3216 -0x5c98f2a6264bce641212034d0b74511899061a2a659619b2ed2650de94518da1 -0x5b05cf00b3b938cfa159befe01c0f8d8b3978634ac597780a843e3c44718613a -0x63adc556f2c98aeeae9074b44aa0f3b6e88d6923b993400e5631ca4a9f816b55 -0xd87314845e6b1d924893b31a383780ddb81d9aec82098115b045d4fb7d7b5f29 -0x286b588c32d50e824f5acf9c923f0970b13b38dd9409bcc6abf2e4d8fd9f142f -0x2bf6ce7d6cdb349eac302b623394c954107d6e83af6de987eab73bb9542fd915 -0x9156ffaa2ac6d3e65cb5dfb8b4fe37eb0f9582cda96ed3906402406c980867cb -0x6fa78fc3a23c1f533f8549df467d09fd750994acf69ec4bcabadd5b0f2601ee4 -0xb9f81dbd9732c6470279df9344d8330cc0f3c2c9411da624cd0820cbb08a4dc6 -0xbcc7a6b2df5d025031a3069fced149a948600b3d1f5f03e0f8d7d15e6a11de53 -0x7bf3bccdfb70eda0b788b9f5db1133dfa7dccd4eb05cbdc7cba8e6d70491f38c -0x29b72291f3fadda3f792e3348b32e563ec7f36b734de4402d10d1766163b5bef -0x21f386d480f7e48407e45d877dbebc654e29022007d3676cbc103bd83974b4e8 -0x36af94409cbdb95b33b70ef1e828dcc5a6106bac59d935ac9053e6032af6cac6 -0x0b6f6deb7a2bb2814d8b2bfec052f94833e9e79f80f77c7b7669d4651703b16d -0xe0579c6ff9835d79a80645cb014e315812132a29d88b5cb6fc5616617939310f -0xd59c271396add59e38ddafd293a72f3a91e79c05e43aee6189a80690da3f42f4 -0x122e96dda94080ebedc26c70ccd2da7244caaf676657afe74185a196f80ba4a9 -0x9a1e218f9862035c9be440598a0497dffd491ab061a4950fcec57e686c287b74 -0x9da3987b4524d88367f2fec91f16fdebaec44de580f035d6b1460b08604f7ab7 -0xc92b7a242a26e82dc4156686b66d3fef248d01e365494a9fb72ff0b569e6bd6e -0xb32fa06da02985f3f47ff63df4099ea6e98d63f2c0324536a6c4eaa3114ec8be -0xc8d575fd1984a75307d027b8882219c2c2733022d7019458738d3b2f6443b724 -0xbf631ea69558a2f1fb1592bbcd7368f0dbd24a8f42aa0d0e43d90e9bbfbb42dd -0xee45236a811d90efcd4842121d32873aae566d083a1ca85b925b4ec6f04b598c -0x0a8db6b95df0690eb5dd9b35e7d41b3fdc873cbffdafc6c62937070218cdc4e0 -0x0b432ddb67a49041d3ea39fe7876f829d1a4358011ebb5fec7a803507868efb6 -0xfd5850a85e40a74d0b216cf8b82852f567314ffca021cb03cffa4470950139c1 -0x9af8f4add3d6f27ca9b2fde4f7198ddb282d352113c2f0354bdc9e8b768106fe -0x403974c341ef1b9eec6c83b3cf2c3e4fbdacb0c95ac323e33dab79276f5b6d10 -0xa295ba4dac4bc5f818520be572ddce471658b79334453af609fa3277713d794e -0x5e558d29de87ce549235dd1bfd0ad1a76686fadc3b839464058b197fcaea7d4a -0x5926f6afd228ea8fef8080aff19239c69f4c543dadb12f09d153b29b5ee7fea2 -0x5fa4001181398e361457f061a83a5521a1bdf6dd0ccb888551d07eb47da07149 -0xd6b2967ec35e56749cd885ab6c2e5b1543b5ecf1bbd55b38d68d94b600066444 -0x711775938b5ad2bfcf99d19d0b6c375e80a185babe73a65e2a8f3e87f82d563c -0xe0745c72fbbfb4e4d1cc05b944db35b323fb73823892241d9d693a0b76a089bd -0x75805a91a6958d1e32a91f1b9b847bab25bebf0e3bbd29b9f84e7b5f2d8750a6 -0x1301ebb5189b922f16a40caaa0e3e2257e126f1d2ccae28b3514035de637fd1d -0x75f8bf0bb472305776eecaeeaa7362effb2aea1cbdb74e8958b6978106181e3f -0xb5814ca3fa6bfeccd2293c3daa8872b22a4b02730bb1ffd868a5fc3a91eb754f -0xd4cbb876b660d6a447b99530d31d5924236c57e2342532c9045724d1b4e5b696 -0x105b00cd0d3aaa1c73b08fd731b95430331c9fea276b3696ed0ce9324981e49a -0x6c0b62fe0de6e9c1f29080fc7713d76afb1a2343b4b06429d40076785c4c53e9 -0xdfd568708e52e2a0f08ebd7244b1be81b0dfa58ffdd8e8042bf84e3db57e3e36 -0xbdf3818b08895ecf251858c14a90434fdba2ec850eae85da62315f939dccf613 -0x00a27ec8bf3b805821dc8c60b8d948ca1beee77625247eb8410025d73f32fa34 -0xab52b4d1f202dde65a8f484c0f9af878e2d38f8f06aa740e4659e7a18789debb -0x1c55da4bc76d1bc5a8538a48229bff92b687e8180ff2ea8a28521f345ee6d9e6 -0xbc729276fd82e7f9eb6a08c3b96589a608f6b7281803e5a245ddcd15cbb7d8f0 -0x468ac7ab354b51965226e358c44077b60f06c1d78fd1c4b7dfa44b281b1282ba -0xac2904ad8637c3c8bf7ea87fb0bc8871b031c586b714aa8ba5885354f1908d61 -0xea28d934ff6d17cda917afb016f2d282ec6da73cfd3b6ecba84bdb1b87c77db2 -0x0646123d002b010aa25fb04a616a48321218304394923f27e7969feebb0ad582 -0x9b1c325a0b8643338e9baab94f22afb8877a80d6d43cdc2e2a7e41e76a54f654 -0x8fc2eb7599e92c1439a2c03a74462d26b15852f1ce1f8c979c8a2bfe60d9321c -0x4e74ad748aad84b961cf9eb3a801767d9551778c5da6b4a035a77973a3b107bd -0x5c07947718f1b68501ada4579d31e3e348825b5373b6d1f86aca5ef8edb79bff -0x41f6e36c071d889c5660d08a95029b6f3b9bc7314d1fc307726fe58d4bf5745f -0x2958445ef324b164564256de4f4c3cebcc7ef846eaa6e78ede6c4b09d500a3a0 -0xa712143be2d2c3e78bcc4775cb656878a6bb49712b3c504f5c79c6746d8e75d1 -0xa6bb99e15b7d85c4358edce9a9c25d3255acf058fcf4a586ceaf00c41048fdbf -0xf039a66c675c20eb6b3c8296109d6ceaea7fa47375d4d9edaf5420d19f190a21 -0x079ead6e490bd66bb8a1e24b87ca2e28a8f6f7c12d74d754558b9db6257ca682 -0x27f32035a57ae8dcdd739077a64c12d952056c13808bb94e3f860a9e393fd159 -0x6873f28b07e6b40e5805bbe59364584d68bbecb6656f561258cce248088c76a3 -0xf5dbcfc059558c63a8c13c2437f416ca57dd6679761055695be9e4df172abc07 -0x80d87ce4b631f1b385c12c1d8a94dc5540f326c67d1767a1911c87652b853d77 -0xa018a6fb4feb7f9b79b66d766a5801b4842b9f392dccd669b9b5b6ee9d6521c6 -0x2e730e051debbef911fe369be48b3f151ba455cecc7752ba870cded2f7f1eaae -0x160d98abe06cfa5ce61c00196bc7709b47af0b51c2b66d54c0bae5462f5440a3 -0x2f6a91670555b18ae835773b61f440fcd7a4232478cda674563c35c1f5672e29 -0xc1e1d5094e79dc47d7c0cb690ac2d317e18f1621715998894a7180f36a16b6fd -0xd15c4227aaf2c51def03b7f28eacabf60a8b39ebc6f4af91f4daa2e54e551460 -0x63d18af6c8fe09a44e840505e7d51a5120f42ce387c5d087c47f4d05d312a741 -0xc10057bd65485c7ec3dcb2c540a932f9e370cb5cbca89282f1da33c1582b3dc3 -0xa82c5f11fe39562bd0c97f730988002c5b39b45bf9271ccdd73fbaa90dfb3558 -0xc8dd963f6961157bcd814f3cc369d9ace9e710cec2217ab31217f10e498aeacd -0x55c143bf9b263374a4e276a8e0f794168aac560a02168d631f899b6c7d5e9d5d -0x7eb9a6e6369535c1f352617bfea822fa845215e417919664eb60c303a0a15437 -0x46db16ebbafd512ee34165f28197aab7a2456c1dbfd7c6aaf95bb1a38c30528c -0xc530bfa84cac46a6d12f1519b7c4ac88b72ca179c63cdcba2abcf9c0b1e10b05 -0xde9bfa0a4295dde3e2836fe91ec9e0a4c105603530beb833f363a74411df2ea7 -0xdc4c969a462a61dd62f7600ea9c05eb6871acbe5d32a9ec0d843875064ae904f -0x519b38ce62dc0f4cad8cce9c500f3f460d9330fe80013219f6f642d497c9a64f -0x19eda45eec090ff84fb1a15e5284368c657f50fb78e84d64de72c9e980d69688 -0x24eb6339e9cf1d1b4f2a583fac4cf3d961ca9dbd6e9512cd1d72d857ed14d50f -0xd688516d406feda1b262d94a855b23efbd456e36cb70e90b634186487cd2aad4 -0x30cf5ea24f75c74e7bf818858f5e6816ddeed1cef53c8675cef1086352e7fcc9 -0xf6905ffcd826a22daa9d51816de93669df50680dbbcbfa1980a07a595129abc1 -0x1cadc3c4f14d1162d1cc3b81d1c0564cfbd2c3b8fe4cfbc590d4b81ff0ad56b4 -0xc966996362fcba21c3f8573ab59a208e1cabaab104910eb63494f0ec84096c95 -0xbf8596eb992266a9f5fc44b3a7f35479eb0b189da200ccf27356a6a5b075645d -0x659f3253131d5fd06539ba1f3de2d87c04f4dba63f7b6cf854c0d95ff91efb54 -0x781ea81b911ef7004ce63039ecb0482d8aa22e42ada1a38ef2fe7d166127b818 -0xd693351d7fd25528e1f99c063dc739b48b67a136f0f8c8501e1b0c699bc713d9 -0x0768a3cf41dc4dfb09d4ac362a3ae2a88f922e10320169307b8ed40aebdc87fa -0x18ad92dce39c62c6aa7554449bbcbb584f34a60d49cbde8f56f6de54da0768ef -0xe06ace2df81c20977f3d796df5f3faeb996260af4f1c2e2bca1a69fc7d682ca7 -0xedf4bf677286aea3c4bfacf0743d6686079b7d1e5f05cd1f5205e3f1c4cc7e96 -0x770382ed588f33d1ff94d49db17a7c8ad233637f8f99a0aa20acad2428e0aeae -0x63091629c2ec1e710a7274c790b2ce9840513c54b1667a69a40d5c9b18366a13 -0xccf6d56ed314a96fb1ac93b66c7aca51be3d9ba34d44cff4ac3299315ff56cbd -0x056eab79f0ddb4e43bb05c456a6266e713a4d6f30ab85515fc82c8acc0f7f043 -0xa29dde919f174b1af38a8cf5491179ae39ad970489acf41a02d0769cd3d360a6 -0xa8ff9798a62010f5cba21b27abb888136cd619c2c9b630e3971189c91a963cc0 -0xed5c76d15eda28e7ec071b2c207994c5fe08879b0b6d8b37c4d591bbccf2437d -0xdfa4d70fd4d412f9120eea74e73523222776a02d192437fd11aa913b98b1e6c2 -0x1e1c8d8c38c1a5f1c5173fee0be1d5c93a9d121e72968d7bf59deee3b5cfd2e4 -0x3381080d10b7ca93534427b4ef04f6b597b062894585830c79c9341ee0b3fb98 -0x6ac4ae979e687a8b5104545639fea4c9b98509ea94d4bed2937ddfc95d12a997 -0x0fee002b12a78d2eb1916537ef5cedaad5a84a61c729f6cdc4bf5bcc89102feb -0x3e39a936eb41fdb5481fae0d80fe7143b61f1ac20dcb3302f21f941d6788c200 -0xea9dc65adf180819440c5fa5c559c531c35566aaf066debe1acda02c418a9361 -0x526367c582949e24d96107c4561a0c76ae180c7abfdb0d791ee238ed57d3b0c2 -0x12d3074b5a6bafafc9568bb5f9f642c1e3467d88b2b081071022942dccafb00d -0xf57b7dfa815317ff2264d76000f2a29b269771af331cb10589debeda3fa0e6c2 -0xcd8fbecf09c60df06581d4613e70c9185f9ad6cc77e7b4c3900f843c052cf126 -0xaa42bbdb737f2db3d374e752d1a8baafcff659b8638ccc37f47fe0771fa95932 -0xc2a4370991da1b6f84a05c24b0baeb60936d8db820a6349871de7bc20fd4d11e -0xc1d3ef42bd3aade26a71fbc712ceb917124f1681659f5f73ca320d6807b1ff07 -0x4c552ee965436981ad7edba11bf5a40cdb33c0dc0bb3e7347f962a24b09a0a62 -0x3f0da1613cb324c9662d36ab04c1b3fd82a4fef9f206c339fb7f9bebcc22caaf -0xab6d1c1b6a3f61991c17609af2bfee69965228aaabcc0665f0c55778c8727c00 -0x2ae8616cf38f0e066e77ff39b81fff668e68669fe29d38619ee61e4ecfaf7b3c -0x3df7a4259f84f7c084678aee1fcd242bbdc87a487811436a50cbe8562201d614 -0xa7cc9e1991783622fde70bdc7c107d08a084df3b4727df0a933af8d4a8e036e8 -0x264bfaf446b82d38c9542aadaa065e100aefe5504b38c1d65b15fe250d5dc59b -0x7a19dff2ed013d148c81d409a8747cd32bd5f6a37ab32ed8c4d7f70996debbaf -0x2c525b6262206c5c6499682384770ab2b0a9402937e0d750bc43f9d71cef38dc -0xb663cf5031edc3ce1ea91c5d71995e0e06c4fddb6a0290ea61cacec157d4e60e -0xd0df8e8393985a40a00b9d9098cb7b7019890d22737d10c3735210453c54db75 -0xa73dde232b7f483c43dd51620821c0b957efccce224f7b9c341b7ceab2fb49be -0x4b16520f3288dd6aedb7d5689fe2069f9bff7e4e44257df66b62880bf2beaba3 -0x0e8850267eed7e0c04739b7c07464911760d631199f473044ab568815a6dd90f -0xf83d588ba94082e187f9d4cd3a27dc4e1d77c72e9e8f736facc441813fd0c2e7 -0xa76d950bfed12de9e6bca59c5fe59f35fdc09a4daf775dd9b44b3b61501cfd14 -0x8d77c45d63922a05aac59c3c5c9e54c089e8613182739b1479cbe4be31eebeae -0x718170bac9229df117c389b4eafaa41f3b59d2f2778fee208ab77ee5e116f8e8 -0x30e24cfd43e0dfb4bf0b8d2841e6f7e3196c8c557e88b07203e715e1f03f50dc -0xba22ec9e5bd3946c0dd11323aebc4aa7ebbf2b4cfccd1111d2c067c9e33eb7c7 -0x0e6508d8f226464939f17a1f40d58a20ad0ed58c847f18ed216494721bb6ec22 -0x74e1e96bc5af9dc14d7083068f76237b242445ce79987d3c80802dd524f433e7 -0xdc1b73bf465ce58689991ea0cd9d077b5d1e97fdbf236eaa94726fa1968c9f97 -0x4bb43467b9c7f1695577fb5179aa1f305acd00357a868d10c05aa748c684c95e -0xfdc0888e70b829fa5d2e4e3c02355d5f0bd3501c0d13453a91b994e328475dd2 -0xd5cc2eb9602e4c77e9e79a48a5d3e88abf902bfc5510f13f991ce7627a557d24 -0x1b124f437f7360ea938e67aefbc8e4399e800ecdff378542db3b31e3dfca569e -0xce6d96a132b22f942c197c06350a8375532c2bcb54fffac383f85fa6ed8c2eb0 -0x8ff785973a6d21f6432e1ac60709752d35b4ee30672e07723ff03a8a6a893be6 -0x731b4c51616473544421ef853c1d1b93c78caafdbd1072b90fc7a345dbecb5b6 -0xe669a0c291ec3b830e4e098332bf4684d275abf1c7f50ef9305b6b862c91bb35 -0x22e54cd35f566e41dc6ea07d45d0cdb9fb1406d987daa6ec8d106ac3dc50dba7 -0x87965e53faf2a9f5053349518dde609257bcda75239be6c25ca8019953c1c9ce -0x748809521dd4dc356f228467ef9f055e8724a281933be52b35499e1112e01b88 -0x91bedf7a1f7b6c0b385da7debc22792f3fcd7b8a5e27d03c3411c0b7a204e3b5 -0xc291b5df515d0d21bb1b95408e52ce338c1b563162f3254529090bbfd3c1dfa9 -0x61451c76b8cbb8a20b2583d435c7757e73c03742503436a9448d4fdd4b7dd853 -0x442954a50fea14394bbaf36ba525fc55169379a43163797ea7baa479e88f815e -0x88e9f80c8d8ecc4b88ecff5a8cdd497fc7dfd404c16d0bfd212e5c81a353864a -0x31f080c422e7d6ccef1eda382a2aa4bc72ee158880a2e71e7db199ae94e47671 -0x3a7336b7212af566df39ab5cb34469e1d377eaea8163ee11f8a5cba2c7259322 -0x346475b330ffa5affd8a28b97179b06945d261299bdf79b2dcb2f72673558ff5 -0x06515e5bf2d387d0ec4bd08a20c561a26088a6edffbce521c780cb06e4660f54 -0xed8d886062875a8e826e94a47a66dceed8246f74339e8592512a1c475f718fff -0xe6ba4bbc1ab702304f7ca1b3e16ea2db38e2a922a68ad339680b4a32b7d7ddf5 -0xdbb1abe72145c52eb6b49ea55287d23ee720c46f86e40ca2621012e8e2b65d52 -0x3974da9960ebf910ad1f663a6e7b2a93698cf7887f0155c6887ef2ceafa1f7e0 -0x814cfba5822dd6386223a9202e2ddb57afa49f80a245648a37ba5d0866b0ee14 -0x2c5108e2f2dfacbd7f5d64798f0a4e7bf1cad49febea0fbf92130a1e180dee92 -0x278853188dce5a54013bb7e89a7892c27cb583d4171f4af76987151c8d42e574 -0x95943b8191beeedaf368b863d5eef79f61180bfcad29dc1f4a912f2cc2cd85a8 -0x74441cbb2754a6fe059104c70fd8969f7cdae07a32119bfe4fc79b71c2d3fffd -0x5cbf80502ec8f34e3234e76f6c550974de937db973332f1d9adbb73092ba13bf -0x274964d75d39a7cc873bbb0ce5f7d2fbdb8e8a9c047d0b29b11ce456750bd80d -0x752f9f729dadaaa632b4f021acd185f5cab4e2507c00df6c7852b12683f39148 -0x00ff1c8d71413124b24e0feb41e1727f165a6d41303cb3ca556944aff4f634a6 -0x88d67980f0a5e0ae0a657be5cc919e5cde98a71e550dd42c93efbe0647ad6b51 -0x9e5aa8718b9ead32c4b0ca6994cade2f2f1eac33a571c0d376f454b107c3dea3 -0x2c0f9e7f9da86b27722e09f1d3d97e2fbbee33bd434dc9dbb76f133f9e4ee970 -0x00978aba00af90a26b299e2377e7163c7acb0fc5737f2711110e5e52c6e90b3a -0xd3cd288dcb526e0adb8beae9409eab47819e803214e9f2fb5993b7c875d5a719 -0xb42fbad201d0bd37e678c2e01b0011f30690089669c6ef655b1bf6a7da5d0644 -0x94a8237131ab3347f2ef803b257050ec2a4089845caca859aa94323f2616a3db -0xad3985a68e1658e9b81f31c0fee26a3d793dd9af76437482c186c4f2325a39ac -0xa85de3baa5cc80032532c5c10e26f376d75d8e32aa72c57e6daca68cdeb1c0b4 -0x0171c1cb3e6ffe8f75c5a00368a416dda070a2cf1b0e34f47d86d095604188ff -0xf9987d1577162e25d7ec7920bd4e5a84a233d67707d90c5711ba0aace643072f -0x3e1a55c5e79138a068b750abed12d26b054e55dd3a3a2c01febd15753d5fbc2a -0xc4448e41cc58ac9b56427f89153eeeb4de290da1deadddc6fd946a526e4473c6 -0x22dcb5a974bbb133aef9215b082a6f3337dd95a9a29b30a8709e2ef281505401 -0x9ec2373024e4f582fcd6df58dcdeb11ba08b40359e87fba126a2c120c18e2814 -0x9a1c8d5101f056528e851359b1516b1369724b86cffc8d1b33bf4327315bebfb -0x80afeff97b907a4dd89f2c9c9848b8c07a3d49ae5783fd1eafb72729649f9b45 -0xba5eb01516281aaa9b9c781aff8ec16db895c67d689fd77465b736063bafe21e -0x07010096b86457d249057c9cf158819314dccbb7b885d9f6effa35dddea312c1 -0xc735df05f6b2258345fa9e179cb3652df06e7064f54da3dd3d5af6e94deda87e -0x90569dd04bbec123e6d32689b9acb4da4f6215ad20631134fd46a523b8c5ddb6 -0x223d092c245e51f151e0175903af5cf1e6b12a229463a765860d4b4ebf9c36f0 -0x58822f0e90d0021456de97b3f028c6d79e82224eae8179b2e324c4a200a20211 -0x74f657bcd8b85f3a4984b186341dd8ba2e43542b4c37e44b39b49c295f11234f -0x3348f34fa2651c699edf26a8a93188f2822620ff7f12af8d61f44cb339c77f05 -0x2c6c158d783bc4e06d3a77c7c3095b3bfd090c6657f3a7bd95dbd0bd1e01e732 -0x9b28308991ca50fdb64c5eb04bc110ec6ce524160dc71889793e6d8cd9816622 -0x6981f891e2c3a98b1097d5594438b1bd013b4df14fd432307b3640fb05cf25c7 -0xf01633e4feff09bb2fc7a59cad28cb00300e2d744eb182edfc8e85888d0d8107 -0x42b6b6b9a2483241c73134995339318474d8f0bce4de1f6c330848d1c504e5b5 -0xe17d8bd9b6e4716ef13077209654214cf5530dc512753e6ee666b55680446b8f -0x1a888216f540f40f4bc9775d5ebe81908173f3e2fde84f33bbef61278a93216e -0x5c3768badff8beffa1a13fd0f877901fd869217bafb349248ad151b5d174278f -0x442424cd36d62b8703211f90d528e07ed5af8017e90589926fd6be89fd422425 -0xf127e9b2849a328f0922e614773e56f1c1df9a41df1166cc5fa0dae657378b3a -0xb6dd97089b6b06b2fecdeeae5abbafed0b5fe816893ba91c4c15223a706aed41 -0xb556bfd23d02798c2af248bff54241cee222d2e1fd18be6bc4badd8bfa353322 -0x42770a3feb4a0358ab6b3545aa43e252126c0564f773e0bf2166b5f0f579b46a -0x2113368011cd00450d755859b881458395ce7ee41c4f7653c4d9ee77c01c3323 -0xf42a8444b43286680a0817f98fa325aa8d2554ab1529c3ba2c0e303ea757f59c -0xd15c7cd06d4d3dbb1f54a6ed758239fb10fcc8ac86cfa7011783482ffa0d41b2 -0x6a00cb5419f21dcaed6ca8e17036e665461a94ae7e78d240e77a988f23455235 -0xd2df92f52e6efcbaa06c049e636c50096eca82bb774a2454a43b05605c01b9f1 -0x7b69c4ec8a6a4aeb25ed645a840c0eff3552265f53884c0dc8deb96dbf2b730c -0x0dde632b14ea936d8f46794a26cbe3eb782c2341e25efd45ddbc94c87020d55f -0xdd82b5b25df15f411bcb8b3579467c8c3ad04767b0745a3f78518a2c3ccf2cde -0x93bb11aa26dcdddffe34eba63e862cd5aa6828703aaa8075a1f40d4a6cba53c8 -0x59cf46267b3c81687f7bab0e338b87961398fb9b6076e970a266cf75e9ca8a45 -0x433d55c0cce420fe5c8d65037e9e1b6a767d214eb307d4f70c92b0991f5f2047 -0xf93102430a99a2fc4e627d5286a103092249f4dbbaed27932517e1f95f37e384 -0x79842491bf279c0b73a4bce471b2a6e82fa293f3c120c6324b1202f499be9563 -0x901934fe13089355498271831255c386102b774b3db5ebb4f18205da049dd76f -0xb62ad2805183f16aa29acefed5a26da65b0d83260640d2aebee28b7e3bcc2ca7 -0xa4d1990de481cfc3d66d9c7d71065f8283ddd2da404a35642f148ba947caeb95 -0xa097d566c894f6b13d63a0417ba828cf42a13c235c65beffd38473236ee376e6 -0x8cab6430f69c9b0fb74fef66bee87c8e5196eab341c88054ccf25bb0327809a4 -0xf23d37bf8048d1a4662fcc1f058f3bc300452ffda5be89b3380ba5d09d3c1956 -0x5540303bb80847827ce49031ac6658be6a78effcde35dffdd43a097f512558bc -0x9cac11ddf7b0e7467520e57f6fca2a323a1f34b7087ac7bcec5b14aca6ed00cb -0x457fecadb7d7949515677403005d7df767f412230e30eb3762c11fe14132beee -0x45055880e34cdc6bf02b6c33589fa51e0df5c8b67dcbb8f6fb56d318a0a524d7 -0x8c8bb836c9cf843fa553ba4b0f72ec296d9d6d1d405a946c8c89632751d30bb1 -0x73d15cf8765d54754e30680b4e71c610a591ccf4eb544e4e48f9c4b435912061 -0x2cf4b1b38404a64e7dcf2fe4cfb42ee0e59169d298521021d3c6330ff003e065 -0x21c12a22010311fc014ae7d3f0a5a97aa1e158182f9294b791ba26852f2b784f -0xfb4d660a52f7bfb93191d9b16c1ed06b13eebca7ec59551f0ff9cb399a25837e -0x688175efe5ec77db946027545152970fa00ad40db181542997f95d5b34953516 -0x30214b29a67077d8de30ed9c611fe7114e36e8f0f2966708c2c834dc25af0980 -0xb93f9f0397c8ae9b8da4333ccf1381f5c2915690eb6a825f5f62d90af1aa5141 -0x101a459a259d76c5aa417b5b494366c6b8ef8fe69833dcb6c6816506a9603ab4 -0xbc042d75c633baa9f83e1ea7009d73f6b61c7c7bc196b018496a785db6a79196 -0xe872e7d4dae43adecc6edf653ed513fe38d631576ad5e22c110db41116261368 -0x87a93d95542dd3ffa6b40722a4f7474121de8cfeeb5b4fe53a38017e814b2afd -0x1f035137eeb33646538a14d70ea3ea58555e5b018a4ebc1c961bb899f4184e70 -0x5b6fe5fba0b036617a7a8fe8d7518fe6d7b75b78f9917c8244526015ea9b39ba -0x72df359d7bcb903a2a66d16f3ece25e0d77ec4c4c5a178bbe7399276ea99199d -0x186c3232e40ec55ed2d61f72a3ed215ecb711cc61bbb5b2f8d546a93d38cfc65 -0x4e457269510f724d6e7ebca68632001bacb0479cbbd8ae7a8abdb613ed3bf060 -0x5a8f8d2bd35989729a9b96cb16b6d064f61ee8c9e7af2b796a9272f43455ad3f -0x78a022d49fcbbb6fdf6982897b4610474c06ddaf59f19cf52eea0808dd4cef97 -0x69851134a798516394b958e6abd8cbfcc652cdb7d7e09477cf3fb4edf4843a0e -0x2e9d53651c944f285d017a0b09f9a281296706d09ebfc0d7396ee4085dada85d -0x042bc274fcadbcf12ffdcd68a959d2fda29c7ecf546267ddd506d6c755521573 -0x2ca9b7ea8bc6b1f5b8c3c266f2b77c06a22a732e04db0dd28528a834fd69167f -0xf3b736241544d51f2e290bcbf51aedecbdc2f62c41b774c55c1d4a1e0b6a9a39 -0x0af6752e550373d26bd38eabe2f08d3d242b9b04fee771845ebffcb92166e4c3 -0xcd8f3e322b9e6f790c73a8d0897da6299398ccb824425cd64ab99064776a0531 -0xf4e2ca3a420b4e9bfd1c5e9599fb5636e6447395501af11cc0a4df2116b23588 -0x6816fe29be78953b3e1636d46abdb59006793b5dfaa4a95336300df7ec7f804d -0xb8e8c2df5b47afb12bd455a74429fbe75ee7128cbfe4bc871fcbd4faa3689ef2 -0x10243f248a15cfbb906066a738627b66345229c24c216bdaec780e75c1f98bcb -0x5cb543cb2347a342546b49e7608a177894fced4f73fb2f132cf16113bcd97cb9 -0x1ea7a6fa876459718f290607873a382f7d6f0c287a7a81a4aebf59f517c4ce00 -0xd6c111aa7d0b289d9b9afafc45a8707ed7ddc6837f158121df8ea36172a1cf59 -0xf71fc21ece366a47d375b93d50c8c5644ad40e002649335617517d36a7c66374 -0x261377e8f12924314bad6689919e91230283401901472e5d7777e329b6646b01 -0x717a15fb0c24332d0396e9fcea1ec2553d88741e526283cd9ff6997db990eaa5 -0x86929b88b124e554c2c7569cb1dff27078b0ae0efa9e4ddf143545f31b6a00dd -0xd63f092937f46122137acd9d4db09fd77c5cf25a0f495866af37a4e71dfd49a8 -0x7737f88e10ddd7635009cdb954bb0a58dd6e19096529febb12725c6d6ff6501f -0xe49529882c7048d63ee5e4ffd5143b6ea83ed20e16775909d6c1d06b2a7a06c8 -0x8109574d340d92ae231d808152767a16fb9cfcacdda22c29647e935386b7ec87 -0x4755691d7fa38649b86f1ed23faab8fc6cf0da4a8680e430d1795acdeef66134 -0x3048b69f9baff419417292391e9dcc22197ce46cdbde8885a800a1d8b42a23c9 -0x126c8a16acdbc9b2ca29b11a0c1857533da31e4367561b5c87a5267bc6728adc -0xb206127563d8f4ce9b5d01c1f956bbe018fb916f6238b94016b4b80243534f5a -0xe50de05ad2b87a3e9f081264924f16df8c77f22f7a2d7b7fad1b661ed051be9f -0x43869f084f2ad9895d8c865012fff046ff5f2766899cf633a26db6e723bd2e2a -0x394330a05c77d625ae1677b694e128fad8e94a34778add209ff0c72317504534 -0x6001825935f4cc002910c3d33dfa3ebfbdcad9ca9ce7b22ef2d444468ade15f4 -0x77ec02c154f5cac37716357f3c6d95cde717ae0ca4e56f1b387cf64d8a194605 -0xd8a32852052961ec2ca19a1213e992bc63603ba8a7b1dba42c3de9427db9354c -0x654a68e2f679205bb13630cbd7e93afe241b72969db1fd10ba2c816c8265c7fd -0xe4e99edc757924de92a69c56a9b9f1a5e1b676dd37344740e2fdcf81400d933b -0x51f60cbc9ed34c188525228094b16db8dfbe9441324a35dbfe5074931076372c -0x895e53552e44a91a42e20f56c0bd91a127ca3a41465fd685641da497c4ab7d87 -0x887c8cfb4a550aeb22e069f6b06667a637cdc05a10a39162ccd19dccb3043110 -0x1ebaf525c08e928e3744168e87f78f3a4918d9e55e62251fb94586ecf2941b5c -0xb7ac26df8da0cd530af95180ca8e83326080cf04fb5a414d71881ce29e62d6a7 -0xffa3b41896ad8bf6096cc45489a2bf1f9c56fc1f1690ee6f67e9153ae1a95162 -0x9583d51d7a520f86a0701ca00b797616a822c6d1dc669c018772380efd03310d -0x8f7b341a822e6e3d4cad03007f8d1d5d9a8689a3791d6f371e0038f70147356d -0x5aac388a8a8cbb5a685c16caba6706eed493e40e4c6debb9c2593186086a7a63 -0xe6443740073da8c160518d6a897c896c842c8c169ecb3036c459dc75174b3200 -0xe9f75b53bf4db2d7592f83c1658a7ca55308d452b7a3b790537b5153587eac8a -0x6b5350f59a4f54b5a00922b150f020e1a8c42ca4b89982404bffc556358b943d -0x82e922fa238d5621fdd230d011fa8fba7bc9e4bf71fb3d9c31826ee94c609c2a -0x2b85f7b0f2738dbf67574864de328c438403a94aa1383584008782fa7a37775f -0xa9ad9ddf33addc654147988603683dd45fab6eeee2aa0b84f0411d132700c3b9 -0x89b51dd6db6aac3a1130df82589b12ad2be596d661a9203fc430588cdaff1dd0 -0x182b1d34423e8975b279ca8c592316e8947897294e5fc74d4197f29a19d02198 -0x7922bdd1860ad4ca09dd8ba3b64eb2c7c180c2e770544a1df00867a36192c7f4 -0x188b3b7dd5807fd8d6621ac9d3ca991ae67da1824ef92c4fd255d9f80ec254af -0xc63e80baf8ef98e7b8df685132fbcb53c390ac0b6463ac40ee26958397ff940a -0x904f44a8dbee25fc23f549e24e83a66f313c9a3230d0ae70e470b326b3756347 -0xfa544b9c8ffa4bbfd17ca6b49654ff0afa8469a26011506d35ae8f9a04a4886b -0x392b4fefabf2db924659232fe4589fb06f4bef7bdcf6fb16e75c543d7ce4eb54 -0x0bd4c8a3a219f568135cc39c5b70613dfd0d47e29cfae67e675126e3dc6ce0cd -0x3ec1d7daef2648f0bf3e3604a724dd1127f9d031f591e3baec21ab289a8237b5 -0x1959d3f5e103c26e5b872732640d438b128029739e333d8565469f9d8948568a -0x5959dd97bc969ee7b775baf59b999291cc86ee6dc1705be25b30626d376a225d -0x2ae8f4abd4ca79484cf438ea7e9001e082468c1f482411fa33e447b153607255 -0x7539bc09b19722761cab9a71e75c1b61995713755186a8ade05655818c713dc4 -0xcc894a10e0ffb89803a9412e93233cbf7eaed637e79d049eac5b25ce4530102e -0x13ca467ade82c07a7c8b8deb34302a37186a5a49813de00f63ed5956e3375106 -0x2059ca38913772d327eda730a7bd054d9a4feb97466edffaedc3c8033ae632a3 -0x45212ed6fbff48820742e6d7536ee8153560b56074a6a130a1908ec809652b58 -0x1b6ce7945fc7d8eb9e4cf988d778af7baeaedbb9463e2060be5324cddc743042 -0x53f6ef9941ed9f90e18d2050d33951dec10945b8f85de796b79deebf943e82ef -0xfb58ad1b520adf4fbe3456bd9d71e8da1cd182b17a07e047d9927ae15114caf3 -0x6bb27a549fd73efbc70e05743cb9ac374e604574d7794509189a78f816ae286d -0xe0bf3b138716b654f34c3f6e7698b6ff07811d811c2df987fa2fa3fa2b69c0d7 -0x6a685ec6804d1a1ad2ceb6e0496dcbbd63e458eff07922577c9f3dfbaf04f6a1 -0x7c5effadbea30df8d41c38a6c55f0e795aa9787e858feacfa7c7e57d77269b87 -0x2dea3ad27f2b1c9f45fbda02150dd9e609930ee6e79697a8f171ffea1815096f -0x2ae8b8803d2504f4533b10b1466bee74317e21e451dfe5113138aefdae612927 -0x9323f72748c58c443c607336c1e044f79ad43ac2e2b7513a3883cbd2306092cc -0x0822ab3b6db8c3af86d45137e0b658b21ba1b12f8ce2363431c1f59092508537 -0x6a5ae20d4b09d78b03efa75a4adbf2a4e2cdfd01a8d598d85d66457f7d1356b7 -0xca530ee39b01903bf3d9875775872af7422f21e5aa15002cc2d36ff77ff64070 -0xcb831818fe54f3a280a4ca64dad27b2d531d0eeec4ab3d8101cd9e00abf76c83 -0xfaea93bf6b73e51257320f5b506f5c8d36ebb9a55e91aa9cf4aa6576dfef061f -0x3ae8e95281b457ed0fd43d8e78b3038d7761b5b4c8efd77d7732d2420096d3f1 -0xbb15ee89571e402c7726992a457037ceec62d733fe7345372e2b86ba78c4a6f2 -0x5a064fb4678d9f8b7039d980e428a91cfa7b09468274e08d7b93ee1f938b2e77 -0xf82a1d0f2c683faf8737fba70dbe096da0d03a22282a3a75194a0d2a51adb9c3 -0x4832cdf0013b15891c99a1fb5ce458531c078e1e12b9c6633d27a22064b0c84a -0x13d4c3f2410ce00e7f2b6ab6587d12f311313e92dd954258ec9e78134e400310 -0xc1e9e4f8695c049bea4bcc0671d8208b9f8c15d07487d1e65492883fd1d49828 -0x53d031f17d5750e4705a9595c50e9580571725eb05f0e8f0b3f31d025d3ae714 -0x7d56ab5eddfda4dc3dbbf7ecb9526c86709d0da0cce0de73870968d76a0e0883 -0x30a2a32180878ba01a1b7fe730c6e6a648c9798de8453e14437383c6941a9cf0 -0xf311010f31bb4f42c6f25cb361420e099a0039e696afb70bb57c4488d88aae45 -0xcc724f525a9569ffd6f05c5fb4aa8ec811908df21e82dcf4f347763e38e2126f -0xb6281bec681c6464ddca3c3dea7b64daf65db4638a52a4c73a536974a757a03a -0x721d5d3142ddf9ba43365a049c55ac9a47d2442f30f07cb8ef92599ba1da0e63 -0x836b92700dd36be4832e7206770dda1ec8bc7f56a03d46ce38905d18345734a2 -0xb5cedf143e7fc8f2557ca17e636e719d68c9146522e84326050ce9d00e39df4b -0xc03ebb169c40cf4106610a199d0b60c6cd3118ffc9a8107f22fe5203288f341b -0x515af63bcb65607e58eb20c7a6d24e55cb7329a8b683b3570c3c400d70876a8a -0x568923f5110ef83487c6a791c472cf45622900a353ab2d9b153453957ceaadb9 -0xcaf8f083de4cc111dc3359dbf835f75059488ba48f704ddd77f8ea4a4c326233 -0xa96d9c5303b38897822827b160c919da3f38757a3e8013c0aec853b770a773b7 -0x839b4c11a613fc2fa781f7c314361c9ebbfca5a1fb94530f371d50f500fedc36 -0x8ce64b5214d580688e1a898ef4a4f847e614341fdd1d86ac9cd3a6c78e56e483 -0xe2692342c2fc8bde79655627884fd860ffa87fe455588b57f20744e03cdb15ec -0x5a8b236193d487c56ebe7b0474574d907df552c7b809061eea3622395e727e3d -0x5ce65a1a098b3cba5ef6a51a02339ab04d9d876ca7db36fa19aba18f5ed03df5 -0xa84805db7b64ea383b183ccf36610253c73b365e03b278dd98941b5d84ab3434 -0xa05db964ef86690ff729c6984aee74a4f7bc76a837dfd2fb3a4e5214f6b0e8f7 -0x3ed63232b1fa94dd5daaaaf4f818d3acb514921778ffd98790b1c7dd7a20aa3f -0x3f68a6b78949bc9a884ec51eba6246a4727c550eeb365100cc4ed2bc7d060223 -0x6a59ff19feaf354e61865713a531de2481c65d2b2b35fcba30b25b5336d11c85 -0xb9266145bdca047a49118a49eac5f738f38149810a42bd87a7f6210b44a493d1 -0x11426f3fc1092291c53efe9a2f0563d2f159fd0fd04be292e0a872d031f99533 -0xae23d241d3687eeb69356aa1aafbf04c29ac55ec2a0fdbfdb2381b7d0e24d301 -0x76fed67e38bae53f8f3260b890675fd92d2d94ccdd8f878f5b425851ce830a0b -0x282dc845bc6e528a8753ff0af989210eb4a522c0594887501e781cc6ce7cb65e -0x4a8dc48d4289ac29107645c65e5a3610eaf3618482751119a70a473b8da0342d -0xe2fcaefbadf18463a62e6d3ace661e0970354c2893218a49755d51e7b28761e1 -0xdc3da19ded024572b15e26bddad3afca883634e0f2156756812b6578b30297f8 -0xa2c3411b9dfba5019004b01015100a1c2116718b13322738a948d23c9d64f6c2 -0x4bee2fdc91ab839710d4879007b2bc2d9c9e20fa58979194088cedfb3026832b -0xb5e0b9f13478c40773a2ce44d7e88b7a7b5a4c6f8c249b4f397f613dce982b93 -0xd1071671136a15b4ade34b23bbce9910c2f67004e6326b13f59c9d3fef7ad8bf -0x5e1e433347fdc30e5447b0cdef1ed114a6f83689c7bd75f8cac607690d567174 -0x412ca247c8edbb449dd460b4ee747ef4a369b18af184e10477d18568d4d8d3fa -0x9c68fb7230fbe21f8317d922f4546a22711c1799742dd615b63bd9b6000d3256 -0xe047d10f1c5f9a197885dc15b5bb184753017a3d83ce433c6c88aa9508b7a422 -0x56d3b0b2bf45beeff8267d496d1458cef840063a55baab1ba2df8626ee547ac3 -0x8e606a26d276f45fade9c29830fe2c1386a3884453d441ad31e482f49c7b56a0 -0x9bd907e5d42f2f4dd2b31ee6791e8b22fd28ad058e701308ee14c718dcd26d8a -0xffcb703a7638d08b6627dd4f6fdab780800ccd7089d700b25bdbb467ea493e96 -0x1ab93fb7ae528268ced6f30153db7d29d22954c97633885c9ed81e8fd51ac45d -0xe58405837ef1cb1545a5be7d923f77e22fbe3be55113165b6b09e5ca820fcaa4 -0xac0830fc6d4d3de8a57f85454c8bf4e8fd4066cbfce0f250df4545a5aa68bf59 -0xb88aefe91b45bb0efa4554c9ec0c3f30cdf3d0659e669d820309b0744941b1b4 -0xcb3fa92c35f01726abfcca7f57a54faf7c8b03326dfe79fcb20fef66641e5bc3 -0x52a10ba140ed6a1cf42811b885de197cff109f85b89ac64c1791d1174deb3cc8 -0x1a33df054bc40151ac68644fcb6ff6e7cac7fe99c4abc461b5350c66d5b00128 -0x80ff4c880a43c623f8b782e1ae8699292b1b50483cd0be6c0b765b60165ab939 -0x0ab3e8b5a70d3ab6e17d026873dc486ce7bc04ddba754caaa451fd59fa446465 -0xfe14443a16abd126f1c696aba674b3ff9a91258937a6ca000591cb27a777e4cc -0x63a57364229bedb05f3eea0c8503662bf3b2e66625555f78f65e21155d19f86e -0x590c7b47d7342233ce74d3cc5ee3254efc38c3ae145d36940e8019776c6256dd -0x972e072721a223a49e4534484fc6cd7e1038f855921d2dfa20d47ee067a6717b -0x25a07e0e347ac5743597915a0837919fb29cf49baacafcd057ff1aa4cad68f08 -0x8f8bd6c24d45614da364a1328c30a39ed28b470baf76880ccbbaf0ffc021f0ca -0x2ab8d224338f08eba16572413fbf8f5eed9206ea9aaaee59298b288d250161d8 -0x67ba65a2c85a0e0e4d875c259d40c165528f721d5cb0b19bab5e73cdf2988c2a -0x3282a093c521df6e50f60662cbc4dac7f0dab9bd77a5fc5e9af83825989c8b42 -0xbe909550e6bf8aea33b4971abb96dbcf4f138f0c025f5e3955a2cfd35c1eaf4a -0x289f1c9a353ab871b2afc91ae07889099e3a0b3135761e8fbd5f5a817d32235f -0xa28faf8981f1f292659ef1bf404b1861f3516e726c9ace0046caca55a37436cd -0x5f4d943cb99236963d3054f787d31aa3defbd79cac1d8041d0afdf1fa951445d -0xa5d40d0d2da034c74c39b3fe9caba0f1d3d605a395c7b50e7392f33bc301acd9 -0xf90a1fa6ad49a2aec3a63f3bc39c97b189425dc97409fa9248b62b18aa4ab586 -0x91401f679595d9306cc3cfd0e5cf43a1b758d0c7f2409e88d3652f350878a7bb -0x633ca2c58a4ef98a156db0ecbe4bc2b0d7fdb61df9e66f6a084d08f246e90216 -0x8eca2910761c431e5218fe4b0f7e2b311605d771a757fd96f816d14a7c585b4b -0x62ec4f7db033b45442b22b100c8ddb94e8137a48e2ac366accf1479e2ffe61fe -0xab43397c69021a8ca85aec6c6743779ccb62a3a07e57deac22685412f4a121d3 -0x6eca5b23e195896c6f6136b95881ab3791d4ce91299a0c700f534d526743ecb7 -0x7e23b6dfc245e9b63d5920dd9f5565cb685704b3302a7f10c6c6b264012f7e2b -0xd00e3949a50ef78b611beed07feca42c519b0fbfc8d9b630c6f8f01e9a82433e -0x3abf001f61641a63949b9266ba34c55c47a0a789d06a00a6bbf1af9619520671 -0xb282b10dd0640debd60cc4e024ec2b1bd294d2b5a7243997fd086ff02ce4fca5 -0xf85ce4b9abfe18bbf88c8d4eb83a64648a99520732b13c459d13879b6823d10d -0x6d6d188e2270a2f21c12b853a57cca59b636d86e9d7035f38c4620642c414c30 -0xe8493146e8613384b3556954065365cfc2a781cdb42becb715e5d5e1c0aca84f -0x697f78691aaa2e85f209f83b8604c0279b99f938cfbfa8dce4d5a053cbfb081d -0x605729c09cc20652af1472f39f9133be9f53c9f567729901e86aaa61d60545e1 -0x11a465df366820f0d400b7c37d32e966440f36f60345ce5f331b5a3c0a654d02 -0x6d83b2f87fae3407c97af9b640f0c3e226e3c6d227056cfd0f0e84182abb8c30 -0xb86e316d497836f5301ed3786ce14d5233ac88f7a972c4698d5e39071ada6f87 -0x205fef5744d20648d3fcaf3a614db0dd65b6e1c63dd65eeb4337c7d6b1181653 -0x08deb9d93edda0ad7448f52d86c93dc21aed35f0c8c754f05936735f2809c653 -0x70f3c9f6f311b7c35fe766a41a7fceaab190b5f651cfb188b575045ffce1ab5b -0xc2790caa365eb1c18999289fd6be91418021e0d0990a0c47b1399a64f4b2d2c8 -0xa91d14ac0cda4c8e1b063a6ab29a2e038a979648cfd5540a854a1dc3fbf1eb6a -0x6dda0e9623fbeee9cadf88d6c0866548fa30e4db81d02d1221906c9c73668273 -0x952c12f182aa2ee496506613ccbe02afd040e6743c530c677c1a7e02c0999035 -0x49f22cc55e8e6a1a62a7964831c2af544df0071ebb2da6a33a974ab66e83a9fc -0x9dd9571e1b0fb94abfb6201352d658cfc89d7032ac2c7d8ece1ee8b93fb6c173 -0xceae490de28ac9b7be5d9918ee7723a56d06ecf8d75142a8e54ea6c4936289b6 -0xa692c1a71002eaa62ea04641ed6e8cc3f305f0555c56da68025c29013b3cde32 -0xd942735c7abc3f5c0dc554742f5f1a6d9e9e1417ff793fae2801fa73e041eb57 -0xc7dda0f64813d2695fac8da210b5aa040dd0fe7966701af59ceccb9548b7b979 -0x00e109e45685dd83bf1ba6907f806b9ef5757ea4ff1a756d85c8c7a2883791da -0x0ab1a07d7e4f1c7d909ffef303d6f7daf96988b84bf7725931af72d843dbb984 -0x7a1f7a295f396f4aefac336e26b26bbecacc072688119e4e4fb09c9f9a51e164 -0x1f00f391c3f0d4bbd9ae78f225de3a1c6f6f40684e7a00ba7c11d9338a261c0c -0xe22d89ed9f8b27f1ca0094a85385b21e39e36e7ff74cf6600924a77e8a5bd4e4 -0x5939da2284da37555b8caa6bc9da45dae2063b264b9cda9819d5f48548cf3284 -0xcc7c0b1fff5630d9e8d1594bd458fa4ada31f03a2e565fdf7337d4a03156fccc -0xa7022da34c6501389b77253de1293c1895996b29635ba78162a70eb8f8dc1bb8 -0x6913fb1cf0195fe48926798c7754544ecca67dab7ba23b47e81267007ea8aa44 -0xe9c865528faca7c5fb356d7b1a34beb8fce0b369a55501ef9782e3d2a9d91914 -0xb9cd9fa32f9e2fcba1bf07626c0112d5d924e211d5fc55412500b971fbb81ea6 -0x557768896d77451540144a316fa6522b6aa77ea2e07acd76f09304f39354a9f5 -0x3037c5ef7839f52ff61efb06633e64f39003d12a1421414a3c23f19d1f4116bd -0x9e489ada44774b7bb1b8fadd1e8eef214477a8678bd1f9ff3a714c22f6b5f2e0 -0x925b76fd9e19e28a8dae67c129380fe2857008ad79720b60022868aff57b76f9 -0x3b7f80fda1d570f49eb06dfd0bd5eeeba775f5acca59da4fcfee8dfee12b4361 -0xf409d13c1202a93fe000878a0d1ee18b5920199901a72a5e98f0d5fb647867f5 -0x606f5055998e0f7dc6af5533dfeab6225d653668bbb22e47ab2b103c4deef44f -0xc6b9da286026b5f80a2a7fceaa3371d3165062424601d6a29104f91e86d0ba9d -0x0ce1c9bd1035658389370e3e0338d48d1b5212900501fc4f4bf747d829f4d838 -0x6578b994b8565631e2a6ab43109d8ae6e5959a4e48d4fd100a78c69f43f9ba47 -0xe2f54833eeed460e5a3ec36d8dcedbb0fd0d408ff091cf64c8d6a1279c07d754 -0x801a4b39f8fe7b539cf04004fc5df790c6e40f4a195f85f80148d56be13266e5 -0xa58bdac29f70dc8831465223cbbfd2ca511540ce435b7de05453f050acff342f -0xd454f05399a50674835acea926cc33fdb390a4c2c78f2f40d06749541b5ab6a5 -0x59b24e8ba0d15b752d72e553e4b0392346bb70f300dc600013282f42a548ddc9 -0x22988350c94b55d8c2530337eef99ba5494e735d991d69b706c917b259bb5b3a -0x339ca82242d08f737463ab531009e09a360b86410ad053dfbd3e9c0a712e1529 -0xbf22ae3c7ba51650234e4414d179463febcc5fa05d720b277a1032829f09046f -0xe26012023e3ecab1ee6481b108bd581841fab9f197b22b1d7771b718dd549bc7 -0x03845d1b3a63e06624934988f93371015b44a82a331dcba4a2c81030667386fb -0x543b3516e5b0b65774422b5233a2808a62efaf0514b35e2a6669a6e86716c02f -0x48913996f734216e8f3fa7e3aadb53191559fa8c3f6d9baec2e49d6fdf10132e -0xbed550f5613afd0845313cee6c7a896a1eee418be6aba6845169de6a4831f330 -0x5618883d6268cc2f4fd1b161b9cc431c7830f37f5af1f4f0fa49e68fdbb45804 -0x903473a9b3b50d431e4fc0a628a70ad68a4cf8c67f44cd4e6a18655cf3e45fa4 -0x4ce117b2ef666d2d6745b2d61840d8991adc9dc31c2bee24eebd8e2f0633ea77 -0xa11f11871024025b1119e8fef1415450cc63742bc6b337b832846d373dfb35ea -0x523fe0654945a123c13a360874f889ae679138415421a1c6fb6503b2eb8c7133 -0x93e0b52d0490e722a4cef159de6812c7f6dfa3ff718de3efa4f6aba735e3af3f -0x659c93efd595ca30742940f0f8be9e8532f06aeab91f39c67749e5cc51e1c219 -0x462d8eb5e089199f485db035ad20e15cb5bdaa960a0d11d2cb66ffe894b43541 -0x65d15c28860bcfe9dd905d90520574ad1728f5119e61850f6107aa7ba798f14e -0x3368d7fcb35ed582786c099a054e5d8a4e748f614e796962dde69d02f1ec47a6 -0xa00b4508d85947453d75ab887bed4902ca1eead72cd842fa31885e6c3f171d20 -0xee1ceb0222fa138a4930b69cc0d31f35d15cbaa3f47ea64277c9a9ab05e64134 -0x357e977746504ecc674a9be9d19dbf616645bb211979f25741f179246b592edb -0x529abe7080c2e305ecf9aa8285de21f89125b836d186d2f35fc14feaabb0f93a -0x54bce29012b94fd42244dc0d9745ef41ac5fac5f3dab3aa3f7de1439150ccac1 -0x601247b220bba78ebe70a8714868aa8a5a814217e8471908ae02eb6945b2398f -0xdbcefa088cf659b96ce74588819c04f6ef06c83bb6b0285b15467d7bb001bd63 -0xc9c1d3d3b83eac7c21852a68fe719bc977925c69d0847f1fab58352bd7b02107 -0x283808e3614920e136db9828b7e266efcc3929bf5f4fe83a3c11e855a8bae1f6 -0x0bcc6fa385abe222e711cffc53535857700ecd49081f70e3b63f4378e901bcb3 -0x046e6f2d56956b221e48e4cc4716494f894f21c3bcf50190da8fc26f82e15649 -0x4b38a0d0991f4f46337e432dcc9ac2e6bb26021bdc8884f7bb50bcb9473b57b6 -0x1ff62f0b1a20b464795b8be5fe42cbdacd33a57cd96323f861390001c9b4b715 -0x8a32e551e889720e3da4aa1cf4bea06799c31fe37bca3721fe33ea723a1285d8 -0x6f87c3aff736d5207bf249703fb08f4a4b5d5480c670214556cd4a77f5ec73f3 -0xbc303cd4556f729ea9bb27606ada32bb4fd3f639757f1a9dea0b200b92651fa8 -0xe60049548b80eaa9cd29399b5e6dc545efcdf2a701b6cea1da047e92f826d527 -0x229179abb7944ffce00292f2a1a36852b8e83340a85e76f9f6a370302fe5d7cf -0x0fd858a72681e142e07985a5fa9f972c84dc911f222b90e25e78b994a0c68ce4 -0xc2f89a922ae7e4b9f879fbf0ecfcd5519871248ff3bbd87bf7335d10b0dfa645 -0x284d4140b16aafc2e39f182b10e011d0b48d322a5b32e6293986006af601f790 -0xaab91fb959ae08030cab48c812d7561d3d9ddb46d2779a0d2302556353021529 -0xa51bb6c509d04174e47aaf1fcb68c4497c0e1e01ae5e839ab6463fb633884688 -0x329869cfea3e0dfa895190e23dcf6988fa8e92e17b010c1d1c356bf98e914243 -0xc91f25875a5087abde68f966d336e6bd81d33e300ca801f8b101c78ea617eb7c -0xcbf8af0230338d9a23b443393c25f8c5e0b167777ce752102aeb84403e0a0183 -0xc1b883b17c4801907d9d2d50d76baf9dc9739becc3c5a9850b4d171cd1b24bf7 -0xac931ace2d061aebd8645b2bcec22ea81253610d4e08eb5f1720d110cd3773c7 -0x340ac2529d387bda3981dda96ba2470ea019299f86a356dce9fbcda6c5c67b3e -0x564e2709e5b76578c95f35d0f577a6ae8e76d4a35cd06ec5ee092f41bb79a617 -0x522ba791631f3fa179fd425f6a994814f0db8d811bc7706a5628bc5e7ed4b286 -0xcf589d4dbc1580bf26fe22d8c18cd238e3e938b7c898529c5c1084be9cf0e703 -0xf42ad1cfd04992aab089166db14321a551be1105a1f023200451282952511f92 -0xaac882ea5a5673d1bc54830321107d02af39fff881f0bb7c676af9a23a2dd6b6 -0x2071c9ecfc6ed85a4bb04e5e880639b76b351a2c14f8f3223de8eaea5131793c -0x02a61bcc70558974bc89bb9e8da0ff6fce37c2d495ba811608aad5bd754b55be -0x419e101d886e19e523d4e64bfc7c17ce1901523c58b0e5ab992ee0ad0db7b818 -0xcacc5cd9eaf4fdc1d719961bfa77c54ae7f93421d9498e507c8b57fd873e0a30 -0x10f16a2f1d4c9e9f06184f76f922aea92e8ef3dddf98e6ae92ffc40b8f10afe6 -0x588e02bd59c38418103c37a19ad7ab1a91b1a2e93dfbee0322696aab707e83d2 -0x66a580c7b9c6a3fb28faa0eaabdc3e1d4063e8ee5d7521191fd16d34b42e7c8c -0x3151db483815fa14312be16f09d59566d9dc5b4cc875c1a7e5c6df592408ebba -0x1f675e5c89502abf670c737c87ea4dfbaf584f5bafcad575367b9fbf09c5b317 -0x5669be11bfe4ce252fb9b5c5709d5f5a041dfe3fb490f217cd672b50f0e02880 -0x001d24f88f9d9d23de3ccdb9988b15c5ddeb60bee2d99fa68401e383bb796151 -0x0ed40fcf1828dac5dbff2152d570ca7d0721d5f923f4a5d81319c07c75de7d03 -0xd8760baf062c8eef397d83d52be17d43c45671180d0d68e69fa98c76bf84f128 -0x08f7ebca5c00c6323d55ab0097ae36405a022e278f379e7f3cd6b02c620f7046 -0xedbecbb3a6cd32a22ac9de7cc93280a62147bdae07f228a7528730fb3f49f45e -0x3ba730216871c8aba7b751f1f109bbbb3f50a25f719b5ce379310cba445b259c -0xb953d3d243ef49f6a6f43862430542cfdbc663edd7d21aa54ee0dbf31e3851f4 -0x03ee835243dd2fab1b516cfb3f454943ed9cab1d3936935ad057413f058d67e6 -0x03c30f5b0adfc213ab469f82c0c953df63e9cfde81675cc26cffb1b43a03d9a1 -0x10e17cae5aea7158c368a2d74d6869d2c05114d99c789c27cbd94d3dba966c0c -0x418c43e72de3135611d8b9e7dd6d7bc1a2f8aaf41a5dd2fe074ddc5e4055fef5 -0x689d7efbdf6b3a84f6d73511e2270c6af00fa7caabd05941c2f9c24ad8a1d664 -0xcad06680834f732fd1fe06ea8c450ff01adfc624df40f6ad2cfb759b3fbd2456 -0x6dff1c27d98414e3c8e2e54830e3d2d29ad4f3aafd152bd47bd2ac7d6cdeff73 -0x9e987780e22d797070089b792401a34cb35987f5723ee030f53b9e7430d08bb0 -0x7f008f871d73e10744fb77a51089f0acd4ad34c310263cfd7bc0b88c7a18415e -0xe21ee5c83029ca06d21f5257f24a5c9114df5e3cb4a2e1c514601c464f168084 -0x90f6685be3692c3931e7cdabcc55ca421897a9a881421d0700cd3d778cfa2105 -0x807ad28dc8131e700416ee3536804d4a2335990a6d1d7567c3b02c3a242ee781 -0x4abca7635642ef3abe0fdd199836223f7dcd27a6db74c16a08ad72eff536424c -0x06ff55a45eeb1d268f91f65f49c096792b83d809da4db255ba5eace85a9a97d2 -0x4a83c5e4d319f8d35278ae0e32d8891492eb0b5d5eadf97a246d573d79c3dc83 -0xd323afdcdc9ec3c21515a52b003bad68e087a36ba019e73bcac87a2150818a5c -0x168cec2e9c6e81dce960538660d1ff40154b9511a8f7912f1a097bfabbc143a3 -0x3ff0b9a9160e6841d467a069abe1ed9fd5137115b97c3a4af6443dae7027b1f5 -0xb021b4a0c225036b37dfe907204388c4005ce6bc73923c92febd561558453803 -0x48b2fc795ee505fd66e5b346b5506ba4bf4716df1ebf5f32fa4d5e7facbab5cf -0xd09345b3fcabd62942c1593dda33e8ac0b2f8767d7cd8fa78bfa1faabaedb950 -0x0e73d9911c8a27ea01a736c9dd0f62f04737a14dee2f3a4b1c2790a91f4c4952 -0x58b15d2965c244b9b120d283819a91723e5217dcbc778d34836e85a80e99df99 -0x5900ddd7e907d813fd98a0616d4601a0a01dbe9b8ee2120e34e67ff800a8f081 -0xa5fce8a4ca7cfa3852bf0f55292b61368336da5364ddd4e46af254f3055842d7 -0x994d33c3ee38f8649002a1d86628272fee6e2cdbddf6d5a327f5ba1195bebffb -0x5ee88c558048c7905764402274d0ac23ec42d0958575d2a77e14682aefabb74c -0x3e0a312a4a9494636859b2c26b59d22548db413edd3c103b7879e1ca6111c281 -0x6708df104143903eac29d2467dda8be32cf39abb8c5e89435b4ac7459bde3a8b -0x4d6120093449488d7b8b8c3836812592a1050c6ec302e8227f98cf2fd09f858a -0x6db31b314a2662f02ed775406d0bd943009f5a4f10ff2edbb2770813263cceda -0x9e339645e2c450dc6d98a43cc4c8321beffe6c63776d032de3f1daf6e22b4ba9 -0xb239a9c9ad0684e16c53fa287032ffd7a8f5f3a955f1f6bcee6245768dd4a4ba -0x08962051abf4680b3e7736f776dd3bd0b0169483306f349ce35dbf370040ea8c -0x0280e35511287df9db3a8ca21641772a506c1429ff20ab2298ba1f63cafe730f -0x6ab3f2d095691ef1e58b54c681771ae489a4b09693b151fb753040df96f69c40 -0x0b8453fabd6dfa27227945ecf5216d501308f9702be172bb74dab3a106f4d9c3 -0xc0dcf754aa4ada2a412831ae86fff4ed5b84e9aae137d8b5aec86282503b6865 -0x3d73132afbe1b5f20a74c2bb08171f5767265a09c2afe5d0a3b58a9bda9f6ccb -0x7d259f9045e14525ab921ea0bb973faaf54734ea7231df2a703a71814c33152d -0xe36b33e7ac3534da7f98879c415f80b7bd8e7cf575001df391e0f8cb82fde511 -0x6f021566efd1025403da9e45dd17f7aac0b9fb100d8e35dc5c4c9d23dcd45d88 -0x133c57c1e36106cf0f35322a3a75e7c33a511e380efa1761ef8d580f869d7271 -0x190ad17f8616c11215af9bf53e08392130e8d100164a7873031d67039cc78ac6 -0x1bb4ff04a76048d89d957407324a98fd3e297469eda89a2c768d8a4b47b483a1 -0x1a1cafd20b34f31235011e05db3c648f06663ebf1bfece5f288156723095bc3e -0x5bfeb85413e256ae95628d2ff7581962814a6926529730ae82b3f61480a2c774 -0x6d40ec7b3d22f1b950ae9cc45c001cc728578bd0c9e9d67b4fdf3637863aacd2 -0x06437b33a4a4e771ced808d2349eb239133e480d796c744ceac736e7f3cb6cc2 -0xaf437bff941f808b74ecae7adfc2f60976622ce537f105c0d37fba06278e9e6b -0x363ce46df200fa61a598d50734ed450082f26402de5677ea4bba5dc75dc627ea -0x30a2442f7881f7010737c780b91ad163f1e4bede86c6c079cca558bf922f6513 -0xda4af84c7d2d49e68d26499aacb8034206d6509829c396f6879fe7198b70513a -0xadf47b42f0cb2b07830816cab8ea2781f94e9ef73cc0dfe1371515e3c01dc025 -0xb4800ae59f747819ffef36ae58bbf88cacd1db65d6be7e38e2fd5270a3345960 -0x637762b657e261a677ea6772cb268a2597c9a779972446a5778d7b7c3fc7b57b -0x338ec16d5ede89a52ee57acb438663758b4301af1b38e3857fad1afdaaa0dc50 -0x73e11765236c7acd7928c2294d1a70b3a1fb4bd863731750f6625fb0211df811 -0xd29dc3d40806dc00dcc4a2c508eefd78b8dd2c6d77f340ebb096897e55ad63a9 -0xca953f7a76323591cd961335ddccc2eec5127ab64e87903701b0ed0adb5a963b -0x9257e5aca7a26eb20530995d57fb513d86a1ade84e58739f7847f28b7e9b4d9b -0x047fd19ffad2a2e3cfd3bdeef4fd2b51565439e7e558dadd3cb3c37a8c52d709 -0x014ce96c9b7828b394b1a6883f944d77d1aaf7b5616631777d17f3f55bc7cc67 -0x428dd0e01ada951ad046cdbc331589ca716fcaaf10feb7c536ad865d81d504f4 -0xcc33fee3d1bee371a30a1b49b688656aa1fe29f8de0e56b488e1a6c58f6a3e24 -0x43f1248772c1eed89a1a425f4a01c28067cdb9f3a2579acfcffa33c0a2876c38 -0xa96dada564dc748ead7854840547245d64042bfb47bdcc45c3ac03af6faa9a2b -0xfcd72dd3f13302b5a6de3ec45d63b603fe60c5fb30fbf23c799a3fbab73fbed6 -0x25875c472c1db826464b32c05a50da62324aa0f151f6af81bd67e2f1a59fd552 -0x75b2db7514e68ff9da6b51367b13f62bac9291ca37378fc986d609bea0d528ae -0x57055650a4870bdc1c2f156aa242d8a0cf79a7b263aba741a29c0ba3380ade08 -0x5d795ef0987dc2eaa76dca5e134088a35078bdf0b90972630eb9ce076855e8c1 -0x23357b8b7bea596f358ffecb839aea35f345a08d83f9e7f3975100027fe5d485 -0x2a548008322e575c2ec5d85dece6957557303762dae0611a77a8281f1ff1cb14 -0xc2955463110980391594beabd2d0cb5a285a5c8adf4d91ee30139ac5d9b03b44 -0x78dbd4beb3638180f9d8deec74406ff413b468e2d8cc9403d2233ad2d50c9240 -0x856772e818bcb06d989dca9a2992ea7e116104bdebbf22567caf9fc1399c9431 -0xab7e9b99323e6323589c8eaf1611bf4905fbeea15e2c7954e190e7290bdd3118 -0x301811d73b0578befdf9039fee7a2b21b9be9895d7269155c985aba3bc168f32 -0xaa349f1f030490889f3b6fadc414c1112964eca4fea951c9e29a8d86a3cc0d1d -0x3afefbbd3a10d7d0770d257e43f59ba990bd69c044d385bd22527e8e36d1daee -0xdc360a01acba8f0bfaf112f3ed74aee4a4887fc5420356ccbf5d551923b80dcc -0x582a7b3e5f62a2994db939a77bec9eac8b7b1aca584c27e48cb4da4b3b33c66d -0x8f14757d707121c2d0912cb26c682e80dde073abe2564439b26f0944e500ebdb -0xc6e5970cd31ec95bad2b2d04279a98e33b2e220103edafd0618c2b8eb361e168 -0x7e573e9f6f750f32f95ff70cf29b6987a88c5cef9c0da124be48ba22bfa2b139 -0xf8ea530334c37baa5294b8bd29ffdace43832b704670a3cc975120667ce45902 -0xaff5157981290dcfdfcdf8a4323bb1c966c779496a9decf7ad2c04a62ea7226d -0xa7b59a4da0214a66950bd9227655302972579413ad7bcf49fdc90a098ca351ba -0x885e78cf99e57a79ddd4278bfc3576174d09d81a4ac98b4dc034df138403a39f -0xe806be9d772db1651bae4305347439ef659fb8da9f96cbb3b2a67ca082d0b938 -0x8deb8a25ac205805d49923c99efe69a5d501eb7a56f5d94e30d8ebebba1c8de2 -0xcfb48ddf0ab4bb18e2121368bdc228b8475d47782ee521abf8f5752c97d06dfa -0xc2a3316e9df61fdba9fb8e6ef9b6dacbc470313141b68c24f26da10b6ed25131 -0xec200da31121e5137377894ed762d17bd8cd804e6faa101f9b622c5f7f9efcc0 -0x043c42806719abb6d3cb7b2069455e2daf2c1fc11aaf712fb7301c73ad41e1f6 -0x2a9272494098ee83a19437168efd1018309302ad9104e30c6d9eede350275849 -0x39763f8b50cc5213107982a2140c1de11173426daec4d985538add1bf90783c9 -0x45f2984e767f05d38f9b5eed4a05b3e95663781449003fee43db78888ef31c45 -0x8951d12e2bc4acd70ccd6f5d4117306cf5c6b2c912d550fb0e3a3d9fd95157a3 -0x8d543a9e22e8d528c48d556d868d4fa2c8d7485a8f8911b5c0fb47622a63b3d8 -0x243fb076c721b4472a999dd225f57f63afc1d895acac0f2fce3f7f5f67577fd2 -0x02bb55794d54c670c7f59ada1ecc7f761e21854b3e0626c1776487d18b0f16f3 -0xa83f763a5365b4839b2623fbbdefe2b0d92484817a02537f513bec1d2822bea8 -0x2c55adde275ea3af860b173d83a09e03793494d59052662080ece9739035bb90 -0xb7f5fe5206ddef40be2fb7c4fa3a5c21a4249fb8e667782cf4a76d45391e1cf8 -0x73510f4ab42623b6b01c7ad1065c336842b9ff7036d4bd8e04ecaa02886f4ba5 -0xf2d14a81e6b4a9e8455d7f1ea9ff384f046cfca326e7b1f31ae041d6810a3abe -0x2e44ca17fa742995f9d8947032e7151382c025dc730f37a77bd26264874b0af6 -0x42ec63b8b7ec9e28b235a948f468763c6187b8185df1a98a66a485ab460b9f1f -0x909d96478b936a4d54949431d5a23155dfecacd22a0512b3911e4d8617f988ca -0x959b3557b0ea0e4916077b22b457104741bc98619e3240a7e87bdb1e6e48b09b -0x0b7e02d8c5e3a09dc0bb7fffc72740183c5deb94e14eb8890baa0de9bb27373b -0xee92e90bb6bb955582848ab263a43db8ceca4e9a082ee7a28d63dd17afab09cc -0x200c0eef67795a6c127890e9e028562b5dd7c929aeacbec8736648eb070ca58f -0x5092bc2e12710fe72477be8cb3e6d2ae6d41fdb4a6d62efd63e8bf2ffb60e1e2 -0xfd0e1d586964a74f6714534680184499faf3d04729e30c01c72f8f6a36ad711b -0xbc3e96a8fde9086b014f29e8c723d23a1e7928e0d0596196d3f3dd9e0847cd60 -0x3a49618c7bc3332e8a4e45fe1a96a2eedda8408bc1cdc3ad1dfefbd1bbf4605e -0x3fa44ceada54038144becc46f32448783c73b79abbb63b4954690408ab86e9f0 -0xcfb1282de0feaed04f6a4849bb3ff1e60814d3e65caf66a1a419cbf4966cdbd0 -0xda5a9a2466d177240cc94b5aa522e0ee28569139ee6d34d839d17e7d87262f17 -0xd09765ccbaecbcd74ea97be6c0a4abfb35b833504f3c642e4e4521678f0d49df -0xa869220f32470c4a286bec011960f163212d8e6d2c8075586f66eb71a5ceaa70 -0xb0cde324836c2c91d7cb606624a5dccbb523ae8e796775f9e5a71bc68bc7b2cd -0xeb020eb3b63cdea5967bc6e30ed8ad02636e009439af8930aa2d6df676f28094 -0xdaa5ad9307ca3eb26d8c4f2faa71e0e6f8d95a1f4fad87fd721c0c190f4a1739 -0x1d5de1043865fcbe683a5108b557b40357d70cdb64e43067fd616a90238ef550 -0xfb5341e3ef27577ebf0e833cf38fe342d4982ab9145ae147dd545e96fff583bd -0x52b0f0569de0eeaba1037ac9c32b3134ddc3b0e225f8997df21b65e091621221 -0x900f72ebbcd2163bcbcd8da93c875a4bc468dd1078931f457528046b06a410ac -0xd3bba9de7b1c2f165dbd9ebf9a390a5b46967a54c56bf42e24a5448e3dc330b3 -0x03fc3b08430cbfd7cbcfa9ad055de9168f7a5af2b2a4536d2eeb916a0f2b17fd -0x8c5f6c7dc635c0a7bf70d89417da17e74cf52fc3f6dba64f1b6d74d25c31b279 -0x1339c3650c55afda9c06c733686145d5554bda2f06fa047c4266136904099ff5 -0x78a82400af65af61fbadafc3de4c9165d6706b558610d6f3c05b77745e7c45bc -0xde67f50eda3ecedf763c08ee8e491e2c0a39db67fcbfa6583ce28ffa1e860abd -0x6a589a9c6f55bc9498a5d361d4dc703ac65e5e4f9791cade706f9ec8d4abe5f6 -0x1c2ff0aac9ed28d99ce06f351159310cdbad421dd90dc76a1d31ca457c86e0a3 -0x745517d8e6d6bfa67085b053c3ab756f105891ccab80c31f972ad9813d15937e -0x644ad12ac2ca43405cb36716382d7b13d0e0fbf56fef12cef6114fd735c7f701 -0x0c912cff63b21018397f89a3e9bec6c4ceb4de78650cac0afe4dc53195281206 -0x7390cbc392fddf44978f3c95f9e90e27a54df646c13aa3bcd64ee6a28f204ad9 -0x772dd0b0726b8b641257e6eb1aa7c73eaf03998f5c1ab4fb56c3389b8b6b71d3 -0x54d3ff867ea3589999ea481bed445e76f8f3fd0d508442f33ad8fb7d551b571d -0x1af9285e2d3dc1e735fe83232ca3c816ca3743643c86ae2801a1d9a4ef501783 -0x471b8c58cb3d79c93db4a252d758fc69d8053d1c92f38d2bc3838edfbbaef7ea -0x0e1e30731e08ef590ad20fd878fe1ad2dd571e3bff8532bb2b875bfc745407a7 -0xa3991253f71d30e8b6c91d03faaaaf19af0f9cc55650e1690a72e302e7f38620 -0xaad467b027d6389422d1265cae2fbf615f2f7e82bf3612772ea5d4b679c537e0 -0x88591287c8d2c172aec261b4f42cb2246ca13d3ad331ba93246033425d0bf5ed -0x9a8cb25963024ba16e26a4ea4bdcd65cf9c08ceac56168dd1cba787e2c866990 -0x7abd1c6970e803f37a4ec07cd05bc71cd58791ea51c2705cdb5dd3a82ab6a718 -0x30cc8c630267393359fbb446da60b9294189ec24fa6e0b4081fa0a6973eeb315 -0xaa184a68a250fe4ef986b42a5196889e9473064b33c1cc240dd566910a0a5998 -0x0428dcefa89e11ae364d3eb687644f121a04c2b8d5509b196e7dd61c485cdfd7 -0x6bb6233de45a109da7d3acf537890b996a8e032a346479e3e07fd24109d6b6e4 -0x3b3f8ae2bd218967a4b0b44427ae2b4e9d3e48e32717784c865078468c05b3c8 -0x687ee0d421b3d5226f6852d966cf4f1690d6359b2e2c45381318437f8f2bf26c -0x079b10bff1724e39ce9308b2110a36cde9ace01214482a54c477e943d7b9a2be -0x5395f2b9e18c881af4751213528a01f48f61af38771cf72a003272b46a06b0bb -0xd843f0e6dff654e6838affad8412389964690683b7d43e9f1cb2b95362735159 -0x5b46254881345affd88f67941b8cd0c2dbad6debc0437f515d9a8148de3e5038 -0x44d52ad16d3d1d156c1ed7708097bf56d4b4b1ae4d90d55e3099474e80560a63 -0xcb26f58f9740825522fc8b32b3e0fc0e464954b993d51dfbb975ae86ad66a046 -0x26fe78f8df958bad557cd1e6bf8ddfd54ee413d8b61f10fc2ab05ec06a5557c7 -0x46c5a58feb4ccfd7afba5796b720fcdfb4d08e43c46bee3aa6057a5e222b8724 -0x0b9299aab10c3cb99bef0aa5cb75e334956b398c5bdefcf5068f9eacdfe229fb -0x109e59c04da0b32c0ec13666e74173e278ae4ab0efa548ef357719ac6483e611 -0x0f04f3ac7d729ba0b71054bfc86df5243e48e9976c411d0aa82959d381af7385 -0xeb0539a910bd1d9e75f16d7621b1b4d63d1fd774084c356d7707769a9b52b762 -0x143e96123d5b51341ccdec0b729a52637c1fb768ff66a6a671f84ac3b41a589f -0xae5860332a66b9d1118ffd522f59209c1f434b872a07eae0753173f7b989fd75 -0x12f3680d8ab8a6fa18e6888fdbf22e7dcebbafa0cfdab035c3d81b8bbb001619 -0xd3f732fe9afaa62f8052923997fa351d0600c82e9771c5c9e78bf286ebf4c03a -0x441e3a8c7e13e7138c7e1a58a0a7a9fafa4c29677a3bf6262e254f644c014f1b -0x800604b27da272dd366ecbd82563be80917a66cced582fbf52887b46c26e648b -0x848252e898b934a3d1a90eb79a7c3a8ce7682e259fd1ad87656715fe4801d5cb -0x5b787871c8f38d874278af6067fff3139750986e5a9c3687a7e3af27ff8c6546 -0x960dd519a2032eadfc5305d9f48671b0f21506b5d46f9fef6bf0a27b4eeeea0e -0xbbae787f07ea2d1d6bab02cf74bc5c0aa3d73979cf30bf08a2ec9fb093257d08 -0x9d8de4875233ef1c6dda53d8a88255b6f3ef33f3b46c11132ad5ce93daf1fbcf -0xf3feca400926a24826f90ee23be9f159767ca7079fc7b15a32fdd0d17108037c -0xaff91f117ac974e9a30fd53eab680b29bb869e407dcbcd192cceb5e62f4e2124 -0x342dfd742fe9a7d22f77569a674bc48047ad44cc6ff11db61e1179e857e3983f -0x1dbdd1efef0e4d9cc9c31355bdc7267581f74ad1e7c55776b4b12b67709dd32e -0x10def666961120d37e0d5b08125b45ebf85773139696a5f230cdb55df2a4f037 -0x339704fd24883142d07ebad570bdf3d52ff6fd0393c2c00840805368a9b9e18e -0x6b76cdf2770190dcc742ffe3f13bfc0c690ee9cad2c9ebc08fad9ca758d37870 -0x027559223a8b29fd2dcca80b6855c7cbdc4a2c69923221744146770ffc64aff4 -0x2fbeb77870d571375e46bcf2058a60e816fa3d7c0762638dd02a9e08b98128bf -0x12499dd659c75640739e5b30bfc872d4968d38808d06a47ff878f012a83fc593 -0x9bf1707592306352744faef916fbc697cf5590aaaa1f94423abc00f9b8d430b5 -0x5b1a9033efbcd7c6a4168c83f62513501be5e6f20f19fa530782dc45405626e6 -0x7c380b71bab11b28aeaca2bdcffe796e1d10d8bb4b6b9a8515c94adaecfc37d5 -0x921130f3fa309a5dd0c785c434952b4957f3122b63bde153adc064b770e32597 -0x5e2db82fd1008a0bd91f8ac79114ce67c2cc0150c82fd9b8336e1400707ecfe4 -0xd868f102bf1ef6671a03dc62b4c4abe4c5037475048f1af6a0fb1606e5d24ce4 -0x756dc896e91677da9bf750f0c346a929649320ca2523eddf623f5459c291d503 -0x0cfcc150c39a595e12db9b9ea17ef5fe569d4005cd6c1f96c98a2e891e57239d -0x550a539923cc512030f6ee722c1f6cae0b96a49da8762104fb737d023cfd033f -0x5a899a79c5f3fea708c8febd0c33308c38ed16153d7ca349d7a6808614853cf1 -0xf2ee44ca74d8ae3ea91db3fcf3d72e86ef6338b2c40fc916d7d9471bf4849d71 -0x7141836bf98ec259f9a8b29216c1c2958b4cad6bba5a352dfb49144cdef4e50e -0x64d81b421c38cdef21b3801383c437540a81fd51ec66ad84bcef898d4367d753 -0x27cee5d15294f3b227673331c0e1fd3695f4fbc0efddc302cd13bc9191d6b624 -0x48a97058239a75686dfabfa736b526d67a60c09fa252bc32ff46a1191a3fcddd -0x51ffc6ef29aa8b6ffa2bb9ed7dde467a3372356886c7807082cca7f448cce83f -0xf8abbe1af1f0d6523b1d08f52b38f07d67b9429007b251e4679ac92b7bd45d7e -0xecd076513f3e60ebf0c635d024df831cf5d64b993269bf95738cfcce1c3b33f5 -0x4285e2cc52e0f8ddb06396923a16a5eff2cb50354d2d4ce573c474a58d0a3562 -0x9a7a7b6e2408fce82765b8c8bc6fef6cb9e59f9148314db77534ed882dca808c -0x7920ffc3b8d7cae203c4b3cc942f9858f4200ae251a557143256e21287fb4543 -0xc6a6dc1276acabca561ec01a1df7359475fdb1539ba53341f2f55007da89bccc -0x5fd1202ed7491a3ca254c21c08ae8c9ff24278177018537badb0644890fb69c1 -0x5e20bf205d760a0e5bf3c4931ea20bea89efb3ddef376f38024e37b7c27402ce -0x7ce8d73cd78d7b50dc985ecfd6e3ba458b2f9828961b968c50193ab40092f9ea -0x3ea0454ba41c9af09359ed93aec0c724154443a4ea89644f1bb04d379a09a065 -0xe4b0d699745545663f8bab6ba832b16106933017afd79b2350cc94b4f31cab74 -0xe2787e4864179fcd4a64d2b8be9fdcaac39d44bb1b1110cde3a323477aa8cdc9 -0x0f13b7e4448a2cc7df101c9d1ef8956755b9a7fe5ba71bfabc6c0ccf237ba454 -0xa3bc3845ad980f65bfa7fc72bb9beab5352c1e5c55cde2a41f798fb96b48af4a -0x9e3d4f8765fc66c66f6abd2f2217485d39bbdf41633196f0b80da952b2a795d8 -0x9816ef4db3d1ec77557f26fcd2ca6426eecea3d2024e431ada7c97c642d346fb -0x8f161ad51a0d319d0b4f81d14b41a2b854d2d42449a3714e5c8d7fec51b870a0 -0x6a9b5cf9521ef0da7aa4e7d5d9229c627de6e52d47cedde651d6cb3d8d029879 -0xbf97acbdeff1d5ed7ca1ff68029899bebeb086397ee81b6624ecc15e704f864a -0x5e465fd381912f2e4c9fc5b4919dcc3974f2784e730a701602d5aaa92b1fc2e0 -0xba174903e22d8f0dcde2056c1d93a5ce36b269b7040e5745f0558f0701a623a0 -0x4733207fee82b197d02597d687d58ba982ef977d5751623cd68bb77521d6d25d -0x7c86f4618b97c60427bfe08fb396d2efde7f71c91048cdda71001e4ad3a189c9 -0x046ffa7849a0be185d725a888069ce2ae7e6a4f0b428c2cdfda87a051ea5264b -0xd2dd96d62b5a5afe7a885620aa409998f501eac0f1576a801966c2c4cb99b9e3 -0x1472c64704e2717ce94eaf8e2fbb4929356387bac92e1c6b1b09438f83adb494 -0xda9e5d6c207728c813cb139e4555faab18686de323725f0d32d39288b08090a9 -0xa63457cafdff7b6bc25b50525faccd67c8415259b7d4438e509c7c88b0bb095f -0x7a3ebdaae2d4b31e4aa26b64776f6612d365adc5ebf917621118fa504f3c08e6 -0x9b55f03fbf30764c519a518ebbb5489263b7948e0c0c50da3dd71834299f7ae0 -0x293638134f95960107d7f2e66dc7fde46a52cea51c8c3381b41d7847498aad9f -0xee2ef7f4b0932c7dc289f8c416211b9f144c3b75f95d9867086f469d86467c34 -0x6c43418fdd79501d8e61e3982d4b2d930fdd5696f3193af97c0d2f26dd814727 -0xdf7d51bff8e5774f4aa58018680cf51f14b3b2adf989635a60c809b986483b7f -0x03750f19ae72ef92b4d8c53a56c1e0e7963f5ec5162f7ec443b9421c5eed1afa -0x3956306ae93cdc3b8f7381660b0bcd07062a986ba2ca3464c86c1fb40d8c0f8c -0xf65eefaa3564b67b6c28699c892b5bd6ec09ea2ab33dd1767dc1607cc3f86af9 -0x688dc3324f92f696386f2125c6f57d99ade6bb4037332376582b1d81777d9780 -0x232b01462f146d6541ca5d08ef8698f22ebf32c37fc55a2e125992361c7878e4 -0xad12d709927b15154b7340911375df3a9f628898e3fa58b5c686bcac50d5ca2e -0x3c62dace67dadcbee4da6b86f020d7ee0bf88accf619112b7ec0a08b98880059 -0xacd38d93f85c8986851fdae2507efd998cda7c43c464c715343c90a210bdc650 -0x0602b69c6fa6d33eb0f09ed481be741ce37970552823314c7b75e5f6a03a68d4 -0xd621ebb36d8fb5d08bdd9ad452cfab3e59d32508267521747fb3b036ffabd5e4 -0x10ddd9074ddcebaf0d009528f503764ddca11699da54d548f43c86ef49fdb169 -0x85bcda04b18f656ceaade402f8b66e711b46520a776a7ed8ee9e86a723f60fe1 -0xf2d45b8702a3f707f4566d7f3603a96a7274e6e54fa68c1c6fd89e41f4ce5d24 -0xd1a3e29456b3378ffafb5a17cd4cdfcd373c3857914dba2459cac0c1eddfe750 -0xbe01a60966ad6638aec69ea89a71abbd79337e636d55006e16faeb6df8ba05a2 -0x0acf2afd92f518e8b30417c1a649bd9e38e7f93f4a56c258ac5ff493db128301 -0xa9c3418df2484a02eb70396760e65898a116bdc83263facbdc6dc792c38214ab -0x4c69780e05785a527c3f57ea023556b5c5be441f50d8c723961effddc2b73372 -0x5b93db1d1b9ab9fac9c6b7da1307d21f66dfeb29dc80014ba24d1fe7de80c99c -0x2db4e3a549cbf2dc5e71841f36e9438fb1064823bedb58da825d3a852bb60e74 -0x951c912b9ef1d4549fcc00dced108be88ac81a810980e684f2ffd0db8874b14c -0x65f991575fd160ef8cf270088b687d4428e806362fc61fe9683762d00d2f5341 -0xb425651504d84e97f89a6b1f6481f1c60bab1d8ae8c69ffa4472d9eddf373aa9 -0x8a5079797fd20fee5d21a813b68578668e04ec73035bd296e9242288b6b03507 -0x3d6364843ef4fedffd5ee2f6e7733f203b422bcdf72d7476f63b1c7e5eddb2f1 -0x64d59791c31ed2159e4fdc906949a72aca35d13837942a69fc842ce4c5b7a55e -0xa931b628997130d0aa193173f0555035b142cc14ff795720b62a82ea74cffada -0x2ff838888b5e32937324c4b97ea47bc3551c8dbf94da45995b9800f8d014d585 -0xb28fa41ca50b2b7b20ee8231f829b75ba721e57274ff3efb4f497817d02a4636 -0x0d6b5325d620014baf955b9911a7a45fcb3b8d6e203f92536f7dce678d436fca -0xb429406de099a0029e32e26de3df1606004052b30107bdb98c69f9aea057a34e -0x184de3d06beda5bb5248ffd6a46346cfc50f658f48b5a94c8a4a91ca3cfe7e08 -0x1e0179cab910ac140f1156f23c17a93a2aa79fa4a62c0a26abe23d18825c2c0d -0x7b05de91d448c333d568cc920ee1570510d0b709dfac1475c035fde786a119a1 -0x0fa51dca0306d3c592b01b72f355df3350fbc9cf21e10919890628b0b6d53acb -0x4afaba60eef99f034dd2755abc191de716ec30bcba514fb2dd7da4bc6e13f22c -0x902ca0490b4edda1bc42af94e6a18555b317a4fd9857196f31a4078fe35b7a24 -0x1ada2544d587cdb177c47181248b53f0487d8525aae310fc382d3e72165031bb -0x8095c0a0938a7dec504a86be55316d57a7c3d8db446a681ed4ae305de28dd5a9 -0x064bcb0dcf1c911eddd84df410ea0478d73ea3148fda0369a73c5194e60d20f4 -0xfb288e2665824ca03e86895d8bda8101be4903d5f66f22ba0a7b6e7a349d1b73 -0x77b24a011f67356bb843c040cad7d12e6aeecf7e0b062d5bcf06515604c4f711 -0x7dd5e236ea580c36bcacdf13a946be2fa0d83fbd7a32ae1aa7a9271990c535ff -0x1f22d6486cc30c49775a7757db03f6de2301649255794d44adc8ffc94df9a876 -0xcb154b469d865580398e3b5e3bf768e9471b704ed7b46746f091efcae1abfe84 -0xdaa01e54cecb74ac9f7c61c0b88f092eebcca0c23de5e305f96fb52dc04af355 -0x5964c20e57326d6387b7d1286b98bc774bc21fb2ba47797875d91d4958c51ec5 -0x8e873959eafb3a28c2ae5dba0da97976e60f3da164312ee6af069d1793ae3895 -0xdb928713954399ec48853e09dffa3f780a3e7c5f07f7e01bc76925b89930d29f -0xd669dba70adfe0151aeabcdf797e6247f51a1a1f51ba7dd477b9a18d2bb4db25 -0x8af4dd79fd1bde448013692543532a87ff8524e11673056c342b74416974d903 -0x57fd322cd4b1736a75066026b02de2994360247499652f5e0a8c2b84362a9864 -0x391664a0bb0642690892d9fe679c5901927ff1b7f22f84df46fb454bc0251aa8 -0xf0395448a4f492fa058da6c2040d50f1dcdcb850b0269d097cd82389bb1e15ef -0x7e0d86f93a0c1e6ab9b9b7a2f898568a23219d08054a3cf63bdfb28aef7e1d91 -0x352155370ff67a6661f83b53ccc9b6070126c8704c77b0094c68956536790dbb -0x08012806641866142e6e30acaef12b69841058597e4bce70dbf33f8409856a90 -0xde0ccfb78e887f7260177f6e976dddf57dfad2abd1970239dde8a03f9fbfc8a1 -0xed88d742b0e958a9b43e9db7f28b0376386df64595a895cda9b184a38b03e578 -0x3090f336ebf724b5bc0c2a29ef235bc34477fde54de92adc886a4aac62d60ce4 -0x92f030a17cec2b2c33d5a97f8c60f84396d4e3257710a316a1541735a79a2832 -0xbe70c5b253f63ab2a89d53123767d9dbe6ec88840140ab15771ec60073aae857 -0x9901999127b2d959aacdcdf40bdfa8a48f08ba1108c2e2a5f7875025b9d10347 -0x47f0ecf77e4a3883eb5d4e9fa7739740e85219c318abea939a38d1679085040c -0x3dd2c16b570463c1a1cb25772b4ac4533458d21ef5e10fe41e63c6d21d8ddcc1 -0x3e9165a6bd93cc31b90f26970c01a2ba33e09934af010d7fea3ae174221a03b3 -0xe90e1fb37a0724706a2ae9b8966a2ed7cf4bb61441377aec9de2f9d468a77fa9 -0x9d5cd7e18c6d8385f3b50e9f32e4d2e4d40c7de3143dac95373b9f9103fc1a02 -0x8fe8691c1c96c98ad969d4fd8b1cef9439a0d03c2b7a64a9fcd286a861f94511 -0x7d5cf87ca49222a6efee2bd0454418218ce0aa873dd8ccc5cfac2dd5cbca5eb0 -0x2e14e4796a994ca797bafc0d6bbce612dd3aad4a38a2735e99aea51d5799107b -0xacd9f4270bfc8d3bb57c2290f3aaa4fd63f9786075608f53ec1a74d00199d592 -0xb0980fe29eec99b2f6df962db4c9c375a83d7654eb2c37d9aa7deab5eb1a05ec -0x35b676eb0bb8769afb34d4f3b94b1ff04a2dd7dfbd0d3f0103400214078e91b4 -0x6c5390dc419e27dc308b27d038c5b1002575c66a334eceaf3ade20e941da0635 -0x9beb8c16d6871d6fd08bee4ebe62133150d04c772c73d386b916fa5aedb5ab78 -0x51b803e1aa516e2f4ccb39e091aeb7c42548640eb0ae0891427d997e01d4ed1f -0x8dfd8fbd79345171c0b0d9034ee5b1da08ec00442a79c33418e20acbd7d03e0e -0xf341fa2b57cf4359f1b99fe28da62916d74979ee1319b325cded0027fd3e619c -0x2f19caf81f17727e3c6d6aa30dbc4539c0d76f4101c637b8f12e527fd8519fc4 -0xab9f440a4063912c798bd71d63a97ba7c3523f5dc33a262b39786d4ec9e49fca -0x3b239ed560e7b8dd7044d74c3caea8f41583d02f692b5b56caa465ab56aab7ea -0x0401e1d927bc5af05fdcd80457cbb79e06fee91303e484351eec31d6b1194011 -0x409ee165c53d592ba84acab717ad7c57b349fd2c8cda8385519cc0b0968b344c -0xbf31992521b393bbe7a4db2fcf06f5cac2bbef15dc2b0b16c5ee13b98704658b -0x42d989b03f0d589eb6118ebb3f484398b217025e518e8ad0617a83a15e9e91ca -0xd64749c6d2c87ab841b6f29844e4e615cb0636c4fa53bd832153a788b048daf9 -0xd8f165035bffeb00a95ed7d84e2ff962d20bcea6d187ba44be4867a99ed6b746 -0xb50fccffb24bb595c52a9bf141b5fd4411479d180237b60f920dc6e87bf24343 -0x5fc7e9881512ea0676e4ebe7cb02e433ee6b30eaa0242ba4f3c5048457c801bc -0x0671b98a8e58a331f5987c5fd411641257d3a8b1f09506c68cdc5a851282dad2 -0x44b2eaa33062c6f50eea90a353aaa6dcc0508bb9ade5f8be791652a15020a796 -0xd2c2d02b5d166881fbeffdf643a51f6d24e9814c02c2fb2ad5d530dc7b0b68d5 -0xf06dab8e1275a84f77b75235983d68313db070b8cbb102b2d3bf667cab14066b -0x88cea042d3c8620d0ef81e1b444a6208647fa38f6d10e294b7ef6f177401548e -0x949634b7e690429be65ad16656fd272ab8efe9921ee93bf3d8632994f6cb6831 -0x08cc7d316e0635ee7e13da52c1fd564f356b9383e10c06f980e8690ea2cbf4f9 -0xc61cec1672492160fb337101fba87af354e95bf30e4ec7b031121e8b8398fbbf -0xaa51480727e3181fdcea53e4fdc5cdafaf2d5dd9523f643bce0b87cb0cac1bc9 -0x6f283e4fc2a47fae66c697b398dd7b30f13ab2d2cd4d19c8acae10b540c57626 -0xa17ae439a41b461ad22ff1c367132fa81dcd0a1fcdfc066eaff89faa86c19b47 -0x0e63a17cfce4ea3e8ecd73d4b23a865c17b12a7f1e217057c82e4cb7c3c3fb7e -0x666f17943fe7f62bf2788493ff2a7391e14a9828acc5c277b3202a009c034577 -0x84ebc327f92a8bd56afdf85eb652674c541b5aae8f6d64e681ce6989a9764d7b -0x07294f2c5ce6ef646711e5d07a239f6423af4d77a06c6005497a43beaea22816 -0x9f4f32d758a17cba7a8eeb9fb43b7898d98356a5ebce8ecb9081ae420d21f1c2 -0xfcdf30838362026da388e4f618bcf0daf34a5bc1383328c25b221e02f6f50284 -0xaacb50e53f28b095cfaad090c0eade102320e5ad1b9466f1cc7c54da2412ea42 -0x3a6783fa9547a027809c0777a4ab8199691c6c6c4da0633b0891097ddee5dc26 -0x91b89b9480c9a5c0b83de1efe482ababf8f57f1a5bb9c967177389c55a4e80ac -0xa2bee87d27da7699b27bd8718020068087de499bada2578c045282b6ce3a4b79 -0xf186f941159fe0fd0285e8f22f7b663bd6bc3555ef7988b2b523dbaf26cd337d -0x588efa906b73e136dc0e52abfebb14ee0b84f8b0910cf3593fb9591df4f59569 -0x59cc5353f279c09be88c9396bed3e62bdaac2f712df4364f7e8d3a0ddd76c56c -0xeeae811255a20b6a096340a4e87aa979aa6a0d8b5b26a0a6cd9000934c397d91 -0x85933499f3d5adfe0e5c726853d34f117864cee35f6b6444355fb966094e8474 -0xac48845d0c4de57b6efd7c985d280cf3c2bf5292e5275610a93ac0efe4590a6a -0x33189b83104a4e73d252568681982941e10221fed442491151e036fd61fa56dd -0xd56a7e7cf93a80b937f46b8e830df47840d3d4123f818063f5117fa9f41125e0 -0xb7a8d0fb54b3fae569d953b4fb65a917d6fa57ffb3f46df032f9f2de8bcde7b0 -0xc0bd765ed1c5020bb4e2eeecb0b2880d0555fab9a9380dae2f4e915e47fb6fe7 -0xb696fe1c70d0d8fb49c74569457d01dd0a4718a6b44353acc6f6ed57beda9911 -0x0acc4fbf99b94bec4f86ea782ece0bddce37954bae8926810d82e0930b614981 -0x1c27a9179afc48b8cd853df91abcda1b1fb8cbd2d12895fa5b5c13235d262c3f -0xf0e478c84297b57570ab2d6c1848b15d16304a0aa94af1c24152bfbda57687f8 -0xf21830e556828ee3c553676aad22c325e2ee21656d8e345c6e175172eafa1fc6 -0xa266d533a58d24dfd2d61cb874f108284311e27021c403f15fc3889439eb8891 -0x7445def5d5cf32e7b6d62092d6f5258c494a5bdbcf92a0b2f1754b882f100bd4 -0xf6d8eb738b1f34e75a6293681fde912dd759ad7b80564801516836b5119fa8bb -0x82bc0567f52abac41f8107d3de81625f4f3b6270bba0ba3e845e79c6fb4acd2c -0xaa30775c6dc7c3fd72b9093020ca115afdffcd762c94a74f275002a266dbe162 -0xc631d7544a036e785274832defd7cbb68b69afa9980f693faef0d9f9aa8fccf8 -0xa93952585c0ad1e9fd700d1a75d86f8908b7cc771a210623ff92fbf11cce3304 -0xbbe3034a40fac83a128a4dd79026436ce6617ace82f1b4a39c5df5600fb6674c -0xfd760ae9cf5d55112ad494fd96ad2542efb3ccaa2fca8c9b80e78dabeeaf2cbc -0x1d5bb73652381278ce944df32f440940c3f41a204bff8be22184964d7ee8069a -0x227cc2ffcb5d613f6b7b6a599a4fed4d8063afea49bcc3fba08594029423d987 -0x36c8e81d56dfc6662d6a01420b93c89a296ca8abc05bb9990698e8c82c8ca452 -0xd18c7da7614723d65855cd577aa17e756ec9ce96bcea933353f1a0b27f8aced7 -0x0f5f26a0d553d592b7f179bfe52bd6e98527625e0e5e09d81e6041e8474991e5 -0xf3b3b033f7c868743fffb4c4debef3333df87a541427505cd0124bcd69b3217a -0x412071041a08429e615fbbe9e91be3c6efb83e5ed19a1943f28c3e7afdeb134f -0x0a291a0604bba7d4eaad23bf870711f087114eaa79d5bedbd2cfd8aca0bb57c0 -0xc5893dfc0eb50737202aafe7e544235294a07acd7c2c1d27685004937ba744d2 -0x2886add7f61e9ac89204df025828d5bfae8dd56c690a104357bb92a5bc1fb7cf -0x5d75f6fae792e8154cc37a6188fb44b44e3ed9b384cdd3fa023871db1a5954c3 -0x59292ee4030bba59a8a30ff864b2ca8dbf0930f49bf515751c6573a8c54a8113 -0x7f2de559dd47c02d81ef269e93d1c56bdf4f49e2f36ed6e2ab2cf974c0de3ed3 -0x5bc370177039c749b0bd7d2dc758c0bdfeade14fcc4dec62e90a15582b7f969e -0x4716c2d4c40163631f36d8bd4d6dc04a1c596da60562fca00b0694671f298116 -0xcda7db15cfa152bbcd345aa425dbb02016207a129156f230ba5886eac364813d -0xce2110f35d0217fa9ae6481873136382c8fec8731e4f396344493c5f21a6b447 -0x150f8b12c5b2319df3cc1bb8b24a24d348840a26fb071067a0e3d79a2d0a3e02 -0x973a90894b313de38a6c2beee08eefbfc4be2aeb178ae8a6e3e678e771de1cd5 -0xe3b19ebc2ed1a94bfbae6c39020ed32427bafe008ca16f61aed9130f60ebd19f -0x6fd89ffd097f40d5cda48dc18bc455bdb7bf08d4c8f9f158889e9ac26d881b59 -0xdd520d14b8f0490f6475ee6eef3746b3b6d27e899dd5b182d7a95e2a19c618bb -0x1e81ff1128e860172989518d5fe87f711aec77e56d26b48ca80d0600fda20b32 -0x2e2e90deb6dadf95a6a9d6f9ee7369e4aa145bf848d34609784914f1ec122be7 -0x77bc5b9f59ca970598bdf628ed891d2df9ccbda7b1ccdec4aaef15ae1bf32611 -0x676078fa44c59855adcad37c9d8a43d2c09737afc881c9b3147396c96bd45809 -0x000f8827a1b7f43bb97b5190f05dae21b71231abcd506740e198a8093584af25 -0x074229cf93400ab6cb6f628e0d71a515477877851513ed838da33f57085c25f3 -0x98c0c57dbd400d0e8dd791dc0897712b843e998c0dc8fe8d892d67ee61ff8b43 -0xbb0d71c33839b401ab55277b2bf362c243a676aa590ee51034b3ac2fa2f786b4 -0xf7748f4126d602c76856c816f36d93a306bf25b8f21835b23d6cbf94d156a71a -0x6ab182b62e0d791b4c7842fb18defc349e18e02bbaa28c09bec681cc36f57666 -0x16bf1785fe7e456bd97950cb6ed2dcedcf068175698a732c10f04351248f87a7 -0xab30deabb3640c7fcec7753d8b114aa25ebf7670f5e6a3a72b33fc388a2d0563 -0x3b6af31e9e9fea1940a6bb2fa43ce14bab6475a0b0a136cd62ebf47bed159dc1 -0x68451c447c36ad643d8d6c6a56771e85a0603d9f4ce64c891322badd999f65d8 -0x4aa40fcc3be75d60946ee7b4f264f446945238552fccf78dd3a005213ad791a4 -0xd2b7b2a1721663ca63cd9fbffba35e2df62d0ed2281c057327ffcfffa2ca0fdb -0x8a6da4d6311194c9f3bd5651f3d2dae6c191bcaf66bbb9834c88c212ee11f474 -0xaed5ce8067b7a9dad39bfa88a73f182575c37de348dbafc6e432fd435babc6d3 -0x6b90f8a16a653bcac2f196461889165be89d4a4d6c352db42986570620b9b727 -0xf9fffc20d1f4038eafd6dfc18b8ec0b9b3e3a408b990f2daaa44bceeb67e96bf -0x9c5c2a841860979270f2bbbb6cc4148df881a2767b41a5134865654ff1a9d24b -0xef5c428a24cf2ac449b7b06bec785b9d6bbb0292abc9b85590cb8367fd6db89c -0x7d2b2b449412be812f5ae1e4f61f85af47bd4b94ac1e144af99e3ccc9e832038 -0x8714b244414f4ca043facf2b83f982ec35184409764acd16bd63ca9702b6f2fa -0x57538b93d09cabcaf169778414dfbd0cf5e7799c737cd09fb47254d7fab3d963 -0xbf57d5c157fe8af1ed9605fcef6e543c95448ab7e56a5daed70573cf73180f01 -0x171d3db27b6ae63b86f0adc5cecbc71ee03032047cbf0fa50dbb92f1da1f02ce -0x34c4bd5d34c888bec9ff104c67c384cb45658e75d590858b4916bb8ce6ed0ce2 -0x6d5fa2017963c19f2da0bfa773a187fa92029b714fd8a6a577d139d42ae54a91 -0xd345020a23d827e8075b8b67ae19cb061fac4d25cd679d25ff3ebadab1095b76 -0xe607b12ce9d7997ce5eae935c5aece267048c249370b56442a994b73b5577d9e -0x9c591f794c3c14d5201790a4a5a5949e57383eb87bd44c7aeb8ada117705a7ee -0xf60814af125db60679e6304f2a122003a98c82306195d8d1eb318fb9ab761a2c -0xb54772da0e8e1c4b2a122147c05158fc9dd1e3288fec1733781c0686bf5b8a21 -0xe06514f60601bf9d51b2b462a04f7f7fa554fa112f526b10a4d675ab5df087b3 -0xaac866bffff4fffcb360d33196bcad17f5af98a65b68780ae746f66ac039b3c7 -0xdc69d138ff8c2fa47a546b64800710e51eb7dc3122a604852bf0a2e23b4a1623 -0xb9e06242c8de74717b0b2cbd58ff19afa8776b140396da013479bc93312dc4c1 -0xdb5d34c6cce9d9338a56e2f37d4a38e0f058a24584ff7cbc585c9a949d9d1a3b -0x9e5d0ac41093a6ebed1ac747284bc1753a67734f964452d38684c27ab50e0bfc -0xe8cad61a9689543ccdd458b9e5e26dce55737e4a2e28621e0591b481c2bf2d73 -0xc220ed376991b5633b49f061858c4c429ba603aed0cfe110bc7389619ca40df6 -0x3c4415e07a14083ff881e1adeef71cac489eb10a6b0f1343390adfef65df9ef0 -0x3de992b48740d3c6916315ae63d0ccad539e526f368586f76c616a3ff107ea97 -0x2200bf2e6eff071bc46076bd9177f65d810d7e6824a1912cec0c2676386090e5 -0x9668f1784449bb4283c311a126bc376fdbf619b97f6a2680c71a73db36e5d3b5 -0x0eb47de672405698996165953033f637f397a310906a62411095fab909581858 -0x008073915b660cb82018f30ec4df3155c25c9ab471e078b558bf61c33779da31 -0x651062cb7c276fcc128715eec2070f464094f8ee1bee0b825d24e7e0def81b35 -0x7b4d6f166e1b704aefe57d4355b4e92623f239b7fbf7da2839b0d3149b348615 -0x1b5137f11bb1a0d82faf12bb68b9c774e05a27a86a6929fed5b2e30659336a29 -0x43d1ddd4299fa212e64d0e25c9aef106a0abcbfdf7b5009c9a6c3e34db2eb49a -0xe7abf48e040cbbac33969449d989447f6991acf1cf36d2fbc9b10e658f85c577 -0xa763b6422f226819b82c23107607159c670131ae396f7016885522038e022940 -0xdcba6f94003baaef39b3c71cedac311c9b157752c94b8a5d282fd2bb3c188326 -0x1acd83a38e2ff48b374fc3c35256c9f7f01cae310c56f90adc415b334eb88ba7 -0xc245581be5d0d4e0afafce94f684df3b3d56450a87914e0f24176823993fa160 -0x232b5764d1d8c1fb9e31259355244d8f75c82a62891fc432f49c9b1d7272b81f -0x2a8f27456709b6777c4e37178e0ba0d66ca18e058b19a781d837cfdc7ca60f71 -0x95650d53b5a0a55ee21294d2f9ca2685c72036e2d5ec891b04f8fac534f314de -0x6497ec0a6c935f4475938919e21c6e0c986a93e138be388489055365f727017f -0xa86ea154ebb3070dfbfb81cd04ba915a92d7de7af8bdfd24f3b497f4bf0a8ee5 -0xe2fef608115b09df3e333192cdc0bbeefccb0869a8d919cc8c0806f1af0ab23c -0xba1ab9ac6e0f48e238b1e6ef05491233e97bdbe1361d8d40a6cf89650c4fa2de -0x7caa12d44530af513ac56e7105973e0862ca2b60ad90db046ac01958464c5304 -0x871361a45df9c366ba6c6fbc5b9e1f1682c029e5eb19eb8df671f35c0c260e11 -0x86edeca02b2d9f98340e73f13ebb051ee9b81beac9bff62427009ec678ec97b3 -0x599b05f5c66ad6d2af3aa10d2c159421eedceef4a81ad0325574c68a5d3ec7f0 -0x57c83e06c55866dc681c5cec852ba2a1e76046e88be0d19d966e3f7a8e0bc34d -0xbf495fc6f201873d42cbb474cf18874a9acfc9216849d4e2890211e861ed63f4 -0x6af1b740a95341c82e3d6f18cd47ee666b46f076f4fb5395436f6d265df8dc37 -0x402e82d3a58d23a1f0ef5ad35ed82dc3e90e04bff900b69e07f83e7bd1267a8d -0xbb4ed14475f5ab20ec2c3a37f8d4d48cf87ac675ca9dc6c38073cf313f754dd9 -0xc4116400a4ede1855c48f275984a1e2c23f989bac41bf280e4199d739057d51f -0xf952a1e1ee62f80b2401c40b65e62d2703529b31ba33bc131611ad2cabcd0f92 -0xc2f3aa78d047f2a21f7be3a84235419268d29107cc568373f194d2ca372f4a49 -0x3595537787a6a6ca8a49aec757ced69711888ae871a3e7cc4a711a1901203b6d -0xb51437d3156a1f9ad0f8640a3ada4e0ed8e2155b976d192be87c85df815f8c73 -0x7e0cdcb6d778bc08a1a8f5beba3bdad16d9ed7c5d1c3b91bd2f3a79bd565c775 -0x1a2b660ee3b762eee213ace8c6247e491aae124b9e7f966e23c3f36036163e70 -0x8c8a1b3c2c916ba29152722608181d149d777b5d74078180dbd6a2b6833e31d6 -0x252350ddd88ba6bdefcc0b79d55ba86d09bb0280ffd8bfa28326410871557d32 -0xdd894f2d3750044dfa6d14448dd1f527dab15b39d1369e9fb073d04cdd5af56e -0xe9b3f50b9ec2ae8b004c4faa560129d9916ab8e373c1aeecbebaf0808056d4e3 -0x8f741cb828ba333f0153b107c1ead99aba6dee0f9f253e1cde0064be59d70447 -0x021c27b5bbe09f866b3a5b49294da6b27cf9b4f57aaf3dbd1aa70f71f8960e80 -0x9143672d93f47fffe482e24ec8fbea11932735d51ce8a31a36bbde499e194934 -0xd63801f2e0a9c2acd4ae07b7096d14682320490ce5adcc170a9f539c8ac82640 -0x03bfa9ef1ec8e9eb0953518f98afc217b60d08f8c4ced39ae186d2b2961511d1 -0x0317380499ca94c399f502ae135a45759529ed2816e80fc8d500575ef9acd327 -0xfb3cdc16cededc77d99949b56234e489f5c4161620a839a68e683cee1e67db4e -0x7e09c51f959dcf985d1e60ba7700ffe1bfd5cdf53cde0b950c0a95bbf2e86d84 -0xa605bfb678bc64ccb65e299bae2924a94b27b06c91c49f0e087269afdd29bb18 -0x9cc988c1f2d0d0f2c1fddb4b8bc32f92571daa01ba3dfbf7f5d0ccb65bdb81cb -0x10cbc8faa95f6258549fe0b27de2deff1078f78bac2f5865c93a2e76020da0b0 -0x322036c581f7dbd41c14667db10ac687d67c57f322ea1bbcde4927776d6f4981 -0x4a391fa580adb86f53ecca54a6b93745214b1c0312ba805d109dd488ef9e5da7 -0x4c77d9b64015f85d2c4825765d1cc6916adfb440ddfbbcd3ddf6d5e7afdf349d -0xff3156c1196d07e3869943cddd29733ebff5068a23cc40e72ee101b84a7a5cc4 -0x41229148f759c89c830787513a8bc264b0959f46b80b29ea106fb318662f69f5 -0xa11e6f9267407d9a7aba4554b0032131bb546ded5fe5e06abb57b0ba2ea94384 -0x55b64e293719b71bf4d89b12caddc4215aeabdc119ed572eee173cb7a1afadbd -0xf7f98d560aecedf6fea02393650fd611f23ea37d785ff80d52736727305c734e -0xb33c59d3100a82ac1896ce9d3d8324d3302edd567d08feacbfcf45738179e5f0 -0x15a68cc1bbd7bad4521e040272001cd6329693cfc4e9ad364223fa66e57533a7 -0x97a211965171bcfba6311da483cb0b670eeb67e45cc9a07e667f3538d7cb4f88 -0x529d56f4d7a5fe04308d2082cf38762068f0967f42b56eac77b47a61c837d269 -0x70269a62895cf4ad3e44630105b18dca4754eac044ac2728c93af049222c70a9 -0xa49b88b7505ee82e8332df50a62ad772cc7a2caef5ea80d7eff0b03325fc52a2 -0x3dc8b8fc4a9fb5447282d6a0e850b1fc3f8c7b5a60075348567ac484f9670e23 -0x0a2b503c66ece0f26891904a932dc16e995bd165b85bd9d48f3fa5f79d2953b9 -0xcb3d99f2ea14d49dac7d9aee7e913cb9a49044cec85c39ca23713e7ce64b1629 -0x1f92cb64cefe06a76cb7dbcd0353d42f29098dfd920590b9574fecee04de2e25 -0xa45130a7e33d75cc21bd73c309073d6849cf93e468c9b9e0b141eaaae959a203 -0x818a87468ded30ce795edb3d469fd2cb1e959088e2dd7da47d6e42fbc67ed974 -0x9ab528986095204a486317b0610e95de06ff167e8287c2561720e0fece1064b8 -0xa1b65ad2f7296dba05d8805e1b4707a11ed76eedd1f7bee67b504eae64af541d -0xba119d4ea3ee9f3b12f10f24c8d5e7871bfb4c6e62f43383e7ec9a8e20c25afb -0xa3b57feab66debaa5b2927f5c8749e6d6728a8c92231e194cf27efadf5505e17 -0xdfdc41568cc51326d3577253f789ee828373278d70a6e73833725487e5e75de7 -0x51ace4ff7ad549421f34543195f4b78303df4845c8b1af0f05a0536baf8a947a -0xaf9dff025ac8e1fb8c54f8dfb33ad205b206f5b1c05903aa8fc93cf9c6458b67 -0xd9c52bb4837893a4495822a9ac392842ee52650a89e7ac777b6753e26ad33c96 -0xcd14074e0e91f7a096bcf4a3306a5583b24ecc4a3e08371b915f758b7d280665 -0xd3d2b4a9c47d165ae87b1166ced08a5feb90be1f7a7898fc5ce724dadac08a0a -0xa3245a62034361c7891fa0a84edb970a0a92ecac63ca0a2cd05c88aa686358e0 -0x5e953a023bba597e20ac4326959faf71b64e47c3cfe8c3b7510213386d86f0a7 -0x7e21149d83e1e3bd101c4742c3bc70f20546d728334db706957a4d31244c9ecd -0x9ee8a340ba943b9bcb0178d440ce1a9f37bae2e57a4dd4964e71305eb7fe8c65 -0x70719c1ddf0dda1ce2903aef8f030e8fb4b30f6e0cf0b6a7b197e519c2d3ac22 -0x0d89dcc97b2ac82deb4e848f6e598d62b7be3191611c17a55f7f08da2797a9b4 -0x247860bda309bc7f88a79050c84ce1c5dbc72492bff6eaa6cdaab319ee9288b7 -0x3c4813513bb2576843cfda65dc31b42863f7dede02e2e529d1931b253d6f3910 -0x503532891b5033db2fe162ced491173f3f9970d8af2c91ef44bbc45f8470a1df -0x3160b7d4014bdd07294df512642211b36c697e9616ed4e5477d14bfee472faab -0x4d1029073ab8c45252c6f2d69147b31d208cc0606e0e6745983c0fd878c270b3 -0x4bdcaf7c6d852533a77c66a1e187ab53f42a1ad474297c0e0351c212166afae1 -0x1934431121e106dc55ee2dc1bdf9d91d30a00e8a9f189fb97ccbf3ffe21f2f40 -0x8c74a44bb26469d82cbbd6ed50078c487f364c01bf5f806c0d5c50387ee58787 -0xef7380b709611e83526c7f5ff5f43dddd692c90d9955331a3595a8db20c1c87f -0xff3797ecd2f77aa6564b58f79c96ef159d82737b8892a0fabbf8f948c8094f9e -0x3deaf0cdca96b9fab0a1234aa07999e0635433c1b1a648dace31fe8e8edaf38f -0x18ec131dab0a21c1aee1bcbf2928ce7abf94eeca9c0bb5604ae7a7434c63b708 -0xc417689329bc5ba9dfab02f029ca83b5457911eb7c92f02c73662c41efa18dc9 -0x99d774d894df90dab45ad1603184350a330c821d6f2468a106eab6c74eba40f9 -0x2f6c95b9e4d6326167c751ca881789805ef752c87e0d9551d899588cf59e0d5f -0xecfa4e1ee757e14ecbe0bbaab903fceb85535c2fb95da9eb2af09ac95b279e5b -0xf60ad27ac492d1ea821f7a93255a4deeab1e577041e2345f1959a02a5fa05e00 -0x74d1e77070fc1578528a602e153c5a22bfd4f227a276fa15d60933942fe04110 -0x5ab993905e1886aa0e2e111211c9f7ffc07fe7e5d551b733ec384a89b8ef3e13 -0x01a7ac5d278139988ef5d1f55735d091eaee9381e13ec8ff3249cf9ea23fca61 -0xf11043d6c6db0a359dcce0bd024714bff65cfe1775104a1e7386c4609a9b756c -0x6b81e7e4ec7a56e66a3aeb03ad990dbd60b37ff032b5dedfd3da244c5f4319c7 -0xe631e5c5dcf510b54d884c8457459a3a3e9e978e530cff809b741e25ac07f9a7 -0x8d50f4e43bae1b69a4188893a8b0a4fb23fd4d3d223170b8567177b8ae193941 -0x7660859455fc02a725aaaa6bbed10167cf0b6ff324ee6d91cc02468b67c866da -0x25840d3eb2c3510ae002c7cfb25f929687bbe2e81a5a149528d9ed3b19ec800b -0x64305ff900d769084e878797a0a9733e8e2ce7f5679013a7dce0ca89d66a0ce4 -0x8ffd813f104df532db2ff53d814c7b64de242c6de5bcc652ea82662c132aa8ab -0x8964926e2f0d8f4f87bc6afff42253984f4bdcb4187b529ee95c1ed6ea168006 -0x82755e24ebee583a28162b92aa1b5e8e129049fd110ed73c0b4268575a357ae9 -0x2fc4cc1c885e72171c2b19d4d88db563ccf51e78270b730a6aa562b939695dc1 -0x48b34190c2eb0329759b549b4bddfb944933a175ad0f8652e7ea06367a6404f6 -0xc12aa62c2dcb3e9edc3b446aec52bb88184870a6a76dd9310e5247b59ba509b0 -0x155068f2e65c38d9d8c68ee264346e9c491320c99628c952feb046978bd9843f -0x43673c1b231a59211eb1cca0a4605824d559ff11dc7fd358f59507dfd0788c7a -0x197471c697803e8144ce6eb59c961d01af5fc453856560fc329bb09fee33012b -0x6fffe699f9f617dd4385b1596b09a5442d625d2fd64af3764245d57af0e95022 -0xf010d5d8f393c73f791a8e4723184e5c4f62e692aaed2a7984a8efb3de460926 -0x62ef7b155c0525455f48c215e4bf4b247e5de7976d0503599739fe5177ab4eb0 -0x7149ea12af06d1be09dd4e4b35819198cf92ae5c9a4e283612339ca36fb7ff58 -0x0e9886296af755a8f9ca1d84d0ab305f688c0af723708f1690dd523bf41aa319 -0x6b23143ad4d0197ffade61b98556eab7ac23bad30d562e801c1288724ea3953c -0x40a686d45b5ac3c2b9d8da693614fa8393cc2db2468910734b6b1537705e862d -0x1d318aabf29b89b49265cae263509ef741d7b7025f8cbae98ee6a7cfb6120c3b -0xd0521c4bf2c3ab72521f129a4e895714a5713c8dce94b05e18cb73da3b7e25cd -0x22e61e410a2ae8f0a47f19d3ebd8917aca3942ca060d72ad2f256785ccc902f6 -0x0020d1344e847ea26704959e0bce0d9c186a44ffb71ad254b28884f3c0798ff7 -0xbd9ae0b807740cbfd2717df099031f08d04cc173ad1f6dcc957c55aa660a37f2 -0x49125041ff59c9b94c7cc7de1ca9a7f7825062fdc0e700981d623571001260ea -0xd41ad8cf6d3bf2dbc6ce98ef59db84b15e0fb90741f7d10cd2c96057eb5ef947 -0x934c3d48d86288c4e22fb394f6b7e9b522ffc4b84d1baa5f29064b2ed895094f -0x03674658a294e3e2a2b17e4cd3ae7db98f599780c67d8cc6b16a874746633a23 -0x229205df314b3bef38d1a1a06e56769a15edd872b67fa070a2ef395d1d8122c0 -0x571f454e79d74ceeaa6e639ae52cfbed44225978e0ffc69ebdda5e309979ada3 -0x141096c7cf51405bdcb6b4a3f7500ee5b923fc2ee166f1b83d10988e8d934116 -0x05e25f79656d1aafc4e6ff31e4b7cdece9719ab5efe2bd86e76b671bd933eea5 -0x16cfe1ee5c0407d3a5a6cbd60fa4a6d3e16bd96fbd212614c837b0b9f25d889b -0xb273f6c7b169cd89b1cc9208e7ff39dc059621fb5f631f8acfd7e68d817d300b -0x1636d77ee8f386d319d45d3f07a7bb8231046383914ac11d3aa7bb9dcc30b26f -0xa9377d06825bb1f90ecdaf0c92058724ddeebe38b12e64a3deb12e38bba34f9a -0x0900f364e6a53da54c6911c699605d0045e30cd39d6546e4638dc1903f17249b -0x6daec086e385aaf74ca278f7a909b05db1eea4885700d61cf6a50359b14a85e1 -0x308edaef41db64ba19f4c8b02cf188e22f56534ddcd01bffeaeb47425af1d6a3 -0x74c21252cb025bf6bd11964168e5e8c70a5bc1749dc261d599f58815c51c5979 -0x3fe7b49ef63fafb2c2bf36f0798cb8c051f70b7d97abd851488d47a1a8adb3b2 -0xc0380b39e11925f13bc3a0adbf04f08079213633afaa4e034238d4a0e759fb39 -0x25da9ff24e25614c550e355398ad3de997c78912141d3576b62e35a4b5ea8def -0xb4eaadbe693060c59fdca334ade85ca7d755cdf3980fdcb594c548cd86fd178c -0x1b1c9abeff2f52c32e9652d115a0d6250764171eeaa6b3773efa25187c513a87 -0xeb90392fb48ab4bf9a726a16dfbda879a69af2acc540354823f21ad87c382a62 -0x98cc89fd8226925fa097e64a9cc5e628033de987ec9eee44d41a741708f40bea -0xc98dd0da372eabb87c94b977e3b7edfa10d4f153f197d61ab1ff8b76ca9af8ad -0x650bb15bef9e6650c1bd6e7f4293fd9c1219710e07bf68efca91ff7f7d87c70d -0xb661bd0f2ac89f75a2aa2522af39a09d134d087e38ec257056d60584baf93c55 -0x9b656902d831f505aaf7d6144c6382abf24f0240a5e567e53afde445786d51b6 -0xcd68899fad44732fd78647f6d0b7edde2296c17e1d91d07e3a4b7ef6529ca9f1 -0x1785f80e2453dfceb213cc786e063af0f1e07cbad65925f0cd0a68d1c3ab6ad5 -0xd20480ca8ca228b38e84a0500becf76e6b21a2225242291490376e5d8ff894a6 -0x8d9cba36244997a35f1224392a30d75448750aa23280fbbd041e4bd8ecdeefd7 -0x72ab85ea3a2a5afbcd85322286663c58d2e981203412653042067ea45ebdafb3 -0x7f353cec310d2d03eaaf30ca654d2057483df285c4e5a4f91ed1ba163c4bee57 -0x987cc7101cdf7900a44729c17fd3860181b7b4ba32b7087c292035b195efdfed -0xc0754f3fa6d321fa4b3bd96e00b9f0d59cd395804645718c8c57edc5f4d54f67 -0x92f72150e322e2b3276d49f13df8cf23592a4a7c2483b66d08fa5f471495d481 -0x61abbaa5643a731aac31188b57d8524ead230865b61507ff3a48e4b8bb84e2e1 -0x507edfcebf9576ae4aa03d3c04032df496706ea8abcc5cdd06cbeb003499da0b -0x5327e0361a8766c9fbb47c938e0cb1a22b74ac22ddec3ba646796653b02d0b8a -0xa03eaccdd1eedbd08a5411af7e2d7077c547c6bb5e4a8790bc991562e204bbd9 -0x4de36d7ed25983d2178b12d47c6ab05e3f09291a0a41fe1dbd43875823949096 -0xbd0a66735941a1b826c81c5a1ba262bfdb030f97a7a8543c478670c0194394fd -0x115a266980481cdc9a6e46084c004c63ece67ed4f03998b63f2c657dc099a06f -0xe55975b82a79b08c08822781aeff4c18017e3664572cc268a9823790724dfd38 -0x3fa37265fdcdec70324aaafa4dbc0413451c3f007f7e607602987addbdaa1b6d -0x858a871b2e7dc8410c161e0450f7c53c901884f6b1fc521dba1e4e9a2e6d380e -0x8c13abce5f4bd48a5ae64c0a53fa120d7b35dd384cfb8ffc144b3422fdd8e8ad -0xff88e0d110af73ca00dbdbad49f243ec83e7273acc75b486868b68e1a5b5f737 -0x6e4ad81b05f55c08a97bf208a25f75fe2a7b21b9e811fc7415176b7c3045b9fb -0x5e54388b0d10b3eff43234d35002777adeeb4b09e9a310fbba27d77d9ececd35 -0xcef8b6dc97d81035920474fabfe2d2404697eb1dcc4ee411a88b517285ced0b9 -0x42fcff783fe7bae93e492f3edf60f059e6e4f5946cec7fd261a55e77dacc201c -0x7e7649326279dc46e2f9ffe777bd7354dcccd59495561736172a01b0ff407c87 -0xa8446a5ccecfbe80496e7af6456b364eb64f331016ed422106b8fea893c274c4 -0x4ff0f34677a596f0fce294c5648f523f55d5d226bb86d70e28808d27043c523a -0xa332393a0c386e7d3400912bc525fed25086158bc3a32e78b8f86fc18d12b6e7 -0x450c59e2af9c3079388148a60a359ec9ec590bd6a3f64ed97e6fb95b3521f502 -0xf868e5e6d86d87a5d15d06dd156e01a5a6ff270734caf028cb4e04b9a55371d4 -0x6bbf942e7d9ade5fec55a964f56c78512844ff4f676d60183d4b570ec9b37e1b -0x89b3234ff5ca766678683f9c5fb2dfd1767d370e14163b952660caf8564b4543 -0x85f559af6749ec005cc70b134cd293b5a10a6266b579ed66a37680af2a2e1004 -0x3fbe7f216948bc4760c18b5926e35b6aa672c78b3b364d282c4508c84f40155d -0x103a0afc1bed2d9df6df2ef7b842d45faef208e8680ad4bc17269639d71b5757 -0x0dd85d4e9772745c8bcd046d02ea4528586d7de83cfd057df285b6a5bf23a5f9 -0x078818bcd5f038f579044bf3c63083bd4bae44069f7f487866ba30bd9ce721ee -0xa222008dbcdf06d54de65437ee77b2d60f3202871b6f10f65dd90dd52753bac7 -0x89e7c4d5be456ca24499f429d1bd6cdcce21d7672f714b06471a7770dcb5f21d -0x50db77cefabeb0cff8e35ca9a80ec2d7f4f0c77fa8954c054991e2208911799a -0x597b383fe8b6c746766caa21a0f1d82d629d246042e702385336b05808a28493 -0xb241122c5adc34f089a02705bf9f3bdd741f80b815f6b92da299730efa26fd20 -0x6c553a33e4fb3c304a71f29538dd610d1d18bf5d9dffd3ea55378dde2ca2ab1d -0x772f4ae3c6a0a9ef3b3164cbc805f2feabcc85ccaad4a816caa087ac958199c7 -0xd89155aa2058bfe3aa9271a2186d7eba331d84eb8036374ea222ee93b00354a5 -0x00cc1847ba59cc0250036a9243bdebde672a9356684a87559ca1d23cfb1a43b0 -0xca64dc3b5a1aca47c5963e7a4b9fc19cec4435168e6807d0c9c9799fcaec88e4 -0xab27220fea694c410567da67e3266eeb28cfa02bb898d11570ebf8568e9ca924 -0xb9f9fe56a81825f106dba2df7c14225604eeae48abfe28f95e5247fc2fcd3b88 -0x371b1b8423227dbeadb5c17bb0880af6fa8f395bbf89451b675bda288eab38e0 -0x3b206a34a9b0e3f00053feb3757e91b750ad828a3c9cdd00bd2ca1c537cf3585 -0xf190f0fcf119e1306b2926f14307a7e8ba888129872cc7f78b1034f68be67d18 -0x4c889fff03ae08c051d06064205b37289d3090101fd4ca1d0647f990658ac54b -0xb90b1e002b979df01b7f62167f4056c35656db0a76675740340835276d53cb5c -0x5fe32cee39e4aeb8953386f52c4c4cf3dfbcf9264701bfb70ddd15dad7682dc6 -0x6e4f1f9c13866148c7162c82d25048c135535c9924f4b3065b96bf22a7415757 -0x02fd6bcf464bfe45e9b55b5183210a05ca02eecce7d33f5068ba05bb97eca5b8 -0x73c8d98bd639505001384795c1f5034ee22ff5e0382eab76deb255c4056fbd4b -0x819846d6f4045431da24c555148237c5b67c1dbad65e03ba99a288a9558e1854 -0xbcc4f30261c7c821102289da800d243a51ba19f6714436b3ccf293a33912e8b4 -0x4ab54e780945fb8649a6c1e943572d3ef0a3e14f365583dba36b37410395b8d7 -0x5c40cb38c8afb54a8c0ec56a5736636cf6c75a94dc38c5e41f1b9154856fa2c6 -0xd2477d844acccc312c160722a52829f0de0ea93c6845abb5bee1325189837691 -0x43cdc905e24ee05b2d5df807a895d1a20ceb4062fb44c5ad743bd322b70853cd -0x654a29fe2d20f314e4e1ed99c339b8526a7bfb5d67b956074030cd414dc88d42 -0x905cd9fccce0d8aabf7681338cedab58ce12e98d379abf20f12a10c8c7eb9c49 -0x3a278f6d4264a29230777d0e2b6449ef6836999e66261775915b45ecf5c9fc7f -0xad5ad0ff8e909fea5ba614bd7e62484814c75a4af7683216cf0765fa6afafb62 -0x257cd35c6a0a3fc08a939eb205a1306bc2a224ca9092df82a4201e03d087e9f8 -0xc7c6ac31ca0d17d897734341d4985d20f4017fc5b162f56c956839b15dc0b7d2 -0xdfef54a941f321e35d9886d39c0127bede28812304a93cc51908a555e7ed75aa -0x73fd6d2bb21ab62b87520f5baad296ad41719118beba231c1b388077b328ed7b -0x833749028b8ca9d0c81c0bd774d8f4d697ed16b9bb8eb6c33f6faf721c612c96 -0xb3b01fb5c63d8451fb4faf73217b108a6c8ce84085dca8aa4397365574de15ac -0x4df3b2f6656b72148c549dee1a8cc209e129f386d23e8afeb60e30f935153d0c -0xb866cd1701f7f58302f4706eb8407df49215820f3a84c561a896acf4ecacfe63 -0xb23bc9b8802a8c0b1632d4820a35e4687bb268fec8c4c28541acb1ea0f61cf0e -0xe9d902718b438c7fce9384cc52dd2a466ac10002a6b5fdf90cca1c81208bc1ed -0x011a5d5b2e691a8528521a2b9d64fb4b29bb049d0e442b46c76245bbd3b0c031 -0x96fd17c43d77342f07bf5a458a11c9732d1f9ddec8e7100a125b076812d387d5 -0xd56e7e45976b530e9ae4ac951ba21b2dba0f37d88a66d29fcd11dc57e3014df2 -0x49c7872c644d08dc084506787c5f47fb37da629c1a5aa8e4e5a899e63679afac -0x84f59ed4c3a41feea9881e7d3cdbcc2e58fabd9300d46c97e10b6a31d663ee7f -0x18c2ce8c8cc6db4348bb2c1c5ef8028b69c537490efe537929deaefa580e88e8 -0xb705038671e99b696abe278ff8bc66ec6d54617b6275ea99a46ea430099fdee5 -0x30e3fddfc8aa993aa5988f98d57a37a44d32b0ecadc98c59932ae790650f4055 -0x1e700aeca188f11d727cafdffb5895be4c628c14ecb8d92435d5aacd23d95b4b -0x0e4e6b852ac8bc96afeb710825460fb89c727e9da35a6e0957fe4297b0a650eb -0x9e31ffcae84e52b1dcd937b357efc158340543e5dc09f3aaf4bf13cc30980d39 -0x198f551c4691173fd6822f2e34904166aa4483505958bc154a39ddb99b9dacbd -0xab99f226e3576035ec7c89146d4cede92a16f877f54e983615e976083ac4bb3d -0xe26f6b3aee0f83eda240a4eab9dd3dd7a34a6a0b1027363abbe3378de93bf583 -0xb4f78e62a458459c05301c5e4af4c8dbedb2fde5d8f1af8f94b40bc613d071f2 -0xf63112513bb2e36f59602ad48fa73b0431ec98004137c93f31184843885fd923 -0xa3c4ca36e6fd64e83fd4d064e48ffb7386f8b28d76e3d572bee1d08598dcdebc -0x67823046413069063aaf016a64ca934e13247909ee73be7a859889e4f19583dc -0x48ad6bd6486ca88d788bd36ba9af21d5fed9738ed410dc362950b79cedffafb5 -0x06f5562dd454ee81e7d29cdc4f7740198bf6c92dd8a669223fd75584ef164d51 -0x09226e97eda8959afcbf1a26f3dbcae504c197f6cb4526b557ac06b3b600d6a3 -0xd59b9ec9a91a5a0e18a316b9cf9e271a07bc3a5c10738ef514bf8dab54bf945d -0xd70886cc70f3cb10988b46dd1d08c6258562b4df9eeebf25985dc5456813ff65 -0x708f9d8e32d902ae253905b292b40afb9f13202820e34d7d6dc8e0777bd99448 -0x0c3d884b8988b38a276ca9929b832e013e16782946ba015eacd758a4cebcdd8e -0xe77042b054aad3c54fe4b8bef0ada0c6b798b9f769fa64bf670b39f97e62a9bd -0x4f14b27b2678b9cbc6fb10cc3c505d4e420aedcc0f688220d21d387bd5e9b09a -0xd7d2af8d862c74e762e03460dafb0402934ae410e82c14e62e1c4790d09a8912 -0xdf178d539fa1a7819fbe1b0afdcf157e6f786abc05608645d3a4c6d5d922a25b -0x210c591b3df5a0440f069c573ae68cced3b8a206afa351dbae592a3eb59a67aa -0x0f44bb0539f98c971d31ab8cd5f94686ca084414e50bef9812631cbf906d0a7a -0xc97e548ac14319539c4a0ef713198d9a3408cacf25845c58f0430b9166090777 -0xee539813ddb67c4c7efbcaba75162d3c84c4eee19d35afea2d70a6234eb88087 -0x91ec9a141167da28270d96a24acfe6ff1bc760d08c8abc380b24735ca27d5cd1 -0x4048be96b1d4d9c37c210d85d2cf8cbd0a391a3dc62ced1a79eea9a29ff59364 -0x0242f50fcc7e5af1008ba0c540117f7d988541760ac476ff0a0f9a2016eb23f2 -0xf7511086d11f872112801e877c5705f9254549c02f680938df3e6940fe970b9a -0xc76a2de09f6b98a70ae6911b882dbaaf6f488307dce7437fe306007edcee5a9d -0xfb5f9541a49e4beb774825cda62f9dc28e5ed76c3deaa61a194cd2e543d729f8 -0x1123eebf691a021dc196e190a386deaa5eb0de39e80beef1ea46c839c3c9ea92 -0xd11afb32e56af372a4ab234c02dca73cb6c92e2fb481effd63784a81bc936f80 -0xe42350d711262c4afc23c205cdf22b16b79d31453a6202a8feb7c740834cb233 -0x0d3538d197ffe4131b067b24f6f664021f2a9ffca9a3fc8159bcda24a0ba4b1e -0x01c0b4459053be93998c0b06c1048979a26de620b5640bcaa8469c0a28474d4e -0x7ab0603e7838b54ba6c8a8ea9f65730fef37933ebce45fe46cceeab1725dcc6f -0x79fd2ca7aa856facd37759056ac0f8ff4aa28e851c9e7c2cfe8aee359ad2b738 -0x4595bda7938c3bee73dfdff2e8abe24debed623cc52157759190a285f6ee51c8 -0x533306d2aaafb394d6712dac56b4a8f6c6878a866b610a6642040fefbf276e94 -0xed1835b716d2dd7d574d3b271fcb577cd8998b8ebcfc717aa34a2def4255f90a -0xdcc657c785d35e73b4538a0e92f306187f7d1c77298178ce246811f84bca9cae -0xe3a79da0f81aedbb9f3d5f6ebfea7b5085967995846b823949f7d4b982fc2cad -0x6d3917eed1ca8bd42245b26b693ea0053940d1373da694db232fc63e2ff660eb -0xcdf1e8730f7bd38e8b91080f785ba303b8c1c49f4692ee43547e64d48d96bb01 -0x7a8d1ce474d5d54e2c22e7439c87eff308cf77d49b5aa326f3c32c3089a419e3 -0xcade5ab9650349eb4a0831c12fa35ea2e94ff63e90107e1fba5a39665b39d73c -0x7b912e42249dc7f6f57f2b96ea0cd46b7fc12c83f40f54b5fce8c390edb19283 -0x0cbced857e03a4673b528789ed37f3ea956f1dd79dcd06a24206d395738320cd -0x0815a663ad6e2fde8589e270d8eb089c198a325e6b15ea3008bd7d1e78605eb4 -0xcd85451cf67799eb6f7e2f429194f8110038ddcbad389e40bc9d9803fb4cccf4 -0xcab3eec4eb497aecb9481315f5ad08848ee5983feb851d724a101a409d5ea37f -0xbcd6d5006a085befe8eba030a14815048e9737fc045457c35075b7dc120867cc -0xf6aa1afb30d20fd2abaf298dff1bd24c3d64c4b6471a860dd75479274405698f -0x35b407c719bb84d06d6c4c87561a8eef83b14bbf0121d108785384f28b65929b -0x1035739a8e22550a031b03d02ff08dab33faabfd4dbde2ed542c0a05e19414f6 -0x098ae4173e4425007fa5da7e6707a3ac54f15c851111dd0ddc3bc149269b82dc -0x503424005f724644d86cc774eef58d72f910f0675f7fc3e9791f9728ce5f44c5 -0x590eaba7bccf7cdcaf82f71c182fc481af55e423b2d5d49504a25523a9bd29e6 -0x9ff1fa1a9629c0c4e7b44f60ac70dcb7793fcb167f43f25296bf68a5a0c95e56 -0xffbcb9873a8fc9f2ece9ee1938532003fce2908df34eb518469585e500344d55 -0xc50fb421b19cbb131e9de5231c47444bdaa9eb09f44e9e5029805e4675ff6525 -0x0e7f675af8cf2778a7f775681306b02bc9f295cf761b64742443a1c1d94846fa -0x0b36acd6634038e6e5e9b83c5f37fd5453340e44caafc21ffc604efd97d2ef43 -0x234b1a332ff6cdd6ee9a0cb70543140d8dc587ef852462aa924f4a2d5c93aa6a -0xca13c10f8c1b54979c05f9012c25ae2a1447677de2d700f226cbd27d561477b3 -0xd56541540fc5fe6edcc1b84bc2ff1af6a442c90352c3d0c60f6d6309db97dbed -0xfc730f9088b8c18d30387f07f75a41ad76161edd4667b0e48a4d1b94d0b8dde2 -0x219faedef0ce24f41784e8ee9edca221196b6e23b87daec40df0a9598e3621c9 -0xd737802f0c61a4527e14139f4d2d5de47dc8c66792faaf4549a04ddcd86bc3a7 -0xd0a73beb5d7e75ea87709425650e5b9ca76b4676b88132bf278d6d86eabcc904 -0x525d1391828fff554c27eb611ab2fb2800eb84c0b0cf93aa3380a3c5fd5234ca -0x9e2532aa71171e3319096dcaee529410785377c2ea59946d67f3b150b7952489 -0xc3ba2663552802e26ee2a86d723ff1ff027f34e3fab4e23bca17dc67fd4cc3c5 -0x388a631ed0f23d10f66288d72c956136832f7c8b528a1b794f03d70c1ae2d06d -0xb4c38a2dbff0e445b84dd1431ee4a0309a51ad5e8c3e4f2d9da56deb7f4d8a27 -0xb2f6994e5e85841e72756aca2cb0ca0b671a2208836b27e020144d43defe2b85 -0x64e10d91adae41faca528ce50c90e302d8940265f28490e0decff3f5f23fbd0c -0x852f07e4d88ef86b60391826137f8705ad5f01f97087240835f5d0c2d69b1817 -0xb812bf82f9ab2a03db3d95bb1bd705fcfbaf730928cd351e52c4d0b6f4d0e03f -0xa5117caf8b00eb6415c9abf2b863b4149dfb2ad10e83324d5c01ef69b0037886 -0x17ba023aeb8984b194c043a2f681298c5bc5dec254fa205a9c4b35b50e60b1b4 -0x29f706bec4b0882fcfa943ea4cf263dee2408c7f68ff1bff46fb383c236d3a71 -0xe1fca6ae0e0e3b94a35cd21bc556e388b1996272a115614934d3936165493b61 -0x2ff6af76015de25d249d6f336d8155670c23e0e26dd8866e4330a862aca6e806 -0x45b79854b48dfd673f8b1be9a5b47ef7f21898256859cdd779ebb9ca814084e5 -0x7a4f94e8255619c21734137cd4a132739a29683b3bae723f513422ca656294d8 -0x351eb746a7a9d0864b90b189c76ef5fd43e3fadbc532a5d8614a3868158faa8c -0x922f8866d025a5afd861016c421c89655a1416515d3bd4c8ce11ba82c1739e4b -0x3c2139685cb684c360db8869f3e5fe1f3457e58854e5dcdec19483e841c2af08 -0x332b2760395bca5a051fce4209e3a4ef8f8c50eaa32a99ba193088125b57df8d -0xac6b71f69dd25f2746d7eea0ec21d2b8af6601d138b06aff2362d5cb0a42c3c5 -0x6ff09e79f73200e6180cb5f627a72984a71de7b8e68bf64cf492c427371198e0 -0x3e558a5e1014a55b16c2736d2da9a88eb4a833ae643d4710a45002fce6e6895a -0x3acd75113c6c068b20b5ccf18edcf41e9f3f16211f897b7b2f5607c61a9a8694 -0xb41f5a2eff584c87dd05138630add5121044acb43f139010284cebedce8b4a5d -0x238d3656cd4ea77ff4ec6d451e63f1535aac9f9cef4e2dd741fc29d1ceb18730 -0x87c33bf42b199cd9aa0bdd6e43693a2e8289adf8ac458ffc5616a7ac9fe8fd43 -0x716e2141d908bf865e25e02810a862071271bebd1a47ce2cbd69c24d681e741a -0x711b2efcb9b8795da824349658a4c00acd8aa902ccee414313535e351635b7af -0xc76d126bb4a2144a15e938970cd4d2d427afbbdfe9e7d2cad80717aca6f2a22c -0x78083dfefefcc1e70bc7f52c679272d447dec2464fabbfbc3ad914011e2fcfb8 -0x79699e2b7229799f8b9d293f744a846244f38631789783bef927841eaf6c6984 -0x6c4b09c90514fb9fbd6b3a96e6c5f5e97f4834642603789e66ca549b2fd3aa4e -0x059ce8cf18ccb1aeffe318de4e52f190b9658260c6fb0b5fc007470e9564ce84 -0x59e7a65ca7cee21e25bdd2d26dee3ebc53ec5b3c3a9d53fd5c9a6d1693e5dfe0 -0x339fd85ab9dcae4d40e7f9a982450c5eadec1593f2406dbfc04150a3421bc710 -0x6642a25bea13aace3c26b5bf581a0e461db36ec34d233fd8d74ec3f7d3fc4cb4 -0x27522751d8517d99c13a53e9d572a4dc39587aa8c64ab5dc2741802c2200ccc7 -0x38ca40df07439ba0afbe30fac64f08f8eeed009f534bb0180e92f020304aba10 -0x9f18dcd699456b49a1f758e6dd7b1f48f70834b5231e9580e13520f2518ddb71 -0x86ce17d23fc3a80f442366fe342c7dde1f132507af577efcd3fd4311b61fa9e3 -0x2979c4ad51e4c1202912b4e8ae3b105e35f554ad972798adec0753ddc37b6bfb -0x01c440f469aa156288d9eb7e7964c5d6d964f43f2c6cf1782f17e1336eafa538 -0x49b4d84133d15d54c4e3e0b7200b7340f0391f807af4964eccfa1a4015fb082d -0x4fee99ec943fe769b1e9bb3f51532a02531798fd1ef207799f32b2cb178391f5 -0xfcc7fa4e88816e99cd800cda8d25e4acd0a3737b41f8d1cdb66c952d629ee2ee -0x0fabde70d52b83b13cead5977eaf861b090076e9e87312aa6ca3face6d7b9ae0 -0xea6e32d582ab63bc031db2e685294bbebb8ad10eca769a4b0ef6e566ee76da21 -0x51889721dde9f9bab4114af8ab00e252cde87b904bd16878a038d2542e1a149c -0x82d6db8d75172d1a65b489e1f5bfa433fa395dd15be6ed7a2203ae298d64290a -0x048de2eeeded692e81a3f853750a1c36bcc6b6d627f6b625e3f3babffbf51d21 -0xf4ca49b31e733d8ab4bd460975a12030d21c2e320809a376e252f74145084a34 -0x02d1b2a199d77f06a291fc4d4abf4e486ee6ec6ff60bfecdabde6a79151c5a8a -0x80a88cbd4b681834a3a2eb5566d0dd89498eaff33f7a2518c94dc5a499ac9efc -0x0d61bd786f5552b598232f28d423a0624a06420eafb46a76160fc905b08ecab6 -0x445a73577e0a5cc2b8514c474c23abb1b97743ab441913c76d2a2b047359a83d -0x15b1a09f0073d369db33ff30e490ebb5de99d4a7dfdf30ce640c4b210e69e716 -0x9be17d5b759deacab1b12dae59eb2acf64ca9b4aadbae57f5196604411aff65d -0x8148a30542e4e931233230354c8edeba1986484af9ab368c985be7df57f680da -0xae2e57c6a53547145941b35269adc951202f886a73118fdfa8e612fdd91b5419 -0xc4592d8a5d3e4567efcb9030222f54ff78a11e07b16a708d2ea27fb9b5b0b99a -0x95ded7ab708af9e08b040809c30a4c9ff4b429b6e83688bf17705017a8da3a8d -0xffb0ea28a8789e2cffe67f9746c43ca19b7b80ed0ed4143a86212923d4bb3f53 -0x107792d103463d933712cd514f58c0415505ca527aa22868063f9d1a06cb3641 -0xd55dde00b676c5ee6d32da7214c025e7d8642ad2da725963162e0be1239917eb -0x30c3b51dab4c60253f03e6e00a94e5edd6b2f482320eef8e44ac7f282a761ef5 -0xe8f601b38682d33b75f5f5b8b4dc823ac92b212ba97a50a5b0518f8b248d23e2 -0xa4d3bb424d4aca14b2a5d8748686514f655543c6185ba965afdd7bf0377cf886 -0x080e5fd44e01c14f948f02cf421795ecd97e4caf1de5cec55e54b290d2983567 -0xa765e3ec537307102aa33770080b700df7de652dbd57f69a08d631e70fdcce7e -0x8768c8b1e233c3803a6933022b8f17b6e5ea40157b556dbe6bbba31e53a66bc8 -0x4fff3a9f3613a23975537b1725661adce3607b4b913bf6e291e89c6c3f392213 -0xc5e8a5f0bf1f340508e4f511b89233c7dde76ab56affa6788a37f5242471457a -0x83597d585ccf32ef289208ccf7a1aec5f38c2fdd5c3ae0072b97603bcc42ccd8 -0x291e48cd4d00fa9eeec6d43439fc08ef6f5b986b41aaf388c4f89b7e0e42b3cc -0x8772a8e5db626d9262286a996f0008a84c995dd2241aeaa4dc8fdd96561c65fb -0x01bffe0f3cc7f59f193a691b11531dd400e72d16987488afffa9a20b80641e08 -0x4c95889303a56db5385379375f20f47ca0e5474a9a63dbc89a8010d435549358 -0xec273295042b81c350bdac100aca3d5c29f7880f348f6d2b3642688f9cf9714e -0x64f780fd90e4f909571585ef3ada98dcfd3cf858ef930aab3432d1d12b924bca -0xf823ead745828fd26a9d92c9a63b5e1d460ca80ddd5a4fe0d35fa5338b6f52ef -0xad8bb4574d61022f0319f2cb6e29968cd82326457eb4879838e792fe47c9e5d4 -0x7f55eaada86a2427b1a6c39796289b2be3dc37e7d59962f8f46d24ca16b1fa78 -0xf8e471537a1c4cb6b231934873b9ea751618c37d5a9276e469d612cbd8348e19 -0x1f7fc2ad226c5f7045ecc5ca10b5b04f8b546c3f32e1c7ed04eb070007cbda7c -0xba18804e6667c70eba10dacf9bb1bdcb312cb867306647988136b4cf2612b886 -0xedfe64186c5bff1b2aaea1a2f2db04bba4b4bb6ada46cabbcfb970d41c81d29c -0xe66e7185b06d95a925f3e8efb85701e40ea346ef6b6a636be7489037514c2509 -0x93ca9416270ed5a25e2cf5d366c32ea5b7328d947b3be6f15f271b8902973700 -0xc4d71776273148ce1a6dba7388632acdb53a13f258560b5a5329eb06e1dabbac -0xf2a3d9b333065f25806e0229c18475e05a730c2b381c828367610a3099058503 -0x500401b1d3ae70c7ad1ef0d9dbeae65d03c0c4ed6c25ea27188c05214622ebf6 -0xd50fed2c49f64fb75b94b8cdd2a42b34e41a634a0cac6ba3219c40b5c40f1086 -0x8b79508499b5bb296905d8af0cd402e96b394a0e4be81a738529610ea80b1daf -0xc73501bc9a63bc4ff923074438f3ab8ba19a72105df907de10704aecbe024735 -0x70a2a38fb8c27c58991b4ba15053dab6a6e88e1781c2833e2ed673f67ad8d0c9 -0x6e9883c9a6f8cb55c3a824df8c9b9653a6c745e8b5f5c94ac0d41bb3ba4faf12 -0x5f54d9101464f9fc3a7a041dbab564c196fffc8564383f3495dde6ab9a5a1343 -0x215d5e93a007036d850ecdb5b5e85f82701c965510f8498b70eb422d4f832674 -0x45ebc65e51c039312ca64c2ce03b65c99a454fcb46f6b9f776c11b64ed6680d5 -0x2900ac209e78e45f0a54ec87239d2a438acdfbf14ea28f4ef0c97c46655e3f5d -0xa21218d9afd6f254481dc3e64fbfae1f683baf2e9b7f544f05141c46bff9ce36 -0x78b759184b28a67d163dc11e566cf75e60d1aa6951178c8ef89859cf49cea9e6 -0x916f457d5f5f9afd79adacc03859ce23a33aa8554395388c05c738932a10fbc8 -0xedd1e10c02f1a73e8f6999d7d084a2121ee05d3fb253b027bbc7d077a4ddd8d8 -0x15163496a936814a117afb7bdade2849e46186c0de8ec880d790c401465100b6 -0xb887446339d42914778220bd043404aa0800cf0854c24b44b9aa04b2916fbaf8 -0x4a6723e385d836927210671ef365f1218dd581e6b25972d26f8038dd87dcdf6c -0xf3482526687ca44f355e10bcb83c8097d74a0be4a75f3c529ee22aa882774f04 -0x15ae35262e2631b76a8b7c144fb9b32d25c1b34e8a26f3242fab8202a0a949b7 -0x359f3dfcf3fc59d905565d8bea3af30320b9ab60a1d0fd0e75a82b669c9da5f3 -0xf6d6b3fd2664e7518b7baa869313c9b5a4d62dc48fca376066e6e51945cd6cf5 -0x1ebd4f14a49295ef115791cdf6c3e1458bfac4123b8a323205355ae0bfef0dbc -0xd9462cf490183e94f5ca83f1085ebf560667a538977ddf51361cffb61d9e08aa -0x21837847612e4de225c2a0f2a2a475d7f699cf108adbe3672fa630c6db1f2609 -0x02d1793e2055f041af8856d5dd5456442d755a5a8ee97a4e3311b19ad7c75f5a -0xc450d69a9c2e182a1b0267390c895493c92d96ab8b16c962e9790ca2d4daf650 -0x3f75776f89785826695bbac9dd78fd42cf7091159f963d00eedca7af36a296d2 -0x072517a10eb8b35fc286ac1497e5940df256fa43b554ce892b93a95b5f7dbfb7 -0x81bac5e53caf50bcf71e57eb4af32edf60aa440ec2167740df3747e4e1382be2 -0x8b8ae7c4327afe71dcd8a1dfd0366053a8231f73782a04782902775628b5486c -0xe47401fb51f747e44271a7a469bab49cf00d93bb5b4843b65d100348931aa67d -0x93f46bf043e19e121b2bf8e6c286a4d010b2ab777d19fee7929fb62df7b77265 -0x55e2b9b2d03ae8224a6f53ae244f363330b3c90a34fcae27d1fe54b030b4fe11 -0xfa4fe3d9e73bc799981057d82720d57ce455d39c6a78ff5e8f74c2648740239e -0x2b08e69ab0099ba7f0dd26f477823d2040f1d4ebf22accfdf8fe585619540215 -0x02123190e54288e63afde84225597a6d12bc1ef1aa2429040b58f202e96a03d3 -0x8234e62f9325185dbecc51dc3885e82ab39692e263100dc1dd870028d25df9d8 -0x784d778e994bacb1d59e5f2572e0f2782621edfec453122d6391a054a910f929 -0x737a078666c7a9ed3d902fd9697ce73b809a85c6bf182a07cf2017b241d43a0d -0x500f782b306c86ae1586cbe8d5bb0640940620cf4282abd3c1b51d94555e70d1 -0x751e1c9d317807aea01783078b6d2021bbf9007cfbdee53b40d7ef603fee40d0 -0xda44c1fcb946bb2cc0c5871b3652fa07b3bafac94e282a785c723e7dc5c4a72e -0xeb7181d546779e96e6e4aa2bcad9675c23ec2b08aafeb4901b887f3cb8e0831e -0x766980011079b99eb8ff0915b184ed057949d39ef75b20c3cbca73cad538cb58 -0xf54f47218041f9d189ccec6e98d54aca78760b6c4fc410fdc4bb60123be11046 -0xcaa765282ca769cc12d002311dfa4dfcb0bc72a168b4f5732dfa00158877bed3 -0xa90de4d515b432430016485b9fbb8344508650a51d60e78749ba50f79e535cb7 -0x878302c9a93d5dc4f9215ab0f6dde739faf77746f79318dd41ff9c0ad68cf638 -0xf32b81b2f42a84db41272c54c29c50fee03750f6046a944a885ec8a8d5353847 -0x9af625ed62a111cc788638e49064c48dc7e39de7c16b287e89245d99f7a739a3 -0x118cc594367c12e0dc58787ea17c0dab94839ab689a535ba848684df26c70f24 -0x66e1cfe734130d2c17fc9d1036f840745e2e9d0d2728eae0e01065ab24496e66 -0x8bfeb928a20e4f5949f15b98d44479f901fe179f871aebc6a04f84482f41df91 -0x8747bec480533c6eb5f978c94e8d5cb4f717c2a572599e96dee67cac59d4487a -0x57e9bd12fb20d4573a1973e8984ea8a630ffa64f802021ffbbff483401078243 -0xfd13a44777ff613c20dea576f69ef5aa6d5c4b8bdba08eaf7824fddd661bab95 -0xe5630e861286657d9b54221b67cd67649bdaa66441e5c5da5175b3b02fb194dd -0xdd33293b89aa822eaabf9a5247116c016023ee80a8edc020d73635cafab34254 -0xf590192ef47dfbd573d9da7800ede4649d0f3fc6ed5ecf793ebb9164eed888f9 -0x40b2fa533f6cf318c4ebf20db7e1bcc7752f2e9542db5bb93934d36fa0721e5b -0x67c3a5423852f10ccc9fde5e48dc49e48399c1060e943986fe896d310630d807 -0xabd9c2b80fbcbd9ebc3444f02472c4a6951917405baee91f771dc211b0be1c8e -0x99b27497db2b3c551607fb0d9e6e78b3696337152400cc35fd908bd90d605737 -0x4ba2d3aed99a19219bf12c7507e795fe2c621a610844356ce69bfe5793a20fea -0x40c19ce349dd30aa01381108803bf9c14cea2fbc8a4830f4fc7f8c0beec7d22b -0xcda0dcd877a45f697ac3eb86677bfd2e60dfd54447df2025266690fdfd701f8d -0x8097cbab3cfa25c35af9acc67fdefd88ba8f38d35db3ac5eb624af6f7bdc1b4f -0xdb619334bd66646510e6d3cbc7fb2fb00dce03946276391403dc72cc5489115c -0xb3af4a99f6280eeab83bf1a895e40bf89a569163ae333819b32967c5397b229c -0xb5b81373896c6f592a2e667c0e3a0839e7d39f526ee906c7599ec801fd61d8db -0x5931a2f9c881d78634ac37a57b089472b710c67d9ef51d385443590a5e7b3b64 -0x7f1a447386688c1a38de44efb83e92595a3db4e8b0958993cedef97ca98b1ede -0xadc40bfc369c97280e1822368416c198e0ca9f3f590d464578016f06ac3057a6 -0x2cef1127af39a7f6684cd059c3826f4c0e90992ef045985c0ffeb76a37ceb8ad -0xe81f393086f8123a00bd88305e0e9c018ceb1d91d960954f6fa55f81c7f2915b -0x985c86e9b12c8766ce83833505f57a9b42bd90aac1ac3dada3eef883c13b99c0 -0x8b351436512067c7f8efaedda11cf070083d631874bbfd61eb3a144622e6e823 -0xd7d2fa509ecb1cac7df32b54cbbf6dc594611fe9155586f61b13e6c51137ee73 -0xa37c6a6be3e951a6db35ba1576c7fa382dca0f156d902fcda9f12aebd5b93352 -0x9fc62fa85e8a8eb1377eac7a79fac73f1c36279d0151271971d51e6876f4bee0 -0x3f5b8894e2e6c036470ef0806728ab859cae402041cdbba43a110d8706fa3c8d -0x8a136e02f8f937d5c803be7995bcf9f02a8bc717c2553305dd8253dff6aaeaea -0xf55678dd64f54d4c15bcfc06ce8b8310e3638c5eb6067b61070c94b571a914e5 -0x0367efcde181612b4f7aa1942f042649c8a615901441db3357f6c2e2bd9b1e69 -0xb6a759d749d0cc0bf99b7686a79d27769b91e0bb005f95c41f17ed383edda655 -0x5413714201dc76106451f71788320d5212249e1b40631446806843b1284374f5 -0x84d27d0a052e898d295bf2f1fad42e34cb749ae74d1cd74f74fdbd207f7c875e -0xbd8ebcf90c2b0fe51978cc47c639ff223982c526a6fe538bb792fd24e4ea6fb6 -0x6db2cdaa71f7333312794cbacd8e408edb1c6c87bcbb8508a3c96a6c75b58ea3 -0xf39c297a78a0aad746be790ad758d90494628be234b27824e1be7d6f2f4f2905 -0xcc66652d17c6ed935161cc7d19edc1855bc3a4ee3c95bc36fdddeadb24b8ff4b -0x0b1a93f808593bd5a35bae7246b3df05382896b04bf84e2833b0ce984da5f2f8 -0x41e82e0b29fb100e7406811d80ecbcb8527244a991259117094669d10d1b464d -0xb2fe139855c30b8879a9c8eb695e7037531f1ec27271f50db358108b05057dca -0x8981c5e9ca606de2e38d8c394fbe54b46c9bb935f4159cbcab9241a879a53c4b -0xd4537bb788d3400a7bb4d9bac9143e4c8d2b8722d9b94f822c4d64a7b3ef9609 -0x02dbd31ae2c12dfc3c699a1284a907da7706a8ff9934778a20e45f50d06aacff -0x34ed03c7992280c4788ce08b2ba13172eb60e2cb65335b5567ca8789cff84504 -0x7b9b81cfd5dde9b0a5fcbfc5b59f609871e07784f7fc690efe9a73abe079dd8d -0x398cdac60b4b0bace13a265211806e2a27bb4842ecb73062b8f8f69f2ba2eb1f -0x60a113e48223768a5883e68cb112823a23916f476ec970dda342dfe940f8d353 -0x062f86d3f949e1c56c1d79420fd75789b175eadb9b72b841148ec786dbd432cc -0x575c3ba86cb34d18d9fded0376189fa10744bb0d1c187d4e32abc98a80fe4213 -0xeb7e50ad2f014790f872bc4a4c3358697d1fbd08057c53dfedd12e7314481cb3 -0x70309ca995fc29e33c76784d942f8f1450ba60985795e5bbde3cb00617bfa5b9 -0x245b03be647117eddd178576ae0ad70ea30983704fa24b8e406091560c9d55d8 -0x4ca2ed51c6900da6d7743e871a0b81e14086a347a237ac85b37b4a8597f4f8dd -0x43f120c42989d34e15fcadb708e9c980174c8c6382cd8fd76dd90300ea4e7f8b -0xbd3eed43feec538a7686808731bd529d3cd355d94c434b5fc19974f45f692703 -0x2a18e11724bc878e50c093a16933b33cd05e0eba460596c7c4e11a0b9b946919 -0x4735b0918bfc66311e3fc637628b02acc2a59d062a763ef56272257df573d451 -0x08e51b2ca8546f605e329a6558cdcca9b727972bd93a92e5020f01cd3541dcf6 -0x1221fa31ce5b747d56f54bb614fc0d5371798455835b43557458832a6be39d7c -0x2070bc10181ef4255bb8676364af5acab5e7c546799e6e1926cf49b9cb6aea0a -0x287666330c0be152871efe3c61c9419f37973d73bf83cea9c66600fa885a1f96 -0x40ce31d6f228fa220bcd6b3a2454e9fa473a26fcfebc3daa031c128de7d8ff6b -0x12316ce2916f27e8216440f850b4424408e980935ccbb36dee5377d7e0e990f2 -0x5a4f504db5e662ca57acf3513f93fd7b8cb446333e510082b0213af28af864e1 -0x7b758c16f2eab50761ebf7537cb9cc4043d595e9cd9d2b69e147f9ffa768dd84 -0xcd9a2a92367c1925769a734531ad55d11867d41e12220b57c9a80cfc91ae6871 -0xe3895a7ae2f0e3ec595ff29303cb93c123a0db8573e8423621291ff6073297c2 -0xb80b1d09efe8ae90a00ab46682e1a71478a2afc8a5d3fb92431cc03d9234f752 -0x70c786d7d090ac8c438a008db68d37f264898b244a93ad08805bae583ba4d329 -0x2ddc398293b10650c8efa7906e5b5aea0b33d219f69b1e840ffd52164c3624f5 -0x9abc34a1ded18813440c7afd17784a2317216aa8aefecd4d4dbc1f930fa95f25 -0xb10287fd2a589482e3cab0be913cbc98dcbb9fa34e348f7e684fc393e9e20138 -0xf58037f92d780c79832ab011a79dc535e2a8140a251eefdadc2269ff98464d98 -0xa5b65629ce3343338aca40effc70203ca3f17d853682cccdf15a8bfb5efe627c -0x9dabfbdc19f562a2428b650869031c2b7e52b80cdfe0a289c8dafbb2e3baeda9 -0x163796a032f052ce329ecd59d20a21cf0a58a218725977b8a4a9afc275d5d4d4 -0x5f57fd73cb9c8b1b9c78d11d490100c217f049417c5be423238765d5adb0deca -0x4d9cccc79757f2eb933bd748797c83073e85edd1078c9e3cc40ac677330ad98b -0x30a5e626ad1fa0341a86232d263fe49f309e17298b2ea2342f5f05abe563f771 -0x720c33b57ef8d14647df592052d30741ca588131275c31cb2698a9a907ebcde5 -0xbc1e1d175bc110e805a734384ddf1f3fa8ea91cb2208c248243712b79fac01df -0x3be96e2213010fb392e87470a9f646bd82d75512c68915cc54b9ba3d6522ced6 -0xbd2f86b9586bade5dc69549319ea7e17aed456b3dffa24ff5dffa1d550cd497e -0x5b5ea2874e7a91cd099a5a7b630ada38eed326ca44a58e6856eb807a5eb1ccdb -0xcb6be67a38fac6cc42663b7196e5252c897ea04b707baec66204cb8286f91421 -0x0e7bf6f65d3602d0def26e561499e7bfb62c49dbc37b671b60f18ad59d8b77e4 -0x7b81717fb4ee14c384079d539a37a62c596978e0fba5c6c536b70cea2df0d3a4 -0x16988c9abe7092fec50f7af98cecb3daa8a0b71252576ae763e678e1a2b0949d -0xb37338ed894fd837b097b40f143119b094bfc55047a2455863e2e0a802d553d8 -0x528f3005d43e116f2cedab58d7e0347c9ec7f86db302eb8df6bcadc06e915c70 -0xf5b47347c3b20185ce9906fb08ad459f0b96e103cfc67e3a36097df76647fbfa -0xb3b5bcf8fde5f6965199a7bb9084fffbb58180a0e160dce9fc34473c32a34a74 -0x25431d94f1312fefd22dcf42e3b70a3aabc8cd62b66849b606aa7dcf413b39a3 -0xc585f9835a0f7b264e02a370c28166dfde096e0a4eaeab8ba00e8809d1598c3e -0xb51092458b598b556ff93ce0684208f843446cf1b9b506f97d6b78e2c5492eee -0x790435065b463cd6ababeff12fd0ab1762c65771da26d27a6fe0cba7d0a0dbc0 -0x9044d730095518ee332048033ee0560324e0d1475a5ddb4ff395d5c08b116b02 -0x0a6656fb132dc45fdf950ffc55a2385853d16463072a36767084c370798eafe3 -0x717ef1ff1908f40fd63f4ac35bc43314ef5734dd45a22a4b8d3afea0e878bb36 -0x3e5c63b7def435d594c01bbea009fd4a3fc94d408f2d76481070a6150b5879a1 -0x8057c934d63a443886f0c5312a8814bd6741e27fd369009aee40094ded3c40db -0x16be38789467a9ab7529731e9633010b8657e80667ad2cc9659110a693152bff -0x0474e94ccb7916cd6871fe08478444613b2066c7d6279b07240c89320290e2c4 -0x58e278f59ac870aaab35a322ef3d5d69de0ed3dbbe566abda3ce9f3bbcfa05b3 -0x3fb2a359a0afe8ed2bb0a5f5784d816d9f1469bc77d5c0407fdca8c925b511a2 -0x95cd79dd8d96937b3295c8836156e3f34e12f0bb6b68a907adb925157ddb22e1 -0x7b96843dbf93cf01363b2b5b3bc2fc3367392f9b6410f3b6d83e27c6bb866814 -0x2452e35d4ea5db1a6ad79e418d1877eed299ba45d6a0900917e8ee715248a3ca -0x1284c97bd44e7db4bc98fe988400e2a1b60edc30ee55da253c5c1a61a238b4cd -0xfb11967cffdf608a5f9a1e4910e97d01af9c52c2a40a24062cad3d0c89c382c3 -0x5a674f55f2d2fe9001aafd2d8ce80f568e8d2abbe39f182d6f3bdb50fb42d422 -0x383c2e65b3bf18c8a22123eb781a369e95f96f11174f959c6ea8d225b4906233 -0xb31f4c6bf16d8d653a42b195447f14afb3b84953723ffc87cdb59577b6f07467 -0xb610b8a925a5a67bddf1ccb3d964244f542e2c35fcb051697511b14c71de481a -0x82eebc3a52e0aa268a793fc108df925c4d4f2965c47be670fdf2a9a53111bccd -0xe6b858f910b219a654b928614d5e66ea16ae7bdc9c40895a906252f425757ea5 -0x6d8f5baa0a078433bda32ce6361894258238e54ad98d4b55d472569aaac5a02b -0x65e2c92096fff1a9a92053b8a3d3eb716abb6167c462feff9456ddbb68570438 -0x89f5558294f802bd6a24a24f8f742d15d71445a98a64428d4fef17e7fe91cac1 -0xf062b8871d3c31a2a31e30a77eef45087f347b9c60d38d478a78450daf497e0e -0x21d8ce8742dce5351619c10cdbb12b38d14955349122b9d049adc1c822833b47 -0x4ab6e034fab14b638fa4f16af5ee67001a584159f43d173acc9c7be6f5f45a46 -0x67b4090bcbf7025a8960a06e9e738adff8b467602d1d80cc76320b3e2731770a -0xd6f7adf960d19fa79b3f1235c0328cef9721e1a419d1f729b90446893927b0af -0x15e54792b9edbdc0080efbd57a7a4620c7a6eec282923abcf559f019388eed8e -0x04027e697582b2047ac196382ca67d76dd1bbe29324d6ea55cd51d6053f3de4e -0x218baeeda1f400d87ddf9928ff93c1102eb2dbbe905f090b4439705a4894b0d3 -0xc82d130f7d5632e92195f4f35caa0eb8448c060086777218cfa9c7ad7c941b3d -0x9525171b158a1f4fcb829de3464f0ba99dc23630a8c5ef076fb899ad811f4ce0 -0x6996153825d42079a82490785f4eb0c367ed054351288952fe9e87f01b738fa2 -0x0eaad657ed92954527276e6ba7ed0cfcffb47ad4d657d75c3d69f04bec57eb1c -0x6859899f865ce8dba8a9a6cf90b9a1f2e836ab9a6f2d8d8486627981c99012a8 -0x23414d71bbb4829254518421987050d5fefcb8880eb58371498e6896ec9ef4a3 -0x22ef0a2fe93df02efba7ab93e47761d7ce558204c007c501c23fc68c37a82731 -0xcdd3208a5af758eb6fd644dd1d6e4f8b5705da26a456e7421e1c8caf0371c327 -0xbe61b3f25cecf6395ca6f319ff1d4b5b7c0552fad68c58bf8d500187d0dc4a10 -0x4b2219800bd434622c694c5fe7b4320081fb3e5120e250397bdbd67a0dc67671 -0x123535e4fbf530810814b0590d63e42efc0d3ca1678e5ddc7f60207b47c4335e -0x12b25b1c81b42523c7328d423b3b4b0c4c45f37aa72c2f60c19f6ab210aee738 -0x9b898352884325894a8d0058acca1dc468568b9e85ff9644903a7211ea5bbc4a -0x66598dc005f1b5b5b7b989c7f82f2ecaaf0525b2569a1d8300da8ebbc7b2da77 -0x7a00446ff4ed708ad1903b276dc74ec897473c72e83cb17d903b1597c2e31d84 -0xc8c8a55b5324e2343f86b26d94a8a6f67561d8d0a10494c5220e986078dad3c6 -0xf49729df6cf39537996aab52fd2d69dd82ee308670a19e78dd8dee7028abf9cc -0x8e15fdbbc4ede63230a12f1ce748d9f4e0e0c824825f59d9dfb7cc79be3c055b -0x95ca4406842b67d5318099805e680b93227242af8e13330cdd96a7c0d926fb01 -0xe5b74e31ba1de1369861c0ac14de624d5a9b776ede2fd0cde68610abc22c1628 -0x5c201e1095185f07f8136cf25235f4ae5e149d0fb5c40c4fe573a9c218055f52 -0x8bea8b5da84f5953e98ca266994b645e353e50ff2f95c535096233a9771fdb77 -0xc11129a3c61e146e04bcfb85f314ad20681f81ddb6b7bf4abea8120da62cbcfa -0xe8246f04fbf19d25b59ffa57e98b1ccaafe52ce4a4504ef3eb8a052e6a0818f0 -0xa0e0fff64d053f9484e39a7fd11bdfe3aeade6a4407247ffc70ddd2352b65705 -0x85f0516090eb63b2e65d13016fa67baa3e2a3c48653b0c5de7ddc7b94f8ca21a -0x286fb3938b94b2222f17111038da674aa3c79c4d4605be51a4de6e427c370106 -0x60327d73cc5a3ea84404a3bf554eb4c610c2d4b82dea830a97325595b5c19996 -0xa7eff4e8edee4ba13b71aa932f92a66a6425da9d4e49b67bd5dc1f84beae2baa -0x6c4e5fd3f2af472c3ae1533aaa5b8d66b055ae82290330a73df3e50104aecd67 -0xe553d709cc9844bc15b73cf10fa1b5f1e9062abfad41eed7776d88ae4e4fdbda -0x3f3b0408572607b36c12a99fa25e7699304ab768878b2006250d7f44947f76f0 -0xb59498125317d74b848dc3474551f17f7791ff288175ebb5ae0b750ddbcd5e5d -0xa9da1d9497f592c2b6c21a9ec22c9d805afeee8eabc6a5dd4585fe84e1c6b42b -0xfd38782eb3c5cdde7a332302db16c68ae00f9935de746a56b62bedd72817ad7e -0x0d1c0f47af1d0956c8c46e8dc038c233e01a38e795343b0e535a198120a2115e -0xddba067b03f9c318f47dd1eb4e65064f42b2d4cba3ddb4ec084540396f4cc8b4 -0x2e6e262483e1e59f49e71d812c6e1219251c9d701d5198be498c259b7633f95b -0x4a92ccaf34c6e1f28e1776d9310cdf1bf96572930d832edf8b9d4ff49456914d -0xd36be8c560f6888f6be0c8c024c42c6202db6948f7484732cf86e7fb7bbbb81f -0x29c1874848ec46dc83ea46ba39bb92b9a9e8929a8cd527454f1618575417ef57 -0x3f21bfd453dd7f70a691171d48671fb7b23b9b32d7d713eb8e73dee340898c52 -0xa9122ad794dac222499ef32308e16baf5190c93a17abde36e450767aef6fcb07 -0x6914af3afbf90fd66eefa0c92d53e8c81b1a9324926cab41e69dc8cac4d793a4 -0x785df0d9391c04d3e17c6c564d28e46a3c0c3eaf41d110d7e5d8ff2494e7955a -0x8f42ed7407cbfec71eeddf78ff542a241084b3d82dcb75ee75c5d6dfa526c772 -0xbb0781b10d9a4c084f700d00c27b6b65b004e02cf1ec5ffe815759956db020a6 -0x0cfa436d866139a0be8b48b1040309b979a8ac1d475b26f6497aa51c9a2ca7b9 -0x9d90c2b2d0eeae0f502d71b38b08345e68ca5dd30cc8eb488c0b8e0bb61a9bc0 -0x255181686ec33553343baa796d67d9a74ca5eab12971b17b7977e2e5d95f2b47 -0x9833644f11b4dd5addbe61faf5630760375c8859493ba7c8a39fc2ceb817abe5 -0x10fc38ecff513705a40c21309421bb3f9d34c86e08a0b44a4bf28b6ee6203c60 -0x4f89be799b7c91abfdb3595570fa1d535ec27786fb9deec24cce6c1534677a1e -0x2f9f01bf49d0cc290593d789b20f95e5615695d38b3510d5d77ab1e557a63503 -0x4c8717997e412998b4e62dd7ce7bb18616682540bb51eb7e1204bc69b1c74614 -0x794deece15b6b8659ccd77ee62111aad1e5af5e5cbbb8edcb67b05439807721a -0x3ffd6d12cbdbac78bfc69d52f0a15f9a9d7288358a5b94e26a7f701fb781c2ac -0x55a41793172e7bae3f72c54fe3498390c3d14dd1b1cbe7fe4a680b7480c10618 -0x8ebfbdbfae3f9e5b637f2e4b66013d7fda1ef265d3d077fbebf0e9f748a628b9 -0xc95d045cb056947adf5a0f19dca777ed9b7b55d29ddffa4785ee70a69e8ced13 -0x8721c3a0f13dd186eef16e0d3baf5369b52dbb44d1b17708d1a3b1766745cb16 -0x939b3ec8303b9a880b88495b11103bc35786b95208fde9a80dc1811090e5a986 -0x19dc2e3c8ecf79f554929173bad78fc11d419741cec17c45cfddcf517f78e687 -0x616060165d261adc0fbb85c02e1a4e4ac880c1bbfa9f5d28b2fb1d45f1a2691d -0x4df84fb5a4edd8f7c6803710a202fc2745a8f749fbe5792fb9a1cfdf28615f80 -0xb48e0543fab673f2db32806ff4fb09318f0783402c1410363059eeb7f5217dc7 -0x8fc6056e30c1adbe9d62fd7ea4086448c4bca58ad33988426679780e2ade48c9 -0x5b48da5d0f7a4dd4e2264fc20b63889e3a21b20e7ae3b2368551e107d4c81056 -0xbe19cddc5bdf55414ea7a083330dd42f7b021f1e1b9873c5a664f80530322309 -0x81735d24a273328fab9403a698e5ddcf9e7b555204887e20082d39326fbfe12d -0x49aad8b2884e7382cf97fde65dee5e07bac0698590d585b90dd6e0a9033f04c1 -0xaddb6bfbe2f22beb08768f708d95437a166b07fdca73d46590e55dac9200a7a8 -0x1424f1b77eb10c4be1bbf4c9c89c5a34a9ffa434746011a23ea66aa039c2b130 -0x439adc600cc459b6ac79140d10fcb1770c8814d0cad1a792a2564e044b8b94cd -0xd5edf1f77494f0604d1c769209abd11b41c1755a0b7be6a805de25085acba874 -0xfc435a8c4347cb345e83a09f90f107635c069ed68e1f4e85c80701591f2be284 -0xa6206dbde0b2efac6d4c0c5f291deafe5061dcf73c5c44442ff2dfd41210dab2 -0x63cacb8b033832d1d21c70b5bb83cf4b916268849938ffe89ca109147ae2ebb5 -0xdedc738750201c21919e7e24e4e8debaba4a63d9459bc8e30276c45171f04714 -0xb5c65d3251fa439689ee480561dcbdb505517c9b86b8171856526954d0c0ba26 -0x62a4d28a3191732815cf0b337914dd3761b927833ae32f95a1c51f88c2f99c76 -0xb4fbf46816fe50f28a7f3c9297dae5c594cbe74e1291156957adcb39a3006c37 -0x9aa59ce920d755466316747970da45ab9bbe683ca61a214b4585ea6583925166 -0x68ed8751bb712a469a13a9fb5d28a405dc9783f3994b57179ebd89867780c487 -0xc547ce1ec57ccd64f21fc296c91184805ca28294c8c2250bb813eb00991c1a56 -0xcc5cfb375a11a281efaabf4586e203d36a76db70be601b1aafa2a5474eff53cf -0x0fddfc0c4061f15f03df54eb69f00c1edac3794aeb8279a957d41b74508a947d -0xee3ec1cd8be3f8057df88556ead1a5a06bec14c96071ad45d6266a008db3df6f -0x1734270f4ed70e9c6d3a05b1a70ad95386f3d371ec1da35d737fd4bb47d6a446 -0xb0c4a0df66e70cc754ffc303a569289497e27eb5b3b970ccfa9fb975e1bcd454 -0xdc8229e22b6af75df19b5bfd8a1248e10aaa6ce298a2bb8e2552de913c90aef0 -0xfd13bf96268841ac92cadc3911448bffd0222a6bf033dda12ba716cbb437e4d5 -0xc526c5c802a25737c62e58cc9b8f1729bc91b4905898f14894a80c82c6f00257 -0x5a31313013269e9f3af815f7e6fb95a8607c993d58a4cff7fbcfd2c1ee0d4f0c -0x752cc9617cfe3b030cddb764d98e29556ba89111270b70568d84579acdc780b1 -0x1250294bd24c3da687faf9af7e3f7e1a0a3d17511eafef8a53d74fe0feecdbeb -0x9570254a0b33e00ebb4d8d641481c176e1855156101d9506a841083f933cbf61 -0x5fc23254f5b4520b4c8ec04281498c9a8383a95fea7d8ceed7d532657a0e1ea5 -0x3d1b4c5a807cbea64020ba662e7f0a14cdadfac62a597cc57ccf7d4615aa6ce2 -0xa4111f53211d7d3b6e857036799ca90240ed7c6be04e8bb1618a69389080bd90 -0x6dd80210e087f4622fa8ee7d70d8427f5d8bce2244b994cf9b09d592d8db29a1 -0x7a9e70499e64675ebc72e024195d946146cecffdb55f116b11917eaffdac77d9 -0x91b170f47b8e0b3cd8bbeb7d6d70ac6c8bc1a9274f1800681d0aefe222385b9d -0x0ef5163d17ab3218133fc13791c9ae927c9e6a35e70e2920b61a78add8dc201b -0x744a57ca6d210509fc86f79874d46e3e6336431c0084ee01d25a04fb20d621b0 -0xc4f5bbda1fc3fcdcd4fada1e8b833c24b8bcb4311441a23fb7b72e873b639d47 -0xd618a3a3aea333f3203207ab421053d93314b30862a57fc8a709c640a72a1f8e -0x570f2452622c128de485d13a80bc119c82cfe79487cc224c28eb1d35e2c98ef7 -0x3c49a85c2f3594a17f95479f4ccd80145ff09916efe556d9b167141333045f97 -0x72965ba35372f6d1a93b9c6ec9a367dd685d814ee9c76b2084ec2fce1b8fccad -0xe81b5e08d43c4c6a867108e8959cf77ca535a4cf68490b7f762dfaf6f35fac71 -0xd6b387ab8bea638feeab56ae86d30b0fa2688537df0173e246237cba7599ae03 -0xbcd5a5b3e121bf62017ceda4547dfa515ed6f7779f42208a1d675b6db26dd1aa -0xa457dd5b5c8fb2af1f636b8ada020e616460109a9f31e1cc7dedf383d19507ef -0x26f722545bf2cc95b87250faae1b606a1a16f7dd2f165375c584b91592332ba1 -0x5a71a0aa3155126033453232f6dd0836b718e437ca366511df8b8c7d0413414a -0x6d8349bee58c4341e05bd2bc55c281bd411a74d7c372d92e8725d99188ed5836 -0x56a6decee0c2f882ed608a6caa223a0fdebaeaaaaa65a3ccbb6ccaa48ff0e9c7 -0x8ccd43dccf3bcdbeb4c3918d88db63d1557ff5aa67c742c49bc4eeeb7216c9f8 -0x281898c4a1bb87ef22b00faa7475f1c565e6335278ce70ac7af4b75e14a52071 -0xb0a70a24e3fb86f712ca48f65fe7440e577fc6e4fcffd808bf5ed65fabe89453 -0x61d3b13de683fcef620f3c4d54e708f9857cc7f0279703b4fd74814913356d1a -0xbda3dd3af0ae16f89da4760a3a309777e4c5938e30b171ecd95d6a2ab9bfd346 -0x212f2dafc46bfe3a99394c6616adec44aea8a623148f37f313bbf8288226f79d -0xe69e155ba15d1ea837023fb242e67a8fd4a10b2e517f5ea6ae632df32711967a -0xb779e125b62fec3dc754c2f9b8643656ce32ca8d563164bba5aeab626b917402 -0x6e1eaaf3c6fe44b55fc7444cfd7c3453210374f285afc510018f81ab6e360013 -0x2d90879df880b30690935a74420a78509c6e38a8819ab62e7fd5c32759eecc20 -0x5b2c9c24e7497ac8795613f312f0dddfafe8d7fe62420db9a9ac96184cbec8ea -0xedde4099de504c02d936a5591ee7d76cbd11db6100d03fbede3afb942e9d81d9 -0xe07040471b57731a853e1d096205470611fc6754b94757188924f5ceeaddb13d -0xcc863fdfba7696d39c5f52cdab7a510ca2073dbdeba87ea4fce841ac8b4be8d4 -0x5726ec29097f0664e99396147a6dd617cd77c727e2158479ab2df14c79c460cb -0x7666eff409572fdd1f5de107b7bb3640798494eec665e1d840433979ac6ec82f -0xaa5ba798afa17639eb043c15cf2dde113022c1ac411a9a195c974bf22aa9c2e3 -0x7d77e50ae40979713b2ef49e12a2d1701caedea6fe6c856ded2b6b4bbbb521f1 -0xa813dfc5b4932643b47a4c15c90c8ced24b5d040cccff0d6d88a3ecdc5b9287b -0xe0eece31e5c3f38435ceff350956495e1ed066894d9190f4a1901bc943525a7a -0x15a25f6148108619e5bf4c018149b12e84ab95b9a23ad149614eac4f5b028c5e -0xdefa097a227d885b14c8ff5f59b8c6b798bc4c389b4dfe634b4bac8e41788742 -0xcd3405e2cfa54debeb82c156d85eb627ac3d6bfc69851e426de7289ca7398281 -0xb145a0b2d630eede095e0aefd8dc4c28013c62c6d70cdeec62966e88827bb1c9 -0x5298136200e02c7d19e2932ad054e00f95f13e497ed530d9c0849dfe457654b7 -0x34270555ab8a0ae503ea810743eb3e6998e0dd087c99a68806b86e4a0ebf5251 -0x25b7f7f797bd1e609f49801f11a128933d82e65219c231b50200a5efb8462dd1 -0x0fec31596ac782e797a0a08562f5663246a804a46ffb85d2c4aca9932777e527 -0x40312b5f9462f5adf1df54df10f75eae1067a64f1185eab9a9909b7772b22ebf -0x5b3572ce88d5ae281244c16e42887a9a68c73f205a2546e34e520829a37a4a11 -0xda644972d6cd450a975aa18eb0844db0c0ae9b639b88779314ba10c4bd59120d -0xc190a7c959ed18ee87670d959fa5f2751cb9cd18ec645ade22299a497fb74281 -0x6ecad00849d938cc0f5624029b6f8343abef58a08ad99f29de59f9ab5dbc5a94 -0x551fcac8b1f0439af71be1d0f2382aa547ab9d0dffd06d36c50d9d2b73a4160f -0x49ac8d4e1a01011248d8a2eb460d3f4ccf9ecb98e4f22fbd3f35eb5bd9b77459 -0x8e2d6b05aac52355ecc4b5c41ecaa3654a516d320a3b001f2c9b0fc4460002f5 -0x5b60dc2d477873cf93f7f0afd93744c9d165d3e1e4d14e1c468f3fdbe90fa1e3 -0x6eaa147b8443b4342acf86a1c26826957b83bddafb3d2ab265ac60f18aa1adfd -0x7fee88694cffaafa8f4dfb5412bd1b023cd529e2944a7c425bb05656529f3acc -0xba7087c2cf9073ecd04ea867b137427d597c2d85253b46a146821213a0f49ab2 -0xb25309d004dfc42b7840d928d436da178131f82877a83b70b2ad0bd25f6c0166 -0xaab8b899973c60539698e0f3291f91d56ed0be4f6303441e452f75ea050f0701 -0xae3691616318788aa083aa3303451e6782e3f1786d079e022b29a08962618108 -0xc4d823911d89f603ca24445bbeea98b52437fb02cab1cc1a84d0d56c7847812b -0x7c54b76fd3268a65da1a5b630210b618c6e89bcd9c98daaf0e316ab27b43cb05 -0x21ce7f2c75114ee264c33f07df22a12dab4553db31d6a87e894446afbaa3e9c1 -0xebceebe23c4391f375a9ea5c34bc71627344a887b92cb249e7b7886154c2f90f -0x93717786237bf3b4712d054b71dd19534097d1d8a51b65eb4483d8fbde04cb0f -0x89c5b8bfb11cf5904f5e770167c7043bcbed3f38a458f0e7793b0d1121c7e8d5 -0xc99b52e5f3a65aab3abd2480042d0e109370062cd8d827a2065869d57d19dd4c -0x29ca66b23f5eff13ee26806610433507acfbac918aa619dc14b2b882977cee19 -0xded33195756dfc580130fddd9c83704949a349366a83e4411f3d62bde4d6ed82 -0xa30cc229d7bf73300ba801d4d5c2993e06fb5c1f6b9e480e59acb2fb63380a7c -0xd134ae43bb5919efd22aa37be269632d0c9354bbef13953841c73593567da2da -0xcf182c2912d70764bc6ec9001f9c8354afada9d1ff6252dfc71f9d9476f9cee4 -0x3f7728e35ead9c015f376a32c679bc5544c662565b4760b65953db9ad4ac6fc0 -0x2f7243a4ca71b920a079c0050e5b939cc1a9518e4be7069949733d7e4a7443a3 -0x25219e9db8d9fb880836ece6f07e15d9716edc0759ad0f8c679ba1a3e7af72e0 -0x0bb4bd265c7062c6cc1e4b583c17fef7f799b428ec76ee9f34f68fc98880e6e6 -0x19543252b9fe7a25a459a74c1f2bbc857d0006aac5968d7176239eb07c932e63 -0x162a368adfca2cd6301ced136beb3569912f9f261915b11bfd497bc16cef07d0 -0x9d98f86a3a6d10c5d290b5f511a3869484f882aa567230730e0b8279cc5d6cfa -0x0549ea3a4649a782b607b0e755b5de4acf70571a22d4e573f1c9989b31cd39ba -0xb88f0543d3b4e467801c6ffe8eae464d7f94cdb99a9a61b82ce7eaf265159f05 -0x0e28631df948b4aaa6f525ddb9cbb3bf86de82e818a43ded9a3382abb4ae46b2 -0xebfeb6e965bfd6f900820b38167e9882ea4442cfca9545209970a65960d267e7 -0xccb8435ffa3e016918f19f588c1503bb426f86914c436af97c0bdf2081b1ab71 -0x12ec6cd8b470e34f20236fd2625be3c007a76e21e0d2c87b2d989d467bf2f2f4 -0x28747ba4fb3980755e1022acffdcf486dbc8b621a93b0cf5fc853513324df135 -0x6f1e68da84fe03b60522b43abd727f6be9f4468fabb0c364e19a119a1a6f8354 -0x8ed5e272bb56a25c9a4061600c72699f74388af66ce5dc553058331c63a349e9 -0x6ec53ec7fc871263c087049f981eecb2d60f5793cab17dfbee1936b1b4503a58 -0xd3e041e0f88fc3a6c2d68785042117c641b234f207db2d30ec057f9f0ad18008 -0xa5b1e4e9a8f31637dce68d8486debb992fd00fb6eda7a362fc118f6f84ba81fc -0x6f940b3974b8d293ee028fc9c39a595768f5eb96376011684338369d53dc3443 -0x67a6f3374e1880c45d16b90a291ef2a96c8213d27ffd655ce2089292161afffc -0x9b9432e806a82f69d1ff779eb347120fe27cf198b7845e41cc485c5f2121ab5c -0x890ed27dee4bdf0686282baf213e41f38ffbc73bfdbcfca01f2ca14f7b3ff138 -0xb1a78cba7e096dcac2a50fb3e31e5156a2c4b4fb78ad7e032299e9879158eef4 -0xf8c603a25861f252a345ce8f45fb1119076b8331bc3cb9a7bae401183877cf83 -0xd2b80a28343165d4f383cd6586f445068cea097e0bb9c3db41f6cc670039c87c -0x959e63bc0ad6330176d20de1d0fa814f0bdeb759a1895b9f196f0f9c8606ffd6 -0x269ea766b1f3a8ba8db1d6e8f5696eec6bd25560ee986eda8f2c83e216b34236 -0xe6814db4ab03eae126cdc0b10bbe85a08141a88c527dc269c7cce00474a66a80 -0x65e6bc1109f9d36ab2c7ae5fbf606d75a7ce3cf00dce6d15bd46541fec3915f1 -0x6760a579b5ba48c5b8824d0ab5b71d270cdb380d719735696f4dd6054ed9df32 -0x2b4c953f64a04494c8ca37362d0c20a3b6f186c5abc5925e7c319d6670658a04 -0xf40252a582b0f355bf0508e626d1163ed5ee73cf4cda1d4f728f34da18437a3d -0x7408338a5d40e73fc80edda5c72a089814cbac1aaa5fb477b6a1c2be13ac8a81 -0xa2d78dacb75bc30ba87ca1a99c846ad965dd4a7a9d169a8f1d540ea239c71745 -0xa6b56fe07ae287059a7340856e1fe58bf8da1a3c88ea9c541480d34dfe6a7615 -0xdc8b50a967bb6448459e45898773157bb0f6ef74c83c3d95a4c0fa771a79ea1c -0x1155e013d7fef308ddd43f178d86109b914b20a57f5d50c39ecb8b6a4d0921db -0xc7f72bef7ca1db18ba5cb5a8edad92d163f4057bc6bbe720d40d7709b4a95a35 -0x51206a098c4655dff13d1cdfe789a078ba11669003665e9a8ac07093f7bc8d42 -0x252bfa7f706f5e80a11f8b10ca20f06f6574db7fdb806848486b73a687e73478 -0xdaa1b7d1b05d63828abbd09be04e969f91aa23a721155e0091bd2b7a1eafc7aa -0x4debab8ce525bdec97e418ee2f3b4f0134de2c79fe79a38a8e037a7c234f4618 -0x09ec788efde97088e697a6fb73ebfbc12f1dacfeea381a5e1d4f47f3e1623c8c -0x10ed9d90c0ed1f98f4a041a0510c92da094badaa99230562c29bf6e80268b467 -0x54a71d521ea2e9ca4b07b77973f1c92d41bcff13299a4b8eba67d0ea24be6c1a -0x692fbbbde90020e5e091db869daacaa0f6b4490be6e75a56c08e5e648b59a8ea -0x5d1248d0c6283f3e3575e3fcb80ef7e55c5515f2862a6f8a658fa38fafb55a04 -0x16153ee29737793163ab5a0d3fb6a63afba3d269627407607ea52bb500657032 -0x9fd14e273c9cacb74151f28a15ff63ae0b101b24cf3b98328d99ebc7698984f2 -0xd3dd15aafc7f09a1edf1f221b5a877f8d466681928c1bcf3ba8498ca91a65734 -0xc1ed8a4e3c701ecd887bdd9c5deab5d0cf46f1a64b2f64189deb645018489ec6 -0x71379cd51ca767a8ec5a491798a72c714e5ff2d4d3110747bc962c6cba318619 -0x6dafb5d699d07140c69251e0b53bd7467aab3293ba7949087143cbab67b76979 -0x882fe8ddeb91b865f31c2ef5813ac2b8b26be2a47ff8a4f44f7ad23808edd30b -0x39fcef3e90d9226f06a788e47e26057cd3d31622f07ba08868035d53f8c8ba79 -0x1c4b01726a00d7631ec41f90099f244a75745baacdd915134d29bd45c6dd74ae -0xc3210f2c0462cf2a9bcd58662a9932c4ad2e718114dafc6e92a7b8bfa977f5d8 -0x202853d8c7112e9a49cfc1ecd02fb01fb7da323c7c7c3dba10a099e4cabce5d3 -0x9f0fdfed609706f4b72e91ce4ed42d6881d102623757820b5640271c6e42bd9e -0xe258ffbea007d32bf95febaff7137bdb36035ebea494badbee4dc3af23b6c602 -0x242b70abd71772ab560a725655568a09a14881d54a28c5d3a41fb434a8fd5e35 -0x6aee9bb4dceed4fe97d9d1ae8b87d2784d82c14b1f46fc04a0ed5bc95ac523c2 -0x32bc962fdac6b6324b1a8c4e7b4798d8d3e4e9f343e3496e5e89f19bb460be96 -0x9c8a7a6de5d44936daa04b42868b01324450a588da8bec865a3e6854872694fb -0x4ee94b5e51353626700d834e024a6ab7c18658b9759fc1e9d44881d767821214 -0x6f800ca77616a4b4c247980c6228127c5e8535c5a22af174ab0916df9219d66b -0x4660a4a7284148818d4d41647157d9eac8e87559862962081c41ce865c22e11c -0x35f37de9e9851fc36d686d2a55240d2427dc31aa37eb52ff8105ef90265a53e5 -0xffd1ec5db44e457ecc90b77bf794eca3dedf24d606002743f8b79173174afbec -0x9ffd97a9e9d6e13045a72b5c8697bca0cf06d76f682b6432ede18d51a5f5dbd8 -0xa416bfe2ae897aaff2abafffc1ba8d9aeb26e3dd9d528f96994b3ed86bf8a85e -0x08c7c1a1aa7cd26f630d28fd7fbb989e4521e8f1a1d7cb7eff928ae844d4175c -0xba2bbd8723953eb475440aeceb4662576919474fd5160892f940f9d6e391bcb1 -0xc63a4088c2334b8d5288e76092f3360766ce8b77e09b94ff1b76a265be558e32 -0x6ee95ff3a399e49b3a2a99ba1af7853a6a0f01782619331381e3f9250f5099f1 -0x4042bad862c7c884fac291704c441bc37f48f4c8b7ff61fb4bf6ff2611864f49 -0x5c1a9f16182e0019a07715da49af8933a8c6cf19ab4ccb1f638994486d9ce506 -0x7939068d3c046b1c420a0358b6c5a0e8c302b1080aa7c5bf29638b9ced8d2331 -0xe7aa658e465b6208624ef6af12eb28623bb2ff439d02db8197776eb2852adfb8 -0x601e55b3a511612c9bb0d44cfe562444643fee40e7ab82dee877daab4a5cfdd2 -0x468f1ac399120ac6f1c03d9530816c304dbde1ba33fe10921b92ebe406c677d5 -0x55b623ca616ee2d5c74a65e72da406678e7dbb5f6f49b531a7ebe87099d591a5 -0xd200b5e9695c5a047d0771d0bffea1b37dd93fd24cf566b533fe5001f15308b0 -0x8ef36fb5a170143622542f65ddcd9b29745b28b57c411cb84e43a2954ebb1a74 -0x425c14b8c719a817b8e6a7aeb75f3e8e640d270e5b1585367f8e793e5c050c96 -0x204f2f28a3de713ae78e2a766c49ad5523ad8aa015e1ff52c0f56d9f8da0894b -0x41c7d80430f62bf5f83ae00e3b6796f6d14d8435e1db9bd7b8267c9639ae87b6 -0x4a67e404daeb1bd4d0418204fae887a6aad97d1d6d69f172620d9c175efd4e8a -0x98362ff3098020a604848f35d7dcffc35543adab5ca3930c694c955a7398851a -0x3db42be881bd833765eb14215cfbd6f8e8c86bb3d93e3cbaf8e1482890e08303 -0x01711d94d1f5ced8efaa8f357b8396dc0f84ac6411d73c94e4e5745d445f7b18 -0x8c6c3d1ab21e69854b241716eea451ed860d32b434150853199691fe7c26f9b3 -0x2085635868fab20a6b4f17006541ea7a6ef5bdaa4e3f3b129306c140242b5b41 -0xa2bc3d73950308f9e4489405af8f3fdb1d18e340707512f9e0be57f40e9c9956 -0x8a256141996e0c01a44159b15f5d4d05e3e99b62d5d3cc56a6307e2c11968577 -0xb57a2b0183e093ce1dafb52d8da11d98bd0afd9a1394656e71080e2931f309af -0x069ee129c6af2824c08d5154b5688355790a1dcc9d3588884d3e44cc59b2bcc1 -0xa9ea395c1728ae4e53b8d53ab61d2c0343fe1a9e52996b6b51b3f67a512d2209 -0xf15a44d9f68d394d1024589621e735f937412d34053e418b8b380d21fe94639a -0x686c35430de397219486d25f6e68ca7884c61364d3c5784448f1ea440c1177bd -0x6ce3916a32feb68f8f4466eb2d3615c7f152f4db7e1dc3ced2c6e3181ef7f652 -0x729b2f7754d4239ab6e5db4aebb3f7a0973b3d5898501334537e58b050ba29bc -0xd72977b59bc7e15e2d42424067944db497e0f7ac9372b5d3a344b474ceb23f50 -0xaed572a8c1a4f87fe0769cb729352b5c84cb336eb65be8203fa76d8581ad2b4f -0xe4484073457addb41c7a6b81a8358666fec2bbd6ea91a4533154c7b242630d6c -0x24fb99d23817e5e6623f3f85307ba49e19af85a076f9daefb1060541ff95834c -0xc5a58ea8ff4bb134c00e85ecff9a693fbcb04f74a21b09a9702ab77edf3a4567 -0x9417b79ee4a2b702523ce29eac2a4165ac26fb62dcfa7e4d154001e25d7da69b -0xacd3fc0fd391ef6fcdbcbe3a469f685fafc50fd60250473b35a9939450027b93 -0x2b26eac9c9ba9f42b3d6baff4a9a18db5eafd36ed684a4dd6539eee5e75675bc -0xbe83f8b3dcde86c8d9e016257be80750bfee5883030b50f32e841add0dda2b2a -0x35755d92335e609c97ab84edf0f4bd38e0f94434624d4bffb61b0b86eeb66e93 -0xcf75f55742bdbaa64ad5b7cd1a6c80604e65737775bf5195e606eac48bbaab0c -0xf7badac0d541b9b04a09bf89ccfe6ad7fcaf33be070721cb59038f323a294b01 -0x85f40f600c9731ed947cdf82d971486b3d2dd1a1ec29a19412e0906fbff30cca -0x8c9e2baee657cc1504c93d1c6b466efb43caaa192d7c192835b5fc4448767f05 -0x24baec0285f07165c9596d9b96ff11991aec14e33b67754b7e24c236cd765c41 -0xea4423441611e0f77d5055a81ee0a2a0d3f7f487455e6bbe79ea84d0ab1553c4 -0xfa4e06a68c76e655914b024bb6a1fe654db4518a36ab2dd4187e870bf0f54f43 -0x11ed0bc4bfbc9a42fade6e165745e412d9c1e57e5010908f65d2cbc4f9281d40 -0x113feb4b71e0a04bca982f3005224584b106437ae9b487424b6abf524431b3b0 -0x6eaebd06c19221d4396fbcfd9c8757507554c75b0d2b0b93b539b2868d5e3428 -0xcba25796e35e1b84580ba06873f207ba697b4a6b4476b7d0effacaa03fe48b3b -0xd032728e5944f7a82089306350f4300bf3b9d140914b43368d16d19251e525c7 -0x8e923d7815ec2603c4b2846474a65f616603391e2096599e85bec5cb685efcb0 -0xcd421e05999d5e2b6afbcd811a2115f72129baf3737a1a7a1a350d95335a799b -0x52a99c0eb418250ee0c28fbf384c73fd4967930a5316b6e50a599404aa7f4d66 -0x782237c1587190fd760c96b34cec0cfc3a091b71e3939089a5efed9e8dde5e9d -0xc8947802a0a0c6083ebe0cf178cfad5ad67ea2cb0348e29d2d392ba9a363b8e4 -0xd19f19eb9e27eecb473382ce07751519b06af25be856f8a271de4a6e9b54aa74 -0x0952f28e54f0ba7227fde6845bba0c57357b20f2061b2b8e55206eea5801d1ab -0x5dfe5c4b75bf8b3da13490d3e3ab6e0dbadfe98e26445b88567c4e7adf949900 -0x18f37a8fa86c36e760abba6b871432e874be17aaffb0a6e458f26f5c09745bd8 -0x0dd8ecc8b1e297cc90661a36cf12509f5da86071bf8f4182697a2cfb8a8fb67f -0xaed199c41c6c90dc9b91581a3192534ad4817c744c0c70171108d6df0fb876cd -0xf32b766610bfc7e4bf5383cacc076e9b3ce1c79a281218952bd642b3268e8243 -0x32fbe1be0dc99689e706c52cca48ac6eca96496075329408e176e6819101975e -0x8ce9d60e9f7d8f7bc0c37f41daa34e898929a1b44017674e459365dcda47f287 -0xfebef6976ff196ee525ebf27ede09ac714a2f206b9073d276f4135ee35efeb02 -0xbb777e3cac5f7083f5def8b4190ad8a2e1ed3a4e9b2ecfac8cf54e394a11d4df -0x452b676e73587c89ac57bafc32d9e928c056abd868e03ba7b05a50de2791cd59 -0x2cc8f7154484a689bae5c77ed447b5d0f92b47e50451c55686a27f24edc0665b -0x25b26b9977e5484cbf2ff0a313b39cbf0aa80431744ff542e54371e425c4cec0 -0x94f7c4677d9615f8e485a05a00216c7813ca92770864d4c847389d40a1338b2b -0xf5202d8aeffaf0727d7d28775483236392b1da78bd7099392997ee85cfa8b0fa -0x30c5ef59c0658be0d6514ce5ec5ad5b4956ddfb60f4f9d64b8d6888674e80848 -0x49077e2670ede4384ed6f19827c40d0d2e7863af5ecd6314bec230a5bd355b81 -0x491ba4eb09d8c9f7d0438ee13a34814da06416048fafc07e7cb8468c8194ffa4 -0xd9a13070318956137ce5dc59944f88164a6443e0af3b9646325fcbc89f4c91c8 -0xc4c00ef93cc3e465e5dfd9330183b9cdbe4a29c4954d95082d003253702fd6a3 -0x5e8a3de4b1b32b3602941edab7ed297625ff22fc18a79cefe685a5efa3ce9cd9 -0xfea8709d02cd3e2a4930311306471e2489380f8247a3568d50b7f163a25f90bd -0x11f58e382ff9b1deadba1a02fcc4c70acc66db3f24762bf48518dd6d60e43051 -0x396d7ca742c5bb838fc3f719fe4c0525f92ae478b898b150fd0a9f38b96f6258 -0x61bb7fd53190b79c2243a26189dfcfb9a27966b4f6bdf9a346644c24a955a55b -0x3c0af118b85999340f8e9f527a8f49d48421d7547c77d387ebe1a83f5f7d2cd4 -0x22f22a3847c63fa048accd774357f44852baf5d42432eb2356660e3bb7e6a7fd -0x84dd9271ae8f17e46ca8d30c34f95d5cf4ab67058bb80c601bba5b20f66d3a50 -0x4863265a91289605550587a810a9da5b92da92a6ab96c9266a70bc760522e8a0 -0xc1c4535c18450b9ecd12e700f4f90716b14b3be7db7de95d16ac7e2ce7cbbfc4 -0xf1d7538bfaf352125ee3607b3a6c13bcf7403aa1aaf7da8c5f1d04079cd5c634 -0x0556ec6680541e9acbc6dc0110dfc29c09fbabcf0d9d3dd4f08f0ef4fd9e80bc -0x7202d15d5e6fcd96fbe68548938d70dae465a54b65a7d19a13fc46b645538d4a -0xa6a14530b9c07e6d9f283a3f21962627635e3f52078e87a8b84cbebd8d24b4cc -0x113456b98bc4537ccafe9c996169660c60dada7604590be08c1166322a67687c -0x58eee78fefc731e87ea75c84fb09a2a80bb420a2b9cda4e2f7d7270836be7be0 -0x54bf964e1dc5cc9006998474787a7a3ad6cec3f821eb351bd3e72573e114b98d -0xccae8cf4e338602554c0373b953211abce0ce36490523355624da0867b479633 -0xc0ba9af42946863c0163c4d77ed21dcca66a7e74e3e5b9e444cca90c86f3c7e1 -0xd31dee1f55b68f0c363e15f10adb675835065f597eeffe9742bc27c754b8d646 -0xeee74a252ff924ad82725edd6a8744748b9de9097d13244a7e2aec8165524a66 -0x1d1c19f376dbe2902188f3700bdd3d68fed3af125f4e0e2b31a15192a6f666ea -0x002d740e4b2ad52e14dc1a0d5220b6cf09c878dd138b49953df8964af98d39c6 -0x65a5677b07fe3f4c0491654948e5c2907b0ddd5bdd0bea8666c089880e202351 -0xcdec51457702917cb0cb81af6106effc5fdf78addcdaa00baf081d6dbe851171 -0x569e71fa22e714653c34b17e240112fd95ddca195447b2c0d64e6b4fc763ec51 -0xea0265d1596f58e4b1982d22f0e1bf71ac221a7860b0c938e396b282a9ea8f10 -0xb829d2cf60ee59aa8bef070739e8e0b1c27665dbc5709ca2417f2dc2d0d2a6a9 -0x16e29a2846d2987d040de1bc2ada06f8fdd65884d5daf1dd61afd4d6c880de27 -0x409430c074572bbca12cca084dfcedce48f8ef0962354bef4de17f5d9665d092 -0x624048be73f868ca3748ba1a98d8cb1c0c68178553d9c71f7ad6b885ae532889 -0x55a8298ac0edbae835aa00c0c5f3c16ac18b97400133f3367a0759de5c028f2d -0x1a5f8ada45a0063f9828a51907d28275abeeb1687a188360ee5d5b3f6793a35d -0x7016890301c99f82d0fd5ecba514d80963dcfae70eb833ab9c59990c96fdecc1 -0x7b6ef3c09cdf064f8a93640b0ca7110402c9d93f6863ece3b4922e2dbc7a8304 -0xf9b07ec0551ed9943aa474a4bd4b03209230be4d151b1c090b95ae72750eb991 -0x03f0ec36447e6675a5911d56a129b30f4a0febf47f658a6d89fe43871aa7da00 -0xc1bbd07b911dfb6d32d11fb3ed8304bceb95b3306c78a7c9f40b508e3ce4a5d3 -0x536d2c5bbcdacffb439e147f406bd5e2265188607095fc63c57fbe549e5ff08b -0x53e43f35acf452fca1afbe75915e3ee93187e911407261eff278789fadf324a6 -0x810bd1f47f701024eaa70b79e79404b74d30adb2a3914d181392925361416ead -0x4977d5f6be51f22ded924b901ac069fdc7412b7fb7c29b050b0fdced696d0d0e -0xd44991ac3cf9e1341f9e91e489d34afb5a703ed75817332e612157dceeae5be3 -0x9b85f011b9bd8316f5bc5375594c94523bd98f3d6ae1f28f7bbdfc93779aeac6 -0x9d5bbddf97497d3c6b0168357e5eef709489da14c71fb3656e485aba95639dc9 -0x9e6dcfa1253d274d3b44240011c2e545290917fdfc1077389a7406a257d5eb0c -0xc0e4dc6de551fc7a5796ddcdb7cba4c58c44076a3bf3c98e820d11c448401685 -0xb90a9328b3d09b4c6626c4c89e9d99a78835ea9348c873870a0992d34fcac2ff -0xc2a65be8784d15f59a733eb8cfc7afda69bd48c0fabada5eaa5323cd485cc2d5 -0x7392458d57a1e5827d90425d2476bbf54b8b5e73a9018036647284ee4cdd5cb1 -0xb13d7bfd3d851b2ec17cc10579707361e7bdf476f5cf9b0d4490670ebdade66a -0xfa17b606667e17b4e2ef1103f056a870f3c220b8e32508559b4c5ebe46f3c651 -0xba113d101c1fb69dc9f0ee7e5eba427da53dfe8e34bbff98e0ce21d5e88a52ab -0x289572901708a60c4fb54e86d0cc89964a877fba26458c6bae0af504877c34e4 -0x3c011520855a14755920aa6b470879e3abe80674f72ad20177a9e3910202b39a -0x8814e1238006434614f9c402aaaf3238afe8c3a36260d1f44bd556447c2fbcde -0xac3c9b17a2ac59781ed360e5ce54b7049077d1417a8722e29d3a451ee1a9df61 -0xe046ac182e0cac73ea1dce23c72250ed80ce2b72ecb48631a5210da60c95c360 -0x417718fec967826be30b6dc0b71da655f9f873f941b70600ee53d934b5c34d19 -0xa2f952548618f352cdf0163b7edadf74d2edeb6eead5e1502a334f2d8a44a87c -0x63edf797c1fdc601d6453a176097648e23216d8eca4caf4abb7f18cc35b7f329 -0x8d82a0798c62928d40f64ae1f302491cfb1e806acf6c80aa708cec2a7e1be8cd -0x804f8d06e423f8731d4d6049080e651c47ddb31e7da1d24afd46ce9f929baffb -0x19d8204fbb963035b08af1417f5e9005f79e3b35227fea74a25caf2b1e0edf71 -0x3ac37ef24f9a6de6bd3c053c2ae80a8a3517ccebdb937bd725b7a1d820065bb1 -0x553bd90acbdde56d29bd9b275a96e72485e915366d63277f633ffd97f44f5d8e -0x3e2ea9800b0b51f1a0bbaeedd39da8adf6fb61a57bd4dbc80a8cf8a560cd0f39 -0x5fec2292da629aea972a1e080243180c2d233a0a747f880ed1908b20a86d3a96 -0x28666a7b274ae6bad3e149ac1b2caea5845e4bc7750832deeb300a835a76934f -0xbea7c3a71c0d9dd44bb65b684c5bef588ad4a71b64cfba815075dae7e0f4cb5a -0xe8883e713d97b2d697de544d11bbf26e7b647ade6411b138de9ceece9fe8e57c -0x36e78edf5f62b3b9f3d687ade35166ad1e8409eb3ba0b6ac90bdf76231afd81f -0xf621e444419844bc571608aeb51a4dbd3a438eaea668000408d1e88a822af679 -0x946a47b438189ffc90bf415cd5dc1c3d588835e5a2067a8f72d1afc5ead1c47f -0x4fa308807ba313bbb9f246dba6d7f6806b9efa3dda16241b58ae0d3127154d99 -0x15f714eaae6dd35630c86e2740e7113ccac7cad8354cec4302537d6d279a9825 -0x9df54d7b0288c425868bce130a3030a38fdee8b1ae1e3a0d802add58776b5620 -0x78de0f9838e0c7f5a13f1b8aa014fab3757a8e514fb28c3b9ce749c149319e95 -0x72abc6cab158238a19424837a5295c9ffc44fb1e3e2b0f0a08f04f2ae692647e -0x7450d2533de3b661f3eeec4cc572a3e7b156ba052592d475c66d7f6430973e7a -0xc1238cdb50ebf3d2b78e37cf56c1d4a25149eaec519993d0bcdd10bda2f38497 -0xf7604caf1ede3a0a65c123b272add44a63235eb81d690de6ba442f4cbdb971ba -0x7a10e403593c50237f4a17b7f4dd730c0455dc95d5243b004ab56ecdc93f39f8 -0x71a746c7fb03e708987371bf41884284fe75983a7952a50cc44f273bc6db5a7a -0x0cef182acfaa3390519994227f6dd73829e804cc33b34b0f91a58656779b0e61 -0x4682daadd1404b279017af73b8ecc4e167373140a776a2803b56fc910a6a1f73 -0xdffa615143a5ff43ae3539e8dc48a46784bb20397c8418fae33675172c212611 -0xbdf515e1c908373b9c30586401e01cdfcf462a415ff5bc2bce3aa68fa8f33571 -0xe861f8b05101b0c05bc4ca253901e2c0ecf6f70d4264d70d6a6542da4ca18dc9 -0x422f018fead7a5a9c85a1e0f108cf677b9768394bdb1a1ac9bdf5798771a08ac -0x5ddcd8dddd91b812fae7e5092b94d7ec7b4d451cba71124c297a0af3545ba8b2 -0x5e8f8e638132897ec0e973324adeceabaae9ed26522585fa05bf9fbafccbcd7e -0x0550e592a71c59db8db707b9cb5b757dcd475932b5f9594e8658af205f08261f -0x0be79a55a18f4bc0588151d77afb568e2685b2b05a45c9c984586f974a8c4cb6 -0x5e226b1165207dd562d05c459aed84d28ae534a4802635859290e409f0e1561d -0x366d4fa4182e209818805f4486430de7960da62377b5363739b412e9a39a4067 -0x5b9e9d344ecf6d4e296f1271441eadbf8da56498cf4b9768babd47eb3635ab42 -0x9b65a2ad01a223f628ab2e2a4168bee7bc28f5ead01b869351693b3f460cd935 -0x87908b411d5c072083bc51c4fd823d7e57d83e1d338b095793e9899eaf1281db -0xa98d9e92e60118d87f1d13920d59c271873dff76add1a69a875c58d00c30b916 -0xce43e154e1bf8a43e342451672f2d195d1f73c78c56e5e7fd271f584cc52a1e0 -0xb4dd37386bdb994a1b1f80635791daf8c2766b10fee83453eacbe47ac6a69660 -0x436478656a7cf166e06dd2c5bd23d46db7cc9dfca04d70226dd4c8dbda24f385 -0x866e3ec8436999e6d4697c3b30ed3989c0be144b95a5f0f9f9312d517419f6de -0x88899e0bed8e10f7ffb9bf20d81eca10c1a6e75c1aeba7d9088fa12b68ab0fd7 -0xf964092bc2268ab1da19e6bd35a57eac3211f3b6f3752affd32a31681017397c -0xbe0006894372c894816539b78261aa0632b98e7f19c11da97e736a5463673130 -0xb5c1cc7b31a4b22ab4c8303e1466e3514a215aa77c5357919cee5ca8e1fa7c49 -0x9f761d2fbf3532713c0f3958384518a3e87aacb439699db407299dccfcc70a65 -0x4f4a5ec11582b69d5e25eff8b6c066d293b053f553564a2b58c5a1fbcd35535f -0x858c3cf27a69a69254d586f95daae252fa9545f6ccf1ad54e373651a58d98950 -0xd578486add9d67c7a679dd0f500a188ec29e4be62ddc2517ad9d6b2fe3b68fb8 -0x09679f89c4cf24939a737367001efbdb345fbaf28aba39724c029dc29d6b5f89 -0x18db443dd32cee8180c83b7fa13ac7aa555cc752e26aa15a132a8446a06f9ea7 -0xc348c4cd0248b3598c40e6e837512db02d0cf001bce47262275a1ca18ce449e9 -0x351e3300a22694a1f8221e9380671e72931aaccb2fecee628ec9e256cbddc7cd -0xb4c95c9b50ae1794aecbb9e8156e99a199f9df9e265c6bb59776daff97c2a40b -0x9f0c4768a376d99e11b06a4f09917310460961a7cb3d0117afc57aac627c348e -0xf220e064c1c8fb55ef6fde14ab3e400629dd90d2c8deab3ab25ba05b192c3f3d -0xf251ffe4d803f71479fed677c5c481b28ce793b15aa3092713bdb2847c2d221b -0x1780bbf8448248c96ef88370fb4b6ca19fc36cc30ac614fc6dbc95b57fcb3d25 -0x9b9d35ce262a1e790ed32d0729d91431bdf6442c8fcd514d617004be25f733ee -0x0f4611916d5df74013e6d83318e6a19e0adb87569f43a17277b311c3d532a419 -0x7eef9f7aedb7c718700a515f4e29a7205007b6b9a9712bd32eceddacbf533510 -0x22df713b0e2d6283bf025e308f79407aa7e693f8e5735e46363f6cc52576139f -0x0cd9e4c5aea0cc69376d9a43a785132527627f67adbd7b14f8b62e13a8285e61 -0x71ede4020935eb00cccfe7d3c71484afdc59387292cc10f6b927a57804fc03e2 -0x9fc366b824a91435ba511b4641c340514d4a08e1e3dd1d0dee9893dac9c16751 -0x19ae7c00fb1562786c96a48414c1e2687ade22378971daf9a1fffcf18b591ffd -0xeaf73d2b8c8cec422623dcdac2ce8094f2228d7f1f265002355c675cccc491a3 -0x9957e64ea252bde2b4d9ea452e82190eb1bc9a0e5492ea55d6e2377e70da4d7a -0x5788a206732a0129d0b32ed0bd8186dccbcdd22e6f6af94c7be949d9988c7a69 -0xb2c027a476df383f1e19372d3f3cec3fde2082e005b6a3a819ce10725f3cce79 -0xa8597f7138d32ea65e7f13c87236163a4803c7257b9ca0b08fdb15db45ad3889 -0xdd3de44f951f812814f042a7cbcd8caec44ec5e5a6acfac8e2eee1fc0ba23ea0 -0x0853fdcb2108149a7873789aefddb45023c8789cdeeae4c9bcabacb9164d896c -0xf0befbb62461a0ae87b3a9d10b23428bea462d18533e995f96ebf8e07eae4a60 -0x1ec74254b8a40028d9cdf7716b736b3819c178fbfb6b3cbcdf9f8b5bd99b037a -0x34a96445273ace44099781ae681793a89e38751acf500792d11a211933f0824e -0x22205c33aee93128480bc5b5326ee5fa6e4e8371021603553ca206e2c67b2b3b -0xfa229010344cf8657f62c0028f28dbea02927ea0f910464dab50c38a4d8f0310 -0xeeddd2af21302b0810da36db886c88dc2446b72bbc16e89c894b28d061a30544 -0x79d526307d16da720bef832ee2df23ee68d3bbe0ff94fa024a9f21bdca8e9e7e -0xffc79043e73d610dff6d46c3e17cfd36a3d68801390efa8a1cb5ff76dac77d1a -0x596c8f1c5425992ee6e61654fc74b05354d60ba20f14ec9a3583e86ea6b8e9bf -0xfdd371643f191f1b705d796afe2bcec52359443fa476d6a4c2b9fa64909a9d89 -0x4e9480557a987706849acbd5e30a8ecef7631be83e8c64f733bd4012c31c0047 -0xe3dc1af6a05a0ae9c5bcd698e1cad713c7132fac7f9da1a58cd1a147deee023c -0x19ac7f972e1ecac9fc4cc3aed26d85d743c1b38073f6c233055798923ee4272e -0xf5a2fd6b63b621e34e50a934bc2fe13c0268f40126b3c00fe023795ac5f6247d -0x91e0b72ca1203122c99270f5cb0589ffb2b4f2fae6cf9897e7b50259a633886c -0x66a63a6b6a7ab2263f88ea8baa81a37a9dc8a875b3b566e587c9773afc27ce91 -0xea0803c5bb79ec56d223c29164540c616601eb251fb94459689673dbb415285c -0x323cd25faaf393cbccc93f65892e1b5b57748b237642ee0b404fa0bbb5138c5d -0x2ec9452c2e9c9635bd9d4734fa83007a0ca5c05cb320108a66a8aa3bc338b8eb -0xce1ec4e3b13a60b656bdf57fe82f30e40713c3de637b562a9bb5a5a16fc25028 -0x82e38f26e0ad19d37ed6b44d2f52d4a9f6878922b7a41b0241c87d77acc6945c -0xdb5b3608e6208d16682510ec7ac114315e9b1521f9c66eb63ca391a5848f36a7 -0x8f4d374bbf9c89a8e2f0a69fde7a7211614f62e2a880f0034d0ac32b1bf660ab -0x8c570fca659aa54925b50768092b6d5489650d18d4709caefa7197a5584805a4 -0x1f853d948633403aa45b5d726b3a929130c1ac2f7dd906d2f8257b933bd624c0 -0xeb01315857ca58e9547bd7508dd58e04fdcff348e8d235970583c898071f9a43 -0x82385e670e290cbb613f4080d571c1c85ebaa3b01bcc823ed041b0623f7d1b0d -0x5c91be46e8816995a6ed62818a14c84f3936245f8ab8f651b4a8e6ad0f0741f6 -0x34e7f6c7ef07263e10f24e089808c3bf2a276e99e7b6ee3d2e251eaf813c7f64 -0x1d6d04b69e36166319e6993302a849e32d57d2067b9222205267df0b7d5c54e1 -0xbacafe2f0faceeac21cce76953110738c228d2e871b902cee7401d7e37cf1560 -0x5863b15cf14ad45cb12c8571fc1789a7b3e1cf7825cfc199b9be4833325b709e -0xeb483b9e7ae16f65a52029149c39b61a80e39869f9333fa12bd32c5fb329036d -0x4b531bbf9a25dde914d742a3b731c09bf27340b189610d7fa31dfdb7fc6380ee -0x23bc35e7abd21c460b2d28337eaf9531979d29f3c6901fe14f5acf922de8a39a -0xeccfe0d3c45cbab408a6c3e4cf8ef5e17f6a47d05f58b9187c3f572592fe49a8 -0x3908bd5a71f9575429d62a5cfc0fdff7074ba551c5ccd42b6fd4f733c5f84186 -0xfaf2fd28bc199b10005f4c2548735c595b4ae1d59b709dbb9b0b6db141a8d488 -0x47009ceea4316b267ee78e0ab5db95637e7a3ad5c6574f7d1b41b68021985e6f -0xbcdecd34458bb23a476aeccdef35585c1692b2d70b2ad51b3638919d09f994cc -0x683defb0a5e1ebb2cb2459f8d2452a501b3872303c0da1022a011a5fb63f6e39 -0xca11aa048f9f6bcac491b9f90992c9127e6d39399d4b6dabaff93404811a8a30 -0x3b5812d3bd9f765c246ff6bbeaef2dca3854f29f509419cd3874585e180c7fc0 -0x77aeafdb5835ad6d39b9d45ee0d41401b9bee93314734dd6f65684c9105adae3 -0x2c7e107a6275136aaffb5deadd33e3145f785cb7360938ef8414fd834a11efdc -0xe154a3382c19bc76a7f80209eb78a3cc359f3cec8fca7ceabecba39df0d883d9 -0xb04769f5b9d935d67a4b8cba3198952e218df56ac8ad18bc21156d9e0340e0aa -0x96bc4220e30d190628135716599123a4fb023f7be403e9c1b0cff190c71cb63e -0x5159137dedd1efc9417392d12e864088f062114e5f8503fb9e200326948e6768 -0x68fea6381ebee51563a58894e56280c8a3eb9af220deebe94868a2f0ab53f6dd -0x9caa02136c5edbe13ee2df0176d9b9164d7e17a834d3e36345d294d6e2606d7a -0x82c0d0eb87a619d0e4243f0c6fe396a1cab9ff170d780c5896ef47a0c8522a53 -0x9af544c15ce54b0f53d772646ffc0ddcdf35299ea11ebcffb022e0598b29bedc -0x95645cd115551f3ebb7a2b063b5f38389a062c45c0b0abbd055489a6f488e72d -0x489fb00db1b8470a7eb25dd1a214aa9a0cfb5edebe51a52b01aa768ef5efd4ff -0xea7a8c3045c503cce5c4b9b9a4eddcf574c50a154b3d5ab6384c0288a7bff161 -0xc8569d809785d1b5ecd75dd0f208f5812c35ebf3ce76a82ee32d6e521054b882 -0x5bd6bf0689bdd1e22bd4200e3b540ca4049ff4276f75f19accfafc83e75550a0 -0x3fb1126b609ef65f5bd5b85b3f3fca9c71d8f4a983a75a56a2879ae6c760bef8 -0x1695702a69a9a3d4aa2dd8ef1a1be6052e4368c61b141c93337813bf0a253d4a -0xd378dd41ec5f289b7d3471482083fb53ec9e7666d8ddbd8fb55e486150c986e2 -0xcae72dfbbebf5851ae6dab9fd911bcb11d7e68f33fc4d930a29f07959b314af3 -0x96055338353ce5cf732bf4b211793eef5f1808e547de24849196dd4cf68e5954 -0x301bb1d13bf799cb85bf5176bdca992d914f85bab57f756cdb67073851bf150b -0x4004f620c8f9e3927cf162a3e38df087d60ebcc10e8432130c53b3fa9f645aa2 -0xc20aa549d4353570c3f353f74be4665591061b779810d72fb7c7d7422c7126be -0x3838a69beaabd8cdd4dfd456b3230d9fc6a7af69052d7b79804a8d766fa97784 -0xfd61cfaa99380abd2199c7ccb4cd739e754e565d294c6b7ea13503b2cb724424 -0xdb005d0e231f18ae466f509c3842c5e577b4dac3a983e8e76b32f32435b6e113 -0xdbb8fdd8119c9700e176d9d7ada5edd8599108192e554a8a7c82fcd4be89e5e5 -0x41fa1937c3bc4f6a2db31357c74031f78f9419493ab1d20d691d2bd0881e9115 -0x9b82b7b4c05469e5ec6f55a61cf06ee09b05e34d16aed5a8dc25c8451c12462b -0xd82b907a991f22d4b76ff56043e8414b346112f4d9cd8a6e836a43fab80f065e -0xb7d786db4882219a1c76f5fc29fb5d219c514ec31f15b8190452a9a19643b1ac -0x801903a6ab7fa94637162644db8e52021237f8e46360b7209ce964b7afdda62d -0x4e93f2f36b727151ea990997d629190d17d6900be683d6fc047acc35ebf0b342 -0xaae80604cc0bd47eff2ac898091b466c721f1c706be0b8a66f194d647efcfb44 -0xd39fce14cd1e292260e70a807603b761bedf0899e9de17b7f1a7c27a17033f85 -0xb591c87bb6489e221798cd8bc6b61fe33808a01c7b829870520ab02e412a9b2b -0x1b8c350078e569971aac70c81531f87ff40272d0ae13cf13aaa6ad7c1432e8ac -0x5c19ec1d001ade935c0df884c6e4e65794424ac1d4dcfbc4adbc7b7672cffb6c -0xb6987ad8b708ce496084ed572a8d4243fda0d99c1d38e4706e9f48410f61e18c -0xd7df0e4a1ee742a67d72a954721e95b45567a9ccf8a4108598c5d60e6ddb0929 -0x2f190061caca52587654f64f5e485c8d5019f13cb48dc3a4a1313fde6540c11c -0xb9dbcac9dc87fe59fcee1ba1910f5afa160d7c5186af5023554fa4634dccc55d -0x81cef972b68d810777b6b610a3bd3698b4e327c70e423fc09672ece6ccfbc2dc -0xf5d67d9a16307cdfbaa76329b443cc5a40109ce906f56e63cfdc3007409ebb2e -0x9dca4cd06f514b2b37c264af44c6ac06d54d9288b77b1a169c770542c669522b -0xf7e209cd84fc48cd82068122f6838cf4aeb74661f989088c31787f25091041b3 -0xc9347462ebdac25fd33a7d893a422a81a6a5a3ffcf77c0dabf106808ac4e9237 -0x3d634b5b9833ca317509f4249e63bac71a388de5b9fdd8f6460f6677a5588ef9 -0x7141152fabb1c2f9a02b3fdbc5d6443d1eb24b854db61cba0ba462835ec07907 -0x87f979c3aeb9ec8ec7eb27e723ef94b950e6678805cfc1d08fe9c3b8d9699f1b -0x7865dec7d8051fc98bde3c9f54ce268e89db96737d6ae5bb611dfd02f477b406 -0x443a838a513f517046b40b5bfb8d9a21e4c33e93226388b2f2216be8aa081aed -0x542f2568c783202720fdc098b892a26e4548866f75cb5ccfdefe94d609246f56 -0x00a8754f7376a0cab56814741dc3822e49228a7df1742df065b06523cf29db92 -0x7f802106a53234f9d468ef668d995557765ce9d29dfff4e14d113824b8567901 -0xc240d93aafc50edec2bb84283fa4ad634f9ea383b2f7757e819c7cca8919ab61 -0x229219dabdf3c2c4442720311fbed4b17c44d5b96f1f5b9b32f8982e54e34032 -0x900db3cf378ad727023792c5ba7f3953104fc8b21afa21cb3a7d51e5bac3172f -0x4ca5c53dee0e56ed7645b4e127ec443ac0a09073a759a33d246cb8c6f4323c2b -0x8eb9f28f9a2e5849f6f3868b560bb886b9803934db1ffc31f3ae58755cd7c3e0 -0x1a835b2c065a172d69f74fde52dce6f634efe68568c9bdfe281513dce0c8422b -0x8c2c0ac559bc5676d1c8db6cff472a0584f5d74d0666316c43f55efb00d4c619 -0xc4067cf0ce4a9ccf4cf8060d9d6395a33d85ff36b832f45a823ade02ec137634 -0x45c5fbd11eb78165bf1e33afa99ab4794650a9c467bbdf3c0837b47d87c7cc05 -0x1e9f7ff97c2733a9a402a038f81545cb0c8c18bf75cdf6d5f1343497c4169ed3 -0x658187eec5dc2b3b8a10dda0a99eaf42193e5e7a410d73dd1a607c928ee8e9b7 -0x5e608e7a8ecf7a28a59245e96ac2d5ef66362840059a153851974626ed45ce14 -0x4f7bb7bc6c31a9703e4160988e782f8f20ca67eb41d3e43d4f0769914bdff953 -0x2a276d55a7758eedb5658491f03eb0310d7bcba0fed0dfbb1d0fa8cd44e8a781 -0x377fe45e0d1efdffb7d563f8507801739e6891b60c3db6e5dd64ed0724a07a15 -0xd718f04021d3213e5f53983767b1c9afbc64b772646031f9906917e1184d559e -0x6dd3679fc35f13dab2c9815ca6d046be35274897c1dd70484f7120024ee65199 -0xb730fe462140653b2c3f5da5f74b19a0fa3e26f57555c79d90203102f52e4a00 -0x3311b3855de6bf1b3bbe290ce1e24898a5af647a1f0c9796231cba1e128baeda -0x077c35fc91ed2a75094bbe4c92ff7958ab0ff24ece87bf727d1a1d98f055e301 -0x5cbefb71166a66a651f312660d5aa5149366df05417584c67cf94487d420534c -0x0082705f4cf0761c4a8c4528b8a2277f879a48abc140cb619a586bb65250e012 -0x1ad97fd67a8580ec7df3d14c3ab705314985b28cd06d97dcfdba5887e44b9419 -0x9d49c08e856ac9d668446e91ce701d23636362386a8250720d4b725aeec8f101 -0x4fc2380b1eb1b0ef47f837a656c311f25afeaa51d5ecb92c7ae403057762c1ba -0xe79b2b89750877463e412f964d3513a9371d34fe6a4553b8ce8f14437c277e7d -0x869bb253f079482c404d407a81ed1802fa32f96aa98e368001694809b18a7046 -0xfd418eb8e8a742f0f27885ead13910ef09a17ec84415dee8c1871d9133934661 -0x84cc27be49222638445762d007b575dc39254c282454d9f9298b35412bcad96e -0xaf7a8fa306a50a4c697abd50f6f5695f8591fa5adbb82170d3d2978f7a285051 -0xd994f412098910f818548d1cd7be637e3bc46319abb4668fe5d5dc8159df941c -0xa4b3c5cbcf22de8db3ba27a0cfa9bbb2bb98a86cca4fea9ea098097513e44e68 -0x35200165ce0aa8d5262e721df6b02ff06b2a239c42b45cadd0baf981639b2d86 -0x636c93bcf7931a610383b968cfc7ba526cca2383df199d024a59ad1cb60ac316 -0xc0efdef44877f5b06de940c391868a9db4dc2ee0a429844e206be836cf17b5bf -0xb769a68125f5febe38ea2fcb382aa918a2eb5fbde604937eada4536331bff732 -0x27a68960a020896b744dc37f3b4ae36816b6296219441dd8a65b62028d4f4764 -0x001ce32fdbf398a2edc2b2c8097aca0596095945f13adbe716ee5725340e81d7 -0xba2a394f1297a8881e319ebb4bf22ba2ce57f8a191df205b0e481c5d92a0db1c -0xbb11408f350bb26c65b808743694365b4049a30a3bacc70974c2336a819070ec -0x350cdb65cb27dc64f02cbbe8f112c16f8528bc0a9005aee9ce73722b7f74000a -0x6a7bc6364ceda6aa19b6cfa036fb6d137853d485cd2ebc65ae06a0c483304d3a -0xfabfa647e45342f9c4abe5850e41a97d6fab0702acc6cb66e38f19e9ec7cd8c5 -0x9f6cbaaea4b0801baf3539b1222a3bd4dde7ac7202747871a37a90a0ff0c4732 -0xbddcd769d7ae2805815717dca149556f9fc595b80d8443d8c48490f62722623d -0x3d39707f392d646a8c171fe39a2b92a0d599f7eb3bb0c49dcc61676135c16774 -0xcdb30425c3c3ee8b21e1132a966bb8f71ab2918f71a4e0afcd9f1a7459913457 -0x298a37727cf03483756be1f4572eb167dff0545ecbd287e092859a8dd0eb1bfd -0x1f01e4f5361658c68257ff7e66d4e01935e0d52b3d3ee7b2968b248cf48d53b5 -0xdcc411c120d7ac15eca494068d10f20bfc895c6052f61612ece95e6073bff21b -0x5a659b885b50a54a6860010ae93492802710d2d8846f1c2484a4cd1af4945670 -0xd6c09d3cc4aa26d97bc0ab6f8574b97936687445de97f9811df17161ccd8b497 -0x6d3aad6bfbb4492836e4674bb2e4b9754c9bb202ef80f8ea421f3c0edade00f1 -0xa0e978bb1263e1624d1af896610b3652e9ae796790fa666b945f600acb43abc8 -0x7b6f7bb381a9d3a13750bbc03f702ae56b00c1c1b8210bb4231b7c7fe93c2ac6 -0xda378259cdb1ca4ab5ed00f53142265ab6cb35e92ef7899107501f28098d84e7 -0xb9764e4e0258d4ca38d007ad50af6481cc5fc66b82e0cfae384104d2eae13c44 -0xd38ff8eb005bf4a2dc4ff3f0f3dced151697180d149e32951bca65fded9dda74 -0x70a7a05959ce3d8af870a3828beeeccddfce680b42a645249f6a6dc8f1c35dfa -0xbbd09479181889ed25f6cd23bd4ef268718f75c9c3ce19f94d3d39e2d55a24bb -0x540bd5edaaf966c289b1996e15deb64d0bdf0e35fd3e7ab922a983409d3a79e4 -0x1e7474a4d4b71e2ba013b511c36cd6da0fb09fcc2959bf30c6258e2e062be8c0 -0x3c913089ef05818431f59c1d0736c5fb8e59b3b39b271cef02e23b528f11c403 -0x77e361b6faa3ec6830a374c72a9b51b528e13748c1735b6de3b5e7f7bd10ac67 -0xa996ab262ec8d4b738a993c28e0c15f1a3a98d10d85496d8d8be3c86078e77e0 -0xabfb6d8b347f727a813a4ac4f81f6d128705697c94dd1d8a9b8d3b63af548565 -0x39211bd7d5c04ddb981106fecc47a8785d6b66b1cc1ec1607968a03890060f37 -0x8642544b5c4e442e1df3199ebcc2f3cb2d3966e0c4f44afd8b698d767b36e5bb -0x480985ee9796c4fa81f0ae4f09a149192189ee37d687017633f6e36ea3774eba -0x642b14e7af3ff7304db05898b1b6829a1cd6d23ee281adf7c5350c966430ad55 -0xb6acc590863423678dc9b930306f019d35147da7d36929a17481f577b84e9056 -0xaacd5682c3aa9482d94076a16f8b8ce0660afc3b91704d20071a530b93f5f3b8 -0xa0868e82881cc8ad8722256689f74d11bd0e170b8e58a0dd0953aa4949941b14 -0x278e3f24625320b808bbfceb881a5a4d3924021f1930683f7239db301866af8b -0x05d74a17bd38794f1da44dfe5f083bd1aaab542e1dfe0423e942eace50a85ada -0xfcd45440a53847ea32473086b50be5c04ace605ffef642e55480244d5769d7bf -0x095928b891fd852a79b58be0123c108d3745d7359c977bf9297e36089b1b5a6c -0xc70b607e0a631c97ef4ebfd1c6c594cda49fe43455487d043678b0c820468c7f -0x1148332b5f97f3c1898b2e7ecf8da0b522631c69c6b5f5c6093c1794e0711c5d -0xc986c1287a127a0b27c2f6744280209b674062913d72bb8b22363fdae696dead -0x06f220768210418835a96ef46204e7664ad284bda5aec5cf32ff54d901ddf0f2 -0x950b6bd76772278b2bd55366d38b0c3603a75b600f5c8e56fae41e53161ec547 -0x62fd5e05ff0d8fd750e5487889f404f3333fb02fb45cea2bd1a82cb5dfbe148c -0xe09d7530c9cbd28408ba605e4442c0308a57b2b5ad79b7797b0d7c605c9d3a70 -0xbe4903529c91787621e1f5e52daff0ae657ec27d1b07ea585130ac21cfb93078 -0xaa1fe7e2433d525a08c53b33eb18dc3568a9f0718a9f4a8d127ee46d7fd244ba -0x10a8882616dd0deaf6c3810063f1c42041be56b7ee59b32401b7df7c44fbf723 -0xed592eb0dcfbcf3b94bce9c94139482a7b8d9c6e092e8056569cd26d009001d0 -0x617748ae645b3686059fa0956ea56fd3afe04a5f9d5d3f4cf07df293b685480f -0xd4e5c34f3c4ba1132df52bd58efda57ce8623d259a3c3b315a16d3e193f6ee10 -0x09e7519881bdebe59c46474315ed9ab15d03ae7b9e72f810ba39f84d45795312 -0xe15224666acfd86db2c45eeb6aac66ef7d0c8703a558a2e25cb55a16454cbcee -0x1456f58d9939371d71c1b22acf51eaac9343fb92f80405c3de5332bb7e21343c -0x0c97f027f6eef1f13e4a553265c2ebb69156341a43679c79bb61c795dc6efcc3 -0x1789e6ab9e0f17e96bcf5a0aa0cec65fa1ba7a17a70f23d6dd737baa2e6162ba -0x31d3060d51f2a54b75e67019b20c6fb68bc0ef3e80e57f41fbd88578f9b9ba84 -0x8db0fdf45f6f09a92c2b2543c61feb8aeeecefe5b22b5bf0b2125876593d4a88 -0xb28328a7b26fc01a69677bcac4e3c7cfae31cd33759f0fc5f64711b54233c3ea -0xf3d43829793c7ba0143959903f9610d5b35a70855860082b79d3242fb824d657 -0x6c97fb64aa62283dfc6d9a81774dae7ed73f6c2dd2aa32fff75b8addf299c912 -0x0e2e15c9ca1e5e8b1e3c9d66ad82965730c74d44d025fce9b1a85ebe9169dcf3 -0x0184d9db9705139b4a4f9053e2f9b47d898a25760b8d832a311fe5b00193f5f3 -0x3e1e822e0f1e3ff2d82bfede19bd35290978f26c523cc74aa05ab91aa6dceecd -0xaa962d4d8539ad5cceac3fc8b65b4daca5b50a8fd4056fe55247c468c145b1fe -0x9c583a5a46af634820957ce2c1b64884e3b18d4c433137210dd14d441b36e469 -0x92c07a26948cde5c17e5e2f9baeeef300cced24b4bad05c1d91bfef4a57b1684 -0x3a076891e9af3e5f6501cffa740f39d43a4bc3f035669a999d80c243c850622a -0x37e924b7cb3bdecff84e6f662a92089bff258c7c1b7b1f593836ccaabcb14299 -0x9de5e2c6ddb4a346091f98e64f6392ef7b13ce95533d7d138545ac76056ee33d -0x48880244b4da2b5e5654928985602157a6fc02732c62885664f7a5222c203aca -0x15d20a1a27d543dfe7dfd55c5a5aff9cc625ee88c4885ea3bf911064d9609ec5 -0xb2795f5a484fcf2a56fa7f02b80b4f6c86976123f358be9a9b80645d85ec5246 -0x19e5b966fc1e39d4c7088010e81df77c1670287ba8164dd17971c41c8fedd681 -0x83bdff8d0ebb0cef00e54703b29b9d9d69d558126b596ba155db3b0a2055841a -0x70fdcc6ba643099c335d5d25b5cb79cf32bb61fc59ab519406c025a81a0df260 -0x1b8aa45bbf95c74390f9e395468b4be798a2de392bef71aba4f980a0ff8ab766 -0x841077e38a2dcb7d4e31035f4adb06ccf0716ef6b1a4da43a4af6b25641e22b8 -0x267f7a2fb0b59586dc06d2c65a96fc21664ba1bb8904c9b6b807650fdbf69b8f -0xf6d479af05aa46101aa941b4f6cc7f089291cb8f8561634546138034b129a2e7 -0x63c796c310b2f1f1e4d9d4a4538bff37d6c2cae2494d20b2506fd6b3ce8341d6 -0x316d2f6f9f2227c87fe6946c59095f8aeb231dee826335a65d94ea5f2bb6ccf7 -0x94d0c05de8093897bd568d42bca69221bc64f7cc52968ba320dd6be72a61c84c -0xf3c93bd1af6c5e855ef8b059ec6e1a0557675fd2701ee028bcacbed5228bc0dd -0x0851d27b7bdbc44bd77e34951765dec90f5bb9f7771b7ad12707f0409c1ed16c -0x3a915f80f87e6350cbfcd0bbca7c8689600325262448d39000076bb49d141b37 -0xd1eca44bae7853608a92e29da4f31d78f9ed6006196ba9cdcc42b570a5288344 -0xf8324b1b29b4d920d37e8f62e6fc7ed62b40e200bce13823b054d17cf4728105 -0xaa2cdf57fa9b08704e92c2aefc3d99df31236bf0991de29ea8d9ab51d187b9ee -0xefb2f57a96cd74a6ae569238931226b6c8807e9eea3bfefe91850ce4d8468d1d -0x74338800b2ea96a9d879144456380f9698fbd45854b11db2ec527514ba9fe73b -0x539ebdb0f760de6080ca753ae1342c008b0bcc9a6939e0b66e72a2b1883e4fa4 -0x64427b1455e08fa244e62ab334780602260b93b3a9e9126c6da6c4340d4845c4 -0xc4c51e4df67444f6073455d192f533f79be973054fd3d910b767c15858fc0e64 -0x5b0aa9e67a0abaec2a8b22075d0ed9bcbff8507594d70f38b5cdb0eb3fe8b9b2 -0xa3cbbf897d4d0142e53a298d9be686dc1e56a5128dba82baf56d2b3b9a275754 -0xd9003ac0b3e95172b682049a25439823de6b47369bb953397c413c73e61605dd -0x529e54287440294b4c564b3b2cae5f6e159496c6b8c267dbd041b149fbce03d2 -0xce116ffcaee806870857184f9b7ac18ab9e8b2b8a5864a97e226945fba358011 -0xc3cc45985a21a1399068c31492a8feaa4f04f0617a4dbbdcbb90c08b399b1d66 -0x479ea5b552f2a647df0fb186bc9a055231499c7add6bfedaedf61ea66610a15d -0xac7db59029b6071a3d29fc7ba06e97131bb3865d90d37bff80b209d6b6d75c96 -0x8c228d029ae153f2197a33227847243b1eda10ab290811b9489b63712a6d70cd -0xc5db0b5c4005cb549bed49724ed44dad21038fd10597218f74ac9c10c992d70d -0xb7a677e1f9b91815ae11645105f5afcd617967d0460232105d7e612442e79d1b -0xeba23d0872078b82eade029afe6cae415e8560a65b07f17fcb65e0c2c41baf83 -0x17553498ff6a3ac4a57958ff1c99e8aef1b96f5b3a12307f358157b065e142a6 -0x5c8818a5b31821ea80f0974b5a1992e8d7dfa5d041252c26a5d247c7c520af39 -0xf979dfb2b39f35a199e81f5489053ba5ac0c4f07e0933585449e6eb5c6ad17ef -0xe870491a645597f3ecb74df3ce0135a72574a36d276cd8d0e2fa4eb032b37593 -0xedcfd3b7563d5b12e1c3708688efef71f2b8879191239b35ca3c32bebad79b3a -0xb6e75ea8854a91578c1c2cf391c77b8b24a63ab2d88da45fe98b0a47418a3fe1 -0x824fd5791af4f7973bb5bd529a59270709d0b13333047a15728689fd6a8901e1 -0xcba7e46b7be263a02a8c894a27a51020dcf228344d3d0c1defea7a6402bdea30 -0x8d38dffb5c174aeb5b030f214782ea0794633468eac94001e56677f5b0c8203e -0x271ebdb28a5e720e2d282b58fddc67eaccea4e6edddc99cee3f392bbf1e32073 -0x95a72f53062a6b5367ce4072414795cf2938efa08f1aeee076a927aaa021a180 -0x8ff8eb1e0c1aadcdd0a2870cc1e4fab56aa900b63bd0079e00ce735a1b04fdac -0x37c7a3ba88008aecafad44306533ec0f326c0742a4a83e78b7b8ab1d08d1c295 -0xb680d7a773809d9d40f17b8d90fa5d6ba82cfa69c0b83d1cb87d05c73596694b -0x53fed1229646ea678e1681fd7ed947489fd75f71379eacdc08be36b2f47f1ce4 -0x2a75b2ec307210f085baf7666de72d8da1fb82eae3c7d16cbd658edc4e453159 -0x044d340c9a8862f38884a36476ee6137679cf17c000c9af872763e4c89155830 -0xd717c854215bd2956004f9cf11e378031f588bb4c43cf8299a5e99fe813cdf36 -0x4c493cd2ccb589c60e3f6449a2cca7aaeb18ea073926ad55394c783989902280 -0x26789a20d6c6638f3dc607668a8b811e0fd460a5141dc4f48e9e6f962a84c91f -0xc784fa543b6b955cb5db0171f09d2f4dba29acb513e90ecc06b2bd891cf78f9f -0x6d099b8f177992fdcaa3e55fef2e0dccab99d171e31deced238d62ccaa545847 -0x770778ed19546246d4c8d892f0d7043519ad63b0d5772497ca59171d07ed2899 -0xbcf075bd4240a61c7079264bc26ccde5f161eda573b45ff76361a76095ca1ff2 -0xb4b47ae24b6e498941457c08281306b80182b4f1821d37e0d0417682944f85a1 -0xcc71c8241a3729a04e0c3380049cc1b5838fb97e003589b5df28859ad47c8a92 -0xb8928fbcdac580187ad269ad1b79a02611569f84513f922585f431dccec1b7c6 -0x2f1572e1c245da4d1c40d27509e46bb7e68b20d1ca97fb0d95a1f1d764bfdcc1 -0xfba97742159898284c73d1c3503ab574a780796cdac5fbbeb92f530f9caa2b9f -0xd5a6dd602fc0eb1d5da9deb6ac0e3afb867af141bf9b3450537306f81a702233 -0x205a3e7eeade883d3ec5478654d249fb9552c0a6c2aff193658604360ff2606a -0xb51355446a4d573122e2c7a6f8cd4616ec9fe76e46cf0284b8a3a6cd32da116e -0x954f735b0a882d265e0a3767e2098bd15fc338ca06cd8848f49b52fa58d16471 -0x505aaf7156e67850c56a1c939c847f1c62c0ae16a5350ba5ea04054f6bc1077d -0x2633261a3357314a32eee1093c8d5a0167dc331689e52f71905e2506b085005e -0xdd018ee504e1934a7f99c81e152ef59305d9ff2f8f7ca8ae841c87941673016a -0xdd60cee31f94b26d230772ea0f0205ce5b3a83705874b57928486c00c3380759 -0x6a494f71bced601fc809fe81a7963d1ff6d71084aa2715c780a0865f412ac29f -0x410ec190431ab82ff7952e500e638da929ee0a6726e5d5cc7d91d0ba2a2db38f -0xa1513ab6bab933e9d545c5091a391706cea7b3951664946e062bbd56a9beb842 -0x62d2a3b48345a1f5599dc12cf325a5c3f390ef793b870b8ca863719f139bb986 -0x088633b2a369182b449f52aefe439990be26540503994535dfbe0ebe75c8bd99 -0x668a88f9f9720c461fe5cddc8f27a5605b4325b388eaa4e0dc6bc5324c6101e0 -0xe39661143c5581ae7ca16e54210880ef1dcef5588ec9d1ef747506cede43c0e8 -0xc74e3b8d37c91c2507a3069d3fc9d4845285a5cafbf8c2b7e56647d9594221f6 -0x8af18f1d843936d21283245be18b1ce2d314a76ec619dac52331dc172b915008 -0xf7b09d6ef84f1c6c180e02428829aca96242f89f5dbf03ca6452f5bbcba2f7be -0x8728d65255e4b9bc1d9737706f17b63733265afac5f49a6893266613416d0faf -0xa52b2ae45ca4535b44719687e3ab1bff36b0e6add176b66e0ba2985d600c7b93 -0xd4ea60a99229f54d1f843e7725a238c89b2e7b041a917cd390d330cd7d72e82d -0xbdc3e254cefbe909bf2ed9555f5451749ba470b85d884db67efe5f0394a44d6f -0x6cfc81141440a28f196f373ee95777a9df8590d3c251bb73f720b0746f5c7eec -0xcb1ee8f6a06a5273c3449110467f60e1807d99400cc0666e4418e1561e1c527f -0x08481d4bd4559515919495e51e131173a07bbfb600f5ddfc82d7b86e3c2b13ae -0x7f6aedc6b21f9d4293df69c344e4e8118f7db280f4b446d95ee9531afbd41f44 -0xdb1687863435dab8aa0b3759788c4ffa580e35546e027e9aa56178b5217b8984 -0xc718700fed5fa42b613f59b5b1de2868c83402bc38fe87ee14e731daca466fa1 -0x270af8ad21883669edb8b3cd7ba55c1b01ac6480253c45b51740c5ff4982b93c -0x5c2f468b9f47db986f8ba1f50831001df023359beb34fd12f5ddf8d4bf039b4f -0x41944cf7ce0a3230143ac64b1985d0433e8dadd5fe28b082aed2398889e9cf6b -0x242eaf67d19be9e4c0f83c2bc3e35b30121bf1285e8a2400a933738a748b94e5 -0xf29499076996df6d28130b5a2b0a8d6018d9e0b2bfbe4e65e05e17b8b5b9c344 -0xacb79fef9769644a8be0e6cf76921b704e94d01659593e82812e82f48d107396 -0x0f4d6f902fcbcd60d0e6b54eda666bd120716c006b81d75b3bc36a3a5ac92764 -0xa15c85cf6c9800a21a15d67e05e935e0f7bc491e18349d65937a0bee5d25e430 -0xd4fb6c7133c892b1be0779be294549b407c8e251ab84a1100993fafb8b2457ed -0xaeaf35ef0ee7fffa70a6b342ae67a8ad8e9ff93f304f6444047029503cec7b78 -0xe7a15d559690f2096ba0e4e1140bda1261b2b55ecaec9ccd7b9743e2bd7d3832 -0xbfacab7d5fad984347e3ca5adf65038d79ecd36923db06dfcf3d3e955b167214 -0x3ec2168401fb8166507999c05608013bd5d083ebf96efdff33e8e983d3529424 -0xf4489696d47c6c4fd9e47a83011fb3fb73ec3d0febb71529ab24b76b732fcbb5 -0x7b1ddba81d01c67f8a1000bb3af32495fa6a93e6ceb1531d9c5a21c48b86aca4 -0x0d8a8b3016b15945eff544034685f905e8e13c022f95d48448feb962b7d3517b -0xb694d96a9e4c9225061cb5789f6e384621cc66f5c37ba3e7fb883cc473292397 -0x859e0aaa73471381b98235e60730ce38f29c313b681e3d99dc521050e2ab58df -0x5934c496e5f7f4a8007e7925358e8ccfa1809affdeb7b4c0c60979611a92d8ae -0x6e040858a69801dc93721519e1b199b5f6d9e3edfc1d035538c085e1efdb2adc -0x8ed9c25679e831192448a2e8d0cdb204757591deb0a633617b8224b4515826d3 -0x6eb5f93aadbf5f677667253e90fb04cfaecf7f235b86c964c21b4a3af173517f -0x3a612b98bfc48c5ef07157490585a3b885e07b395ce81e79306418b80553fcf1 -0x9dfec9e974c5246d728aa6b2013e929b2c0851076f80dc49b4d77db9861e9b71 -0xab0a1807b67495494f7d8d475716d2da48fee1593053ffadc70e663661995cbf -0xb906d8684c550f4901c8a86445870931fd51a95f50b5380235f9ed263dabaaf0 -0x0f8c0ecd2b48f1be867a834f6284012bca2790caf00012014b1b53a75d94f661 -0x3a0d8d253f0324d18ee8344813da7cdf8a0835885f33a5a3bb30afdeb0969a42 -0xa7dbcf02ff46c65896ef1c0650b4c7f0bad222c7cb8648e8639dbeae9027ae96 -0xae31293773026198856e42512f6abc529b9685ffde5ea68638972b5dbda5ba31 -0xe638aefffcb58af4edc57bad4983fc5547994a58fc776b73aa4286fb49580bee -0xc94bd017105321601b43b96694806bfd6e756dce2bfdc6a11def8ffe46590388 -0x8e3966d12173762f4b8669a7d7d951c4dcd01cbfdec4addcfd2231083e3c6609 -0x41464e1582f421677a94961b676c75962766b5bf663d594a2810a6cbeb89957c -0xbf3abd575a4dee2e6e38f66a4868c3bb7b89814d2ae0500cdfd8f3a26de19e53 -0xa2192ea1487d1199b24a65f72aad0f440840786c5e09e5b77e8d2bd7a79795fe -0x939bac687f5549ae3b3bfe33052054997d1c13e4a96cce006610602dda90e148 -0x34629f096ffd1257797c27ac7b8e49c31d6c6471dff722cfe4dfca2005a6e450 -0x180671c87576fa20191a15490e4cb7edc846c70d8812461b10e8f9cfc46dd50a -0xd111b42e8b9d8557a1502ecd1b81126e180d824ac698728106303abb1b0c0f40 -0x85de45e4c3ec7c98a04f8cc8e4643fc8d50ca30f4c1adf0c552058fac07fb4de -0x1912e3118f91ef7b65abedb01a0b8deda0099ab10a61713a8e90811cb682afd9 -0xfbc4c6df72afff74420c6d8a9442c074b85c4072434e55f88799340d225ee21e -0x7e1cf1d023d8fb7742e831ec4cc188c21788a13c12be8a0df77a122d36405627 -0xfca3897333b912e5eba04d9eeb356d487441b1a8c45cbc44254fd955103f9854 -0xa6d96213e144ee6b8c20510ea2ed507921413ea305d91dc25c90d9b900e6d20b -0x18365cf1f971428fa7e290370becef4b373f2072834610dc14e4a513256860b7 -0x9e3180f2faa5c110fe3803d06949756831fe9f623636437dae61118d24e4081c -0x43219e1b1c16a3816d8fff84408c7dccfe372546c8accb02ad4716cbbe5d2830 -0xd5b050effa7f711eeced6d9edaeb87c90b4a07bf1b0d68bfcb6e4c2d3b6e7aa7 -0x53fdaa08938a2a1bd8b9f59f9b474424fe22d0821970228e8d8a4c9548d59442 -0x363ce4dcc2e01e9849c288fbcf0672086fc935369a55a2252b95ecdabe9db987 -0xab3c5c21a39994fd945adf5f25d3647aed0b54a1ca0f67d063254caaeddf63fb -0x4af66f9d23efa587b276d96b881639b7777084d221b5242c78b0ec92989995a0 -0x92ba0557436ecd51694c9f8a40e0ec3e9a394376d75862f7215fed30e4ee3d5f -0x4bd5f06c57f2085bb61d35a487064f583b69998023d451a8938b03226f621076 -0x088ef9d0c60d0512f009152af7681a9509bd8c63d8d29304d8c5cd33c3d69279 -0xf5b1c863b2d92f24263d215da883e01541f953bd4fc14afac034c6a6fa4bc924 -0xd64d79101aa9dc6a4ad0a9b00e5ed6e6014423a4d09864bea7527306954ae096 -0xfd5a606c23f6c8468bbbd2131f703ffa5f75535838db139a7b7244bbf585d621 -0x0510392f7b846bf920076b3923bf6ffb40f15b3f7081d53d1668f39d3ff474e2 -0xb638bc6e6f892b0770fe9724f9148ebe9876dd02d6410db9cf4ff8581f5ad4ee -0x50ef5128b93041b73ac28647c4c77f0fc5b501a36f6e7474abd08475412c13f8 -0xf9454535db1d054e4f5d8c11b830793fe53a3a3f2d3fe2dc2ae17d264ac83ed5 -0x513522411016b0a1cb8fd94f445fbe54250ac4e1fcc2bd87a9c341882d83e4e8 -0x68d790b8ce9de854105411f5bf713ee432a33fcafccb688c9cda0e5cb872ed8e -0xdc81ad172aa4aec69a31121b14a07e71e381dc47da04db23735cf6786bdc2370 -0xd593768477d8a37756ebf6457196c1e70ddc6cdb2c89ec5318c3eb4441562bde -0x9135071c87d39769ae48c211eab8ca21e5e2a0a656eb94a34ff7e505ee049448 -0x2c9805e0d175c5a30e7176b4473a0e6ae57847c9d393d2906bc4a614b39b2820 -0x96b62662682e1a96341367a1e31e7b7ceac3446ed2906c8fd4b33388d277acaf -0xe48083d173fcdb1487efdb91336a4811560e9821b99f9cbd1ecfa07a1059a7e3 -0x0bc2fea8c575807606255dc8c272465aa4435c6630d2508fd5e455701ac35143 -0x16f0d66d0065fd9f5919dad17c65d52c9602e2cdedf34b8585a3ca08d4159b6b -0xecb129f4dec93018cfb859e8106e30fead5c1b3f69a9bc277a051f2bafb315b9 -0x78e8c235d4496870dc7d362dce4ce748bc938bcedcb30ddb55e84684fe5ad17c -0x2376e23258895cf5268109f209588b44a5b69c221537911bb92fade160d49423 -0x51bfe016992521d7c1c1198f354296e7c09ebeee5d4092d3829f1fd66ad1725a -0x9dc0e4815bd60097cf4ab3edb3be39843a9339ecb2acadacc5b9bca31434a197 -0x7e3caa867d47dc732b3045a2219956a71e93d78f4e2c8489e38ee9100a4583af -0x734783cce9f6d75eb45b859d80d4dcd8bd4095fe9c54542458a46f58a28bdffa -0x7f779ff66da876271ede9b536b7450454f39705eb1a64a4c2ad828e0ec46783b -0x96d16d3579defd6abf4b89c7c7329e3e82e48b73d799de52a320fb73e6775d80 -0x2433330c667989b24081774810d21f3c97f2c1d141b9f43a785a6af740229fae -0x6a407140558f3b02f7d0ac4ab85694fec323acb73523f830ea1ab7f61cd73206 -0xc65afab428c3e9743cbc9dc538aa153aea4a54d85a0fa06a1be37c55beed84e4 -0x8b8f62a55c73a2892cf75c714ad943ecc2c2a0e6bc78923c62ed12eedd1cb7ce -0xbc6a9bda82d97d1c1161475c6e3b760e82065c1bd51806df9d9b62f82c014be9 -0x67573c45cd2220b1103660a62d544bba5908e9436ac2ec87d1c05f2694ae4cd8 -0x90d506b9a751e70fbc8055be5cd304749a3204179a14e6fbaa2321acd465515b -0xa534909d82a86c5245993d1cc67e5abf9a50db7ee0c4d71c0204d200fff48e43 -0x5e1c58cdb43d319f1ac5aee08120dadd8e6c6db710c590a5c1b70e93087c406e -0xdf4be5665dbf34a49a2112a74b7a8728b2afba17ff4ff3ae380e39cc751e1dc0 -0xc06afdf0c71b6e2e5c8e03052413566fc4df9c9db3ae4aa22eaec487338fecba -0x99261368515172ec42ae342e1018ffcacc1775cb19ae6f92e2552173f72f407b -0xd0997876a3b6849eb1da6395aaf172f01a567e94e2c0f989e57fc93f4c2669d5 -0xda36401ee5b74325e5c50490486836637341acb104d711a4071f5b97d9e3d8db -0xef678b370b834df6ffe3c6a5a5340d384e88f33d9167b24347efee6ee328c62d -0x0103176a4cf33693025664d3e335b9873f0a68cc0a7aa9bab8596e23d520a178 -0x6a1b37ff7bcf08206e8cd9b27405376386a0caa40ba2d99c6ffbc3377116b119 -0xb9700edabdce6cfcb94eb1ca79ffeba6fa8f80fc25e9ce8b093195429635c565 -0xe87667c83c9de1b71038de9818db4fe4d421425cb09c57b9c0e0fd052064cb13 -0x3325b9957527df205f401bd9097f75a0ed8bdc0a3f8f986caaacb6ebca7ebcd2 -0x2ab955e79e023aa08358f975d827f86c6508e4d990d5ca295f9d00a5c40d07c5 -0x0aefd40b1c127447fa437dc6260c95953c136f57a3900190e15443eea6a63bd3 -0xed027c65790549bdce147aade2b9755bc706d864a687668d1c1c177894eb77a4 -0x2395d705420cc8fe006f0ffe3c2312493d4601c0bc2fb3396af234387619d549 -0x91f6decb09f2cfecdfd9437ba8a4c1b109db3f2c3566b3bae47b39e3208c68fe -0x8d48afee618ab531501a456d1a8bfc70d5607b5d246742ab5504918de7ac9770 -0xd4620738af8e55ee3278e6dee0281963e4aaf3a5539eec4558484bfe3780bbce -0x7e148e19563d2ad1a7e280033beac09edc85187008bee24f3bc70e9d2326caaa -0x3880693ce58dd8f056714aeabb47a535c5e3fe27376a9ff5ad7b1ca46e4dbec3 -0xc9a8992c536711d4e976b60b6432fe5e43e8ddb14479e2b7807a1481fb2f3f64 -0xe5b915bf8d0e98ca38e0090e9d54dede6bf41d022b4e32b81c667f739aa12eb2 -0x23a95ad74fad128c071da3a1a900067d306c460ca41e16681ffafc59f30adda0 -0xa7d48a803afe193c7a8c1c911e421ac90b6e716b4c8f0c0fd47468319e0a1c70 -0x56c1f2d5e018b1593e21d2c8b060f3dfeeaddd10be8c8404ec6ef2f5bbe1113c -0x33927faaad2a7ee8e7e0d3b8a504945c9c62bdb4ecb7c4a1636b033fac7f9556 -0xcfac5336b053bb836bc5cad2bad9792bf98e963e403052cf153f8cdb5c7167ff -0x4bfa0f4d238fb0d1cc34f149a5c2a5ce5a985c0f5a57b2de7def30278195bad3 -0x2e375fd6b43c82e724837c0b2b2c5b333e5afdc4d6b02d569b4a0bb6176671b3 -0x58537f78f83843c6a463710546123261a991d8dc7f3cafafac495901f081806f -0x6c0d5acf66f09da72ad1a6ce43412a76f7218c570f08dc431736df0ede6d38ff -0x39779043097bcc82205fe1777904a8fd1a7f11df2f63d34c38f188663748b5d3 -0xb7e355cbe64763f8bbbb5539d02c028387c3ebf1cb9ed5a059dd6a26ba4e21e8 -0x9e39ff39722fbbf24357b8a9c872ed9548b8ddb041c7906ff56b789912781fdf -0xe7fe2e7676c676b60b5090f0180d3ea886b4e923adff9f24f4fe15e998482b47 -0x3fa1d066e565f52a168d08632627a36287d6587545bda77d804a58ad6a774e2a -0x1f70cc7acc13fa31d920529271f7b3863d2584ae3663ad2c8e0456488ad68eb7 -0x13a7a5cd90d1b34622c99b3e997d81c8c785d0a2257d761641f3724bb23ec32c -0x897bf62c21fdafcddffbcebe59ba4f641c54107ba08b7a0fe3023e10ea1f7101 -0x9c36fe694465a43301c9a7c248992667346eb96bc3facda27487e19ec03606d4 -0xcaceec234130c4a0d2a11a56d80142915d73f92742efa78e22652753fb97f3fc -0xaa3e9ce7701dacfe2c7da7bbd23a567294f8697fa686fa1774a931b7d0e1e2ea -0xddd29ae24ecaa82d52b969f60a92fcc3747c3a10202c9dbd1195dbbcd3f21653 -0xbfebd87665d6bda61e106d00eaed1f73c59f7a4611f52208ad164b4200d4c72e -0x49f272ae45f8ca2b5b2adfacc674f58535484f6443ad278b660c69b806f61661 -0xc461923c6867bb729ad3e5e0751cbec87c2340f5cd78de1c7d7f5283a84ee4de -0x1d11c86c2472ce286a8c7a3faa60923f771ec712f446ca6146ae1c719dfb9737 -0x6f6e7ffecd24be0ac28877860a899441f59a9c36de7eed4c3b91078134ece3df -0xeafd1b8add31bad3a6855805cc4f5192a59f23e6473cd708bd3f2d9a1eff17f1 -0x25217051768750d678feb3f6ebebca2881270bb5bab4fa6f373be0ab3c19d6ad -0x15c3b9bbe94e684082819570212f6071fa4f9e452ff29acc4ba491afab80010b -0xe2b33df92aa3bbbfbacc88af6263fc178c95ba009224a1144942b8d28c298575 -0x6c9e6a5ebf55114d0200723af62d74e8400548d51b1a2986f684091252dd940e -0xbd3a445c7d04b3ea9715aefac25b680e96fee0ba560d2b004f5c6c5a4532bdaa -0x07e236dd34cd5b858ffb4a4fa43ec9e92ae15297f4590370534d3d449fe1bb9a -0x4a7b27282a58564d9f91a74104cb545aec742fdd4a9170b05a1dcad889f2a387 -0xb2f47bb2f66e20582a2ef67573ced9eae106767ce1b41c5395e7ac7fdab6c73d -0x6f66daadd071d087196872e7318bc729b9815b6c31c4cdee07db35eee6377008 -0xc48fdc179cb01db693a171046d22ef3da14abc6820bb4f10501c4426aa05fe4a -0xe0b3c5801aeb8acad2759ce31e5e8162bfb6f2f7b0924208d96c44a70b2e3389 -0xcfdd0bf7acb6f9ccb119d65f477eaa49bca7c3157f5adf8bd1a0ad3c69e4ddbf -0x5bd9d06f7b1a5814ab97f317ddf3c814ac93ded37ccd201456f385f8d68f6358 -0x1a16f59728ceafb5de188246aae011d9596fed0fdb55a7d81f90e64690ee5943 -0x4892635006d1bc887f74dd4b2db622eeea2d80e99bd0fe696e0528a9a01fc00a -0x70a5437b1c3a55466ef1e930d093076a2ab91b97911a369a99490dc6c0a18f1d -0xd2540c490cd373680b2965369cc6034809f25e57129540c5db005bf9ad550873 -0x38386db53e0dd7fba6b9d617dfe84c36ff16242dc6469b260d3ab0e2a04f7fc3 -0xf3f6de42bb49e41289fa88aafc195af6f588dc254c90fed2000b00796be06692 -0xc1748aa40b579e7fc9260988a052b9554565afd01c22c4ca09eecac9130242df -0xd61f6998b5ffdbfeeab4b3ba0533b9fe4f4cbb8d5f3075ca67f8f66577463633 -0xbd784daf5fa4af20997963e20d56efb5e7fad9329725227742cdd54e4d6aac49 -0x007edbd3a67107ece9e72c54500203eb3d2201df605f15bc3c8de5e5a9f080bf -0x6f3092815d2f8b1a50d83cc64e1736de8d386bccc75f998315aa34572d3a5f13 -0xeff3ab1b16f46f473f2600167edb11a8e8d19350300763209d69c1e626e77180 -0x8a6a8f3d9d9eed4605dec86287e087820ea7526ce75b73abdc13c880c1a7e288 -0xa4e1e39beae07b207feb274608566edc63f9e2cb389a4a0cc78d6440a5f78fcf -0xdd2ac0968e709caba9f194e85bd07b103257d2bc96088ff5c99d3ed55c88e925 -0xc1ff51145c085dd99d62e6449dd290e67f23db4b76ac2eeffbc62a6bef12d658 -0x5c49840efee73885ecb55f93e6c482f106091db6eb664939905ffca76046c692 -0x2af43012ba8b2978e130f157d8c33e009348162c6d62b0975232cdbd89db1c4c -0x75ac400b0fe35bb65fd32b5749b553faf9bdcf4c507df61cbd418ec848bfa518 -0x3eb66275ec71d61a29fb28f8e14d0ac9ab7270a905428b1fff111a991724e683 -0x13a98a3402423b0dea6cb1b37802f068a5a4c4af7e30c69c9996ec0f56d7de7e -0xd6fea9fb2ce4ba4cd4370aefa67cb8e59f5cecd405338c851bf5d55aeb6ba98a -0x9166db41237c2ae2df7cdcce395f4d806dc3a0baf02acbf8857bbac2f957f82e -0x98ed6d48e142abaeb11b9fddbf0484a556f9134ea0730ec6df247d9c91b44bca -0xcb9736bb59e1a85e0aa376c25ffda0ec1a9df99be31d2f839a138167a18a0005 -0x73045266b4c6503823bc7cff4c30a2b43f5587416b4277d7f0a27b4add2f769f -0xd70fa1f9aa172497b790d76751d11de04f9d2cdebc24778b719ce2288e2d9144 -0xa6bf4b01426bff1ff19b56eb60bd0c8a28e9976153d3e72000595b97385b79aa -0xd24bf4c7231be0b8665b85fedf7769b478929009083c7cd0a0029242a1f3baf2 -0x3e3f1080627a814f4764892eb55e36377dcad8ce9319e14099dcc891030ef791 -0xd7ab20e0fc888389b849144b73eb4d3928d1c96be3cc43ea48a34f699e55882a -0xd4bfac9d8d908daeeb5f22b79a8352f809a77982940bb1af2642c7047a3c0b20 -0xe95d12f5f6fff59f25d6cfa1c5d3b922f1ec1dddc53252dd3db671e17b16164e -0x28b7109f8c16337efc29d8721cfad131fb3e14783caf57320e1a201cc2b8f29a -0xcc997f49455e7cc26d634ca1d5c62e2c9bca24bf62885cfbe8372d22593f5b4f -0xfee695959a245edeb6c95866cd52a826b57eeba01e53173bdd16950d2b493ed1 -0xa0f3e08b76d7f22999dbf6ceaf032e25564545b9179c5a1e0f8d38c4ef6a3987 -0x754cda31a92b80a54b60e8576abcec1e5a68ff263e50bde733456f13ec8966e9 -0x4c24dba97c918da486274361d731972a759c8949a602ac2ae9474eb694f41265 -0x2b1c6bdd406e210eba57444398b4ebdfb3322d96fc082740a5c27a1650f0cea4 -0xd67938b4a5b8fbfbf7e1101a7b793f9faa575781b890e8b472ff5cfcbd33d961 -0x3c546e5f0ef7285fc1eece1d087c51904121051d048f1dd5a89eb91185a3cb80 -0xc6c3319a5a30cfbe67b2475d0b6105f039b2265130095530819ee258ad639bad -0xb1317e799bb8adc475600e6fbf3f1d04d75d0c30ac19ec451f24fbe257cc735d -0x49d9dd64ad8f4ff5f1b1d5e1e36ced88c50b4faa75ca7f6318df81cae5699ee7 -0x4a9f7f0c88ffb2c0186c72b74e66136b37f2c2cb3169049d78396b0316fb5d7c -0x57035f229284708e55e925fa020bbbac25a59aca24e963a3054d64af983785c9 -0xdfbafa0cfb59a0c58fda8e8890e434c76a043927ac0039e308923e050261c07f -0x6a0948907b1d92596d54fa9616c81955a3b4bcb8d62b398c4a05a1cf5268e30e -0x9a0081d2e1c4a5e3ee50877c894b61ab8c1eee31b1baa7040dce4fde7005b07a -0xb48ef85efba1890bfd49230d646cf5abe52b596ece5bb65a63ea04da023ff0be -0x926f6e17a19fbbccea1331cbe395bb85c327a1304b03fb10f3fba8d8de77ca91 -0x51d692081048c940e87ddd520983151894ffc00d409a9ef0628b5f2e3b83338c -0xc6b5594184f21730550116ac1a88fe5879faa9f4f1d3d64d19c0a01e686b4a21 -0x78bb2a53884c3e64d038268c5be46eeb190ec64ab96aa5ac363f1004c59a8609 -0x6c4f1a6c15e31573c4add45852f66156a0b8d841af94cfc68d76324166e7336f -0xbcf48086f5a7b48c7ce8617c4915464a4d4723fd4080f72a990a53f20cd960d3 -0xea94de3b37cdd23af9ec2e3618bd0ab66ee134d39534ff672d4abe31a9bd7d9e -0xffa5637b30cd02f537abe00635af0a223a680dc0855d4acd1a17f5d206e7631b -0x2c8ba11ca35891bb8ddcd0689ae407aee51dbb9dbcc81f5123996a1b80d710e4 -0x73be1151bf2b03a61c652e1bee67e5afe23be81b83f3015cfc4c0c44e7ee5239 -0x8014e4a3588d135c360870ac240431fcf75b57076cf394113240fc5181be4cda -0xb373f56298abec91aee4c07d44464f62ade8568bf02d2abf51f9198abbf7b225 -0xd1bb4c44262c762e2736cc0479f147ed7a88689f58a07da9fbdf88ba90a4ef36 -0xcb47ed43f00d96dddc62f737a8710e8713731c5eda059e2bad4792c4c0780d50 -0x1a5dfebb89edd2535ab5f0b942f735b264bc61650074ec95879e39564e5aa51a -0x0a6d1bb7af380ce78e908ef5790224b01dc12fd82b7cfcde5b8917d73fb11905 -0x8fe52b73dfc514db41987aa3650c529ef42bf952991a1aea020513bac5c84dab -0xe7ffb50e7a11847ba4c853497c2aa6ff17a4f600116810a42969aebef8eb414b -0x1f7a15c8137709aaeef2184b8c2a5f787ffc12f6c8bc22f7f3e4142d66a8a781 -0x66e2a6f8defdb697fde68a718ee954c1c4bf7fa2cb0479cb83342a9a27c18cf5 -0x06994861aec8628d7f07867c986d1d0cc6c5fd6b8e8587e6b2e80f71adf6b9b0 -0xc5b648387aedc4074e4fb3ba9363689551bab11519eca5d98fad1420694b44e1 -0xc0645159697a90046739a1d37d9e423d2615f10bf9a64db404da866aa9572b92 -0xc80730c019f43f1dd0b1a428296edce2a54029f75751df6b63f28c2faa3fe044 -0xc9dd5ba3b14f85312e831c3cacf6b65e4c37dfc43919dca7da485cc32935d076 -0x697e3c0485ccc582b04f91444f3bc0aca9d14038af322ec83d6fe000f516d63c -0xa590a6479c373fe8bb05e11bf294e2cf2b6d51b734a90cb8467297cccb6e50e6 -0x89a7e7d298a0396b0c8253b7a0c63e2ab5532c8f2326ac4dba7ea8e7a752a237 -0x4222a79607adc13dc6190aa76ee486998cc28ed0d5a0a203e19e81d2d949b75c -0x6dc2cb8557ed74eda2f9a4384c6cc83dcfa7e4d80645c8d6ddebe336720cebbd -0x6f347571c84b8fe34fe7a6bb769a85ee67360f94f84cd1b0abe8212845b743ee -0x9070960aee5c13a0416a9f8a6ca424f4a1e49f813c7b47533b27c80f0ccf8bf0 -0xa4be6191acc80a0e1c6c26a5ac3db2e32f6c563d4944ed3919bbd7030b784c80 -0x254d4a53bad7f54a3e394fd3775c036775aa2d88b52ec3d2a47b2807ae383770 -0x7e17a3cbfe303729b78956ef19ad7f383caecd57d880a42e87a1160097cdb187 -0x471019bb1efde09a6264fbb227bf71d91157ee088c8020dcf598d94d55ca15f9 -0xa9cf876fdfd02515c7ced1cc61f0c39df2316f670ff42576fdc17c9e7c6c64d0 -0x7453f6c93ef72a488474de3119da18ce084aaff13f475285bd83ef12951bdbc8 -0xeb8806563382a126111fb329ef14bfb46349e7af9c09423d34398b23dd3d6895 -0xb55adadd1b2d5e74eb03464a1c671c4e25fa1a487d0fc39cd615c9c2366e0a6e -0x54df067969a89997b407a2fc29747843d614834600ebef4adca19ea5b8c15225 -0x8d4613891512376fc6345e82b554d4c792bbf4a70396488df524bef2eab8b873 -0x5b2f5d801d465daef6c77cf236f02eb64f5097263f88753b8967e04e5d4c0927 -0xe73dac1c9576ac7edfae071b9cd5f2e26fc1a7e35b5927c0efef27d1dd516626 -0x1b1106a42a972b5a334c1a994572ccaff12fa317c03842728daefb2821d3394b -0x0b7eb5698a065df24d09cf67a4609d9b0958f743cbe4c9e001c9610a9b4f1d0b -0x9cef4f8e51edd15e1fd2759e8cbbafd34b05257edb9b80f73d72fbb10a3d4815 -0x632eb236348f3fcae9d217a63bd281d708569261082f2edcd7386bd163f9563c -0xacfcea775c0055cb9acbf12f13a5f73c246f6e463beae961262c079372f3a728 -0x213af5fad6ad60ceb574e338b4e285df91077ba1d30d33f3acdacfb2d4de6e06 -0x2254b06bbc3e53ee76fd66e1517c3767b669447faf4708d9b2e9f692c9fe7a20 -0x82a4a0d29659b02d69c6579f6155f900d8fed365e0cb57b4ada9fc851acf6c21 -0xb1d32a15cad9f03bb941dc22e1cdc37b66af9facafe8387472aa6d55130c4206 -0x3d3601dc2c6d009fa4b7eb70768d6cf0e9f6c256d9427a7335440177d068f643 -0x97ab415e578e64113e9fafde990177f58587f5394f3fc07b458b6a115630bcef -0xbb08d3581a99442c7cfbfccad14fad423b1986e35f2e7f31665fc6fbd9ba5881 -0xfe210899b3678d412a44a11ce8b56197e32f4f9f759e355e1f0d8ff111ad998d -0x025abf89f295046e1f738a0369c9f0e516d286d3c0422a21d0f541f78d8f9e1f -0xfe65fde6d5ac4d4efcda59c3a95ea4003720c204c9173f894db3cd12a9eb856b -0x54ccab93f743efe1904371360cc5164a1d3004e1f7a9362541128428d2890cc7 -0x8a7aa60170ac04740d828af50c0d307ef9d488c7a9831e3ad20302f2f27e9dca -0xb0c445eb736720a0070f632aa3dfeec4c8681bd2d88b96f5e67ed6536ae73686 -0xcb64abf59800843840a8529bf4c3504af33c966c922c718fd61a0119e6c590a4 -0xec1f0d26d83f5bddb5f6a857c1eafce2c15f872d68aa4d4a31d688ec24515054 -0x054c956e1eb8e64842c997425953d72cfc004b49fee138afb7ccaccb40810892 -0xec925979864e8df6d597322b1bd8af78c10d17c8705a442d9a85c94dacda3630 -0x2600cedc3c8dfb42a9003e839031a904f356d5603c486d1f6d2c4ee532758c2c -0x5d5861ba1818951b7b6ffa4622bcf7587fd932791b2c45f64fa186838e99aaca -0xdab9fcf7cde0978c716a71b829f91fbfbb3a6400e64c1af4ebc4b4215cb404e2 -0xc82258487a72577c0a5a32b5eedd3c4930e25763ccc26155b4d8528ff477c196 -0x7fcb2c6a1561e497c800fb5fd55c2bee2bbcb60b1749687ad0ed6ba46630827b -0x0792f8534f18c33ed68c7fbcae8383246761e57bc88c6f471c11d7345c1e65eb -0x5424ad880e85c014a0795dd377b1689fb61e2e8f65a90cadaee346220833a32d -0x39d9ff14ce3ebc061d0d24bb4f2efc83057df98b6d1ae746930182a9ca2da89b -0x2400f1d33e143ecbcf921bddc38645dbc2bb95134cfcc92415336638dfefac8c -0xbf230a9d16213633486f7eb6c1ba9432231a26c7771cc9df4ce65555e77f7b20 -0x682f577f0ead181e36065a106d427bb8c6b242dbc438bec4893bb7f039e51b7d -0xf075c08cf21c4e50cccaa98c9453439b245d4c2b1fff116b34ad0595ff810c6e -0x51dc7cf32c19e622b208408bf354a9786e6921a93acfa12a716f0fa2a8087ce7 -0xb2b3c2ec9c3b11373214f1439d327b5d26b9495b24b694396087899aa316cd24 -0x57a21560c8e49b2bb2d829a83bd80943a8ed8571f9720a95e49fc190c63ba33b -0x5c1c86e79d568fac686e3c22277dfad00790c27e1eada44677f9aafb057648d5 -0xbc2a4563afe44834ab2d7dc26381bbd304b51a0dcca618baac92b1af2712a9fc -0xc1a13e4d29d959a48a9baa572eb417be0dcdca840a39382bca07a95239ae526a -0x87eaedf042ddf237aa430c9fd474f755ad38b417676330029155bc140d1bac8a -0x300052836aeda3ce47c5cb037724abb1f2b4574c6a55a07601efbbda81c9a07a -0x69a0e93fb45bc1ecef677c80de4ab5ef3fc95a3f49ec11b8fbf8b6f867ddb96d -0x652d18abc1c5c1c3d0d7a8e85f4491ef8df753cc2c60303477871a98b07189f3 -0xd0019ca622d5e2719b461c69c78d1d90cdcd573f2ca9d4ec4e94a5c095343a64 -0xa5b95b0e29c0146560169dab31b9377bf29c4c34a14ca66c1a4fa557a7d9c1ae -0x0f2e308e5bd8029a2f7965f379599d38b8c9be537a4ee1c9fc4d6a34b630aad5 -0x041c8f3affb724f7198d81924f27361e49d1909b6c2cfe3c908d2adbf72bb97f -0xadc329e9785339b60bb4ef727071cecd004f04579f1576d99f987c863ba71216 -0xf2082aaa7a641f83ac18783e99edf8561fb2121b810f17b02e6d5f2eb72792d6 -0x98946260ed1db0074c9c6b980cff4721423931285a6de8791989fdcebe418cee -0x9c19a711d19e340f2ff4e214a2bbbff80f25cb286b8fdca5bf66b31ee63cfd1b -0x8484fcb980f6e1d53cc2fb85fd96d32b8997ac2dba9218a20f2bac37a7aa0e11 -0x3e8850207ff17d1fa3fd6e1044766bbf1814f5a09a6b951b85855eb364ceaf63 -0x80c754e575cfeaf39b5a5eee93c4a46eb3a5b6d88f9812d5a9ef0f5253165599 -0x2b9a84e02ce82515137b774859c8437f8ba579c3d4f535962749890f3c17656d -0xf9c3e5b33b87394c8aaacaf3fc99546bb0db62361bc480a6f6be77973d90cdff -0x92da4303f49f51a1f4c6c637161639df6877977d67eeb188a029338328a839a6 -0x2859d0dab7817b25d3dff5844e0ab86c7751b6098ea7651c4cd2621f245ad566 -0x43892e9efc45b2b66de1beeb916629764d28c6f5128592fbc45b7c3b42edd7b8 -0xedca3d5440672879a4db9aee94b5c58202b3031eb6ddc99f5d48cb41e04f0128 -0x880646443aa30dca16e45e01c62fb2b70145ab6cf901ac93c6184261f064e9dc -0x12df6cbdbb699adf8358d3344922a22d9c8aa5be7c1c436ae2b0da572fa8cf65 -0x3a491bc7938688726eac15e8a185cbcc1316edee77c97ea4464391a00cfc609e -0xed93b74b7f99c4b35af06b4cbb8a9c4d7f4fef88698e1ab9c98fd5180bb2320a -0x669425ad374c615e912c4118b0d3d5fa1cb4470bd5cfdaa327135c07c8173370 -0x3f173d6bdfb5ef2e82267cda3efca8efea56f88ec81756aea24578cf926aca64 -0x93181fafeca209fc892c45abb422f3060829bad43aaec62d0feeb558f2b88e06 -0xf56d9a1edfb336437184c45aedb149ad066fa58efe214e7a2d5c46438b5498e7 -0xf520514a3014a6ca4f358c9174abbf6422ad7f57e134345df8da0966f8982164 -0x68625a4103321d494f184584d74bb82e4e855346bf05f694303b38188b49f5c5 -0xad7200380059da124a590855ea5769046196aa69ab52ba58ab6160d44e3b890b -0x9ec0930b6ae4c7e2ceb15f70f8fde0b2c4d29834c3508498d7d7d5cd10c5e2ca -0x892316b1cd713936d95b2ed5fc676c8d607885a9b6ae32eb0fb14de8aeb60d54 -0x28092ebff430bf1170c887b3822a51d2dea804a2a61c1751a70b9ea56742c5a0 -0xe7bbd10f462f3f736c9e652a2403f70d610728d83321916cb2a7daaa9cc1e779 -0x20fccf038b0e982c60734a4c43a748a0a9a903eb2090a3f9db318106fac32b9f -0xd411645a3c0f987d280395f7f9d1b42b6003ada9766a5c162651d7fd431c006f -0xc10eea64582b02da6e2818e0e881c4e3bf33d92fd9df00362a94db55ef1eeed1 -0xbfffadeccce8c9681ab9f371c0b8a45af4e8281f9c9130ee4611fc60ab4f0169 -0x4c4faa5b87e33fc3a0b0cbef9e7b9165d04073951c8b2f60239b3869ff9d983c -0x408c30a8781915986b3332cefbd73eeaea9c228fe2b08e27c0693c92857d8f35 -0xd9d10cb57136f0b3b043f0c23b5f159e976bd97127bc22f4c19e1695eb0ebcc7 -0xca48388b598ab1b6f06a8c766d2a963ac292776142966836d8ed5fa1b171a7e3 -0x1440faba4150570fa6eed35bafaf1cbffda2e2fa335ec08e6b220cf1a699f797 -0xb39511f8918073d4cad20d0ea0252e7d5cb5efd0aedffe213a229a15da6a2b88 -0xa9f92387ebc1f5bb07ca10579187fd956e20ef3a166b899f9501cd8a33c29a13 -0x29e9d827dff7f8381f2647f5cb01d00497704ebc68488b4dc48fc9ed2ff9aad8 -0x359826b267bca1bf19582f05388fa2148ddd924638632d9560d34ce53256eed7 -0xd447116689a93aa4ab88436f11781b785c1218962458554899edf730305138f6 -0x7fa70d7ad367dfb6ba14f108acb1f97f6743a30079b259b86addb4ca4b23073a -0x3e81577e4251daf615dfeb4c0abd9d46751a012211e24965aeda1f3672e40490 -0x0fd25959b358455e247c64b2d213842c61752ca3c7755b9f94b982632e526b80 -0xe961a8b44ad357513ffa53168f9c0bdcb0a402f96fd99ed448825f4acbeadd6d -0xc73f28c517bb1beb73d119bf12c5c992f480326d6d6e3b211bd63864cc6fec2b -0x560a8d8dd9f9349b64b1fbf13f7ac6c2a2f8c681f3d37183476700accc53174f -0xf61d5e54dfff86991b4dc3762e2827dd6bc2567d617efffad5dbe492818f9381 -0xa1c77d5b43327853f5f7ebb49110d49c4c990f0eeea431dc8f0427e6f6369544 -0x41299f6289e34bcedee2f332562718ba9f45bd1bbfb526942b51008eb3277ca2 -0x830b5bde1c868aef9fbcf3a61e224881c7e32803843593d6c3aff24fb1f5f020 -0xcf4be020dc3d11f573c4f8974d52728c4d3da000d3c2754e16a30bb9773ef7a1 -0x4610db89657e56992dd3cb5b5edded15bbd839c324517fca4c17361b2549ca33 -0x5e49fe59cc1e9fada6f68b6e1fdff73cea7d732f959b1680426cabb77d21f2ba -0x7588a672172bba5082b0b8fa605fe7f902b9081ddc491981bedb845df6cc7ed7 -0x33bd05da286ddc78abfd1da2156293979a1c7a83eee4157ce4054b5fcd129ee9 -0x5213c00ce9a461ab8297a00f2ff7d00c719e1347855d04e82a2cc073a95ed166 -0x661971c93e89fc6658a03078145a1b878eeb9a1a71681eac311fd71f0fe0b1f8 -0x9fe5697b75ee50917ebfbd103b8926d2573cd1a3b67c5e4f71e3a5f0fdaa4fb5 -0x7ecde9c357789846eea36203ed9e7c7e2f2a6935f036a1c5b902abbb6da22235 -0x3f3644587286709017d642b89d2aa0ffbe92f2e256beca53866191d5e7875da1 -0x5ff1d7ca35d19665dbc8eef245fd9c970c5ca4432ba2786f2b22984c3fabc5f4 -0xbe98b4502b757c37b77c7128f85bef758df42ec652b775d08e36de4dcabee84a -0x9c34da27d58de8c2aade9df692c154f2489593ee669b03ec08551b6b03549c00 -0xcad6e9b370b9fddb7f51245a8d3a69b0c17922c60b7387f40183e55d26f2af51 -0x7070384ba807665be65bb995176ea1968d4f46a341887ac00b964745d4408395 -0xd3b0f74db0a6240c0b288a1682d2f06fefe7d1328d88b7dcbd241248a84bb565 -0xfd5a3a245b20426cdd1a6da610625ee6b895d3dbeece0e084f302b59c6c4f2b7 -0x119270d67b28ea1e905972c89426b6e6322e173990c73e0ee909abc0998f0c13 -0xb3117f2fa142211db885879b3cfb6a7bd702954820dbd50d5fbe95cb4dc524a1 -0xfff581fdd6b7c1e378e2a91013452ebc0a513d554480d2fe6e4a139d1215fe9d -0xdb5b482154b446f10da788d14f7abb61d9deb7c5a3bbb956a98c9f1cedcea3bd -0xa7d36744ed41dd08dedbe2ddb4119ffb2be216cc663be38ec36eef849a36d100 -0xe2229d3b2b1cac700363ae8728df7618eb449d427d904b3cc2e9bcd8ee852a9a -0x5f7008d35449df141aa014dd4145b254a9739589c0cb2c4cc4967f8ec3a2cb96 -0xc1f3d1d5f222dccdfb6ebe4c5e5331923b99bd651a2af37c6df072c45533f404 -0xaea5e6467119d8408f7e502c5e384a9e25422ece4ec73f83fb9167362eb45c25 -0x9d41cd1dc2233e781081db23c64e1863c62de03f70104ad6cdc3d3b080027de4 -0x0d49f4a668532034bb46db1dc42ecb22edecb418a34da10497ccee2842e96429 -0x1114cacc8fd54e94fd1931a10672c9910997d29b5687c2a1b724bc0cdbbf3d99 -0x234614b82a3166494e2be2a2933e95e9fefecbd54cf6659b83c0f7f01560439a -0xf6ae741bdf6e90271e5c56560db35b7f8a0b2e26af6d53eb2a7db5dbe1d719e4 -0x65c8c517c15eeb22b95f4ba416447ae7bfd64bd1e4b96ae70ea46750a690d69e -0x2f6bc78072b4665e099feaba99299c44d82420b29b08c0a01ebc5934c75737d1 -0xa8eb220c7f0882a342880fdf960956f401909f840c2643d8ff4badbbabf04509 -0xad22a7df452c90dce6e624fd5278c5bcbe1b37dd9ae5308d1c3b256b2908f0e6 -0xbeb34587009618d8b7de3d42cdce3d31fcea07e0fc99f2b5caec96102a0aa704 -0x84927283c4e8525f5c3962b5baffb315bd99ac51e4ac836d418bae3546e298a8 -0x0890fd0980ef592d4e848177f4d566e3e5527a4b38940b48ec8fb86b31fc1317 -0xd7f9d22d70f32e7f060dac46c9aee6fa1de5b02ca14ca0bf9daac660ef1f8496 -0x849066254385871214f2371ca72442b3b1ad819486fa7374e347a244e8361fb0 -0xf8ae5d71b26da29662bd11a5f124ff5b07756c938d6c77c0d6a98da31192c8ee -0x952a60c667b23290f17b9be2fa0eb33da2f0536efe1df34fffac1575715d415c -0xa038b4a9170bfe6ab0fac2a4d889fe902fd3f21286af584b3087aa76e527a670 -0x6b5173824a17ded78e21518be770606475a8c9b1f34fe47e47807579ea67bf4b -0xc46676bb56065ede67faa93661b7157ca237c25392f708624db98b6f2a63159d -0x66bac78e80c36fed071b0832bab0774ad16bcca3071f29319814e5eb246d75de -0x15396ff696a3dd47bdbca3a2e94539566c7615aab7d8b78662d48ff8901f35d3 -0xf36f1f6ce460c938ed5fef6ba6b99b86cbd0058a52f09f4640ab9e57a84bc969 -0x2b4bc3a3dc4edbe0c7c68b5385fa05089f19ce4f9a86cdcc40e053cca9bd5983 -0x34937b24e714068d9584cca16ed90c9dae5d8971f5f6beb81eae61a0038f6602 -0x4b4cc079a50d5d8ee908f10fdab86e9397b7230b67d90b8f14524516c909fbbd -0x503f4c5b45d07f22031257ae98a9ab441553bea07bf8405ea12dd1772f411b8b -0x355aac0ef7f433d3e7a9691b368e56e4598933b56464ff3a4bd52590e1174969 -0x93820c5f8b5f91137fe252f2f7d576a409c4fa2777deb09938a73b5078e07796 -0xc5b84d02322e368fbb643dad9ec8931d548b577fc8a7dd3b66515049236dfccb -0x7ce8ba379a58b43e64ea271ebc91d3d8d88b84aa54ecbe182c895a70ddc6da0b -0x872adcc46540a26af9b0ea6544db5aefb85a86b29116c7f72b9026e6fd3ce55d -0x138d2e3188d6acb52c203b7eb7b1e0bf2f225b1c5a08d3602885eb57a935a7c3 -0xd276960a208375aa8c609f4a052a71b795488e8f4f4a6842452049fae7799ad6 -0x556b87cd51471110ea46616e6ab3baf4a776cc37294783e030dee24a433c583f -0x86fc8f6e11d03acc5b1710865fc86dbabb365de7fd69c6f25fbe88939229c684 -0x2ddad423aaa4f8c53fd2dc72a9d81b6fc05be935a52abfe3a8d4017e31ac2004 -0x105ab48a89404bff864b415a5709b2e3cb1794fc14a00d1a4e4c7b8f69d7b5a2 -0x1f1ad587f4f2d474ac8d5928d0a9f9945d93345d049778e14fee63c2bce374f0 -0xad286c8b6c25add5e6f86503c19dde0ab6c9cbb688ad8981fe7e807d31c35e8d -0x8731dc43f68cf56dc78b5c180105405e3991c1a9a374cbabbf5f8294a2ea56f7 -0x7a618a8a9017d138cedebb35bc639411570529dc99d457abe8d843743084c3a7 -0x7824e6dd2d1fa5af58b46be23a0af303f621675aad8e9b88ae8141eaeedbb965 -0xb4b1f0c8193ac42019adf551e4494c668cb7b9169c6163422c0b22f3a47806e3 -0xfd0c317e1c78e00dca893ec04aa8da370a806c8e6737e9624466e64d10a1540d -0x696ea98bdc2a2f27e56c15afabc7ef98d38fccb03dafa17bd785192c9dea1d51 -0x6645a0dba6abe4e6a39c175cd82deaadfb00e9b048446cf0312f9789c11df881 -0x2d76e3c26a53561d75fe3c5567771738b279c9ff076dede40aa72e602ef9b11c -0x009b3b924708822a6ba05026ccb8acb383bf77d26a8274ef4e62cc9d83a4bed0 -0xb707dc8fb287d5813bd511e54ca3d247e2137e6034890638d71e0e602508e69f -0xd4da0313b3c9fc27793acfaef8631f8782229fe420c03ed18bce75ae1deb68d9 -0x277331e39c39706f6e564c0ab32bc176718339cd5e5c35cb116f276bb1515cf3 -0x34bac0230dfa6ec81fc69e2b43f67f35269e879d5a8de4a44efcce779d7e0846 -0x8570d1dea9d68ff0781c3771a20c670809dd788e889eedc20efcbc44de25c3df -0xc884fd7b6457fe7b05dcbf8cdfa2741f7c5c47f03a1f575ccad2366257767447 -0x1957f0b778e0e730d5dc5dd92e50952101f37cbdeda09de3b42bfa2ec25aea91 -0x08041cc5a936bbdbb6aec3474759bde99c4250ac615168ea588e2624e5cb73ed -0xd3744092b741bcdc9638f714db476a2f25898afda0d03769c127c4cabeb59098 -0x320962f064c8e8ac935cea95fae3383e06557cb8d1aee7561a1df69e93d3dd31 -0x8fc12c8586e84ee31a3e0523dbfdccef3c6baa941070d9c792aee612e3cfb6f0 -0x42e6d2677e5779301002d606cf65b252d1d6df7f79bfa67e058096b3a2ce8f0a -0x6804cbd925ff51acd0e13d2e2c01df50a2c1e8624d73f786253d55cb2615ed75 -0x27408778f0dacba94155d672e2c78fb69a6e37e3aa9f102a42da0a52fd173338 -0xeab17abc624343e93e17d9c1b7ca63144341baf1693ef9834826c07be5df0ca2 -0xa54aa49f3e5f7d86a6c637f9bf73f53286b9bf5af7a9bb2429b20887ca8094a2 -0x4421bd3fa88d002dcb80965f3c4d7d8ce09cd1e7ed0b1b804fec7882bea995ed -0x37d5835d6193d015352c9a8f9864c0bbe79c926bee4f899b8f12c49b623ce1d7 -0xdec837d375484882876f74a262b1262f61fcafda25fb86f300ebb78b46f0e6f9 -0xd9d54a70fae453075f82805a79cb240e93f132676a829efdf3bb7d79da55d9fe -0x615fc63f6f04914b91fe8d6e466a08f65d231242b8dce24f060c3d841892f956 -0xe1a3a09c1cb4e5529150f524ca159e1124f0d969f2b4af4fdc2f6a52ff5a0646 -0xe98c59b7bf00f4e2e5d6eadb909f7fb26a6aeac18c5a8aeb08097a545231d596 -0x233ba05ac67cf2806a71cce89ce50ff777c08615568f1910f0243fbfa8596e77 -0x6887dedc7b5c070c1b386f883cf4c389df372e7af06d0ed27e5f26f74013dd23 -0x7d5f91178748f6c9912cadcca6c2bec037d6bad095818909ee190d672269af11 -0xf48340716177f9413db5296d4caf6430d9a251228a1a574153878a65fd112662 -0x77b222b402d4219ad3f681bff2163eb7364249b8a4188b85c232f3b4f5793405 -0xd4c212eb14590fa903b644b99cbe2f548ef18bdebf410ef1f45f717507ed8ba6 -0xd4fd4ffdaeaa9be9d0a576b88852d41b23f56cf50aa9e0511c19e2140fc2cc59 -0x636a32b8f24b82d65053f1a3cf5691f192c68defb40637656de75699ecd38dab -0x432acad6e69716e6281d6b60ac28a7a1e5355eec9e622721088a937b45cb07a8 -0x8dc75f8ca2e90fbe5f9e29b1881f0e5dcabc33316769454e204c161922cdf55e -0xaa40b22cd2405f0ebfdfa4146f8c7448f9e29a579b03b322abc714a1ee04966c -0xc940fab1f7aa829ffcd0de1d6dc5c1a5824f17ce5e18944ed4ff67010599759f -0x917411943949ce61b0e8a6bd22b02405f030692e747518d75e146c8615256f3b -0xcba3ca6addb088c3e92f06edc9558d97d97bd4d124726e64f41c4186fb1d7a79 -0x224bf37ace9651c796ace884319e4006e5b8d9033add21fe3bb86082baa26c28 -0x571f113a95530cd5dc97c7ee9b717e0d492eef7888c9d973d981d70bc3387896 -0xa0ba5d518af9313578a8a818d0db2b57183dc8c0e532ad12686df97c49fe0e8e -0x363b020bea637dad513b686ffba060c3ed5bf0420a6f46b3cccf038dc6b3515d -0xebc52192b7f549f2152c9075dac77491c6d3d2e6039feba85520085a7d57557e -0xe6740567cf47b0d92f7e8e9957cebdbd57ea6a72724466aed6714be97f292e7f -0x8f2708eccde3d783cc8d472768e5bcc2c5099964a4164cddcc5f58fbb6fe9665 -0x650ae11cd9ffb4270ca5ce2d33dc8ab7f69dbd235206ea348cdc0d62ff6ed1ad -0x064895880341cbcef0b4844f50420b22c473668efc1c3ae301ab9abb498937ce -0xcf3deb8e3a825c8d3259dd6f0a43a0f1586e9d1775f4c6dee19964d4c4f95fab -0xba95875b6be93abedfe4fcebb4069bc211871b178b84f816ab5a70a9cbfb086f -0xbdea5823fb212789cc7b20f802704b63278db45945134dc1384d8df2a525c88e -0x75ca49ea914ac9cd5bc5ddb955212cc0eeba9c7a17fe649715be9de2b19bde97 -0x815afc8028af6921f4ec4e262b9ccd1be246e157a900ab54a9a901a985bf0202 -0x434ffb7e843df093fab9ad4359f3469f0362795bd83ec7cedb369cb5ba35fdad -0xe35ae1d88101bf54cf00c44b87093a0cd2ab4838ee15446a614baf220e9cd754 -0xffa4c692500a7cd6b1da52a5d7354590da6496ea3401be97f71580491c96beed -0xe90c58b474b9978250e0bb6d086dafa60d0bc31073a697f02ffbe6a9f3d90439 -0xf84200907c882e86dc3680796a9cd7db032b485575250d560b7608a8afc9a5a9 -0xd40498e5bbcd05fd6ac2a965bcaa18875d958e798a4908afae5286467dfde63b -0xe36d40f8a39f2cdaa9a548bb959137e9056d5d8f19acebf3d87a125026b9a798 -0x34005621027b3f0eb075f892f673877a2758ebfe4f02ccc743106ed3606cc17d -0xfac0e6e74f34fef47c7f17f3f4e6e7842657ee2a1a8ab8a5efaa6370cc1e5c7b -0xabe85df54ac86ae2f693ecdee5d7f5d54edfdf5547159bfab21a0f7749a669b7 -0xaa3470688908f9dd4f4f5afebfbe8af2b1a4096ab7d332e507e584efa05962aa -0x7506f716ff1a145514b57a9bbee652ad1e672e130763c7b3ca75c7e16ace8fb4 -0x8f97f0399eccd9f86446b30267eb915cf8b6919583636e971cff9b5951e1d631 -0xd113d94cae787b7e998dd1248cd0b087d8f67a06f50ac16b01520e12df3bfaa8 -0xc91ca6f28b2a65a3530cecc8f1a845307e2ad639e9e39e947364a73079c98a03 -0x61901395ace4bff85a865f133e24901291761288e44ed3dc71ac4afb41693de9 -0xde3aebc49e04aa93f3982534840c8c83cf007975cacd37dbfcdaa3052d5c5cd9 -0x3ffab75733b9c51c72067b9356363a8a8a7cd4e0f62a69b71bbc7adc236003ed -0xd81ca3ea880fcd64c2abfe09e01894e347bbcce50d3993f2141a5b59720d757f -0x28bb7e5dc10dce98a3a7623ee975eac1253a845a6e99043aa140fd91affaf257 -0x6a2eed200f8db7e590db034f6d1d8359a6224ecaba7a9b44f8ae0685dd22b79b -0x678952ccf7cda072dc6a919e5479d29225e5af2400dc6a00243dbeffcf4dd9de -0xc16ccc696d9d8394fe4fa16be77132d77aece218b9efe652127da31d7c04ce0c -0x214dbe57a7ea9def3cf271c01caa6a644da63984b0ed3b38664285dae9db52e4 -0x949685cbe826a78c83767f6e2c6e379cd298f6c869f63e50c62275842a8ddb22 -0x757afbbbfe57127627adff76de5a8c4bbf32f383613792c3519cc41ed0dc086f -0x49166d1a35a44aa73de1622eb5dc2624e867d4d0296a01b2b548f81dde370f35 -0xc65211159286d6a4232f402e493a73c785867da562278f3b94950d7bac832866 -0xea6cad88c28055b06e0bd5aae19778b240b5b6bdcdf6c81e3a8f93974499c76a -0xbb8f48f0e24237cbe42762a1143ff2977d3ddd23603899057a559d172392e746 -0x3a44b4484c54439007afed3054f459d1d77826c3ef2a3c9474407ae0dda08701 -0x8e4bf337661e4faa09fd8dec927e135900df69f27d46727aaf3b5631f971b2fc -0xfb08c529aea5ecf74d1163adcf8ffc0f7e1772720d3422129ceeeacfa8b7008f -0xeef01b23817597560af8ba95dc60d8a2e5cbfef64bd12955728775980487f424 -0xc0017f305b0fcf87cfd68af8a4c2c81d80152f7c5677f310f03884cb68ad0b3c -0x84177ea1e18360ac5fb6f261444954fe54d3608004898805f99bcab94841008b -0xa0a973e23e409205923d48af25e592627e79612bfb0002e1db5ec28c176ff41b -0xed6c1dfaa284246f0e90374ba07cf2faa655c0fe99fc0c2e42b11987a9011e76 -0x01608852f656785ad2f06ee5e88c39bc07b5e46e568bda4e73ce7443eb21cc1e -0x46efb4dca9c5a7739d7e54645fc77151aa234b2a7210383b5f7e9d693c4a9525 -0x1b8b34f1f847e6de8d3b28e7a128b6681b85b4b633fce2f41141429ebc7ca082 -0x2f5c78f5ad9aa15a24bbc75745e04e4290361d35e864a675a0aadafe7623a3cd -0x7178ee56a306d188a7dcc968a5d9aa4be164dc827707d8e785718c80bc202ffc -0x62f39be1f8315abafc0a899d53ac99abca3a8a16a02c8faf7fc4bc56e5f0f55c -0x7d6346e04a77c7d9e7e0bbc1a808d3451d9a7177788b94902833ac4d1e5db97a -0x9ddf26e5cd70547821603fc0910161ebc438e6628d5c1c11da7da98dce505bf8 -0x6e98278fd704e122d04897e93dabd62c312c5cbcfd5e04c2dc57f6e8a44638ba -0x57d022083abec504c146b436070361c5f0ca602327329671a8de7d194347f646 -0xc25c6a2b82807ef313ae55dfeb9247809b765f6052927332cc4761414cf3cfaa -0xc23c93dcf1999e075d04bf978e9c2f3107d4b3203fd51dabe31a8e13e2062086 -0xa3062c8b9966c33b5093c8458836c82a62b0ee7bd0dc974252e4a57def5c5cf6 -0xdc343a1dba91f1e665986179fa1a7820c19234687cc0990c140958fc66a62d45 -0x040c1db4891e767e2d178a362bc4b74e435473f88a1c5fecae2e9308371e7a40 -0x4e5532b4b483f76794a23564e139eab4c90e64aba8986fd6833292ea2416d84d -0xb819ee94b893f39157aedf753aa8edf1d3a9554e3754425aafd1e4dd409fc4b0 -0xb8cdb88bd394de6a50a0e01d7cdafea687840fdabefba7bc41b53eaab63f17fd -0x3ef7c080dc99d294f50752fd3eedfa36b2db469d467209c28a7678921409e7b6 -0x8e6cf148c04fd5686f813365d50a1924f7d6537af920688ced271e0d0a848745 -0x18fd8a247d1eadced04ecc289beded0e85fdfad9aca362e9572e9f66d3d87146 -0x27ca1a783804b0f550bcb878f2a7a6a6ff62fe6a4142600a39166912ae679ff9 -0xacd78bd5714234f39dbc291922f82f8d312f3cd4ee397812363f1c39995d6d57 -0x456a9b1223533e40959309049fb1c409995ca0d418050bf64a916ca15babcfb2 -0xf83bd48ff6658e646ae24d7d516dc04f195af076f6f7eaba27feed3476a6d335 -0x9f87c4e5dbc203ae186ccf72a79e3cf0897ce200551a05052c405c13427bfb3c -0x6f7202bb3dd5bbd64a4925f14011b9b3b6858d3bd16df95261ee9453ccca8e6d -0x5080d5af6ea79f75c628d063b00c73aae3e146ef5808e78965cce6336f5c3476 -0xa5e2f6b865e3495b23f3acea34da3e94f66493531e6044ffe806cd16e4754a2c -0xcead96205c300cc8d4903937dc0ff79cc63a2a2d0032eae7a8e3df024fb0fbd3 -0x320f1f7c576fa3e51dd19962322f765e4e564aaf3fd94936e13ddec2e6400768 -0x04fe756b829ae0e73f85f783d5ec928292bc369274e8e4e1554001f6bcb85be3 -0xa8763363f168ca3ecb22531b1c8a968616b0df745a0a7cdcdcd118fb740c9168 -0x93cfe0f9265451d27c1c0263317caa67049d82201fbf6a1db41c031888ad7c68 -0x8a5c97f75fea73ed5d62c23ef33f421a8eb0aadd243c11580cd37794a668ecc8 -0x311ffa5e7451eb9ab753c6874ed4cf9a0d3fc7ebde306db68da45f9f5b0c09e8 -0x5abcfaefed35c975b5d8572c4da8cead8ae86b797f59573ff725b6def276b8a0 -0x8be94fb7b457fbbac8c92d62fb4084e6831d19e85d76f41eaebdf5319601ed85 -0x35b34cf0b21831d60c7f311f40aa220444aa9050edd88c279a5dcfe3956c3752 -0x8e8d23550b8266197eed8f74dbeef9910c9812ee136e3068ad1d6880f768ac48 -0xe7ae93924afbb9462308b412bb914ef2687de3087745e77f329abb7ec7b31004 -0xde5097c64a2b5e76638c513ebc25baccbca3772fed2eb45ac203034a54ec022b -0xe6b363346484f02752075aaeb3fd9ee765e35818332c8f191e88c3713c7854f9 -0xe1b790366f8177952e9bdb7b88f0b1f0d7e68b66168a3bf5bcd3beb93dec4cad -0xa88ead000862d7a8124223496ea4d5d5b3a4af5082c704fcccd6c3072f38be37 -0xcd0affc754b750ddceb9537142c50e94453de425b59d47297d462c571d11d207 -0x8a9e904cb124e22e200e8f301466f035d182f53aa8dea3e89701a79091525f49 -0x05b401f4644977d5036d796f7273d4e8b458511013206dbe1414a127f72a6998 -0x677176944ac55245d50d9b69116212883273d3cd334023d2780175998d2ac74c -0x88f8e86930bf6ff6ac6244f2187cb60aaa95c21f073132f58bfddd6c4fbe48f0 -0x863b69b6086c39adaa88d293059fc87ebe83787af2899c7e9cea83bcddeb4ddd -0x6c80321c2e74c8d1cd10e4f8a6fe2ef18d5b7d6f0e68b17dd39cff692709bc81 -0x59634c47697ac4c51881cb1579db3e59250a1c72bd433fd103148da6963a512e -0x9fabe00b9de34532376ed528c76fb972d378b64310de2e184f474591e92ade86 -0xa4d42feb2b743125f699034da4ead2fc4419cd84d160547a1164501e15405ce9 -0xc68553c5e212c659452124021f1df70aca9b736b29249123463e40d22bbe254e -0x44fa5e954a9b827223e09545d8cf43b4ab503985ce473968988fdc117432b96f -0xecccb02fc6e1c73e6bf658bd9d25dcc6014d64076420efa2851c90e1f135b7e0 -0x9e90dee97cc97a88a8ca3bdc464a1985cea1024c7892035d9c428f7d95762056 -0xfb85dba784e76b52dc1720976e8b6b8c141680682a63c4b8a4521e4f273b9dd8 -0x8c2b17d0a872f73e1fde91880c0276cc5fe3cfa80884b8cb34eb75982160b031 -0x42f5c554ded9a9fa0f3cc06d2ee01c3d4b6ef5fcb236ebe3263a1570245a1cb9 -0x64e2a2696cdf8762df596ed7bdecd6508f633d06c3fecb8bb967c95cba081a83 -0x6f228c32d7cba912577a2e5f1481b56546cd2b55d30588312d2ab7d11623d643 -0x599f13743684cae493c6ae1e1ab0e3377a64f2b478c0e0dbf424a21d01c9b999 -0xf6721eebc22513109c4f0c0d053e1acc8a09599bc8d9bd2b32435265ddeceae3 -0x84ca171acc1c7904e441b18c7da91228778cda0826bbfbc0dbeca3898e0bcb38 -0x6a194971b6964ecedc65cc0e11c1ac6a0ddbbce8cc3560e8983165f089a1b0c0 -0xcb25409ad94b39e2c81bcd5adef7ef21a4bd2306372e600aafc7c68310299fa8 -0xb9e35ca887d772db02b7594e64794bb85ae7a88ebdd9085d3a843542d27eaf08 -0xd1283d7155f02246ae528abc900ada8350d406e8eb27b8efc31c98352f9b0528 -0x3fd16a1dde08f6b0da92a683d88a9ae83de96bbbf766303553ea84bf32769846 -0x811744e65331d7f54eac0ef563b91b896b53b2f6a53d83ee0f00b10773fc16a9 -0x3f9105ca3bde02bbd2aea58bfc85492017f662c365a9eb4e0e792e0d96c349e2 -0xcf1dddaa7849449f4ff19f48b0d2f05b885de4dbb2d51f2247afc21f47c6af19 -0x69db1c0c6aa761de4d478e00e3aeeee3a4021a053aee4a1a6279aa4ba43847ef -0xfca63bdba2f1498a0c6d87c853fac43b084d2807a181ed0824bbfeb08b823a5d -0xdbf74be77b08ae54c7e61701565af69dc44863a0ff4d3ac2b844479c80fe00f5 -0xa897289769e6f2ff20249dbb7d04e398af13903601e9832eb88e639481111688 -0xb0a8da0feb121f04940182a4867e1dec94075c3187705ca089294b7f950c3b7c -0x4ced0ee9303ca1a86b6b641909086e3f8bf7d981b281b96133543e9de42285bf -0x0cb31f1b67f7167393715ea7f8db7e7fd49603d818517ef4760d23586d49cf6b -0x1674747fafa4264bf8b0133905f1f1aa1dc73134b1f6b888eeca51b30faa62f7 -0xe12349477f64e0635efaacc15edb7ef2e807311bc44c18d5a8daeedc89235484 -0x825ef9a3cb29241907c2aba041ae4149ccda701d9e37be74bc9a8f0fa5f1dfc4 -0x78cc59f62e2af1b5b0f9543fdc7f2be76602a0c8eaffc52edae153924e4a9f20 -0x0f8dd42286938e2bfd92de3e715f9f8f25cd30b84ffea4ae4f101f163a4e239a -0x436a41ab819169baa565757c774db1c902b547fa7678ad059da10f69c68a6c60 -0xe31104d720f5531a4cc85781d7b2f44cf61065675f97a580c39056880f37b8bd -0x8fe164d7bcdf02d8cf0f1eccfc78aae6a2f7bdea6f04525ce4bfad1b5bd703ce -0x9712a27984a712c747961caa0b284b8606631329b169ecbc96688907b190d455 -0xfcd84d36d593596fcde140306864c3e033b82d7d0beac3f44a1b39e29576b048 -0x4af338284c14266a11b3d7e45b72df60f0a04975e4be0d44f681fff2195fc5e3 -0x2931d02d677eeaf7e9659244675b8e6a962375b51f75235e2850390a50ba7ce5 -0x108a2a02cada9b07d15a69394f6e5050b43048e623b600db73832cecc419548e -0xfc1a99f164e9cc3fa683ef2134e3f0f225e208db6886280cf4dde62b5ac4a135 -0x542883708deed4ab7e44f3612726d28cda19ea412d8318e062d67ebf1bae4fe6 -0x3f3a3dbb22dba2996e8e3ae58c74ddf0e2e6ed37f361fb485c3555aa16ffa1d0 -0x4b6b6f45d09cea0c4ce77a846cff1cd58342a1ec4b2b9d5f2a404f4fa0e2f62f -0x96d5a8a52a925c97f7189c3ac90b2ae902fb2e8036de4e03f43ed7207bfcde63 -0x9b3698ec7368c91d8ec6ef559cb10096540462618cf92b1356edee13953332ff -0x57d7a07ff39291234320efd7af47868334f24cd68dd0f5716ee05661e2442c2f -0xcc42a24b558832d71888a75a267493e4119d57408d588c3a330295af12eb5f66 -0x93c80e3e8c97a1a8a5715c15881b5917e2d5f5582ea745756398263cfaefa786 -0x804da084fdb6bb222e4af9fc9aa6364ba612b795a50ef1b2fb20a42cda88b38c -0x3dff3fe25015dbac32f74e5e8c94530f9bbca39d38b7c85d4192b2852cd7638b -0x2df2cb9c0014155855da3a81dbe1d68392b5b535cc531aab5e74f77ab466d966 -0x33fe3fa5bdf6431dc4216de876585ef92c8104f55c3fa220ba721a4afeeca778 -0xdaeb6aa9af07eb980ad7b587579fa10ec311ea6cbcd38d743770ebd04cd77de2 -0xce91d524fb4017fe10542778d339eb51e677d2219f52b8b3c8db1ea45b932651 -0x5f2185144080cc5a1f198972ff4843d660c7cec36db4789cfeb308c2de42a3d1 -0x1120d7d991002b8cf5a752317db881db2fd8a07bc4896c656c562c7f1ab2d0de -0xb8ccf569895197755636fc271f29274e4036c97e6674612cc073e2a4a62c19ae -0x1e08846ac76a267b577891ec04a0e1d979f05b36529a2db8a5435a0f82962434 -0x1552146e3f408d0641e1994d17cd8346312a0142b99b8d035a70b22f2f8010f3 -0x7005299b54d7319d2642954f100142c9def957f31135b0eac12e0ecf2876b247 -0xd71ce036b6e67f3f991a7065e999942819cbc88ddf9f6ffed4b9dbe3cdd5d888 -0x2a3f3d2fb18c1d9d4d94f13a073e43d5a50a72a98b2455acedddfab9617ac53e -0x81a779335af621e533b5c6ee69fe2dc8ef5d9067b71d2b7e0ec31517e86a4c79 -0x5fae9df1c39cffeff1b16b4500488a1cff026958c12c118ce95a974ead4a89d2 -0xd90ded92088a37c0bf4b2265d61846a766da5cf1b0da854b76905279183cdf9b -0x3897506fb9910df398f820e5dec347e737d27701280220d4fd048aa4a2653d51 -0xe91893a898431cee537f7fff7c624ba6aa6c4b7bbd388e3f6d15e171a82ec73a -0x3c07140970741729b9a45d333011e53aff9e95903a77b54d1e13fa9230d0b636 -0xb2d881ad433a9233ed7f6f4bd887f12312bef112c1b74d949d802ae5d1cf986b -0x64630bb197d4251a8aed88d41c3c530f4d4b5dc94b1fec3e5cc66e9e977cd967 -0xc92d720fd9630d4d2d78d6040e2297a3fbd7dfa6adcec6f1cefcd78502e4c542 -0xbb930391fe30384014a1b02418d1d6d8db1627cf59a4f911954fd1c3ee2fefb7 -0x66315944c5c4b08fe695825850f6137d5eea4fd999d28614f6e028b7234dda49 -0xb3f39002dcc9a940cc7d99822f24c1a9c38a00a1f35d2b921a75f8518375394b -0xd87f6424ad9b82e68451d3fce6e16135c473528a72610ce32148f07b5ae54395 -0x7f6a6817f2059ccc9e541956804fbc67cfe777e7629c9a9d3d497be9c371f53a -0xdff791ef87e019be829882d4de4cee9bad00947c8da429977948c700dd142682 -0x6efb7d98bd49de41a56b14fc95735202bbcf45e423350cddafea7f3ab97fdc2b -0xed02acbb58aab31fb900af80b9c7435b2f91ac002b14dbc93284ca4d25500b88 -0xe80505bcc0141a655e7ded6c51c47e4d7fd23283e0ca059a163d9d3bd4fa7c9b -0xa39c73bbfd200dc4185c6f28c6c322d3881a2855810aaa25148bae7d9cd35077 -0x3177c505e5b29f2af363e340f2bbd73a587a8f8e7cc894af7a677b7e7cf7bdff -0xb911dc924d5dc6a8075ea9f4a7859f5b0d5200d1bb3e5db49e253afbb4de50b8 -0xe86addd62fb6f1494e7ca4e8f23c8275fbf6bdf5dd64b5576dfd3c226c2fae9e -0x81b40ab34a30c77a753f3f6554e7fc8930621a4de49d4a076732a902011696a7 -0xb9278e877831bc09fc57de30019009aed07e79c36cffff3f447627b17b1baf57 -0xf952ef7b36304e803ca10177184a8e147eafd5b306bc3ced84ec0a12cd2cbc95 -0xdc46747a39dc049d043f0a47640d1db3ac14f28829e591ddf14af9be57792763 -0xe5cb6edfe6b46a691df3a23a669974c6c1ed7cd192c55cae39e5b286153776cd -0x57774f99d0cdf6238e318bee27aa62189c8edb9dc06fa6a17418b4837ca9617f -0x2fbe67f3ff310bc777744ff4e947e0595a1b1e08a009972a05175bdc0c78c1c6 -0x33d9b9c01f17d05a391727fcea1d9ab7a967e3032963976d08415436dc32f195 -0x5f1b369a8044977fb89697ee0ae062f820ecc1a57a2cf096c02ee5e9a4e3f075 -0x13f735c16c5fad8f878f2840e17e9eb172ee8ce7a8a67f119ebe3870f0b61fc8 -0x781543780c96c4a83050c734ccf43226f7bcc3f7bb8fa1a141c62574a3cb1c29 -0x917b897662cd30635ad36d05145bb815617a8b2d171cf2f42d96a12d10272c29 -0x8ad6f430f2068421a86fe41e1a5978df4f4beaae8be8dfe308d06b6a6a2981d7 -0x863a1d24d88fdfb26b97ba57b27a730c235cbbd7ab8d0cfae9d340949e30ff04 -0x858185f417a6adb1b531ae94f89fe2d36f18dc277f5a3a700a4100f9068eb118 -0x3d0e4ac3f986405ba69aa6139f0d55fc4c6a5f0905e57b57e317e964dbccefd6 -0x98aa0da7bbc1bc1d85e20ec3be31a0b3d73252e8b65f6262517c064c4f2c3123 -0xabc5ffd34ad2753234d32192fa699b7067bee799d0645da59aff4f042d513e1e -0x3b809121facc745b02825002b78a6b6bd8d7abb8e8ec420982bdd2b4ff3b75a2 -0xf23a28350551fdbfa281de436c033f531bc8c88365c836e809e1a36b969ef96a -0x652ffe0d1ad4bc6d44302fdf92fe43c5940c60f760b328cbb239f3fb404ed7fd -0xe7e7fa2d17d2e0e62bf77faa8a7be56e01fd0e33b57932d9c00db62a2624e4d5 -0xe220594ed2b0c90371d081d3ad596ae28e01c9919515e00056f6bf02dc53de8f -0x155fc88518e04a712a9101d1b786c80f49974f6d75baa2535b98a6ee2f7c5f46 -0x89e09dfd2b6c5de08489ba817aef24273f2f017731696620e7e3eb517ca40b96 -0x95bc4b3772242bb2ae9fc4bb88b8be81d7f358f4f3ee914ae50636d4227275ea -0xcc1cd1b209a7b5516a1535fa883e3ffbcc3de60398faca25eda354b1d9c29977 -0x507546d5d0a9b5cc3a5b62fa1abd64a94aacfc7b9a8c49d5912163ccf7156729 -0x183b7f10cd3f0fd8a935ba1a75b53e079debdf4bce9bdb4c88ea6d5643cae59b -0x434d245061b6c299d2fc785b44878c247f401871f99603a0b2eb550401654d08 -0x7afd57a4b54651436a43e68b88755fd9c9b4b8920bfec9327d9103efcc9cba07 -0x050ce8e6e50ebaf7c32f6390b6294c70d61cdfe2f718acb6cff2bd268b828366 -0xc0c7f30d8f0993945092f9fe933524b86eb68031336e0f94bdfeda09880c0e88 -0xf9d299b6c76c8bc5d4657f0ab5e1f5740ad9e089752b4e5e35a291c12d292092 -0x1793fb69c6c056e0cc8d6627d5e8e8f91aa32d6e50d6cc74262eee5ca29d7d74 -0x199da9a3d268886e31bab87154d4030d881aa61ac3873a6889a376d7c591cd95 -0x3570e2e45e5ac5742e8c648966ee791a02e9ac25336bd66419ef8f6daa4dbd00 -0xe2fde4919246f95317f4b85314e4ec9b26c0ba853eaaddf4ebca8bdbd68c517b -0xfe633042a5ce7d8cb0b38067cb4e1244987f05ddbdce6366f11856b780762ed3 -0x958eca42d9804f1feb53e4f07e0d1b08d2a19aab1d15f1b460120c2746b360ee -0x1cabb0034b4490e4dc0774e151d3cd9a3c710c30cea88cc31945da77c3db7a66 -0x38af2797137a78c708e6c61d9e4e0e83e8085c8c28f63590c07436404bcb5142 -0x98f25eac1c0dd4593eec72051b002812981ed2be5899bb5a8650c51687489d82 -0xed3d02d38b194521287be6797f1d8ea5d60618246d8d05e693ae3deef068a53b -0x27f52a446c2a1a86cd317077737e0cd691ed179ae86940963da0e4679b513f71 -0xee904e8afecf592bd82251b3f952c4988803769c78d57a398a11f5707d0c2707 -0x060e681631fa6d7c4749266949938095e3fee26ff58aba656ad2d30bfa10ab88 -0x7edeedbc6f33c3c68644f0b13ad570c596b503bc5d8e6615e128c03da40924bb -0xc4728e042b324e54ca5b85a1155f0c4d7a4995295b8208985c8abe02a96d82be -0x0b766d018603135c1131f2dd60ef8951ee8952e6e78211666df10c0d4137d0e5 -0x4727dec1a8d96d4d6e9f78ec3e0e16cc23ecc868a93757545c2a31633b7ec93b -0x533b43a09fd1c777941aa58eb7f31b1ab1846becf5b534decbfe5082d0288e55 -0x731c08f3fc7b7ba407083c3c043896a62f07ce9993ab14038ce1f19070c26f7c -0x6c8787383d0d8c70ad66ddeb4f8fc2b9576d07c252054048f7c721e5c46298ca -0x7288b1e38cf7e6f8a32a763a9871d6aeadaefa00389b63b128dc4b0e9f07e8e1 -0x2a66dcb824a537a18d64fee2bf0383144654824ed3f2f2fd7115ec5100043dd1 -0x6abe64913537e4823f6c6e15a00afb5eff21cf22701326b55c04a390407c7a3a -0xf657c7a53da94be1d6d7b23ebcd56dc1625e183dff1c7d0bcb887d43f6603eda -0x071863ff7908b52ccdd5f3cad9ad424fee20071a40b70d3619f42af294c91f3c -0x582babd1deb7e03d51665e5f02fdfa0c6ecbc575d3caddce644b7736825f11cf -0x8f2efcef111613878f78024a89f0629b27277112907542094b93ba51463437eb -0x646f64f7055100d34f6a1f0e15a558d92ce51d7045f6ab4fe25ab75130984135 -0x1dbb51655513f0b6a4afb61f8fcbadfc94332c93170751cfffec11ce2d291673 -0xd83e2f9fcac0bc6e7fb9a16ad273129405f7262b5b4a62616c9e19290b9eb23e -0x610921f132f0c3b2b97ad5a70bd0851e12dd1c8ffe5c007a5e289a00f7a03d21 -0xe3136181ffd0a8ac0a7406fa519d887799c80157aae46eee12d75334d8b30f7e -0xd8c0932848137e8e736f4e0f5f5f3d322e90d58e493967cfd7a15a05427e3536 -0x61589ebe8eeee44fd14933ef368e885bfa3fe193d4f25fdcd5469bc0a5d567bf -0xbb341c5f5c9429cbed9bf9439aa08b29a3334dcf3db87436152aba5c3a8623b3 -0x9b4dc38c6a83b292f41531f04b38fe699efc2ec800af7977e4051422d549bff1 -0xcf73980bc5e2922581739623f52d5bba8b8bf4d14dc8c340806e86625cc47ca0 -0xd032789be605bbd53cae473b8ba6e9dd9133761792a10c8db29fead30de4d22d -0x925f39483fe1f0e84ac60469009d5ab57802ee036d39626404265f00e6370d4a -0x244987a78b10c9cfd52d3589e5fc178c69ae372cfbc3c3ba80ccd2ba77661e40 -0xec31a6b4340bc0dc7f6396aab2fab84caddaf01c185f6d6c740054550eb03799 -0x234cf0ecb69882ef2a68f7fff7bfbbf865080b5707fe720799cc3f0a65dec0ec -0x71b25d0eb7f1b80024af90e7a443d422485f024c908e61e74b7708b6e8e74175 -0xd3a35dc2f73a7a4c9aa6326a0945831b41934023411b8d757fc39d78c2eff8e5 -0x9d515b0e85db2f87155f3bdcaae9767ef68a645697a30ca3f36a0858477e864a -0x3aacaf0c75cc1b5476b1657a6bc50f7b46f595ed49228c662fb0a5afa548f9bd -0x319d778606250746d5c38fd253d10599325cee772646f0337176dffed67f054f -0xc5b065561942a86331df6613cb54b027fa180a11c2bf7c5ff13cc3a8529c6dab -0x62cb1224ac3b89390c18d4770d27d6025a514ece50a8f1281b45eb7ca073d9a2 -0x40f2290bd619e4bc51be8875ad05544c6e621fbd3c5457656465c584a54a6f61 -0xe4d85ada9fbdfecbf41d81201c4e9e2a2b74f761bc1fcb2ebee613e3fa5bf19d -0x90ff29f6175bcd84a400af319025acd6fa6860891260982527394b5067a7aaa9 -0xe3f7874407ae6a2b35171c59bc94c3ce84a17a9975cf08fb169f49c109087a60 -0x847b5f4e2300c8d56e65538b7695d5f59e81a51d82c8b164e0c77722a5fc2dfb -0x742b4947e6d34cfb1fef5472ece95e30f15bb7bff1430c0d043eb79c8fac5fd1 -0x9802f5d4516752eae4556080ad69977ccaf2de746fa7504da42cefd5b49110da -0xbb009e13bdc35f54be495e3c30bb241af5fcecbc98dbc511a9cd227836636a37 -0x523e0214a94556e7545892e6096ca4e75cb401bd698ecbdc701e578cb4947dd9 -0xc5d6f5f51234da8dffe75ca8e47fc189393430b9ff88e02f1b4950c82879aedf -0xcf4a70d1a7cd39af09a124fc3c0a54336c1c6272721f13f158a7c0c093b01099 -0xdd9414325c00eee85ef9329f45e3fd0db8169401f8a4d2ca7d8f1067bb7ed0e1 -0x38762aa39373688b0791525c18e4f8b196a7e3e07bd768e87ca481439be4d2b2 -0x4ac819251e52bebcb1d375e9291a80243815d4220d744f4f96afb13dec97013a -0x6fbafb8d158c51c3c27aee3bf7f12ab639ac6a624327bc52866201b3cd6b3ef9 -0xea13f04a956fa89306d9fb126652c80b6beabe3c468f3171dee062f00c7cd65f -0x1bbd5ccd22a28f5601190506750bb13b9043db396df52c527e19b188a8de7421 -0x201e0396318e1e1f317c61d3556f28609fe59c2bd7d89fb077666e7b83930370 -0x9e0e90a288f58191038896cb665c4292b6cf356599e9d7970bffe0791ff52fe3 -0xe543b3d4cd25b52afbedac3db121270893c49f69214bdffa4fe737a85c907add -0xa3bc491695a59114dcff432b090c250685c119523e3d834dcda4b9fd827a96b5 -0x4ecc2592a85727a0bfef3b217a75110c80378b3e48998133edc9cdca48051d95 -0x7996abda6c4efef55539d87f39e8d589bfcfb964753870981a3f297f8004873f -0x92eab882718f8caa11334ce0bb7f938e10b260710ebeebf0db90abf18e93cfc7 -0x9bf23f513035158a1e15a22ea6df182aaaa4f73330f43e5c932f76f8b4640380 -0x33dedceacc6120ff09267575c714a36bd4709bedbd28f591c77647807e93f134 -0x30909292b9aa1d42d31e2e2cc5f753050324b73becba62e60566efe3e10f19ec -0xefd4161bf41c5c742e5b6760b10ee3668cd3763b1457ae48e6822aa8a172da04 -0x0d0df86cee892ff61d2ea42e51514dd23a88a9965f7c59c685390324ed38bef2 -0x08e3354cbfc432200ebbcc4d1ec812440a5334bbbe6446ee1844f62055050ff0 -0xa57b09cc3c1e568d09fd6336544f03c96354af3b9d61624daee47f07cd12dc83 -0x3d90d346abe7e1847f7087336232c48e5a063518f1fe0466c7b06b2b904a9c35 -0xea6f138d7c3cddbc406ed1ed27f25cb8d6b04a226e5624df3aaa9af6662f950d -0x28771d677f2bfe82b4ac1e984619291c801798af922e442d5bcfa21324c8acb9 -0x1951bb0fdac9035f277d759da8c7999db1035da40fc229aca6d239dbd6b56cde -0x33169573a80e046a836d4b3b043acb22754882830fc0fee4c438ffb3317a3424 -0xf0418f8920a380f1625de49d25281c79974e005f68f381ca48bac2b7b7ca057c -0xe202de8caf08cf5f5d746b1b04b443df03d02370dd164cbfb16703b4d35ef0e9 -0xd33fa8756181eed2b8a465ae033605f924df614d24100369b92b3860422bd6b3 -0x2dee636cd71265579379763583f5df060680827d880debf5345671bd691a290f -0x22f0d9c4f581a59f5312112475dba8c632e6a7d19d5934d320e1a41265d31680 -0xb34b2e28e6408b5439710fab6011628406511cf39afdf7ccd8cdca0964c1e33e -0x589034e7fa6058c07096fb6d91843010343c878c759a7faa04c96080f0c79f5f -0x10f0dab5eef8b5f417da41445d7f78a1b6cab00ae350c19f19f7e86bfb4e6fed -0xe422d112ab8dbe33a2acb626a71bc1cbe9a8bad8059f3a56f8259fd7814dbccc -0x4ca263b241c39567e1c55990d3c03d8a66c1970ec4cda6a16ef6bfd68177dd4d -0x63cebd4a8de9ad122c3f43146f7e8f1801e6761dc15d2526e8c3e3f8dd0331f4 -0x0014fd98bb8c1654414b37d3a3b1393a4e7a3bcd4a0370662e799084d317f9df -0xede515b1440c2474c46aa942baea96bb7a7e699d400261dd490c91673ded5d65 -0x22ebe37f858a8c3f9458dc69ed22802671d7e64931e5f73badf92b353f50cd23 -0xbb7af82f9eaa9f3ca6aba92442c99e30ab03cc795746694779bbeaf3f630cf6d -0x3f8c728da7cf1a1b646934ff592eb08e161103c75fbb3fd56fe676de7189d851 -0xd40a7fcb8f98b7af5278f36095380a5ff6376b8775be3afba20d72bd58dcab9f -0xaf02d7ce2320f7cf947d40c10d248c2ff5fe5d73b75d099275d343ca67deb85d -0xeffe225dbb8b63f8430a89407e84a984a8ff51f15e71de76d7289abdc79d7ea2 -0x1191ecb9390c5b0cc8980c8dff412781bd659354135701aeb0358f4b573389f9 -0xa48b207c193bdad920b6b0898d0f574bc9c9fdb308550c7e4f4d4320284ebb63 -0x4df08a1df6fb513549db02eaa98dd3206644251c805f9214767888f41d770b38 -0xc87c2f8f771150890999034b3a7a26a8e2cd6a5e80104a2959cafe428bc50eb8 -0x300a930e3d65a1e90a4ec82c049d84f59295310458a59bc9ab431363023784c8 -0x2804e890e8deb33d5eef7b93cc3ec7c91fbcbfaae2c0ea15144fab2d150ee640 -0x07d3437d7a72e0f9ecb4c94918b5693da8c2be5fddcd52200ade6b53cf9f8b44 -0x015b48bd85acab5be1a7bce080f6563ef2ff0e43ce2512ed3156c9759c42dabc -0xc698bae70572742f8bc6a85e1f22a9ad4702b5145149b6a4eccfffe2d05c01b2 -0x874d586cedde67503341fc0859569328649902b0fd1ca20e09aa112625f59e9e -0xb6f182a80414f6f38baa85ea1b5e84ee2e7f814cdce912f519803c6a09ce67cf -0x8a5854171643c5523ce8612a431d411dfd9243859de7355b0c97ec0a656f53d5 -0x04db651912d3606f7b7c8fb37bfa503b6ac533df51a8bd8a362591972c6cca3a -0x7f2cf423e80f058eefb84680a73a2b203d36e9297bae71eeafa81e6bddc888d9 -0x19c5c7209f4f3dcee1d1cc7314441752ca32a897b5109eca4adb233961de5029 -0x5f2831a502f3b5f62bb5dff2eed0273d08cd8a766f42b67851ee4253b217ed6c -0x93c3f2c8e6d3f1879ae91da9de5729b65cf9ad37174b8e67dc4cd4f005737491 -0x278b2e16e3c08420e3d6646ddfc2de39b5d26ddc68b960916b56c81bb1c58d08 -0x6ee2e0244fbc177754912fa68bd23f99b4d75054334bb9ca1c9ae3da452cd0aa -0x6b9aaf0f105435f1974e65a715279c1c8ff210f351782f8202046efcfd80244b -0x05053bd882202de4942fd5977fb981fabb378e77ec81f7b121d9ec19ac53052e -0xb18bcaca994879b957bc3dacacc12ca58a28f3abb5a01d714aa80af6c536386c -0x502ad5b628e15ada1b08f949f10a3d29b3849618c637025120b81a7fb40b92dc -0x1c13a0ead6fab1d520fe2d1eca5e9f2c45e08a8231e943ea8a113300a56a2196 -0x53e3c3eb24daf04baf131d3c36697ea27f4185dc1ac86987828134786a661d07 -0xff441a631c44a20f0eb4363411ac42271c9357782d5b08b15a9163442f56cdc7 -0xfa201bfad51c1dda656132f53a0c30f0e1ecf319d2926b91251e77c42a800e3b -0xe8351dd4bc3e38964a9908a1b87b3718564ba1f3156e5cc73ba6f1a7b241f317 -0xcbd6ffe660b3a19aad40f68d4f0e5117ad2bde73e32298040653abdcb5c8efa9 -0x7b6451170fe05c03a4fdf57ec9d1d848530b959719605a8fa0770e3eb7b188f9 -0x06de5d0d0d7ffed3f7260b40a1ad01d9863d9b03ffebcb5a64ae7b7bcebcb782 -0x9a7a3bb35d232eb265a23ce200b39032aef2a8ee23b2c319126154dd4c61c97d -0xa92348db4531c2b47c868f45a23dd0c5e27495d1145fcedf4a5ebe0205b881fc -0x8cb8055bd5b5f925ef9abdc1519b07b9e840b62ced8367abc6bd0c21361a897c -0xe7d29e91419b494113691156b4711a8ceca18d2436373e807efbae5b0936f229 -0x276636a8e5ae50952e1cdd1c9a4c4b3a8ee8a7f089aafacc8e769e453277bfa4 -0x232a00b6250a4c6bf0ccee2a40a3c65bca1ee5f9a0bb0b9ac5b53c9c5116fc69 -0x1874cf744c7381e42c4ee2cc52192a1b7c525e91b917872c31f3f3c3fb939987 -0xd99ed9865a1dc5e37c58c4cc4f2f50ea8e37ba61fff869d7f4bc245a827f7bbf -0x78106f76497f9463559ab8f4ec1c049c5320b762ef8e1c892a9330ea4feed40d -0x72084198a26ac864211f227083e25c44ea17321e726967d238471186b6b22e03 -0x4a7b57f4051626132d059cf12b83f91373d2c1fd11d61b9935e7836235c3a3c2 -0x26aa046fa572617a0af2fdfdc9374474e7f00b0355cb3bb78b5df502a945f035 -0x53004276be27c93ee386d2a0b56e446c1889a2451061610ade714616b1b68574 -0x2f7dc922b96a5cd9b3d3524dd81270dc47857509f9b062cc3ef5d65298d75285 -0xcc41bd3c54067fbfc69661296d69937180df354118249cb8bc4adaa7bf7eabfe -0xcdfd565c93bb76a4f4daa2474cef58b7f761e0712fedd8499167f1847f58e4f4 -0x59250c637067c7872be6458d2751dab5aee3f8da0bcc571c2827cf5d148404f6 -0x1a675d11ac1d2f4863148aff8fee8347c87fe18beb653e5cb22191fa0a90452f -0x72046a0ef882ec08bf55d0afd64f07d13e09f7797a132088a568a2b64bef2a8f -0x7bab9ae8914eb5f0882edfac7b105087fc95a92db87f8d1d047ef0e75040908e -0xd96404198e467617dfea2e8844dcdc6e2596641d6614a418d468e24e63f48106 -0xafb91fe35456c08e654caf48435db491b7d75958c44ebe27fe9bf3a463227822 -0x23cbf15e2866619f00a14d13b17d03f50ab3fc6cc1e711aad31b28aec712ad4c -0x72ba37eb441f9e076dfb010e44f593a961babaa77345624d343f67c4858e5053 -0x58be186ee975c5a8aa271d45f36bcaa3409de841c3c959e59a34a1b8f94207be -0x0906c32a9092cb8e28ea2e8fef6e696cbd79807433c0dd142a791213ebed43ee -0x8fcdef2291619674e2b0d1040daa3d46060de77696f63974b4a3f8c3b3d3e953 -0x2f03c7dd9679903aafac2e8e5370c25320a011e81a6d5f2f9528eefaf733036a -0xf51c406096546fbde1bd8df3f9a54448e62bdc20f52ebcb3c9e50ee18cfe7536 -0xdc61896f09761b966a9efcb57e5ee915c7d07d7337bdea96f7f09f05b59c07c2 -0x4db6928fa40ed5b8da8611e1001ef0cf6829d135293b86bb261a2b1388efab58 -0xca96e668b2d27ce22a2d9dca1e0dcff069dc032f3d15d3f8091f0631ee4c2703 -0xb314f93797cee7240b409f3415bc9b41632e6bbc20cf9468d5818d7465a81d07 -0x6a8545b73127037cef3ff546fd3c3c037431b641a87f34e6c85f28843e41712c -0x6409cea9df6e0df84f1dbca50ffbd7bc0913ad5a44d0c8210935e6a38f4f7a10 -0x346f595ec98a674ec9c8c686e23fda5e8c7daee621fc030b188c890dbb880ed9 -0x734d87f3d52955790ce874e92fdee6fa9a0650b0181e900e81906dfc4192176a -0x018f138abf828a27748a6be48dd110ff4e94d0cefa49d87d013e97ce9a5127cf -0xf07ed982a8fe4b6f4aeeb787ecd5ac11f5344d047e85a33af5784158b6046729 -0xb03bbb77aaa9db021a7551ea6eae2a887367598f5c555a1a0a81c94a3b3911cd -0x145c62f24cfdb391ade22cd3f3d872eb1222ed802e6c749621d700116987a9c1 -0x3f8347ef04a3789a71122c796a468a792cf5c9e6f6baca3b1f53f3d3712361db -0x8d402f74d12a51d5bf8d3b6834bbc913a7ded79de1adc729d191845501ecacac -0x5f9c9fb9f6e7e70bde3874b832f904849745be22aba017df31bdce2dc034d8c5 -0x8657e05da62b902c19be1140f26e67a85c41d7c1e6b6f0af374fe22f8a081e43 -0xbe83d793e644f11e63cbd79945fe49614b081590cfe9590490d97a557f07f382 -0xcdedc13d875db40d98900cef2fff96db40688ac9eb9ae001bf5102637fdf0e2e -0x470fb8937ca20e3469303f94e516e0024507f415d31991f1106c7862a94c3366 -0x94e0de1bc0f689a6f3e61b1c62a5b7ca356130ebd308d69a5717ca609d805bcf -0x693768c3d3c2013dd52344b2254a3074c205a377a003d54932bc04b91a344dbe -0x8bde21dc66068d2381b912999d0005282c214e387c3ae67f33795cf97ad30805 -0xeb70fac44449183331df75c144592be57f07ed22ad8437602517b5ee90e6d34a -0xb657dff9f739938a0e32395ab7557db7feda6671d5d8d902823a8812d467071d -0x83c0c385588584dd4bc4852c6448ba0d4627990cba9290d913810ea987a44811 -0xef852acf5bac0b9c5f1796f20b3244805965849566b37b4c26baf45571d7082b -0xd3e3028c7d4e96661c88cbd44d672fe790172c4fe46d000bdcc116becf6b42a2 -0x923b00e3a7b4ca63eb63cde9f61c6bf6a8ac9fe40774989418756df726fdb9c9 -0x150a1d81de5e4f176a99ca7bd897f79ab4be3bc4ea02338f4ec35621d051a008 -0xa0b9c4e0d12815da620b80b912333d0871df73933f973126acb13e68c7fe4978 -0x1d4e7386e2caf33950d1ab983b3ed9eb406a7f57eb63d2fbbb3eb7ae76b8e5d0 -0xcdf9e29e5584102f61d35731ff5b4453a061a4c9318735d416d9b8646632dc81 -0x8c900b898f3d956a18bda8586ab853949ff0f8c8af727e0e04be6287904c04e5 -0x3a0b08af8f1b3d459a9c59e2a88e3f8d8a9fc7ebbbfe725b524adb9274c3f6d7 -0xe40dc90d1fad1591fb4183e1da20bc047bf227fc75df3480674b1ff41b99f178 -0xdb708820302ddce0f929a6cc3db8e37bf27c096c96eb58f1fbe8f492f21167b7 -0x5bc4b488bf4808a9f8eda9e8e9e6770f3c128621f0eec9e79fec05530df5be6a -0xa959dffd0b32cb50d9359c644a0c5cc2d8375ec8b9bf5b1661b98b18642ca875 -0xfeae5abcb97b2d83fa0065b96eed732c03cce13c16a990755f21d5969723b6f2 -0xa289e219836e2aae0c703cb2a487baa0541c88e191b27fb2f68016fb3bfa5202 -0xed62448e161a37260aeb537692862fb6cdf96203a4c7463baa9503387b89c642 -0xcf3bfbb8d645f0c9fc0bfc49d47609f6ae6184050b2b8f08210243ea3fe34fe2 -0xcb4440ddcac4f3fed60c02fc2110b04d31a3cad7270665eb0e2e07f331af7d5e -0x754e7c8ba35b9a5b4a5f0b2af30f84fe79d4ede86e5fca10723e360aa61e46dc -0xfca43f976c36f66ed1bfdf4f3e683cef9a3a7ce34bb052af7ee640a31e9699b4 -0x0f5cc66d1cd4d785a60392d70eefd870026a7c943ba2d1484a43732a50ad3c1c -0x9fa5a6f748da1d5bf764a2f44ad3800b2e9370c314ce726f95ed267a4d79f699 -0xc580dbf1b0e35a42610cd2cec483b47c9addb8f0d751f2acd970cd2782c26ca4 -0xf1fb5df0e3fff2b2a096c9ffb7553268643ee1730e7da479bc3221153c11be4d -0x61cdd3d9ecb8da32af1f8f407158c673513950eca875f5dac2f0153d0cc69b3b -0x5e0eced48797d2556501b2ce80881dd2026b8ed674e4d3ca9260b205755bf8f6 -0x4727ba4b1a3f72a6688c39c78d45bed8559100bd1b3392cc85e415ef89239ede -0x011082ba48b6e434e57a82785ec5523aa6a67b10b8cbbc6e6ffaf5f50ff6f8b7 -0xd328b9ca674653d01b0829adf15a4a412a9801eaf423eb083b67452b3243875f -0x02253e1995ea0faafe4f0c26bd61d38f55984e94e77c8c918b335fa63f21c82d -0x1d37c1316e74facbf660df433c59314e4da3f1d94d2f15f9b7f2f226a7ada65e -0x554d7e014e5630720b85a666ca67269a9587cc4fa91ef5fe5290aa364e1f6682 -0xd5ac11e1eb27a0a914e48418e1b3dede279f4430dc9bbb5f4a5a387627263cce -0x9c17a436f0627ad3fdd1c4d6f3102d50b68676e518726bd8185a4f0d606d6a2c -0x1c3219c9b2ba23c50866844603430ff4683c3d1f1640bec1382956749ba59792 -0x8cf957433ba30833e423718ee47c874744bca5dcebb5e5c47e270e2497fb1b6b -0x14f82f8806cea5a6413ca5739556bd2b08f39cc78b2418abb40e9b4d560177bb -0x40f812d56c9abe1193b6c06aaa39786c8e020df6e58028d39e36a126978f6ec9 -0x6bfd2fc9e27301c8eaf3c64bc338cb4a8dbaa7460b98ee5401ee5ed19e8a2e63 -0x0b7c4f39e82716f06c471bfc1120a845c7496cde558b0ea0173ec22d3e89a2eb -0x10f999a00613c9b3aa5e9e9835a3ef9af0b02e904339cd705cb5edcdabf72af5 -0xe6e228d5f50067d8ad5e8542784a0a06889ac378f90fc5889959f49a20778058 -0xe43553fa6b32121274781997b7cff48affdeb6aa7b604215daaf0919973f5985 -0x148a3f5b8cc8f681fb73a8107f576a4609f1ce004dbe7de0f304f1fc9bdb8cfd -0x2c08dd298d8bb17edcd0b2958f1e6d2e5d61344f740ffe8d39d5dc2b319aaf38 -0x533a423533f8d0a8d933463410e8002bff1b2c32d2bb6eec4eaca84ecbb40dc7 -0x0018635ea173a8d2161861ee8f5c2f2ed89706f0dd49f5fee3e702f3bb3637bc -0xfa4a04fb56dde896bf0f3d91b93dbb2223f32decfd310b63148fb34f54ff025b -0x6b7274932ed7e5890b705dedb6d527647d311dd9dab484340e57b3f839820ee1 -0x1551f9169cea3d334848c460fe2d493954f17b7bbf41afbffecbdd299c647301 -0x4c1e72ba64b1a6eb6e4dea76bc445a6b1f0abb9c7a7fe94e12271c3f4328b2b7 -0x89529f091d0c18e79df282c3a0a763fa34836ff2ab6234bc67b34cf90aef6033 -0xa2178f1681aa63ffbc2d1cfa3c5ae03590bb5d51dc0723d81f3f58ee1f2a36d9 -0x9e4acfafb27caf39797cdfcb6745a54ddde7a689300843e6f8a7ee3ca17dcd58 -0x669be975a466f428d74b4d2d293bbcd962aaff5627126c5063af0e6c2529fbf6 -0xf591d7299048de632d4950b3306cb62fef33e79669caaac14c902432cf6792da -0x405d8432c760528b8eceb7c4dab5507bc6128dc2688dca6d94e691c93af2a6cd -0xdd82e665ea8e5f11c29c54b14048ef5e12ad82e2fb937defa108b34ef868ac49 -0x76735ba992fe1ddad261d8cebba3eb056771f6d661a15eee3a3135cce602ac00 -0x07c19ab33c04b1400e1670b1dc34f794a2cc8f557810b252d76d858a49585572 -0x3ce632985e77c3de1c673cb18530f4201c70c0cd5cc984b2fdeda14c34f58ad1 -0xaaee6aa9aa3d0b88ee10b27a1ad3542cb206ce40d0405c3b49fc09cbbb33e66a -0x1eedd157f061de4d8ed5b467649167b9dd0485015d3c70d2d8e31573611cf727 -0x74ba5e7ac8af821c668a4637a79258a82bbe2352c515cbea352f9c1e791a4f3a -0x9a24e95dbea55299ce914ad5f8a14b2f49018e31d204999c61653d8f294eff1a -0xdaaa455e17db2ce482840ca770bdcde3dfd5391782818a0433da3bca9be4354c -0xd8cf5850113103d8e5c45bbe1e7b68f709e2cde4697e667895d5ca4af812ec98 -0xeee099c076e266ef53af54316bbbbe9dbf710a08d090500c79cb4e4692b2f751 -0x8e19a52664c0c51a79ebb6f7fabd9f37e780d085ddea71e8ec42106944197e0e -0xf66e962100f9c36c6aa8c142334744e1561817862ddcff967bcfc5898df047be -0xd9694b54cd339773ec5a5164a8887f7ff14eaf36c2967383a051cd9878ca333c -0x2275440cf00dce988f9b353e4e3119ab0163acbd9b815633121765a0f35d56c1 -0x26c0dc0ed3529a5f506f5081a31ee728ac970df78229902e2e0649e9c44bfe27 -0x50151f57ce5793a517e83f0ef6969bc4b3a72cf3f295597fada68b5de082fa04 -0xe8bab70db5487565d6b69c225f60175e82dc62ae197b6fc5d652ce1e153a1dc2 -0xf74a679d19dc109540295e68eb81dd6402f5dd28f393f6a5ba38eea31dfc14d4 -0x070feb754933320b07abd430f1c66faf7af0e226eb100f78b5750e242ed6cad2 -0xcf42b72fb3bab0d4b36912d65944711993250946e708548713f94be76c0c1160 -0x25f03462e466a21a95d38fc6e5550bf73f6a199bef3befcc7f6b4189708c1ba8 -0x530df3c1793034ef619563450b2d8ab8cdaa7f6c9ef0477f244f42620ed70940 -0x35972a71f55af1d74792a39b99e10a97543ec83ae5799c2bd5cbde4b01f54299 -0x17bf07bbaabbf250e08cce9d1fac34dbb83889773f965ba2c5044d7e13693b39 -0xf2be1855bfa55d4c67457bb6b623729503b4b93fb071cbf69566b53c7cbebfce -0x840a4f4d4e2c6a9ae66c6a2f1c6c0f0910ad6edd145721277627163e9749fd67 -0xc56aa1b10d563d47488839d8e962d4a5cc0f8af561551432fa7b485d331afec0 -0x314044ed4be5e72ffc570e6dba083e660c1b8319c678de6f32cdfb18947e93e4 -0xa89063b0dbc55d048b76484775db44b1cca3ae40060546bae005d5a0760e056a -0x9cd31176bbf0b1d9cef209587f55a03fe602a67d43244f0b64592396d03214e3 -0x57c5fe04a8025d3c710a6bd10e7b794907607f1b8d73340417844c67e14e9d58 -0x8932b05f54f16d5c8f552245f3f89034440e1a90d8a817a80653d0a8781a8922 -0xeb7c7b538f31d68ea5131e83c6870d4006b40d42db4e2e777fff5d0074cbd46d -0xbada4fb3fae7a49b040cbb9e71bda9288fff0352f1e2d517bc3d208159fb2742 -0xdef28174a9d5a357fb2710c63632fdbce752740057f3e383ef7c21cc96bc02a1 -0x5679b7b645dea7f1690d7620d1036fe360dcb36fb7c4bc83e95ec2eb4438c7da -0x8e90c86bd7a171a63c93e29bf2a386175318fdc4e6b731c9178924c695b91be3 -0x8df0c0cc4d985beca07d18dba26ab79f14f47f8fd0b7a35a2b024166b671d5ce -0xea51cc2e48028a11dc3073c28fbe5ced6c323da751a04c084a8372284a16a009 -0xcfcb5f7b921b2ac6e218fa8bf91c3b320e904c058dfe01835a678214a9962bc9 -0x9e573c560b93dd1b4616c604035681b2f63fb4253d6fb6f8badff26b40c002b8 -0xd283cc9d6396b34766157b4985c4453e62bdcd7159b82bfa5e2ecfc7dddd0fdf -0x03a66af5b6774e411f300c54780583d1078e9b954e5c747c6db9fc9b971c6726 -0x10ef34322fd731ea77481eec9aaaeff286d195ec632d2bba9e91eae823753d4d -0xdf37166047157a826f05b247a77b2828f0fc2b25f6707cbd3f6ced891b44c140 -0xff519c971c5ee56699b104ae86ef507652609056b39e3650d58fd2a7e62c654e -0x0a38f952b9525c8e70fc139e7f52878ae80136107bec695d9cff8d6c87bc5ecd -0x1e5776faa14fbdb5ffd50d0ddc0d040522866163fe8e4ca04add0ea0f2b2a3c0 -0x22ff424bebe28170f391bc1d90e296683825f382b284aacff8c3937e874664f3 -0x01b9f8a16fd2c9d9bb52ebadcd39954b02198fa811abc769605125e34ca64409 -0x0ce5786b1685dcabdd8a575473c48b8becf666f304b74fb0d51c17ecd78ba83a -0xb793b3a2e607c1ded1ee9a66337e69e67ee566f3bb054718707388b5b4451753 -0xcd013a24af8a67055af64feab9181ce5234eb667c8e4e7cb5c20b745cdc5c63f -0x7096b7d9676d94db5bfdd5c4bb9b47b6ea81a699a671a5f107d6902dc35dcd6d -0x9d64a8e0570664dbb16fa269308d11d8dc36f4d700980fbb99509185f5c9a1b3 -0x2f51e876afc907a418238bf2978958077005ba3adf4c1868414e4686b5b6330d -0xf3f72c8802f4ceb47c9fb9d88d4ca757957dfc4f1fbb416afa595ac292eb4720 -0x101b4c7f726e04edcba0696221594e486f99a0c66b8e94cfab624bacdc1079b0 -0xef2d4037ce6adf47d2587ed42a30f6f8b5c82dcdf15a82da7e63e92003ce3677 -0x016b9357051ee58a596e8c77db4bde053933dade086c8217ba7f54262b284c6f -0xbfbe73c34f0ba55ba54eb67dc3e90c0cec3131a28b25c639c70276a7065d9330 -0xce87487ae6c74b62356ba68e4db3cabd4ec755840238442c25567377352f7217 -0xed914715dd971091534ccbfee520e70199196d86c4bd0f8dbd18721a804a4c1b -0x04e1741f2fe0fd59c4f4781c8439afd6f171ddc542a6a58b7ef0a782547940a2 -0x5523c7269c3c01cb3af7a6a23653532dcd4cee82b1ab36be464b4b79ca55b024 -0x80bcbdc79dc0a958b2068d8e04efdb71b7c3eae18473c519bb43775c311309d2 -0x6e24350cebeb43fcb88880b47df0ef0e7ab610e381eff1891e56f3e46cbaa30a -0x0c84f77cbe7c3e080902849c20ae5916f0242bcb9702a41b38cf7fe4f1f4d7b5 -0x072668580049f02a846566f4145e6a507baa259b8068aa736e04c29f5b2d3e1d -0x56ff2f763363b7ce6e46ec90b5cd4b0ddb19e355c4444ffe699b4a7db97f9631 -0xec135e2e556b01f4ae9a498427162c9913bfdbd8ffa0967a2157ea2bfa7ccb55 -0x55598c6fbd15adb09c887bf9c197c55f440edf5c3bab99ff7d82624557cc7773 -0x1c3e8c9c9e5ef926bfa9f5209db3956df3ed0c611cc5c44167313dbf71714edc -0xa1fac86b275e0eddbf5f79ebff94cc961fc96443b4facbcf879c72a7579a629d -0xc65bfa7939d00acf0f1547850e91be70273fa4d969ce3aacadc06f3a539a8892 -0x99b854b4873ca5fdc4f1f1dd0ddc08336eebd31727f0f38121b921f95e86daf8 -0x8e2ec874295a4faae1f89e6da6a0b67dab0518b888d62994e6bc3918c29c74ce -0x1fc526ee0c2254fddcd52fd373b649c78f1af3ef9cf853d4e2e9b20bda15f87d -0x6429a88e67fb765c32f2f02179cf0ca5b8b1942bc819b78f22d87ffba6995d8f -0x456209eb67bba49347219efb5a469e5dd9e5edc72989cab049a8b7fd6eebc32a -0xa467b2bd6cbbdb03606d41ee17f3ac66be625cbef64c49e4d936ecc267c8bff8 -0x143fd06673c351e9b7ae5ae90e582151b4e0ac1d95bd181673cdc80d26e59434 -0x33b2fa8b9feda7cc2c3306e3263d5bcca58c26ad093329ba99da7838b6d26a5e -0xe2968327d181048bf88993a34350e82e18047954e88aa10fbf1df64f9b2040ce -0x8df80322cd8820f8f5c347ebd44d97edd1f14db761145b0d1b44cceda9c8ac41 -0x47b095f8f7558d6d4f4339526a73a015ffb5181b95bdcad2d7e8815ce6a6a39a -0xc746b835daa1d80a3d59a6da89ce3e500eaf1457976d11f60e073b60cd7b6e9f -0x32529c836ddcda3c8599a1b979e91e0975aa72691c4c5ea817eb2744393c48b3 -0xcb2585d59e519b20c9574ab4caf9e8a35629f2777310414271db31b592676324 -0xbe9a1eec79576506447fc938eda262fbd74552caac17ddcc4122d3bd2de33155 -0x94e1332036ffa45fc802a4267e57e49a964380ecb41016f15504c7d1a29df618 -0xcc624d448b6edd4cb960eb99145d9bdafdc5586873da380beafca3662af00da7 -0x8fd2af875de71399c166234afefb5e7060dc9df33cf9adee0f5297d90016ad44 -0x7f590b3e12548d0ce2d378a6a6f280c195989db691440a99c66779491a14fcdd -0xaa92be024a4f022ba6e04ab5beb74d2f550002bbbe508d35d62af8e27fd87715 -0xe9a2dd67b6c4b1489ef0f91d64779204778be939fa97b316bfe78536bc3bf95a -0xa9d416cfd872bc25c24229acfc8414c390e36ae4a89a9c7fa1322e473e893bd8 -0x96734481103a90bc719d599b3ed12f6c7eba1edb5b461a727d540487ca1fd537 -0x635dfbeb8c2387c38064e74ce2d502167322c7a0814615ea71525c1d6fe26c6c -0xd4e01b2f1a7a13ac5b4601ec0b8525a70a45c673b600dde8f42b441715ccfbed -0xe3e8168229eac585af9a4bb5ec7082b2f9218b17fa24a9e7d01364581310134d -0x060f59a1b98698f7d035b3495f77d42d4df99412dcabdcf07f4a9fabad19be02 -0x1432f62df97aa8da5a99818028d054ce210b8466ecdcc97291d51a3db95e4b3c -0x493f6a50830353997a2f3702572c1d799e39b328323bd296eeaec2dd89bc39b9 -0xbf9b7bb3a28f2316eee0cc2bb58db854633bbc3a91d73ba05d25b5215437f911 -0x654ec5738aaceacb8ab1000589c92c547ad952f95df923898108e68862201e1b -0x9ac82f9697c55ff68af75e7c690db706223e631e5e5450481f9ca512d6efb0fd -0x271f19c5d1a2561f42d485dc3c994482f68ee376b61a45b658c4bdf1fa27f39d -0x6d475457240b4911a521bf27f9d9b3bb1b8e73afb505b15a4c7ec75dfbd425d9 -0x4d864e62f54f5867692a58f0653a9e730cc665112b63cebd61c6ae28f6ba4107 -0xdeb741375d6fee540ce871162c4476075a46a1441d3216ef9c60cdcae422eb9d -0x0937b5066315512151c2a83fa8150c8d854d05ae3a95a7c5330bcfd83156e79e -0x2506822308f103d785a6a30310f8f4097ddea4c6ab3d91f89f40aacadbea0733 -0x4612cb3d41f2fef6729644497eaedf0e653f7b4094edf77e278405ec36492d02 -0x35fca63f6d8aae0f13d03fc4e80ac1a7311a4c6aa2f64358cf0a83c1714865d7 -0xf46f1889f697434e9e7ae30f4f31bc343e27a729facfced84d360588d4379e7e -0x4fd85d094bb7abe9339320586eb58667929c59adeb4bd862dce00668b39a937a -0xe4e2e84d26f792c4feb779427afff3dc17164d6854f1d18f4c12911cf286acb9 -0x726b8f4f0530abf3126cfd2da8d6dd075f056517cb5083c50dc713f7e495b8d6 -0x4ab9cdb65c37c1095c959e3d6810960d3116433b287a38857a8579b53e6b4fa4 -0xc7ef49329a27362a943304c48bad851114f920fe16c2db914bf14f52a12607e5 -0x409f7ec5a1527825d453c5aae8880642d01e4a9fccb9355b77cb25dd8ce22287 -0x96f1791ce2246f6ccf22fa2e829caeb006651c40015d349bc3dc8868be28dd00 -0x7e94edd471783deaf9828744be719ea1b0d44d77310ab72199fdc08cef7cab16 -0x585bcc26e3d27a259a1e21c723806f3f397b035e406da262d32280ae40fb4a6c -0xe306d6c99245c09c18d6d402af66edc6805861eb77df20cd6bd166826e74eca0 -0x987ae5d98991ab58daa8a8ad53690594bff228a8abd09bac3ad70654accb2ceb -0x9b50ebfefcdc250af43799f0272d0334a5b19d999b3a541be64c6e16b7bd630b -0x01827f9d6c3e3602f8af06d03955721ae9a7b5cfd457588594434d5ccb667882 -0xbe802d132348442023bfc2eeb966c468ea0266e33fc66e883f9806e0fdb6b913 -0x1b9f34ec7159f99b5e97f3c28e4a582029fc4541f93627a6c252961ce24af3a9 -0x484083621844c63069c9c3d541070b6768424649c27acca993f18496ce87b4b5 -0xc22397c89c15d2db54ae217b51280bf93643b722a4482287e64769f39eeca377 -0xd9c99dbcb4785b8875a70653ae37671c7c520e0ddda30d3d03fb3cc45e37bb15 -0xf0054b0f069928688c049c858e00974582584462fad050015b2ef673e2c097c2 -0xa6d497d1555f73532f2fceaa88cde90921605bb7f25c4d6233b75ae8f29d0e87 -0x026c9043471bdc87658bcf34eb5d0165a2b31010924b3677787026ffa31d450c -0x46ab2a21093f53881709d5b1513473cb4d78c04b97d45e9311d5de6547b6ab0f -0xf6f1e907edbc95ca5f1aa88c85ee635cf6d0557ded13c981ce51d4e231c32365 -0x19f7b66d430f82156c28e9cefe167e705564a5657a95e5853a03cadfa0a15a7f -0x6e4b4961691a5700dc09098a385e3d81a883e875c9593bc79b46e87f23fac69b -0x448f902d5e703ab79283d62e90230d405accad4d87d9106ae1a67bdb547152a6 -0x124ab7935d2225ad00d373c9a104b8ba0ead738b98bcca62ea27b05cf0d875a3 -0xd887c3b56a0cca9dd04da4195df3fca3e72431846b471cf3bde9847d3020ea3d -0xdc4978585dd3c1a61efcca4e012c3c0c86b1c04ef1ec59a4931b1e83e1ac40e0 -0x3094168d27964148297fccffd759169ceaf0ca96fe2b994225d6e69a0c2abd39 -0x02ccfc560cbec56f41d72fc15ab9c647bb68a6eef48ae77c4759d0aec9723f82 -0xb38d7db392b0c91ab26cdb4a37a9ba135effbca2442bb273858bcd1d27627bba -0x00e683915989c5e1f7976d74c3c4232daf610f75bd12b594ee6494c4de575160 -0x823ecfa3207704ad72bc5e41f1c5f39545b0e024e45a57d4fa43dfe9ede4af35 -0x26d49dad9f4091abd23b5584a8102c81a478a9ae925310d51dd63318cf557101 -0x4521e183c9c7f686790203376b7e3aa1d09768b9d4c49c8d6a2af1e27aa739e1 -0xa7ed59d759e2d9c97e4ffda71eb820068a1d64dcde1ef1efb7468b5f25b8bcaa -0x2acfee31b5e298a0d9fd0846022125ca0531f902df25520540133dc5b69aae68 -0xb34b30a45ea8bc30e626b3f161aff07c0b2530ba054b4018460ba43875cfa4e7 -0xc9b9bd2febcee63e52c02e8082b79f4f44d11caa97f346041d1c4326177fa895 -0x77e57f6bf1a3661373e989111812eb294ee9ec6d2947f1ae2290bc6b192c2347 -0xefabf3b019327707ad95b3eb8229ea525f1f0b7c1c869af973328256c90e7ea7 -0x2a50143c3fecac95c4f2c66c9ad6a810199e4d4b38ec3430a8c8af2177857541 -0xa40a4774df6c4c1f378d532751eae49a54da561d813d314516aadd5815e08068 -0x84e5127272a05c5b35cb6dbd8132a00dbf3b6a50072cab1b3b9514f844144765 -0x9f2d01d3c70369e7b66aadb2209eb8dc6a2092250baa563a46686f17d488def3 -0xaa4aad985b9707144dd7f22cf41656e5b31e368b5bff45fac9f70b3546e83be5 -0xd2a7f3ead3df9e3aaa98f1ed80f633cc5105401c472107c15740fb373de4ce36 -0xaaf4576da044cc743d083cf18cb0e3d09bb7aa006d28fa632f742fc01eaa5685 -0x46944ae84b48051082496f070801a648731e1b63bb24199bd4991784fecd55a3 -0xaa04bbfcefb5fc8387ef6329ad2a099580d8c4f34835d49cdc48c1ea87c15b31 -0xbab68b672cd7002b84d1f4224368d86fd85febdf22e4b9cda5368e2ba4757b83 -0x0bd38bbf4a4ca52a27cb3e69db546abc270c6583f44f20837a38fdc2484f3005 -0xdeb8cc05a7b39cdfcbca2eae7d5e8a9d86e0c868b49c69be99b3b3d953e2ffd3 -0xced7956f3e600a28d9bfd1e9bdfb6d51b3fde9da5130ea4d3a48ffb4b68900d5 -0x58600149b49df9268f1e9a2eceb5830c1153ed8ce9f831593601347979cd9897 -0x311c3fe7b52917cbd486a7e90a58c56942a9fbabf24ac1ce67e32592edccf7f9 -0xf1dbee12ffaed59750f0b2454a38e57ff57d212502fabcd7a8efa408e024b102 -0xf049ef49169b856c582106dfa19db1cb3d68598d669065204e0a5ead06250b1a -0x8a3f20efe914b2c285507474fa8ced58af288aded34d683073775bf574eed0f0 -0x9233296728ea2e941ec61cbae2b72707da50484f7eb41f38a6c07aa47b86ec14 -0x0ffcc7765198e5a5b2561e12816604ddbd42cb3fda5beedd7dc2d3e86d16e86b -0xa217a5c0eafb05924cc950440c169d499f4a20682584e440b602c4426bece8df -0xeb4b1c8c39117069dc41a58ba197f9a5fe55cae9d6bddcb7c64daccdfbd19456 -0x98a268097f1b5b5ceaa8736a8af04c045f7742223d0d85b4b183362379d43379 -0x6fa183d1a723e23e9b61754c8cea36cdf6c6b85e3f4da458f2322d2231fbbc55 -0x77047bf1b762c1362b701b270187cfaa6d696ad1e9fb32aaa6cd22ffab0ce72c -0x653f4c9e564623b259d9f0058c1dddfb50ed21feee25d383a2e2b25921b69fec -0x06ebf2c9ab189daeb5c64eff3fee332a9a07689aef2820f56900c49fad24394c -0x8099da286b4aae18d8215be1f55837e9ff32867682ed580d06a35836e0a81761 -0xa202de408aaea85551609958334fdf6041fa734dd9dea4614563ad7edbc2985a -0xba5efbb354f043c5bf086e00dcce1efa57714ea5240bcc9da06c19345749444c -0xb308703585778257bf3548966bbc9866a4a19bd7126c5b0735d5f641e1dfc790 -0xf2a7e9c7a67332233936a2ee7af4071146c9f31b23982e6a2c446a028319fa88 -0xebaca1281b58f3e516d2f0831f348190e8a46c40440cf1e29868caaea0dd456f -0x222fd3eb9893553d46d30235d5bcb41d98a0079a7a5a05b2fa1dbfdc9849edf1 -0x95ccfa1f1bd59b74f8467fa7d125c60eceeb315925307b8cca7663f46c0ad0cf -0x5767484a860b3db47591fd5838824d892607e70547fff48176f883e7d77aed65 -0xc42c9adb4b83022f2376878a811e02bba0d511ffb766f4af2458dec4a9701890 -0xd42abe967b0146e3b9805f7430fc14a3a1f05385c7eec18de848be51fcf26d0d -0xcc5523fbb4f6cf5d35ed7a97d32f0ac8d6a4c95a4f7bfbae9afb1f3edd5f574a -0xda7b98e8b4d771eb9cce529c2b7fd7c7d1a7e1784272598c17ebe02eed6fce49 -0xe481d86bca61e7fefbf936ee78cfb623e2a06e4603e11f8b4ac2aea3d87f3e08 -0x5efcac44d306bdb1fa4ffc0a3cb51886d676a77cbad634cf4c2a9cb60c849e64 -0x0e92754df53ebc5de28cf29297aacece16fe1960a3922c45e403799383401c7b -0x97726a83c5d1970ec1cc81e02fbf7a3d50949cddd238e48f89c79a32101e54d6 -0x858f17fb40488f6cf54bd779283c47ee395e12c916d560ac484903e213f79231 -0x1a88f853948e07b246852d11a7a57f7afb491ffb2428d70fe7e84a96e68a1509 -0x5716f3fde777bd5ea495c855dea1c968164dced876b862aaefbe559ec1ef6854 -0x103a53849d34a7edcc45070038f29f800a68a8bbd09c9690f4cba4d6dc2116c4 -0x20fde4886385e7a4972c13c492401945ff5cacb0b0948fadb1f7741340d0a532 -0xf0cd02f89813c980ae53d62f9d7b198f8b3fcb6b348028d1c112f529a4753e17 -0x71731ccb049e82d027baa608e9e3d5b435d02867a91efcbf6ca606ce8af05ad2 -0x7cada35d1d593af3dad6924a2a72340d70cc07157e53493117b504d84b472f53 -0x006ded0964001c8d20b99b25c4c72f60e20951a84c14e5851003d180171674bb -0x17ab3e5b510c77bafb41eef3b883d137f8ed35d723c6d0a662ae65d0ad72e6c9 -0x2ee4d99e3d56b18a2ca511a5286bf18dbbe70cf45f66fac82246fca4e7b5562b -0xb17960e83404d2cf402517216b7d206b146db40cc20fd7f07229ea96e8b672b5 -0x1a64b152deb3dd5767ff7ce0a3a3ee2ca9db9aacafef0a5ff5976d86a72f0d2b -0xb83997334d39cdca6a1a10fd6d7a614b751ef716103ad803b38f992b472e94b9 -0x463772886d37bb07063b62747c793a2031cb3e27a1e1e71427456b05fffac712 -0x918c4601f7787fd1d2256b093a922e2ba67a1fed52af9766391ef54da2c4f336 -0x4a3bfdfcd59121997b47ddb900c7c22fbebf8aebd8c47ab74efc5d183d7e5a0e -0x096dc6da1941b8ec01123f0763a015051a0b0438d32f5553d7db9a88fd53f6f7 -0x6dfa38612e443f95596dca4c950a033e04c79f2772484e8c2b1f9b9ec4a72b49 -0xd747743dbb563dbd7e6cee337ca67ff67249ef8d0bc2b4107726f3353ebe8d9f -0xeae3747ec2f0fc5f1c9c6f895f46aee9e79b450ce59f0346341cb90b1a93dd87 -0xce0cb2198612f8e8dc6fa7a0e204bbee21433e7b963077720e7e51d0c54b45ea -0x75cdd99b2e507acabe3dec4ebbb55017a41114170f7b0da7b415b52c67e9e8ed -0x3bd022381848d3849976237c08b9c357bf64b62927019b0c365e562ba2fb8aae -0xda840c5fe3c5aaaa70b8d6f330418983a327a5c731cf4a569fbc37aff066d505 -0x5cae85ed0f5142640edae3098a77349f26bc5432fa7cca7ccbdc003e80311bf4 -0x336a83556175d0598b50edb070855af96c5cf854f4b3b2bc2cbe357dbbf333ec -0x183ba7abf3b2126454fa1a08a27590d9cbdb698aa7303a9a4f795f736906c5ed -0xad85e7b69c1b2f6638177eb293909367303ff2d42359e0f0ab15d6092ed5d41b -0xc12eac3d1f47f03c0a9286e6249d895216fb2c9a2c6c4837424c1407b8dbc061 -0x5ac9f810f756fc68f63ce16d55a0c39cd234952adf1e25ee5ddd0db1aa3074f5 -0x3c0671de63f464b2ad3d98a75a2588c58ff41277ccdf223c0afa2c461286c7fe -0x1ce336dfb6113b37ab9c10656f8522f6c82a374679981e4610cb803b88c418c9 -0x8fc1c0a2e8c84294f22c45cff3e0d8b6d83eccfb4b27de9618ceb41b42104cdf -0xa4564c830ec368c00a09e5d1f7aeb55f2e7c14e65003134748c220924aad4c66 -0x95291c19df545ae425a8bb612c96cb0fe971bc461070b42d4e73db721cb66179 -0xf6ef9f403b9d981e4999103a86f16c1482d775f9b00af6fecd6b760afed14b81 -0x23f911af8dc19eafc58c635e6cc80c7e6b2f357fd1c7e1af45663eadf5d40a7d -0x9fd5504abe693c6c4eaa5ffb4ac9c181e5d67eed7d326719f0ea55d837c91bc9 -0x871ac9d50c6c624d2426925ce5e05b1dd5a2d1f515348a4fe87816ff7e0f74f7 -0xddc32cea5786781732387c030590a880672112ff59c496901e25a02268042263 -0x68088d09b15efe8b3b87d246884c7da7bf68e4eb7e3814e893f8a34a9cd35a95 -0xce32d60ac2ddac3de2babe580d631cc7ed7b593c4663e102cb4c6166bafd1858 -0x87d63ff91c32d22e6c8e167992a637cb71b3aee28db2bc6ed369c72c06de8517 -0x5ef6402768df53e7034c4e35aa316fe1e3907c8d5e233a4af33d31e836ddd805 -0x510ee1841c8d6b69322a99078df7647b963a4da8e1c100e473ee3cb31947f453 -0x2823a19077139122a1dea31babc8f6603a03a3f21caa31de10e3dfd48b521515 -0xcbe7b07638f6cc0cbaa4fc981ee9c593eb01cdbe9b77e9087dd3d91344a453c7 -0x4ebfbe04a0778afc8786d9944b2222f5d0c76f60d01269e370d0b08593bc0632 -0x191b3b4bd8372ea4c7479deb6e721c67edd2156334cf603ce68a15af323ff546 -0x546cda4ce5dbb8b32729c33dbdbae832b510a8c97ba69917b10c809ca7ccb8a8 -0x2afd097c534c8cef53eabe68d35c72ec9c48ebfa28d17e9028cd5284056ffb90 -0x7843c33547cd5162b775b9aa62b085ea459be6629cbce3f9fa78279ffb381705 -0x9b24eb0b01c0055eba9433972a025f5cf2a4fd5e29ad416c11a2979def6b37e7 -0x3d40db5ed082def36a5d5761f04d31ed84177c1ca30e815a064f5ef70e56cd8b -0x76614a1d3953974cdfe7ecf612c578fdf772ccc3933866ff3aff631af2dafa4f -0xc62a293f3026f9859b430b9c80159a7579f623d8dc4762b2884ba16bf2ac9ee4 -0x62aae13073d4c8e85cf41aac7e940a8041b18412a62f00761be75c59e7cba7b9 -0x50d5259539d0a0221ab7e0d4088ec039ab3ce429a12740367aecfd7f365ece95 -0x18d3a15738d73212459055157ee253fce52c29912cfb381c8ea4bd294a404519 -0x134ba13321e1fdb6851d7808b61dcb0acf52a4cbbd484185bb3f1cfb7e4c90f9 -0x33cfdb1fef0187c38866d8d461ddfa849a0b16aaae983abd916174e22777ca16 -0xb62e79ea26694258b694e221feda21b8416d54bc9b408b343d556b571248ff06 -0x389103f00f1093b7cda159230162c35f53ef636279fae575012cad82b20a9fc1 -0xfe4dbc76a0af0f913bbe4b5663f246f07193bb2378d9e75b80d99f7ecea6ba79 -0x3fb631190cec650e767283563897476926b5dcf544a0d3bc7508dab88cbfcb49 -0xbdafa602c2dfb0c6b3e32727e2657ab7deccbc3375c7bd0707e08ec8f0c442c7 -0x1a180eb8dd0b3068164b040ac27c34fbf2aa07a4b9652999987bd3ff979ece3c -0x221db5adab0b0a95af4127c9b8a617b1edb35b0b8a37abae79a19279175acced -0x1385a3244a1abde28fee39d4b1bebf6ad33530e09d88818065a1e491aa725712 -0x370a2250ad52fdb959ba5e55b64794c9f2001c627dd5476f83d5e2840b5ae396 -0xfff701c4739d189ec1a11d11919072971286b2185c4038633005d45c2d2a00b1 -0xa70825c95fb3d44460ea1c5728f9e02b2750c0c7d69201bb510127a75a5cebc3 -0x11ce25a090a97a206e2aade3ff1593406caa6287fefaacf0b062868a1a2555ba -0x163ec9f91e7527396eb574e18d65e302e084b22bd00af0ae544aac5e8286f0dd -0x2a351879c215db8152920ff749c1f3539e063a4b26abce748da8d02149fb7d10 -0xaa6beefcf5ded6df600e1c1876dd298771887b31c6f7411bcf38071d20adf76e -0xa04a732d98721d45a5d5ba19720a93cfe381237fd826df91af77fed4d94a12bf -0xbca62350efb4c0849672a0c17b3b4689bbb0a3a4ac4ff04d0f8088cbcdc24548 -0x913c77e5c191051b26af46cc7196f498a6ccea291469aba3e3c1737977bcb62d -0x2c008aa8c8e78f38f59c68236ea6dcae8efc66c2945719398d0fcb9b840c9a11 -0x3305a0f5fe469c2f8ccad8834170fb82de843cfd803301ec019c262238f83978 -0x4800b6f830d76395249beff7db35996ee25fb3abaa2d6dcd404bad1a57bed29f -0x225db52a31dbf240586ed57eba36700e9e6a63e6c03b809d4271ef30e442f2a3 -0xbac034e058ede5f5d67f29db961f3cd051259af090f075c5565c839b8ce3bca5 -0x92b85983e4d186aa6059b21cb12ade6fbefc7aa773b4b287e7e11334ab77142a -0x55bd2d82da54d16eec0846917a840ddab5c4af2d2f077ff80f34611efa3b9f25 -0xb5d2614f176d6f2a186bfd594bd27a9a36a37f333a666d29ce2040388c8b6a4b -0x1f4d3f75d452ffd3e3da705c9b7009add79ee9d1c840aad7f0b2761c4b3fb04b -0xf3e0615c394ba369a4fea9cb9cc2827c8495ef5ab78a843ab1f95f719c4fda09 -0xb49f10805c55b091ccae73d81351ae11bcc26853bc31dd6d9ca2fb3881542720 -0x4a46db5ccd91e7eea5e4f9d6a4317b432d2678cf4a71e09f32fc1198c3cf234e -0x579984493e27df55729c4397358242ee41b3612f62e1015cc8c0f92f332d412a -0x42864a483ae3fec86f88494aecbe646df74cdca9f462596e85376efa81c64375 -0x5382d061e35bb6e87aa141f4fcfee596908d66d4326174ccb7d8811a1fe57d25 -0x322de5fb1c01e16993e6c0f97eb200565f1b4bccf772e376e4c1346b0ea792fa -0x7764db97812e5e7c71bccc1954227c385804b808b3942493d8b0b3cf10ba72df -0xf9917e7db2943be9dadcaa90a99321bead777398d57bce80d4af58b25c96973b -0x95c3c58f03147c43502c15fdcb74fc5731512dc708a1bb21649e9ac017fd7769 -0xc5d20e8432dda1c4cd95b45569a1bb3afb1d3354a8b0cee64e27e048b0ee1be9 -0x6757706f73e5efc132e6d5c118828d2e6505bd0593b43595c685c12c50412091 -0x6a78cf315363ef967b93a114b7da8e800e858fe425efeb953151d45495236cf3 -0x14e0b92ad951c7176b957915f7776f82edc1bb86587887d7e02140b8c8bd07e2 -0xe43574766c789879d62862beccceeb6b9cafc2bcdca141f3bedc0ea52c7bccdc -0xa1e28bfce5bc4ce4be95d37fff18259ed81b6cb879edad24d0ed8422c5afa642 -0xb9cf9f97d18c4f754cc0cfa7b0bf74a560224f016d42e077cc908c975369fb75 -0x5f67d2bd40278c0c03673ef9e3d051ece88f2967b660e0666ce704ac8b4a12e0 -0x8aad102369131466ba9e0bf169f55feaa4387498a3ead575bb0c0921ae96d942 -0x8cbcc0d755335a26ca645fdd35f9ca90f6e0eeefed9c6dab451e8e0a5dfd82f6 -0x3344661b482c4276e70fa2971ab16b3efb11dbc690b835048e1c909078555d03 -0x1937a96449ca5b3eefaeb8a0fee6364377a5377df40b9670722e8bc3fb9cf6d1 -0xefee046517f3cf782c63801ddaad88dbc20d60d0df08e7a146a1038c3e6ee59c -0x24424b83aad0fe1a54225ac88b1af6f88605abfeb934107a482882d247e08ea6 -0xfad0a7c8187c53518656be695155fc2f331b54487905aa867d14b6b371558a8d -0x405d8ad820b6b27a3bdba5a142879687911068947ab1cfdd53f8fcbe3a1239e7 -0x62972195a435b542f8cf803231dd1a17f354759cace966beefba1e6fe6e68818 -0x9d11e308fb7adf3e25c4a15e4c91a012d3247d41102794e8c7436f3a46a6af63 -0x28103515df6ecc4f820f302057096f19c40d4604f8841be5487167a3cf3b247c -0x1a1e2dbdcbb1cbe1174c41f7a3ca9c9b7e1ee3545cc7af5918d08327bea45562 -0x0af413b2f4bf0bf5c78c1ae4c64cd6f1c8da509d848f6e67ebef8f705bba41d8 -0xa279a25e2cd9a2980401884b8d341c185ea952f5090013012701e4aa61356657 -0xeffed84aa024a30a2c7d6b9700b0aa30b0b6a6e19456d4a6085337720e2e01ae -0xce01a0e7ea76b24c048757978e9f74bf5e5dde24e78dc01b686c2767172930d6 -0x31596092b540499e3b99a6c0a85557d981b6cdcad47846b042e0f01b182101e1 -0x6a6c9812cfbc77cd141795f1719c4106f009ea84eb3cf9c5625d6b604887c90b -0xd96c0f267c98b2992514d2c8856ded8d04058deed54f00a4d4a1a90c0a5ac41f -0x13e8c3b8326eb1557ebc833eaad99bc1d2d54d903a7f14fe49a0292beca86bc3 -0x47488cd0bd8623c9af73689cebb3ba26d424cf0ff00a0159712345d222f459ec -0xbf4819c6d56f03b081091262da00549041c4491942564c41f49cd4965921d6ba -0xf55cc1188a9f0662d5ccff049c5631f8f60d9b0fe9bf5f5e6efb669f918827de -0x8e4aacdc167631a29d19c26e523e550abfa8a260dccf47cfb76c68b07ae208eb -0x87ed20119d79eb22f62be6aed0c1485c3a96fc94324f94d74f68fdf9cdb277a8 -0x8625be2e6dc1b88f82c8083ac78b8da501c68da175aa815bfbaeb46749207db6 -0xf30f19c9411f25df714c0d3136aae3da7d14d67f053a77880d8273905b686001 -0xc6492fd2cba1b4fe3345570c3f09222d06c33117632ec1dd16456f899aeffdee -0x930faddc0cc362f7cd60b83bf662d306be31b4117452df88c3f5039940767c47 -0x1c93480c6236e09c18d4a060d5d73b3a88c30a94c7f78e6a75aaed4d1a1164e3 -0x7c56d6e3256e12bf83cac53969258605cca8da0861c053e7ddc67546b7aba115 -0x3926e133abcb7eeac239d42e5846e275feb94eec573fb56b3fb555c48fcd264e -0xe859e5822e40d410f37d5b5d5669ef5d9537e2eb7b9a825ec6bfb935c175aba6 -0xe96df9219040719b8248ef3202edcb44259976802c2796ad5fb8c0dca171775f -0x0529b131afd936c0887581c193bb6cfade96d1c7d5f26214d15d0a7b70010831 -0x5e75d9c63980e50420be6881d289d6458cab58119d8053ad96a4320746fbb4f8 -0xa5e2ece493fca470b1563b1931bcc625c364eddb1df1624ea5a7e9788ae69a61 -0xb777397c556b50d903441e3b87918e115a65cbf43095b5bb0962eba6d5862b8b -0x4ddd3993b6c5d6ab0b57a555393497617d1a588748397e43d3a8fbccebf2e762 -0x73dcb5bf36bb33ddccb39036fa734381d8f296f9d312aced4faeea770b66dcfb -0xfb85132c08e5a350cc0b4b1d10ef490608b281c892729fbbcaedd3011d62c116 -0xf5f9963a0633a5a833e4b5424a4f81de10a2d23dde7df985916cd3171c8cbbc4 -0x5d92dd743fec06f42519f978874ec428cd47093e51d0f16fcf4a609721acf7cd -0xb7e4a1d3d6057b5638dfe581e17ba7ec2d9633aa2d71eedc95ad29222125611e -0x9bd15d84791c9364c11d0761421b88073b14abd98c57d2224bc44d746d154142 -0x2b03d9b2faf3de4d75cf86a8c1631e0488f7f77839817b3a70a4f9e6c42bdf38 -0x0448e2efbebdec698f9cf05b9a40b7533ba266e836f210c4b00c9d549d946e79 -0x36ebd27c9d3ee61d169f042b00496f53748e620ed7914634397419cab743ec81 -0x5bd5be1383c0d561592521050318eef72df78be2e87f1527cdf1f19183ad0305 -0xf149d7091a57d94d65b2d035d98a624111c1985c775dc443d0549d59a2f37a60 -0x273baaa46f76f951b8a4470764f47a31d84b6f684f6266f022da46507ccf8d9b -0xcb2734ebb4f1ede7d9cabf8e83bf223c4d00aab33aecbe83aee748a106c91e65 -0xd54ba80985ba36e1676971d266ca89730c1217e6cb32e935496838a9bb8e9dd9 -0x78eccb5759595b3b56213f750fd33fd230029047acbb6d90b359d2e5ae3defe1 -0x2ce1f479833393f20bf037cab1ec7921d7ac93355fed83ef4c56fd7c448bd732 -0x48a0419f2e9055e953f4c990011b534e5ea1dc8f540d9f034ae15adf75eb1d12 -0xad9c3093a289436789a8d085057e98a90052d849902900c5063e7812eecee0d6 -0x3c7e9cb8bdca9fcbf65e08a583ec02b07153c828a42938e23c8ac96fef81cabb -0x14bcf599f183f424442bd68cc28805e88d29d0b24ae7ab07da35cfd1921d7af8 -0xd70987a58de7fef386c38f2c12ee7c935b7ec34fd0c05ecda3c05a7d60e60208 -0xfb57a60369d062a4f35a03c3796f431290db6e72d05e7af66a5044b795815547 -0x7a6bab72edba761d42933cf677234e96723cc8e0a009d6a081dc43ca8d660b26 -0x7c9c76516b913926bffb2752b9c86e1461ba4a6d181e6dafefde5f09524950bb -0x7ccb9ba8fe3742fe35cd2c84942917505c8d99061ae692869dd5e3aca6946624 -0xa1f939430e7edbc35f9f819fd4c150535e0cea67c26342589df90f9fec15343d -0x4cd4d99ec7ac84b59d36c3c7e006ee9f6fe4b1e33a903da367ae2fa73c90d839 -0xd7a0c64b7367d2cf508e8c029cc8aa2694e3da5a7d49838c4f374e8e5d1aab86 -0x7fee45368f473ce8617179eb0caff21f254f6c24ddc2a436cae826bfbf984afa -0x850c4509f64ca4e5dd226f273bcb4fdb7afa02a65d99c34fe35b6d370c2b826e -0x10a86997278e6d9f92e3b68772f9238ecb1af80e0b1201c93e2cf83d42df8adf -0x2f901b02bebba0fdd6c125540d3b55aad95e17df0b312d5dfdd9e46bd07aca7c -0x4aa65521f1143b621d39c72b34132e65f4ef56921dd8ba88563cdeb4bb6d978d -0xe1b260a45f9aa8568dcdff84ca48c3dc4988274a3132abefd53c3decc7c58d84 -0x6ab62a8d35634d5002758fc4379ec9679236227506e18cd4a0b88cfcc21b23db -0x0372c4511ab2118a785aa2a6bdff62a391034f4ae0fcef91fd62b69d89b941a6 -0x1ef3f3343ca9c7df26a60432aefd8b8b226fbdc16a513654846bf4cf2839c2e9 -0x1bb5a1e17fcad122a162ef6f0e0824ebee4cfac2257e6065b85f0f0f6e68aa92 -0x1e96112030c2aa5e4e6e1adaaf5648e3c0411c17a8b1ef2c934b573d76f4c661 -0xbb6cb401acac4f4ea9cc704e8525d7d31aca1bf4ef4b015c4cb153938280ddf1 -0xf29ad52bb285c6e6f6b230ec58761d49a30508e40372029c28a10f9ac0bb24be -0xb3614e7c1b93fe868d30cfe2464f485114d504d560fde2af9d6ba3c9e8cf301e -0xf5243391026792d8c395b9c073af5afdaaf80839ddfa962abdff3a168487cb99 -0x420cc3aba2eed350e72bd8038c5984424c929878ad9be2a5a180371596ff8d31 -0x6495947c24f7c77efecad73f0c480edb58d32d7f44a3f00e79e8897af758d889 -0x66f42a40dc5b29750e45fc08082ffb46249d3edf94efc00273faa07ff2aaf525 -0x89fa13ea34a3350af2b12d14ca429ad19a8dcffa9ec82bea0cf84dc00cc274fa -0xb1c5afaf0b3ede4ac243866ac5e31eda3bcdb3158c081ee368b29f3fa84f75f6 -0x9b7b8a6e02ef1d349324789290934c684b0e976e719ae88deb6c923985109d39 -0x82f10043d4145aabf94489477ca2971c7a0c6629034346f879320a4ba43b0d0f -0xb848fb5da322916ea26648c59806c2b0592c85bf0a38c74ffed4fa4bd17ed75a -0x9736069b65627fa234a64b548b72e6f96801be710a172f0ed73524d47ccdb523 -0x5fe5e7d0ebef3b96a0b828fec243df0e7d311489b5030cee4ea9fb03e1438c1b -0x0e1c994c79eb5adc8541192b5aad9ed66e06ebb339ebc3d0d3f6e85ba4df06c0 -0xe82dd5005a3702cc2adca4c392ea268a8b1b700280c0002398644eef7d33c91b -0x10743707739956c105788239679af4154120d087d79e9f3578c66f221efe5ec5 -0xc0d6003f84e3e98f0fc3f0e8d3ce9459c66843046ad4171d7ce698aec7af8300 -0x0e1ed44230d0dbcf6d122bcda591a13a0b54e4449b9a7bdcda8e628d02c756c4 -0xd04b1c309696ee821eb8d910899ccd091213d9d16dad1e4a120a5e0eceefa23c -0x681d47ccaeed75654615bd303a3788169995f87f03cee3bdcaea93e2a9692a7a -0xbe5a7670c4baeea52278bec8e669dd639aadca8bed0fa219145ad7f766d45063 -0xf80cace496480717bce3f898ea65df9197ab96c7267fad0ece8dbdf21164d95c -0xce11464edfdcf760ab2ca54ebf3c8213df9c4cf70de785d98f231cec21248857 -0x352920359d73dc26ff469c3553b800ad0058da208293a68bc57040d23de4c00b -0x857a56becadfa1c81bce1ce0668d30b16d7a2426b7ddc522413e8dcb1300835b -0x359684adff1a7677ef3cd09cd6acdb742fbb708e29571e6da11ffe948dd9d80f -0x9e684e196175d4d56afb459aa88dd53476a51663d22d2d7edc8a656fa28bf8e9 -0x1ba0af2ab6b634344953bfc59f0110a305452248e3acc9a5e21055a3f8b9ce24 -0xd23bb3d18ff30ec33f233908f4e6dceab18e7aa83fc5dd3a21bbfe476529937f -0xaaf95e59e08db537adc3c978bd172f7366d5f4afe2cecb373e4c2ae18440569e -0xb916ac03d55bb83fcbcfd275892e1b8f7af374dd9a52c8f65f2cd56adcd85698 -0xa598ebcedc9702c6ff851c4cff3cf0fcf2251b0f3c0973fe4c7eb55611bc3a8e -0x3daff1675b9d1bbc1b182ef0d22e92f40c1f6a11c6199b3d24f6b5ef221f9915 -0x9b3b3b47b650379bac8931659b9265a060e28ade98a64bfe112661d169da70da -0xb1c61445ec0c026397b77877ecc65f7275dbccb257f9a3ac7796bfd60b7d1172 -0xec2e4ef984e59316d7fee6fecd4e052b5d8e2339605fe2cb479765eb8d894b70 -0x9c45cb2c3dfb8e38cb895c66a60552b00117e06f2842f93ac83e5e73ddbff3bc -0x85425cc9d98f045a7e49817345891535a9a4c6a016b2698ff10cf191039a9e77 -0xbaa0fa3a6eddd6acae743ee25d54e7e4c0c7464a16cadb1cf6dfc3e92c34a629 -0x21df674928fe7a857601671139233684037f8d06d4b6e12c8f34c114aec6bba9 -0xd64efc98045e971cefd9bd2e45066046f8ad8d78e3d636d65078b6a2bde28a22 -0xdbfd5ad7d98a48891c07b2a03359401c49ff6598c2e293add3ab4c0f5869b4e9 -0xc0ff04eaa52a252eb23790e3927def1c1b735ffe079196e85b0fa83d1328ca80 -0x60f4b4dfe4cd7d2eaa207e3fa0cdd1fa6b27e973fd449b9811255935d9bc74df -0x8018d9bcbaf72aa36b6bfdbafca7b174efd849e8d68f90ede0041706f00ed158 -0x4abb26fc79ade9d63bd1f1b2b615046e266dad37e3197003022098621afe5c20 -0xf0c306fc518a5ef9adcc1c06721ab97d0bbdf82d2f0b0b70868d29054d1d5f35 -0x19db5629429bb72ef5517c8ef83262d830f6c2a6c1f0557b9a8ad51ab4966c98 -0x8d94a2e7fdf7ab93bf06faa26aed315c2ada495faf1c8f33fc9bea82c20d0f96 -0xdea26153f3b11a93da00d3f9cfbe1374d9f9b6b2aa4143da588ba80e774a88a3 -0x780c6cdfb74186faef801640643afb810d3c9f09db05e72c15728260c550affd -0x87c2d8e30b5e29d4b67d0853a0f0156538eb386c1f30acde503b0b1fd9792de3 -0xf645f74244f9bfa85c99701f96c0bf14a99da6e95b9be113c5565a547e200d25 -0xf953063c3f5f82b6c0b4a7a7ffc1de569cdec97f3bb087d7b57291a270827e2e -0x7e10a26ef1b8da5aab98b5d7422b39c77c19ef64b0ba5c3cae1ccdb2b116d3b0 -0x84e5e01f1c9f306f513ce150bec75dc6dc6864623e9cd981c8ccee0fe5ab74fa -0xee37430a8bb7c232fd73894a1dc05bc8ee46b8ab7103e3caee0e4f20411eb506 -0xb5b1a82bf1e4fa6537d67425c3dbe6307cdd1337c42a353bff0da743d320ef8e -0x6c0831f8af1e250a41c0fb0d15dfc9fab1e3af00edda2d4b5f1ba981f416190b -0xb5267556ef00a08be527bca260439081887508db950cc051f2f03ebec0c39e4e -0x9a5a98680bcf542b499cbca3d4b00bfa87b91450e80640f8a2115fd5ceb70da0 -0x4854cf825e9a1e0f08060e8ddd4fbdf1fc5b266391f794581b09e0271faaafee -0xb78b74bdc0390c9919ad84d3872f1a3faa01674711d00392dbd0ff4a5cf1ea7f -0x84be050ae43c5c70c5950f500318d72d266358cf043db24a93bbd628fc2c392b -0xd0a93a378608e2f0dbaf3a031334248a9d73babded2d4e67500271916be92c52 -0xc20e6f3a02d3a46395e3d5c2fce73c7c05300ece29f4651a4503a1ff1a59eff3 -0x6908e414c763e9991c5981c4e09364491b3cfa71728347b03c6a939df0404a30 -0x908f8214ccec688c94ec65f519078b1d23a64ef325d00c3d32743e822520ca09 -0x8d1e5395ce3a193885a4ab211b3f943cdede9239709348b479350d9892b4ee5a -0xae54d0db14eef024168b9d9928a0c8ed843a362fe45e1570e2524265385f22de -0x46b6dabc323d39848efff27e7d5a6ce6166e65ce31198f8ebda6501d9891c6f2 -0xac465121a46f5bc28daf4010e36182ddafc6611f0b8568327f1de29552025ad0 -0x5f6521af8b7c8ff917fda16f9692e3539690d2b669425626acf0e1745fb5a010 -0x4a5821f673b8d912876e517f5da72295deecb613993cb2f3d0893982a2899d1c -0x882d14a91a6eeaa688343bb509d2bef44840aedf8327ae3dddb89cf64eea1a66 -0xec0f161077523b1f56cb88d133eda7f038750670182f30413cca4b5e9b2f1721 -0xe9d0f45bc684b900cf04b49746a9278bcc8bcbe802d25d6df3c89b10e6351873 -0x89893522ddfb3f7f8f273c8017c79ecc9df5b3611e4035061c5e63ed6ce88572 -0xfb5fa41be9c789e1e770acde7beeb7274ba21bda4cd7a80908a9cd05e336a575 -0x5e63ca0025af4a5c5d205dba5bef1980d9ae16d65a00285b66d883c1b4414cbc -0xac7ddc9c555a28f8f587ce81b65531e76a13e907b6118a52ff27613399ebb1f9 -0x0c390d855576328167dd09b446b28f8ca50e8fd45922ce6813399d0331b194d9 -0x8f9ba9e5931f9b07bcf6fabddb137aec88e6cd26ae7b795558a960d096968d2f -0x000cf8c003b95637a3fb60fc79abd288b269d840bd2b72fd836189ae513f0823 -0x68a48b38fb37a79aca99b5523e2846b3ffcdb1aff871ed5b3d511719e69bea7a -0x2599c2264202064c2af894ef9af230233214a63baea5dd24bafeea33c67fb70d -0xe8cb68fdf9c96b65cbf7ec9440cf614a919e5fed47e9a8f482c40c6d15fbc6ed -0xdbd83a01630ddc324a10caaa340ef070e4372a304739262142265a8152ea5793 -0x93e2c1be052682c778b33af8b01392bf93237a43cb37a888ee16eff406857fad -0x7676c91aa2220099d22562b733f99f7eb964d4c3895b099243efd8ff2710129c -0x0afb3bd7cdd435713c9443ad8508676dd54d241ff5bcd659ac6e7a9bcb6092a6 -0xaa6aab7864a0638c1c4fc4828fbb5153794c5e5c36fe46dcf7b5c078f1fcec09 -0x8eff8da45edf5f7648795240288dcaf6d751c794b01cbb5440e7562f49c9ed4b -0xea8384b61d2206c2ff96a50f15903b861be15124d006588f1e2674c7a5ec90d3 -0x4425b0a8eee8558034ce12ffbff474b73a5dcaeb231c5ec4f8863b04549c7e79 -0xf1f32784356553f4dc5815446afbf4bd3aac8a09377ae897a5bc5993dad04275 -0xf1955a908d97f4a7736ce196fa036f58bc18b9ab7343b766e355e6ccd01f96b5 -0xb27c9b167f059dc8e7cacdaa8e955fb4f240d3f06f2fecc0d91a5b74f3c85463 -0x6f347f82bf38c1fd2cc2afc767d8451ad3eb8f0a5c4429b8de0062c9c2018a19 -0xe555b2f8a7131f6ff63ba6f6ba982c101e034cc397acf1f95d41fbb62bed53e8 -0xcb7b9d9d589df59e21ff5d20900f77d00489e38fcc23675f0dc30344a91c5359 -0xf6f1156a559ef30fe70f7e510bdc24ebc8b843fa85f412bdf06207fb32cab795 -0x524fbbe689c154316b456acac1897fe755ccd25479bc31b6e5ff9ad93d9487fa -0x1f0b25acd021a06e2de7fa3592d8e5578ebbb4c91fa1ed4488f7c24d6e1294ab -0xd233530573997af8b075f4103cd3f584fd42dd943d061ffcea5de7bd4000ba4b -0x336e3053e2581bbf01c709f72661ab1de968701c8864b4fe8ac50dd5a14a5f85 -0xc47f6fd6f0d0cf45b4a3787d2c4e96b9e5878f69dda309439d14d42f4656d1ae -0xe1c94c8c97d11ac30d35a274a0ec00f774faa58ad5e54e03ae8ebd8dbf940b80 -0xdabfa88e7c60d122155ecc02e2933ce0fd51e692c0f389126777156f37af1270 -0x729701364b629c6126f03b0c30a45f2e535b2e772f5fb8f9ca63fd4f6951fb7b -0xf9ee2e21bbc76aae7bb244a29b74c2657c4abb4552dd74f97fc8e248179d43fa -0x57c3bc0d2306fa688ca63c6099b2c2695d20ff0f39f6000d0e747bbd0127d104 -0x4c0e38b4caf6a45ac1e09a4f58bcd07a7aa9cfe4e65e0ebda38bd25fce35be46 -0x04506fc84bb4e9b88cc32e638a04124b0b2d896392c20ef64b9f0fa6066cd8fa -0x0450bd0a180d6d205b7ddb63ffb8cef01a7552cbb98029284faed2282c6fdda3 -0x4f9a7ba7db51490043b27e0e54fb14f69667f45d8a3b84daab07ffd016f870f2 -0x3c246593e7c134d7765cd2384b6d4b2b5e6e98b4f4db2598b426c841c61c4b0a -0x7011f8c86b3886957ab736c4a44d15378b3783a47a321d248df81a06a97a7890 -0xf43b81b16cec70005734c6fc42ef638116df6bc72c9dc225289d077fbfef0969 -0x38c8df5ed9b3604ba75feaf7ad0c20af2d38c5bb84efa65bf27809e3f3c7c285 -0x64e1b2365f3680eccd19f69527d0e63508c3a815c45833662e9cf41a5d1a2856 -0x36a713c67b3aff6a6f1272f767da636f7e3adea58c714166042ba0e9cf98cdea -0xca8e57518a9883a706b1b66e851a4422b0522fdb3552384e60245f3138bc78e5 -0x1333a1c74a2fbe30dc6e8447687023fab77ca1d9f2814ca23b9fc1cbaae117a0 -0x175ff20d05b43a09e9c32dde7e4ca71f715b293062bc0ce0ae196e7c3e3cd3ee -0x2de2b97e15150cbdf2bfdf0ab701d29356f14aaec6da27ca5e8adc8b978cdde5 -0xc9557e418d31a9cee49dcc35c1e9ee231fc67e02888e4a8e75a2daf041eaca59 -0x72ce3a57d169bb92025f0cfc1db95ab5f629b1fcaea1bdfc6c5f91b3eb9b87d9 -0x148c93fb3128f516f126b00d84af4bb054c12ff116e03c6c46dc2f98e1729836 -0xdab198ddc353035798df083e7b3d0f004b9ea38fbb90b73c34742c4c8410cbc3 -0xd82c1a964e68b1e736ccc783308e3005e9dac24679476fa473ef37eabfc780e7 -0x3bf061860bd509c8ba51b810108419527c2050650f7d3dd998f8c68f53037c8a -0x9d27bd695ac62bc9746f0561a27d75bc63a86fedbd1b07f75d8c9337c4781660 -0xc3f1d86cf2526bacd18593c22cd2ee6cef4e67ad008bd6f835fc3418d3840993 -0x2b7a362d58afcccb2afddf39ab45111332c53f9a6352befa8f1d80fc81ed4690 -0x9f6021983a52eb581b2907b660df5e45024dab9cfdb8dd4fbbf54f34f29f6ed0 -0x83fc5d554ecf38a963bf29c96186271c96c2142954b26f68dc98a69276f47552 -0x39a68a0d2a928b6eb60b10ebde74c5a6c13d27ffd8e49590884189d28d355123 -0xc22bb16e876235e69c728caf81459939c4f7388f7040c061b775ff4dfc9d7f89 -0x22a6a80e8777813e595e8eb595d61bb22226a8f9e7e0e3bc78a2a95ab0d025d0 -0x4957b4d5792c3e4a520c3f5d59d26c2db8b05168b9a442f759a8d56bcb3080db -0x628aa5254670f36f33dc0c08865c94a9d5194f3b6a0b06d04810c016da78a76d -0xfd27a025b42522352d2b4204101ba0b095be59802997f6368d0f427137281404 -0xf00154c45704220be60b9d731465ab64423bc5dfae99de48f2d94bf6a16674fa -0xc741028c49ebfeecd3974ef2dddc0f0b4cbb0bac9a673d5838a9ad102f37387d -0xc14daf087ddf195eb2b9cba038fbc3f3847e96cd3ead5d7f0aa91cdaa830e2f0 -0xfd387d0cd9466fa5688d0185d7a9049757fd02f67afd426e23bd2cd859384894 -0x14d5786a5b3de7944316752fb72203768ad276af1e0d0cb45b2070552fb0c615 -0x9c93d8453fe115530aeff3b1557846fb11b5287a9abf78645393cfbd350d7489 -0xd51d118e4d8582c9fb7b19c203d5b4864a39256f32f96ae8b5dd879854969559 -0xfdb5ef5b874c7739f2965dd4626049e702f51271526bd7920aff048d25d65afc -0xcfce553329dcb023d11b97d7cd55336ddcd1faf0b0aba9924b38cb88815364c4 -0xb433b5a4fbacb66217f0e2f1f289e90bab49a2eb8f4207ced8cfb477abf7804d -0x9728ff47bb7c1bd6a5c34e231882472473fa0ceba3f0164db30d1d6e7210ce57 -0x883e22bfad84bf4c50a907d456f476b0a679f4c85b3d29e66edcf1963df9196f -0x3032b0f22a4a260cbd7c653d235ceac6f44045a67e91594cb68105d5a60798ad -0x9e0e9081372b5b2c9a0f36972db90a34afedbd9693705a45ca3f7dee595e827a -0x25644ac313e3ecf580243f7c55618937c8ddf6a355605c6b6a519897ff758988 -0x2b2ca687fe497cec86913f38cf71d3d10b2ba566f8b6bf8af39b2da12841e5f0 -0x5298fa539dc03e72066975a4a850afc9b004a424d13b98e04f1bd491c2d9d39f -0x94558a94f578acbf15a2f52d8239558c671c2fe73abaa8866c0994c89f4aaa94 -0x916e17282ce4dcfa3ecc8a4be43a298994a5d24ce87ea5a6f672afdddb2b7e70 -0x03e1f68d610d76542643cb6395598a5b407b326d544f1af9a6ba21b0c7f52e04 -0xbfe6b366d4c05ff88767466f7fce4ac1d668b7e6ed7151c1ca4a243b873cb1dc -0x6776c645c04083d307f2b4add84da45abb6a7a93be91d9faca29f4ab7b004556 -0xb0452b8ce5c6ddb798c760c79da9b3581e1be1191521dde3535810c5ecce5a25 -0x2b658cd53003cbfc801d16426de1e8337386ff36964af4aff758e1f61ed2f954 -0x3b34860b1f68e960e9502145c6cc24613d2ce41bc5d23eecc849a407063bff9c -0x6fd61f4c8223c35494dad94fb541692ba1c145660eabf0b0a3a2b4ac407ca888 -0xf3eb823d64ea2cb1972ce0072751b87b415ce921cbe4cac0837f0c81927893bf -0xa93c59c9baa92f956e29cffe25ab82fdc4badda48e99d48b9f63ebca668d5acf -0xae0f2a8e80f0c4e59995d4a443eed823e4de2c09cc5dba0bb37a5ded2f26147c -0x701e9edee998ca021e128d905a3e68fa8e50049be63de1c87bdb4b2e71aac259 -0x98ce1de80372aba0cf2e24a9eaec64ad7b1946a3a8811d6f0522424636a5aa14 -0xb6e58356ad88392568ba1140f64c1c86d6e2070e3e7b8c46cc0d761ab79f8dc5 -0x0e5b2cd6639824cd0421857ca578b4516ce5e67d122113d6fa2730271939281e -0x163c980fc5a778cd22539ab253cf62ff11f9cb75d12ca0a02a4d19da365aa0ef -0xb0e273d4c91dc65a73b6b7779f00d2b7c21633bc4b6fae9de7eafda8f332db49 -0x8127b67afd45311332ee63ba540a080840b15e8c269ccc4b5d071ad6f471722c -0x9819884b47ac356056f7c8c7feeee8043244bc79973cbc4c2ad079392c867e79 -0xe489fff2b8236cfc5f2477dfb0650500d061461c9b4f50d6f14e68bc775ee9cc -0x9d523d8ef45bcb3c0e22bf30dfd20302c8f68822fd07159b0d0efc96b8ff511a -0xe648b0d477cd58b392ae67e9c3a0ea7d5cec698ae86965e15f8c09e61e2d38d9 -0xe008bbccad0aa33db9cd07e1d92b0a2f1199b5253adaa6b2a173f1fc67e35cd4 -0x511f46e050cbcf72f0aa8041f9a727d05f798ded2a3c7687a699200dac500238 -0xab0c02344b35a40c1604862ec821f411f2298add92959f3043441ff056f96709 -0x91108e1ef0a98492f79102ef053b902cb83c2d9a7a16b12da3b4670629a5d800 -0x6576319315f412e4ed95ca6ade3bc67cad46c8e83e5acb718d6f42e8ec24fc9b -0x23c405237be8767c6aa2f1293b671bee9d064d109531520a54f4e4b49559802d -0xbc21ccd72b97bae44a4f70ef3945923bd0cffa3836b181b1787bccaf9a310907 -0x3a0e8bd28354b270c1ff18274a6b9e67983a20a2d12c3f76f682d3b03d4566e7 -0xb5d21f4f231b506e5c2df361a2574676505ac3313c38a62addf9c1809ef9587c -0xa02b62d1a26e5603e7c40250b2087b3b81f5a374cc09e5e55bc409f7ce53cb28 -0x5efe3db21fab046dff7783eef264056d7e767e8f47457ed2dcc078f24746b1a8 -0x36654ef1aa31564815e33108123e2324e8f74157916086fd5147ee65de4d8f88 -0x2c21c138c2b5aef283644192fb6dea4e97c6ce54931711260a50b60fc5dc1793 -0x9a3074a211a0c2505bc360a515af04953e464a956346865c18bdc002eaea31db -0x6c40f406224dda20e5568c67971730c7237cb9ba26cb2bdb7c45419d4858b69c -0xc9e011b441b5064c56e2e4435e957a174f64adc667497cdd16506405457d659f -0x2bd0145edaa4704a93d587fa6d11a7487b187fd68bad17a04923cc60f9db6168 -0x65d8518f13d4ccc33cee7db1397b1400ce14b417bb72e239a03c7b95e7473b1d -0x92926023564b3ad55663a061b90cc51a458cbac320a21928c43c7f67d80649ca -0x0cbbdca3918b99e5d986a6466b2ecb54f2b6e53ec594a52fd168886b36f0c7e4 -0xf25607c1b3b74aeb51792411bf07b6f9a9edba69d68ef65d109c416872d4027f -0x384380ba120d74a8cc1929ae52db7d4460246a44f9fd56c3704490f7a35707cf -0x7f7c2305d272128d367fe599e00696b37807973c972536272fe00b21307c34eb -0x17aa8aee58271409819c20058b6720b8f1c0004e1c823908895b0584484e4b4d -0xf30055063d7c7d3a4a00b05423eee2604843621ec54930907aa315b9603f7658 -0x597d4fefd84e83472836b1631d937a97de81822e6f69e7486641019811e25349 -0x48c5b7ff6850ef72112953036c08b35b56aad357227032ac463428d0ad28624f -0xa93d3c5d0d93ada75c5ab3c277502da8e892a61d4c5b733275a5b1994b94a09c -0x97c06467273f6bc69080c75a1ca5937426a24faaaec891705896180c46e9f278 -0x68a764e7725b51866c7cf704aa038f5f5a0cc7f0001faee834eae62446dfdc5f -0xc6570b890a4ea263454b2d6ac900f0b48eed0c23dc6519223814c4503cfea8a6 -0x12515fac76d406b07c547a9d7319ec2de87a30b2fb618d4e2c6dc132c7dc1e7c -0xf8c101e7cd4910ff66e9a74def96338f75b53aea54822d80785579de84c165d4 -0x74b215221e80ef01a5585963294261c477bfb218610c56b41b59690b1790522b -0x604aa6b872e60bd04db40887eb4838d83c6c6b4740b1cb7df84b9fd556510aed -0xd04e94f56bc614d2ce3cf77a33b6416ca7060a34800a0d0d8d2f518fd5f12c7a -0x8b3c94057d93e5715a779627cd1e2ed231b930635ef5234489cea991b2d59b9b -0xd256bddf9fed2b41cb2e852f6824e81772ea46a8fe1b94299491a455c415b891 -0x765ec35022023c6542e2ad93b67c1b701bb20c81ccfff1fc2fad6031b6adaa3d -0xf1cca3ef57ea16ddd27e3763a7a262e19a207a6a0b4e752d4e00b4d310a7b225 -0xec1862ca70ae77a9bc7cca1bc5a24427051de8bb804c61f6942cf8cd94f3dc6f -0xcb61d4fa03879f02d556bf912355b956e8b7e797280438ecb2fa5b4f44d326e6 -0xfd3feebf472e74fd32c9f2fccf333c39a1368ee0728d53ed0ead5360d292bf23 -0x59672b8ae4f232fc18f582cac6662e5e0a3b101e2911029aa86316660ba16aaf -0x50689419cb64c86242df64526b3cf26cdb3db7dcde5950a0ae88802cd6070aa9 -0x9ef278bbc10b3dc9622870359dfedd853b982ce537ac87666db4cbd9e9c7094c -0x1572bb63cbfd439bc1c55df6c2e6d43432526e022b83a39615f3cb5c7f948ed0 -0x6afc8f82ed472888e8c3eb167e77a2fd9db75ea35fbd391bde1e285497ca1221 -0x489002d88ff8515f1bca72ee213d7eb9c34a869c5b1aa6b54c7aca63b112024b -0xec230a6edd71b6f139278786e50d3c85f6ba52e2c705288e076dceed0ea0fc80 -0xdad6f541b70d64e1ffedb9512c3ee1b3fa652443f8037537f4fe389f435c89d6 -0x91395bc546e570ef8aaf77ed076f69ee79a41a2ce1ba1b670b1d681483729ca4 -0xf6aa04c8410dac796081ff5c863a8dbe85166ff3179016826f7ec1974d4793e0 -0x2c7fa0c8be4c0ec7452b7bcbb233b5952754d8bfc0c0b075a0aa5446553a325b -0xfe0fc52de345e52fa11c77e74f2a63bea2019b5b26e63608d104bcd93a057f03 -0xdc53a34492746644da2fd60924dfda468740b50b7dc3d4ab7814b494d3a920af -0x32ce47406aa750f7bf656eb846239b128175c692a5e94624f77b316d7483b028 -0xaa0a978b6beec56d0fbd281e8bdf083a4141953ca1ce237e6517469c478bcabd -0x8da089c3a515c6c7e962041815e3bce73284c597a956a7f70a6725a4bceffe92 -0x268907155cde3f0ff92b1e3614356d5bbb7ad794320b2ebf15abbee96a08f592 -0xf9592ab9c8a09f740dc373617c5c74a6d5a51dce19d892bd1fcef886a8403efe -0x2d38b777db151da46ea900ed663b243352bb1cab0ec3dcfc4d3e6894903e68d4 -0x52c6cba1a19b79a12a946fd81a8ab20d90aa42ae0870727aea841d1878f11f80 -0xb9c0264706d62d33b15ecda5543139939ab26747a2f89ddc2bc0effdfee0b9b8 -0xd34f4d355f1e98815cd9e55c8f80e0f07c9d8888a5a7407d27a5e3a52b039f82 -0x4fae09ddb1feaaee03ad22b7b2a028b6ce7b3d7f1cf8d00235e646d1e74d0697 -0xffbef035c1da487f007b7d2543df4cfa922567c4e07b9f3e01f50d02be84fa19 -0x51a96a25f5c862936d9862f7782be04584b80235bd564e960057d3e5e1f279ef -0x1b7fd9b485150030bc742b68d6374910c3fdf3394c73e5c33b2cfa8ca557e417 -0xa15224968fc04d2a3a90f42696fe2ac06f96fdf88f8ffb355eea2ed51cb81608 -0xb42900859e62ebcc11f7edb08b9f3d1b2416058ba5ca3678f1b4737a3a504cee -0x942448a43dbd2d2300f0f06c961b456afb69a41a4633379af2915f2a41f8720e -0xea5c17c8698c496b1671a6d193d3d0d1a0556f2b3836d1f05f797f8c65508e3a -0xbf33c2082440eaf629eeef270a81c336143d612dd19cfaeb849bfac5f85aac21 -0xf1aa20da576387f5ae81231560bf00d96f57b1fd2d11fc9c1c676c1adb286d8e -0x56c00af2c1f427cb3794e54180f9d8acb9bde590eb0d162bb35aa0b4ffe584ce -0x9ca4fff933b60475fa949aa696ce297e837f7aef28617ba43bcd5c4267c13771 -0x210d8c50bd791fcc8a93d64115dde3fa5cc027d45e3fc63ca66722e29aa4c676 -0xa757fe33a417b64072b6515eddb82408afafd48f88546f93b34ab99bd594bc10 -0xfc149dd189a9f379bc964ba0f5ce5c1d7aa6994fb4bac27c72ce0a938ad30ddc -0xcd2a0638f10ecc95397c1858fe72886c23c3492d03ba7f50815c783a0eb0972a -0x290303987f1ef9aa3832c4af590109393028de07f4400bc88d10112806685448 -0xf42589ef47855a07ea33a199970f143d7209eb5bb4ee3dcb3551a19aea03ad63 -0xdcb3fd2eb63d5927288c9f88f147b278de15800f4184f9c1841622be2f39c3b8 -0xd7be6b5303a3b506e2c84d8950d48d67d8e691ca44bc7f943a11eae6ac570cd4 -0x96b0985db3f5ed2e421fe96664345890433665f2b6ef0c43cdc609e6b0a3848a -0xd1492500380088a8f6b1efc0e574d044325eccd0c4fc57bca6cf192ebdb75f49 -0x3112de774f802a4766c222a2accebc7b9df313b77f38b986f896ccd4f4c88f5c -0x1b8dce1e377207ab0aa8206fe9f079d9bbef47911b9f2befa565ed3a96c2abf9 -0x297da44d726d774d6fe0d4ff2bdf9467646475e638e9d49e2993f55531d68a07 -0xd8c66f1cb8f80bc8caae6d246992b9c81abaa9603b0aa4570ebd15b62026cd1b -0x9c7a08423ddd29aae54fdc3a97414082d0bc7423547a0a3abf22e5d224ea297a -0xdb2fb23d829c898aa315720cb7f1334bd7a3642de4598d4acfbd21a3f8016b09 -0x93244be2ff84aff63cc887decd067b31f3acfcae0227bf763f5d01d7781d5cb6 -0x2b3bf1254c46e9104d2d8a3864ac22b42ff3cd43b8545badfd0aaa6380d7e03c -0x382255968c16a1583160a1ff00ec7bd9d744e5d7f64a88b5030be4259addfc95 -0xd2503f1249f5d03dce9a42bd07a3e04f108b72a7641299b1c91411e871695fca -0x4dc5971b16e762eb6f2b1321b8bb6afc548e41f6bf8669d9811bf99dfbc7af11 -0x1e0a96e3c4002efc8de6cdc356d04b27826b9f9f7a9598706b7e13a9b6f827a1 -0x59455e97f4a463456fe5a80b8c180a3f53834d3e64a305949b4d5bca7b1b94f6 -0x630b7beb785ee06082aefd330253f9bf22222675a43568cd2d06bcf7f1a0b18b -0xc19dbaa34fc76851288a29032de9a5c851a83835dec0df146d009bf41dd1705f -0x5d19f3efb573c2f8a2778689a51a39f99d86643d6853422db928b531932de445 -0xe1dd01a113753f963a179d6f42f350887c5c1305a8dcd5e4bd0e7406660b8b5e -0x250925303ab14f14ac1c978ec523f1b378825467cb280737213ac82e1e887712 -0x7bd2871aecf4fe5d9ceec7af06eca53d4735402268029184ea7586f2614f8a1a -0x068fcd9044c81f3b749e9b8f34e4478f00a1cbeeed71be3c8635c18349c801f8 -0xac78b6b9b51f6ea7de5e958e2f67347086019cae5622e2c9514b0f0f3e395b4e -0x7de491bcc3be3c49d8f608367d588d267f0843ea9b4f9bf79a56e108ced259bd -0x743d9e4770af8550f9e1dff8fc3eb6927e0c40131f4d5c9b4952825bf2628f3c -0x0ae5ddd02bb93241aca3e44f6a0ae83612533c0bbbb8c2915b91a228a5138c9d -0x726188b905e4e3b96d175fb5e1c7f261a4e6e3374ea0c32a525d404a01ad444f -0x17bac3719aaffe1c4922befa0c1764896df246e0a3b3664bef57c228d7a71d00 -0x61ab366bbbabcd974ecb51bb7935c5cdb913b3bab3730d7d4fc407978f7e8bab -0xfa7e30fcc7fd0c76c6c9217cca9761c1acf15fdc509d525c5062e262bd3394eb -0x4291930b74ddeea4961f421d0346c7834432d2a1755363bf18a798d538e09d47 -0x6d04dcc5d4cfc8b45a7a7f0c059b07f85d2b55f43df43219d0fd179058c66ae8 -0x3c7f0b6e84a2b47ca8a33ef57e2eede80b70fba2baa48831e70e858b8d61698b -0x13380e1a55b1d9a40a1388cb228f0266dbe0168ad3e478857fe49fe0cde45ccc -0xc7d005acd23cee3270a42743e61522bf3a782a8455dde9218fe8adb521a8bb05 -0x5cabe99d7543122b1eadb86cca048f86bf3e1c438bd711405cdf61e610bb095c -0xe07e100ad960da31a30b06a5ac446bb5df52f2c7a8d074b86a3bb71cc55f3ac3 -0xd5bcbe6027d9b3f9b006a49b22b11554efb94cf8272743f588aa3c9de3b742f4 -0xcee2f2bf502c10c21b31b89a80d70b7894544ca43f8b07247f2855889a110fca -0x27823713dd7e53cd15e13c4c21f8820b3d3c3eafb840dc5e9666a03d88fc30d7 -0x31c5692e982d2605c3d1c81715ad52878f9ee72cec737f0b4c5a5b6e1027fd43 -0xd3b9f14a148a155533e57aa209f63253c6e830aa01b07d04140c1338b6accc4b -0x59e67eac9b491c3174a10164e890308a998e4969af63411e85cc6d6dc2fbdbc7 -0x0b8a8e6014c7ee8b58a485316141b5c88a57dcce67d78280cc31d57057f8681c -0x94da3ec152f43fddc779ee7d38184cf16be00f1f60cbb58f246e665c29aff261 -0x6b852a66cab32322c12ce4a8c08512f74873341abcc2f1b51012d6218282b4eb -0x1e2a96804b3abec56fc1258f9cb05782b0fe568b11c670b146f8430fb22ec08b -0x8b62931db3d72a3894c6254fe34891698986619fd2b2295e094a8313fe4a41b4 -0x2eb74f2fa5b32f7bfe8f61f3cefc85878b9b59ce3c41f5297d22d7ac7706ba44 -0xd48a0259e7bbe15e336f818844d7e030bc64287dfc0d49f22d6b8158ddd27bf8 -0x1c520706c3c45f0dc2dc401860e366509d911cc4bbc1b1e16b9c5809bcc20f5b -0x501e641ad5c03f3ddd0ae619c675c686e1da20018a9f21ddab1457d6e9ffda94 -0x6a2f1b0da52d8e6c0b7af6a1e7c1b26e308fb079c8c7ea1b8b10065b46a6ba5f -0xea8a501b555fc928cd4e35289b1f06fd68b96e6a10ddb4ba998c8ccc1350172a -0xe3ec2c313405effc48f4eb777fe0a865f9dfb7eb8dbc3e8e732089e5f1f3bc21 -0xd7d4561dd1f1a109f1e0b4c8c7946991790e889a45d93cdb41a8cc4f70f0377a -0x9cac4c9cf54fa54fc207ac8422bb1dfd182f332b7e1928c27b49257feec85e74 -0x4f769854b409fab606bc8e3b0f0e4b3993bae4029bb32782a501fa8b3f7af5ab -0x684260f3d5ec9eea5a7fb74b78428624aa640ed661523e32200cd8bd69d151d4 -0x76218b9a820f830eaef2e1337997b37d8629f657e9d025c854fedd6842472b41 -0x3374d2e20afbf01008242d4d9b41034a09971392671c5eda546c2374564b02c1 -0x0051427877fd828b2ae30ce299546123028909940988965aaec4f86d73c1e936 -0x8d32b2274e0020dcb41b1c60d1b67a09b91c8c651d48ec7ca5ff32b4de2485b5 -0x75f49012d348c6d8d53277b7f3c90272c8360cb9475baf1083a31955031477de -0x7144c0bd21014d80eb0845e5211e49d7dc2b904dcb48ff7caaabbc990b48e0e4 -0xb8387c718277dabad4f66c6ade1d0118bc54b423baf0e9aa8e156b9c0a8f1462 -0x14a8f4da040e39765d0f2c90ea0a9d1100fe8e4ef04f658a6324c0b9e1eaa552 -0x73622b3266d695ac3155fde44c3cb2f2b97bbfcb5b69c231f697b67bc59f1494 -0xf492c6342858ae97ec90c2594b6b992c4dd4e2cf71606bb11a00bf02f88df4e7 -0x49ece25ce55bfced55753c1ee19d9bbfb0fdc24924cd06b38f8e6d6da8729005 -0xcb71ea1d304aac8d716b2a9cc497c641acd1d157c7f2ebd32756a2482169935a -0x86c84ad556cfdb6664444a3abc2ce0a06a7b3b6dae0adc510f649782d90729b4 -0x2833d9ed2eb26cad6a1ed9766ce5175248679fdc9414b33f71cb901284a51933 -0x328ab51285f628f6db6b9914ef55550db281fe9723c8606a85d3e786fac0200f -0x291583c38365b212ab6f99181c010172979e2f1fe6b5968264c4e771601d8170 -0x3648f4c979116a18d50cf83a15d4c9029d6cd1bc4dbbcd4beca3086148e21e8d -0x96605a7e4c1312fa7fc99b5b5154108c925f645b6e9dfc08588ecbd5b8ac5e6b -0x6ee27ede7f3bc4fcd41e40e545b33ee9414f5c08e19327a1572e292eacd9fdca -0x5ce9d40a74669c4de815bfb45d577439b36a1a56fff816f5c56e3957e9b35505 -0x005e47c46355523bf84301089f6ee46f408f3740d1b66d4d300ce10e24ea831c -0x848f0e17c1d9df7565fd56606e7c57e0b84eb4daf5a84cb86eefaa01dbed0be2 -0xa733a671f3b549ae6a0f1c41d3a6e53b6adb2d77d843bf572f295ea6d9c29bef -0x1015d7a33c9d8d609f81d4f06aacf4b8303335d8c0cd9a4cfa330c4fdeed905b -0x3754d75865bb6e68013632c911bf5bba8624df0dfee5e7ba908950d404335eeb -0xfa67352a43090401fc61fce31e860311e548ff31ebf650bc05a5f311f3274d68 -0xbbcfe7165d35a2229512133805f7310592062f27ccaa5bb1e9e8e018de6c8e67 -0x786550a94ec179bad80bbea94a17c38d1786c352821771b7c5fe5517e17edf5c -0x93b2953d612652ca7f258562a3086df3fb9fe3a256692a386c9f691874260f93 -0xa64d514e13e6babb474f5f04f8d6455478a51843a1e3bedb3297245cd58724b9 -0x1af566f2d49dc1b6012030d75a3a0b7a5b48d593e6db087c6454e93c61a1a359 -0x4e64ddf97aa6b24b32071b5966a9e761ee56cb27c955da3cfcb93f3e42cae23b -0xdc7d0f5880b966c3274d7bbf115f3f22c4750659c5382efaa2f32cf8b1c5d6b4 -0x139931b045dbe8e292b6972a8564ea5c3e3da68bd51ab82547d517962d0e1bbb -0xbcb8373dd737a704825bcb9406b26faf4512ea555cd8cb3aa5cfead2b1cf4a99 -0xcc78a7ae0caf667453c542e205003f51076a97c3a8f07b468f0d37e947c314eb -0x96f5a0d03df6f4bbb2918d3d442d4c70a4082bbc70492c4f251cbc9d8143fab0 -0xd46baa372301dfb660eb3daa06c978cf8491fbbba269d39188663adb8a041c76 -0x27d589f72a6e19ed03cc48f8942d01a8a5ad9283e3183cfa4caab942326a1e70 -0x8c35e42fdf4aa0bc11f4a3884ad402ba76ebbb33fd9644a59ac6ad1d9b084328 -0x746704a59a59132cabb6dbf36a03375d45b09bb3bd90613e110f8536588548aa -0x398a206ba06bdecefafffee95d65a34b5fe6a1c61828962669d6f1a1c1dd2fdf -0x2ae3662a6d7655cac2989930aef144fcbd17d8645399a0c1438f012ae6a3b522 -0x68ee0aa122a8ff5ab436339c1445a93e92377813c0259da76f8201e501a0c88c -0xe70995d06dc7f3eac85148aeac7b4fc2cfe1758617ecb6d1254753b8c9beed07 -0xa859cf83a7b0c191ef85b5cfaab4e06b03dcf9e977df97f2f6f211db02e01a47 -0x12bc32d49e4d78a9adb93ae0c52731f8b9d9dd6d60a4d2ff0c73e121ef490da0 -0xa656aefe9679d7c6542cf4842cfbd3b01196cdba06e50e80be7f78902706d4c7 -0xafc806f5815b93d63eebe6a58040dbc89c7b73999f45c78a7d118b13baf89540 -0x9ee9fba9e0d4180de2a3e8492bb3c218c588d3ab263eea549d7d4e847c197b9c -0x9d14dd5210c4f633f1467a95e7963cd2025c171b0b915e77766bee85b3cfb2da -0xbe21d85aa3e6a647d9433d6067c17e8f7b1fd34b6d4e3052ac8668dc042d8d65 -0x40bb75804d78db4773b6cf8b741658f75e9b3312d702a390348ff7d2ffe22f20 -0x99945c46949e45e5cef2c04a772d1569a913f1d8a9f798741a0b4be7bfd8808b -0xafdb4af8de8971125bfc0b0663b69df5587ce5cfcb262568f43aed063df09226 -0x2fd94b8add4bcb161275fda8d1e77a146e02e275332c06b62b479ab1c30bafba -0x1a1cfbd1a7bd03fd6a138438f8dd5fc421654abbe2dc4ea3f83068c6d999b1f7 -0x4c1fbed5c78ea0832b6dd74581fc9b1ef9ac31e14a60d45fc3dcfff8d2d0d64c -0x35eed41859ed21b08848c6d3f40f51d34d5ab0dc14975b4118e80bd87247dbc4 -0x648457ed1910af5ce6abf99624a6cbfdaf851ac7ed28d287fe61efdb9d1ef17f -0x99c0b97669c41b5a26f4111b0fa700b01c7733e13d31eddb3c31c423c938414c -0xf8699a1e117a52867e068acf2a6a27e95961f10734875140978c4469d61c164d -0x53cb56db8db2b271e7d59fbfc4f227e4b14fe469961899a646f923c29b7d1704 -0x406daec125849d75dfb93a5358544356862400e4004227ec31a83b0936891514 -0x7a864ac814362ed69c417b098b43fc4abb794b04a6798c6797fc9dddfddd6ae9 -0xd8c85154ed1b7e169f1f3b216c4a89cd1e98ab887c6bb502a8c9f7d193d8fc9a -0x7d9371f0a7d754087a5ce4bfeecffb673d6ef1b36d418707b24893fe7591e421 -0x55cd5682ecdc9f752b0814296d03cc4643e92aa44a687d7696be809742989823 -0x44b3911285f49647daaca96037e9a652aef79df5eb5e18a1d4c9075ab6ab3d2a -0x75733fed69589ac87053b70851f831a477d5f0d8546537d016f8e32d5bd22d8b -0x44c5738a4e23579cdc35aeecf8bb4c85fe354e4d9667536dad42042827035986 -0x1eaa09e8c6e2f66c23c7a4d889088a13d96ea3dbf7338b048f54fb98eac724a7 -0x51dcd18625f37c242408458261bbd16fe1329c38267c929e761fa0e4dbd2cfbf -0x9d668b2ac93e57d48cdb931f259ecb8195b57f4586a2074d21d38b2d693df670 -0x2c54f385b755c1e2355040d372e442a8876c8ab588029cce4847a29504d9c8eb -0x1812329282958c8265b3c176b7e7090595d14bbd9360b47d10601e0cea5ff8f0 -0xb2c7dcf76685558d3ffa4912cd43b38ebcbfac1b10f0dfda92f41914ff1551b0 -0x52652d9bc9d18214141b3e7cb9499f107df1fd2393d0a7c051952f374713e1cf -0x48cd259cfbcafd000661e6322d6fcdd0d873e5cac4279b35db87c8f53e20d43c -0xa7792699acf7c357331a8362e5809391ad891bfe604ae50830de7bef3f18e3ba -0x5feefdd547e1b9dd86de09eb5bd68874d98d1d2b3fa3cc16478705951a3bd873 -0x077f9c9cd58d771af6a0780c8cb81028d83e0cc90d685de3a17fd4ddef1cc96c -0x00c820aca628a6b4e7e095f593b314ba84551d832edcbd95ded0ca7df3309e67 -0x4ab662091fbe2ac26f6797861efea7ce07a2339bd4e752da84664e85cfb5ab18 -0x049ee99c3030e9378c28b36d4761a2cf70d251a631d6dd7a372bb8d7a4fb7926 -0x8afa1ffa6d8c99d4987abe34535db52383b6ab954bc85c6a624d27a6258857a1 -0x4bb153282edbe59a9bd15886f05349c194f95f906752ebfc70e820537919446d -0x85a5a2157614f54efcd0f92c96dc4dc9ff5fc3c68429a0b13897da14f6db4bfb -0x1dab849324d2829e9f7989b1585ebe3b1d6e28fef915b9f7eacba0bdcefba75c -0xe2fce1d8473108f57874b69d43b9a18424d8a91091e34f52fa9ab4386492c5b3 -0x604a658f2eecd7f85c3b790826bc806059d778dd7f2b42afc68e6bc41d690308 -0xa46b32011aba482b0038db6cf9f53ee4274df20b681d4584f12c60925eb6a9e3 -0x9b3f07c00a51bf9aa467fe6823b98321b5aee2e83f450319572f998966deb076 -0x41652e499a8c7be6cddd38b9e6a74ceaf4ea1f8b91149050ec0d9a478f18f3e2 -0x32c0fb2bce5e00364c298564f0788bcfdaa817dcaa8ad67625556415a84e8e8a -0xedb34d904e0c16284099d380b5da7f2ee65f9435e1ec697c6b294d532c926c54 -0x3af02606b89c5390810a63a34ce0c6e5a31c8b7ee27732652389efb536e5c407 -0xfee3b5f4a0ee50110b8e29885231c1459a24d831d5cc13f1f14735ae4f7c7176 -0x047364da8fa98d6866a6e51a163a68d108c3772cdf71abaf8f751bde48c4a89a -0x8b1728cffb8ac8b96a09330ba1d2734a9e548dde9d72847acaafe42795ebd72f -0x0cac59b30e2693b04e108e796081c4318e5977fe98937f705120b3c2969fa2fc -0x86915dfd0638b8d0425ce994f319867587dbd80a0b012e981141b328995a16a9 -0xbe68b4bc9e239adfd9b1e823d40b2d78795f3aaebcfd81eb44cd49c88339de8f -0x316faf919f9302d941e8075a4027903e909e7983407859f1d5f43f023c46e47a -0xd71d1176f41840a1f0d25f25411f4bf76e8af2c1791d4a10b27cd565086218bb -0x2368e6b6a835ed0a745fefdb53be9b18ba18af1030db0c4bf2958405f47d66ca -0x8a23b87beed5fb4190ed649fe7aad9fb92cfc9882f735560d7c2f6ca5719d703 -0x82a1b3d46adb9986ab652c71cbbc23d96a865c97b482374ce622cb4b13a7efa2 -0x0ab346ff231d42b32eb28fb188b35e36f9336694df0494647fcb902bda39b838 -0xa9fea6a2ec6613be5d29b23d4b59ed9377a126349e407244a4ac687e411c0082 -0x68c44e607db1a4c0eb002450cf4cf0c02f849a5612e6f28985177c0b184a10f9 -0xb46f22fdac121d0940fc45a741177eced9b3fc6acc734847788712b56ca2b496 -0x23790e085a4083878a454e312b6b292961babae6b0139ad1c2f4de9f184c0842 -0xccf952e05a227e5803f1948e95a41b49dc3604e2d5913658f3a0197d96b15c18 -0x7a7ebdeefeb105f0c488884d02838277602fbf3aa3c079e544c807f6cbed74b6 -0xcf3980e6de282cd935802b50768f48ec3ce3f2d7a3b8860ef32e3fb4f7e0ae4e -0x20bce58418116d58e0cbe86b9c3d6ce74bbe43cd193071a3672e419f1c258378 -0xc4da9cdb1e418efa401f197918a760e5e58f42fb452eac37efb9a570ca09ba8a -0x07ab19085a60cb1d4fe9be0ee1e47a9303416529b1093edd90684ea644713092 -0x6b5a485a04cdcee725b71d8f56c98f4754f3815f350e972839da3efed6a098c2 -0xbd16340ee6c1e44b88d37530594faabe20614d71067939eecdb744855afe2749 -0xf7f7bc9573741791b01c3a74722c5ec4c3daa94f214519e2e6cbbc01f3875bd0 -0x0a74e81e9777d319c6af39e3cda8381249fac7ea9134c6c56555496b7bc009cf -0x9c8fc851e29dc944961cacdc0a0a8850d8e91d1440f455a34c7b9c9788b9428b -0xe911c0cea957c7f27f64cb8087b4de6f338f15b65169fed2f5b757884c5efc32 -0xc27908415cdf3f9d05669c3253c9e1f44360c1e788178b60a8f5f5929bb49608 -0x0bec795fd6f8077d7dd70af812c93c82f3cca4ddea415f57fe0c420d5f61831b -0x51bafa8f62564dcf17cb3b1ac3a42f80cfe2467b0a04b88eb92f21e6472bbfaa -0x919799a6ffbb4a59c0684d1c96a198fc165a3573744bcffb41a671c0a6915394 -0xe70ae8954a434014bf954c5ebff34aadd58c49f8cab960be531d824f0abc1c2e -0xd6da211a38e0f18b22510ffbcd6ea74f14b34f8cc9ee59c2256201a028416e21 -0x29038d9d6f96cef508040050851f2bfc488ce239f692f0e79fde3190676d33c9 -0xcb30013763f3222629557206d6704f03b78540be62243cb2ff5eab68416b86ca -0xba1179fb81ace4cf2ca0afaabc2d4e77a73977609ce60346d663e7f78d71f77a -0x534cb43c73439172d064d3f4cc605ad14f318716dbeb160ea3aa001cb84e501e -0xc929588a04ed30c06728a583b3713c06a0242ed702cfaa33558f6e3ed08ce575 -0xa89f132df0abf6139e896bfab90d471d1aca55f4cf0c6467297489694c99ce00 -0x07aa61288865e4a050e02e30eee586971fe6f2a6d6093ba10a4afd0b98c3bad4 -0xeb8b141e58d12b0ccf65ef5d09158c2853f26056eb7cb8b1e126c025cd9c6144 -0x258ca8ac815d10fcdfae0b6f40ec6f6f789d1aacaa22259959de05479deeef23 -0x68274c671eee81c0e923632ea71a90346602dea3896bc59d907a7f77ec72b9ae -0x26b317893981d050f2ec4c59ab1ba55d57913634a135edbf1835374945eb035b -0xa706d136979518df2b5d96985114196f503641e072f90421175b82183f4e73bd -0xd6e0797ee03bd5706ad03229e5e81ac6bf46fb5491df76f2920b2d59efac3189 -0x46a31b7399e10a5f544797cce44667983192d1b23e573e4a5b87c9bf8e5c6939 -0x4e98e6bcf905d0848abae3a266c21eb53eeb86162bd547779b9df5fb94ddbb88 -0x72426338393b5fc3e3a4bd2c2d091bca2993a8dca88ee4f1c05ddf5be1c27991 -0x75877f06d94388ddea24528f7dce1dd1636e0d74c2295d070d5b059f8f7734e5 -0x238648f6b7b1175a682103e3d239dbe5efd44b4cc16b4b6ea0b8bcb44dd6d11d -0x6bb3b7b30b8a68d0b749fcfa53d3c90404830c88f099bbd75fcbdd7d593da941 -0xdb0aa90bfa0542cdf37df72a64f0967d2158cb662c6117f5173901a049910136 -0x198a6ea2d8976345818cffa62950fb79dffef750f2847aa8d3af18de56e5a95a -0x152e0e2b5699aa3d83ced75912f7cc87c62bce8db36a821d60def3f8a381efdd -0x434a7fe7c7bd7923a65d1c6273042d8bea112d0be3d1944fd833885518133672 -0x66fe89419740cc83373f453a089ddc27c50ae79c96a75937b9a49d99e6e0bd8c -0xe1bf677637bfd9aed31879099a9593e7fe26a6e99cc90c17d4e6afebc97be9b1 -0x29a5e270f503211ec81350bc2bbd3e4d967de84d38a5a8bf043e13148061acee -0x9e9d508adbd94943d08c42f2b8a20fc31c3bef7652b6bec591048a3ec1fef538 -0xa82eac19cc3407ce2ab38be233f58696572a1dcc99284f3212c2b1e33c024266 -0x434391d5133d40ee9f25854f72e2271410b3ecf5a37c53973fb3079181b28a3e -0x6b8dabd0b4455238a8b3348a09a9496d51de49d87cd76b8f2e199cc7b2cdee8e -0x948112f8bbf829dc17a7e7f4e8599c19cf2577eeed508c6dd52ac9a58d076287 -0xccd5673557bcad73fc6516e24659b1e61c2a988eb468f2c08203ca42bafb0c99 -0x9a9cf9f41f4276d873666d886e371761954233ac526051f5b8ec1626b413fb79 -0x04b317bd7b834c5634d42d32988cbf5c4961be52a7ac15dc1c79e7fcee775ab1 -0x2d93cccd320fd0476fbab9d71074f5a022abcce66f40dd85eb72a67f74776cfe -0x61bdfa9dc913bca01b078f558ea7b130922a38f6420784a12939f431f6fa2d8c -0xdf9ed753b6cb8c6adcc761e37e48bb613ac7eeedc8fc85c6469098c85b0677aa -0x3f740e19546d3c347f60094085421c6f984568c44ba920bf30bf4d0f59a85208 -0x685b9ecd8a1bb189e10a262c612ac6a56288d9e4a920cb8ec60295916aad73a5 -0xba87e5f3a45fa80b6ae09a53f628c5a4078089ef8ff0de414c1dc1a3d5f34c08 -0x8fb76fb591be88769b3e92ddb9f4bc04402ebcaccf58a693301c83b72b12a1c2 -0xb423942186f6199e71ea7f9b996ac472d230efb5c1dd2469c129b5e3410de1cf -0xdcc436d6577413fd679151e3b1ec39b08f87cae190fcc3a5d003c80671eb6084 -0x9dae642c35f43fe600e87abde23afd63389096cc22a2ff6b8f7fe72d463a6f69 -0xc106215c90b38b0f24bd2311e0aebed870c6394348db23e9497ac48e0fe52773 -0x27acea21be6381c47819d87d24929cdb1196666e03292b8ec79a891dc8485a0d -0x4bcc250f3be13e402cfc05e0b3a5a8039713107e102c1f2359cc2f03d6d437d2 -0xf9f02b53e8752bb9a3d5eb760352c5346b7d042e28e37444305b044cbbbfd3da -0x32e9119fef5388c64a9f7f387f7f1533eb3f1044af7218ede107e978ea5b1e49 -0x0d3994559600516a31874176b5679a34ab3f4dd843a0f9abe7955da0a66f104a -0x8cf8ecb5dfea6dbea4780618a8bdf18e4f35a28c3b8700ece614405b89bdfd7d -0xfa023c1c0413ac22e8fb3268ebc1e98ac84e9a18bfa3915e5aad3a2b12c4c6f5 -0x40597ee9c002a5f696dfe2fad1a86df0584c07d1f9e67013e1efd2e061f26419 -0x2fa195473d7905f0612d898fac8b7b67f2b9b67e6577a6a1df244eea301a422f -0x2448673ccf53afb884a82b5713f026165cfbea85b75896a169144694852f7385 -0x67e9d11bfbbbea598e153bca2023a9656133f7c2e97980ad40157b34f528460a -0xa5c228797d74ecade75981a02aff92f7e10dc126b046b8595efde905bd4da330 -0x023e02410db692434f659050a42a33e20f48342191c9385223bdbf310d1e50ec -0xc9729b8484fd17bb5c419f6c597295be54b79b8480c486211634708cd7b31106 -0x0dcb327442fb53eba9a6503075bb7b9ddc58367ccd164d17d0704f19be136c3c -0xf51b30fae5dde5581e5870f4cc978203a87854a53cf11cc8214789674a383172 -0x46c8da1f1c08b83074c67f047f0ea7fe85b33a6a7c6e9cb81e0a36e781049fdc -0x0b20d8ae7bd770e909918a5d5357cb206462cd9365d6f7bd8b2f91df404022da -0x5504942460191f2e2bcc2d40d4073f69f6349802870629f7bbc3d5442bdee293 -0xa3fc55622d4b0a2a6fa0c526b68ec0de757cd065df066139a67922425d4d37e7 -0x35c4c78bac3ea4e30f8b367f50ff7d685887d58b2ca90d2d37e8471b4ed95746 -0xa8ca8f9963bbd783230f87b4c468167693ad34a153c09cd0c306457ef68f60ea -0x0c07617a104cb9159d14c116aa8e234a409f2ad8eaa99e315d307938aff9eded -0x95401ac2eb51382b5328119f5a371f5fef755e5cfa6a16918235b7b6e5161d7e -0x95fb0059dfd72a8abe3c764610f5ef11d33cf71bf3466442e78283815abe0eb7 -0x91cbe2a6ba2dcece332f034e27c58615f31dbf0235e310e2f0c2927bc6181539 -0x9177e8acb1bcbe41e0035b2fbff2c4948a76111b16f9904468d3ef7c2027a9ce -0x4d10826c771b8127ff17c01078afe927a40a77b6a804c383c505425d559a4a5a -0x6f2e68c48fe12ed53b2252856cd3a5f7d4f5f77ed22a2344a06ba2a9f5f05fcf -0xce36cd33719abef1e9bc92b5dcfad26b1aa5fb584c014a897cadece0a1926e7c -0x2f375bb42576c5c45e4458b6966203573936668e99f68bbc54ed49bace056e92 -0x7d864d433e409050467282d5f7a9b10c426539c8741ef8e38e86f6a43aad89b1 -0x5bafb93528314b8995723364bdffc3ea0eaf3c293bf3d11d22401c85d0fc954a -0x0db5926cd491332174d0a8aaae29e30c24e244686a8e6842cade6af938f6a18c -0x01e276d1c6689831ce1079a88efdb8f659d1c0464b8e65acba742cb41c2f20c8 -0x48552dcf2838bbf00c9c86d7ccc55ef40d1afd7c9a92a7b15cd6b71d376c599d -0x6160b07e4997c86a0b8dce67f840cd78348b9d59bb16964b3502859a8824b603 -0xb15cf9e68ba01eef82890d82708d43074efcaa0196fec0b5b5c0986d4f9fa919 -0xbaa30536281b7850b4ccaccefb989f3f318cca8ce77a68f02c117b3175e331a7 -0xb280c2e143dbd4bf203af55ca18309539ea58a7e5923f9267a07cb73068c34d1 -0x612640cbd685db4ca020bda6de5adaf4cd4ef66faeed22f0198f078952f16439 -0xf158caf831c8bc64409b952cfb7f03d13221298bce8f225e65c5286caec047db -0x228275ddcdf42469b661032804b0cf2eb484c1af2280e231c078034e4a3050d5 -0x10290d2a18cd7f2c811369ed0a9c362ac381f6cfa14d1c37d4b7d1dc12cfaeb8 -0xe7cfe240082304524a990011571674f3ee58fe6448ea71bab7ae0b44f597d690 -0xfdf53a10098e4924f677db09407f7c8c9f26eb3300be02ca66ac34433c38790f -0x4764e0d2204ff3c560f713a2aa867ce4e9732500cedff65b91ab4864b96bef56 -0x1eac71f6ed0ea1b02a448084851d8c12271cbc0020278a1ab465a0024dab2d79 -0xb399c56c2db42c006efbf1d218dd4431464bad22d3d5da043e0794a73d2a38be -0x5bac87b6330129a357572c8d86fa5d36aabb09f4aa7ab10a641de7555c0eb20b -0x6a2f33fbf2fb6229d07d1f62d22d492cc74712f7899b855e0f2b73d3e2995b52 -0x96b36dda10d6fa3c878ac7a834d4ac98f42023e5e21516935f29bc167d061b31 -0xb6fadd6b2855064b46aef193e29a65039e894bd5df33f6c4d5f93bacb92221dd -0x7f160e97f83c33ef13bb5824a34c4333b6eedc322edbf3d30df14785310e5a1b -0x8c7752bc54d31e8b7b0d2537c3b5dd4bdecedde4b9f98060955ae948f8452f9a -0xa5d17b930b02be19e06a614520cfc3853bfd0f46b8e51684efda29fc3a5bba71 -0x588aa958586cb6df77f4949ff99ddeaf2301941e9b73cadd6a5d89acb1e9c5c6 -0x782f2814d900a4ab0215173c54bd71aefdc030c9ee45afd1139c399f2ae07864 -0xf9f826a041841ec50b2220312aed0a410e2e631e9f0f2f4370eb4960edfcbae3 -0x35652b8f828cb48375c76d5eeca284df2107fea47b773e22625afe473c6daefc -0x2c036a9b37d73581bd1f00ab0c0bffde6d954966955517a3547e15c2514009cf -0xd4951a1b79c99d2cd77c0780dc620bcecce9d8f4f6435e6ba30ca6f86adf648a -0xb910714f6aad897a4abb76d1cc56da9baabcbd74b674c40354f6dcd9f7f555af -0xdc6b36aeaeb28b9ff09027c9a001b2e23bae52e38952fc005c094f1a69a8ed74 -0x5b56c4c924a92eb7d56eb653863556c0df79d63b7ba01f2ac5902803a1d0306a -0xf9dbf9f372eadb152f0b7eea25b9cc82ebbe0e96a1be1fa606e94e260eac8f03 -0xdedf3e12df98418bae04f7ad6bcb3c455b49136cf65c2912077a0b88426c3e8b -0xed3b949e221275bcc97624fb6e6490696c8bc098ce20c403f541ae8597a24a50 -0xc55ab0fdbbd9e6338888f459e9fcf2020aac272a291df3be30a2525c85ba87cf -0xe6a454a9616cf761609c3984393bf07120636e580b580b47a0ea1f817965c8d2 -0x4107356c43b3fa72345780ff36a9acf6b4f01ab3d6e3113738be419f1f850159 -0x6f2d47e0a7b1f58373eb6e07ca87af9d5daa3a3b623f2d4211cd86eacdf958d8 -0xcd4903405f8812ac5d2956568a8f65902dfcecda85440144c2f4f7f29d831fc7 -0xbd72cc38ef82178a77e90403994f0fe2162ed05499aac4c2f8820e6be65f718b -0x09e78167252f9458e9f1e98970e0ebed8e71be002d140f579ff1f2a99647b6ac -0x795dcbc3a8fef836e82685937e77e6a178eb8ca1575080119cdc6e07e02fe466 -0x9a180dd1acc04546a0306d21806cc7736d829a2c3c062fd71d74ea56493e27b9 -0xb55ca4db597ae316100c1cb50fdff58e3a0bde8b8227dd19a75f508d06c24bab -0xe931f35f2c75ac1dc75a1453f4fe59e54a11a180494b457da6d9bce41d80fa42 -0xc89a2366436acc8ca8c1608b84a49a798a36b8245a92afeca66bda8ecbbadcca -0x89925c980de2e4d14a0390dd51089e0f778a9f320e6f93c6c538a92ab7b36eb9 -0xb6738e42fe293c5403b8d32088a4d656ce18aa336d1293a3307988b3ca22deac -0xd29333959994f764bd076607b19f6f0ca37a42a98d830d194cec68ab6a6d1011 -0x376055e471ab22d81db462238f16961ad3f685476ecae112e2cd99c858b95325 -0xc2652bfb0680b524e1bbe83d211e124f58858034a418a80abf76374cfe127b82 -0x87985922a4fa045364d2ec5742dd1638e68b14234f2c9b0b00c7ce9a11a37309 -0xe4ced6321a232ea15c2d06347d6bf4da4793e316a3978c0f8868b1c05a9664d9 -0x480ba63f1bc59bbeda23ab102fe802fa3f2e1b945834ae10ba773ae4fcec70fe -0xd5e0927fc1ac0a366e15dd5ca3cacd844a34f211ae4881576236ed376f4499b8 -0xdecbcd756a0b6d72a2d353295bfa39198505ebbd301efe55e3a21de39a69b916 -0x784215490ea7b6ec150c0d84bbc28011ccad1944ee030bd4717169b6cb39375c -0x8faddd99b311f6e38a328f218acace4862a5b1010ca350ae8352a50ca5138e4e -0x5bd8cb6f6164370bfed4cc9904d97af50a507d2da78fa32ac3db5fcd4b0e4091 -0xe5df5dffcc3f0468822c2b337c2ca16d71d72cdc93dbdcbb97dd2bf7498d1ef6 -0x593ea74e9fb7ea51e38c4c061b85e97037651c37f1b4b7ff826b124f27c1dc31 -0x6fb3b09194581f08b5aa407d8253645e7b987bd681319b67f2f1c34949849ca2 -0xc7fd9dcbec963552ab38e8a5ad1296de1c37b26efaa2c6a1b2bd9e0c1285c325 -0xb810b71d06128e4320ab364f65c08ce457193c211151a8d623cc194ccf40f90e -0xfa1ee9431985f0480b5e1ffc59d02303387d5337d112e7b3060aec364063fd25 -0xe0936c22c6c15eb8f5a8c57897c421872f756f8887010c3817c5111530d4d8b0 -0x30fadc5bfe0125df0998f4c731b76819f6e23e39122feaac47fd003427832167 -0xd1fd30ca19ba301fc00420f4bbf11bf9d57a1a1b70a74fdcb8a5862ad96d2ce1 -0x8a1a30b698fc2638725173797e5058d676906958ba03714fd9dd1b65b1c60d3b -0xe0aab0e9a8478711aa783c15fb52008e2f9cb7e5c625f912763a507973519fea -0x4a81d674f6b333209714ea9323d2934cdc6fb838a8e1710a9e17a0a8db7e07b7 -0x171f98fe172963303827f421d52ed461ad6d4fb062a15ed0f99d201b7da643ad -0xdd42f756c90ad4ea53602198f7724242dbbdce6dd6610297242a8e69ba15037b -0x0f2f092a421aefffd6298ba392c98b01b2a794769c2dfcbc7531e7673ad87cf2 -0x99e5c954c15f512a4ba5940315e12014bca67f768380f654b8e7d2dc002c7ab0 -0x36425354abf4ca0a9f19edbfb9d6451c881d4cfe60bd78bdb22478c7d9ae1ba9 -0x20c9bbb86db66564200ba941dcffad542d1ad916e9de21bc1627c1c56873c872 -0x4ba6402824ded326e84d54c90d9a671a5e29aeb2c47e5460510153229d78734c -0xb3b62737d7e61fc81dfb6ccb1967f144be6c60b6e6a6b7f8e26f455d57c7a470 -0x72f43947a583a86f7fd12c8878cacd099be8802138f8328178acc7044a1a5283 -0x8bfdbeee3d5fdfbebe671753c124bc2ba411565dfd09d8152dff18b5ec208679 -0xc082df878e5601555c3dcae8db382598acab75905d2c1d16d5736ee1389ab0d1 -0x594c1a0218ed4f1c3f981c515f0fc677e262f62a6cd43e8b159316c67611d20d -0x570fb4328d634493f4b0484b856ca84622a788a628be5b9064c441421336578f -0x14ad8b8fbaea07ea8998980f15f3e65f7247fcb054c9beae71ecd6052a8a062a -0x4a56f71bcb43c694130b964dfd2f3327379ba92f91d69217e45f53f9f561dcc2 -0x1ede290164460f61061fb4c916bae5743a9b2cc3b1984715fbbf7863ff1ecd8a -0x14abce957de2d8c3e140593ce23d6e45b3f95475eb616695eefedc1ed992169c -0xfb06a5335203dd19bcb67867c2b24a9227564300f3fc570488ef3854ab1824dc -0x643007989985654c6571a34f42a5fa829f32399318da379813eb14f2f7d942f3 -0x1067fc58ce4499d9ac388b05c5942cc33abfb91d96c22e8ef781c7f24d33c8c3 -0x1ec3e0551dd38bc14db3be9735c3e28fd4ab8c065bf400be739592842af0170b -0x14fcac55e199a440f5d385ba4eaa905c043a0ee1257a00e1bbbddf333d6f39ca -0x3ff9d03ce35f48b92616395bce7a0efc21664802d575d0a5661c2d7e62555541 -0x9f077dfa93598fb8c3aab8e6fbe88ee817ffaef59e03aeee982a2e776efe3f93 -0x8d8738812f8ea65bf26531d1bdb458209147c87a093256f49c7457a19e4bbe64 -0x6962a3c4a7b17563989935d00f0cfd6c9c9a6d082afe8cf94584434926885555 -0xa67a59b671be43db5e8a49f567550b799861c82bfdd23a326f8a04ef47fbd383 -0x78a25b82b65439bf6f315966d11928a37774bd90c17ed78e3f9e253b76991a59 -0xe024a6ba42af7c20258e0d72307498ff69aeaed7ef10b10ba2ac9f19c8a218fe -0xbf8691991c8fa064b3f3012b1cbad12a21d81b490320f569883e4a6f9d03977c -0x6901febac1ef5d1699212eb45af79e76a936f57b366e6ba2bc1e343e9912f7de -0xc79c263eafaf88e8bc5a2c8f0f129224f04f02369fc01f0b731bfd8a5826ed62 -0x5ef500ac3c991b6ea9b07e4982f3c919efffdb5c4415e89a06c49a913d626356 -0xcbe6102b466304c75e1e1756644cb6a105ada0442e1b2e7630ff99f996b55716 -0x9861bb2a817a2d6dac4a42d8fb93e15b4c5ccf13c54d3befb26c9e254ca350df -0xf551683b10eecfad41a19d44cebc34f347f2b2bba6a71b2952693ba5121d3cee -0x1e5bbca0904210e925e69b98ce3a573033fb6df8cb2c63f5da0b1958358a5aef -0x8cadf9eab05a5a70c6f15116d665aa313c1e4803d0a69fd3dd1694c55e5ccc21 -0x33b27f781ccdea8c0aeb929bdfcd50d6894e9337f594291dc5b08e43eba3e1e1 -0x59f7ddc867ebcce41cfc6e8a6940b829848c1099f5e046449132d3870884ee52 -0x52c36ecf3b83f2d72a2184e35d51258a746172296506b3e0ba1fc195e9e44525 -0x8cdfce02d76a5036883c45f1e6e78f5bb456a0f56270a917466f30b5bdc6f529 -0x3942560bf33d1af9abf0fdc22a701f2e8bc692411d47441b638eef1d442d15df -0xe452f035451c9e0270a6f272903271de255468c7f80571c45aa84ff8e6995f13 -0xa19db38de97599cdd1d9b2c78678ef70420c050a1262177f750aea88e888e76f -0x46036634a97fb3d640507afbf256a24365c1ffc8eeca33bd75241ecdd39f1f0d -0x60b14ae80f91a0007d4d21cbabb1f809917a8b1ee92d188a17bed040802fe929 -0x344976e65d1e1ff93d3ad1a70e9d83648e09a575f3159143b985c5d08ccc0178 -0x7c098704d478775407442445852eb013fa32f9736992b081ada5b305cb229962 -0xda7bca662cf12f22ccc490f4f2a98d2d64bdf540aca9a7def50edcede0310890 -0xf0b7cc9260c16fe5eb508442eeaee2194b48adc266862e1226473c4de5b05a7c -0x24fe6238dd80777bf30e33781a11a33c870b93f434e7a6af4cb67fc3fd13c823 -0x19089ac5f279fbb113ec434044329b27db9abb49aa5ed2f6112a8b0efd58a520 -0xa4bfbc6f5117c2451a51c235a9126c36b10551d73cd7ad3fce56cd07806634f8 -0xcdf82fe08e9decf1dd14d68f0aab2589e8b4cd595b1e3bcf1c97d9d4c19b9c3a -0x4fa849877cc360dc4e11cbca28ad22b270eaabb8f166e89bcd179c8008a74e49 -0x42757c31298ed51d4ae6fe7a0b73210bbf2874cf09ae8f586976ee43ae13c644 -0xd5301a055bf53545cc343f272599002170ec00a21c7f904173b51e9f0f202aa6 -0xfa9df4a3ec9b6870292cb069cfb507ff911f4eb89465969250b8288d2f5f0811 -0xe800ecd7db964396ee239350b8fe4f4cf969245b7c0679c3f7ae5d3568fe5f10 -0xe216141abb338a7f4aaba892cdf7684ffa05ab1ecf91e03254ed44dfacb8ba22 -0x33998fb394f212f3bc0f6830e2037816d9bc50c6e4c237e3569b05b9f7783ccb -0x0e3377b3209511fae82340f658273933784fda9ebc482ba39eab01db38147dbf -0xd4bb950a70d9bb82ba8e81f70b3bb7d1bbc1046afb942c5b683c2a0e96cbc33f -0x2e7f64bf0b3bd1dac4f58008fd6b26adaa36e90c8e413d4e3b6249d6755f50cb -0x7f952000b0cdf5522b0f06cd982aa6de76d5653dd51118a9d60d3a9f909f8c6a -0x349b09a67130422b6990d69411a3856ac56dc1461fe0f28d891abba8cd8b5313 -0xa9827f1edaf3e1ccaeb93d3f57f6cbbe7a8d87cb5ed20903012066cc0cc8371c -0x8963ea2fa98a0aa29874ff24ce88ec0663a6ac35dc64f2cc0f0068562c18ed6d -0x8679770111aae219587f7c8b34d4924fc47431d556aee89ece84266cb70a62ec -0x3e7020b4fcba99aac7e44f628ff12f3cf12bb036673c8b5e5eae827d2ee0cc7e -0xcbccd11ac6344d5452a485b032511d0f217e4d11886fd51dc165ecce2b8f868e -0x0f863e16a6d16c5dd77961ac49ec85d4412051092a788ee85e02977e046361ac -0x75521935ae0abb14e800ac18085a8a5ab572bf6a64c42656dafd24d0fafac694 -0x74592495134cc8041587898acf6f5ac7b8af7968f2be5edaf036ebe815871f2e -0x4646ba4b56bb6eaf7b800f7e2dc6dc9e4ba2ea0e518f22f67a465ec6f6e112f5 -0x66d23eb9c4fc856935313dc9abbc8620722d15c456a7028befbd05d1e30fa7bb -0x044a0e5f7847db4ca1cd4d1e6ee799558665985d3fd902610f0bf6434f30e11c -0xaa4b072df91db7bae1bd78aeb8edf167271bf6dd9d570bba25951f3e0b18c3cb -0x4de2be65e80b18efc2e11cd667ebee38a2a32dc7916ee373b53f955981aedcf2 -0x25054f2af3bbf78edc1a24fb3a438b65816b3e1a0aef7b46aa3173f6332865d2 -0xa34a6ee38cbd83e08b5ad2a39f71357fce96d2706e88d8f9b9742eacf1f1b63e -0xba80bc07fb4133a5ed967beea2aeabfc7c51dcef32903bde253f101ec1b5d91c -0xfdc6fd93584553abe4765d9a3ffa15d3530946c4e2a098316eb86409470559e7 -0x2b8232de7ea5af64d314a8fc75036efb50d94d291274ae8834dbca64868ae0f9 -0xb2e7fe68a38ff99ea6d8b6b7b0ff1d3bd2eb6258921dc0f8ae66c1350e455854 -0x09e2de22aea02ba81f028194453e4a2f5e7ccec406279527ff8c3741e9ef6bbf -0x1cf35433208df3dbfb2705d9e6c9045581eef336e154008fa55087e78f9d409b -0xc921b669da79c5c284db9fb526c6274585551b6d9f25d47e9b436a0d8852f5b5 -0xfa30452746e780a0f7d95fa6becec2668d17c296294454751e289e3b8adf9f81 -0x388cc8b9ce342208e54673c8fff8cef44af26088733a28f7a2eff9ac53b3e331 -0x4875a8e71adee19ee6b5f8c3c8a0c654059f6e902ed35d2d41afb07871da20af -0xa10a32a9fbc5ad4039b88c467fa6aa282ad9d9274f8c7b67afd282b8c70b3219 -0xb79f19c66025aeed379e1e30cffe5299c72715244bb7385eb0cc9af8d6052054 -0x6826d3a3aaadc9a55a6fcd20a5174a6dde355839ac841c266cfd30b1801771b7 -0xdb12118ba19fb3cbaed32a13fe523b3e4bcf63eb8b99fffc50803b4cf3f91f14 -0x47a47f7a338c652a0a45784a1912efa1199123ccff27599ead85a2699274f282 -0xe761fd73ef86a844a56e3bfe68c63adf3d139df95c73168898cd5daa4d2212b5 -0xbbec97e56e66d56ff0a11980c78308b2357a040afb6e9947bc07aa9c3030ce6c -0x7ee8636c7f4d5c40a53e0588e3c655d436ececfa10bcd0a765f10aaa38bd256c -0x5b44b65973b92dfc316c25b266cbb5f73d189baf177190d7a1fbe34f72e7a2d6 -0xc1772bcee88024603d5a92d0669dfecc1f98be9bc5172aea238955ed0575d816 -0xbd705799d9a54f11e3a5fc63d4fa94f8845ce81cdb053b8903f17a7872040415 -0x79319c51b7e11f5befa8f826c2b5d39ca60da102bc1237e20b2209955defc344 -0xf79bee61ce4baf9e7081658ddffb575d2f16f2bc590eeae05efa6e56a6a0229a -0x0f6d143a58d42f6c800927a8ffb916414e10e7597490740c0997bb4e32340dd4 -0xcebc8b79a2720676d49fcde9377fde0aee6bae0d47238fa2106a2c0276339d19 -0x8efa35767b9ecb7dc7cff7ac58be588db6a31c9830192940faa097d8b1360f7f -0xee38e6f522ebb14fa1a57f947983eb348bb8de5ef654adf5f8e1805bf13074cd -0x011283dc43e668d185c9e77e943f59337d47ab769144f0a972595c3fb758d263 -0x8783f0bf5c23f7abc1ef06e270d5881462a4fb4c28dc85a5c95de54096e8be3e -0x59d22c3f44a1c225683a95300394d79dcfc17aaa4766afb6ed84c15002a3c179 -0xc5d2bfae2efa12b83d3fe8c1158c5268b0b7742c9fc9457d72b7eebc30dee635 -0x62adbacbd6d82cc4d878e6b6c51e02b3898335d0adb169b5a61456093b3e8fcb -0x3f1fffce5246eeaecb88ff026dd83de8bbe76a592410ae8d98794053185d93be -0x56c8f092cb1f955528121a0bca4802e142b80d493e57b72b7daef1ad49c64f20 -0xd715e671e5915b4b1811b41cff86030d116b7f69ebaeafa4d2dc1fca6ae89ce2 -0x9d8834c1c0b726f934cef9e5b525bca70186272d1b07caad74ea22145c2b0ea3 -0x13b53ba6afbb92589445703fa1be4128a844a546fa28cab5fe984a7bf3d56f16 -0x1602477193e53e804c53f499e0f171945a6cfd2e0dca6e3bc1aa32921632bddf -0x018f8d6ef6fe80c90ec51e84bb2b9cdc03a3f5e7b2d723b7861a24a006d78084 -0x8c141a57da86481a2365e2730b8f7305f4d1acb456c3f10372d0c4b96b3d9827 -0xed339960beb559cdb3c6984db981e51147ebdf95423e83296d9d4f2be788ad1f -0x4e6c851a22cf2019f37031f7cb0adbd923cb8cd94c7c9d7b82745dbed3a17103 -0x74286a210bfcc69cca906fe92db3791a23aab5201fa859ccfe89fe78f51a1939 -0x137133609d1feece3cdacc42187f77555d42a0dd675bc83b8181bbe20369a30e -0x170f2578393e9915fb53c56a799b927c16cb5fff0deb04e49f59bf7f483343f3 -0x4b8798bd9b21a26ab2a3477517b07ddb250560baaf965edae5e078f1ccb2a19d -0xa788bd36874d2206f814a945305797b785bc6b998e47490d7b54496fa22d2f6d -0x56066b1afe7cc768a01d22a30fa818ad0ac804b96321c7118e9ef0f54d8141cf -0x7444e3a346808500a01bb88759b2417e40dd4801a968aa409bb7c0109cb05009 -0x3f9c3beada918180dd4d155493df04c0fdb35db508b4fc850d8f77afe7384b25 -0x0c8a5e622391d8ba0e3890b1f5af0d3c500cb8251cb1577a948c6cfd45ba781b -0x5c594f1c58f5d80150295a8baf470fddcd046dd19cd5b359a1f4c6738adb7ff2 -0xe29b7db972cad5c39e5cdc83709629ed9b103bcf17f7aafe1d3874c3b58c8a28 -0x1ef3159b143f59d2cbb3ae18d38cc8d47718d830a14e943662fad261c649f29a -0x7518ba35bfeb2c3040461bbd2952726514315f3ea2f4dfe57168b11753c2c528 -0x591875a95ffaf0e13ca91990dee741d8e315bf30ae85434d49fc2c035cdc5a76 -0x0fa10a4c821fd7950688a6e5f686e487d29fb26ccca692af37d835096abf82dd -0x64f30bec71d6c0fcadb6d0f11c3252fa5ffc86f3bfa8c924ba4dcf5695279a9d -0xa3eefb1b5be619502ef58341988ea9264838d57a6483ecf06fe0764528381e21 -0x8f1b490b03b667589393c9d3ea3d15c01d74f392a699b3baa75e74f1c591a305 -0xb5a19176dc84becde9f37a20e3a60dec49517673441ef87db494847e8056de47 -0x9d79521f0b602a5b37b31d7ac7e8e8734c289ac513916f8bef20fa196f3e34b8 -0x1035f1fff78cf2dd56ca94d926bafa8ebb70c213b1df7be297e368602648bdb6 -0xc6242619410b585254d3c223ed59ae9e509e843e81647267f5a886c5fb664038 -0xf1691c3f25e0535801e2f8851e2e06a32c9c30bb1ee47a0dd2464f9085fb1cfc -0x0f8b56793ab609e20cf215c51f7ee01c67dc46714ac2b65b201ce0cfbccc0b67 -0x9cdc66bf651497503137ab8f3940cb73558b28803d1d0faec7c45d160e44262a -0xc91c0af41c027a82b631de2a014ca03d07a447d605483fc45f6a2067e3992fd1 -0x28c496f6bbcec053eff4308eaafc4fff020e3eb818e013597965e28c124d7267 -0x5ab8c13e7132e4329d4f36c8bbafc2b557b57fc28a25a745d3eff8183059d6e8 -0x13ee84b3227a1f8128965355394e470e98c85290e4f378abd1a12c743dd4e105 -0xe7bfefe4a5bdc23a4a0055c2d31f9d1e462f5f6d30a33dbc33bd09cb32467b1e -0x0d5803af2577dcfa879f63c78b9a26b8abfcdbf881758669fddbe233ef26050d -0x374a1441713a699d40a1993cb0f18a6b66d33ab963e55fe5bb8a0b4603a332f9 -0x92d128c74f5ae2c98893f1d5d949c77716363f7f81b2215dd938b30a15b3bfab -0x520527b318969c56388817758045afc20dcf93ede8a229a71e6fc9ee7e6cbcf0 -0x4e123407c03906b081a266fcc4ef0d8719ffb4e81b9fd16c7d0a65827b194f66 -0xa8ae9725bc489473fbc64cd117eb6ceac942d02da4f964f887b531fc7a1dbf3a -0x2723ff21681ffbabfe5b5b761da4be0bcfadeabe9971f381c747bb6dfaa6fec0 -0x33e63fcb56ce17113793babe000b8dc10664360c358f88db8329448eb4989487 -0xf19542f574ae48fc7a832e1571ef8a09dcde709aa01698d3a3bad4eb4b578ba5 -0x5b1a7565a50e619211470c4b8a8735ffbbbf2525776adcfb882b1387cc0c51fd -0xa22dd65be4b824cb185c5a84890c4ec7e7b19d7216e2af7d018c293117d26356 -0xf21439f0175f00c0c182d203f77dacf50eeb0d181fd993911dfd724d01021a5d -0xba5c46675086ee356c49968fe9c38dd1ca093c8462566ee14c57fdf3c60e14a4 -0xb48941f7d6063c0f4f7f8918fcc6cf60f01f68085c63114d530db5cd37b55962 -0xca384e9dd7c05236ce1ee5d021b16d3536466feed7475109964a890bbcb1b812 -0xee219afed6e2f2bd48660b534315d89301a6b6b1cfe93d0ad90918e712accc12 -0x1e03fe070d41966dbfe75c8fcbafebf54859ee439db78f6ddced9d7e198c541c -0x96bf63ae1785ba75b534857cb2f9afd80cbf984a92d159573cdd2155eab2dc86 -0x2c61a7611990e5977262bac49ecac65542611854d1da1b287aae9cb03cb9d623 -0xfcc277d2308099c24219bd6b2bd4d89e7fa145860ccae443e40863ba22b1261e -0x2c3e6497a2b1c687fa34fdfda86de0318a30e181939c651266cfd25741a722e1 -0xbf60ff55ba5065535ffd31668b5aa53bea5369fababab828338aa1f197726af8 -0x7c167c337497cb569b803f98d30126fa44c28d49aeced7350ecc0bc669e9dad9 -0xeaf2eebcbed9db6c3377965b422c06b760e10a911306752f380a6320c34932e5 -0x34ef0be7a67e410b4f7dc3ca6e3bf9981d6a4b6eb538429fd811e1f345dda78b -0x760abd7b7f57e4f3765129fbf806cc856352c267414831ad74409b4e413f77b7 -0x57f449bf51d174bbbb7486ff7b593d404ee174e9d60401b4e7d0d30253b848bb -0xaa5bbb3dc199f3fd378d30feafe4cf936d80fc3592a3ba70b3f9e9fdeab81a87 -0xf76f2a75515d29e3ea9e0fdbfa5e14954f73212289016ea967bd826c718c6ebe -0x9037fdcbf8bcc4eac0cf907ad1830d40e26d1d490ef812a064b72ce0970d89c0 -0x66f877067018aa0c10125137b9cd8de1a90f35151d7f651c4da4ed4c3bc4282f -0xf3aba08c152236bea9d94f21338150b60fbae046b57c461f68ec31d505c0f734 -0x1c998098207fd6091f4df9b83ad5d583658c5e884028a4091bb119b3f82f3d21 -0x0a08e0875d3567f22dec9d1a4e822b62bc4c61cc5c105b8579a8ab0920e8c8be -0x10c9c93951a05274d977b3ca701ad850b618aced94adcd3f848ea36b880f6a1b -0xe74fd5566544eee9f633b1363c9323bd1492d41d8a25749c50e922c72ec7e220 -0xea6250f045ddf8118f9eaa787e92ccb24e2a2e42034a831f581a44450c1e3f5a -0x0aad1144c41883d32e622268d15915a5da2365cced5e98dc81c4118a9d1284b3 -0x40ac416ce1b84ee22652a7368d5734ea4830d10e6226393089dcc164b08a6824 -0x3965f0076f135e58b0bbccbb229be37d957088c204534158873670f63c6df8d8 -0x5ad9f65779f4a1dd82f0b632e30d9e1924c40e21b6d7621bc502b779606d3a94 -0xf8015e4ccdb50dc7955d5642600941727797b2f1d7a5b2361cdf80830280dcc8 -0x719dcf8f66d0013a2aa64ca215512702d8cd61fb7506fe7963c2e1f85a54b220 -0x75154a226521ff9024daaf5e5257f97cfd7bdfca429cfa40e9d299478c2b3fd4 -0x2ccf6907d80b26f8b9bdb052d0c367a57aee744069713d3f37c9351e7c637771 -0x4749d9f38b171c02cbf941e0864d64c9dd220d153855282cae24e9f7a2728a2e -0x7f1afb1c5747d54a7612fc68a7a1cda5389f56933a7b47de23c540353dc82600 -0x788c5db60bff8c39508c4a62d28dd03972a4c131322bea452988c9f701369db8 -0xd47c9cd6eade9a1008060c8cd53cf6459200d43bdcfbe32d097596ad738cf44b -0x533f90b3d17ad96f24ca20d02c8afa72ef320b610211382bdcd65c59a42108d3 -0x9cc2d5e0e7c2feda2e3cbd04012a266253e38b04d1f3b9bc8b8f7b5acf82d4c0 -0xf8582a791191299fc1809f935e185e532c48590ab70ca7b73fb3421fb8086f76 -0xaaaa7aa3b0e03ce83c888cf999852e5cd35215d10698fe4150845c269971aeec -0xa6e64b5933bed6a6ffaeed22a2994f8488236103868df6e98eadf4ddfe768ded -0x02586aea7767f6f35f9a7a64482e5803d36ac906c9661da3c3f686794db66283 -0x2b9758c4ea69249f4b88b22e038b8f62ad75ec672633c296866bc49c06d7c786 -0xbe614ec3d6a8abd622b6183c91b6cd04c74562399c54c761a82825f548f4dd5a -0x3088fada23174c8537418ab36ad3700e1d572956c1184ce5b63fd8d0a359c7f1 -0x526b77b30a93dabfd7ddb96affa9065411dc3ab3cc58829d6874e3a1fdd68d54 -0x2bc4fdf934a19ec640744c10108bc3c2fdd2362ccdc187fb1abcdca53fd823ab -0x26498ec6968e8f0f49452b975c0dfe7e3006e845bc7391121d0322c619395e62 -0xfa5c321b3ae7ab8f9bf42e13cd6cad45fc48c9a613ac228fb0b1e78cb203c42e -0xc2fb1329b960b4cc194b6dc5591cb636d8281d8d5580fc8dd78eb55f7c9ab614 -0x3840bc4145f282dd0efa386af38664565aa5f90fd823d4912cb7d35768f991a8 -0xf5456a3748b2b0ac16be48429544fe6ba413d29acb54dd179330b52d78093431 -0xfd39ad9340c01a3097f479b59ed3f05fedfd1623a71453bdbbd66f51861a17fe -0x031324ed660d96b84612b5766d0908612e1ff2998f36de987b772afe0ea17c2e -0x85c8da610e83950309c20919e5d52a78c22a5099f52ab18c1e00f3de01964b07 -0x8f0f066bcb56044b4736c4b4b8cc074181c79de1c4d168a3560f7b833ffdd21f -0xa3b9ed5366f5d806d961bcc641bbde8f439da11f4e850bfdf155cedfd4ed7b60 -0xc71ce801d4a19c6cf7513d871ef46173578047c1b73ab807e16c0623f662b054 -0x86d66890bd8562d3999cb73485dabce8ad38513f3e704fd908cc5877bbbb12e7 -0xc7575373f34b62118efeb70dbe3d49a50cab077e4369a8786de40e6398341f6c -0xa2706e2da5b88c468219ee9c3a447274bef914e2d30e660c9f772036ab72478c -0x54b482e570f0ad4bb188e9c6770762fc1c39e3295ad2966ce3e1f9e3bb900e88 -0x2119c6015c3c888e48afd4c51ce81c53ed72020614fa382fe7eca4da7cfd80b2 -0x80302d805d99977f082e82f639f1fcef6ce5b48b11ca07aef48cf8f64b2f3746 -0xda49f6ac9f0f8532d04820eff4c6b6a3448f35091e2dc947016f62bd97c5da08 -0x939119df2709bb3cdc4710bfc15a37a733ca9ac1c7bb8b653fdf9e40e2108db6 -0xfcf89c5412a1f3c37a16ec555774e54ae82ab0fca698a596a30644c7e9e3a476 -0xd225ed5e08ac5ae76a743836b99be94b9a51ccf12e37842a402a285763895835 -0xd36ef86458ae180a2e6bf22faf4524afadf99b6fbd13e00f21c5fd95f08afbd6 -0xeaae4fbc1e6743af310f42ed1edd08609954ef7dd6ed3a60661a2a91f453b773 -0xb153408d3d1db4d1eeac3bee9dd034db7287a770a8b497a3844181a24a7c3f08 -0x625e2ff26e8ba9d7316234b6bcd6527caa9b4c2a341ebba22572cd33e3ede0f6 -0x68c26342f23a07ab285233b9a5ff9983a2655e17d2972a96ba50bd10f8ef71f0 -0xfbedafd00de74e4e59beb3a193d2311f9a8f854e678711733dcf31f0f9492f0e -0xedc22c277e394536fd4e48ddb186f062dec98faf5e36f89026233dd5279105c8 -0xe612a88c197bd6546ddfa306d65b876d7923903c93173c4656006330b69146c1 -0x1967d6996959e0c9e337f91777e08ce23032545d0ff060360113eaa00afa681f -0x92af395e6fe15447f863330f57959bd3888bca944762081613097f467997aed3 -0xee0266764d75d6095cbb48d09216861742c1a24c70c07daa581cc458c33c0018 -0xaa472d23290848d57af360df2f91402a862ccf337cef63bdcec81281d946e4b4 -0xd76460631fb573c9814e75465d7da2bafe8a2b7fa6248a0089cefa5ce2c3b0cc -0xa89614328f32439fe6d4e8d5bb5e25a9e71d34949f27f8908fd3640768fb47fd -0x174a86549aa27e8ac83f9d42887370a75b9dcd97b3223dad94a1a6fca22c9430 -0x81a6e940a2b30b35c4e036ddb0743e9456747257654d0053baa27f84dc8a18c5 -0x49d150ce9ae92788691b566cc6c54bc9b005278f9b9e5422870e074a6c838f86 -0x86fd39775063f71177b29ff3da2efe3b306b534ec76b8abf607435eaf66ef563 -0x9e69577d350c6a6ab9171f3562907ab3873d74c10be98c35990f408746605e8a -0xa1e34a7ac102adb6210c29f6995cbca6191c7488ebb6afc0e717e887bdf0600c -0x082e2834cbf3f36be653809d43d930e645fe31d9ae8917a99abaa501a5f072fb -0x11651208b8a51c1ee9e746e62d7729dc141c5f398193392fe4bf306aa99fcdd3 -0x2c5a286660607d5c8a033c2bcb4f7c21bf1c02ac1284e9914107556db1f7b87f -0x844bc121fbcb21eebd3635d2178a8aea03771a1203638b6af647c44932001e85 -0xeeb38f80351e8c3897b163d5aadbf3fbd72016bbd0b057748b72cd881fa77c46 -0x6701922982779fe25267fa254aed555d827d03807f5f185b6a6a0312fe319b3b -0xa7d520bab0b6bbc1f80c624e0d36d24537e2f1916ea97ecee998916d3b3f7f83 -0x605e237f96098bc954e38052cc052bcda752ca4e6efa9db3940f90503702dd68 -0x63fc81b4ef9b4b95e536bb291e979d7298a300d72f118d4d39dd5bbf7945d1f7 -0x30e9467e650b34a2b4fd8691a1ca226221ebf013def8b3486034101ffa661bfb -0xb3bf09b38260adbef3c3623926571f036321a9b5674b0c881ac7d266fb1b6da3 -0x9f15ab68b6338a9960a805c5298457eae4307eeb3d775da11dd88d74e9b90bfa -0xab7c07b022e4aa9e8dc7a901217ab01a0487de68785af3cd90272dbff38027ba -0xc60e0fbc39bae45ef88b701752b33045d05f06e7e70a41c603a8c2c7cab72f52 -0x30d660ca873b370749dc74e14f1d7d1e3a7fca1f216bf7fca1c829337bc7192d -0x81dc879e4f2a917dff52c09516483fef9e7c890a4b331b83d5074823527152b5 -0x54c8d268118e4f64f3faeff2cd0eb94a1c082ae3e89e86188c323fdfda3d8da3 -0xfd3f88cb19ca0c486e367a44376e141eb9b8559592ab28d15aa879cf7d3f866d -0x10a4f0f5c84a5df2d099b8cd4c0d9373593e59373490c445664c7ae3e2f4740b -0x833119a82112a4ac77578a91668c52a141e28dd9b64661b474358af989c0fe37 -0xc9bb0d22ae1e7003c211b3156e61be8d7f0aa69bed45f0996ae3f680151afd4f -0x120b71eaff1dbf3e117615b2f6fa76ca11c6c11cbd32993ab12083b5a329b805 -0x372a051dbbfc017e8668bc4cb5ce9e39d641960e8f81350d09b308a2afb3d591 -0xea3e7675de3f0198b2b8395c2b143a4af87bcc6f798cf48b7e7dfc05f8a27ca6 -0xc874429bcd37873c8832b463743a2194e3693b1c0ef1c56c8d196b0207be398a -0xdeb92f384062bb31ff50b8182ccab7392435c7d6d87a9eca396c53d7becd2b50 -0x09530e5bb724ad0f5aa32a01c706038030b08805d54e607b2bd8427dff871f4a -0xe5019ecb68c6aac8792be1c8deb59ab5e3421dcf2cc566a67fbb80ad4b9f6473 -0x36d0b6e50432a4fb1a429300302b7ea012770395e1284a8505311ae002db8c66 -0xae582a2a385b8fc594930ace9abf5f2342046d3c1e7930158344b304ee7bc513 -0x73e205b339461632f15aa78f0213a64841649a72c38b39ff4e1fc5cac0dfab11 -0xef7cb9a61df963ab36f897fb41e7a296a977714c0fb48b7d88bd8598cb90f4d9 -0xfd4079f139c7fd2137414da545268f21518e33293f6cdabc27bfb3230a77a89d -0x354edf4cef18133d56cf4ff25b0022f7381eb261650a9b90b0882a3741fc045d -0xa1b6313e7f62394f03389a0ceece0ec33075f670c7755d5cd07903970ef8c371 -0x067b31dad5c12be79b8b2ca1f9f0df5f816ba9bfa12faa3d2a9e65e33e59be7c -0x85ad04cecc8e8d68eaaf46958f46aa1256da873825d40a8950aaef37eeca2542 -0x3ca0af2a77b8b1223f1113d9d2f1bbff10d548e386e577b10b8df9f72ed0c5cd -0xbd12e90ef400602ca07a0e53143b5dabcd7b434a58a249d4fffa7e599a4b814e -0xfc017a31f8415dcf94700c1d671bef7a3a49f4a8303d79e8be5e91116c4faa84 -0x8055ee0917880bcfc99f1a9f7b82d3336bbe2c1aad9ead503d7a8d489840b451 -0x1e69bec31741435d6b5aca76cae02eb3624d782d526d06671d264a86b60e9954 -0x08f13247a14333c427e68964201625ccc18b3bc389c8eaac8e55be9f32c59b78 -0xf408697bb611336e076d35a6d12ce9cd2864800ba8611aed5caa6c1480ccb7c2 -0xa453d173084e22395d3c6a9716f57137e6bdeaffa3e331d2415a1fdb02b611db -0x53a4f23989fbeae810269edcbb6ff55e280acad11a102b44c5a97938c33f9227 -0xdb325725de307ac6822bae505e0194f879179c777f1954c7a8e9be8965b27188 -0x23b8c5a939e09158fcfad58037832f5d86156fdd10b35f014e69b98824bd6ebd -0x7a7731d407b8a3f266a76a0ccad16499d145250c5d06a06db3ad8f8893b8d743 -0x253a3e7de1fa42729161a01aa1c6a66e2648a79b09aac914b14e18e9df968430 -0x8b65b754ea3b228a7a3d86ab1f58c366cadddb0cddc14b11e1ecc85b3b07c0ff -0xcf1168afe21b1a8af9f70015fa576952504e4d8c4da6ce85995871c261e890ae -0x6d7e5794151e4bece7d85f021cf9226d38e743afb3a35f5fe38e8abf23d13d48 -0xf2b310673b6cf13b1c8cecc8976d93dae5cb9ff34fc22e34b7cf496f6dfda086 -0xb472881cd90873b7857472287b78725af095638a03c329127edfdd950fb243b1 -0x5ac5693fa8832d0614d5746a4a132821d079fba8c097035d367d2a63afc6b018 -0xadb0d3df111405482c39de344b925b3d92792955b07809419e920f9427577e9f -0xb3309fca00b094fac81f0bdf9f076e18953d414c99035cff6ef011bca0f0280a -0x26cb696618e14aaf0262743ef6785997f2c0ca5b91ac2120ac533449434a0af8 -0xca3940fa651b7eb8f637a31b5ce2c6264c713a309cefd3c6faa56ff5537a3692 -0x92e769d1ef5f7488c4eea364ea609aeab04322f7d5b59b520c05721151cecdb9 -0xdc931706e32b41c2b933a4758f2eeffd00baa3e0bc739aaa6677d817002f7494 -0xa37a6d0f9cb2386c31a664e0ff5b27e0b8be28a97ecd4fcecc4076f41784037f -0x736fa0f5ad15b248957172c5f982ba14ab50507f8f60d1a7d73083c50c7bbee2 -0xe7f64c5038f7f469a580908f42555895ad6c0e0794d60be1855dd6440bd9ba83 -0xb089f95c6e881948ffcfd6a33b556b74cc08dc60dc9089bece53b53444f7908c -0xa9558cd6a73c772f2be4f11f350dbad15a928677a77345b949b64c5a82e5edf0 -0xfd040fc29d51ed77d7f0fcda44f28eca48e15fedf8a1d031d3d5c6041dfa88d4 -0xf156ba47d24486e8fdb7e11a4cfbef27e0b591ebae3cc5d2c50d1b67c7eb90e4 -0x6fafe47da856561d0c46f6d1e29167bfe8ae64bc386223f87be4a6080c6673b7 -0x00aa268362e082247ce0f6661b561b0fb8a833fd5a678c3fff04a665b0bf5c61 -0xe45f2b748dde9707c80304ee21ca2ee16e79ca674ca1ab45fb1a05f40c32e536 -0x295e20064f70fdca5ef6f6d34b74abda0dbb88adfee2ba462f6319df61029807 -0x315dd7ed2386313226eabf8dccb76a573928d1c52804e06f5859509d13377884 -0x1591268af5dc0cbfa0bd0795e084473be06b7ed96279b07f6cfc490df7c7264d -0x351dc124224a13985b4abc9bdd20db500715fc2767a92bbbc2d45163a8bf6147 -0xf4d3fd11b9dac8398123856c5059aaf9ba89c3525c10134855b1539d1a286469 -0x39bb98a3f0529f41c18089f20ea4d1ad54ca80d95cd5a4cbcf8de915a1d5d574 -0x970573716fe2dc1aecf65898c34b187be7e2a1f9ef68dfa02d7f5556f116d272 -0x6ec6bd091ab25190adc457246f467ae39d53fd94750b6a0ace35ba5b5a0124fc -0xa9ec34393a9b16a1c7ea9b6c2c6c890155be997cc3b9675acdc46da061bc481f -0xc25f4082208b999c43190a0867af2b2ff1dca0d927ee7335940d7489fcbb4c73 -0xf5da4e92802b6f819dcd443b47f193395c48fa897dcddcf14c70ef49d5a67613 -0x72e45cd8e1d05b3ae1a9eacf2fd11a9cc125e718062f7967e8cea1b740c8d6ef -0x1f35ec65b69b3234a407a85a5628b9bf99a77742733ed5a5f9960613a9dac649 -0xfbc8cee92af5443e767186cdc6a322cab4284e8421e48d05811761b8e60b104f -0x5d345e4422f0076cfab07d361dc108b8c0c75b3ceb052a8380d39448508e9fc3 -0x941f5fd2e3f9162a3d5a1dad467f6497d883f316e1f636d6944f4807db568e7e -0x0f75ec40f69636306c291c864ee62a8a09fe409ab48f7a9f632e7d232f28ef27 -0xdcaa2905f18924b4afd6476c0d521300ebddf9559dab733c503902a57e47f8d6 -0x6affa9c9a036d9bbfb936fa36dac2749e50bb82aafacb156b8c76f13de27036d -0x14f1d475968994dc55598c905729c8d9cf384b842ea33004ce9cab60f29ca8e7 -0xd2cb2668608a8abfb20d561cb51e1ad537a98bfe7d642626bf989c9aa941e790 -0x5545d94589e17e4749ba320f65aacb409fd0243ce9b5465ab8d45f14cf2c98fa -0xa01695182c98722d06c3bbc62585fb2b53ce9c20d8e669549caa7e47e22c7be8 -0x40a25996772aec9474d589add81e9500cb55054714bfd26ef47d2d0400c30589 -0x38f0a8dc44baa36b98c5d97bd061d93e2a394b49a80fa47161880361299b7467 -0x789a05c375a8b8c05e305e3469fe00ec62c93c21d274a76f30d9490906bc1b5c -0x8e41df5033d8adc280c45b875e3d3fd29017f120a2d10d4de1d54afd6777bcda -0xe22698e277743f5085c396ffd7335ee07674ae5e514231b78e64fa03315f55a8 -0x8211da27b5e487ff9e32d27f29d213b3cd0aa528ae6cea023051030b30f7fd1c -0x78a14439ba2391596e07628b2cc70e6e365619685e05c9600749bfd4c10a6bbb -0x11bf7bc4bb2b0deca80a9702bea9b48717e0c0635cb123e96cd4c0e6aafc812e -0x36a9f2d92a0a31449cb1f0f2755000ca643f43aab76362490b0cecd30c42a85e -0xf8d468cacc8dbb7388ff9ef6087a998d4f2e2ddd364d13f06a16b9efe977d5b2 -0x3756a2c1a81e76f52d653f8bdea00cc1c71eaa9472fe16c76531f54c0df4b35d -0x27a644221cf194a77ed11129d2d30f36602a1507e9145874903706f1c0da6f34 -0xe3b91e62ec5f424aed1e19a7fbf06fb28b253f7fc9f98d642ee142c8ad4c3a84 -0x1b74f056ae4a73b29c23640c92d685d55cf243df4c6bd7b3b2ac5f171bb7f076 -0x94f66d38f2ce518be94f3fe85f060fa75d17d87392ff2e74bcde7e7f8ed9d642 -0x65e82c96c2d50bae889526778173c8e5bd3902c94a2d84be6af97ebbb0feb5a9 -0x109aa9406e4cb73600db9b21c241548d35d2d3198b17fad35877c6a0439bf83c -0x177c1d145c077419d295cb2f95b7ce5b9471fbfaeb00d7f75a812145d15ac50d -0xa40ca0660a81215381efae3c590de78c3e0e4517869ab16da4e218e31800c7e2 -0xc7eba92fd4437966dd6baddf592eda52f644dce91ebb82aff1f1dea0597c83fa -0x64bc4cf230174d9f5ae6876b2b44abfe2c7d3dde62b937a7ea820457bf764ec4 -0xc869087c44d137ebe08d9f0667cdb5baf992b49246215f15c0b7b40d64116998 -0x3df2093de3d5f710d36a6e8661521388a2cbc78755d5132e4b76979fe49f03ef -0x322db446a533f0f672960b318982238f56c85b16b9760756878f7aa8e7ca89df -0xd77dd7df5989c7d03589cbd8ae7edfb3321fbc640838cb7ca51051698b347f4a -0x53876fdc84f1d70e4828826c5a5e506d77537e73e6bdcb794b1b030b1e528215 -0xba44f5f0bbb978d9376a7120e2ac3921dce92b6361554b1be26634b324f7097f -0x9a959b317f3c5b8f18447c0af1dfd1dde523d037c5f63310c9752edbf0e4605a -0x2b0b67b97e2a5f2dca1ff077c04b3d80c1713e1183c445f9e27d46d8e8874af0 -0xce7fca62f35e9e094712fd5c3517f7d655db16a7da3182b0d7d062f522ed737e -0x980a18dccd4b1f4ff69ec47041c4e4ceaad91f5971790f8cce477a4001b3364d -0xc71872068163851b2953b2bd75967666303f76ec39dad1735ffd54b2d35ddb89 -0x1eb1511fba42bf97b419fcd6a9f07568a118f263effa9b6267e9ab0a32a5ec6f -0xb803d32a4d492c6d9b39be63dc4c87d2a8ce01620d8ffc5a44a831338f7da632 -0x6c9c23f6fd5cc54a29c31cf879f3ac154264d76c8a0470e9dd35dfb244ffd5dd -0x4fd0e1a7cf1be670b0a5c7bfeaa320a9ad3fce6e7b1575bd704e9b722cd79950 -0x0acd222e4b95e33c660f74f0965088129b66115c077a3aebc34a05fe79f79f0a -0xd6d7514b4e218f57c8a2c9941f4ebee38de60db79212da6afe811c98a1a8724b -0x0f9c234fe485669b8a11a0018a463411a53e9a3570ccb83956f269b8d63a1fca -0xdfa5cc7fa6c1d68298637233446453ef6412bbbd154b97a2df5dc5826dd3cd8e -0x4ba23d0bc88a2f288a174effe69c08b462b0cf0d34e9c7e6c07a5b4d808eb063 -0x5724d41cf8e5458cbcb0ffe277841b9ecfed3b64a2c962f16b06688d6ae05b99 -0x36d00e607ad72eb0a8ea1f8102a8087e06167c89e7117122dccfc3cc8c1b48e8 -0xfb854aaa6037285a1d3edf509fd4fbe96b9c4a18777e3466a7f1ce40caeef477 -0x1b5cef9aba14cfb94e0f8eb884657056c8528113ac2202ff39fdad3869570313 -0x67c4ba3ef4e91da8876676cb1e6b9f660884d6a2948d71478c76c5d6144b2b7e -0x0f9aac906d998c3488235e79bb44f9db2280cd7b2feec26a86f4ba20d95a9606 -0x3b23c71a920fc60134d714f326d76dafdf44fd7152681707f5b020a9cc112ef7 -0xe063ef99781270378f11214b0b007288da65ae6d56a3cd866ee2cc680352e724 -0x9a36f676192a188901b084906af6582099cd1c73e96af2542bedd8ab268193a0 -0x3b5b59999c094d4378422047b2d3b5268aeb61813d6440912c8f3870d1ae5c47 -0xff68967f8880852256d1adf150aadb1a24c50effa73496df46e939de1d5e7739 -0xbea21e71e236a6167c4bbfe030bba78e928a1c964afb7c45dadc21dec117d950 -0xae6e5ccca31d02d25eee9154d99cd0cf4bbb40b06ee9ee6cebeb333d1e3e2839 -0xb87800ec38f4f1f3f72ff08dd1e052c1299e478b043bdd39eee2d40b1f345ce7 -0x1d01c822affb5bc036bd67bfe0730dd6cf626a38011274e929495c9e15110709 -0x6a7a82b3851de2cae7d06cfba1d9bb759eebba14d46b87e8cd4bdd190f3b89d6 -0x3a4cae7db1a2d1884ca8bece329185cfa72d081652f27ff76519f0da90d6c4db -0x7457e6690dda02462ed2712e6049ef7eb71d39c6e8a9118b069c47de7be20123 -0xf6c68058e6b47808b026ab8012267de6c684b0d777fd3dfb08ca5e32cb26726c -0xa31ae1ec08229ca10640faf4cc90d21e48918e4c64166fc466d2b66e8786cdda -0xc1a446032330203086bae84e387dd29f4c33887f108fb37834617f8d777afbbd -0xc32eb7b88b0c6c880c2634dc30cce86552b216cf64520f4e7dff1df02333018f -0xfa9d11dfd3cfa38c60b650940534502edd63972eb37984c7d3ccecff4b9a6cb7 -0x0f161d14ff69b14f678370da705c6ca6bf329ac5ef81a99297d46204c12aeb32 -0xc764d859274298e5044342c737b0f2fb07d5eed9bad84946d13f396399240dfb -0xe76534cd83b7dbc414f198dc9baf32b108c3da901c9777c251db9dfbb63adce9 -0xe758459a552cdb8cc0a2cefd2f2d828de8e771174bcdd5818d37d15e3285f11e -0x909eef5cd04a06a05cc863381cf0c8925b15e0a97d4dc11f8192f16ee3051b4f -0x26d45790e4fd80381c2b6b8dcad21ec907057c5c26da88ce7bd6dd324d8a5628 -0x3000e6a1836799b1caff00ec74206afcd128ec59d663497da7fb48728a837735 -0x5a584a526206546d25229a64ef1ad756711a0fd39f815d4a3dbc7199cdfe2dbe -0xaea0380da93259af55caddbbe9021cdbfa7a7797f2506e1e0ea93c312a856d92 -0xeeeb61e4335721203a43a4eadabfe6dac3de58fe54933234700d2d746c4465ab -0x7400e1fdcd817c56aafd8565db398bf89c540cdbf314881b2c552f6839698ac8 -0x083fb7a079cacc062018af1fe484b3c1759513e322ed5e393f605d075a210cc8 -0x18d66b46811222eec4b4f7cec0926294e75a19a9007c20cc30217a948633c5ef -0xd3fca56207fdfad5ab41a578ae0e923b55b9f8a050db5f29f26df8e2d34f96d1 -0x63251c85fa4e0dd25402d7a35c6352f79a7a008474023f6c24eb77287ecc8300 -0x25636bc5885c64a10975caaece8ca488052495adb2f36ae13a911ed96722adfc -0xecbd5a323171edcde03fd2b008aafc281ced2da1ae14d85e8cb0e7df3d042398 -0x53a76df1aea3e055d3a2b7aa5f385b50ba0e59555dd877153668cd4b2f7ecf08 -0x8cac665e1968ab204252f1e2a6bcb48160c74dac18ed5999026f8a3b4882cb20 -0x521177ecb44c6f8caabe96ee1cb5e0c96fa6431dfce8350ed0c51b5104e5da35 -0x5348def2fa430aa6f2df95da36d95551e40a5a86db25067a2b42d3cf4174115f -0xe222f9f5e2dbd58684b14e515797ae4e6b966b97662c0212b40b7791689e6ce4 -0x1928d235cdad55c1bd2f0a85ff15ccb99f63bf4a80bf4ffdcac09f8879b166bd -0x14691958c65c4612535764969bfbba9f50c978ef2e98563d54b2032827031c08 -0x50fab8b18f404e76754d5ab7e73d091ee8df91eaa79308670b3a954191379840 -0x11d667df73a36efd0ab4d7df91821f6eac27d2535506bc2161ca2a996ebde79d -0x2d15be2b9da83071f85fc0276b977b7065caf4ddae707b10b7b4b30f820a8fbd -0x60bb6d4c684f115ce468adbc125cb7c5cea357c2490e0d97ad9f9b149caaeb60 -0x58f86a008639c7c8eb88d6dbdc1bc71914a7c5f7f26b756e187c26e1c1499ffa -0x814ddedf4a6e9f6c50132f2161503c458af494018fa81c68f16fba3def65e75d -0xd79a6492f470597ba2d2b233ae88424fffad604a2596bdb3609621961df12251 -0xe33aaec9295c5b8d8971aa79eb188fa5c916a8344cbcbe37ea4ededece84fd58 -0x609f3dca74d243c9308aa83d370c25914bdc1e1377414a8c21533e19c8d86299 -0xe7b42027f8a12255f2887099377e21760ff1633e9dc4787ab2618a1348345a2e -0x79fde4e2a3d07a3608820746f1cee21fbd7e0cd4f80a406fe12e411b368bb7cf -0xf8340375adafe28d4e348b59c1855ca4c955ef75680b31f90ba1b544ca4bfa7a -0x7b4873b016142094b37907ada062feeaac5d5937d440c7a8737cf6e987dacc0b -0x23030d51a410e0cc12bfb2aaeef49e5d7552f8e113c880e464b540c5e0cea9c7 -0xf1b51d1abc84a844999b12d7abb5e242fa0a179e783d51846c012fb2bdcc8ca5 -0x272370962a3a79fadd95aa9a297b63e19a863ab66c1331b8b5f67bd091854b5a -0x82ac100979b7f44818f1787792f16f2c38ac30dc8f22d6205d75b2308abc2a4a -0x2bbb9bc7ec56bea42f5eb8ecdb25137305aa6b4e544195971f4672f8ded54531 -0x9ea8e788ee7b9e6e821483d3e17f5f0990a1a3aface55500c424749bfed29b25 -0x29980aa8dc9b3d3c9dc947fc319c6c95b994fa3723686626ee7db91f57bf3be5 -0x2d5a697dfe559bc1b27e5028d44a2e05effae9a98b29188dea0d7e5bc2426e69 -0x228d423b47e4d8556a442db2f410a294b176c208ff16b8a33b43e1be1e45fa6c -0xf92190a1da70005dc4e093088ee29faed777ddc71a5a1221c3f86fcfe7fde790 -0xb4af5f3195b007501130f76fba31a0d37a8cb5fe6327982606e63d67a6fe0fa8 -0x9717eddb757df93c87f6260c65e33e8280f68c7a86fd92b8c134ca9722e312bc -0xb706496e51219d0a31853477149dda8e0e36ef9d94db1568fcd83c982803217f -0xbb44be76ff175b71bed90417b87375c7365d251a7048b957df0052c356ecf84d -0xaf42bc865e261fd3915caba659703b690535f3f9ecbf29f2dae2e22c09d5f46a -0x8d9873f4209248d962945e7a7d278a29b4f45090dfec024b8af7bfd77657059f -0xaf014bd8e39bc8247a9baa647f586060efeb93db36f6eff17dc6787fa2eeea5c -0xb98a6647676226d3a658b6f9fa09b9a5526f843d78e000a3e6891d8d758f5b61 -0xef27c026f8397606753f094758b55fdf8086433596b24ee28568918159e8d314 -0x225405309d4522a1b44b4a334c6b4b3a16d04a8124a77ed8cf20c29e5d429bfd -0x8d0ebbb9e1669608b6ab97c01f7a58aee1f4850bd5570e8aa5d7065f83e55836 -0x30f8a339e1050614c0e6c0e03ba32fbd50f8ac1fa5d64a2eb3112464cd9f2d6e -0xe4a0d41415b5011c74577d10b10ca35eda425c5c78839f0fda8750fc0d3384dd -0x8fa892486cedb4582ed258a257387c48b3a780426ce5aab2be18cebc1d14b4a4 -0x3d4c6bc88d5efb10a16e3cf25223b91186135cdc6d573a1d62ce02c6cdf8156b -0x5db278e5d08957f30b5a35b61ed8532f50891b17a1cb81cbfbb3df809f8ddcf7 -0x797deb39dfee7b36a8cc4c27885e81d8cb257e1d8b2f72284bdecc23ff6c7704 -0x41dbc3aae4c7c1a9c34e1b818abaa65df465ce59c757f5fe0a3786cc3066e89e -0xbe191c36264784eb4c802afdc432db2c151d494a20220f9d8442a9e960a33a26 -0x031ccc45b254918f01315fb260791b7fd6026d1bd3bfd806c4a7ac77f734974e -0x288f782beb02897559df39bd79bf88df5c96e471a7fcf322de5f1fc2ee59d6fb -0x7b6228bf4bbf1864a09cc95bfbb2372ff227712c84563eddfe5d43766189ac1c -0x7db2b5c4a5a482b0ceb1be006a3cbb5080a10930ae198a2ee477834cdb9186b7 -0x09faa2fae24decf61017dc1ccc0fef61bd3431c395bc4f94eeffbc1033f6d99b -0x11c5c790ba18ce93103206dbe7b5fae8255b33dd7b5a1279605b3647fde1ea5d -0x5f838c496bbb7097822d6cfaad17e8a202de95461ca71a45c8b06e25ef1f5956 -0xfc7371c9d36f231f6092b95a4b3cfd3b7b3b9bcf08ae3767c0500e0253a3afeb -0x28f2e9e8c8446c0699d60d89e69dd220a07de3653d29d9e3f7ec6f7effeff613 -0xdacc8d1827dc56da2dac6e0035cc1f800f6aa7b5c0a01013ef75447386cc3cb0 -0xb891cf19c2221c574c3d33f3bf30bfeedd38644a98264af80fae5c62b52d775c -0xe63fd6a8bbb2ade8f62042f032ceedfd2978de8503a2b21538c6213f2c7164f3 -0x0952d7ac673508ec2527cd6b04aac833b0f72b97e9643d8acb6b83818abc396d -0xbae612fbb0ca94cb1fbe1275ab479fc76bacf0826a82d796a21e7c5a2f671407 -0xcde1617efe3ef0679ea32952399b14488a83ebec5a41d4a4187facf219291363 -0xaa564df4fba48b542f8ec67291040bc461776bf8d15e2c40bb1268aaa149c505 -0x24028480b51f03b143f5c48d64a9f37d3e4688bc38a2293bcfd43042ec1e7575 -0xaffb288795fdc14ed6365844f134fe648b07f24f0635ee241da1c35313390531 -0x933263dd0bf6ea938acd6fba8e37b3d68c0ad01e537103f516dd2157d461329a -0xa5df431ec0bbb2727458d0a9ebb6462eeba178c61c6944794302061ebd8178dc -0x3907618acf49ea44d4797c51c839bf93b97a4606cc57ab295f007f0b91ed4e14 -0x12de81c5facc234c730cff9a28260f9aeea210c50c13a6460cb5d0522e27ad96 -0x4d3a95bfc8577f5dcfe240a6fd35b5f03e6c11aa0172657e87368c550b861950 -0x20c068ed26f13f31f21fcf4b8beb0db0619661902d595f26726d6c2b8271c0d8 -0xe388d4d1dc4afba899f286fdb669b69fcceeac677d8272964bb3ff6c073f2544 -0x33aa36409412efb22f2f75ec2bd1464c3a347ee1155953181441ed3c260f5f16 -0x008b79883a68c3e94db1e2cba9861bbdf830050ba57f7b473daab894f1e5df45 -0x3dbc2049e79378bded2a8ad112a6ad43ea3c74b4f9404d14f5a44ffb2f2dc3e8 -0x7fe087fad6f60fda7747a035bbce6fbf1d1acc295be27a018ef9b713445aac8a -0x7b318c65fb4b1cb5d4e726ffd72ac7e2ad3a3a62d53e211ff5e38f49ebe905ba -0x112d299f827a27924822d690d9168ca3ec97b38096f730737d4d85971741965d -0xb504c8a42ee579e51171303496d80375c2d0375e82ec7a284caf1ce0ef2d669a -0xbba8e52fe6093f669a55b2ecae55d3047d37d036831f2df90b39882acc1177b3 -0x5dfe947a711c54f43b8ba1fdda109f4f9414fd694948a96f9c5681e645a9edd3 -0xa21ca976bb54804464a3cb89dc4a0638919b26ac3430ec81958c28621d30a228 -0xbf75f550c34f1870c0b4e6d7e38f6749689e9cc104e8eafa28a0d0e5200dda12 -0x57a07406d88e0151c73da3469715471eff91d4980c29062e806ec32bdde0b7b8 -0x7f47c418f3915d91ca09ae78481d63ab2392a9e1fd3953e07eef7f4fb3c29495 -0xe3952afbad5ad256e77facd324f7e352015a3c6cc919714751955ffb080512e7 -0x3328dd0ab77d54da1319712bb1485f13f737337fdadc4d9e85d0810940d5362e -0x88f2d23d0c756222f5b42da8a22b1c352d9a511cd0441d8395fb461738317fa1 -0xcfc7a8d281f500cef0b6362f1f1597d388c2be73a9aff6bda442741e3b506986 -0x231106dd91fa94050b7bd403ffd919ac5c9151e0ac6e21d88910115b6b4810d7 -0x6b99e8178e20bdddfc46635c10172401e8d5275dac9c976134916b59b357c56e -0xbaf2c1f0156b2585c324689c9b640e37aed18914267a7a749c99e02b0f83195c -0x3edcc1d21598e170c10eaeb2e83aa21d0c7a27140aa4b5a295a86c8bad40e8d1 -0x720c6fea206b9bb9b7322e42bcce950d8261bef0df762796f6f652268242d97c -0x4ce3df4a995bbb809487820c38a623d1e7da014cbb91c63ea6e0062f4892bcfe -0xc42a5ca710568540470250fa22b778fb7653a2878ddece47ef3069a94c1f0812 -0xd1bced66946e006f5023b2a50bb40bfcb84be2fafd1652a0a113467c9a786d11 -0xda802033a4339fe5ec8d0868f1967f3106d71f5cf6f00d91ab30c1b6850ca0d3 -0xf8a5ace1f6b256d824300d90b167e47b7643cfac45366e229f50502cccbcb4b9 -0xf3a6e85adeb44ba79105d73c540684fdc0b06e991affaae4ce25b05dad18a496 -0x78cdba9bd6a2f49a662c44f427032729775ef2f3aa10f6ae2f284219adcaa3be -0x1e6fb4f35f8b3b2381085de8a8b06c7e4cf16fd026b88a317391df258090ff3d -0x31cfc0e1871275cc334256c1cba3b57307707f262b76a0726629085fe02851ab -0x6a2c460f91c3587fe8acbcce6950686a33d9cce2b7dcf46e9f3e294d9ab9c9cc -0x548221ed2e670e30d191ed4e18dcf7593fde5db4a8ba3fd12901179d1746a2ca -0x887132aa67a537dfa026f76ce497a5e57eef5a74000030357bf3e65489a3fb6e -0x5ca2a8e65b75bbadd498be370a69007cba78f8445fafb3d0f0b110936bcdf541 -0x60e441817cebd3b06cf33e92bccd11b907bf66ed6977e928cac06512f4d3b3c2 -0xc12ca4db1f4a4f363472eee2e55fac861a9365a550e164e88a50f7ddec6b0edd -0x3053bef92ffc6314b974a4aaf06a4bdb933dd057963372e6cbb871d779ec5dd7 -0x2c0de684a1002394d0e5b1073bb785ae5bb8ead43adcdf6c995714cb429f4b5d -0x68d7ebecee652d0307d8da7cbcb7f78a2b3671c38f86582c7c91f8732f226a34 -0x4a591ddd0f98f111e2d9ef1e6eff672f31bfa55c6a7f808040e39e19bcf46120 -0x0051ccf97411fbd4c3a52bffb52451fbd5d753815fd6ef6f4bb4483cbfcfc5cc -0x88404542cb10fe03434fadafa9af04795932571f280c33c918d8be1dcc2a1663 -0xc2146db246d63dabea5a16c8913f9341ff19efeff6f9dd56a6be7035600e21e1 -0xfe10064dff93ec3ebb648abc3affb46d60702f7ad2d5364f400c9a79506f2c47 -0xf041d0e5ee237a62764420360bd56a22a1efd50644fce318f7a548495f12ddd1 -0x76bf4f5b69d1254074fa917d9a3c0477026c0968a8e523144ec4723a1412e621 -0x1d962f6667114278111fcefd5815c43efc1403d98aec7075a5b0b177e800e7d7 -0x3ca5b93d528564b5b64249906c226e5bd6b2136289377328e0ce88a964f78365 -0xedd09fdffe2fb618cd33628cd185cd53c2e6338dd9d651e895b5ce3672a36677 -0xd6520b39080f77fc574f0c80e83d226a65be17299234d728d524b55f295740d0 -0x63ad61408c7b9795862b5896c7bdc26089538f4d672dd26f25b16a8b6f6a4559 -0xc1824e75426dce1124d80f4c35c632c3e6cb7e4cb06e8100daa019bcea6484dd -0x2435835d25abb29696a8413511fd6c51ec699ff5756e12e754adb4a2a9ee1e8b -0xe2753dc7bcec9c7566dc41928dc1d114a6b321014acd57bde0c235663c5aeb4c -0x2c5c9f221d7784b72f2baacd58894ecc630dd3029090a5ec0d7b464ad1df3639 -0x27fada74d6436e9df01c3aec730543fc5db96ac5ff524e70cb8665e335d5e524 -0x994925268c8c588ca7d4c1187b32a39eaf05a8d74e0be155284bc198f26b4716 -0x8c43eb426142526ffb1474341f66e551cde57be39670b32cd81709c47fb8d093 -0x45ddd72328e23b775d0f1d83917374d93fbcccae5a808811f3641ea342ae7e4d -0x991ceadab0c02e2a9e871406153653c782e81e2a356a6ffea384c9590ba7f328 -0x9a33c327d8beda040c623cd274b5c540580290f648ad5df5b9d52ff0f35700cf -0x0136694c7197fc2e502f539d726fee58363a6b437fc48615e404ce6d47b07090 -0xfd502ace40036841b04ce9a3ae886c37847cfbd9a9b2a871f9ca2cfa0f897eb6 -0x9f7b19848cbf772183e8758d145744cd23086ef22a27d546f958a0c4ef85d379 -0x46e8165a8cce7b0acecf774735c625cbd88891809e41b284cf474a7e199bbd6d -0x75e7bf5db90ab5082884f4b6fb0c4191a74b181daced18c893cbd2168342fd02 -0x9d13b796b1e3c8eedb8d7defc5c9bf03166003568163f58fe0740bb0e43b582e -0x24332f02d95d1a0059b4b454a0c646751b47d788e187a2760a4a669c3518f686 -0xc85de8afee0faca4b1d1d968a1da0a09d555c79ceeda4b87cc8776328702062f -0x3f661773ec3c2c7c8da452007504b2d295a24f9fff573b4ac3ae47ed9259d69a -0xdae9ba078612353507fac96fd5f5f4d652053c5b5084d66cffaded55b9c84690 -0x2fef75f832b38fd40ea0bdb4614f5372319c3ed274f9d138fbe52fde2211f1f5 -0x609b1affa2073e83a84b410bf1568ddb3131e30367e28eca085d6732a461dce3 -0xce201d6a833f1a910c0ab0d6ad73faada15aa2b6398caf5e72d813e4789f7c96 -0x854b0b7bb2e721a45ed7670d648148dc78e5bfa0590f103485888c17e0eaa699 -0x95f1c5e35d12546da643f63d0a7e1e444208a453d526fc9598c0aaa326391e11 -0xfe559c53624cac690a9e7c4f3d2e662c62b3f0c7241b4d01b647a316751f6b56 -0x890147ecb3dc9178a6a0ca94e7dc8dbe980592dc8654d92ca05326263c97b756 -0x11143c607ea0b4d2b980fab3b05ea1c59b03cdb9ba8c3ac90c2431c47ec9eb34 -0x3772f7fbdadb5378284af01723171e3f876f50723bb062f17d9cc22846a84543 -0x16e7403a9f6ff4bc5049301af15f43daa3f5f053eab24a03d929eeaa2330c610 -0xfb2ffc06eb4b114d9b599afb1c62e0bdae11fb15a8969e9345b4d2d817e59fce -0x10cea26c567d72d6bdabe6432c3d1a5e214fb396284a6afd77cc555b4035dbf8 -0x57acc1450a1e400516c06f617809961f09f475b2104b1551447a4c89fbcb4dcb -0xb75fc4ce6bc04ad07cabfcd20364283cb4442cc22ede65af7bd7f63018324c2e -0xab4fc34b600199ff22a5643b6bbcf80efef6a9872a3b7d99b6d55b037d20c67d -0xf2a41e2c4d5e13fdf9b10860b49403bb1f2a23871f39d38c498ccfcdb9bec4ae -0x3ee86a904e7cdf31e1ee71079ade115497f59640e5f5eb83bac61b267e547b83 -0xe39b90e847d124920cc494d0668ac395b21f6788528a0a1ce03d98ee1988c4ba -0xe63a7a43329287badf4ee966f8f222ac6e7d73d0fffa9edc59ce9f74d427ec29 -0x98da73553cae99d364d59b462ed9ea8ee9717b171bebf55f3290092131c0cbbc -0xa13e90e8145f8b6b81444693efdba176ae0dc66b64d5ec6ae9cf6089f533d296 -0xe59332039e36bb51116fb71a633ff8eba42b5e61df542ed894fb83a85246918c -0xae0f15c3145114d48aa846c84585664d425b8f9a0a8a468f0c608970f34364d1 -0x635141379cfa52317bd9a4381d809a93315040bd2fbb5c0d577c7665f5f62a26 -0x5243c97301f2b4ff0b9b0dba9350c667604d3f54a07cb5450cf308121d6a624d -0xe0032f7bab21bae43e9ff1eacf08efa71b331eb2d7658180890aa9345571f43d -0x35b6e1e249dbad49616e0c061a3a60891932471e94af1ed95552499c111d214c -0x475804dd4abbd37f17192c0b5b696950b80eb8e53329896575b33a66de842dbe -0x05dd8cf07696d6eb6cc156cb9b806a4d58d8caa5536a6072e29f79dce9c6d341 -0xf0fcb23278d81cec5c3d6714ae895c784b18dbcf5f7157ef2977d538cbe2a997 -0xc2a57a0c5be9b0df4d9328861d744283326b55579f028e93eee94a1dd3739400 -0xa9ae575982dc58a4ccda85b420396d6b6549185621599bd1a030f7ad823289a3 -0xad9cfc209a0929e0b72e02264fc3e685141aaa0aa958cf7d791a3f48bdcef48f -0xa88367cb8a55f56780c538aa12ae3008009ab4dfe0d2fbf0e5465dcedc8463ea -0x6969946c40ab2a3b2c65324130e37fcd4e398a91d3aae33c067d828dba32ba4d -0xd4b78f8878fa70deb38f5cb8e74dcdeb0208a797aa60935bbe63a315cba156b7 -0x0414bd4390ff6ef6c6069c89594ad86f852405cdd92f7f738f18d055b571bce6 -0x2e2134185ec85039173d4a04512ecb3ad8f5c48b687f13adbbbcbac3826e9ddd -0x701f5069eea41b647f2db680505ba1d60d8d7ba5e46fb6e0bc0de7cd8c74664e -0xd5b5ff1d62743423e273f63427f2e55700e0e8052c81e034460fa16eb47b2afc -0xdb724d2277919d78ee42767c842981515b6357f87a985833b10ac8763d8a3536 -0xbdac837c983b4013326ee6b41865962764091a0144c9effab9949c5e0f33d8bc -0xf934781f10c2b2c1a3b6b49b870baea3d32dc3279e0f6459cfbaecfff61d01d3 -0xeaeb450869c3a5d313615628c5922b44eb2a528ee5dddc1728f7d9501795cabc -0x700c25ef24c6746bed4220fdc8bb3f2294a72f486d95d28bc57f7139515e4f4a -0x64d9f678d1c7ab50867f9e6f16c3caffdf125ba0425dd5e420676733bed94dc7 -0x816862cb6eba978a1e7bf1e4bbf5fde7aa7871613ba4ee8b6a8d3c908365ebe3 -0x0097824a8383c2b2665f35268b999ecb01fe2d209531f55023cc40f89578066d -0x1f4e727e0395936d035e4350e038608895ce344d8bf3f957c7eb61db545d75e0 -0x204654ca88b8c4fda779f5ab65235f04efbc5c59c1c1d4b8f67656c6a2b33c8f -0xc3dd0cf749abcc778e0bf6cefbc151c293e6617eb21769af2e83e83d4c71c034 -0xef3b8238cab1e6b5694ef85815afa67074377faf2ef9e2ddae3881d777ca05ef -0x25fae6a4c1d8025004abfec29f5607c903505718ce50558642ee12b08756ea02 -0xb0fdb9e2281608d46977c47077d288e32b8203b069369eaf2e9e326163333309 -0x8967f7d76f26cab4ea25645f3318ad076fad45d49bc3e31bb657c36484411630 -0x362f28c441d57fb1bfa9834d9151cc08d6d86250a2982c6841df0de3e6f87e32 -0x8d2d932427576e665517441e0e041eee0dcc995f08703777ff547736cb34743c -0x73e250ff01b420670b42277d72d520a157eec53888b9e97a3a3f4ce13e1b5911 -0x1d08a533c0be7a94c54c3c0e30a9d9d1e5d16b213b4ca14105fe3dc0062970a6 -0xef913ba445ecac3f9d6fef449f8e548db7f45f541e170664932bfa7be72d240d -0xc086ea3975c90e8cc59ea58fc49272e5b1e7e98801748c194e5674eb31685da9 -0x877709b977f91df24dcc08b0119a4c904e754059d7de10fb68d58c31141c4ada -0x8b9d56980b51a164ff23c7241fab91cbf79080cd3104874da8165902388417e3 -0xc74a49e246e593516141be1b93e825911e0b2f1ee26814759f1ddc0a9d830648 -0x670941e332c34e526632b2d743f1ef390c62f067fbe58fa528cf41fcfa30bd5e -0x2002e1130d85a4aba69f689807b7873e93bdeb7d9e03dde13e27395d2d6e1d10 -0x12f5f9cbd2b7fa077e517b334a71d839c93ce377681c38aa7b778a2317b6976b -0x0e24a6893945871af8b1e0aad422b2e0d1f173c9f753d82a97c67422636bb5ab -0xfde2316b125bcdfecd5767897ed9f1ccc8fe15bb5701fe499a5059eaeb19004c -0xbd92cd646f76199231bf7768b78e1c6b79a973ebe9366bbdd199aeecd74c63fb -0xe76f051a0150951be17e1ebfb6270b98db3ca4c4a7ed91e190e9fb99e1feb226 -0xb8c124cc3985ffb84268025f2e27da526e981ab7ae9153af5eaa06bb1f4e9d71 -0x18098561aa6207fe2bf52473b38364b4fc2db5e10ac8f693068c92fed6ab571d -0x896d8a808b4a7b41fd6567877c71d1e5a015c51c81c1f0769cc251264df54d07 -0x289564afd4127e69515af34143d854d507f9b26366c24a4e70ada0f17d4f46ee -0xcaa5508777881c343bf02d68041af52d39cd698f1c1b813d82d47e91b07e7416 -0xc060d84f59755f8d05a504de16237e79afba25a6f983067511c1aed8f8cddb1c -0xb841f7445a36582d81d775c3daeba8dfb5c7838a2fb9cb8f068afd465f16349a -0x868b0def8a6d4d06f9417e25c147ca892b591d09b3cc764f28ebc8453b8152b6 -0xd6e2ab54a92adbdc7c285298acef601de51ea7dfa8d29300aa056d92a0ff99c2 -0x3e9c6278550ea91e35b6524f52ea8f7d19c291f5022e50fbc4cd72753db4ef44 -0x06e38268e06c3ab2e06a343547b3c6f3d08ef51b0deff5e0469314f226996e59 -0x822226beb49ca5fabaac59bf1ae7f47ddeebf167ef2156b7212892c95b4cea74 -0x9aa0bfce1fe388e4e172afc7eeac5d7389c9ae52c4b1d0551f23e6c0d59ece08 -0xb9188defae5e5ddc68e7f5bf70e01b56c9d7ffd12bf34cfc9ee4c74c160a61ae -0x6a3379cb9b021a98d3637050cf0df91e8fc012da65cdeebd25c8b8219be88179 -0x8c9d29870e58fdcdfb5419ac24c09ee169b0fedbc20f840d25277c619175aec2 -0xfab5af3cdd184bc2202ff74ddd7c1085e5685b109b78a13d3b8727d809953135 -0x9d264cafe835998b2ed9dedd2169947beb8df7a6357e72100049fda275ae6537 -0x2ac1a512a8aca3ce2a464a53a246e888fd730342661c21c05efe848fba63a479 -0x617cf58903a0769a25873fca9fd24be2ab333459ab3a824705541ca38a98b6ca -0x35165ad0a9085339a66e44fd32c9121689d936823cb5dbe5db858f1b3d5fecb9 -0x236bd93a186a236ff1cdb573e55e8c15dd070c4094eb617c487e3c57de814e48 -0x5f163efc8c3b968c45fa93157757d8413d2c4a22e2bf5fbe1825a4779256f1b2 -0x253898da037b895d1dd99dbc9a266022f0c3c74bcaa78ea35b5966ca1f7d98f2 -0x602c0cb6f5ea1cf9eadbfc3c46189228dccda8c529ba5fdfcf50b2f7b1069c2c -0x811b21d247e9262b47f436f7e69734f5733583d2bf54db6c3b3ec3de20b2f994 -0x09ed97fddeed982bfacfbcbc1ee8a2dd699a7d69a96bc5fa4e8b14a873bac907 -0xddd07d19eaecf483955dbb880ad81b05b2d792b2070e8aa0dead9c16dffb348f -0x64ee92928e7d11d822c8cd9babc5d2eb2c166fd1da1a894322da7f9ce1ceea8b -0xae3d82c155db47b7a4539ec018772433ec4911902b5d9f573e4516bc0e28c091 -0x6c99c999efbbabee0d61b0796515474ca59c99601b74d8857315295902905930 -0x8bed3c78e2072d126e4ed037332a119a3cbabb0441087a738845477d315f6f90 -0xa4c81e33cda5c62c62cd94188e1c4ea59133744b31d336cac014896eb6cafebb -0x7614b8186fdd3153fc7812470d6ab6029daa264d5be8d5cb35df9537c1b1f162 -0x664e6a3511d3629ab8f625fd179fc16f269d189258e319232828d6cf3c560517 -0x801cd415df364fc02990ff247d4494883a1dd2c479492e9b1f1f28bd79b81c4d -0x991a7ee9c672c8e267184fc60834deb81c9947aca0a7e308bcc2a32d73aea9d0 -0xc9ccab74a1019f1f76daa2b43f0a32633227d9e105099f10b52792d4b1ec2722 -0x36f4c31c61c153e0db5f308b7ce8088b6d32335b65e1e8afcbb13551886f7ffc -0x008ab1ff616d2b0de8f50eabfead0b5a43f083e361f547edfea3ac5e25c5546e -0x2414ac87f2fb577f7e1b177ac05f3f7265743626353e85c6d88954cd9aa7efc7 -0x60e05c7094d6d0b6cd8f6037b583dfe264d75098c5ee6101b8fd96f428132dcc -0x1e9eb976b6f4569de5e71b37bd8e77e39fe31b7bafa61c7e1003d8d8ecc6b2e2 -0x286055cfbc472e8107689a305a97685587449198298010137c6fa6c69b08ee0b -0x61d3a2ee2bd7ded4dfb2b3b7fe62470650e94b8aec6047055e45cf25740395de -0xfeaa68c01991bf57477683c8c41741903819f08e349f9e2e3671a37cde6bf2d7 -0x720b3819a260e48253c449b0b98b1324d2a081a8179ebec5da9aae16282c2e0d -0xdde9d82ce1897111c2aac6c2b8cf5986241a92e10d2c6c4a6ffe0014f479d4c6 -0x12d492b1e3d346d3914a53d538bbe6997f1b989d74d8e02256648e969f8726c4 -0xdc445702f5deed9be2338129867dbf8b280f4ef0432fcf9bb559048713906bb6 -0x2bbea6b33a1509468d035eb9b9de3d274df8c0c77ee786170c784d0dcc8cd325 -0x5fb6d95a3a8d3bb478e9043d996d02c52d418d5713a059793e7fc607e2dcf334 -0x413e2681a88c54c46d16d2a91e6d97653e05f05ace14a1e2d09aba112d3684f4 -0x311333793afe4ef30850a766a44233838bf9e2345f5b2f8c345f0ee8f956286c -0x66292fecc813a31f86905040307ca0040e534e2969f56f9ea3938873aa431c0b -0x7c0a655728754d74ffbda21345da217fbcdfdd77cd38482d751a7c5e0a1c149a -0xc0f9832ac397b4c7fe5ee1426d918904687f6117e2a0fc964ddf95b8838d8338 -0xfa10aaa9fbae47c6c929ba31deb9ae572bc0de5fc57d114f906a98fe6499723c -0xf746463833652d942ea69d3b534854625e92ddbf444027c798db04d34717e4a1 -0xe43cde8f581da6322ae6cfe35c594f3530c49ab69f02a5cb10776cb3a7061c58 -0xc2038688e9910feb25c17b7653b7164dd3356618c253981aef96f644112cdf72 -0x5c5c3ba903eb0563fd41f0efe072012084eda2bf1377876eeef3ec7f054af103 -0x0b2ba0cb3e2eaf59095c2f605d0f178e7997844bc5e8bf621d3dd9cdcd8f26d9 -0x33355911a6cbd08e5a957e91318dfd89c52f9d6786de29ad365b7f87fbc8275e -0xb7e1491fac7a6513d33ed3440fa91aff5d6760f472514731b197cefee35d900b -0x412eaed6403eae6ce6d2b82d950897b9d999210bae0373a8ca65a4b3503d0949 -0x76b3114f24fcc929e1622ca2ef71dda643ba1cad81d0358543925223fa8435ea -0x22cb8140726e6f885d9d768b05a465678d8354e9587df0c89f10999fb534463e -0x3153b413be407a74d4f9363fd91d979df987393c08653d1cfc423cf800709e51 -0x791a5ed35db87562eafc1638999540bc1e83468750a12068aaab8d426400e805 -0x9e128375f5375a92b2e34eb0b63166501434a3c14eb28d5f2eb6fd20b916cf0f -0xc7853dcae173a9c91e977901982716bbdbdd7305f11e0012d5165e3e8f94ff24 -0x410115ede6c51308d90ad00ec1b51af0c4524b25f72c10068d5a573ba6911549 -0x2fe5f99fb16162466568940d423e4095c79b9f8d3e4e51e7274bb6518e0cb8b9 -0xc9a8ef08ab5e7bf89375c7bd6e5238526b88f0b8c2419774b124a0e96c4e354f -0xedfa2350384681dc7c06b95718c8c82cb3b9fbca1a5e226eb245997c04ac45a5 -0xf35549ce29932110bf2bf8412826fadab158ae6841a5e3579171a288eeac2da5 -0x376dbf35aafaf1155dfa372f841773479a5c9e1502f94b24fe8faa7beeaa0223 -0x094f02580b46fd2fc513066d11b26344ea8309638d6c1e337b35c981668a24d6 -0x6eb9dc00dab5e69e5eefac10b5c9d58126b82c08086155a2b5c8f415350a1935 -0xfa0c9813ef5675eb23a7f7653c3bd1da64877c7ffe3d3edc2ea48f8abf8544ee -0xaeb99f4a524b2979601921adb657cb2c14538daf17d677f782fdb47ee4eeefde -0x0ece10eb679acc6ec68907f562f57144246667158e74083aff237eaf03b7dca2 -0x32e390a5321e625e85e2687d04f5d6d0488d15e24d47561552b516ba245aaf62 -0x2311c032aeaf426c7f2cab04fb6383464bac0ef418d4adaa070f42ea38c70c8a -0x9804cb936dcb3e319bef1972a2d4298b08e08a205f48aef13dbc6d5bfef5811e -0x1fd0e94cfe57660fd07750f857a404fe5f3729550b49d3d28cad74feb2bdd6b2 -0xdb7bf59dff891b74eb3c16c18ca4ee2bfc026b2fae1bb175244e179ca80842c4 -0xcb5b7fdeb18a16600936e7a3d0d73dc2e5f823e32ab534787552fd2c595f3bc2 -0xd86c68f9719ea0f8fa111add2260479ec9547b3016638ea0ca09e6a3ef22778c -0xe20ba72f7c09fbe74b72a239c0e3cda23ee0ea41245e709c431f49e7f38e3dac -0x950ab908798d8f0dacb7425ff821586b6f000149b39dfb753071880659008bab -0xb8325ab7f671dbaa7f0a09fbc85d14a8e94713319ebc5ea1f452637d2e2f7bef -0x050c12fd9bbdeed55ab4425d20ca6b5a3e0cb72a82f23220693ebcfdb82de24a -0xf33cd043fc36f5d11fed20689e2bdcb488532f8f98fa137d9bba5ed27336c452 -0x035130a540a9e52c13c6f338b9d9fa275b86187ec5016cf2660112a46c67898f -0x6258c8faaf82a56a8ee33e0a711f418be4b2c69689da5ac9d50fc7f7de7033da -0xccad13fbed57dbd2b06135dfd4acb0a1b96b3c037318da5d5adec95dde0d09ff -0xf8008ab94e23b9575221c36d3e0b1d411185ab9c26fc931e73869c00b63abd2d -0xc89fdf674beb041391751fb502458b642a7e6c51f71bf6494b7a7e1171898a3b -0xa5ac82beec4e5540fee58aab8bcb96b964bfa8f1c17c8ad43894e0f3fbc7fccc -0xed2cb7cc37f23b06104a857af722624766d63dddd317482bf5799eb55670ebc3 -0xe6627ffa089176e9ff70b9bf7e21c3d72e4443ed045ecf95c9e344c2798b3804 -0x67537bb86a6cbdcab67a6a318b23fdf5124549ef3dcc5fa20f279b8ef3f44ab7 -0x633011d6381c5d8b768ab697e2f8495e225f636fd1b6e530275ec3bc2994c966 -0xa3a01c3207b62788bfd900c31fa206c6c936a1db5aaf1f036e9db8a27d7dc9f3 -0x021eef3ff462488f49442f00a5a79d951699d12930528023b0c6804db9fc9ee8 -0xcb491080c2654feefcdc868820dc09c2e43c2afeb18db05e331706139cbaba43 -0xe65fed2ab051f4dcc57076861c2bd59e7ab4421d4b025280261efed34181835a -0xc3693d82fea642cb3017cff7a23e4dfa39e8e6f3807801659071efa90e8f4484 -0x42f077ac7f375163bd3aae0116511f770879432308228af8a030dc29009917f5 -0x45599160bb780dd12b0805f3e204a9c4654f16dbc7ccb29e17bcdc2f38040da4 -0xef52a6e1252a48d1284547debfb82affcd7683a1673a511e70e072e918f2348d -0x05dfdc292f8b442140157ad813e91b80056799767edea4a6ee2e914e273b604e -0x71b40844770b1b97de3f697e8bf3d7c082977d647b2099da5b7a939a9b38cd24 -0x13f0f72590264dd88f087664d983cc793b9989a09fa019d04d09cb27549039fc -0xfa30c4e0fffb66426d1c37c13a596728357b607d00d55b8657e38c18255368f2 -0xf4f81c9414dc4a8dad4cd6391059cece22b7140b8c6537e674f9c18fbaf74157 -0x5d909af4be844f0a409645589257994508be067ec3d2fc3eb6ed010c38b26902 -0x67537bd7cf77dde94cd03e33cadd2567bc405dfe06b478b064446e8437527f3b -0xd412d59e408d09a942781d6024cb9de6c7576c969c26da48e7288655b6e02958 -0x0582a6c996a282073c17b05e9a9b6d984728e7c6427d6652b7a89e50c7a29a78 -0xb59b489188c7ba3c3dabf76a5fcbf3ce8917b3f7675d71b9f5713e3de1dc319f -0xeed5b8ce701eeaf476c48b9b887334043acb727137bc83842738a0efaa6e553d -0x5b7d7137e1ab1a67171ca125704ab741803b8c2c398b2da085700d87caa6012f -0xf40eb19c5ab7aa66a4b3074167160e0e1556e45d687ef5bb6e5ea21ca0e49ee5 -0xc0eb48daa1aa38bdc45ef848ee08cd0be5de375968fdabc5879f3d91345f853d -0x79e9b8eeaa55bafe804e63b54004e8ea419695a8062d7de02966ea5e70307849 -0x303a94c138924f5bf9c9454969fc45202f1a843e0fdec0dadebd11b7ce425244 -0xaff7ec389f559404917c83a390446e3f1c9e7002a001b5668e33cb725bf645cc -0x56390b2b3abe5a95da6e9d034584c1a9bd78d3d9513093cbcb476f7b12c4813a -0x7df1d0e3f215dd8c6da433520b8ca95c57ad76e51cbcaccfc6c3f2d42168e815 -0xb8555654b9934aeac4ec93231fbde4183478e28847a82718df828c7f9e492f40 -0xc3a42590cf94cc597f2992a00c566b48df60586d220c35d4d577f02124430df3 -0x5f38ff6741d35e126aa618ab20f09a29825dadc83a1ce31541f891e4a82e9a01 -0xaf3788b6cfae122ef5ccb34a966d7f15d5bc2179fde3822b014dc45cd759f782 -0x1536f5df061db4255bf7a3bb62c01269fcd0dccd277b772da8e80e74c61930b0 -0x566186e6c0ddceeafdbebe21d47eb79eb7f6a26c2572ccd0fb89183d023f7851 -0xfd4222327c2f284da48b6bfea074af2175129f0f00fdb3be0158dc389214ce50 -0x42cf96cf3d095edc9e1e5efbb41a863282f77d585a79c1bc19e8e6eca7c621a9 -0xf19e50674e42458194e01ac2fecbfeef79f2b6e0c333d9d493284116ecaaf726 -0xba183c33ebd33f16c96ea9ae2c9867f391f0a3274b281b5ce50c08624f2ff6ec -0x8ac267afb0b344b0e17f19dba8fa6e4b65aa73cb72e647011bccaaa4169407e9 -0xd1137004a71490ac2905ad9342095e2a2f1868532a698ca5d8847b127f17512f -0xc485a0e746e69c671cb31429bcbcd2536e1886fe8cdc4bec8748333293f4b771 -0xd79ca6169b7e99bcff3fe9f24c7d4b03555803cd8c8e357d40b3e255c47a844c -0xf6b2ea0b42b8add3c61623ea46bdb6b91494f035a7537c8b22c65bb08f7a53f0 -0x0a80aba34e4ed5e17a7c2bcdcb407f91754fee668f304ce67aba51731b7f1d0f -0x2abc71a28af745c0494cc664233414277383c540169034f3aef53895e60beeb7 -0x00c0c4eee1116856e93221ec0b2bcfa090adcd128934e7d52ec58bdbc18a445d -0x6d596e8e35a89de27d566a5d2233f5bc39b53541e2fc75335bdc64f72211799c -0x9ca173adb369c8ef920eb2537d3a2f6027dd56315dcdbc839097dd8efc78689a -0xc0a98e3377f6fc58bb9ffe9d4c9e77c29b254f136ef7f2263857592333572206 -0x0dcbebeb7ed2872a61d2a4e135ea6a641ee5c5dc6e4691cd21683f1cf9b770be -0xeaf9ca5000545d25379999e256676c61fbd0dd34fa1b6e40afa697900aea826a -0xb17cddb6dca03f6c9ebe0383dedb807c7f57dd2a9a8e4543bd18ff97c95d05a4 -0x089b4467850c439465d8bc2e1551019c18c1defd4c6fbc374270056d40668754 -0x633cdf7631f61d18aca08b57984c65c57c61b81f1b6fd2667064c6e099bedfd9 -0x87b02679ecc5bfb725c2c16ea7c6a9dfa78a152c0b3ecc45d6d47ef2c7b37404 -0x3bf909c1785a795ac59cd67658d76361c37523662d1a0625f067a9391cd52882 -0x4989fa8ccf5e0ad5afc56d88bf23324fa45e2d51e9c4fcc59be39cf52b3877c3 -0x0fb4c8b11013434ec8423a2725010131027d3661658a59ab4b77db88156b0278 -0xca08216e977e2d0664feebc51e340ee0b1d8f44c10e01cef3e1369e26c75d2cc -0x9d4c55ebe5949d9f9383a3c853ed3bd03f73ef40c3b6743ef7ed8ab71d49aedc -0x2a6a0a39a034e9b168fac2bb5e440b025064d715ac77bde2f8a58a72cf906fd5 -0x7f3c1452402f3ffa214ada751c11f857cd0d42fb92bb86fdb5af7c41796a2c7a -0x0fdc3dc67cfde584136765cd88877a5eefca2e9d30324aca0b15d372485b3318 -0xa3d584da7fd6320099539a78ef7e4bcf07bf236b4e1d1bdd1dff36be85285ec4 -0x66f9fecfe90b975278907c876f7ef8741d2b413b9a72b72738928bc30b128845 -0x4c11a5c4bf6caff7d96d9cab1ff950736dd03c00afd78a3acb73f385c3a470db -0x68c72f7f6d2ae2dad04d2ef24685b1dc00a40db0f15f00e2d126a500af592c7e -0xf214535ef42ff4adf0a28a3575f864f8d86123a5b0e9c979eb333a280f7f69ec -0x6dc766f3a2fbeb1080e8add997904a1e3523118f890a03998b9599bee86b5dde -0x6087d6e594d11ff654ae8e663eb713d9ee11f1191a4f8e6e8714855a859629a9 -0x2b5662ec1bd0e5405953114bc3abcfb90eaf86f2f1211456b4f9b20686cae586 -0x80b9eca4fbf91f0a4dba1da93f7cf80cd5fa8d63fd947bb87627a5efbffc2334 -0xb101c87cbf228ff8b71cd73ae465e99a4a05cb742c23d6c882dc19f20989d5e4 -0x1d0dc472d708dac626dfba34a2c91ff4b84f153050b1850add8ff181efc545a8 -0x500e93fa20e0a72e3cb043f5ea82710356cbf68ecbc88276757398b26fc85c5a -0x097ae44d7eae9f416a1671383403df615a36aa34f2f22a3b21790e7828436b01 -0x32a0e04d8c23ccc5ca0f65a2c55e817bcb0b07d6060f4e4d56557892b5b82dc8 -0x5ee3d026b3cdab71c071f60f5723a686522c045de4a363e7475e2d56665d9cfd -0xd267a4b45cd4db8367a2d31b6a70e8d7932747713d04de4ae01933ba3bf33325 -0x2a79ea7d5f3deb2026ee2ed17d044caf98c3cd966ad843efeead6149c0aa9dac -0xfffaf2bce398a47cc48e91a9f00f29f905662010d18c42d0307f3aa9454bfb60 -0x755e891cd17a00ca98a69d76be35bf62f890ab2309777756d5eaa85e32b0f8f9 -0xdef422117975c9933e6d34d18c3a0c72392c67a024784ee494008f32365f4ffc -0xe38d2ae64fb4258415c351c1106d10b5b849944b059ce89b4483c0018903c0d9 -0xf7696e16e2c28ee71bab1276bd8722d214132d7a7149c4664e66d089fea9798a -0xf455715e06dac5253f424d5b08a79533579e0abcec5dfa82d01fb845a3720ef0 -0x43d452fff83627460e70decf7107780778f8d69ee98efb931c21fc836d2c393d -0xdaab63d1d2e045d80bb236f32c152f6d0c82d24274fa20947291d10b08a8d69a -0x3384f94a2185b699a4f4d0d673c6a5add514e88f9e213073d698361d2c8b4e57 -0xca8582b9c30c38e2997dd8005a8a0711dfaf89086910a1010f9780a066baee5b -0x0ae934e748a78161158e3d3c661a2fd68a5a4e591a7c1d52bf19ceddeb4cb8ad -0x2d865f645dfd7b7fa8c733485273767a9ef214af7379f488ca763d4425745743 -0xc9a8ddf885ad13fa18a718e3e6de2cf7e9fb4fe41214c9df64aa7a4c2bce90f4 -0xd1fb95872a41c0332f312b59f0b6990aafaafbac0d8fd0f5d5bd0f1615afaf5c -0x10db9416e4109b1aebff1b5b39031cd3a2cbeceb5e03865c19f8510408616b5a -0xf3d12031436892f5eaae34dd1c3fadf60085cdbab297b43d2f131b5e43761a67 -0x45ce17c7b40191c66c026400b6f066e8fc52d668bd7aa630e6bcda774c394373 -0x9d876bb1c26369a9eade261c9ac205701232c044180d864e5283a98c34e7feac -0x06301aaa6e820e8f95daec8303a67cea2e99a31468add9039b6fff99df44921e -0x2dbbcd4833cdcfe5846f80602d153ffc099afd255b4db8f301ae8151b57ef7f1 -0xb29ec350efee55742279da9bca7f9560bed6919f71a908a95208bf340823d00a -0x88f0004904eadb7ec9c7471f8fbef6e137c0cbde1b31c8f8b5e69f4b24cfc9fc -0xba76a7482cbedcb04cca2bbaba4ba7dd8bf77a168f2189f77c5e17eead0c9aa0 -0xeacd6f9048d2e8b670a0ac94ea411d56ecb30426fb2161d4945762585e250c1a -0xb2c5a2510137a0137c9f18d9a67e114c8337e038bcb81e1e38654e0b4103a22b -0x11be97ee0d191c196db14af7a5cbe9c5499c8ddac941d0fd0551d4f353d5dec2 -0xa8ce48cb3025b417c7d18236183804f9b5aeab84091c3522ad8f27976d13b4e8 -0xded370b0b493aa7c3cb8d6c03ba877f48bfe47568284a022e1baaa7c31e0b7b0 -0xfb1303e795b302400ee75f640580ce683b30ef6e791dafff4ac46191d328a68c -0xad6d978ac7f8d6d79b0219af3d7d86a1f12de311a25916e941cacd3a5059ca51 -0x8f9f5b18c84ce2c9cdd62639b0eeaec4f3befe2a0552586a80ddf37b8ecfb1e7 -0x3ea6b3b0c47f00ba8c82600f29cc9e5592c260c770d434af5f2ec3b8df503cd2 -0xabec34bd1d4c4a73c676cf549398732c6b516e6478e7f3b92aacfa42af20c346 -0x7f7b58e8226f87897a71debb54f927cd3d0379cc68e2a1ac6c8f46e72e870366 -0x661a2cc499b437d6d825a44a384d25bb8c14f0c00efa53d47c361984e2e0c1de -0x5413f7193b502869d4aafbca849c1f6b8d6ebc6459e3b32a333c50b245de277c -0x1326c87ebc6b4dcb606a57ecaa4ca20215ff291701e578c23fd33dd61eb66ff0 -0x392e47d6eb7b76f06cae57982d81f60a9dbcd91c88b7aae5d1bfcfeff6383f1d -0x07f7ae785bf34bf22a18e04b2782c5a65d09c9a5e820a63f0d7235fcf4395606 -0xc3cae5c211a6d1f9ae0ec891194f4eba3012496e31ad1473d86cf031aa290f61 -0x0b650f4746e51fcf62050db0081c2fedbeb6655fbb40c6a62bb73e88c334c5d6 -0xae6d602043353527947801726e05974bbac33f8042e4347d94f62aa1d1c8843a -0x2a8bce130204f4cae17da08b0ad6301db07f8fb06be4754ec039370373c71574 -0xedbdd61489bf946016cfa2f81fb7f34ee7ac849ecff848b7c8521d3ee750c252 -0x4846724320a8aa0132d0e49d3c6557740658927269f3c902bb0aa3b5b5a62533 -0x3ceebb5ce5c9bb47a755412586a909b19d6bca95f797a90645563f94d57a0d8d -0xe9fd3b81ddf2ef929083dbeb3effa9d80c51fc308202ae0b9a3fbea5c90cb15d -0x15a47711036f5a549428b4cdf4a0f39bb7269a17066546b4e4c8c21c241627d8 -0xcbfba3ea0436d445ae966573d626a7dde093af77e0b26fab33a7fbabb20b4b02 -0x46f64491933e6a8e132ab61ee48c5f131e811be7d3c092b7afaf255b3f37e138 -0x10e88d484b71693ad737bc333b628a56ed3ce14800887e7a4cb392307d61df2a -0x9d3c87b096820bdf7dc3fa4f7f733bee4ee9e3ebe64864991d88dd24ae092273 -0x7d3e591a1cd33a87fa95b0436e947b55919de2c719fba45e86b9192a186e0b7a -0xaecb5a06843f2232eff46a0224df7dd8d612c3c5731777c2e6d4de1dadee2fee -0x0e42f2eb7b111ee350152117d8bcafaeb926f41b828f8e8f4a367950424c4e2e -0x46e0bed1b83da88b7f08858675ad46a8bf20bcfcd47f26103e588f8c3e76c4e1 -0x9b3e209e51f7fb4cb13e238dd39a297965d6123649b64e1a9e37caff24369349 -0xbbab9a7d6dccaba4d18ce4133b31c5c09cd263c11c97705738f1fdb5a696fff2 -0xeef965c53262d3e40f8c1baa85281e303ffc83ea9f93b244184f21ae831eef90 -0x592ac0451f961af9dec5d7c3008c1d0c5980c64090482a5a1f78fd130b01debb -0x22f8bf5dc902ac12ec56a9a5c05ccb8a59c8dd320f6930ecaad6ce41ce6a8631 -0xbcaa92daf00639f7a47d03957a73109c3bab4e56c19f18125d6c03475d7263ff -0x8388f459bccdf06df1229e33fa7bda7355ad0cda7f3350bed2fe651d1cc3adad -0xa2e93389dcbd18da7a454a1cdd9af66aaa4f388e78fb3d4b293676e61fccf972 -0x2c48f70ef938eef8611058e0be363c3fad464d7d62d19c347fb17eb465281f32 -0xf7954b2f139f5d8d418ba1fad77b9c1c248e9c371250d7edb2cdb346942dfd2f -0x459975e94d0d40fa931d1750eec2a2394269ebb7d6e784a603717fa5be4751ea -0x3dfc98a97892fd5236f1c38b28ebd5c9cb2c3ea15d97fc6d5c76e04d427270bd -0x7824c813611ee12ad4a8e49897a7cd8c216255ca1e5c1c2150cc7b921e4f7491 -0x21b7b2f6c43074d84832a4a9bdf3c3d284cfd050cbb1355c9a393c48a161cf3c -0x251dd8e9ea3b652b690c75b03b1d1568b801f5b26a8c7b57fc437f26fd438159 -0xd1275f9cf56af363edc6daa97b6805b5d7c1062d83294ecca3da8761be732f98 -0x9f20887f5ae7c9cb7c33ebddb79ee47c81b0f8f2ff3df0c65f3edad4168e8445 -0x1b305fa03c0210e5d20d9a67d6a8cfeb91b6d4918f802b54c99861e95a1025c6 -0x59e5c5018915050f1e62227941dfe75f436a28ce871a5ea9784f6ce012114f02 -0x524df842d66ea81a4597ac164deab75cf1fc629188ab9f2d2dcecdf09e9232c3 -0x7726d75c6fe0a93bd1cb9662d4662e511c20acea7723432f14651a8f6f1daea4 -0x8bc1b556ecfab009e40aa14f6286791fc78f25b9284390e41d77edc8d2340450 -0x62a02e7e26c8e877321d234c3c1e15c78d904579ec52ab76a3c50d1fee968526 -0xd4211c77009f56eb422b0b8eff9888cb324b66c52dd6c95c2b8ac51fe53ec523 -0xa1c9144d5834097b14bdda3046d0c489d2a99b50ce3f33498fa02db247e342d3 -0x349688e6e775d6ece501b13bd3d6d2dae8bbbcbb94b6dffc7bc7b9ee5d0ca729 -0x2bce3d63e80f59ca352c5ced16f768ca6c3ed5647bb81e8c4337e04deec7e20a -0xc0a7e004253571a580be807a4ef0bf49eeeeec229cb0644bd2c06e0c39836ba7 -0x0d15732a5cf22e2b8b2286111a4771c4805843f8bbc74cfb3d9f77fd3d9303f9 -0xe77b93d56ee01125ebb91222ae77a8b6b6ff503a69c245a56138f046fbf09010 -0xf0607eb295ae06b5bcd8f811a1be96804d370a82863c6295a2f6d43afe9c66ba -0xb665849c7f9010a274f6f20f068130e052a8a489eb4814610799e543ef3174c8 -0x651c24b2dff5b24f4ca8f57b0fbf886d06a8f6c0d4424a9e57979acb5548b68d -0xe00c20de92d774097c9d8e29e6c7cb4cd8f0a2f874dd6d43afc89a7feeaa0342 -0xbfff75b7605bf96af5f8f3e1a38f08b551911ec1e9b01683f691715a9fd0c9c7 -0xd3d00077c20824256fbca5fd9e67ed604f185929ff4687a08713bb0e5f5bdefa -0x756f6c2e2163920ecdb2cf58c72f3cad8694fbe10d8f312e216de49ec8294ca1 -0xc812dae0d7cdec42f8337efb0a46d96a0a34e943fb389d58b13fdc2cc33ddc2e -0xd3a666a2d749e5842f6576472ba02ea0608e804de66d845432759fb0de120ead -0x0a4d623fea730bcaa0c35a18d609685310f3240d2a4e0c99cd45439c42ef506c -0xf312f3cedd4f31a82a73558f6cd2e7672ba92b29e3b4de9e48e808258f628c79 -0xf4408cdace6e80d0ca5290317b19092cfc26befa09b317239970a9d988a74af3 -0x7bf1e991ed65098ff1691ba79e059f4b62b3e11fab8ebcf01ff590b3c6658f23 -0x1c28a8b49fafae22fa8bec3dc54f329f1e2a84e095478ba6d2af71d5b65f8b38 -0xf4a66a1fb1c5a5ebd579ff3048cbb0d4df99d5adc7bb2c462512e7c60fea4b17 -0xe6fef104c2b949e4c01a9cb2eb3ab92f4fc92f98664cdc650b04a88ae1589d85 -0x6606915503fdf494be333eac8c98502b0be3e10f3bb0ff20c1e35bc959a6c516 -0x799ed561a3d78f1c1adaf21ffca0590bb48865809bf526fbfa0d9be5630e7399 -0xe5b3cec1ab5b5fdce7742026c69d38281f0311f298b9707c85070d83b0702f1b -0x9b9974505180cf1676c48584dab0e4c43bf9e40f9f874a3a92de811e8e02976d -0xc96b08f69fd99a96bea4ecf6233698bdd996a8bd252e75bb59f3dc091fbe6c5e -0x6562bbfcf6f944961d321c8b4ba27c64b2a9cacd5e17c48674463e50fda87063 -0xfd2770daf9a0e469f1d77fe3255f60992a69eddcf69df835758460bb2efba83c -0xc805d50e3af9d99cce09d6ff79b902bb41b35608aea3bdc5c700065a48cb7ba6 -0x1df36fae79748d0fdb7101820c1446322298f3719e6047db3b980a071370c0e7 -0x78388eeba0ba36427661a86bee4ce86d4af875a638114408c2a470bec2a9a7bc -0xfa31aa90d38aba7260cbf865a72698015e7f7b57bb58fcbee62a5998675372eb -0x1ee1d2207026a337c6eb4630557368758030e7255c738a5e03081ecea78d8813 -0x4ca4154efd129ea8f1cf42f0b265b83d22f7d162fb0ebfba0424fa8bae311e1a -0xc13fe6a44b139ad9d7fadd70c8f40bb2ff223b7da0fbbaebe3a80dc2447ec679 -0x2a3cf115e5470094632abed836269bf3c9db767d7107ba1166fbe2a792701549 -0x6bf93f4ea2980c79051be3f29de613bb9abc455bca6c1a90fe416bc190dc1710 -0xc43d612fd4c30a0ecef74f53b3763fef7f00c5b22ea3cb18d67999fc3abe2c8c -0xf5e522eb1859606b8c302c3c07b59bdbd19f7c7afaef9adb31e1afb09a867a67 -0x76e362911abb69c6bdc6c27eb8d78f0368178a8ea535a688ce1059942cbddbb5 -0xef77e83926118a9fb6e51edfd8ae9ceaa8d53de1f9de69e9386418db26667c0c -0x7d32f8e790c39bb1079342dac9488a47263251a584522659b40bd00c4f9a2d4a -0x98eff694e4eff2c77a4eac1ace801873b9d681f85638dd2cd875248ede4cd40c -0xf860ad2bb6e0e36ba35136b86d806e3d43dc02824f4a6014171fb3fd1c1085f3 -0xd6f33e31e8c7b436a0259ac8e4102bab0eca6115e0f910252be52d689daa0624 -0x8cb7a361b78a6974ea2c18907a09c76d0fe8dc85ec616664f493e842e16bfef4 -0x9516501d1837608d6f72209234a5d4e5aebce4953ff2c094d8d85eb632ef346a -0xf0d450754ebc046aa5635e00c4d8b0d2a7adb9582aee3b00df59cffc21ab0aa5 -0x536eb06a9ae9fface80b218d8eec79cef7e9bfaac6141f564abb52e8a98182fd -0xb95c1189be4500521ded28932e5b78f2481e9747e05fc0b2511234263721da78 -0x145db904cf96cbf8d5bb17a5ea9d420e8abf1b86ec7147db94901ea11fa084f6 -0xe971b26902137722b1e3d0c95276330c49ca54b08fc9fedf612ed25fe1e149c8 -0x95557e2283ea9d9628c5a57aa838687ff30a2cd9a86343546c1961d54cf40994 -0x09d4ea169e9cf48a2886b78c4ea24fab28c22d15c36fcda145c82024bd801300 -0xca318dd3e6927f5e9dd5e9368837180e0df3e20b78b963422d17b175cd4cdbf6 -0xcd40a1bea4006714bd35402a44f27757fbf1ed0e4c5e7a9a463a733d592639b4 -0xa01d23d410bfb3ebc20d39ed7efe9649d08205e51d4cf7affef9b2a506d44e70 -0xc4319b3c16375fc5f9a84ea197b2faf2b4ef0d2ada83a1c9072d185f51d60087 -0xd5a3ba5d9ea6458ffddc4d779ae492e3f9c5beda2ed21cb7925e148f205e7b23 -0xb0886fe3a106d0ba3cd922f7e5f3e1b761b7cf49d33dd02279a078b2311271f2 -0x58c083018e43078de9731f7ded046336f80dab79f97d6bd53f2239a60b298663 -0x0c9394cc03f67621685c2e5d17e7ff7f591d3ec267c82ab5b5cdfab87466561a -0xce26b4b4a1ddcd1e49490556e2f70bf68b10120b062e9c62e7040a09338ce4d8 -0x093692d7595b20f2118a1fe77837caee6a3fe975619052805cec3f49d9f7d62f -0xcdf8263f003df5e0b16c0e262da9caccf5322f757045d19966acf327e102ab12 -0x16a053bd4a278e7a221c1361136b5893daee37464b4ea0dfa2d84a7bb366ffa7 -0x75be62c4376789d0c8a791cce7d05efa2811001a0065686d5ba1afddc9fbc183 -0x67f62d71e1799bbddc1e48d466b1cdff9bd302c4a7087b96f37525454e34afe1 -0x99f1a57312bc52cdd500e4895b39bbe7fa7a9d610a9768bc6d2bdda4626c1bcd -0xe4808774e0ef4f50107aa8e7d85948edca9716ab78cb0d63ff7493cca065bd74 -0x3080f84b0265871299bfb93cd8d8581f4bfe2f4c58b5fa1d1fe6f85278e21176 -0x960f70b7f4bb140dee69d288831a9c023eb3bedcf3339ce4708a75bccd71ad42 -0xa08ba22d9d2b9c2949085bd7421cba26b29f632f537f9d9fc7c9f206fd4de091 -0xe061a1931447c50d09f4265e2e5307e4eef8df21ebe9e4481d1211f4d85e0ab5 -0x7368bd3fd47c5220441cde3ff79dca3ab3a757664571a1cdf2ee510f19723eb4 -0x25ce4ed33f7ce0c6515c9f713b5e65c1e5e593529a12894cc3b4c7310c57719f -0x6b85ff554023402727ce78cd4a17ef4bb08b93bf87183a1966bdb862e0e59d5c -0xa0847104f9928b16aafb45dcf0872ff06b3296a84741d9aa01976bb26b9dd66c -0xed92b007606ed75423d79273aa4a337a94dc31f8e5738e1fe5a689408962a07e -0x8407e7827c248da552d90b7e4d101feb886558ae4a906d7d2919f3d27aee700b -0x15a9d7d298e41c0af73d21e1cd88c656b4abb1427b9b047161a0384c38fdc971 -0x91b666ed0e3417e166d43844cfeb81c7e43512f9f594bd2eb8014add923d9eb0 -0x7297a22154f1ddb301e40a899ca911363e3d4f0d919032db32c846d246503c07 -0xd974ee048a5b1849ec578aaf85a776dbf95820bda04e5b15c79fab4faabdd2ad -0x047ec8446dbbba1811d29189ecf10c14b574d8bf3de39e92a1443e3c1f7fc230 -0x2e3b544c9a11799aafe94c7aab6449882043ae21402665defefb2a68bdca16ba -0xa0f180dbe62f73cf63f7eb0e32c0699f4e904618e87ad680855640019147adc2 -0xa9c91e6528fa9d79a8aa8c41cf034b7d2b966cc4d94afa1787880d6b9d0f2891 -0x1b89474362db20594e5e339a9145b90baecd76ac7aab9b741e3b54bad2cb6191 -0xc7dceb7c49b737d239ac876511d15d01a42031fbc0162eee9de37ee404579e60 -0x27f3b441a8e5d5d5b4dd0f7624835f5ecbd3447ec6edeb895a6a155081bd7542 -0x4207f30b6f69fc6d2088829fc7e96d6a817479c1d7d98ae91829af129485ce7d -0x0656e645865ba090b74f788923dc50d5a9b4eedc10106926ddf50cf4bf522392 -0x87c7801f6d0336cb2443202c0f875eb1c1f878c52d050e380823be66f23abb2b -0x0acc703575d216684f8c5faaa2069db570c8fed051379462c62389fba07e0ec6 -0x01653d8bbf4bbdaf12267ed72cf47d6ab5c039d5f6587d2773bd8a1059d53900 -0xd39caba1de6e127c763838d457cb147aa2a8b8d832348d391a6a8878ddacab46 -0xbdae793d6dc527c533f621cd9c737ec5114f8ca98972238dd64e83788e1b813a -0xc3701c01fcb98f0209f18dd2be0d02a3acf47e183cb0f146d5400b726edb9053 -0x118a11e892ddb6e10ecb2cb489ef2507d0c009b0e0605a1abd3c30b9e40d8d59 -0x2abc63ef0381ddc518b7a67ed047d59c91ede3075b3a8a32b398dc9475df4d78 -0xf6a7714d2e6be105ee23571f83ed0d2f77203ffef0090b5726875fff2ae6ef40 -0xa867f0ddd11ab078ea1a4f0d084d2375848f472eaac337bab530f13ea8b03cbb -0x9b076d2b5da93a4ce384d798a0edb323bc0d577bda17ec97fd2bc5cd5b6c9f1e -0xc19a05a6735f9c31f2b9284d5e2a9ca173d26188fe67531f6e6ba911238c9c92 -0xd714cfeff764f4a24c95791a45bfe52537f5369959ebfac7527fc104a166d43a -0x4d6aa8ecab4a92ff082444aa036cae00fa0588dbb3cdb812c8238aaae4a61b56 -0x259645258906166af31b76433088417b5aa8078b5243aec20b08c7a526355867 -0x59f8252c5bf8a2d3721bae8b0abffd4eeb3820ed7a3f114678a73482d7abe2f6 -0x45b07d2749d6490c719cd8683c502269894529b310672d5a452d5a4cf111e704 -0x4178d99e6960132eec1bb9b0ac925353ba897751cdbd158dc4badc1c8c905e62 -0xa4d13fca57134ab48028a91df5af1e7ebe481b5bc6389111dc15af300d21bce4 -0x4fb5cadf2d4a1c6d42f1e74bdf2c296caf03c2f3b8100a000223412f537370b8 -0x768aa5d810562d675fcacc7ffb67b3438df7110108dd851b4fccc90c3dbb5dc6 -0xc30b3f42840882eb0d22f5b95f3f20216f4b7d44698a50f833f654a46cc12bf6 -0xf232e5c6164b3380eb0e9af9006cb3c6e0e63e8a277a57dd24118fd51bb63b06 -0xd0af788cb100dea91b7173933243ca1fd99ee211b8fa86b0cbd726c7c8393720 -0xbf5c8ae89251100cca09666bfb8ae647f3fecf0afffcc90ca64cfcdd522a0cf9 -0x1a689a6938c94955b4b243cc36a4c43b8cc25609f404c6f7aac097e94d4fc9c1 -0x7580b19dacba5a7c24bc3c62c5ee51201c932af94bd47e02e6c0a575e42da654 -0x47f6086c4daebb8fef49476db76b605462d61b547811e3f92e59d988dac7157b -0xe819a7462f0af5a0dd77c0fac9dc0e802ab21c5baf271b2aa212faf4ab622202 -0x3c0e06217f3a771b97369a67cc7534a5278fa37b776ca8c69fcebb6f5f29ff78 -0x8e91684e44f67f20c84532b780b28f4e565692e2f2ee44b15d172d325e45018b -0x57c0b2d62f9722a5d1cdcf68c5b381cb8bccde0657ceb0d4b39309921894d91c -0x53edc34042fc32842fabdd38110629c07ad4d12cf28bbad8a20f443c45fece94 -0xa390b44a967167a208df7f7f996d4f43bd2ad127781942433f5e42106b612820 -0x4e275111a6b068642ff2eae61bef4e2fa8e03fc812947cd46d53630c2f2e39bd -0x4217a3e42231062d701440713ea03f11b03eb03d706b0c5c86c9838d5ba426d4 -0x2c68b3da202e3f16bc1b3b1d99c565f804adbc9e3c7cc35e5b9477da25b2d4fb -0xafb5e8e202eb52e034733476a9d764d537fa15a1d1e1b2bb1d356adc9ab46299 -0xc3d3a1c31ae48c0f17f55c22da814c1e1702c4a3096fd4bbc2d13b2ea8c0bbac -0x33548f6dd0345e6e05b6159f241aa089fdff45692e1a6d23aeb0965e4d05c6a7 -0x1dfb3b6c3dec42b0cd11ceedd24aecf2988006fd65dec3713c3afcab121655fd -0x22aadfbe3d9b57c6cbbe66965c92b3400fc9bda7dc352cf6fcaa4e9691db6b92 -0x87176910752113ae18749e3a35e65de7192364ba4ea2f1f8052e1c673edda43b -0x67ebcc40bb0c513880eefb7a108d0906fc2fd03cb4c3ffea31381bbaf8ea3fee -0xa9cec4c020cbb945f72a75329883feb504bef6224c55a0d3ab21d251c44d0ecd -0x56c4f091a16073968ac0a8c156556dc6c0910d10924b31468bf1de9622e722d3 -0x2cb912d9cda9e606e9382fcab2f4e18d0ebdc0a6e3141b34dc1ebc9e358bc8d2 -0x0b87dd9f5578692bb4593639c8fb24137e475f97765259bad85efd53f8f17651 -0xe64741ea1801738828ca2d17269a6bf2026263afd979cd0c8bf5b90756dd7ed3 -0x96bfb8a0dc0050ed0e4b516eba3995092d96b8594e2d8c759770e5175ae335d0 -0x0ce8bc621af0505cd540eaad1135f67f354a10a1898b38de87928d9ce31a5092 -0x3ab93beeeb0de6ffcf93e6a3613887ccc49ec8bea256ad05726178434daa97b8 -0xcf4b40c12e75730145aa9df33aaf8df9bfad2186e96f5e76150018a25cbcbfb2 -0x956a8e29e28a3d2aee7dd744c9c6b762fcc5a7d545baf86ead7d9cdf7914d79d -0xf1f241fc7f34c0fb54e34ad0a31baad569b4b320610fe131caf7c59afff13f5e -0x2c19ec2fc9107c8abf71257388051e86efb12a559f08c3dde55fb5ff1f26754d -0xd959cd499ed8aea10f1b78903a8b0f98b1516fe921653d7b932e28ac1d1b3897 -0xa6bfeefb0f6eecde9c8c9b874c3c7880b77ce6c4edbf8de75245d0583b14a09d -0x375f67f20b52a9dfcbd3adc440cfbe587c64fa6e375ee1804994a07020028df2 -0x92feac3627769af907eddd06e36fc91869c39194f91470d805a4fee263f83ed4 -0xaa83741780edb2b726a06f3fb5080c068b06d0658a4353ef7ddbcb22289316f2 -0x1d96e8562575c65f4b494543273876acdd6c04ed8b589434b1d451b4aacf06b2 -0x4cd960b2acac51898b131c13d55b5d595d6e964486a9f6f6225fa1e8b25f93e6 -0x4ca642ec3e10a3b29c0695b82a4adaca790dba09b2f9569dfc88ee04cad5a9b0 -0xb7eabdfa5df6195874338240b51f72f31b2b73861ea85c4f5c843083d90ce68b -0xd4ea1c8840722d79ecbaa97aac2887d0137cf2571242e680030c80073563b8b7 -0x15e46b449130156d61c4080bb796ab4b1d444819f680c81087fd7679e600be34 -0x0046b526cf03821366c3eab21074348c79cdade6f58a9fac7880c7d11a6c4923 -0x3a0027fd22c33ac3da355427b3758e0b6d96114eeca14302d6a02ee1baf07109 -0xa4c8abd67a598f4875c55e4e73576e3ca37085488c65bf2d2560e5036a8c35e3 -0xb9c7d2d01a24c08efaa5290da8c3ef2d990b42d30ca7d8679b114d22f5c90aaa -0x5628bb10744595607c315c107f975d4a561e25e6c0ec75a92813d932c62aa812 -0xa4de559976558592a29c8b4d5b002236585554ea13d0a5f5eb08902cf2d92b0d -0x3e313aff8716baa908cafc446eea94db99e2425464fbd9e00d79b581f87c3657 -0x4a8533ae4b94ee92fe187bc40f16b1a27370070b911f936c03e915cf0c322272 -0x7cb853e4fba8902f2631d06c43d247a7290e893435094cbcbb5164299d2130a0 -0xcfdf4aca1321ef33e029a95e74e5fe23708a48765068ea294a8e5287e635c18d -0x773f6a86a945cb93b25ef1f58860197cdc26276fadb2685e662081cc8bc68092 -0x9aa6bed3c21acd63936cb242e334c2ec2de4076416a20b3d3e1da27f1813d7e6 -0xbc2369f10142bf882857285a80970c7e9a50c176d18ce953b1b01eea372cc6f5 -0xac48390b043783eff7dab0e3793861716fa908c034396e3aa95f45a8d9b556ca -0x2ed8b58b0c41838112d2ab711c37e39438fb81ef5e0c437e9253c58289628c31 -0x5ece006b4b437816953ef1e5d04b3fdf476c79be7832fbf7eeea7932e935cb39 -0xa1d2d61ffa927d37f7ed0330cf5f808a4769ef206468f17684862170c7f6d844 -0x0e9ac9442f23b36b9178a983d61533ddbdb642d1f4df324cdba4a2a626ae5483 -0xa568f19737bab5d20dc73f9a59a3d91958ef1c3507c1bf37e936fe97052a80b6 -0x21e82c3e41e13a251ffa41c9ff9a3e4fded1f1c63006970f3ebf20ec99ad0824 -0x4063dbb488f36d075527bd04ae2afb72d6f314e7fa29531d462695086590c02d -0x99d1850db877b1ae271719b9dde25ae5a6cbd19c30788d4d0c6114d6921c1754 -0x85a8f7946262bb1048f5fec1dd543494516c68bdae4c7f6cd3c4105ca3ab495b -0xe83fa61728098786b4dc24deecf7d2dd2bdceb9396dbf413c0c6bd91bf96bdf5 -0x251c246a1abf7e9ab6a59f57a218986bcb70568cb20080f6ae582c952eb1d29d -0x8add5d6b88039d8e82e74e0a6c1ee94d95271bff6789795b36e7040b53ac137d -0xb1e1ae0791c30d96d2a1846a4e3de9196d36190947528a084b95aef63ae260f6 -0xdb56de7866a42baff66968d235d191a35dac733514324a4bdeed8a6931ebf493 -0x8e771adffc47bffb9a5cdea035aecd443f4765c22da436f127af227e1be58f57 -0xee206f2fdcc469377a845a77a4b62af4a1e75aa115c293c7672a89e41bab8b68 -0x21f7e77e35a13be96a433d2371823a5bd78ae48cad2a736622a24bb7edf90407 -0xb81eedd25aa1f430871db741770f6b68954f60f3c122693357166a321072fc17 -0xeaa1be49d961e1d0075bcd78b051fabdb8833926dcd3ce981cecb9cf36db4bec -0xd0fc62574bf3e62f77d0dabb3fbcb73e5758f86063031b41dc89737cf52cbe52 -0x4e40565fde005d27330ec748af008ef76b40b27494a9ad861fb2fd8f9ca49307 -0x5177d18d366ef812062e1027f614a2238d3f48da729c44f6408c7d37b8ee0ebe -0xb06d8f4e8122305fafb7e5ab30b302da1cc682e728b85b129d329402ab4dd86d -0x7582652e519427ea6dcee9c2eea85e816515329fc1616dd6358351e85143dfdc -0x4eae5592a0e29f791d6c74eaf5fac1e7ceddfbb641ad08f416e1219136bdb045 -0xcd35239e0aad09ee9de997520ab4f704264ae621a85918a193d680a53bd4a081 -0x64f8eded19a8e5f575f0f508533432484872c91b2105c05ae13b4e5c1cc0a424 -0xafebf9d349cd965fdd107946c5c15d1b135ec6d52fad6d20bca10e7125ee228e -0xe3fc09fb101d7fe6d7976b230e575a21ab3feff5c6999a84fd06ecf2ce764568 -0x788f98f71f63223db5eb9ef28e97df818eb7063e255c15bacae016475ebbba4e -0xb2e105aa0e31e562317151635f1b2c5e501cebe8fc6a4288d5c0a030d818fd54 -0x7c6c32b0dd3860c54eecea439875fa7a9278c0ffc6b68fe6546fcb183ebca2a6 -0x8d57aa809f2f91d4e7ce367f6acac38884b5c05b3e1c91aacc9e12228928562e -0xad29d7cca449f2a8feba180eaae410fe4686d11865fba0c46695dd7f73530519 -0xbada9041b4c02883bf96f2eaf5a4099d1c6f62f6143774595213c44a35fe8e1d -0x7dcd36ce2a403b27cefd032d94be511a3d815fa34e02ca659a0b42e2ae26813f -0xbc7de8a96f300d3798b351149d224bcc875a5ea92f0e667c4fd5009d7b6981c3 -0x4ced399af53cb3b7786e48aa80ff520e423e4c45199715f65fb3f23cae114de1 -0x8f3d1c0c3412133a49c9b54792c353503e9d4568666c37429723e913cb9ab2f4 -0xb0541d6ca50e12a9f1221769581ef913bf76176ac4a6567751f9ae8b373260f0 -0x3a9d4db5212bd868c3d907a6ae118ebd2ef5864c35680106aa3ad01e849fc7be -0xaff5e5512c497a8cb668e1ea6b6e25ff8b2ea570d4246d699c85ee1ba319b392 -0x5f1473261577e5bf48ecfc2f39008cff11bcc7365e1f19c2c3f3ced1af9cacc1 -0x65a14d771e8e585602fe86f798987723f588515cf562d101492f8e3c4054b384 -0x5c72e207500e8d9178b392f8f843759056249bc7fb248a437b9865e19ad255ab -0xd97e886a742edbc43d25e8ae3492c2e90bd4128b50da791e64e4c4583ea7109a -0xa4bf02275b739efd0393f35d6b7a00fb4b89ff69e09bc1522f62e60be38cf204 -0x72923ceaa9403344575ea2ec86c7e3846e93bd287f4c3e0f99f61c747f1d98b0 -0xa66704c5425dad58fa31f7b0fc20e3ed1615c69d2481b86183a39fe5d704c0d4 -0x58d8f084ba013c75705dfe93da322d2b1691879ea68bf352b8428f72db1f62e6 -0x107f5eb8ce1bf37d8b5324df6a43bb6ff8859713c25b15825b4d25f3710a6771 -0x90fb031ed7379340b4a20925cba7c829ac255488977d13c2b3ce89ca66323645 -0x368eefb03cb391a3e3d4ad6313e2145a698fd293e827cc3e28c596ff58381f72 -0x985d5dc8e0e900d695fc0f43430cce8daa4d1d7d1067effa4cfc4ef8c84c74a8 -0x81c8cb2f29eaee43024c051010eb03a49fb1f156a762bc73a7ed6dfb7306ad27 -0x10ffb886f9c7b6e322a6940d2ebae0f49241eb2ceb28891f736511996d61829e -0xdc39b3708df64e2107b28c5deeb49ae3171bd22b83ca3cd033257651e409197b -0x0abcd7c92b8ad53eb896df26a8c2a9b300d0a809fefb8adc7d1e1601b75f5551 -0xb1100250bb3bdc08c8dff5c5f2a531b992a08cfa631e8e34f75b5d25fcf60cfe -0x7e102a140aad2835eb5b3701d3f83fbbfeca913023ceaee2dd437709593eae17 -0x051b2e71ac61e8f70dbbe00c6c492c6bf96e3e60b1cababbf6dd744af6bba2bd -0x9c1eb1b8d3f7ac0302691c54cdf616e5f3dbe069fed66145f779094a2c189bbd -0xdbbf14f835ef208979e55b134061c16dcc5b1a3d0e3baeb03ecd9e77d320a78e -0x34fb404ca5c659de79a4b6c05123d87ac5fd31f95bd37eff0b237a924d5c1371 -0x6dd31cad14f812b8bee78e4330704c96fce1e596984082f9114ffccb4257a04b -0x851b97dfbeddb7f0cc5c268948b54ea1c068bd0a77572af9c3850de419fa6c37 -0xe748dc3de9ed18469c40a25f963dddf52a5f777845f888bcbccecf2f22907647 -0xe926bcf139b543d64212bdf057f2ed015c8d3c9cca61219ef2a7bcf51cd393fa -0xfc4e2afec4e89ce700a90edf61af6e876c70c11668e4aee6a3c12ca929cbe1e3 -0x2d2d02112eadb9f28f05369a6f27580a8eb28ccb03f7373f15f2d7f628a962e7 -0xe2f66e903b012e4d4999bc844d5a21628194b991a7ae2ffd378345a7d5fb4c0a -0x5905d8d8ebb6fafc8c57be8d03e64ce909ffc69f1f3026f74f3d1000681005ad -0xeecc0badf5e225b0df834fb4319855ad5c3023f7d77b25f79b60526391418ee5 -0x5b7fcbb90b444e96c7ef06674bf90fba5d675cf1cc25b64cdd8f6462c504d538 -0xdf15ca23d6ffbf4e6d0bdaf95214498908e611f69ea619054cd4c1a87c5f1550 -0x319b19413684ae8c68d08ed802210fa4d4c0f07a9410a6f6f5681fca4169f96e -0x55d0271b4bc9a49d0b2adc64ddb5d319e67b16f33cc6120c6fed845acd0e24a7 -0xb9032df3cbf377e0f455646c2b094bea96054c40111e6209cb0fc5d3f7060544 -0x18171f1476f69d7f3b7b69ad0ed3e522668c0aaaf7ee5108ad077b0d5e678cf1 -0xc0da4abc8d2964c848917b167952fced501dcbc4b5c0611b5a4f93b7986849d1 -0xf6f49f207963c99de44f1453d719b6cfb2c50d06c4af352791ee868590f4b4de -0x3952798f3f7be1b6c9360196d05b8204939a9d410e83c7b0939102326e3c22e9 -0x1f0ffd5b21518d2437fac571b7790e5f21bd25b7bfd3e59e5603a7f08cc7bb02 -0x432706d3cc681d35bb0b69a400b7fba4284346663fe3eb56d26fea65fecebdb0 -0xb8c0f93aabc353535327984629bed2bac35a37c1a5712be7b319fe12de578105 -0x3078f34bb1d0a9497f9ec9d58e5b32efc3ff5f8ccbe0e540f31248a677ac78bc -0x89d62d363aa9820ffbcf1451bf0f2608ffb25fbdc8b987f0db3d62774d08e31f -0x49800d0f7c04b46b7dc01e721988b919f769a084bf66debf77cf61bf722da40e -0xd2838c71d9c1d39993d60838d77641053b7c118d509f18c6ebe913c9c454e49b -0x86075f96ea42c556a17bf6dd67b79087ec5de36efb84629f119ef34d0da1f5eb -0xebb265af355afe7020321603557c667b787f7275206b92aea5c5c7dd03412368 -0x0bb18d29555e9ea6cf99ab4c34deb55d68f8e873adad009b250dae37f23844b6 -0xa6ebe6b6eea2f4d05307634b7454f7b61f9e087e2a87cf9996cabdb9727ad96a -0x0105824f3cb3a3d070891a999e8e64454d8324e4f25cb9ca42145652925d9a78 -0x93c460abe6adf27da5aa13c48cd5799b6ac47281349d26a2c930c033f75d3064 -0x1170d53d8df5a62d2fc176eecba6732c5e203679501fad6f43f348241b067935 -0xd2b32e729909fc8735a9d30982af862902e616a8948f4d7a866228078b28e088 -0xfece2445d024d60edbc6faa6c1a78cefa530b892b42ba4df4224c07cdb6b357e -0x2fc84ec2c55accbad077058054cdab1c3aa854cd78e63ab036f193d044f62281 -0xcfd9f90bdc1144b1a2570c2974bc7e73e00ae30dee029de0fd76dc2810185845 -0x8bbb192e77d81affc6a8042db175ed69ef2c3faf5aabab72ddbbaf4aa7588bd6 -0x87bd4639e09aed670eafbd23590cc9d2da943a759ba67d81df10a157818095a1 -0x9856b103a13b01162d085f3220cf7c863e7fc143f5404b9c8092c32757a5de94 -0xb23e237e9826d6073f98fffc7a03c4f233701e770e1da26480d2ce73143d9655 -0xc2a49a20af0b126f391f95faab22d94c4ee45bd6c0cb05eece6ba3afb266b47b -0xa016e87e6edb07f38e36d16cf961a81111bb8271fea919443bdf2c198a7ff1dd -0x498cc0fb414a619486002316ca0e97644becfcb37ede4ac9218747faf82d02ab -0x50059dd60839b03d39818983f1596980adaf62d6639be1791f608f584f535f11 -0x2248da4ee350b3ec722392453fd19c5c762596a7e626c698985542dd121eb030 -0x2d87fd5168a4d9b18acef6ddc185ac42aa1d980b162f1a3266e13ed928a853d9 -0x71838ceed631328a114cf9d7d63f744d7759c080a56d89f62d1fd19dd8ca9752 -0xc144cc7fa4244a6b22515023ea598bddb1c9f42503e95c0cffe296dd85247243 -0x38c2ad7da52812f014b770d6b5c5580f3fdc91934cd4dd64ca2585807d513c76 -0x8de0392d1e805e3246033fad2637033ddb2cab846bd840e96ff93aa7250bb8a4 -0x8775b1799d55500cb89665a042f3378a97e94e56d74792748a610d72a44e746f -0x924112f9d3c08ae254a338a1267c85d02d7e25950f1826e0bffe676501dfc2af -0xc3cb69909a24b7beddf08ce75cd1e1b12718f27dc4ad8079139ed45b3a66f390 -0x526ea2a4720f44339ac6c266d07dd7b683ea6951849cc408ef6994c0311414ad -0x63fa974693181c959caba82cb09102f836e4dddd14c28dcf187bcbe13802a9f5 -0x03c84cd8486f7169c5d25aa742864dda5d150ff58b206beba738ac3b23cecc27 -0xbb3e27c14b4327ecc7cf7ed205638705240af2845aa1d481bebe54fe5b50a45d -0xa45f4f0b6016b281e19b38f5c007f48ba9626a721961471f122bd14336bc38ee -0xc3d1a3ed1f5dbd7ff77596dfd4860257dfab608bba2091eefd596e1816746baa -0x321c77e18ba88c28bba41cd314eb7823d5eb1f787c05fcc8f6425897d9ea8477 -0x9b66cd653a63732ef9bf4f2a5d0454a4f66a52b5b5ac8c48732eb4d8fbb36133 -0x491a270c25ae63ada5512824b08a82095824ab56eb020ce380b62af93d09ee29 -0xb3a3c1fc3af0ec9a1bca6bb1f7a41711fb1503e60c99fe2eaad5171f27516fdc -0x963398d89e4ec5cc04b36b64e64ae2db00500f6d19e501fb8d984a97a5e3e167 -0xd0a319239ef1f135fa635c8fad3b1bee78bbde51f1c57bdede0e537d211793d0 -0xe6cdf9f827c64c13e356ce4a833c9ba065daae20e1210f933f2f3c3de6aa481e -0x0e4d3aa74d791af1dc5c29069cf5c402965fbde12c52f51922ef2a1601cfe37f -0xa338bcc588d5f929b765aebd0087e19ad1bb2045430866fb707de9f18b75d35e -0x434189b1006578a1249953d1d741ff03ae2c5b302e2ee0e013f68cf4e6f9d3c1 -0x209b0b1d3f89b55e7e77c1a580144c34358b85be9550e6bdbdfa807d69a8d76e -0x57eabc6488f36ce1b0199b5249881e1cd7876f18d46a13a5c621ba40d33a9bf9 -0x168eef87b965f12247c07588bb2d3070200a8f43e2fc2bfa2cb90dbf44077f47 -0x54e57055d3e4b15cb647b4707b5ee9de57a66b57d60ac75af894f48daca243c4 -0x8effff37c5e5688596009769d95dcab977895ae8b1f76b9df3dedd3be9eb3e19 -0x857fe4f92db83e25307f6a2b1f5133369299bfae461620e3e8ab8c36e0f97332 -0xe2426d6af79be348bf86b03807b5def815978225cdd87397c25b3e0e971ccde9 -0x55c5d010069f217a52459726711739339f2a00c017a25ba56679763024b92cd4 -0xded9c2a32e1786187d50862378f6fa2cff9fe6686d5eeb7200703a6f85220828 -0xa46b92de13757b384ef688dd29ddcbc53f2e7fa041607c8e2b03a28223f2348c -0x33168a23fb9140eb6d62d88359335b26971a80ca242b79ac2e4ff2340c8cdf37 -0xde38ca2b51397813fc6248e8ae57a5ae2530f5dbe09a142e56818c05ab17b397 -0x6f0630ccf64740a22da6748a72ea338bc05d422a9358af96742399f1a32f55ae -0xef1abbf8c68440be3f81a43edf74f5124ae87ae583ef0bde014dc05c7af4418f -0x8d27f7427895711b1ef4c9ac067494169769b26610187ef8b7778af4a46d8a3b -0x5f80b816869d41aefd4bd15cedb4198665797c50fada14e6093e0c3008bcbe0c -0xb16afe81de8e26f177bb796e1c9d814e6272157bd6123006f71dfd380f98e3cd -0x2c56d5c448928948b44b53fec775e169de46fee5a231e8cc45aa518bc6e6e435 -0x8a5576a228760e5e586fea797d1577de19c13c5ea19fdceebb608b31a13886b8 -0xc0b77496bc828b925689413fc2b8b6b7b7c9211df7c18d60b216a3edf3d05798 -0x503683673adc4ec88739c08c30c50f2225fa60965ca3fbf83d7f148e08786471 -0x6916ad523c25238e59f14eeb3f124a16c369b769e1da8300b771fed58b6976f6 -0x114b7804c395c5d93a56a79fc42ce53472d4e485b1769307b7d1bb824a88eb69 -0xcec5344a7782811b497d9b35738452adbba1742a398e72ce6e553d31a537ceef -0x14510a74192f98b04643a59b5252c5826be2a5716ab2b57554d322feeef274a8 -0x1bd5c79a628e07d7011914ee5bde8b212ea6ff493c6d88674ef02a04288e4f99 -0x6b865486d5d53cabfa05cd914a5bc66c70f2e021fca28b0a3fe5c32758c03cbb -0x5c76d552f280f0b59ad7a0e6693e46b81568a3abfe8f930cefd84f743445affc -0xa13e78045ae6654c94533bfad66a9c4639312d9a26d1b3cf98a2a71c912d5650 -0x4f74587ca144b7ca7114682700b45682d340a137adb8a5db661b0c126012c91e -0x8b4805b1e8bb27b29e69b00952539043e9c0ce71be5ae66c0a683eb7e1ab3f64 -0xfa4f5ec62433550bed0686efb473834ee1097755540dcd04501703b5bb537a2c -0xe9ace12e1673c1215310474d7a4105beca8005c32aee973c5efbc1d5cfa82529 -0xebb8636553ab197dd43f10d4e4ab08011695142c9ed3d8fa49d9695b4b7cd19d -0x5e2fbd0d7b8d7f6927c4d03f9195bbab86ae1d43c5beaed3edb9f6feedd1536c -0xb6a7577b2ff268182b9b5beb640f26f2ae10dbcef51432cccfe32b4b85d2c239 -0xfa00c818fee050d4d4fa34d0aa585bf035c7513ab04167bc73e154f8485841f6 -0x38af486ac6e97c3e0b61e3836f808ac934ae4eb950d934489f2d660caadfe932 -0x2a30e844b719adbf8d4d390fe55a3bffd6861168b802c93f7a6632397b00b60b -0xb096d3f2f6098d3a29582495ea9ea108028363398baaf1bf22517df94466a631 -0x8acb6786674eb21022681a7bc4742fa2f49c26e98d9a8ab9f81f328971d00ae3 -0x9bd46fbad99713210c4d7ecb31df3056cda3cc00da4d34d7fbaa366508cbe76b -0x6ff24221b9248909fc2fe7f7ac4607f5d8cbccabd3100041dcd5df36e962a185 -0xdf031a4647c6043fbb5d47b948d2961702adfa3f539392c39ef80fa6043b9845 -0x0a4e5c438e6ab49694ca3c18b9b0cfb73f40847d1191b2b5c51c1acf7e278cc6 -0x912bee802be25a79789b543e7de0f3068936ee9a7e1400b22ee6555092bc83f7 -0x8ff1ba98744373faa64bace3b69476734ec47e83769e7ca5b1e69e326c0cc62d -0x05bbb508bcacb06a6d544ee853a404f7c6ee3301bdf5042f732c4262f94c05d0 -0x9b98564108e1d329768f9507cb08ae4a3e25fa9293614fdf01bf0ab28c4e917f -0xb3b8426c375fe8095223d3becac1893119b461fc8697d384bebeb5287df5a169 -0xd8f4d8a883f9ad92907b7e94993f216716484a58588aaffb42a446ff7e0722b9 -0xdf5084d4779f83e9965fb9426b904602217819f0c5d2994bdb0ab639da252869 -0x00eb1590001d3f635e859ff0a5c5fd924f86d8337fd59d734a89a8f97de06cd4 -0x6f5687111972dc2a2a3a19f60ef57eabd21f41a4d380ec65bd62a8cca6f9de2e -0xcf4dd697d527eccbff6bd3118fac2a2bcc4729478ffbcf2bb809a2b65cff1392 -0x4ec0610b4b0e19981b7978656e98d65d56c21926eebbb2be88503fdddc7cf06e -0xb96818e2032926197002d87a98e695d9ca7f4d99c95a034a0bdd92daaa58449f -0x3be7f6a4ec36a30f41ac141199525f0d9ae8024d3f8af7aa113850924aba3139 -0xb817e7c105e21f33a7fd5bc1dfcff9fa3719785cf0ac49b801948f0f8f2f5197 -0x9f8017f1384f31f04083e648876ab76424ffa0bff5013d933af396c59968f7a4 -0x85165819490d2a0e6049aa2e2fc609ce08f92b81565c76fa1e82861d869e1051 -0x634a1cb392223b81475fc3974cb9499c6c8f854ae4413faa20e292557e06802b -0xc69b0ff33ad22137fc87cf6c05bf16207f4f876dbaca641dd01f4134df96009f -0x3d752af7c059b947cd42fd79553b87fef2bfe5e73eca7fea14f99e265fb17138 -0xbad603f481f2163d41b2079a799894da7aaab9797f166a6aa035883dc55a12f5 -0x8e2faeb3a382967b9719b12d8010c640653a0326ed9a97c457804930097ce0f9 -0x4e5bf1c6c22a8f3d301b33f574d2331f8408049ab7f521c6e5e085b3d06014e0 -0x0f470c4136746f1da5acf2b5b5ef45aa8d141c0b11d9d14bd6e0620f444389fe -0xd977e5d3a1582c4989d49dd55092c934d53e9fa5869037f03ed48802d0a151c5 -0x63dd248e8a0fe2e84a600e566143426019e0af0898fd48964b5e1ff6a54f2681 -0xd042bbf55e973362483075e3b17342a418b43bd759ebf5f38854cd6ab55b0a86 -0xce9c8856e56e966c4cb00feca5ead94d36219ff01a16a8e2469919a1c862f0a2 -0x5c4a9f0af9985ffb8a22d5cdfd9d6d39e7db7c7ce602fbb882638d21bc15301c -0xe383fd1add82970b90d39b4d33e52ac5f3161319aaee55d41e59cfd00c2530f2 -0xe350f73fd3f61b29f8fd0f6bdd8744305db3698c71f9ef6b243158f61049916d -0x14204257b2c5b844525f0915a232ea32d9935191e8875d4a7dca644facc5fc9a -0x26ef89a882e991d081a45ff16eb44d73e0c0dd6fe5799905906a525dbe32504d -0x86fbda14932bd329df57deab9ed6937f8f30a8d17ace4a7b7f1b7dedbcbb8767 -0xa34f4429b884ee56703df4e1f625a9b27c34ce5abb0ff3b7682d40a1eac52e80 -0x8d2557a08bd9938e5161573193a002a2cdcb796b92f67c919ca0aa5c55b72f0b -0xcedf9e714745745780d8d390b02f89c8c9e32a0a74c63a1011dd5de4214fa015 -0x7244b26ffc1dace6b0863b352f0275657c3164d7e77aa4fd3c662dd5a7d36b0c -0x72d4c9bfcb8a58a4851eec544c318c6de282f5ef1425cb7b9a3a9665a37dc896 -0x249909b087c9a438bb1830049ed980adad6865c0832a8f59261c8d9c57f0b8ac -0x6e78677d1b9a123fef8279ed577eb6a71c6559a7a8c8a3a41c302b843d1b78ba -0x9f4d3fcf3dea6e0521e435158d0ef01e0d62c7d9f4110278b72156e3f8993b9e -0x90956ffdb70deb57f4f8ddcb378bdadba7caca2579a12e41d9bcf9cfbfeee451 -0xf9a919acb14e8ff49787db2dfa255065dd1295bc8d6f85a69d47338abaae1789 -0x232cdb3727747c57ba6febc11242a43976ca4810d19bae070b64b8e5ce1e3f5e -0x2ca2a2636e686c08acb8b02a6e1db67d03e44fdbf2ab9aa450a461e73bc9aed7 -0x53c9ed02c4779ea068c10474c1c311b9d368148dbc39b78d46e839e00843dd95 -0xe85e69c017b2dcf8fd16e42fdfce1426589cedeb9c922079f35747135665def4 -0x9801066549cbc1b579b52b5863c49db2a4a44f3c702b1553e8d64491d90100b4 -0x33059890bfbbef0cc6830ba926a66f1149e2d925fd20d404885f1988a55f1a25 -0x3f727a3d0db0436a78daff473f8b795728b37ebbb42ed98edc4b8855ea2e60a8 -0x138c61c7e82e5df72fc6da466d7121e16874c990f34aac8f659657a44dd9ff43 -0x33f7daea6a18a47e05f02b2f6c5c9ce365d3ed8d2b385a1361c111f791896692 -0xd2a46e430d6677c08cf8a5d47bb30d9318baa679da6b0ebdc00762ee5a76eabd -0xc7c9ac2662e9856430e15737c890d43e0a2da3573043f361c6c711ad6b34b1fe -0xbc30473b67284f3c0a5ff44cbc788e84fb6933000d97ac22fb5eb30813172668 -0x95cf9d6ba6edc03d7c2fd8f9254235de314ea4492f312ecb8477568ee7535282 -0x489eb11090deb328dfc304a8ffcb9e4f23d70ceb3040768d2a76243dc920e4fe -0x4b7f530033c02f32750337bdc79f268b0e43dbd27b3f34a59dc428f2f50fca94 -0x61c264420c38df9a398df79fc19c1837d8f66b798433195c392cbe32ec3f2444 -0xbff8ab28581b0d55dd1bc42c446ec260c0030e99cd10e7ae711eab0f553498c5 -0xd191c079faba60245baf0be27eae56e1273eeff9a9239911c0e88a1d11ea4230 -0x4d181ca91921afc4e05a0a2b1f0c88745c3e7c43b8d568fc259d279745d09ff1 -0x3612d344afa6867703141fbd2be8af8ac985db42484aa63b9ddb48a11f40c406 -0x74543bbc737d9a141f3d1e8f9c791ddef1b3bee58312932aa65a6250e0608f7a -0xd29350cd210be648de87965679ac8c57bde0d6e9584d08a4304e3974e9e8e980 -0x058ce4874dab7554a839cf4e3cbeee5157a6e8f48148c0b477941509b02770da -0xd7c0beddb914481074a06a2e74951ad7bf7611a3fd71f08a63bc9dab90ede015 -0x39ff6fca3e446dc2bafee21f15383731f5d595fbb1ed4d09e930b4f491a52386 -0xda0dd539ac673e0f6f34ce930e4feba163faf826b3951ce2b16ec4a9794a9f52 -0xf156db5a8ee9e83b823448b0de0c9788f764a9efffc7291e17b597b1126d7553 -0xbe5370edf5b697cfd4d155c0755b1bd7d8dc1d2f3e1915b5840ada3478ada533 -0x981a1c83d0cea5e22c729a4a35d6e9d96f544934acadb1fec8047245fe6e56fc -0xa8a57982e181366c33a8830d7259eb722b32357a4a974ac0e0c9d4b139d8553f -0x46f96f6228f56abc27e0ba1be3e773861f83aa21af681027f6286a34819b6553 -0xf11d3e34cc5b91f4e00185a17a8242b5c3e6dfb5aeb8802f26884a9fd380b930 -0x8815594a3956dc2f9b9f9196ccc6414b9d8abbd693c2db6c9610fca85874a708 -0xd924ba597dc2e9c7901c67507fefbd7afd4db4ab43012290b62c61d0267bc094 -0xe2e5a6a5ff6e4a4d4c660393c039a0eb39c022093c30ecd9e62cdd17556d738a -0xdb713af8a9208cf7d603ccbe28350e20e6cea61f1386b041a08dac865c52fe79 -0xf851d6ae2bafd5948e1c0da191920b70420329624bd61417c982afa55bf44b16 -0x7aaf4d32719407ba62ea9350d17b0950b6e160453f029e415085edb86d514641 -0x485b31fd4ad8237896ad0e7df6ebafdc885f790bbf777c6c1487b92ba5b6ae81 -0x4018cb217e8eab3a5d3907c78c17435707f9b584576d7ee0e1cfabe7b3cb34de -0xb3f94ae020a19208b360e316d5677af18d9239251e8ed573e4d252732379e1c1 -0xcd000e015e9768798beeb76aff1cc932af6d1a3b17986af8a34cfb15b30f8e62 -0x72c372e44c552c56030407b743b7d9f6e7c78ad73fc0eb1a34f67cd5a02d9cc5 -0xd61992643bd0c16368cd2fc5b833816733d78239d25b4ec6c3b0fb53d9dd2f4a -0x412ea16b0fa564392d2c6b2a0e69cb26a7c54cb2b87e82ea621e82c99c2d00a2 -0x3d52c62c8bcecfbcba98121c0cc77335dec4ce0f93d82ec90e7edfeefdb8aac7 -0xbbb818eeefeb7a808da1974807492fd3bccc87958a24fcd296368a7b5b418db6 -0xb2bda81b1ede2b417b841c12e286143b14d2ac3bb553498e5d93d60a54c09a1d -0x421f10851fd59f308cb4529c00c0490a22737faae894628d6a40db03cdd4cfcf -0x6d8953fc280833ba7dd596424c5cdf540ea8febb33d321139678cf9f7ab2b555 -0x31b2349b057a30cc18af94b38fd54192c750c9b904df15ba781fd3a922429cd9 -0x92584997e792ae807b0590c54daaf623c537438e8bc5403c429483b85a00c16a -0xe52a585633e85fb924ad273a98ba20769fe8e1da09a3bd4ee81050c5bb046d42 -0x6762ec5fb56ad47dd9677038a9aac0eb9767700e280c7b645766dd027d098613 -0xf8ba7b25d8f9242aa058acf6d367d827bb57a5f58c90bf42691d0ec0bf6a9b32 -0x65020dc7ece90ab38496c8b2dfe6394619bc81c0e9b322b0159621ad29f04777 -0xdefc6de986515decda059fb0e16ec5fd6f2926457798c40dd1b3d30c234b3528 -0x5a85853a7fbef8164be601b2f0532387a925bf921d68b831a7984bc5924c9fb3 -0x881814d96efeb30e631ae5a017b56ef13dddbd059c1b8d4a7032363523768ad3 -0x389979d89e81947d9958c2ef6a1e48895c2b81c743ed0cc27e785bd377e5bd52 -0xf5a9d71641e4eb41f7a5e6c8d79c8a090cc2ed4774828f0d40d0d74241098d19 -0x8bd911c1e3b19a8b89dafb3a58b36d005d2c69638cc3cc5e66e5c20da818697e -0x7d1236b6bf093b1137a61d0c5e380423f52804aa1bfc87daa070c1e21f13a6b9 -0xc6a5d03cd7c6ae1458c18461081e677fbaf82771b10721087aa9aaf46d92a7d2 -0x44bba45e11a0dd5181ad83e7622bb8e2da2e0d65e16013af83c6917024a1c2a0 -0x67a5d2a371455d0e9c28be174da9dec8b3b6df9863f18980488dc9e901a6de34 -0x9834aeadbb79dd83ea32b617b78e5e7b77914556506731f84bc5c64ce71a74fb -0x14b22cdf960219a6a550c8717a1b111775b69ae4be76e4e3db2e1056b3258a41 -0x756c3e43a526668df6e0e99d401b93a66a8c78e530bfa194a7ad6dfd59ca1c83 -0x1e55d58884be7ce2237d258ded0af45f754f78471257015dfacd13c7dfede168 -0x60230c40b8e476ae4d0e064b97e59fe7ca42909cff55481d1edbacd8f7c6f894 -0xa490ba73c4d79ebd0043d54a5eae9954a04d5e294729bbf5d231843c6f3d50a8 -0x3ced4cad163a9bdc0b6753f9649e8cecc4c9c742654bfd068af0e914feb69f62 -0x6cfd8c3d1257071be7ee6bbd35967c261adca0b8fff827d3090b411c1adf71db -0xc3c3853c22b394ef8b3af6b3e51a8abdd4e513661290bd05b6b6f4d5b80c7711 -0xf893e9ca544e50330e4470cf392deaf7ebbbbf2d290ed0041bb3fb95a4dd9432 -0xda3ba17fde7b12f589717955404adfec06a974e390b60079a6b1777b15a453f1 -0x5a2b6bbfcc72966d12c34c335410a5e4b47c55a783d932befd13e70481948bdd -0xb376c3f340c7d823bc0954e4b850ed3abb905002f6d0424d595e5f19aad2f525 -0x140dc98af3a2922da6c0bf3414cbdb5f86ae4d94c9f3c7c7f9292417ac1569ce -0xb784fb4ef1400149d1ab4d6ba6920e53cef2ed26cffa9471505d4ce0f6f6c93c -0x9b306c4cfa1a6f1f8743b3c78d0f71c88646415d5555f0d7899a4c227942cb6d -0x6b51969b6e5429e167d372a6a60c26cfa5c067e1562abd4085ab03f0aceefeb6 -0x4a14fd7837c82c5044f7f44e25f27c881cdb24f9b8de327428d25bc52b8b3895 -0x8bd0809a3fec6e442e5a4a1e087a9cb950bdd8b4cfb834047e53ce080bf2deb2 -0x9ac94d42207f1aa50f2bd407cdbbb4d4991cd6893c75c64a6cc2017dac136347 -0x13eec8095e1a5017564b5bab12548d1bd5771bba6bd159f54993fb2ff3ab9efc -0x17afd9721bfbbce35e4989206c64b4b05c9d7e64839d7891a218a64585ea55bd -0xd54e4c2d58e53df45208c73565165d40e58f2b17b45545d97bd9bec177a642d8 -0xaed803b5ae54e76a95489fcd5e71c0d0179107d19cbaa29eb3a16f99ca1255a7 -0x50d80b584904a7f9d7164715f059638461f525387cccc4bb8a413c603991a26a -0x84481bc714f0471549aec401689a6f3544a2db34dcc673177ecdf2c212c162ed -0x2a95ae9ac749c1f797ecbd3287a55d4690da8d9a7fcf1ea3c6dbe085969e0352 -0xb376a8ac5621c4792e0b664d73d3d554ce10bbda705e95313623e2534396aa69 -0xed5a8447c24a597072308aa785c4228e36d99cdcdb3230956a01467e12933849 -0x3004e6c3b23d72ca1737c975dbc81dc64cc515caab1395f9954412d6dec06986 -0x8ec05ffe050b37481c129e33cc1babbc4c87b943fc5db8d44682684c1c210a88 -0x5525f9ef69f4e1dd5b8ddf0c6c59aba8bca1b1479c5a3a390ddb6ec07600a3eb -0x1519bdeb419089984ea64430c1343e0ecd5e09208e2c2c22a47d0f7ad9e830e4 -0xeda7d8df003063594837528a9c90b1dc7d3c63e320849d59752c1e3b0cdad26c -0x70583205deb803664befcaabd726fa0ac1bccb6b37119c0620605424465610cf -0x8254d16fa03213dfb1429d698f6b8f54e8f716aeca3936a594d7f8491a74e16c -0xaad0da620927a9b2f693cf5428d9c75df6f1ac4d66fdeb4b2b46e9dc0095ad02 -0x6018a3d434347896318993955dfb25c8745a0fc28ddba3ada8208f7b1f511a7b -0x6e5e2155f3543f3e58777b1e8ea9744c6355d6632fbd638b4c13ec587a5f5e8e -0xd50eaa672dd9d24df67123bb460beaa17472a3ec010356fa6dd4dc4c767c9719 -0xf35e4da4502a1f092d69b882ade4793178dfb397f7eeb2dda44ff34a2f02a80c -0xa6894ea3a40648e720fee7fedf5c8b99f0fb017f4a4832b3c445928f1e2ce939 -0xf1ecc3cb50517300e875c429f8ab6d372594aba059948e2fb1ac9c5b16741d10 -0xb97407c16daea1217ef0e0f2c6948eeef1a455d46071ee7d47463dfa0777561e -0x8310f0625b4b08b0ed98490e5a3707061ede780c43e769ba8d3063ad60c3274b -0xc62b29b683b0b7a884cfd5233b71ff3ce47b9e33f9c5f5635065a89342a83de9 -0xae37e1fbd1dc9fc5c5f9c035b9f55ca9c488e01bb92967c902ff18aaddd858a3 -0xc326584b0d70fb59fd6b0597ea0fbb6d156d74ebf7c17f96aa29247b0a661050 -0x0b8a80472114e7ec80d1cae5c2d0e86b8bfca01b0cdb1faab166459e1082068e -0xd26f68d358554ca43f5faed899eb89be40d714328d0f515d2f9a1f44832e62b7 -0x8c203bb6a4cd73e3b2fa82fef88b2503b176903ea3bc4fd6c0a0c0b236275d8c -0xab73c34e71011e834ab378873e5823684965b1217e32297866274f28cfbca3ac -0x77eb643fd088c86eb3392710a8d03f65c6b5519dda1f3e601fe750722b9900a3 -0xd899db4976a44ffd1ac17ceecf94dad0df1b46c7db40cf38949e69b057b64ba2 -0xadfd4360b74ac63813c7b2da7cbd6981250c7df09897f8f4be5bb2cadd2a914d -0x52e0ba97f200f970c867c2ccb03b4788d5a4f86beaf7e5a7a60dc6a0f888d18d -0xccebc9f331d035cf344530f0647a02e67591b7ea46b427e33fb0cefb9d02f211 -0x7bfa4c3b96c1f185e56f7a5332565448ad9382708151029bbd4171c531fa3d33 -0x54e6068301032aa0182537dead6b5c3b8bb392026913c952cc1662c6916e3d38 -0x0888ef56a0fb839c74efc990636cf17bc3d8a2ae57d169d29c9a3070e895942e -0x364c54587c680f6c67309a5cef1dd562cd4b7fee47ce206bf42fe18dd3dbad13 -0xf7274f6502ca8b102faa43201852275eaf5273f1b906279dd5bfa1adc53037ac -0xc695b3b04cbef7b33337b7d811837d4c430ceecf162746c2b699343e5addffe4 -0x944f835ce5d245e906b05b7a7f6ac5e56067025af0f58ad12801f1f59e266ba9 -0xccb4a4c05ada7efbbc8d312361ed439d91d3585d6bdd7057f25fae2d96a0ba33 -0xb73af4f4d42a601b832c27b9a8377565483ac266529d02bd8713f0dcade4c50a -0x6900e58241bf1ff10c1c69d97f425b58e64ef51100e171e882f4d87d146e34f6 -0x7b8e780c0f4f8e4266f2fa6619b1b2ea259de7674dc9644c7beab05300d386fe -0x9421dd59cc2fe9de801d1fe8afce04a492f35cdb1864d39740259ee292028e52 -0x8d2360af93df542f03692f69246f1ff9704d0dcd98a48da995cb9f879a409616 -0x813f7fd80198b0fa50c3d0f72347290a412d4926c9ada782e71c70ba601df83c -0x9fede47ce24de0f9b0e1dd81a0d03e6c74a042ff7edc8be2f04fee04dca5ce4a -0x3931f19b99f3158ff5dc91377daff0964323b53b7cec4d02a012271a55b82426 -0x3354c49ee244156e7f8fa0896612ff1957aeda6030d77035fe92d9867d37153a -0xacf55a8522448503bee6e68672bf0331a1acfb277270346bdb396621a23a5f2a -0x5841bfe8a9a6c3ccfb87e535b6ba724603f7af9e562033e8795741699fb85dc4 -0xcbe6e9be847030155d02710a1329409f2a2ed3b9f2315d7770c5c4dfefb50a6c -0x504e1fbc264bba68870294d7d0f6b6ec4d61e1a6504883b9b3b60a375b500f32 -0x8fecabd3e41acdda3ff80542978798b6917c8c1516da57ac9c04896089af62ec -0xa85d240e943aad503883be180c671501cdf52784c11e50dc391c4919e907f6e4 -0x12d2f245d35e3a3e4afc47d4ba8eab60a89f6bd63e1e51c9fa6cd9cdd9849ed4 -0x28a341d751e58471516d8147b22a95149956546ba30aa14448c95069f1a59c6d -0x573a1330d7c732ba7331da592070fcffeeaae8db840a10fadf529a9ce541b132 -0x553ffc6dc4c707f97d1920a1c5cf98bdbac4cbcdf18fae95ecd609d85f1832a9 -0xf1c73ec18844e681b5c31742c7e0871937fc9e5a6d55c718c1a53fa52629248b -0x228bce997f724c400c7f78d32724adef9c821b14eed09c109284a2eeb3153d2c -0x22c15be877a100195bbe8bbd61b9d821a4cfcb7e80bbc1d49ec2878c19b2e058 -0x2364f03f8c21f2ff70720b817e0c3f96263319ff821f420ec01c8fb679131e03 -0x53140ec272c3641bcecb20658f0880241de868d705933dc7dceb75d0f365196f -0x4facde99c7b772531a7c0bbd30e9f121b0bd60c741b2e643b70dc18ada835750 -0x0c2be5ffd389967713455a6c0e1b3596ccbe206c9bd2cbc9fb1c82c2026e3a95 -0x314113e7214059cf47affab19d786ca6adf8edaac7df5d0f8079313d037c642c -0x3dda27c1db1c9ba8f05412cc62fcd70498b1c5f517d6b36de539d4258cae0763 -0xa4cc10e2852ac3a5fcd7de993337000cd71b713aa0df7ef57576e26fbdccaadb -0x84baefd74ae234c8b65df5e0da3921f1e11105f3d0a0cf3e93756523afd4dd08 -0x42daf23470017601e6d69beaca182c94c10fd4e9692ca1ee0cc06ccdee925177 -0x5d4aa298e6a3355e1a853ac41396124ccd226198a466590700ba2779a2cd73af -0xd8ae2853bf28c8d1a25138be9d693e22c61fefa8753c836fb662a78a219c321c -0x242879744b43d63334aa59bf109798977dc77036f23fdeba45eb0efee6bcf202 -0xa8934532eb303ac6a2a767fcdc51a0fa85318d2da7e19cd6d136d0e08e85a6db -0x4be370322834bf9facfad0d1c557ef01cd1e3e9b88c14a61101a0b87bc8ab2af -0x836a9bde30b8817ca87f6b1bc92b4df6887506a3e1c07169786cd3155fead2c5 -0x5bf861b737d1204994bf74b21ed7670f7ab072610e6d1812ce806be5b89c5e58 -0x504a318fb6f554f910e17b8542de99fcb6637ed660f3143ddcfb1d08a19471da -0x6acbe52c7807f5f9159a7711ead9f8bc01e235806fa389455136b8307eb54f68 -0x292b0ad76d3a2c6ca7593735413ba4fb8614eb1c977c76a89e2b3a6ee117e743 -0x169ab6718c214b6b502c712ab1ac39aa79652e23a335fb15d45b7471c9d124c4 -0xc1439da05317bbeb6200dd397ff7fb3eb60c7b7a1411db3cc14f1581af0ef1f0 -0x291730a2aee7141040ec4a3d0f8794c49cdf2ed0bb65ea570714de71acf32da3 -0x7a334bfc127c37fc061ebdddfc5c11d33c12feacd9bc328525c1b1c93c86fc81 -0x597b2d24f9891103512a9c3a3de95a3977dac0015f5c847b8a46948ba4088e1f -0xacfb9ead2e5cda8147a928478e5ba8a3b37e873cba6d7937227c5a5fcc02c69b -0x9748b9d3e6a8f75df30585f2557d53e21a1228c4f76d23a856cfcdb18d53eac6 -0x3ac5b9f4a991587a79057c2dead958e45ba56941659f5baf02c827564184af34 -0x31b9c2081d394732a2a46d915f33fd3a7ecbdc0288e069fccc5bb22c219abc52 -0x45797a3a503521995aefb58970bdeb59fa5f228b097aeba5f361710e321b17b1 -0xdc6b41c287bbb5b93ad7f6684f26e544841c9753e2bd0e3dc1b76c16ceb94d9b -0xeb609ea5b43bda2f53061dd466b3099c279af16cd33bb9a427734eb6da1bdef6 -0xe61045fdcd8697af886772643c5f13329a03282eb0a81cb73b44adaab4cfbd9f -0x2013a5d6f634a3f75f55de7ed6bbc3d30686b609f50856afbb57250394a67f17 -0x32e7a9303f82230e3c34df40cc34a17bfef8a58ea510e53ec7bee98852e2e5b7 -0xd54c2a9904d97a37a76f933bce713e0b3e752f1649f0c83d154da35bda404c5a -0x33af31815b4ae9534e6a428b4ffa8f5aac3f3c74f5573bd7fe546d61d7969c78 -0xef08616ea20495ce846d8228bc3dae3fc83e811a7350a9f66110029e41fdcc59 -0x1c9d3608ff3d1248d4435a09a4042d6d7f1fe093ae91ee29369240de2eaf42d5 -0x54daef4374af7af6298bc3710a294fa2f30f6e4f78afaeef80ba137e7dacaf65 -0xe64531700f650df98a54f16694a08c75bf191072c41849d10ae92a267d4dfc40 -0x028ca02763da52fd91087e4835c5dfb347a8774cc138e682f91a45f32c3e4f1e -0x67ec39167ba38836c47e3a5274f6de928ba5fb199486c5f3c5470c1cb768f9d7 -0xa49256dcdf897c3a754476aa73d8e5a04bab7e719b49c21bb16a94f869a4757b -0xd48fb6233d7480c7ec95c45ade6819743884c8cb1e095f9419c6ca4666261bd1 -0xfd1e7c80fd28ee5c8cb685f80ac1c175909292590ca2f5f882dd1eb942e53414 -0xcfc21f5676bed3075d86305b7ba8970f132b8ef2548b8a1a91d72a552ebbf95c -0x66e1bd0befe70dc054319e490ee422059467de9705cb12e97db325c575a3baea -0x65de3232926bd9d5f07cee0bbfd9698a724feca7835999536be35ee150eea04e -0x99cc43c0754ded16df6f0966a7d90d34d7a2b2f5d87ac1971a45e467ad1efc37 -0x5d69b321bf90ac2d7bd32984d5c588b0ffa8c56e7c8d5ef053e55c8255cdb677 -0x7d1fd0a502fb3e1f37d01bcafbf92d822b8ba0a20e76aca6799227ef2c511c5b -0xd80276d8643eeeedaad9a7a297e5731e35afe7a09b7790cbbb659bcb9cdaacc4 -0x8dbf762c696b1db7b7ab15b37b76ed42ae519876fd4d4f3bf285a650dd2fa520 -0x6da68e7b370918ac60f34cc2869b518480138f2f62adbf98babf58780fdb8cb7 -0x43e5cdc69dbe3163ffbe8cb9c79759a86ebbc990f8567dfcebaa7cc67cdcb209 -0x60df4f79e1e0899be52bc7ab11cc51b69a3f6c52fc56855a0a594243830723ac -0xb8df85c196d4e550ce52835506782fc50f87d4e45ef26988faf8b1e838ff434b -0x7cda9c394532b713b78b85c3f85be1cb84bc1018c46c619f1a55fff15928e2d8 -0xbb252a34e0c6f528e2b9a3268244f5ff707d8fe2bd12d6ea6197a4af59d61614 -0x10d4201787f4818b1bae19929ef753e2ca8ca341834eb98f067bb4cb5637e656 -0x57adfa06d07d8af9c62804f78bb329897d1b4f142314a6d13bf300384de897a6 -0xede63cf8d223f76d83646c4d4ca9d823e8e739ea9aa61820308a19292c3b0cc4 -0xa1da84a61d6cda5244da84c2fa056e42811fd57a2011227880a471e79abc32e0 -0x2208e20dc2a50ce7c8884728085782c4b1344ce227236011b9bc54830b805858 -0x7213ca351a2861292cae53497bfc891c5e9ab010fae5fe9a234fdf61b981cdc5 -0x59e441ee96b523307978c6b61554ec85b5a3f777b7372f4fc985c7fbbe7c9d93 -0x78868856e25994cca79446e6b4a24345d633b48fe868cde1a9ebcb79d2ccf18b -0x2021f67d9370cb93214978f51259c4a54ec16635faa70474450bf1d8473dfc5a -0x316e3691a9ce402575b6d763c528e37cd89ca1eb7a2449911b855c100a31680a -0x2533d6fb45f53dbe9751c45b83ee29e5de0adcaaeeaeac25b4850f7ac74f7804 -0x2053528cb9e343730a4694484e2e94bd94cd1d01e3c6a60059f153961d528301 -0x494e0b38326f7e27bf721dc53f177274ce0e64b7fbc48798ba1a96aabb1ca12c -0x0401bbf05d62d20de960c84fb6cd5b2fa2d25f1a2bffa3f9c580567d9d4be1f1 -0x7f813735b556a064c6d6b2099f5a1818fd12bffd343a34bf54ac651a6ee8c9dc -0x37216d508177fdbe264ae360c156cb107bf169d50b99df4797b3370dfccd48d3 -0xff409a5e08c921005615e4e4b092b3d35cf9cabd5ad8c70526198af63b38abf3 -0xe61e7edcca001ee9b42893cc4136c569c10fb2e0def0ca6b6022d6b9ec5cecca -0xf7985521bdea3c36ffb547c7265e4e4fc374facb38f8ed71f2d3397079bd3d85 -0xf6e202e593d52daf2c9ab5f54028fb8aae5880ef698d906d1b690f75fb33fe5a -0x301b101a2fc2becdfbf1c73172b998a43025ffb3f93ece2167fdf2753cf6b305 -0xceb10568cc2b34927833e4d3daca74a48b4beca4d7d3ea87ad6b446d9c2f9fa9 -0xca235c7242b76391a3e3863642486719393c06b47d6d1e59c2be023efb8a0b1c -0x75e67f7f799286680f317d7c6e446c7ab9a48bd428dd29990d72a86565f83cde -0x644118e96439893b6207843f80ce21cd5d78400008d0fc79b56b9e9832d85a3d -0x674436946d2e52fe6009584f758e351a29372a4aa0a639514f7c81f8919f48c9 -0x266f616c61c01b177fbf79a441a10c5ceea37e43ddc3e32965af49caa19b9ba6 -0xe9dce67225a0c363d65a45549a004a12457127dfea3b5aecedadccd89f5158ca -0xbbcb340c83b7b8d18ff1e6d4748ad95f356ecb3ff7381ebf2ad1cc49b80aa1dd -0xa4b2168fbf796b3c38f6be826e72b1ca6aa49bd1683f4c42be9e87c66858057c -0xa8eb29c4dbd6aa23cc24f9903998f46fb948e800dd2a9e1dfa1c88e86eda62d5 -0x6073c65d642ee868b7329c39d1deb1cf146f8e9aa217e8950ccc6d8835b05f8b -0x94bbd05f23b2f6696e485765af60fd097c7fc23be8c68a02c44d146207db96c7 -0x2fda69d7111106959cff24067d0f42ce5a34cf90498b7d974dd4f96320d6e8c6 -0x2268e5bb5dfed07c97b5eb3d52c3605e27d753e71086528522050b2216bed77f -0xac9ef44434c0e88cec01e9159e8f0a49bfcd273ccc44bd3348983e4b5b7b7deb -0xc616e75c97f5bee8ff381d3e0d2d35d520fe2ed40c7882b555669c7f112fe5a1 -0x67783070400b798d33975fad3013ee75cfe75d92c3c35468cf636008002b1ea9 -0x48f8473d20467823befb8d2e2d891979c9f3435e6400a266f2772a7e29f94985 -0x2ed00341bac18360ab6410c85fc3a0a3d012a69cd37724e290c9b4126f46a739 -0x7425b4143b3e6f8138194bc672af36b20dcefd63bc157be0199bea848d4079d8 -0x2c1d445e41dcb33095fe72e1f03109405655236125d017a1f9fdb926925b6d2e -0x2ac6d3713a9ef9feeb1268411d596fb83b1a87908255ee83d3cc7cc311772e62 -0x4a9683d9b12a2507551065c69dcb5fc8563456ff62471bab4ea10f4a72ebeaa6 -0xde68c9f29d6d3bd93df7f7de1dceeb47488db0c044af6d6cf71f80ae097ecafc -0x1daee90690a6371a789e3905992cf63e628bc98047b8e461b307f01acf024643 -0xa469bca89f2bb713cad61002085e1db77a1db8a2514e3000af1b01874c34317e -0x01836ef6b41f00a594f45dab0df50f800db4537a107f8a161a472d5af0701ab7 -0x3b578371e54b9fcb40d3b6e99a7501279ca57f922bc3a9ec55bc35bda9ca9ef4 -0x6d153101c23f609c6a61a23f9ead779e8f1f2b94b155c02898dd0853e86b81d4 -0x261ce56dbd8d2741b18495ff3da6873970005a0b07be927a22ad2cbe78383192 -0x41099658b78ae544b0208a77bc3f39f883337b53e16f541933ef146282081c54 -0x2c8962c978c197e131d739a8d884b51d6e4de480073a53fea050a18424113e72 -0x3c134bda83e48d8de1933a37d3f370d9f823de73df59081fdfe0422a34c74a97 -0x561fd261ab23abe35ff275607e56ea9c709f7c3c2c28332c194837ff25b48654 -0x5b155f755ee0668d4cb6993043acb269bb74d7ff492cdfff0b1ea450a331b7c7 -0x1f92095f364ee322a8abf7635b95927da7eae4714f15b60fa293de850a84f90a -0x164a5c32d45c894acdd733428cbb63788e72d34b081fbf2b2779ca21b4709756 -0x86bf802d1050c060eb31c8ae893fa30b0d85ff77c76196a68ba05d0edb514661 -0x322825e3270ac46dc8632c251ecf816de72567b6b76185ff968d34012af07f67 -0x801a64e380a64f7c9956b975d69e725f6142334510937797be76bb21a8436fda -0x3e11bb7dfe17520553e7f3af5c422754519b1df5b9760cde9c092d5c7146dee7 -0x0b04368d5b14d898d6b370ac6bf84a30fbac96ee5eb20f771114ed9d4aadee27 -0xbbab36c514a294f9f5f5c1a4817f447f36cf61c8f8bc28adc7edd0cc157b48a7 -0xf3426c10a098ed16ebe7d4be816cf7c1ee102ae1d4dd64ff18774621e844e91a -0xa4d0a97d725e27d47c8c68e60d38e78f3eb704ec687a7a67e4845e7c634a12e9 -0x11c17fde9a318c4d80efd2c12516f2faf8fd46af9fe142bffc37ce73fe8a0436 -0xa87866efd4b084a4eaeee1e36eb0a130c8663f05df775b002a556884121da64d -0xdaaa853c4c6d106fac83e9e4700aa10cfe6160126e6a7c1f512790424861c44c -0x9c9f61a590ea7d09f73a8a075ec354c671dbb3d19a4813e509ed06e8f54d7248 -0x1b6ebf505031e08a657c07475b5f6cdd0a85a7e35724761419210ba243b2c866 -0x23f3ec898c19e4e9a39ce12f988de20d5d4a235f933b65fda08eb7abb1046b90 -0xaa9470c7b8704a24841e04c802d6880de4dfb143e3d77e9992e63e4ce53b02e4 -0x0fabf74e6bca77d1be26c84b038d021a0e9054f42fc86c705206204056be8085 -0x5e3ae9c1d39570ca76ff4ed7d4211e7cab3bc4f30d18658f0f671bddd7bda99d -0x2b60c05bd274d3d4e58238189ba22639ee64d17720523e9fb6b07bb88f4bc871 -0x7ad90db00648306ccafbb5de17e448ed418e33d6a866b05795b5835e355638f2 -0x3181e93c185e92e5d7a5a6339cb7b977a718435bd441286b3665d1229f73b937 -0xa1dcbafdda79bacd5cb647fcbc6669cd4358b7c5264c332659b3a94e1e6b1d11 -0x69d46726ff66689dd5fba203c8d405dbec71f2bd4eb75bc2bcaf67d775883fa3 -0x4270a8c7c0e404d80a3492a16e788f8b9fa3dfe21ab6469dd3083e52cdc76394 -0x8dc793ec67cbdc45cd08929d45955bc6d79c40ca4c90c3f4a12b5e7e2c1886e9 -0x3391c852a350008cdf23be6a5793741b668bc3abc2a6b696966398736c4bacea -0x63561c1463b3e05d034b80523e2009a9ea54907bf60100a85b968528506a11ad -0x451dd46c1aaca5085e7f7415493ac11ae243444e077d3cd8866efa3bfacd260d -0x58bca5cc0dc92f824a42e5ef10fa7475ee83020f94f9d33a10da6e47811a0708 -0x6ee8b9548252282ad828eb8db18cd0f522a10f45ce83e10eefd4557de07dd1bd -0x0d83d054db449cea6c39cd93afa9a427940718fdf749323ec546f448e9d1525d -0x5b9cd39f11485ecf739b09b7bc71ad3b3bcb5e70b92147474a4f785ed0adef58 -0x6d1c96e2cb7e7197d9d68a5d76742d7372228c04fb277761dba57ec41f6ad960 -0x2b850060204ecd8155a4939fb66b4ea595ef904da86d70474c7bbc1a67c3c114 -0x166134d1f1e938154527107bb579c76fa69a6308a50d9f31a4e5416bde249929 -0x4d65d79258b09f519059b64cf6e911b07ebc420b934a4711be9e981996ea916e -0xfe7e892c410c1fd5fda923e248e337972627f1d22e497e4d5af3a4ff49f0aafb -0xafbb8377e9d404167d139b61ed36155782f8e07cb371650f81f4b649465b30da -0x7fbf57707469f7749ed0a989d1445558b0cc9d00fe0b332104c4ec7ee35e9d1b -0x8dcebda3cf8c2c0a03d5a1bb69aea18e3ee413adbe271c853a5f54b5f8891de2 -0x8e98db1c59053cd0c414108cc46f6f89537c19ff474b8d9ca25dfef259f2fad3 -0x4f1e3753d1f1a354ba53202e601395414bc49755b4698a5827a9e3dbcf9d39c1 -0x71e62b123e58397f5f2409396a35e792f7ca9bb0866adbb3eafa6f2152e13ef6 -0x43877a421fdd08007c8ae60a9d3e4fb98e448ab5797bf39c62aba816f7a85353 -0x9a07a4cda290793767c3a0f15125e5c681c9ff24b15bc88eb6c0063f367d31c3 -0x422759d6be3b0ebdf6ca2ec5fee9f3fb547239d073c2a8a3c6357313c25f4838 -0x420f6bf6592f4f8a9e41eee8a87dae7a5c463d83942351a041aebc7ecff91647 -0x3c35ef5d7fc3e229f5706214dd191558383c83193d87156f4cfb5e02aceb141d -0x7c4cf645dd880b59fb1346231704b5549dba7baac774e07ece672eade77b0466 -0x09138a00678254fe2819bb574ffd457e54880fe45642df77480a17331a70bffb -0x35b74e0124be13447501061907ea1d119006b0bb9deed76f33dacb4f77310a94 -0xf4668840f2812f95977f069c3f504626155ba05d0e769d386c5365656d4d1be7 -0xafb0e9a36b1d8698550e1338c919991e13c293e6bed34a783ec0525d3415dc48 -0x0a90067db8299f419563957bd7ffd845edfd2014f1d145c1320b321f5477f43f -0x4816e4813facf76ef625dbc630deff2ed57396dbd7debcebfc495ea17df1b404 -0x9accf1d7f9b695003103746ff2b19b2cc4d53f75e8292e949ab26d3f062c5caa -0x3616892f6c954c78d6315d236df0846cb82ed520e92f1a5c45f75d492ddec38a -0xbc72ecfbe9b747a77290788876239c19de3afd0af7f510ba4dbd3d678a1a5a73 -0x666ad631edf09945b45d8f69f0a30f23b6765a6e77b8f624f4ff1e0ccbf20aaf -0x83c8b0a01b1710c3606f9012b9ef8e7e5bce7aa85dcbc83430c95329417f4725 -0x85aa532e0d2def56bc2ca1a6565629fde0b4a827319209f3546a7487bf990be1 -0xdad65259aaad90fd1f77376e686e9746dbcbd2ee16f3a3c495def8ba7f1dad43 -0xf8571753eacdc0601e0694c9cc12844528e0ca07f06c803ee4d43e2743742e39 -0x90d6d9547f694e79bf2387169e6009279bda78e955492021d63750580a6ac455 -0xcb2de81444a343da53ae1c2e5bef942bb06d347d4becb88e433a9495919fa746 -0x3869cf96ac6980533d830fd76b578eb4ae03a911ab29e4c41053b7a0e28de5c3 -0x48b21a8ba4112c803ea158ccd4b102059d6ec64bc03179512322dc20e7287f57 -0xc0d4e5dfb43000593373baa8fcf12db1761a1a53e13b23d430f20587ec5b51dc -0x5b18defd2fb8ab3f9c71b0e6ff6bb966aa5aaadc5d7dfef8041956d8b6a81a4b -0x3495685226c3aef171878c4dbc7a4862038fe453205f4bbebdb1334a3501207c -0xf9e8cb188e0b5adf83bfdda3a492b94c73b18d7863b8e3ddf380dd11d6c9a886 -0x04235b45fbd4e11a62b6d48c0a4cefe0700aa84071ca444d0b83e83c36c70ad7 -0x9ec62e927968aa20bf6ba39818863a4d008ccf3619fdb77f4887f3fd4099f381 -0x689ef976b0f22f8d310da4864a270584d9662cec7341e00dc80c041cfdcc5be0 -0x0b21988087cae2b87774bff0c11bf33ea8cf88db26d6dfcf7bf30b6bb383c211 -0xba7929b6fc6ed316b6282481defe3529aaa1c53805b5bc6f0c8943dccb05aa6a -0x7750a058161c42063a8100bd8e2b88e3c35702360bc63c03eb72350e5aed4a54 -0x9ac84ca42cb4e6c9fc7e8d41fca0642f964420cb886ddfc9681401c11adf96de -0x8f92749c59568cc93c23aa2511a72db7b456b43f0756243b53d3ba8ded8dc95d -0x39d0239678308298e630f5de8354559164e0207362155d4f356b09b89f50a736 -0x2c7511bb7c13ce4eae4b5e05a852cdf66c6c588a2354789468afbc7ce4b599f9 -0xf3854d5682153e1731d5d11d00f1c5e834b8234f234fbdeaf18c837b8f203f59 -0xe2d34d6573bf51811f332402066ba287b8fc025dcb09efd3237beba00a98f3d8 -0x44759648b3cf99913d9fcfc07d9d8c60a1f8cf69a36945729e3488875b58812f -0x8054bcc401ff56b7ec7b7bfa7afa79f1b17a6db70dcd7512f2776b2c787e8415 -0x38b662b7148fdb25379f419ee9bfac8979f39ee8a8926278e3f1ff93acddfaa0 -0x7bebc4f1b55e826bf4f79db551f54cd86f176c9838e5f7b8ba03df55a40778d6 -0x42209846bfdb48927706639e7820ed314bc7b27cc69f95c10831161cafdc6158 -0x18328111d99784f0a96eefe2d38a0447548f082268863ce6d383c2e4f33544f0 -0xf1476eff07fa54a590ff3d2205bec8f8ce6e55444f5aafd3da3e06b06eaeebdd -0xd9a292449e68bd61345b8d4a786f25d46c2257ef273c1c5c2887ca0525ea1074 -0xeb983b4ea7b0287ba02cf42c23d0f4593dfb45bf55324502bf5261fbd67cc4aa -0x1aac803c0eed7f6e9d5ee23ad17fe08d38a2585a0a17bc3bc5f0d677dca18ff0 -0x5d6d9606ad1cdc3d3b994d3c75c21d08da53ecb3e8bc582863d063d90247e294 -0x36cf2911a9092d851d5695fcf2d2517baaac36c569ddd7fc942e8c795c3ee97a -0x22c18a0d39f950e9358d03e608724f36da7ba6a21609dae43c6e8a7aadc91e78 -0x35396dd22c7a8fb8f7717aee6447f53e07e826a1ead5306725d416a71b084bcd -0xf30e2ad402ccaf82f3251d3446d50a4a5f8bafedc80a87ea891f2983bb485ea7 -0xa89cfeb97bed1f968eea06600d04f6af4d25ee127d4e37995acb2682c679586b -0x0885a5f223cbb4628e1b13aaf1267ef57b93a0b1fe8f6b9b08c4e5dad2dc5d8b -0xac071a31dde9874f5786284f8598746ed6e4e31f6180c5e76dee7bd0fb4381c3 -0x2eac01dc21e5e588c551aaf08426cf63fa3035ef4465e8e370f3d9351cd63899 -0xcae55624401e7ec973618f5efa39b2e5e60cc9db67f1a6f66d1498d8de00eac7 -0xbf033028ef0d4c366214ac76f8a51ceccf4817df16be74f626faac3325568936 -0x4c8cb8ffb818baba987ec6ae08ba8e294097797a204b125829a744a252401813 -0x1156c9a8cf40fa9e4ba02a4029949588da664593df24304cae7e5c90d9bbf524 -0x5d4188eaa85065dab3fabfe3f610e0059bd60b604784034e6d32f9352ca50964 -0x0d407dc8bc28a576c972647aa3c8b8d0198343e58de6cc39651b1de391f5caca -0x16353d71ec10b312db1a92c9b0442876fbeef5e5290cbd293c2384967faac93c -0x258fc17534955f06be5fb9a5fda87cb4673eb507917888b1c66d7ce4c8ac10b5 -0xfb151efa6af984b1b98c2550e0c53131c1ef92bd63772b187c23b066c6c39219 -0x0b07127698897d8c22638b18331276c34f1a98717f00a8b53f64bd3f0b5c7879 -0xd2f5633e3475f17552ec67cf3f512079e8a676d1afb0373addd123d2d4b59e63 -0x0405c9d96c8e0ac3c6746303bfbbaf29f28bc1afa82794e1d1e79f6a0601f193 -0x001b7f2f9d41813852ddb865329ac8e8b9dd5d4ae7260b13ef6ba27484bc32be -0x19697b048b7b00d0bd5fa47015d8cee26dee24d8aff6166dc0d0a08cfe9126be -0x530e4ec0dcdab4f76c262095c662b32413bb37d6c9b1d6c9dbc57565a0ec8e73 -0x5e9ed7d523c2eb6acfe24573348444fd5b5cb1dede211b0a2b275ba2f30c23b9 -0x1ea5827445e5ee61b68f071ae5a0a937d31090b77792c18a0110bd994e0862d5 -0x61e962722f6b8f68542d46999d1dd1ff8226840d982f274e6762d68a4077de9b -0x57a3a83d9b44e61f2b918ca64d7afe94dd61d81f4f85dcaafeae7bdeac1cd619 -0xc3e3de63f6c41631ac01d4dbe833ef042d88f900148f21e57280526b72207748 -0x4bd6c273e098f34aaf0e216e4bbdb8b3f87594a6044258935ff73cc9adb7d362 -0x150aed8711f81fa6a7a931b0a34acff2805e46042c27e3dba39607e28683a1d4 -0x02ed9d12dcfaf46c09d15fa776da36152e801b2b68b197dd7ba56510894f7dff -0x1e7768daf44fe8ea20dd04441a4801cdb4568fe0aa029e43a530a9255e4d09bf -0x7c7ca6f17ce0a1ae2115df3c46541184a05d35b1384629b52dd0ecefa3c344c2 -0x660286c0cf5275a17abd6ee52de37c34125e99eb7f7e0ec8c9bee7a34e924ae9 -0x1aa69f8dff12e8fd0fe89c57830ed0b4e40147505f88e6389e5f90769a2e52a3 -0xda64fefa7abe138629c605d84c67b3d16d83546df8242b0d96f25c0e75394bc5 -0x989cf4d2b1cb9b314d5ff7e1e5b9771d767479a74ad7f18a4a731905707f3a86 -0xe83e988e68c395e59655cec37532927a5b32106138f2d45296ca0a1a5b6e248a -0x33c140d30b89780a4211853096367c7d904383b41582c32e9e3083ef4dc5679d -0x7c09955e0450819a2d9c6b7c39fb2f66c9bdf28b6c1bf2ceeabaa3acaa81e9e0 -0x2ff91531075e6698249da1ecebfa348a95202d5012a84e03c7e7d3dff2d30957 -0x9a7620c85fbec85477e4f2308058c1ee13dc95193bce11d69a601a0d2227b57f -0x7f1ae98cdab16a79d46b962acbf2bb5866fb1190173552a810034974d8269e62 -0x7b699e25b36b9b26640bf84992486c958b127f14f8f47ebee294cefcac411bd2 -0x4b336babb49876a27d127bafa1e0ea956af58f6ca3f57754e67001244f97bfeb -0x21d5e74ad4d90f2745e30de93a169ca22f8aa1c39a073d4741e874d3d0e51dc8 -0x0efddeeddc8a277f62b9df42c5069a30f19b5d1dfbe49a434592e80b8a056251 -0xf97f14a06e369b50f389d4136098bb5732bfd546b826bf2d19737f2beaf56bbf -0xb7230f0d4700733d2dfae369d9890bdd2792854d29438728595324b61ecceb25 -0x7fffb1dff6ded8cc5d3dd00e4b0eedac04f9fc9202c98b1e432904c42dc825ec -0x54d85ac23478174a20bda6f35aba2d6d3077b6550720018e7d4662c616ebf301 -0xd0ce68a3b477113ee191a2c24f44b8c9107732b441fc9a4edc389b1ba874615c -0x8da3531a03bc65ea06489c6a135e5858e25260fec680c0bcaf44c3931fc809c4 -0x0fb06264fc2564d47d0e9ebbdee78b9d941d413de7adacb22bb3d77f3d726852 -0x0ce0d60863c69a0a28ed39e338f35f93946eeb757f6755c74410b3da55765329 -0x74139033be277c681a1dfad44a8ef535c604bee5b0f5ec7651ee86b7a2b168c0 -0x7f6c041b16dda65f670972f82586d55d9f3994cb4f69401295d608ab06a2b5ac -0x40a2b4a0cc69c1fcc5ba4865f9dd82dc09ec71483736f18b188c5d8a6191528d -0xd5f2da2f8039c3238cf0135cd8c147b477145d116e2e28595b3f760a7c2e4c06 -0x007ba9c1eeca0c4b5107396e21fc92327f5525154c316aa54d02eb718a4f4457 -0x02cc61c43cb507c267baaf83b33e66eb4525e6627a6f845b3cf198628c22a3f4 -0xbc86538c10565fd05e9ead492e67d8c41c6ea1fbe48f0e86fcd0d7e9f9a617c6 -0x3bad1a7e5bd7fe6c3f5b13883b68abf92384d70627f1d752b91b43dbe96fc673 -0x15878788c27a47313fe91f1940a846aa2791f5bb8002d26425a2a988dff611ec -0x5d1b1cceb2166ea3075c777879b07732148dd46659da91d6203938647fa237bd -0xe9f59d2470286549350cc172e0f505f4e9c5216d710b52c8e694210fbd5b9bce -0xe1fe9a320802f4f1bdfba4aeeb1873553e790100135241837f44d01f47418965 -0x49e69109c85505b210b0b556111acfac7c571f90db9f8b3218fbb2659d286ee2 -0xa2bd4e7459bcb1e66a404853428833ea150c018b164a65e8a0d415ce32c3d48a -0x054398a83e2090af2fcd199aa02f197903fae6aeefc26d04144fa90ea24aa8c7 -0xc1f352a40552f32d15e1718d13eb4bedc1a1866e9b860b1eac013c5db429094c -0xf428f6e3966aef9d3903b5e0243dd794ad59b8cd062cb0eafb4ebb5c074ca301 -0x6cac3e032446aed1581f3c68728e1fcc02312802fd6c53883d807f1fd04811af -0xb2064afc32813505eddcd15c55deb62f4db8ebfebd5a2b8696788c5f2613735c -0xfb4a0736d13801867db4311406a393143f58c77fbe554b6a503b1599c0bd5697 -0x3905c1304feedb2b20537d283d07bdeb0cec70b3579abb75a3ae7f733ed67d78 -0x6889c4108662ba0e9912bbab368824b1d81ef42f21eefdddfb213b38c2eceabf -0x4c07c77ae2441c22fbb85ad36f4a3a62ed2fc6cf6ce7c9bb36229ec66220b8bc -0x40d246acc80d4bbe7ce53bdd16ae9576e55256b3ebaee7300b0ca0426823ca0f -0xe128f29a0b24dc80413d1b791e2e1340246b8e75d3d580526307fcf9dcae7d5f -0x54b6c98fdd0f425b8d7a69a37b6cd2a8ad8508f3a503c3b54732da8c006b494f -0xddc61457818ab5f0900f31585ee139fad29a2e3dfc2e0837c2293159d86f3e86 -0x658e53df5291d7c5657092589bc339e4d66bac5f2a0eeaa3cc166a99e24f5eda -0x31a925bf2b13d0ae9b8e131ea0ab7168e49c332721abe68afcfd6b44d54d4339 -0x94f360c2a5313e8a97c12c7062c7b1b048b4efc2b73ccae7276b2b32ea839747 -0xf1daf85f53173edb3bcf4eaf44c7d5d4d94db3ff0250d6e7b4904903e3e8e242 -0xc9448cef58577e88d9fa8316af631ed8ce3405a0bdd5a7edcecd580cf0d42010 -0xaf6e6df48d33b55031d020af99f015e2798561ed72b95a7554ca117f32958c0d -0x8c86aa51eb888e1948753216ebde0e6bd727b01ad2656dc44738e70998a9504d -0xf376701a00faf4addbe8d8018abe765d57f5d0c47f99dfd890cea570a9971345 -0xa07259f707bc1368f90dd6db0209d651235afa10c8c5c2f551ca53fc95950115 -0x2dc25d3f9859965455f3929aba5c9dcf512c02b51b6fec7719374253f323cbc9 -0x10ce15f2b7b59b59ef3e969c4c874870a2ec02e54f5e53692e115ba46c385e1c -0x5fd595bb6da233cfcbb67049e80c4e3f2704c958087175830531bbe44ad36b86 -0x860bdae6203b50606f1af85b16526e04244fe8055cd0c4c21f95408954f8b80b -0xa07720d170ff9966082bd71cda56c14ffdfd9b67323b71ca10f96a5e8910ba5d -0x418829769ad13e9d5ccdd493ee4828ea96ba97aa354fc0e6fde088d46396ab41 -0xef7e71dc370fed81e3392e47e3d7baf6df159ca0c69ca8da2e4d03c2bd445ee5 -0x645ba9976e62403a12a3deb989f44b8d0dab43b6255f8e5e80422d26d8799c27 -0xdd422e28664d2e7050450578c9bec67f167852fb1c5fe541e083a802c59465a1 -0x5c69275066fa3ab4b33f6b36c870437829cff862ca30d6d094c4287c91d7f80a -0x0bed9532e942c6924a1059c9a32d227e5eb355a524d5e25b894174c3c95aa6a2 -0xef1d6e7c571409b2770ab881bf195901babbdd8f0a89b5452be725f658146165 -0x33bdf833a244a911dcbec62311c7d5bdc6c94c360ba72fec729d4389828a4e57 -0xbda39e3fa07ff53243c56fb4912c11ab822179db7b6622d81ca3ca4fd5cc6d82 -0xffb06cb71f1234e97e3d442e217781d555444a289b4ea398d65937f85a0de728 -0xe58d55368570be48d602327736eb9e27dc2855b71ecb82ca27af59f820c258aa -0xc820534b332077e351b0b607c05fdb6ae3e72ae4e2f6c32b778a6cf0f3618c2d -0x88ed3834ac6e6cd8c5a25248185043fab5fe8e44575dd652110c65439bfbbac0 -0xafeccaec239a11bc1d8adb18d7e7f95f33ec20f28343a24d10919859b57b3736 -0x2d81e0c524dc749ad39a412c08433fe2512cc36c0a6a8263ece26583f2847eb2 -0xec5dccb2f5238771689fc1c44d404eb63b5bb15b32a15b45f4e2e0db8036d863 -0x735a160883c1da025f5a37eeb87c9f384739a16815dc14ad5295449967796ee6 -0x516f99df7de1f13427e7703bf1e419c40dfbfb678302b57781c410df27cac924 -0x9ccb8e4c8dab69815723e4e66df2b3f21df406c8f3001b80847ab01503043aa4 -0x5469ac59478fbbb0570b8105d9c3f5ead33df64800440a4b5956921bd0039291 -0xc179109809a40315c5a974cabc0b1532c78c3333cd9b34ab0e8b6d78c4515d69 -0xc0cc29478108a2f6540b9184efc139d761d7d817d62b5da56c6d348cd4f30de6 -0x821e7222ac135396279beb76407f3d1927d56b32e67b1c31d444212031057427 -0xf518d2ed971ab8fd539020a50829f254fa4041e30912aee6359878b6c9c4e3ca -0x0ecd2115efea7e71baf44e853091e8363cfcdc21ed53129b3182825433f6d3b2 -0x9a7b98bea830e07840365a887c6b256a48fdfeef9fd914c8d69b99e093d52b2f -0xc59783822a216ed6c4e991d56ac4d2c5f1816bf7d90c85dbe1854c2593ea12b9 -0x57aeec3e02c3fac3bf0fc386f46567847537dfc612b122e846e25e9e2f22c277 -0xe28375f6b798d6e012f878d22963da15c514cc459e78c8d7cef0827115ef8b0d -0xb842a11029e47cda658d41c58884a49d590480fb50bc9c0eddb9e3e0611959a3 -0x3008736bd576268adb8924479e1bee746a3afadd44c84f29ef204b7ac25265d7 -0x0b60522230922b0977cf9ae23a91107cfbb172b64ef76c5576525c18f02f4adc -0x70c9c10293c2b582f26805b047c84ccacaf0dc5f02f48462faf2e2ef8d346d06 -0x1a117448815a37d14ca13c8fb1cb093f88df0ffdfcb1e9c54725b1608a80151e -0x0279aafe64135c0d4ca5f7d15a1e6a9eb19c072b15c447259a60c859e4306c99 -0xaa1f43de15513677a8c156b8edb565b8da9dc36a9c2fe641006d0ff863ecc44b -0xcded20358c3c12ce905d85613a5657f0a28d5b2c4a26c270b9c2b5481d8ae77d -0x74268d01c6fe552a5afd6618db16dec45b1f4c04612cecdb97913fdc0d50097b -0x9774047724f581ac5f7a830b3f7d068c2cfe5c044b3b2f39fa5339bde7761f3b -0x7828070ba8b768fa37e15420cf6d08096377bd78109893522ddf669d8430aea8 -0xed482f9a270433c9c4d0937e3c6ba53eb17b44cd918fa6b90041bcc6b05d30b5 -0x631863379f44308f789d5ec93f56a85047777a6daa60cedcaf3d22d5a07184b2 -0xe5bd1063fcebb23b18f5034a02937137e92f2aba1c9cc7dff072574e8f7ac8e6 -0x7f4413f3643b6678e6d5d573e5b0a07e91873aaf7642341f4a455f88c94d7b28 -0xc4485acca297f85c34f152459275a18e8b9bcef6ee6e8fb7af73262973ff68bf -0x9b108f2fa57cbbc2b829e728fc1e573760e9a96cc93ca0fb026eaa9ae66e6756 -0x656857cbd07433f1cf5dbc8b2d72ce6b061ca28e09f1aa3eac1b3100cb907613 -0xdc5b8e876e843678d4106b05abb641b5b449bf27a9baef705d1ddabf026f415d -0xb13dd9e27448a385960e475cf2997d7599464f06685a9ee49041505784e29be3 -0x118c160ce1d97ed8972079d707d02fe090aee53bc75b75479fff0656bed1ed2c -0x5f98bbcaa969dacbe47f3c89d76d3de5412846cc8be4c72c634caf670e0c87be -0x4cd03958611875a66d8e9d43013ea806b16aa6dde3dd995364ba22adcc8638da -0x3397c55f24021c63563a0190bbd9c6d3f17a38ba2d5addaa383b9069500bd804 -0xbbd00c6012ee2c41face62aed51a57d18899423bd3c332bfda3e16f7b2e3d815 -0x89e10f319ee321e8ef08c51281743d89b30960e97329db849828e0b591bb18cd -0xdacb8e90a712b99abfd0d1f73de58f72c67b033ab1724c4a0771b4316709af04 -0xe332fe4a0737af3b6b09777fbcf5d2d35116b96403981ffd1047f958486fef0f -0x6ad29ced3315cc734766e772c32b0d0f539246ecdc2782ce8f335b2a22a7ae8d -0x418eccdfb6ead7a9c3145760e1b5b54a0f04caabcdcfa1d28de6aff3cc47a249 -0x2450e64deb728df32251be6534355c290f58f85e70f8073a503d0f7bbf29fe58 -0xc1ee6b86c12d35bf0c55437ecb9407147edafd24c32362fcc4785613ce553b3b -0x2afc6a42340efacbee22bbc4591af73446da20604219b31a138ad881f3298070 -0x7de3a478b14088ba6fc4afde4f3d28031209b9753c768a1ea068dbe5ffd20d47 -0xcab8f514b102d155958da972c82bfc2022605d7f60a5502685b8f476b839672d -0x1df051102578ae753f980753ec3bec6d7f2f53d7feef51c656b88690e4ddf233 -0x22c582624cfa3c3ed5fb4661d0e3169f70747a26dcc92a8d4efb77cda11a301e -0xd59ddae886c720a6c958cfccd961372cd0497d58e4df6020cc70242cfc4c7442 -0x8a1fb8f2859ee8fe5a44965d12406737ebf3dbde2a2d0c531e58959fac6c440a -0x3271199050ace6f580a994b14b9218aa7e6d1aeae5f1db0943db1411bfd8468e -0xab72e37440bf96e9ee26223a4a32fe0701618a28bb72c178d4085515518443b7 -0x69fbb7dd839f9d1ff3fae1ce43ad795e0696001c3d7944c0951f8ae57c8cdc30 -0x28fd7fc1c33853ef2873fad4baf562e6563e7ebdd3815902ae23ee5bc11ad274 -0xb3526f3ccd0ba89b50fb962fb63e9386fc33192910fee57d2ff82f87949cd3b6 -0xe3c7f0df55601c5595e88c94c79ac99eeb280fe43aa80cfb223d1d9ce2f3dfd5 -0xe0886f15260d3beed47fc4af1beb69427a7213daba07b3d525311c03738f524f -0xb9af9925ad5451efaeb8dc66e577e8af35ff9ed348de5cda00127f0c62f7b56b -0x4a221950af1ec1b7f73222673293e5ca6ba28986982534a7bc44e49213459b8b -0x70aa63e67b9b1bfa5c2cd1a9f4644f05338e9db8ab0cabf8f2b173a704e4f780 -0xe76e0f163db40056559310b36ff50094f1865a507de694728d97bdcaca08b8cb -0x00bedecb685de4d611fa7c48a9394c0f6aa5d18a3cd20323689e0ba60b1dccfe -0x3ab5958998e7c8da015ea97885fb069a8e8f7e32b33908a4d9d03f890fe0a3bb -0x87efb77868620aead001b2dc01d8f319b75f8e050608c604dc447a98b9b30ea9 -0x472385633ba4adcf44116892e301e55f4a65247451db5a43f40641f842edc1ec -0x8afc52b87efed10df2ae982f0b078ad8463545d1b140dc67b3f951a0a990a100 -0x0e078175c899d1c77b92a750453af943296072e9d763ed363156b8de4d7d5adf -0x0388688ad04e4dc6d6dddce901f00b25997b33589c8f7550939e73c85a742528 -0xf4c0989face988b34615f56adb1d497d01db57254be93710101d44574d967977 -0xd81fac982bf7180a208f535a7643b4f6f4af76948f5436ef56b9edf6aecc8360 -0xb0b1fcf197bf2d55ad6f382b66b86e82ff5d654794e88b4ad55fdb6d53b61fa3 -0x59adb4eb4e9e6770eba7007c2196fc23fdc5fbf238e3e5927dd02629a601ade1 -0x87fea65050be08c6b54b13bc658882c674f0c43b1c0190b37175eacd761d626a -0x98d426afb60eac5a09af00cb792a82b7788d4925d763a2479bbf11eb46c1b048 -0xd2737459e84f97712abf5af0e2fe604df9ae58968c08dd3d200b14ddd50014e3 -0xe53d77e096378d1303f21c5d8947ef9cbed4b3cd0daefb1cd49343f5e90fd365 -0xe9588569c2db1a03c8901dba2fd3cbf5f3349e034e438af12811842638d17228 -0xa643b1820d26e25e813caa4c2fde5bfd6e3a0a21be9a3f9cf9d5ff7b348b0e4b -0xef3402ca7ee65b3bbaeac1eefb550af0fcbd92a2c0cafbf6d38fd9bd8913995f -0xf036a87adfb2f630a71054dbfc9cfdceb424c17f0ea50a8c0da4b4e048cffb50 -0x240ce406af09591c9a62eff49c780ee29942624690f4dad458e63bf7067dc5db -0xc5517978b062e7e308d1c310ceb5c1b3dff28dacf29dca86022cd4dbeca0395e -0x364ec8f059aa7e97ca5eb8b6934fb403ffe6e0b534bfa5d51c04591a53102a45 -0xea12af09bbf7fca1699d198c20b5ab85e7e300c8ae0c1e0c4aac3c31f09b4e5e -0xc5b6648ee89c209d024eb692c9f056dc9a0171861bf347027438bbcfa83a7d65 -0x2fed0eb108505ccbf7f383530d94e0c21dcf1996eb8eed62f2b217d075dc3e40 -0x81de1a5693e5c8126cf6db2073678d9824c2d66c7185f633ab8f8b5ef0ced8ca -0x41dc57d361b785b023e7334d11dc67b86d8e191c283965dffcde99821867dbb9 -0x577ad301336e231cf8dbc52c6286662a2c34589020ae04e2733dc402e0ad5ffd -0x70b84f8135d6378e3798a0dc15601d30b8246d18c5600b7ea657d5c4d057a40e -0xe3f39cefd22ba6b50c60b2f46e9033c09d22bcef74513159e41ea1c9d20cf1a2 -0x359294e0c323753032fa82bcc747c317c76a149ab1d9756cf99026969a022cf5 -0xf1c377eab8e5ee692439e872b9bfe5e25317acb0910b0cdacfe9026d1bc454b7 -0xd5112a4aef3dec4cd5207f3ad1ce1747bfa145ee2bfa2f6c8e7d0b1812892b67 -0x157cc096e1f0762def0dc41ef91e13f07d12125a6bf3d0f98226aae388bcad57 -0xae7be746e51471e4f6b212997bfb23f8ffe3b7cc0428ad4b6c8445224562d281 -0x545daf8674f3c4fa0a6562cc32be4fce6ee44d360cfb8d55f0dd1f2e707979dd -0x0ff517486eff0dac67d0e5671fdccf47441b9c7deca01d640a8950fd5ce1c748 -0x4be1e1dbee867f6867b41e958ee12bbc161ca068d5bad978f842900a983051f0 -0xdf14251ebc9dc0a3ccfd82f6c9d1765dadf8c35bea459013baa3dfbdebba3a63 -0xa3844a75cef3096c8adac03c8cfa4181d4838e32e0eec41318b2145798676c80 -0x2e28594a14357ce6101ea20b65b2f51bc660f80c181991b249d20c0f3f129dd9 -0x99894ada7aeb83eaaab7ba150ebf1ca7a0535f50ff7e906c7b609d7188e74c8e -0xb1831b58fe0e45dfda7236bea19915d4e3f8d3e4708515150ca2094858f89461 -0x0944abbe2d585f6aa34f3fbf17a06832401f0aabd2780072adadd482b665f4c4 -0x820107788c766cd238f60e5dcb17b6d03eafa11932a13a9cd9ecbe2361618a30 -0xe9710968869ecdaf3d8df170f76c58ae06a68636b54ea1167f6bab3cce2b6810 -0xa2e802b70b69af22a744d2adbe97d2958dde5d01aa3c7ff679dc6c09fcb8bbf5 -0xc2307d3f46524678a1d9192361ea5fac442629fe137fba80e30330c9ada36ed9 -0x9de0a83a60d08cf52c54b07e22d633ceee79180ab6da8bb0b162520c5de40915 -0xf2c7cc245090ffd0ea56157c2f80671b8e325aebfdf42b60fa884f5ecd9825c2 -0x5ee9521d3e66f2fbe3de29b877c1c7ba5dde22f3f6660800a4e9173930235f3d -0x02406f2e0a5488070aea99c418f56693626e522a46c7e84605ea508ba9a088f4 -0x5580048b76c8a0290a31f77f71e2036e409598e82e79515188ed5b77d8a01834 -0x31d42fe62752c1f2714f06165eafbc16a957881c120c73c272105b140f454c02 -0xf704a1ca5260cd2072b55bd71535de69e11860d74bd47be403a6895e69eee842 -0x2b558a0b2bd8b2705d51bc43be1358cf3f3895999e3cf627f76b54bf8418dac6 -0x35da9adea8a892f0ca68edd055a75af934a8e1c9c1dc163da117af3e5d974b9a -0xdd8d1db15a10769b50986efbe505cb30eef726e97b900cae770ddfb97ca58458 -0x8e658e569fd9ba94ed2e4fa01197ff77c9ade32c5310867c8fb101269fd2c30c -0x57c0a7dd6b9baac3db2472af17cab9abf081844e2049adbc2f1337802ef6fe06 -0x7e7a81c8e48a81b60d615c1cdda368e77464146313471a90bbe5601082990a67 -0xe9af6171f31c68530bf7e3c7089c4676838813c8d6da20728715c6fc9a86d269 -0xa23f1b326ca4b3f6def75871f0ad86db11b88e0d8cf6be134cc7f731b5341ec2 -0x4de2979abc5d3c8cbf5462eaa942a55a892dccfdbaa462c1963c3f016a1f4685 -0xff9fc886136c7363d7fdfa3d16edeaf874297d95d9b5c2a33a4d0197773a5472 -0x284f55170424d6952fd3f9045b6cf96207b3ee831429dad9313d3cd5f78172cc -0x0ceb4ec327dffa191dc08c5acebfe4809493eec1a1d84e5a5cbc49b2d1264de3 -0x9e140169314ab485579c41ce4b31c933c6cd4a225a8c42948a4793295888aba7 -0xd4f7f6fd34e027dbfdd8ab44a6afc0d73100179e263f813183292d7052bd52f0 -0xd541e6c3f1238b70bed0d2f6c2a3e9e5c5fa560d617af3f3da819ded27365234 -0x91fd79189ff0ab664f1e14b7766c4a151d6b5285cd91a012afdeec60fe1f0a03 -0x77396d2bd39e197abb799daa9dd7f9d38ff07879e7a8ce6c41a708ec4b36d77a -0x2e9df1169ce669237e1128098f5ea91b9b89ebee1eb83c6a34e4923cda5c14cc -0xfbfa56564aec99d9b1bd514210737214c103f3c2240988a300991ad76e80d14f -0x0a83d47cafa72e082c7a3ccb185490612b50c9d7e553914db484635b4949e01f -0xe94a24f36f8a8c643afaf40d1ee37a36762f7c592776967a2aec8e2addd35d4f -0xd1e917b14312f7a9d80dcb4ddd68ed8f9e822ece6bcafb235fb965524388dbb7 -0x7500888f55c2327086defed9658685e035d960b87b4936e6237029cb3dcdc8f0 -0xcf0aa988712937c1cfa25b40833102ccdde86a756dfc388a9a460ce70413468d -0x6691894bb47f279c64c2fd122b6f3b427495f37eacf5dfaf97f541c907c9b9c8 -0x374d9d52688f2e6e320f6cc1dbc324d3fbb4ab3163b00ffdb8786192795c51e4 -0x52adc5bbf3925375d77a8600abdeb5d2b9a1291412edbb68cc42dbe9ded9585e -0xdc5877a33ae16e34fd02261e60a4ca6ad8d192add0865f86342ea7d5c5793f02 -0x21037133fd13f5caff9c42ff0692b17a009194aa7191fc128552ed18230b7b0e -0x20f5c1d77f19e1f08595b49b95fae04ede7804276c6200ad6219ea7a1a4c8372 -0xbbde35a56e715fef01379ff9c24317f4f0e907ef6226745e8ebb6fc741da876a -0x239d31b0280c939cbd7b1f7384b64a1ad69e112644f8052e8d1cc422d6650332 -0xa05199742c9f1203dc9f452999d7b9ae0b757965a06a4076fb8a0eb090ee0513 -0x3f381b7b730a3118d3af9598d3cbfbc807f73a3bbd6f9e9b965aa5c71e801bfc -0xdd4f1e39fbc147a77299a4ab85724b43794e8eb678e4132217128ba35dd1b4fd -0xa22d52e7132b48f507a60a026fe6d96657e515e4b8daf6044ae3dcd512b9af68 -0x3876939783ea054e547849e046b77f93efddafdceccd862cdee79335a7ee94a7 -0xe008a37807011380e2ee8bad02e01ad197db04cb95f1b787436cbce4b8d98fdf -0xfab3e6e381b60e98a8029c7b5cf627683a33e426c521998a9d53ec7aec9408d2 -0x4970ba01519b2b345c688a9518076b60e97cf80d236f443a08e2b7279794358d -0x1e3b6640119263c005434f41eb30cd59a4c15d51b1aa5caf59820aabd9e04059 -0xf7a2e6f4cbe8c00dd6b45aff2cb20f6f2b04a0081fc414e6b97535da7c3ec17c -0x05e53307422da527ced04146d28c4d5c6cf86d276251612ad062549721613d97 -0xbf0fae83380dfa97480f6e2fc51d0089849d7359e4b87ec48527f9179aff1792 -0x6d41e4edce497d26d61d34d6e8a8b213785417e4a3c3e448236947d50413c16a -0x311307030a6bba004862c3af72b07eb22dd11da0a18b9869295587ea7c5c7d10 -0x0aee608aa26c9bc194561da9cf88d6aacbc255da42a716315eb7991380847834 -0xc718c0b549d07f27091df9412f4cee0980504a67f8f3d0353d80e8d36c4a1372 -0x03d67c30aeb52695ec0265d26902d367d3fb75c00b34efeb877699215de25fc2 -0x3980bc66b8dc477c88a164eab1997cca9eb82dd851dd3a8c23238950d7dbadd4 -0x66124805b147ec81874710c721da2891b7139a06f4b96c41feae687f4bca1cd2 -0x14daa83b9d73733e6610876d18297a34b2aa4a4e95513e2939cc87df935e2de3 -0x591cb3be953fcaf9d3f28c170a1120f29150982cbbc968d3cce2f3050270ef4d -0x827bf90d1df401675213463db5df4aea26c6d9563ea197b81284643ea0a20573 -0x19f63b768f8155a660537232f62058c8ce648634e380ab73d51cdf64df62c617 -0x6671c5884649ee7274980d7ff1bd135e254107f8832013db20144e2b53240aae -0x4441610a578749395f749718af015898c68078645fc7ccc0f79cdf86f0c49617 -0xe90b7fe359edbc6bfffde7de31d4103e25bb1dfc2b3034c3487a29f7df3f1c54 -0x93b59a497b24ff127556c09d416c8f389565f91bf74d0114e6b4029e14439429 -0x3ae4d0936de933cf43b2accf4e2cc7a4bcff610ac428900c780805279b0ad385 -0x89dc972cb8657cb33642699832babd935af9c3081eba8b4ff5e4e4cbb6409833 -0x8f2d974c68cfdfdc5e9e3716ee52511ebd5c0006cc436462626c51e3cc62d113 -0xf38e0d60c06bec3064cf120bc6c6beec1336d986597b5070d5e4f4c62dbd7f44 -0x0a6e9c1cda227dd4797d51e20636c18297823f79fbaac68eb53d02198a8afd8f -0xc36330e64235b16de15739187fded7073468ed3fcda1cf17a10dca84415edc32 -0x2875287aa6a34650629541085f269facab23435fb095606720b797090ed867db -0x33ebe44d8cccc44fe7301c12b66bab3345c1789a1597c638f86167546ff82c81 -0x8cf1cbaad0904215b60b57e697fae174ecf4dfc89ea6e36a28390a32d7fccf53 -0x62d88aba28503d8c756cfcdc94b7a24b0f1a047d25b7f77415bc3f860957c38a -0x2938c63133cd76ba86be6d811e04a24787afbefea777377bf5c7baa95feeb51a -0x89c07ce2d022e90cc1b2673e8854a416a9789018a150e4e684e1faf180064f3c -0x5d34745d2edfc34f9b52d19035974ec34c411e14769aa31bd20e2ebd3b150629 -0x8d3d91f1a00352a9bceca6d25237dc47904328d94e63acae7d68f195f8570377 -0xddeb3dbbf942bcabe5683ddd38946f04e9065ff4a67790b4c13db04715aaa58f -0x97afc3899ed07406208e7e42260fa2a9821164160391d96184365afe6202c6fa -0x4960591f78db3848584cf92791f111d40815155f687463d80e7e9c5ad58f1768 -0x62c7f777ce3260b7498f8587daa8f89336a4b8905abf228354cc8fc7904ea365 -0x064ed27f215090b3d19db34523cf0af7e3e93d15e3432c6ba67f94c4a6b59de0 -0xb787faa4d870f504322cd48e813dd464f77fc117a4f8864280bd23fbbbd90132 -0x49771a718656d3c40bbcf9cef3f664fab0bc6c8fa44412315d2f2078c3e10153 -0xd7e4cb6d63dfe3d9a602f86ca5fd946e065e30becd64c1e813a9533c32b738a6 -0x7fd40abbfc65f2395139f9dc69671d7220c4a37e2ddf86ce5169940776a68e9c -0xea80ef93b9d51a86391ddcdae0868bbebeff8ef00c01b220bc9e323d3e705691 -0x9e96b16d864f9aa84fd07c76eb189223609b11a00c794bb0c54dbed712e51183 -0x2c246154a7e031328d0f3616ce4003e4e9cad27442b7c994a7a27faab403ba28 -0xa8d04741736d909e2246a5001315edd29f6726be69f44b6ac317d86ee10d0fa7 -0xa17052c1268b47098cd0da0d0cdbcdf568159a16001794af6a078777a88b8921 -0x4899c911f6615cb8d18dad21eb838c044c8d689922fe8e5342b760b97c94bad5 -0xe659baaf685ddd746f3a62a42cd451da61a739f51e9abe49359f8386ca1c8072 -0x69e30a98f45b3b9328c01cb1fee8f331b9fcbc095df88133774471c7cb8611e9 -0x6d057393ce93c6a713c73da52a94ab524fc49330c0b1df21505e0ad78750a1bd -0x872b52f56eb985f8b732a39e67e9a97377e6a14590ba8a7f9b537e7f8e3b97ca -0x2f8190f18bce92dc93ed791c592dd514bb7d2cba534cce083c164505b9aebf50 -0x1e1b222a8329a64823ddb253931c07f9ab6891c7296de80bc2b0e54eeeaccf4f -0x96d4fd6e130a0165357a5458f899a98ade16e2bdeb5dd47a9d79be36f6db546f -0xc321c5a5126f4a7da5b434eba92d191f1ecad59ef3933662c0ec55655284288a -0xfb3ecf7261a16d312e07308faf6ef2e3e64565cde95d92e429239b2282df0758 -0x164cb67ef422d84e6e98aa247b0488c92346db0f28476c47783dbb42877acf0e -0x6606e1ff1220c5dd183a28e9ee74508d4ec51ad17eae37dea20744e7e9084e7e -0xda1551fa569f5ac5384883942e0f541c46e81a25891baaac599250c48ae9be69 -0x608219cc5a3f4f74d5d98ff927961e93d66c5feda6928c11e77be38f3edca9ea -0xfc32dfe40aaae67804ed2e48756fe7b9a21ca37ae6ab5561f5c61cc009ec97d6 -0xc002cbf6e299048541948dd2c563f63ea5fb38e690e962c9304167161d7af8b0 -0x22a1d0c1fa49b7350d04e0f56a0864c559c8c38fc752976f5d65005bd16dc4be -0x5da4c4022a536953f6bc7f988957a7a26762ae5b723c94af7bbc08f03b7dc282 -0x8ff31a3e74b2a07f5cc380e4c8e3ec8be769d701eeb52ff02046828f6c1f5216 -0x62b867ad0ac784842d0b51580b3f4b8566258f23389bebb97e7a62a167081ef9 -0xac5d9bc99b715d32461df30d50e6d224e2fbea0e0adce171c5491411d1cdc236 -0xaebf2ebd9f7b4d764e640683a470d6d7defae30130823c4df40f7908034ad3e4 -0xe6c5fde28a17a4fa0c59b307dba0e0484931e8ce14a9ccf6e237f3172454352e -0xc2a89f06fd66cd12f3819741a5df654b1b03346ffb190abe8cb462680f772afc -0x05052d0d173ccf44d3ef25a4f74d5e06dde1e44ab023a2081461ea699fd92a2d -0x821119cad1611b3427d1f8c3e1b369c9bb3a8f9b90c4625538ffeecf4ebcfdd0 -0x80f2eb5ec85663691cd83727e5c49f6eaf8bf097bbd16d5f85b91c65a83d1e6b -0xaeaa93cad4e9f878a8ff2f39699e9c186ca77290e162345b9e04cf8bfdcca60c -0xcb162234292334171dcdda9ebd30f600747f4859ffb89f37f89f7ba0b2bfc628 -0xdabe5e76e2b411eaa6981486cd68513e60ca42992df0412f6f347ca1a34c6649 -0x8ab215cb914f0a05a2fbd36e0b3b4db86857838071ddeabcb7c2d0206b88b7e9 -0xd565ca23797290104509b20d53ee4e5fabc8712e3d6a44d5199f6b0b6ad70b17 -0x4679586a2817986500fc7ff648c8f2771f23c30625f14af61c60ecc2de5b6ba6 -0xeaa0b1101dd418d29a450776b713a1093ce65ae72375fcb5048bf81e2de992ed -0xa61c52a40ddf86905ea8b21b22e2cf58f4b101a025e4b1aa0fa849d8be12a1f2 -0x8826e0a7d320434dd806c478fbf8a8cad19109e06c130dddd1aa172b9cdeb3f1 -0xf2d3a54067eb6620b288559ae3bd5e5a317d9144115d93e88e909fa6b3849724 -0xec224fd2fb92854ca7c372ed23fa5017a22c43881314360f318829a060736269 -0xf8c9e8dd0d850ebe1fa46720ca926dc496ec8e2d4944f2d54b2f33b705329514 -0x0c42e160003f4392685133bf54d41d5a5213a583484e395cea84b08194b92860 -0x06d9ae100b5931bac4f4fcc32e9713d166ba954f73c0d0dfe651b2e4113f6ee5 -0x30d1981813a1adeeac36eb48a3300f6edd04ef7b1b6fb6cbcbae1c5f399114b2 -0x170efcc5956971604f40c075ac20c6f7d2bb8d0fd64ce2a8155c3bce144ea7dc -0x028b746ba62c7baaca2edd6e96d96cd8fbdabb9dd533ca990ae932e1795f6472 -0x0d9734d9f2951c071ea591b2e559e19c24dcb678b752e61bc636e1f6ae96eea3 -0x6adc9584734f40297c821d38f445e8749fd66028764064d58add21d0704feccf -0xd812573389e519cf99ab1e821a85faff0efd28da1c86c6976996826875e3ed07 -0xbba5a9d257ce255c4f01aac387117f6da7cd8dcbd8bf9a9412ef9ecd1ede27d0 -0xe4d3d8a4c42cea79aad0fe7a2ea3a239cc29bc79ddd261b63239cff1657f6b3c -0x5df81bed870b3f496856f2e71046215586e0147baf6693b30229d9e5705160ce -0x4dd1d4508599cce839be0aa1d0871e6bf88d2e3823dd1bf412920438960e856d -0x6242ea439c5bf100d6de9e0da20c360bf913db07ee1e0f59faa3ea2e4db2931b -0x95afb5c3d0a693688db9ae39c937775e43845288d0812b460d446f5b5aa359e0 -0xdfb90000c9e3072fa3b95f225fc3013ed9249296f14bc98d2846dcb978c57879 -0x4b371696f9d8d191a42eed73041e5320576b1dbe4614a8e219d94afc9d3de059 -0xc9723e02611c50185b6b450bb3d81a50bc04b698112e6e20a71a77eaae0a69f5 -0xdce7e4d6fdddcecb21c13553bdca2ce15300ca30f04d46c4101f469774f18248 -0x965a326dda796c1126a7508d587859a94f5bc668c93e3d1a3a3790797b462e7f -0x972b7d58a55e04dd923492333041c87531af5d96878101cf454cad4eef1a2585 -0x7f9f92537b1ad0439a915bc86f5b30d0fee699458aee68048042252b912d4e11 -0xb152334fcb2005aa7a4b04bd95fc2657c3cb38f42cf4b39af50cfe6be974112d -0xe8c44070636dae6f4c5aeb28c3971f94f02d5ab5a57bcba67c37f3ea6cf37b74 -0x3ae2ac4ddf4f97c58384c3fba9733140c8acabfb371cadf42ca46ac7b81cda20 -0x46410e32c1b198e5a83ff862275b888c6001db94ba02863f583a4385b02fd3a5 -0xc73fcb458c48b25ab19b47ee6e635c993e26387c2b8575835680b37d716fa860 -0xa3b33b2b981f95921d5695dd419ca5fe0c52bd57e81896c4635c76ab436f27fb -0xb692c4e2a7e7f61fe1b03dcbcb2201aa371108ca68f9cab519a59c504f42c7ba -0xb4cdf9780dfcb5a0d1a638cdcbfeddf413a1975b5a43c3132d0c74e94c172323 -0x85e875c50b91516ed0c108a56004dc17c346f89844e58e839bc56fbbfab3b86f -0x8dc3346bbf849b968d95dcbe0517f52285b73750034577fb30dbee07532e3f48 -0x55cb12a5d902d321e07b2128b47c58c9d0ba9e2653c1980def0f05ac8425fb5e -0x97e64bbc638148a667d19f80dcaaa52cc2cfa5c2cb4839a00d8c245711a5a590 -0x9aa8a42a21c5af8492dd26e6d0198059feaff3c2c6ff6c68fb07bd0cd9a7b32b -0xd393fad632c8ecc20613e984530104c8d6f63f69d115683968e3ca1aa1c69c64 -0x49f56a93ed7504d033c74b27754c40948f2372e787be96f63de8c0cb2f9aa355 -0x7b718f8842da9fa51e25e303376fe476277e07488be0fab65bd9b5104d1dbca8 -0x258c511ce5cbfd7fc1ad90595c87bccb77a90da9dfe427cc60a7ec13828fa630 -0x9dd48ef73b615dbe6004f21ec1937f8be63b10d800e89d177145606b1315ac0c -0x22fbf8e25ea689ed26a4406aa317e77e0df9663bed34910a2020cefcea7e890f -0x41d4abea08a0ad0f55a6d3fdcaf6a0e8fd963a871fdec14237da67ae258604d0 -0x15bb937d0e6f82afbbb4615c2b70f2f0d7da3455b12fa8cbe4219d6534a95d85 -0x0547d8e539110c1e161b070e7f61300fccffdeab7a87ac9a511bbe0515417e01 -0xb06b63924b670e41ca6c14ef0131640da505a124c5425abf8a751999cebf2346 -0x8ea442796bbdc874885360f33e2b0f8f022da5475df69808d18429eab5ff65af -0x176683e034bcf09b4f292e5f1e8aac511b57f33d659fffa6a6e1bcb3ebd94501 -0x4dc95a387b73544833f2133f5e8902dc5412e8926a3fa9117b7981489b517d12 -0x43af7fb9e658c4eeb18e73c575f3d6f48cc0a5864b73b885076616a9185cf46d -0x9cb3c41d1fa8206987c8baebfb2c1ecb44b08e4683c104a2bd00a82d83e8486b -0x82e1d524f4b680099dfea995ed1e8a217378c0e8705fb7567cabd4665689f6c5 -0x38a4f7e65b5aec953153989508dcd7e4fa605be711ab05d726cc41eba8c40b1b -0xb997ba43e19b69ef52a46ad9ee212928e3cf84f898da7dd13fa1a41badd157a9 -0x08cab77773eebaa2514ff04bff0aab48bfc753139155f44140d1cdf87e760f37 -0xf19ed1a3610cf8974481930da835f861372ed7299beedaa5d448983c6b046f70 -0xb42bd3f9174b19d3372522d4fd63c54d3340cf0e7139f11088035dbadccd0dfb -0x8d2fa1b7edb08e4db208ae054d81a6f245d2114923b0bf4a33e1f6874b55e952 -0x7d94127ccd9883db6195f634a133d29a166a32ee609a7e70bec7f0b5a795c591 -0xe927aa93823e2c98a164b1d220b9d3c0014b2dd26eed4372291754f7723cf4d9 -0xcb4e2f46d5b90383aee3c0a1e711bfdda7d6baa86438677975c234792094c1c0 -0xa015fba1ea5da07f832530df953deaa7e157989cdaa2534a4b06edb659ead352 -0x528167562cba39963b9c0d6f28424fe4788940f6140935dfddb74d6a50b4f90d -0xc0cf9c8000a209c4b9841983b09a40c1183ba3daa4772c6bca82cf942e8d7417 -0x0952632695dd72d8b1f8c2711576df455fd83c86125388c433cc53abaad6922d -0xd5f7b427b84988aca38d76a35053d42b9074aff2f3170cc2f5ce96842c98facc -0xbfd3e65c3c6f33105185b5dbf6bd67a5c2ecade61e17b3d89d95a645289f35ff -0xd981d0169d2878a8870f9f3e96ad977911446e5c2e69b618f1eb80be3d25f9e9 -0x1432fe744f4621031fd63c9ee92cb6d29615a4f9a53481e9993a13290846b531 -0xe91a1157e721f3a5557ba167e003dd22da256d4d28a53a97c1d93a260613552b -0x0cf39acefff6a8ff89586d20a3c64bbfcb9978cbdad157d45a1a3f00a6784695 -0xdff97b28568593a68ac40316811b5b06334ac7dc17ec178003883188109828ec -0x65775807880fb023a6b876090d6c6e041b7d7d232d536e18a10155beddb04591 -0xb30b3ddf0a43c745468c2a0f46529de8f33a080fe9ec3c568ba11f13328a2182 -0x2c184db59ae88f8d490f3e67e644a537497e88ff445f565bedbd29194f352d3d -0xb235938e651fcd2f7f0ba9f8791895423dc7a517949c200fd584d6779d26540f -0xe23e4918343ebaaa46f8309647f38986eafe745fd993cd4bd76a50804c866ce8 -0x206cc1730b980e1f0fc3aae88ac346c43915fbc19010eb2d5aca2f746e5445e6 -0x587e543404cda45bdc841de3576f519a6720c070f7672b6e6a814009d433a68f -0x39ce6b84684d3dcf814ce162f26a56b0ef76384455049a82f44e714d274ff736 -0x377ae2b0256e324581f348ce24d606f1782700d63d5d2571eacf70d919d88d94 -0x14bcb06338dede24f7ed988ff8dabe3c18f884a368c84d86e62d91059db64afb -0x7a966a6fef1371ed84d80f3337f196c942d29f5fec3106c60145f0cc6fb5ab3a -0xc5dfa1b1119f4b8075341a984a19a265866cedc11fa32138b94f308b9ee0db67 -0xb193cbe936035bb1e147eae2863f4bb140bb86cf3f9f188b6f5ba3da82004d1d -0xf69d13fe23a84db942e5a8346c3338bae2f1d0e9cf4c88f6ff39c0a924eeb415 -0x8a3f735510499be026e8354da5499170ca7f173e632ea47de205a9a60b111011 -0xe1e835126812d91f6ffeb4d7b684d32faa3a2cfd208a9c34a3fd8518d515884b -0x5652dec037f2439d8ef9676b68a9c7228815b2f4ac70c99af6c03a8131dd3ca3 -0x185b9a9897b9f8e09e066c41725f7ccff902bc1c818a901cb3df4ea0f04ef579 -0x982689137920116af95cabf08625b53a0629521d127566fca64619f07fc6b2ad -0x1ee66ba6c2fca50a98306158cdaa6a1f6e00704941dc9da2337778ad82a662ea -0x0a336a8cf037d69827ccc184de1bb3388f5097141123a41dbfb49716f29436fc -0x562786758a7274d4ca2f7f4def657f4ce88bf7c22a703e5f294b7ed89a1479f5 -0xfff315d86c796c3287941732236877441f8ddfd7005bc3415fb3e542f9ef4693 -0x5767ae6e70454cadfeeecb6de5bac41926265c5ccb91147533cc01156c78bcdc -0x0ed490c1a399a5ab87292011d05782fb26458b31e1fb170d263eb13e168ef450 -0x0b3ad6d7e81551a3533308eab2764f1d9c476c3c92caa79a3355c06c6ca8869f -0x4ed95419b5567365c0ab3c3886e6fd0f45450c87b908725ebb4b912c7c15c0ed -0xe7d427683fb47e02264c283e929e086689ee0cd0953514dc5dbdea1d7fe6a7a7 -0x0823d0a31ec973c10d546669dd5d897179f7f48611ccb611b4cdff588ca727cb -0x981e52cd211ec462a8067fb124c708de2e0d65fc2afb86a350260f61d0088512 -0xb8a4a8576271895ad24fe1f93fd8213ed028e4592decaceb929deb47cc08bbbe -0xeeba94f16f9a43773417e66eae66a1ad3d667aa6e70619bc8b41f70b1e36a38a -0x0c5e375cb4fac4c74226c5a56eaf2c009f23540b6b61f7c97e38bf777033f885 -0x456e409c584eaf488417c4a64ad496cf0e4daa283f1fcfe99f55388a8bb4d64b -0x5aa5c1ce821480ea6882ad8c41ee2b04e5e3d75cda5205f867eb062e80075f23 -0x9fb240c4653485d78954273d2fec1c151cacd4609373808064cbf3209fe80221 -0x9fc1321bd429ced1bb470dc57b5c50d418ca14cb9430981d0888a2a08ce4343f -0x2a6471a34ae6a30edafa22756da804283401e609160395061cfe2804d752ae88 -0xae32cbe5b613788f68d31a5d29f338161bd4c6e402a0bf8eb5ad8e5604e4b801 -0x42c6183bb55e5c4296bbc85da3ed73b8e94c13d45217bb7c54296536eeb12971 -0x1d67ca31ef8e5cfb0acb59307e33207bb5fd9dc4ef7768924f7b7baee7571911 -0x64766eaba07e4fad14279d8d681d8b432a6ca14122fdcbe93419766dd1de3b7b -0x4721980a5a9f359a591f546111a54942db114960bea877531eed9e6e33dc6473 -0xc3d4d9645605bec6d40eee57c9f5bfe8fe802e19163cc9a22e3e1e53cd5b800f -0xb77f0df938d8c9384a9755eaf59ca12961ceafc6f328dabe175a50c585d7ed56 -0x7f96d8722f46a61bf7a324c1bbcfff20ed099c4e5a0eb4b63cdea08a9aacc2ea -0x217f37d02a83842a985924349c7905e9cbb667b4ea8c9ba39902471e34cf6496 -0x2534d607c9a65e0cf1b5d61adbe20bc888bf505b8496f41453bec81a115e095e -0x3fd4d2d1ad475604cfc525b55c05a5e7d309d8ad345948697dc2c3a6c2b89382 -0xfd35ed691e70599103d2b71f2d8768c869aba0a0080dbea35c711231cbd6859f -0xb8728864d80b03cc7df27d2bfd1732ad14806a89c79e2c02b3e3caf731b80e9f -0x930ac8f1d9c30ce7f85291d84a6f74d9ed92ddea6a44280b265962f0907e2e4e -0x1e62dd78422b25fc595cdca004bc56e86b1e5eacbe578e43182badb855e2f945 -0x88b79cb78dcaf38839015b208f81b4894d3fa8b3780f9eb4ca813adf8cefc37c -0x799211a237b8ea3cbb7692ab6d50521a4072a2e01eafda7157ed7e861e8860ae -0xa3a12d177d03065c2bc032207b7db3313cd9f297d2ba24b88eed152d30ba2f10 -0xbb7d89f938e3921eaede26992cd33b9a4c223baab3388bf6a986ef79dacfc487 -0x01cabfb202418d86168c965a13a352827a3f647ea9098d71386e331c456c35f4 -0x5899f002227a09f2e7f70e9a6e2628139b3900318f72f4137b58a975efd594c8 -0x14b07cf019494c0fcf07c115b37108bb5eb219bdabfaa5b2c7d7e3d02c7b80bb -0x4e81f4ae224032a3fb29669f117e9a8c54514027c911adefd7f9526b6f4f13f8 -0xa2a092e38de63688f0277f7bdec3b0cc63875f405ca0aa84100d18f588a0c49a -0xcfbdeb95b477b086f51f1204e81aa9e99d54130e156b51074fdabad99b50feac -0xaf00d50dde6b88900c7a894b4af10a0af14085c26556c36e0f08a3573bfaf36f -0x53ca684a242a1dabd50647b612cd7385f280672aec4f458fb77cfe6f604f5886 -0x28368b8aee5669cacb7d213e4a1d6d5b807c3e0235cbb1a138caab93eb80b713 -0x6247dc79f06a1b3a2534ca6b143210c0a2610a700b394c049a0a53bb0377c9d2 -0xc558b08e6e596152e8224cbac42f3e0786429e999d8e7d7f0f6ead3bb8e6114d -0x77332aab850b56c8cab06d2fe7380157143273e83fc67fbb64e79447cd59e601 -0x28cf82957bb4665bc614381355fa255bb96f4170863453c98557a9437dfe5729 -0xa8890196c6cc4f9a97ab544b9b0fb0e0f06ab28b4704d8473b178a83abe4fa52 -0x78bda58c2e00a687faaa56c2b2bac0ecf7c8d03d21a0c9e2e001c2f8224957b1 -0xbe95634b6c200c01536dc1f040b4ac297a346b3ee9661d8bcc2e7da389a9f271 -0x4f285f99199f4004cc26d654e7cc5066d4038df1e0c1beb6d17241e0e6683391 -0x8f721c69226b9d52261f14cf0a144b2650bea727a480680093e179e28eb405af -0xa03f7b5f3f8c2b5a74cee64d9a853be7db99ad13530464d596d89666e3af28d7 -0x79c9cc5e6a3e5b237f357e26f68063256ec6e095779c5ed345e3e1843a9db920 -0x1e6837bcebb61952f0768054725cf3774c6faa81a4ec026a48f9c855bad847f4 -0x3ce1f3ac65293468ed1a38b4e54b47050546cdd214dc3da17b901f8abe24951b -0x7e42f41a497d39f4fbeb15526c1e44c7ff25c510851438917f2b68ba878ac13a -0x4c96449933b12f1c219f02161eca4ce864f42c1bd09a47f9546c84b532a757a2 -0x543534380e155652813197adc561e3178cfea8761411d2851ae0e190ea53be7d -0x839bb6f4c530349c8ef72a961d65d9ad294cabc41bee0481eb8e8136b1fa4f9c -0x587cfc19f886f338e705ec30df6c213a189cd80fa8411f6c37571b33cf26945d -0x85b7fcdc1bc3a6c20bf70f32c31b890e3b38bf243bbbac589686bd1a54c30492 -0x23180f7419636120e1f7cbf2708038937860af558d4cd37ea940525c1f501110 -0x30a70b8eb473a720a28e2c2817d8e3101e720139b5d53ba4b560944b0f78a608 -0xc150c60fc03fe0b191aaab989f1760257373c27b197690189860ae20db4ea1ff -0xdcfaa4bcc7823cacf6f0bb251f701016b7aaf4ed18e2bdc6ab4024bf7d0cdb67 -0xc74995a12d20df1f95ff8ce00fa6b64cd248a3c5e0fc56ee484ecbb54969337f -0x9e352a9f77ad975befaee9483db506b01a9d5b77a5e1649970d8825d2ed821d1 -0xd0f34fb39cb7307d97e324a7d1ec0a4755ec647055fe0ed6383d3bf9a2f2d40a -0xc6a87760237d993ae2345a142e4178e57fea6ab27516d952c6171a6661c55273 -0x678c65e715db74e812a4c3e183d77e07caabd422315a1f239d909008b7cd0d3f -0xf3cbbd6b60efcf683f1a6ad96c53adc41388106130684138a03de63e1f12ed15 -0x9e62c77a3ffbff1ad469bb49cd09debfa1e660d4480959d75f26266712986c7a -0x78a8bb6304a250d812d86df8f75e7f514fef3e515d3aa35d28642c9b5e376868 -0x680fb3bd432d53addcba20745ac0400c33aaa2a583540bcafb40f9fff2c91531 -0x1a2addab0d0cd0c904a1ef740c334a87f828b867c25071bc1f4aa424aec38ed8 -0xf6b7a94dc4d0d9d6593d2cef9bbf62f493bd6a67a95874774241ca9eece8093b -0xf1bd13108d5cb11900a0da2c69fed74421325ecaa136982a316c922d9f3fb417 -0xa5f42d056e4d61f14093ce6c87f2c857825ccb551b6d37ff3c86dfdfe8031fd3 -0x25ca6b26d1b07002666596b881e5e58a7207127929196a4426279c39f8f2898d -0x5b8c9267b7c06d61ccd80c29b5dde1becb4f865f05f2dd987ca76eff66a97709 -0x1dceff2ad72823204620dc8c5d92b88883959c42277a1adc22140775cc33a104 -0xa794112fcaa6fad63f38fb10f1d1c64ceb2686044c01ba0ddd352f4fb51c34c2 -0x1963907f1e44c9df310882841847408603211e4d0c9820e98ddf91b4e2c5a7a7 -0x2365e6733ca7dc85fc851e3e75a2c55a5f1504ab2039306c2a47723f25ebc7ee -0x7460ba758a0db70265d0fe5a74a6f9b5f9c00c50adf9b96e95536362202b1d0a -0xe068151e9af9a2a043d11a21ec404094ad2011fb2204ce1d32ff66f56a14221a -0x0f986bc3738319675742a5239bb98dba0f2a9af1dae560154aac7bc2cdc8c5dc -0x3a18cadd9f722b59ba69d2e61bf38f75febc3860ba9f1825f6c475e2b9a58ad7 -0xfd25b8f9a60a9143da213152c45391b1c2a5d48f9e5f44371c04cc8a66d549b2 -0x977140254772ed5af94bc4ed14206f7db54af4ee61b4d8c12a99acd0ba0aa45d -0x14cc3d0d5076e072f91997d4a0bc1ebc1d70de49fb0c576d5d8a179612f01bd3 -0x1b965699afcf2d84438bfb833bb85234a81241cd631bc2f68b95fda9030fc584 -0x88949968fd1e24ca799f9a172a49fffe4d81176d2ade6bb4b37825fe4691add3 -0xf22dab6f2db7410612a986cee04f18a0df5e7255b14eb93817d79c9d9ce8d845 -0xc8a78070d47d78637a973c3be6b954533995503bb4b8de11c6f625f9b965e71c -0xd934a7d2e703d7723c1ebe08730666a76010933cad2bd943ebdb437c662b1a7f -0x1875fd17acfe9ddaae624fe40076dc27a1f7f162337c46987d03679ec0460765 -0x0c525484932e1c42ee9408d291936727be195721efd5c3cf368dd30a3eb5e9b2 -0x0087799b961e560d48bfea3f1ef07bcae7986ca238456a5bc411c9503ffd370b -0xe2492ed2b40194f6f889184552666d659ac1465900370841575d969f6e1d0142 -0x59e735b8ff3cc00c0c79686d54476f3bbde0b53054cd625d2bb584a901a576a6 -0x4a0e2f8c7cef0b2764abf174659749aea6f7f66b37400a9a1da1efa968007122 -0xff1f984dc014db9a14c4906ec91c7075bb8305c23e62a67e206cbb177e7354b7 -0x672cf07dc99e5c0ecbb171ff8a77862f0a7c1f1d709d7a42934f45d0e63fee6c -0xeacd0b3907957a71939900c78bfb0cbc6b875ab234c43e22c0076bcf3ab02c5c -0x79b5789b02e8728316df29cd382615d5b2951a8066e629ba6baccde63c37bf13 -0x7285b1f893575924e52b2d99463841ac2426afde08ffa171e06ed81302e27b08 -0x5e52bf18652511d7f608796f0b6ce9186bb34eba9f8ecb8f2b3bde8ba1118e5f -0xc5dce22146d869ebfde90ef88954ddd9225366cf3cbf51e70054cb975684370d -0xa511e6931ff76f8e5cd0f33187859507308c81a8092fd0cda3e5da415a97bb85 -0x95b0864b3e34478aef5f87bde716a0971632558aa38748706e2d7ff509763173 -0x6906c87ff19a0448522b7888ebf60de9597b48931c61b2cfd19863a480db7557 -0x9bf5f5f853e9879bb23791ee5b8108458d644690af479330724029971b0c7ebe -0xfede0a61ec8811c1be31bb0fe87d7adaaae37867e89db1ffe52769bbfff8a431 -0xf9739adea3fcaf7b40144cea538e7f7991a0af45c0410a9ada93a9231a223142 -0xa0566ad78ff46f206c26cc44744260d5ce3c0e6c358cd0a44a92efa7d19ff3c2 -0xac176fdb547ec81a164c57a68b00e84385c33803d2d685997d828f786da9bf9b -0x85960d6bee5e0d96f0346e8742d4f8a71e4eb14e8f4bec4f4651309c295b8575 -0x60523e601756232fa0d94e107674dc22b005ab795605276dbd63cb7cdf5049ca -0x7190e076dce3ef049f83cc1c78b70fb1dd31cde417517ee50debd60fb9363452 -0xd33db88ab7d2da00c68c8bf42ef7d913bd021285dccdf42a17f3517d4688d09a -0x37b0fc87ef028ac5fd9f08fc45cb7b4bb849f081df209c283ee3879f72a5cb83 -0xac2a43864c92b128d36a2a4a3a8bcd9dc57e3a3bafce57a878062ab0c7112ea5 -0x4ece5ec7ba7545ecfab6515e1c8a1d270b6373d76472396a18437a88d56f1d0a -0x1f5864aa822a3b5d69b32fa01e901fb0ff8c051fa6c597a7fc2c06dafae39c28 -0xa141643ed416616be9b74e76087556718cdceed683cb28f3aec318187df3a7ba -0x089e4d7a4e554f7dd8de1615c048b8624a49b39e13a4bfebae373d8b2a72ac00 -0x33fcf4d36f37c992b276409a948df567303e308ae56e5a407e0ac6a067abe840 -0x3e329dae52498f1bc2b87f13a1d6a7dcd258adcca9c5470443a13d181f833a31 -0x1cf8d19bb80ae02982e6919e8b3da4c73bc8a23d553bd90b84a4422f33ffc171 -0xcc779b4722cc7118e9d7564add0d8ae2436427cec270bdf30678c4f1f444b001 -0x23925c4423087e1458762792f9efd39cccf92eee097a5aee099d603a75ffc21f -0x6f5b52184af5558fccb805f11de5e79c3db5d4f20fdfd08924fb26cb95e8e25d -0xec4933aba95a598caf5d20b0b29120f2e4a6658c5523c5795d3f1c36b3c251c4 -0x79718be620f496baa73e3ab786786225cc2eb05dcbdb5851660ed30d38adce83 -0x6b5d96896d916ddf1f2a9ac297f567accf1c24c1c502a28e1092c4759acf95f0 -0xd761cfeb2fe6532d3f0f7fbdd1910e545eb14be27961b513bc503488637cc1f5 -0x5821dc0553c29c76bcdcb7e47716b3f0f86e76ddcf90b1f00e8e39b4e31643e0 -0xafa3372f4ca615611fc161cd4b8b3784f54e0926ea33f4fd834e3f7057aa07c5 -0x5adf6d1fde2b7cb4af4bb7608a899d283d5479769a244f1662b89924586944aa -0x8a03753dc797dda2290c99e710322a81d2801dc998594588d92a9e5fdd50e3f1 -0xd082dd03cc1b00d8b93cfa53a8cc8dfc313283b8b0f96110a0122fb40958bf14 -0x2655c9e6d21192200261f623b1f17bc5ecb40fa529ee276ee02e15c319c84900 -0x702aa814d483208b83e50aa88afae914879d8604bbb82cf5ee5bbe0ea22d74f1 -0xf2f12fa19b256d6794614912d3e3db0e6a2421c4cd2794986411f1cbc43a34e8 -0x7dc96b45b5b18746a377a805ee4692f33d42b2f747d08840a274011423ff483b -0x093a1bccbf5e71548364f28212b721c7f323d85de17577a8f9d13e395319f041 -0x87126dc8895016a0365714e6814ece10e6caf26ea3ec1f6672a018c5dc8aeaa8 -0xa4fba435cfecc7b1d3ed3b85e27780b9f33edcfd9b32291e7bdab665f4572c5c -0x358842df48cee547f3633cdeae1785823f729c6b999452fbee678af3e881bb62 -0x8b25a9602cce0ec287e99dd8c886b08887e6af5217784c628c133738f6c7a165 -0x91a378fbeaef48e411e33c5e29af9956b09c1d6328e698ee910271689ad0c6f6 -0x84ef43ed3a09d2ea19b58e3585b7c6fd133ab13b7ae36cf4603b80a99a452a99 -0xb33743bcd9631c4f4378f7f03e7dc8a47f1d7f8b187ad933a3f931fde7546fb8 -0x8f673421581ef3a1a1b91e45a326ec708d257446bd2c42ab5dc05b5f6dae8aa8 -0x1c550bb887753594ca3a11d2db89a36e1e5cd1a4087279ad1513800aad7aa0c7 -0xf7747ee8e3516209d78994c9dded44b9d97186c31a04c3df8c983143e93304cd -0x26639e23f9e9193e8f1e484d8880cdd3a0f158ca2cb19e1aa4e7df27cc492433 -0x5138859d4e0881c50bade00f00eda19f4e698134668841cfec8906f27b1aed59 -0xc85a3e8df812283bdcf59ef657954bd6bfcc3cf9d27de5a2a34065eec881fa81 -0xa8df112c428caf8a3fe90476f6f83d4a69d2e10c41e610322a9a6046a91ed208 -0x2628ea1910caaa2a65bf6c970155e7177b4df7ce514556a0549e1c06e29e77a8 -0xb2d88c22c17f1c2d6c5e109a91b9a2261b7c8dc6253107162d4f2876982326b5 -0x2344af2bd23643d6921e8adaeb45de92f8cee7694ce5aed7f33753cf07c5b9d0 -0xbf90384197e816f781ac213f48858d0f56421dda18c88409f707008fc2324cdd -0x12af434bfe23ed06ab694d668cfeceb42cd653b10a39cb5dc2d220a76824ef38 -0x0fc9c778bef7792a72925262b101021f22f0e798561b31372a45bb2b8d0736fc -0xac5ec920572f5e5aa2b115df9ffd221a391bccd34d73ed002e66c31e73d2b238 -0x5b909538edbe1f167e173b094811c2303d1752d28af7ed691726d4b9eb22182f -0xeb7199566ac84294ea6fe959baf8a4232912bf4956dcaee8e1ba2442fec54900 -0xe9cdad22d946a341a4327b64202c730478809b4d4cd248427d93a02429aea089 -0x1ed060287b1a244160bc7b59c79b6e45ec61be5d8e3e65105e748b532a58c5f6 -0x6afd6bae2c4cb6e640f59dc6984c26bf0f37c15452036ae81f2edd990a696eaf -0x0a324c9deb9a6d32aa7338944e9ad706fbbe99800e1eb340b6bc6675d73f2f37 -0xb25b637b814661626b6699aa40225f22abd88c312577900f00a9ccd57c9d49f0 -0x5d14217c87f264b2f05d8297fa7d8d17c435b878f6c54216e9b4dd8bbfea29b1 -0x730d8ef14e5ecf8a31e42a3f3ad44f020fa42b73b51cdbd73a5e40bf0a2c15e8 -0xa387d22f58bbf19eae354b2de3cb76d92750b900274901da3380228e5e574a33 -0x4b9219bc2d7f9aa687855e055ec5503a69882a0fd2d77721d500774cb5be89f4 -0xb349e7b1cf7879672bf4a8abc73bd1f4c1104710d2c4b380cad6cc6d40ff5717 -0xe6b7a955c67b84759d4d1d5392436c53535a4ae5420dc7dceaf695d77b13a5f4 -0xff10bcdc1f726b562f66857303add6eb2e7fcb0a3c897dee1d0ee89f2e760d32 -0xd96a9fa116ec22c9bfd7698b80646a5d7b676a8a292ebcd285d4855b91242079 -0xd49fbc31c93953c1e13807828b146e7caea45cd5a8ce18fcaa14a157b2305700 -0x27c417a87a1469a37fa1be17759a6e2798b703a655eb0403fb3ef3518c15e6d7 -0x22c4afcda4f029c3dfff250711d9744fafc2965996b197e705c8c244ad745940 -0x07957ff2b642c6cea3fcc1af4ed400644339edcdddec03aad1fbf1e1c5f37543 -0xcb3b5bde6ab4ef7d9e80c1108ca81d7ff0b46e5d9086cb85e7a7cca36e16bd03 -0x494ab148302e7b6bfa8a8efb42b06e429b1facf5f1f2db648ac5e5ecfd9e485b -0xb9b2600558143eae3e5fc181f0f576797a8a66577a7d0c1e4fcf4f5a7eacc030 -0xf5a144ba0731da925e38679d89f071e020592778dd8d06c2d52ee2964e9f17c7 -0x48d8c2408392bd072041ed83b08ca292de73d621f3d80025cddf5da4cea83189 -0x5b8cbd2e0f52720f743ae4ce5535268d305b5c07eaf2b94236448e22e6b596c7 -0x20b3eb85bf2cbe07d6b3aaa353d14adb61152c93d47de7627e5f7379a7dc5dd3 -0x1f17d736c60c07088425bba2c3a4f79e1fa1484bf332d7c21fb448397aeb1c5b -0xb65f3a5d0c8fc98a1522db447904f353fc5345a3fab0af595cbc7a41bcb2d705 -0xd66819c76717d0624cf1d0ce7f46616dc6dd8dd861bd7d7cfca4dd78742bbf1c -0xc4dc195f539d048a422d862b4487ac0771eb6bf98a954709728ddb2300c71d05 -0xbd0847df01c8b0602629718302f07869dc4238e9c5d2bdf00a5ef367304e303f -0x0c33b254311215219110e833ddf4edd832b85dfb0d551f93ad82fbd2e99bb52a -0xd8b1a9b55f30bb1d28668da85b83602a8f1a2b7a1f56fe134536cd0bf1a9a953 -0x56604bf0526dc40e28bdef6ddb5509b33b806c1feaa3fd6c7fe51d0de0329d1e -0xef81f3c9159d48965dfd4429b3eac659fef50d5bf193480fb594521c66b1cba5 -0x90dcc5e851e885a85c1916f07371189d2ed53b3de0f1cb2b8b8e2542e0cef9f9 -0xd96c4eae6c1fef2e125b697b2cf2605be954ea462f08e05741a09b963bcca5f8 -0x8ab06638aa9a661a1e40b30b106e8aea6eaca17f93d102b0c46c2d21d1c64057 -0xa1bfa4763dd5b3dba9c6750c2c969834ee00120d33700f34dfcd7cc1dd294e1e -0xebe2682998d203fcc82db331223f0a9b26c609482b52e57a8aee751a71fbf4bd -0xc453929f6bba7f9403faf0a8126f94f1399e923f636d39cc7e8cf69047645be7 -0xf0309e78a688647d2c0d85d646d8c6ad0116677350b2c8c68789fe5af4eacc0a -0xe39c8adee232fa7f2d0f6eb8f796ea94dc06ec831e585f2acdbe4bf8fa48b5e0 -0x43e38b6676e5e4954751e243518daa12d73162eb7427bc4124686d6e1a078bc8 -0xce368fff20578cedc3ba598af617e452a3a6f5bb43b76e0884d02e6839d34116 -0xeb62e039398e57f77fb471a10adba6826a3d5f7ab3344035766a29681918913b -0x64a50fae759c286b9422b3b255075654f2396509dcf407d8b9defb22495c8b92 -0x5eac1d84b2031ad10677e8a668d3889c317f6c9ed50f2f521a193ff04239179c -0x74d4487ce5dd208710fc0bf81e086908abb1c9ecec25c22cf34a8231816bdfa0 -0x1f83183c79ef0851212bd8b79c3fd5d9c2b8295c0ab29b6ea96a838dae19f663 -0x9f993dce38ea01148e330e51e2a3e6a730aa173f57515ef4d4dfb282c5636aad -0x3ff9d036a1c1292234c4d8e87b650a2c63b0e23bf89521aecab230c84dfa30c6 -0xdc049a44b5697b13a460ea23f39f4b7e154d7214781f2335e32c271b3db0a1f3 -0xf147714c136db54fee5114723e4b469820e093c59a701286a3fd6b8175d9ba09 -0x1ddee133449840f29738225a215ec9afc31662b6b8cc2599192e4c9dbd7bc7e9 -0x2f41ae815274260cfcf8101ff57c43b4dd247f4265deb9aa55180d1678e9a08c -0x7748c8b91da40477469fcfc1db03818d0fc1e703dfd7b6678f986dde8fc61a94 -0xa33954e03ae4aa6390cd9e8387e9da14a2e602c17ec140fb777f5c46c0688126 -0x04f3234430723ea76dacf0cb9ce268743beb7da8a3bf21d73fe25a91d51eb98b -0xc5374c873026c91df230752fa7aeea85f63c6a134923ec247e62228de3381bce -0x7c3793a1a08b501ca43a468f40e1b135e0f491cd48215c340c46374a237696df -0x57eb5f75892fc9fd890c4b7ac01a5c4540ac1382cd9c219dc4b4ef364fa54b62 -0xa0b7c8578b149b85d07d1d6c167b4b1dfc767a4330f2c2eba9326ffde54a81fc -0xa04229ae2fe9605d0df18cadb739bd258bfc8f4ab63a55454f3024a9d301f426 -0x6671dbe469388717e3ceb37ffda08c335729eecdc07923d09a1c278c5726b93f -0x459927193fb4f04cc7260f98b8cb661e1670794fe36d224e0b5ba2a9adb56770 -0x72756a92c40c74b91e0c8d3c545ae444fe6ea932e50d5b9010f74bbaac3b57d5 -0x16641d0dda1f1f2799d8089fa5ede4ea366b75f6ea2892f1285cb60297610431 -0x60de8e15957dfd2839676b6eaf95fe01bd711c1463357556dd4beea2d043532c -0x4a05dd6dfce12c1d7a9cae0946edececfbb89d07a61ca0a251007af4389f54cc -0x29f21e894b7a2bf255040e16fdd222186ee60efbc3c050d580cbe4b1b8deaf43 -0x5562f26f7fe9ad353cf2f9fe16c014f41dede61e306ade581ea50e0b1ead3793 -0x9b74a1ee58875a842a99f0ee9736210f7e55fe0cafa5565a0ebc185ac48cb6fe -0x58c2b949729ea546a980664c5f520d28962e0f71451f4086e497d1fea4b06850 -0x1da429ab1e48bffe5e408a70123b0c1cf767d2f2d802eef59e94eec7b4afc29a -0x49cc7660f07de495e8bcf18a1f3fd6300ab32fe889d4c09f2344caf07dd2f7ef -0xda630096aefe3ea9b1ee1430b563cb9c51c8fd0793df17a0d25ef39d2bef2087 -0x8e1089750c3495b4741ac8ed56522d1fd132ed2b15488152e2460bda8e68cef6 -0x6d0583f040d3fd7d10389a08618ad47189325ef78789b5ce0570c53d3e88b49a -0xd0cf1b31add7797f26d5214c9205c615227343be1a4a68ba2eae831a05c4de21 -0x1d17d8e103e454cf7917ed6b5e2ab6c926efca01596df8ffea4a5fc80624b64f -0x1690532e4d7c68e2e405d51a61b8331fcf21ba5cfb25297c673d88b6aab1c88c -0x171858c8cbcf53857f2f8fcd1dddf3c762d09064d11c321507d67b847b2a01ee -0xb0df843df6246cab3c655abf713a96bf676bf8811800c9a32d68416a5e44ffc2 -0x2cb8c18443bdae7b81278db8367a90ab51cd5cca9d9c759dde201106da1fc6c5 -0x4afd4fedd89c7ed2644a954f86190b6067567c68dfefdb5de7e9524fb32332e1 -0x4b69a94cb7107e6d9a1b30ab0df73e089ed06eaf16f3b4cb191a028c8cfbc053 -0xf940eb3cf94e19a91f3c10c35bd729c2a0f4637a3c23df6ffb6f67abbb69c88a -0x3689d1a26d6b48a5b0b5505f63ca94ab121c9022d121cdd2db34ad1fe5ce7d5f -0x45944b4d2b302e5f06024bb50352bef6fa86ba1a78c02bd2cf73d050da7fc7f1 -0xf316e02b71ba69fa81480c7b30149f74639af6514fa82a04dc9607efd3e70a28 -0x7682f29c518d9ad8661bb09e2b80de0d3cf162071a7225f563d7d1a4956125b4 -0x8d6aac611f62bf76a908d9e82c20a68ee12ce80f28725c955f44a7e250c3eca7 -0xc75156a70ae319b996d641cfc6dd6c15de9a45a60d0ec6a8c4655d4c2c3e7102 -0xdc821ea82f62e3ae3d4b0d8cb23dcd467c3cb84c733fa7311168c3ffbb19031e -0x01b7518a54f507bfc741d316297cafc0da055abd2ea4eb519b3cc69b72d33c0f -0x0add13b5832de2868410d245c915662ea208cd7141ffe6eaaac80efb0e7708e9 -0x61ff483545a8166cbe6e2d4dbe51f82abb699de512131cb66352ebca97b4ef30 -0xd1e82cec8eed879c98332df99dfbe5381fe8020cfbf39672bd1582f17524af24 -0xab07e71ad37fb5c1ee5bc4fe22f01a3609e425609de0462a9cab99a5f3080f57 -0xb8f7115fa1ea03ce488376197d7cbfe17f4b6225b30bf3b036991963c319040d -0x447d0b50216ada59d0dd1fa5abdcb76aa94ae380346fb86809ef26abc8d112c1 -0xee599120d5261806eb4690d004e28e4580d16e80dcbdea64e0ed1d8c5e1b2cb5 -0xf722de308da37213e3279ed88973598ec590cc4c1f0c2485b4075eb6af6cad09 -0x4d64aacaff095d8697a542905fef590ffbe587c6bffe14fa90fafda34726fada -0x2a9131bce98a32cb68e889786d4c954c9ba33dc81e5c65ef2255d6c4c8c4eacc -0xc85fd1f584bfd33e8f6163a002deca89b05e0b21ccf49bb0bb4ef4465621f7ee -0x7150206b215d8a173be77505b46f5f1239e4561063626309357ef454f80a5be1 -0x36f51b288995e09b661a2f0d12588079599a65a5ff7b176c6c44d24e1c22378d -0xcf4b86261832e41190fba7ad8b310d6e589492146147a1737ec37c5400d47f7a -0xfc4b8b103c67f3227cecadd4689d050df997fae7ccae845d23f3b23d6d3905f8 -0xb102ed511bbdff7c91ac1279eb5e58c31129da3463105a78a8c26406ab37f0fe -0x2d5b5b06716b61885e902cc1a8de71f29d6d783eee422dd426536f9ede323cc0 -0x36f4b50c9090ce343743fc1194b8a1fbc65035f7183806f33febd4c0ad4daf9d -0xe151e894559023005696bd21ca7b051fd6161934513c8f5be2544121dec15785 -0xb47a9ed2aff443028b4c7e5741549fd60fa37ebc74c83884267c142c555575c6 -0xb39a10385b7548974e17ed135b4694835f18693706dfa3568aa79d7b54a45b09 -0xe25724628b551bedc22fabfd6e1ddbf1b1c078b1337e83c5fb20fd585cdf032f -0xe6ff2e43003004cc1682fa1d15fe9db5df765cf30b1da162c5718c1a100d3478 -0xa4e0fa822c97dc1bd30524e40873ad80a96bace9e52f28a5711c981b7c102633 -0x03796df47aaa77b67f860493bc09acaa9869ed9ecc507f10712ea29c6ca16a6c -0xe7d741150ae2776ce0ab953f0a33823cec04841dca111277309414dcfc45a8a5 -0xc259e4b34d9a29b345c086008e43aa7172f12b136e716b8add8b2c2451797048 -0x304f00f369af58229774b55ed3e73034a560afb7a72bbf292a9ae2b3e085f471 -0x4bce0429c719e3f26a9de2fd8a4c2111590f48c098651334857f0e816ad18c03 -0x66e2a967444458582766c50e7f792110da353fece0b17af3dbf049131f6828dd -0x55d46e011496cefd7479e4511a8dd3d63e57e8c6328c987e25b62c774e7c4739 -0x8d5b06a453c351dbba8cd5934a3cf09c398f45d8bdaa5192fe9c5d1527911087 -0x86885ca4d9f3f29976e2eef7983b83043780a66ea55a09b31bbe1b4956b23ab8 -0x5f2602472e9990d0f0aae6f6a9b5e577c995b76271bb38c9147d75abdb27af53 -0x2b0d0cc6edb235c276968b6e7ff6c258a4923d4adbf08630a82e42d7ec1f9dc5 -0x4a804cea0089b9da46dc92a4cfe9b3d49f9631bb987573988badecf085d40773 -0x07b2855c50b5e80eba068cd9c844ed53e3060ae74f105e1829b04b838c3f091a -0x99ce24e943f9f325bb3e5977c8cbd6853c413cd113387465013fef3d3b0fa95b -0x5392cc92d38e46526cbd349d5baad4244d406664fb0726dd701477c8f7bf6354 -0x1c1f2109df1ead33b0a10b5fad562b121c73fd725f6bdef11d976ac28fafded2 -0x322bbf14efe3973e81d54c9afd7ccec65ac051e51a9dc4d935a6180c701db599 -0xab5ab96253f5326bb03584bc58ad7a996ebf54448cf94b9c2aa006d3571bf3d3 -0x7626117a253902720e78598c300e8cb06cac9c98c58f78e608cad3299856a20f -0x14a6f5074deaefe408f4cfb20135732e0ee395431d0df0664e5c20ce2c3330f6 -0x392189a7416780850bc6a1ce01f02457ff92efb2ba71e98c943553efa78bf698 -0xdf9c1953a24862eb0900a8ead8d9c2f73a792e60538ff25f32100c4a54604b6d -0x79173a601d651a1b11b9d049d69f89108080a89b808e4b812cf208257b52cd76 -0xd3484b776285902247dd82315a8eea568af075e41e89d785e03ef5fc3840c4e3 -0x8afdfb56ef2b3da578532735d7d90a7a3719e97fc8cc5bb71ab9cce24a44970f -0x23e1071c7b4a5afbc67f79ceda4fca93f478d75f36c351abf3dfa1fd2f04dbc9 -0xd8db03212d9e0f4eabed995f47bb14e07d9b3d937dd0669e6e47004a724da153 -0x60e331c8b0bb88e4150cb39e8e678f831a9c7e313cd475426af83029607d8529 -0xeaf75d6513d1796ea0533fbeb5d0d0641e618b8b3090bf0482ef7b4a18e7ab1b -0xa6bebe613afd99cde229f538030f60c484f8c2cc9479bf56dab6f6e893df4d96 -0xc050c330dab7dcbf6df33193a8a79d69820e858e8eb9db49294e053d1e759c7a -0x584d1df44ccdd0939713fa758d11f5a0ee346b068fd26882b20c024032e22f58 -0x49d686e02cf27864f23678a6fea8ab5d026a2278e417aeb9a98ad06d8c50f089 -0x63e6651285d6f2769a42478edb524a7f9e5fae3dcb3875fb9e38e8f657ea902f -0xd6824689cbc66c33ca326f32f085f2068611b3c5a656c442998f17d058a82b78 -0x7fe20485cb58a75011ee1e54ac110e8fcf609ea3b3630fa69a13b7eae85c13e0 -0x51f01f252b38074dec242c9783d92c32badaed60c31abe757aca3170e73b9abd -0xb227941cadc88dd592575fe6edce3add44eea37ed8e2e899461c2ac6953395e5 -0x97ab38f4657d79c8852f1691ee232252621580d267ea8df7f9481385aeec03cc -0x2c344a1afcafc0ad9d2e62510d4a655d362a7ba84c4c7f889a017332b4a7f8a1 -0xd74ebf94848e06f326b5c01af8e7cacd251f363eb53c99a7442b0f177eab73c7 -0x5aadfd6ef2f49a04129514393c2e36faa8829a439b2a690c21d336369d92d38e -0x06bb9a9f5ac27eb8cee2b914807c5600e14e9b369aec4d47172581f61d4f4ee4 -0x2976938447b499b40915ec6dc6b72946d2f7b7457bd84211a43549d4fe6acf85 -0xfb6b84cd52d92f5fdb5437e46e2776724f91898728d3d073d2f50d0dc61de03f -0xea08a9f98e8509dd59437da3fe4c2d929ede23603babeef6148be81443c219e6 -0x5ac78603fa3492dcbda115494a3bedcbff5738e9a4bed6aa11345b3419a11610 -0x4de85e131b384dbcbc63e22d67b65354a907a8c33bffa8137af166917221d9c3 -0x80554250dc0945f613fe46deeddf17d36d21c31f19d50e3a45d775c47e84d3c9 -0xa36ef34fa5db8475415c8b1bff4090dd97a0ac184e2016078f02c660d20741e8 -0x46871091736c7a5a329a9a852e64254984e6c20496b4bb2ceb282d54cbce467b -0x017ff4aa62dee20954ee430f673e66d46255234b5da92d27364a5a2f966f6c1b -0x17d75e44ccf5c9e4a832fd612f7955fa0e6d53ec796fdd7b63a13cb48999c2d3 -0x85c1342fcdc4fff579a13b9a92fcf477343b88e5d2aebc13e209a7ba07fdd8b7 -0x154e1491b34f5ec754174f05a538816b7bbf81817eccde92a642989f9bde9093 -0x63359889c1a6ccbae20c0d9a6cdc3cb1d9e86a4a0df241d959879d08d9c88530 -0x8ceac610d82e694310ae2a09bc3423889f591dd7c86707d611da67c4b9f83fdf -0xd74eeb13b3673c28b3a43bd9e05ac1ef135f7afbda0fefce6a953ae68e0c7ff0 -0xd5e204c2f787527b63346ee1600b55b8abd435c2363621a46089e23014d8bd34 -0xea89b63dadbca16aa151235eed2a662212048be031a6df68fd577406b2973e7d -0x35e16696ff25def1cf0c693cef1a974352d44160862d35442407c61110f3302d -0xbe7b4d729d67b3c037c12a6ab5bf3b85cbde03f0e674968b34f172fddfd95a8e -0xdb30b77371d3efa972e19ab8847469bb32927bbace94ef2fe27ec9a048027e57 -0x075010a501d5289b67b1a142ac86385ddded568b04b2d9f9fb88ac1c722c1e58 -0xa1e55e08337acb0d4d7c17460933a222b61bebc568ef9554ade4fa2a54bbf19e -0xaf72d5a9997d2062e70e7087160d90de7d7c58a0939c7097a0ac0a9268d7d242 -0x5265544036cd001f68821fa443d59c7254110cdb871b6239a0bdf9c85867ec3a -0x86c5642374b5cc58a831b302c3267b640199d108505a37d0b9c92c7d9154c5dd -0x6ebfc8778a329970acbd263333b0cbb9ad8f36e89d5b4d3ac3431d0e8aeb056f -0x1de8d0f448f1aa670a5e27aaf3ef251db11399632722415cfa7add595cc70d1e -0xeeb68343507a8027edb1c166d40ec5eec7f89b46b001166cad4738293043313f -0xb790852295532fc78abc1381d9c1a430f2f952fcd2f1d662e8914a3ba1c55704 -0xab5f36f910dca9f49912aa6c6f03c36ff8bf642fce8f06419c3c4df7209b6ce3 -0xd3eed7f551e3717bc3635b63a4c60236efc2611600fd9209b0d8003e4ef246f4 -0x6d444faae1c87996d3386a4846279856abcc3baf99212ad0f8cd170956ee42e0 -0x7cf3ab2fb14c53d91b4371c413ae1af915a223ade1ecaec2c9a4a2883dce478a -0x0d7066450fa20a11e801877747ad8af7bf011378eb70bf876b2b08ed7ec0df4f -0xb6b20d039ffed547b91f582d5d0431f24ac07f679740c1e7caa893b6a75a2b2a -0x6642196960a07a5ce985940bc25f052bbeb1e3a48737a3805e8f685f513551d3 -0xc2d08286e2cf04deafae4260ea7660a36305a4679dfb7ac83f472496f1afd98c -0x3264e0e3092d0a9d7c11441d917ae80f254b3847925bc20a02451f8ac463d030 -0xbcfadb5557bc4d6ab73fd88ecbf70225a1a192a362f5198062737ba9fededc8c -0xd86aff73d0e38cc74502f21d33e7af67dd64354edbfb30e5d983e76068a589e8 -0x3301660e49407eabda70c277c4a5520d2e76affe0afeec6c81a5e19cb808b4d9 -0x230bd72e64e72b8996ae75ac425db1fa0b7c328c14b4d7114d6f7172e488cd58 -0xb4f8c7a958d529544ae1dadd2e30ec89e5c2b7bbc82678147ffd84f0ead81175 -0x065abf10c8dfc9ea8ebc41b758fd5ba1da4c71f47173749bf8411e5d2198062e -0x0c148f110363ee3b563b0d9206f1be83b6cd3d5dcc9f9b5beb860a2b6b41effe -0xef7a573b88a103f36accf71a9c3d43df2548c74d8d0cd96d21833f55a2715b6b -0x3be930abe8f369269101e3709c25c67ed7faf6da11441e60b48557159ec2712c -0xa489dd267c473fc9a23074a5866231cb68de0cf951c264142813f4e8a20af294 -0x5da37bf3155a6de9ba655576b93a5dbeaa81ab60b58cf8b7bc5f617548e9f63f -0xdf8e5aa652d921f881a1e9be3f5e34f6c2ba3421be6b27268c8bcade1560f55a -0xba8cd349ff2344b09ba663fd21ffc1b04269153bad44124c5dc9b8d566dc0ad9 -0x82e2381986b33224dbab7cdb39ce03267b714f01b338963f259f24f377aceac6 -0xa01b6a06e847c12df0a8ef3eabc4a1b937dd34d8b0c2964bd2e94012577956bb -0x1da53ac8f404070ed2359d9482a27d8afa3f7d725477121259578890f3a29881 -0x33e61d0384508a6cd23e804123222cf541639fc0242f597c60f339ab15a10988 -0x6db91f97500c7596b2b02786d242745adda8070028797bbb91fa4f83f4f61be9 -0x4dcdbd68ae0720f6ad2259e0f9e530c96a238d149dca71ca5a8c068eb136c5fb -0x1e428a2a37f5b7f7bda6d482b05d126c15c5278bf1a3b271b4a72a0fdcd36947 -0x62bde613c5caefaeec124ec573287c04411f773eddb900fd8676a8956ca2d7ac -0x61a5ce233c44a149cc3c7b4781666ff90c245981c5cdccc04697e81dd70bfcf7 -0x24ea2d70d2fc0d8cb44ce98b98ae0416fddfdcc8ded87fd8b01b3c08aa20ab00 -0xba66d90a983204c6ed995353f39a9b3b227ec7a16ad13ab11fedec94a3ee6c52 -0x21db471dacca02f5e1655c83d3de3d69214649010e28799662fff91c6928e64b -0x839d96a550e24cd797f22713d746b60490323bffbce3d884759184bcaadce3be -0xe9b6d65ce9a8f5a04430c05d11e78b02ffe0a08c9a96f934fee0a8d5ff0131b8 -0x90c9505e9896b0fb2de830a3f48fdcaa08a81c8d9048df02f572e5257f8a6663 -0xf87a5f066b5d637bf9c27824ad7fcfc58d32ff96eb4aa4bf2d196b53eda543ac -0xbce1c45038290407145df79ab859d1552760b647d98346bedf521d4019da59af -0xecbdf024f15c7da69216c9437a73978b592260d69996190afcf07d8ca0ae1dc2 -0xcecc8d96ffe225e8912ca8df101f052f6d9b16db2d49124e729b2eba4730ad89 -0x5f8cc8b7ea0bbaa29f7f437dd0482ce4a20335f2f1fd623bf2f171d21509b766 -0x60760644ce367b1334ef7fb2cdae1eae9f35429d5c71e2f7ba88d1845d15f6bd -0xd5f76ae6fbeabb42d0eb4274db3fafe5ba49c0dba8b45b7ac9f2103458c69f5d -0xed045cc500cddfe951f1e353a0fb579e1fa3230a957c7e7ab8a43a826aad7c12 -0x6646732709a3b2f7afb8cbb8b11684dc3f8364115462624bdd84b4ebc3171dae -0xc794518c854b789a44edc85f4d9e9b5df9e85f23e4ddf943d319dd0dcca1d156 -0x13add2aa3aa9a692eb149dc5226abb91ac10b726f70605551e6f788d1bc89433 -0x03c904109001a7807051f5dabc1ba0fe1574eab7decf84068f0b92cbf1258bfc -0xd642b519ab2424fbc2b6004ef8d5297d24f7a71291fa136a5e85d7210cc68fbe -0x32a1012fdb298b2f057590d06ff3849e54d64c6660972a95114c787961718ea9 -0x546745b393cf3870a500f628d8ffa1842d26d01d9d74855a8aea3d90f24d67ba -0x2747a2eb650c76019dc185a77a9edf2140392bb2863eedf5c020b54e35193315 -0x2bade900ded1a15e796d48917e4b6a676aee148782e4c756a2b4f1ffb03bef6d -0xb62ae0e3908f15c1d33d04d1c6303bede869e251f2e11677068249f289740f1e -0x4f8b00804785686154245db7b3e322e68174af63a4d95d6d2c1cb6d968c9a344 -0xaa1cbc337652d01546632b2bcc840ef0637e5ee3ad7bd721d342a89f7df3e605 -0xf18419e46831206b1cb67c59e4b4074ab40f7e3ccebcb42b21c714c614f22630 -0xeca337b444e45179033f41ecfc7bec5ae77b31f7a7820e3e9b541f431d6edc76 -0xdeaaf8d2dc3c137467b5d1d81ac44ab3f8a325292e699c4c97c96fa8316cb2da -0xdb32875cb52d3aaf67cc9f9405a60b462971fa427054ef37106ba2785cb50166 -0xf46c238cc34d3feb73bb4b67d098b0c117eacd037cee09356c36684b0081f517 -0x440840f21ba84a8f1e842ddea0d6ceba0cf274e9d2929ed255e6ef4bec7d2b0e -0x18a12d0433c85c9ab456ebcc960b9f7e8bd8fcd1cade5422c22d906bed323bf4 -0x93cb0a51212f256fed4fb7516a969f6085abd99e42c15a1a90420b469e93ed9a -0x90874e7e66bf2861a0af35185d3dabb95f1c67579005e2fec31a35c8cd6934cc -0xc8bd463bbea22e9cad40594c2d48f8497ad28106401fc3e798a6b961e866b98f -0x3136508476467978c3a482c7c96d6bfc456af8c529176abda4b2b8cded888212 -0xcb03782d6a71231fb0875c23febb83fcd85965687392908d4e57ffcefcf17b20 -0xfbd823ffbbbb32dc3ba9fdf17fa9ad4afa0c0a57cc8206fe520e0d1c69156848 -0x7474b50b0d62d87ece3f46e519b758f5bb8c4e1692d093bc17d84d723751521a -0x0e5799e6b425f51ac4d91f77aa898fa3d2fc90fbc6eca23577af248bc66e3b3f -0x1c0bed4deb0eceef02a54105c5ffeb8cfe6741dc3066e34346e690af5633716d -0x5adb3b9c1f24688f98afb321c63b9a681de8691f2d5437f3446655ebd737c7fa -0x7aeb527a8b401ec03dd2c4364991f35244cf3530f92b8af30a91f6c5571f8d4e -0xd8b9530e27267a0ef6bcd4b8823347ce3014e8444e3140672151a291a6a15368 -0x0e197584a97f896766b9b55d66c8f1444d1c4f16ba067dc648ccec29a2d65ba8 -0x80ac85e7241aee8c87d562b14d5698648a68139ec8ff36a0c732e3ff04c62687 -0x9b553fe5ab3a2453c9789782a235ce53eab4652c1967c530ec9269df45109f0a -0x377d81b9e6c470dbe4bd20a4ca86ef523d779ea4a4b0b63199965a17a3b40fd7 -0x0cadf4483fe86f613519a20084220e0224e163ec066869d157d0475bf124aa5e -0xd08b590fdef04d48929b3394e06cf128486e7a1f47c0eb6d4bf5d81e9c5a54ff -0x34979ba6fb32936ddbc2df732f65048a1592e70feef1d266e6a825ac7366a7f8 -0xff28b6b99739031d08bce7da1dff8d36d2ab2442467405b44c53a00d608eb121 -0x4a238397f9bb154649658483356f1dcddede32d978ffc726459cf5f09822d930 -0xb0c03ec5c660b17291e4c223600c57ac3b50e221d62e85456a6b5a85fc66e417 -0xc3d287f47beacbea43bfc44f89e03980d9fbe3eef78e9ad4e5d3b7912680dc0e -0x60fa0e4143e4971ff7ac37b4adc97841840adfb2599f581e4b19533e94cb9c23 -0x9e92396473099cafff8f5ed065b1f49f70f413f7a921aef006d8f48a56510480 -0xc2f3fe0bd79c4a161e37ae286fb3c3b77703a2197c4b16df8c132630e8ac6b26 -0xe5234c2f8639e972961add5b5f4905d40036a535a76e90a8ff4a8ae8b063629b -0x45d028595fff268868e831957df64f6d1156b4589397958d80154004b78ef96c -0x5f85c6285821f27a849e3c652e0801c50996c7d71668f95ddc1c15bb8672ee43 -0x0e6fff71ab02da31cec8074287d82690d326c0fadf6b939872477fcca984f557 -0xfdea0cbed09d7f68e71eb008006592e8bcb7b2c89155d81bd0954b51deac3922 -0x2c009e172e6e1d4f7b20b01ce4a3578632251b8a9745f94c5d66788748faff0b -0x1aba718f79b77df235ea843ac15bfc01f640309f2224cc598c5a5e5dd79f00ab -0x203befce0dc9a466e6d267ae7d7b2ee41a7de8b20ff72f077ebfae3dbe4341ac -0x201e8dcfde2455378cf7e628f8ad86cb64674743653dd7cefa556cdb3f262910 -0x0dda7ec76b918889030065ba8aa7999cca2a0ad9e3d5c12376bf3c29a3d38c29 -0x0476432285098920ca12c5cc2051cbb948c4c5a3b428aafb7a0436ac891c0966 -0xe218345e3fadead9a2291ef576d76aa6f00bd6a8d16926b7f7c1ea6cd1dd1981 -0xf25332c39bf80296c10455e8170234d6ac9710a0c3364ccbb1748aaa4551fb72 -0xff07e5328352c4a85ecb0a422cb563ecfb1a7b3edf423ec94c5d814d6828afac -0xb46c9801f7d2f3824e543f55e6f4d2265505ef1e9924fcbc9bf8ba6d34eb86d6 -0x3e956279465701a9c0f3fcb3b60bedf2efd1f5de8b773517c6c1f2da920bd3b9 -0x5ebe19e0a98858e947dd9048d43079ed4fef89a1e61c7148c19ced5aeeb11523 -0x749ff88a008825c2715875f0943b7754757388652795556d1121681aff052e1a -0x21b2987f4943e9cfe1e9a37b1568977ea8e22abd4b4125a80049991893733c77 -0x297c7aed66a08931db70e4c94d645cac44fe3d6569b5ef82c394363bb3dd4b63 -0x2412cf892ee3e5c0cd5ec459815a8791364f4c2afe4d41e0477a0632c95b05f1 -0x2d08634efe80f881c335e8c85ccafbc008fd2820e653d11513a053dded3b9ad9 -0xc18e8390e7529feb268dda05e67c422399f7d72510d5449e041a39dc7a8a5d07 -0x45c7acefdd51b4fa7b483c8a891467fa23264be6b7c820d64cf907a7b45be44f -0x12fa2a1313f7949a5631a12694419b4aba7c4f40994e651f9c38a6fc247babec -0xc0a6c84f0764a2c3e3190ab753d7f5f6f173131a2177bbf7e8d1ccbe36c454a7 -0x0e9a3a8de4e414dd81890016a951863d2889dbcbe8f2f5c344ea3522db325e78 -0x123a6b3bfbdd1dec1bfd52eb389b7244bc1a6acc2a627eb4aef49aa47a249a01 -0x435c4a334c81808b3a4a0af51b360e358a06896b98421b72c80427d8e5474e6d -0x80cd55330d022013589dbc9135bcca3645d28cfcd5b06d5c7f8c920a68b3721e -0xbf6e91423dfa9ffa888ff65247adc96218ed8020c66ef00e252a1b62a2fd684f -0xe0e6afbd6d5378552c3c3712a0e1347ef4b1e054873acf0fcbf4cc1e20cd88d1 -0xeb78ba01fe5ec4036a198bb244bfbecca64baf58e6c03f7376b646306f1d9975 -0xa0dc50714e3af06fbeb665b55dfecc224ceaa9efb252e44a2007afe9dc1a311f -0xb86ac17fd076585475eae2ac8dc7ed26af987d0f3b50158123e1e0c5804932e3 -0xf686dd0e2bba6af6d0848fb3b9e381d12cc25c1f32fdabc88842bd90999166f3 -0x55d074c0c5f26f95c59fce8fa21b632533105d672cc556dce45a6c70bda05305 -0xf6f7b7be5e88b1aac473f10fb64e74a73e4beb75e6546e2f62fc467d8886d815 -0xa21ce9ad66e4f0e5f6ee96a26a8780de7fd6b086bbd04a978ac7ef5ba6c08401 -0xc8580ff60fb14712b793450ce72fb7959b3188ad7581d314c4905d8962e3b4fc -0xa391f89977e0c534bfdcec54dcc35232ff3acba8a8c4ca6fb6c1eb95f9efdaff -0xa62f3da9cc773245988417cf7eda35ffb7f0192ea094022439eb82f1cdc95d1b -0xf553149d181ac18af8888eb4341fd71e9fd2eace69a11ee432852c81e6fbd61a -0xfc0a273b11f6de89e4776383c534d92650f00eebc77aaa25f6d00bef8e966dc9 -0x25efe0524102b1cd1d0d73aaf062135a462aeeb0642e2658f16c27c6738a13ce -0x3e0c9f881ed48b7cd2b3d92e84216184d31c62da938d5860b9d13a57c474b461 -0xd8a69e4e0939b8547b3592c6a847780ebc48dba3ca7ef9bef1f6090ba1f222fe -0x71b73dd4fedef4abb23f4f73095bbdbafda364501ae408978084f3a2942b895c -0xb99ac4c39f96f2054b3ece9e6d02d7de76d3a827b811ecc084f7dbb17f1a40f3 -0xb5a8f1425272487d41f0f9259b74eba070f80f5f22c3a1a788660825bf4520e6 -0xf371768b7c7b1c04fcd15e4c5a103bb910ade9839cb19de460e2c7c019d0cc08 -0x1507fef4598353d56c762d55798c341b07ce071d8189f3451dd7c0959c9f6a91 -0xd4fe9977eeea7518a59485ba025b91d1ebc96ed055d91ed590d2121364890f49 -0xffc5cf967232426288e4f431a52dc72fe16d311e59c249ab4b7f8bc523d2a46a -0xbcf5df2c374ce29d743a34eb23d4994c66f986d8ba5571053283dae96f33dc87 -0x631878c751552208e8e56bc06f24e7e2d9769e8403f459bff268d85d55787949 -0x07c00896858d56280118b35c5e2707ed9ede3c17a5b30d02d1b408f99671a8ed -0x27bccdcbca57dcd4fd01dc113f4207f132bd4808189a06b041f77471c2174583 -0x4fe475f6514a957e22962cc27d7bbcaf83e1addf381fb3d6ca25b3f88f3956fd -0x20921bcab5a01e822114922eebda2f5fe3855eebf33d9731b1ec0bf1e4c419f1 -0x7a51ae9ed012b48da596e8829b3ebb41df9f73cff41f09979c7ea416a82372b3 -0x1d10889ee1a1e55fab48d1a8351e295b528d8bc49abccf950ea758a1c48949ca -0xbe2acff1011cb28274fc1357ff9c54a932ecf5f0819a0f8bc533d23118c865d5 -0x4bf73001d30ea129221ad42d851a8bf5271ffb4836c36460116671aa16753713 -0x94226e9b748d86b94081f88776601c1545fd4b3fd58cf629622cfb1a10672949 -0x61e13b40fe9b5ec5d25cb8aa59d3ff9feef3e877e4c281fe9137d75975d700b1 -0xefbbd63463d087e30e03b0610044b7d68d78587196611b7f6cab73b1f67c41a1 -0x6152b896b052a3ca964b46a07618ba55cedbd56825f4d63c12fe3c65e8063445 -0x202f776046f7f27c722bcade04207771ae38138a92cb81ac8dafd867c615e5c7 -0x7d09d0a5bf652c5f6946321042e452610c21f41a091fae386459418c1032d6f0 -0x183cc0679765dec4bd0582f5d0974d95e33532fbbda7b98a785c0dc0c5ae774b -0xa467f822c179bbe6bdc89bb6fe015f9c18b2ee105c943434cf339a5a3563edff -0x7f4f50b3d4b29abf35f939230ee9e81860758493cea41d1792a03671003f1807 -0x8e0e16af007323b471a70b307cff3e0d2487a21d36226f228222da6c4abacbe7 -0xfe00cd170750d366de1dba3aafd9ec6f0f674a9a08a646ced4a7e00b662f5d84 -0xe79f00fff0abdd9f21893661c8fee08cc1c22e1f5ef4fb38852fa44bbc390a46 -0x233f56a803a52f94e1d2d03ac87694af199735a86c7185bff8fc44791dab2748 -0x9a04da27d886b40ae494d2c5a9179f7ffc1730e0b6cdcbee7a3338fa78ab7f88 -0xcfc6825d75c893228621948c8c6f6e834cb9755169ba0d4eaa9217743c0988f7 -0x43ca06f8554de707d9c944568c79ad05619db1fdf9ca3e5840cc76f209bfeb86 -0xe92fc36adb5867438ee8028d623f355fb53ba7da92cfc34addfbcfee4e617213 -0xf3dd29edab35babb39b026427f94b64ca2fa9d8f1ee0b93ddb54b92578e500e9 -0x4f61a09036d51a50fb1f20d93d23f2eaa0063b1d96f26802e20bb13443a6faba -0xa3cd93f9e89f951816ec2dcbece16b5c38f502bce69bb3a778df34a9a0f6dc60 -0xc6b8e33d9732c5c9a01f9a8fecb803d534972f82cf69354d974389feecae3ad8 -0x6e946fa8183190c8924dc7a7c011c50f1a9b5d94fdb09e8066b96e65826826bf -0xcf67fd5fbccc6cdbf7f5e14cdcfb7e37eaff2e2dfb98cabffc12d87f13f89ab5 -0xfe6d2217e8ffb2aa18a302dcfaf9e7696dae72397b3f005c9e9ec21dffcd3f43 -0x599a2d74cfc4c1f326fc7f2e5d2e4ad367c7d67611d83fb3625087ad6f5ce102 -0x87acdcd915662cbc6d41b834317091c2cd21b8dbcd86f3b1ca7d2fd3338837e3 -0x9980764e720398947202fb384ac3c26ac178bd812da8939e4ccf6ed9bafcb730 -0x55ac35723f075821ad9d20b6edc71067549f6bb26e3ef44339c12998c36af3bf -0x254b0049694d8d8d9c7bf311514356cabb9c5a3a1b1fb76bd4f1ad64a3e19da2 -0x4b137d6e89ba6dba766c053971c34e79f3725f4b12009b55c9107c6d2472a387 -0x321eef84dfd4569940b6ffdf939d816cd51298b5ddb58487ef7585f58c5c1c62 -0x8c2b796fe99a34b9c90d0822ebcc5dc4cd9e9518c80a7b74bc792aee3e7b9c94 -0x27794ed331ccb06f844c896be89c1e9ee424589cfff89d310815b8685c8ed383 -0x7fb49e650d7ab5ddd095a73406bc1b396ba2d5bdc0b902849b87bea1832e704f -0xd00c0c493d9d2123bc05eeee6764215c9e57fd9aca974c19c00bd0f6ba9dadfa -0x28aeece19330555fef6b27961c39e933843ce8bbdc40c0774b01c0259f1131df -0xbad33b196707e044ff8e1bd13003ad347898456ecf5bbb14b3915bf4badd86f2 -0x4e08cb37712c845e3c3ce21a909135133a5bbadaf15b227253ae51c11d2a5005 -0x4763e49859ac314e79a9eea57b47000439fd1a1f931b480364a74e2c6419a2af -0x319f4184e0db174888d12e9d0c0d55dcfc5666e8819ed2e5bb7fde5b2d072b2a -0xe571a4bef6e82e4dc260f96cbca5cb6f201ca532f9ed347b92ebaa01a8da8349 -0x80d7345bd3244ce03ed3c29fead28d9c87ab6c88a243a8a19b578641b6ec2b39 -0x45b815495227a95525f8cfdda51d76462ef53f194f338c22e62565e4523b38f5 -0xdfe2415e6b915cb4a9469270b6d89c2f21bacd55f4f852677f1c0f449549f1a9 -0x2c9fdbfc06b6192faf6f4d760d3752333308c68648d39d86000bc9a1b9262478 -0xfed62e9f498e4d28c9ce97080276adc6daef7ff2d543cef31e18cd4fb116b4d4 -0x7b2208f52062d5c60b366720110d4c3dbd6cf338e7453c43386e98ac003d4bac -0xea09ed3d2ffd188d9db904a6e55367448b48b8395c374ed5241bb6949767fd2e -0xff632c3e1f6181e82ba5bf67cb985f72cc7b5a9360b622aa77096690b8ca22f0 -0x333be0cdea13368bc05c78f2b4aa642297507c74a8dcc57ded57e1a41253b934 -0x0755541f16a521659079cf2998bd0c84126534fae43d43c52c03146516577667 -0x112987bfb9417a9fd87934b1e86a22b62907390c4e2c875bf6927f6682dd06bb -0xc0dee3e6aca87c8fabba88e576143dcced8d74c4b0488a6473eef3a792d089e3 -0x3a79898bbc2945b387ff9e8e8dd1c123ff419601a3bbe9778928945e3038555e -0xe1a3f9a0cc8bff00de27baff3a4930d902723b7f2fb9390c8d5f9840529d3f8b -0x763949ac2199e2c199dfc9e710fcc81dc386196621aa22120746146981b3520d -0xa6df6f1e3734bacf5c137a0e4832317774a136b7b5525683284654cae4ded8e1 -0xb024b61e8d167ba12d735a00b9c3aea6d399e48a49f938b2eb369c22649d1590 -0x3dfd0df77567b1c3006df6665ccdb5f9b27aeee3e9648b8387606b331cae3dde -0xc3939d0e9166962d463ee244528f46c3c7a0ed339e4f6f20473367331d76f29f -0x4035cb2697125f6388b19da8fde5decb72717023448dd6a9205159ee454113fb -0x8bfca09b63e93508a70fe5cdc5aa498e3e6545d51306e1eb2572a7a0b289bfe8 -0x132e296a895b2657594c488beb9914ccd8980f131fbf6cbc3274ff24005cf63f -0xb285b923e23ba9d86ad2a1b5b1b1331789f5e025f8e81091667c277e22041593 -0x71dfb206390c2cdaf46dad4fbad74b3a96063adf5a3c5cabb7d8c79cabc80e54 -0x5d0f0d2418f6221f1dfdd1733b6d929a45da4b920b82a1aedde9aa7ecb26f74e -0x41dc36c98c91f6452157c04b24a92f59a80840dfdc22dd0ec023537dfb67388d -0x2a6e2c3c18fb52aba2d3fb1bc320b7c3a18091a2c1166a968e71235bd76f672e -0x36163392abaeea66a4b2d10099f328706e61a76af981312460dbcdc75a7f752d -0x85a5e85d3f9ee830f17287a6a5798b9789af82deaf05b6a2c496c115e781b4a4 -0xf8cda97960983c20f8f7f802950cc018eec7abcd627f4c29ac6545a60cdb510b -0x18a1656125e8a2f0c622dd3bb892ac2ffc4399778cbd4c99a0f12e64c122eb2a -0xc83fcebb032228edb92f33b7d436047d2b273b84eb2e57d07364db207afc9108 -0x33991b772f52245ef6226c42ea1947c2710cf58277ab9c974673565d71c3b583 -0xa39f9298cb6ce6a79953fda7fabb012d5b269c565bcdff3aba74cda3a3a7c164 -0x8504967c49ae155c992839ead92149649f70c86dcc7124c45e5e39b0b2c6d7f5 -0xd62d1c66bbf7b07af93c28151e0d6861fd1b5abf299bdf8cd6c604c4d26609dc -0xd17dd9e9fdcbb2bdd6284babc46e09a53f3338ae2c9b4c870e45a3136b40b57e -0x5567d7123c3fa33d0701af721c8073283c21c6031cb32e054ff55679c9900b65 -0x4de1339b963b0722abe305f98a30a71a04df52179681fb9922291c962aa81787 -0x2f0595bc4ba53843d951ee28dfcfdbc67d25a0c5c80ef7ca031e27d256c1b412 -0xd9da64965793e99fe00eee8dbe2093cc35cb6f0bdc391160f813b7dc1417364a -0xf863ca357debd1d595de24e9cda1c494680b720e2b1ad1a6c6fed6ba0e096b67 -0x8c30aecc83e8213fd36dac1cf5943c16ba080e6bfc1bcceb0d9ead841a25d37c -0x46dcbbd4c6928158a913f55ffb1840026986d4b42b2eb78aa483a26673208685 -0x89c3dfe28539f8dc14f5d5f8df46dccf3596e8fef4182cbc1152c90fe007b10c -0x5a2fe7845d77a39041695af4671a190f473088222c06c29ff94413331bdcf6fd -0xae16494837a695032d2d108ee4ebb67df967ffa11330b9898029618905d21d91 -0x8e14e15c70e838d742b78a5094fd3c0dab931e805e4548bc6f9f9508c4355670 -0x99e4f7e3df9bea9a3df20ca57ac30bbc636a6b224aa92310075226d1ae9d5d2a -0xb69fc20043a2ddc39779d5cdfbb2f9d9a666a02f0283a8f740a4c6322efa4398 -0xb2321646fe34b57a51bff68cf0896cc6d304478a40b1970a94572e7be3ec708c -0x16c5fafc3c42304e0fffb0ff2a44eb2bbde31f15141db3778514e3bf401f1434 -0x00590c3e19719c0e6cb088676896c000c26f77b0a40dcd48a2c5be5017d5d460 -0xd0692a493ad12b9a12274a5bc5af6cf718b7db1be009ccc238d2dc6486cca21b -0x34a6c3835bc1c12dfb9069812bf2b494ae70109fab56b2d7b8009fa32a89d901 -0x63bf1f7adbaaa23a4a3f4ea6ca1a8bf4d93a02ec983123c3e64fe49b9d620459 -0xe726f2de337c8b0e93080c01a338c9982c535770bcb0db6fa76fe8e726f6f6a7 -0x6bbe7361149b94e5a4da7e896ee771fdc67b0ac52b6abb5b1bea8b2e18714bbb -0x8518bc4b642c5dfa891fb90340c34a0b6f5c7cc87af84ce4514f8422a2b14685 -0xc60e83814d8c1831dc879ed71a8f9375ae7a4b43cd7e33644f1b2478f9dd29cc -0xc73f5cda90a0c527661d67dc5f3996a7a56085872b2cd071dfbb1a70ef25e7d5 -0x96558e4eae305ec98a6514a13ab7464093f542cff534675052ee18dd5b2135ae -0xf859d59f3b930137e05b50cb8df9491fa20d9f60089e05890598f6c1cf53e880 -0xc84b9ac918e1ef5eeb01fac8d5651e54a99d51b030929eb014e26b1659c3bd3c -0xdeb729c060564ca626b5f0efe70320e0c8b6fcc6664232dfd725d73fadba6fb2 -0x9a016fa1485377077ed6f75faade2334ed100d71178543b548fe08c4ace23ebb -0x2c604e90679c0ac138ecc5cc5852ef61fe0b00644cde533f10f7f4d6c48d4f36 -0xa69c322792cc90a9b50ac33aebe499c1a0a68f051998414aa7c7fdf55ef509db -0x7f42cbc24be15fcbe017436833681392b8bae3128dad014f696191b95715a77f -0x280ccd507a0cb7327c18a45a6e680cf34fd4f43378118321ea6c0a00b25892ba -0xdb101850f5418bf1287be55e2bd159b0b3e8698429b2a1642b915b957a41f246 -0xc5e82ed0d4552c0461d7a7abef0d337aa7fd777c65e9227d316fdeb2262e61e0 -0x589bd59e53a3f9c4e150a9a3fb359a36adbf85405cee71af20ad484c127c4ab9 -0x277aef1630dda3a65cf4d543bfb75f9e9cbdf431aaca042eeb645cd90f9b8fa8 -0xf789992d03de3b897006ab6dabe9c4124cb9e115cb43d134b660e63946a290e6 -0x75bc225a6fc63963615ed68c1c44ef8251b9bf1e7444baaf9119147e533ec422 -0x3408fa7e85e3859cfe8bbdb1aec43fb345e9d196c2ccb5f9139019d54e8a23ae -0xff6e6a2dbd203bbd806947b0c97e2e081da7b5ab41ee1ab91c75335c6bb5b453 -0x4b33133e5c6d7d4c53778872c0d0d9e4aed8979362bf4475cf592e9b3991a36c -0x14a02c597afc8174f3e1b054b8bd96e8adb1754f4b1bec6e2bedd4efd91d8f0d -0x3885fe8082845e2f94969b19bf388a9785f521e9b81a2172238a7d23d0ec56c5 -0xcbca685848a1a988195196ab3d31a9d5daab10ee5657840fcb376ce3b7dcfb27 -0xa909019e460903489ac9f341afab5b2aa54e7a3a44c39f44a77afe9a6689d882 -0x71a3ee7e8e870b3b2e4925e410e19cc3cb7a7b9439fed1dc96f891067c78458b -0x4832c9c736b92f7450e2ad23db820002f98b0cc3121c74dd20c81c82b017f6d7 -0x05a7f18e7ce87de8271f03b042ce9b38e006d975ded2dd95c89cc68b9e0a9c10 -0xf3f7112f919ecfe2416093bae1472ffc8d7de5c14868bb3272faea14e32bf8c1 -0xffc2f947b58c5d2e0703bafe15c137a40e0fa95e586e6ba360ea00ed6de2bfa7 -0x8a15008234c2b32d04dd27bdcc0e7b32740fbb004daadda0229ea395235da134 -0x34918b7a1d17d58b53a69e4a64ed44239a5edac7858e6be84c40e82f2f180369 -0xfee89be316a81bc914dceff6d6b8813d4486fbf225c9d4cdac2d548a8e552cd3 -0xc3e42997a01eeafda8e47ca39735acb5b064237128612f1e1dd5c5f4ef37ff1c -0x8f8cd55e3339f809b008fc8f3e719095b0574b5e8fc71f439da1d9cb6a291634 -0x932ead44b860638291f4ec739c7fdc3b8bb3b3728206b9adf49c825ac407937d -0x8fbd93979428b85c62f877bc0bd9257f0431d5421b0c65dfc03509c666a65327 -0xf96f26816ebb86e9b84c8c1731f2e307cdaee57a85e780784e05464ef415a7df -0x73546ab4dd9fd26e4b015d3efa3deb5b57329e4ee031b4e929b90fe248fbb01a -0xcdbd834ced97cf7873b9b0f6141d054e228531be5d165339cc6d2687adee9415 -0x9d7b279efe5404f48046b57154b1189b3c63b61ff86f984877fcdeb63618f72c -0xce3aa59e7b32bd88f9f44d6a131d28ff631ecb14933ab9cba96217ba5ea1609c -0xd22b8093828d75a6dd9ad58f1ba89e9f5bfef960562b8b366fb512da1975847d -0xbb6951dd344d423d73a0babf0dca14a3c681c295cb51f51efb3d9c4426a7435e -0x3be599b02e9644da5b0169620767f3b031c74b143169f9889af735d61ea7ebcb -0x5235845a1fbe931867dece55b3c5d751300445e8cb5ebf174bb48703ecf7d79a -0x8dc0d2c2585b842acf81282cc6c827f468938ee6f8df2244d78b9f0e87de64ec -0x6dd84956837f57330de2ad0aee4c93f9837b4528b5203d12f75e15f3a6e365eb -0x35f23dff132a3a5d0adeae8832ccd6cd1a113cd15e86631c09a221f9c4c479e4 -0x7a02a687f0f0413c17d095eb0af8d12611c5781711804f62bf0aa6dd8a30f374 -0x52beb787c4fec4e502714b8662f8c0151cb47544806990ea352a0ff5f08bc5a9 -0x72884a9bc691e7b077c22b883348d7bfd4fcf7df1af5f3deb75b6f126a968c2a -0xfbc8112d4ac6d35397c2fc80aee70b23d73890b977a766766e3d11352e261877 -0x313bf6454918b05e0083b33af664ad82a5841cfd58be721d4a4d60cff150ae18 -0x4c8c90eccf21fcc9a2cdb09069ac71250b1c659722db3c0e72a9b719d98f1d02 -0x0a29eda40e20fb1836d73650e8f4f28060ac705e7cd3424e3b971dfb5c201b1c -0xc32ca04bed04e03700bd9ac04cb95683e936e55e6d4f725239a954b6203826f5 -0x89ee940f5ca33391bf4dcc2d64458263e15f15af034d0db9014035b7071d4456 -0x63451e5f1a5aaef5f39117fe29eb220ae8db4c6c5043e44efcde3f64f870cc22 -0x1a5967ee01a6f1307828241bd0e34a985a402f04fdffbe667128ed8aaca56429 -0xa263ddff1b269abd4bac599b00dc2943a189ca80a84317857ff705a90110aa52 -0x4d166aab9b5f1f9a490830979ac9658d43a6feee18c93a04369475b612bd390a -0x0ab5f6b71a42664aeecdc427d05a6be10838f27c5b31fe9a0af6a0ea58451483 -0x8cdd71a668f229e61b5d66a98e9eb5aa4c143cffe46301d52a5fa4864bcbc919 -0xfa36cacf7bf9c41665b82f3034f4b4336b3a9a23dee37422fac4405cdfbbc263 -0x288d3d7d2d6796ff8f4cc10cb0f7026827b8a51e86275b3a0412d8ff1e4572a9 -0xcb88ea8e2447b845296fb35acad81739958bad09cad381efdb601e135256df3a -0xe4d95682e1b6ec1fccfdaf08e0b8e2539bf76f08d760932d1471bd6dff4f5ed1 -0xacfdf713d5ab2239fd84703cbc9a6c1a08a0c0c0a9ac9a3d2ec4493ca8fbed62 -0xe4ee9e764fea9d30da2a75ce61a502c61dfe0ad2ee1d90df1a1101a9a69377fd -0x099f0a68daba3ba3f846b1201f8232909535eedccec5770165ba9093afb1f403 -0xa0c8735d162c5f69b27b62e240bc142a79b12652d3a2ed9faefd7bdadb960e1b -0x775ce1212478d36f07d876059b0b78c086d900f3b8cb7d9408c7f3f14b8a2568 -0x089226a2c92656159c4ed51df9565311ae5df772df8d05bea5f797a9c47c9cdf -0x119270c13b9bc45f635b67d969604c81c6df59afb67fee071f17c0c68e096f4c -0x56e541f0b03c409fabca3fcb3508599a425b67a106866d26c7b7f3fa9f3c014d -0x47d111e8150805058b3b115f33a62e916aac5e4831ae13f763a9fc2bca4817e4 -0x9337dbc84e35a331336e2e855267f1ef9d033ff14d4998fc77dc28d1f543cb95 -0x97815257c13187269f329c97e1c9b1ef9ad9011fc4e139abd77704669d86e462 -0x194459bd06c2467e6c9d8d53d785b3ddc48a382c0d109011ccf9e7dca31d918c -0x53e479f5f71ce124208c92697c19618d33312e8b196fd25104a95ef604ba1b0f -0x2f8411e4c31348efef4fc3525a8bdaa38438c250d9609bee991f2076f68163c6 -0xd21a054c1c82b8b5c721a0de6b3d23bb542ebcdd2a50d3a8b60c844ed3ad61ee -0x51f6a9b870f6c1eec5e74fc5accf6217afa051f6b12006d3c1d0ed9a21af357e -0xc466e12425517531d7265f68c22aae2e05f33e524b8aba32153471bd88b5f66f -0xb40fc158a4f9e122315b430b6eba923ee2ed55a36804049bb95836727bdcab8b -0x6662807360d5228230d4675939304d1ac7f3db48b28adc182e6757a49fc0f0ed -0xea00077b07c9fbd7923413719adbbf4bdacda0541425964337b248b176b3ffd7 -0x4c2503ddcc20d1b5c75a1e23a42772a6d8f54cdeb60eaf711436542a89e5a8c2 -0x0412ceb44bf7076c3de341b8f12ffd4a6007c0a21ea05d652e3a00c32083784a -0x9cbe57402e1c4f4eca6ec3d11a3165c6a6ff9da3f6bdb53a270bc02e943daf27 -0xc4811b227eaaa03165863e494d24943ffe67ce7dfb80a54de1507b6696dee959 -0x49afd8e8d86a307b30040bc30d826be00acca34de812bab1e4e5f70b6cb18521 -0x1dbc3c60503c846216fa7391f99ba678ee67cf97a1792352b5dc5ffb1d7eec78 -0x94e36cedaf9bb3d4273cd777b6336cfe8b1be2ffa9f6dcfe8c11bc75a9440626 -0x9b1b53264372d7e052394b442eb95a5843c96e6c9b3f7e0b7c9ad880f143fb08 -0x88f6fade461a63f0ee74e3994df0c44b245997c134ff1031c9e198bcbc3b811f -0x5a6c37cc7d5a7ff6de54da66046b8075d3bbe08865c93a750305b8ff3e45777d -0xa673a08baf23e72d459714e48c17eb234648918acac9033ed624a7c74136130a -0xb5f2d97d184309fe6e2f7d6204137ac7b5680e9ac99739f4472a21eb3f1ac276 -0xcdc5d66efa3f24c40908518d371b18d5902bde195bc3df62fb9e4d85c33ce878 -0xa5ad5ac94ed1241510d21e81f0f53902ea3536f6adff4a3f59a05a1150061f83 -0xf0534a6e3605f384acd64d4bacf29453318fcec0e023dc16f82bfc9495dab165 -0xa001c74cfbf11ccf4dcd87751708ce10daa4c3c5e3e71f3a011c8325812238ff -0xd0ed2041d9673ff778412040596e3ac50b49b853a3e01e481bc5a3f7486e8c9e -0xf68c92a71d48ab30c247c2e772f10952d31cb31c5b3da02f129899a00c83efa4 -0x1f651200734763ab17765ce6a0578106fdecf5cef13a378ab558f002b65684d8 -0xdb69a8a15c0b0e99f3a7ae4776887ef4990e5a43cc009f1686341a2df79481f9 -0xf67d0723b405f23c1b053b64e2342dcbbe817600b2ef5d636d68a82ff1046bc6 -0x004e08f9d18d2de34d5fc57a4ad78895b4756d3da792d83cdf810d9449c09c7f -0x19480b19afec4d754ff641c0bdd982b95fa5500ea00555356027c004caac0d07 -0x06c7383e0f2d90e17bb48bad339126b973c2d6048eaa00969e60215cf09d28ed -0x5f99c9ac3e3ada867c917664a9a2a58fd6ac7e43befce344a0acf3c29838a241 -0xbf372d49dc708ab013a7f591bb36ce8dd8d7b021e3784013e3e1f2851ff696e6 -0x1a60c902a3c3b9a17e0e289fb54229878ecf6d1fff0f8657103f126e36027335 -0x575e9d2f66f028f9126f1e55844bf92bbc350b4db27d1d7ecc460880d30e29d5 -0x8991b1e2835060ea9e8e3d10f8c843298987d203d440ac711b38b663a26e2a2f -0x9593c02054b8dc1f916abd5219dcb1cb983ea8285b4a5d5fd0d122ed81a6a88b -0x5fd8327570d88273bc026324a54310ed44d6718adfb760503bf699d29ea21321 -0x42dea05068526ae149b30744750034c5d49b37baea85e9ae48014b12c81ce8f3 -0x49db5c358f5735f9548942b55d4ada138b10fe12bb866cba62c4faa53e9b6acf -0x3cbb7f77685862d905ba01a32506d13b2d942b6757d367aa34a361b3f0de62bd -0x27d313a1bce6542dcd3af640a55a92276976a3ef2fd29138ab970c1ffef0201c -0x77d536138ad3212279d8fbe83093aaa0bbfb37f79f4a545c38282dcecd46e208 -0xe4c5e711706dbf8910ba37e53dbc896557fe1fc35b851df0dc1eead786dee77d -0xf4748cce3487f221f180ca3d50bf7fb593bb257f375a53ea11282da1e96f2cb2 -0x81953f9a742d4c7df4df0e1504a9803e9dff8a0d75be455c3522f88bbb287f03 -0x8dbb167eb339ca81c207fdc2294057dd26a2e57f06bc4dce01c40e1596619f09 -0x921990994bb465b624ba3546f000de2acdfbf59887da8f7261dd105c8536a46a -0x1d4023e80571583f55d7b3584952d04a58189a8599446508db1b121441dcbb4b -0x84a6dc9733169d3d3bef72c07cd2c958549c7d9f49a54769e32e40989bb303c9 -0xa1eb4e7c6a4cb566b9dbfe10177ba7afa094618a5ee64f903c07b1de298d8b17 -0xaae3d36420ef71c74f4698d46264637180aabe1ba4d67a6c3fc1ee2bb3d4c743 -0x9d3faacb1e911b62ba4c687679fd05b34dec906077ca9a7210c0a6baa643b472 -0x07c0bd6525d3a416bb73877d601f06b792da9db7b44ed301e5c0454183f13eb9 -0x3e7724a60e135dc309f703189e6f9e6ab4b7202b19c208ceb12cbee648d67ec1 -0x55558573a97805cc978eba4439647542de376b8aa76965d1eeea0e646de0a746 -0x93d5a181f417b0b3f828581228b0d9fd7b5fe046c12c14d8a69ce8261419c12f -0xe9e1a516a0ebaf1803313a40ebf21c1e4eaaedebc5b1028dea659c21d06f8148 -0x828f1e703682cd70fdc2e4755c4f912f18bafb39f3b07cf5c7dd0079b03ad5c5 -0x960c341285153c911209b8273f933a62512a795e925312594a9454227883accf -0xd7889b4345964a844ac3f08e782dd115d88aa40aeb6c8f5bc4d5e28ab49df613 -0x1b17950fa6c91a5706bf7c09d93b304cf87983be55bc356f49665f9ea2be0634 -0xec62ef9f032e585baa273b9ffd977e39419f18219b90d194600cd3da71eab107 -0x5cd0486b48df713f0f93e56f5aa5fd1f29e5632268b7cddd29c1a25c53096b6c -0x8c7755634540df16b18bbe3fdbaec252e72f4a6be2da2e8e5d077e3a91afcc7c -0x97217fa3a5ce698fd4ca862f3f9c867aa0870835a88d9270c4a26513d54aed9e -0x33d3fc51ce3f96be7b1c122a0871f0324e465e4667b21ee2ef3dc3fe48b69735 -0xcc59cb3ea109a719d2b9b6a695185b8d4cf2a76365009e0e2bf842bc050cf43f -0x9c75a3c7be973ac833a4443a73ba783de7667849119e6efd269342e358edc787 -0x2d4d235d454435c9e7b7067aae4ed0485a6f666727ac49761bf00dcac5c8129e -0x6c63476e705740228ba92e58e158174697578d4d9c7309c1e6dfcadceff10b16 -0xd9c974629e7b43a890fe05d596dcb56fec00dcc357377d0dc9cb3cd9a1ae8144 -0xe21cfa5f8151d50f8a6b0c032ea9d72b44cc615e3fba97e326d1de17e14ee079 -0xab59ca3e9cfad6db82bb7056ecda78e2f07c21d7666cba0597041c81fc61a5f3 -0x1113f3244d5bc9058494918fd5c7dd0e6376195f2ff9abf34fa265dc386002ef -0x904ecb874dbc5424aaf2432a05b4dbf62fa789c3379bcd2183ea8d89dd0ea48c -0xf4af04d9012e54c591b2def5de9f1fb71fc00f8392e2f13845ca9d0773a378da -0x1817085946c5ec20c58fb0903b2385d1ebf1f8df945ec0ebd65c4aaa5841b8fc -0xd22e438c61d17dfe2e702c750d9a37d47070bbdff0d41acf01a07c49fb2792a3 -0xb667c846abdcc1ef393101cf36a58e2cfb9c885ade30d581170668168ac3f201 -0xdf2330c4dde0c759c5a3e4333f5e1174720ebf5b913f1e2829ab7f7d4a9fdeb6 -0xea54642895b704d94181dea356558aff3eb760be945ea11357e80f0c61ef6db9 -0x10ba4e4221e345de0b8f9a4ea5f5853b68622b39350904f444a61642a3b559cb -0x572faca583c85aa75fd89efba8418f21a5c3ce6b46dc55ff0ad4abf726ac3234 -0x32200c11841a3809e60c370e56383bd9ffaefc34cf46e2b41dacf89c8ef9d2eb -0x7fe4a22400a2a9758b06d2a087fe8cee11e29bef57e4bef9bce8fd0431620a2a -0x6bae9527dd9162c2918117606b7b7f720cad8f262d9671848eba3c282ba72d6a -0x1d7ab91e00e9ebee8d544c55ebb5dd12db520b6a3c9c3ab4ac2e4be024e0b7ca -0xed4f0b9058edaea4444541123ea2761ac12212e06a8ec867310084b840f10af8 -0x919130357e17134a949000e65d3e306e275f69c817bb8ea2f98fba1ed50370f5 -0xb87da61b4c91edc4011162a822998ce429735ed68b799f45003c41abd90b11e0 -0x05bd24e41fbe3aa02737099c00826717393f80937173305200a5ada5d0d81ad5 -0xaf413965436cf264abc6de70298699cb3b37300319395f04db3c136bcb103914 -0x397de78c71bfc6c439097e74cffe48334cbac31a498fd5689c6a6527c748494f -0x17d55cddc1297024f1577dcfa7ae010b9f7d03c760fada4bc4a2e4bc54ffd460 -0x392ae7117087190ec470dee7b7f4c0fc5daf8f035d0200221a9409dcd0f3635b -0x114edc0b343d032c2426743964a682e0c3d6403796b9ce04c64a35bc942e30bd -0xc549106ffbf7ca2584887f5f91cea0b4c5f2f90ee8396baf769a3e65ec420d18 -0x6df102dde803832ba9719d34a688e3eaf01d50e840b0f3c8ef23fa13edbc6664 -0xb943694dbc4c739e5af7da69d045e0c08cc55ce86375d12c82a64ea1d82b507f -0xf84ad30efb576d689e59933de92701e70f2a3d2ccc97a7af508af63fd8b2d363 -0xa739b79edfcb6dcb194f721f1b23b44a4fcd5ce5eb633a64b70fb205967756e4 -0xf4635edc99076774ca8836523bd59f1bbdf2838e6a522293ea5e2f865d597de6 -0xbe17222dcc8175a01e88ae4b6793e3f634baaadaebd2b81c0007d2980369023d -0x6b3c4efd952ca52e3a8dbaaada84c4485468aba073708574701e947767e6c067 -0x7f88889ddab0a2c3e98b934fdbaa9f8ce275130735f7eef10d94bb524478f54a -0xc12015301d53c4bd7a999457e8734ef90e9162c4956bfaa0efb55f736c4125a2 -0xd9e1bd8fd4a0453ec16efd13c554909c99f2afa63434743f82fcc1f3423ac84d -0xc44687d181f1f7da57d22275f68dfc521ce661a239fa231e4a149668782abeb5 -0xfb213c53958f5bac30c243c34305ce9c0fc33e1c26bb606a03244b8d52f075bd -0xd63c55a9ba5cf33677c444bf69e4f605a5bb0f4310daf3867baaae9f960739af -0xff6ce1687d7fa8b0b3ef203c2f77f4c77285f7e707ed65d4b7fed722f0bcc5b3 -0xddc78a73ac8b4c7cf82a7275f5c544cadf9e6e9f1d18338ce8958a7cfab36ccc -0xf08f9f3aa5482dac8bba5043044737cfab81ef4972a13db1bf95ef549a1556ba -0x4e45dce0c30ef145abbb0369c8c1a2d102fa0a70904a91135f1863148fae3010 -0xed56ab30072dad7bbdab7e55bd8def7b6571bd43f6f72952c3d122e417aa3115 -0x968e268deb2d2c4764b867124f3700b350b9936c24540289eb3bf1f6ee068467 -0x69cdedeb50492b272f5e39356c292e8e7c4fc631e640a372a9f3630fc0d45764 -0xb148d5dcb4331902c828daf25b4af45cda677cc77b5dd01046aa225e27ef93d5 -0x5ef574f93d1cdf8a8b41d43b340694179d5c1684aaabadbeca5a31efd0daf912 -0x01746caf8e98fe90420e8e1945b93973e0dd3313a9a3c9b4fc37a3bb491eaef4 -0x3b81e7038cc1becae61a359d9d76a14f86bc88871999e708974d4ae8538b5263 -0x1d0422a2dd8137d6d17c358f92f66b2458698bdc9d318c413d02feba9681ca52 -0x50ffd6cbde5a4b9eff388c77a59165faad55a28090baa677f1ea884a0d3d2645 -0x8bed79b34e1c34683b5ed0d31fbaa74bdb5b529241c5c789efcbd9025e8d4098 -0x6896ece80372c0fb35dbfadd3400ef524dcde711f1bb074196eba9c690bdd8b9 -0x35f2752441b3d987fbbdded853e88b0331bfe6eadf35845ab7632cb25a3795e7 -0x4488412493eadb30faebd51889d841922c53e085545d7492ac715b6a4d0e8d83 -0x71cd9646f11f09fe39bd376a022081fcdfdc67bad13a4ee45d8f8ab8da69ba6d -0x824eb71992d823b9b8333cc69154e7adc2a1fa7874c15cea84e38e61fb37bade -0xeaa8d2ea789d55db03dbae9e4a99e136f4512ea627346b2e6a5effc4435e22fe -0x67ddba4384272a9ea2c2e74ef833c7f0c37a3cdfb158bbdbaf6879d3f64c568c -0x93e651ffd3239ffef25480205a9676d3dedbc5b04a0d6d9efee287c2e42cbfd4 -0xebf813a61be325cd11ce93886848bdcb720a6b8d743a60ef518122c245fa0d56 -0x878008e2a5860492f5bdacd06d0dda21ed29c33128f40f35501a51e5cf6893b0 -0x7504879e21d324707d560202c1f5b5e349d468a72316b7e2f7a7c94bec1923bd -0x0006656a43993a05038e39aaafbe7bc4fc47892942a537c3a8b73ab3c9fe3289 -0x89f0fe3bf95a7c4ade3757d9dfe0c1580b20ce19f7d44addb2006c66c9bf6d2b -0x1b875423f9b5706ffb83d7407a5940cd18dbc5cf97e543239ab2432f22729819 -0x2155b8ef0db83a73e280d5ac67c5f84e77ab52a93ab79eb2ab22fe313ca6c8dd -0xe45bd3b5266daa47d0c830536dd3e8391450f872f4ea6c9207b8218bf2ad7a3a -0x22a0e054fa45c3e04feeb2d0a50150aae0e25c5803b67e015ec08161dc3e40e3 -0x660ffbdf957457defdc7e835e4101a06a109378c3bd62ea7fc07c161e72deb7a -0xbd47b78dab3dea7282b233458a2c4ef3f30608c000a8b92c41ceeaffb3591eeb -0xed20cdf0f45d94aca92d592c6f0a009dbbc1b710da5d24fa06449e9625bc9833 -0xa44222449b6cfa5e392b7ec1be699f416706b0ab468c661b4e97b02e808c3581 -0xa413f7f25bdc857846ee7e674037a8f96a83b882ae6971f2d3f5d538d3f27a05 -0xac8ed6606ebd3069d9df2e3a4678e9ca0633ad0b0fd1745e2a2fc9ec4d4741b0 -0x4413f94b7332bdc852b567186dd2a9850884f32ab09a9439535d00cc29711b92 -0x139c775d682e6f4cd7dc1d865391f9e9152395361644d8f2cf42ee68fe02e8bf -0x9636fefa724fd791c4ebd7ab01c140b88ed8c749e0f6f9758e83ec7e4a53869e -0x1d6ba8ab56960170eb31c53345f63c3027c0bfeeda8d659d696806ed5dab2756 -0xceab28a356cd41ccf8dce6dc7f42b24be55e22fd4e1f91fe53b43aacbd6e3396 -0xe78bb7ea613d7bb36ea20f497f7c985dd763bc36fff721536a4c0f811d3d4475 -0x4b94b0ec779bffb8995282b17aec272ff2fc41f2156676e37ebe058aa2b91d92 -0x0093f28c2947c3c97fe10503a72a4a5fe2756dbd46810740fee16b29298a9315 -0x6dd9e6f4e6345a75ecbd6db69c1e63eacd3bd5993294a95c967931df8a41d73f -0x5e26aa81e3fd1fb0258325ebe494d733f99b3acfcdf989b47c56f42b3cd0c32e -0x72deedb7405759239a5760eb2d4c6669637bd9c3e62a0e8fb4bb02fdf75f2742 -0x7a25e4b3d3b23523e5d034b97557d840868bfd9a7491c3d09a4534d2e0008603 -0xb84f9c944891bcab916d1ca15f03a8f095f58d069fc30ea2a50377891b0740fd -0x7dd1271b6b14c12e342bac17221b5856edd85e77afe5b5b1da7e805cc2eaf992 -0xfd3d988ffab0b8b4c13441f77344ac5a2988cd2cfc57514bfcf7d645211d0ad9 -0xf4175dd28d3405d66271712cb259e753e8c54f1d7fb9ad213888e0b9dedccca7 -0x8eaba4b293e12a9b71ca7d456669e047d660e6cd664966caae7ec61fa057535d -0x8b026639a5a3f4a77697f77e8e70431bdd30b0e56ca99da381426068f8ea8048 -0x6173af22dce8ada39a396d7499af58f51c7ddf500d59e81c81ce0f5c944e0057 -0x68c0ac610c1ebe74917f72a612f6484bf925ae95316e2ff799a8fc5d707cf757 -0x105952252b83b1d6cba8fef0e1ebe207527974e8a5272b6f33a0f44f45f06d2b -0x6893d6da997a0a9dd8b18ecd07e13f739e89a0d5d9fc0db3fba243140d78463f -0x854c5311324b09c431eb5db4598bb5adbc2c07c9a11c9d5249bfc7bba44b5f39 -0x43e81b8174fcc8e13d656b09846e82faaa873aaf9577489952f90ee3378e1332 -0x921e760da890aabfb0d010768339f87a170a405bf0eea075b314e9f54bbe1038 -0x30f5c92a0234c67257e2217e590572f333704b5afdb4756604749735350cb164 -0x4a501b4fd5f87f4c78fe81cfdf70530f3d84c44bb9bd3b14f4414bf57456f637 -0x8d0de02ee8060ca40068fe79644afaa932f8f7f778ab7b9314f26e3bbb8f49f2 -0xaae947d10f64053abdd56551668f32ca4f9b7ac4bda88a86078f6ad4ac4c0185 -0x26527160f691dca077505a2ff70b45299836d72aa4aef7e388ccad77b6143810 -0xcc84d21a9de0ed2e742ffa6b0f79a8adfa9fd2880485b2ac1fc7e642f8594824 -0xc0bfb293eba4c7c4235eecd83f1b2bda5b6a9f77c31226234f30ef61a155dfbb -0x4f973bb0c12ec27e3d574a7d6caac24c340428534e0d5aac13d08b37be5ea5f6 -0x936be830ce4908a0afedddba193e36be1ca9fd5dcc8e2bcfca2b05a2fd037f51 -0xb45e8865e88bdd13ab39015a303df4daf6ca52d05e99ee5c6c150c09b7205c4d -0xc02332499087aab4780ba80b1f64690a5d65bf0f11458057dff9d10252ccd16d -0x0076b664486d66a42f17b6dc1febf829153957236f4242042bab95ed3f358517 -0xdda57171fa986fa743015613b8490ca2673dfe711208c6dd5f2703b0f3e6b253 -0xd78144b9dabb0f6d9e30e501c63e221816273647e922d28dc30de5c224e16768 -0x99a084da6becf19405557c4ac9e58195efd299368fa5da7eedb1912b2322f46b -0x42a22e3d918b19ecb990d4459406560b7f1d5dbecdf92d87c5ac789480a7395f -0xd9cddb6e43829902f2094e28dc10f3ec344376a92ba352608be7aae9dd99c935 -0xfd0c0042ee876f78186a09b3d5f8b4b8410ae07713e2a07cf319b2322fe22989 -0x1da95547ff5b8d5759b62a9bb3ee785df68d1bca02d8be700afca94f9268a89c -0xd63ca600f45c54c1c9d6020c0435fbfea1b26c5a18abf553dcb12085ceb365ac -0x022a8d0c84815ae3ad82c91dc432ef2c07d727af460d4c4d171340e55c187daf -0x7b0e718f2dd26dbf91d2e7fab0454f70c0b1524f5de9b6ae1b3f7d45bcfb79fc -0x185580a8c0e5de3c8326aca7d26292df7ac9b3f1cdbd93931778274057d729eb -0x87eba087d8c189651912d7961e97c751d9b091e72e7790b8b0d581936ca8afff -0xcee6291275b12a02ea9f477063f09cb20c05cc066a99d3b7e6a53e9428d490dc -0x1313995b4b7cfbe74c751609fca67808aee00728696150f2ad7210b578990734 -0x5b75e3d0ddcc76702c9ae8d5d042e08dc1594405e1080dd503755ae05d164ac0 -0xa33f84dbecb0504e0f521580487fc5d4a98747d9017cf5c4780a8223f539d9e3 -0xecd637aa57032f00cd4df2f8972eb2019a0bc94662411c467e1ca2a0a1cbae70 -0xcdf2708b283c0f31eb9d9e6652c9ec2d7b3b20e1ce01f229dbbc1dab7232ebe9 -0xa88c15d43f0db766a11da13b275efdd6c455bb35392dfe0a69867a2f6c9a6ae6 -0xa6f5c913d6af771e82033b0a58b748a017bf366345b06dd9cc797cfbbdba47f3 -0x3bbdf706f3f6dc9ed992f4220fc44ab5c2a0548eb1c81c563d18015f2be9ad2d -0x4042d3acb45c47134a01a238eae6d56ccb080d0924ed08055e996fda43f9e74e -0x98acb40555e9c7bbbdbea870e416f9ddc1633b2a21c2d137226eb05a0c186c64 -0x05dabd7baeadf3f8bf83273e6a8a6665d1cdfb88b7c1bb848fe2584507bb50a5 -0xe11487c9d6bd5515442b752e6078c7e95de44365ab4582bfadfd19122f00eb66 -0xed0ea6da9e19add4b365d3611f1bf0b746a0c4b1cb7414d9f69d35544b3df965 -0x9930ff0cae3f0774297830b5638b97b02cd15737d22c990bead093b3456ccdc4 -0x621d767e7e3d36ebc63d4b02163418be5b6616f5c9b4ab282d035c2a6fda4bb9 -0xd18e25a3b271bc8e22658d3bdaaa76a6cea76d723fd0bc140f73c3510107b6fc -0x4dcbe18ba008072e171ae713f0358bde52030f14dcda1f2df66604d22acd572b -0xaa997321edb93ad01d83cefed09619fda8aaf88d32deb171968d8a069251406e -0x7a5d821581f58309c4c2a6c7e36728dc0fb324d8310e71ec4a3e266a40e7569f -0x9df4771f6f7fac6325acd132a7160d01780fb69df888ee1f8bcfd1f0cd4f26ba -0x5b1a9f8b33417229c0f21ce3f20120276b9cbd0b370c1ee852a1cd444fb70f32 -0xe686405576d8af731c2de658b7e4003b9404e380ce8a12e19b981781b22796e4 -0x99cb42a3c338b550769ca626064de650e1b8e5520ee792fa012177dc03969ae7 -0x2611a974916cc6f9469869a5159583d0ed66c2c8bcdd5efc7b1146947edbb091 -0x7756c46ed7173735446614bca6eaea1a3f8d9a70d83f3375de86f478d3b3bca2 -0xda04f5de3f4137ace9f1ca38e9f53ed285b22368b0c6d5d4dc655bdecba290da -0x9a506eb9303b91a96b4bc21f3472ed03096c7b7a84cee0fd39cef02561424252 -0x231afccfab6ee35d5e52ab07147d2d1efe4af564b3634ce92dcbb295633df441 -0xfa8c7a98d7894ad0475e60a9e5f6d1bdc807f363f4347246304e0b92a3c02e84 -0x7514a6a23a6bcfd55dce627aed4a1c9970f4f136a0f33013769c4c1db3dae9ae -0x95c5f21b21a3a5d643d7b9bb69cf3dc086be653dcebfc6ee305b94f783e1aeca -0xde27730225cc67b71e8ef36f2b7d5883a24a16bf88dc657444cb733e6839c5dc -0x4dfb1869dc570df1cafdd794099bbe026299473157b6ce8bae2b667b0e1ae22d -0x07400edae7c61d1a017dab796de36d152700faa535a9695037bde01ba037570a -0xf4e53835175db3a53c385692a0e47b71580c6154dd9023ca0387a0a7569cf056 -0x2ec328c97e4731559853db03c056c2000bf512b75406c0269a54f84682bdf909 -0x99d6d61541f8ff18013da8b6065009850a0ae3150495b9fa31a7d3d809014c3e -0x84bd08e5bfa3b5a55470ac97882c52ef0c31f96b693bf3c1ce525aee6ae023f0 -0x471e584cc9d9ebe9e238bca9b702216f2b72be7047d304e2ad242acc2bc66e7c -0xc6cc001f36f2a52bd29b1c67f43f334d103fbae1c7bc006e05e934132646b9ec -0x64f571a7606bdb1e072638f99cb07c0646770dc66b5c385f908a242dc0f4c553 -0x381eaa22107b77409c4128fcd4228ef87297e793a58f7a48ac876e31b4df7e53 -0x2b04449c678a6adcc4a64c63935c23cd6eddc47ee4c6b140558a3b2256b16ae6 -0xf412c803eadee9d764393f594fc4581fd47f94e9a74a0a4b650f92bb534c07a4 -0x8dd8c24f573014a81e4dd744a877745967fea0e47e4d80f1b89dc2c7988acb12 -0x5c832bd77d22dee67c857b2eaa43c6fb2938ab4623c345cb88db11f907d779c6 -0x07141bfdb1fba88262aafdf8c76bcc5bbafa45c23c38e58327d88f0a8e9d6777 -0x123f62a33c9cb5e044e98c88d95f13c807bdd3c2c2783b7af10dc5dddfa0ae2e -0x64fc9fbcc6958e4e55c650dbf3e32ff7f0c5f821caeb680200a4b64783027c5f -0xc6e8f253e5d4da92f96afbd2937ba77584ce15028459d95c94a81ac7fdc93604 -0xb84e1b63aba97dcdf15d3775490ac431ee95f2fc8a22401395e0792adfbb6a68 -0x0d090d133c940d3d0825ae7190e8a0b078bdb5c50b67dbddb5119830f10d33b4 -0x1a60851158ee8982eee2415075410f580ae80dd76ce1bfe37c4507a760c7ad2e -0xcfb5482371ef1d6106fdc8080588b80cc88ea4b5c379cd9bd55c68ad999fd396 -0x54648b7a4fd1d6992bdd5c041143288a84fa9e5358ad4813affc89560864c3a7 -0xb08e0961364bb914fadc9a6ea5eff0191288088d764c0607737209112da16e30 -0xce201a60be03b0ddf13563aca31c588f5205e48fab1c08eeda61cb16cf5c58ed -0x859a9c04ba424ec69a8107f6cbb6624c7886bdfca35e4e0557f9ad5680c6294a -0xe4a1e42ff89f50db49cf97b24da4b7303bbaacfcac30b988358b31d18d78e137 -0xb749377eb1fdc56bbe0023162604afd295b86316d616f5080e7b8bf6397b86d6 -0xc0925e34beac8f80f18c632c05f8802fb2c6c821a2789ac13c645e42900f16e8 -0xc4c9090ef039cd2d8413966b5a9932a0f0a4d7dcd78d7bef4b28e73f4b8a8dc9 -0x6720e38992e34f4ba2c25ee94a42659c40f3267cb0e4911c778cbce57b081e73 -0xa95ffbecfb1b8229acb1c6a0210cc8a5a2a6630d88e528433acc4f9a3d6afbd9 -0xe193ce0a3c48d5a6ba41c39d0d727894486a8609ede623a1e3d471ecd33f1377 -0xe573ceac1a329ef9ee598afc0302068deb2040c7b55c3e9e6b93b603655864af -0xb75536dc0cb78f9b819fc5d4349c102c310ab2b11918fbae8f0a491e1c4ec3a3 -0x50940dea5b0cd939f4e4006391d14b7aece7feb91b0e313d9f0234766e06c38b -0x7856c7f2e8dc4ae95bc66769763892e3ce27cd3717dd21a4251e2188dcc130e8 -0x2675c5760f74e8c5c535d70d7251d3462a219bfc2f1918c3a4f899d16f15e244 -0xefa9acc83910fd2f93527b6ea3538856302686210d8059cb2ed543ef50b69a8a -0xf8be33b179637023989ccb3777872d475188146175358e00436827a1ffd85507 -0x69438f4a061a771bb3d2dfda0a2f62418de1a888f39d20d9d6a2834b814dc284 -0xbf0866f5b5b3c7c0067cd54e10fd486925f15eb2ddb9f148e1488cca35ba0829 -0x6e4d0c0412042f53b7e96fb5ac42dc37f4e59bef290753b890eca7c7e7a9ca86 -0x144ac414e2d2c502497111d343a79540879c7d82be942cb7be46f082e93e9cc0 -0xeadf7e049d7657529940a506598f81f0eab8e6f4b7469fb611da315c2960bd5f -0x256a54cb19c42439fec5c755ba7a45a20043014f460b348629f20681cded3bdf -0x8bbd57423f0f944fd0294231e779ff591ab014880589e7759c2effe2a7e5edfb -0x07a39754e8345a7436e15df29f816df11390275bbec48bcd3a41d738797fb585 -0x8959888ed359c4f80d7eee6fc2084f9b7f3c72ac017d60497556540c68d46fb3 -0x45859836f997d6df22db15b8369c0567554322cba5e74eed074da48ad437cd72 -0xd3f163c55c690b24356014dfadff1cde467acf548be3a391a4e783096e62d3d5 -0x5d24bf79fc2046925643cfd3d265199c98f941a3986bed054f1a74f77ae2a27b -0x3d35f571d9932911f76417cab60de44cf76bc02fd9726630f9fc2ae77ad413da -0xdddd720adce5737294057b4bb5438b2f2ea2710ab4ef96096a2028256f31e68d -0x3c89035f261a479c7ce42f7843b0bcb690dac703b31e53dbf6fa7eddaf00894b -0x3b4e052d1b6af561e0f0d31142fe349397aa72bc7d7ec8bce41619f9e53e1489 -0x6a4728b5349629dcd7256875d768a429f366b489155718ed3f06cf2c6fdcd18b -0xb2c8bdbe9120e7cae002774fd0386e653b471c4f8e854926f3fc8342988d047e -0xa1e767d0f440dfc4fe85bb836c22da178002970d21a267b2641f9cf90ffdc924 -0x06f533192b02bba472f834b3c73b4d1ed5e6f5ab59af017e3b3bc87c916a0263 -0x90fe15d8849ff6d48092380337599dc7f0ecbc2d2edefd9cbf437837c0e88b74 -0xd9c42ae13263ea712ca0e2a2e7cd0d02702dd761e054b0da97211312399da9d5 -0x93a692d756a8d441b4ef204a2dfbc0474263f10176d91cbc712414434bad5b3d -0x71c242907600ff9ee080cf95aa8da7573c1424bc17e0dd262071b4dbb67d5bd8 -0xf1828f3cc989c932d3c7832dd330ca4ae4045f284d190e03fee66e0394c4dcf9 -0x346a0492db61128fb00df6de07d3a7cd31354c625b0e5bfe97034eff452008f9 -0xfcf3e871f74c0311bf6a25fa03d2be10429762c5f0dddcea5e071e9235a99b52 -0xd12b992ac6d941b78536c316bb40a96cfbb16cece5f9dbbe9bd7f05d57d4e645 -0x605a48f4ebf831409ef1c0b966525e25c37183f22a168fa15cac5a268dbf0b80 -0x48e101e3f6c85e0893945fcef3a0fc96523363d32a0290a185217b9b9f27a043 -0x766e1ab0265bdaf6cffdb19f613683f2de208bc11a5b926862dc6bddd2cd8689 -0x61e36d62c51ed64a6cb5fb708aa2bb40173ea712095c56a0040e553abafa2fd0 -0xaf0adf726325a76961171cb742169ac92caf12b35faecf058b39796c72abfff2 -0xa421b17a837783470d5d6876257271b5ce6c0a52ea247b3ab1df6fdeceb04200 -0xc6266a84149f8cf446a2995394f653986bfa811bfc02c657c5d779b29d5f3899 -0x4bf492c22aa7723605cc738ea24be0c54d5414c872ac0e9407463a94ec6011f8 -0xc01001853889d6748ef4ee87876d4c19aa6bc83ed7e164178e25fbf9f7d62dcb -0xee1026119566382be1fca730887dd9e607f895046db70e40f904da6c49b860f2 -0x4880da64fd132cd61a8b9293b4fe72a36e632391b991a693924560e889df0349 -0x015afaf98edf7cfb2d90fbd43a55d96d7d3b82ea8c44e7694f237eb6032824cd -0x49e2ba40411c2de1d930a3c18c714974ee124611d76f3150bc17eb07de127963 -0x562e751c9793295c432f8ac6622a3fe9309f5d4a9738b07085523a4206502da5 -0x0a1e3c4a34f06dd025ba9368929b8f570b7178c030998b0c246f70f113f65e25 -0xb29ecac9d958cefb92a890e69715136a022864f53a4917492dd7c7c59050e2b8 -0xcf1247b4fef87eb06414a57e7fa19365b53f9d427a7f7cc8037d0bc2f954a4d5 -0x1c59ec182df588b0f317c66dafa019b581d732b244c1c0c60acf15ddbab7e819 -0xf2ad1adb3c5ed71276892e0e721c1d7c5374054330770c0e5fca6232835a2c52 -0x20eb7583fef51a6145416fc3fd89b0fdb10df33aa891e476521090d2e6978af4 -0x280d38ac3e1a88c24a733c94c831a2031676f5364be0f32dd870a39ee434faa9 -0x43ccedb32453f92f4ca650343005e9405d20da86f44185d058d6ab1ce1773125 -0x52e7dee2d22062ecedce2e76dd866e2bdd3927a304367ff47357a34103970172 -0xbec409f409330e55fcf39981fc86f7c9ef63372b53d404d411ee662651c7c658 -0x39407a9ff836969cff8bb03c1658757e896695724d76d98558f66dcd44ea5880 -0x94f1f8624e6a3cb6946c9524b44d5cec38c0e63f5cb2e2b4eef78c2312bccc29 -0x04bd1211f391f1282a2d14f245edf1ad023cb437fe1f86916435a01925874cbe -0xa0751cd1afa7782ac11f4dd490f4337ed53c8c2e03e74292994faf82556bfa30 -0x92cff0ea43d53fc6a8abe03fd63730d173883c5820487d5be21a32396f9135a4 -0xf11dc854124927d6b94292296adf46deaef956f15e4a41fa9b1f030ff02a6287 -0xe1daafd60468029fd16bd19f0bd65ea3c9b7eb2d9eeed7d00230db53730d5c32 -0xbbb032ef788fdb82f3e3f9f8446a77da4cfc8eaffcb533e0293ab11340834d7d -0x538adb610f1af97bc7c4dd590a12e81e9864daefb5519cb546b3dcddc1929e17 -0x7c68a033f51729011aaf3a1adc79fd9b41a2540eef914c86f356bfb84e86fdb8 -0x02b0979f8fdaf2635e0d216c985ac90bba3a202798a7a07b06baf2afe138ccd1 -0x643ab987871b33a851de5f3203360fc9c055e9464803c7ac630462f786f06c20 -0x585cfed68f65fece417d71ceefcdb3c22e32c5534556dcdd27d3ea5000ebb860 -0xbfe803bfc4c84c09b2967052aa03647272160b89f51b0f55b1ca0ffa9d181eee -0x6c91d1bba40a540d94d3d91d057daba881cca42377c8d5061ea61cf4ea1f6453 -0x4cbd63125aca52a866572d723d77a23668702c2ce6cd163746c04e7750a9a1e9 -0x3be6bb4623bc4f403b0d75659e8cc87f927ed85abd5a070ab95f34aea346f094 -0x0f6320d1fd577375319f716d983a14fded7542f39a7992e72dc10392bf977e71 -0xac962dcf1e21be541f76508ca8955c159793607a0262cecf59811f51bef5e395 -0xe9eae7f966fc968a65260d57cdd4ff9d842182c16e969b3a0c066d59dca9cc9c -0xa39c245c8444df3e4a9f3fc7820a4f6c3e34295fa9e36b57a52dc4160ecd302e -0x7209704781c4c08a1ef3f37b1bed235d32ae632514aaf0de8c1f888bf6228dfc -0x7ddb50468562755b187d6a32a9d8fe5475a25c0bb962f1c67bb66f1ec5d166c6 -0xa41393c9d60acd876b729a1c61411f9eebafdaab6a7f7011c16f553b57543a97 -0x1fa90b4429e61260a5d75f0943e3c69b6c9bfef9e2d6f0be94bb91ad08a52852 -0xe14ea43fe413939ab7e61c79b043c4bfc31f079afb692a032c8fb5de6215423a -0xd32bb292f0845319f04a1ebcaea9cf5e51b7c5506646f13869ae75104bf7fec1 -0xdf99f39f3e021862f001deaed655a3b3ab2dd007702649fc270d324b16e9200c -0xb0d086cff56a7392aa6e6de32219bd02a4758747ec5005414a0bdeea4249fef2 -0x432f1a1a2fe4387dfa140b350841b962bbfd00d499f40023919e061a20f10fb7 -0xef77e84a0f5f49718b9fc03bf249469ddd8754f5f8e6622994acb50cc9dbe1a1 -0x04b8989c5bf2e4a5328a736b86636b4e712af55424f1e5c2957a3791744c1a25 -0x79eeb0a7c9e48d684b5885f0280b15b73409f7512f76a93ad284ed7bc7e880bf -0xfa4632c28c57ddb88a1afca884e63ed62e626f4ea5a9871497b30e74af7ccf8d -0xac42860db3e3fec0cf70577af9a519a8096199842fddb0e547f89cb4511f946a -0x96ba528b92d2787325cbe36eaee3ba7a75c8410636768efb06656b27acb33b64 -0x62e2edd4090fbf54727b7be57b5e6c4f6cacb322cac2bc568d3d994024ccff3d -0x4cef6ee9ee9ed270c4542c18b2a5e03ce94cd3474c418e919ac85687cd97a7f3 -0xef79f8a7a3874a39c4ccc85c60f64ab346f152e7cc7eaf198933b074dacacad1 -0x6dac446548674378535486b8089d3ba2c7a87aae7c224a3ea6d3d13e6130fcd7 -0x20f7b53e3fbbaea164c2755a0cf2c54b853a4d5714cddb6ae2cbff1d59ef2781 -0x185f9cee2f098fa75919f92e60173c6820d1fbae088e0e01293e79cc99af4da4 -0xf3ab5fccd7decb79f3b7f8b7bf5ab4f591251b7a2ae99c317a6c31d6558aecfd -0x30e29971dbab7b2255f042f03c5b659640ab0f92a830259c74c60a5b5a4155fc -0xf195e190f15455dcc703f78f6e002f9b2f9c3eb8ec0607553fab7f274f1669f1 -0x0e374b1aa73b0068c1d75e325f173db7be0ad5dbbf384dc499405934e2572af8 -0x838e1c187c321eb548324b31cb8aec83b3fe0a780016c4c3c063a33a335c5e8a -0x16fd4b39223c3f2b5d48b72760b646ed3aa644f3fd9b29b26e9eeb6d057aeb49 -0x2b72327de28c3739dcfaf64924f067b19a105c267c4e40c4cd056fa70b333243 -0x115c26144bde1dd6c6a65f9df472345c8316237f0e05ffa545d7dae11198de22 -0xa6dc1f6a97e09cbf68943015963e7fd4870ededceee703c51467742db3cc94df -0xb256e5c04073f47d8eb19fc930df0924fbcb4c88ea916feaf6ac8e12e9e4eda7 -0x546cf36af9e6e9cf8953401b7e6c47bc73f021c4eed8ecc32680c21c8135fcf3 -0x26ebf21d2f56581bba461f7e9057c8a323652f8433223bdce4f417fd6e9d34d8 -0x0f079de234690d1b957b4b5ee195e7e945ce81a4c608db8c763235173860f79e -0xef04357770a8794af3f9846487f0da6924672ddd08c5e7684ab7b86e1fb26013 -0xc0b7bd10d31a4f1319d6f89c914dd27c96e50f64ca497c9ff1e2f67785f02edd -0x46832f353b4cd93cee67941adc43d6bf3ec220db95d280b7ba60825d8df14615 -0x4a6a94dd8d05882cdd805dfc1ddb868b63ca5f6792dfb9f5838ac242c654e4f3 -0xd341d1f62f8845d546c6d904637ffa76766d9eb3e0df72bd4c7e54d18f8e3822 -0x86323b58457209bbeecfaa41d382f02356e0f01c2a6eb1f5bf5efa31827b829d -0x2d43eca73fbbb07d2519b591625789cde7143e46bec9a4a0ddfd8d70249c9498 -0x347d0c7cb0062ff676c07bad76e7d78cd7abab575f31c01b93b549f7ab0996fc -0x090021ef26387cdb0ec77d2c332c54e4297a1d8161344676440ef76bf4fbdaa7 -0x47d880f9308af502765300f865b2cce8e7ee84aff7962ba05cbafa457ec6c0b4 -0x26e66bc7df29e779e8f6ee314c10b446c871069d59a5896abf01d4c76edc35a3 -0x981e667bcb3ccce7440c4b0ef9bc39b2c45fec64fd8241e6c05d59155080eb40 -0xecd7ffc1d8b9729ea1be62c8c641a1a85dc20015f71958adc54bdb3cfe79a643 -0x707bae5b3c14b7df111c9a1e5edf055159ea75c641bbe6419d167fd5408242b2 -0xe4f94dc85ff5acd0cd0665e118f25e613acf4926f95454a8515be435412d7a4c -0x200b9438847d3d4cea54f80f1b5fab41f7254981bfd5abbc769c7ee470f03ecf -0x0222a6d7dc44e0b717d26d8024bda3181e7370de6bc72a44c94a6c81193f6c1a -0x791093da0531f5b899620adfc770d819798131039dbd0508af1b36ebbe5e895f -0xa831909a6e410661374f5fc696c2b66210c1750be19a1bda705f8ebc54a9d7b0 -0xa25d91f905ba1bdaaddc0cfc542da97b4db25709d5010d71e99a0a5af29899e9 -0xb1ca26b6ac1b529bd08b01e05e8d82b49c1e9e57763db74fc1c4c6aafc948362 -0xdecfef9193f77324b3a1e0c64c257d4bcf45b4432a76a2e0122b43f497098435 -0x207376fc84e7bcd4abdeacfd96ca973b2576b5568229e7fd4af30136eed357f8 -0x91f25b5fb2bdd2f5d24766acaa37e485a9aae8f241bfba28195126d5c3d910dd -0x7a716b8b9cecc046c3776ec049460ba455cfcb242d41676a45fa4d829258ee83 -0x7cc11e125ba176d94ce57d9f44f09ba45cb89fe778f137bfde4e55bfa510c387 -0xfc7de2413b278bc97e08af671f9c1870c14bfb97b7a649e0c53b8040b1f5063a -0x03df09f142752eefdb58aacee676f24ddbe7f804dd654482605f9860d8134df8 -0xb2965bed1147204f79f6f2408942d266ecb36761087488b92a45a704b285a7ac -0xa79be7131f294968084d6eda033368f9964494a65676f969e71c0a90e7b35ddd -0x8bcfbc472cbd4e019019e987a697437d4bcbe4e5baf2a07b7aac0a7a66c53164 -0x0b1f505a6bd542ccf862b70b0427c78be0c4275f56034068db18d74bc950812d -0x6a80bab833c2e60e54f8efbd7ac4c97b030a54a608a6782be38ed24476277a9b -0x634ec361f2d257301858dfb5b529d08bc9366d432841b768efa5bca6b50af554 -0xfcd19b2440be28c957f8dba0f7140ff2c09fa0bc2b5cf32cbb0d4a29c11281f1 -0x30969e13ecbf2059b58fb7c11e29553d9a86c1216c6d6e199e1cd82604b6db23 -0xcdb97f3708dd1c73913f437987116c5c0bed1e921ebf40ebfef03dbb92abc524 -0xba2cd61c6318a6b6a1f90b8a873a182149f0a0d6c967b3075f408f13a896da60 -0x27b376869bf29e2c0fd0b79c069d83ea096e34c339436042ab5164469ae87495 -0xa6fadf2352dcbccf8a6b8a8e84196970b1cf7868af71301569c82c434b67c7ed -0x1a00f0b151d0a001220ab92e6eae7b727c2297b57daeb62b919af679ed13acf8 -0x52fd4fc0f6068d8079adade63bcab6e3c7478f7ac2d0a97a27c07da464c4ee01 -0xc371853c37886eaea6b9edc1377ac44d9e333b5e27bd3afac6244d101e00c7f0 -0x5ff09570bb7621a181b957e42f03311ebd929c1010e7b44409ae6bb923df6664 -0x719a85444d8f78abc50e559023715a375ac18da54d850df7217d525004d4b395 -0x5e0270142b998be504426cd495c3e87f8f758c0efb9769f956831ccbf59dd7fe -0x39fbde60d4853ce983028ce017264e7d9127906a8b78fc0cce85f3c3222c0bd0 -0xbf66e69464f984681bf7487dff86b5b8b85e150db68665381b5b39de0b106bba -0x364d051fa55d2826614cd6575902da71adea5dc9cdce10edcaeb36d44148b7fe -0xa103c12ecec6ba2a4bec9d7262229e59e91eecf5a21e82cb8f089e0a0804ab72 -0x8fb79711cf1afe2764c3ddb5ddcd93a7cd2e06f00a5567415537bdadcdc4fc64 -0xa19e23b618f3be41cf502eb35900690998d54b4a1ddd025b3ae4eca98e4baf2a -0xfd61fc46bc9964508cc1246996386fd283987d6fee651f5b3a6952f730f90e1d -0xae62fdbeb5b766e7eb04b4ef7f3680b043f659dd9ea1c660b6890a74a4f40b7e -0x60196f6aac284f8fef12b11368c64a0453a784ecf2af3e4c4009af02d1f492bc -0x7b1fff8358fe8a1b4df4292f646a02f1763d51486027514750e908bebffacc2c -0xf0860129837cfe7f92a831cb89166d809e27d995097ff6a55f67ba4077b55b6e -0x40339d502687c2b2cc11d77f24e4f451f3492e0c78f600b39d9756421a60e3c4 -0x00df865b57d54d1deac63523b40b12cc4bebdde1c4f6425433ee3cea56ee778e -0x29e1e88602f840f9bcd890bdcf85acb972465f3704c0c2ff7cd740ea543cfdb1 -0x975843a8ee6cc28c0fe99b98bd670dafb24cdd2da649959b7334165f3138b1d9 -0x9d310d661f768fa05c4f50af0382b2e9526350a053fe253178e04f6ab7b70a91 -0x3aacba1a0991facb61236afa564d733a5e59557d9c47c12fbe66c228bf70c864 -0x084fc201f1585879565357cb9f451a73cafbe3c6876c549862c29548e0635799 -0xa0bc7edbfb93794275ed029b0bfff6c5bb00b0e5359daa12ef3b64081a1f800d -0x3f56da541e80e257b29fd361def8531c0491f9d82108bcc116773ed9e044cef0 -0xa5b4a8604c9eb4c19c5fac29b676688416175a7ab18193c57ba615a915d8c2a6 -0xd328a5a61bbe49462d0412cc4d69ed76b4a433a591a842ad5eb98053475abad6 -0xceda57199d147eda9e448f26b487118c3b54c9f907c39993426064b1f90518a2 -0x25e517724da3a03c1c17af17959bb4921b00c1d6451db705faa3b503f6e55963 -0x80ce4d939582af886cda42cebd3413183423cb68b1942cf8b663f38d39a21741 -0xed1ae1f60ffc4b185026bbc1bcc7d5bf3a2c92b0edf6185356857760d67ac1de -0x821372696f10c644d1fb4e23c2dafc02da3055275ecaca75731bc95daa3feed0 -0xd2ba6e609fdfcee08e7cf78c0a017546c63442a153ba1e6a8bdc646c1097e802 -0x746c8698f2dcfa4ed74f2eb56b9729e99ac0a83fd467c85849cce339ae56c99f -0x25e5b5f6428d978b1827e33b5f8ee04e654e6cd1be49da1a40b059d87521f83f -0xd84db4cb65273879523048c8691c80a7f8d837c223a0c9169496d7da65550c86 -0x638a71a3af03788a52fda34297fc2a95201a7f0efbddcc7e5672291b5d79fea1 -0x51dd5932697323a203103e94dfb34da635196974b8c04dd05e448c5dbef9d6c1 -0x348691bc9789966fb2d51195402d9f579691fece3c8528dba0856be5d69d3002 -0x6c5543cdbcc37d3f385f0b7459516677bb8dccf0219dd9b5f4da6b842e8ef9f7 -0x09dfe58dd4b75fa120cfdce4221b54d0c9d17435e05080f0bd3af3f999a3fa77 -0x69d08360a078d4999939f71322f6efde2f1a1b49efe3b33a1ab10ed6bf89c39c -0x5a73ed37963e2d29a21252b1886e9b0f9104c2797c2016c0aed84adc13b2c3ff -0x600d19bdb73e826cbcf886f8024648b720a14751e4c83755255cb681cf325ed0 -0x3f3d58d37ad1803c2066858e7cf28177e417ca54652f56cf492ff88e7223ac16 -0xedaadf1a5fd08ea33f103a52784acd364c91a5909b0ace3aae3b836bef247be8 -0x49e9c7a9676cde23e089158b56463b1814851d0c33feeea16c14cbe7e9e37a35 -0x2f0b5dc055bc6fb952384ad812d5ee9f640f72ab5b136dc33d0526e1b8ecdf71 -0x0266b49a31b16ce0945c9da47fff30fb1f2b0d90906d79cf6b89c98c2c5abf2b -0x7f51c22828078c12223f8b3e23178d900b767f2a9fbaa2dc279c2aa516c411c2 -0x07e7a483f24af234cb7341ab6717f903e18362305e14ca14d62ba703ea75d2f4 -0xebe02a8a8c575ecaec487f8945dca6d6b468369127eefc79fcf55160b83ba17d -0xe3f034003462367880590fbe9093c3a469a4e1e9a8ea7af2c3642d018b5db1ef -0xaca984e086b9b7fb0f32537e9caeafe699561198d4697256fc9ee9bf8a0cb445 -0x08a35001982c58150dd1a63db56028afe170beccfff01fbeae56e0c9971b2185 -0x7ebec29fef3a05229e48ad84e0478da1a23de3e7186db4e3724a5036b777e58f -0x5b1e1065482a01934391addd93045d7504bbdc7a8fca394eb187f14342c11d95 -0x9febbf1147310ba838780c5065b3bb307c3e81a4152d3ae340f942b478dde236 -0x6c529f2847e0e29b0a72c19b8c5b8ea06d0bd37753a925114d445d610ad6f77c -0x2ca48e2a39828f2bb201bac0824736ad94080e7fcd10477eeaff964999fa7e39 -0x0a87dd0b70140e7d5ccb8fb2afb41523c74e154d9a66dcab7f418373472cc02c -0x746b236fdef49946ff6eafe562fcddae44d19703a2f34591d924118fa9d2d17b -0x54574ec0089488662c676c25424c9d33fb6c72cb51db6d64d836fb51260d0dd0 -0x4a4507c1050c5702f1970ccd8ec8b9d98f81d6e9d6b82938ffbe0f7b679a6e56 -0xa21eab48311d64290aa5d95ae8ccb8da2ae59cc355c45913c025470e0a160147 -0xdbedd1bd344a2f1f8256944d2abd15570ea50e11a5b449a7ad3960ea9f96b8ab -0xd5e47517ea47f8153e4bbba1477afe2ddbec4e35b2b16ad902d575ffed7fbadb -0x9490eed4e4f185c1747301e3e4a58da96c4660a6888e3787a1c8177d12c85faa -0x286ae8b9b4451ec6703b2e8023794f386c189f804e181412411749aeeab68706 -0x59b6353e58cb2ce4bec806406c74b3f18b11d6479245d4c134dc07fc83e95472 -0x63d204817d214f39f5355eff6a0c0e5a695852bcfdfe2dd3b32350be998f09c2 -0xd05076878051c718087f862f3890b93c338806967df6ca92f929c2a2f5b0adb5 -0x16bf361e1a06c2c5d86cc179bfd05c969ebb4c07cc1e11d8f4b7ef6d04dd4a10 -0xfa68df37bea13fbf8be4de27f9458b38ba5b53eb02f54760e5cc109879b1bd53 -0x95a3d49c5d2d77068c10df797775702b5d219a46b0eb9384e90a7afcb51b6cd7 -0xe160bc113e1d60e954882b7a43fa109e231849ed653c35baba249747a86859a8 -0xec93d44ede4dda223a432aca9e44c90af80ad491e236c81644611cb36d68b3b6 -0xa7ec298c17e82cb2210e42d819b0b45e715ff16144e2176cc784cbb8e696921a -0xe7d7cfe4281a60d84d64b12e38d1d976b0c4639059050fdd23577b1955c446e5 -0x29cb0fadc5264d1caae109b6c09c18779e8137af24784fd765503509b3f9c844 -0x282aecaec11458f42f4fcc1403c0d7a97ac4f521694248bbe2f6d240bb9b1346 -0x4127751182d55bb0944643013227f4c43f25454cb7f6e5dbd70d5fca0249a7f7 -0x19e64699cef231cd80a2ea382dafc016568050e7551410dddd76ef3669aab1cb -0x2adaac3a55bfcea4d1cb452b51076bf0a7440008f223d1e7633d1ef3f4273fc6 -0xb892b23f6a75db16359d9671719fd19462647db7fc1e2364e334c33c97da0cb6 -0xdcc08b6ebf63e1c49d1fa2f9180882c9e5734651ae3582ec12908d486800508b -0xbd265ed31de4d07b190d2163a6a0bc3c2bf916f0d903afc10e67792dbb63d527 -0xa086af68390b733756179c7c1632d6d35f9d2173139340123e503b0a55b4bbf3 -0xb20c577ddd24b23126f6c75c8eb23a5721a2ac212819e8c2440e1f9702fedad2 -0xad0c41b23dccf6dcbe7c6d369f6955cbe18727dcb353cc3182570214331be525 -0xa2028c3185826391b51784056e2b6c4103cd0c01b1e2fd682bb32e712296e100 -0xc7e952e464a5ec3d2d8235bb0b7e2b86ce16ac434e7abd91e7816721a5cc3d91 -0x4e1d9119045f17973c03ac06acc6d2aa81bc2c9d1cc4f4d839d415c680504426 -0xf3d94951e7e01ab5400650895b457485128904e596c0bc1882e2b947758e9a1e -0xa034f7c29ebb27bdf7a3260d604d512c428ed9c3c895428a47f864ce99544544 -0x8f817b615a79656c385d4a050f3006653ddc9cf04d18b6f8b3ed9b5310408329 -0x7f9d49d742f9bf6e5157043883c4323351364f2dd0b693f5f6d7ae698fd1153c -0x1c18c1bea12b7ac8ee583c1b7c51c11e2985dca9f880d0762bc9d47715984088 -0xbc12bac8360d858cf586b74ac52636bda0a310206ac8c09f1d9d5d03ba7b8298 -0x06168b407a59c39d2e44c53c07b1ac747a505bc3e74f2eb320d6e95720a55283 -0x9c1753b9e5999c17421ebff6c24baa5a0583994e9290794127126226cf0038a7 -0x4042ffb8786f64afebb7770b0bf4e52f4e704df2563cb786244e89435038a5d8 -0x49b192a02379ee80405b2a6095db3fcadd09dfa5bfc03882e741d658eacf28ab -0x8d60df3038452f185e3b0a8ea569cc4f44b8184e482e16c39d212e8fbd81897f -0x3cc5ce5267a12ae7022cdef52cbf3704df31e96ef6f41eca6f6da17615a79da6 -0xec87d7ec510b9c34015c6c12158d939e6820da351eaa3808f0f25e39bc155573 -0x2f1d0c7795747956b32ecb3e576b81d2e87937b35c157bafa024a30e349d16bb -0x72ba35c9f0bedca8914ded2bc6d8b459d3f37de0df570c4c90542918d015daec -0x29f738e42ff5e50f266b27199fec96cd119d426f36d359be5efa37dd576b26fa -0x881def2ef237d4db985f3fc5c0a3c690a429f564854a245e4513586fa46a98cb -0xdb197345adf26c19ff48d3eb20456db79213cae3aa03af936e2c6bf01762113e -0xd9529f24e093991dfdbaad2e2dd8cedc266b852132630650ee234f19815aac6c -0xe63f5d87a7a9d0032737342b96ccb5313dc086fd6846a327d9f92cdef15e8ddd -0x53610abdd63ea1997d73066f4aff693f1358dcfc120d2f391e4aaea3bf09eb72 -0xd07419dd51091ffc1be8f176ce4c410da58ecefd9bb38b6ab47028d403fda249 -0x20cc3844a18ccdc070b3f481884d4f96d5b0871273ee6274fa65c04e962bbae7 -0x20dd3b2a477626e5a242fe9a3eedc9bc1cba7161c5a3b8bceb2d393a83f78c01 -0x8848ed752cf266b57f74e2d53895183819a7424b4fef944a9cde93e13344a1a6 -0x9e19d0dee277e80c80bd586294a13571925ba21b331846d00b2cdd8d44575d82 -0x591ea47090e8dc5a5f93a651654d4109a22b68e87fdc4908f34dc23a8e29e9d3 -0x82957683ab62f2f644f66abfe15c29fa34b230ea64c815231e7e9e7f95d1f76f -0x99bb37bcd3889a5c1bd61e133c72f574285b17f7bf04a6e3d1bc0695d22cdd6f -0xd0be2b1311304d8cc16abe08fefd05b57a828ba5bdafef5ec37c06449f662aec -0x5eae9a1518c1e18de3be1abfffec69af3abbb27aad506ed22058e206cb816ef5 -0x33447c6507ddcf3ca2401600ce78799974bb3c56e8df6cba89c5eee1a91ac57f -0x54a8c7243472b6d83906aa235806a44be1370aa59cb4e9315fa27c4d41e8d310 -0xcc76ae0daf595b2aa4c9ab0b925d2434a88a75052856780abf410ebaa747af09 -0xff29702aa9ab5142bc5946d7bbc6d44f520ff2a5e0e9a2a18db3e3b871c60d9a -0x1af466cb8c69b7f797ed943ec5ff5fce3c44058f076c8a83793d178d3b553f31 -0x1028e5ddba6d57cd74312f5c591db6edf9e7db701484ea25b8a84c375b225af9 -0x13486e90b4dabeb833c733ecf5c05d9ac5c2f274265073b54d35c95f1bf99a76 -0x2eaea3353cba14eb7a76841e47392af0026004a928a99c6fc785640efd9701ee -0xb0ce4943cf328ac6e93b8491084dd64b33896e32e1ef81df4e1e1235d882261b -0xb365ca16a3af3f43c9db2fd547caa2a082405b47100fdbdad9042d7a3362842a -0x06fdf5ced565f19175e86c2b0ef9d26562f9853dd419337eb419adfafb9942f7 -0x50d9734f2e96b66471269f1ede75cb71a7aeac7b6f92f3ec60d82643395cad17 -0xdbd4911cd955c14ed9418e40f4c571bedfe507a9c70691305a796601fd269cee -0xc0c791b38df3058e8d971e675fcc62cc6e97b0731dd008b2576047e746591ff8 -0x773dbfd94dd3c3a24bc582504f9e2a40526ac152406a0ad089653c98f045a9dc -0x6cb1925be32e8533c5a3027510f34f8f358ef13adccdea71c6df4e4371365446 -0x3ce5be90c6644cedac0d17ff0e6fe866468e50e793c5e1d55837160c2bdd8040 -0x182321ee7341720c915a15ec2554995d76240c9edd73141f03f951edc42a5210 -0xe30ad34f64f150df8f6c02892870ab552b3b930613861ac26b46093cc5b88fda -0x07c17706315c8116692d4580cd66982b75bd41c4175ea9a4e39c8dc314ced149 -0x596deeb262fdaeceef3bd5f2b85a8fec5b73fa95b723d522322f7ba86d3b2d4a -0xaa60e69d7412156f40441d9a87b5c075b928b96d33ee495a18bdcd1ffc950692 -0x62184e6acaec5b88bebc19685ba9b8b57e39efd336eb01cfe82c909cd76a3c31 -0x2ce400b1efb54a34d98caf12cf042b07ae9a06ace957d3f23f3c4305e09e4ae6 -0xe3e875d49295b8685e997e4f64766ea3ee6e5557d1ca4ee3b85e73b982f96f11 -0xb751138af0d6e48b33d0b2176100131c83fb41433f3d87e740fea53eec5a7b65 -0x8fcdbce9247ab78b2f75f6c8bb308515b228d99c8dc90b5be35bf891d767cccc -0xb139015baade6327997686b5ef23c70470729cae5cb972b19ef2a738dd3142b2 -0x4532fbe1d9ce3013df758acb733f8f964cf06decff647a17f958e9e91ab561da -0x2ab343ab2775a0bf099acde97177a1127a78d6b26b98e445b5ae3401816f30fd -0x0285924b7887b667066e87f12835abc4f31fdff8e3eabb1d9d9ae202f9c6e325 -0x937f3993363eb20d584501164b80c964d38c8682475877bfa4cd3a38c4f02b3e -0xab5235fffeeaa90af8551dabb535507fdbddf76eb747b2d478545167c533e07d -0x685ad1f7c311e1916c4f00287c14c5c38df5ace49d84b627a0417dd267ef9e4e -0x70d32d2743bf3069aab7243cbd9d12095ef68f5845677d4c460c5e37a553a828 -0xd545d17ff2cc77fd716a25ff2cbc787b1a5f6bd5ce488af36ca183c0ff64ffda -0x8d6d962d8ff63385097f0ac64eb55620e702bda69353304f984233cbc2c478ea -0x46902cc20c1d9efcb5917b470cc5c8261f377dde1f5acebc2770c67b421a6c9e -0x85eb145c6fa0ae409ea61b9f0d08aec4bb7bdda478d19cf2e932851d733d7eca -0x2b24f5b0572d3296084b6e7c1273375e46986ae985904add7aab34e589be11fc -0x40364d8fb690c88c6a72ef6c5faf2acbaaec16b1beddf7728f720cf880f77239 -0x52fc264c318cc703547663730bddcb5ddfad9f8fde64e79e8e11ab4bad4e3de5 -0xd82664891637e9f58525449a668c36ed36424e928c2f8185333184c2d8a37daf -0x0a0d21cbf6192f30f8a20887173023d4fa4fe533a042efd8dc84f357987d25d4 -0x91c951f2851d26b351027b383694952ce23ad709278cca0f7a7ed21148ee0ddf -0xf348a2d077e9a506bc355a4963bea1cd50d4e8f23f3be6a474e13e419a0a5228 -0x12a17fe38fb7176a8f2eefbeb3ea8861dcd6cb439707f64c9bae18ac358d9c84 -0x96522967cfffef8e51041e0785da8955cbb99bec4ca419e657c85ffa072205e1 -0xe27b69ff8a2092c1591582a98ac48d57299cb40398c778f074677aa60836faa7 -0x02a24442360e4ca58bf5a0ced289dbd89f738227fd1072b164374081224d91ba -0x9d0756b2544dc60ef95e037ec0c045cfd07684ad99ebdeb2ded9658f58968eb8 -0xd46347e511fa4887d7b3af1a98e3ef3ec1c0ff53a70735a7f8a2644680b5322b -0xe6ddd55ab33bd27a83535ba07c5eeb680d9d466dce3267ed687a4715be0dd1de -0xbf360780b18e88676c1a7c63849746e6f092934b8a04c32fe13d1a3d2edde120 -0xf6013f8c0936676dbd5795309eee9cce8c22601966162aa43a47163352a112c8 -0xb89be3748d40ff958a8286e264a05a520d4cccb388bde59672499ca0f8865c6f -0x5dca2678795675cb712ec7c29f65d24ed7b3304d6a80d5cade177349e1f0a00f -0x68395a5a7efcd15273093d9fb4b9a7c5efb28cf14cb385b1fce140553588abcf -0xdb424023562fe12af5d1a8c370a2301199f5a7a2d97ff7055425e0e9c8f83297 -0x107b93765fa4cf85c31feb5e07ecd2feeed944690c90811c7e466f766b863ba2 -0x3bbfd6f748d0f4070335a065d23b022c2760ce31e8c12b09dfbd690e0feb56d2 -0x521286144357021e5a154d097e35c48d8f61dcea3d90bb0ed4f5d76bdd15e193 -0x9dcba2cee72d95e0dec0ac7e87ae4f68bd074e2471b7d537e9eabd01dc4a95d8 -0xb3492d244fe9762015da358caa2c71b42ac800688324d5af6207380e7a89c7fa -0xde6de403a071bcebea9763afb204f89f9edbdefc3d0fb93b35da610247bd12e6 -0xaaf8b1f4a2e57823426960c75fafd27313649a8de0777003ffc4e422783b8ded -0xf849cb559937316b40cd26ffcc9e629e47524f0011b46c95574ab42d671c8df1 -0xbb896df8d22416789b0386c90f76a1e431ceddd7df9cb1e4b89be6c26c53ffef -0x4be105ad0a249f67061f2069f66e3274afd3cc55482cb07b7311bcc3eca6bcb9 -0xce6ded09dfe37f3c834d60022449e7a9d4722eb31e5234737d130d9a3fd03f3c -0xaf56292b002a1802e823641480c1e4b899617ce0f921154994ceabe8c4716fb5 -0xd901063d233d78d8bfb6ddc46f46e37e145139669fb7523d6f0ecd6f5f3ab4a4 -0xb9b963b63ce8fd1c6e6af259b3599323fa918a7b951a585853f6cd9148308481 -0x0de863453a470167a3f4582431ce72d14fb37a4da8072511f0f8fd978f450603 -0x015814db9f766cdb8d13616b64bdbb7c7a07d1d0a61a5bd3f171482afc49d379 -0xb30c1d8f92f9340884e0a7d2e8d44ee0f47b8a6a51b32d473d9099a87eee1d1a -0x84c24a61f87615e207437cb0c5c08b69f35740618e875f2de88d12fafceb68c7 -0xad159043a8375e6f47cffdf130ba8eb9a6c655676f69c1df4f56a811c096f355 -0xd482f04c2adbbea0929705e435569a5b303de393cbdbe264c79d31545edc3744 -0x5b5b420974db6c5b833356591cc870968054ec5cc8a3b8db8fb7be21966097fa -0x96d7ec5e989aee377bbbc246763064c046d2e6ca7d3ebff36f75ea1539c312cf -0x1f22a5934473b0c8284c8e1c3879805214c6c332cfad8f41117263c97edf12f0 -0x67d97bd3844e4588b78148514379fef7657ce37e37092099627249af2a0e6e11 -0xd19a01d0f3eca136446b731542addb3348999d55edb78d18d4e3bbd1ab46876a -0x0843e6c7bdb5ddde64497cb60c5b5832a1210dd074c7fa51b6d1eef77ebeb09d -0x120a45a8d64d353660949d0965933812414f10b6daa8feb0915fb154ec2ae58d -0x144da88b357f39a3d3af912986cbad982dc7cecfcbcd39cf411d40b518c961fb -0xf1212b88032c6599b1c2b1289a96c0af1db4c60d7594f312c40deb3e10d7dc64 -0xbe7be78ce5acff62d02e39fa3491dee168c2b5e14481793f1be6efdcb6bbaa26 -0xbbec9e12a1557b4601b4abd90efd4dbb5100c3cdf50364c31df6979a7a9e958e -0xadabea909c09debca5cdf654228badd2122d643e0a61216076df3c9c39dd8417 -0xaf7cae9c656eae448da420cc42f91663deb82ef1db93d91ef09197247389e00c -0xf7c19cf6c24d56f3269023d76b7b4a39dabc77833f76463e3db4ada4d1b1958c -0xf387f5332ac73d8c36978cde967264b449a91102a44e277dd20e55a287d06a11 -0x5b0e377e3e89bcaf96268c6aaf07361024f249700195d1bf193f3eabc5c2a8e1 -0x02cbf4fc82527f202f5140ecc3c7c9cc0cfade6a26c5ad11c593dc4ce24558b2 -0x35d77053938b652fa13374c3cab6f37e5879811712484f573132204f15b6db8e -0xdf3aa3c56c27aefcc0044fb58d673265d47dc2b514147ef3c04fbe4c3b98392e -0x08360313a24968e90710aad3facf8b6ecd9fc8342c379bfa8004a7f13450682e -0x17ccc9f6bf7f3987a32c7c6e8a78efe42979e402d8e3d6ce27b49665ee0aeb0d -0xc4a32f515b1275e2590b59984c262b329010fd48ebe1c609cfc0b1c2e9157e6a -0xbe83693b0d79ddc1820708668d15e7d2f25a3078574362e66be5d9d2d30a6ef7 -0xead4a25ce224f9da22168651a213e4e5ed7f61e973a05a7ae5f261cd96d0212b -0xd4770d836c9591aeb4d094441dbe886a12301a8f25629911bead8a2de26e44eb -0x9cd64a363ed8325061cfd1c8bec3bfa1bc54b86de48cfeca609e7052ce7ced6e -0x7fe70e4e78654158f520646eed54e28ea876e0103f0d09811f1d2bbdf4a31bab -0x3c57998dd56cce7c5f7fb5a45183c203a8b9ef429ab922f4cc45ca5f9be8b75e -0x0b8cafff80e230987a7bd14c8ef31e31957709d62c6f4faff623e8ac0e6795ff -0xecf4845b346d0eeb2d541fc86303c48acce1601bd039897c9161ac6c22972294 -0x8de6438497af92f05b2cf85cfeb1d89a2e7850b9dbe5b226aed45ae7cea96a8b -0x130260789618240bcb3d91240c4be487715c934b1171cc7a613ae8f6b433cbec -0x8cabc09b008aee522b020d6c82d91b9fc34d122905ff8e79901141d6e3687229 -0x723937545600f605304c45e14f5c028afaabc63a256372ad594b886bd9c80b72 -0xfbdb82ab2500161da3abc7717c6d593a6c751e1b7b483832ece8e1dcb958745e -0x5ff78b78a761a448def0d37727ef01a583df4cbb52402079c2ba2eb261f6139a -0x8390c53b2dbbfc69f30b720d55903eee418634ba7ed705ebb10967261f257a81 -0x8d6a46717e61df5d7b648751b71a07f891b2ddf754f2156e7887b7bd2e9c2e98 -0xae019183b9519df4d2b4b031f5b0d7abf7683213cfb8fb80515b82e3d9e1ac81 -0x5c93cdaf4603e128b6088c0308728b9da2a71716fe63e4b0e10134b0653969e7 -0x924e5c1fdea900c7f77579b28fb6b63704b623e0004ce4a05e15357a7ccec3e4 -0x42912a34e5e5e663cf5feacd417729c467d61fc2b16e6daea792494ca9aa646c -0xce0116cdc6a1e5d26136dbca88e11cfed8799729085f02ffdfc2750ea30c6ddf -0xd286e0fd60df1dd2686d2aa7e4521489bf6c6bb35171c6d540b69260fcec5148 -0x698de79171123fb28e7604b61b37b441f0f51b791db44f0fdde64a66c8ff4a8d -0x31a68f5888e5aa51efa87cce3c9695621011940f11e85d65c10fd0c2db60e003 -0x19aa04ce64c9f17fde6ad152c468f05c5206948487d683b1def7c11d59a40077 -0x85d42ae68206c77ecae781c15b08dfc49e9dc3a8aaa01351c5613082b4969af0 -0xf60da6001494265f5c0823ab62b095c093aba6e2e1b2b840fa1a102694037540 -0x39af9c25367e874e1f1afc13600a6b51857871419aa8557d62dc6d1ca4c113ae -0xbe411d12a4946e266d31a4445a304a5812ce96f2993fd042790fbf477088e68f -0x7f75761311bcca947e8260e8045b7decda07ecfea547977a61abf72de9ca2c7f -0x9ee2d4fb06849fa10bc2d7f2b302589774f7a230851ca8e7a8bab28c2b2cd90d -0x184fb7b6f0f4ce766fe7d64fb1c43290f600c5f9d32627bee5be8736df8ef01e -0xf3a19ed99401621dd28f6c962121ce2f591637823b5296c676de20f606eddca2 -0xeb39f1c98a23604a28950a888a81ced9ec426e8d6b698a4ebb0a427ffe97fde1 -0x08ffd87e1c7a13fb7a00ec89bb7479541979a5ea7ba665fb420fe3987beefbca -0xe5d5fd8fc750db1406b8e39618dc7c702031e20e34fb03b7f0d666521e461b0b -0x0f821b44875edc97df812f1c9dfbdf883e4bfbe0109717a126f67c51d8f652d9 -0xe973b358cc4e1d70a0b20b6225b4304127081f128386d2f3a91fbfcc213d251e -0x5211ea4bac647493d87294db634d0098e8221d04b83bd29204c6d796822df2c0 -0xd57816d489673e0388694684090fa045bb05921d8e62bd0eef8f0829f57e4912 -0xb271cdb0e7a98dff4fbd24cb7db9923895ddd02536f55b7f42bb8dca14a9d9da -0xc567b20ddd6e47689d77a3cdb76ac3245fa71317bfc6ee580af0be9e6ac6255c -0x2ed8b801e955c4d8588b7a3768461da891e66774cc22277b98d8092fea8e1296 -0x2dade086606743f66348f004221e13b45fa8ebe2240f7924ce509832ef3f9892 -0x185cce1eae43541a3cade27391955c6ae68ffb3dddc35899c1acde79c646555c -0x15a1240e01ec71197e3f7170e548a144080826b04a8a11e505214259fbed08e7 -0x525a2a6bf9b5f750ded7400359b6ad27deedf7a04dbd01f3cbf1aca9be311543 -0x28933a150c53a8420aba66e425d489cc5f759d9eed0019419d7cd221f01e2d90 -0x418b5543ed403bfadc9017a386770c57f2764b7e0b7537cd6d7b660d6c898798 -0x67bdeaa79d61abe4e7fd085e50e17a89dfde70ff3d4d7c7808e2c56293f4e0a9 -0x720eca053f3be1834bcc7e01d5458081f9a3101ae88d42246d5481bb16b6d3a2 -0x30932c8cccda0adabcdf95474db822c7bbdcf95400f08319bff167f28e1fa790 -0x950ab6b3bfa54a25f55c0c7a60910d29e4e4bb30902a61482afa765d1f089e63 -0x85df51764a18a5211ccceea463fc4f0cb2546bf672f0ba7d55ce80aa658d82d7 -0xcb2f61fd310a9eb908b05e85bdb930b47a3906ff7ab1d7a436a59ceb376fe0ab -0xabff5a6cdfee5c30c859fe3417102b1fd9fa5edba5470104e22981323dc4d1f6 -0xceb41fe6176ed7d496b7c9fbecfa771ba12d677aa16ee8d7703b3f5c70589032 -0x58fce0f6cd2edf5b4e4a0498585efe2ee81f8312fac879eea59cbe887b9d76bd -0x665790637182e7bc296adf8ca02bbed2bf2fe207354a5ec9716822fe72ce9f30 -0x807baab9341d16756f2701995ab99c78dbc99f56f578eaa5c23ef13c34b3bdea -0x5916f605d2b19244a47ab023649882d104994dfd140057dbc81639995e4a6604 -0x72f6e763d4322bf5c8c3603e5e540d5bf97e768ac0c800c7e8866e2bfa346d4d -0x647f62bfadf71d757c707ec9d3219a9a08b17f6bad3b65b1b930ac1c43f849f4 -0x60ceccb1bfdea649eca6a91322f0b8f53cf22efc0f8788e3fbdfba7b7a6abc4d -0xa7bf09dcb738820b77f4cd8335bc1150eda112e14ee21bb912e4b11031ecacdb -0x42a8187985669710bb1bb20219baae71ceaeec8b01509366903cd9a1ffd8e92f -0x2aea77d23bd53c22aaaf172023337a3cb396da882b509c750096960276f51528 -0x186b0fdfec2c95c4b0db8a4ec2a356d9ed5bb27b34303c9e8a58a21f59c77253 -0x9eceabaa6846288471da3d9ea9fe7e774d9196712d03a02aac31854bc6a6fbae -0x4ba0770bf4da134f0e9b16c1848dde192adfd2d28188b0c4ef9c4225ae787466 -0xd0f37f1e49b9f928ea46e5f07d3b7dfe49836c7fef3588dd20c5754e5db6582a -0x146cb9ee82480b7d845a3d92e40ae76c07018bffc45cda5731c3d783e34d6875 -0x08b877ab5a5dd57f7f1b9e5ad4b6aa0c7b105f4684fd02ab7df7bd7ce67a9b85 -0xb5ceee359135d044c190763b675bb86a542960ffdc423ea4b845d77500670186 -0x92e09b3c09fd6e2d83682017bc39aabb50d998117e145e20b3811c67d2daff31 -0xe47ec2952cf2da3179b9801886061322aa940722224190edb886d90145ef9f15 -0x6bb9853a67da97f67e53e2d142b4c000366deefc8af224814ff83c25579c1247 -0x328ba45fbb076ddeeba826ea61c20e752751d4b44b4f82835adbd6de619949cd -0xe663ca5aaed9b7cee884cc9af7b280d1838f0643fa383b9fccf25e35b608400b -0x10fb7fa6ed9ac33f0d8144425f118dbf9974c299be2087cf338e116b55a26b89 -0x11250dca7c4da21c93382835abc1b42577221732d6e72e765f644b4339a91e93 -0xfaa129aff412ecc40f43635475b8eb7724548920d70a85dbc1828ce8e5e816bd -0x93cbb7cdf70a1b442dac049a59131875c23c70a4f3d99ae470a49bbf2eabfa69 -0x9191922f4449c0977605f90ceb515c9da8e593b3ced8474e5246a4f8c71b406a -0x3dbff73a188c0cd5d28ae89cd6804602a88ceda9c5dba724b3a6e180ef885d16 -0xcda7d3e484748c4e716deabc4946890ec871f506b54819dbad233a719e1e7f1b -0x38de258dee6b450fa1bedfee2f8b834825b99247d281069b5a976bc10717ac38 -0x6d927e805d3cfcec534a46114a4e5a91346b227f1a39ecde23b889e209559bcc -0xd8618a0a66cf40c2d7b75940ff91105048ca16fc6e3f58b23a5c391dc09cff41 -0xcc5eb9ed7ec4adf6cdb1a200179e2674cae3f53308ef337456bf6c06ec6bf156 -0x0e82ac315bf4b77f53b026ea754553b023541df95cdd69031763e12fd2ced5de -0x7f82941cd99337259ddbc46f9c8467eb7ee34d00f42a486239596410540c783d -0xe06bf1c30f1d113724cffba3df5a36d308672d43e7c761e410ba5238ebbe53f7 -0x5c42c68e613f644dfdd542aa1fb95bd7fe387b07cc556c853d4b31d3677af7f2 -0x07186e1bc36106e2d4fe282cba10ce4ec1495b3027f2172360ecfcc3cb4c73ce -0x6c9ce027f1bf340315c5b3183f821c0acd4354bbb337d079d62099ae67c51ab7 -0xc5d9d91480f7c2c61e81a44d7cbe68195c5a080713b7e5ff5cec91fc590045ab -0x488e85d83d4352caa15f4ba5ef7c95b9e028328388093d1039f3ed8892b9285f -0x26a4a059aed2e2299ed17e665cd942db1319c880df89e3af0a534e9c10377259 -0x68d12d95f9a950e841af02fca7d4ba36a6d07b0ccb27889f60b938da1e296d8c -0xcbd3a11d84776b8f54ce5c1a7b023bdb5d958fb5900255ec85797249a753278f -0xd42ff6cd3acd9efa59008b82b776706e719bd435966f792158ae5a3ae613be85 -0x3f27f13c4738755ee647610f1a4b82d034d65d01e923d4704ff5fd06efa09adf -0x2cbf4c09398e77aa58e18f829a52ce7969a72b8f3f830ad187553df427585ad7 -0x6e07edd8f5c30293b4e372f47db7ef5020e783a0baf70cbeba04cc89a9a7c99c -0x9776d2d0a59f502d582bc53c9605cc9415cce01555df5d79f665071708cf6509 -0x63d4eba29502a3e9e85d35fda1631aadafaac0971c077cb83690ff3edcbf2d62 -0x7a15ee71c436703b24982754830372bda8896f7d0e65d216456c521f452b51e7 -0xdbbd2a55a5a5ded4001400af0d4ec3eeab48c8cff27bf598eb83fa54a5e4d51b -0x33f75163c31715d92a181e3ebf0568dd3e4996889552790829d57b271df9ac3b -0xb1344eb7b994dff88b598bfb4fbb86ca88ad206bd5bbc23c03a9927104e203da -0xa99f5ef4e218b98335df4c81ebc206cfdb5ed8fe51bf2c65af713085148191a0 -0xb22512560cf3fcf50d3d4299c4ff8b16cecd7a3651fe859d4220c62e4ae40289 -0x9e7d1758323010782a8ffd5b65d7ca9feb7e68fbddc94cd3e955cea64bb804d1 -0x1f76a2091c13807c5f649f96a7b1b656b678630103a9539a45c34e80f98caa8b -0xbc9a4eb3af2319b6d2c236f9afa68c1d4248d59be1c51c4450cf7044539da8cd -0xa1fd0a9f5b1f006bea63fab45f2c524c743c688bb4ebc448ad0a5de7d34e72b5 -0x9248aa4647ee9151f48d04e29a01b0f705d0dad8743c8e3a971890086a663eef -0x1210b6874f914db58e45f0b7c4e81cddebdbadd420a8cf981c47736b12b6e1ac -0x7f8cf187b8bbcf9c66ab9d057fe153bc632fd973abecc6f1f6dafd1996e7894a -0x86b1fae5333c86d15d699c6ab9944bc940fe156c5a72db753905669aba969c7c -0x249de2b67d37ca0e36792a2b48d4355f1fb8f8b6b9e2b03d2afcb63086bf34c2 -0x9993b83efedc868a81a6d8a0ee301d65c9214cded6c25f1974b30a2ed78c1ad0 -0x93ec095e46c760606345a03e36ed2c9c58527edaed7dacaa5753036a19afa9db -0xe02ff007896d51659b5ddfbfe359689fe92362371507efbbf628837a023d12f2 -0x86b1e89c29ee94ca1857ac5b69a1a79c53177f3688242b15c3280d244cd02453 -0x1a61c5ab8c9a898e473b0896e8c96727450e3ea90d650bf9a21e073e6913e5f8 -0x7f0f647b13b16e038e0d8acbb5c3c69a74008d82d4a75ee264ad28a76b9cf610 -0x38101606a7472504c684c1840583fe07de77082c3481b07a6501366f0e359d7f -0x569e5d83d7b526fe8d039fa687cea9692b880f09d022d023761d49704ffddb3e -0x330bf2c275e4ad9e7359724f05a0fca6290fba852ec2902f06edf051fbbc1774 -0xa2aeb0a690c8b30831108d1de442fcf6b756fb6be9fb3cc79df8b22d3c0634b3 -0x8da16417248d489ec5ea491056bff18d3b7eba7973286743c0de92888f84c74a -0xf4c036551b42eae828ec0b37d309334a17bc3e444da7d8d890e5eac7ca79720d -0xf8daca8b068b81fba816c6c10da8f11397c6a95ec4b73d4b6b420a9788ad8324 -0x2f5a543ae4f12103b5d4243297cf0f3fc41dcc45350b7d10db22a6fb224ecb95 -0x29bbcc41d47939510ef6cd688e24ced869c9a54d5f0daed9798efce1830c78af -0x063e29d5b98aeaeef053eed34915fed0c91030d6cad24d3d962b22171424d838 -0x1d7f558abfceb5999ab6b4a4f24bc807144a0af17d232ccc32edd74a68e65e29 -0xd93e26527d88d2d3a70cab6a681b5900aa6cc7f902945550c747f795a8c69607 -0xbff8788fe07f0543a22c3753acf726c51b87c927efdc812a93a9eb94e55dbac7 -0x8398dc6371499b596b91fc61d4f4f9cbf9ae789466fdf547196a1e8f0bea49d6 -0x260ee82523c5ca87a0d1272be06c7a8c525224abb79ca2d43102f60bd73913cb -0x940838e31476eddadf139a3fd4dbe3767a749221281e7075662b7c6e649d6d53 -0xccdfbcb1a68676cfbd79da62a31672783e61995e92a94196def2a6c8ae2185c2 -0x209ddde1f68a495b1fa1a533446971750612729ca63f71e1788067c7a8f43918 -0x828495227382ccfe179b0f3cc1a4f949a4846fd19190d45d8e2df8d6612d2b86 -0xdecad7343d3ba0c9dc325dac35aa954b898e56f39d434b50955d93ef3a6c2767 -0x3e16516988c6d49a3d02ac0f9f93d75f54f9b0ea227cb54ca06583c31a5ac83b -0x191ca127d8bba063f0f25009cfb77895dbffe5af4b48564da4ecd1d05cb6eac4 -0x65b0b7a212c52c1fc4a86b5abb3262e16c88820049ac4053755a329368f73dac -0xa203cacdb7712a9ede82cb579c52fda91832ef09cac7db9ab0ae40d1c36b0a6e -0x9667f4bd114b4e322c8dde8d4a104fbcf39d977d709f99eb4b0682550f13ec4b -0x4ab224cc7a564ecca459cd1e122eaa5af9afb31b4e37771bc10f7a938219ab8d -0x48e6588b178dd4839c63fc756098a9e7dddeae906243ea1b0f8b065b1fe97f1a -0x9de4a61c595a31dee2d35d73d9fd2bcf061c67544368628ea3aea7852b810d80 -0x590da414bb2f0dfd34cd83a0fc8b2652a248c12d9a224b9dd02940e2dcfac0b1 -0xb46df178f6a3b305062035e5de26a1ab04cc4a234b1a669945f97b51826f9391 -0xfdf7c53f3a7567d7125ed6e6a8a8488156b5466c14f04add702d9fbef60b0fc0 -0x67a63edf53923329d265014ea24a8a497ea6869916807bdd3d8bcfded499603c -0xb4c881e2641d60e91a056c11ebbad2d0eb9e68a2e882c76d6344a0a7993260fa -0x7d5bf1cbc5f478830109816a8a3fc7bcb628f7b06b03a9db8fb101814ffcacd2 -0x6ca19f56ca53ebee314b6def9c55c2c46877813b7ec7dd48c484fe8375738bbd -0xa6f949a7bf08f56210a4ece2db6ef7b06dd9e2295900f92bf0acdbbd969aaff2 -0x6bcbdb0a120202977069952c4d9b1939f2e2448f984f6039e70ecf67666881b9 -0xeabc6fc735823d557f36d6a2cc591136bea9b6f8365ad57b0bc97291fa5f64f9 -0x71734de68381e76f81f6040dfed55d5bfce4551982817bbc5948f315b276a24b -0x6c588dd0997b0a9f342de264d6dbf7fe2aa638099615b8fc12585db294b354eb -0xf14fdb693c2032f0df661b1c6aafba6ddcb43e5cf2b1db2c2ab2bf2fee73722d -0x89882497a9889399582804e07a238d856cf0921b38fd3c2750b653b961d6fead -0x18692c80ff896b4937d306412315c5ccd9677c7e6cef0f6ee4b1b61cd567d4fb -0x17e73b7a2c5472e3bf97ae2c8a1449f169a12f05fa60349b5b070eaec7d159f9 -0xde13893fade8c4dcac7ad5007e9e562c993878be03041f7e3d2d0c2c0a4f0f0f -0x25bda8e6606b809bfacc21f8bf68b5d88c6cdec3fbb2cb98ed1f8e46ff30b77f -0x0cb7ab9b9fb75cd83cf4bd9017c1a9f8978624d343ed1c459d46a5a4efd5559b -0xd9f585f74fe30aa8d76bfdc67a98b658fe52021088a4047fca0de481a5790cb9 -0x1da9abe2c81e61c2e7302797cdb3bf065db46c12121010af4b412ba321407e8e -0x5af09a56199e2ebbc5e72fff32b50c56ce3fb55feff915990895b27cce5a189e -0x099d85e772a981fbab25ed1982c298543b3f698e40737c83e57e5defb4f427e5 -0x1b512bd6061e53adf0c3f9d9ac8a5735b6b38e69bb264d6b4a781582e768ec5d -0x4c864e0b7eac50d7feacd263d240d9401638e06cda11fa58cd214330dea90934 -0x09b831276184c5c2dbf2dfafbfe92e6622b8842e66f5ff028441c4d360566bab -0xa50509593aecfab86ca20bc8f5253995c722ce3052e81fd7e51a8a99fe82707f -0xe373c8e3fb8afbe9648d6e7c0ef60994d8c03ccfc8ce8577221a5bbf2e27a6b5 -0x7327a4dad5f8a2400553796ad56d93179456fff167619c4d427941746a383f78 -0x909a7bd727655e5643225b8ce45451c5901b5b7ed1639d5e96002a5933265bb4 -0xfa6575dd501784a2263e6dfdd2a37dc85279ff7c6277fcb278f9eda9ad276181 -0xd62b9dbe529fe790c9a6bc5935d76093d62ae45ef30c0dae4120c6c5215b08f6 -0x6d06fcf7d95f2cc142dc8fbccc132c92da63511f29527205d6d2893681dcc59e -0xc983124b7c5246737acfa2d7d56a40062c0a5d73e76f5b67c354acc51279e464 -0x471f6e32a6192fdff10612831c8f4aa1c5692dd16503495535648faa250838c4 -0x5ccd60a74f2afd82274e3004e8942121f8b6accd68c4a9de45dafb950703535d -0x05eb84926f8448fa5f2e819f76bda20fa4c77e9292a38ac7bb99146e2ffc0887 -0xfa6163d12c34ab7f040264ceb06a22ad1d0050d19b5aa4dc7e51c4678f97e77c -0x9e989b018012e5abb999695133b1943928cbe4eed58b3454c0488dc06cc5595c -0xdbf5c6fd10032f5863f88be6e41db98c697b8ebc23b3da1d47538e294bb48327 -0xa8d4bdb46e9db9f4e464c1627a0e56182814a04c9126b45374fe6b3986641acb -0xcd62d5e7b5a2783547b769d347fcadb2322603760da16945eaec833ba7aeb8b8 -0x7b3c47831be0fea6312ed8285b7470b0efcce6ba2dbb33c9c7b9f49003eb10e8 -0x79fd0d5c98339ea4d2bc483c7637eae0f200853da48e987f03f5c6c225203594 -0x445a6a23f48d6be1b88dda8f2600522e1bb399729cb4e3dce1ec7064bd2917d3 -0x6f6cbbcf6735026293b8ca6b0a7043d7442086dc24a0d67f24d5b3c5c0d06d13 -0x82864a1a9e4c133333f314a9c85581f76a8a98c4babd805dcab6f7319c834062 -0xbfc8c2f14fc70d9b5b24b9e0a6a36681d84d65801089b2980d18f04bffd6b8b3 -0x4627ee50c46e97e928fc440102f473a4e87f5f35cba81ca1872e187ead414cd7 -0xa54b4d47dfca51b7487df8b4c6e4bc7706480ee6135fac086b8ebf0a27ba8b1c -0x4625196883682f4d215427377c6c523f88084f79396c0cce85bfc6b85841999b -0xf22dbc39c537c92f034a661d89e813bdb1de58eb7801e3d53e61eb2ef4d81030 -0xc556c28b4a91cc98fed2154b48f76781598ddfa4b7914fd74295dbd0f0224f11 -0x2123c4c9c7a2467b36e0e9068116af1a971ed0184c43f6038abcd4df493e0d46 -0xf07ea52e94b778bb8246cede8752a220bb1bf8ab0ae21cbf675a3c5eb9a85622 -0x3b8d3adf00f46f5b14dd00c0a6f7f7ba8ee9826c5c341b0851f25131d312f33a -0xa5ca54e8e21d5e2b0a4d889f0efcdf4474a8302dab3c88ebb3e03d6368ab84c7 -0xb407eb68f23fb16c37e4dbff1e7399b163354da025eb38f772902ac5ebf05824 -0xf92d34295f2916bd5157b8ccc54645592140e128911ab9ee33ca0cf97daec3bd -0x52d2d68e1664aaeeaf2904f72d187568c6f8760246bd241c6ae2f515daee3c54 -0x9805de3214f71c6a97ab7e4c68d7b93bccfa918c8474b0d5fb6cb0a8c54648fe -0x1b70df92792aa5848066849bd8f5855e04409be82ec8ecfc701e6c706f5424b3 -0x4dc8c6f0af949255a535afdbbf3da1fb455403db46bfe407e7f557644550c0f2 -0x32249f49a80c11d07e2a6901f905ba48f0391184956995f103b73401948e55c0 -0xd5426b30dbc1dd48bf8fca27751e6e93fe7a689695edca1f4fb00ec2d29538c3 -0x77fb16ee0aafcf45b0a10d2327cb961f97ea5627ea9aac1ed7ec6b201acbb35f -0x59b72b44e286fe927e5514cab1c6d2e777964a4c20591eb2fb61b5f126578d94 -0x71b44d0158aaf0e8b96a9b6a14b907487e283d12b4f1fa4f30abcf23f05d5955 -0x0b6ad5bf5a9e4f6d0599f7d656d1b9f27b2b2235fee610b222e7a599ac2a418d -0x9bfeb0952f5b4851fe0f87d7edf4fe4045360d3dd8176d81645bb452b1840c79 -0x6fe9b91a152026955d35619e4e7b384910f84078c81c45044b76d8551ef50e3f -0x1dc991c728908882c9a454e037417bde73a61a7e04a8f8dca45b5d742afd1549 -0x9ab0a2a9f9a6ae3c5b763233ca0d6d22ee697993b6c2295e89da69b9cbd9f205 -0x12a2afede32709a8f1c9dacbdf5cfbb789aa067dd6d164a5d5828942b1bfa14e -0x4c8abbc80eb6f4eb7821cfceb15008d956857c7b6a6194f5a0dc1f2c56b3d3d9 -0xc54f30ebbe1ace7c8e1899a91399ee477aff4081f4a5a7a34d95fcf72f8c49c6 -0x2f2c6481f32a332fd0a22af1381af017e3a7b8e8b2b4adbf4aefdfeaa2d3acd1 -0xc258cb885e5f59df491e774ba5d71acedd54b4750d5696557f39503b3ca00d26 -0xf7e57d2458b5725b411f8354732e90cc05b6210beae1f9373f44b83d73ca563a -0x31ddc10f1beba67c98bcfcf6d8fb4700187f92c53909fd87062cbe83b34ecafe -0xa6f69c5351b821a27d0f299a051be2271b893b4c1fba44540e28ee49c39467f6 -0xe145e69b773b850578ffbbf1260d5f973f3799e56b93b4c09deac1cc65f03b34 -0x69c58bc2c3cdb2e28e41ff6aeaae2031780a5be93b20a6650eda23ae8cc764aa -0x0f4b0da285f012ff29ec5ae5fcda8e8c78227b78410c220bd939783b0a06143d -0xab953b2bf9de9a319a003e79f70dc344739870ea14d7f56158ed898c93c18127 -0x7a01c2e5b542589bfee423703fe9a06320d4f622d1f3272a68c8a5f8bb336b90 -0xc07283fad77ae8d42bac22103efe4c1d8f0eef590f274dc93b4af8507050f068 -0x5a4baa59905bf335fe8ba5c461dfdaafef1fd5e3bbc630a384c0ef9c6e2681e9 -0x5806b81e3342b7059c6fb8f81d9f7cd6f9f095c3617011b144a74058233a3701 -0x67f5aac87c18f33fc754d6c61230635a20adb68ba889235abd7d695c996e14ef -0xdcc65ddbbfe0bb2c44ade809f90c56efa8eaab5b608d132c514e6ff3e7234d32 -0x16781d6f7181e05dd6895d0fb51f99c14022c45510a7dc1b31a1184bcd455d7f -0x32b7d0aa04a2d10da1760e4974067442759a424dbd1578982665d217911a9e1c -0xf6fb513e6748806594d702c43601c533da94d6b87e64a13321a6fc1fb95e0211 -0xda13c81b79056c6ea28e66fca2502c54a6603ab7665144875536d765703d68ec -0x1e88293bebd9691e0b5eba49b052bf2da92c7ef5b59edcae0b87c919605e8d5c -0x800db5aef542140031f88da7e6d9b90364991222242389eb4a225d38b715be8c -0x691e256f8106d0eb2a708f1fa109de66cc9d2469fc80fa4968e9a1c974c3eb86 -0x3004f29ef5876380021b6a62eff239bc0664c797cb34bbb9460d940d404cf380 -0x25a197ab97b86a5c0629cb1fba5b390991329aa0121f998bd27ccdc49322d7b0 -0x8b0b65c92d31e7214d88e8f976f08199aa2afa10bfa0fad1aa332a1500678360 -0x4501dfb38b1f5e36c12a76e60bd6c6a91abbb0b709a46ff16a0fc1f6e8b9c556 -0x1374cea28aa3bfe0949cf4e26d2fc5a2946d3d02758dfb51a9dc313876de75cb -0x2f3bac886c038dcf923101621aa648abab70ea4f87ee0ab58c2b51f452b828bb -0xded864442e8c7748acaa421e31a9e0a2a1ca8904d0912565f6e60fa10320c0b6 -0xbe9e108543314d6551849392b5b16aabafe7a6775641aea20cfff16155f378f2 -0x316b1fc4d61365df86bc84ec3ad13ad7ed37187f26820ffb3ea37e2aac98d361 -0x38f4ab65b805cd4894f722af4ee47eb4027073bac83f548d9e6c68c1165eb831 -0x3e5c0313b0f506abdab11f02afff89e72b8113d641c024bc0e3b65d1681633a1 -0xb01fb687d31e5a8107e09702c684ea757cf45899519ceb0ccd1fb79fd8ed7358 -0xe22b874cfcaec3467b460c176974df8ee925170690969b4ca44e1d9f96e862b5 -0xd1992c705480b820feefc928156735443b78f640f73e5e1ab9de57238dcb3a20 -0x2fbbf22071f95f0d842002b32f40cbe08aa15cbd95735920b9e79e33708d8b9c -0x636c695c60f06955ae9c3eece0286d2efff437af319dd7486baad62c2c54a0e8 -0xe2e209dc202a4597517308e8509ddc471a4685babf19875ca95efb35e2a62efb -0x123d7a15c7c06bd73ba4a795b20ee6ea49f6019f412df160030bcb2a765be205 -0xa4013e894af3b92cf7e81a042d556669c8743608952e02d495c1730444c44ef4 -0x0f5aa7910998d51ed846acbc66822e6e185d9919eb32ee9fd89c5ac0083e7410 -0x43221626ab048216d734f14bbd5c59431d7a4e11dfed790797f2cb3b055cdd52 -0xfea2fd086669013ee71bceb68d9fbee0a2ebd703412abdd23b0147993250c949 -0x5dc9bb9e427a06d26d125956fe89901be94c0d35a464339a459b47e8440f6065 -0x4c15e4e28d21688fe5195dd8ac190a6a38517fffe2c8010337d2c941f88f8ddc -0x977a2aa09a0b0ca6dc721af1341202e3a78725c5e947ecfa28b874ef196a1d86 -0xd1cfa8f536c203c65c58f42ed46c1982f4d137b3376413e189458d5d7a7dafa2 -0x7174f9cc7b4b1b15cc06991643a560c2a7b15f0e0d0b5382a91d1fa7adb4ae54 -0xbe108eb7976eb020e37d2e2730c05a244fbd3f85add846f219878fb4ad282662 -0xf2d7be9598e399c061ca0320a55818449030469b2b36222c404dedbcf66e6f4c -0xc1a3e521e02f92172e868aa4c32dc38e1519bd81f6ea09e0456d4cf1e194cb3b -0xc46f54b3b7ac82305f5691f9ddf979bd5e84608c53df29c745f04c79db91ea26 -0xab8eeb6f3e62225b5e4cca8752d6b02f1849e38c55843ffd986f0281e6406740 -0x326d2c5fbd40c36c996607b4bd873031682b179c1d64942be80b16adc9670c26 -0x21a65cb9b31d60b407d46ab2c8947df945ee4659d9bf537504de11506dadbfdf -0xaf762370aea5780c95e346a24f8e6b224abd9d81f7905da3dae31b60687612ec -0x2d4a3ee8a9ddc64bee1cf1fe5db3e03080f82d0b3309e79b78de9f1b5a76c8b4 -0xa361eb08c9c9b973e56aa041de7d8574b67bdcb8f41cf83f73a09672892aa60b -0x5bbee82af26b92f7a0f878cbab42dca9b025e820ffe78323e64fecbc77f21194 -0xb21f6dd7e3bdcde036911c852c9601cfcf5e4301557f05e190c2d27a76537557 -0xba19009b41250955bdae8f255e1fd3beefc26542f82b970ba6861732e1f84cdf -0xf7f17f7d516309298ba1899aedeb5057f053534355c3bb6ad6fc0cb6d9276d4b -0xe9f32b17d3e119f3b1ad517caccafb2187f7b991a8efb5c642c5e71a981a67cc -0x7a690e451a6588f4f13ad127b39521fda3b6dd658b25e185e377d26008d0a904 -0xeb4b81dba0dafa894601c7d579d1d2683e1a3447314502713307a456180f965a -0x8c3a0a82a4b6bd51916264a131a8a4a17d6d08065021e5541683c8fc826b4654 -0x870674e3f9bf50a318bca4386721e56d33acc20200c5f9f5cbd7a88d4e0e256f -0x93577948ffa02502cb926905720fc67feb4b4f2ee664c789df64e544c5ee2011 -0x1f115ef7a597149fb70cc1111cffdf50234bf13c0b526b4b6ca3f70f9be269e9 -0xab93b146b3213e3b785e4608215bdced51e5f273ccaa0787f62ed342774a5088 -0x96788c8099d15951aa208d81443733c284cf8705d38bfc17b1c1e31f3488ec9d -0x0f69517e697815c2f62513bca27997b75c2b006931a2dbe766b2486186b59956 -0x1ca3ab45035c23d79947f547a03e248b03bd876633a5aa8f0ed397bd5b87e884 -0xca8463d9f5e9bea71f09f47e9f05cae07423d2880526f4f6ede3665b2622bbae -0x6db34a8579613d3b8351ec295217a164a324582183a7942641232bacf2f0ce30 -0x72f504e7ec533a01b56194a65f4077539cdb5ec8d9bd3661bc0af5c5b620fb60 -0x42541780b0557c4969165dd2036e4770b85e6d8d126d24ddd4613f0cee391152 -0x7f616c955ff54259b84b014ec04008090c295359105a50f69b0321084a4de19c -0x231a6f8ece8ca6eb4ecc9b833663fd312bfc3bd2d4ae849ba27cd2e6612dc000 -0xebd6af8ab312bd9b70855d110bdcafd22abadc6882f686706d61fec4827e1ddf -0x73ca05a41adb53c8563e9b92aa400e0cbcab81664e3b0093847140c7a1558a46 -0x63831b12e87ef1fd1e9b29122333d0c0b238b5ffd7310ee936865dbebf7d17f5 -0xadd08c9c3ffb0f594cef0a8e326f2d0bccfed8020c139443d4d6009eb41bcd14 -0x1eb6000dfaef0b095c50ae59995482f030c5ea7df71d1b5ce162004197ec9f85 -0x571093926186b1d5fc6643733dd6d33cb5acd613bcf13e33d18ae8c1549694b8 -0x61c5f8511655ccf6208a4ba6da40574ff7be295cb0970ecd5b33c0de0436b4bb -0x42d2ed8f4f169622888a2dc7527556dad05d8b0bbe614ccc9e669d43314c275c -0x5038fdf289fcd6798bc5b67bbb978cee40f87267cdf0d70be7d5ddd7be78c9e2 -0x1d63f7fdce050d22ac6c06c4874d448a6c793048b7e8a421f6bcd7b275238fdd -0x376f1d77b8ac84cbe22397f1ea6e662117c6443574c5003508a60dfc8099a0d6 -0xb44d0d0a8ada7b32c88a012bd7680ec0bae26cbf4a42d2ff974359fb724a530d -0x0aab6da713e4f34b0b93238a82d7c2b2e3f300ec6bf681cf9ff5d3498b1816ff -0x3594616a861b227e6adf8467bf1b4eb2ec38e53a128144df3ab8cb42911af881 -0xf469673e9f3b8a6adee3f217486d8bc9e8453113a8527178581b1d10a345a3e5 -0xefbe03f0164e533602f3dee343d8fc2f8428ee26a8c73c4ab8ddaedf530a046a -0x898d7e1ddccbc8ddd0712470ed140af9228c072a91c46da9f5924d6d0ef1f1af -0x1c0acd6e1f5e449b0dbcdc8bf08cd559567d32350d4908cffee640840b81603b -0xfb513696ba2c54efc263f4ae457d1ed443668cd425f77c2bc37a0cbd4fd3a8f0 -0x4b7376a1fb3b86f70df0ba2fd8dda5cb5f3c97c9a117609b19f6166d0fa3af74 -0x2531db44efd5dea527f305c961bbbece7434638af0f82c15883443cf56a49ae5 -0x8d52572aef240d1630ae28816947ac5364cd6f0bd1a72a13faa921e3bdfff5c8 -0xc67f14cd750de1c0d820ffa84f268efbc62f51f8ac6a119dc89326700f30b38a -0x02c337f674cc3b9769615e477885b5e5170ecd05939d7ec1ba1de6797e6ea528 -0x0d7d950ccb7fe3e347dd7d6895c2ce0be72b87b9ebd2b04873170df573698493 -0x8e7022f99ce375feaa9ff8337dc0ba78947465c607da30a676c3678c4343fc3d -0xc5c242e9bd2fc1fb06e7fb5b0879721b1de6cb708e4bb681b01ea8b06969e505 -0x0dab75144c14564227ac650fffa415f142796c0006ef248aa79935214e6be0d5 -0x5d29b6b823b8690a6bd094d92c8ca1d9c8d21abaee43a0f1c6ad9ae246908a30 -0x59aaf4b25465f8980abca23af128e9a9969d48f5649a7b5fc988e7e3e7eea0a7 -0x3295c1d1c7169c56a2250ebff88ba4bb75b474613071c50f26a886eb7d0b5344 -0xeb2b97b018fbbcd64a888e31607cfea22ab088689bf47e86695975d7dd86c156 -0xf0b680fc0010bfedfdc3f1fd8bdd528bf1c342f69bf8ff87ffe2e9d5db5384ed -0x6add73f14f08faf1060fcbe1da9c6565c94da628c71af94a191cca3972de1250 -0xd276e39636021179712f3ee84ce17a81143c766cd2491cba74489dc4988baeb7 -0x2212c761856bcdb9e54ce71e5a9046e7da51c8010aecb1d98a358f0b9711ec43 -0x675ea5e77b427aad134ec3a099cdfc6f968ee199aec5732b8f6bcd871efe014f -0xefb3de392f05a7fd1671f7bdc5d329923003acc052105f1244dae9871a4cc213 -0x01c42e08c046c0d78ca2fcb4fca0c8ea170e5f5798b98d397e1ef58107b4ff58 -0x3fa0e2e5e198110198a7b03659353401f84971acadd1ebe4296364231c8f298f -0x69fa7f55e28ff80621232f7c3656293781dec3c79f3df48a43bc82536df59c3c -0x95699bcd39bef0ed9c66219c17742ac5a5880c3f9e097ef271d8d36883f09036 -0x67146679c39c1ac8b5eb82971dd0b7226c51ec92bcaa40aa9ed5aa8c04b12a85 -0xe8fcbfe944d4acaa5e812ebf2dc3c01acfcf760fc3b9c838078c041c8f54ee28 -0x4fda38c7786aa3a97627a3f66d9ec375315b03837aef53e532d20bdd636d4af9 -0x8edb1531796881a1d3242d42b00f6a99a7238a1289fcd6b86fd85d3975f4db66 -0xd6661c232f2b3ebe4dd7cae0bce8416264baf96cdda8e5f754da2e0110e4a39b -0xc34913e01d6e71c24cd842525ef48d759319502c9bc360a40706fb8e094ef18d -0xd00dac51081f69c9df0363f4f646789bfefbaf718e693191e286d42d98ea1ecc -0xe00bb316c78398eb4f1d3314638d4e29b825a35f73b8cbabefc3bcdc4aab1969 -0x30852d066e419b58e9875f0848ec6565cb8c95a90653cc792196d4e0e8682f37 -0x53ed0434478fddd6054890c825ec47259d04d3d4f018c2f30c7a576ce03be5c0 -0x187aa447ca836be42ad7b98238f7846c527853c74083b83d0a26ccd00b48693d -0x4a3efd262070b35d1f980a72774a3ff84a032d6a8bcd3a07cb3903e84fd09fe1 -0x845383fd96dd1dcf6158a9771497680cdddf519b33a91641663f75aa0e5b8ed2 -0x37f1d3090dc62250dafa2e10e041d13d4a0819a9a98da34ccb07e70e01273622 -0x2e4f5624a77e5df2fcae66695645bf81d128761e05c4fbb52999951737426a4e -0x538b4964b8d596337c2a3c817ee831c4ede289c5f2a708fae008733bef12ef87 -0xef6e38c77299783a0475c379bc4a96ce0acdbb00b3e62c69afcc36c55aa28fd7 -0x6417106865e37b8ce41c9dd20749564d21a8ee92577dc6c418ad14afc8e8c963 -0xcf1769ee6c8af99d16984ec4710b807971195e8edf9b288c2d5ee93144aa2716 -0x7de4b0fbf28dc8f61cbdfc8368a4195dce697c747e40500cd0328114674c34d6 -0x7dc6bc475ed515438976e95d0b5f1b65336e12be786d54385f73e183c5ba5c91 -0xc8fdaa05c5e74c1844a4d66049bffae921f7db7d7011fda1208cdf6c4ba7fa6f -0x7dc8ca22d99c9524bb313f8e7ff0273b278b0d1700e82332928b227c2459635c -0x34f05ccd5c2b69d363db038de8c4e6151f9ae602e8e30c82ddf3025e3ecb21e8 -0x157f29ccf30b587b3d90df3bbdc779794e7aa92a3c1b0c526475f16a4a8b522c -0xd9098cdeacc0a487041f75ff03396e1ca57cf9cd0653ef7c16c3e40250dce8e1 -0x06c1c24ac9a0056f2233c95dacd3124759b7ff390699bffc4aef1509b432754f -0x03e9bd32869851238d3fdd016a8f9c53e857a3bf8007b6afe9ae60186fe9939f -0xea5826eb67cf85b119b6d2982385cdb7f973c17435eabfe47281a1fcf2246637 -0x614f4f06fba93e18991ea4f8792cd91e541784e6d7a47b0d03039346a05d0b8d -0xc8f25cbd1a37b82e60d0c965ae9a18de6f547f2a715acc93daf03a5db583795b -0xbf4f60d713ea9101d7d2b06dc8d97b62f9a3f63bb125c1985e08b95fcf3dd0eb -0x8cde7415ac3a0b2bece593a29e82e0f6020ec45d7992356001cdc670c017dabe -0x0a7887502678b4940b728087b0185b470e193fa62f94f0f8e76d55ab82b88335 -0x3a0c167b80c1827f50ae6c53ef623ff14051452318aece90fe09fdc37dbd72d9 -0x6d1f3edf00f192602a392752ba018636118985a9e1cd51627131a709226ed242 -0xce74117f403d4051414df7748f64a53ae674061ce4d3665eb8c7e37d897fa81d -0x70d773cd1b67dd1642a09f1e138052f943f9eae722defc69a77ac45ce13d5eef -0x3037bc964ddcdf0e7da51a4ff758ee71b45b09ce261491b28f08ae35c211169a -0x874eb6d2d1227575d8f8cd4a5cce9bf9da4d98d9608d67c41bf18d0760753a87 -0x1de7fded632dc4ce7eea676f3a4a8fbb06e8779c7a5d9c22ddd474c1e5eb5683 -0xc3194b82b4e296e94f105c41b3138565d2e614321fb74ffb9d218855099bcc42 -0xeb170a91017d7e0d92151285a26fcfaee949278e264a1501657a3ae98e6fb77a -0xe85362791c904e8ab7fe6af597a5ded090ec87270780777214edacfbd2fc3739 -0x86eefb787c83f13b243a6bb0e275cf25e774cb759ac64b2296b32e36db927373 -0xfa10da15390704ba74201f55dce497bea77cf9b213d04f37673fb719a4183250 -0x1775e67e505c17bfa33dd04c2a65e0b5eae517f347c7b6353128c539485cc5da -0x9afd3a94e212589b10e7522bb4acaaf0753bd5004aa22fec1682232c4636c2fa -0xf364582a6a67ca6d05d8aed3c9732bb7f709f1f8d8b203f2bbe068e8adc9b5c8 -0x35b7c956ca152a0b056051485b6d33a593b447a2a0ceadde14197b3ff21bdbb2 -0xfcc7ac8c99994fe8889e5c559e65d999f27885d8fe30248f041a7f1719096bda -0x7137ee9d8d47e3c48246b3cd2ba7611af45367767147ee32dac1c19e96c54d24 -0xe184b1d669fca1f9dd1544220a34728ad728d56142e050a672060a89ede6efeb -0x7dda43b24da0509fce948a29d0d6a798b8cbd1ea72e16287f91fa9763e879a91 \ No newline at end of file diff --git a/contracts/tic-tac-toe/gstd/build.rs b/contracts/tic-tac-toe/gstd/build.rs deleted file mode 100644 index 57cd2738b..000000000 --- a/contracts/tic-tac-toe/gstd/build.rs +++ /dev/null @@ -1,9 +0,0 @@ -use gear_wasm_builder::WasmBuilder; -use gmeta::Metadata; -use tic_tac_toe_io::ContractMetadata; - -fn main() { - WasmBuilder::with_meta(ContractMetadata::repr()) - .exclude_features(vec!["binary-vendor"]) - .build(); -} diff --git a/contracts/tic-tac-toe/gstd/io/Cargo.toml b/contracts/tic-tac-toe/gstd/io/Cargo.toml deleted file mode 100644 index fe753057b..000000000 --- a/contracts/tic-tac-toe/gstd/io/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "tic-tac-toe-io" -version.workspace = true -edition.workspace = true -license.workspace = true -authors.workspace = true - -[dependencies] -gmeta.workspace = true -gstd.workspace = true -primitive-types = { workspace = true, features = ["scale-info"] } -parity-scale-codec.workspace = true -scale-info.workspace = true diff --git a/contracts/tic-tac-toe/gstd/io/src/lib.rs b/contracts/tic-tac-toe/gstd/io/src/lib.rs deleted file mode 100644 index 4b50f29fb..000000000 --- a/contracts/tic-tac-toe/gstd/io/src/lib.rs +++ /dev/null @@ -1,179 +0,0 @@ -//! Data types for the contract input/output. - -#![no_std] - -use gmeta::{In, InOut, Metadata}; -use gstd::{prelude::*, ActorId}; - -pub type Cell = Option; - -/// Time deadline for player turn(30_000ms). -pub const TURN_DEADLINE_MS: u64 = 30_000; - -/// Time after which the game instance must be removed -/// 1 block = 3s (1 minutes) -pub const TIME_INTERVAL: u32 = 20; - -/// 1 block = 3s -pub const SEC_PER_BLOCK: u32 = 3; - -/// Gas for deleting the game instance -pub const GAS_TO_REMOVE_GAME: u64 = 20_000_000_000; - -/// Contract metadata. This is the contract's interface description. -/// -/// It defines the types of messages that can be sent to the contract. -pub struct ContractMetadata; - -impl Metadata for ContractMetadata { - /// Init message type. - /// - /// Describes incoming/outgoing types for the `init()` function. - /// - /// The [`GameInit`] type is passed for initial smart-contract data(i.e config..) if any. - type Init = In; - /// Handle message type. - /// - /// Describes incoming/outgoing types for the `handle()` function. - /// - /// We use the [`GameAction`] type for incoming and [`GameReply`] for outgoing - /// messages. - type Handle = InOut>; - /// Asynchronous handle message type. - /// - /// Describes incoming/outgoing types for the `main()` function in case of - /// asynchronous interaction. - /// - /// The unit tuple is used as we don't use asynchronous interaction in this - /// contract. - type Others = (); - /// Reply message type. - /// - /// Describes incoming/outgoing types of messages performed using the - /// `handle_reply()` function. - /// - /// The unit tuple is used as we don't process any replies in this contract. - type Reply = (); - /// Signal message type. - /// - /// Describes only the outgoing type from the program while processing the - /// system signal. - /// - /// The unit tuple is used as we don't process any signals in this contract. - type Signal = (); - /// State message type. - /// - /// Describes the type for the queried state returned by the `state()` - /// function. - /// - /// We use a [`StateQuery`] and [`StateReply`]struct. - type State = InOut; -} - -#[derive(Encode, Decode, TypeInfo)] -pub enum StateQuery { - Admins, - Game { player_id: ActorId }, - AllGames, - Config, - MessagesAllowed, -} - -#[derive(Encode, Decode, TypeInfo)] -pub enum StateReply { - Admins(Vec), - Game(Option), - AllGames(Vec<(ActorId, GameInstance)>), - Config(Config), - MessagesAllowed(bool), -} - -/// Smart-contract input data structure, for example can contain configuration. -#[derive(Encode, Decode, TypeInfo)] -pub struct GameInit { - pub config: Config, -} - -/// The main type used as an input message. -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -pub enum GameAction { - AddAdmin(ActorId), - RemoveAdmin(ActorId), - StartGame, - Turn { - step: u8, - }, - Skip, - RemoveGameInstance { - account_id: ActorId, - }, - RemoveGameInstances { - accounts: Option>, - }, - UpdateConfig { - s_per_block: Option, - gas_to_remove_game: Option, - time_interval: Option, - turn_deadline_ms: Option, - }, - AllowMessages(bool), -} - -/// The main type used as an output message. -#[derive(Debug, Clone, Encode, Decode, TypeInfo, PartialEq, Eq)] -pub enum GameReply { - GameFinished { game: GameInstance }, - GameStarted { game: GameInstance }, - MoveMade { game: GameInstance }, - GameInstanceRemoved, - ConfigUpdated, - AdminRemoved, - AdminAdded, - StatusMessagesUpdated, -} -#[derive(Debug, Clone, Encode, Decode, TypeInfo)] -pub enum GameError { - GameIsAlreadyStarted, - CellIsAlreadyOccupied, - GameIsAlreadyOver, - MissedYourTurn, - NotMissedTurnMakeMove, - GameIsNotStarted, - MessageOnlyForProgram, - NotAdmin, - MessageProcessingSuspended, -} - -/// Represent game instance status. -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo)] -pub enum GameResult { - Player, - Bot, - Draw, -} - -/// Represent concrete game instance. -#[derive(Debug, Clone, Encode, Decode, TypeInfo, PartialEq, Eq)] -pub struct GameInstance { - pub board: Vec>, - pub player_mark: Mark, - pub bot_mark: Mark, - pub last_time: u64, - pub game_over: bool, - pub game_result: Option, -} - -/// Indicates tic-tac-toe board mark-state. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Encode, Decode, TypeInfo)] -pub enum Mark { - X, - O, -} - -#[derive(Debug, Default, Encode, Clone, Decode, TypeInfo)] -pub struct Config { - pub s_per_block: u64, - pub gas_to_remove_game: u64, - pub time_interval: u32, - pub turn_deadline_ms: u64, -} diff --git a/contracts/tic-tac-toe/gstd/src/lib.rs b/contracts/tic-tac-toe/gstd/src/lib.rs deleted file mode 100644 index 92455c64b..000000000 --- a/contracts/tic-tac-toe/gstd/src/lib.rs +++ /dev/null @@ -1,496 +0,0 @@ -#![no_std] - -use gstd::{collections::HashMap, exec, msg, prelude::*, ActorId}; -use tic_tac_toe_io::{ - Config, GameAction, GameError, GameInit, GameInstance, GameReply, GameResult, Mark, StateQuery, - StateReply, -}; -static mut GAME: Option = None; - -#[derive(Debug, Default)] -struct Game { - pub admins: Vec, - pub current_games: HashMap, - pub config: Config, - pub messages_allowed: bool, -} - -pub const VICTORIES: [[usize; 3]; 8] = [ - [0, 1, 2], - [3, 4, 5], - [6, 7, 8], - [0, 3, 6], - [1, 4, 7], - [2, 5, 8], - [0, 4, 8], - [2, 4, 6], -]; - -#[no_mangle] -extern fn init() { - let init_msg: GameInit = msg::load().expect("Unable to load the message"); - - unsafe { - GAME = Some(Game { - admins: vec![msg::source()], - current_games: HashMap::with_capacity(10_000), - config: init_msg.config, - messages_allowed: true, - }); - } -} - -impl Game { - fn start_game(&mut self, msg_source: &ActorId) -> Result { - if let Some(current_game) = self.current_games.get(msg_source) { - if !current_game.game_over { - return Err(GameError::GameIsAlreadyStarted); - } - } - - let turn = turn(); - - let (player_mark, bot_mark) = if turn == 0 { - (Mark::O, Mark::X) - } else { - (Mark::X, Mark::O) - }; - let mut game_instance = GameInstance { - board: vec![None; 9], - player_mark, - bot_mark, - last_time: exec::block_timestamp(), - game_result: None, - game_over: false, - }; - - if bot_mark == Mark::X { - game_instance.board[4] = Some(Mark::X); - } - - self.current_games - .insert(*msg_source, game_instance.clone()); - - Ok(GameReply::GameStarted { - game: game_instance, - }) - } - - fn player_move(&mut self, msg_source: &ActorId, step: u8) -> Result { - let game_instance = self - .current_games - .get_mut(msg_source) - .expect("The player has no game, please start the game"); - if game_instance.board[step as usize].is_some() { - return Err(GameError::CellIsAlreadyOccupied); - } - if game_instance.game_over { - return Err(GameError::GameIsAlreadyOver); - } - - if game_instance.last_time + self.config.turn_deadline_ms < exec::block_timestamp() { - return Err(GameError::MissedYourTurn); - } - game_instance.board[step as usize] = Some(game_instance.player_mark); - - game_instance.last_time = exec::block_timestamp(); - - if let Some(mark) = get_result(&game_instance.board.clone()) { - game_instance.game_over = true; - if mark == game_instance.player_mark { - game_instance.game_result = Some(GameResult::Player); - send_messages(msg_source, &self.config); - } else { - game_instance.game_result = Some(GameResult::Bot); - send_messages(msg_source, &self.config); - } - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } - - let bot_step = make_move(game_instance); - - if let Some(step_num) = bot_step { - game_instance.board[step_num] = Some(game_instance.bot_mark); - } - - let win = get_result(&game_instance.board.clone()); - - if let Some(mark) = win { - game_instance.game_over = true; - if mark == game_instance.player_mark { - game_instance.game_result = Some(GameResult::Player); - send_messages(msg_source, &self.config); - } else { - game_instance.game_result = Some(GameResult::Bot); - send_messages(msg_source, &self.config); - } - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } else if !game_instance.board.contains(&None) || bot_step.is_none() { - game_instance.game_over = true; - game_instance.game_result = Some(GameResult::Draw); - send_messages(msg_source, &self.config); - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } - - Ok(GameReply::MoveMade { - game: game_instance.clone(), - }) - } - - fn skip(&mut self, msg_source: &ActorId) -> Result { - let Some(game_instance) = self.current_games.get_mut(msg_source) else { - return Err(GameError::GameIsNotStarted); - }; - - if game_instance.game_over { - return Err(GameError::GameIsAlreadyOver); - } - - if game_instance.last_time + self.config.turn_deadline_ms >= exec::block_timestamp() { - return Err(GameError::NotMissedTurnMakeMove); - } - - let bot_step = make_move(game_instance); - game_instance.last_time = exec::block_timestamp(); - - match bot_step { - Some(step_num) => { - game_instance.board[step_num] = Some(game_instance.bot_mark); - let win = get_result(&game_instance.board.clone()); - if let Some(mark) = win { - game_instance.game_over = true; - if mark == game_instance.player_mark { - game_instance.game_result = Some(GameResult::Player); - send_messages(msg_source, &self.config); - } else { - game_instance.game_result = Some(GameResult::Bot); - send_messages(msg_source, &self.config); - } - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } else if !game_instance.board.contains(&None) { - game_instance.game_over = true; - game_instance.game_result = Some(GameResult::Draw); - send_messages(msg_source, &self.config); - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } - } - None => { - game_instance.game_over = true; - game_instance.game_result = Some(GameResult::Draw); - send_messages(msg_source, &self.config); - return Ok(GameReply::GameFinished { - game: game_instance.clone(), - }); - } - } - - Ok(GameReply::MoveMade { - game: game_instance.clone(), - }) - } - - fn remove_game_instance( - &mut self, - msg_source: &ActorId, - account: &ActorId, - ) -> Result { - if *msg_source != exec::program_id() { - return Err(GameError::MessageOnlyForProgram); - } - - let game_instance = self - .current_games - .get(account) - .expect("Unexpected: the game does not exist"); - - if game_instance.game_over { - self.current_games.remove(account); - } - Ok(GameReply::GameInstanceRemoved) - } - - fn remove_instances( - &mut self, - msg_source: &ActorId, - accounts: Option>, - ) -> Result { - if !self.admins.contains(msg_source) { - return Err(GameError::NotAdmin); - } - match accounts { - Some(accounts) => { - for account in accounts { - self.current_games.remove(&account); - } - } - None => { - self.current_games.retain(|_, game_instance| { - exec::block_timestamp() - game_instance.last_time - < self.config.time_interval as u64 * self.config.s_per_block - }); - } - } - Ok(GameReply::GameInstanceRemoved) - } - fn add_admin(&mut self, msg_source: &ActorId, admin: ActorId) -> Result { - if !self.admins.contains(msg_source) { - return Err(GameError::NotAdmin); - } - self.admins.push(admin); - Ok(GameReply::AdminAdded) - } - fn remove_admin( - &mut self, - msg_source: &ActorId, - admin: ActorId, - ) -> Result { - if !self.admins.contains(msg_source) { - return Err(GameError::NotAdmin); - } - self.admins.retain(|id| *id != admin); - Ok(GameReply::AdminRemoved) - } - - fn update_config( - &mut self, - msg_source: &ActorId, - s_per_block: Option, - gas_to_remove_game: Option, - time_interval: Option, - turn_deadline_ms: Option, - ) -> Result { - if !self.admins.contains(msg_source) { - return Err(GameError::NotAdmin); - } - - if let Some(s_per_block) = s_per_block { - self.config.s_per_block = s_per_block; - } - if let Some(gas_to_remove_game) = gas_to_remove_game { - self.config.gas_to_remove_game = gas_to_remove_game; - } - if let Some(time_interval) = time_interval { - self.config.time_interval = time_interval; - } - if let Some(turn_deadline_ms) = turn_deadline_ms { - self.config.turn_deadline_ms = turn_deadline_ms; - } - Ok(GameReply::ConfigUpdated) - } - fn allow_messages( - &mut self, - msg_source: &ActorId, - messages_allowed: bool, - ) -> Result { - if !self.admins.contains(msg_source) { - return Err(GameError::NotAdmin); - } - self.messages_allowed = messages_allowed; - Ok(GameReply::StatusMessagesUpdated) - } -} - -#[gstd::async_main] -async fn main() { - let game = unsafe { GAME.as_mut().expect("`Game` is not initialized.") }; - let action: GameAction = msg::load().expect("Failed to decode `GameAction` message."); - let msg_src = msg::source(); - if !game.messages_allowed && !game.admins.contains(&msg_src) { - msg::reply( - Err::(GameError::MessageProcessingSuspended), - 0, - ) - .expect("Failed to encode or reply with `Result`."); - return; - } - let reply = match action { - GameAction::StartGame => game.start_game(&msg_src), - GameAction::Turn { step } => game.player_move(&msg_src, step), - GameAction::Skip => game.skip(&msg_src), - GameAction::RemoveGameInstance { account_id } => { - game.remove_game_instance(&msg_src, &account_id) - } - GameAction::RemoveGameInstances { accounts } => game.remove_instances(&msg_src, accounts), - GameAction::AddAdmin(admin) => game.add_admin(&msg_src, admin), - GameAction::RemoveAdmin(admin) => game.remove_admin(&msg_src, admin), - GameAction::UpdateConfig { - s_per_block, - gas_to_remove_game, - time_interval, - turn_deadline_ms, - } => game.update_config( - &msg_src, - s_per_block, - gas_to_remove_game, - time_interval, - turn_deadline_ms, - ), - GameAction::AllowMessages(messages_allowed) => { - game.allow_messages(&msg_src, messages_allowed) - } - }; - msg::reply(reply, 0).expect("Failed to encode or reply with `Result`."); -} - -fn turn() -> u8 { - let random_input: [u8; 32] = msg::source().into(); - let (random, _) = exec::random(random_input).expect("Error in getting random number"); - random[0] % 2 -} - -fn make_move(game: &GameInstance) -> Option { - match game.bot_mark { - Mark::O => { - // if on any of the winning lines there are 2 own pieces and 0 strangers - // make move - let step = check_line(&game.board, 2, 0); - if let Some(step_num) = step { - return Some(step_num); - } - - // if on any of the winning lines there are 2 stranger pieces and 0 own - // make move - let step = check_line(&game.board, 0, 2); - if let Some(step_num) = step { - return Some(step_num); - } - // if on any of the winning lines there are 1 own pieces and 0 strangers - // make move - let step = check_line(&game.board, 1, 0); - if let Some(step_num) = step { - return Some(step_num); - } - // if the center is empty, then we occupy the center - if game.board[4] != Some(Mark::O) && game.board[4] != Some(Mark::X) { - return Some(4); - } - // occupy the first cell - if game.board[0] != Some(Mark::O) && game.board[0] != Some(Mark::X) { - return Some(0); - } - } - Mark::X => { - // if on any of the winning lines there are 2 own pieces and 0 strangers - // make move - let step = check_line(&game.board, 0, 2); - - if let Some(step_num) = step { - return Some(step_num); - } - // if on any of the winning lines there are 2 stranger pieces and 0 own - // make move - let step = check_line(&game.board, 2, 0); - if let Some(step_num) = step { - return Some(step_num); - } - // if on any of the winning lines there are 1 own pieces and 0 strangers - // make move - let step = check_line(&game.board, 0, 1); - - if let Some(step_num) = step { - return Some(step_num); - } - // if the center is empty, then we occupy the center - if game.board[4] != Some(Mark::O) && game.board[4] != Some(Mark::X) { - return Some(4); - } - // occupy the first cell - if game.board[0] != Some(Mark::O) && game.board[0] != Some(Mark::X) { - return Some(0); - } - } - } - None -} - -fn check_line(map: &[Option], sum_o: u8, sum_x: u8) -> Option { - for line in VICTORIES.iter() { - let mut o = 0; - let mut x = 0; - for i in 0..3 { - if map[line[i]] == Some(Mark::O) { - o += 1; - } - if map[line[i]] == Some(Mark::X) { - x += 1; - } - } - - if sum_o == o && sum_x == x { - for i in 0..3 { - if map[line[i]] != Some(Mark::O) && map[line[i]] != Some(Mark::X) { - return Some(line[i]); - } - } - } - } - None -} - -fn get_result(map: &[Option]) -> Option { - for i in VICTORIES.iter() { - if map[i[0]] == Some(Mark::X) && map[i[1]] == Some(Mark::X) && map[i[2]] == Some(Mark::X) { - return Some(Mark::X); - } - - if map[i[0]] == Some(Mark::O) && map[i[1]] == Some(Mark::O) && map[i[2]] == Some(Mark::O) { - return Some(Mark::O); - } - } - None -} - -#[no_mangle] -extern fn state() { - let Game { - admins, - current_games, - config, - messages_allowed, - } = unsafe { GAME.take().expect("Failed to get state") }; - let query: StateQuery = msg::load().expect("Unable to load the state query"); - - match query { - StateQuery::Admins => { - msg::reply(StateReply::Admins(admins), 0).expect("Unable to share the state"); - } - StateQuery::Game { player_id } => { - let game: Option = current_games.get(&player_id).cloned(); - msg::reply(StateReply::Game(game), 0).expect("Unable to share the state"); - } - StateQuery::AllGames => { - msg::reply(StateReply::AllGames(current_games.into_iter().collect()), 0) - .expect("Unable to share the state"); - } - StateQuery::Config => { - msg::reply(StateReply::Config(config), 0).expect("Unable to share the state"); - } - StateQuery::MessagesAllowed => { - msg::reply(StateReply::MessagesAllowed(messages_allowed), 0) - .expect("Unable to share the state"); - } - } -} - -fn send_messages(account: &ActorId, config: &Config) { - msg::send_with_gas_delayed( - exec::program_id(), - GameAction::RemoveGameInstance { - account_id: *account, - }, - config.gas_to_remove_game, - 0, - config.time_interval, - ) - .expect("Error in sending message"); -} diff --git a/contracts/tic-tac-toe/gstd/tests/ttt_node_test.rs b/contracts/tic-tac-toe/gstd/tests/ttt_node_test.rs deleted file mode 100644 index 5eef38062..000000000 --- a/contracts/tic-tac-toe/gstd/tests/ttt_node_test.rs +++ /dev/null @@ -1,307 +0,0 @@ -// use futures::executor::block_on; -// use gclient::{EventProcessor, GearApi, Result, WSAddress}; -// use gear_core::ids::ProgramId; -// use gstd::{prelude::*, ActorId}; -// use std::fs::read_to_string; -// use std::mem::size_of; -// use tic_tac_toe_io::*; -// pub const TTT_ID: &str = "ab4a777ce2394b3a8700bf5f61bf0a7d8ab7c7e62f8a446594b58b72fd886ac3"; -// // pub const MARKETPLACE_ID: &str = "9a8d7a221dcfbe21d140a43f4c7f4c87ee54f331992effdd9d8ab9bd54951c3d"; -// // pub const LEADEARBOARD_ID: &str = -// // "76dfd330630c1427025aa76b098dc4ae7c40b6e0701da301aac7a4bf7b06b5a4"; -// // pub const FT_ID: &str = "9a8d7a221dcfbe21d140a43f4c7f4c87ee54f331992effdd9d8ab9bd54951c3d"; - -// // pub trait ApiUtils { -// // fn get_actor_id(&self) -> ActorId; -// // fn get_specific_actor_id(&self, value: impl AsRef) -> ActorId; -// // } - -// impl ApiUtils for GearApi { -// fn get_actor_id(&self) -> ActorId { -// ActorId::new( -// self.account_id() -// .encode() -// .try_into() -// .expect("Unexpected invalid account id length."), -// ) -// } - -// fn get_specific_actor_id(&self, value: impl AsRef) -> ActorId { -// let api_temp = self -// .clone() -// .with(value) -// .expect("Unable to build `GearApi` instance with provided signer."); -// api_temp.get_actor_id() -// } -// } - -// fn read_lines(filename: &str) -> Vec { -// let mut result = Vec::new(); - -// for line in read_to_string(filename).unwrap().lines() { -// result.push(line.to_string()) -// } - -// result -// } - -// #[tokio::test] -// async fn start_ttt_games() -> Result<()> { -// let pid = hex::decode(TTT_ID).unwrap(); -// let pid = ProgramId::decode(&mut pid.as_slice()).unwrap(); - -// let players = read_lines("./accounts_10k.txt"); -// let n = 400; -// let res = futures::join!( -// play_game(pid, &players[0..n]), -// play_game(pid, &players[n..2 * n]), -// play_game(pid, &players[2 * n..3 * n]), -// play_game(pid, &players[3 * n..4 * n]), -// play_game(pid, &players[4 * n..5 * n]), -// play_game(pid, &players[5 * n..6 * n]), -// play_game(pid, &players[6 * n..7 * n]), -// play_game(pid, &players[7 * n..8 * n]), -// play_game(pid, &players[8 * n..9 * n]), -// play_game(pid, &players[9 * n..10 * n]), -// play_game(pid, &players[10 * n..11 * n]), -// play_game(pid, &players[11 * n..12 * n]), -// play_game(pid, &players[12 * n..13 * n]), -// play_game(pid, &players[13 * n..14 * n]), -// play_game(pid, &players[14 * n..15 * n]), -// play_game(pid, &players[15 * n..16 * n]), -// play_game(pid, &players[16 * n..17 * n]), -// play_game(pid, &players[17 * n..18 * n]), -// play_game(pid, &players[18 * n..19 * n]), -// play_game(pid, &players[19 * n..20 * n]), -// play_game(pid, &players[20 * n..21 * n]), -// play_game(pid, &players[21 * n..22 * n]), -// play_game(pid, &players[22 * n..23 * n]), -// play_game(pid, &players[23 * n..24 * n]), -// play_game(pid, &players[24 * n..25 * n]), -// ); - -// if let Err(error) = res.0 { -// println!("{:?}", error); -// } - -// Ok(()) -// } - -// async fn play_game(ttt_pid: ProgramId, accounts: &[String]) -> Result<()> { -// let mut api = GearApi::init(WSAddress::new("wss://vit.vara-network.io", 443)).await?; - -// let accounts = accounts.to_vec(); -// let mut listener = api.subscribe().await?; - -// for (i, account) in accounts.iter().enumerate() { -// println!("Number {:?}", i); -// api = api -// .clone() -// .with(account) -// .expect("Unable to log with indicated account"); -// let player_id = api.get_actor_id(); - -// let mut game; - -// let reply: StateReply = api -// .read_state(ttt_pid, StateQuery::Game { player_id }.encode()) -// .await -// .expect("Unable to decode TTT state"); -// let (mut game_is_started, mut game_is_over) = (false, false); - -// if let StateReply::Game(game) = reply { -// match game { -// Some(game) => { -// println!("{} SENDING MSG START GAME", i); -// let (message_id, _) = api -// .send_message(ttt_pid, GameAction::StartGame, 100_000_000_000, 0, false) -// .await?; - -// let (_, raw_reply, returned_value) = -// listener.reply_bytes_on(message_id).await?; - -// match raw_reply { -// Ok(raw_reply) => { -// let decoded = GameReply::decode(&mut raw_reply.as_slice()); -// match decoded { -// Ok(reply) => { -// if reply == GameReply::GameStarted { -// println!("Game is started for {}", i); -// } -// } -// Err(error) => { -// println!("ERROR {:?}", error); -// } -// } -// } -// Err(error) => { -// println!("ERROR: {:?}", error); -// } -// }; - -// game_is_started = true; -// } -// None => {} -// } -// } else { -// println!("Unexpected: received wrong state reply"); -// } - -// if !game_is_started && !in_leaderboad {} - -// if !game_is_over && game_is_started { -// while true { -// state = api -// .read_state(ttt_pid) -// .await -// .expect("Unable to decode TTT state"); -// (_, game) = state -// .current_games -// .into_iter() -// .find(|(id, game)| id == &account_id) -// .expect("No game for this account"); - -// if game.game_over { -// println!("Game is overwith result: {:?}", game.game_result); -// break; -// } -// let mut step = None; -// for (i, cell) in game.board.clone().iter().enumerate() { -// if cell.is_none() { -// step = Some(i as u8); -// break; -// } -// } - -// if let Some(step) = step { -// println!("SENDING MSG PLAY"); -// println!("BOARD {:?} ", game.board); -// println!("Step {:?} ", step); -// let gas = api -// .calculate_handle_gas( -// None, -// ttt_pid, -// GameAction::Turn { step }.encode(), -// 0, -// true, -// ) -// .await; -// match gas { -// Ok(gas) => { -// println!("Gas {:?} ", gas.burned); -// let (message_id, _) = api -// .send_message( -// ttt_pid, -// GameAction::Turn { step }, -// 100_000_000_000, -// 0, -// ) -// .await?; -// } -// Err(_) => { -// let (message_id, _) = api -// .send_message(ttt_pid, GameAction::Skip, 100_000_000_000, 0) -// .await?; -// } -// } -// }; -// } -// } - -// println!("==============="); -// println!( -// "NUMBER OF GAMES {:?} AND NUMBER OF USERS {:?}", -// games_len, users_len -// ); -// } - -// Ok(()) -// } - -// // #[tokio::test] -// // async fn account_to_hex() -> Result<()> { -// // let api: GearApi = GearApi::init(WSAddress::new("wss://vit.vara-network.io", 443)).await?; - -// // let minters = read_lines("./participants_10k_1"); - -// // for minter in minters.iter() { -// // // println!("{:?}", minter); -// // let minter_id = api.get_specific_actor_id(minter); - -// // println!("{:?}", hex::encode(minter_id)); -// // } - -// // Ok(()) -// // } - -// // #[tokio::test] -// // async fn calculate_storage_key() -> Result<()> { -// // let api = GearApi::init(WSAddress::new("wss://vit.vara-network.io", 443)).await?; -// // //let api = GearApi::dev().await?; - -// // // let address = "544704d31bcf9beec7751bb4ecc73f147d79292387eaeb6202b647cf9f4d8411"; -// // // let pid = hex::decode(address).unwrap(); -// // // let address = ActorId::decode(&mut pid.as_slice()).unwrap(); -// // // let address_bytes: [u8; 32] = address.into(); - -// // let address = api.get_actor_id(); -// // let address_bytes: [u8; 32] = address.into(); -// // let i = u16::from_be_bytes(address_bytes[0..2].try_into().unwrap()) % 60; -// // println!( -// // "{:?}", -// // u16::from_be_bytes(address_bytes[0..2].try_into().unwrap()) -// // ); -// // println!("{:?}", i); -// // Ok(()) -// // } - -// // #[tokio::test] -// // async fn add_ttt_users() -> Result<()> { -// // let api = GearApi::init(WSAddress::new("wss://vit.vara-network.io", 443)).await?; -// // //let mut api = GearApi::dev().await?; - -// // let pid = hex::decode(TTT_ID).unwrap(); -// // let pid = ProgramId::decode(&mut pid.as_slice()).unwrap(); - -// // let users = read_lines("./participants_10k_3"); - -// // let mut messages = Vec::new(); - -// // let num_of_users_per_msg = 25 as usize; -// // let num = 400 as usize; - -// // // let state: GameState = api -// // // .read_state(pid) -// // // .await -// // // .expect("Unable to decode TTT state"); - -// // // println!("{:?}", state); - -// // for i in 0..num { -// // let mut users_per_msg = Vec::new(); -// // for j in 0..num_of_users_per_msg { -// // let actor_id = api.get_specific_actor_id(&users[i * num_of_users_per_msg + j]); -// // let user = User { -// // name: String::from("aaaaaaaaaaaaaa"), -// // total_wins: 100, -// // total_games: 10000, -// // points: 20000, -// // authorised: Some(10), -// // }; -// // users_per_msg.push((actor_id, user)); -// // } -// // let payload = GameAction::AddTestUsers(users_per_msg).encode(); -// // let message: (ProgramId, Vec, u64, u128) = (pid, payload, 240_000_000_000, 0); -// // messages.push(message); -// // } - -// // let msg_list = messages.chunks(40); -// // let rpc_nonce = api.rpc_nonce().await?; -// // // api.set_nonce(rpc_nonce + 1000); -// // for (i, msgs) in msg_list.enumerate() { -// // println!("Sending messages {}", i); -// // api.send_message_bytes_batch(msgs.to_vec()).await?; -// // } - -// // Ok(()) -// // } diff --git a/contracts/tic-tac-toe/sails/README.md b/contracts/tic-tac-toe/sails/README.md deleted file mode 100644 index 9f41fd0b0..000000000 --- a/contracts/tic-tac-toe/sails/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![Open in Gitpod](https://img.shields.io/badge/Open_in-Gitpod-white?logo=gitpod)](https://gitpod.io/#FOLDER=vara-man/https://github.com/gear-foundation/dapps) -[![Docs](https://img.shields.io/github/actions/workflow/status/gear-foundation/dapps/contracts.yml?logo=rust&label=docs)](https://dapps.gear.rs/vara_man_io) - -# Sails Tic-Tac-Toe - -### 🏗️ Building - -```sh -cargo b -r -p "tic-tac-toe-wasm" -``` - -### ✅ Testing - -```sh -cargo t -r -p "tic-tac-toe-app" -``` diff --git a/contracts/tic-tac-toe/sails/wasm/Cargo.toml b/contracts/tic-tac-toe/wasm/Cargo.toml similarity index 100% rename from contracts/tic-tac-toe/sails/wasm/Cargo.toml rename to contracts/tic-tac-toe/wasm/Cargo.toml diff --git a/contracts/tic-tac-toe/sails/wasm/build.rs b/contracts/tic-tac-toe/wasm/build.rs similarity index 100% rename from contracts/tic-tac-toe/sails/wasm/build.rs rename to contracts/tic-tac-toe/wasm/build.rs diff --git a/contracts/tic-tac-toe/sails/wasm/src/lib.rs b/contracts/tic-tac-toe/wasm/src/lib.rs similarity index 100% rename from contracts/tic-tac-toe/sails/wasm/src/lib.rs rename to contracts/tic-tac-toe/wasm/src/lib.rs diff --git a/contracts/tic-tac-toe/sails/wasm/tic-tac-toe.idl b/contracts/tic-tac-toe/wasm/tic-tac-toe.idl similarity index 100% rename from contracts/tic-tac-toe/sails/wasm/tic-tac-toe.idl rename to contracts/tic-tac-toe/wasm/tic-tac-toe.idl From bd2e0d6fd3891d6f902dbd76c6ba59a01b96e7bf Mon Sep 17 00:00:00 2001 From: MedovTimur Date: Thu, 19 Sep 2024 10:44:11 +0300 Subject: [PATCH 2/2] fixed tic-tac-toe tests --- contracts/tic-tac-toe/app/tests/test.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/tic-tac-toe/app/tests/test.rs b/contracts/tic-tac-toe/app/tests/test.rs index 54d2e94c4..dc900e803 100644 --- a/contracts/tic-tac-toe/app/tests/test.rs +++ b/contracts/tic-tac-toe/app/tests/test.rs @@ -10,7 +10,7 @@ async fn test_play_game() { let program_space = GTestRemoting::new(100.into()); program_space.system().init_logger(); let code_id = program_space.system().submit_code_file( - "../../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", + "../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", ); let tic_tac_toe_factory = Factory::new(program_space.clone()); @@ -68,7 +68,7 @@ async fn add_and_remove_admin() { let program_space = GTestRemoting::new(100.into()); program_space.system().init_logger(); let code_id = program_space.system().submit_code_file( - "../../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", + "../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", ); let tic_tac_toe_factory = Factory::new(program_space.clone()); @@ -113,7 +113,7 @@ async fn allow_messages() { let program_space = GTestRemoting::new(100.into()); program_space.system().init_logger(); let code_id = program_space.system().submit_code_file( - "../../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", + "../../target/wasm32-unknown-unknown/release/tic_tac_toe_wasm.opt.wasm", ); let tic_tac_toe_factory = Factory::new(program_space.clone());